X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/0272ab0970dca7cdbac5a1669e694d8e06ceaec7..HEAD:/atc/main.c diff --git a/atc/main.c b/atc/main.c index c69064b6..9ef6ce11 100644 --- a/atc/main.c +++ b/atc/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.14 2005/07/01 00:48:34 jmc Exp $ */ +/* $NetBSD: main.c,v 1.25 2021/05/02 12:50:43 rillig Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -43,27 +43,44 @@ #include #ifndef lint -__COPYRIGHT("@(#) Copyright (c) 1990, 1993\n\ - The Regents of the University of California. All rights reserved.\n"); +__COPYRIGHT("@(#) Copyright (c) 1990, 1993\ + The Regents of the University of California. All rights reserved."); #endif /* not lint */ #ifndef lint #if 0 static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: main.c,v 1.14 2005/07/01 00:48:34 jmc Exp $"); +__RCSID("$NetBSD: main.c,v 1.25 2021/05/02 12:50:43 rillig Exp $"); #endif #endif /* not lint */ -#include "include.h" +#include +#include +#include +#include +#include +#include +#include + #include "pathnames.h" +#include "def.h" +#include "struct.h" +#include "extern.h" +#include "tunable.h" extern FILE *yyin; +static int read_file(const char *); +static const char *default_game(void); +static const char *okay_game(const char *); +static int list_games(void); +static void quit(int); + int main(int argc, char *argv[]) { - int seed; + unsigned long seed; int f_usage = 0, f_list = 0, f_showscore = 0; int f_printpath = 0; const char *file = NULL; @@ -75,26 +92,27 @@ main(int argc, char *argv[]) /* Open the score file then revoke setgid privileges */ open_score_file(); - setgid(getgid()); + (void)setgid(getgid()); - start_time = seed = time(NULL); + start_time = time(NULL); + seed = start_time; - while ((ch = getopt(argc, argv, "ulstpg:f:r:")) != -1) { + while ((ch = getopt(argc, argv, ":u?lstpg:f:r:")) != -1) { switch (ch) { case '?': case 'u': - default: - f_usage++; + default: + f_usage = 1; break; case 'l': - f_list++; + f_list = 1; break; case 's': case 't': - f_showscore++; + f_showscore = 1; break; case 'p': - f_printpath++; + f_printpath = 1; break; case 'r': seed = atoi(optarg); @@ -106,25 +124,24 @@ main(int argc, char *argv[]) } } if (optind < argc) - f_usage++; + f_usage = 1; srandom(seed); if (f_usage) - fprintf(stderr, + (void)fprintf(stderr, "Usage: %s -[u?lstp] [-[gf] game_name] [-r random seed]\n", - argv[0]); + argv[0]); if (f_showscore) - log_score(1); + (void)log_score(1); if (f_list) - list_games(); + (void)list_games(); if (f_printpath) { char buf[100]; - strcpy(buf, _PATH_GAMES); - buf[strlen(buf) - 1] = '\0'; - puts(buf); + (void)strlcpy(buf, _PATH_GAMES, 100); + (void)puts(buf); } - + if (f_usage || f_showscore || f_list || f_printpath) exit(0); @@ -141,36 +158,35 @@ main(int argc, char *argv[]) addplane(); - signal(SIGINT, quit); - signal(SIGQUIT, quit); + (void)signal(SIGINT, quit); + (void)signal(SIGQUIT, quit); #ifdef BSD - signal(SIGTSTP, SIG_IGN); - signal(SIGSTOP, SIG_IGN); + (void)signal(SIGTSTP, SIG_IGN); #endif - signal(SIGHUP, log_score_quit); - signal(SIGTERM, log_score_quit); + (void)signal(SIGHUP, log_score_quit); + (void)signal(SIGTERM, log_score_quit); - tcgetattr(fileno(stdin), &tty_start); + (void)tcgetattr(fileno(stdin), &tty_start); tty_new = tty_start; tty_new.c_lflag &= ~(ICANON|ECHO); tty_new.c_iflag |= ICRNL; tty_new.c_cc[VMIN] = 1; tty_new.c_cc[VTIME] = 0; - tcsetattr(fileno(stdin), TCSADRAIN, &tty_new); + (void)tcsetattr(fileno(stdin), TCSADRAIN, &tty_new); sa.sa_handler = update; - sigemptyset(&sa.sa_mask); - sigaddset(&sa.sa_mask, SIGALRM); - sigaddset(&sa.sa_mask, SIGINT); + (void)sigemptyset(&sa.sa_mask); + (void)sigaddset(&sa.sa_mask, SIGALRM); + (void)sigaddset(&sa.sa_mask, SIGINT); sa.sa_flags = 0; - sigaction(SIGALRM, &sa, (struct sigaction *)0); + (void)sigaction(SIGALRM, &sa, (struct sigaction *)0); #ifdef BSD itv.it_value.tv_sec = 0; itv.it_value.tv_usec = 1; itv.it_interval.tv_sec = sp->update_secs; itv.it_interval.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); + (void)setitimer(ITIMER_REAL, &itv, NULL); #endif #ifdef SYSV alarm(sp->update_secs); @@ -183,7 +199,7 @@ main(int argc, char *argv[]) #ifdef BSD itv.it_value.tv_sec = 0; itv.it_value.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); + (void)setitimer(ITIMER_REAL, &itv, NULL); #endif #ifdef SYSV alarm(0); @@ -196,7 +212,7 @@ main(int argc, char *argv[]) itv.it_value.tv_usec = 0; itv.it_interval.tv_sec = sp->update_secs; itv.it_interval.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); + (void)setitimer(ITIMER_REAL, &itv, NULL); #endif #ifdef SYSV alarm(sp->update_secs); @@ -205,7 +221,7 @@ main(int argc, char *argv[]) } } -int +static int read_file(const char *s) { int retval; @@ -217,7 +233,7 @@ read_file(const char *s) return (-1); } retval = yyparse(); - fclose(yyin); + (void)fclose(yyin); if (retval != 0) return (-1); @@ -225,32 +241,33 @@ read_file(const char *s) return (0); } -const char * +static const char * default_game(void) { FILE *fp; static char file[256]; char line[256], games[256]; - strcpy(games, _PATH_GAMES); - strcat(games, GAMES); + (void)strlcpy(games, _PATH_GAMES, 256); + (void)strlcat(games, GAMES, 256); if ((fp = fopen(games, "r")) == NULL) { warn("fopen %s", games); return (NULL); } if (fgets(line, sizeof(line), fp) == NULL) { - fprintf(stderr, "%s: no default game available\n", games); + (void)fprintf(stderr, "%s: no default game available\n", games); + fclose(fp); return (NULL); } - fclose(fp); + (void)fclose(fp); line[strlen(line) - 1] = '\0'; - strcpy(file, _PATH_GAMES); - strcat(file, line); + (void)strlcpy(file, _PATH_GAMES, 256); + (void)strlcat(file, line, 256); return (file); } -const char * +static const char * okay_game(const char *s) { FILE *fp; @@ -258,8 +275,8 @@ okay_game(const char *s) const char *ret = NULL; char line[256], games[256]; - strcpy(games, _PATH_GAMES); - strcat(games, GAMES); + (void)strlcpy(games, _PATH_GAMES, 256); + (void)strlcat(games, GAMES, 256); if ((fp = fopen(games, "r")) == NULL) { warn("fopen %s", games); @@ -268,46 +285,73 @@ okay_game(const char *s) while (fgets(line, sizeof(line), fp) != NULL) { line[strlen(line) - 1] = '\0'; if (strcmp(s, line) == 0) { - strcpy(file, _PATH_GAMES); - strcat(file, line); + (void)strlcpy(file, _PATH_GAMES, 256); + (void)strlcat(file, line, 256); ret = file; break; } } - fclose(fp); + (void)fclose(fp); if (ret == NULL) { test_mode = 1; ret = s; - fprintf(stderr, "%s: %s: game not found\n", games, s); - fprintf(stderr, "Your score will not be logged.\n"); - sleep(2); /* give the guy time to read it */ + (void)fprintf(stderr, "%s: %s: game not found\n", games, s); + (void)fprintf(stderr, "Your score will not be logged.\n"); + (void)sleep(2); /* give the guy time to read it */ } return (ret); } -int +static int list_games(void) { FILE *fp; char line[256], games[256]; int num_games = 0; - strcpy(games, _PATH_GAMES); - strcat(games, GAMES); + (void)strlcpy(games, _PATH_GAMES, 256); + (void)strlcat(games, GAMES, 256); if ((fp = fopen(games, "r")) == NULL) { warn("fopen %s", games); return (-1); } - puts("available games:"); + (void)puts("available games:"); while (fgets(line, sizeof(line), fp) != NULL) { - printf(" %s", line); + (void)printf(" %s", line); num_games++; } - fclose(fp); + (void)fclose(fp); if (num_games == 0) { - fprintf(stderr, "%s: no games available\n", games); + (void)fprintf(stderr, "%s: no games available\n", games); return (-1); } return (0); } + +/* ARGSUSED */ +static void +quit(int dummy __unused) +{ + int c; +#ifdef BSD + struct itimerval itv; +#endif + ioaskquit(); + c = getAChar(); + if (c == EOF || c == 'y') { + /* disable timer */ +#ifdef BSD + itv.it_value.tv_sec = 0; + itv.it_value.tv_usec = 0; + (void)setitimer(ITIMER_REAL, &itv, NULL); +#endif +#ifdef SYSV + alarm(0); +#endif + shutdown_gr(); + (void)log_score(0); + exit(0); + } + ionoquit(); +}