-/* NetHack 3.7 makedefs.c $NHDT-Date: 1639622361 2021/12/16 02:39:21 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.207 $ */
+/* NetHack 3.7 makedefs.c $NHDT-Date: 1645393932 2022/02/20 21:52:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.211 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
/* Copyright (c) M. Stephenson, 1990, 1991. */
#include "../src/mdlib.c"
+static void makedefs_exit(int) NORETURN;
+
+static void
+makedefs_exit(int how)
+{
+#if 0 /* makedefs doesn't need to do this */
+ release_runtime_info(); /* dynamic data from mdlib.c and date.c */
+#endif
+ exit(how);
+ /*NOTREACHED*/
+}
+
#ifdef MACsansMPWTOOL
int
main(void)
do_ext_makedefs(fakeargc, fakeargv);
#else
printf("extended makedefs not implemented for Mac OS9\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
#endif
}
do_makedefs(buf);
- exit(EXIT_SUCCESS);
+ makedefs_exit(EXIT_SUCCESS);
+ /*NOTREACHED*/
return 0;
}
&& !(argv[1][0] == '-' && argv[1][1] == '-'))) {
Fprintf(stderr, "Bad arg count (%d).\n", argc - 1);
(void) fflush(stderr);
- return 1;
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
#ifdef FILE_PREFIX
} else {
do_makedefs(&argv[1][1]);
}
- exit(EXIT_SUCCESS);
+ makedefs_exit(EXIT_SUCCESS);
/*NOTREACHED*/
return 0;
}
default:
Fprintf(stderr, "Unknown option '%c'.\n", *options);
(void) fflush(stderr);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
options++;
}
if (more_than_one)
Fprintf(stderr, "Completed.\n"); /* feedback */
+ return;
}
static char namebuf[1000];
istemp ? tmpfbuf :
#endif
name);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
return rv;
}
argv++, argc--; \
if (argc == 0) { \
Fprintf(stderr, "missing option\n"); \
- exit(EXIT_FAILURE); \
+ makedefs_exit(EXIT_FAILURE); \
+ /*NOTREACHED*/ \
}
static void
break;
if (argv[0][1] != '-') {
Fprintf(stderr, "Can't mix - and -- options.\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
IS_OPTION("svs") {
/* short version string for packaging - note no \n */
if (argv[0])
strcpy(delim, argv[0]);
Fprintf(stdout, "%s", mdlib_version_string(buf, delim));
- exit(EXIT_SUCCESS);
+ makedefs_exit(EXIT_SUCCESS);
+ /*NOTREACHED*/
}
IS_OPTION("debug") {
debug = TRUE;
IS_OPTION("make") {
CONSUME;
do_makedefs(argv[0]);
- exit(EXIT_SUCCESS);
+ makedefs_exit(EXIT_SUCCESS);
+ /*NOTREACHED*/
}
IS_OPTION("input") {
CONSUME;
inputfp = fopen(argv[0], RDTMODE);
if (!inputfp) {
Fprintf(stderr, "Can't open '%s'.\n", argv[0]);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
}
CONTINUE;
outputfp = fopen(argv[0], WRTMODE);
if (!outputfp) {
Fprintf(stderr, "Can't open '%s'.\n", argv[0]);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
}
CONTINUE;
IS_OPTION("grep") {
if (todo) {
Fprintf(stderr, "Can't do grep and something else.\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
todo = TODO_GREP;
CONTINUE;
}
IS_OPTION("grep-showvars") {
do_grep_showvars();
- exit(EXIT_SUCCESS);
+ makedefs_exit(EXIT_SUCCESS);
+ /*NOTREACHED*/
}
IS_OPTION("grep-trace") {
grep_trace = 1;
p->is_defined = 1;
} else {
Fprintf(stderr, "Unknown symbol '%s'\n", argv[0]);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
CONTINUE;
}
p->is_defined = 0;
} else {
Fprintf(stderr, "Unknown symbol '%s'\n", argv[0]);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
CONTINUE;
}
}
#endif
Fprintf(stderr, "Unknown option '%s'.\n", argv[0]);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (argc) {
Fprintf(stderr, "unexpected argument '%s'.\n", argv[0]);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
switch (todo) {
default:
Fprintf(stderr, "Confused about what to do?\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
+ break;
case 0:
Fprintf(stderr, "Nothing to do?\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
+ break;
case TODO_GREP:
do_grep();
break;
}
+ return;
}
#undef IS_OPTION
case '?': /* if ID */
if (grep_sp == GREP_STACK_SIZE - 2) {
Fprintf(stderr, "stack overflow at line %d.", grep_lineno);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (grep_writing) {
isif = grep_check_id(&buf[1]) ? isif : !isif;
Fprintf(stderr, "--grep requires --output\n");
}
if (!inputfp || !outputfp) {
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
grep0(inputfp, outputfp, 0);
}
if (ferror(inputfp0)) {
Fprintf(stderr, "read error!\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (ferror(outputfp0)) {
Fprintf(stderr, "write error!\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
fclose(inputfp0);
#ifndef HAS_NO_MKSTEMP
if (grep_errors) {
Fprintf(stderr, "%d error%s detected.\n", grep_errors,
grep_errors == 1 ? "" : "s");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
+ return;
}
/* trivial text encryption routine which can't be broken with `tr' */
Strcat(filename, ".txt");
if (!(ifp = fopen(filename, RDTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
filename[0] = '\0';
#ifdef FILE_PREFIX
Sprintf(eos(filename), DATA_TEMPLATE, fname);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
Fprintf(ofp, "%s", Dont_Edit_Data);
/* write out the default content entry unconditionally instead of
Sprintf(eos(filename), DATA_TEMPLATE, RUMOR_FILE);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (!(tfp = fopen(tempfile, WRTMODE))) {
perror(tempfile);
Fclose(ofp);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
true_rumor_count = false_rumor_count = 0;
Unlink(filename); /* kill empty or incomplete output file */
Fclose(tfp);
Unlink(tempfile); /* and temporary file */
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
RESTORE_WARNING_FORMAT_NONLITERAL
Sprintf(eos(filename), INCLUDE_TEMPLATE, DATE_FILE);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
/* NB: We've moved on from SCCS, but this way this line
* won't get clobbered when downstream projects import
Sprintf(eos(filename), DATA_TEMPLATE, OPTIONS_FILE);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
while ((optline = do_runtime_info(&infocontext)) != 0)
Fprintf(ofp, "%s\n", optline);
/* pre-standard compilers didn't support #error; wait til run-time */
Fprintf(stderr,
"Configuration error: DEFAULT_WINDOW_SYS is not defined.\n");
- exit(EXIT_FAILURE);
-/*NOTREACHED*/
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
/* put in a dummy value so that do_options() will compile and makedefs
will build, otherwise the message above won't ever get delivered */
if (!window_opts[0].id) {
Fprintf(stderr, "Configuration error: no windowing systems "
"(TTY_GRAPHICS, &c) enabled.\n");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
{
Fprintf(stderr,
" does not match any enabled windowing system (%s%s).\n",
window_opts[0].id, window_opts[1].id ? ", &c" : "");
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
}
#endif /*DEFAULT_WINDOW_SYS*/
+ return;
}
/* routine to decide whether to discard something from data.base */
#endif
if (!(ifp = fopen(infile, RDTMODE))) { /* data.base */
perror(infile);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (!(ofp = fopen(filename, WRTMODE))) { /* data */
perror(filename);
Fclose(ifp);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (!(tfp = fopen(tempfile, WRTMODE))) { /* database.tmp */
perror(tempfile);
Fclose(ifp);
Fclose(ofp);
Unlink(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
/* output a dummy header record; we'll rewind and overwrite it later */
/* close and kill the aborted output file, then give up */
Fclose(ofp);
Unlink(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
free((genericptr_t) line);
Strcat(infile, ".txt");
if (!(ifp = fopen(infile, RDTMODE))) {
perror(infile);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
Fclose(ifp);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
if (!(tfp = fopen(tempfile, WRTMODE))) { /* oracles.tmp */
perror(tempfile);
Fclose(ifp);
Fclose(ofp);
Unlink(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
/* output a dummy header record; we'll rewind and overwrite it later */
/* close and kill the aborted output file, then give up */
Fclose(ofp);
Unlink(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
free((genericptr_t) line);
Sprintf(filename, DATA_IN_TEMPLATE, DGN_I_FILE);
if (!(ifp = fopen(filename, RDTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
filename[0] = '\0';
#ifdef FILE_PREFIX
Sprintf(eos(filename), DGN_TEMPLATE, DGN_O_FILE);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
Fprintf(ofp, "%s", Dont_Edit_Data);
return FALSE;
}
+/* not quite obsolete but no longer needed to build nethack */
void
do_monstr(void)
{
Sprintf(eos(filename), SOURCE_TEMPLATE, MON_STR_C);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
Fprintf(ofp, "%s", Dont_Edit_Code);
Fprintf(ofp, "#include \"config.h\"\n");
return;
}
+/* obsolete */
void
do_permonst(void)
{
Sprintf(eos(filename), INCLUDE_TEMPLATE, MONST_FILE);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
Fprintf(ofp, "%s", Reference_file);
Fprintf(ofp, "#ifndef PM_H\n#define PM_H\n");
return macronametemp;
}
+/* obsolete */
void
do_objs(void)
{
Sprintf(eos(filename), INCLUDE_TEMPLATE, ONAME_FILE);
if (!(ofp = fopen(filename, WRTMODE))) {
perror(filename);
- exit(EXIT_FAILURE);
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
}
Fprintf(ofp, "%s", Reference_file);
Fprintf(ofp, "#ifndef ONAMES_H\n#define ONAMES_H\n\n");
if (!(objnam = tmpdup(OBJ_NAME(objects[i]))))
continue;
- /* make sure probabilities add up to 1000 */
+ /* done with current class? */
if (objects[i].oc_class != class) {
+#if 0 /* [class total oc_prob of 1000 is no longer enforced] */
+ /* make sure probabilities add up to 1000 */
if (sum && sum != 1000) {
Fprintf(stderr, "prob error for class %d (%d%%)", class, sum);
(void) fflush(stderr);
sumerr = TRUE;
}
+#endif /*0*/
class = objects[i].oc_class;
sum = 0;
}
break;
}
+#if 0 /* [class total oc_prob of 1000 is no longer enforced] */
/* check last set of probabilities */
if (!sumerr && sum && sum != 1000) {
Fprintf(stderr, "prob error for class %d (%d%%)", class, sum);
(void) fflush(stderr);
sumerr = TRUE;
}
+#endif /*0*/
Fprintf(ofp, "\n");
Fprintf(ofp, "#define\tNUM_GLASS_GEMS\t%d\n", n_glass_gems);
Fprintf(ofp, "#define\tNROFARTIFACTS\t%d\n", i - 1);
Fprintf(ofp, "\n#endif /* ONAMES_H */\n");
Fclose(ofp);
- if (sumerr)
- exit(EXIT_FAILURE);
+ if (sumerr) {
+ makedefs_exit(EXIT_FAILURE);
+ /*NOTREACHED*/
+ }
return;
}