From e4ab048c907fb3a6d2666d3264dcd05f96ee24a2 Mon Sep 17 00:00:00 2001 From: Bart House Date: Sat, 24 Nov 2018 18:46:36 -0800 Subject: [PATCH] Even more globals moved to instance_globals.c --- include/decl.h | 62 +++++++++++++++++- src/cmd.c | 11 ++-- src/decl.c | 28 ++++++++ src/dig.c | 2 - src/display.c | 57 +++++++--------- src/do_wear.c | 12 ++-- src/dogmove.c | 2 +- src/drawing.c | 2 +- src/eat.c | 24 ++++--- src/end.c | 34 +++------- src/explode.c | 2 +- src/extralev.c | 78 ++++++++++------------ src/files.c | 173 +++++++++++++++++++++++-------------------------- src/options.c | 21 +++--- 14 files changed, 269 insertions(+), 239 deletions(-) diff --git a/include/decl.h b/include/decl.h index a23c7088b..16195e1ab 100644 --- a/include/decl.h +++ b/include/decl.h @@ -552,6 +552,32 @@ struct trapinfo { boolean force_bungle; }; +typedef struct { + xchar gnew; /* perhaps move this bit into the rm structure. */ + int glyph; +} gbuf_entry; + +enum vanq_order_modes { + VANQ_MLVL_MNDX = 0, + VANQ_MSTR_MNDX, + VANQ_ALPHA_SEP, + VANQ_ALPHA_MIX, + VANQ_MCLS_HTOL, + VANQ_MCLS_LTOH, + VANQ_COUNT_H_L, + VANQ_COUNT_L_H, + + NUM_VANQ_ORDER_MODES +}; + +struct rogueroom { + xchar rlx, rly; + xchar dx, dy; + boolean real; + uchar doortable; + int nroom; /* Only meaningful for "real" rooms */ +}; + /* instance_globals holds engine state that does not need to be * persisted upon game exit. The initialization state is well defined * an set in decl.c during early early engine initialization. @@ -559,6 +585,7 @@ struct trapinfo { * unlike instance_flags, values in the structure can be of any type. */ #define BSIZE 20 +#define WIZKIT_MAX 128 struct instance_globals { @@ -603,6 +630,7 @@ struct instance_globals { coord clicklook_cc; winid en_win; boolean en_via_menu; + int last_multi; /* dbridge.c */ struct entity occupants[ENTITIES]; @@ -611,6 +639,12 @@ struct instance_globals { boolean did_dig_msg; + /* display.c */ + gbuf_entry gbuf[ROWNO][COLNO]; + char gbuf_start[ROWNO]; + char gbuf_stop[ROWNO]; + + /* do.c */ boolean at_ladder; char *dfr_pre_msg; /* pline() before level change */ @@ -622,6 +656,11 @@ struct instance_globals { int gloc_filter_floodfill_match_glyph; int via_naming; + /* do_wear.c */ + /* starting equipment gets auto-worn at beginning of new game, + and we don't want stealth or displacement feedback then */ + boolean initial_don; /* manipulated in set_wear() */ + /* dog.c */ int petname_used; /* user preferred pet name has been used */ xchar gtyp; /* type of dog's current goal */ @@ -648,12 +687,29 @@ struct instance_globals { /* eat.c */ boolean force_save_hs; + char *eatmbuf; /* set by cpostfx() */ + /* end.c */ struct valuable_data gems[LAST_GEM + 1 - FIRST_GEM + 1]; /* +1 for glass */ struct valuable_data amulets[LAST_AMULET + 1 - FIRST_AMULET]; struct val_list valuables[3]; - + int vanq_sortmode; + + /* extralev.c */ + struct rogueroom r[3][3]; + + /* files.c */ + char wizkit[WIZKIT_MAX]; + int lockptr; + char *config_section_chosen; + char *config_section_current; + int nesting; + int symset_count; /* for pick-list building only */ + boolean chosen_symset_start; + boolean chosen_symset_end; + int symset_which_set; + /* hack.c */ anything tmp_anything; int wc; /* current weight_cap(); valid after call to inv_weight() */ @@ -727,6 +783,10 @@ struct instance_globals { modified */ int distantname; + /* options.c */ + struct symsetentry *symset_list; /* files.c will populate this with + list of available sets */ + /* pickup.c */ int oldcap; /* last encumberance */ /* current_container is set in use_container(), to be used by the diff --git a/src/cmd.c b/src/cmd.c index 5dc9e3bbd..62f594e94 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -5320,9 +5320,6 @@ boolean doit; return ch; } - -static NEARDATA int last_multi; - /* * convert a MAP window position into a movecmd */ @@ -5543,7 +5540,7 @@ parse() long tmpmulti = multi; foo = get_count((char *) 0, '\0', LARGEST_INT, &tmpmulti, FALSE); - last_multi = multi = tmpmulti; + g.last_multi = multi = tmpmulti; } #ifdef ALTMETA alt_esc = FALSE; /* readchar() reset */ @@ -5557,11 +5554,11 @@ parse() if (foo == g.Cmd.spkeys[NHKF_ESC]) { /* esc cancels count (TH) */ clear_nhwindow(WIN_MESSAGE); - multi = last_multi = 0; + multi = g.last_multi = 0; } else if (foo == g.Cmd.spkeys[NHKF_DOAGAIN] || in_doagain) { - multi = last_multi; + multi = g.last_multi; } else { - last_multi = multi; + g.last_multi = multi; savech(0); /* reset input queue */ savech((char) foo); } diff --git a/src/decl.c b/src/decl.c index b030b054d..0f18aacba 100644 --- a/src/decl.c +++ b/src/decl.c @@ -354,6 +354,7 @@ const struct instance_globals g_init = { UNDEFINED_VALUES, /* clicklook_cc */ WIN_ERR, /* en_win */ FALSE, /* en_via_menu */ + UNDEFINED_VALUE, /* last_multi */ /* dbridge.c */ UNDEFINED_VALUES, @@ -361,6 +362,11 @@ const struct instance_globals g_init = { /* dig.c */ UNDEFINED_VALUE, /* did_dig_msg */ + /* display.c */ + UNDEFINED_VALUES, + UNDEFINED_VALUES, + UNDEFINED_VALUES, + /* do.c */ FALSE, /* at_ladder */ NULL, /* dfr_pre_msg */ @@ -372,6 +378,9 @@ const struct instance_globals g_init = { UNDEFINED_VALUE, /* gloc_filter_floodfill_match_glyph */ 0, /* via_naming */ + /* do_wear.c */ + FALSE, /* initial_don */ + /* dog.c */ 0, /* petname_used */ UNDEFINED_VALUE, /* gtyp */ @@ -398,11 +407,27 @@ const struct instance_globals g_init = { /* eat.c */ FALSE, /* force_save_hs */ + NULL, /* eatmbuf */ /* end.c */ UNDEFINED_VALUES, UNDEFINED_VALUES, UNDEFINED_VALUES, + VANQ_MLVL_MNDX, + + /* extralev.c */ + UNDEFINED_VALUES, + + /* files.c */ + UNDEFINED_VALUES, /* wizkit */ + UNDEFINED_VALUE, /* lockptr */ + NULL, /* config_section_chosen */ + NULL, /* config_section_current */ + 0, /* nesting */ + 0, /* symset_count */ + FALSE, /* chosen_symset_start */ + FALSE, /* chosen_symset_end */ + 0, /* symset_which_set */ /* hack.c */ UNDEFINED_VALUES, @@ -461,6 +486,9 @@ const struct instance_globals g_init = { /* objname.c */ 0, /* distantname */ + /* options.c */ + NULL, /* symset_list */ + /* pickup.c */ 0, /* oldcap */ UNDEFINED_PTR, /* current_container */ diff --git a/src/dig.c b/src/dig.c index 9c50cc1e6..b689e6133 100644 --- a/src/dig.c +++ b/src/dig.c @@ -5,8 +5,6 @@ #include "hack.h" -static NEARDATA boolean did_dig_msg; - STATIC_DCL boolean NDECL(rm_waslit); STATIC_DCL void FDECL(mkcavepos, (XCHAR_P, XCHAR_P, int, BOOLEAN_P, BOOLEAN_P)); diff --git a/src/display.c b/src/display.c index 129b63fd3..e27fc7f2f 100644 --- a/src/display.c +++ b/src/display.c @@ -1378,15 +1378,6 @@ docrt() /* Glyph Buffering (3rd screen) ============================================ */ -typedef struct { - xchar new; /* perhaps move this bit into the rm structure. */ - int glyph; -} gbuf_entry; - -static gbuf_entry gbuf[ROWNO][COLNO]; -static char gbuf_start[ROWNO]; -static char gbuf_stop[ROWNO]; - /* FIXME: This is a dirty hack, because newsym() doesn't distinguish * between object piles and single objects, it doesn't mark the location * for update. */ @@ -1395,11 +1386,11 @@ newsym_force(x, y) register int x, y; { newsym(x,y); - gbuf[y][x].new = 1; - if (gbuf_start[y] > x) - gbuf_start[y] = x; - if (gbuf_stop[y] < x) - gbuf_stop[y] = x; + g.gbuf[y][x].gnew = 1; + if (g.gbuf_start[y] > x) + g.gbuf_start[y] = x; + if (g.gbuf_stop[y] < x) + g.gbuf_stop[y] = x; } /* @@ -1475,13 +1466,13 @@ int x, y, glyph; return; } - if (gbuf[y][x].glyph != glyph || iflags.use_background_glyph) { - gbuf[y][x].glyph = glyph; - gbuf[y][x].new = 1; - if (gbuf_start[y] > x) - gbuf_start[y] = x; - if (gbuf_stop[y] < x) - gbuf_stop[y] = x; + if (g.gbuf[y][x].glyph != glyph || iflags.use_background_glyph) { + g.gbuf[y][x].glyph = glyph; + g.gbuf[y][x].gnew = 1; + if (g.gbuf_start[y] > x) + g.gbuf_start[y] = x; + if (g.gbuf_stop[y] < x) + g.gbuf_stop[y] = x; } } @@ -1494,12 +1485,12 @@ int x, y, glyph; int i; \ \ for (i = 0; i < ROWNO; i++) { \ - gbuf_start[i] = COLNO - 1; \ - gbuf_stop[i] = 0; \ + g.gbuf_start[i] = COLNO - 1; \ + g.gbuf_stop[i] = 0; \ } \ } -static gbuf_entry nul_gbuf = { 0, cmap_to_glyph(S_stone) }; +static const gbuf_entry nul_gbuf = { 0, cmap_to_glyph(S_stone) }; /* * Turn the 3rd screen into stone. */ @@ -1510,7 +1501,7 @@ clear_glyph_buffer() register gbuf_entry *gptr; for (y = 0; y < ROWNO; y++) { - gptr = &gbuf[y][0]; + gptr = &g.gbuf[y][0]; for (x = COLNO; x; x--) { *gptr++ = nul_gbuf; } @@ -1528,8 +1519,8 @@ int start, stop, y; register int x; for (x = start; x <= stop; x++) - if (gbuf[y][x].glyph != cmap_to_glyph(S_stone)) - print_glyph(WIN_MAP, x, y, gbuf[y][x].glyph, get_bk_glyph(x,y)); + if (g.gbuf[y][x].glyph != cmap_to_glyph(S_stone)) + print_glyph(WIN_MAP, x, y, g.gbuf[y][x].glyph, get_bk_glyph(x,y)); } void @@ -1575,11 +1566,11 @@ int cursor_on_u; #endif for (y = 0; y < ROWNO; y++) { - register gbuf_entry *gptr = &gbuf[y][x = gbuf_start[y]]; - for (; x <= gbuf_stop[y]; gptr++, x++) - if (gptr->new) { + register gbuf_entry *gptr = &g.gbuf[y][x = g.gbuf_start[y]]; + for (; x <= g.gbuf_stop[y]; gptr++, x++) + if (gptr->gnew) { print_glyph(WIN_MAP, x, y, gptr->glyph, get_bk_glyph(x, y)); - gptr->new = 0; + gptr->gnew = 0; } } @@ -1791,7 +1782,7 @@ xchar x, y; { if (x < 0 || y < 0 || x >= COLNO || y >= ROWNO) return cmap_to_glyph(S_room); /* XXX */ - return gbuf[y][x].glyph; + return g.gbuf[y][x].glyph; } /* @@ -1812,7 +1803,7 @@ xchar x, y; struct rm *lev = &levl[x][y]; if (iflags.use_background_glyph && lev->seenv != 0 - && gbuf[y][x].glyph != cmap_to_glyph(S_stone)) { + && g.gbuf[y][x].glyph != cmap_to_glyph(S_stone)) { switch (lev->typ) { case SCORR: case STONE: diff --git a/src/do_wear.c b/src/do_wear.c index 8300bd0c2..b67ee8c37 100644 --- a/src/do_wear.c +++ b/src/do_wear.c @@ -71,10 +71,6 @@ struct obj *otmp; } } -/* starting equipment gets auto-worn at beginning of new game, - and we don't want stealth or displacement feedback then */ -static boolean initial_don = FALSE; /* manipulated in set_wear() */ - /* putting on or taking off an item which confers stealth; give feedback and discover it iff stealth state is changing */ STATIC_OVL @@ -84,7 +80,7 @@ struct obj *obj; long oldprop; /* prop[].extrinsic, with obj->owornmask stripped by caller */ boolean on; { - if (on ? initial_don : context.takeoff.cancelled_don) + if (on ? g.initial_don : context.takeoff.cancelled_don) return; if (!oldprop /* extrinsic stealth from something else */ @@ -118,7 +114,7 @@ struct obj *obj; long oldprop; /* prop[].extrinsic, with obj->owornmask stripped by caller */ boolean on; { - if (on ? initial_don : context.takeoff.cancelled_don) + if (on ? g.initial_don : context.takeoff.cancelled_don) return; if (!oldprop /* extrinsic displacement from something else */ @@ -1161,7 +1157,7 @@ void set_wear(obj) struct obj *obj; /* if null, do all worn items; otherwise just obj itself */ { - initial_don = !obj; + g.initial_don = !obj; if (!obj ? ublindf != 0 : (obj == ublindf)) (void) Blindf_on(ublindf); @@ -1187,7 +1183,7 @@ struct obj *obj; /* if null, do all worn items; otherwise just obj itself */ if (!obj ? uarms != 0 : (obj == uarms)) (void) Shield_on(); - initial_don = FALSE; + g.initial_don = FALSE; } /* check whether the target object is currently being put on (or taken off-- diff --git a/src/dogmove.c b/src/dogmove.c index 2003bc77a..3fe8737e6 100644 --- a/src/dogmove.c +++ b/src/dogmove.c @@ -1334,7 +1334,7 @@ genericptr_t distance; } } -static struct qmchoices { +static const struct qmchoices { int mndx; /* type of pet, 0 means any */ char mlet; /* symbol of pet, 0 means any */ unsigned mappearance; /* mimic this */ diff --git a/src/drawing.c b/src/drawing.c index 87991e3ac..0407011ba 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -569,7 +569,7 @@ const char *known_restrictions[] = { "primary", "rogue", (const char *) 0, }; -struct symparse loadsyms[] = { +const struct symparse loadsyms[] = { { SYM_CONTROL, 0, "start" }, { SYM_CONTROL, 0, "begin" }, { SYM_CONTROL, 1, "finish" }, diff --git a/src/eat.c b/src/eat.c index 555fa82fe..54f18fc79 100644 --- a/src/eat.c +++ b/src/eat.c @@ -144,17 +144,15 @@ static const struct { { "", 0, 0, 0 } }; #define TTSZ SIZE(tintxts) -static char *eatmbuf = 0; /* set by cpostfx() */ - /* called after mimicing is over */ STATIC_PTR int eatmdone(VOID_ARGS) { /* release `eatmbuf' */ - if (eatmbuf) { - if (nomovemsg == eatmbuf) + if (g.eatmbuf) { + if (nomovemsg == g.eatmbuf) nomovemsg = 0; - free((genericptr_t) eatmbuf), eatmbuf = 0; + free((genericptr_t) g.eatmbuf), g.eatmbuf = 0; } /* update display */ if (youmonst.m_ap_type) { @@ -171,7 +169,7 @@ eatmupdate() const char *altmsg = 0; int altapp = 0; /* lint suppression */ - if (!eatmbuf || nomovemsg != eatmbuf) + if (!g.eatmbuf || nomovemsg != g.eatmbuf) return; if (is_obj_mappear(&youmonst,ORANGE) && !Hallucination) { @@ -188,11 +186,11 @@ eatmupdate() if (altmsg) { /* replace end-of-mimicking message */ - if (strlen(altmsg) > strlen(eatmbuf)) { - free((genericptr_t) eatmbuf); - eatmbuf = (char *) alloc(strlen(altmsg) + 1); + if (strlen(altmsg) > strlen(g.eatmbuf)) { + free((genericptr_t) g.eatmbuf); + g.eatmbuf = (char *) alloc(strlen(altmsg) + 1); } - nomovemsg = strcpy(eatmbuf, altmsg); + nomovemsg = strcpy(g.eatmbuf, altmsg); /* update current image */ youmonst.mappearance = altapp; newsym(u.ux, u.uy); @@ -947,7 +945,7 @@ int pm; /* in case `afternmv' didn't get called for previously mimicking gold, clean up now to avoid `eatmbuf' memory leak */ - if (eatmbuf) + if (g.eatmbuf) (void) eatmdone(); switch (pm) { @@ -1033,8 +1031,8 @@ int pm; ? "You suddenly dread being peeled and mimic %s again!" : "You now prefer mimicking %s again.", an(Upolyd ? youmonst.data->mname : urace.noun)); - eatmbuf = dupstr(buf); - nomovemsg = eatmbuf; + g.eatmbuf = dupstr(buf); + nomovemsg = g.eatmbuf; afternmv = eatmdone; /* ??? what if this was set before? */ youmonst.m_ap_type = M_AP_OBJECT; diff --git a/src/end.c b/src/end.c index f0d0542c9..a8fe9017f 100644 --- a/src/end.c +++ b/src/end.c @@ -1637,19 +1637,6 @@ int status; nethack_exit(status); } -enum vanq_order_modes { - VANQ_MLVL_MNDX = 0, - VANQ_MSTR_MNDX, - VANQ_ALPHA_SEP, - VANQ_ALPHA_MIX, - VANQ_MCLS_HTOL, - VANQ_MCLS_LTOH, - VANQ_COUNT_H_L, - VANQ_COUNT_L_H, - - NUM_VANQ_ORDER_MODES -}; - static const char *vanqorders[NUM_VANQ_ORDER_MODES] = { "traditional: by monster level, by internal monster index", "by monster toughness, by internal monster index", @@ -1660,7 +1647,6 @@ static const char *vanqorders[NUM_VANQ_ORDER_MODES] = { "by count, high to low, by internal index within tied count", "by count, low to high, by internal index within tied count", }; -static int vanq_sortmode = VANQ_MLVL_MNDX; STATIC_PTR int CFDECLSPEC vanqsort_cmp(vptr1, vptr2) @@ -1672,7 +1658,7 @@ const genericptr vptr2; const char *name1, *name2, *punct; schar mcls1, mcls2; - switch (vanq_sortmode) { + switch (g.vanq_sortmode) { default: case VANQ_MLVL_MNDX: /* sort by monster level */ @@ -1724,7 +1710,7 @@ const genericptr vptr2; if (res == 0) { mlev1 = mons[indx1].mlevel, mlev2 = mons[indx2].mlevel; res = mlev1 - mlev2; /* mlevel low to high */ - if (vanq_sortmode == VANQ_MCLS_HTOL) + if (g.vanq_sortmode == VANQ_MCLS_HTOL) res = -res; /* mlevel high to low */ } break; @@ -1732,7 +1718,7 @@ const genericptr vptr2; case VANQ_COUNT_L_H: died1 = mvitals[indx1].died, died2 = mvitals[indx2].died; res = died2 - died1; /* dead count high to low */ - if (vanq_sortmode == VANQ_COUNT_L_H) + if (g.vanq_sortmode == VANQ_COUNT_L_H) res = -res; /* dead count low to high */ break; } @@ -1759,7 +1745,7 @@ set_vanq_order() continue; any.a_int = i + 1; add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, vanqorders[i], - (i == vanq_sortmode) ? MENU_SELECTED : MENU_UNSELECTED); + (i == g.vanq_sortmode) ? MENU_SELECTED : MENU_UNSELECTED); } end_menu(tmpwin, "Sort order for vanquished monster counts"); @@ -1768,12 +1754,12 @@ set_vanq_order() if (n > 0) { choice = selected[0].item.a_int - 1; /* skip preselected entry if we have more than one item chosen */ - if (n > 1 && choice == vanq_sortmode) + if (n > 1 && choice == g.vanq_sortmode) choice = selected[1].item.a_int - 1; free((genericptr_t) selected); - vanq_sortmode = choice; + g.vanq_sortmode = choice; } - return (n < 0) ? -1 : vanq_sortmode; + return (n < 0) ? -1 : g.vanq_sortmode; } /* #vanquished command */ @@ -1835,9 +1821,9 @@ boolean ask; if (set_vanq_order() < 0) return; } - uniq_header = (vanq_sortmode == VANQ_ALPHA_SEP); - class_header = (vanq_sortmode == VANQ_MCLS_LTOH - || vanq_sortmode == VANQ_MCLS_HTOL); + uniq_header = (g.vanq_sortmode == VANQ_ALPHA_SEP); + class_header = (g.vanq_sortmode == VANQ_MCLS_LTOH + || g.vanq_sortmode == VANQ_MCLS_HTOL); klwin = create_nhwindow(NHW_MENU); putstr(klwin, 0, "Vanquished creatures:"); diff --git a/src/explode.c b/src/explode.c index 941d22201..ed0b1d7e3 100644 --- a/src/explode.c +++ b/src/explode.c @@ -5,7 +5,7 @@ #include "hack.h" /* Note: Arrays are column first, while the screen is row first */ -static int explosion[3][3] = { { S_explode1, S_explode4, S_explode7 }, +static const int explosion[3][3] = { { S_explode1, S_explode4, S_explode7 }, { S_explode2, S_explode5, S_explode8 }, { S_explode3, S_explode6, S_explode9 } }; diff --git a/src/extralev.c b/src/extralev.c index 54e935e08..50b2f81a1 100644 --- a/src/extralev.c +++ b/src/extralev.c @@ -8,19 +8,11 @@ #include "hack.h" -struct rogueroom { - xchar rlx, rly; - xchar dx, dy; - boolean real; - uchar doortable; - int nroom; /* Only meaningful for "real" rooms */ -}; #define UP 1 #define DOWN 2 #define LEFT 4 #define RIGHT 8 -static NEARDATA struct rogueroom r[3][3]; STATIC_DCL void FDECL(roguejoin, (int, int, int, int, int)); STATIC_DCL void FDECL(roguecorr, (int, int, int)); STATIC_DCL void FDECL(miniwalk, (int, int)); @@ -59,20 +51,20 @@ int x, y, dir; register int fromx, fromy, tox, toy; if (dir == DOWN) { - r[x][y].doortable &= ~DOWN; - if (!r[x][y].real) { - fromx = r[x][y].rlx; - fromy = r[x][y].rly; + g.r[x][y].doortable &= ~DOWN; + if (!g.r[x][y].real) { + fromx = g.r[x][y].rlx; + fromy = g.r[x][y].rly; fromx += 1 + 26 * x; fromy += 7 * y; } else { - fromx = r[x][y].rlx + rn2(r[x][y].dx); - fromy = r[x][y].rly + r[x][y].dy; + fromx = g.r[x][y].rlx + rn2(g.r[x][y].dx); + fromy = g.r[x][y].rly + g.r[x][y].dy; fromx += 1 + 26 * x; fromy += 7 * y; if (!IS_WALL(levl[fromx][fromy].typ)) impossible("down: no wall at %d,%d?", fromx, fromy); - dodoor(fromx, fromy, &rooms[r[x][y].nroom]); + dodoor(fromx, fromy, &rooms[g.r[x][y].nroom]); levl[fromx][fromy].doormask = D_NODOOR; fromy++; } @@ -81,40 +73,40 @@ int x, y, dir; return; } y++; - r[x][y].doortable &= ~UP; - if (!r[x][y].real) { - tox = r[x][y].rlx; - toy = r[x][y].rly; + g.r[x][y].doortable &= ~UP; + if (!g.r[x][y].real) { + tox = g.r[x][y].rlx; + toy = g.r[x][y].rly; tox += 1 + 26 * x; toy += 7 * y; } else { - tox = r[x][y].rlx + rn2(r[x][y].dx); - toy = r[x][y].rly - 1; + tox = g.r[x][y].rlx + rn2(g.r[x][y].dx); + toy = g.r[x][y].rly - 1; tox += 1 + 26 * x; toy += 7 * y; if (!IS_WALL(levl[tox][toy].typ)) impossible("up: no wall at %d,%d?", tox, toy); - dodoor(tox, toy, &rooms[r[x][y].nroom]); + dodoor(tox, toy, &rooms[g.r[x][y].nroom]); levl[tox][toy].doormask = D_NODOOR; toy--; } roguejoin(fromx, fromy, tox, toy, FALSE); return; } else if (dir == RIGHT) { - r[x][y].doortable &= ~RIGHT; - if (!r[x][y].real) { - fromx = r[x][y].rlx; - fromy = r[x][y].rly; + g.r[x][y].doortable &= ~RIGHT; + if (!g.r[x][y].real) { + fromx = g.r[x][y].rlx; + fromy = g.r[x][y].rly; fromx += 1 + 26 * x; fromy += 7 * y; } else { - fromx = r[x][y].rlx + r[x][y].dx; - fromy = r[x][y].rly + rn2(r[x][y].dy); + fromx = g.r[x][y].rlx + g.r[x][y].dx; + fromy = g.r[x][y].rly + rn2(g.r[x][y].dy); fromx += 1 + 26 * x; fromy += 7 * y; if (!IS_WALL(levl[fromx][fromy].typ)) impossible("down: no wall at %d,%d?", fromx, fromy); - dodoor(fromx, fromy, &rooms[r[x][y].nroom]); + dodoor(fromx, fromy, &rooms[g.r[x][y].nroom]); levl[fromx][fromy].doormask = D_NODOOR; fromx++; } @@ -123,20 +115,20 @@ int x, y, dir; return; } x++; - r[x][y].doortable &= ~LEFT; - if (!r[x][y].real) { - tox = r[x][y].rlx; - toy = r[x][y].rly; + g.r[x][y].doortable &= ~LEFT; + if (!g.r[x][y].real) { + tox = g.r[x][y].rlx; + toy = g.r[x][y].rly; tox += 1 + 26 * x; toy += 7 * y; } else { - tox = r[x][y].rlx - 1; - toy = r[x][y].rly + rn2(r[x][y].dy); + tox = g.r[x][y].rlx - 1; + toy = g.r[x][y].rly + rn2(g.r[x][y].dy); tox += 1 + 26 * x; toy += 7 * y; if (!IS_WALL(levl[tox][toy].typ)) impossible("left: no wall at %d,%d?", tox, toy); - dodoor(tox, toy, &rooms[r[x][y].nroom]); + dodoor(tox, toy, &rooms[g.r[x][y].nroom]); levl[tox][toy].doormask = D_NODOOR; tox--; } @@ -157,18 +149,18 @@ int x, y; while (1) { q = 0; -#define doorhere (r[x][y].doortable) +#define doorhere (g.r[x][y].doortable) if (x > 0 && (!(doorhere & LEFT)) - && (!r[x - 1][y].doortable || !rn2(10))) + && (!g.r[x - 1][y].doortable || !rn2(10))) dirs[q++] = 0; if (x < 2 && (!(doorhere & RIGHT)) - && (!r[x + 1][y].doortable || !rn2(10))) + && (!g.r[x + 1][y].doortable || !rn2(10))) dirs[q++] = 1; if (y > 0 && (!(doorhere & UP)) - && (!r[x][y - 1].doortable || !rn2(10))) + && (!g.r[x][y - 1].doortable || !rn2(10))) dirs[q++] = 2; if (y < 2 && (!(doorhere & DOWN)) - && (!r[x][y + 1].doortable || !rn2(10))) + && (!g.r[x][y + 1].doortable || !rn2(10))) dirs[q++] = 3; /* Rogue levels aren't just 3 by 3 mazes; they have some extra * connections, thus that 1/10 chance @@ -222,7 +214,7 @@ makeroguerooms() * Room height may be 2-4 (2-5 on last row), length 2-23 (not * counting walls). */ -#define here r[x][y] +#define here g.r[x][y] nroom = 0; for (y = 0; y < 3; y++) @@ -256,7 +248,7 @@ makeroguerooms() if (here.real) { /* Make a room */ int lowx, lowy, hix, hiy; - r[x][y].nroom = nroom; + g.r[x][y].nroom = nroom; smeq[nroom] = nroom; lowx = 1 + 26 * x + here.rlx; diff --git a/src/files.c b/src/files.c index 57b2c65df..d80ee27cc 100644 --- a/src/files.c +++ b/src/files.c @@ -125,15 +125,12 @@ struct level_ftrack { #endif #endif /*HOLD_LOCKFILE_OPEN*/ -#define WIZKIT_MAX 128 -static char wizkit[WIZKIT_MAX]; STATIC_DCL FILE *NDECL(fopen_wizkit_file); STATIC_DCL void FDECL(wizkit_addinv, (struct obj *)); #ifdef AMIGA extern char PATH[]; /* see sys/amiga/amidos.c */ extern char bbs_id[]; -static int lockptr; #ifdef __SASC_60 #include #endif @@ -143,7 +140,6 @@ extern void FDECL(amii_set_text_font, (char *, int)); #endif #if defined(WIN32) || defined(MSDOS) -static int lockptr; #ifdef MSDOS #define Delay(a) msleep(a) #endif @@ -215,9 +211,6 @@ STATIC_DCL int FDECL(open_levelfile_exclusively, (const char *, int, int)); #endif -static char *config_section_chosen = (char *) 0; -static char *config_section_current = (char *) 0; - /* * fname_encode() * @@ -1611,8 +1604,6 @@ boolean uncomp; /* ---------- BEGIN FILE LOCKING HANDLING ----------- */ -static int nesting = 0; - #if defined(NO_FILE_LINKS) || defined(USE_FCNTL) /* implies UNIX */ static int lockfd; /* for lock_file() to pass to unlock_file() */ #endif @@ -1674,8 +1665,8 @@ int retryct; const char *lockname; #endif - nesting++; - if (nesting > 1) { + g.nesting++; + if (g.nesting > 1) { impossible("TRIED TO NEST LOCKS"); return TRUE; } @@ -1692,7 +1683,7 @@ int retryct; if (lockfd == -1) { HUP raw_printf("Cannot open file %s. Is NetHack installed correctly?", filename); - nesting--; + g.nesting--; return FALSE; } sflock.l_type = F_WRLCK; @@ -1722,7 +1713,7 @@ int retryct; HUP(void) raw_print("I give up. Sorry."); HUP raw_printf("Some other process has an unnatural grip on %s.", filename); - nesting--; + g.nesting--; return FALSE; } #else @@ -1742,25 +1733,25 @@ int retryct; HUP(void) raw_print("I give up. Sorry."); HUP raw_printf("Perhaps there is an old %s around?", lockname); - nesting--; + g.nesting--; return FALSE; } break; case ENOENT: HUP raw_printf("Can't find file %s to lock!", filename); - nesting--; + g.nesting--; return FALSE; case EACCES: HUP raw_printf("No write permission to lock %s!", filename); - nesting--; + g.nesting--; return FALSE; #ifdef VMS /* c__translate(vmsfiles.c) */ case EPERM: /* could be misleading, but usually right */ HUP raw_printf("Can't lock %s due to directory protection.", filename); - nesting--; + g.nesting--; return FALSE; #endif case EROFS: @@ -1769,13 +1760,13 @@ int retryct; HUP raw_printf("Cannot lock %s.", filename); HUP raw_printf( "(Perhaps you are running NetHack from inside the distribution package?)."); - nesting--; + g.nesting--; return FALSE; default: HUP perror(lockname); HUP raw_printf("Cannot lock %s for unknown reason (%d).", filename, errnosv); - nesting--; + g.nesting--; return FALSE; } #endif /* USE_FCNTL */ @@ -1786,23 +1777,23 @@ int retryct; && !defined(USE_FCNTL) #ifdef AMIGA #define OPENFAILURE(fd) (!fd) - lockptr = 0; + g.lockptr = 0; #else #define OPENFAILURE(fd) (fd < 0) - lockptr = -1; + g.lockptr = -1; #endif - while (--retryct && OPENFAILURE(lockptr)) { + while (--retryct && OPENFAILURE(g.lockptr)) { #if defined(WIN32) && !defined(WIN_CE) - lockptr = sopen(lockname, O_RDWR | O_CREAT, SH_DENYRW, S_IWRITE); + g.lockptr = sopen(lockname, O_RDWR | O_CREAT, SH_DENYRW, S_IWRITE); #else (void) DeleteFile(lockname); /* in case dead process was here first */ #ifdef AMIGA - lockptr = Open(lockname, MODE_NEWFILE); + g.lockptr = Open(lockname, MODE_NEWFILE); #else - lockptr = open(lockname, O_RDWR | O_CREAT | O_EXCL, S_IWRITE); + g.lockptr = open(lockname, O_RDWR | O_CREAT | O_EXCL, S_IWRITE); #endif #endif - if (OPENFAILURE(lockptr)) { + if (OPENFAILURE(g.lockptr)) { raw_printf("Waiting for access to %s. (%d retries left).", filename, retryct); Delay(50); @@ -1810,7 +1801,7 @@ int retryct; } if (!retryct) { raw_printf("I give up. Sorry."); - nesting--; + g.nesting--; return FALSE; } #endif /* AMIGA || WIN32 || MSDOS */ @@ -1834,7 +1825,7 @@ const char *filename; const char *lockname; #endif - if (nesting == 1) { + if (g.nesting == 1) { #ifdef USE_FCNTL sflock.l_type = F_UNLCK; if (fcntl(lockfd, F_SETLK, &sflock) == -1) { @@ -1857,15 +1848,15 @@ const char *filename; #endif /* UNIX || VMS */ #if defined(AMIGA) || defined(WIN32) || defined(MSDOS) - if (lockptr) - Close(lockptr); + if (g.lockptr) + Close(g.lockptr); DeleteFile(lockname); - lockptr = 0; + g.lockptr = 0; #endif /* AMIGA || WIN32 || MSDOS */ #endif /* USE_FCNTL */ } - nesting--; + g.nesting--; } /* ---------- END FILE LOCKING HANDLING ----------- */ @@ -2183,13 +2174,13 @@ char sep; STATIC_OVL void free_config_sections() { - if (config_section_chosen) { - free(config_section_chosen); - config_section_chosen = NULL; + if (g.config_section_chosen) { + free(g.config_section_chosen); + g.config_section_chosen = NULL; } - if (config_section_current) { - free(config_section_current); - config_section_current = NULL; + if (g.config_section_current) { + free(g.config_section_current); + g.config_section_current = NULL; } } @@ -2208,20 +2199,20 @@ char *buf; { if (is_config_section(buf)) { char *send; - if (config_section_current) { - free(config_section_current); + if (g.config_section_current) { + free(g.config_section_current); } - config_section_current = dupstr(&buf[1]); - send = rindex(config_section_current, ']'); + g.config_section_current = dupstr(&buf[1]); + send = rindex(g.config_section_current, ']'); *send = '\0'; - debugpline1("set config section: '%s'", config_section_current); + debugpline1("set config section: '%s'", g.config_section_current); return TRUE; } - if (config_section_current) { - if (!config_section_chosen) + if (g.config_section_current) { + if (!g.config_section_chosen) return TRUE; - if (strcmp(config_section_current, config_section_chosen)) + if (strcmp(g.config_section_current, g.config_section_chosen)) return TRUE; } return FALSE; @@ -2562,7 +2553,7 @@ char *origbuf; } switch_symbols(TRUE); } else if (match_varname(buf, "WIZKIT", 6)) { - (void) strncpy(wizkit, bufp, WIZKIT_MAX - 1); + (void) strncpy(g.wizkit, bufp, WIZKIT_MAX - 1); #ifdef AMIGA } else if (match_varname(buf, "FONT", 4)) { char *t; @@ -2873,58 +2864,58 @@ fopen_wizkit_file() envp = nh_getenv("WIZKIT"); if (envp && *envp) - (void) strncpy(wizkit, envp, WIZKIT_MAX - 1); - if (!wizkit[0]) + (void) strncpy(g.wizkit, envp, WIZKIT_MAX - 1); + if (!g.wizkit[0]) return (FILE *) 0; #ifdef UNIX - if (access(wizkit, 4) == -1) { + if (access(g.wizkit, 4) == -1) { /* 4 is R_OK on newer systems */ /* nasty sneaky attempt to read file through * NetHack's setuid permissions -- this is a * place a file name may be wholly under the player's * control */ - raw_printf("Access to %s denied (%d).", wizkit, errno); + raw_printf("Access to %s denied (%d).", g.wizkit, errno); wait_synch(); /* fall through to standard names */ } else #endif - if ((fp = fopenp(wizkit, "r")) != (FILE *) 0) { + if ((fp = fopenp(g.wizkit, "r")) != (FILE *) 0) { return fp; #if defined(UNIX) || defined(VMS) } else { /* access() above probably caught most problems for UNIX */ - raw_printf("Couldn't open requested config file %s (%d).", wizkit, + raw_printf("Couldn't open requested config file %s (%d).", g.wizkit, errno); wait_synch(); #endif } #if defined(MICRO) || defined(MAC) || defined(__BEOS__) || defined(WIN32) - if ((fp = fopenp(fqname(wizkit, CONFIGPREFIX, 0), "r")) != (FILE *) 0) + if ((fp = fopenp(fqname(g.wizkit, CONFIGPREFIX, 0), "r")) != (FILE *) 0) return fp; #else #ifdef VMS envp = nh_getenv("HOME"); if (envp) - Sprintf(tmp_wizkit, "%s%s", envp, wizkit); + Sprintf(tmp_wizkit, "%s%s", envp, g.wizkit); else - Sprintf(tmp_wizkit, "%s%s", "sys$login:", wizkit); + Sprintf(tmp_wizkit, "%s%s", "sys$login:", g.wizkit); if ((fp = fopenp(tmp_wizkit, "r")) != (FILE *) 0) return fp; #else /* should be only UNIX left */ envp = nh_getenv("HOME"); if (envp) - Sprintf(tmp_wizkit, "%s/%s", envp, wizkit); + Sprintf(tmp_wizkit, "%s/%s", envp, g.wizkit); else - Strcpy(tmp_wizkit, wizkit); + Strcpy(tmp_wizkit, g.wizkit); if ((fp = fopenp(tmp_wizkit, "r")) != (FILE *) 0) return fp; else if (errno != ENOENT) { /* e.g., problems when setuid NetHack can't search home * directory restricted to user */ - raw_printf("Couldn't open default wizkit file %s (%d).", tmp_wizkit, + raw_printf("Couldn't open default g.wizkit file %s (%d).", tmp_wizkit, errno); wait_synch(); } @@ -3106,11 +3097,11 @@ boolean FDECL((*proc), (char *)); continue; } bufp++; - if (config_section_chosen) - free(config_section_chosen); + if (g.config_section_chosen) + free(g.config_section_chosen); section = choose_random_part(bufp, ','); if (section) - config_section_chosen = dupstr(section); + g.config_section_chosen = dupstr(section); else { config_error_add("No config section to choose"); rv = FALSE; @@ -3136,13 +3127,9 @@ boolean FDECL((*proc), (char *)); return rv; } -extern struct symsetentry *symset_list; /* options.c */ extern struct symparse loadsyms[]; /* drawing.c */ extern const char *known_handling[]; /* drawing.c */ extern const char *known_restrictions[]; /* drawing.c */ -static int symset_count = 0; /* for pick-list building only */ -static boolean chosen_symset_start = FALSE, chosen_symset_end = FALSE; -static int symset_which_set = 0; STATIC_OVL FILE * @@ -3167,16 +3154,16 @@ int which_set; if (!(fp = fopen_sym_file())) return 0; - symset_count = 0; - chosen_symset_start = chosen_symset_end = FALSE; - symset_which_set = which_set; + g.symset_count = 0; + g.chosen_symset_start = g.chosen_symset_end = FALSE; + g.symset_which_set = which_set; config_error_init(TRUE, "symbols", FALSE); parse_conf_file(fp, proc_symset_line); (void) fclose(fp); - if (!chosen_symset_start && !chosen_symset_end) { + if (!g.chosen_symset_start && !g.chosen_symset_end) { /* name caller put in symset[which_set].name was not found; if it looks like "Default symbols", null it out and return success to use the default; otherwise, return failure */ @@ -3188,7 +3175,7 @@ int which_set; config_error_done(); return (g.symset[which_set].name == 0) ? 1 : 0; } - if (!chosen_symset_end) + if (!g.chosen_symset_end) config_error_add("Missing finish for symset \"%s\"", g.symset[which_set].name ? g.symset[which_set].name : "unknown"); @@ -3202,7 +3189,7 @@ boolean proc_symset_line(buf) char *buf; { - return !((boolean) parse_sym_line(buf, symset_which_set)); + return !((boolean) parse_sym_line(buf, g.symset_which_set)); } /* returns 0 on error */ @@ -3235,9 +3222,9 @@ int which_set; if (!bufp) { if (strncmpi(buf, "finish", 6) == 0) { /* end current graphics set */ - if (chosen_symset_start) - chosen_symset_end = TRUE; - chosen_symset_start = FALSE; + if (g.chosen_symset_start) + g.chosen_symset_end = TRUE; + g.chosen_symset_start = FALSE; return 1; } config_error_add("No \"finish\""); @@ -3266,15 +3253,15 @@ int which_set; tmpsp = (struct symsetentry *) alloc(sizeof (struct symsetentry)); tmpsp->next = (struct symsetentry *) 0; - if (!symset_list) { - symset_list = tmpsp; - symset_count = 0; + if (!g.symset_list) { + g.symset_list = tmpsp; + g.symset_count = 0; } else { - symset_count++; - tmpsp->next = symset_list; - symset_list = tmpsp; + g.symset_count++; + tmpsp->next = g.symset_list; + g.symset_list = tmpsp; } - tmpsp->idx = symset_count; + tmpsp->idx = g.symset_count; tmpsp->name = dupstr(bufp); tmpsp->desc = (char *) 0; tmpsp->nocolor = 0; @@ -3284,7 +3271,7 @@ int which_set; break; case 2: /* handler type identified */ - tmpsp = symset_list; /* most recent symset */ + tmpsp = g.symset_list; /* most recent symset */ tmpsp->handling = H_UNK; i = 0; while (known_handling[i]) { @@ -3296,13 +3283,13 @@ int which_set; } break; case 3: /* description:something */ - tmpsp = symset_list; /* most recent symset */ + tmpsp = g.symset_list; /* most recent symset */ if (tmpsp && !tmpsp->desc) tmpsp->desc = dupstr(bufp); break; case 5: /* restrictions: xxxx*/ - tmpsp = symset_list; /* most recent symset */ + tmpsp = g.symset_list; /* most recent symset */ for (i = 0; known_restrictions[i]; ++i) { if (!strcmpi(known_restrictions[i], bufp)) { switch (i) { @@ -3328,7 +3315,7 @@ int which_set; /* start of symset */ if (!strcmpi(bufp, g.symset[which_set].name)) { /* matches desired one */ - chosen_symset_start = TRUE; + g.chosen_symset_start = TRUE; /* these init_*() functions clear symset fields too */ if (which_set == ROGUESET) init_r_symbols(); @@ -3338,18 +3325,18 @@ int which_set; break; case 1: /* finish symset */ - if (chosen_symset_start) - chosen_symset_end = TRUE; - chosen_symset_start = FALSE; + if (g.chosen_symset_start) + g.chosen_symset_end = TRUE; + g.chosen_symset_start = FALSE; break; case 2: /* handler type identified */ - if (chosen_symset_start) + if (g.chosen_symset_start) set_symhandling(bufp, which_set); break; /* case 3: (description) is ignored here */ case 4: /* color:off */ - if (chosen_symset_start) { + if (g.chosen_symset_start) { if (bufp) { if (!strcmpi(bufp, "true") || !strcmpi(bufp, "yes") || !strcmpi(bufp, "on")) @@ -3362,7 +3349,7 @@ int which_set; } break; case 5: /* restrictions: xxxx*/ - if (chosen_symset_start) { + if (g.chosen_symset_start) { int n = 0; while (known_restrictions[n]) { @@ -3384,7 +3371,7 @@ int which_set; } } else { /* !SYM_CONTROL */ val = sym_val(bufp); - if (chosen_symset_start) { + if (g.chosen_symset_start) { if (which_set == PRIMARY) { update_l_symset(symp, val); } else if (which_set == ROGUESET) { diff --git a/src/options.c b/src/options.c index aeb9eaaf5..b21df6a81 100644 --- a/src/options.c +++ b/src/options.c @@ -4567,9 +4567,6 @@ int numtotal; return opt_idx; } -struct symsetentry *symset_list = 0; /* files.c will populate this with - list of available sets */ - STATIC_OVL boolean special_handling(optname, setinitial, setfromfile) const char *optname; @@ -5214,14 +5211,14 @@ boolean setinitial, setfromfile; /* clear symset[].name as a flag to read_sym_file() to build list */ symset_name = g.symset[which_set].name; g.symset[which_set].name = (char *) 0; - symset_list = (struct symsetentry *) 0; + g.symset_list = (struct symsetentry *) 0; res = read_sym_file(which_set); - if (res && symset_list) { + if (res && g.symset_list) { char symsetchoice[BUFSZ]; int let = 'a', biggest = 0, thissize = 0; - sl = symset_list; + sl = g.symset_list; while (sl) { /* check restrictions */ if ((!rogueflag && sl->rogue) @@ -5252,7 +5249,7 @@ boolean setinitial, setfromfile; add_menu(tmpwin, NO_GLYPH, &any, let++, 0, ATR_NONE, "Default Symbols", MENU_UNSELECTED); - sl = symset_list; + sl = g.symset_list; while (sl) { /* check restrictions */ if ((!rogueflag && sl->rogue) @@ -5284,7 +5281,7 @@ boolean setinitial, setfromfile; if (chosen > -1) { /* chose an actual symset name from file */ - sl = symset_list; + sl = g.symset_list; while (sl) { if (sl->idx == chosen) { if (symset_name) { @@ -5315,15 +5312,15 @@ boolean setinitial, setfromfile; /* The symbols file could not be accessed */ pline("Unable to access \"%s\" file.", SYMBOLS); return TRUE; - } else if (!symset_list) { + } else if (!g.symset_list) { /* The symbols file was empty */ pline("There were no symbol sets found in \"%s\".", SYMBOLS); return TRUE; } /* clean up */ - while (symset_list) { - sl = symset_list; + while (g.symset_list) { + sl = g.symset_list; if (sl->name) free((genericptr_t) sl->name); sl->name = (char *) 0; @@ -5332,7 +5329,7 @@ boolean setinitial, setfromfile; free((genericptr_t) sl->desc); sl->desc = (char *) 0; - symset_list = sl->next; + g.symset_list = sl->next; free((genericptr_t) sl); }