]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - robots/main.c
avoid duplicating symbols in libterminfo.
[bsdgames-darwin.git] / robots / main.c
index c106a96c9fca96a8269ed557232adf4cba15fb48..3030b4126ccaa8f141eca9bd7b7ee667abf8f8ab 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: main.c,v 1.28 2009/07/20 06:39:06 dholland Exp $       */
+/*     $NetBSD: main.c,v 1.33 2020/07/26 15:38:22 nia Exp $    */
 
 /*
  * Copyright (c) 1980, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\
 #if 0
 static char sccsid[] = "@(#)main.c     8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: main.c,v 1.28 2009/07/20 06:39:06 dholland Exp $");
+__RCSID("$NetBSD: main.c,v 1.33 2020/07/26 15:38:22 nia Exp $");
 #endif
 #endif /* not lint */
 
@@ -50,20 +50,24 @@ __RCSID("$NetBSD: main.c,v 1.28 2009/07/20 06:39:06 dholland Exp $");
 #include <fcntl.h>
 #include <signal.h>
 #include <stdlib.h>
+#include <time.h>
 #include <unistd.h>
 #include "robots.h"
 
 extern const char *Scorefile;
 extern int Max_per_uid;
 
+static bool another(void);
+
 int
-main(int ac, char **av)
+main(int argc, char **argv)
 {
-       const char *sp;
-       bool bad_arg;
+       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)
@@ -76,64 +80,60 @@ main(int ac, char **av)
 
        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((unsigned char)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;
+
+       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
-                                       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;
+                       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
-                               }
-                       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 */
                }
        }
 
@@ -167,7 +167,6 @@ main(int ac, char **av)
                stdscr = newwin(Y_SIZE, X_SIZE, 0, 0);
        }
 
-       srand(getpid());
        if (Real_time)
                signal(SIGALRM, move_robots);
        do {
@@ -212,7 +211,7 @@ quit(int dummy __unused)
  * another:
  *     See if another game is desired
  */
-bool
+static bool
 another(void)
 {
        int y;