]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - robots/main.c
We don't need a private #define "unsgn" for "unsigned", especially since
[bsdgames-darwin.git] / robots / main.c
index ce7f8cf57972db6f53797d6d005061e638cb496d..98e2ff29a210bfa15267ba0f55ddc958fa0d6d05 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: main.c,v 1.9 1999/09/08 21:17:57 jsm Exp $     */
+/*     $NetBSD: main.c,v 1.24 2008/08/08 16:10:47 drochner Exp $       */
 
 /*
  * Copyright (c) 1980, 1993
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
 
 #include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
      The Regents of the University of California.  All rights reserved.\n");
+__COPYRIGHT("@(#) Copyright (c) 1980, 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.9 1999/09/08 21:17:57 jsm Exp $");
+__RCSID("$NetBSD: main.c,v 1.24 2008/08/08 16:10:47 drochner Exp $");
 #endif
 #endif /* not lint */
 
 # include      "robots.h"
 
-int main __P((int, char **));
+int main(int, char **);
+
+extern const char      *Scorefile;
+extern int     Max_per_uid;
 
 int
 main(ac, av)
@@ -59,8 +58,17 @@ main(ac, av)
        const char      *sp;
        bool    bad_arg;
        bool    show_only;
-       extern const char       *Scorefile;
-       extern int      Max_per_uid;
+       int             score_wfd; /* high score writable file descriptor */
+       int             score_err = 0; /* hold errno from score file open */
+
+       score_wfd = open(Scorefile, O_RDWR);
+       if (score_wfd < 0)
+               score_err = errno;
+       else if (score_wfd < 3)
+               exit(1);
+
+       /* Revoke setgid privileges */
+       setgid(getgid());
 
        show_only = FALSE;
        Num_games = 1;
@@ -68,12 +76,15 @@ main(ac, av)
                bad_arg = FALSE;
                for (++av; ac > 1 && *av[0]; av++, ac--)
                        if (av[0][0] != '-')
-                               if (isdigit(av[0][0]))
+                               if (isdigit((unsigned char)av[0][0]))
                                        Max_per_uid = atoi(av[0]);
                                else {
-                                       setuid(getuid());
-                                       setgid(getgid());
                                        Scorefile = av[0];
+                                       if (score_wfd >= 0)
+                                               close(score_wfd);
+                                       score_wfd = open(Scorefile, O_RDWR);
+                                       if (score_wfd < 0)
+                                               score_err = errno;
 # ifdef        FANCY
                                        sp = strrchr(Scorefile, '/');
                                        if (sp == NULL)
@@ -112,7 +123,7 @@ main(ac, av)
                                                break;
                                          
                                          default:
-                                               fprintf(stderr, "robots: uknown option: %c\n", *sp);
+                                               fprintf(stderr, "robots: unknown option: %c\n", *sp);
                                                bad_arg = TRUE;
                                                break;
                                        }
@@ -128,9 +139,17 @@ main(ac, av)
                /* NOTREACHED */
        }
 
-       initscr();
+       if (score_wfd < 0) {
+               errno = score_err;
+               warn("%s", Scorefile);
+               warnx("High scores will not be recorded!");
+               sleep(2);
+       }
+
+       if (!initscr())
+               errx(0, "couldn't initialize screen");
        signal(SIGINT, quit);
-       crmode();
+       cbreak();
        noecho();
        nonl();
        if (LINES != Y_SIZE || COLS != X_SIZE) {
@@ -161,31 +180,25 @@ main(ac, av)
                        refresh();
                        if (Auto_bot)
                                sleep(1);
-                       score();
+                       score(score_wfd);
                        if (Auto_bot)
                                sleep(1);
                        refresh();
                }
+               Num_games = 1;
        } while (!Auto_bot && another());
        quit(0);
        /* NOTREACHED */
        return(0);
 }
 
-void
-__cputchar(ch)
-       int ch;
-{
-       (void)putchar(ch);
-}
-
 /*
  * quit:
  *     Leave the program elegantly.
  */
 void
 quit(dummy)
-       int dummy;
+       int dummy __unused;
 {
        endwin();
        exit(0);