From b7d16efd7625a4c8dc534340680b3731f3ca8ca6 Mon Sep 17 00:00:00 2001 From: nhmall Date: Fri, 15 Nov 2019 09:51:04 -0500 Subject: [PATCH 1/3] Makefile.msc updates post-Lua integration --- sys/winnt/Makefile.msc | 162 ++++++++++++++++++++++++++--------------- 1 file changed, 104 insertions(+), 58 deletions(-) diff --git a/sys/winnt/Makefile.msc b/sys/winnt/Makefile.msc index 9b4fce411..a4449bf76 100644 --- a/sys/winnt/Makefile.msc +++ b/sys/winnt/Makefile.msc @@ -1,17 +1,18 @@ -# NetHack 3.6 Makefile.msc $NHDT-Date: 1572748386 2019/11/03 02:33:06 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.167 $ */ +# NetHack 3.7 Makefile.msc # Copyright (c) NetHack PC Development Team 1993-2019 # #============================================================================== # Build Tools Environment # -# NetHack 3.7 Makefile for MS Visual Studio Visual C++ compiler -# +# NetHack 3.7 Work-in-progress Makefile for +# MS Visual Studio Visual C++ compiler +# # Visual Studio Compilers Tested: # - Microsoft Visual Studio 2017 Community Edition # - Microsoft Visual Studio 2019 Community Edition # #============================================================================== -# This is used for building two versions of NetHack: +# This is used for building two distinct executables of NetHack: # # A tty port utilizing the Win32 Console I/O subsystem, Console # NetHack.exe @@ -19,59 +20,77 @@ # A Win32 native port built on the Windows API, Graphical NetHack or # NetHackW.exe # -# In addition to your C compiler, +# BEFORE YOU START, in addition to your C compiler and linker, # -# if you want to change you will need a -# files with suffix workalike for -# .y yacc (such as bison) -# .l lex (such as flex) +# o You will need a complete Lua source tree parallel to your +# NetHack source tree. Lua is not an optional requirement, +# it is required in order to process the level and dungeon +# description files during the game. You can obtain the +# Lua source from here: +# https://www.lua.org/download.html # -# If you have any questions read the sys/winnt/Install.nt file included -# with the distribution. -#======================================================================================== +# o If you want to include the curses Window port in the non-GUI +# NetHack.exe build, you will need a complete PDCurses source +# tree parallel to your NetHack source tree. You can obtain the +# PDCurses source from here: +# https://sourceforge.net/projects/pdcurses/files/pdcurses/ +# or via git from here: +# git clone https://github.com/wmcbrine/PDCurses.git ../pdcurses +# +# o If you want your build of NetHack to include support for +# compressing your save files, or to be able to exchange and use +# compressed save files that originated on another platform such +# as Linux or a handheld phone or tablet, then you will need +# a copy of the zlib source tree parallel to your NetHack source +# tree. You can obtain the zlib source from here: +# https://www.zlib.net/zlib1211.zip +# +# If you want to find out more information about Lua, PDCurses, or zlib, +# here are the home page links for each at the time of this writing: +# +# Lua: https://www.lua.org/ +# PDCurses: https://pdcurses.org/ +# zlib: https://www.zlib.net/ +# +# If you have any questions about building NetHack for the Windows platform +# please read sys/winnt/Install.nt file included in the distribution. +# +#============================================================================== # DECISIONS SECTION # # Build Options Decisions # -# There are currently 4 decisions that you can choose to make. -# none of the 4 decisions are absolutely required because defaults are in place: -# 1. Where do you want your build to end up? -# 2. Do you want debug information in the executable? -# 3. Do you want to explicitly override auto-detection of a 32-bit or 64-bit target? -# 4. Do you want to include the optional curses port? +# There are currently 5 decisions that you can choose to make. +# none of the 5 decisions are absolutely required because defaults +# are in place: # -# Mandatory LUA source Location +# 1. Where do you want your build results to end up? +# 2. Do you want to include the optional curses port? +# 3. Do you want to include compressed savefile support to +# transfer compressed savefiles between platforms? +# 4. Do you want debug information in the executable? +# 5. Do you want to explicitly override auto-detection of +# a 32-bit or 64-bit target? # -# LUA source code or is required to build NetHack-3.7. -# LUATOP must point to the location of the LUA sources. +# Mandatory Lua source Location (not optional) # -#----------------------------------------------------------------------------------------- -#========================================================================================= - -#--------------------------------------------------------------- +# Lua source code or is required to build NetHack-3.7. +# LUATOP below must point to the correct location of the LUA sources. +# By default it is assumed to be parallel to your NetHack source tree in +# the same parent directory/folder. +# +#------------------------------------------------------------------------------ +#============================================================================== +# +#------------------------------------------------------------------------------ # 1. Where do you want the game to be built (which folder)? - -GAMEDIR = ..\binary # Default game build directory - -#--------------------------------------------------------------- -# 2. Do you want debug information available to the executable? - -DEBUGINFO = Y - -#--------------------------------------------------------------- -# 3. This Makefile will attempt to auto-detect your selected target architecture -# based on Visual Studio command prompt configuration settins etc. -# However, if you want to manually override generation of a -# 32-bit or 64-bit build target, you can uncomment the apppropriate -# TARGET_CPU line below. # -#TARGET_CPU=x64 -#TARGET_CPU=x86 - -#--------------------------------------------------------------- +GAMEDIR = ..\binary # Default game build directory +# +#------------------------------------------------------------------------------ # OPTIONAL - Curses window port support # -# 4. Uncomment these and set them appropriately if you want to +# 2. Uncomment these and set them appropriately if you want to # include curses port support alongside TTY support in your # NetHack.exe binary. # @@ -79,10 +98,40 @@ DEBUGINFO = Y # PDCurses header (.h) files and PDCURSES_C to the location # of your PDCurses C files. # -ADD_CURSES=Y -PDCURSES_TOP=..\..\pdcurses +#ADD_CURSES=Y +#PDCURSES_TOP=..\..\pdcurses +# +#------------------------------------------------------------------------------ +# OPTIONAL - zlib support (to allow compressed savefile exchange across platforms +# +# 3. Location of zlib sources +# +# +#ADD_ZLIB=Y +#ZLIBTOP=..\..\zlib +# +#------------------------------------------------------------------------------ +# 4. Do you want debug information available to the executable? +# +DEBUGINFO = Y +# +#------------------------------------------------------------------------------ +# 5. This Makefile will attempt to auto-detect your selected target architecture +# based on Visual Studio command prompt configuration settins etc. +# However, if you want to manually override generation of a +# 32-bit or 64-bit build target, you can uncomment the apppropriate +# TARGET_CPU line below. +# +#TARGET_CPU=x64 +#TARGET_CPU=x86 +# +# +#============================================================================== +#============================================================================== +# This marks the end of the BUILD DECISIONS section. +#============================================================================== +#============================================================================== # -#--------------------------------------------------------------- # Location of LUA # # Original source needs to be obtained from: @@ -91,23 +140,20 @@ PDCURSES_TOP=..\..\pdcurses # This build assumes that the LUA sources are located # at the specified location. If they are actually elsewhere # you'll need to specify the correct spot below in order to -# successfully build NetHack-3.7. +# successfully build NetHack-3.7. You cannot build a functional +# version of NetHack-3.7 Work-in-progress without including Lua. # LUATOP=..\..\lua-5.3.5 # #============================================================================== -# This marks the end of the BUILD DECISIONS section. +#======================== End of Modification Section ========================= #============================================================================== # -#=============================================== -#======= End of Modification Section =========== -#=============================================== -# -################################################ -# # -# Nothing below here should have to be changed.# -# # -################################################ +# ################################################# +# # # +# # Nothing below here should have to be changed. # +# # # +# ################################################# # #============================================================================== # From 8bd6ef629af8d36be9bdcdbdd3aefbe0ab1bbeb7 Mon Sep 17 00:00:00 2001 From: nhmall Date: Fri, 15 Nov 2019 11:12:00 -0500 Subject: [PATCH 2/3] update post-Lua add lib/ to .gitignore add optional "make fetch-Lua" step to simplify prerequisite to "make all" --- .gitignore | 1 + sys/unix/Makefile.top | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/.gitignore b/.gitignore index 08346d41c..9dc6b49f5 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ Release/ binary/ build/ ipch/ +lib/ Nethack.sln Nethack.sdf Nethack.opensdf diff --git a/sys/unix/Makefile.top b/sys/unix/Makefile.top index 13ceb19bf..9d3cceeb8 100644 --- a/sys/unix/Makefile.top +++ b/sys/unix/Makefile.top @@ -74,6 +74,9 @@ VARDAT = $(VARDATD) $(VARDATND) #CHOWN = chown #CHGRP = chgrp +# Lua version +LUA_VERSION = 5.3.5 + # # end of configuration # @@ -232,7 +235,15 @@ dofiles-nodlb: -( cd $(INSTDIR) ; $(CHOWN) $(GAMEUID) $(DAT) ; \ $(CHGRP) $(GAMEGRP) $(DAT) ; \ chmod $(FILEPERM) $(DAT) ) +# +# This is not part of the dependency build hierarchy. +# It requires an explicit "make fetch-Lua". +fetch-lua: fetch-Lua +fetch-Lua: + ( mkdir -p lib ; cd lib ; \ + curl -R -O http://www.lua.org/ftp/lua-$(LUA_VERSION).tar.gz ; \ + tar zxf lua-$(LUA_VERSION).tar.gz ; rm -f lua-$(LUA_VERSION).tar.gz ) update: $(GAME) recover $(VARDAT) spec_levs # (don't yank the old version out from under people who're playing it) -mv $(INSTDIR)/$(GAME) $(INSTDIR)/$(GAME).old From 298af2294fc7d17f3c71d586dd63651fc2de0fe6 Mon Sep 17 00:00:00 2001 From: nhmall Date: Fri, 15 Nov 2019 21:20:38 -0500 Subject: [PATCH 3/3] quiet some macosx warnings --- include/decl.h | 3 ++ include/system.h | 6 ++++ src/decl.c | 2 ++ src/dungeon.c | 42 +++++++++++++++++---------- src/nhlsel.c | 36 +++++++++++++++++++++-- src/nhlua.c | 24 ++++++++++------ src/sp_lev.c | 75 +++++++++++++++++++++++++++++------------------- 7 files changed, 133 insertions(+), 55 deletions(-) mode change 100644 => 100755 include/decl.h mode change 100644 => 100755 include/system.h mode change 100644 => 100755 src/decl.c mode change 100644 => 100755 src/dungeon.c mode change 100644 => 100755 src/nhlsel.c mode change 100644 => 100755 src/nhlua.c mode change 100644 => 100755 src/sp_lev.c diff --git a/include/decl.h b/include/decl.h old mode 100644 new mode 100755 index 66033f783..72f6e605e --- a/include/decl.h +++ b/include/decl.h @@ -339,6 +339,9 @@ E const struct c_common_strings c_common_strings; /* material strings */ E const char *materialnm[]; +/* empty string that is non-const for parameter use */ +E char emptystr[]; + /* Monster name articles */ #define ARTICLE_NONE 0 #define ARTICLE_THE 1 diff --git a/include/system.h b/include/system.h old mode 100644 new mode 100755 index bb0ee071d..fe29cbf4c --- a/include/system.h +++ b/include/system.h @@ -573,4 +573,10 @@ E int FDECL(atoi, (const char *)); #include "lualib.h" #include "lauxlib.h" +#if defined(WIN32) +#define LUA_INTCAST(i) ((int) i) +#else +#define LUA_INTCAST(i) (i) +#endif + #endif /* SYSTEM_H */ diff --git a/src/decl.c b/src/decl.c old mode 100644 new mode 100755 index 42c8b62b5..6b68fb1c3 --- a/src/decl.c +++ b/src/decl.c @@ -108,6 +108,8 @@ const char *materialnm[] = { "mysterious", "liquid", "wax", "organic", "platinum", "mithril", "plastic", "glass", "gemstone", "stone" }; +char emptystr[] = {0}; /* non-const */ + /* Global windowing data, defined here for multi-window-system support */ NEARDATA winid WIN_MESSAGE, WIN_STATUS, WIN_MAP, WIN_INVEN; #ifdef WIN32 diff --git a/src/dungeon.c b/src/dungeon.c old mode 100644 new mode 100755 index b888d1970..5bbdcc081 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -35,7 +35,9 @@ struct lchoice { char menuletter; }; +#if 0 static void FDECL(Fread, (genericptr_t, int, int, dlb *)); +#endif static xchar FDECL(dname_to_dnum, (const char *)); static int FDECL(find_branch, (const char *, struct proto_dungeon *)); static xchar FDECL(parent_dnum, (const char *, struct proto_dungeon *)); @@ -293,6 +295,7 @@ NHFILE *nhfp; } } +#if 0 static void Fread(ptr, size, nitems, stream) genericptr_t ptr; @@ -308,6 +311,7 @@ dlb *stream; nh_terminate(EXIT_FAILURE); } } +#endif static xchar dname_to_dnum(s) @@ -776,7 +780,7 @@ lua_State *L; if (lua_type(L, -1) == LUA_TTABLE) { int f, nflags; lua_len(L, -1); - nflags = lua_tointeger(L, -1); + nflags = LUA_INTCAST(lua_tointeger(L, -1)); lua_pop(L, 1); for (f = 0; f < nflags; f++) { lua_pushinteger(L, f+1); @@ -807,7 +811,9 @@ init_dungeons() register s_level *x; struct proto_dungeon pd; struct level_map *lev_map; + int tidx; + nhUse(cb); (void) memset(&pd, 0, sizeof(struct proto_dungeon)); pd.n_levs = pd.n_brs = 0; @@ -850,7 +856,7 @@ init_dungeons() panic("dungeon is not a lua table"); lua_len(L, -1); - g.n_dgns = lua_tointeger(L, -1); + g.n_dgns = LUA_INTCAST(lua_tointeger(L, -1)); lua_pop(L, 1); pd.start = 0; @@ -865,23 +871,26 @@ init_dungeons() if (g.n_dgns >= MAXDUNGEON) panic("init_dungeons: too many dungeons"); - int tidx = lua_gettop(L); + tidx = lua_gettop(L); lua_pushnil(L); /* first key */ i = 0; while (lua_next(L, tidx) != 0) { + char *dgn_name, *dgn_bonetag, *dgn_protoname; + int dgn_base, dgn_range, dgn_align, dgn_entry, dgn_chance, dgn_flags; + if (!lua_istable(L, -1)) panic("dungeon[%i] is not a lua table", i); - char *dgn_name = get_table_str(L, "name"); - char *dgn_bonetag = get_table_str_opt(L, "bonetag", ""); /* TODO: single char or "none" */ - char *dgn_protoname = get_table_str_opt(L, "protofile", ""); - int dgn_base = get_table_int(L, "base"); - int dgn_range = get_table_int_opt(L, "range", 0); - int dgn_align = dgnaligns2i[get_table_option(L, "alignment", "unaligned", dgnaligns)]; - int dgn_entry = get_table_int_opt(L, "entry", 0); - int dgn_chance = get_table_int_opt(L, "chance", 100); - int dgn_flags = get_dgn_flags(L); + dgn_name = get_table_str(L, "name"); + dgn_bonetag = get_table_str_opt(L, "bonetag", emptystr); /* TODO: single char or "none" */ + dgn_protoname = get_table_str_opt(L, "protofile", emptystr); + dgn_base = get_table_int(L, "base"); + dgn_range = get_table_int_opt(L, "range", 0); + dgn_align = dgnaligns2i[get_table_option(L, "alignment", "unaligned", dgnaligns)]; + dgn_entry = get_table_int_opt(L, "entry", 0); + dgn_chance = get_table_int_opt(L, "chance", 100); + dgn_flags = get_dgn_flags(L); debugpline4("DUNGEON[%i]: %s, base=(%i,%i)", i, dgn_name, dgn_base, dgn_range); @@ -897,7 +906,7 @@ init_dungeons() if (lua_type(L, -1) == LUA_TTABLE) { int f, nlevels; lua_len(L, -1); - nlevels = lua_tointeger(L, -1); + nlevels = LUA_INTCAST(lua_tointeger(L, -1)); pd.tmpdungeon[i].levels = nlevels; lua_pop(L, 1); for (f = 0; f < nlevels; f++) { @@ -906,7 +915,7 @@ init_dungeons() if (lua_type(L, -1) == LUA_TTABLE) { int bi; char *lvl_name = get_table_str(L, "name"); - char *lvl_bonetag = get_table_str_opt(L, "bonetag", ""); + char *lvl_bonetag = get_table_str_opt(L, "bonetag", emptystr); int lvl_base = get_table_int(L, "base"); int lvl_range = get_table_int_opt(L, "range", 0); int lvl_nlevels = get_table_int_opt(L, "nlevels", 0); @@ -915,6 +924,9 @@ init_dungeons() int lvl_align = dgnaligns2i[get_table_option(L, "alignment", "unaligned", dgnaligns)]; int lvl_flags = get_dgn_flags(L); struct tmplevel *tmpl = &pd.tmplevel[pd.n_levs + f]; + + nhUse(lvl_bonetag); + nhUse(lvl_align); debugpline4("LEVEL[%i]:%s,(%i,%i)", f, lvl_name, lvl_base, lvl_range); tmpl->name = lvl_name; tmpl->chainlvl = lvl_chain; @@ -953,7 +965,7 @@ init_dungeons() if (lua_type(L, -1) == LUA_TTABLE) { int f, nbranches; lua_len(L, -1); - nbranches = lua_tointeger(L, -1); + nbranches = LUA_INTCAST(lua_tointeger(L, -1)); pd.tmpdungeon[i].branches = nbranches; lua_pop(L, 1); for (f = 0; f < nbranches; f++) { diff --git a/src/nhlsel.c b/src/nhlsel.c old mode 100644 new mode 100755 index fcd4534f1..d5b78f0b5 --- a/src/nhlsel.c +++ b/src/nhlsel.c @@ -23,17 +23,27 @@ static int FDECL(l_selection_filter_mapchar, (lua_State *)); static int FDECL(l_selection_flood, (lua_State *)); static int FDECL(l_selection_circle, (lua_State *)); static int FDECL(l_selection_ellipse, (lua_State *)); -static int FDECL(l_selection_gradient, (lua_State *)); -static int FDECL(l_selection_iterate, (lua_State *)); static int FDECL(l_selection_gc, (lua_State *)); static int FDECL(l_selection_not, (lua_State *)); static int FDECL(l_selection_and, (lua_State *)); static int FDECL(l_selection_or, (lua_State *)); static int FDECL(l_selection_xor, (lua_State *)); static int FDECL(l_selection_not, (lua_State *)); +#if 0 +/* the following do not appear to currently be + used and because they are static, the OSX + compiler is complaining about them. I've + if ifdef'd out the prototype here and the + function body below. + */ +static int FDECL(l_selection_gradient, (lua_State *)); +static int FDECL(l_selection_iterate, (lua_State *)); static int FDECL(l_selection_add, (lua_State *)); static int FDECL(l_selection_sub, (lua_State *)); static int FDECL(l_selection_ipairs, (lua_State *)); +/* this prototype was missing but function body was below */ +static struct selectionvar *FDECL(l_selection_to, (lua_State *, int)); +#endif struct selectionvar * l_selection_check(L, index) @@ -588,6 +598,17 @@ lua_State *L; filled = (int) luaL_optinteger(L, 5, 0); /* TODO: boolean */ } else { nhl_error(L, "wrong parameters"); + /* + * FIXME: OSX compiler is issuing a complaint + * about r being passed to selection_do_ellipse() + * below without ever having been initialized + * to something when this else clause is encountered. + * I could have added an initializer to r at the + * top, but I didn't know what it should be initialized + * to in order for selection_do_ellipse() to not + * misbehave. The parameters passed in previous versions + * were related to xaxis and yaxis. + */ } get_location_coord(&x, &y, ANY_LOC, g.coder ? g.coder->croom : NULL, SP_COORD_PACK(x,y)); @@ -639,6 +660,17 @@ lua_State *L; filled = (int) luaL_optinteger(L, 6, 0); /* TODO: boolean */ } else { nhl_error(L, "wrong parameters"); + /* + * FIXME: OSX compiler is issuing a complaint + * about r1 and r2 being passed to selection_do_ellipse() + * below without ever having been initialized + * to something when this else clause is encountered. + * I could have added an initializer to r1,r2 at the + * top, but I didn't know what they should be initialized + * to in order for selection_do_ellipse() to not + * misbehave. The parameters passed in previous versions + * were related to xaxis and yaxis. + */ } get_location_coord(&x, &y, ANY_LOC, g.coder ? g.coder->croom : NULL, SP_COORD_PACK(x,y)); diff --git a/src/nhlua.c b/src/nhlua.c old mode 100644 new mode 100755 index 17d0c2736..7898879bb --- a/src/nhlua.c +++ b/src/nhlua.c @@ -16,7 +16,9 @@ /* lua_CFunction prototypes */ static int FDECL(nhl_test, (lua_State *)); static int FDECL(nhl_getmap, (lua_State *)); +#if 0 static int FDECL(nhl_setmap, (lua_State *)); +#endif static int FDECL(nhl_pline, (lua_State *)); static int FDECL(nhl_verbalize, (lua_State *)); static int FDECL(nhl_menu, (lua_State *)); @@ -87,7 +89,7 @@ schar defval; char *ter; xchar typ; - ter = get_table_str_opt(L, name, ""); + ter = get_table_str_opt(L, name, emptystr); if (name && *ter) { typ = check_mapchr(ter); if (typ == INVALID_TYPE) @@ -213,8 +215,8 @@ lua_State *L; int argc = lua_gettop(L); if (argc == 2) { - int x = lua_tointeger(L, 1); - int y = lua_tointeger(L, 2); + int x = LUA_INTCAST(lua_tointeger(L, 1)); + int y = LUA_INTCAST(lua_tointeger(L, 2)); if (x >= 0 && x < COLNO && y >= 0 && y < ROWNO) { char buf[BUFSZ]; @@ -572,7 +574,9 @@ const char *name; if (ltyp == LUA_TSTRING) { const char *const boolstr[] = { "true", "false", "yes", "no", NULL }; const int boolstr2i[] = { TRUE, FALSE, TRUE, FALSE, -1 }; + ret = luaL_checkoption(L, -1, NULL, boolstr); + nhUse(boolstr2i[0]); } else if (ltyp == LUA_TBOOLEAN) { ret = lua_toboolean(L, -1); } else if (ltyp == LUA_TNUMBER) { @@ -625,14 +629,17 @@ static int nhl_test(L) lua_State *L; { + int x, y; + char *name, Player[] = "Player"; + /* discard any extra arguments passed in */ lua_settop(L, 1); luaL_checktype(L, 1, LUA_TTABLE); - int x = get_table_int(L, "x"); - int y = get_table_int(L, "y"); - char *name = get_table_str_opt(L, "name", "Player"); + x = get_table_int(L, "x"); + y = get_table_int(L, "y"); + name = get_table_str_opt(L, "name", Player); pline("TEST:{ x=%i, y=%i, name=\"%s\" }", x,y, name); @@ -645,8 +652,9 @@ static const struct luaL_Reg nhl_functions[] = { {"test", nhl_test}, {"getmap", nhl_getmap}, - /*{"setmap", nhl_setmap},*/ - +#if 0 + {"setmap", nhl_setmap}, +#endif {"pline", nhl_pline}, {"verbalize", nhl_verbalize}, {"menu", nhl_menu}, diff --git a/src/sp_lev.c b/src/sp_lev.c old mode 100644 new mode 100755 index e014f3e50..7ef66d2a2 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -64,17 +64,13 @@ static void FDECL(wallify_map, (int, int, int, int)); static void FDECL(maze1xy, (coord *, int)); static void NDECL(fill_empty_maze); static void FDECL(splev_initlev, (lev_init *)); +#if 0 +/* macosx complains that these are unused */ static long FDECL(sp_code_jmpaddr, (long, long)); -static void NDECL(spo_end_moninvent); -static void NDECL(spo_pop_container); static void FDECL(spo_room, (struct sp_coder *)); -static void FDECL(spo_endroom, (struct sp_coder *)); static void FDECL(spo_trap, (struct sp_coder *)); static void FDECL(spo_gold, (struct sp_coder *)); static void FDECL(spo_corridor, (struct sp_coder *)); -static void FDECL(sel_set_ter, (int, int, genericptr_t)); -static void FDECL(sel_set_feature, (int, int, genericptr_t)); -static void FDECL(sel_set_door, (int, int, genericptr_t)); static void FDECL(spo_feature, (struct sp_coder *)); static void FDECL(spo_terrain, (struct sp_coder *)); static void FDECL(spo_replace_terrain, (struct sp_coder *)); @@ -84,8 +80,15 @@ static void FDECL(spo_drawbridge, (struct sp_coder *)); static void FDECL(spo_mazewalk, (struct sp_coder *)); static void FDECL(spo_wall_property, (struct sp_coder *)); static void FDECL(spo_room_door, (struct sp_coder *)); -static void FDECL(sel_set_wallify, (int, int, genericptr_t)); static void FDECL(spo_wallify, (struct sp_coder *)); +static void FDECL(sel_set_wallify, (int, int, genericptr_t)); +#endif +static void NDECL(spo_end_moninvent); +static void NDECL(spo_pop_container); +static void FDECL(spo_endroom, (struct sp_coder *)); +static void FDECL(sel_set_ter, (int, int, genericptr_t)); +static void FDECL(sel_set_door, (int, int, genericptr_t)); +static void FDECL(sel_set_feature, (int, int, genericptr_t)); static int FDECL(get_coord, (lua_State *, int, int *, int *)); static int FDECL(get_table_region, (lua_State *, const char *, int *, int *, int *, int *, BOOLEAN_P)); @@ -2247,13 +2250,14 @@ lev_init *linit; } } +#if 0 static long sp_code_jmpaddr(curpos, jmpaddr) long curpos, jmpaddr; { return (curpos + jmpaddr); } - +#endif /*ARGUSED*/ @@ -2282,6 +2286,7 @@ lua_State *L; { char *levmsg; int old_n, n; + const char *msg; int argc = lua_gettop(L); @@ -2292,7 +2297,7 @@ lua_State *L; create_des_coder(); - const char *msg = luaL_checkstring(L, 1); + msg = luaL_checkstring(L, 1); old_n = g.lev_message ? (strlen(g.lev_message) + 1) : 0; n = strlen(msg); @@ -2315,10 +2320,10 @@ int get_table_align(L) lua_State *L; { - const char *const aligns[] = { "noalign", "law", "neutral", "chaos", "coaligned", "noncoaligned", "random", NULL }; + const char *const gtaligns[] = { "noalign", "law", "neutral", "chaos", "coaligned", "noncoaligned", "random", NULL }; const int aligns2i[] = { AM_NONE, AM_LAWFUL, AM_NEUTRAL, AM_CHAOTIC, AM_SPLEV_CO, AM_SPLEV_NONCO, AM_SPLEV_RANDOM, 0 }; - int a = aligns2i[get_table_option(L, "align", "random", aligns)]; + int a = aligns2i[get_table_option(L, "align", "random", gtaligns)]; return a; } @@ -2347,6 +2352,7 @@ const char *s; for (i = LOW_PM; i < NUMMONS; i++) if (!strcmpi(mons[i].mname, s)) return i; + nhUse(L); return NON_PM; } @@ -2501,7 +2507,7 @@ lua_State *L; tmpmons.coord = SP_COORD_PACK(mx, my); if (tmpmons.id != NON_PM && tmpmons.class == -1) - tmpmons.class = def_monsyms[mons[tmpmons.id].mlet].sym; + tmpmons.class = def_monsyms[(int) mons[tmpmons.id].mlet].sym; create_monster(&tmpmons, g.coder->croom); @@ -2528,6 +2534,7 @@ const char *name; int rndval; { int ret; + char buf[BUFSZ]; lua_getfield(L, 1, name); if (lua_type(L, -1) == LUA_TNIL) { @@ -2541,7 +2548,6 @@ int rndval; lua_pop(L, 1); return rndval; } - char buf[BUFSZ]; Sprintf(buf, "Expected integer or \"random\" for \"%s\", got %s", name, tmp); nhl_error(L, buf); lua_pop(L, 1); @@ -2626,7 +2632,9 @@ int lspo_object(L) lua_State *L; { +#if 0 int nparams = 0; +#endif long quancnt; object tmpobj; int ox = -1, oy = -1; @@ -2727,8 +2735,9 @@ lua_State *L; tmpobj.id = -1; if (tmpobj.id == STATUE || tmpobj.id == EGG || tmpobj.id == CORPSE || tmpobj.id == TIN) { - int flags = 0; + int lflags = 0; const char *montype = get_table_str_opt(L, "montype", NULL); + if (montype) { struct permonst *pm = NULL; if (strlen(montype) == 1 && def_char_to_monclass(*montype) != MAXMCLASSES) { @@ -2747,10 +2756,10 @@ lua_State *L; nhl_error(L, "Unknown montype"); } if (tmpobj.id == STATUE) { - flags |= (get_table_boolean_opt(L, "historic", 0) ? STATUE_HISTORIC : 0x00); - flags |= (get_table_boolean_opt(L, "male", 0) ? STATUE_MALE : 0x00); - flags |= (get_table_boolean_opt(L, "female", 0) ? STATUE_FEMALE : 0x00); - tmpobj.spe = flags; + lflags |= (get_table_boolean_opt(L, "historic", 0) ? STATUE_HISTORIC : 0x00); + lflags |= (get_table_boolean_opt(L, "male", 0) ? STATUE_MALE : 0x00); + lflags |= (get_table_boolean_opt(L, "female", 0) ? STATUE_FEMALE : 0x00); + tmpobj.spe = lflags; } else if (tmpobj.id == EGG) { tmpobj.spe = get_table_boolean_opt(L, "laid_by_you", 0) ? 1 : 0; } @@ -2877,7 +2886,7 @@ int lspo_engraving(L) lua_State *L; { - int etyp; + int etyp = DUST; char *txt = (char *) 0; long ecoord; const char *const engrtypes[] = { "dust", "engrave", "burn", "mark", "blood", NULL }; @@ -2885,6 +2894,8 @@ lua_State *L; xchar x, y; int argc = lua_gettop(L); + x = y = 0; /* FIXME: quiet a warning for else clause below. + should it actually be -1? */ create_des_coder(); if (argc == 1) { @@ -2903,6 +2914,8 @@ lua_State *L; txt = dupstr(luaL_checkstring(L, 3)); } else { nhl_error(L, "Wrong parameters"); + /* FIXME: this clause left etyp uninitialized so initialization + to DUST was added above to quiet a macosx warning */ } if (x == -1 && y == -1) @@ -2975,7 +2988,7 @@ lua_State *L; const char *name; int defval; { - char *roomstr = get_table_str_opt(L, name, ""); + char *roomstr = get_table_str_opt(L, name, emptystr); if (roomstr && *roomstr) { int i; for (i = 0; room_types[i].name; i++) @@ -3055,7 +3068,7 @@ lua_State *L; static void spo_endroom(coder) -struct sp_coder *coder; +struct sp_coder *coder UNUSED; { if (g.coder->n_subroom > 1) { g.coder->n_subroom--; @@ -3095,15 +3108,15 @@ lua_State *L; const int stairdirs2i[] = { 0, 1 }; long scoord; - int ax = -1,ay = -1; + int ax = -1, ay = -1; int up; int ltype = lua_type(L, 1); create_des_coder(); - if (argc == 1 && ltype == LUA_TSTRING) + if (argc == 1 && ltype == LUA_TSTRING) { up = stairdirs2i[luaL_checkoption(L, 1, "down", stairdirs)]; - else if (argc == 3 && ltype == LUA_TSTRING) { + } else if (argc == 3 && ltype == LUA_TSTRING) { up = stairdirs2i[luaL_checkoption(L, 1, "down", stairdirs)]; ax = luaL_checkinteger(L, 2); ay = luaL_checkinteger(L, 3); @@ -3154,15 +3167,15 @@ lua_State *L; const int stairdirs2i[] = { 0, 1 }; long scoord; - int ax, ay; + int ax = -1, ay = -1; /* FIXME: initializers added, macosx warning */ int up; int ltype = lua_type(L, 1); create_des_coder(); - if (argc == 1 && ltype == LUA_TSTRING) + if (argc == 1 && ltype == LUA_TSTRING) { up = stairdirs2i[luaL_checkoption(L, 1, "down", stairdirs)]; - else if (argc == 3 && ltype == LUA_TSTRING) { + } else if (argc == 3 && ltype == LUA_TSTRING) { up = stairdirs2i[luaL_checkoption(L, 1, "down", stairdirs)]; ax = luaL_checkinteger(L, 2); ay = luaL_checkinteger(L, 3); @@ -3325,7 +3338,7 @@ lua_State *L; const char *name; int defval; { - char *trapstr = get_table_str_opt(L, name, ""); + char *trapstr = get_table_str_opt(L, name, emptystr); if (trapstr && *trapstr) { int i; for (i = 0; trap_types[i].name; i++) @@ -3474,7 +3487,7 @@ lua_State *L; /* random_corridors(); */ int lspo_random_corridors(L) -lua_State *L; +lua_State *L UNUSED; { corridor tc; @@ -5119,6 +5132,7 @@ lua_State *L; return 0; } +#if 0 /*ARGSUSED*/ static void sel_set_wallify(x, y, arg) @@ -5127,6 +5141,7 @@ genericptr_t arg UNUSED; { wallify_map(x, y, x, y); } +#endif /* TODO: wallify(selection) */ /* wallify({ x1=NN,y1=NN, x2=NN,y2=NN }); */ @@ -5161,7 +5176,7 @@ lua_State *L; /* reset_level is only needed for testing purposes */ int lspo_reset_level(L) -lua_State *L; +lua_State *L UNUSED; /* macosx complaint needed UNUSED */ { boolean wtower = In_W_tower(u.ux, u.uy, &u.uz);