Merge branch 'NetHack-3.7'

This commit is contained in:
nhmall
2019-11-22 23:38:02 -05:00
18 changed files with 1501 additions and 1085 deletions
+3 -3
View File
@@ -3,7 +3,7 @@
/*-Copyright (c) Robert Patrick Rankin, 2017. */ /*-Copyright (c) Robert Patrick Rankin, 2017. */
/* NetHack may be freely redistributed. See license for details. */ /* 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 */ /* 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 #define A(nam, typ, s1, s2, mt, atk, dfn, cry, inv, al, cl, rac, cost, clr) nam
@@ -32,7 +32,7 @@ static const char *artifact_names[] = {
/* clang-format on */ /* clang-format on */
static NEARDATA struct artifact artilist[] = { static NEARDATA struct artifact artilist[] = {
#endif /* MAKEDEFS_C */ #endif /* MAKEDEFS_C || MDLIB_C */
/* Artifact cost rationale: /* Artifact cost rationale:
* 1. The more useful the artifact, the better its cost. * 1. The more useful the artifact, the better its cost.
@@ -256,7 +256,7 @@ A("The Palantir of Westernesse", CRYSTAL_BALL,
#undef A #undef A
#ifndef MAKEDEFS_C #if !defined(MAKEDEFS_C) && !defined(MDLIB_C)
#undef NO_ATTK #undef NO_ATTK
#undef NO_DFNS #undef NO_DFNS
#undef DFNS #undef DFNS
+19 -7
View File
@@ -16,7 +16,7 @@ E char *FDECL(fmt_ptr, (const genericptr));
/* This next pre-processor directive covers almost the entire file, /* This next pre-processor directive covers almost the entire file,
* interrupted only occasionally to pick up specific functions as needed. */ * 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 ### */ /* ### allmain.c ### */
@@ -583,10 +583,10 @@ E boolean FDECL(hurtle_jump, (genericptr_t, int, int));
E boolean FDECL(hurtle_step, (genericptr_t, int, int)); E boolean FDECL(hurtle_step, (genericptr_t, int, int));
/* ### drawing.c ### */ /* ### 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_objclass, (CHAR_P));
E int FDECL(def_char_to_monclass, (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(switch_symbols, (int));
E void FDECL(assign_graphics, (int)); E void FDECL(assign_graphics, (int));
E void NDECL(init_symbols); E void NDECL(init_symbols);
@@ -713,9 +713,9 @@ E int NDECL(done2);
E void FDECL(done_intr, (int)); E void FDECL(done_intr, (int));
#endif #endif
E void FDECL(done_in_by, (struct monst *, int)); 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; 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(done, (int));
E void FDECL(container_contents, (struct obj *, BOOLEAN_P, E void FDECL(container_contents, (struct obj *, BOOLEAN_P,
BOOLEAN_P, BOOLEAN_P)); BOOLEAN_P, BOOLEAN_P));
@@ -1663,10 +1663,14 @@ E char *NDECL(lan_username);
#endif #endif
/* ### nhlsel.c ### */ /* ### nhlsel.c ### */
#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
E struct selectionvar *FDECL(l_selection_check, (lua_State *, int)); E struct selectionvar *FDECL(l_selection_check, (lua_State *, int));
E int FDECL(l_selection_register, (lua_State *)); E int FDECL(l_selection_register, (lua_State *));
#endif
/* ### nhlua.c ### */ /* ### nhlua.c ### */
#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
E lua_State * NDECL(nhl_init); E lua_State * NDECL(nhl_init);
E boolean FDECL(nhl_loadlua, (lua_State *, const char *)); E boolean FDECL(nhl_loadlua, (lua_State *, const char *));
E boolean FDECL(load_lua, (const char *)); E boolean FDECL(load_lua, (const char *));
@@ -1685,14 +1689,21 @@ E int FDECL(get_table_boolean_opt, (lua_State *, const char *, int));
E int FDECL(get_table_option, (lua_State *, const char *, const char *, const char *const *)); 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 int FDECL(str_lines_max_width, (const char *));
E char *FDECL(stripdigits, (char *)); E char *FDECL(stripdigits, (char *));
#endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */
/* ### nhregex.c ### */ /* ### nhregex.c ### */
E struct nhregex *NDECL(regex_init); E struct nhregex *NDECL(regex_init);
E boolean FDECL(regex_compile, (const char *, struct nhregex *)); E boolean FDECL(regex_compile, (const char *, struct nhregex *));
E const char *FDECL(regex_error_desc, (struct nhregex *)); E const char *FDECL(regex_error_desc, (struct nhregex *));
E boolean FDECL(regex_match, (const char *, struct nhregex *)); E boolean FDECL(regex_match, (const char *, struct nhregex *));
E void FDECL(regex_free, (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 ### */ /* ### nttty.c ### */
#ifdef WIN32 #ifdef WIN32
@@ -2405,7 +2416,7 @@ E void NDECL(sysopt_release);
E void FDECL(sysopt_seduce_set, (int)); E void FDECL(sysopt_seduce_set, (int));
/* ### sp_lev.c ### */ /* ### sp_lev.c ### */
#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
E boolean FDECL(check_room, (xchar *, xchar *, xchar *, xchar *, BOOLEAN_P)); 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, E boolean FDECL(create_room, (XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P,
XCHAR_P, XCHAR_P, XCHAR_P)); XCHAR_P, XCHAR_P, XCHAR_P));
@@ -2434,6 +2445,7 @@ E void FDECL(set_floodfillchk_match_under, (XCHAR_P));
E void FDECL(selection_do_ellipse, (struct selectionvar *, int, int, int, int, int)); E void FDECL(selection_do_ellipse, (struct selectionvar *, int, int, int, int, int));
E void NDECL(update_croom); E void NDECL(update_croom);
E void FDECL(l_register_des, (lua_State *)); E void FDECL(l_register_des, (lua_State *));
#endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */
/* ### spell.c ### */ /* ### spell.c ### */
@@ -3069,7 +3081,7 @@ E int FDECL(destroy_mitem, (struct monst *, int, int));
E int FDECL(resist, (struct monst *, CHAR_P, int, int)); E int FDECL(resist, (struct monst *, CHAR_P, int, int));
E void NDECL(makewish); E void NDECL(makewish);
#endif /* !MAKEDEFS_C && !LEV_LEX_C */ #endif /* !MAKEDEFS_C && !MDLIB_C && !LEV_LEX_C */
#undef E #undef E
+35
View File
@@ -124,6 +124,41 @@ typedef uchar nhsym;
#define LARGEST_INT 32767 #define LARGEST_INT 32767
#include "coord.h" #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. * Automatic inclusions for the subsidiary files.
* Please don't change the order. It does matter. * Please don't change the order. It does matter.
+3 -3
View File
@@ -15,7 +15,7 @@ struct qtmsg {
long offset, size, summary_size; long offset, size, summary_size;
}; };
#ifdef MAKEDEFS_C /***** MAKEDEFS *****/ #if defined(MAKEDEFS_C) || defined(MDLIB_C) /***** MAKEDEFS *****/
#define N_MSG 100 /* arbitrary */ #define N_MSG 100 /* arbitrary */
@@ -47,7 +47,7 @@ struct qthdr {
"Too many messages in class (line %d)\nAdjust N_MSG in qtext.h and " \ "Too many messages in class (line %d)\nAdjust N_MSG in qtext.h and " \
"recompile.\n" "recompile.\n"
#else /***** !MAKEDEFS *****/ #else /***** !MAKEDEFS && !MDLIB_C *****/
struct qtlists { struct qtlists {
struct qtmsg *common, struct qtmsg *common,
@@ -113,6 +113,6 @@ struct qtlists {
#define QTN_DEMONIC 20 #define QTN_DEMONIC 20
#define QT_BANISHED 60 #define QT_BANISHED 60
#endif /***** !MAKEDEFS *****/ #endif /***** !MAKEDEFS && !MDLIB_C *****/
#endif /* QTEXT_H */ #endif /* QTEXT_H */
+2 -2
View File
@@ -1,5 +1,5 @@
/* NetHack 3.7 sfproto.h Tue Jun 25 09:57:33 2019 */ /* NetHack 3.7 sfproto.h */
/* Copyright (c) NetHack Development Team 2018. */ /* Copyright (c) NetHack Development Team 2019. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */ /* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */
+3 -2
View File
@@ -527,7 +527,7 @@ E char *FDECL(tgetstr, (const char *, char **));
E char *FDECL(tgoto, (const char *, int, int)); E char *FDECL(tgoto, (const char *, int, int));
#endif #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(malloc, (size_t));
E genericptr_t FDECL(realloc, (genericptr_t, size_t)); E genericptr_t FDECL(realloc, (genericptr_t, size_t));
#endif #endif
@@ -569,6 +569,7 @@ E int FDECL(atoi, (const char *));
#endif /* !__cplusplus && !__GO32__ */ #endif /* !__cplusplus && !__GO32__ */
#endif /* WIN32 */ #endif /* WIN32 */
#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
#include "lua.h" #include "lua.h"
#include "lualib.h" #include "lualib.h"
#include "lauxlib.h" #include "lauxlib.h"
@@ -578,5 +579,5 @@ E int FDECL(atoi, (const char *));
#else #else
#define LUA_INTCAST(i) (i) #define LUA_INTCAST(i) (i)
#endif #endif
#endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */
#endif /* SYSTEM_H */ #endif /* SYSTEM_H */
+3
View File
@@ -25,6 +25,9 @@ early_init()
decl_globals_init(); decl_globals_init();
objects_globals_init(); objects_globals_init();
monst_globals_init(); monst_globals_init();
#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
runtime_info_init();
#endif
sys_early_init(); sys_early_init();
} }
+761
View File
@@ -0,0 +1,761 @@
/* 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*/
+2 -5
View File
@@ -1,5 +1,5 @@
/* NetHack 3.7 sfdata.c $Date$ $Revision$ */ /* NetHack 3.7 sfdata.c */
/* Copyright (c) NetHack Development Team 2018. */ /* Copyright (c) NetHack Development Team 2019. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */ /* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */
@@ -12,9 +12,6 @@
#include "wintype.h" #include "wintype.h"
#include "sfproto.h" #include "sfproto.h"
#define BUILD_DATE "Tue Jun 25 09:57:33 2019"
#define BUILD_TIME (1561471053L)
#define NHTYPE_SIMPLE 1 #define NHTYPE_SIMPLE 1
#define NHTYPE_COMPLEX 2 #define NHTYPE_COMPLEX 2
struct nhdatatypes_t { struct nhdatatypes_t {
+68 -2
View File
@@ -19,11 +19,44 @@
#include "patchlevel.h" #include "patchlevel.h"
#endif #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) #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
;
#endif
#if defined(NETHACK_GIT_BRANCH) #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 #endif
static void FDECL(insert_rtoption, (char *)); static void FDECL(insert_rtoption, (char *));
@@ -98,7 +131,12 @@ doversion()
int int
doextversion() doextversion()
{ {
#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
const char *rtbuf;
int rtcontext = 0;
#else
dlb *f; dlb *f;
#endif
char buf[BUFSZ], *p = 0; char buf[BUFSZ], *p = 0;
winid win = create_nhwindow(NHW_TEXT); winid win = create_nhwindow(NHW_TEXT);
@@ -119,12 +157,15 @@ doextversion()
putstr(win, 0, p); putstr(win, 0, p);
} }
#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
#else
f = dlb_fopen(OPTIONS_USED, "r"); f = dlb_fopen(OPTIONS_USED, "r");
if (!f) { if (!f) {
putstr(win, 0, ""); putstr(win, 0, "");
Sprintf(buf, "[Configuration '%s' not available?]", OPTIONS_USED); Sprintf(buf, "[Configuration '%s' not available?]", OPTIONS_USED);
putstr(win, 0, buf); putstr(win, 0, buf);
} else { } else {
#endif
/* /*
* already inserted above: * already inserted above:
* + outdented program name and version plus build date and time * + outdented program name and version plus build date and time
@@ -146,8 +187,15 @@ doextversion()
*/ */
boolean prolog = TRUE; /* to skip indented program name */ 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)) { while (dlb_fgets(buf, BUFSZ, f)) {
(void) strip_newline(buf); (void) strip_newline(buf);
#endif
if (index(buf, '\t') != 0) if (index(buf, '\t') != 0)
(void) tabexpand(buf); (void) tabexpand(buf);
@@ -167,10 +215,16 @@ doextversion()
if (*buf) if (*buf)
putstr(win, 0, buf); putstr(win, 0, buf);
} }
#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
#else
(void) dlb_fclose(f); (void) dlb_fclose(f);
#endif
display_nhwindow(win, FALSE); display_nhwindow(win, FALSE);
destroy_nhwindow(win); destroy_nhwindow(win);
#if defined(OPTIONS_AT_RUNTIME) || defined(CROSSCOMPILE_TARGET)
#else
} }
#endif
return 0; return 0;
} }
@@ -370,11 +424,23 @@ void
store_version(nhfp) store_version(nhfp)
NHFILE *nhfp; NHFILE *nhfp;
{ {
#if !defined(CROSSCOMPILE) || (defined(CROSSCOMPILE) && defined(CROSSCOMPILE_HOST))
static const struct version_info version_data = { static const struct version_info version_data = {
VERSION_NUMBER, VERSION_FEATURES, VERSION_NUMBER, VERSION_FEATURES,
VERSION_SANITY1, VERSION_SANITY2, VERSION_SANITY3 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) { if (nhfp->structlevel) {
bufoff(nhfp->fd); bufoff(nhfp->fd);
/* bwrite() before bufon() uses plain write() */ /* bwrite() before bufon() uses plain write() */
+24 -9
View File
@@ -16,7 +16,7 @@
# for testing the msdos port build of the evolving NetHack code.0 # 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. # The GNU Make has a problem if you include a drive spec below.
GAMEDIR =../binary GAMEDIR =../msdos-binary
# #
#============================================================================== #==============================================================================
@@ -143,9 +143,11 @@ TEXTIO = $(HOST_O)tiletext.o $(HOST_O)tiletxt.o $(HOST_O)drawing.o $(HOST_O
TEXTIO2 = $(HOST_O)tiletex2.o $(HOST_O)tiletxt2.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.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)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 TILEFILES = $(WSHR)/monsters.txt $(WSHR)/objects.txt $(WSHR)/other.txt
@@ -226,18 +228,18 @@ CURSESDEF=
CURSESLIB= CURSESLIB=
INCLDIR=-I../include -I../sys/msdos INCLDIR=-I../include -I../sys/msdos
# Debugging # Debugging
#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS #cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -CROSSCOMPILE_HOST
#LFLAGS = -pg #LFLAGS = -pg
# #
cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS #cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -DCROSSCOMPILE_HOST
LFLAGS = #LFLAGS =
# #
# Debugging # Debugging
#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES #cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_HOST
#LFLAGS = -g #LFLAGS = -g
# #
# Normal # Normal
cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_HOST
LFLAGS = LFLAGS =
#========================================== #==========================================
@@ -318,6 +320,7 @@ $(DAT)/nhdat: $(U)dlb_main $(DAT)/data $(DAT)/rumors \
ls -1 data oracles options quest.dat rumors help hh >dlb.lst; \ ls -1 data oracles options quest.dat rumors help hh >dlb.lst; \
ls -1 cmdhelp history opthelp wizhelp license >>dlb.lst; \ ls -1 cmdhelp history opthelp wizhelp license >>dlb.lst; \
ls -1 bogusmon engrave epitaph tribute msdoshlp.txt >>dlb.lst; \ ls -1 bogusmon engrave epitaph tribute msdoshlp.txt >>dlb.lst; \
ls -1 *.lua >>dlb.lst; \
$(U)dlb_main cvIf dlb.lst nhdat $(U)dlb_main cvIf dlb.lst nhdat
cd $(SRC) cd $(SRC)
@@ -480,7 +483,19 @@ $(HOST_O)tilemap.o: $(WSHR)/tilemap.c $(HACK_H) $(TILE_H)
# Required for tile support # 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 @echo Creating binary tile files which may take some time
@cd $(DAT) @cd $(DAT)
@$(U)tile2bmp $@ @$(U)tile2bmp $@
+247 -368
View File
@@ -1,4 +1,4 @@
# NetHack 3.6 Makefile2.cross # NetHack 3.7 Makefile2.cross
# Cross-compile msdos version of NetHack using a # Cross-compile msdos version of NetHack using a
# linux-hosted djgpp cross-compiler. # linux-hosted djgpp cross-compiler.
# #
@@ -11,17 +11,17 @@
# Makefile2 utilizes the djgpp cross-compiler from Andrew Wu: # Makefile2 utilizes the djgpp cross-compiler from Andrew Wu:
# https://github.com/andrewwutw/build-djgpp # https://github.com/andrewwutw/build-djgpp
# #
# Currently, in NetHack 3.6, the cross-compile for msdos cannot be # In NetHack 3.7, the cross-compile for msdos can be used to
# used to build the entire game to a playable point but it is useful # build the entire game to a complete ms-dos package and
# for testing the msdos port build of the evolving NetHack code. # result (in theory).
# #
# Game Installation Variables # Game Installation Variables
# NOTE: Make sure GAMEDIR exists before make is started. # 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). # The GNU Make has a problem if you include a drive spec below (unfortunately).
GAMEDIR =../binary GAMEDIR =../msdos-binary
# Optional PDCurses support # Optional PDCurses support
# Uncomment these and set them appropriately if you want to # Uncomment these and set them appropriately if you want to
@@ -39,6 +39,20 @@ PDCURSES_TOP=../../pdcurses
# Set top of djgpp if not specified through ENV variables prior to make: # Set top of djgpp if not specified through ENV variables prior to make:
#DJGPP_TOP = $(HOME)/djgpp #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. # This marks the end of the BUILD DECISIONS section.
@@ -47,7 +61,8 @@ PDCURSES_TOP=../../pdcurses
# Directories, gcc likes unix style directory specs # Directories, gcc likes unix style directory specs
# #
OBJ = o TARGET = msdos
OBJ = $(TARGET)_o
HOBJ = host_o HOBJ = host_o
DAT = ../dat DAT = ../dat
DOC = ../doc DOC = ../doc
@@ -73,6 +88,7 @@ endif
TARGET_CC = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/gcc TARGET_CC = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/gcc
TARGET_LINK = $(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_STUBEDIT = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/stubedit
TARGET_AR = $(DJGPP_TOP)/i586-pc-msdosdjgpp/bin/ar
MAKEBIN = make MAKEBIN = make
# #
@@ -164,7 +180,7 @@ SUPPRESS_GRAPHICS =
# # # #
################################################ ################################################
GAMEFILE = $(GAMEDIR)/$(GAME).exe GAMEFILE = $(GAMEDIR)/$(GAME).EXE
# Changing this conditional block is not recommended # Changing this conditional block is not recommended
ifeq "$(USE_DLB)" "Y" ifeq "$(USE_DLB)" "Y"
@@ -208,82 +224,60 @@ O = $(OBJ)/
HOST_O = $(HOBJ)/ HOST_O = $(HOBJ)/
U = $(UTIL)/ 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. # Tile related object files.
#========================================== #==========================================
ifeq ($(SUPPRESS_GRAPHICS),Y) #ifeq ($(SUPPRESS_GRAPHICS),Y)
TILOBJ = #TILOBJ =
TILOBJ2 = #TILOBJ2 =
TEXTIO = #TEXTIO =
TEXTIO2 = #TEXTIO2 =
TILE_BMP = #TILE_BMP =
TILEUTIL = #TILEUTIL =
TILEFILES = #TILEFILES =
TILEFILES2 = #TILEFILES2 =
GIFREADERS = #GIFREADERS =
GIFREAD2 = #GIFREAD2 =
PPMWRITERS = #PPMWRITERS =
PPMWRIT2 = #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
else PLANAR_TIB = $(DAT)/NETHACK1.tib
OVERVIEW_TIB = $(DAT)/NETHACKO.tib
TILE_BMP = $(DAT)/NHTILES.BMP
TILOBJ = $(O)tile.o $(VGAOBJ) ##REGEX = $(O)pmatchregex.o
##REGEX = $(O)cppregex.o
TILOBJ2 = $(O)tileset.o $(O)bmptiles.o $(O)giftiles.o REGEX = $(O)posixreg.o
DLBOBJ = $(O)dlb.o
TEXTIO = $(HOST_O)tiletext.o $(HOST_O)tiletxt.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \ VIDEO_OBJ = $(O)vidvga.o $(O)vidvesa.o $(O)tile.o $(O)tileset.o $(O)bmptiles.o $(O)giftiles.o
$(HOST_O)objects.o $(HOST_O)stubvid.o RECOVOBJS = $(O)recover.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
#REGEX = $(O)pmatchregex.o
#REGEX = $(O)cppregex.o
REGEX = $(O)posixreg.o
DLBOBJ = $(O)dlb.o
# Object files for the game itself. # Object files for the game itself.
@@ -310,13 +304,19 @@ VOBJ19 = $(O)trap.o $(O)u_init.o $(O)uhitm.o $(O)vault.o $(O)vision.o
VOBJ20 = $(O)vis_tab.o $(O)weapon.o $(O)were.o $(O)wield.o $(O)windows.o 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 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 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 $(O)video.o $(O)vidtxt.o $(O)pckeys.o
VVOBJ = $(O)version.o VVOBJ = $(O)version.o
ifeq "$(ADD_LUA)" "Y"
LUAOBJ = $(O)nhlua.o $(O)nhlsel.o
endif
ifeq "$(ADD_CURSES)" "Y" ifeq "$(ADD_CURSES)" "Y"
CURSESOBJ= $(O)cursdial.o $(O)cursinit.o $(O)cursinvt.o $(O)cursmain.o \ 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 $(O)cursmesg.o $(O)cursmisc.o $(O)cursstat.o $(O)curswins.o
@@ -328,11 +328,54 @@ VOBJ = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
$(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \ $(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \
$(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \ $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \ $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
$(VOBJ21) $(VOBJ22) $(VOBJ23) \ $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
$(CURSESOBJ) $(LUAOBJ) $(CURSESOBJ)
ALLOBJ = $(VOBJ) $(SOBJ) $(TILOBJ) $(TILOBJ2) $(VVOBJ) 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" ifeq "$(ADD_CURSES)" "Y"
#========================================== #==========================================
# PDCurses build macros # PDCurses build macros
@@ -419,11 +462,6 @@ DLB =
DLBOBJS = DLBOBJS =
endif endif
ifdef DJGPP
DJ1 = $(dir $(DJGPP))
CWSDPMI = $(subst /,\,$(DJ1))bin\CWSDPMI.*
endif
#========================================== #==========================================
# More compiler setup macros # More compiler setup macros
#========================================== #==========================================
@@ -435,21 +473,21 @@ CURSESDEF=
CURSESLIB= CURSESLIB=
endif endif
INCLDIR=-I../include -I../sys/msdos INCLDIR=-I../include -I../sys/msdos $(LUAINCL)
# Debugging # Debugging
#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS #cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE -DCROSSCOMPILE_TARGET
#LFLAGS = -pg #LFLAGS = -pg
cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS #cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS -DCROSSCOMPILE-DCROSSCOMPILE_TARGET
LFLAGS = #LFLAGS =
# Debugging # Debugging
#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES #cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_TARGET
#LFLAGS = -g #LFLAGS = -g
# Normal # Normal
cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES -DCROSSCOMPILE -DCROSSCOMPILE_TARGET
LFLAGS = LFLAGS =
#========================================== #==========================================
@@ -523,6 +561,15 @@ $(OBJ)/%.o : $(PDCSRC)/%.c
$(OBJ)/%.o : $(PDCDOS)/%.c $(OBJ)/%.o : $(PDCDOS)/%.c
$(TARGET_CC) $(PDCINCL) $(cflags) -o$@ $< $(TARGET_CC) $(PDCINCL) $(cflags) -o$@ $<
ifeq "$(ADD_LUA)" "Y"
#==========================================
# Rules for LUA files
#==========================================
$(OBJ)/%.o : $(LUASRC)/%.c
$(TARGET_CC) $(cflags) -o$@ $<
endif
#========================================== #==========================================
# Primary Targets. # Primary Targets.
#========================================== #==========================================
@@ -538,8 +585,6 @@ default: $(GAMEFILE)
util: $(O)utility.tag util: $(O)utility.tag
#LEVCOMPEXE = $(U)lev_comp
$(O)utility.tag: $(INCL)/date.h $(INCL)/trap.h $(INCL)/onames.h \ $(O)utility.tag: $(INCL)/date.h $(INCL)/trap.h $(INCL)/onames.h \
$(INCL)/pm.h vis_tab.c $(TILEUTIL) $(INCL)/pm.h vis_tab.c $(TILEUTIL)
echo utilities made > $@ echo utilities made > $@
@@ -553,201 +598,119 @@ recover.exe: $(U)recover
$(O)install.tag: $(DAT)/nhdat $(GAMEFILE) $(O)install.tag: $(DAT)/nhdat $(GAMEFILE)
ifeq ($(USE_DLB),Y) ifeq ($(USE_DLB),Y)
cp $(DAT)/nhdat $(GAMEDIR) cp $(DAT)/nhdat $(GAMEDIR)/NHDAT
cp $(DAT)/license $(GAMEDIR) cp $(DAT)/license $(GAMEDIR)/LICENSE
else else
cp $(DAT)/*. $(GAMEDIR) cp $(DAT)/*. $(GAMEDIR)
cp $(DAT)/*.dat $(GAMEDIR) cp $(DAT)/*.dat $(GAMEDIR)
cp $(DAT)/*.lev $(GAMEDIR)
cp $(MSYS)/msdoshlp.txt $(GAMEDIR)) cp $(MSYS)/msdoshlp.txt $(GAMEDIR))
ifeq "$(ADD_LUA)" "Y"
cp $(DAT)/*.lua $(GAMEDIR)
endif
endif endif
ifdef TERMLIB ifdef TERMLIB
cp $(SSHR)/termcap $(GAMEDIR)) cp $(SSHR)/termcap $(GAMEDIR)/TERMCAP)
endif endif
# if [ -f $(TILE_BMP) ]; then rm $(TILE_BMP); fi; # if [ -f $(TILE_BMP) ]; then rm $(TILE_BMP); fi;
if [ -f $(TILE_BMP) ]; then cp $(TILE_BMP) $(GAMEDIR); fi; if [ -f $(TILE_BMP) ]; then cp $(TILE_BMP) $(GAMEDIR)/NHTILES.BMP; fi;
if [ -f $(DAT)/symbols ]; then cp $(DAT)/symbols $(GAMEDIR); fi; if [ -f $(DAT)/symbols ]; then cp $(DAT)/symbols $(GAMEDIR)/SYMBOLS; fi;
if [ -f $(SSHR)/NetHack.cnf ]; then cp $(SSHR)/NetHack.cnf $(GAMEDIR); fi; if [ -f $(SSHR)/NetHack.cnf ]; then cp $(SSHR)/NetHack.cnf $(GAMEDIR)/NETHACK.CNF; fi;
-touch $(GAMEDIR)/record -touch $(GAMEDIR)/RECORD
if [ -f ../sys/winnt/sysconf ]; then cp ../sys/winnt/sysconf $(GAMEDIR); fi; if [ -f ../sys/winnt/sysconf ]; then cp ../sys/winnt/sysconf $(GAMEDIR)/SYSCONF; fi;
if [ -f $(DOC)/nethack.txt ]; then cp $(DOC)/nethack.txt $(GAMEDIR); fi; if [ -f $(DOC)/nethack.txt ]; then cp $(DOC)/nethack.txt $(GAMEDIR)/NETHACK.TXT; fi;
ifdef CWSDPMI # if [ -f $(PLANAR_TIB) ]; then cp $(PLANAR_TIB) $(GAMEDIR)/$(PLANAR_TIB^^); fi;
if [ -f $(CWSDPMI) ]; then cp $(CWSDPMI) $(GAMEDIR); fi; # if [ -f $(OVERVIEW_TIB ]; then cp $(OVERVIEW_TIB) $(GAMEDIR)/$(OVERVIEW_TIB^^); fi;
else
@echo Could not find a copy of CWSDPMI.EXE to put into $(GAMEDIR)
endif
@echo install done > $@ @echo install done > $@
#========================================== #==========================================
# The main target. # The main target.
#========================================== #==========================================
$(GAMEFILE): $(O)obj.tag $(PATCHLEV_H) $(PDCLIB) \ $(GAMEFILE): $(O)obj.tag $(PDCLIB) $(LUALIB) \
$(O)utility.tag $(ALLOBJ) $(O)$(GAME).lnk $(O)utility.tag $(ALLOBJ) $(O)$(GAME).lnk
if [ -f temp.a ]; then rm temp.a; fi; if [ -f temp.a ]; then rm temp.a; fi;
@ar r temp.a $(VOBJ01) @$(TARGET_AR) r temp.a $(VOBJ01)
@ar r temp.a $(VOBJ02) @$(TARGET_AR) r temp.a $(VOBJ02)
@ar r temp.a $(VOBJ03) @$(TARGET_AR) r temp.a $(VOBJ03)
@ar r temp.a $(VOBJ04) @$(TARGET_AR) r temp.a $(VOBJ04)
@ar r temp.a $(VOBJ05) @$(TARGET_AR) r temp.a $(VOBJ05)
@ar r temp.a $(VOBJ06) @$(TARGET_AR) r temp.a $(VOBJ06)
@ar r temp.a $(VOBJ07) @$(TARGET_AR) r temp.a $(VOBJ07)
@ar r temp.a $(VOBJ08) @$(TARGET_AR) r temp.a $(VOBJ08)
@ar r temp.a $(VOBJ09) @$(TARGET_AR) r temp.a $(VOBJ09)
@ar r temp.a $(VOBJ10) @$(TARGET_AR) r temp.a $(VOBJ10)
@ar r temp.a $(VOBJ11) @$(TARGET_AR) r temp.a $(VOBJ11)
@ar r temp.a $(VOBJ12) @$(TARGET_AR) r temp.a $(VOBJ12)
@ar r temp.a $(VOBJ13) @$(TARGET_AR) r temp.a $(VOBJ13)
@ar r temp.a $(VOBJ14) @$(TARGET_AR) r temp.a $(VOBJ14)
@ar r temp.a $(VOBJ15) @$(TARGET_AR) r temp.a $(VOBJ15)
@ar r temp.a $(VOBJ16) @$(TARGET_AR) r temp.a $(VOBJ16)
@ar r temp.a $(VOBJ17) @$(TARGET_AR) r temp.a $(VOBJ17)
@ar r temp.a $(VOBJ18) @$(TARGET_AR) r temp.a $(VOBJ18)
@ar r temp.a $(VOBJ19) @$(TARGET_AR) r temp.a $(VOBJ19)
@ar r temp.a $(VOBJ20) @$(TARGET_AR) r temp.a $(VOBJ20)
@ar r temp.a $(VOBJ21) @$(TARGET_AR) r temp.a $(VOBJ21)
@ar r temp.a $(VOBJ22) @$(TARGET_AR) r temp.a $(VOBJ22)
@ar r temp.a $(VOBJ23) @$(TARGET_AR) r temp.a $(VOBJ23)
@ar r temp.a $(VOBJ24) @$(TARGET_AR) r temp.a $(VOBJ24)
@ar r temp.a $(VOBJ25) @$(TARGET_AR) r temp.a $(VOBJ25)
@ar r temp.a $(SOBJ) @$(TARGET_AR) r temp.a $(VIDEO_OBJ)
@ar r temp.a $(TILOBJ) @$(TARGET_AR) r temp.a $(SOBJ)
@ar r temp.a $(TILOBJ2) @$(TARGET_AR) r temp.a $(TILOBJ)
@ar r temp.a $(VVOBJ) @$(TARGET_AR) r temp.a $(TILOBJ2)
ifeq "$(ADD_CURSES)" "Y" ifeq "$(ADD_LUA)" "Y"
@ar r temp.a $(CURSESOBJ) @$(TARGET_AR) r temp.a $(LUAOBJ)
endif endif
$(TARGET_LINK) $(LFLAGS) -o$(GAME).exe temp.a $(PDCLIB) $(LIBRARIES) $(ZLIB) @$(TARGET_AR) r temp.a $(VVOBJ)
ifeq "$(ADD_CURSES)" "Y"
@$(TARGET_AR) r temp.a $(CURSESOBJ)
endif
$(TARGET_LINK) $(LFLAGS) -o$(GAME).exe temp.a $(PDCLIB) $(LUALIB) $(LIBRARIES) $(ZLIB)
$(TARGET_STUBEDIT) $(GAME).exe minstack=2048K $(TARGET_STUBEDIT) $(GAME).exe minstack=2048K
cp $(GAME).exe $(GAMEFILE) cp $(GAME).exe $(GAMEFILE)
rm $(GAME).exe rm $(GAME).exe
$(O)$(GAME).lnk: $(ALLOBJ) $(O)$(GAME).lnk: $(ALLOBJ)
echo $(VOBJ01) > $(subst /,\,$@) echo $(VOBJ01) > $@
echo $(VOBJ02) >> $(subst /,\,$@) echo $(VOBJ02) >> $@
echo $(VOBJ03) >> $(subst /,\,$@) echo $(VOBJ03) >> $@
echo $(VOBJ04) >> $(subst /,\,$@) echo $(VOBJ04) >> $@
echo $(VOBJ05) >> $(subst /,\,$@) echo $(VOBJ05) >> $@
echo $(VOBJ06) >> $(subst /,\,$@) echo $(VOBJ06) >> $@
echo $(VOBJ07) >> $(subst /,\,$@) echo $(VOBJ07) >> $@
echo $(VOBJ08) >> $(subst /,\,$@) echo $(VOBJ08) >> $@
echo $(VOBJ09) >> $(subst /,\,$@) echo $(VOBJ09) >> $@
echo $(VOBJ10) >> $(subst /,\,$@) echo $(VOBJ10) >> $@
echo $(VOBJ11) >> $(subst /,\,$@) echo $(VOBJ11) >> $@
echo $(VOBJ12) >> $(subst /,\,$@) echo $(VOBJ12) >> $@
echo $(VOBJ13) >> $(subst /,\,$@) echo $(VOBJ13) >> $@
echo $(VOBJ14) >> $(subst /,\,$@) echo $(VOBJ14) >> $@
echo $(VOBJ15) >> $(subst /,\,$@) echo $(VOBJ15) >> $@
echo $(VOBJ16) >> $(subst /,\,$@) echo $(VOBJ16) >> $@
echo $(VOBJ17) >> $(subst /,\,$@) echo $(VOBJ17) >> $@
echo $(VOBJ18) >> $(subst /,\,$@) echo $(VOBJ18) >> $@
echo $(VOBJ19) >> $(subst /,\,$@) echo $(VOBJ19) >> $@
echo $(VOBJ20) >> $(subst /,\,$@) echo $(VOBJ20) >> $@
echo $(VOBJ21) >> $(subst /,\,$@) echo $(VOBJ21) >> $@
echo $(VOBJ22) >> $(subst /,\,$@) echo $(VOBJ22) >> $@
echo $(VOBJ23) >> $(subst /,\,$@) echo $(VOBJ23) >> $@
echo $(VOBJ24) >> $(subst /,\,$@) echo $(VOBJ24) >> $@
echo $(VOBJ25) >> $(subst /,\,$@) echo $(VOBJ25) >> $@
echo $(SOBJ) >> $(subst /,\,$@) echo $(SOBJ) >> $@
echo $(TILOBJ) >> $(subst /,\,$@) echo $(TILOBJ) >> $@
echo $(TILOBJ2) >> $(subst /,\,$@) echo $(TILOBJ2) >> $@
echo $(VVOBJ) >> $(subst /,\,$@) ifeq "$(ADD_LUA)" "Y"
echo $(LUAOBJ) >> $@
endif
echo $(VVOBJ) >> $@
ifeq "$(ADD_CURSES)" "Y" ifeq "$(ADD_CURSES)" "Y"
echo $(CURSESOBJ) >> $(subst /,\,$@) echo $(CURSESOBJ) >> $@
endif endif
#========================================== #==========================================
#=========== SECONDARY TARGETS ============ #=========== 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 # Recover Utility
#========================================== #==========================================
@@ -810,109 +773,32 @@ $(O)objects.o: $(CONFIG_H) $(INCL)/obj.h $(INCL)/objclass.h \
$(O)dat.tag: $(DAT)/nhdat $(O)dat.tag: $(DAT)/nhdat
@echo dat done >$@ @echo dat done >$@
#$(HOST_O)monst.o: $(CONFIG_H) $(PERMONST_H) $(INCL)/monsym.h \ #=============================================================
# $(INCL)/color.h monst.c # Lua
# $(HOST_CC) $(cflags) -o$@ monst.c #=============================================================
#$(HOST_O)objects.o: $(CONFIG_H) $(INCL)/obj.h $(INCL)/objclass.h \ lua.exe: $(O)lua.o $(LUALIB)
# $(INCL)/prop.h $(INCL)/color.h objects.c $(TARGET_LINK) $(LFLAGS) -o$@ $(O)lua.o $(LUALIB)
# $(HOST_CC) $(cflags) -o$@ objects.c
#$(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 $(O)lua.o: $(LUASRC)/lua.c
#DATABASE = $(DAT)/data.bas $(O)luac.o: $(LUASRC)/luac.c
#
#
#
#$(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)
#========================================== #==========================================
# DLB stuff # Lua lib
#========================================== #==========================================
#note that dir below assumes bin/dir from djgpp distribution $(LUALIB): $(LUALIBOBJS)
# $(TARGET_AR) rcS $@ $(LUAOBJFILES1)
#$(DAT)/nhdat: $(U)dlb_main $(DAT)/data $(DAT)/rumors $(DAT)/dungeon \ $(TARGET_AR) rcS $@ $(LUAOBJFILES2)
# $(DAT)/oracles $(DAT)/quest.dat $(O)sp_lev.tag \ $(TARGET_AR) rcS $@ $(LUAOBJFILES3)
# $(DAT)/bogusmon $(DAT)/engrave $(DAT)/epitaph $(DAT)/tribute $(TARGET_AR) rcS $@ $(LUAOBJFILES4)
# echo dat done >$(O)dat.tag
# cd $(DAT) #$(LUADLL): $(LUALIBOBJS)
# copy $(MSYS)/msdoshlp.txt . # $(TARGET_CC) -shared -Wl,--export-all-symbols \
# @$(LS) data dungeon oracles options quest.dat rumors help hh >dlb.lst # -Wl,--add-stdcall-alias -o $@ $<
# @$(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
#========================================== #==========================================
# Housekeeping. # Housekeeping.
@@ -927,24 +813,17 @@ clean:
spotless: clean 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 $(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)/vis_tab.h ]; then rm $(INCL)/vis_tab.h; fi;
if [ -f $(INCL)/onames.h ]; then rm $(INCL)/onames.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)/pm.h ]; then rm $(INCL)/pm.h; fi;
if [ -f $(INCL)/date.h ]; then rm $(INCL)/date.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)/monstr.c ]; then rm $(SRC)/monstr.c; fi;
if [ -f $(SRC)/vis_tab.c ]; then rm $(SRC)/vis_tab.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 $(SRC)/tile.c ]; then rm $(SRC)/tile.c; fi;
if [ -f $(DAT)/options ]; then rm $(DAT)/options; fi; if [ -f $(DAT)/options ]; then rm $(DAT)/options; fi;
if [ -f $(DAT)/data ]; then rm $(DAT)/data; fi; if [ -f $(DAT)/data ]; then rm $(DAT)/data; fi;
if [ -f $(DAT)/rumors ]; then rm $(DAT)/rumors; 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)/oracles ]; then rm $(DAT)/oracles; fi;
if [ -f $(DAT)/quest.dat ]; then rm $(DAT)/quest.dat; fi; if [ -f $(DAT)/quest.dat ]; then rm $(DAT)/quest.dat; fi;
if [ -f $(DAT)/bogusmon ]; then rm $(DAT)/bogusmon; fi; if [ -f $(DAT)/bogusmon ]; then rm $(DAT)/bogusmon; fi;
@@ -952,10 +831,11 @@ spotless: clean
if [ -f $(DAT)/epitaph ]; then rm $(DAT)/epitaph; fi; if [ -f $(DAT)/epitaph ]; then rm $(DAT)/epitaph; fi;
if [ -f $(DAT)/dlb.lst ]; then rm $(DAT)/dlb.lst; fi; if [ -f $(DAT)/dlb.lst ]; then rm $(DAT)/dlb.lst; fi;
if [ -f $(TILE_BMP) ]; then rm $(TILE_BMP); 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)/monthin.txt ]; then rm $(WSHR)/monthin.txt; fi;
if [ -f $(WSHR)/objthin.txt ]; then rm $(WSHR)/objthin.txt; fi; if [ -f $(WSHR)/objthin.txt ]; then rm $(WSHR)/objthin.txt; fi;
if [ -f $(WSHR)/oththin.txt ]; then rm $(WSHR)/oththin.txt; fi; if [ -f $(WSHR)/oththin.txt ]; then rm $(WSHR)/oththin.txt; fi;
-rm $(DAT)/*.lev
#========================================== #==========================================
# Create directory for holding object files # Create directory for holding object files
@@ -1077,8 +957,8 @@ $(O)wintext.o: ../win/X11/wintext.c $(HACK_H) $(INCL)/winX.h $(INCL)/xwindow.h
$(TARGET_CC) $(cflags) -o$@ ../win/X11/wintext.c $(TARGET_CC) $(cflags) -o$@ ../win/X11/wintext.c
$(O)winval.o: ../win/X11/winval.c $(HACK_H) $(INCL)/winX.h $(O)winval.o: ../win/X11/winval.c $(HACK_H) $(INCL)/winX.h
$(TARGET_CC) $(cflags) -o$@ ../win/X11/winval.c $(TARGET_CC) $(cflags) -o$@ ../win/X11/winval.c
$(O)tile.o: tile.c $(HACK_H) #$(O)tile.o: tile.c $(HACK_H)
$(HOST_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 \ $(O)gnaskstr.o: ../win/gnome/gnaskstr.c ../win/gnome/gnaskstr.h \
../win/gnome/gnmain.h ../win/gnome/gnmain.h
$(TARGET_CC) $(cflags) $(GNOMEINC) -o$@ ../win/gnome/gnaskstr.c $(TARGET_CC) $(cflags) $(GNOMEINC) -o$@ ../win/gnome/gnaskstr.c
@@ -1130,7 +1010,6 @@ $(O)load_img.o: ../win/gem/load_img.c $(INCL)/load_img.h
$(TARGET_CC) $(cflags) -o$@ ../win/gem/load_img.c $(TARGET_CC) $(cflags) -o$@ ../win/gem/load_img.c
$(O)gr_rect.o: ../win/gem/gr_rect.c $(INCL)/gr_rect.h $(O)gr_rect.o: ../win/gem/gr_rect.c $(INCL)/gr_rect.h
$(TARGET_CC) $(cflags) -o$@ ../win/gem/gr_rect.c $(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 \ $(O)qt_win.o: ../win/Qt/qt_win.cpp $(HACK_H) $(INCL)/func_tab.h \
$(INCL)/dlb.h $(PATCHLEV_H) $(INCL)/tile2x11.h \ $(INCL)/dlb.h $(PATCHLEV_H) $(INCL)/tile2x11.h \
$(INCL)/qt_win.h $(INCL)/qt_clust.h $(INCL)/qt_kde0.h \ $(INCL)/qt_win.h $(INCL)/qt_clust.h $(INCL)/qt_kde0.h \
+60
View File
@@ -0,0 +1,60 @@
#!/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
+143 -95
View File
@@ -145,6 +145,12 @@ DEBUGINFO = Y
# #
LUATOP=..\..\lua-5.3.5 LUATOP=..\..\lua-5.3.5
# #
#
#==============================================================================
#
#TEST_CROSSCOMPILE=Y
#OPTIONS_AT_RUNTIME=Y
#
#============================================================================== #==============================================================================
#======================== End of Modification Section ========================= #======================== End of Modification Section =========================
#============================================================================== #==============================================================================
@@ -314,6 +320,28 @@ REGEX = $(O)cppregex.o
TTYOBJ = $(O)topl.o $(O)getline.o $(O)wintty.o 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 !IFNDEF ADD_CURSES
CURSESOBJ= CURSESOBJ=
!ELSE !ELSE
@@ -330,7 +358,7 @@ OBJS = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \ $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
$(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \ $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
$(VOBJ26) $(VOBJ27) $(VOBJ28) $(VOBJ29) $(VOBJ30) \ $(VOBJ26) $(VOBJ27) $(VOBJ28) $(VOBJ29) $(VOBJ30) \
$(REGEX) $(CURSESOBJ) $(REGEX) $(CURSESOBJ) $(MDLIB)
GUIOBJ = $(O)mhaskyn.o $(O)mhdlg.o \ GUIOBJ = $(O)mhaskyn.o $(O)mhdlg.o \
$(O)mhfont.o $(O)mhinput.o $(O)mhmain.o $(O)mhmap.o \ $(O)mhfont.o $(O)mhinput.o $(O)mhmain.o $(O)mhmap.o \
@@ -608,7 +636,7 @@ CURSESLIB=
ccommon= -c -nologo -D"_CONSOLE" -D"_CRT_NONSTDC_NO_DEPRECATE" -D"_CRT_SECURE_NO_DEPRECATE" \ 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" \ -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" \ -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 \ -EHsc -fp:precise -Gd -GF -GS -Gy \
$(CL_RECENT) -WX- -Zc:forScope -Zc:wchar_t -Zi $(CL_RECENT) -WX- -Zc:forScope -Zc:wchar_t -Zi
cdebug= -analyze- -D"_DEBUG" -MTd -RTC1 -Od cdebug= -analyze- -D"_DEBUG" -MTd -RTC1 -Od
@@ -708,20 +736,20 @@ DLB =
#========================================== #==========================================
.c{$(OBJ)}.o: .c{$(OBJ)}.o:
@$(cc) $(cflagsBuild) -Fo$@ $< @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(SRC)}.c{$(OBJ)}.o: {$(SRC)}.c{$(OBJ)}.o:
@$(cc) $(cflagsBuild) -Fo$@ $< @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#========================================== #==========================================
# Rules for files in sys\share # Rules for files in sys\share
#========================================== #==========================================
{$(SSYS)}.c{$(OBJ)}.o: {$(SSYS)}.c{$(OBJ)}.o:
@$(cc) $(cflagsBuild) -Fo$@ $< @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(SSYS)}.cpp{$(OBJ)}.o: {$(SSYS)}.cpp{$(OBJ)}.o:
@$(cc) $(cflagsBuild) /EHsc -Fo$@ $< @$(cc) $(cflagsBuild) $(CROSSDEFINES) /EHsc -Fo$@ $<
#========================================== #==========================================
# Rules for files in sys\winnt # Rules for files in sys\winnt
@@ -738,14 +766,14 @@ DLB =
#========================================== #==========================================
{$(UTIL)}.c{$(OBJ)}.o: {$(UTIL)}.c{$(OBJ)}.o:
@$(cc) $(cflagsBuild) -Fo$@ $< @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#========================================== #==========================================
# Rules for files in win\share # Rules for files in win\share
#========================================== #==========================================
{$(WSHR)}.c{$(OBJ)}.o: {$(WSHR)}.c{$(OBJ)}.o:
@$(cc) $(cflagsBuild) -Fo$@ $< @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(WSHR)}.h{$(INCL)}.h: {$(WSHR)}.h{$(INCL)}.h:
@copy $< $@ @copy $< $@
@@ -758,7 +786,7 @@ DLB =
#========================================== #==========================================
{$(TTY)}.c{$(OBJ)}.o: {$(TTY)}.c{$(OBJ)}.o:
$(cc) $(cflagsBuild) -Fo$@ $< $(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#========================================== #==========================================
@@ -766,14 +794,14 @@ DLB =
#========================================== #==========================================
{$(MSWIN)}.c{$(OBJ)}.o: {$(MSWIN)}.c{$(OBJ)}.o:
@$(cc) $(cflagsBuild) -Fo$@ $< $(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#========================================== #==========================================
# Rules for files in win\curses # Rules for files in win\curses
#========================================== #==========================================
{$(WCURSES)}.c{$(OBJ)}.o: {$(WCURSES)}.c{$(OBJ)}.o:
@$(cc) -DPDC_NCMOUSE $(PDCINCL) $(cflagsBuild) -Fo$@ $< @$(cc) -DPDC_NCMOUSE $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#{$(WCURSES)}.txt{$(DAT)}.txt: #{$(WCURSES)}.txt{$(DAT)}.txt:
# @copy $< $@ # @copy $< $@
@@ -783,20 +811,20 @@ DLB =
#========================================== #==========================================
{$(PDCURSES_TOP)}.c{$(OBJ)}.o: {$(PDCURSES_TOP)}.c{$(OBJ)}.o:
@$(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $< @$(cc) $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(PDCSRC)}.c{$(OBJ)}.o: {$(PDCSRC)}.c{$(OBJ)}.o:
@$(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $< @$(cc) $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
{$(PDCWINCON)}.c{$(OBJ)}.o: {$(PDCWINCON)}.c{$(OBJ)}.o:
@$(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $< @$(cc) $(PDCINCL) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#========================================== #==========================================
# Rules for LUA files # Rules for LUA files
#========================================== #==========================================
{$(LUASRC)}.c{$(OBJ)}.o: {$(LUASRC)}.c{$(OBJ)}.o:
@$(cc) $(cflagsBuild) -Fo$@ $< @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $<
#========================================== #==========================================
#=============== TARGETS ================== #=============== TARGETS ==================
@@ -1063,7 +1091,7 @@ $(U)nhsizes.exe: $(O)nhsizes.o
$(link) $(lflagsBuild) -out:$@ $(O)nhsizes.o $(O)panic.o $(O)alloc.o $(link) $(lflagsBuild) -out:$@ $(O)nhsizes.o $(O)panic.o $(O)alloc.o
$(O)nhsizes.o: $(CONFIG_H) nhsizes.c $(O)nhsizes.o: $(CONFIG_H) nhsizes.c
@$(cc) $(cflagsBuild) -Fo$@ nhsizes.c @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ nhsizes.c
$(U)makedefs.exe: $(MAKEOBJS) $(U)makedefs.exe: $(MAKEOBJS)
@echo Linking $(@:\=/) @echo Linking $(@:\=/)
@@ -1074,7 +1102,8 @@ $(O)makedefs.o: $(CONFIG_H) $(INCL)\monattk.h $(INCL)\monflag.h $(INCL)\objcla
$(U)makedefs.c $(U)makedefs.c
@if not exist $(OBJ)\*.* echo creating directory $(OBJ:\=/) @if not exist $(OBJ)\*.* echo creating directory $(OBJ:\=/)
@if not exist $(OBJ)\*.* mkdir $(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 # date.h should be remade every time any of the source or include
@@ -1105,7 +1134,7 @@ $(U)uudecode.exe: $(O)uudecode.o
@$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)uudecode.o @$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)uudecode.o
$(O)uudecode.o: $(SSYS)\uudecode.c $(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 $(MSWSYS)\NetHack.ico : $(U)uudecode.exe $(MSWSYS)\nhico.uu
chdir $(MSWSYS) chdir $(MSWSYS)
@@ -1271,10 +1300,10 @@ $(U)dlb_main.exe: $(DLBOBJ) $(O)dlb.o
<< <<
$(O)dlb.o: $(O)dlb_main.o $(O)alloc.o $(O)panic.o $(INCL)\dlb.h $(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 $(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 $(DAT)\porthelp: $(MSWSYS)\porthelp
@copy $(MSWSYS)\porthelp $@ >nul @copy $(MSWSYS)\porthelp $@ >nul
@@ -1320,7 +1349,7 @@ $(U)recover.exe: $(RECOVOBJS)
$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(RECOVOBJS) $(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(RECOVOBJS)
$(O)recover.o: $(CONFIG_H) $(U)recover.c $(MSWSYS)\win32api.h $(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 # Tile Mapping
@@ -1335,28 +1364,28 @@ $(U)tilemap.exe: $(O)tilemap.o
@$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)tilemap.o @$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(O)tilemap.o
$(O)tilemap.o: $(WSHR)\tilemap.c $(HACK_H) $(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) $(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) $(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) $(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) $(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) $(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) $(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) $(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 # Optional Tile Utilities
@@ -1414,10 +1443,10 @@ $(U)til2bm32.exe: $(O)til2bm32.o $(TEXT_IO32)
<< <<
$(O)tile2bmp.o: $(WSHR)\tile2bmp.c $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h $(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 $(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 # PDCurses
@@ -1427,7 +1456,7 @@ $(O)pdcurses.lib : $(PDCLIBOBJS) $(PDCOBJS)
lib -nologo /out:$@ $(PDCLIBOBJS) $(PDCOBJS) lib -nologo /out:$@ $(PDCLIBOBJS) $(PDCOBJS)
$(O)pdcscrn.o : $(PDCURSES_HEADERS) $(PDCWINCON)\pdcscrn.c $(MSWSYS)\stub-pdcscrn.c $(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 # LUA
@@ -1448,7 +1477,25 @@ $(O)lua$(LUAVER)-static.lib: $(LUAOBJFILES)
$(O)lua.o: $(LUASRC)\lua.c $(O)lua.o: $(LUASRC)\lua.c
$(O)luac.o: $(LUASRC)\luac.c $(O)luac.o: $(LUASRC)\luac.c
$(O)lapi.o: $(LUASRC)\lapi.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 # Housekeeping
@@ -1642,31 +1689,32 @@ $(DAT)\dungeon: $(O)utility.tag $(DAT)\dungeon.def
# #
$(O)nttty.o: $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h $(MSWSYS)\nttty.c $(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 $(O)winnt.o: $(HACK_H) $(MSWSYS)\win32api.h $(MSWSYS)\winnt.c
@$(cc) $(cflagsBuild) -I$(MSWSYS) -I$(MSWIN) -Fo$@ $(MSWSYS)\win10.c @$(cc) $(cflagsBuild) $(CROSSDEFINES) -I$(MSWSYS) -I$(MSWIN) -Fo$@ $(MSWSYS)\win10.c
@$(cc) $(cflagsBuild) -Fo$@ $(MSWSYS)\winnt.c @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(MSWSYS)\winnt.c
$(O)ntsound.o: $(HACK_H) $(MSWSYS)\ntsound.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 #if you aren't linking in the full gui then
#include the following stub for proper linkage. #include the following stub for proper linkage.
$(O)guistub.o: $(HACK_H) $(MSWSYS)\stubs.c $(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 # WIN32 dependencies
# #
$(O)NetHackW.o: $(HACK_H) $(MSWIN)\NetHackW.c $(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 #if you aren't linking in the full tty then
#include the following stub for proper linkage. #include the following stub for proper linkage.
$(O)ttystub.o: $(HACK_H) $(MSWSYS)\stubs.c $(O)ttystub.o: $(HACK_H) $(MSWSYS)\stubs.c
@$(cc) $(cflagsBuild) -DTTYSTUB -Fo$@ $(MSWSYS)\stubs.c @$(cc) $(cflagsBuild) $(CROSSDEFINES) -DTTYSTUB -Fo$@ $(MSWSYS)\stubs.c
# #
#============================================ #============================================
@@ -1675,19 +1723,19 @@ $(O)ttystub.o: $(HACK_H) $(MSWSYS)\stubs.c
$(O)sfbase.o: $(HACK_H) $(INCL)\sfproto.h $(INCL)\sfprocs.h \ $(O)sfbase.o: $(HACK_H) $(INCL)\sfproto.h $(INCL)\sfprocs.h \
$(SRC)\sfbase.c $(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 $(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 $(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 $(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 $(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 $(SRC)\sfdata.c: $(U)readtags.exe $(U)nethack.tags
$(U)readtags.exe $(U)readtags.exe
@@ -1699,7 +1747,7 @@ $(U)readtags.exe: $(O)readtags.o
@$(link) $(lflagsBuild) -out:$@ $(O)readtags.o @$(link) $(lflagsBuild) -out:$@ $(O)readtags.o
$(O)readtags.o: $(U)readtags.c $(U)nethack.tags $(CONFIG_H) $(PATCHLEVEL_H) $(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 #tested only with exuberant ctags from http://ctags.sourceforge.net
@@ -1763,14 +1811,14 @@ $(U)nethack.tags: $(CTAGDEP)
# #
$(O)panic.o: $(U)panic.c $(CONFIG_H) $(O)panic.o: $(U)panic.c $(CONFIG_H)
@$(cc) $(cflagsBuild) -Fo$@ $(U)panic.c @$(cc) $(cflagsBuild) $(CROSSDEFINES) -Fo$@ $(U)panic.c
# #
# sys/share dependencies # sys/share dependencies
# #
(O)cppregex.o: $(O)cppregex.cpp $(HACK_H) (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 # curses window port dependencies
@@ -1798,126 +1846,126 @@ $(O)curswins.o: $(WCURSES)\curswins.c $(WCURSES)\curswins.h $(INCL)\wincurs.h
# #
$(O)tos.o: ..\sys\atari\tos.c $(HACK_H) $(INCL)\tcap.h $(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) $(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 $(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) $(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 $(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) $(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 $(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) $(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) $(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 $(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 $(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 $(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 $(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 $(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 \ #$(O)Window.o: ..\win\X11\Window.c $(INCL)\xwindowp.h $(INCL)\xwindow.h \
# $(CONFIG_H) # $(CONFIG_H)
# @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\Window.c # @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\Window.c
$(O)dialogs.o: ..\win\X11\dialogs.c $(CONFIG_H) $(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 \ $(O)winX.o: ..\win\X11\winX.c $(HACK_H) $(INCL)\winX.h $(INCL)\dlb.h \
..\win\X11\nh72icon ..\win\X11\nh56icon ..\win\X11\nh32icon ..\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 \ $(O)winmap.o: ..\win\X11\winmap.c $(INCL)\xwindow.h $(HACK_H) $(INCL)\dlb.h \
$(INCL)\winX.h $(INCL)\tile2x11.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 $(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 $(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 \ $(O)winmisc.o: ..\win\X11\winmisc.c $(HACK_H) $(INCL)\func_tab.h \
$(INCL)\winX.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 $(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 $(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 $(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)tile.o: $(SRC)\tile.c $(HACK_H)
$(O)gnaskstr.o: ..\win\gnome\gnaskstr.c ..\win\gnome\gnaskstr.h \ $(O)gnaskstr.o: ..\win\gnome\gnaskstr.c ..\win\gnome\gnaskstr.h \
..\win\gnome\gnmain.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 \ $(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\gnmenu.h ..\win\gnome\gnaskstr.h \
..\win\gnome\gnyesno.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 $(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 \ $(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) \ ..\win\gnome\gnbind.h ..\win\gnome\gnopts.h $(HACK_H) \
$(INCL)\date.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 \ $(O)gnmap.o: ..\win\gnome\gnmap.c ..\win\gnome\gnmap.h ..\win\gnome\gnglyph.h \
..\win\gnome\gnsignal.h $(HACK_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 \ $(O)gnmenu.o: ..\win\gnome\gnmenu.c ..\win\gnome\gnmenu.h ..\win\gnome\gnmain.h \
..\win\gnome\gnbind.h $(INCL)\func_tab.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 $(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 \ $(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) ..\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 \ $(O)gnplayer.o: ..\win\gnome\gnplayer.c ..\win\gnome\gnplayer.h \
..\win\gnome\gnmain.h $(HACK_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 \ $(O)gnsignal.o: ..\win\gnome\gnsignal.c ..\win\gnome\gnsignal.h \
..\win\gnome\gnmain.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 \ $(O)gnstatus.o: ..\win\gnome\gnstatus.c ..\win\gnome\gnstatus.h \
..\win\gnome\gnsignal.h ..\win\gnome\gn_xpms.h \ ..\win\gnome\gnsignal.h ..\win\gnome\gn_xpms.h \
..\win\gnome\gnomeprv.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 \ $(O)gntext.o: ..\win\gnome\gntext.c ..\win\gnome\gntext.h ..\win\gnome\gnmain.h \
..\win\gnome\gn_rip.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 $(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 \ $(O)gnworn.o: ..\win\gnome\gnworn.c ..\win\gnome\gnworn.h ..\win\gnome\gnglyph.h \
..\win\gnome\gnsignal.h ..\win\gnome\gnomeprv.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 \ $(O)wingem.o: ..\win\gem\wingem.c $(HACK_H) $(INCL)\func_tab.h $(INCL)\dlb.h \
$(INCL)\patchlevel.h $(INCL)\wingem.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 \ $(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 $(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 $(O)load_img.o: ..\win\gem\load_img.c $(INCL)\load_img.h
@$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\load_img.c @$(CC) $(cflagsBuild) -Fo$@ ..\win\gem\load_img.c
$(O)gr_rect.o: ..\win\gem\gr_rect.c $(INCL)\gr_rect.h $(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)tile.o: $(SRC)\tile.c $(HACK_H)
$(O)qt_win.o: ..\win\Qt\qt_win.cpp $(HACK_H) $(INCL)\func_tab.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)\dlb.h $(INCL)\patchlevel.h $(INCL)\tile2x11.h \
$(INCL)\qt_win.h $(INCL)\qt_clust.h $(INCL)\qt_kde0.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 $(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 $(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 $(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) $(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) $(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 $(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)vis_tab.o: vis_tab.c $(CONFIG_H) $(INCL)\vis_tab.h
$(O)allmain.o: allmain.c $(HACK_H) $(O)allmain.o: allmain.c $(HACK_H)
$(O)alloc.o: alloc.c $(CONFIG_H) $(O)alloc.o: alloc.c $(CONFIG_H)
@@ -2023,11 +2071,11 @@ $(O)uhitm.o: uhitm.c $(HACK_H)
$(O)vault.o: vault.c $(HACK_H) $(O)vault.o: vault.c $(HACK_H)
$(O)version.o: version.c $(HACK_H) $(INCL)\dlb.h $(INCL)\date.h \ $(O)version.o: version.c $(HACK_H) $(INCL)\dlb.h $(INCL)\date.h \
$(INCL)\patchlevel.h $(INCL)\patchlevel.h
@$(cc) $(cflagsBuild) $(CROSSCOMPILE) $(CROSSDEFINE_TARGET) -Fo$@ version.c
$(O)vision.o: vision.c $(HACK_H) $(INCL)\vis_tab.h $(O)vision.o: vision.c $(HACK_H) $(INCL)\vis_tab.h
$(O)weapon.o: weapon.c $(HACK_H) $(O)weapon.o: weapon.c $(HACK_H)
$(O)were.o: were.c $(HACK_H) $(O)were.o: were.c $(HACK_H)
$(O)wield.o: wield.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)windows.o: windows.c $(HACK_H) $(INCL)\wingem.h $(INCL)\winGnome.h
$(O)wizard.o: wizard.c $(HACK_H) $(INCL)\qtext.h $(O)wizard.o: wizard.c $(HACK_H) $(INCL)\qtext.h
$(O)worm.o: worm.c $(HACK_H) $(INCL)\lev.h $(O)worm.o: worm.c $(HACK_H) $(INCL)\lev.h
+70 -572
View File
@@ -53,7 +53,7 @@
#endif #endif
#if defined(UNIX) && !defined(LINT) && !defined(GCC_WARN) #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 #endif
/* names of files to be generated */ /* names of files to be generated */
@@ -156,7 +156,6 @@ void FDECL(do_makedefs, (char *));
void NDECL(do_objs); void NDECL(do_objs);
void NDECL(do_data); void NDECL(do_data);
void NDECL(do_dungeon); void NDECL(do_dungeon);
void NDECL(do_date);
void NDECL(do_options); void NDECL(do_options);
void NDECL(do_monstr); void NDECL(do_monstr);
void NDECL(do_permonst); void NDECL(do_permonst);
@@ -164,6 +163,7 @@ void NDECL(do_questtxt);
void NDECL(do_rumors); void NDECL(do_rumors);
void NDECL(do_oracles); void NDECL(do_oracles);
void NDECL(do_vision); void NDECL(do_vision);
void NDECL(do_date);
extern void NDECL(monst_globals_init); /* monst.c */ extern void NDECL(monst_globals_init); /* monst.c */
extern void NDECL(objects_globals_init); /* objects.c */ extern void NDECL(objects_globals_init); /* objects.c */
@@ -172,22 +172,13 @@ static char *FDECL(name_file, (const char *, const char *));
static void FDECL(delete_file, (const char *template, const char *)); static void FDECL(delete_file, (const char *template, const char *));
static FILE *FDECL(getfp, (const char *, const char *, const char *)); static FILE *FDECL(getfp, (const char *, const char *, const char *));
static void FDECL(do_ext_makedefs, (int, 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 char *FDECL(xcrypt, (const char *));
static unsigned long FDECL(read_rumors_file, static unsigned long FDECL(read_rumors_file,
(const char *, int *, long *, unsigned long)); (const char *, int *, long *, unsigned long));
static boolean FDECL(get_gitinfo, (char *, char *));
static void FDECL(do_rnd_access_file, (const char *)); static void FDECL(do_rnd_access_file, (const char *));
static boolean FDECL(d_filter, (char *)); static boolean FDECL(d_filter, (char *));
static boolean FDECL(h_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 void FDECL(opt_out_words, (char *, int *));
static boolean FDECL(qt_comment, (char *)); static boolean FDECL(qt_comment, (char *));
static boolean FDECL(qt_control, (char *)); static boolean FDECL(qt_control, (char *));
static int FDECL(get_hdr, (char *)); static int FDECL(get_hdr, (char *));
@@ -211,8 +202,8 @@ static int FDECL(clear_path, (int, int, int, int));
static char *FDECL(fgetline, (FILE*)); static char *FDECL(fgetline, (FILE*));
static char *FDECL(tmpdup, (const char *)); static char *FDECL(tmpdup, (const char *));
static char *FDECL(limit, (char *, int)); static char *FDECL(limit, (char *, int));
static char *FDECL(eos, (char *)); static void NDECL(windowing_sanity);
static int FDECL(case_insensitive_comp, (const char *, const char *)); static boolean FDECL(get_gitinfo, (char *, char *));
/* input, output, tmp */ /* input, output, tmp */
static FILE *ifp, *ofp, *tfp; static FILE *ifp, *ofp, *tfp;
@@ -228,6 +219,22 @@ static boolean use_enum =
extern unsigned _stklen = STKSIZ; extern unsigned _stklen = STKSIZ;
#endif #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 #ifdef MACsansMPWTOOL
int int
main(void) main(void)
@@ -295,7 +302,6 @@ char *argv[];
/*NOTREACHED*/ /*NOTREACHED*/
return 0; return 0;
} }
#endif #endif
void void
@@ -1069,180 +1075,6 @@ rumors_failure:
exit(EXIT_FAILURE); 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 void
do_date() do_date()
{ {
@@ -1254,6 +1086,13 @@ do_date()
char githash[BUFSZ], gitbranch[BUFSZ]; char githash[BUFSZ], gitbranch[BUFSZ];
char *c, cbuf[60], buf[BUFSZ]; char *c, cbuf[60], buf[BUFSZ];
const char *ul_sfx; 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 /* before creating date.h, make sure that xxx_GRAPHICS and
DEFAULT_WINDOW_SYS have been set up in a viable fashion */ DEFAULT_WINDOW_SYS have been set up in a viable fashion */
@@ -1345,7 +1184,7 @@ do_date()
#else #else
/* ordinary build: use current date+time */ /* ordinary build: use current date+time */
Strcpy(cbuf, ctime(&clocktim)); Strcpy(cbuf, ctime(&clocktim));
#endif #endif /* REPRODUCIBLE_BUILD */
if ((c = index(cbuf, '\n')) != 0) if ((c = index(cbuf, '\n')) != 0)
*c = '\0'; /* strip off the '\n' */ *c = '\0'; /* strip off the '\n' */
@@ -1354,6 +1193,20 @@ do_date()
#else #else
ul_sfx = "L"; ul_sfx = "L";
#endif #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) if (date_via_env)
Fprintf(ofp, "#define SOURCE_DATE_EPOCH (%lu%s) /* via getenv() */\n", Fprintf(ofp, "#define SOURCE_DATE_EPOCH (%lu%s) /* via getenv() */\n",
(unsigned long) clocktim, ul_sfx); (unsigned long) clocktim, ul_sfx);
@@ -1368,9 +1221,9 @@ do_date()
ul_sfx); ul_sfx);
Fprintf(ofp, "#define VERSION_FEATURES 0x%08lx%s\n", version.feature_set, Fprintf(ofp, "#define VERSION_FEATURES 0x%08lx%s\n", version.feature_set,
ul_sfx); ul_sfx);
#ifdef IGNORED_FEATURES #ifdef MD_IGNORED_FEATURES
Fprintf(ofp, "#define IGNORED_FEATURES 0x%08lx%s\n", Fprintf(ofp, "#define IGNORED_FEATURES 0x%08lx%s\n",
(unsigned long) IGNORED_FEATURES, ul_sfx); (unsigned long) MD_IGNORED_FEATURES, ul_sfx);
#endif #endif
Fprintf(ofp, "#define VERSION_SANITY1 0x%08lx%s\n", version.entity_count, Fprintf(ofp, "#define VERSION_SANITY1 0x%08lx%s\n", version.entity_count,
ul_sfx); ul_sfx);
@@ -1384,11 +1237,19 @@ do_date()
version_id_string(buf, cbuf)); version_id_string(buf, cbuf));
Fprintf(ofp, "#define COPYRIGHT_BANNER_C \\\n \"%s\"\n", Fprintf(ofp, "#define COPYRIGHT_BANNER_C \\\n \"%s\"\n",
bannerc_string(buf, cbuf)); bannerc_string(buf, cbuf));
Fprintf(ofp, "\n");
if (get_gitinfo(githash, gitbranch)) { if (get_gitinfo(githash, gitbranch)) {
Fprintf(ofp, "#define NETHACK_GIT_SHA \"%s\"\n", githash); Fprintf(ofp, "#define NETHACK_GIT_SHA \"%s\"\n", githash);
Fprintf(ofp, "#define NETHACK_GIT_BRANCH \"%s\"\n", gitbranch); 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 #ifdef AMIGA
{ {
struct tm *tm = localtime((time_t *) &clocktim); struct tm *tm = localtime((time_t *) &clocktim);
@@ -1462,281 +1323,28 @@ char *githash, *gitbranch;
return FALSE; return FALSE;
} }
static int void
case_insensitive_comp(s1, s2) do_options()
const char *s1;
const char *s2;
{ {
uchar u1, u2; const char *optline;
int infocontext = 0;
for (;; s1++, s2++) { windowing_sanity();
u1 = (uchar) *s1; filename[0] = '\0';
if (isupper(u1)) #ifdef FILE_PREFIX
u1 = tolower(u1); Strcat(filename, file_prefix);
u2 = (uchar) *s2; #endif
if (isupper(u2)) Sprintf(eos(filename), DATA_TEMPLATE, OPTIONS_FILE);
u2 = tolower(u2); if (!(ofp = fopen(filename, WRTMODE))) {
if (u1 == '\0' || u1 != u2) perror(filename);
break; exit(EXIT_FAILURE);
} }
return u1 - u2; while ((optline = do_runtime_info(&infocontext)))
Fprintf(ofp, "%s\n", optline);
Fclose(ofp);
return;
} }
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
#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 static void
windowing_sanity() windowing_sanity()
{ {
@@ -1776,107 +1384,6 @@ windowing_sanity()
#endif /*DEFAULT_WINDOW_SYS*/ #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 */ /* routine to decide whether to discard something from data.base */
static boolean static boolean
d_filter(line) d_filter(line)
@@ -2904,15 +2411,6 @@ const char *str;
return buf; return buf;
} }
static char *
eos(str)
char *str;
{
while (*str)
str++;
return str;
}
/* /*
* macro used to control vision algorithms: * macro used to control vision algorithms:
* VISION_TABLES => generate tables * VISION_TABLES => generate tables
+46 -13
View File
@@ -68,6 +68,8 @@ struct needs_array_handling {
#define SFI_PROTO c_sfiproto #define SFI_PROTO c_sfiproto
#define SFDATA c_sfdata #define SFDATA c_sfdata
#define SFPROTO c_sfproto #define SFPROTO c_sfproto
#define SFPROTO_NAME "../include/sfproto.h"
#define SFDATA_NAME "../src/sfdata.c"
static char *fgetline(FILE*); static char *fgetline(FILE*);
static void quit(void); static void quit(void);
@@ -287,6 +289,8 @@ char *argv[];
showthem(); showthem();
#endif #endif
generate_c_files(); generate_c_files();
printf("Created %s\n", SFDATA_NAME);
printf("Created %s\n", SFPROTO_NAME);
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
/*NOTREACHED*/ /*NOTREACHED*/
return 0; return 0;
@@ -783,19 +787,50 @@ struct tagstruct *t;
return FALSE; 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[] = { const char *preamble[] = {
"/* Copyright (c) NetHack Development Team 2018. */\n", "/* Copyright (c) NetHack Development Team %d. */\n",
"/* NetHack may be freely redistributed. See license for details. */\n\n", "/* NetHack may be freely redistributed. See license for details. */\n\n",
"/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */\n\n", "/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE! */\n\n",
"#include \"hack.h\"\n", "#include \"hack.h\"\n",
"#include \"artifact.h\"\n", "#include \"artifact.h\"\n",
"#include \"func_tab.h\"\n", "#include \"func_tab.h\"\n",
"#include \"lev.h\"\n", "#include \"lev.h\"\n",
"#include \"integer.h\"\n", "#include \"integer.h\"\n",
"#include \"wintype.h\"\n", "#include \"wintype.h\"\n",
(char *)0 (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) static void output_types(fp1)
FILE *fp1; FILE *fp1;
@@ -862,10 +897,10 @@ static void generate_c_files()
int okeydokey, x, a; int okeydokey, x, a;
boolean did_i; boolean did_i;
SFDATA = fopen("../src/sfdata.c", "w"); SFDATA = fopen(SFDATA_NAME, "w");
if (!SFDATA) return; if (!SFDATA) return;
SFPROTO = fopen("../include/sfproto.h", "w"); SFPROTO = fopen(SFPROTO_NAME, "w");
if (!SFPROTO) return; if (!SFPROTO) return;
SFO_DATA = fopen("../src/sfo_data.tmp", "w"); SFO_DATA = fopen("../src/sfo_data.tmp", "w");
@@ -892,10 +927,10 @@ static void generate_c_files()
*c = '\0'; /* strip off the '\n' */ *c = '\0'; /* strip off the '\n' */
/* begin sfproto.h */ /* begin sfproto.h */
Fprintf(SFPROTO,"/* NetHack %d.%d sfproto.h\t%s */\n", Fprintf(SFPROTO,"/* NetHack %d.%d sfproto.h */\n",
VERSION_MAJOR, VERSION_MINOR, cbuf); VERSION_MAJOR, VERSION_MINOR);
for (j = 0; j < 3; ++j) 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, "#ifndef SFPROTO_H\n#define SFPROTO_H\n\n");
Fprintf(SFPROTO, "#include \"hack.h\"\n#include \"integer.h\"\n#include \"wintype.h\"\n\n" Fprintf(SFPROTO, "#include \"hack.h\"\n#include \"integer.h\"\n#include \"wintype.h\"\n\n"
"#define E extern\n\n"); "#define E extern\n\n");
@@ -950,13 +985,11 @@ static void generate_c_files()
Fprintf(SFI_PROTO, "/* generated input functions */\n"); Fprintf(SFI_PROTO, "/* generated input functions */\n");
/* begin sfdata.c */ /* 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); VERSION_MAJOR, VERSION_MINOR);
for (j = 0; preamble[j]; ++j) 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, "#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_SIMPLE 1\n");
Fprintf(SFDATA, "#define NHTYPE_COMPLEX 2\n"); Fprintf(SFDATA, "#define NHTYPE_COMPLEX 2\n");
Fprintf(SFDATA, "struct nhdatatypes_t {\n"); Fprintf(SFDATA, "struct nhdatatypes_t {\n");
+8 -4
View File
@@ -4,7 +4,11 @@
#include "winMS.h" #include "winMS.h"
#include <commdlg.h> #include <commdlg.h>
#if !defined(CROSSCOMPILE)
#include "date.h" #include "date.h"
#else
#include "config.h"
#endif
#include "patchlevel.h" #include "patchlevel.h"
#include "resource.h" #include "resource.h"
#include "mhmsg.h" #include "mhmsg.h"
@@ -1063,11 +1067,11 @@ About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
SetDlgItemText(hDlg, IDC_ABOUT_VERSION, SetDlgItemText(hDlg, IDC_ABOUT_VERSION,
NH_A2W(buf, wbuf, sizeof(wbuf))); 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, SetDlgItemText(hDlg, IDC_ABOUT_COPYRIGHT,
NH_A2W(COPYRIGHT_BANNER_A "\n" COPYRIGHT_BANNER_B NH_A2W(buf, wbuf, sizeof(wbuf)));
"\n" COPYRIGHT_BANNER_C
"\n" COPYRIGHT_BANNER_D,
wbuf, BUFSZ));
/* center dialog in the main window */ /* center dialog in the main window */
GetWindowRect(GetNHApp()->hMainWnd, &main_rt); GetWindowRect(GetNHApp()->hMainWnd, &main_rt);
+4
View File
@@ -8,7 +8,11 @@
#include "mhsplash.h" #include "mhsplash.h"
#include "mhmsg.h" #include "mhmsg.h"
#include "mhfont.h" #include "mhfont.h"
#if !defined(CROSSCOMPILE)
#include "date.h" #include "date.h"
#else
#include "config.h"
#endif
#include "patchlevel.h" #include "patchlevel.h"
#include "dlb.h" #include "dlb.h"