// File: 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
subq $0x110, %rsp            # imm = 0x110
movl $0x0, -0x4(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0x90(%rbp)
callq 0x32c0
movq -0x90(%rbp), %rdx
leaq 0x25d9(%rip), %rsi      # 0xbe79
leaq -0x70(%rbp), %rdi
callq 0x3210
jmp 0x98ab
leaq -0x50(%rbp), %rdi
xorl %esi, %esi
leaq -0x70(%rbp), %rdx
callq 0x9ea0
jmp 0x98bc
leaq -0x70(%rbp), %rdi
callq 0x3120
jmp 0x98c7
leaq -0x71(%rbp), %rdi
callq 0x31d0
callq 0x6690
movl %eax, -0x94(%rbp)
jmp 0x98dd
movl -0x94(%rbp), %eax
movl %eax, -0x88(%rbp)
movq 0x66e0(%rip), %rdi      # 0xffd0
leaq 0x2541(%rip), %rsi      # 0xbe38
callq 0x31a0
jmp 0x98fe
leaq 0x2538(%rip), %rdi      # 0xbe3d
xorl %eax, %eax
movl $0x5, %esi
movl $0x1, %edx
callq 0x3050
jmp 0x9918
movl -0x88(%rbp), %eax
movq %rax, -0xa0(%rbp)
subq $0xa, %rax
ja 0x9c88
movq -0xa0(%rbp), %rax
leaq 0x2c43(%rip), %rcx      # 0xc580
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x9973
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x3120
jmp 0x9971
jmp 0x9973
leaq -0x71(%rbp), %rdi
callq 0x31d0
jmp 0x9e85
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x9f70
jmp 0x9e83
movq 0x662b(%rip), %rdi      # 0xffd0
leaq 0x2c00(%rip), %rsi      # 0xc5ac
callq 0x31a0
jmp 0x99b3
movq 0x6616(%rip), %rdi      # 0xffd0
leaq 0x2bf0(%rip), %rsi      # 0xc5b1
callq 0x31a0
movq %rax, -0xa8(%rbp)
jmp 0x99cf
movq -0xa8(%rbp), %rdi
movq 0x65e3(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x99e4
movq 0x65e5(%rip), %rdi      # 0xffd0
leaq 0x163c(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x99f9
jmp 0x9d56
movq 0x65cb(%rip), %rdi      # 0xffd0
leaq 0x246e(%rip), %rsi      # 0xbe7a
callq 0x31a0
movq %rax, -0xb0(%rbp)
jmp 0x9a1a
movq -0xb0(%rbp), %rdi
movq 0x6598(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9a2f
leaq -0x50(%rbp), %rdi
callq 0x69b0
jmp 0x9a3a
jmp 0x9d56
movq 0x658a(%rip), %rdi      # 0xffd0
leaq 0x2459(%rip), %rsi      # 0xbea6
callq 0x31a0
movq %rax, -0xb8(%rbp)
jmp 0x9a5b
movq -0xb8(%rbp), %rdi
movq 0x6557(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9a70
leaq -0x50(%rbp), %rdi
callq 0x6ab0
jmp 0x9a7b
jmp 0x9d56
movq 0x6549(%rip), %rdi      # 0xffd0
leaq 0x243f(%rip), %rsi      # 0xbecd
callq 0x31a0
movq %rax, -0xc0(%rbp)
jmp 0x9a9c
movq -0xc0(%rbp), %rdi
movq 0x6516(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9ab1
leaq -0x50(%rbp), %rdi
callq 0x6da0
jmp 0x9abc
jmp 0x9d56
movq 0x6508(%rip), %rdi      # 0xffd0
leaq 0x2af3(%rip), %rsi      # 0xc5c2
callq 0x31a0
movq %rax, -0xc8(%rbp)
jmp 0x9add
movq -0xc8(%rbp), %rdi
movq 0x64d5(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9af2
leaq -0x50(%rbp), %rdi
callq 0x6fd0
jmp 0x9afd
jmp 0x9d56
movq 0x64c7(%rip), %rdi      # 0xffd0
leaq 0x2430(%rip), %rsi      # 0xbf40
callq 0x31a0
movq %rax, -0xd0(%rbp)
jmp 0x9b1e
movq -0xd0(%rbp), %rdi
movq 0x6494(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9b33
leaq -0x50(%rbp), %rdi
callq 0x73b0
jmp 0x9b3e
jmp 0x9d56
movq 0x6486(%rip), %rdi      # 0xffd0
leaq 0x2426(%rip), %rsi      # 0xbf77
callq 0x31a0
movq %rax, -0xd8(%rbp)
jmp 0x9b5f
movq -0xd8(%rbp), %rdi
movq 0x6453(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9b74
leaq -0x50(%rbp), %rdi
callq 0x6c40
jmp 0x9b7f
jmp 0x9d56
movq 0x6445(%rip), %rdi      # 0xffd0
leaq 0x23ff(%rip), %rsi      # 0xbf91
callq 0x31a0
movq %rax, -0xe0(%rbp)
jmp 0x9ba0
movq -0xe0(%rbp), %rdi
movq 0x6412(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9bb5
leaq -0x50(%rbp), %rdi
callq 0x7920
jmp 0x9bc0
jmp 0x9d56
movq 0x6404(%rip), %rdi      # 0xffd0
leaq 0x23da(%rip), %rsi      # 0xbfad
callq 0x31a0
movq %rax, -0xe8(%rbp)
jmp 0x9be1
movq -0xe8(%rbp), %rdi
movq 0x63d1(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9bf6
leaq -0x50(%rbp), %rdi
callq 0x8020
jmp 0x9c01
jmp 0x9d56
movq 0x63c3(%rip), %rdi      # 0xffd0
leaq 0x23b4(%rip), %rsi      # 0xbfc8
callq 0x31a0
movq %rax, -0xf0(%rbp)
jmp 0x9c22
movq -0xf0(%rbp), %rdi
movq 0x6390(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9c37
leaq -0x50(%rbp), %rdi
callq 0x8440
jmp 0x9c42
jmp 0x9d56
movq 0x6382(%rip), %rdi      # 0xffd0
leaq 0x238f(%rip), %rsi      # 0xbfe4
callq 0x31a0
movq %rax, -0xf8(%rbp)
jmp 0x9c63
movq -0xf8(%rbp), %rdi
movq 0x634f(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9c78
leaq -0x50(%rbp), %rdi
callq 0x92f0
jmp 0x9c83
jmp 0x9d56
leaq 0x21ae(%rip), %rdi      # 0xbe3d
xorl %eax, %eax
movl $0x19, %edx
movl %edx, %esi
callq 0x3050
jmp 0x9c9f
movq 0x632a(%rip), %rdi      # 0xffd0
leaq 0x28ff(%rip), %rsi      # 0xc5ac
callq 0x31a0
jmp 0x9cb4
movq 0x6315(%rip), %rdi      # 0xffd0
leaq 0x2927(%rip), %rsi      # 0xc5e9
callq 0x31a0
jmp 0x9cc9
movq 0x6300(%rip), %rdi      # 0xffd0
leaq 0x1357(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x9cde
movq 0x62eb(%rip), %rdi      # 0xffd0
leaq 0x2548(%rip), %rsi      # 0xc234
callq 0x31a0
jmp 0x9cf3
movq 0x62d6(%rip), %rdi      # 0xffd0
leaq 0x28fc(%rip), %rsi      # 0xc5fd
callq 0x31a0
movq %rax, -0x100(%rbp)
jmp 0x9d0f
movq -0x100(%rbp), %rdi
movl -0x88(%rbp), %esi
callq 0x32a0
movq %rax, -0x108(%rbp)
jmp 0x9d2a
movq -0x108(%rbp), %rdi
movq 0x6288(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9d3f
movq 0x628a(%rip), %rdi      # 0xffd0
leaq 0x12e1(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x9d54
jmp 0x9d56
cmpl $0x0, -0x88(%rbp)
je 0x9e58
leaq 0x20d3(%rip), %rdi      # 0xbe3d
xorl %eax, %eax
movl $0x1e, %esi
movl $0x19, %edx
callq 0x3050
jmp 0x9d7d
movq 0x624c(%rip), %rdi      # 0xffd0
leaq 0x2878(%rip), %rsi      # 0xc603
callq 0x31a0
jmp 0x9d92
movq 0x6237(%rip), %rdi      # 0xffd0
leaq 0x286a(%rip), %rsi      # 0xc60a
callq 0x31a0
jmp 0x9da7
movq 0x6222(%rip), %rdi      # 0xffd0
leaq 0x12d8(%rip), %rsi      # 0xb08d
callq 0x31a0
jmp 0x9dbc
movq 0x620d(%rip), %rdi      # 0xffd0
leaq 0x2845(%rip), %rsi      # 0xc60f
callq 0x31a0
jmp 0x9dd1
movq 0x61f8(%rip), %rdi      # 0xffd0
leaq 0x124f(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x9de6
movq 0x61e3(%rip), %rdi      # 0xffd0
leaq 0x2821(%rip), %rsi      # 0xc615
callq 0x31a0
jmp 0x9dfb
movq 0x61ce(%rip), %rdi      # 0xffd0
leaq 0x27a3(%rip), %rsi      # 0xc5ac
callq 0x31a0
jmp 0x9e10
movq 0x61b9(%rip), %rdi      # 0xffd0
leaq 0x27fe(%rip), %rsi      # 0xc61c
callq 0x31a0
jmp 0x9e25
movq 0x61a4(%rip), %rdi      # 0xffd0
leaq 0x11fb(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x9e3a
callq 0x3230
jmp 0x9e41
movq 0x6188(%rip), %rdi      # 0xffd0
leaq 0x1fe9(%rip), %rsi      # 0xbe38
callq 0x31a0
jmp 0x9e56
jmp 0x9e58
jmp 0x9e5a
cmpl $0x0, -0x88(%rbp)
jne 0x98d0
movl $0x0, -0x4(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x9f70
movl -0x4(%rbp), %eax
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
jmp 0x9e85
movq -0x80(%rbp), %rdi
callq 0x32b0
movq %rax, %rdi
callq 0x5040
nopw %cs:(%rax,%rax)