more #302 - empty {bogusmon,engrave,epitaph}.txt

Have makedefs add a real data line to the output for the files that
caused trouble when empty.
This commit is contained in:
PatR
2020-02-22 12:32:00 -08:00
parent dc70132da8
commit 5d4b9784ac

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 makedefs.c $NHDT-Date: 1575161967 2019/12/01 00:59:27 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.168 $ */ /* NetHack 3.6 makedefs.c $NHDT-Date: 1582403492 2020/02/22 20:31:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.177 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */ /*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
/* Copyright (c) M. Stephenson, 1990, 1991. */ /* Copyright (c) M. Stephenson, 1990, 1991. */
@@ -177,7 +177,7 @@ static void FDECL(do_ext_makedefs, (int, char **));
static char *FDECL(xcrypt, (const char *)); static char *FDECL(xcrypt, (const char *));
static unsigned long FDECL(read_rumors_file, static unsigned long FDECL(read_rumors_file,
(const char *, int *, long *, unsigned long)); (const char *, int *, long *, unsigned long));
static void FDECL(do_rnd_access_file, (const char *)); static void FDECL(do_rnd_access_file, (const char *, const char *));
static boolean FDECL(d_filter, (char *)); static boolean FDECL(d_filter, (char *));
static boolean FDECL(h_filter, (char *)); static boolean FDECL(h_filter, (char *));
static void FDECL(opt_out_words, (char *, int *)); static void FDECL(opt_out_words, (char *, int *));
@@ -341,9 +341,22 @@ char *options;
break; break;
case 's': case 's':
case 'S': case 'S':
do_rnd_access_file(EPITAPHFILE); /*
do_rnd_access_file(ENGRAVEFILE); * post-3.6.5:
do_rnd_access_file(BOGUSMONFILE); * File must not be empty to avoid divide by 0
* in core's rn2(), so provide a default entry.
*/
do_rnd_access_file(EPITAPHFILE,
/* default epitaph: parody of the default engraving */
"No matter where I went, here I am.");
do_rnd_access_file(ENGRAVEFILE,
/* default engraving: popularized by "The Adventures of
Buckaroo Bonzai Across the 8th Dimenstion" but predates
that 1984 movie; some attribute it to Confucius */
"No matter where you go, there you are.");
do_rnd_access_file(BOGUSMONFILE,
/* default bogusmon: iconic monster that isn't in nethack */
"grue");
break; break;
case 'h': case 'h':
case 'H': case 'H':
@@ -929,8 +942,9 @@ unsigned long old_rumor_offset;
} }
static void static void
do_rnd_access_file(fname) do_rnd_access_file(fname, deflt_content)
const char *fname; const char *fname;
const char *deflt_content;
{ {
char *line; char *line;
@@ -950,6 +964,11 @@ const char *fname;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
Fprintf(ofp, "%s", Dont_Edit_Data); Fprintf(ofp, "%s", Dont_Edit_Data);
/* write out the default content entry unconditionally instead of
waiting to see whether there are no regular output lines; if it
matches a regular entry (bogusmon "grue"), that entry will become
more likely to be picked than normal but it's nothing to worry about */
(void) fputs(xcrypt(deflt_content), ofp);
tfp = getfp(DATA_TEMPLATE, "grep.tmp", WRTMODE); tfp = getfp(DATA_TEMPLATE, "grep.tmp", WRTMODE);
grep0(ifp, tfp); grep0(ifp, tfp);
@@ -958,7 +977,7 @@ const char *fname;
while ((line = fgetline(ifp)) != 0) { while ((line = fgetline(ifp)) != 0) {
if (line[0] != '#' && line[0] != '\n') if (line[0] != '#' && line[0] != '\n')
(void) fputs(xcrypt(line), ofp); (void) fputs(xcrypt(line), ofp);
free(line); free((genericptr_t) line);
} }
Fclose(ifp); Fclose(ifp);
Fclose(ofp); Fclose(ofp);