X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/5026a88f24eba0358fe364dbad74e3213abed79b..0aa54da72125ab6eec1f8dd721546f109aa6df70:/robots/main.c?ds=sidebyside diff --git a/robots/main.c b/robots/main.c index e772774a..7a38b3d0 100644 --- a/robots/main.c +++ b/robots/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.14 2000/01/19 19:19:43 jsm Exp $ */ +/* $NetBSD: main.c,v 1.32 2009/08/12 08:30:55 dholland Exp $ */ /* * Copyright (c) 1980, 1993 @@ -12,11 +12,7 @@ * 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. * @@ -35,34 +31,43 @@ #include #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.32 2009/08/12 08:30:55 dholland Exp $"); #endif #endif /* not lint */ -# include "robots.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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,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 { @@ -187,6 +189,7 @@ main(ac, av) sleep(1); refresh(); } + Num_games = 1; } while (!Auto_bot && another()); quit(0); /* NOTREACHED */ @@ -198,8 +201,7 @@ main(ac, av) * Leave the program elegantly. */ void -quit(dummy) - int dummy __attribute__((__unused__)); +quit(int dummy __unused) { endwin(); exit(0); @@ -210,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?")) { @@ -228,7 +230,7 @@ another() } refresh(); } - return TRUE; + return true; } - return FALSE; + return false; }