split g into multiple structures
The consolidation of global variables from scattered source
files into decl.c and declared in decl.h was begun in 3.7.0.
Their placement in common files was done for centralized
initialization and potential re-initialization during a
"play again" scenario.
It wasn't really necessary for all of them to be housed in a
single huge structure to meet the "play again" requirement,
and the single huge structure has been a little unwieldy when
it comes to maintenance.
Following this commit, instead of one single extremely large structure
named 'g' to house all of the relocated global variables, they
are distributed into several ga through gz.
To make things easy for the developer, each variable is placed
into the struct corresponding to the starting letter of the variable.
That way, no lookup is required in order to know which struct houses
a particular variable, it is a simple match to the starting letter
for all the centralized global variables.
A global variable named 'amulets', would be found in ga.
ga.amulets
^ ^
A global varable named 'move', would be found in gm.
gm.moves
^ ^
A global variable named 'val_for_n_or_more' would be found in gv.
gv.val_for_n_or_more
^ ^
A global variable named 'youmonst' would be found in gy.
gy.youmonst
^ ^
This commit is contained in:
134
src/rumors.c
134
src/rumors.c
@@ -90,17 +90,17 @@ init_rumors(dlb *fp)
|
||||
|
||||
(void) dlb_fgets(line, sizeof line, fp); /* skip "don't edit" comment */
|
||||
(void) dlb_fgets(line, sizeof line, fp);
|
||||
if (sscanf(line, rumors_header, &true_count, &g.true_rumor_size,
|
||||
&g.true_rumor_start, &false_count, &g.false_rumor_size,
|
||||
&g.false_rumor_start, &eof_offset) == 7
|
||||
&& g.true_rumor_size > 0L
|
||||
&& g.false_rumor_size > 0L) {
|
||||
g.true_rumor_end = (long) g.true_rumor_start + g.true_rumor_size;
|
||||
/* assert( g.true_rumor_end == false_rumor_start ); */
|
||||
g.false_rumor_end = (long) g.false_rumor_start + g.false_rumor_size;
|
||||
/* assert( g.false_rumor_end == eof_offset ); */
|
||||
if (sscanf(line, rumors_header, &true_count, >.true_rumor_size,
|
||||
>.true_rumor_start, &false_count, &gf.false_rumor_size,
|
||||
&gf.false_rumor_start, &eof_offset) == 7
|
||||
&& gt.true_rumor_size > 0L
|
||||
&& gf.false_rumor_size > 0L) {
|
||||
gt.true_rumor_end = (long) gt.true_rumor_start + gt.true_rumor_size;
|
||||
/* assert( gt.true_rumor_end == false_rumor_start ); */
|
||||
gf.false_rumor_end = (long) gf.false_rumor_start + gf.false_rumor_size;
|
||||
/* assert( gf.false_rumor_end == eof_offset ); */
|
||||
} else {
|
||||
g.true_rumor_size = -1L; /* init failed */
|
||||
gt.true_rumor_size = -1L; /* init failed */
|
||||
(void) dlb_fclose(fp);
|
||||
}
|
||||
}
|
||||
@@ -123,7 +123,7 @@ getrumor(
|
||||
char line[BUFSZ];
|
||||
|
||||
rumor_buf[0] = '\0';
|
||||
if (g.true_rumor_size < 0L) /* a previous try failed to open RUMORFILE */
|
||||
if (gt.true_rumor_size < 0L) /* a previous try failed to open RUMORFILE */
|
||||
return rumor_buf;
|
||||
|
||||
rumors = dlb_fopen(RUMORFILE, "r");
|
||||
@@ -133,9 +133,9 @@ getrumor(
|
||||
|
||||
do {
|
||||
rumor_buf[0] = '\0';
|
||||
if (g.true_rumor_size == 0L) { /* if this is 1st outrumor() */
|
||||
if (gt.true_rumor_size == 0L) { /* if this is 1st outrumor() */
|
||||
init_rumors(rumors);
|
||||
if (g.true_rumor_size < 0L) { /* init failed */
|
||||
if (gt.true_rumor_size < 0L) { /* init failed */
|
||||
Sprintf(rumor_buf, "Error reading \"%.80s\".", RUMORFILE);
|
||||
return rumor_buf;
|
||||
}
|
||||
@@ -148,13 +148,13 @@ getrumor(
|
||||
switch (adjtruth = truth + rn2(2)) {
|
||||
case 2: /*(might let a bogus input arg sneak thru)*/
|
||||
case 1:
|
||||
beginning = (long) g.true_rumor_start;
|
||||
ending = g.true_rumor_end;
|
||||
beginning = (long) gt.true_rumor_start;
|
||||
ending = gt.true_rumor_end;
|
||||
break;
|
||||
case 0: /* once here, 0 => false rather than "either"*/
|
||||
case -1:
|
||||
beginning = (long) g.false_rumor_start;
|
||||
ending = g.false_rumor_end;
|
||||
beginning = (long) gf.false_rumor_start;
|
||||
ending = gf.false_rumor_end;
|
||||
break;
|
||||
default:
|
||||
impossible("strange truth value for rumor");
|
||||
@@ -169,11 +169,11 @@ getrumor(
|
||||
(void) dlb_fclose(rumors);
|
||||
if (count >= 50)
|
||||
impossible("Can't find non-cookie rumor?");
|
||||
else if (!g.in_mklev) /* avoid exercizing wisdom for graffiti */
|
||||
else if (!gi.in_mklev) /* avoid exercizing wisdom for graffiti */
|
||||
exercise(A_WIS, (adjtruth > 0));
|
||||
} else {
|
||||
couldnt_open_file(RUMORFILE);
|
||||
g.true_rumor_size = -1; /* don't try to open it again */
|
||||
gt.true_rumor_size = -1; /* don't try to open it again */
|
||||
}
|
||||
return rumor_buf;
|
||||
}
|
||||
@@ -187,14 +187,14 @@ rumor_check(void)
|
||||
winid tmpwin = WIN_ERR;
|
||||
char *endp, line[BUFSZ], xbuf[BUFSZ], rumor_buf[BUFSZ];
|
||||
|
||||
rumors = (g.true_rumor_size >= 0) ? dlb_fopen(RUMORFILE, "r") : 0;
|
||||
rumors = (gt.true_rumor_size >= 0) ? dlb_fopen(RUMORFILE, "r") : 0;
|
||||
if (rumors) {
|
||||
long ftell_rumor_start = 0L;
|
||||
|
||||
rumor_buf[0] = '\0';
|
||||
if (g.true_rumor_size == 0L) { /* if this is 1st outrumor() */
|
||||
if (gt.true_rumor_size == 0L) { /* if this is 1st outrumor() */
|
||||
init_rumors(rumors);
|
||||
if (g.true_rumor_size < 0L) {
|
||||
if (gt.true_rumor_size < 0L) {
|
||||
rumors = (dlb *) 0; /* init_rumors() closes it upon failure */
|
||||
goto no_rumors; /* init failed */
|
||||
}
|
||||
@@ -206,15 +206,15 @@ rumor_check(void)
|
||||
*/
|
||||
Sprintf(rumor_buf,
|
||||
"T start=%06ld (%06lx), end=%06ld (%06lx), size=%06ld (%06lx)",
|
||||
(long) g.true_rumor_start, g.true_rumor_start,
|
||||
g.true_rumor_end, (unsigned long) g.true_rumor_end,
|
||||
g.true_rumor_size,(unsigned long) g.true_rumor_size);
|
||||
(long) gt.true_rumor_start, gt.true_rumor_start,
|
||||
gt.true_rumor_end, (unsigned long) gt.true_rumor_end,
|
||||
gt.true_rumor_size,(unsigned long) gt.true_rumor_size);
|
||||
putstr(tmpwin, 0, rumor_buf);
|
||||
Sprintf(rumor_buf,
|
||||
"F start=%06ld (%06lx), end=%06ld (%06lx), size=%06ld (%06lx)",
|
||||
(long) g.false_rumor_start, g.false_rumor_start,
|
||||
g.false_rumor_end, (unsigned long) g.false_rumor_end,
|
||||
g.false_rumor_size, (unsigned long) g.false_rumor_size);
|
||||
(long) gf.false_rumor_start, gf.false_rumor_start,
|
||||
gf.false_rumor_end, (unsigned long) gf.false_rumor_end,
|
||||
gf.false_rumor_size, (unsigned long) gf.false_rumor_size);
|
||||
putstr(tmpwin, 0, rumor_buf);
|
||||
|
||||
/*
|
||||
@@ -225,7 +225,7 @@ rumor_check(void)
|
||||
* the value read in rumors, and display it.
|
||||
*/
|
||||
rumor_buf[0] = '\0';
|
||||
(void) dlb_fseek(rumors, (long) g.true_rumor_start, SEEK_SET);
|
||||
(void) dlb_fseek(rumors, (long) gt.true_rumor_start, SEEK_SET);
|
||||
ftell_rumor_start = dlb_ftell(rumors);
|
||||
(void) dlb_fgets(line, sizeof line, rumors);
|
||||
if ((endp = strchr(line, '\n')) != 0)
|
||||
@@ -235,7 +235,7 @@ rumor_check(void)
|
||||
putstr(tmpwin, 0, rumor_buf);
|
||||
/* find last true rumor */
|
||||
while (dlb_fgets(line, sizeof line, rumors)
|
||||
&& dlb_ftell(rumors) < g.true_rumor_end)
|
||||
&& dlb_ftell(rumors) < gt.true_rumor_end)
|
||||
continue;
|
||||
if ((endp = strchr(line, '\n')) != 0)
|
||||
*endp = 0;
|
||||
@@ -243,7 +243,7 @@ rumor_check(void)
|
||||
putstr(tmpwin, 0, rumor_buf);
|
||||
|
||||
rumor_buf[0] = '\0';
|
||||
(void) dlb_fseek(rumors, (long) g.false_rumor_start, SEEK_SET);
|
||||
(void) dlb_fseek(rumors, (long) gf.false_rumor_start, SEEK_SET);
|
||||
ftell_rumor_start = dlb_ftell(rumors);
|
||||
(void) dlb_fgets(line, sizeof line, rumors);
|
||||
if ((endp = strchr(line, '\n')) != 0)
|
||||
@@ -253,7 +253,7 @@ rumor_check(void)
|
||||
putstr(tmpwin, 0, rumor_buf);
|
||||
/* find last false rumor */
|
||||
while (dlb_fgets(line, sizeof line, rumors)
|
||||
&& dlb_ftell(rumors) < g.false_rumor_end)
|
||||
&& dlb_ftell(rumors) < gf.false_rumor_end)
|
||||
continue;
|
||||
if ((endp = strchr(line, '\n')) != 0)
|
||||
*endp = 0;
|
||||
@@ -264,7 +264,7 @@ rumor_check(void)
|
||||
|
||||
/* if a previous attempt couldn't open file or rejected its contents,
|
||||
we didn't bother trying again this time */
|
||||
} else if (g.true_rumor_size < 0L) {
|
||||
} else if (gt.true_rumor_size < 0L) {
|
||||
no_rumors: /* file could be opened but init_rumors() didn't like it */
|
||||
pline("rumors not accessible.");
|
||||
/* engravings, epitaphs, and bogus monsters will still be shown,
|
||||
@@ -274,7 +274,7 @@ rumor_check(void)
|
||||
/* first attempt to open file has just failed */
|
||||
} else {
|
||||
couldnt_open_file(RUMORFILE);
|
||||
g.true_rumor_size = -1; /* don't try to open it again */
|
||||
gt.true_rumor_size = -1; /* don't try to open it again */
|
||||
}
|
||||
|
||||
/* initial implementation of default epitaph/engraving/bogusmon
|
||||
@@ -570,11 +570,11 @@ init_oracles(dlb *fp)
|
||||
(void) dlb_fgets(line, sizeof line, fp); /* skip "don't edit" comment*/
|
||||
(void) dlb_fgets(line, sizeof line, fp);
|
||||
if (sscanf(line, "%5d\n", &cnt) == 1 && cnt > 0) {
|
||||
g.oracle_cnt = (unsigned) cnt;
|
||||
g.oracle_loc = (unsigned long *) alloc((unsigned) cnt * sizeof(long));
|
||||
go.oracle_cnt = (unsigned) cnt;
|
||||
go.oracle_loc = (unsigned long *) alloc((unsigned) cnt * sizeof(long));
|
||||
for (i = 0; i < cnt; i++) {
|
||||
(void) dlb_fgets(line, sizeof line, fp);
|
||||
(void) sscanf(line, "%5lx\n", &g.oracle_loc[i]);
|
||||
(void) sscanf(line, "%5lx\n", &go.oracle_loc[i]);
|
||||
}
|
||||
}
|
||||
return;
|
||||
@@ -585,19 +585,19 @@ save_oracles(NHFILE *nhfp)
|
||||
{
|
||||
if (perform_bwrite(nhfp)) {
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.oracle_cnt,
|
||||
sizeof g.oracle_cnt);
|
||||
if (g.oracle_cnt) {
|
||||
bwrite(nhfp->fd, (genericptr_t) &go.oracle_cnt,
|
||||
sizeof go.oracle_cnt);
|
||||
if (go.oracle_cnt) {
|
||||
if (nhfp->structlevel) {
|
||||
bwrite(nhfp->fd, (genericptr_t) g.oracle_loc,
|
||||
g.oracle_cnt * sizeof (long));
|
||||
bwrite(nhfp->fd, (genericptr_t) go.oracle_loc,
|
||||
go.oracle_cnt * sizeof (long));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (release_data(nhfp)) {
|
||||
if (g.oracle_cnt) {
|
||||
free((genericptr_t) g.oracle_loc);
|
||||
g.oracle_loc = 0, g.oracle_cnt = 0, g.oracle_flg = 0;
|
||||
if (go.oracle_cnt) {
|
||||
free((genericptr_t) go.oracle_loc);
|
||||
go.oracle_loc = 0, go.oracle_cnt = 0, go.oracle_flg = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -606,15 +606,15 @@ void
|
||||
restore_oracles(NHFILE *nhfp)
|
||||
{
|
||||
if (nhfp->structlevel)
|
||||
mread(nhfp->fd, (genericptr_t) &g.oracle_cnt, sizeof g.oracle_cnt);
|
||||
mread(nhfp->fd, (genericptr_t) &go.oracle_cnt, sizeof go.oracle_cnt);
|
||||
|
||||
if (g.oracle_cnt) {
|
||||
g.oracle_loc = (unsigned long *) alloc(g.oracle_cnt * sizeof(long));
|
||||
if (go.oracle_cnt) {
|
||||
go.oracle_loc = (unsigned long *) alloc(go.oracle_cnt * sizeof(long));
|
||||
if (nhfp->structlevel) {
|
||||
mread(nhfp->fd, (genericptr_t) g.oracle_loc,
|
||||
g.oracle_cnt * sizeof (long));
|
||||
mread(nhfp->fd, (genericptr_t) go.oracle_loc,
|
||||
go.oracle_cnt * sizeof (long));
|
||||
}
|
||||
g.oracle_flg = 1; /* no need to call init_oracles() */
|
||||
go.oracle_flg = 1; /* no need to call init_oracles() */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -628,26 +628,26 @@ outoracle(boolean special, boolean delphi)
|
||||
|
||||
/* early return if we couldn't open ORACLEFILE on previous attempt,
|
||||
or if all the oracularities are already exhausted */
|
||||
if (g.oracle_flg < 0 || (g.oracle_flg > 0 && g.oracle_cnt == 0))
|
||||
if (go.oracle_flg < 0 || (go.oracle_flg > 0 && go.oracle_cnt == 0))
|
||||
return;
|
||||
|
||||
oracles = dlb_fopen(ORACLEFILE, "r");
|
||||
|
||||
if (oracles) {
|
||||
if (g.oracle_flg == 0) { /* if this is the first outoracle() */
|
||||
if (go.oracle_flg == 0) { /* if this is the first outoracle() */
|
||||
init_oracles(oracles);
|
||||
g.oracle_flg = 1;
|
||||
if (g.oracle_cnt == 0)
|
||||
go.oracle_flg = 1;
|
||||
if (go.oracle_cnt == 0)
|
||||
goto close_oracles;
|
||||
}
|
||||
/* oracle_loc[0] is the special oracle;
|
||||
oracle_loc[1..oracle_cnt-1] are normal ones */
|
||||
if (g.oracle_cnt <= 1 && !special)
|
||||
if (go.oracle_cnt <= 1 && !special)
|
||||
goto close_oracles; /*(shouldn't happen)*/
|
||||
oracle_idx = special ? 0 : rnd((int) g.oracle_cnt - 1);
|
||||
(void) dlb_fseek(oracles, (long) g.oracle_loc[oracle_idx], SEEK_SET);
|
||||
oracle_idx = special ? 0 : rnd((int) go.oracle_cnt - 1);
|
||||
(void) dlb_fseek(oracles, (long) go.oracle_loc[oracle_idx], SEEK_SET);
|
||||
if (!special) /* move offset of very last one into this slot */
|
||||
g.oracle_loc[oracle_idx] = g.oracle_loc[--g.oracle_cnt];
|
||||
go.oracle_loc[oracle_idx] = go.oracle_loc[--go.oracle_cnt];
|
||||
|
||||
tmpwin = create_nhwindow(NHW_TEXT);
|
||||
if (delphi)
|
||||
@@ -670,7 +670,7 @@ outoracle(boolean special, boolean delphi)
|
||||
(void) dlb_fclose(oracles);
|
||||
} else {
|
||||
couldnt_open_file(ORACLEFILE);
|
||||
g.oracle_flg = -1; /* don't try to open it again */
|
||||
go.oracle_flg = -1; /* don't try to open it again */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -682,8 +682,8 @@ doconsult(struct monst *oracl)
|
||||
int add_xpts;
|
||||
char qbuf[QBUFSZ];
|
||||
|
||||
g.multi = 0;
|
||||
umoney = money_cnt(g.invent);
|
||||
gm.multi = 0;
|
||||
umoney = money_cnt(gi.invent);
|
||||
|
||||
if (!oracl) {
|
||||
There("is no one here to consult.");
|
||||
@@ -711,7 +711,7 @@ doconsult(struct monst *oracl)
|
||||
break;
|
||||
case 'n':
|
||||
if (umoney <= (long) minor_cost /* don't even ask */
|
||||
|| (g.oracle_cnt == 1 || g.oracle_flg < 0))
|
||||
|| (go.oracle_cnt == 1 || go.oracle_flg < 0))
|
||||
return ECMD_OK;
|
||||
Sprintf(qbuf, "\"Then dost thou desire a major one?\" (%d %s)",
|
||||
major_cost, currency((long) major_cost));
|
||||
@@ -721,7 +721,7 @@ doconsult(struct monst *oracl)
|
||||
break;
|
||||
}
|
||||
money2mon(oracl, (long) u_pay);
|
||||
g.context.botl = 1;
|
||||
gc.context.botl = 1;
|
||||
if (!u.uevent.major_oracle && !u.uevent.minor_oracle)
|
||||
record_achievement(ACH_ORCL);
|
||||
add_xpts = 0; /* first oracle of each type gives experience points */
|
||||
@@ -751,16 +751,16 @@ doconsult(struct monst *oracl)
|
||||
static void
|
||||
couldnt_open_file(const char *filename)
|
||||
{
|
||||
int save_something = g.program_state.something_worth_saving;
|
||||
int save_something = gp.program_state.something_worth_saving;
|
||||
|
||||
/* most likely the file is missing, so suppress impossible()'s
|
||||
"saving and restoring might fix this" (unless the fuzzer,
|
||||
which escalates impossible to panic, is running) */
|
||||
if (!iflags.debug_fuzzer)
|
||||
g.program_state.something_worth_saving = 0;
|
||||
gp.program_state.something_worth_saving = 0;
|
||||
|
||||
impossible("Can't open '%s' file.", filename);
|
||||
g.program_state.something_worth_saving = save_something;
|
||||
gp.program_state.something_worth_saving = save_something;
|
||||
}
|
||||
|
||||
/* is 'word' a capitalized monster name that should be preceded by "the"?
|
||||
|
||||
Reference in New Issue
Block a user