// File: /workspace/github_c_makefile_star2_O3/carlitosmarin[P]Sistema-Ficheros-SOII/simulacion.c
// Function: proceso
void proceso(int pid){
	char pidDirectorio[30];
	sprintf(pidDirectorio,"proceso_%d/",pid);

	char camino[200];
	strcpy(camino,directorio);
	strcat(camino, pidDirectorio);

	if(mi_creat(camino, 7) != 0){ //Creamos el directorio del proceso
		printf("ERROR: El directorio (%s) no se ha podido crear \n", camino);
		exit(1);
	}

	char trayecto[200];
	strcpy(trayecto, camino);
	sprintf(camino, "%sprueba.dat", camino); //El nombre del fichero
	if(mi_creat(camino, 7) != 0){ //Creamos pureba.dat
		printf("ERROR: El fichero (%s) no se ha podido crear \n", camino);
		exit(1);
	}

	char buffer[64*200];
	memset(buffer,0,tamBloque);

	printf("Directorio %s:\n", camino);
	if(mi_dir (trayecto,(char *)buffer) >= 0) {
		printf("%c[%d;%dmTipo\tPerm.\tmTime\t\t\tNombre%c[%dm\n",27,0,32,27,0);
		puts("-------------------------------------------------------------------");
		printf("%s\n", buffer);
	} else puts("Error: No se ha podido llevar a cabo mi_ls\n");

	struct registro registro;
	registro.nEscritura = 0;
	srand(pid);
	
	//Antes de escriibr, solo los creamos
	int i;
	for(i = 0; i < 50; i++){//Escribimos los 50 registros
	 	registro.fecha=time(NULL); registro.pid=getpid(); registro.nEscritura=i+1; registro.posicion=rand()%posMax;
		srand(registro.posicion); //Actualizamos la semilla
		if(mi_write(camino,&registro,registro.posicion*sizeof(struct registro),sizeof(struct registro)) < 0){
			printf("ERROR: Al escribir en %s\n", camino);
			exit(1);
		}
	}
	exit(0);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x33d8, %rsp           # imm = 0x33D8
movl %edi, %ebx
leaq 0x1769(%rip), %rsi      # 0x5528
leaq 0xe0(%rsp), %r14
movq %r14, %rdi
movl %ebx, %edx
xorl %eax, %eax
callq 0x11b0
leaq 0x4376(%rip), %rsi      # 0x8150
leaq 0x10(%rsp), %r15
movq %r15, %rdi
callq 0x1040
movq %r15, %rdi
movq %r14, %rsi
callq 0x11a0
movq %r15, %rdi
movl $0x7, %esi
callq 0x318c
testl %eax, %eax
jne 0x3ebc
leaq 0x100(%rsp), %rdi
leaq 0x10(%rsp), %r14
movq %r14, %rsi
callq 0x1040
leaq 0x1743(%rip), %rsi      # 0x5566
movq %r14, %rdi
movq %r14, %rdx
xorl %eax, %eax
callq 0x11b0
movq %r14, %rdi
movl $0x7, %esi
callq 0x318c
testl %eax, %eax
jne 0x3ec8
leaq 0x1d0(%rsp), %r14
movl $0x400, %edx            # imm = 0x400
movq %r14, %rdi
xorl %esi, %esi
callq 0x10d0
leaq 0x173f(%rip), %rdi      # 0x55a2
leaq 0x10(%rsp), %rsi
xorl %eax, %eax
callq 0x10b0
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0x3274
testl %eax, %eax
js 0x3ed4
leaq 0x1728(%rip), %rdi      # 0x55b2
movl $0x1b, %esi
xorl %edx, %edx
movl $0x20, %ecx
movl $0x1b, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
callq 0x10b0
leaq 0x172f(%rip), %rdi      # 0x55dc
callq 0x1060
leaq 0x1d0(%rsp), %rdi
jmp 0x3edb
leaq 0x1671(%rip), %rdi      # 0x5534
jmp 0x3f69
leaq 0x16a4(%rip), %rdi      # 0x5573
jmp 0x3f69
leaq 0x1745(%rip), %rdi      # 0x5620
callq 0x1060
movq %rsp, %r14
movl $0x0, 0x8(%r14)
movl %ebx, %edi
callq 0x1110
movl $0x1, %ebp
leaq 0x10(%rsp), %rbx
cmpl $0x33, %ebp
je 0x3f7f
xorl %edi, %edi
callq 0x1160
movl %eax, (%rsp)
callq 0x1080
movl %eax, 0x4(%rsp)
movl %ebp, 0x8(%rsp)
callq 0x11f0
movslq %eax, %rdi
imulq $0x431bde83, %rdi, %rax # imm = 0x431BDE83
movq %rax, %rcx
shrq $0x3f, %rcx
sarq $0x31, %rax
addl %ecx, %eax
imull $0x7a120, %eax, %eax    # imm = 0x7A120
subl %eax, %edi
movl %edi, 0xc(%rsp)
callq 0x1110
movl 0xc(%rsp), %edx
shll $0x4, %edx
movq %rbx, %rdi
movq %r14, %rsi
movl $0x10, %ecx
callq 0x3c0a
incl %ebp
testl %eax, %eax
jns 0x3efc
leaq 0x16e3(%rip), %rdi      # 0x564c
leaq 0x10(%rsp), %rsi
xorl %eax, %eax
callq 0x10b0
movl $0x1, %edi
callq 0x11c0
xorl %edi, %edi
callq 0x11c0