// File: /workspace/github_c_makefile_star2_O2/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 0x3c51
movq %rsi, %r15
movq 0x10(%rsi), %rdi
callq 0x1150
testl %eax, %eax
je 0x3d02
movl %eax, %ebx
movl %eax, %ebp
leaq 0x97f(%rip), %rdi       # 0x457c
xorl %r14d, %r14d
xorl %eax, %eax
callq 0x1090
movq 0x8(%r15), %rdi
callq 0x128c
leaq 0x97f(%rip), %rdi       # 0x4596
callq 0x1060
movq %rsp, %r15
movl $0x400, %edx            # imm = 0x400
movq %r15, %rdi
xorl %esi, %esi
callq 0x10b0
leaq 0x965(%rip), %rdi       # 0x459a
xorl %eax, %eax
callq 0x1090
cmpl %r14d, %ebx
je 0x3c5d
movl %r14d, %edi
movq %r15, %rsi
callq 0x12f3
incl %r14d
jmp 0x3c3c
leaq 0x8d0(%rip), %rdi       # 0x4528
jmp 0x3d09
leaq 0x932(%rip), %rdi       # 0x4596
callq 0x1060
shrl $0x2, %ebx
leaq 0x94c(%rip), %rdi       # 0x45bf
xorl %eax, %eax
callq 0x1090
movl %ebp, %edi
movl %ebx, %esi
callq 0x13a2
pushq $-0x1
popq %r14
testl %eax, %eax
js 0x3d14
leaq 0x900(%rip), %rdi       # 0x4596
callq 0x1060
leaq 0x958(%rip), %rdi       # 0x45fa
xorl %eax, %eax
callq 0x1090
movl %ebp, %edi
callq 0x1425
testl %eax, %eax
js 0x3d1d
leaq 0x8db(%rip), %r15       # 0x4596
movq %r15, %rdi
callq 0x1060
leaq 0x96d(%rip), %rdi       # 0x4637
xorl %eax, %eax
callq 0x1090
movl %ebx, %edi
callq 0x1559
testl %eax, %eax
js 0x3d26
movq %r15, %rdi
callq 0x1060
leaq 0x98f(%rip), %rdi       # 0x467a
xorl %eax, %eax
callq 0x1090
pushq $0x64
popq %rdi
pushq $0x7
popq %rsi
callq 0x19bf
xorl %r14d, %r14d
jmp 0x3d2d
leaq 0x842(%rip), %rdi       # 0x454b
callq 0x1060
pushq $-0x1
popq %r14
jmp 0x3d3c
leaq 0x8bf(%rip), %r15       # 0x45da
jmp 0x3d2d
leaq 0x8f2(%rip), %r15       # 0x4616
jmp 0x3d2d
leaq 0x929(%rip), %r15       # 0x4656
movq %r15, %rdi
callq 0x1060
xorl %eax, %eax
callq 0x12c8
movl %r14d, %eax
addq $0x408, %rsp            # imm = 0x408
popq %rbx
popq %r14
popq %r15
popq %rbp
retq