/*-Copyright (c) Robert Patrick Rankin, 2017. */
/* NetHack may be freely redistributed. See license for details. */
-#ifdef MAKEDEFS_C
+#if defined(MAKEDEFS_C) || defined (MDLIB_C)
/* in makedefs.c, all we care about is the list of names */
#define A(nam, typ, s1, s2, mt, atk, dfn, cry, inv, al, cl, rac, cost, clr) nam
/* clang-format on */
static NEARDATA struct artifact artilist[] = {
-#endif /* MAKEDEFS_C */
+#endif /* MAKEDEFS_C || MDLIB_C */
/* Artifact cost rationale:
* 1. The more useful the artifact, the better its cost.
#undef A
-#ifndef MAKEDEFS_C
+#if !defined(MAKEDEFS_C) && !defined(MDLIB_C)
#undef NO_ATTK
#undef NO_DFNS
#undef DFNS
/* This next pre-processor directive covers almost the entire file,
* interrupted only occasionally to pick up specific functions as needed. */
-#if !defined(MAKEDEFS_C) && !defined(LEV_LEX_C)
+#if !defined(MAKEDEFS_C) && !defined(MDLIB_C) && !defined(LEV_LEX_C)
/* ### allmain.c ### */
E boolean FDECL(hurtle_step, (genericptr_t, int, int));
/* ### drawing.c ### */
-#endif /* !MAKEDEFS_C && !LEV_LEX_C */
+#endif /* !MAKEDEFS_C && !MDLIB_C && !LEV_LEX_C */
E int FDECL(def_char_to_objclass, (CHAR_P));
E int FDECL(def_char_to_monclass, (CHAR_P));
-#if !defined(MAKEDEFS_C) && !defined(LEV_LEX_C)
+#if !defined(MAKEDEFS_C) && !defined(MDLIB_C) && !defined(LEV_LEX_C)
E void FDECL(switch_symbols, (int));
E void FDECL(assign_graphics, (int));
E void NDECL(init_symbols);
E void FDECL(done_intr, (int));
#endif
E void FDECL(done_in_by, (struct monst *, int));
-#endif /* !MAKEDEFS_C && !LEV_LEX_C */
+#endif /* !MAKEDEFS_C && MDLIB_C && !LEV_LEX_C */
E void VDECL(panic, (const char *, ...)) PRINTF_F(1, 2) NORETURN;
-#if !defined(MAKEDEFS_C) && !defined(LEV_LEX_C)
+#if !defined(MAKEDEFS_C) && !defined(MDLIB_C) && !defined(LEV_LEX_C)
E void FDECL(done, (int));
E void FDECL(container_contents, (struct obj *, BOOLEAN_P,
BOOLEAN_P, BOOLEAN_P));
#endif
/* ### nhlsel.c ### */
+#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
E struct selectionvar *FDECL(l_selection_check, (lua_State *, int));
E int FDECL(l_selection_register, (lua_State *));
+#endif
/* ### nhlua.c ### */
+
+#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
E lua_State * NDECL(nhl_init);
E boolean FDECL(nhl_loadlua, (lua_State *, const char *));
E boolean FDECL(load_lua, (const char *));
E int FDECL(get_table_option, (lua_State *, const char *, const char *, const char *const *));
E int FDECL(str_lines_max_width, (const char *));
E char *FDECL(stripdigits, (char *));
+#endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */
/* ### nhregex.c ### */
+
E struct nhregex *NDECL(regex_init);
E boolean FDECL(regex_compile, (const char *, struct nhregex *));
E const char *FDECL(regex_error_desc, (struct nhregex *));
E boolean FDECL(regex_match, (const char *, struct nhregex *));
E void FDECL(regex_free, (struct nhregex *));
+/* ### mdlib.c ### */
+
+E void NDECL(runtime_info_init);
+E const char *FDECL(do_runtime_info, (int *));
+
/* ### nttty.c ### */
#ifdef WIN32
E void FDECL(sysopt_seduce_set, (int));
/* ### sp_lev.c ### */
-
+#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
E boolean FDECL(check_room, (xchar *, xchar *, xchar *, xchar *, BOOLEAN_P));
E boolean FDECL(create_room, (XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P,
XCHAR_P, XCHAR_P, XCHAR_P));
E void FDECL(selection_do_ellipse, (struct selectionvar *, int, int, int, int, int));
E void NDECL(update_croom);
E void FDECL(l_register_des, (lua_State *));
+#endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */
/* ### spell.c ### */
E int FDECL(resist, (struct monst *, CHAR_P, int, int));
E void NDECL(makewish);
-#endif /* !MAKEDEFS_C && !LEV_LEX_C */
+#endif /* !MAKEDEFS_C && !MDLIB_C && !LEV_LEX_C */
#undef E
#define LARGEST_INT 32767
#include "coord.h"
+
+#if defined(CROSSCOMPILE)
+struct cross_target_s {
+ const char *build_date;
+ const char *copyright_banner_c;
+ const char *git_sha;
+ const char *git_branch;
+ const char *version_string;
+ const char *version_id;
+ unsigned long version_number;
+ unsigned long version_features;
+ unsigned long ignored_features;
+ unsigned long version_sanity1;
+ unsigned long version_sanity2;
+ unsigned long version_sanity3;
+ unsigned long build_time;
+};
+extern struct cross_target_s cross_target;
+#if defined(CROSSCOMPILE_TARGET) && !defined(MAKEDEFS_C)
+#define BUILD_DATE cross_target.build_date /* "Wed Apr 1 00:00:01 2020" */
+#define COPYRIGHT_BANNER_C cross_target.copyright_banner_c
+#define NETHACK_GIT_SHA cross_target.git_sha
+#define NETHACK_GIT_BRANCH cross_target.git_branch
+#define VERSION_ID cross_target.version_id
+#define IGNORED_FEATURES cross_target.ignored_features
+#define VERSION_FEATURES cross_target.version_features
+#define VERSION_NUMBER cross_target.version_number
+#define VERSION_SANITY1 cross_target.version_sanity1
+#define VERSION_SANITY2 cross_target.version_sanity2
+#define VERSION_SANITY3 cross_target.version_sanity3
+#define VERSION_STRING cross_target.version_string
+#define BUILD_TIME cross_target.build_time /* (1574157640UL) */
+#endif /* CROSSCOMPILE_TARGET && !MAKEDEFS_C */
+#endif /* CROSSCOMPILE */
+
/*
* Automatic inclusions for the subsidiary files.
* Please don't change the order. It does matter.
long offset, size, summary_size;
};
-#ifdef MAKEDEFS_C /***** MAKEDEFS *****/
+#if defined(MAKEDEFS_C) || defined(MDLIB_C) /***** MAKEDEFS *****/
#define N_MSG 100 /* arbitrary */
"Too many messages in class (line %d)\nAdjust N_MSG in qtext.h and " \
"recompile.\n"
-#else /***** !MAKEDEFS *****/
+#else /***** !MAKEDEFS && !MDLIB_C *****/
struct qtlists {
struct qtmsg *common,
#define QTN_DEMONIC 20
#define QT_BANISHED 60
-#endif /***** !MAKEDEFS *****/
+#endif /***** !MAKEDEFS && !MDLIB_C *****/
#endif /* QTEXT_H */
-/* NetHack 3.7 sfproto.h Tue Jun 25 09:57:33 2019 */
-/* Copyright (c) NetHack Development Team 2018. */
+/* NetHack 3.7 sfproto.h */
+/* Copyright (c) NetHack Development Team 2019. */
/* NetHack may be freely redistributed. See license for details. */
/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */
E char *FDECL(tgoto, (const char *, int, int));
#endif
-#if defined(ALLOC_C) || defined(MAKEDEFS_C)
+#if defined(ALLOC_C) || defined(MAKEDEFS_C) || defined(MDLIB_C)
E genericptr_t FDECL(malloc, (size_t));
E genericptr_t FDECL(realloc, (genericptr_t, size_t));
#endif
#endif /* !__cplusplus && !__GO32__ */
#endif /* WIN32 */
+#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#else
#define LUA_INTCAST(i) (i)
#endif
-
+#endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */
#endif /* SYSTEM_H */
decl_globals_init();
objects_globals_init();
monst_globals_init();
+#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
+ runtime_info_init();
+#endif
sys_early_init();
}
--- /dev/null
+/* NetHack 3.7 mdlib.c $NHDT-Date: 1562180226 2019/07/03 18:57:06 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.149 $ */
+/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
+/* Copyright (c) M. Stephenson, 1990, 1991. */
+/* Copyright (c) Dean Luick, 1990. */
+/* NetHack may be freely redistributed. See license for details. */
+
+/*
+ * This can be linked into a binary to provide the functionality
+ * via the contained functions, or it can be #included directly
+ * into util/makedefs.c to provide it there.
+ */
+
+#ifndef MAKEDEFS_C
+#define MDLIB_C
+#include "config.h"
+#ifdef MONITOR_HEAP
+#undef free /* makedefs, mdlib don't use the alloc and free in src/alloc.c */
+#endif
+#include "permonst.h"
+#include "objclass.h"
+#include "monsym.h"
+#include "artilist.h"
+#include "dungeon.h"
+#include "obj.h"
+#include "monst.h"
+#include "you.h"
+#include "context.h"
+#include "flag.h"
+#include "dlb.h"
+#include <ctype.h>
+/* version information */
+#ifdef SHORT_FILENAMES
+#include "patchlev.h"
+#else
+#include "patchlevel.h"
+#endif
+#define Fprintf (void) fprintf
+#define Fclose (void) fclose
+#define Unlink (void) unlink
+#if !defined(AMIGA) || defined(AZTEC_C)
+#define rewind(fp) fseek((fp), 0L, SEEK_SET) /* guarantee a return value */
+#endif /* AMIGA || AZTEC_C */
+
+#endif /* !MAKEDEFS_C */
+
+void NDECL(build_options);
+static char *FDECL(bannerc_string, (char *, const char *));
+static void FDECL(opt_out_words, (char *, int *));
+static void NDECL(build_savebones_compat_string);
+static int idxopttext, done_runtime_opt_init_once = 0;
+#define MAXOPT 30
+static char rttimebuf[MAXOPT];
+static char *opttext[ROWNO] = {0};
+char optbuf[BUFSZ];
+static struct version_info version;
+static const char opt_indent[] = " ";
+
+#ifndef MAKEDEFS_C
+static int FDECL(case_insensitive_comp, (const char *, const char *));
+static void NDECL(make_version);
+static char *FDECL(version_id_string, (char *, const char *));
+static char *FDECL(version_string, (char *, const char *));
+static char *FDECL(eos, (char *));
+/* REPRODUCIBLE_BUILD will change this to TRUE */
+static boolean date_via_env = FALSE;
+#endif /* !MAKEDEFS_C */
+
+struct win_info {
+ const char *id, /* DEFAULT_WINDOW_SYS string */
+ *name; /* description, often same as id */
+};
+
+static struct win_info window_opts[] = {
+#ifdef TTY_GRAPHICS
+ { "tty",
+ /* testing 'USE_TILES' here would bring confusion because it could
+ apply to another interface such as X11, so check MSDOS explicitly
+ instead; even checking TTY_TILES_ESCCODES would probably be
+ confusing to most users (and it will already be listed separately
+ in the compiled options section so users aware of it can find it) */
+#ifdef MSDOS
+ "traditional text with optional 'tiles' graphics"
+#else
+ /* assume that one or more of IBMgraphics, DECgraphics, or MACgraphics
+ can be enabled; we can't tell from here whether that is accurate */
+ "traditional text with optional line-drawing"
+#endif
+ },
+#endif /*TTY_GRAPHICS */
+#ifdef CURSES_GRAPHICS
+ { "curses", "terminal-based graphics" },
+#endif
+#ifdef X11_GRAPHICS
+ { "X11", "X11" },
+#endif
+#ifdef QT_GRAPHICS /* too vague; there are multiple incompatible versions */
+ { "Qt", "Qt" },
+#endif
+#ifdef GNOME_GRAPHICS /* unmaintained/defunct */
+ { "Gnome", "Gnome" },
+#endif
+#ifdef MAC /* defunct OS 9 interface */
+ { "mac", "Mac" },
+#endif
+#ifdef AMIGA_INTUITION /* unmaintained/defunct */
+ { "amii", "Amiga Intuition" },
+#endif
+#ifdef GEM_GRAPHICS /* defunct Atari interface */
+ { "Gem", "Gem" },
+#endif
+#ifdef MSWIN_GRAPHICS /* win32 */
+ { "mswin", "mswin" },
+#endif
+#ifdef BEOS_GRAPHICS /* unmaintained/defunct */
+ { "BeOS", "BeOS InterfaceKit" },
+#endif
+ { 0, 0 }
+};
+
+/*
+ * Use this to explicitly mask out features during version checks.
+ *
+ * ZEROCOMP, RLECOMP, and ZLIB_COMP describe compression features
+ * that the port/plaform which wrote the savefile was capable of
+ * dealing with. Don't reject a savefile just because the port
+ * reading the savefile doesn't match on all/some of them.
+ * The actual compression features used to produce the savefile are
+ * recorded in the savefile_info structure immediately following the
+ * version_info, and that is what needs to be checked against the
+ * feature set of the port that is reading the savefile back in.
+ * That check is done in src/restore.c now.
+ *
+ */
+#ifndef MD_IGNORED_FEATURES
+#define MD_IGNORED_FEATURES \
+ (0L | (1L << 19) /* SCORE_ON_BOTL */ \
+ | (1L << 27) /* ZEROCOMP */ \
+ | (1L << 28) /* RLECOMP */ \
+ )
+#endif /* MD_IGNORED_FEATUES */
+
+static void
+make_version()
+{
+ register int i;
+
+ /*
+ * integer version number
+ */
+ version.incarnation = ((unsigned long) VERSION_MAJOR << 24)
+ | ((unsigned long) VERSION_MINOR << 16)
+ | ((unsigned long) PATCHLEVEL << 8)
+ | ((unsigned long) EDITLEVEL);
+ /*
+ * encoded feature list
+ * Note: if any of these magic numbers are changed or reassigned,
+ * EDITLEVEL in patchlevel.h should be incremented at the same time.
+ * The actual values have no special meaning, and the category
+ * groupings are just for convenience.
+ */
+ version.feature_set = (unsigned long) (0L
+/* levels and/or topology (0..4) */
+/* monsters (5..9) */
+#ifdef MAIL_STRUCTURES
+ | (1L << 6)
+#endif
+/* objects (10..14) */
+/* flag bits and/or other global variables (15..26) */
+#ifdef TEXTCOLOR
+ | (1L << 17)
+#endif
+#ifdef INSURANCE
+ | (1L << 18)
+#endif
+#ifdef SCORE_ON_BOTL
+ | (1L << 19)
+#endif
+/* data format (27..31)
+ * External compression methods such as COMPRESS and ZLIB_COMP
+ * do not affect the contents and are thus excluded from here */
+#ifdef ZEROCOMP
+ | (1L << 27)
+#endif
+#ifdef RLECOMP
+ | (1L << 28)
+#endif
+ );
+ /*
+ * Value used for object & monster sanity check.
+ * (NROFARTIFACTS<<24) | (NUM_OBJECTS<<12) | (NUMMONS<<0)
+ */
+ for (i = 1; artifact_names[i]; i++)
+ continue;
+ version.entity_count = (unsigned long) (i - 1);
+ for (i = 1; objects[i].oc_class != ILLOBJ_CLASS; i++)
+ continue;
+ version.entity_count = (version.entity_count << 12) | (unsigned long) i;
+ for (i = 0; mons[i].mlet; i++)
+ continue;
+ version.entity_count = (version.entity_count << 12) | (unsigned long) i;
+ /*
+ * Value used for compiler (word size/field alignment/padding) check.
+ */
+ version.struct_sizes1 =
+ (((unsigned long) sizeof(struct context_info) << 24)
+ | ((unsigned long) sizeof(struct obj) << 17)
+ | ((unsigned long) sizeof(struct monst) << 10)
+ | ((unsigned long) sizeof(struct you)));
+ version.struct_sizes2 = (((unsigned long) sizeof(struct flag) << 10) |
+/* free bits in here */
+#ifdef SYSFLAGS
+ ((unsigned long) sizeof(struct sysflag)));
+#else
+ ((unsigned long) 0L));
+#endif
+ return;
+}
+
+static char *
+version_string(outbuf, delim)
+char *outbuf;
+const char *delim;
+{
+ Sprintf(outbuf, "%d%s%d%s%d", VERSION_MAJOR, delim, VERSION_MINOR, delim,
+ PATCHLEVEL);
+#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
+ Sprintf(eos(outbuf), "-%d", EDITLEVEL);
+#endif
+ return outbuf;
+}
+
+static char *
+version_id_string(outbuf, build_date)
+char *outbuf;
+const char *build_date;
+{
+ char subbuf[64], versbuf[64];
+ char betabuf[64];
+
+#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
+#if (NH_DEVEL_STATUS == NH_STATUS_BETA)
+ Strcpy(betabuf, " Beta");
+#else
+ Strcpy(betabuf, " Work-in-progress");
+#endif
+#else
+ betabuf[0] = '\0';
+#endif
+ subbuf[0] = '\0';
+#ifdef PORT_SUB_ID
+ subbuf[0] = ' ';
+ Strcpy(&subbuf[1], PORT_SUB_ID);
+#endif
+
+ Sprintf(outbuf, "%s NetHack%s Version %s%s - last %s %s.", PORT_ID,
+ subbuf, version_string(versbuf, "."), betabuf,
+ date_via_env ? "revision" : "build", build_date);
+ return outbuf;
+}
+
+static char *
+bannerc_string(outbuf, build_date)
+char *outbuf;
+const char *build_date;
+{
+ char subbuf[64], versbuf[64];
+
+ subbuf[0] = '\0';
+#ifdef PORT_SUB_ID
+ subbuf[0] = ' ';
+ Strcpy(&subbuf[1], PORT_SUB_ID);
+#endif
+#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
+#if (NH_DEVEL_STATUS == NH_STATUS_BETA)
+ Strcat(subbuf, " Beta");
+#else
+ Strcat(subbuf, " Work-in-progress");
+#endif
+#endif
+
+ Sprintf(outbuf, " Version %s %s%s, %s %s.",
+ version_string(versbuf, "."), PORT_ID, subbuf,
+ date_via_env ? "revised" : "built", &build_date[4]);
+#if 0
+ Sprintf(outbuf, "%s NetHack%s %s Copyright 1985-%s (built %s)",
+ PORT_ID, subbuf, version_string(versbuf,"."), RELEASE_YEAR,
+ &build_date[4]);
+#endif
+ return outbuf;
+}
+
+static int
+case_insensitive_comp(s1, s2)
+const char *s1;
+const char *s2;
+{
+ uchar u1, u2;
+
+ for (;; s1++, s2++) {
+ u1 = (uchar) *s1;
+ if (isupper(u1))
+ u1 = tolower(u1);
+ u2 = (uchar) *s2;
+ if (isupper(u2))
+ u2 = tolower(u2);
+ if (u1 == '\0' || u1 != u2)
+ break;
+ }
+ return u1 - u2;
+}
+
+static char *
+eos(str)
+char *str;
+{
+ while (*str)
+ str++;
+ return str;
+}
+
+static char save_bones_compat_buf[BUFSZ];
+
+static void
+build_savebones_compat_string()
+{
+#ifdef VERSION_COMPATIBILITY
+ unsigned long uver = VERSION_COMPATIBILITY;
+#endif
+ Strcpy(save_bones_compat_buf,
+ "save and bones files accepted from version");
+#ifdef VERSION_COMPATIBILITY
+ Sprintf(eos(save_bones_compat_buf), "s %lu.%lu.%lu through %d.%d.%d",
+ ((uver & 0xFF000000L) >> 24), ((uver & 0x00FF0000L) >> 16),
+ ((uver & 0x0000FF00L) >> 8), VERSION_MAJOR, VERSION_MINOR,
+ PATCHLEVEL);
+#else
+ Sprintf(eos(save_bones_compat_buf), " %d.%d.%d only", VERSION_MAJOR,
+ VERSION_MINOR, PATCHLEVEL);
+#endif
+}
+
+static const char *build_opts[] = {
+#ifdef AMIGA_WBENCH
+ "Amiga WorkBench support",
+#endif
+#ifdef ANSI_DEFAULT
+ "ANSI default terminal",
+#endif
+#ifdef TEXTCOLOR
+ "color",
+#endif
+#ifdef TTY_GRAPHICS
+#ifdef TTY_TILES_ESCCODES
+ "console escape codes for tile hinting",
+#endif
+#endif
+#ifdef COM_COMPL
+ "command line completion",
+#endif
+#ifdef LIFE
+ "Conway's Game of Life",
+#endif
+#ifdef COMPRESS
+ "data file compression",
+#endif
+#ifdef ZLIB_COMP
+ "ZLIB data file compression",
+#endif
+#ifdef DLB
+#ifndef VERSION_IN_DLB_FILENAME
+ "data librarian",
+#else
+ "data librarian with a version-dependent name",
+#endif
+#endif
+#ifdef DUMPLOG
+ "end-of-game dumplogs",
+#endif
+#ifdef HOLD_LOCKFILE_OPEN
+ "exclusive lock on level 0 file",
+#endif
+#if defined(MSGHANDLER) && (defined(POSIX_TYPES) || defined(__GNUC__))
+ "external program as a message handler",
+#endif
+#ifdef MFLOPPY
+ "floppy drive support",
+#endif
+#ifdef INSURANCE
+ "insurance files for recovering from crashes",
+#endif
+#ifdef LOGFILE
+ "log file",
+#endif
+#ifdef XLOGFILE
+ "extended log file",
+#endif
+#ifdef PANICLOG
+ "errors and warnings log file",
+#endif
+#ifdef MAIL_STRUCTURES
+ "mail daemon",
+#endif
+#if defined(GNUDOS) || defined(__DJGPP__)
+ "MSDOS protected mode",
+#endif
+#ifdef NEWS
+ "news file",
+#endif
+#ifdef OVERLAY
+#ifdef MOVERLAY
+ "MOVE overlays",
+#else
+#ifdef VROOMM
+ "VROOMM overlays",
+#else
+ "overlays",
+#endif
+#endif
+#endif
+ /* pattern matching method will be substituted by nethack at run time */
+ "pattern matching via :PATMATCH:",
+#ifdef USE_ISAAC64
+ "pseudo random numbers generated by ISAAC64",
+#ifdef DEV_RANDOM
+#ifdef NHSTDC
+ /* include which specific one */
+ "strong PRNG seed available from " DEV_RANDOM,
+#else
+ "strong PRNG seed available from DEV_RANDOM",
+#endif
+#else
+#ifdef WIN32
+ "strong PRNG seed available from CNG BCryptGenRandom()",
+#endif
+#endif /* DEV_RANDOM */
+#else /* ISAAC64 */
+#ifdef RANDOM
+ "pseudo random numbers generated by random()",
+#else
+ "pseudo random numbers generated by C rand()",
+#endif
+#endif /* ISAAC64 */
+#ifdef SELECTSAVED
+ "restore saved games via menu",
+#endif
+#ifdef SCORE_ON_BOTL
+ "score on status line",
+#endif
+#ifdef CLIPPING
+ "screen clipping",
+#endif
+#ifdef NO_TERMS
+#ifdef MAC
+ "screen control via mactty",
+#endif
+#ifdef SCREEN_BIOS
+ "screen control via BIOS",
+#endif
+#ifdef SCREEN_DJGPPFAST
+ "screen control via DJGPP fast",
+#endif
+#ifdef SCREEN_VGA
+ "screen control via VGA graphics",
+#endif
+#ifdef WIN32CON
+ "screen control via WIN32 console I/O",
+#endif
+#endif /* NO_TERMS */
+#ifdef SHELL
+ "shell command",
+#endif
+ "traditional status display",
+#ifdef STATUS_HILITES
+ "status via windowport with highlighting",
+#else
+ "status via windowport without highlighting",
+#endif
+#ifdef SUSPEND
+ "suspend command",
+#endif
+#ifdef TTY_GRAPHICS
+#ifdef TERMINFO
+ "terminal info library",
+#else
+#if defined(TERMLIB) || (!defined(MICRO) && !defined(WIN32))
+ "terminal capability library",
+#endif
+#endif
+#endif /*TTY_GRAPHICS*/
+#ifdef USE_XPM
+ "tiles file in XPM format",
+#endif
+#ifdef GRAPHIC_TOMBSTONE
+ "graphical RIP screen",
+#endif
+#ifdef TIMED_DELAY
+ "timed wait for display effects",
+#endif
+#ifdef USER_SOUNDS
+ "user sounds",
+#endif
+#ifdef PREFIXES_IN_USE
+ "variable playground",
+#endif
+#ifdef VISION_TABLES
+ "vision tables",
+#endif
+#ifdef ZEROCOMP
+ "zero-compressed save files",
+#endif
+#ifdef RLECOMP
+ "run-length compression of map in save files",
+#endif
+#ifdef SYSCF
+ "system configuration at run-time",
+#endif
+ save_bones_compat_buf,
+ "and basic NetHack features"
+};
+
+static void
+opt_out_words(str, length_p)
+char *str; /* input, but modified during processing */
+int *length_p; /* in/out */
+{
+ char *word;
+
+ while (*str) {
+ word = index(str, ' ');
+#if 0
+ /* treat " (" as unbreakable space */
+ if (word && *(word + 1) == '(')
+ word = index(word + 1, ' ');
+#endif
+ if (word)
+ *word = '\0';
+ if (*length_p + (int) strlen(str) > COLNO - 5) {
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ Sprintf(optbuf, "%s", opt_indent),
+ *length_p = (int) strlen(opt_indent);
+ } else {
+ Sprintf(eos(optbuf), " "), (*length_p)++;
+ }
+ Sprintf(eos(optbuf),
+ "%s", str), *length_p += (int) strlen(str);
+ str += strlen(str) + (word ? 1 : 0);
+ }
+}
+
+void
+build_options()
+{
+ char buf[BUFSZ];
+ int i, length, winsyscnt;
+
+ build_savebones_compat_string();
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ Sprintf(optbuf,
+ "%sNetHack version %d.%d.%d%s\n",
+ opt_indent,
+ VERSION_MAJOR, VERSION_MINOR, PATCHLEVEL,
+#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
+#if (NH_DEVEL_STATUS == NH_STATUS_BETA)
+ " [beta]"
+#else
+ " [work-in-progress]"
+#endif
+#else
+ ""
+#endif /* NH_DEVEL_STATUS == NH_STATUS_RELEASED */
+ );
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ Sprintf(optbuf,
+ "Options compiled into this edition:");
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ optbuf[0] = '\0';
+ length = COLNO + 1; /* force 1st item onto new line */
+ for (i = 0; i < SIZE(build_opts); i++) {
+ opt_out_words(strcat(strcpy(buf, build_opts[i]),
+ (i < SIZE(build_opts) - 1) ? "," : "."),
+ &length);
+ }
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ optbuf[0] = '\0';
+ winsyscnt = SIZE(window_opts) - 1;
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ Sprintf(optbuf, "Supported windowing system%s:",
+ (winsyscnt > 1) ? "s" : "");
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ optbuf[0] = '\0';
+ length = COLNO + 1; /* force 1st item onto new line */
+ for (i = 0; i < winsyscnt; i++) {
+ Sprintf(buf, "\"%s\"", window_opts[i].id);
+ if (strcmp(window_opts[i].name, window_opts[i].id))
+ Sprintf(eos(buf), " (%s)", window_opts[i].name);
+ /*
+ * 1 : foo.
+ * 2 : foo and bar (note no period; comes from 'with default' below)
+ * 3+: for, bar, and quux
+ */
+ opt_out_words(strcat(buf, (winsyscnt == 1) ? "." /* no 'default' */
+ : (winsyscnt == 2 && i == 0) ? " and"
+ : (i == winsyscnt - 2) ? ", and"
+ : ","),
+ &length);
+ }
+ if (winsyscnt > 1) {
+ Sprintf(buf, "with a default of \"%s\".", DEFAULT_WINDOW_SYS);
+ opt_out_words(buf, &length);
+ }
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ optbuf[0] = '\0';
+
+ /* end with a blank line */
+ opttext[idxopttext] = strdup(optbuf);
+ if (idxopttext < (MAXOPT - 1))
+ idxopttext++;
+ optbuf[0] = '\0';
+ return;
+}
+
+#if defined(__DATE__) && defined(__TIME__)
+#define extract_field(t,s,n,z) \
+ do { \
+ for (i = 0; i < n; ++i) \
+ t[i] = s[i + z]; \
+ t[i] = '\0'; \
+ } while (0)
+#endif
+
+void
+runtime_info_init()
+{
+ int i;
+ char tmpbuf[BUFSZ], *strp;
+ const char *mth[] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+ struct tm t = {0};
+ time_t timeresult;
+
+ if (!done_runtime_opt_init_once) {
+ done_runtime_opt_init_once = 1;
+ build_savebones_compat_string();
+ /* construct the current version number */
+ make_version();
+ /*
+ * In a cross-compiled environment, you can't execute
+ * the target binaries during the build, so we can't
+ * use makedefs to write the values of the build
+ * date and time to a file for retrieval. Not for
+ * information meaningful to the target execution
+ * environment.
+ *
+ * How can we capture the build date/time of the target
+ * binaries in such a situation? We need to rely on the
+ * cross-compiler itself to do it for us during the
+ * cross-compile.
+ *
+ * To that end, we are going to make use of the
+ * following pre-defined preprocessor macros for this:
+ * gcc, msvc, clang __DATE__ "Feb 12 1996"
+ * gcc, msvc, clang __TIME__ "23:59:01"
+ *
+ */
+
+#if defined(__DATE__) && defined(__TIME__)
+ if (sizeof __DATE__ + sizeof __TIME__ + sizeof "123" <
+ sizeof rttimebuf)
+ Sprintf(rttimebuf, "%s %s", __DATE__, __TIME__);
+ /* "Feb 12 1996 23:59:01"
+ 01234567890123456789 */
+ if ((int) strlen(rttimebuf) == 20) {
+ extract_field(tmpbuf, rttimebuf, 4, 7); /* year */
+ t.tm_year = atoi(tmpbuf) - 1900;
+ extract_field(tmpbuf, rttimebuf, 3, 0); /* mon */
+ for (i = 0; i < SIZE(mth); ++i)
+ if (!case_insensitive_comp(tmpbuf, mth[i])) {
+ t.tm_mon = i;
+ break;
+ }
+ extract_field(tmpbuf, rttimebuf, 2, 4); /* mday */
+ strp = tmpbuf;
+ if (*strp == ' ')
+ strp++;
+ t.tm_mday = atoi(strp);
+ extract_field(tmpbuf, rttimebuf, 2, 12); /* hour */
+ t.tm_hour = atoi(tmpbuf);
+ extract_field(tmpbuf, rttimebuf, 2, 15); /* min */
+ t.tm_min = atoi(tmpbuf);
+ extract_field(tmpbuf, rttimebuf, 2, 18); /* sec */
+ t.tm_sec = atoi(tmpbuf);
+ timeresult = mktime(&t);
+#if defined(CROSSCOMPILE_TARGET) && !defined(MAKEDEFS_C)
+ BUILD_TIME = (unsigned long) timeresult;
+ BUILD_DATE = rttimebuf;
+#endif
+#else /* __DATE__ && __TIME__ */
+ nhUse(strp);
+#endif /* __DATE__ && __TIME__ */
+
+#if defined(CROSSCOMPILE_TARGET) && !defined(MAKEDEFS_C)
+ VERSION_NUMBER = version.incarnation;
+ VERSION_FEATURES = version.feature_set;
+#ifdef MD_IGNORED_FEATURES
+ IGNORED_FEATURES = MD_IGNORED_FEATURES;
+#endif
+ VERSION_SANITY1 = version.entity_count;
+ VERSION_SANITY2 = version.struct_sizes1;
+ VERSION_SANITY3 = version.struct_sizes2;
+
+ VERSION_STRING = strdup(version_string(tmpbuf, "."));
+ VERSION_ID = strdup(version_id_string(tmpbuf, BUILD_DATE));
+ COPYRIGHT_BANNER_C = strdup(bannerc_string(tmpbuf, BUILD_DATE));
+#ifdef HOST_NETHACK_GIT_SHA
+ NETHACK_GIT_SHA = strdup(HOST_NETHACK_GIT_SHA);
+#endif
+#ifdef HOST_NETHACK_GIT_BRANCH
+ NETHACK_GIT_BRANCH = strdup(HOST_NETHACK_GIT_BRANCH);
+#endif
+#endif /* CROSSCOMPILE_TARGET && !MAKEDEFS_C */
+ }
+ idxopttext = 0;
+ build_options();
+ }
+}
+
+const char *
+do_runtime_info(rtcontext)
+int *rtcontext;
+{
+ const char *retval = (const char *) 0;
+
+ if (!done_runtime_opt_init_once)
+ runtime_info_init();
+ if (idxopttext && rtcontext)
+ if (*rtcontext >= 0 && *rtcontext < (MAXOPT - 1)) {
+ retval = opttext[*rtcontext];
+ *rtcontext += 1;
+ }
+ return retval;
+}
+
+/*mdlib.c*/
-/* NetHack 3.7 sfdata.c $Date$ $Revision$ */
-/* Copyright (c) NetHack Development Team 2018. */
+/* NetHack 3.7 sfdata.c */
+/* Copyright (c) NetHack Development Team 2019. */
/* NetHack may be freely redistributed. See license for details. */
/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */
#include "wintype.h"
#include "sfproto.h"
-#define BUILD_DATE "Tue Jun 25 09:57:33 2019"
-#define BUILD_TIME (1561471053L)
-
#define NHTYPE_SIMPLE 1
#define NHTYPE_COMPLEX 2
struct nhdatatypes_t {
#include "patchlevel.h"
#endif
+#if defined(CROSSCOMPILE)
+struct cross_target_s cross_target = {
+ /* https://groups.google.com/forum/#!original/
+ comp.sources.games/91SfKYg_xzI/dGnR3JnspFkJ */
+ "Tue, 28-Jul-87 13:18:57 EDT",
+ "Version 1.0, built Jul 28 13:18:57 1987.",
+ "0000000000000000000000000000000000000000",
+ "master",
+ "1.0.0-0",
+ "NetHack Version 1.0.0-0 - last build Tue Jul 28 13:18:57 1987.",
+ 0x01010000UL,
+ 0x00000000UL,
+ 0x00000000UL,
+ 0x00000000UL,
+ 0x00000000UL,
+ 0x00000000UL,
+ 554476737UL,
+};
+#endif /* CROSSCOMPILE */
+
#if defined(NETHACK_GIT_SHA)
-const char *NetHack_git_sha = NETHACK_GIT_SHA;
+const char *NetHack_git_sha
+#if !defined(CROSSCOMPILE) || (defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST))
+ = NETHACK_GIT_SHA
+#else
+ = NETHACK_HOST_GIT_SHA
#endif
+;
+#endif
+
#if defined(NETHACK_GIT_BRANCH)
-const char *NetHack_git_branch = NETHACK_GIT_BRANCH;
+const char *NetHack_git_branch
+#if !defined(CROSSCOMPILE) || (defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST))
+ = NETHACK_GIT_BRANCH
+#else
+ = NETHACK_HOST_GIT_BRANCH
+#endif
+;
#endif
static void FDECL(insert_rtoption, (char *));
int
doextversion()
{
+#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
+ const char *rtbuf;
+ int rtcontext = 0;
+#else
dlb *f;
+#endif
char buf[BUFSZ], *p = 0;
winid win = create_nhwindow(NHW_TEXT);
putstr(win, 0, p);
}
+#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
+#else
f = dlb_fopen(OPTIONS_USED, "r");
if (!f) {
putstr(win, 0, "");
Sprintf(buf, "[Configuration '%s' not available?]", OPTIONS_USED);
putstr(win, 0, buf);
} else {
+#endif
/*
* already inserted above:
* + outdented program name and version plus build date and time
*/
boolean prolog = TRUE; /* to skip indented program name */
+#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
+ while ((rtbuf = do_runtime_info(&rtcontext))) {
+ if ((int) strlen(rtbuf) >= (BUFSZ - 1))
+ continue;
+ Strcpy(buf, rtbuf);
+#else
while (dlb_fgets(buf, BUFSZ, f)) {
(void) strip_newline(buf);
+#endif
if (index(buf, '\t') != 0)
(void) tabexpand(buf);
if (*buf)
putstr(win, 0, buf);
}
+#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
+#else
(void) dlb_fclose(f);
+#endif
display_nhwindow(win, FALSE);
destroy_nhwindow(win);
+#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
+#else
}
+#endif
return 0;
}
store_version(nhfp)
NHFILE *nhfp;
{
+#if !defined(CROSSCOMPILE) || (defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST))
static const struct version_info version_data = {
VERSION_NUMBER, VERSION_FEATURES,
VERSION_SANITY1, VERSION_SANITY2, VERSION_SANITY3
+#else
+ struct version_info version_data = {
+ 0UL,0UL,0UL,0UL,0Ul
+#endif
};
+#if defined(CROSSCOMPILE) && !defined(CROSSCOMPILE_HOST)
+ version_data.incarnation = VERSION_NUMBER; /* actual version number */
+ version_data.feature_set = VERSION_FEATURES; /* bitmask of config settings */
+ version_data.entity_count = VERSION_SANITY1; /* # of monsters and objects */
+ version_data.struct_sizes1 = VERSION_SANITY2; /* size of key structs */
+ version_data.struct_sizes2 = VERSION_SANITY3; /* size of more key structs */
+#endif
if (nhfp->structlevel) {
bufoff(nhfp->fd);
/* bwrite() before bufon() uses plain write() */
# for testing the msdos port build of the evolving NetHack code.0
#
# The GNU Make has a problem if you include a drive spec below.
-GAMEDIR =../binary
+GAMEDIR =../msdos-binary
#
#==============================================================================
TEXTIO2 = $(HOST_O)tiletex2.o $(HOST_O)tiletxt2.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \
$(HOST_O)objects.o
-TILE_BMP = $(DAT)/nhtiles.bmp
+PLANAR_TIB = $(DAT)/NETHACK1.TIB
+OVERVIEW_TIB = $(DAT)/NETHACKO.TIB
+TILE_BMP = $(DAT)/NHTILES.BMP
-TILEUTIL = $(TILOBJ) $(U)tile2bin $(U)til2bin2 $(TILE_BMP)
+TILEUTIL = $(TILOBJ) $(U)tile2bin $(U)til2bin2 $(TILE_BMP) $(PLANAR_TIB) $(OVERVIEW_TIB)
TILEFILES = $(WSHR)/monsters.txt $(WSHR)/objects.txt $(WSHR)/other.txt
CURSESLIB=
INCLDIR=-I../include -I../sys/msdos
# Debugging
-#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS
+#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -CROSSCOMPILE_HOST
#LFLAGS = -pg
#
-cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS
-LFLAGS =
+#cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -DCROSSCOMPILE_HOST
+#LFLAGS =
#
# Debugging
-#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES
+#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_HOST
#LFLAGS = -g
#
# Normal
-cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES
+cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_HOST
LFLAGS =
#==========================================
ls -1 data oracles options quest.dat rumors help hh >dlb.lst; \
ls -1 cmdhelp history opthelp wizhelp license >>dlb.lst; \
ls -1 bogusmon engrave epitaph tribute msdoshlp.txt >>dlb.lst; \
+ ls -1 *.lua >>dlb.lst; \
$(U)dlb_main cvIf dlb.lst nhdat
cd $(SRC)
# Required for tile support
#==========================================
-$(DAT)/nhtiles.bmp: $(TILEFILES) $(U)tile2bmp
+$(DAT)/NetHack1.tib: $(TILEFILES) $(U)tile2bin
+ @echo Creating binary tile files
+ cd $(DAT)
+ $(U)tile2bin
+ cd $(SRC)
+
+$(DAT)/NetHacko.tib: $(HOST_O)thintile.tag $(TILEFILES2) $(U)til2bin2
+ @echo Creating overview binary tile files
+ cd $(DAT)
+ $(U)til2bin2
+ cd $(SRC)
+
+$(DAT)/NHTILES.BMP: $(TILEFILES) $(U)tile2bmp
@echo Creating binary tile files which may take some time
@cd $(DAT)
@$(U)tile2bmp $@
-# NetHack 3.6 Makefile2.cross
+# NetHack 3.7 Makefile2.cross
# Cross-compile msdos version of NetHack using a
# linux-hosted djgpp cross-compiler.
#
# Makefile2 utilizes the djgpp cross-compiler from Andrew Wu:
# https://github.com/andrewwutw/build-djgpp
#
-# Currently, in NetHack 3.6, the cross-compile for msdos cannot be
-# used to build the entire game to a playable point but it is useful
-# for testing the msdos port build of the evolving NetHack code.
+# In NetHack 3.7, the cross-compile for msdos can be used to
+# build the entire game to a complete ms-dos package and
+# result (in theory).
#
# Game Installation Variables
# NOTE: Make sure GAMEDIR exists before make is started.
-GAME = nethack
+GAME = NETHACK
# The GNU Make has a problem if you include a drive spec below (unfortunately).
-GAMEDIR =../binary
+GAMEDIR =../msdos-binary
# Optional PDCurses support
# Uncomment these and set them appropriately if you want to
# Set top of djgpp if not specified through ENV variables prior to make:
#DJGPP_TOP = $(HOME)/djgpp
+#---------------------------------------------------------------
+# Location of LUA
+#
+# Original source needs to be obtained from:
+# http://www.lua.org/ftp/lua-5.3.5.tar.gz
+#
+# 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.
+#
+ADD_LUA=Y
+LUATOP=../lib/lua-5.3.5
+#
#
#==============================================================================
# This marks the end of the BUILD DECISIONS section.
# Directories, gcc likes unix style directory specs
#
-OBJ = o
+TARGET = msdos
+OBJ = $(TARGET)_o
HOBJ = host_o
DAT = ../dat
DOC = ../doc
TARGET_CC = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/gcc
TARGET_LINK = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/gcc
TARGET_STUBEDIT = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/stubedit
+TARGET_AR = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/ar
MAKEBIN = make
#
# #
################################################
-GAMEFILE = $(GAMEDIR)/$(GAME).exe
+GAMEFILE = $(GAMEDIR)/$(GAME).EXE
# Changing this conditional block is not recommended
ifeq "$(USE_DLB)" "Y"
HOST_O = $(HOBJ)/
U = $(UTIL)/
-#==========================================
-# Utility Objects.
-#==========================================
-
-VGAOBJ = $(O)vidvga.o $(O)vidvesa.o
-
-MAKESRC = makedefs.c
-
-#SPLEVSRC = lev_yacc.c lev_$(LEX).c lev_main.c panic.c
-
-#DGNCOMPSRC = dgn_yacc.c dgn_$(LEX).c dgn_main.c
-
-MAKEDEFSOBJS = $(HOST_O)makedefs.o $(HOST_O)monst.o $(HOST_O)objects.o
-
-#SPLEVOBJS = $(HOST_O)lev_yacc.o $(HOST_O)lev_$(LEX).o $(HOST_O)lev_main.o $(HOST_O)alloc.o \
-# $(HOST_O)monst.o $(HOST_O)objects.o $(HOST_O)panic.o \
-# $(HOST_O)drawing.o $(HOST_O)decl.o $(O)stubvid.o
-
-#DGNCOMPOBJS = $(HOST_O)dgn_yacc.o $(HOST_O)dgn_$(LEX).o $(HOST_O)dgn_main.o $(HOST_O)alloc.o \
-# $(HOST_O)panic.o
-
-RECOVOBJS = $(O)recover.o
-
-
#==========================================
# Tile related object files.
#==========================================
-ifeq ($(SUPPRESS_GRAPHICS),Y)
-TILOBJ =
-TILOBJ2 =
-TEXTIO =
-TEXTIO2 =
-TILE_BMP =
-TILEUTIL =
-TILEFILES =
-TILEFILES2 =
-GIFREADERS =
-GIFREAD2 =
-PPMWRITERS =
-PPMWRIT2 =
-
-else
-
-TILOBJ = $(O)tile.o $(VGAOBJ)
-
-TILOBJ2 = $(O)tileset.o $(O)bmptiles.o $(O)giftiles.o
-
-TEXTIO = $(HOST_O)tiletext.o $(HOST_O)tiletxt.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \
- $(HOST_O)objects.o $(HOST_O)stubvid.o
-
-TEXTIO2 = $(HOST_O)tiletex2.o $(HOST_O)tiletxt2.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \
- $(HOST_O)objects.o $(HOST_O)stubvid.o
-
-TILE_BMP = $(DAT)/nhtiles.bmp
-
-TILEUTIL = $(TILOBJ) $(U)tile2bin $(U)til2bin2 $(TILE_BMP)
-
-TILEFILES = $(WSHR)/monsters.txt $(WSHR)/objects.txt $(WSHR)/other.txt
-
-TILEFILES2 = $(WSHR)/monthin.txt $(WSHR)/objthin.txt $(WSHR)/oththin.txt
-
-GIFREADERS = $(HOST_O)gifread.o $(HOST_O)alloc.o $(HOST_O)panic.o
-
-GIFREAD2 = $(HOST_O)gifread2.o $(HOST_O)alloc.o $(HOST_O)panic.o
-
-PPMWRITERS = $(HOST_O)ppmwrite.o $(HOST_O)alloc.o $(HOST_O)panic.o
-
-PPMWRIT2 = $(HOST_O)ppmwrit2.o $(HOST_O)alloc.o $(HOST_O)panic.o
-endif
+#ifeq ($(SUPPRESS_GRAPHICS),Y)
+#TILOBJ =
+#TILOBJ2 =
+#TEXTIO =
+#TEXTIO2 =
+#TILE_BMP =
+#TILEUTIL =
+#TILEFILES =
+#TILEFILES2 =
+#GIFREADERS =
+#GIFREAD2 =
+#PPMWRITERS =
+#PPMWRIT2 =
+#
+#else
+#
+#TILOBJ = $(O)tile.o $(VIDEO_OBJ)
+#
+#TILOBJ2 = $(O)tileset.o $(O)bmptiles.o $(O)giftiles.o
+#
+#TEXTIO = $(HOST_O)tiletext.o $(HOST_O)tiletxt.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \
+# $(HOST_O)objects.o $(HOST_O)stubvid.o
+#
+#TEXTIO2 = $(HOST_O)tiletex2.o $(HOST_O)tiletxt2.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \
+# $(HOST_O)objects.o $(HOST_O)stubvid.o
+#TILEUTIL = $(TILOBJ) $(U)tile2bin $(U)til2bin2 $(TILE_BMP) $(PLANAR_TIB) $(OVERVIEW_TIB)
+#
+#TILEFILES = $(WSHR)/monsters.txt $(WSHR)/objects.txt $(WSHR)/other.txt
+#
+#TILEFILES2 = $(WSHR)/monthin.txt $(WSHR)/objthin.txt $(WSHR)/oththin.txt
+#
+#GIFREADERS = $(HOST_O)gifread.o $(HOST_O)alloc.o $(HOST_O)panic.o
+#
+#GIFREAD2 = $(HOST_O)gifread2.o $(HOST_O)alloc.o $(HOST_O)panic.o
+#
+#PPMWRITERS = $(HOST_O)ppmwrite.o $(HOST_O)alloc.o $(HOST_O)panic.o
+#
+#PPMWRIT2 = $(HOST_O)ppmwrit2.o $(HOST_O)alloc.o $(HOST_O)panic.o
+#endif
-#REGEX = $(O)pmatchregex.o
-#REGEX = $(O)cppregex.o
-REGEX = $(O)posixreg.o
+PLANAR_TIB = $(DAT)/NETHACK1.tib
+OVERVIEW_TIB = $(DAT)/NETHACKO.tib
+TILE_BMP = $(DAT)/NHTILES.BMP
-DLBOBJ = $(O)dlb.o
+##REGEX = $(O)pmatchregex.o
+##REGEX = $(O)cppregex.o
+REGEX = $(O)posixreg.o
+DLBOBJ = $(O)dlb.o
+VIDEO_OBJ = $(O)vidvga.o $(O)vidvesa.o $(O)tile.o $(O)tileset.o $(O)bmptiles.o $(O)giftiles.o
+RECOVOBJS = $(O)recover.o
# Object files for the game itself.
VOBJ20 = $(O)vis_tab.o $(O)weapon.o $(O)were.o $(O)wield.o $(O)windows.o
VOBJ21 = $(O)wintty.o $(O)wizard.o $(O)worm.o $(O)worn.o $(O)write.o
VOBJ22 = $(O)zap.o $(O)light.o $(O)dlb.o $(O)dig.o $(O)teleport.o
-VOBJ23 = $(O)region.o $(O)sys.o $(REGEX) $(O)isaac64.o
+VOBJ23 = $(O)region.o $(O)sys.o $(REGEX) $(O)isaac64.o $(VIDEO_OBJ)
+VOBJ24 = $(O)sfbase.o $(O)sfdata.o
+VOBJ25 = $(O)sfstruct.o $(O)sfascii.o $(O)sflendian.o
-SOBJ = $(O)msdos.o $(O)sound.o $(O)pcsys.o $(O)tty.o $(O)unix.o \
+SOBJ = $(O)msdos.o $(O)pcsys.o $(O)tty.o $(O)unix.o \
$(O)video.o $(O)vidtxt.o $(O)pckeys.o
VVOBJ = $(O)version.o
+ifeq "$(ADD_LUA)" "Y"
+LUAOBJ = $(O)nhlua.o $(O)nhlsel.o
+endif
+
ifeq "$(ADD_CURSES)" "Y"
CURSESOBJ= $(O)cursdial.o $(O)cursinit.o $(O)cursinvt.o $(O)cursmain.o \
$(O)cursmesg.o $(O)cursmisc.o $(O)cursstat.o $(O)curswins.o
$(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \
$(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
- $(VOBJ21) $(VOBJ22) $(VOBJ23) \
- $(CURSESOBJ)
+ $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
+ $(LUAOBJ) $(CURSESOBJ)
ALLOBJ = $(VOBJ) $(SOBJ) $(TILOBJ) $(TILOBJ2) $(VVOBJ)
+ifeq "$(ADD_LUA)" "Y"
+#===============-=================================================
+# LUA library
+# Source from http://www.lua.org/ftp/lua-5.3.5.tar.gz
+#=================================================================
+
+LUASRC = $(LUATOP)/src
+LUALIB = $(O)lua535s.a
+#LUADLL = $(O)lua535.a
+LUAINCL = -I$(LUASRC)
+#LUAFLAGS = unix added -lm here?
+LUATARGETS = lua.exe luac.exe $(LUALIB)
+#LUATARGETS = $(LUADLL) $(LUALIB)
+
+LUASRCFILES = lapi.c lauxlib.c lbaselib.c lbitlib.c lcode.c \
+ lcorolib.c lctype.c ldblib.c ldebug.c ldo.c \
+ ldump.c lfunc.c lgc.c linit.c liolib.c llex.c \
+ lmathlib.c lmem.c loadlib.c lobject.c lopcodes.c \
+ loslib.c lparser.c lstate.c lstring.c lstrlib.c \
+ ltable.c ltablib.c ltm.c lundump.c lutf8lib.c \
+ lvm.c lzio.c
+
+LUAOBJFILES1 = $(O)lapi.o $(O)lauxlib.o $(O)lbaselib.o $(O)lbitlib.o \
+ $(O)lcode.o $(O)lcorolib.o $(O)lctype.o $(O)ldblib.o
+LUAOBJFILES2 = $(O)ldebug.o $(O)ldo.o $(O)ldump.o $(O)lfunc.o \
+ $(O)lgc.o $(O)linit.o $(O)liolib.o $(O)llex.o
+LUAOBJFILES3 = $(O)lmathlib.o $(O)lmem.o $(O)loadlib.o $(O)lobject.o \
+ $(O)lopcodes.o $(O)loslib.o $(O)lparser.o $(O)lstate.o
+LUAOBJFILES3 = $(O)lstring.o $(O)lstrlib.o $(O)ltable.o $(O)ltablib.o \
+ $(O)ltm.o $(O)lundump.o $(O)lutf8lib.o $(O)lvm.o $(O)lzio.o
+
+#LUAOBJFILES = $(O)lapi.o $(O)lauxlib.o $(O)lbaselib.o $(O)lbitlib.o \
+# $(O)lcode.o $(O)lcorolib.o $(O)lctype.o $(O)ldblib.o \
+# $(O)ldebug.o $(O)ldo.o $(O)ldump.o $(O)lfunc.o \
+# $(O)lgc.o $(O)linit.o $(O)liolib.o $(O)llex.o \
+# $(O)lmathlib.o $(O)lmem.o $(O)loadlib.o $(O)lobject.o \
+# $(O)lopcodes.o $(O)loslib.o $(O)lparser.o $(O)lstate.o \
+# $(O)lstring.o $(O)lstrlib.o $(O)ltable.o $(O)ltablib.o \
+# $(O)ltm.o $(O)lundump.o $(O)lutf8lib.o $(O)lvm.o $(O)lzio.o
+
+LUALIBOBJS = $(LUAOBJFILES1) $(LUAOBJFILES2) $(LUAOBJFILES3) $(LUAOBJFILES4)
+endif
+
ifeq "$(ADD_CURSES)" "Y"
#==========================================
# PDCurses build macros
DLBOBJS =
endif
-ifdef DJGPP
-DJ1 = $(dir $(DJGPP))
-CWSDPMI = $(subst /,\,$(DJ1))bin\CWSDPMI.*
-endif
-
#==========================================
# More compiler setup macros
#==========================================
CURSESLIB=
endif
-INCLDIR=-I../include -I../sys/msdos
+INCLDIR=-I../include -I../sys/msdos $(LUAINCL)
# Debugging
-#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS
+#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -DCROSSCOMPILE_TARGET
#LFLAGS = -pg
-cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS
-LFLAGS =
+#cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE-DCROSSCOMPILE_TARGET
+#LFLAGS =
# Debugging
-#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES
+#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_TARGET
#LFLAGS = -g
# Normal
-cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES
+cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_TARGET
LFLAGS =
#==========================================
$(OBJ)/%.o : $(PDCDOS)/%.c
$(TARGET_CC) $(PDCINCL) $(cflags) -o$@ $<
+ifeq "$(ADD_LUA)" "Y"
+#==========================================
+# Rules for LUA files
+#==========================================
+
+$(OBJ)/%.o : $(LUASRC)/%.c
+ $(TARGET_CC) $(cflags) -o$@ $<
+endif
+
#==========================================
# Primary Targets.
#==========================================
util: $(O)utility.tag
-#LEVCOMPEXE = $(U)lev_comp
-
$(O)utility.tag: $(INCL)/date.h $(INCL)/trap.h $(INCL)/onames.h \
$(INCL)/pm.h vis_tab.c $(TILEUTIL)
echo utilities made > $@
$(O)install.tag: $(DAT)/nhdat $(GAMEFILE)
ifeq ($(USE_DLB),Y)
- cp $(DAT)/nhdat $(GAMEDIR)
- cp $(DAT)/license $(GAMEDIR)
+ cp $(DAT)/nhdat $(GAMEDIR)/NHDAT
+ cp $(DAT)/license $(GAMEDIR)/LICENSE
else
cp $(DAT)/*. $(GAMEDIR)
cp $(DAT)/*.dat $(GAMEDIR)
- cp $(DAT)/*.lev $(GAMEDIR)
cp $(MSYS)/msdoshlp.txt $(GAMEDIR))
+ifeq "$(ADD_LUA)" "Y"
+ cp $(DAT)/*.lua $(GAMEDIR)
+endif
endif
ifdef TERMLIB
- cp $(SSHR)/termcap $(GAMEDIR))
+ cp $(SSHR)/termcap $(GAMEDIR)/TERMCAP)
endif
# if [ -f $(TILE_BMP) ]; then rm $(TILE_BMP); fi;
- if [ -f $(TILE_BMP) ]; then cp $(TILE_BMP) $(GAMEDIR); fi;
- if [ -f $(DAT)/symbols ]; then cp $(DAT)/symbols $(GAMEDIR); fi;
- if [ -f $(SSHR)/NetHack.cnf ]; then cp $(SSHR)/NetHack.cnf $(GAMEDIR); fi;
- -touch $(GAMEDIR)/record
- if [ -f ../sys/winnt/sysconf ]; then cp ../sys/winnt/sysconf $(GAMEDIR); fi;
- if [ -f $(DOC)/nethack.txt ]; then cp $(DOC)/nethack.txt $(GAMEDIR); fi;
-ifdef CWSDPMI
- if [ -f $(CWSDPMI) ]; then cp $(CWSDPMI) $(GAMEDIR); fi;
-else
- @echo Could not find a copy of CWSDPMI.EXE to put into $(GAMEDIR)
-endif
+ if [ -f $(TILE_BMP) ]; then cp $(TILE_BMP) $(GAMEDIR)/NHTILES.BMP; fi;
+ if [ -f $(DAT)/symbols ]; then cp $(DAT)/symbols $(GAMEDIR)/SYMBOLS; fi;
+ if [ -f $(SSHR)/NetHack.cnf ]; then cp $(SSHR)/NetHack.cnf $(GAMEDIR)/NETHACK.CNF; fi;
+ -touch $(GAMEDIR)/RECORD
+ if [ -f ../sys/winnt/sysconf ]; then cp ../sys/winnt/sysconf $(GAMEDIR)/SYSCONF; fi;
+ if [ -f $(DOC)/nethack.txt ]; then cp $(DOC)/nethack.txt $(GAMEDIR)/NETHACK.TXT; fi;
+# if [ -f $(PLANAR_TIB) ]; then cp $(PLANAR_TIB) $(GAMEDIR)/$(PLANAR_TIB^^); fi;
+# if [ -f $(OVERVIEW_TIB ]; then cp $(OVERVIEW_TIB) $(GAMEDIR)/$(OVERVIEW_TIB^^); fi;
@echo install done > $@
#==========================================
# The main target.
#==========================================
-$(GAMEFILE): $(O)obj.tag $(PATCHLEV_H) $(PDCLIB) \
+$(GAMEFILE): $(O)obj.tag $(PDCLIB) $(LUALIB) \
$(O)utility.tag $(ALLOBJ) $(O)$(GAME).lnk
if [ -f temp.a ]; then rm temp.a; fi;
- @ar r temp.a $(VOBJ01)
- @ar r temp.a $(VOBJ02)
- @ar r temp.a $(VOBJ03)
- @ar r temp.a $(VOBJ04)
- @ar r temp.a $(VOBJ05)
- @ar r temp.a $(VOBJ06)
- @ar r temp.a $(VOBJ07)
- @ar r temp.a $(VOBJ08)
- @ar r temp.a $(VOBJ09)
- @ar r temp.a $(VOBJ10)
- @ar r temp.a $(VOBJ11)
- @ar r temp.a $(VOBJ12)
- @ar r temp.a $(VOBJ13)
- @ar r temp.a $(VOBJ14)
- @ar r temp.a $(VOBJ15)
- @ar r temp.a $(VOBJ16)
- @ar r temp.a $(VOBJ17)
- @ar r temp.a $(VOBJ18)
- @ar r temp.a $(VOBJ19)
- @ar r temp.a $(VOBJ20)
- @ar r temp.a $(VOBJ21)
- @ar r temp.a $(VOBJ22)
- @ar r temp.a $(VOBJ23)
- @ar r temp.a $(VOBJ24)
- @ar r temp.a $(VOBJ25)
- @ar r temp.a $(SOBJ)
- @ar r temp.a $(TILOBJ)
- @ar r temp.a $(TILOBJ2)
- @ar r temp.a $(VVOBJ)
+ @$(TARGET_AR) r temp.a $(VOBJ01)
+ @$(TARGET_AR) r temp.a $(VOBJ02)
+ @$(TARGET_AR) r temp.a $(VOBJ03)
+ @$(TARGET_AR) r temp.a $(VOBJ04)
+ @$(TARGET_AR) r temp.a $(VOBJ05)
+ @$(TARGET_AR) r temp.a $(VOBJ06)
+ @$(TARGET_AR) r temp.a $(VOBJ07)
+ @$(TARGET_AR) r temp.a $(VOBJ08)
+ @$(TARGET_AR) r temp.a $(VOBJ09)
+ @$(TARGET_AR) r temp.a $(VOBJ10)
+ @$(TARGET_AR) r temp.a $(VOBJ11)
+ @$(TARGET_AR) r temp.a $(VOBJ12)
+ @$(TARGET_AR) r temp.a $(VOBJ13)
+ @$(TARGET_AR) r temp.a $(VOBJ14)
+ @$(TARGET_AR) r temp.a $(VOBJ15)
+ @$(TARGET_AR) r temp.a $(VOBJ16)
+ @$(TARGET_AR) r temp.a $(VOBJ17)
+ @$(TARGET_AR) r temp.a $(VOBJ18)
+ @$(TARGET_AR) r temp.a $(VOBJ19)
+ @$(TARGET_AR) r temp.a $(VOBJ20)
+ @$(TARGET_AR) r temp.a $(VOBJ21)
+ @$(TARGET_AR) r temp.a $(VOBJ22)
+ @$(TARGET_AR) r temp.a $(VOBJ23)
+ @$(TARGET_AR) r temp.a $(VOBJ24)
+ @$(TARGET_AR) r temp.a $(VOBJ25)
+ @$(TARGET_AR) r temp.a $(VIDEO_OBJ)
+ @$(TARGET_AR) r temp.a $(SOBJ)
+ @$(TARGET_AR) r temp.a $(TILOBJ)
+ @$(TARGET_AR) r temp.a $(TILOBJ2)
+ifeq "$(ADD_LUA)" "Y"
+ @$(TARGET_AR) r temp.a $(LUAOBJ)
+endif
+ @$(TARGET_AR) r temp.a $(VVOBJ)
ifeq "$(ADD_CURSES)" "Y"
- @ar r temp.a $(CURSESOBJ)
+ @$(TARGET_AR) r temp.a $(CURSESOBJ)
endif
- $(TARGET_LINK) $(LFLAGS) -o$(GAME).exe temp.a $(PDCLIB) $(LIBRARIES) $(ZLIB)
+ $(TARGET_LINK) $(LFLAGS) -o$(GAME).exe temp.a $(PDCLIB) $(LUALIB) $(LIBRARIES) $(ZLIB)
$(TARGET_STUBEDIT) $(GAME).exe minstack=2048K
cp $(GAME).exe $(GAMEFILE)
rm $(GAME).exe
$(O)$(GAME).lnk: $(ALLOBJ)
- echo $(VOBJ01) > $(subst /,\,$@)
- echo $(VOBJ02) >> $(subst /,\,$@)
- echo $(VOBJ03) >> $(subst /,\,$@)
- echo $(VOBJ04) >> $(subst /,\,$@)
- echo $(VOBJ05) >> $(subst /,\,$@)
- echo $(VOBJ06) >> $(subst /,\,$@)
- echo $(VOBJ07) >> $(subst /,\,$@)
- echo $(VOBJ08) >> $(subst /,\,$@)
- echo $(VOBJ09) >> $(subst /,\,$@)
- echo $(VOBJ10) >> $(subst /,\,$@)
- echo $(VOBJ11) >> $(subst /,\,$@)
- echo $(VOBJ12) >> $(subst /,\,$@)
- echo $(VOBJ13) >> $(subst /,\,$@)
- echo $(VOBJ14) >> $(subst /,\,$@)
- echo $(VOBJ15) >> $(subst /,\,$@)
- echo $(VOBJ16) >> $(subst /,\,$@)
- echo $(VOBJ17) >> $(subst /,\,$@)
- echo $(VOBJ18) >> $(subst /,\,$@)
- echo $(VOBJ19) >> $(subst /,\,$@)
- echo $(VOBJ20) >> $(subst /,\,$@)
- echo $(VOBJ21) >> $(subst /,\,$@)
- echo $(VOBJ22) >> $(subst /,\,$@)
- echo $(VOBJ23) >> $(subst /,\,$@)
- echo $(VOBJ24) >> $(subst /,\,$@)
- echo $(VOBJ25) >> $(subst /,\,$@)
- echo $(SOBJ) >> $(subst /,\,$@)
- echo $(TILOBJ) >> $(subst /,\,$@)
- echo $(TILOBJ2) >> $(subst /,\,$@)
- echo $(VVOBJ) >> $(subst /,\,$@)
+ echo $(VOBJ01) > $@
+ echo $(VOBJ02) >> $@
+ echo $(VOBJ03) >> $@
+ echo $(VOBJ04) >> $@
+ echo $(VOBJ05) >> $@
+ echo $(VOBJ06) >> $@
+ echo $(VOBJ07) >> $@
+ echo $(VOBJ08) >> $@
+ echo $(VOBJ09) >> $@
+ echo $(VOBJ10) >> $@
+ echo $(VOBJ11) >> $@
+ echo $(VOBJ12) >> $@
+ echo $(VOBJ13) >> $@
+ echo $(VOBJ14) >> $@
+ echo $(VOBJ15) >> $@
+ echo $(VOBJ16) >> $@
+ echo $(VOBJ17) >> $@
+ echo $(VOBJ18) >> $@
+ echo $(VOBJ19) >> $@
+ echo $(VOBJ20) >> $@
+ echo $(VOBJ21) >> $@
+ echo $(VOBJ22) >> $@
+ echo $(VOBJ23) >> $@
+ echo $(VOBJ24) >> $@
+ echo $(VOBJ25) >> $@
+ echo $(SOBJ) >> $@
+ echo $(TILOBJ) >> $@
+ echo $(TILOBJ2) >> $@
+ifeq "$(ADD_LUA)" "Y"
+ echo $(LUAOBJ) >> $@
+endif
+ echo $(VVOBJ) >> $@
ifeq "$(ADD_CURSES)" "Y"
- echo $(CURSESOBJ) >> $(subst /,\,$@)
+ echo $(CURSESOBJ) >> $@
endif
#==========================================
#=========== SECONDARY TARGETS ============
#==========================================
#
-# The following include files depend on makedefs to be created.
-#
-# date.h should be remade every time any of the source or include
-# files is modified.
-#
-#
-#$(INCL)/date.h : $(U)makedefs
-# -$(U)makedefs -v
-#
-#$(INCL)/onames.h: $(U)makedefs
-# -$(U)makedefs -o
-#
-#$(INCL)/pm.h: $(U)makedefs
-# -$(U)makedefs -p
-#
-#monstr.c: $(U)makedefs
-# -$(U)makedefs -m
-#
-#$(INCL)/vis_tab.h: $(U)makedefs
-# -$(U)makedefs -z
-#
-#vis_tab.c: $(U)makedefs
-# -$(U)makedefs -z
-#
-#==========================================
-# Level Compiler Dependencies
-#==========================================
-#
-#$(U)lev_comp: $(SPLEVOBJS)
-# -rm -f temp.a
-# @ar ru temp.a $(SPLEVOBJS)
-# $(HOST_LINK) $(LFLAGS) -o$@ temp.a
-#
-#$(HOST_O)lev_yacc.o: $(HACK_H) $(SP_LEV_H) $(INCL)/lev_comp.h $(U)lev_yacc.c
-# $(HOST_CC) $(cflags) -o$@ $(U)lev_yacc.c
-#
-#$(HOST_O)lev_$(LEX).o: $(HACK_H) $(SP_LEV_H) $(INCL)/lev_comp.h \
-# $(U)lev_$(LEX).c
-# $(HOST_CC) $(cflags) -o$@ $(U)lev_$(LEX).c
-#
-#$(HOST_O)lev_main.o: $(HACK_H) $(INCL)/sp_lev.h $(INCL)/date.h $(U)lev_main.c
-#
-#$(U)lev_yacc.c: $(SSHR)/lev_yacc.c
-# @echo ---
-# @echo For now, we will copy the prebuilt
-# @echo lev_comp.c from $(SSHR) into $(U) and use that.
-# @cp $(SSHR)/lev_yacc.c $(U)lev_yacc.c
-# @echo.>>$(U)lev_yacc.c
-#
-#$(INCL)/lev_comp.h : $(SSHR)/lev_comp.h
-# @echo For now, we will copy the prebuilt lev_comp.h
-# @echo from $(SSHR) into $(INCL) and use that.
-# @cp $(SSHR)/lev_comp.h $@
-#$(U)lev_lex.c: $(SSHR)/lev_lex.c
-# @echo.>>$(INCL)/lev_comp.h
-# @echo For now, we will copy the prebuilt lev_lex.c
-# @echo from $(SSHR) into $(U) and use it.
-# @cp $(SSHR)/lev_lex.c $@
-# @echo.>>$@
-#
-#==========================================
-# Dungeon Dependencies
-#==========================================
-#
-#$(U)dgn_comp: $(DGNCOMPOBJS)
-# $(HOST_LINK) $(LFLAGS) -o$@ $(DGNCOMPOBJS)
-#
-#$(U)dgn_yacc.c: $(SSHR)/dgn_yacc.c
-# @echo ---
-# @echo For now, we will copy the prebuilt $(U)dgn_yacc.c and
-# @echo dgn_comp.h from $(SSHR) into $(U) and use that.
-# @cp $(SSHR)/dgn_yacc.c $(U)dgn_yacc.c
-# @echo.>>$(U)dgn_yacc.c
-#
-#$(INCL)/dgn_comp.h: $(SSHR)/dgn_comp.h
-# @echo ---
-# @echo For now, we will copy the prebuilt dgn_comp.h
-# @echo from $(SSHR) into $(INCL) and use that.
-# @cp $(SSHR)/dgn_comp.h $@
-# @echo.>>$(INCL)/dgn_comp.h
-#
-#$(U)dgn_$(LEX).c: $(SSHR)/dgn_lex.c $(INCL)/dgn_comp.h
-# @echo ---
-# @echo For now, we will copy the prebuilt dgn_lex.c
-# @echo from $(SSHR) into $(U) and use it.
-# @cp $(SSHR)/dgn_lex.c $@
-# @echo.>>$@
-
#==========================================
# Recover Utility
#==========================================
$(O)dat.tag: $(DAT)/nhdat
@echo dat done >$@
-#$(HOST_O)monst.o: $(CONFIG_H) $(PERMONST_H) $(INCL)/monsym.h \
-# $(INCL)/color.h monst.c
-# $(HOST_CC) $(cflags) -o$@ monst.c
+#=============================================================
+# Lua
+#=============================================================
-#$(HOST_O)objects.o: $(CONFIG_H) $(INCL)/obj.h $(INCL)/objclass.h \
-# $(INCL)/prop.h $(INCL)/color.h objects.c
-# $(HOST_CC) $(cflags) -o$@ objects.c
+lua.exe: $(O)lua.o $(LUALIB)
+ $(TARGET_LINK) $(LFLAGS) -o$@ $(O)lua.o $(LUALIB)
-#$(O)panic.o: $(CONFIG_H) $(U)panic.c
+luac.exe: $(O)luac.o $(LUALIB)
+ $(TARGET_LINK) $(LFLAGSU) -o$@ $(O)luac.o $(LUALIB)
-# make data.base an 8.3 filename to prevent an make warning
-#DATABASE = $(DAT)/data.bas
-#
-#
-#
-#$(DAT)/data: $(O)utility.tag $(DATABASE)
-# $(U)makedefs -d
-#
-#$(DAT)/rumors: $(O)utility.tag $(DAT)/rumors.tru $(DAT)/rumors.fal
-# $(U)makedefs -r
-#
-#$(DAT)/quest.dat: $(O)utility.tag $(DAT)/quest.txt
-# $(U)makedefs -q
-#
-#$(DAT)/oracles: $(O)utility.tag $(DAT)/oracles.txt
-# $(U)makedefs -h
-#
-#$(DAT)/bogusmon: $(O)utility.tag $(DAT)/bogusmon.txt
-# $(U)makedefs -s
-#
-#$(DAT)/engrave: $(O)utility.tag $(DAT)/engrave.txt
-# $(U)makedefs -s
-#
-#$(DAT)/epitaph: $(O)utility.tag $(DAT)/epitaph.txt
-# $(U)makedefs -s
-#
-#$(O)sp_lev.tag: $(O)utility.tag \
-# $(DAT)/bigroom.des $(DAT)/castle.des \
-# $(DAT)/endgame.des $(DAT)/gehennom.des $(DAT)/knox.des \
-# $(DAT)/medusa.des $(DAT)/oracle.des $(DAT)/tower.des \
-# $(DAT)/yendor.des $(DAT)/arch.des $(DAT)/barb.des \
-# $(DAT)/caveman.des $(DAT)/healer.des $(DAT)/knight.des \
-# $(DAT)/monk.des $(DAT)/priest.des $(DAT)/ranger.des \
-# $(DAT)/rogue.des $(DAT)/samurai.des $(DAT)/tourist.des \
-# $(DAT)/valkyrie.des $(DAT)/wizard.des
-# cd $(DAT)
-# $(U)lev_comp bigroom.des
-# $(U)lev_comp castle.des
-# $(U)lev_comp endgame.des
-# $(U)lev_comp gehennom.des
-# $(U)lev_comp knox.des
-# $(U)lev_comp mines.des
-# $(U)lev_comp medusa.des
-# $(U)lev_comp oracle.des
-# $(U)lev_comp sokoban.des
-# $(U)lev_comp tower.des
-# $(U)lev_comp yendor.des
-# $(U)lev_comp arch.des
-# $(U)lev_comp barb.des
-# $(U)lev_comp caveman.des
-# $(U)lev_comp healer.des
-# $(U)lev_comp knight.des
-# $(U)lev_comp monk.des
-# $(U)lev_comp priest.des
-# $(U)lev_comp ranger.des
-# $(U)lev_comp rogue.des
-# $(U)lev_comp samurai.des
-# $(U)lev_comp tourist.des
-# $(U)lev_comp valkyrie.des
-# $(U)lev_comp wizard.des
-# cd $(SRC)
-# echo sp_levs done > $@
-#
-#$(DAT)/dungeon: $(O)utility.tag $(DAT)/dungeon.def
-# $(U)makedefs -e
-# cd $(DAT)
-# $(U)dgn_comp dungeon.pdf
-# cd $(SRC)
+$(O)lua.o: $(LUASRC)/lua.c
+$(O)luac.o: $(LUASRC)/luac.c
#==========================================
-# DLB stuff
+# Lua lib
#==========================================
-#note that dir below assumes bin/dir from djgpp distribution
-#
-#$(DAT)/nhdat: $(U)dlb_main $(DAT)/data $(DAT)/rumors $(DAT)/dungeon \
-# $(DAT)/oracles $(DAT)/quest.dat $(O)sp_lev.tag \
-# $(DAT)/bogusmon $(DAT)/engrave $(DAT)/epitaph $(DAT)/tribute
-# echo dat done >$(O)dat.tag
-# cd $(DAT)
-# copy $(MSYS)/msdoshlp.txt .
-# @$(LS) data dungeon oracles options quest.dat rumors help hh >dlb.lst
-# @$(LS) cmdhelp history opthelp wizhelp license msdoshlp.txt >>dlb.lst
-# @$(LS) bogusmon engrave epitaph tribute >>dlb.lst
-# $(LS) $(subst /,\,*.lev) >>dlb.lst
-# $(U)dlb_main cvIf dlb.lst nhdat
-# cd $(SRC)
-#
-#$(U)dlb_main: $(DLBOBJS)
-# $(HOST_LINK) $(LFLAGS) -o$@ $(DLBOBJS)
-#
-#$(HOST_O)dlb_main.o: $(U)dlb_main.c $(INCL)/config.h $(DLB_H)
-# $(HOST_CC) $(cflags) -o$@ $(U)dlb_main.c
+$(LUALIB): $(LUALIBOBJS)
+ $(TARGET_AR) rcS $@ $(LUAOBJFILES1)
+ $(TARGET_AR) rcS $@ $(LUAOBJFILES2)
+ $(TARGET_AR) rcS $@ $(LUAOBJFILES3)
+ $(TARGET_AR) rcS $@ $(LUAOBJFILES4)
+
+#$(LUADLL): $(LUALIBOBJS)
+# $(TARGET_CC) -shared -Wl,--export-all-symbols \
+# -Wl,--add-stdcall-alias -o $@ $<
#==========================================
# Housekeeping.
spotless: clean
- if [ -f dgn_flex.c ]; then rm dgn_flex.c; fi;
- if [ -f dgn_lex.c ]; then rm dgn_lex.c; fi;
- if [ -f $(U)dgn_comp.exe ]; then rm $(U)dgn_comp.exe; fi;
if [ -f $(U)recover.exe ]; then rm $(U)recover.exe; fi;
if [ -f $(INCL)/vis_tab.h ]; then rm $(INCL)/vis_tab.h; fi;
if [ -f $(INCL)/onames.h ]; then rm $(INCL)/onames.h; fi;
if [ -f $(INCL)/pm.h ]; then rm $(INCL)/pm.h; fi;
if [ -f $(INCL)/date.h ]; then rm $(INCL)/date.h; fi;
- if [ -f $(INCL)/dgn_comp.h ]; then rm $(INCL)/dgn_comp.h; fi;
- if [ -f $(INCL)/lev_comp.h ]; then rm $(INCL)/lev_comp.h; fi;
# if [ -f $(SRC)/monstr.c ]; then rm $(SRC)/monstr.c; fi;
if [ -f $(SRC)/vis_tab.c ]; then rm $(SRC)/vis_tab.c; fi;
if [ -f $(SRC)/tile.c ]; then rm $(SRC)/tile.c; fi;
if [ -f $(DAT)/options ]; then rm $(DAT)/options; fi;
if [ -f $(DAT)/data ]; then rm $(DAT)/data; fi;
if [ -f $(DAT)/rumors ]; then rm $(DAT)/rumors; fi;
- if [ -f $(DAT)/dungeon.pdf ]; then rm $(DAT)/dungeon.pdf; fi;
- if [ -f $(DAT)/dungeon ]; then rm $(DAT)/dungeon; fi;
if [ -f $(DAT)/oracles ]; then rm $(DAT)/oracles; fi;
if [ -f $(DAT)/quest.dat ]; then rm $(DAT)/quest.dat; fi;
if [ -f $(DAT)/bogusmon ]; then rm $(DAT)/bogusmon; fi;
if [ -f $(DAT)/epitaph ]; then rm $(DAT)/epitaph; fi;
if [ -f $(DAT)/dlb.lst ]; then rm $(DAT)/dlb.lst; fi;
if [ -f $(TILE_BMP) ]; then rm $(TILE_BMP); fi;
+ if [ -f $(PLANAR_TIB) ]; then rm $(PLANAR_TIB); fi;
+ if [ -f $(OVERVIEW_TIB) ]; then rm $(OVERVIEW_TIB); fi;
if [ -f $(WSHR)/monthin.txt ]; then rm $(WSHR)/monthin.txt; fi;
if [ -f $(WSHR)/objthin.txt ]; then rm $(WSHR)/objthin.txt; fi;
if [ -f $(WSHR)/oththin.txt ]; then rm $(WSHR)/oththin.txt; fi;
- -rm $(DAT)/*.lev
#==========================================
# Create directory for holding object files
$(TARGET_CC) $(cflags) -o$@ ../win/X11/wintext.c
$(O)winval.o: ../win/X11/winval.c $(HACK_H) $(INCL)/winX.h
$(TARGET_CC) $(cflags) -o$@ ../win/X11/winval.c
-$(O)tile.o: tile.c $(HACK_H)
-$(HOST_O)tile.o: tile.c $(HACK_H)
+#$(O)tile.o: tile.c $(HACK_H)
+#$(HOST_O)tile.o: tile.c $(HACK_H)
$(O)gnaskstr.o: ../win/gnome/gnaskstr.c ../win/gnome/gnaskstr.h \
../win/gnome/gnmain.h
$(TARGET_CC) $(cflags) $(GNOMEINC) -o$@ ../win/gnome/gnaskstr.c
$(TARGET_CC) $(cflags) -o$@ ../win/gem/load_img.c
$(O)gr_rect.o: ../win/gem/gr_rect.c $(INCL)/gr_rect.h
$(TARGET_CC) $(cflags) -o$@ ../win/gem/gr_rect.c
-$(O)tile.o: tile.c $(HACK_H)
$(O)qt_win.o: ../win/Qt/qt_win.cpp $(HACK_H) $(INCL)/func_tab.h \
$(INCL)/dlb.h $(PATCHLEV_H) $(INCL)/tile2x11.h \
$(INCL)/qt_win.h $(INCL)/qt_clust.h $(INCL)/qt_kde0.h \
--- /dev/null
+#!/bin/sh
+if [ -z "$TRAVIS_BUIILD_DIR" ]; then
+ export DJGPP_TOP=$(pwd)/djgpp
+else
+ export DJGPP_TOP="$TRAVIS_BUILD_DIR/djgpp"
+fi
+export
+cd util
+if [ ! -d ../djgpp/i586-pc-msdosdjgpp ]; then
+ if [ "$(uname)" = "Darwin" ]; then
+ #Mac
+ wget --no-hsts https://github.com/andrewwutw/build-djgpp/releases/download/v2.9/djgpp-osx-gcc550.tar.bz2
+ elif [ "$(expr substr $(uname -s) 1 5)" = "Linux" ]; then
+ #Linux
+ wget --no-hsts https://github.com/andrewwutw/build-djgpp/releases/download/v2.9/djgpp-linux64-gcc550.tar.bz2
+ elif [ "$(expr substr $(uname -s) 1 10)" = "MINGW32_NT" ]; then
+ #mingw
+ wget --no-hsts https://github.com/andrewwutw/build-djgpp/releases/download/v2.9/djgpp-mingw-gcc550-standalone.zip
+ fi
+ if [ ! -d djgpp/i586-pc-msdosdjgpp ]; then
+ tar xjf util/djgpp-linux64-gcc550.tar.bz2
+ fi
+fi
+cd ../
+# PDCurses
+if [ ! -d "../pdcurses" ]; then
+ echo "Getting ../pdcurses from https://github.com/wmcbrine/PDCurses.git"
+ git clone --depth 1 https://github.com/wmcbrine/PDCurses.git ../pdcurses
+fi
+cd djgpp
+# DOS-extender for use with djgpp
+if [ ! -d cwsdpmi ]; then
+ wget --no-hsts http://sandmann.dotster.com/cwsdpmi/csdpmi7b.zip
+ mkdir -p cwsdpmi
+ cd cwsdpmi
+ unzip ../csdpmi7b.zip
+ cd ../
+ rm csdpmi7b.zip
+fi
+cd ../src
+pwd
+mkdir -p ../binary
+cp ../dat/data.base ../dat/data.bas
+cp ../include/patchlevel.h ../include/patchlev.h
+cp ../doc/Guidebook.txt ../doc/guidebk.txt
+cp ../sys/share/posixregex.c ../sys/share/posixreg.c
+cp ../sys/msdos/Makefile1.cross ../src/Makefile1
+cp ../sys/msdos/Makefile2.cross ../src/Makefile2
+make -f Makefile1
+cat ../include/date.h
+export GCC_EXEC_PREFIX=$DJGPP_TOP/lib/gcc/
+export
+pwd
+make -f Makefile2
+unset GCC_EXEC_PREFIX
+if [ -f $TRAVIS_BUILD_DIR/djgpp/cwsdpmi/bin/cwsdpmi.exe ]; then
+ cp $TRAVIS_BUILD_DIR/djgpp/cwsdpmi/bin/cwsdpmi.exe ../binary/CWSDPMI.EXE;
+fi
+ls -l ../binary
+
#
LUATOP=..\..\lua-5.3.5
#
+#
+#==============================================================================
+#
+#TEST_CROSSCOMPILE=Y
+#OPTIONS_AT_RUNTIME=Y
+#
#==============================================================================
#======================== End of Modification Section =========================
#==============================================================================
TTYOBJ = $(O)topl.o $(O)getline.o $(O)wintty.o
+!IFDEF TEST_CROSSCOMPILE
+CROSSDEFINE_TARGET = -DCROSSCOMPILE_TARGET
+CROSSDEFINE_HOST = -DCROSSCOMPILE_HOST
+CROSSCOMPILE = -DCROSSCOMPILE
+CROSSDEFINES = $(CROSSCOMPILE) $(CROSSDEFINE_HOST) $(CROSSDEFINE_TARGET)
+OPTIONS_AT_RUNTIME=Y
+!ELSE
+CROSSDEFINE_TARGET =
+CROSSDEFINE_HOST =
+CROSSCOMPILE =
+CROSSDEFINES =
+CROSSDEFINES =
+!ENDIF
+
+!IF "$(OPTIONS_AT_RUNTIME)" == "Y"
+MDLIB = $(O)mdlib.o
+RUNTIMEOPTDEF=-DOPTIONS_AT_RUNTIME
+!ELSE
+MDLIB =
+RUNTIMEOPTDEF=
+!ENDIF
+
!IFNDEF ADD_CURSES
CURSESOBJ=
!ELSE
$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
$(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
$(VOBJ26) $(VOBJ27) $(VOBJ28) $(VOBJ29) $(VOBJ30) \
- $(REGEX) $(CURSESOBJ)
+ $(REGEX) $(CURSESOBJ) $(MDLIB)
GUIOBJ = $(O)mhaskyn.o $(O)mhdlg.o \
$(O)mhfont.o $(O)mhinput.o $(O)mhmain.o $(O)mhmap.o \
ccommon= -c -nologo -D"_CONSOLE" -D"_CRT_NONSTDC_NO_DEPRECATE" -D"_CRT_SECURE_NO_DEPRECATE" \
-D"_LIB" -D"_SCL_SECURE_NO_DEPRECATE" -D"_VC80_UPGRADE=0x0600" -D"DLB" -D"_MBCS" \
-DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -D"NDEBUG" -D"YY_NO_UNISTD_H" \
- -DHAS_STDINT_H -DHAS_INLINE $(CURSESDEF) \
+ -DHAS_STDINT_H -DHAS_INLINE $(CURSESDEF) $(RUNTIMEOPTDEF) \
-EHsc -fp:precise -Gd -GF -GS -Gy \
$(CL_RECENT) -WX- -Zc:forScope -Zc:wchar_t -Zi
cdebug= -analyze- -D"_DEBUG" -MTd -RTC1 -Od
#==========================================
.c{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(SRC)}.c{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#==========================================
# Rules for files in sys\share
#==========================================
{$(SSYS)}.c{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(SSYS)}.cpp{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) /EHsc -Fo$@ $<
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) /EHsc -Fo$@ $<
#==========================================
# Rules for files in sys\winnt
#==========================================
{$(UTIL)}.c{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#==========================================
# Rules for files in win\share
#==========================================
{$(WSHR)}.c{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(WSHR)}.h{$(INCL)}.h:
@copy $< $@
#==========================================
{$(TTY)}.c{$(OBJ)}.o:
- $(cc) $(cflagsBuild) -Fo$@ $<
+ $(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#==========================================
#==========================================
{$(MSWIN)}.c{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) -Fo$@ $<
+ $(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#==========================================
# Rules for files in win\curses
#==========================================
{$(WCURSES)}.c{$(OBJ)}.o:
- @$(cc) -DPDC_NCMOUSE $(PDCINCL) $(cflagsBuild) -Fo$@ $<
+ @$(cc) -DPDC_NCMOUSE $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#{$(WCURSES)}.txt{$(DAT)}.txt:
# @copy $< $@
#==========================================
{$(PDCURSES_TOP)}.c{$(OBJ)}.o:
- @$(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(PDCSRC)}.c{$(OBJ)}.o:
- @$(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(PDCWINCON)}.c{$(OBJ)}.o:
- @$(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#==========================================
# Rules for LUA files
#==========================================
{$(LUASRC)}.c{$(OBJ)}.o:
- @$(cc) $(cflagsBuild) -Fo$@ $<
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#==========================================
#=============== TARGETS ==================
$(link) $(lflagsBuild) -out:$@ $(O)nhsizes.o $(O)panic.o $(O)alloc.o
$(O)nhsizes.o: $(CONFIG_H) nhsizes.c
- @$(cc) $(cflagsBuild) -Fo$@ nhsizes.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ nhsizes.c
$(U)makedefs.exe: $(MAKEOBJS)
@echo Linking $(@:\=/)
$(U)makedefs.c
@if not exist $(OBJ)\*.* echo creating directory $(OBJ:\=/)
@if not exist $(OBJ)\*.* mkdir $(OBJ)
- @$(cc) -DENUM_PM $(cflagsBuild) -Fo$@ $(U)makedefs.c
+ $(cc) -DENUM_PM $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(U)makedefs.c
+# $(cc) -DENUM_PM $(cflagsBuild) $(CROSSDEFINES) /EP -Fo$@ $(U)makedefs.c >makedefs.c.preprocessed
#
# date.h should be remade every time any of the source or include
@$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)uudecode.o
$(O)uudecode.o: $(SSYS)\uudecode.c
- @$(cc) $(cflagsBuild) /D_CRT_SECURE_NO_DEPRECATE -Fo$@ $(SSYS)\uudecode.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) /D_CRT_SECURE_NO_DEPRECATE -Fo$@ $(SSYS)\uudecode.c
$(MSWSYS)\NetHack.ico : $(U)uudecode.exe $(MSWSYS)\nhico.uu
chdir $(MSWSYS)
<<
$(O)dlb.o: $(O)dlb_main.o $(O)alloc.o $(O)panic.o $(INCL)\dlb.h
- @$(cc) $(cflagsBuild) /Fo$@ $(SRC)\dlb.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) /Fo$@ $(SRC)\dlb.c
$(O)dlb_main.o: $(UTIL)\dlb_main.c $(INCL)\config.h $(INCL)\dlb.h
- @$(cc) $(cflagsBuild) /Fo$@ $(UTIL)\dlb_main.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) /Fo$@ $(UTIL)\dlb_main.c
$(DAT)\porthelp: $(MSWSYS)\porthelp
@copy $(MSWSYS)\porthelp $@ >nul
$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(RECOVOBJS)
$(O)recover.o: $(CONFIG_H) $(U)recover.c $(MSWSYS)\win32api.h
- @$(cc) $(cflagsBuild) -Fo$@ $(U)recover.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(U)recover.c
#==========================================
# Tile Mapping
@$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)tilemap.o
$(O)tilemap.o: $(WSHR)\tilemap.c $(HACK_H)
- @$(cc) $(cflagsBuild) -Fo$@ $(WSHR)\tilemap.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(WSHR)\tilemap.c
$(O)tiletx32.o: $(WSHR)\tilemap.c $(HACK_H)
- @$(cc) $(cflagsBuild) /DTILETEXT /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tilemap.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) /DTILETEXT /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tilemap.c
$(O)tiletxt.o: $(WSHR)\tilemap.c $(HACK_H)
- @$(cc) $(cflagsBuild) /DTILETEXT -Fo$@ $(WSHR)\tilemap.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) /DTILETEXT -Fo$@ $(WSHR)\tilemap.c
$(O)gifread.o: $(WSHR)\gifread.c $(CONFIG_H) $(TILE_H)
- @$(cc) $(cflagsBuild) -I$(WSHR) -Fo$@ $(WSHR)\gifread.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) -Fo$@ $(WSHR)\gifread.c
$(O)gifrd32.o: $(WSHR)\gifread.c $(CONFIG_H) $(TILE_H)
- @$(cc) $(cflagsBuild) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\gifread.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\gifread.c
$(O)ppmwrite.o: $(WSHR)\ppmwrite.c $(CONFIG_H) $(TILE_H)
- @$(cc) $(cflagsBuild) -I$(WSHR) -Fo$@ $(WSHR)\ppmwrite.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) -Fo$@ $(WSHR)\ppmwrite.c
$(O)tiletext.o: $(WSHR)\tiletext.c $(CONFIG_H) $(TILE_H)
- @$(cc) $(cflagsBuild) -I$(WSHR) -Fo$@ $(WSHR)\tiletext.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) -Fo$@ $(WSHR)\tiletext.c
$(O)tilete32.o: $(WSHR)\tiletext.c $(CONFIG_H) $(TILE_H)
- @$(cc) $(cflagsBuild) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tiletext.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) /DTILE_X=32 /DTILE_Y=32 -Fo$@ $(WSHR)\tiletext.c
#==========================================
# Optional Tile Utilities
<<
$(O)tile2bmp.o: $(WSHR)\tile2bmp.c $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h
- @$(cc) $(cflagsBuild) -I$(WSHR) /DPACKED_FILE /Fo$@ $(WSHR)\tile2bmp.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) /DPACKED_FILE /Fo$@ $(WSHR)\tile2bmp.c
$(O)til2bm32.o: $(WSHR)\tile2bmp.c $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h
- @$(cc) $(cflagsBuild) -I$(WSHR) /DPACKED_FILE /DTILE_X=32 /DTILE_Y=32 /Fo$@ $(WSHR)\tile2bmp.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) /DPACKED_FILE /DTILE_X=32 /DTILE_Y=32 /Fo$@ $(WSHR)\tile2bmp.c
#===============================================================================
# PDCurses
lib -nologo /out:$@ $(PDCLIBOBJS) $(PDCOBJS)
$(O)pdcscrn.o : $(PDCURSES_HEADERS) $(PDCWINCON)\pdcscrn.c $(MSWSYS)\stub-pdcscrn.c
- $(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $(MSWSYS)\stub-pdcscrn.c
+ $(cc) $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(MSWSYS)\stub-pdcscrn.c
#===============================================================================
# LUA
$(O)lua.o: $(LUASRC)\lua.c
$(O)luac.o: $(LUASRC)\luac.c
$(O)lapi.o: $(LUASRC)\lapi.c
- @$(cc) $(cflagsBuild) -wd4244 -Fo$@ $(LUASRC)\lapi.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -wd4244 -Fo$@ $(LUASRC)\lapi.c
+
+#===============================================================================
+# CROSSCOMPILE
+#===============================================================================
+
+# Under a cross-compile, some of the values stored statically into
+# text files cannot be trusted as being representative of the
+# settings and features used on the build of the target binaries.
+#
+# We move some of that stuff into the game run-time by separating
+# out the functions into src\mdlib.c to get some of the required
+# functionality at game runtime instead of from a previously written
+# data file.
+#
+
+$(O)mdlib.o: $(SRC)\mdlib.c
+ $(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSDEFINE_TARGET) -DMAKEDEFS_MDOBJ -Fo$@ $(SRC)\mdlib.c
+# $(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSDEFINE_TARGET) -DMAKEDEFS_MDOBJ /EP -Fo$@ $(SRC)\mdlib.c >mdlib.c.preprocessed
#===============================================================================
# Housekeeping
#
$(O)nttty.o: $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h $(MSWSYS)\nttty.c
- @$(cc) $(cflagsBuild) -I$(WSHR) -Fo$@ $(MSWSYS)\nttty.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(WSHR) -Fo$@ $(MSWSYS)\nttty.c
$(O)winnt.o: $(HACK_H) $(MSWSYS)\win32api.h $(MSWSYS)\winnt.c
- @$(cc) $(cflagsBuild) -I$(MSWSYS) -I$(MSWIN) -Fo$@ $(MSWSYS)\win10.c
- @$(cc) $(cflagsBuild) -Fo$@ $(MSWSYS)\winnt.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(MSWSYS) -I$(MSWIN) -Fo$@ $(MSWSYS)\win10.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(MSWSYS)\winnt.c
$(O)ntsound.o: $(HACK_H) $(MSWSYS)\ntsound.c
- @$(cc) $(cflagsBuild) -Fo$@ $(MSWSYS)\ntsound.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(MSWSYS)\ntsound.c
+$(O)windmain.o: $(MSWSYS)\windmain.c $(HACK_H)
#if you aren't linking in the full gui then
#include the following stub for proper linkage.
$(O)guistub.o: $(HACK_H) $(MSWSYS)\stubs.c
- @$(cc) $(cflagsBuild) -DGUISTUB -Fo$@ $(MSWSYS)\stubs.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -DGUISTUB -Fo$@ $(MSWSYS)\stubs.c
#
# WIN32 dependencies
#
$(O)NetHackW.o: $(HACK_H) $(MSWIN)\NetHackW.c
- @$(cc) $(cflagsBuild) -I$(MSWSYS) -I$(MSWIN) -Fo$@ $(MSWIN)\NetHackW.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(MSWSYS) -I$(MSWIN) -Fo$@ $(MSWIN)\NetHackW.c
#if you aren't linking in the full tty then
#include the following stub for proper linkage.
$(O)ttystub.o: $(HACK_H) $(MSWSYS)\stubs.c
- @$(cc) $(cflagsBuild) -DTTYSTUB -Fo$@ $(MSWSYS)\stubs.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -DTTYSTUB -Fo$@ $(MSWSYS)\stubs.c
#
#============================================
$(O)sfbase.o: $(HACK_H) $(INCL)\sfproto.h $(INCL)\sfprocs.h \
$(SRC)\sfbase.c
- @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfbase.c
+# @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfbase.c
$(O)sfdata.o: $(HACK_H) $(INCL)\sfprocs.h $(SRC)\sfdata.c
- @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfdata.c
+# @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfdata.c
$(O)sfstruct.o: $(HACK_H) $(SRC)\sfstruct.c
- @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfstruct.c
+# @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfstruct.c
$(O)sfascii.o: $(HACK_H) $(INCL)\sfprocs.h $(SRC)\sfascii.c
- @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfascii.c
+# @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sfascii.c
$(O)sflendian.o: $(HACK_H) $(INCL)\sfprocs.h $(SRC)\sflendian.c
- @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sflendian.c
+# @$(cc) $(cflagsBuild) -Fo$@ $(SRC)\sflendian.c
$(SRC)\sfdata.c: $(U)readtags.exe $(U)nethack.tags
$(U)readtags.exe
@$(link) $(lflagsBuild) -out:$@ $(O)readtags.o
$(O)readtags.o: $(U)readtags.c $(U)nethack.tags $(CONFIG_H) $(PATCHLEVEL_H)
- @$(cc) $(cflagsBuild) $(TEMPL) -Fo$@ $(U)readtags.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) $(TEMPL) -Fo$@ $(U)readtags.c
#
#tested only with exuberant ctags from http://ctags.sourceforge.net
#
$(O)panic.o: $(U)panic.c $(CONFIG_H)
- @$(cc) $(cflagsBuild) -Fo$@ $(U)panic.c
+ @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(U)panic.c
#
# sys/share dependencies
#
(O)cppregex.o: $(O)cppregex.cpp $(HACK_H)
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\cppregex.cpp
+ @$(CC) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ ..\sys\share\cppregex.cpp
#
# curses window port dependencies
#
$(O)tos.o: ..\sys\atari\tos.c $(HACK_H) $(INCL)\tcap.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\atari\tos.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\atari\tos.c
$(O)pctty.o: ..\sys\share\pctty.c $(HACK_H)
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\pctty.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\pctty.c
$(O)isaac64.o: ..\src\isaac64.c $(HACK_H) $(INCL)\isaac64.h $(INCL)\integer.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\src\isaac64.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\src\isaac64.c
$(O)random.o: ..\sys\share\random.c $(HACK_H)
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\random.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\random.c
$(O)ioctl.o: ..\sys\share\ioctl.c $(HACK_H) $(INCL)\tcap.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\ioctl.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\ioctl.c
$(O)unixtty.o: ..\sys\share\unixtty.c $(HACK_H)
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\unixtty.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\unixtty.c
$(O)unixmain.o: ..\sys\unix\unixmain.c $(HACK_H) $(INCL)\dlb.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\unix\unixmain.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\unix\unixmain.c
$(O)unixunix.o: ..\sys\unix\unixunix.c $(HACK_H)
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\unix\unixunix.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\unix\unixunix.c
$(O)unixres.o: ..\sys\unix\unixres.c $(CONFIG_H)
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\unix\unixres.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\unix\unixres.c
$(O)bemain.o: ..\sys\be\bemain.c $(HACK_H) $(INCL)\dlb.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\sys\be\bemain.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\sys\be\bemain.c
$(O)getline.o: ..\win\tty\getline.c $(HACK_H) $(INCL)\func_tab.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\getline.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\getline.c
$(O)termcap.o: ..\win\tty\termcap.c $(HACK_H) $(INCL)\tcap.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\termcap.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\termcap.c
$(O)topl.o: ..\win\tty\topl.c $(HACK_H) $(INCL)\tcap.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\topl.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\topl.c
$(O)wintty.o: ..\win\tty\wintty.c $(HACK_H) $(INCL)\dlb.h $(INCL)\tcap.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\wintty.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\tty\wintty.c
#$(O)Window.o: ..\win\X11\Window.c $(INCL)\xwindowp.h $(INCL)\xwindow.h \
# $(CONFIG_H)
# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\Window.c
$(O)dialogs.o: ..\win\X11\dialogs.c $(CONFIG_H)
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\dialogs.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\dialogs.c
$(O)winX.o: ..\win\X11\winX.c $(HACK_H) $(INCL)\winX.h $(INCL)\dlb.h \
..\win\X11\nh72icon ..\win\X11\nh56icon ..\win\X11\nh32icon
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winX.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winX.c
$(O)winmap.o: ..\win\X11\winmap.c $(INCL)\xwindow.h $(HACK_H) $(INCL)\dlb.h \
$(INCL)\winX.h $(INCL)\tile2x11.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmap.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmap.c
$(O)winmenu.o: ..\win\X11\winmenu.c $(HACK_H) $(INCL)\winX.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmenu.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmenu.c
$(O)winmesg.o: ..\win\X11\winmesg.c $(INCL)\xwindow.h $(HACK_H) $(INCL)\winX.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmesg.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmesg.c
$(O)winmisc.o: ..\win\X11\winmisc.c $(HACK_H) $(INCL)\func_tab.h \
$(INCL)\winX.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmisc.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winmisc.c
$(O)winstat.o: ..\win\X11\winstat.c $(HACK_H) $(INCL)\winX.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winstat.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winstat.c
$(O)wintext.o: ..\win\X11\wintext.c $(HACK_H) $(INCL)\winX.h $(INCL)\xwindow.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\wintext.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\wintext.c
$(O)winval.o: ..\win\X11\winval.c $(HACK_H) $(INCL)\winX.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winval.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winval.c
$(O)tile.o: $(SRC)\tile.c $(HACK_H)
$(O)gnaskstr.o: ..\win\gnome\gnaskstr.c ..\win\gnome\gnaskstr.h \
..\win\gnome\gnmain.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnaskstr.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnaskstr.c
$(O)gnbind.o: ..\win\gnome\gnbind.c ..\win\gnome\gnbind.h ..\win\gnome\gnmain.h \
..\win\gnome\gnmenu.h ..\win\gnome\gnaskstr.h \
..\win\gnome\gnyesno.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnbind.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnbind.c
$(O)gnglyph.o: ..\win\gnome\gnglyph.c ..\win\gnome\gnglyph.h $(INCL)\tile2x11.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnglyph.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnglyph.c
$(O)gnmain.o: ..\win\gnome\gnmain.c ..\win\gnome\gnmain.h ..\win\gnome\gnsignal.h \
..\win\gnome\gnbind.h ..\win\gnome\gnopts.h $(HACK_H) \
$(INCL)\date.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmain.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmain.c
$(O)gnmap.o: ..\win\gnome\gnmap.c ..\win\gnome\gnmap.h ..\win\gnome\gnglyph.h \
..\win\gnome\gnsignal.h $(HACK_H)
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmap.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmap.c
$(O)gnmenu.o: ..\win\gnome\gnmenu.c ..\win\gnome\gnmenu.h ..\win\gnome\gnmain.h \
..\win\gnome\gnbind.h $(INCL)\func_tab.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmenu.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmenu.c
$(O)gnmesg.o: ..\win\gnome\gnmesg.c ..\win\gnome\gnmesg.h ..\win\gnome\gnsignal.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmesg.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnmesg.c
$(O)gnopts.o: ..\win\gnome\gnopts.c ..\win\gnome\gnopts.h ..\win\gnome\gnglyph.h \
..\win\gnome\gnmain.h ..\win\gnome\gnmap.h $(HACK_H)
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnopts.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnopts.c
$(O)gnplayer.o: ..\win\gnome\gnplayer.c ..\win\gnome\gnplayer.h \
..\win\gnome\gnmain.h $(HACK_H)
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnplayer.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnplayer.c
$(O)gnsignal.o: ..\win\gnome\gnsignal.c ..\win\gnome\gnsignal.h \
..\win\gnome\gnmain.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnsignal.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnsignal.c
$(O)gnstatus.o: ..\win\gnome\gnstatus.c ..\win\gnome\gnstatus.h \
..\win\gnome\gnsignal.h ..\win\gnome\gn_xpms.h \
..\win\gnome\gnomeprv.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnstatus.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnstatus.c
$(O)gntext.o: ..\win\gnome\gntext.c ..\win\gnome\gntext.h ..\win\gnome\gnmain.h \
..\win\gnome\gn_rip.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gntext.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gntext.c
$(O)gnyesno.o: ..\win\gnome\gnyesno.c ..\win\gnome\gnbind.h ..\win\gnome\gnyesno.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnyesno.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnyesno.c
$(O)gnworn.o: ..\win\gnome\gnworn.c ..\win\gnome\gnworn.h ..\win\gnome\gnglyph.h \
..\win\gnome\gnsignal.h ..\win\gnome\gnomeprv.h
- @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnworn.c
+# @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnworn.c
$(O)wingem.o: ..\win\gem\wingem.c $(HACK_H) $(INCL)\func_tab.h $(INCL)\dlb.h \
$(INCL)\patchlevel.h $(INCL)\wingem.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\wingem.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\wingem.c
$(O)wingem1.o: ..\win\gem\wingem1.c $(INCL)\gem_rsc.h $(INCL)\load_img.h \
$(INCL)\gr_rect.h $(INCL)\wintype.h $(INCL)\wingem.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\wingem1.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\wingem1.c
$(O)load_img.o: ..\win\gem\load_img.c $(INCL)\load_img.h
@$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\load_img.c
$(O)gr_rect.o: ..\win\gem\gr_rect.c $(INCL)\gr_rect.h
- @$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\gr_rect.c
+# @$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\gr_rect.c
$(O)tile.o: $(SRC)\tile.c $(HACK_H)
$(O)qt_win.o: ..\win\Qt\qt_win.cpp $(HACK_H) $(INCL)\func_tab.h \
$(INCL)\dlb.h $(INCL)\patchlevel.h $(INCL)\tile2x11.h \
$(INCL)\qt_win.h $(INCL)\qt_clust.h $(INCL)\qt_kde0.h \
$(INCL)\qt_xpms.h qt_win.moc qt_kde0.moc qttableview.moc
- $(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qt_win.cpp
+# $(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qt_win.cpp
$(O)qt_clust.o: ..\win\Qt\qt_clust.cpp $(INCL)\qt_clust.h
- $(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qt_clust.cpp
+# $(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qt_clust.cpp
$(O)qttableview.o: ..\win\Qt\qttableview.cpp $(INCL)\qttableview.h
- $(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qttableview.cpp
+# $(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qttableview.cpp
$(O)wc_chainin.o: ..\win\chain\wc_chainin.c $(HACK_H)
- @$(cc) $(cflagsBuild) -Fo$@ ..\win\chain\wc_chainin.c
+# @$(cc) $(cflagsBuild) -Fo$@ ..\win\chain\wc_chainin.c
$(O)wc_chainout.o: ..\win\chain\wc_chainout.c $(HACK_H)
- @$(cc) $(cflagsBuild) -Fo$@ ..\win\chain\wc_chainout.c
+# @$(cc) $(cflagsBuild) -Fo$@ ..\win\chain\wc_chainout.c
$(O)wc_trace.o: ..\win\chain\wc_trace.c $(HACK_H) $(INCL)\func_tab.h
- @$(cc) $(cflagsBuild) -Fo$@ ..\win\chain\wc_trace.c
+# @$(cc) $(cflagsBuild) -Fo$@ ..\win\chain\wc_trace.c
$(O)vis_tab.o: vis_tab.c $(CONFIG_H) $(INCL)\vis_tab.h
$(O)allmain.o: allmain.c $(HACK_H)
$(O)alloc.o: alloc.c $(CONFIG_H)
$(O)vault.o: vault.c $(HACK_H)
$(O)version.o: version.c $(HACK_H) $(INCL)\dlb.h $(INCL)\date.h \
$(INCL)\patchlevel.h
+ @$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSDEFINE_TARGET) -Fo$@ version.c
$(O)vision.o: vision.c $(HACK_H) $(INCL)\vis_tab.h
$(O)weapon.o: weapon.c $(HACK_H)
$(O)were.o: were.c $(HACK_H)
$(O)wield.o: wield.c $(HACK_H)
-$(O)windmain.o: $(MSWSYS)\windmain.c $(HACK_H)
#$(O)windows.o: windows.c $(HACK_H) $(INCL)\wingem.h $(INCL)\winGnome.h
$(O)wizard.o: wizard.c $(HACK_H) $(INCL)\qtext.h
$(O)worm.o: worm.c $(HACK_H) $(INCL)\lev.h
#endif
#if defined(UNIX) && !defined(LINT) && !defined(GCC_WARN)
-static const char SCCS_Id[] UNUSED = "@(#)makedefs.c\t3.6\t2019/05/07";
+static const char SCCS_Id[] UNUSED = "@(#)makedefs.c\t3.7\t2019/11/19";
#endif
/* names of files to be generated */
void NDECL(do_objs);
void NDECL(do_data);
void NDECL(do_dungeon);
-void NDECL(do_date);
void NDECL(do_options);
void NDECL(do_monstr);
void NDECL(do_permonst);
void NDECL(do_rumors);
void NDECL(do_oracles);
void NDECL(do_vision);
+void NDECL(do_date);
extern void NDECL(monst_globals_init); /* monst.c */
extern void NDECL(objects_globals_init); /* objects.c */
static void FDECL(delete_file, (const char *template, const char *));
static FILE *FDECL(getfp, (const char *, const char *, const char *));
static void FDECL(do_ext_makedefs, (int, char **));
-
-static void NDECL(make_version);
-static char *FDECL(version_string, (char *, const char *));
-static char *FDECL(version_id_string, (char *, const char *));
-static char *FDECL(bannerc_string, (char *, const char *));
static char *FDECL(xcrypt, (const char *));
static unsigned long FDECL(read_rumors_file,
(const char *, int *, long *, unsigned long));
-static boolean FDECL(get_gitinfo, (char *, char *));
static void FDECL(do_rnd_access_file, (const char *));
static boolean FDECL(d_filter, (char *));
static boolean FDECL(h_filter, (char *));
-static void NDECL(build_savebones_compat_string);
-static void NDECL(windowing_sanity);
static void FDECL(opt_out_words, (char *, int *));
-
static boolean FDECL(qt_comment, (char *));
static boolean FDECL(qt_control, (char *));
static int FDECL(get_hdr, (char *));
static char *FDECL(fgetline, (FILE*));
static char *FDECL(tmpdup, (const char *));
static char *FDECL(limit, (char *, int));
-static char *FDECL(eos, (char *));
-static int FDECL(case_insensitive_comp, (const char *, const char *));
+static void NDECL(windowing_sanity);
+static boolean FDECL(get_gitinfo, (char *, char *));
/* input, output, tmp */
static FILE *ifp, *ofp, *tfp;
extern unsigned _stklen = STKSIZ;
#endif
+/*
+ * Some of the routines in this source file were moved into .../src/mdlib
+ * to facilitate the use of a cross-compiler generation of some of the
+ * information for the target environment during the game compile portion
+ * under the cross-compiler and/or at runtime in some cases.
+ */
+/* These actually reside in src/mdlib.c */
+static int FDECL(case_insensitive_comp, (const char *, const char *));
+static void NDECL(make_version);
+static char *FDECL(version_id_string, (char *, const char *));
+static char *FDECL(version_string, (char *, const char *));
+static char *FDECL(eos, (char *));
+/* REPRODUCIBLE_BUILD will change this to TRUE */
+static boolean date_via_env = FALSE;
+#include "../src/mdlib.c"
+
#ifdef MACsansMPWTOOL
int
main(void)
/*NOTREACHED*/
return 0;
}
-
#endif
void
exit(EXIT_FAILURE);
}
-/*
- * Use this to explicitly mask out features during version checks.
- *
- * ZEROCOMP, RLECOMP, and ZLIB_COMP describe compression features
- * that the port/plaform which wrote the savefile was capable of
- * dealing with. Don't reject a savefile just because the port
- * reading the savefile doesn't match on all/some of them.
- * The actual compression features used to produce the savefile are
- * recorded in the savefile_info structure immediately following the
- * version_info, and that is what needs to be checked against the
- * feature set of the port that is reading the savefile back in.
- * That check is done in src/restore.c now.
- *
- */
-#define IGNORED_FEATURES \
- (0L | (1L << 19) /* SCORE_ON_BOTL */ \
- | (1L << 27) /* ZEROCOMP */ \
- | (1L << 28) /* RLECOMP */ \
- )
-
-static void
-make_version()
-{
- register int i;
-
- /*
- * integer version number
- */
- version.incarnation = ((unsigned long) VERSION_MAJOR << 24)
- | ((unsigned long) VERSION_MINOR << 16)
- | ((unsigned long) PATCHLEVEL << 8)
- | ((unsigned long) EDITLEVEL);
- /*
- * encoded feature list
- * Note: if any of these magic numbers are changed or reassigned,
- * EDITLEVEL in patchlevel.h should be incremented at the same time.
- * The actual values have no special meaning, and the category
- * groupings are just for convenience.
- */
- version.feature_set = (unsigned long) (0L
-/* levels and/or topology (0..4) */
-/* monsters (5..9) */
-#ifdef MAIL_STRUCTURES
- | (1L << 6)
-#endif
-/* objects (10..14) */
-/* flag bits and/or other global variables (15..26) */
-#ifdef TEXTCOLOR
- | (1L << 17)
-#endif
-#ifdef INSURANCE
- | (1L << 18)
-#endif
-#ifdef SCORE_ON_BOTL
- | (1L << 19)
-#endif
-/* data format (27..31)
- * External compression methods such as COMPRESS and ZLIB_COMP
- * do not affect the contents and are thus excluded from here */
-#ifdef ZEROCOMP
- | (1L << 27)
-#endif
-#ifdef RLECOMP
- | (1L << 28)
-#endif
- );
- /*
- * Value used for object & monster sanity check.
- * (NROFARTIFACTS<<24) | (NUM_OBJECTS<<12) | (NUMMONS<<0)
- */
- for (i = 1; artifact_names[i]; i++)
- continue;
- version.entity_count = (unsigned long) (i - 1);
- for (i = 1; objects[i].oc_class != ILLOBJ_CLASS; i++)
- continue;
- version.entity_count = (version.entity_count << 12) | (unsigned long) i;
- for (i = 0; mons[i].mlet; i++)
- continue;
- version.entity_count = (version.entity_count << 12) | (unsigned long) i;
- /*
- * Value used for compiler (word size/field alignment/padding) check.
- */
- version.struct_sizes1 =
- (((unsigned long) sizeof(struct context_info) << 24)
- | ((unsigned long) sizeof(struct obj) << 17)
- | ((unsigned long) sizeof(struct monst) << 10)
- | ((unsigned long) sizeof(struct you)));
- version.struct_sizes2 = (((unsigned long) sizeof(struct flag) << 10) |
-/* free bits in here */
-#ifdef SYSFLAGS
- ((unsigned long) sizeof(struct sysflag)));
-#else
- ((unsigned long) 0L));
-#endif
- return;
-}
-
-/* REPRODUCIBLE_BUILD will change this to TRUE */
-static boolean date_via_env = FALSE;
-
-static char *
-version_string(outbuf, delim)
-char *outbuf;
-const char *delim;
-{
- Sprintf(outbuf, "%d%s%d%s%d", VERSION_MAJOR, delim, VERSION_MINOR, delim,
- PATCHLEVEL);
-#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
- Sprintf(eos(outbuf), "-%d", EDITLEVEL);
-#endif
- return outbuf;
-}
-
-static char *
-version_id_string(outbuf, build_date)
-char *outbuf;
-const char *build_date;
-{
- char subbuf[64], versbuf[64];
- char betabuf[64];
-
-#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
-#if (NH_DEVEL_STATUS == NH_STATUS_BETA)
- Strcpy(betabuf, " Beta");
-#else
- Strcpy(betabuf, " Work-in-progress");
-#endif
-#else
- betabuf[0] = '\0';
-#endif
-
- subbuf[0] = '\0';
-#ifdef PORT_SUB_ID
- subbuf[0] = ' ';
- Strcpy(&subbuf[1], PORT_SUB_ID);
-#endif
-
- Sprintf(outbuf, "%s NetHack%s Version %s%s - last %s %s.", PORT_ID,
- subbuf, version_string(versbuf, "."), betabuf,
- date_via_env ? "revision" : "build", build_date);
- return outbuf;
-}
-
-static char *
-bannerc_string(outbuf, build_date)
-char *outbuf;
-const char *build_date;
-{
- char subbuf[64], versbuf[64];
-
- subbuf[0] = '\0';
-#ifdef PORT_SUB_ID
- subbuf[0] = ' ';
- Strcpy(&subbuf[1], PORT_SUB_ID);
-#endif
-#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
-#if (NH_DEVEL_STATUS == NH_STATUS_BETA)
- Strcat(subbuf, " Beta");
-#else
- Strcat(subbuf, " Work-in-progress");
-#endif
-#endif
-
- Sprintf(outbuf, " Version %s %s%s, %s %s.",
- version_string(versbuf, "."), PORT_ID, subbuf,
- date_via_env ? "revised" : "built", &build_date[4]);
-#if 0
- Sprintf(outbuf, "%s NetHack%s %s Copyright 1985-%s (built %s)",
- PORT_ID, subbuf, version_string(versbuf,"."), RELEASE_YEAR,
- &build_date[4]);
-#endif
- return outbuf;
-}
-
void
do_date()
{
char githash[BUFSZ], gitbranch[BUFSZ];
char *c, cbuf[60], buf[BUFSZ];
const char *ul_sfx;
+#if defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST)
+ int steps = 0;
+ const char ind[] = " ";
+ const char *xpref = "HOST_";
+#else
+ const char *xpref = (const char *) 0;
+#endif /* CROSSCOMPILE && CROSSCOMPILE_HOST */
/* before creating date.h, make sure that xxx_GRAPHICS and
DEFAULT_WINDOW_SYS have been set up in a viable fashion */
#else
/* ordinary build: use current date+time */
Strcpy(cbuf, ctime(&clocktim));
-#endif
+#endif /* REPRODUCIBLE_BUILD */
if ((c = index(cbuf, '\n')) != 0)
*c = '\0'; /* strip off the '\n' */
#else
ul_sfx = "L";
#endif
+
+#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_HOST)
+ Fprintf(ofp, "\n#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_HOST)\n");
+#if 0
+ Fprintf(ofp, "/* On a CROSSCOMPILE build, NetHack is built in two steps:\n");
+ Fprintf(ofp, " *%s%d. %s\n",
+ ind, ++steps, "Build makedefs and its prerequisites, and");
+ Fprintf(ofp, " *%s %s\n",
+ ind, "execute makedefs to generate date.h, onames.h, and pm.h.");
+ Fprintf(ofp, " *%s%d. %s\n *%s %s\n */\n\n", ind, ++steps,
+ "Build the rest of NetHack using the cross-compiler",
+ ind, "to generate the game code for target platform.");
+#endif
+#endif /* CROSSCOMPILE || CROSSCOMPILE_HOST */
if (date_via_env)
Fprintf(ofp, "#define SOURCE_DATE_EPOCH (%lu%s) /* via getenv() */\n",
(unsigned long) clocktim, ul_sfx);
ul_sfx);
Fprintf(ofp, "#define VERSION_FEATURES 0x%08lx%s\n", version.feature_set,
ul_sfx);
-#ifdef IGNORED_FEATURES
+#ifdef MD_IGNORED_FEATURES
Fprintf(ofp, "#define IGNORED_FEATURES 0x%08lx%s\n",
- (unsigned long) IGNORED_FEATURES, ul_sfx);
+ (unsigned long) MD_IGNORED_FEATURES, ul_sfx);
#endif
Fprintf(ofp, "#define VERSION_SANITY1 0x%08lx%s\n", version.entity_count,
ul_sfx);
version_id_string(buf, cbuf));
Fprintf(ofp, "#define COPYRIGHT_BANNER_C \\\n \"%s\"\n",
bannerc_string(buf, cbuf));
- Fprintf(ofp, "\n");
if (get_gitinfo(githash, gitbranch)) {
Fprintf(ofp, "#define NETHACK_GIT_SHA \"%s\"\n", githash);
Fprintf(ofp, "#define NETHACK_GIT_BRANCH \"%s\"\n", gitbranch);
}
+ if (xpref && get_gitinfo(githash, gitbranch)) {
+ Fprintf(ofp, "#else /* !CROSSCOMPILE || CROSSCOMPILE_HOST */\n");
+ Fprintf(ofp, "#define NETHACK_%sGIT_SHA \"%s\"\n",
+ xpref, githash);
+ Fprintf(ofp, "#define NETHACK_%sGIT_BRANCH \"%s\"\n",
+ xpref, gitbranch);
+ }
+ Fprintf(ofp, "#endif /* !CROSSCOMPILE || CROSSCOMPILE_HOST */\n");
+ Fprintf(ofp, "\n");
#ifdef AMIGA
{
struct tm *tm = localtime((time_t *) &clocktim);
return FALSE;
}
-static int
-case_insensitive_comp(s1, s2)
-const char *s1;
-const char *s2;
+void
+do_options()
{
- uchar u1, u2;
-
- for (;; s1++, s2++) {
- u1 = (uchar) *s1;
- if (isupper(u1))
- u1 = tolower(u1);
- u2 = (uchar) *s2;
- if (isupper(u2))
- u2 = tolower(u2);
- if (u1 == '\0' || u1 != u2)
- break;
- }
- return u1 - u2;
-}
-
-static char save_bones_compat_buf[BUFSZ];
+ const char *optline;
+ int infocontext = 0;
-static void
-build_savebones_compat_string()
-{
-#ifdef VERSION_COMPATIBILITY
- unsigned long uver = VERSION_COMPATIBILITY;
-#endif
- Strcpy(save_bones_compat_buf,
- "save and bones files accepted from version");
-#ifdef VERSION_COMPATIBILITY
- Sprintf(eos(save_bones_compat_buf), "s %lu.%lu.%lu through %d.%d.%d",
- ((uver & 0xFF000000L) >> 24), ((uver & 0x00FF0000L) >> 16),
- ((uver & 0x0000FF00L) >> 8), VERSION_MAJOR, VERSION_MINOR,
- PATCHLEVEL);
-#else
- Sprintf(eos(save_bones_compat_buf), " %d.%d.%d only", VERSION_MAJOR,
- VERSION_MINOR, PATCHLEVEL);
+ windowing_sanity();
+ filename[0] = '\0';
+#ifdef FILE_PREFIX
+ Strcat(filename, file_prefix);
#endif
+ Sprintf(eos(filename), DATA_TEMPLATE, OPTIONS_FILE);
+ if (!(ofp = fopen(filename, WRTMODE))) {
+ perror(filename);
+ exit(EXIT_FAILURE);
+ }
+ while ((optline = do_runtime_info(&infocontext)))
+ Fprintf(ofp, "%s\n", optline);
+ Fclose(ofp);
+ return;
}
-static const char *build_opts[] = {
-#ifdef AMIGA_WBENCH
- "Amiga WorkBench support",
-#endif
-#ifdef ANSI_DEFAULT
- "ANSI default terminal",
-#endif
-#ifdef TEXTCOLOR
- "color",
-#endif
-#ifdef TTY_GRAPHICS
-#ifdef TTY_TILES_ESCCODES
- "console escape codes for tile hinting",
-#endif
-#endif
-#ifdef COM_COMPL
- "command line completion",
-#endif
-#ifdef LIFE
- "Conway's Game of Life",
-#endif
-#ifdef COMPRESS
- "data file compression",
-#endif
-#ifdef ZLIB_COMP
- "ZLIB data file compression",
-#endif
-#ifdef DLB
-#ifndef VERSION_IN_DLB_FILENAME
- "data librarian",
-#else
- "data librarian with a version-dependent name",
-#endif
-#endif
-#ifdef DUMPLOG
- "end-of-game dumplogs",
-#endif
-#ifdef HOLD_LOCKFILE_OPEN
- "exclusive lock on level 0 file",
-#endif
-#if defined(MSGHANDLER) && (defined(POSIX_TYPES) || defined(__GNUC__))
- "external program as a message handler",
-#endif
-#ifdef MFLOPPY
- "floppy drive support",
-#endif
-#ifdef INSURANCE
- "insurance files for recovering from crashes",
-#endif
-#ifdef LOGFILE
- "log file",
-#endif
-#ifdef XLOGFILE
- "extended log file",
-#endif
-#ifdef PANICLOG
- "errors and warnings log file",
-#endif
-#ifdef MAIL_STRUCTURES
- "mail daemon",
-#endif
-#ifdef GNUDOS
- "MSDOS protected mode",
-#endif
-#ifdef NEWS
- "news file",
-#endif
-#ifdef OVERLAY
-#ifdef MOVERLAY
- "MOVE overlays",
-#else
-#ifdef VROOMM
- "VROOMM overlays",
-#else
- "overlays",
-#endif
-#endif
-#endif
- /* pattern matching method will be substituted by nethack at run time */
- "pattern matching via :PATMATCH:",
-#ifdef USE_ISAAC64
- "pseudo random numbers generated by ISAAC64",
-#ifdef DEV_RANDOM
-#ifdef NHSTDC
- /* include which specific one */
- "strong PRNG seed available from " DEV_RANDOM,
-#else
- "strong PRNG seed available from DEV_RANDOM",
-#endif
-#else
-#ifdef WIN32
- "strong PRNG seed available from CNG BCryptGenRandom()",
-#endif
-#endif /* DEV_RANDOM */
-#else /* ISAAC64 */
-#ifdef RANDOM
- "pseudo random numbers generated by random()",
-#else
- "pseudo random numbers generated by C rand()",
-#endif
-#endif
-#ifdef SELECTSAVED
- "restore saved games via menu",
-#endif
-#ifdef SCORE_ON_BOTL
- "score on status line",
-#endif
-#ifdef CLIPPING
- "screen clipping",
-#endif
-#ifdef NO_TERMS
-#ifdef MAC
- "screen control via mactty",
-#endif
-#ifdef SCREEN_BIOS
- "screen control via BIOS",
-#endif
-#ifdef SCREEN_DJGPPFAST
- "screen control via DJGPP fast",
-#endif
-#ifdef SCREEN_VGA
- "screen control via VGA graphics",
-#endif
-#ifdef WIN32CON
- "screen control via WIN32 console I/O",
-#endif
-#endif
-#ifdef SHELL
- "shell command",
-#endif
- "traditional status display",
-#ifdef STATUS_HILITES
- "status via windowport with highlighting",
-#else
- "status via windowport without highlighting",
-#endif
-#ifdef SUSPEND
- "suspend command",
-#endif
-#ifdef TTY_GRAPHICS
-#ifdef TERMINFO
- "terminal info library",
-#else
-#if defined(TERMLIB) || (!defined(MICRO) && !defined(WIN32))
- "terminal capability library",
-#endif
-#endif
-#endif /*TTY_GRAPHICS*/
-/*#ifdef X11_GRAPHICS*/
-#ifdef USE_XPM
- "tiles file in XPM format",
-#endif
-/*#endif*/
-/*#if (defined(QT_GRAPHICS) || defined(X11_GRAPHICS)*/
-#ifdef GRAPHIC_TOMBSTONE
- "graphical RIP screen",
-#endif
-/*#endif*/
-#ifdef TIMED_DELAY
- "timed wait for display effects",
-#endif
-#ifdef USER_SOUNDS
- "user sounds",
-#endif
-#ifdef PREFIXES_IN_USE
- "variable playground",
-#endif
-#ifdef VISION_TABLES
- "vision tables",
-#endif
-#ifdef ZEROCOMP
- "zero-compressed save files",
-#endif
-#ifdef RLECOMP
- "run-length compression of map in save files",
-#endif
-#ifdef SYSCF
- "system configuration at run-time",
-#endif
- save_bones_compat_buf,
- "and basic NetHack features"
-};
-
-struct win_info {
- const char *id, /* DEFAULT_WINDOW_SYS string */
- *name; /* description, often same as id */
-};
-static struct win_info window_opts[] = {
-#ifdef TTY_GRAPHICS
- { "tty",
- /* testing 'USE_TILES' here would bring confusion because it could
- apply to another interface such as X11, so check MSDOS explicitly
- instead; even checking TTY_TILES_ESCCODES would probably be
- confusing to most users (and it will already be listed separately
- in the compiled options section so users aware of it can find it) */
-#ifdef MSDOS
- "traditional text with optional 'tiles' graphics"
-#else
- /* assume that one or more of IBMgraphics, DECgraphics, or MACgraphics
- can be enabled; we can't tell from here whether that is accurate */
- "traditional text with optional line-drawing"
-#endif
- },
-#endif
-#ifdef CURSES_GRAPHICS
- { "curses", "terminal-based graphics" },
-#endif
-#ifdef X11_GRAPHICS
- { "X11", "X11" },
-#endif
-#ifdef QT_GRAPHICS /* too vague; there are multiple incompatible versions */
- { "Qt", "Qt" },
-#endif
-#ifdef GNOME_GRAPHICS /* unmaintained/defunct */
- { "Gnome", "Gnome" },
-#endif
-#ifdef MAC /* defunct OS 9 interface */
- { "mac", "Mac" },
-#endif
-#ifdef AMIGA_INTUITION /* unmaintained/defunct */
- { "amii", "Amiga Intuition" },
-#endif
-#ifdef GEM_GRAPHICS /* defunct Atari interface */
- { "Gem", "Gem" },
-#endif
-#ifdef MSWIN_GRAPHICS /* win32 */
- { "mswin", "mswin" },
-#endif
-#ifdef BEOS_GRAPHICS /* unmaintained/defunct */
- { "BeOS", "BeOS InterfaceKit" },
-#endif
- { 0, 0 }
-};
-
static void
windowing_sanity()
{
#endif /*DEFAULT_WINDOW_SYS*/
}
-static const char opt_indent[] = " ";
-
-static void
-opt_out_words(str, length_p)
-char *str; /* input, but modified during processing */
-int *length_p; /* in/out */
-{
- char *word;
-
- while (*str) {
- word = index(str, ' ');
-#if 0
- /* treat " (" as unbreakable space */
- if (word && *(word + 1) == '(')
- word = index(word + 1, ' ');
-#endif
- if (word)
- *word = '\0';
- if (*length_p + (int) strlen(str) > COLNO - 5)
- Fprintf(ofp, "\n%s", opt_indent),
- *length_p = (int) strlen(opt_indent);
- else
- Fprintf(ofp, " "), (*length_p)++;
- Fprintf(ofp, "%s", str), *length_p += (int) strlen(str);
- str += strlen(str) + (word ? 1 : 0);
- }
-}
-
-void
-do_options()
-{
- char buf[BUFSZ];
- int i, length, winsyscnt;
-
- windowing_sanity();
-
- filename[0] = '\0';
-#ifdef FILE_PREFIX
- Strcat(filename, file_prefix);
-#endif
- Sprintf(eos(filename), DATA_TEMPLATE, OPTIONS_FILE);
- if (!(ofp = fopen(filename, WRTMODE))) {
- perror(filename);
- exit(EXIT_FAILURE);
- }
-
- build_savebones_compat_string();
- Fprintf(ofp, "\n%sNetHack version %d.%d.%d%s\n",
- opt_indent,
- VERSION_MAJOR, VERSION_MINOR, PATCHLEVEL,
-#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
-#if (NH_DEVEL_STATUS == NH_STATUS_BETA)
- " [beta]"
-#else
- " [work-in-progress]"
-#endif
-#else
- ""
-#endif
- );
-
- Fprintf(ofp, "\nOptions compiled into this edition:\n");
- length = COLNO + 1; /* force 1st item onto new line */
- for (i = 0; i < SIZE(build_opts); i++) {
- opt_out_words(strcat(strcpy(buf, build_opts[i]),
- (i < SIZE(build_opts) - 1) ? "," : "."),
- &length);
- }
- Fprintf(ofp, "\n"); /* terminate last line of words */
-
- winsyscnt = SIZE(window_opts) - 1;
- Fprintf(ofp, "\nSupported windowing system%s:\n",
- (winsyscnt > 1) ? "s" : "");
- length = COLNO + 1; /* force 1st item onto new line */
- for (i = 0; i < winsyscnt; i++) {
- Sprintf(buf, "\"%s\"", window_opts[i].id);
- if (strcmp(window_opts[i].name, window_opts[i].id))
- Sprintf(eos(buf), " (%s)", window_opts[i].name);
- /*
- * 1 : foo.
- * 2 : foo and bar (note no period; comes from 'with default' below)
- * 3+: for, bar, and quux
- */
- opt_out_words(strcat(buf, (winsyscnt == 1) ? "." /* no 'default' */
- : (winsyscnt == 2 && i == 0) ? " and"
- : (i == winsyscnt - 2) ? ", and"
- : ","),
- &length);
- }
- if (winsyscnt > 1) {
- Sprintf(buf, "with a default of \"%s\".", DEFAULT_WINDOW_SYS);
- opt_out_words(buf, &length);
- }
- Fprintf(ofp, "\n"); /* terminate last line of words */
-
- /* end with a blank line */
- Fprintf(ofp, "\n");
- Fclose(ofp);
- return;
-}
-
/* routine to decide whether to discard something from data.base */
static boolean
d_filter(line)
return buf;
}
-static char *
-eos(str)
-char *str;
-{
- while (*str)
- str++;
- return str;
-}
-
/*
* macro used to control vision algorithms:
* VISION_TABLES => generate tables
#define SFI_PROTO c_sfiproto
#define SFDATA c_sfdata
#define SFPROTO c_sfproto
+#define SFPROTO_NAME "../include/sfproto.h"
+#define SFDATA_NAME "../src/sfdata.c"
static char *fgetline(FILE*);
static void quit(void);
showthem();
#endif
generate_c_files();
+ printf("Created %s\n", SFDATA_NAME);
+ printf("Created %s\n", SFPROTO_NAME);
exit(EXIT_SUCCESS);
/*NOTREACHED*/
return 0;
return FALSE;
}
+/* TIME_type: type of the argument to time(); we actually use &(time_t) */
+#if defined(BSD) && !defined(POSIX_TYPES)
+#define TIME_type long *
+#else
+#define TIME_type time_t *
+#endif
+/* LOCALTIME_type: type of the argument to localtime() */
+#if (defined(ULTRIX) && !(defined(ULTRIX_PROTO) || defined(NHSTDC))) \
+ || (defined(BSD) && !defined(POSIX_TYPES))
+#define LOCALTIME_type long *
+#else
+#define LOCALTIME_type time_t *
+#endif
-char *preamble[] = {
- "/* Copyright (c) NetHack Development Team 2018. */\n",
+const char *preamble[] = {
+ "/* Copyright (c) NetHack Development Team %d. */\n",
"/* NetHack may be freely redistributed. See license for details. */\n\n",
"/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */\n\n",
"#include \"hack.h\"\n",
"#include \"artifact.h\"\n",
"#include \"func_tab.h\"\n",
"#include \"lev.h\"\n",
- "#include \"integer.h\"\n",
- "#include \"wintype.h\"\n",
+ "#include \"integer.h\"\n",
+ "#include \"wintype.h\"\n",
(char *)0
};
+char crbuf[BUFSZ];
+
+static const char *get_preamble(n)
+int n;
+{
+ const char *r = preamble[n];
+
+ if (!n) {
+ time_t datetime = 0;
+ struct tm *lt;
+
+ (void) time((TIME_type) &datetime);
+ lt = localtime((LOCALTIME_type) &datetime);
+ Sprintf(crbuf, preamble[0], (1900 + lt->tm_year));
+ r = crbuf;
+ }
+ return r;
+}
static void output_types(fp1)
FILE *fp1;
int okeydokey, x, a;
boolean did_i;
- SFDATA = fopen("../src/sfdata.c", "w");
+ SFDATA = fopen(SFDATA_NAME, "w");
if (!SFDATA) return;
- SFPROTO = fopen("../include/sfproto.h", "w");
+ SFPROTO = fopen(SFPROTO_NAME, "w");
if (!SFPROTO) return;
SFO_DATA = fopen("../src/sfo_data.tmp", "w");
*c = '\0'; /* strip off the '\n' */
/* begin sfproto.h */
- Fprintf(SFPROTO,"/* NetHack %d.%d sfproto.h\t%s */\n",
- VERSION_MAJOR, VERSION_MINOR, cbuf);
+ Fprintf(SFPROTO,"/* NetHack %d.%d sfproto.h */\n",
+ VERSION_MAJOR, VERSION_MINOR);
for (j = 0; j < 3; ++j)
- Fprintf(SFPROTO, "%s", preamble[j]);
+ Fprintf(SFPROTO, "%s", get_preamble(j));
Fprintf(SFPROTO, "#ifndef SFPROTO_H\n#define SFPROTO_H\n\n");
Fprintf(SFPROTO, "#include \"hack.h\"\n#include \"integer.h\"\n#include \"wintype.h\"\n\n"
"#define E extern\n\n");
Fprintf(SFI_PROTO, "/* generated input functions */\n");
/* begin sfdata.c */
- Fprintf(SFDATA,"/* NetHack %d.%d sfdata.c\t$Date$ $Revision$ */\n",
+ Fprintf(SFDATA,"/* NetHack %d.%d sfdata.c */\n",
VERSION_MAJOR, VERSION_MINOR);
for (j = 0; preamble[j]; ++j)
- Fprintf(SFDATA, "%s", preamble[j]);
+ Fprintf(SFDATA, "%s", get_preamble(j));
Fprintf(SFDATA, "#include \"sfproto.h\"\n\n");
- Fprintf(SFDATA, "#define BUILD_DATE \"%s\"\n", cbuf);
- Fprintf(SFDATA, "#define BUILD_TIME (%ldL)\n\n", (long) clocktim);
Fprintf(SFDATA, "#define NHTYPE_SIMPLE 1\n");
Fprintf(SFDATA, "#define NHTYPE_COMPLEX 2\n");
Fprintf(SFDATA, "struct nhdatatypes_t {\n");
#include "winMS.h"
#include <commdlg.h>
+#if !defined(CROSSCOMPILE)
#include "date.h"
+#else
+#include "config.h"
+#endif
#include "patchlevel.h"
#include "resource.h"
#include "mhmsg.h"
SetDlgItemText(hDlg, IDC_ABOUT_VERSION,
NH_A2W(buf, wbuf, sizeof(wbuf)));
+ Sprintf(buf, "%s\n%s\n%s\n%s",
+ COPYRIGHT_BANNER_A, COPYRIGHT_BANNER_B,
+ COPYRIGHT_BANNER_C, COPYRIGHT_BANNER_D);
SetDlgItemText(hDlg, IDC_ABOUT_COPYRIGHT,
- NH_A2W(COPYRIGHT_BANNER_A "\n" COPYRIGHT_BANNER_B
- "\n" COPYRIGHT_BANNER_C
- "\n" COPYRIGHT_BANNER_D,
- wbuf, BUFSZ));
+ NH_A2W(buf, wbuf, sizeof(wbuf)));
/* center dialog in the main window */
GetWindowRect(GetNHApp()->hMainWnd, &main_rt);
#include "mhsplash.h"
#include "mhmsg.h"
#include "mhfont.h"
+#if !defined(CROSSCOMPILE)
#include "date.h"
+#else
+#include "config.h"
+#endif
#include "patchlevel.h"
#include "dlb.h"