]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - robots/main.c
Remove is_hex_str() (trying to guess if a number was hex or not). It is not
[bsdgames-darwin.git] / robots / main.c
index e772774a795e3855aed31c77004b71870b089ee3..3030b4126ccaa8f141eca9bd7b7ee667abf8f8ab 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: main.c,v 1.14 2000/01/19 19:19:43 jsm Exp $    */
+/*     $NetBSD: main.c,v 1.33 2020/07/26 15:38:22 nia 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.14 2000/01/19 19:19:43 jsm Exp $");
+__RCSID("$NetBSD: main.c,v 1.33 2020/07/26 15:38:22 nia 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;
+
+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;
-       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 */
+       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)
@@ -71,68 +76,64 @@ main(ac, av)
                exit(1);
 
        /* Revoke setgid privileges */
-       setregid(getgid(), getgid());
+       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
                }
        }
 
@@ -149,9 +150,10 @@ main(ac, av)
                sleep(2);
        }
 
-       initscr();
+       if (!initscr())
+               errx(0, "couldn't initialize screen");
        signal(SIGINT, quit);
-       crmode();
+       cbreak();
        noecho();
        nonl();
        if (LINES != Y_SIZE || COLS != X_SIZE) {
@@ -165,7 +167,6 @@ main(ac, av)
                stdscr = newwin(Y_SIZE, X_SIZE, 0, 0);
        }
 
-       srand(getpid());
        if (Real_time)
                signal(SIGALRM, move_robots);
        do {
@@ -187,6 +188,7 @@ main(ac, av)
                                sleep(1);
                        refresh();
                }
+               Num_games = 1;
        } while (!Auto_bot && another());
        quit(0);
        /* NOTREACHED */
@@ -198,8 +200,7 @@ main(ac, av)
  *     Leave the program elegantly.
  */
 void
-quit(dummy)
-       int dummy __attribute__((__unused__));
+quit(int dummy __unused)
 {
        endwin();
        exit(0);
@@ -210,14 +211,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?")) {
@@ -228,7 +229,7 @@ another()
                        }
                        refresh();
                }
-               return TRUE;
+               return true;
        }
-       return FALSE;
+       return false;
 }