};
#endif
-#ifdef PLAYAGAIN
-const struct savefile_info default_sfinfo = {
-#ifdef NHSTDC
- 0x00000000UL
-#else
- 0x00000000L
-#endif
-#if defined(COMPRESS) || defined(ZLIB_COMP)
- | SFI1_EXTERNALCOMP
-#endif
-#if defined(ZEROCOMP)
- | SFI1_ZEROCOMP
-#endif
-#if defined(RLECOMP)
- | SFI1_RLECOMP
-#endif
- ,
-#ifdef NHSTDC
- 0x00000000UL, 0x00000000UL
-#else
- 0x00000000L, 0x00000000L
-#endif
-};
-#endif
-
NEARDATA struct savefile_info sfcap = {
#ifdef NHSTDC
0x00000000UL
return;
}
-#ifdef PLAYAGAIN
-
-static boolean s_firstStart = TRUE;
-
-static boolean
-decl_is_block_zero(p, n)
-unsigned char * p;
-int n;
-{
- static unsigned char zeroblock[512] = { 0 };
- unsigned char * sentinel = p + n;
- while (p < sentinel) {
- int c = (n < sizeof(zeroblock) ? n : sizeof(zeroblock));
- if (memcmp(p, zeroblock, c) != 0) return FALSE;
- p += c;
- }
- return TRUE;
-}
-
-static void
-decl_zero_block(p, n)
-unsigned char * p;
-int n;
-{
- nhassert(!s_firstStart || decl_is_block_zero(p, n));
- memset(p, 0, n);
-}
-
-#define ZEROARRAY(x) decl_zero_block((void *) &x[0], 0, sizeof(x))
-#define ZEROARRAYN(x,n) decl_zero_block((void *) &x[0], 0, sizeof(x[0])*(n))
-#define ZERO(x) decl_zero_block((void *) &x, 0, sizeof(x))
-#define ZEROPTR(x) { nhassert(x == NULL); x = NULL; }
-#define ZEROPTRNOCHECK(x) { x = NULL; }
-
-/* decl_early_init() is called when we are starting a game. On first
- * start, it validates that global state is in the expected state.
- * When called on subsequent starts, it initializes global state to
- * expected state.
- *
- * In the case that of global pointers, on subsequent starts it will
- * panic if it finds a non-NULL pointer with the assumption that a
- * pointer has leaked. */
-
-void
-decl_early_init()
-{
- hackpid = 0;
-#if defined(UNIX) || defined(VMS)
- locknum = 0;
-#endif
-#ifdef DEF_PAGER
- catmore = 0;
-#endif
-
- ZEROARRAY(bases);
-
- multi = 0;
- multi_reason = NULL;
- nroom = 0;
- nsubroom = 0;
- occtime = 0;
-
- x_maze_max = (COLNO - 1) & ~1;
- y_maze_max = (ROWNO - 1) & ~1;
-
- otg_temp = 0;
-
- ZERO(dungeon_topology);
- ZERO(quest_status);
-
- warn_obj_cnt = 0;
- ZEROARRAYN(smeq, MAXNROFROOMS + 1);
- doorindex = 0;
- save_cm = NULL;
-
- ZERO(killer);
- done_money = 0;
- nomovemsg = NULL;
- ZEROARRAY(plname);
- ZEROARRAY(pl_character);
- pl_race = '\0';
-
- ZEROARRAY(pl_fruit);
- ffruit = NULL;
-
- ZEROARRAY(tune);
-
- occtxt = NULL;
-
- yn_number = 0;
-
-#if defined(MICRO) || defined(WIN32)
- ZEROARRAYN(hackdir, PATHLEN);
-#ifdef MICRO
- ZEROARRAYN(levels, PATHLEN);
-#endif /* MICRO */
-#endif /* MICRO || WIN32 */
-
-#ifdef MFLOPPY
- ZEROARRAYN(permbones, PATHLEN);
- ramdisk = FALSE;
- saveprompt = TRUE;
-#endif
-
- ZEROARRAY(level_info);
-
- ZERO(program_state);
-
- tbx = 0;
- tby = 0;
-
- ZERO(m_shot);
-
- ZEROARRAYN(dungeons, MAXDUNGEON);
- ZEROPTR(sp_levchn);
- ZERO(upstair);
- ZERO(dnstair);
- ZERO(upladder);
- ZERO(dnladder);
- ZERO(sstairs);
- ZERO(updest);
- ZERO(dndest);
- ZERO(inv_pos);
-
- defer_see_monsters = FALSE;
- in_mklev = FALSE;
- stoned = FALSE;
- unweapon = FALSE;
- mrg_to_wielded = FALSE;
-
- in_steed_dismounting = FALSE;
-
- ZERO(bhitpos);
- ZEROARRAY(doors);
-
- ZEROARRAY(rooms);
- subrooms = &rooms[MAXNROFROOMS + 1];
- upstairs_room = NULL;
- dnstairs_room = NULL;
- sstairs_room = NULL;
-
- ZERO(level);
- ZEROPTR(ftrap);
- ZERO(youmonst);
- ZERO(context);
- ZERO(flags);
-#ifdef SYSFLAGS
- ZERO(sysflags);
-#endif
- ZERO(iflags);
- ZERO(u);
- ZERO(ubirthday);
- ZERO(urealtime);
-
- ZEROARRAY(lastseentyp);
-
- ZEROPTR(invent);
- ZEROPTRNOCHECK(uwep);
- ZEROPTRNOCHECK(uarm);
- ZEROPTRNOCHECK(uswapwep);
- ZEROPTRNOCHECK(uquiver);
- ZEROPTRNOCHECK(uarmu);
- ZEROPTRNOCHECK(uskin);
- ZEROPTRNOCHECK(uarmc);
- ZEROPTRNOCHECK(uarmh);
- ZEROPTRNOCHECK(uarms);
- ZEROPTRNOCHECK(uarmg);
- ZEROPTRNOCHECK(uarmf);
- ZEROPTRNOCHECK(uamul);
- ZEROPTRNOCHECK(uright);
- ZEROPTRNOCHECK(uleft);
- ZEROPTRNOCHECK(ublindf);
- ZEROPTRNOCHECK(uchain);
- ZEROPTRNOCHECK(uball);
-
- ZEROPTR(current_wand);
- ZEROPTR(thrownobj);
- ZEROPTR(kickedobj);
-
- ZEROARRAYN(spl_book, MAXSPELL + 1);
-
- moves = 1;
- monstermoves = 1;
-
- wailmsg = 0L;
-
- ZEROPTR(migrating_objs);
- ZEROPTR(billobjs);
-
- ZERO(zeroobj);
- ZERO(zeromonst);
- ZERO(zeroany);
-
- ZEROARRAYN(dogname, PL_PSIZ);
- ZEROARRAYN(catname, PL_PSIZ);
- ZEROARRAYN(horsename, PL_PSIZ);
- preferred_pet = 0;
- ZEROPTR(mydogs);
- ZEROPTR(migrating_mons);
-
- ZEROARRAY(mvitals);
-
- ZEROPTR(menu_colorings);
-
- vision_full_recalc = 0;
- viz_array = NULL;
-
- WIN_MESSAGE = WIN_ERR;
-#ifndef STATUS_VIA_WINDOWPORT
- WIN_STATUS = WIN_ERR;
-#endif
- WIN_MAP = WIN_ERR;
- WIN_INVEN = WIN_ERR;
-
- ZEROARRAYN(toplines, TBUFSZ);
- ZERO(tc_gbl_data);
- ZEROARRAYN(fqn_prefix, PREFIX_COUNT);
-
- sfcap = default_sfinfo;
- sfrestinfo = default_sfinfo;
- sfsaveinfo = default_sfinfo;
-
- ZEROPTR(plinemsg_types);
-
-#ifdef PANICTRACE
- ARGV0 = NULL;
-#endif
-
- nhUse_dummy = 0;
-
- s_firstStart = FALSE;
-}
-#endif
-
/*decl.c*/