summaryrefslogtreecommitdiffstats
path: root/robots/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'robots/main.c')
-rw-r--r--robots/main.c120
1 files changed, 59 insertions, 61 deletions
diff --git a/robots/main.c b/robots/main.c
index 9868403a..75a4555a 100644
--- a/robots/main.c
+++ b/robots/main.c
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.29 2009/07/20 06:43:18 dholland Exp $ */
+/* $NetBSD: main.c,v 1.30 2009/08/05 04:03:47 dholland 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.29 2009/07/20 06:43:18 dholland Exp $");
+__RCSID("$NetBSD: main.c,v 1.30 2009/08/05 04:03:47 dholland Exp $");
#endif
#endif /* not lint */
@@ -58,13 +58,15 @@ extern const char *Scorefile;
extern int Max_per_uid;
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;
+ char ch;
+ int i;
score_wfd = open(Scorefile, O_RDWR);
if (score_wfd < 0)
@@ -77,64 +79,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 */
}
}