Eliminate some forwards.

This commit is contained in:
Eric S. Raymond 2023-03-06 23:41:07 -05:00
parent 12d39ef72b
commit f911e42453

263
main.c
View file

@ -47,139 +47,6 @@ static void sig_handler(int signo)
}
// LCOV_EXCL_STOP
/*
* MAIN PROGRAM
*
* Adventure (rev 2: 20 treasures)
* History: Original idea & 5-treasure version (adventures) by Willie Crowther
* 15-treasure version (adventure) by Don Woods, April-June 1977
* 20-treasure version (rev 2) by Don Woods, August 1978
* Errata fixed: 78/12/25
* Revived 2017 as Open Adventure.
*/
static bool do_command(void);
static bool do_move(void);
int main(int argc, char *argv[])
{
int ch;
/* Options. */
#if defined ADVENT_AUTOSAVE
const char* opts = "l:oa:";
const char* usage = "Usage: %s [-l logfilename] [-o] [-a filename] [script...]\n";
FILE *rfp = NULL;
const char* autosave_filename = NULL;
#elif !defined ADVENT_NOSAVE
const char* opts = "l:or:";
const char* usage = "Usage: %s [-l logfilename] [-o] [-r restorefilename] [script...]\n";
FILE *rfp = NULL;
#else
const char* opts = "l:o";
const char* usage = "Usage: %s [-l logfilename] [-o] [script...]\n";
#endif
while ((ch = getopt(argc, argv, opts)) != EOF) {
switch (ch) {
case 'l':
settings.logfp = fopen(optarg, "w");
if (settings.logfp == NULL)
fprintf(stderr,
"advent: can't open logfile %s for write\n",
optarg);
signal(SIGINT, sig_handler);
break;
case 'o':
settings.oldstyle = true;
settings.prompt = false;
break;
#ifdef ADVENT_AUTOSAVE
case 'a':
rfp = fopen(optarg, READ_MODE);
autosave_filename = optarg;
signal(SIGHUP, sig_handler);
signal(SIGTERM, sig_handler);
break;
#elif !defined ADVENT_NOSAVE
case 'r':
rfp = fopen(optarg, "r");
if (rfp == NULL)
fprintf(stderr,
"advent: can't open save file %s for read\n",
optarg);
break;
#endif
default:
fprintf(stderr,
usage, argv[0]);
fprintf(stderr,
" -l create a log file of your game named as specified'\n");
fprintf(stderr,
" -o 'oldstyle' (no prompt, no command editing, displays 'Initialising...')\n");
#if defined ADVENT_AUTOSAVE
fprintf(stderr,
" -a automatic save/restore from specified saved game file\n");
#elif !defined ADVENT_NOSAVE
fprintf(stderr,
" -r restore from specified saved game file\n");
#endif
exit(EXIT_FAILURE);
break;
}
}
/* copy invocation line part after switches */
settings.argc = argc - optind;
settings.argv = argv + optind;
settings.optind = 0;
/* Initialize game variables */
int seedval = initialise();
#if !defined ADVENT_NOSAVE
if (!rfp) {
game.novice = yes_or_no(arbitrary_messages[WELCOME_YOU], arbitrary_messages[CAVE_NEARBY], arbitrary_messages[NO_MESSAGE]);
if (game.novice)
game.limit = NOVICELIMIT;
} else {
restore(rfp);
#if defined ADVENT_AUTOSAVE
score(scoregame);
#endif
}
#if defined ADVENT_AUTOSAVE
if (autosave_filename != NULL) {
if ((autosave_fp = fopen(autosave_filename, WRITE_MODE)) == NULL) {
perror(autosave_filename);
return EXIT_FAILURE;
}
autosave();
}
#endif
#else
game.novice = yes_or_no(arbitrary_messages[WELCOME_YOU], arbitrary_messages[CAVE_NEARBY], arbitrary_messages[NO_MESSAGE]);
if (game.novice)
game.limit = NOVICELIMIT;
#endif
if (settings.logfp)
fprintf(settings.logfp, "seed %d\n", seedval);
/* interpret commands until EOF or interrupt */
for (;;) {
// if we're supposed to move, move
if (!do_move())
continue;
// get command
if (!do_command())
break;
}
/* show score and exit */
terminate(quitgame);
}
char *myreadline(const char *prompt)
{
/*
@ -1365,4 +1232,134 @@ static bool do_command()
return true;
}
/*
* MAIN PROGRAM
*
* Adventure (rev 2: 20 treasures)
* History: Original idea & 5-treasure version (adventures) by Willie Crowther
* 15-treasure version (adventure) by Don Woods, April-June 1977
* 20-treasure version (rev 2) by Don Woods, August 1978
* Errata fixed: 78/12/25
* Revived 2017 as Open Adventure.
*/
int main(int argc, char *argv[])
{
int ch;
/* Options. */
#if defined ADVENT_AUTOSAVE
const char* opts = "l:oa:";
const char* usage = "Usage: %s [-l logfilename] [-o] [-a filename] [script...]\n";
FILE *rfp = NULL;
const char* autosave_filename = NULL;
#elif !defined ADVENT_NOSAVE
const char* opts = "l:or:";
const char* usage = "Usage: %s [-l logfilename] [-o] [-r restorefilename] [script...]\n";
FILE *rfp = NULL;
#else
const char* opts = "l:o";
const char* usage = "Usage: %s [-l logfilename] [-o] [script...]\n";
#endif
while ((ch = getopt(argc, argv, opts)) != EOF) {
switch (ch) {
case 'l':
settings.logfp = fopen(optarg, "w");
if (settings.logfp == NULL)
fprintf(stderr,
"advent: can't open logfile %s for write\n",
optarg);
signal(SIGINT, sig_handler);
break;
case 'o':
settings.oldstyle = true;
settings.prompt = false;
break;
#ifdef ADVENT_AUTOSAVE
case 'a':
rfp = fopen(optarg, READ_MODE);
autosave_filename = optarg;
signal(SIGHUP, sig_handler);
signal(SIGTERM, sig_handler);
break;
#elif !defined ADVENT_NOSAVE
case 'r':
rfp = fopen(optarg, "r");
if (rfp == NULL)
fprintf(stderr,
"advent: can't open save file %s for read\n",
optarg);
break;
#endif
default:
fprintf(stderr,
usage, argv[0]);
fprintf(stderr,
" -l create a log file of your game named as specified'\n");
fprintf(stderr,
" -o 'oldstyle' (no prompt, no command editing, displays 'Initialising...')\n");
#if defined ADVENT_AUTOSAVE
fprintf(stderr,
" -a automatic save/restore from specified saved game file\n");
#elif !defined ADVENT_NOSAVE
fprintf(stderr,
" -r restore from specified saved game file\n");
#endif
exit(EXIT_FAILURE);
break;
}
}
/* copy invocation line part after switches */
settings.argc = argc - optind;
settings.argv = argv + optind;
settings.optind = 0;
/* Initialize game variables */
int seedval = initialise();
#if !defined ADVENT_NOSAVE
if (!rfp) {
game.novice = yes_or_no(arbitrary_messages[WELCOME_YOU], arbitrary_messages[CAVE_NEARBY], arbitrary_messages[NO_MESSAGE]);
if (game.novice)
game.limit = NOVICELIMIT;
} else {
restore(rfp);
#if defined ADVENT_AUTOSAVE
score(scoregame);
#endif
}
#if defined ADVENT_AUTOSAVE
if (autosave_filename != NULL) {
if ((autosave_fp = fopen(autosave_filename, WRITE_MODE)) == NULL) {
perror(autosave_filename);
return EXIT_FAILURE;
}
autosave();
}
#endif
#else
game.novice = yes_or_no(arbitrary_messages[WELCOME_YOU], arbitrary_messages[CAVE_NEARBY], arbitrary_messages[NO_MESSAGE]);
if (game.novice)
game.limit = NOVICELIMIT;
#endif
if (settings.logfp)
fprintf(settings.logfp, "seed %d\n", seedval);
/* interpret commands until EOF or interrupt */
for (;;) {
// if we're supposed to move, move
if (!do_move())
continue;
// get command
if (!do_command())
break;
}
/* show score and exit */
terminate(quitgame);
}
/* end */