]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - robots/main.c
ANSIfy
[bsdgames-darwin.git] / robots / main.c
index 3cb81a0b442c4762bf4f3ddcab825a39fff315c5..7a38b3d0cf61c65ec4e637a78697b21cf7976dc7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: main.c,v 1.18 2001/12/06 12:17:57 blymn Exp $  */
+/*     $NetBSD: main.c,v 1.32 2009/08/12 08:30:55 dholland 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.18 2001/12/06 12:17:57 blymn Exp $");
+__RCSID("$NetBSD: main.c,v 1.32 2009/08/12 08:30:55 dholland Exp $");
 #endif
 #endif /* not lint */
 
-# include      "robots.h"
+#include <ctype.h>
+#include <curses.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+#include "robots.h"
 
-int main __P((int, char **));
+extern const char *Scorefile;
+extern int Max_per_uid;
 
-extern const char      *Scorefile;
-extern int     Max_per_uid;
+static bool another(void);
 
 int
-main(ac, av)
-       int     ac;
-       char    **av;
+main(int argc, char **argv)
 {
-       const char      *sp;
-       bool    bad_arg;
-       bool    show_only;
-       int             score_wfd; /* high score writable file descriptor */
-       int             score_err = 0; /* hold errno from score file open */
+       const char *word;
+       bool show_only;
+       int score_wfd; /* high score writable file descriptor */
+       int score_err = 0; /* hold errno from score file open */
+       int maximum = 0;
+       int ch, i;
 
        score_wfd = open(Scorefile, O_RDWR);
        if (score_wfd < 0)
@@ -74,66 +78,62 @@ main(ac, av)
        /* Revoke setgid privileges */
        setgid(getgid());
 
-       show_only = FALSE;
+       show_only = false;
        Num_games = 1;
-       if (ac > 1) {
-               bad_arg = FALSE;
-               for (++av; ac > 1 && *av[0]; av++, ac--)
-                       if (av[0][0] != '-')
-                               if (isdigit(av[0][0]))
-                                       Max_per_uid = atoi(av[0]);
-                               else {
-                                       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)
-                                               sp = Scorefile;
-                                       if (strcmp(sp, "pattern_roll") == 0)
-                                               Pattern_roll = TRUE;
-                                       else if (strcmp(sp, "stand_still") == 0)
-                                               Stand_still = TRUE;
-                                       if (Pattern_roll || Stand_still)
-                                               Teleport = TRUE;
-# endif
-                               }
-                       else
-                               for (sp = &av[0][1]; *sp; sp++)
-                                       switch (*sp) {
-                                         case 'A':
-                                               Auto_bot = TRUE;
-                                               break;
-                                         case 's':
-                                               show_only = TRUE;
-                                               break;
-                                         case 'r':
-                                               Real_time = TRUE;
-                                               break;
-                                         case 'a':
-                                               Start_level = 4;
-                                               break;
-                                         case 'n':
-                                               Num_games++;
-                                               break;
-                                         case 'j':
-                                               Jump = TRUE;
-                                               break;
-                                         case 't':
-                                               Teleport = TRUE;
-                                               break;
-                                         
-                                         default:
-                                               fprintf(stderr, "robots: unknown option: %c\n", *sp);
-                                               bad_arg = TRUE;
-                                               break;
-                                       }
-               if (bad_arg) {
-                       exit(1);
-                       /* NOTREACHED */
+
+       while ((ch = getopt(argc, argv, "Aajnrst")) != -1) {
+               switch (ch) {
+                   case 'A':
+                       Auto_bot = true;
+                       break;
+                   case 'a':
+                       Start_level = 4;
+                       break;
+                   case 'j':
+                       Jump = true;
+                       break;
+                   case 'n':
+                       Num_games++;
+                       break;
+                   case 'r':
+                       Real_time = true;
+                       break;
+                   case 's':
+                       show_only = true;
+                       break;
+                   case 't':
+                       Teleport = true;
+                       break;
+                   default:
+                       errx(1,
+                           "Usage: robots [-Aajnrst] [maximum] [scorefile]");
+                       break;
+               }
+       }
+
+       for (i = optind; i < argc; i++) {
+               word = argv[i];
+               if (isdigit((unsigned char)word[0])) {
+                       maximum = atoi(word);
+               } else {
+                       Scorefile = word;
+                       Max_per_uid = maximum;
+                       if (score_wfd >= 0)
+                               close(score_wfd);
+                       score_wfd = open(Scorefile, O_RDWR);
+                       if (score_wfd < 0)
+                               score_err = errno;
+#ifdef FANCY
+                       word = strrchr(Scorefile, '/');
+                       if (word == NULL)
+                               word = Scorefile;
+                       if (strcmp(word, "pattern_roll") == 0)
+                               Pattern_roll = true;
+                       else if (strcmp(word, "stand_still") == 0)
+                               Stand_still = true;
+                       if (Pattern_roll || Stand_still)
+                               Teleport = true;
+#endif
                }
        }
 
@@ -150,7 +150,8 @@ main(ac, av)
                sleep(2);
        }
 
-       initscr();
+       if (!initscr())
+               errx(0, "couldn't initialize screen");
        signal(SIGINT, quit);
        cbreak();
        noecho();
@@ -166,7 +167,7 @@ main(ac, av)
                stdscr = newwin(Y_SIZE, X_SIZE, 0, 0);
        }
 
-       srand(getpid());
+       srandom(time(NULL));
        if (Real_time)
                signal(SIGALRM, move_robots);
        do {
@@ -200,8 +201,7 @@ main(ac, av)
  *     Leave the program elegantly.
  */
 void
-quit(dummy)
-       int dummy __attribute__((__unused__));
+quit(int dummy __unused)
 {
        endwin();
        exit(0);
@@ -212,14 +212,14 @@ quit(dummy)
  * another:
  *     See if another game is desired
  */
-bool
-another()
+static bool
+another(void)
 {
-       int     y;
+       int y;
 
-#ifdef FANCY
+#ifdef FANCY
        if ((Stand_still || Pattern_roll) && !Newscore)
-               return TRUE;
+               return true;
 #endif
 
        if (query("Another game?")) {
@@ -230,7 +230,7 @@ another()
                        }
                        refresh();
                }
-               return TRUE;
+               return true;
        }
-       return FALSE;
+       return false;
 }