X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/462fca95471224f85b85be911e72faee16cd1597..99c04586433c829f292ecb69178402e7dae0b301:/robots/main.c diff --git a/robots/main.c b/robots/main.c index eb20fadd..98e2ff29 100644 --- a/robots/main.c +++ b/robots/main.c @@ -1,6 +1,8 @@ +/* $NetBSD: main.c,v 1.24 2008/08/08 16:10:47 drochner Exp $ */ + /* - * Copyright (c) 1980 Regents of the University of California. - * All rights reserved. + * Copyright (c) 1980, 1993 + * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,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. * @@ -31,45 +29,64 @@ * SUCH DAMAGE. */ +#include #ifndef lint -char copyright[] = -"@(#) Copyright (c) 1980 Regents of the University of California.\n\ - All rights reserved.\n"; +__COPYRIGHT("@(#) Copyright (c) 1980, 1993\ + The Regents of the University of California. All rights reserved."); #endif /* not lint */ #ifndef lint -/*static char sccsid[] = "from: @(#)main.c 5.5 (Berkeley) 2/28/91";*/ -static char rcsid[] = "$Id: main.c,v 1.2 1993/08/01 18:52:46 mycroft Exp $"; +#if 0 +static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; +#else +__RCSID("$NetBSD: main.c,v 1.24 2008/08/08 16:10:47 drochner Exp $"); +#endif #endif /* not lint */ # include "robots.h" -# include -# include +int main(int, char **); + +extern const char *Scorefile; +extern int Max_per_uid; + +int main(ac, av) -int ac; -char **av; + int ac; + char **av; { - register char *sp; - register bool bad_arg; - register bool show_only; - extern char *Scorefile; - extern int Max_per_uid; - void quit(); + 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 */ + + score_wfd = open(Scorefile, O_RDWR); + if (score_wfd < 0) + score_err = errno; + else if (score_wfd < 3) + exit(1); + + /* Revoke setgid privileges */ + setgid(getgid()); 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])) + if (isdigit((unsigned char)av[0][0])) Max_per_uid = atoi(av[0]); else { - setuid(getuid()); - setgid(getgid()); 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 = rindex(Scorefile, '/'); + sp = strrchr(Scorefile, '/'); if (sp == NULL) sp = Scorefile; if (strcmp(sp, "pattern_roll") == 0) @@ -83,6 +100,9 @@ char **av; else for (sp = &av[0][1]; *sp; sp++) switch (*sp) { + case 'A': + Auto_bot = TRUE; + break; case 's': show_only = TRUE; break; @@ -92,14 +112,18 @@ char **av; 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: uknown option: %c\n", *sp); + fprintf(stderr, "robots: unknown option: %c\n", *sp); bad_arg = TRUE; break; } @@ -115,9 +139,17 @@ char **av; /* NOTREACHED */ } - initscr(); + if (score_wfd < 0) { + errno = score_err; + warn("%s", Scorefile); + warnx("High scores will not be recorded!"); + sleep(2); + } + + if (!initscr()) + errx(0, "couldn't initialize screen"); signal(SIGINT, quit); - crmode(); + cbreak(); noecho(); nonl(); if (LINES != Y_SIZE || COLS != X_SIZE) { @@ -135,17 +167,29 @@ char **av; if (Real_time) signal(SIGALRM, move_robots); do { - init_field(); - for (Level = Start_level; !Dead; Level++) { - make_level(); - play_level(); + while (Num_games--) { + init_field(); + for (Level = Start_level; !Dead; Level++) { + make_level(); + play_level(); + if (Auto_bot) + sleep(1); + } + move(My_pos.y, My_pos.x); + printw("AARRrrgghhhh...."); + refresh(); + if (Auto_bot) + sleep(1); + score(score_wfd); + if (Auto_bot) + sleep(1); + refresh(); } - move(My_pos.y, My_pos.x); - printw("AARRrrgghhhh...."); - refresh(); - score(); - } while (another()); - quit(); + Num_games = 1; + } while (!Auto_bot && another()); + quit(0); + /* NOTREACHED */ + return(0); } /* @@ -153,19 +197,10 @@ char **av; * Leave the program elegantly. */ void -quit() +quit(dummy) + int dummy __unused; { - extern int _putchar(); - - mvcur(0, COLS - 1, LINES - 1, 0); - if (CE) { - tputs(CE, 1, _putchar); - endwin(); - } - else { - endwin(); - putchar('\n'); - } + endwin(); exit(0); /* NOTREACHED */ } @@ -174,9 +209,10 @@ quit() * another: * See if another game is desired */ +bool another() { - register int y; + int y; #ifdef FANCY if ((Stand_still || Pattern_roll) && !Newscore)