diff --git a/clock.c b/clock.c index 306a7ec..7df636d 100755 --- a/clock.c +++ b/clock.c @@ -120,6 +120,7 @@ typedef struct option_t option = { False, False, True }; geo_t geo = {1, 1, 33, 5}; /* Base position of the clock */ Bool fixcenter = False; +Bool running = True; date_t sdate; char *meridiem; int temp_dp; @@ -151,6 +152,8 @@ start(void) sig.sa_handler = handle_sig; sig.sa_flags = 0; sigaction(SIGWINCH, &sig, NULL); + sigaction(SIGTERM, &sig, NULL); + sigaction(SIGINT, &sig, NULL); } /* BIG NUMBER PRINTING FUNCTION */ @@ -320,8 +323,7 @@ check_key(Bool keylock) break; case 'q': case 'Q': - endwin(); - exit(EXIT_SUCCESS); + raise(SIGTERM); break; } } @@ -377,7 +379,7 @@ set_center(void) fixcenter = !fixcenter; } -/* SIGWINCH SIGNAL MANAGE FUNCTION */ +/* SIGNAL HANDLE FUNCTION */ void handle_sig(int num) { @@ -388,6 +390,8 @@ handle_sig(int num) fixcenter = !fixcenter; set_center(); } + else if(num == SIGINT || num == SIGTERM) + running = False; } /* RUN FUCTION */ @@ -447,7 +451,7 @@ main(int argc, char **argv) start(); run(); - for(;;) + while(running) { usleep(10000); check_key(option.keylock);