// File: /workspace/github_cpp_makefile_star2_O3/DaCasBe[P]Gestion-de-asignaturas-mediante-listas-doblemente-enlazadas-ordenadas/principalAsignatura.cpp
// Function: main
int main(){

	ed::Asignatura asignatura;

	int opcion;

	do{

		// Se elige la opción del menún
		opcion = ed::menu();		

		std::cout << CLEAR_SCREEN;
		LUGAR(5,1);

		// Se ejecuta la opción del menú elegida
		switch(opcion)
		{
			case 0: 
				std::cout << INVERSE;
				std::cout << "Fin del programa" << std::endl;
				std::cout << RESET;
			break;

			case 1: 
					std::cout << "[1] Comprobar si la asignatura está vacía" << std::endl;
					ed::comprobarAsignaturaVacia(asignatura);
					break;

			case 2: 
				  std::cout << "[2] Cargar la asignatura de un fichero" << std::endl;
					ed::cargarAsignatura(asignatura);
				break;

			case 3: 
				  std::cout << "[3] Grabar la asignatura en un fichero" << std::endl;
					ed::grabarAsignatura(asignatura);
					break;

			case 4: 
			  	std::cout << "[4] Consultar datos de la asignatura: " << std::endl; 
					ed::consultarAsignatura(asignatura);
					break;

			case 5: 
					std::cout << "[5] Modificar datos de la asignatura: código o nombre" << std::endl;
				  ed::modificarAsignatura(asignatura);
					break;

			case 6: 
					std::cout << "[6] Borrar una asignatura" << std::endl;
				  ed::borrarAsignatura(asignatura);
					break;


			case 7: 
					std::cout << "[7] Consultar un estudiante" << std::endl;
			    consultarEstudianteDeAsignatura(asignatura);
					break;

			case 8: 
					std::cout << "[8] Insertar un estudiante" << std::endl;
				  insertarEstudianteEnAsignatura(asignatura);
					break;

			case 9: 
					std::cout << "[9] Modificar un estudiante" << std::endl;
				  modificarEstudianteDeAsignatura(asignatura);
					break;

			case 10: 
					std::cout << "[10] Borrar un estudiante" << std::endl;
					borrarEstudianteDeAsignatura(asignatura);
					break;

			default:
			    LUGAR(25,25);
					std::cout << INVERSE;
					std::cout << "Opción incorrecta ";
					std::cout << RESET;
			  	std::cout << RED;
					std::cout << " --> " << opcion << std::endl;
					std::cout << RESET;
     }
  
    if (opcion !=0)
    {
		 LUGAR(30,25);
		 std::cout << "pulse ";
		 std::cout << UNDERLINE;
		 std::cout << IYELLOW;
		 std::cout << "ENTER";
		 std::cout << RESET;
		 std::cout << " para ";
		 std::cout << INVERSE;
		 std::cout << "continuar"; 
		 std::cout << RESET;
		 getchar();
		 std::cout << CLEAR_SCREEN;
    }
	  }while(opcion!=0);

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
leaq -0x80(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x19a1(%rip), %rdx      # 0x8d29
leaq -0x90(%rbp), %rdi
movq %rdx, %rsi
callq 0x396a
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rdx
xorl %esi, %esi
callq 0x7988
movq -0x90(%rbp), %rdi
cmpq %r14, %rdi
je 0x73ba
callq 0x2130
movq 0x4c0f(%rip), %rbx      # 0xbfd0
leaq 0x1920(%rip), %r14      # 0x8ce8
leaq 0x191e(%rip), %r15      # 0x8ced
leaq 0xc50(%rip), %r13       # 0x8026
callq 0x4714
movl %eax, %r12d
movl $0x4, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2180
movq %r15, %rdi
movl $0x5, %esi
movl $0x1, %edx
xorl %eax, %eax
callq 0x2050
cmpl $0xa, %r12d
ja 0x76f9
movl %r12d, %eax
leaq 0x201a(%rip), %rcx      # 0x9430
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x2b, %edx
movq %rbx, %rdi
leaq 0x18fc(%rip), %rsi      # 0x8d2a
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x49d7
jmp 0x77b2
movl $0x19, %edx
movq %rbx, %rdi
leaq 0x1a1d(%rip), %rsi      # 0x8e94
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x6e1b
jmp 0x77b2
movl $0x26, %edx
movq %rbx, %rdi
leaq 0x18bd(%rip), %rsi      # 0x8d7d
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x4dc2
jmp 0x77b2
movl $0x26, %edx
movq %rbx, %rdi
leaq 0x1f69(%rip), %rsi      # 0x9472
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x4fe8
jmp 0x77b2
movl $0x1a, %edx
movq %rbx, %rdi
leaq 0x190b(%rip), %rsi      # 0x8e5d
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x5f90
jmp 0x77b2
movl $0x19, %edx
movq %rbx, %rdi
leaq 0x188c(%rip), %rsi      # 0x8e27
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x4c72
jmp 0x77b2
movl $0x26, %edx
movq %rbx, %rdi
leaq 0x1772(%rip), %rsi      # 0x8d56
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x4ace
jmp 0x77b2
movl $0x1b, %edx
movq %rbx, %rdi
leaq 0x1814(%rip), %rsi      # 0x8e41
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x58d5
jmp 0x77b2
movl $0x1b, %edx
movq %rbx, %rdi
leaq 0x1802(%rip), %rsi      # 0x8e78
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x6278
jmp 0x77b2
movl $0x36, %edx
movq %rbx, %rdi
leaq 0x1731(%rip), %rsi      # 0x8df0
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x5380
jmp 0x77b2
movq %r15, %rdi
movl $0x19, %esi
movl $0x19, %edx
xorl %eax, %eax
callq 0x2050
movl $0x4, %edx
movq %rbx, %rdi
leaq 0x1d40(%rip), %rsi      # 0x945c
callq 0x2180
movl $0x13, %edx
movq %rbx, %rdi
leaq 0x1d69(%rip), %rsi      # 0x9499
callq 0x2180
movl $0x4, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x2180
movl $0x7, %edx
movq %rbx, %rdi
leaq 0x1990(%rip), %rsi      # 0x90e4
callq 0x2180
movl $0x5, %edx
movq %rbx, %rdi
leaq 0x1d45(%rip), %rsi      # 0x94ad
callq 0x2180
movq %rbx, %rdi
movl %r12d, %esi
callq 0x2210
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movl $0x4, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x2180
movq %r15, %rdi
movl $0x1e, %esi
movl $0x19, %edx
xorl %eax, %eax
callq 0x2050
movl $0x6, %edx
movq %rbx, %rdi
leaq 0x1cde(%rip), %rsi      # 0x94b3
callq 0x2180
movl $0x4, %edx
movq %rbx, %rdi
leaq 0x1cd1(%rip), %rsi      # 0x94ba
callq 0x2180
movl $0x7, %edx
movq %rbx, %rdi
leaq 0x888(%rip), %rsi       # 0x8085
callq 0x2180
movl $0x5, %edx
movq %rbx, %rdi
leaq 0x1cae(%rip), %rsi      # 0x94bf
callq 0x2180
movl $0x4, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x2180
movl $0x6, %edx
movq %rbx, %rdi
leaq 0x1c90(%rip), %rsi      # 0x94c5
callq 0x2180
movl $0x4, %edx
movq %rbx, %rdi
leaq 0x1c13(%rip), %rsi      # 0x945c
callq 0x2180
movl $0x9, %edx
movq %rbx, %rdi
leaq 0x1c6f(%rip), %rsi      # 0x94cc
callq 0x2180
movl $0x4, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x2180
callq 0x21a0
movl $0x4, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2180
jmp 0x73d6
movq 0x473d(%rip), %rdi      # 0xbfd0
leaq 0x1bc2(%rip), %rsi      # 0x945c
movl $0x4, %edx
callq 0x2180
movq 0x4725(%rip), %rbx      # 0xbfd0
leaq 0x1baf(%rip), %rsi      # 0x9461
movl $0x10, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x46f3(%rip), %rdi      # 0xbfd0
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x46df(%rip), %rdi      # 0xbfd0
leaq 0x72e(%rip), %rsi       # 0x8026
movl $0x4, %edx
callq 0x2180
leaq 0x4417(%rip), %rax      # 0xbd20
addq $0x10, %rax
leaq -0x40(%rbp), %rdi
movq %rax, -0x30(%rdi)
callq 0x7ab6
leaq -0x50(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x792c
callq 0x2130
xorl %eax, %eax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0x50(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x795e
jmp 0x7978
movq %rax, %rbx
movq -0x90(%rbp), %rdi
cmpq %r14, %rdi
je 0x7978
callq 0x2130
jmp 0x7978
movq %rax, %rbx
jmp 0x7978
jmp 0x796c
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x7a5c
movq %rbx, %rdi
callq 0x2220
movq %rax, %rdi
callq 0x3692