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  }