// File: /workspace/github_c_makefile_star2_O1/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 0x3f52
movq %rsi, %r15
movq 0x10(%rsi), %rdi
callq 0x1150
testl %eax, %eax
je 0x3f5b
movl %eax, %ebx
movl %eax, %ebp
leaq 0x729(%rip), %rdi       # 0x457e
xorl %r14d, %r14d
xorl %eax, %eax
callq 0x1090
movq 0x8(%r15), %rdi
callq 0x128c
leaq 0x729(%rip), %rdi       # 0x4598
callq 0x1060
movq %rsp, %r15
movl $0x400, %edx            # imm = 0x400
movq %r15, %rdi
xorl %esi, %esi
callq 0x10b0
leaq 0x70f(%rip), %rdi       # 0x459c
xorl %eax, %eax
callq 0x1090
movl %r14d, %edi
movq %r15, %rsi
callq 0x12f5
incl %r14d
cmpl %r14d, %ebx
jne 0x3e94
leaq 0x6ea(%rip), %rdi       # 0x4598
callq 0x1060
shrl $0x2, %ebx
leaq 0x704(%rip), %rdi       # 0x45c1
xorl %eax, %eax
callq 0x1090
movl %ebp, %edi
movl %ebx, %esi
callq 0x13aa
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
testl %eax, %eax
js 0x3f6f
leaq 0x6b6(%rip), %rdi       # 0x4598
callq 0x1060
leaq 0x70e(%rip), %rdi       # 0x45fc
xorl %eax, %eax
callq 0x1090
movl %ebp, %edi
callq 0x1430
testl %eax, %eax
js 0x3f78
leaq 0x691(%rip), %r15       # 0x4598
movq %r15, %rdi
callq 0x1060
leaq 0x723(%rip), %rdi       # 0x4639
xorl %eax, %eax
callq 0x1090
movl %ebx, %edi
callq 0x1574
testl %eax, %eax
js 0x3f81
movq %r15, %rdi
callq 0x1060
leaq 0x745(%rip), %rdi       # 0x467c
xorl %eax, %eax
callq 0x1090
movl $0x64, %edi
movl $0x7, %esi
callq 0x1a00
xorl %r14d, %r14d
jmp 0x3f88
leaq 0x5d1(%rip), %rdi       # 0x452a
jmp 0x3f62
leaq 0x5eb(%rip), %rdi       # 0x454d
callq 0x1060
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
jmp 0x3f97
leaq 0x666(%rip), %r15       # 0x45dc
jmp 0x3f88
leaq 0x699(%rip), %r15       # 0x4618
jmp 0x3f88
leaq 0x6d0(%rip), %r15       # 0x4658
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