X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/3e95714e815457b8e2c95138f9242701e3c08434..b5d964818fa913232f654a2fa2e71aa7676d6360:/atc/main.c diff --git a/atc/main.c b/atc/main.c index 9f2c0cef..b8e0f746 100644 --- a/atc/main.c +++ b/atc/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.4 1995/04/27 21:22:25 mycroft Exp $ */ +/* $NetBSD: main.c,v 1.10 1999/07/24 15:50:44 mjl Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -45,89 +45,79 @@ * For more info on this and all of my stuff, mail edjames@berkeley.edu. */ +#include #ifndef lint -static char copyright[] = -"@(#) Copyright (c) 1990, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; +__COPYRIGHT("@(#) Copyright (c) 1990, 1993\n\ + The Regents of the University of California. All rights reserved.\n"); #endif /* not lint */ #ifndef lint #if 0 static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: main.c,v 1.4 1995/04/27 21:22:25 mycroft Exp $"; +__RCSID("$NetBSD: main.c,v 1.10 1999/07/24 15:50:44 mjl Exp $"); #endif #endif /* not lint */ #include "include.h" #include "pathnames.h" + +int main(ac, av) + int ac; char *av[]; { int seed; int f_usage = 0, f_list = 0, f_showscore = 0; int f_printpath = 0; - char *file = NULL; - char *name, *ptr; + const char *file = NULL; + int ch; struct sigaction sa; #ifdef BSD struct itimerval itv; #endif - extern char *default_game(), *okay_game(); - extern void log_score(), quit(), update(); - start_time = seed = time(0); + /* Open the score file then revoke setgid privileges */ + open_score_file(); + setregid(getgid(), getgid()); + + start_time = seed = time(NULL); - name = *av++; - while (*av) { -#ifndef SAVEDASH - if (**av == '-') - *++*av; - else + while ((ch = getopt(ac, av, "ulstpg:f:r:")) != -1) { + switch (ch) { + case '?': + case 'u': + default: + f_usage++; + break; + case 'l': + f_list++; + break; + case 's': + case 't': + f_showscore++; + break; + case 'p': + f_printpath++; + break; + case 'r': + seed = atoi(optarg); + break; + case 'f': + case 'g': + file = optarg; break; -#endif - ptr = *av++; - while (*ptr) { - switch (*ptr) { - case '?': - case 'u': - f_usage++; - break; - case 'l': - f_list++; - break; - case 's': - case 't': - f_showscore++; - break; - case 'p': - f_printpath++; - break; - case 'r': - seed = atoi(*av); - av++; - break; - case 'f': - case 'g': - file = *av; - av++; - break; - default: - fprintf(stderr, "Unknown option '%c'\n", *ptr, - name); - f_usage++; - break; - } - ptr++; } } + if (optind < ac) + f_usage++; srandom(seed); if (f_usage) fprintf(stderr, "Usage: %s -[u?lstp] [-[gf] game_name] [-r random seed]\n", - name); + av[0]); if (f_showscore) log_score(1); if (f_list) @@ -162,12 +152,13 @@ main(ac, av) signal(SIGTSTP, SIG_IGN); signal(SIGSTOP, SIG_IGN); #endif - signal(SIGHUP, log_score); - signal(SIGTERM, log_score); + signal(SIGHUP, log_score_quit); + signal(SIGTERM, log_score_quit); 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); @@ -203,7 +194,7 @@ main(ac, av) alarm(0); #endif - update(); + update(0); #ifdef BSD itv.it_value.tv_sec = sp->update_secs; @@ -219,8 +210,9 @@ main(ac, av) } } +int read_file(s) - char *s; + const char *s; { extern FILE *yyin; int retval; @@ -228,7 +220,7 @@ read_file(s) file = s; yyin = fopen(s, "r"); if (yyin == NULL) { - perror(s); + warn("fopen %s", s); return (-1); } retval = yyparse(); @@ -240,7 +232,7 @@ read_file(s) return (0); } -char * +const char * default_game() { FILE *fp; @@ -251,7 +243,7 @@ default_game() strcat(games, GAMES); if ((fp = fopen(games, "r")) == NULL) { - perror(games); + warn("fopen %s", games); return (NULL); } if (fgets(line, sizeof(line), fp) == NULL) { @@ -265,19 +257,20 @@ default_game() return (file); } -char * +const char * okay_game(s) - char *s; + const char *s; { FILE *fp; static char file[256]; - char *ret = NULL, line[256], games[256]; + const char *ret = NULL; + char line[256], games[256]; strcpy(games, _PATH_GAMES); strcat(games, GAMES); if ((fp = fopen(games, "r")) == NULL) { - perror(games); + warn("fopen %s", games); return (NULL); } while (fgets(line, sizeof(line), fp) != NULL) { @@ -300,6 +293,7 @@ okay_game(s) return (ret); } +int list_games() { FILE *fp; @@ -310,7 +304,7 @@ list_games() strcat(games, GAMES); if ((fp = fopen(games, "r")) == NULL) { - perror(games); + warn("fopen %s", games); return (-1); } puts("available games:");