]> granicus.if.org Git - nethack/commitdiff
Modified objects initialization to support re-entry.
authorBart House <bart@barthouse.com>
Fri, 23 Nov 2018 23:13:22 +0000 (15:13 -0800)
committerBart House <bart@barthouse.com>
Fri, 23 Nov 2018 23:22:55 +0000 (15:22 -0800)
13 files changed:
include/decl.h
include/extern.h
src/allmain.c
src/decl.c
src/objects.c
src/sys.c
sys/share/pcmain.c
sys/winnt/stubs.c
util/lev_main.c
util/makedefs.c
win/share/tile2bmp.c
win/share/tilemap.c
win/win32/winhack.c

index 50f015fd5dd707e63ab75e11123b97553794b944..5c7356c5d142b1bc4624889bd26804b584ef7d36 100644 (file)
@@ -545,7 +545,7 @@ struct instance_globals {
 
 E struct instance_globals g;
 
-E void instance_globals_init();
+E void decl_globals_init();
 
 
 #undef E
index 89910b0bba91889ff9ffa71c67dbdce7456ff5f3..deb6941e71e8f33be966e92b686939ce913d6189 100644 (file)
@@ -250,7 +250,7 @@ E void FDECL(destroy_drawbridge, (int, int));
 
 /* ### decl.c ### */
 
-E void NDECL(decl_init);
+E void NDECL(decl_globals_init);
 
 /* ### detect.c ### */
 
@@ -1651,7 +1651,7 @@ E void NDECL(rename_disco);
 
 /* ### objects.c ### */
 
-E void NDECL(objects_init);
+E void NDECL(objects_globals_init);
 
 /* ### objnam.c ### */
 
index 9aa2f93c4912f3a018c1c01736b3970a75402680..41e59d15704679a1721947bcf0396a305c2f004d 100644 (file)
@@ -33,9 +33,7 @@ boolean resuming;
     /* Note:  these initializers don't do anything except guarantee that
             we're linked properly.
     */
-    decl_init();
     monst_init();
-    objects_init();
 
     /* if a save file created in normal mode is now being restored in
        explore mode, treat it as normal restore followed by 'X' command
index fde96e40b27bfac4d36f440cb853ba6f34223d90..f6c3524bebe83b12ec34489f294da8bbd0e796ad 100644 (file)
@@ -318,13 +318,6 @@ const char *ARGV0;
 /* support for lint.h */
 unsigned nhUse_dummy = 0;
 
-/* dummy routine used to force linkage */
-void
-decl_init()
-{
-    return;
-}
-
 #define IVMAGIC 0xdeadbeef
 
 const struct instance_globals g_init = {
@@ -420,7 +413,7 @@ const struct instance_globals g_init = {
 struct instance_globals g;
 
 void 
-instance_globals_init() 
+decl_globals_init() 
 {
     g = g_init;
 
index fcca3b0f785abdb57f842ae6ed53e88e25d1461b..984a67e3ed1d844e6433ac4e1cadbc7f9741dfdb 100644 (file)
@@ -61,7 +61,7 @@ struct monst { struct monst *dummy; };  /* lint: struct obj's union */
                cost,sdam,ldam,oc1,oc2,nut,color)  { obj }
 #define None (char *) 0 /* less visual distraction for 'no description' */
 
-NEARDATA struct objdescr obj_descr[] =
+NEARDATA struct objdescr obj_descr_init[] =
 #else
 /* second pass -- object definitions */
 #define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,tuf,dir,sub,mtrl) \
@@ -75,7 +75,7 @@ NEARDATA struct objdescr obj_descr[] =
 #define HARDGEM(n) (0)
 #endif
 
-NEARDATA struct objclass objects[] =
+NEARDATA struct objclass obj_init[] =
 #endif
 {
 /* dummy object[0] -- description [2nd arg] *must* be NULL */
@@ -1169,13 +1169,14 @@ OBJECT(OBJ(None, None),
 /* clang-format on */
 /* *INDENT-ON* */
 
-void NDECL(objects_init);
+struct objdescr obj_descr[SIZE(obj_descr_init)];
+struct objclass objects[SIZE(obj_init)];
 
-/* dummy routine used to force linkage */
 void
-objects_init()
+objects_globals_init()
 {
-    return;
+    memcpy(obj_descr, obj_descr_init, sizeof(obj_descr));
+    memcpy(objects, obj_init, sizeof(objects));
 }
 
 #endif /* !OBJECTS_PASS_2_ */
index 6adc8f71fbf37bedd8596220647b77f3c35c942f..51b966ff23139d4eae6ebdddcfc7596ce13b0bfc 100644 (file)
--- a/src/sys.c
+++ b/src/sys.c
@@ -20,6 +20,9 @@ struct sysopt sysopt;
 void
 sys_early_init()
 {
+    decl_globals_init();
+    objects_globals_init();
+
     sysopt.support = (char *) 0;
     sysopt.recover = (char *) 0;
 #ifdef SYSCF
index ce95d3fdf47d1af12a0b57e77e22bcb7393f7714..da516713abe89fbbed26e8b76203dcd0c78ff8cb 100644 (file)
@@ -97,7 +97,6 @@ char *argv[];
 
     nethack_enter(argc, argv);
 
-    instance_globals_init();
     sys_early_init();
 
 #if defined(WIN32) && defined(TTY_GRAPHICS)
index 9e16c6dce274cfdf2d67d248584ad83d379c3e3f..9241864b163045cff3a54ffc58a8067415cb7f5a 100644 (file)
@@ -37,8 +37,7 @@ char *argv[];
 {
     boolean resuming;
 
-    icontext_init();
-    sys_early_init();
+    early_init();
     Strcpy(default_window_sys, "tty");
     resuming = pcmain(argc, argv);
     moveloop(resuming);
index 72954979151e2777ca606148627b1b765b7c0314..e1b946489248169103b658b3a67d0bff7d87dc44 100644 (file)
@@ -109,8 +109,7 @@ struct lc_vardefs *FDECL(vardef_defined, (struct lc_vardefs *, char *, int));
 void FDECL(splev_add_from, (sp_lev *, sp_lev *));
 
 extern void NDECL(monst_init);
-extern void NDECL(objects_init);
-extern void NDECL(decl_init);
+extern void NDECL(objects_globals_init);
 
 void FDECL(add_opcode, (sp_lev *, int, genericptr_t));
 
@@ -256,12 +255,15 @@ char **argv;
     argc = SIZE(mac_argv);
     argv = mac_argv;
 #endif
+
+    decl_globals_init();
+    objects_globals_init();
+
     /* Note:  these initializers don't do anything except guarantee that
      *        we're linked properly.
      */
     monst_init();
-    objects_init();
-    decl_init();
+
     /* this one does something... */
     init_obj_classes();
 
index 0b97a8bcbce23ee53024138481144724835c8bc6..7504ca7b0464514db7dc6441cad72ee025383ed5 100644 (file)
@@ -164,7 +164,7 @@ void NDECL(do_oracles);
 void NDECL(do_vision);
 
 extern void NDECL(monst_init);   /* monst.c */
-extern void NDECL(objects_init); /* objects.c */
+extern void NDECL(objects_globals_init); /* objects.c */
 
 static void NDECL(link_sanity_check);
 static char *FDECL(name_file, (const char *, const char *));
@@ -296,7 +296,6 @@ link_sanity_check()
             we're linked properly.
     */
     monst_init();
-    objects_init();
 
 }
 
@@ -306,6 +305,8 @@ char *options;
 {
     boolean more_than_one;
 
+    objects_globals_init();
+
     link_sanity_check();
 
     /* construct the current version number */
index 6722bbc26a75ba3bb0db5c1a7d1719a24d8187c9..8fb16e425e365694db20d74bf76b8a272fac8563 100644 (file)
@@ -203,6 +203,8 @@ char *argv[];
     }
 #endif
 
+    objects_globals_init();
+
     tilecount = 0;
     xoffset = yoffset = 0;
     initflag = 0;
index f859f44e899e6000fb531d014d1caac0cfec0357..1e59381b711f170cca3db266b39a3da2e9492c99 100644 (file)
@@ -113,7 +113,6 @@ int set, entry;
             we're linked properly.
     */
     monst_init();
-    objects_init();
     (void) def_char_to_objclass(']');
 
     condnum = tilenum = 0;
index 43bca5a5dba538c78ef09574609bb4cfc904c560..9dcbb4e4b066078d681f5d22e55551e579cadd4c 100644 (file)
@@ -97,7 +97,6 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
 
     win10_init();
 
-    instance_globals_init();
     sys_early_init();
 
     /* init applicatio structure */