main.cpp
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* main.cpp :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/11/10 22:20:33 by gychoi #+# #+# */ 9 /* Updated: 2023/12/11 22:24:06 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "GUI.hpp" 14 15 static struct timespec req; 16 static struct timespec rem; 17 static int exitLoop; 18 struct Status status; 19 20 void check_leaks() 21 { 22 system("leaks -- a.out"); 23 } 24 25 void signalHandler(__attribute__((unused)) int signum) 26 { 27 deleteBureaucrat(); 28 deleteForm(); 29 resetTerminal(); 30 exit(0); 31 } 32 33 void delay() 34 { 35 req.tv_nsec = status.renderSpeed * 1000000000; 36 nanosleep(&req, &rem); 37 } 38 39 int main() 40 { 41 atexit(check_leaks); 42 signal(SIGINT, signalHandler); 43 44 if (configureTerminal() == false) 45 { 46 resetTerminal(); 47 return 1; 48 } 49 50 initStatus(); 51 eraseTerminal(); 52 drawLogin(); 53 while (!exitLoop) 54 { 55 try 56 { 57 int key = readInput(); 58 controlKey(key); 59 makeBuffer(); 60 updateStatus(); 61 setStage(); 62 updatePopUp(); 63 64 delay(); 65 } 66 catch (std::exception & e) 67 { 68 initStatus(); 69 deleteInfo(); 70 status.isError = true; 71 status.errorMessage = e.what(); 72 } 73 catch (...) 74 { 75 initStatus(); 76 deleteInfo(); 77 status.isError = true; 78 status.errorMessage = "Something went wrong..."; 79 } 80 } 81 82 return 0; 83 }