X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/2259ef99814e890037423ad7beecb3fa28ca0f78..0aa54da72125ab6eec1f8dd721546f109aa6df70:/robots/main.c diff --git a/robots/main.c b/robots/main.c index 14ede2a7..7a38b3d0 100644 --- a/robots/main.c +++ b/robots/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.27 2009/07/20 06:09:29 dholland Exp $ */ +/* $NetBSD: main.c,v 1.32 2009/08/12 08:30:55 dholland Exp $ */ /* * Copyright (c) 1980, 1993 @@ -39,23 +39,35 @@ __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.27 2009/07/20 06:09:29 dholland Exp $"); +__RCSID("$NetBSD: main.c,v 1.32 2009/08/12 08:30:55 dholland Exp $"); #endif #endif /* not lint */ +#include +#include +#include +#include +#include +#include +#include +#include +#include #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) @@ -66,66 +78,62 @@ main(int ac, char **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((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 */ } } @@ -159,7 +167,7 @@ main(int ac, char **av) stdscr = newwin(Y_SIZE, X_SIZE, 0, 0); } - srand(getpid()); + srandom(time(NULL)); if (Real_time) signal(SIGALRM, move_robots); do { @@ -204,14 +212,14 @@ quit(int dummy __unused) * another: * See if another game is desired */ -bool +static bool another(void) { int y; #ifdef FANCY if ((Stand_still || Pattern_roll) && !Newscore) - return TRUE; + return true; #endif if (query("Another game?")) { @@ -222,7 +230,7 @@ another(void) } refresh(); } - return TRUE; + return true; } - return FALSE; + return false; }