]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - atc/main.c
fix redundant decls and nested externs
[bsdgames-darwin.git] / atc / main.c
index 9f2c0cef13c3a4ace5bc1d13c26abfd96a64471d..73508872498c7bc41319e9577d73bd2c5294fc04 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: main.c,v 1.4 1995/04/27 21:22:25 mycroft Exp $ */
+/*     $NetBSD: main.c,v 1.12 2001/02/05 00:22:52 christos Exp $       */
 
 /*-
  * Copyright (c) 1990, 1993
  * For more info on this and all of my stuff, mail edjames@berkeley.edu.
  */
 
+#include <sys/cdefs.h>
 #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.12 2001/02/05 00:22:52 christos Exp $");
 #endif
 #endif /* not lint */
 
 #include "include.h"
 #include "pathnames.h"
 
+extern FILE    *yyin;
+
+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();
+       setgid(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 +153,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 +195,7 @@ main(ac, av)
                        alarm(0);
 #endif
 
-                       update();
+                       update(0);
 
 #ifdef BSD
                        itv.it_value.tv_sec = sp->update_secs;
@@ -219,16 +211,16 @@ main(ac, av)
        }
 }
 
+int
 read_file(s)
-       char    *s;
+       const char      *s;
 {
-       extern FILE     *yyin;
        int             retval;
 
        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:");