// File: /workspace/github_c_makefile_star2_O3/carlitosmarin[P]Sistema-Ficheros-SOII/mi_mkfs.c
// Function: main
int main (int argc, char **argv) {
	if (argc != 3) {
		puts("Número de parametros incorrectos\n");
		return -1;
	}

	unsigned int cantidad_bloques = atoi(argv[2]); //argv[2] = cantidad_bloques

	if(cantidad_bloques <= 0) {
		puts("ERROR: El número de bloques debe ser mayor a 0\n");
		return -1;
	}

	//Montamos el dispositivo
	printf("Montando el dispositivo..");
	bmount (argv[1]); //argv[1] = nombre_fichero
	puts(" OK");

	unsigned char buf[tamBloque];
	memset(buf,0,tamBloque);
	printf("Reiniciando memoria del dispistivo..");
	unsigned int bucle;
	for (bucle = 0; bucle < cantidad_bloques; bucle++) bwrite (bucle, buf); //Llenamos bloques con 0
	puts(" OK");

	int inodos = cantidad_bloques/4; //Calcularemos los inodos

	printf("Iniciando el SuperBloque..");
	if(initSB(cantidad_bloques,inodos) < 0) {
		puts("Error al iniciar el SuperBloque");
		bumount (); //Desmontamos el dispositivo
		return -1;
	}
	puts(" OK");

	printf("Iniciando el Mapa de Bits..");
	if(initMB(cantidad_bloques) < 0) {
		puts("Error al iniciar el Mapa de Bits");
		bumount (); //Desmontamos el dispositivo
		return -1;
	}
	puts(" OK");

	printf("Iniciando el Array de inodos..");
	if(initAI(inodos) < 0) {
		puts("Error al iniciar el Array de inodos");
		bumount (); //Desmontamos el dispositivo
		return -1;
	}
	puts(" OK");

	printf("Reservando el Inodo Raiz..");
	reservar_inodo ('d',7);
	puts(" OK");


	//Desmontamos el dispositivo
	bumount ();

	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x408, %rsp            # imm = 0x408
cmpl $0x3, %edi
jne 0x3e3e
movq %rsi, %r15
movq 0x10(%rsi), %rdi
callq 0x1150
testl %eax, %eax
je 0x3e47
movl %eax, %ebx
movl %eax, %ebp
leaq 0x83b(%rip), %rdi       # 0x457c
xorl %r14d, %r14d
xorl %eax, %eax
callq 0x1090
movq 0x8(%r15), %rdi
callq 0x128c
leaq 0x83b(%rip), %rdi       # 0x4596
callq 0x1060
movq %rsp, %r15
movl $0x400, %edx            # imm = 0x400
movq %r15, %rdi
xorl %esi, %esi
callq 0x10b0
leaq 0x821(%rip), %rdi       # 0x459a
xorl %eax, %eax
callq 0x1090
movl %r14d, %edi
movq %r15, %rsi
callq 0x12f5
incl %r14d
cmpl %r14d, %ebx
jne 0x3d80
leaq 0x7fc(%rip), %rdi       # 0x4596
callq 0x1060
shrl $0x2, %ebx
leaq 0x816(%rip), %rdi       # 0x45bf
xorl %eax, %eax
callq 0x1090
movl %ebp, %edi
movl %ebx, %esi
callq 0x13aa
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
testl %eax, %eax
js 0x3e5b
leaq 0x7c8(%rip), %rdi       # 0x4596
callq 0x1060
leaq 0x820(%rip), %rdi       # 0x45fa
xorl %eax, %eax
callq 0x1090
movl %ebp, %edi
callq 0x1430
testl %eax, %eax
js 0x3e64
leaq 0x7a3(%rip), %r15       # 0x4596
movq %r15, %rdi
callq 0x1060
leaq 0x835(%rip), %rdi       # 0x4637
xorl %eax, %eax
callq 0x1090
movl %ebx, %edi
callq 0x1574
testl %eax, %eax
js 0x3e6d
movq %r15, %rdi
callq 0x1060
leaq 0x857(%rip), %rdi       # 0x467a
xorl %eax, %eax
callq 0x1090
movl $0x64, %edi
movl $0x7, %esi
callq 0x1a04
xorl %r14d, %r14d
jmp 0x3e74
leaq 0x6e3(%rip), %rdi       # 0x4528
jmp 0x3e4e
leaq 0x6fd(%rip), %rdi       # 0x454b
callq 0x1060
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
jmp 0x3e83
leaq 0x778(%rip), %r15       # 0x45da
jmp 0x3e74
leaq 0x7ab(%rip), %r15       # 0x4616
jmp 0x3e74
leaq 0x7e2(%rip), %r15       # 0x4656
movq %r15, %rdi
callq 0x1060
xorl %eax, %eax
callq 0x12ca
movl %r14d, %eax
addq $0x408, %rsp            # imm = 0x408
popq %rbx
popq %r14
popq %r15
popq %rbp
retq