save/restore changes - part 3
This is the third of a series of savefile-related changes.
This adds early-days experimental support for a completely optional
'sfctool' utility (savefile conversion tool), to be able to export
a savefile's contents into a more portable format. There are likely
to be bugs at this stage. In this initial first-attempt, the export
format is a very simple ascii output.
NetHack can be built entirely, without also building this tool.
NetHack has no dependencies on the tool.
Attempts were made to minimize duplication of existing NetHack code.
To achieve that, unfortunately, #ifdef SFCTOOL and #ifndef SFCTOOL
had to be sprinkled around through some of the existing NetHack
source code, so that it could be re-used for building the utility.
The process for building the sfctool typically recompiles the source
files with #define SFCTOOL and a distinct object file with SF- is
produced.
sfctool notes:
Universal ctags is used and required to produce the sfctool utility.
Some targets were added to the Unix and Windows Makefiles to
facilitate the build process.
make sfctool
That should build a copy in util.
Note: At present, the Unix Makefiles do not copy sfctool over to the
NetHack playground during 'make install' or 'make update'.
Until that gets resolved by someone, The tool will
have to be manually copied there by the builder/admin if
desired.
cp util/sfctool ~/nh/install/games/lib/nethackdir/sfctool
Also, a separate Visual Studio sfctool.sln solution was written and
placed in sys/windows/vs. That has has only very limited testing.
Usage:
i) To convert an existing savefile to an exportascii format
that co-resides with the savefile:
sfctool -c savefile
That *must* be executed on the same platform / architecture /
data model that produced the save file in the first place.
ii) To unconvert an existing exportascii format export file to a
historical format savefile that can then be used by NetHack:
sfctool -u savefile
That must be executed on the same target platform / architecture /
data model that was used to build the NetHack that will
utilize the save file that results.
A Windows example:
sfctool -c Fred.NetHack-saved-game
That should result in creation of Fred.NetHack-saved-game.exportascii
from existing savefile:
%USERPROFILE%\AppData\Local\NetHack\3.7\Fred.NetHack-saved-game
A Unix example:
sfctool -c 1000wizard
That should result in creation of 1000wizard.exportascii.gz
from existing savefile in the playground save directory:
1000wizard.gz
Current Mechanics:
1. Makefile recipe, or script uses universal ctags to produce
util/sf.tags.
2. util/sftags is built and executed to read util/sf.tags and
generate: include/sfproto.h and src/sfdata.c.
3. util/sfctool is built from the following:
generated file compiled with -DSFCTOOL:
src/sfdata.c -> sfdata.o
existing files compiled with -DSFCTOOL:
util/sfctool.c -> sfctool.o
util/sfexpasc.c -> sfexpasc.o
src/alloc.c -> sf-alloc.o
src/monst.c -> sf-monst.o
src/objects.c -> sf-objects.o
src/sfbase.c -> sfbase.o
src/sfstruct.c -> sfstruct.o
src/nhlua.c -> sf-nhlua.o
util/panic.c -> panic.o
src/date.c -> sf-date.o
src/decl.c -> sf-decl.o
src/artifact.c -> sf-artifact.o
src/dungeon.c -> sf-dungeon.o
src/end.c -> sf-end.o
src/engrave.c -> sf-engrave.o
src/cfgfiles.c -> sf-cfgfiles.o
src/files.c -> sf-files.o
src/light.c -> sf-light.o
src/mdlib.c -> sf-mdlib.o
src/mkmaze.c -> sf-mkmaze.o
src/mkroom.c -> sf-mkroom.o
src/o_init.c -> sf-o_init.o
src/region.c -> sf-region.o
src/restore.c -> sf-restore.o
src/rumors.c -> sf-rumors.o
src/sys.c -> sf-sys.o
src/timeout.c -> sf-timeout.o
src/track.c -> sf-track.o
src/version.c -> sf-version.o
src/worm.c -> sf-worm.o
src/strutil.c -> strutil.o
This commit is contained in:
9
README
9
README
@@ -57,10 +57,11 @@ considered spoilers:
|
||||
level once that square's location becomes known (found or magic
|
||||
mapped); goes away once sanctum temple is found (entered or high altar
|
||||
mapped)
|
||||
- savefile: add support to deconstruct internal data structures down into
|
||||
their individual fields and save those fields instead of the entire
|
||||
struct
|
||||
- savefile: use little-endian format for fields where that makes a difference
|
||||
- savefile: add support for a tool to deconstruct data structures,
|
||||
that get stored in a savefile, down into their individual fields and
|
||||
save those individual fields instead of the entire struct. The
|
||||
intention is to provide a way to export and transport savefiles
|
||||
between platforms, architectures and data models.
|
||||
|
||||
- - - - - - - - - - -
|
||||
|
||||
|
||||
2
include/.gitignore
vendored
2
include/.gitignore
vendored
@@ -15,3 +15,5 @@ tile.h
|
||||
win32api.h
|
||||
# really obsolete...
|
||||
.cvsignore
|
||||
sfproto.h
|
||||
|
||||
|
||||
@@ -1068,6 +1068,10 @@ extern char **get_saved_games(void);
|
||||
extern void free_saved_games(char **);
|
||||
extern void nh_compress(const char *);
|
||||
extern void nh_uncompress(const char *);
|
||||
extern void nh_sfconvert(const char *);
|
||||
extern void nh_sfunconvert(const char *);
|
||||
extern int delete_convertedfile(const char *);
|
||||
extern void free_convert_filenames(void);
|
||||
extern boolean lock_file(const char *, int, int) NONNULLARG1;
|
||||
extern void unlock_file(const char *) NONNULLARG1;
|
||||
extern void check_recordfile(const char *);
|
||||
@@ -1093,6 +1097,7 @@ extern boolean read_tribute(const char *, const char *, int, char *, int,
|
||||
extern boolean Death_quote(char *, int) NONNULLARG1;
|
||||
extern void livelog_add(long ll_type, const char *) NONNULLARG2;
|
||||
ATTRNORETURN extern void do_deferred_showpaths(int) NORETURN;
|
||||
extern boolean contains_directory(const char *);
|
||||
|
||||
/* ### fountain.c ### */
|
||||
|
||||
@@ -1969,7 +1974,7 @@ extern int dosuspend(void);
|
||||
extern void nt_regularize(char *);
|
||||
extern int(*nt_kbhit)(void);
|
||||
extern void Delay(int);
|
||||
extern boolean contains_directory(const char *);
|
||||
boolean get_user_home_folder(char *, size_t);
|
||||
# ifdef CRASHREPORT
|
||||
struct CRctxt;
|
||||
extern struct CRctxt *ctxp;
|
||||
@@ -2678,6 +2683,12 @@ extern boolean lookup_id_mapping(unsigned, unsigned *) NONNULLARG2;
|
||||
/* extern void reset_restpref(void); */
|
||||
/* extern void set_restpref(const char *); */
|
||||
/* extern void set_savepref(const char *); */
|
||||
#ifdef SFCTOOL
|
||||
void rest_bubbles(NHFILE *);
|
||||
void restore_gamelog(NHFILE *);
|
||||
boolean restgamestate(NHFILE *);
|
||||
void restore_msghistory(NHFILE *);
|
||||
#endif
|
||||
|
||||
/* ### rip.c ### */
|
||||
|
||||
|
||||
@@ -429,6 +429,7 @@ extern struct nomakedefs_s nomakedefs;
|
||||
|
||||
/* PANICTRACE: Always defined for NH_DEVEL_STATUS != NH_STATUS_RELEASED
|
||||
but only for supported platforms. */
|
||||
#ifndef NOPANICTRACE
|
||||
#ifdef UNIX
|
||||
#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
|
||||
/* see end.c */
|
||||
@@ -439,6 +440,7 @@ extern struct nomakedefs_s nomakedefs;
|
||||
#endif /* CROSS_TO_WASM | CROSS_TO_MSDOS */
|
||||
#endif /* NH_DEVEL_STATUS != NH_STATUS_RELEASED */
|
||||
#endif /* UNIX */
|
||||
#endif /* !NOPANICTRACE */
|
||||
|
||||
/* The following are meaningless if PANICTRACE is not defined: */
|
||||
#if defined(__linux__) && defined(__GLIBC__) && (__GLIBC__ >= 2)
|
||||
@@ -569,5 +571,6 @@ typedef enum NHL_pcall_action {
|
||||
NHLpa_impossible
|
||||
} NHL_pcall_action;
|
||||
|
||||
#define SFCTOOL_BIT (1UL << 30) /* needed for upcoming savefile handling */
|
||||
#define SFCTOOL_BIT (1UL << 30)
|
||||
|
||||
#endif /* GLOBAL_H */
|
||||
|
||||
@@ -954,9 +954,9 @@ struct xlock_s {
|
||||
#define NHF_BONESFILE 3
|
||||
/* modes */
|
||||
#define READING 0x0
|
||||
#define COUNTING 0x1
|
||||
#define WRITING 0x2
|
||||
#define FREEING 0x4
|
||||
#define COUNTING 0x01
|
||||
#define WRITING 0x02
|
||||
#define FREEING 0x04
|
||||
#define CONVERTING 0x08
|
||||
#define UNCONVERTING 0x10
|
||||
#if 0
|
||||
@@ -972,7 +972,7 @@ struct xlock_s {
|
||||
enum saveformats {
|
||||
invalid = 0,
|
||||
historical = 1, /* entire struct, binary, as-is */
|
||||
cnvascii = 2, /* each field, ascii text */
|
||||
exportascii = 2, /* each field written out as ascii text */
|
||||
NUM_SAVEFORMATS
|
||||
};
|
||||
|
||||
@@ -984,11 +984,11 @@ struct fieldlevel_content {
|
||||
|
||||
struct nh_file {
|
||||
int fd; /* for traditional structlevel binary writes */
|
||||
int mode; /* holds READING, WRITING, or FREEING modes */
|
||||
int mode; /* holds READING, WRITING, FREEING, CONVERTING modes */
|
||||
int ftype; /* NHF_LEVELFILE, NHF_SAVEFILE, or NHF_BONESFILE */
|
||||
int fnidx; /* index of procs for fieldlevel saves */
|
||||
long count; /* holds current line count for default style file,
|
||||
field count for binary style */
|
||||
long rcount, /* read count since opening */
|
||||
wcount; /* write count since opening */
|
||||
boolean structlevel; /* traditional structure binary saves */
|
||||
boolean fieldlevel; /* fieldlevel saves each field individually */
|
||||
boolean addinfo; /* if set, some additional context info from core */
|
||||
|
||||
@@ -23,7 +23,7 @@ extern void sfo_uint32(NHFILE *, uint32 *, const char *);
|
||||
extern void sfo_uint64(NHFILE *, uint64 *, const char *);
|
||||
extern void sfo_size_t(NHFILE *, size_t *, const char *);
|
||||
extern void sfo_time_t(NHFILE *, time_t *, const char *);
|
||||
|
||||
//extern void sfo_str(NHFILE *, char *, const char *, int);
|
||||
extern void sfo_arti_info(NHFILE *nhfp,
|
||||
struct arti_info *d_arti_info,
|
||||
const char *myname);
|
||||
@@ -199,7 +199,7 @@ extern void sfi_ulong(NHFILE *, ulong *, const char *);
|
||||
#define Sfo_uint64(a,b,c) sfo_uint64(a, b, c)
|
||||
#define Sfo_size_t(a,b,c) sfo_size_t(a, b, c)
|
||||
#define Sfo_time_t(a,b,c) sfo_time_t(a, b, c)
|
||||
|
||||
#define Sfo_str(a,b,c) sfo_str(a, b, c)
|
||||
#define Sfo_arti_info(a,b,c) sfo_arti_info(a, b, c)
|
||||
#define Sfo_dgn_topology(a,b,c) sfo_dgn_topology(a, b, c)
|
||||
#define Sfo_dungeon(a,b,c) sfo_dungeon(a, b, c)
|
||||
@@ -471,7 +471,7 @@ extern void sfi_ulong(NHFILE *, ulong *, const char *);
|
||||
#define Sfo_uint64(a,b,c) sfo(a, b, c)
|
||||
#define Sfo_size_t(a,b,c) sfo(a, b, c)
|
||||
#define Sfo_time_t(a,b,c) sfo(a, b, c)
|
||||
|
||||
#define Sfo_str(a,b,c) sfo(a, b, c)
|
||||
#define Sfo_arti_info(a,b,c) sfo(a, b, c)
|
||||
#define Sfo_dgn_topology(a,b,c) sfo(a, b, c)
|
||||
#define Sfo_dungeon(a,b,c) sfo(a, b, c)
|
||||
|
||||
@@ -97,11 +97,11 @@ SF_PROTO_X(char, char);
|
||||
#undef SF_PROTO_C
|
||||
#undef SF_PROTO_X
|
||||
|
||||
#define SF_ENTRY(dtyp) \
|
||||
#define SF_ENTRY(dtyp) \
|
||||
void (*sf_##dtyp)(NHFILE *, dtyp *, const char *)
|
||||
#define SF_ENTRY_C(keyw, dtyp) \
|
||||
#define SF_ENTRY_C(keyw, dtyp) \
|
||||
void (*sf_##dtyp)(NHFILE *, keyw dtyp *, const char *)
|
||||
#define SF_ENTRY_X(xxx, dtyp) \
|
||||
#define SF_ENTRY_X(xxx, dtyp) \
|
||||
void (*sf_##dtyp)(NHFILE *, xxx *, const char *, int bfsz)
|
||||
|
||||
struct sf_procs {
|
||||
@@ -189,11 +189,14 @@ struct sf_fieldlevel_procs {
|
||||
struct sf_procs fn_x; /* called for fieldlevel */
|
||||
};
|
||||
extern struct sf_structlevel_procs sfoprocs[NUM_SAVEFORMATS], sfiprocs[NUM_SAVEFORMATS];
|
||||
extern void sf_setprocs(int, struct sf_structlevel_procs *, struct sf_structlevel_procs *);
|
||||
extern void sf_setflprocs(int, struct sf_fieldlevel_procs *, struct sf_fieldlevel_procs *);
|
||||
extern struct sf_structlevel_procs sfoprocs[NUM_SAVEFORMATS], sfiprocs[NUM_SAVEFORMATS];
|
||||
extern struct sf_fieldlevel_procs sfoflprocs[NUM_SAVEFORMATS], sfiflprocs[NUM_SAVEFORMATS];
|
||||
extern struct sf_structlevel_procs historical_sfo_procs;
|
||||
extern struct sf_structlevel_procs historical_sfi_procs;
|
||||
extern struct sf_fieldlevel_procs cnv_sfo_procs;
|
||||
extern struct sf_fieldlevel_procs cnv_sfi_procs;
|
||||
extern struct sf_fieldlevel_procs exportascii_sfo_procs;
|
||||
extern struct sf_fieldlevel_procs exportascii_sfi_procs;
|
||||
|
||||
#endif /* SFPROCS_H */
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include "artifact.h"
|
||||
#include "artilist.h"
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
/*
|
||||
* Note: both artilist[] and artiexist[] have a dummy element #0,
|
||||
* so loops over them should normally start at #1. The primary
|
||||
@@ -57,6 +59,7 @@ staticfn void dispose_of_orig_obj(struct obj *);
|
||||
Note: this will still break if they have more than about half the number
|
||||
of hit points that will fit in a 15 bit integer. */
|
||||
#define FATAL_DAMAGE_MODIFIER 200
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
/* arti_info struct definition moved to artifact.h */
|
||||
|
||||
@@ -72,6 +75,7 @@ static xint16 artidisco[NROFARTIFACTS];
|
||||
* and restored but that is done through this file so they can be local.
|
||||
*/
|
||||
|
||||
#ifndef SFCTOOL
|
||||
static const struct arti_info zero_artiexist = {0}; /* all bits zero */
|
||||
|
||||
staticfn void hack_artifacts(void);
|
||||
@@ -121,6 +125,8 @@ save_artifacts(NHFILE *nhfp)
|
||||
Sfo_xint16(nhfp, &artidisco[i], "artidisco");
|
||||
}
|
||||
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
void
|
||||
restore_artifacts(NHFILE *nhfp)
|
||||
{
|
||||
@@ -130,9 +136,15 @@ restore_artifacts(NHFILE *nhfp)
|
||||
Sfi_arti_info(nhfp, &artiexist[i], "artiexist");
|
||||
for (i = 0; i < NROFARTIFACTS; ++i)
|
||||
Sfi_short(nhfp, &artidisco[i], "artidisco");
|
||||
#ifndef SFCTOOL
|
||||
hack_artifacts(); /* redo non-saved special cases */
|
||||
#else
|
||||
nhUse(artilist);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
const char *
|
||||
artiname(int artinum)
|
||||
{
|
||||
@@ -2789,5 +2801,6 @@ permapoisoned(struct obj *obj)
|
||||
{
|
||||
return (obj && is_art(obj, ART_GRIMTOOTH));
|
||||
}
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
/*artifact.c*/
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "hack.h"
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn boolean no_bones_level(d_level *);
|
||||
staticfn void goodfruit(int);
|
||||
staticfn void resetobjs(struct obj *, boolean);
|
||||
@@ -622,6 +623,8 @@ savebones(int how, time_t when, struct obj *corpse)
|
||||
compress_bonesfile();
|
||||
}
|
||||
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
int
|
||||
getbones(void)
|
||||
{
|
||||
@@ -630,6 +633,7 @@ getbones(void)
|
||||
char c = 0, *bonesid,
|
||||
oldbonesid[40] = { 0 }; /* was [10]; more should be safer */
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (discover) /* save bones files for real games */
|
||||
return 0;
|
||||
|
||||
@@ -641,6 +645,7 @@ getbones(void)
|
||||
return 0;
|
||||
if (no_bones_level(&u.uz))
|
||||
return 0;
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
nhfp = open_bonesfile(&u.uz, &bonesid);
|
||||
if (!nhfp)
|
||||
@@ -740,6 +745,8 @@ getbones(void)
|
||||
return ok;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
/* check whether current level contains bones from a particular player */
|
||||
boolean
|
||||
bones_include_name(const char *name)
|
||||
@@ -821,4 +828,6 @@ free_ebones(struct monst *mtmp)
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
/*bones.c*/
|
||||
|
||||
@@ -35,6 +35,7 @@ staticfn char *is_config_section(char *);
|
||||
staticfn boolean handle_config_section(char *);
|
||||
boolean parse_config_line(char *);
|
||||
staticfn char *find_optparam(const char *);
|
||||
#ifndef SFCTOOL
|
||||
staticfn boolean cnf_line_OPTIONS(char *);
|
||||
staticfn boolean cnf_line_AUTOPICKUP_EXCEPTION(char *);
|
||||
staticfn boolean cnf_line_BINDINGS(char *);
|
||||
@@ -53,6 +54,7 @@ staticfn boolean cnf_line_NAME(char *);
|
||||
staticfn boolean cnf_line_ROLE(char *);
|
||||
staticfn boolean cnf_line_dogname(char *);
|
||||
staticfn boolean cnf_line_catname(char *);
|
||||
#endif /* SFCTOOL */
|
||||
#ifdef SYSCF
|
||||
staticfn boolean cnf_line_WIZARDS(char *);
|
||||
staticfn boolean cnf_line_SHELLERS(char *);
|
||||
@@ -80,12 +82,12 @@ staticfn boolean cnf_line_PANICTRACE_GDB(char *);
|
||||
staticfn boolean cnf_line_GDBPATH(char *);
|
||||
staticfn boolean cnf_line_GREPPATH(char *);
|
||||
staticfn boolean cnf_line_CRASHREPORTURL(char *);
|
||||
staticfn boolean cnf_line_SAVEFORMAT(char *);
|
||||
staticfn boolean cnf_line_BONESFORMAT(char *);
|
||||
staticfn boolean cnf_line_ACCESSIBILITY(char *);
|
||||
|
||||
staticfn boolean cnf_line_PORTABLE_DEVICE_PATHS(char *);
|
||||
staticfn void parseformat(int *, char *);
|
||||
#endif /* SYSCF */
|
||||
#ifndef SFCTOOL
|
||||
staticfn boolean cnf_line_BOULDER(char *);
|
||||
staticfn boolean cnf_line_MENUCOLOR(char *);
|
||||
staticfn boolean cnf_line_HILITE_STATUS(char *);
|
||||
@@ -101,6 +103,7 @@ staticfn boolean cnf_line_QT_TILEWIDTH(char *);
|
||||
staticfn boolean cnf_line_QT_TILEHEIGHT(char *);
|
||||
staticfn boolean cnf_line_QT_FONTSIZE(char *);
|
||||
staticfn boolean cnf_line_QT_COMPACT(char *);
|
||||
#endif /* SFCTOOL */
|
||||
struct _cnf_parser_state; /* defined below (far below...) */
|
||||
staticfn void cnf_parser_init(struct _cnf_parser_state *parser);
|
||||
staticfn void cnf_parser_done(struct _cnf_parser_state *parser);
|
||||
@@ -109,6 +112,13 @@ staticfn void parse_conf_buf(struct _cnf_parser_state *parser,
|
||||
/* next one is in extern.h; why here too? */
|
||||
boolean parse_conf_str(const char *str, boolean (*proc)(char *arg));
|
||||
|
||||
#ifdef SFCTOOL
|
||||
#ifdef wait_synch
|
||||
#undef wait_synch
|
||||
#endif
|
||||
#define wait_synch()
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
/* ---------- BEGIN CONFIG FILE HANDLING ----------- */
|
||||
|
||||
/* used for messaging. Also used in options.c */
|
||||
@@ -151,6 +161,8 @@ get_default_configfile(void)
|
||||
const char *backward_compat_configfile = "nethack.cnf";
|
||||
#endif
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
/* #saveoptions - save config options into file */
|
||||
int
|
||||
do_write_config_file(void)
|
||||
@@ -195,6 +207,7 @@ do_write_config_file(void)
|
||||
}
|
||||
return ECMD_OK;
|
||||
}
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
/* remember the name of the file we're accessing;
|
||||
if may be used in option reject messages */
|
||||
@@ -455,7 +468,11 @@ choose_random_part(char *str, char sep)
|
||||
nsep++;
|
||||
str++;
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
csep = rn2(nsep);
|
||||
#else
|
||||
csep = 1;
|
||||
#endif
|
||||
str = begin;
|
||||
while ((csep > 0) && *str) {
|
||||
str++;
|
||||
@@ -571,6 +588,8 @@ find_optparam(const char *buf)
|
||||
return bufp;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
staticfn boolean
|
||||
cnf_line_OPTIONS(char *origbuf)
|
||||
{
|
||||
@@ -759,6 +778,7 @@ cnf_line_catname(char *bufp)
|
||||
(void) strncpy(gc.catname, bufp, PL_PSIZ - 1);
|
||||
return TRUE;
|
||||
}
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
#ifdef SYSCF
|
||||
|
||||
@@ -1088,20 +1108,6 @@ cnf_line_CRASHREPORTURL(char *bufp)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
staticfn boolean
|
||||
cnf_line_SAVEFORMAT(char *bufp)
|
||||
{
|
||||
parseformat(sysopt.saveformat, bufp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
staticfn boolean
|
||||
cnf_line_BONESFORMAT(char *bufp)
|
||||
{
|
||||
parseformat(sysopt.bonesformat, bufp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
staticfn boolean
|
||||
cnf_line_ACCESSIBILITY(char *bufp)
|
||||
{
|
||||
@@ -1135,6 +1141,8 @@ cnf_line_PORTABLE_DEVICE_PATHS(char *bufp)
|
||||
}
|
||||
#endif /* SYSCF */
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
staticfn boolean
|
||||
cnf_line_BOULDER(char *bufp)
|
||||
{
|
||||
@@ -1271,6 +1279,7 @@ cnf_line_QT_COMPACT(char *bufp)
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
typedef boolean (*config_line_stmt_func)(char *);
|
||||
|
||||
@@ -1288,6 +1297,7 @@ static const struct match_config_line_stmt {
|
||||
boolean origbuf;
|
||||
config_line_stmt_func fn;
|
||||
} config_line_stmt[] = {
|
||||
#ifndef SFCTOOL
|
||||
/* OPTIONS handled separately */
|
||||
{ "OPTIONS", 4, FALSE, TRUE, cnf_line_OPTIONS },
|
||||
CNFL_N(AUTOPICKUP_EXCEPTION, 5),
|
||||
@@ -1309,6 +1319,7 @@ static const struct match_config_line_stmt {
|
||||
CNFL_NA(CHARACTER, 4, ROLE),
|
||||
CNFL_N(dogname, 3),
|
||||
CNFL_N(catname, 3),
|
||||
#endif /* SFCTOOL */
|
||||
#ifdef SYSCF
|
||||
CNFL_S(WIZARDS, 7),
|
||||
CNFL_S(SHELLERS, 8),
|
||||
@@ -1336,11 +1347,10 @@ static const struct match_config_line_stmt {
|
||||
CNFL_S(CRASHREPORTURL, 13),
|
||||
CNFL_S(GDBPATH, 7),
|
||||
CNFL_S(GREPPATH, 7),
|
||||
CNFL_S(SAVEFORMAT, 10),
|
||||
CNFL_S(BONESFORMAT, 11),
|
||||
CNFL_S(ACCESSIBILITY, 13),
|
||||
CNFL_S(PORTABLE_DEVICE_PATHS, 8),
|
||||
#endif /*SYSCF*/
|
||||
#ifndef SFCTOOL
|
||||
CNFL_N(BOULDER, 3),
|
||||
CNFL_N(MENUCOLOR, 9),
|
||||
CNFL_N(HILITE_STATUS, 6),
|
||||
@@ -1356,6 +1366,7 @@ static const struct match_config_line_stmt {
|
||||
CNFL_N(QT_TILEHEIGHT, 13),
|
||||
CNFL_N(QT_FONTSIZE, 11),
|
||||
CNFL_N(QT_COMPACT, 10)
|
||||
#endif /* SFCTOOL */
|
||||
};
|
||||
|
||||
#undef CNFL_N
|
||||
@@ -1485,6 +1496,7 @@ config_error_nextline(const char *line)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
int
|
||||
l_get_config_errors(lua_State *L)
|
||||
{
|
||||
@@ -1510,6 +1522,7 @@ l_get_config_errors(lua_State *L)
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
/* varargs 'config_error_add()' moved to pline.c */
|
||||
void
|
||||
@@ -1600,9 +1613,10 @@ read_config_file(const char *filename, int src)
|
||||
|
||||
if (!(fp = fopen_config_file(filename, src)))
|
||||
return FALSE;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* begin detection of duplicate configfile options */
|
||||
reset_duplicate_opt_detection();
|
||||
#endif /* SFCTOOL */
|
||||
free_config_sections();
|
||||
iflags.parse_config_file_src = src;
|
||||
|
||||
@@ -1610,8 +1624,10 @@ read_config_file(const char *filename, int src)
|
||||
(void) fclose(fp);
|
||||
|
||||
free_config_sections();
|
||||
#ifndef SFCTOOL
|
||||
/* turn off detection of duplicate configfile options */
|
||||
reset_duplicate_opt_detection();
|
||||
#endif /* SFCTOOL */
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -1859,38 +1875,6 @@ vconfig_error_add(const char *str, va_list the_args)
|
||||
}
|
||||
|
||||
#ifdef SYSCF
|
||||
staticfn void
|
||||
parseformat(int *arr, char *str)
|
||||
{
|
||||
const char *legal[] = { "historical", "cnv" };
|
||||
int i, kwi = 0, words = 0;
|
||||
char *p = str, *keywords[2] = { NULL };
|
||||
|
||||
while (*p) {
|
||||
while (*p && isspace((uchar) *p)) {
|
||||
*p = '\0';
|
||||
p++;
|
||||
}
|
||||
if (*p) {
|
||||
words++;
|
||||
if (kwi < 2)
|
||||
keywords[kwi++] = p;
|
||||
}
|
||||
while (*p && !isspace((uchar) *p))
|
||||
p++;
|
||||
}
|
||||
if (!words) {
|
||||
impossible("missing format list");
|
||||
return;
|
||||
}
|
||||
while (--kwi >= 0)
|
||||
if (kwi < 2) {
|
||||
for (i = 0; i < SIZE(legal); ++i) {
|
||||
if (!strcmpi(keywords[kwi], legal[i]))
|
||||
arr[kwi] = i + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef SYSCF_FILE
|
||||
void
|
||||
assure_syscf_file(void)
|
||||
@@ -1924,8 +1908,10 @@ assure_syscf_file(void)
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
if (gd.deferred_showpaths)
|
||||
do_deferred_showpaths(1); /* does not return */
|
||||
#endif
|
||||
raw_printf("Unable to open SYSCF_FILE.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ struct lchoice {
|
||||
|
||||
static mapseen *load_mapseen(NHFILE *);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
#if 0
|
||||
staticfn void Fread(genericptr_t, int, int, dlb *);
|
||||
#endif
|
||||
@@ -202,6 +203,7 @@ save_dungeon(
|
||||
svm.mapseenchn = 0;
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* Restore the dungeon structures. */
|
||||
void
|
||||
@@ -259,6 +261,7 @@ restore_dungeon(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
#if 0
|
||||
staticfn void
|
||||
Fread(genericptr_t ptr, int size, int nitems, dlb *stream)
|
||||
@@ -1428,6 +1431,7 @@ depth(d_level *lev)
|
||||
{
|
||||
return (schar) (svd.dungeons[lev->dnum].depth_start + lev->dlevel - 1);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* are "lev1" and "lev2" actually the same? */
|
||||
boolean
|
||||
@@ -1437,6 +1441,7 @@ on_level(d_level *lev1, d_level *lev2)
|
||||
&& lev1->dlevel == lev2->dlevel);
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* is this level referenced in the special level chain? */
|
||||
s_level *
|
||||
Is_special(d_level *lev)
|
||||
@@ -1602,6 +1607,8 @@ u_on_rndspot(int upflag)
|
||||
switch_terrain();
|
||||
}
|
||||
|
||||
#endif /* !SFCTOOL */
|
||||
#ifndef SFCTOOL
|
||||
boolean
|
||||
Is_botlevel(d_level *lev)
|
||||
{
|
||||
@@ -2536,6 +2543,7 @@ donamelevel(void)
|
||||
query_annotation((d_level *) 0);
|
||||
return ECMD_OK;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* exclusion zones */
|
||||
void
|
||||
@@ -2562,7 +2570,7 @@ save_exclusions(NHFILE *nhfp)
|
||||
;
|
||||
|
||||
if (update_file(nhfp)) {
|
||||
Sfo_int(nhfp, &nez, "exclusion-count");
|
||||
Sfo_int(nhfp, &nez, "exclusion_count");
|
||||
for (ez = sve.exclusion_zones; ez; ez = ez->next) {
|
||||
Sfo_xint16(nhfp, &ez->zonetype, "exclusion-zonetype");
|
||||
Sfo_coordxy(nhfp, &ez->lx, "exclusion-lx");
|
||||
@@ -2593,6 +2601,8 @@ load_exclusions(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
/* find the particular mapseen object in the chain; may return null */
|
||||
staticfn mapseen *
|
||||
find_mapseen(d_level *lev)
|
||||
@@ -2673,6 +2683,7 @@ save_mapseen(NHFILE *nhfp, mapseen *mptr)
|
||||
}
|
||||
savecemetery(nhfp, &mptr->final_resting_place);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
staticfn mapseen *
|
||||
load_mapseen(NHFILE *nhfp)
|
||||
@@ -2709,6 +2720,7 @@ load_mapseen(NHFILE *nhfp)
|
||||
restcemetery(nhfp, &load->final_resting_place);
|
||||
return load;
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
|
||||
DISABLE_WARNING_FORMAT_NONLITERAL
|
||||
|
||||
@@ -3682,6 +3694,7 @@ print_mapseen(
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
#undef OF_INTEREST
|
||||
#undef ADDNTOBUF
|
||||
#undef ADDTOBUF
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#endif
|
||||
#include "dlb.h"
|
||||
|
||||
#ifndef SFCTOOL
|
||||
#ifndef NO_SIGNAL
|
||||
staticfn void done_intr(int);
|
||||
# if defined(UNIX) || defined(VMS) || defined(__EMX__)
|
||||
@@ -33,9 +34,11 @@ staticfn void dump_plines(void);
|
||||
#endif
|
||||
staticfn void dump_everything(int, time_t);
|
||||
staticfn void fixup_death(int);
|
||||
#endif /* SFCTOOL */
|
||||
staticfn int wordcount(char *);
|
||||
staticfn void bel_copy1(char **, char *);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
#define done_stopprint program_state.stopprint
|
||||
|
||||
/*
|
||||
@@ -1767,6 +1770,7 @@ save_killers(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
void
|
||||
restore_killers(NHFILE *nhfp)
|
||||
|
||||
@@ -37,7 +37,7 @@ struct _doengrave_ctx {
|
||||
|
||||
size_t len; /* # of nonspace chars of new engraving text */
|
||||
};
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn int stylus_ok(struct obj *);
|
||||
staticfn boolean u_can_engrave(void);
|
||||
staticfn void doengrave_ctx_init(struct _doengrave_ctx *);
|
||||
@@ -1542,6 +1542,7 @@ save_engravings(NHFILE *nhfp)
|
||||
if (release_data(nhfp))
|
||||
head_engr = 0;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
void
|
||||
rest_engravings(NHFILE *nhfp)
|
||||
@@ -1581,6 +1582,7 @@ rest_engravings(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
DISABLE_WARNING_FORMAT_NONLITERAL
|
||||
|
||||
/* to support '#stats' wizard-mode command */
|
||||
@@ -1728,5 +1730,5 @@ blengr(void)
|
||||
{
|
||||
return ROLL_FROM(blind_writing);
|
||||
}
|
||||
|
||||
#endif /* !SFCTOOL */
|
||||
/*engrave.c*/
|
||||
|
||||
263
src/files.c
263
src/files.c
@@ -12,6 +12,28 @@
|
||||
#include "hack.h"
|
||||
#include "dlb.h"
|
||||
|
||||
#ifdef SFCTOOL
|
||||
#ifdef TTY_GRAPHICS
|
||||
#undef TTY_GRAPHICS
|
||||
#endif
|
||||
#ifdef mark_synch
|
||||
#undef mark_synch
|
||||
#endif
|
||||
#define mark_synch()
|
||||
#ifdef raw_print
|
||||
#undef raw_print
|
||||
#endif
|
||||
#define raw_print(a)
|
||||
#ifdef WINDOWPORT
|
||||
#undef WINDOWPORT
|
||||
#endif
|
||||
#define WINDOWPORT(x) FALSE
|
||||
#ifdef clear_nhwindow
|
||||
#undef clear_nhwindow
|
||||
#endif
|
||||
#define clear_nhwindow(x)
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
#ifdef TTY_GRAPHICS
|
||||
#include "wintty.h" /* more() */
|
||||
#endif
|
||||
@@ -125,8 +147,13 @@ extern boolean get_user_home_folder(char *, size_t);
|
||||
#define PRAGMA_UNUSED
|
||||
#endif
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn NHFILE *new_nhfile(void);
|
||||
staticfn void free_nhfile(NHFILE *);
|
||||
#else
|
||||
NHFILE *new_nhfile(void);
|
||||
void free_nhfile(NHFILE *);
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
#ifdef SELECTSAVED
|
||||
staticfn int QSORTCALLBACK strcmp_wrap(const void *, const void *);
|
||||
@@ -144,6 +171,12 @@ staticfn boolean make_compressed_name(const char *, char *);
|
||||
#endif
|
||||
|
||||
staticfn NHFILE *problematic_savefile(int, const char *);
|
||||
#ifndef SFCTOOL
|
||||
staticfn int doconvert_file(const char *, int, boolean);
|
||||
#endif /* SFCTOOL */
|
||||
staticfn boolean make_converted_name(const char *);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn NHFILE *viable_nhfile(NHFILE *);
|
||||
#ifdef SELECTSAVED
|
||||
staticfn int QSORTCALLBACK strcmp_wrap(const void *, const void *);
|
||||
@@ -159,6 +192,7 @@ boolean proc_wizkit_line(char *buf);
|
||||
void read_wizkit(void); /* in extern.h; why here too? */
|
||||
staticfn FILE *fopen_sym_file(void);
|
||||
staticfn NHFILE *viable_nhfile(NHFILE *);
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* return a file's name without its path and optionally trailing 'type' */
|
||||
const char *
|
||||
@@ -354,6 +388,7 @@ fqname(const char *basenam,
|
||||
#endif /* !PREFIXES_IN_USE */
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* reasonbuf must be at least BUFSZ, supplied by caller */
|
||||
int
|
||||
validate_prefix_locations(char *reasonbuf)
|
||||
@@ -414,6 +449,7 @@ fopen_datafile(const char *filename, const char *mode, int prefix)
|
||||
fp = fopen(filename, mode);
|
||||
return fp;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* ---------- EXTERNAL FILE SUPPORT ----------- */
|
||||
|
||||
@@ -433,7 +469,7 @@ zero_nhfile(NHFILE *nhfp)
|
||||
nhfp->fpdef = (FILE *) 0;
|
||||
nhfp->fplog = (FILE *) 0;
|
||||
nhfp->fpdebug = (FILE *) 0;
|
||||
nhfp->count = 0;
|
||||
nhfp->rcount = nhfp->wcount = 0;
|
||||
nhfp->eof = FALSE;
|
||||
nhfp->fnidx = 0;
|
||||
nhfp->style.deflt = FALSE;
|
||||
@@ -441,7 +477,10 @@ zero_nhfile(NHFILE *nhfp)
|
||||
nhfp->nhfpconvert = 0;
|
||||
}
|
||||
|
||||
staticfn NHFILE *
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif
|
||||
NHFILE *
|
||||
new_nhfile(void)
|
||||
{
|
||||
NHFILE *nhfp = (NHFILE *) alloc(sizeof(NHFILE));
|
||||
@@ -450,7 +489,10 @@ new_nhfile(void)
|
||||
return nhfp;
|
||||
}
|
||||
|
||||
staticfn void
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif
|
||||
void
|
||||
free_nhfile(NHFILE *nhfp)
|
||||
{
|
||||
if (nhfp) {
|
||||
@@ -477,13 +519,18 @@ close_nhfile(NHFILE *nhfp)
|
||||
void
|
||||
rewind_nhfile(NHFILE *nhfp)
|
||||
{
|
||||
if (nhfp->structlevel) {
|
||||
#ifdef BSD
|
||||
(void) lseek(nhfp->fd, 0L, 0);
|
||||
(void) lseek(nhfp->fd, 0L, 0);
|
||||
#else
|
||||
(void) lseek(nhfp->fd, (off_t) 0, 0);
|
||||
(void) lseek(nhfp->fd, (off_t) 0, 0);
|
||||
#endif
|
||||
} else {
|
||||
rewind(nhfp->fpdef);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn NHFILE *
|
||||
viable_nhfile(NHFILE *nhfp)
|
||||
{
|
||||
@@ -517,6 +564,7 @@ viable_nhfile(NHFILE *nhfp)
|
||||
}
|
||||
return nhfp;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
int
|
||||
nhclose(int fd)
|
||||
@@ -534,6 +582,7 @@ nhclose(int fd)
|
||||
|
||||
/* ---------- BEGIN LEVEL FILE HANDLING ----------- */
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* Construct a file name for a level-type file, which is of the form
|
||||
* something.level (with any old level stripped off).
|
||||
* This assumes there is space on the end of 'file' to append
|
||||
@@ -881,7 +930,7 @@ open_bonesfile(d_level *lev, char **bonesid)
|
||||
nhfp->mode = READING;
|
||||
nhfp->addinfo = TRUE;
|
||||
nhfp->style.deflt = TRUE;
|
||||
nhfp->style.binary = (sysopt.bonesformat[0] != cnvascii);
|
||||
nhfp->style.binary = (sysopt.bonesformat[0] != exportascii);
|
||||
nhfp->fnidx = sysopt.bonesformat[0];
|
||||
nhfp->fd = -1;
|
||||
nhfp->fpdef = fopen(fq_bones, nhfp->style.binary ? RDBMODE : RDTMODE);
|
||||
@@ -912,6 +961,7 @@ delete_bonesfile(d_level *lev)
|
||||
|
||||
(void) set_bonesfile_name(gb.bones, lev);
|
||||
reslt = unlink(fqname(gb.bones, BONESPREFIX, 0));
|
||||
delete_convertedfile(fqname(gb.bones, BONESPREFIX, 0));
|
||||
return !(reslt < 0);
|
||||
}
|
||||
|
||||
@@ -920,8 +970,10 @@ delete_bonesfile(d_level *lev)
|
||||
void
|
||||
compress_bonesfile(void)
|
||||
{
|
||||
nh_sfconvert(fqname(gb.bones, BONESPREFIX, 0));
|
||||
nh_compress(fqname(gb.bones, BONESPREFIX, 0));
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* ---------- END BONES FILE HANDLING ----------- */
|
||||
|
||||
@@ -1035,6 +1087,7 @@ set_savefile_name(boolean regularize_it)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
#ifdef INSURANCE
|
||||
void
|
||||
save_savefile_name(NHFILE *nhfp)
|
||||
@@ -1172,6 +1225,7 @@ delete_savefile(void)
|
||||
const char *sfname = fqname(gs.SAVEF, SAVEPREFIX, 0);
|
||||
|
||||
(void) unlink(sfname);
|
||||
(void) delete_convertedfile(sfname);
|
||||
return 0; /* for restore_saved_game() (ex-xxxmain.c) test */
|
||||
}
|
||||
|
||||
@@ -1439,6 +1493,7 @@ free_saved_games(char **saved)
|
||||
free((genericptr_t) saved);
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* ---------- END SAVE FILE HANDLING ----------- */
|
||||
|
||||
@@ -1490,13 +1545,20 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
#ifdef TTY_GRAPHICS
|
||||
boolean istty = WINDOWPORT(tty);
|
||||
#endif
|
||||
|
||||
#ifdef COMPRESS_EXTENSION
|
||||
xtra = COMPRESS_EXTENSION;
|
||||
#else
|
||||
xtra = "";
|
||||
#endif
|
||||
#ifdef SFCTOOL
|
||||
ln = strlen(filename) + sizeof COMPRESS_EXTENSION;
|
||||
cfn = (char *) alloc(ln);
|
||||
#else /* SFCTOOL */
|
||||
ln = (unsigned) (strlen(filename) + strlen(xtra));
|
||||
cfn = (char *) alloc(ln + 1);
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
Strcpy(cfn, filename);
|
||||
Strcat(cfn, xtra);
|
||||
|
||||
@@ -1540,8 +1602,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
* there is an error message from the compression, the 'y' or 'n' can
|
||||
* end up being displayed after the error message.
|
||||
*/
|
||||
if (istty)
|
||||
if (istty) {
|
||||
mark_synch();
|
||||
}
|
||||
#endif
|
||||
f = fork();
|
||||
if (f == 0) { /* child */
|
||||
@@ -1551,8 +1614,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
* them will have to clear the first line. This should be
|
||||
* invisible if there are no error messages.
|
||||
*/
|
||||
if (istty)
|
||||
if (istty) {
|
||||
raw_print("");
|
||||
}
|
||||
#endif
|
||||
/* run compressor without privileges, in case other programs
|
||||
* have surprises along the line of gzip once taking filenames
|
||||
@@ -1715,10 +1779,17 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
{
|
||||
gzFile compressedfile;
|
||||
FILE *uncompressedfile;
|
||||
#ifndef SFCTOOL
|
||||
char cfn[256];
|
||||
#else
|
||||
char *cfn;
|
||||
#endif
|
||||
char buf[1024];
|
||||
unsigned len, len2;
|
||||
|
||||
#ifdef SFCTOOL
|
||||
cfn = (char *) alloc(strlen(filename) + strlen(COMPRESS_EXTENSION) + 1);
|
||||
#endif
|
||||
if (!make_compressed_name(filename, cfn))
|
||||
return;
|
||||
|
||||
@@ -1739,6 +1810,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
} else {
|
||||
panic("Error in docompress_file %d", errno);
|
||||
}
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
fclose(uncompressedfile);
|
||||
return;
|
||||
}
|
||||
@@ -1753,6 +1827,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
fclose(uncompressedfile);
|
||||
gzclose(compressedfile);
|
||||
(void) unlink(cfn);
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
if (len == 0)
|
||||
@@ -1765,6 +1842,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
fclose(uncompressedfile);
|
||||
gzclose(compressedfile);
|
||||
(void) unlink(cfn);
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1790,12 +1870,18 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
panic("Error in zlib docompress_file %s, %d", filename,
|
||||
errno);
|
||||
}
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
uncompressedfile = fopen(filename, WRBMODE);
|
||||
if (!uncompressedfile) {
|
||||
pline("Error in zlib docompress file uncompress %s", filename);
|
||||
gzclose(compressedfile);
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1809,6 +1895,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
fclose(uncompressedfile);
|
||||
gzclose(compressedfile);
|
||||
(void) unlink(filename);
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
if (len == 0)
|
||||
@@ -1821,6 +1910,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
fclose(uncompressedfile);
|
||||
gzclose(compressedfile);
|
||||
(void) unlink(filename);
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1831,6 +1923,9 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
/* Delete the file left behind */
|
||||
(void) unlink(cfn);
|
||||
}
|
||||
#ifdef SFCTOOL
|
||||
free(cfn);
|
||||
#endif
|
||||
}
|
||||
#endif /* RLC 09 Mar 1999: End ZLIB patch */
|
||||
|
||||
@@ -1840,7 +1935,7 @@ docompress_file(const char *filename, boolean uncomp)
|
||||
|
||||
|
||||
/* ---------- BEGIN PROBLEMATIC SAVEFILE HANDLING ----------- */
|
||||
|
||||
#ifndef SFCTOOL
|
||||
static struct sfstatus_to_msg {
|
||||
int sfstatus;
|
||||
const char *msg;
|
||||
@@ -1873,6 +1968,8 @@ problematic_savefile(int sfstatus, const char *savefilenm)
|
||||
case SF_DM_ILP32LL64_ON_IL32LLP64:
|
||||
case SF_DM_I32LP64_ON_IL32LLP64:
|
||||
case SF_DM_IL32LLP64_ON_I32LP64:
|
||||
FALLTHROUGH;
|
||||
/*FALLTHRU*/
|
||||
case SF_DM_MISMATCH:
|
||||
case SF_OUTDATED:
|
||||
case SF_CRITICAL_BYTE_COUNT_MISMATCH:
|
||||
@@ -1889,11 +1986,155 @@ problematic_savefile(int sfstatus, const char *savefilenm)
|
||||
}
|
||||
return nhfp;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* ---------- END PROBLEMATIC SAVEFILE HANDLING ----------- */
|
||||
|
||||
/* ---------- BEGIN EXTERNAL CONVERSION HANDLING ----------- */
|
||||
|
||||
static boolean cvtinit = FALSE;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
static char *unconverted_filename = 0, *converted_filename = 0;
|
||||
|
||||
/*
|
||||
* Returns non-zero if unconvert was successful
|
||||
*/
|
||||
staticfn int
|
||||
doconvert_file(const char *filename, int sfstatus, boolean unconvert)
|
||||
{
|
||||
nhUse(sfstatus);
|
||||
nhUse(unconvert);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* convert file */
|
||||
void nh_sfconvert(const char *filename)
|
||||
{
|
||||
(void) doconvert_file(filename, 0, FALSE);
|
||||
}
|
||||
|
||||
/* unconvert file if it exists */
|
||||
void nh_sfunconvert(const char *filename)
|
||||
{
|
||||
(void) doconvert_file(filename, 0, TRUE);
|
||||
}
|
||||
|
||||
#else /* !SFCTOOL */
|
||||
/* in sfctool, these are in sfctool.c, not in here */
|
||||
extern char *unconverted_filename, *converted_filename;
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
staticfn boolean
|
||||
make_converted_name(const char *filename)
|
||||
{
|
||||
unsigned ln;
|
||||
const char *xtra, *finaldirchar;
|
||||
const char *dir = NULL;
|
||||
boolean needsep = FALSE;
|
||||
#if defined(WIN32)
|
||||
static char folderbuf[MAX_PATH];
|
||||
#endif
|
||||
|
||||
if (!filename)
|
||||
return FALSE;
|
||||
|
||||
if (unconverted_filename)
|
||||
free((genericptr_t) unconverted_filename), unconverted_filename = 0;
|
||||
if (converted_filename)
|
||||
free((genericptr_t) converted_filename), converted_filename = 0;
|
||||
|
||||
#ifndef SHORT_FILENAMES
|
||||
/* do we need to do some ms-dos processing here? */
|
||||
#endif /* SHORT_FILENAMES */
|
||||
|
||||
ln = (unsigned) strlen(filename);
|
||||
if (!contains_directory(filename)) {
|
||||
#if defined(UNIX)
|
||||
dir = nh_getenv("NETHACKDIR");
|
||||
if (!dir)
|
||||
dir = nh_getenv("HACKDIR");
|
||||
#ifdef HACKDIR
|
||||
if (!dir)
|
||||
dir = HACKDIR;
|
||||
#endif
|
||||
#elif defined(WIN32)
|
||||
if (get_user_home_folder(folderbuf, sizeof folderbuf)) {
|
||||
size_t sz = strlen(folderbuf);
|
||||
|
||||
Snprintf(eos(folderbuf), sizeof folderbuf - sz,
|
||||
"\\AppData\\Local\\NetHack\\3.7\\");
|
||||
dir = (const char *) folderbuf;
|
||||
}
|
||||
#endif /* UNIX || WIN32 */
|
||||
if (dir) {
|
||||
finaldirchar = c_eos(dir);
|
||||
finaldirchar--;
|
||||
if (!(*finaldirchar == '/' || *finaldirchar == '\\'
|
||||
|| *finaldirchar == ':')) {
|
||||
needsep = TRUE;
|
||||
ln += 1;
|
||||
}
|
||||
ln += strlen(dir);
|
||||
}
|
||||
}
|
||||
unconverted_filename = (char *) alloc(ln + 1);
|
||||
Snprintf(unconverted_filename, ln + 1, "%s%s%s",
|
||||
dir ? dir : "",
|
||||
(dir && needsep) ? "/" : "",
|
||||
filename);
|
||||
xtra = ".exportascii";
|
||||
ln += (unsigned) strlen(xtra);
|
||||
converted_filename = (char *) alloc(ln + 1);
|
||||
Strcpy(converted_filename, unconverted_filename);
|
||||
Strcat(converted_filename, xtra);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* delete converted savefile as a normal course of action */
|
||||
int
|
||||
delete_convertedfile(const char *basefilename)
|
||||
{
|
||||
if (!converted_filename)
|
||||
make_converted_name(basefilename);
|
||||
if (converted_filename) {
|
||||
(void) unlink(converted_filename);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void free_convert_filenames(void)
|
||||
{
|
||||
if (converted_filename)
|
||||
free((genericptr_t) converted_filename), converted_filename = 0;
|
||||
if (unconverted_filename)
|
||||
free((genericptr_t) unconverted_filename), unconverted_filename = 0;
|
||||
cvtinit = FALSE;
|
||||
}
|
||||
|
||||
/* return TRUE if s contains a directory, not just a filespec */
|
||||
boolean
|
||||
contains_directory(const char *s)
|
||||
{
|
||||
int i, slen = strlen(s);
|
||||
const char *cp = s;
|
||||
|
||||
for (i = 0; i < slen; ++i) {
|
||||
if (*cp == '\\' || *cp == '/' || *cp == ':')
|
||||
return TRUE;
|
||||
cp++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* =========================================================================*/
|
||||
|
||||
/* ---------- END EXTERNAL CONVERSION HANDLING ----------- */
|
||||
|
||||
/* ---------- BEGIN FILE LOCKING HANDLING ----------- */
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
#if defined(NO_FILE_LINKS) || defined(USE_FCNTL) /* implies UNIX */
|
||||
static int lockfd = -1; /* for lock_file() to pass to unlock_file() */
|
||||
#endif
|
||||
@@ -2802,6 +3043,7 @@ do_deferred_showpaths(int code)
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#ifdef DEBUG
|
||||
/* used by debugpline() to decide whether to issue a message
|
||||
@@ -2856,6 +3098,7 @@ debugcore(const char *filename, boolean wildcards)
|
||||
|
||||
#endif /*DEBUG*/
|
||||
|
||||
#ifndef SFCTOOL
|
||||
#ifdef UNIX
|
||||
#ifndef PATH_MAX
|
||||
#include <limits.h>
|
||||
@@ -3346,6 +3589,8 @@ Death_quote(char *buf, int bufsz)
|
||||
}
|
||||
|
||||
/* ---------- END TRIBUTE ----------- */
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#ifdef LIVELOG
|
||||
#define LLOG_SEP "\t" /* livelog field separator, as a string literal */
|
||||
#define LLOG_EOL "\n" /* end-of-line, for abstraction consistency */
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#define LSF_NEEDS_FIXUP 0x2 /* need oid fixup */
|
||||
#define LSF_IS_PROBLEMATIC 0x4 /* impossible situation encountered */
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn light_source *new_light_core(coordxy, coordxy,
|
||||
int, int, anything *) NONNULLPTRS;
|
||||
staticfn void delete_ls(light_source *);
|
||||
@@ -468,6 +469,7 @@ save_light_sources(NHFILE *nhfp, int range)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*
|
||||
* Pull in the structures from disk, but don't recalculate the object
|
||||
@@ -490,6 +492,7 @@ restore_light_sources(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
DISABLE_WARNING_FORMAT_NONLITERAL
|
||||
|
||||
@@ -970,7 +973,7 @@ wiz_light_sources(void)
|
||||
|
||||
return ECMD_OK;
|
||||
}
|
||||
|
||||
#endif /* !SFCTOOL */
|
||||
/* for 'onefile' processing where end of this file isn't necessarily the
|
||||
end of the source code seen by the compiler */
|
||||
#undef LSF_SHOW
|
||||
|
||||
11
src/mdlib.c
11
src/mdlib.c
@@ -61,7 +61,10 @@ char *version_id_string(char *, size_t, const char *) NONNULL NONNULLPTRS;
|
||||
char *bannerc_string(char *, size_t, const char *) NONNULL NONNULLPTRS;
|
||||
int case_insensitive_comp(const char *, const char *) NONNULLPTRS;
|
||||
|
||||
staticfn void make_version(void);
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif /* SFCTOOL */
|
||||
void make_version(void);
|
||||
|
||||
#ifndef HAS_NO_MKSTEMP
|
||||
#ifdef _MSC_VER
|
||||
@@ -234,10 +237,14 @@ md_ignored_features(void)
|
||||
{
|
||||
return (0UL
|
||||
| (1UL << 19) /* SCORE_ON_BOTL */
|
||||
| SFCTOOL_BIT /* stored by SFCTOOL, not NetHack itself */
|
||||
);
|
||||
}
|
||||
|
||||
staticfn void
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif
|
||||
void
|
||||
make_version(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
13
src/mkmaze.c
13
src/mkmaze.c
@@ -6,6 +6,7 @@
|
||||
#include "hack.h"
|
||||
#include "sp_lev.h"
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn int iswall(coordxy, coordxy);
|
||||
staticfn int iswall_or_stone(coordxy, coordxy);
|
||||
staticfn boolean is_solid(coordxy, coordxy);
|
||||
@@ -1736,6 +1737,7 @@ save_waterlevel(NHFILE *nhfp)
|
||||
if (release_data(nhfp))
|
||||
unsetup_waterlevel();
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* restoring air bubbles on Plane of Water or clouds on Plane of Air */
|
||||
void
|
||||
@@ -1744,6 +1746,11 @@ restore_waterlevel(NHFILE *nhfp)
|
||||
struct bubble *b = (struct bubble *) 0, *btmp;
|
||||
int i, n = 0;
|
||||
|
||||
#ifdef SFCTOOL
|
||||
svb.bbubbles = (struct bubble *) 0;
|
||||
/* set_wportal(); */
|
||||
#endif
|
||||
|
||||
Sfi_int(nhfp, &n, "waterlevel-bubble_count");
|
||||
Sfi_int(nhfp, &svx.xmin, "waterlevel-xmin");
|
||||
Sfi_int(nhfp, &svy.ymin, "waterlevel-ymin");
|
||||
@@ -1760,8 +1767,11 @@ restore_waterlevel(NHFILE *nhfp)
|
||||
svb.bbubbles = b;
|
||||
b->prev = (struct bubble *) 0;
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
mv_bubble(b, 0, 0, TRUE);
|
||||
#endif
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
ge.ebubbles = b;
|
||||
if (b) {
|
||||
b->next = (struct bubble *) 0;
|
||||
@@ -1778,8 +1788,10 @@ restore_waterlevel(NHFILE *nhfp)
|
||||
: "air bubbles or clouds");
|
||||
program_state.something_worth_saving = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn void
|
||||
set_wportal(void)
|
||||
{
|
||||
@@ -2087,5 +2099,6 @@ mv_bubble(struct bubble *b, coordxy dx, coordxy dy, boolean ini)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*mkmaze.c*/
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "hack.h"
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn boolean isbig(struct mkroom *);
|
||||
staticfn struct mkroom *pick_room(boolean);
|
||||
staticfn void mkshop(void), mkzoo(int), mkswamp(void);
|
||||
@@ -25,10 +26,12 @@ staticfn void mktemple(void);
|
||||
staticfn coord *shrine_pos(int);
|
||||
staticfn struct permonst *morguemon(void);
|
||||
staticfn struct permonst *squadmon(void);
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
staticfn void save_room(NHFILE *, struct mkroom *);
|
||||
staticfn void rest_room(NHFILE *, struct mkroom *);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn boolean invalid_shop_shape(struct mkroom *sroom);
|
||||
|
||||
#define sq(x) ((x) * (x))
|
||||
@@ -866,6 +869,7 @@ save_rooms(NHFILE *nhfp)
|
||||
for (i = 0; i < svn.nroom; i++)
|
||||
save_room(nhfp, &svr.rooms[i]);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
staticfn void
|
||||
rest_room(NHFILE *nhfp, struct mkroom *r)
|
||||
@@ -901,6 +905,7 @@ rest_rooms(NHFILE *nhfp)
|
||||
gs.subrooms[gn.nsubroom].hx = -1;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* convert a display symbol for terrain into topology type;
|
||||
used for remembered terrain when mimics pose as furniture */
|
||||
int
|
||||
@@ -1089,5 +1094,6 @@ invalid_shop_shape(struct mkroom *sroom)
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*mkroom.c*/
|
||||
|
||||
24
src/nhlua.c
24
src/nhlua.c
@@ -25,6 +25,7 @@
|
||||
|
||||
struct e;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* lua_CFunction prototypes */
|
||||
#ifdef DUMPLOG
|
||||
staticfn int nhl_dump_fmtstr(lua_State *);
|
||||
@@ -91,7 +92,9 @@ staticfn void nhl_warn(void *, const char *, int);
|
||||
staticfn void nhl_clearfromtable(lua_State *, int, int, struct e *);
|
||||
staticfn int nhl_panic(lua_State *);
|
||||
staticfn void nhl_hookfn(lua_State *, lua_Debug *);
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#ifndef SFCTOOL
|
||||
static const char *const nhcore_call_names[NUM_NHCORE_CALLS] = {
|
||||
"start_new_game",
|
||||
"restore_old_game",
|
||||
@@ -102,6 +105,7 @@ static const char *const nhcore_call_names[NUM_NHCORE_CALLS] = {
|
||||
"leave_tutorial",
|
||||
};
|
||||
static boolean nhcore_call_available[NUM_NHCORE_CALLS];
|
||||
#endif
|
||||
|
||||
/* internal structure that hangs off L->ud (but use lua_getallocf() )
|
||||
* Note that we use it for both memory use tracking and instruction counting.
|
||||
@@ -126,6 +130,7 @@ typedef struct nhl_user_data {
|
||||
#endif
|
||||
} nhl_user_data;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
static lua_State *luapat; /* instance for file pattern matching */
|
||||
|
||||
void
|
||||
@@ -1264,20 +1269,26 @@ get_nh_lua_variables(void)
|
||||
|
||||
RESTORE_WARNING_UNREACHABLE_CODE
|
||||
|
||||
/* char *lua_data; */
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#ifdef SFCTOOL
|
||||
char *lua_data;
|
||||
#endif
|
||||
|
||||
/* save nh_lua_variables table to file */
|
||||
void
|
||||
save_luadata(NHFILE *nhfp)
|
||||
{
|
||||
unsigned lua_data_len;
|
||||
#ifndef SFCTOOL
|
||||
char *lua_data = get_nh_lua_variables(); /* note: '\0' terminated */
|
||||
#endif
|
||||
|
||||
if (!lua_data)
|
||||
lua_data = dupstr(emptystr);
|
||||
lua_data_len = Strlen(lua_data) + 1; /* +1: include the terminator */
|
||||
Sfo_unsigned(nhfp, &lua_data_len, "luadata-lua_data_len");
|
||||
Sfo_char(nhfp, lua_data, "lua_data", lua_data_len);
|
||||
Sfo_char(nhfp, lua_data, "luadata", lua_data_len);
|
||||
free(lua_data);
|
||||
}
|
||||
|
||||
@@ -1286,18 +1297,25 @@ void
|
||||
restore_luadata(NHFILE *nhfp)
|
||||
{
|
||||
unsigned lua_data_len = 0;
|
||||
#ifndef SFCTOOL
|
||||
char *lua_data;
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
Sfi_unsigned(nhfp, &lua_data_len, "luadata-lua_data_len");
|
||||
lua_data = (char *) alloc(lua_data_len);
|
||||
Sfi_char(nhfp, lua_data, "luadata", lua_data_len);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (!gl.luacore)
|
||||
l_nhcore_init();
|
||||
luaL_loadstring(gl.luacore, lua_data);
|
||||
free(lua_data);
|
||||
nhl_pcall_handle(gl.luacore, 0, 0, "restore_luadata", NHLpa_panic);
|
||||
#endif /* !SFCTOOL */
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
/* local stairs = stairways(); */
|
||||
staticfn int
|
||||
nhl_stairways(lua_State *L)
|
||||
@@ -2977,6 +2995,8 @@ nhlL_newstate(nhl_sandbox_info *sbi, const char *name)
|
||||
return L;
|
||||
}
|
||||
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*
|
||||
(See end of comment for conclusion.)
|
||||
to make packages safe, we need something like:
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "hack.h"
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn void setgemprobs(d_level *);
|
||||
staticfn void randomize_gem_colors(void);
|
||||
staticfn void shuffle(int, int, boolean);
|
||||
@@ -403,6 +404,7 @@ savenames(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
void
|
||||
restnames(NHFILE *nhfp)
|
||||
@@ -426,11 +428,14 @@ restnames(NHFILE *nhfp)
|
||||
Sfi_char(nhfp, objects[i].oc_uname, "names-oc_uname", (int) len);
|
||||
}
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
#ifdef TILES_IN_GLYPHMAP
|
||||
shuffle_tiles();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
void
|
||||
discover_object(
|
||||
int oindx,
|
||||
@@ -562,6 +567,7 @@ sortloot_descr(int otyp, char *outbuf)
|
||||
sl_cookie.orderclass, sl_cookie.subclass, sl_cookie.disco);
|
||||
return outbuf;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#define DISCO_BYCLASS 0 /* by discovery order within each class */
|
||||
#define DISCO_SORTLOOT 1 /* by discovery order within each subclass */
|
||||
@@ -577,6 +583,8 @@ static const char *const disco_orders_descr[] = {
|
||||
(char *) 0
|
||||
};
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
int
|
||||
choose_disco_sort(
|
||||
int mode) /* 0 => 'O' cmd, 1 => full discoveries; 2 => class disco */
|
||||
@@ -1110,6 +1118,7 @@ rename_disco(void)
|
||||
destroy_nhwindow(tmpwin);
|
||||
return;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
void
|
||||
get_sortdisco(char *opts, boolean cnf)
|
||||
|
||||
10
src/region.c
10
src/region.c
@@ -13,6 +13,7 @@
|
||||
#define NO_CALLBACK (-1)
|
||||
|
||||
void free_region(NhRegion *);
|
||||
#ifndef SFCTOOL
|
||||
boolean inside_gas_cloud(genericptr, genericptr);
|
||||
boolean expire_gas_cloud(genericptr, genericptr);
|
||||
boolean inside_rect(NhRect *, int, int);
|
||||
@@ -253,6 +254,7 @@ clone_region(NhRegion *reg)
|
||||
}
|
||||
|
||||
#endif /*0*/
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*
|
||||
* Free mem from region.
|
||||
@@ -273,6 +275,7 @@ free_region(NhRegion *reg)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/*
|
||||
* Add a region to the list.
|
||||
* This actually activates the region.
|
||||
@@ -381,6 +384,7 @@ remove_region(NhRegion *reg)
|
||||
}
|
||||
free_region(reg);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*
|
||||
* Remove all regions and clear all related data. This must be done
|
||||
@@ -400,6 +404,7 @@ clear_regions(void)
|
||||
gr.regions = (NhRegion **) 0;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/*
|
||||
* This function is called every turn.
|
||||
* It makes the regions age, if necessary and calls the appropriate
|
||||
@@ -788,6 +793,7 @@ save_regions(NHFILE *nhfp)
|
||||
if (release_data(nhfp))
|
||||
clear_regions();
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
void
|
||||
rest_regions(NHFILE *nhfp)
|
||||
@@ -872,6 +878,7 @@ rest_regions(NHFILE *nhfp)
|
||||
Sfi_int(nhfp, &r->glyph, "region-glyph");
|
||||
Sfi_any(nhfp, &r->arg, "region-arg");
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
/* remove expired regions, do not trigger the expire_f callback (yet!);
|
||||
also update monster lists if this data is coming from a bones file */
|
||||
for (i = svn.n_regions - 1; i >= 0; i--) {
|
||||
@@ -881,8 +888,10 @@ rest_regions(NHFILE *nhfp)
|
||||
else if (ghostly && r->n_monst > 0)
|
||||
reset_region_mids(r);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
DISABLE_WARNING_FORMAT_NONLITERAL
|
||||
|
||||
/* to support '#stats' wizard-mode command */
|
||||
@@ -1394,5 +1403,6 @@ region_safety(void)
|
||||
if (BlindedTimeout == 1L)
|
||||
make_blinded(0L, TRUE);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*region.c*/
|
||||
|
||||
139
src/restore.c
139
src/restore.c
@@ -22,6 +22,7 @@ staticfn struct fruit *loadfruitchn(NHFILE *);
|
||||
staticfn void freefruitchn(struct fruit *);
|
||||
staticfn void rest_levl(NHFILE *);
|
||||
staticfn void rest_stairs(NHFILE *);
|
||||
#ifndef SFCTOOL
|
||||
staticfn void ghostfruit(struct obj *);
|
||||
staticfn boolean restgamestate(NHFILE *);
|
||||
staticfn void restlevelstate(void);
|
||||
@@ -29,10 +30,12 @@ staticfn int restlevelfile(xint8);
|
||||
staticfn void rest_bubbles(NHFILE *);
|
||||
staticfn void restore_gamelog(NHFILE *);
|
||||
staticfn void reset_oattached_mids(boolean);
|
||||
/* these ones are declared non-static in extern.h if SFCTOOL is defined */
|
||||
staticfn boolean restgamestate(NHFILE *);
|
||||
staticfn void rest_bubbles(NHFILE *);
|
||||
staticfn void restore_gamelog(NHFILE *);
|
||||
staticfn void restore_msghistory(NHFILE *);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Save a mapping of IDs from ghost levels to the current level. This
|
||||
@@ -47,8 +50,10 @@ struct bucket {
|
||||
} map[N_PER_BUCKET];
|
||||
};
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn void clear_id_mapping(void);
|
||||
staticfn void add_id_mapping(unsigned, unsigned);
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
#ifdef AMII_GRAPHICS
|
||||
void amii_setpens(int); /* use colors from save file */
|
||||
@@ -59,6 +64,7 @@ extern int amii_numcolors;
|
||||
|
||||
#define Is_IceBox(o) ((o)->otyp == ICE_BOX ? TRUE : FALSE)
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* Recalculate svl.level.objects[x][y], since this info was not saved. */
|
||||
|
||||
staticfn void
|
||||
@@ -118,6 +124,8 @@ inven_inuse(boolean quietly)
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
staticfn void
|
||||
restlevchn(NHFILE *nhfp)
|
||||
{
|
||||
@@ -147,7 +155,9 @@ restdamage(NHFILE *nhfp)
|
||||
unsigned int dmgcount = 0;
|
||||
int counter;
|
||||
struct damage *tmp_dam;
|
||||
#ifndef SFCTOOL
|
||||
boolean ghostly = (nhfp->ftype == NHF_BONESFILE);
|
||||
#endif
|
||||
|
||||
Sfi_unsigned(nhfp, &dmgcount, "damage-damage_count");
|
||||
counter = (int) dmgcount;
|
||||
@@ -158,11 +168,13 @@ restdamage(NHFILE *nhfp)
|
||||
tmp_dam = (struct damage *) alloc(sizeof *tmp_dam);
|
||||
|
||||
Sfi_damage(nhfp, tmp_dam, "damage");
|
||||
#ifndef SFCTOOL
|
||||
if (ghostly)
|
||||
tmp_dam->when += (svm.moves - svo.omoves);
|
||||
|
||||
tmp_dam->next = svl.level.damagelist;
|
||||
svl.level.damagelist = tmp_dam;
|
||||
#endif /* !SFCTOOL */
|
||||
} while (--counter > 0);
|
||||
}
|
||||
|
||||
@@ -199,7 +211,7 @@ restobj(NHFILE *nhfp, struct obj *otmp)
|
||||
}
|
||||
|
||||
/* omailcmd - feedback mechanism for scroll of mail */
|
||||
Sfi_int(nhfp, &buflen, "obj-omail_length");
|
||||
Sfi_int(nhfp, &buflen, "obj-omailcmd_length");
|
||||
if (buflen > 0) {
|
||||
char *omailcmd = (char *) alloc(buflen);
|
||||
|
||||
@@ -210,7 +222,7 @@ restobj(NHFILE *nhfp, struct obj *otmp)
|
||||
|
||||
/* omid - monster id number, connecting corpse to ghost */
|
||||
newomid(otmp); /* superfluous; we're already allocated otmp->oextra */
|
||||
Sfi_unsigned(nhfp, &omid, "obj-omid_length");
|
||||
Sfi_unsigned(nhfp, &omid, "obj-omid");
|
||||
OMID(otmp) = omid;
|
||||
}
|
||||
}
|
||||
@@ -221,10 +233,15 @@ restobjchn(NHFILE *nhfp, boolean frozen)
|
||||
struct obj *otmp, *otmp2 = 0;
|
||||
struct obj *first = (struct obj *) 0;
|
||||
int buflen = 0;
|
||||
#ifndef SFCTOOL
|
||||
boolean ghostly = (nhfp->ftype == NHF_BONESFILE);
|
||||
#endif
|
||||
boolean trouble = FALSE;
|
||||
|
||||
while (1) {
|
||||
Sfi_int(nhfp, &buflen, "obj-obj_length");
|
||||
if (!(buflen != -1 || buflen != sizeof (struct obj)))
|
||||
trouble = TRUE;
|
||||
if (buflen == -1)
|
||||
break;
|
||||
|
||||
@@ -236,6 +253,7 @@ restobjchn(NHFILE *nhfp, boolean frozen)
|
||||
else
|
||||
otmp2->nobj = otmp;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (ghostly) {
|
||||
unsigned nid = next_ident();
|
||||
|
||||
@@ -250,6 +268,7 @@ restobjchn(NHFILE *nhfp, boolean frozen)
|
||||
*/
|
||||
if (ghostly && !frozen && !age_is_relative(otmp))
|
||||
otmp->age = svm.moves - svo.omoves + otmp->age;
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* get contents of a container or statue */
|
||||
if (Has_contents(otmp)) {
|
||||
@@ -261,6 +280,7 @@ restobjchn(NHFILE *nhfp, boolean frozen)
|
||||
otmp3->ocontainer = otmp;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (otmp->bypass)
|
||||
otmp->bypass = 0;
|
||||
if (!ghostly) {
|
||||
@@ -272,12 +292,17 @@ restobjchn(NHFILE *nhfp, boolean frozen)
|
||||
if (otmp->o_id == svc.context.spbook.o_id)
|
||||
svc.context.spbook.book = otmp;
|
||||
}
|
||||
#endif /* !SFADUSTER */
|
||||
otmp2 = otmp;
|
||||
}
|
||||
if (first && otmp2->nobj) {
|
||||
impossible("Restobjchn: error reading objchn.");
|
||||
otmp2->nobj = 0;
|
||||
}
|
||||
#ifdef SFCTOOL
|
||||
nhUse(frozen);
|
||||
#endif
|
||||
nhUse(trouble);
|
||||
return first;
|
||||
}
|
||||
|
||||
@@ -353,8 +378,11 @@ restmonchn(NHFILE *nhfp)
|
||||
{
|
||||
struct monst *mtmp, *mtmp2 = 0;
|
||||
struct monst *first = (struct monst *) 0;
|
||||
int offset, buflen = 0;
|
||||
int buflen = 0;
|
||||
#ifndef SFCTOOL
|
||||
int offset;
|
||||
boolean ghostly = (nhfp->ftype == NHF_BONESFILE);
|
||||
#endif
|
||||
|
||||
while (1) {
|
||||
Sfi_int(nhfp, &buflen, "monst-monst_length");
|
||||
@@ -369,6 +397,7 @@ restmonchn(NHFILE *nhfp)
|
||||
else
|
||||
mtmp2->nmon = mtmp;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (ghostly) {
|
||||
unsigned nid = next_ident();
|
||||
|
||||
@@ -386,13 +415,21 @@ restmonchn(NHFILE *nhfp)
|
||||
mtmp->mhpmax = DEFUNCT_MONSTER;
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
if (mtmp->minvent) {
|
||||
struct obj *obj;
|
||||
mtmp->minvent = restobjchn(nhfp, FALSE);
|
||||
#ifndef SFCTOOL
|
||||
/* restore monster back pointer */
|
||||
for (obj = mtmp->minvent; obj; obj = obj->nobj)
|
||||
obj->ocarry = mtmp;
|
||||
#else
|
||||
nhUse(obj);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (mtmp->mw) {
|
||||
struct obj *obj;
|
||||
|
||||
@@ -416,12 +453,15 @@ restmonchn(NHFILE *nhfp)
|
||||
if (mtmp->m_id == svc.context.polearm.m_id)
|
||||
svc.context.polearm.hitmon = mtmp;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
mtmp2 = mtmp;
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
if (first && mtmp2->nmon) {
|
||||
impossible("Restmonchn: error reading monchn.");
|
||||
mtmp2->nmon = 0;
|
||||
}
|
||||
#endif
|
||||
return first;
|
||||
}
|
||||
|
||||
@@ -456,6 +496,7 @@ freefruitchn(struct fruit *flist)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn void
|
||||
ghostfruit(struct obj *otmp)
|
||||
{
|
||||
@@ -470,6 +511,7 @@ ghostfruit(struct obj *otmp)
|
||||
else
|
||||
otmp->spe = fruitadd(oldf->fname, (struct fruit *) 0);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#ifdef SYSCF
|
||||
#define SYSOPT_CHECK_SAVE_UID sysopt.check_save_uid
|
||||
@@ -477,7 +519,10 @@ ghostfruit(struct obj *otmp)
|
||||
#define SYSOPT_CHECK_SAVE_UID TRUE
|
||||
#endif
|
||||
|
||||
staticfn boolean
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif
|
||||
boolean
|
||||
restgamestate(NHFILE *nhfp)
|
||||
{
|
||||
int i;
|
||||
@@ -486,15 +531,18 @@ restgamestate(NHFILE *nhfp)
|
||||
struct obj *bc_obj;
|
||||
char timebuf[15];
|
||||
unsigned long uid = 0;
|
||||
#ifndef SFCTOOL
|
||||
boolean defer_perm_invent, restoring_special;
|
||||
struct obj *otmp;
|
||||
#endif
|
||||
|
||||
Sfi_ulong(nhfp, &uid, "gamestate-uid");
|
||||
#ifndef SFCTOOL
|
||||
if (SYSOPT_CHECK_SAVE_UID
|
||||
&& uid != (unsigned long) getuid()) { /* strange ... */
|
||||
if (!gc.converted_savefile_loaded)
|
||||
/* for wizard mode, issue a reminder; for others, treat it
|
||||
as an attempt to cheat and refuse to restore this file */
|
||||
* as an attempt to cheat and refuse to restore this file */
|
||||
pline("Saved game was not yours.");
|
||||
if (wizard || gc.converted_savefile_loaded) {
|
||||
if (gc.converted_savefile_loaded)
|
||||
@@ -503,7 +551,7 @@ restgamestate(NHFILE *nhfp)
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SFCTOOL */
|
||||
newgamecontext = svc.context; /* copy statically init'd context */
|
||||
Sfi_context_info(nhfp, &svc.context, "gamestate-context");
|
||||
svc.context.warntype.species = (ismnum(svc.context.warntype.speciesidx))
|
||||
@@ -519,6 +567,7 @@ restgamestate(NHFILE *nhfp)
|
||||
newgameflags = flags;
|
||||
Sfi_flag(nhfp, &flags, "gamestate-flags");
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* avoid keeping permanent inventory window up to date during restore
|
||||
(setworn() calls update_inventory); attempting to include the cost
|
||||
of unpaid items before shopkeeper's bill is available is a no-no;
|
||||
@@ -545,16 +594,18 @@ restgamestate(NHFILE *nhfp)
|
||||
#ifdef AMII_GRAPHICS
|
||||
amii_setpens(amii_numcolors); /* use colors from save file */
|
||||
#endif
|
||||
|
||||
#endif /* !SFCTOOL */
|
||||
Sfi_you(nhfp, &u, "gamestate-you");
|
||||
gy.youmonst.cham = u.mcham;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (restoring_special && iflags.explore_error_flag) {
|
||||
/* savefile has wizard or explore mode, but player is no longer
|
||||
authorized to access either; can't downgrade mode any further, so
|
||||
fail restoration. */
|
||||
u.uhp = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
Sfi_char(nhfp, timebuf, "gamestate-ubirthday", 14);
|
||||
timebuf[14] = '\0';
|
||||
@@ -562,6 +613,7 @@ restgamestate(NHFILE *nhfp)
|
||||
Sfi_long(nhfp, &urealtime.realtime, "gamestate-realtime");
|
||||
Sfi_char(nhfp, timebuf, "gamestate-start_timing", 14);
|
||||
timebuf[14] = '\0';
|
||||
#ifndef SFCTOOL
|
||||
urealtime.start_timing = time_from_yyyymmddhhmmss(timebuf);
|
||||
|
||||
/* current time is the time to use for next urealtime.realtime update */
|
||||
@@ -590,6 +642,7 @@ restgamestate(NHFILE *nhfp)
|
||||
}
|
||||
/* in case hangup save occurred in midst of level change */
|
||||
assign_level(&u.uz0, &u.uz);
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* this stuff comes after potential aborted restore attempts */
|
||||
restore_killers(nhfp);
|
||||
@@ -600,7 +653,7 @@ restgamestate(NHFILE *nhfp)
|
||||
|
||||
/* restore dangling (not on floor or in inventory) ball and/or chain */
|
||||
bc_obj = restobjchn(nhfp, FALSE);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
while (bc_obj) {
|
||||
struct obj *nobj = bc_obj->nobj;
|
||||
|
||||
@@ -609,13 +662,15 @@ restgamestate(NHFILE *nhfp)
|
||||
setworn(bc_obj, bc_obj->owornmask);
|
||||
bc_obj = nobj;
|
||||
}
|
||||
|
||||
#endif
|
||||
gm.migrating_objs = restobjchn(nhfp, FALSE);
|
||||
gm.migrating_mons = restmonchn(nhfp);
|
||||
|
||||
for (i = 0; i < NUMMONS; ++i) {
|
||||
Sfi_mvitals(nhfp, &svm.mvitals[i], "gamestate-mvitals");
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/*
|
||||
* There are some things after this that can have unintended display
|
||||
* side-effects too early in the game.
|
||||
@@ -637,6 +692,7 @@ restgamestate(NHFILE *nhfp)
|
||||
setuwep(otmp); /* (don't need any null check here) */
|
||||
if (!uwep || uwep->otyp == PICK_AXE || uwep->otyp == GRAPPLING_HOOK)
|
||||
gu.unweapon = TRUE;
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
restore_dungeon(nhfp);
|
||||
restlevchn(nhfp);
|
||||
@@ -660,15 +716,22 @@ restgamestate(NHFILE *nhfp)
|
||||
restore_msghistory(nhfp);
|
||||
restore_gamelog(nhfp);
|
||||
restore_luadata(nhfp);
|
||||
#ifndef SFCTOOL
|
||||
/* must come after all mons & objs are restored */
|
||||
relink_timers(FALSE);
|
||||
relink_light_sources(FALSE);
|
||||
adj_erinys(u.ualign.abuse);
|
||||
/* inventory display is now viable */
|
||||
iflags.perm_invent = defer_perm_invent;
|
||||
#else
|
||||
nhUse(bc_obj);
|
||||
nhUse(newgamecontext);
|
||||
nhUse(newgameflags);
|
||||
#endif /* !SFCTOOL */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* update game state pointers to those valid for the current level (so we
|
||||
don't dereference a wild u.ustuck when saving game state, for instance) */
|
||||
staticfn void
|
||||
@@ -886,15 +949,20 @@ dorecover(NHFILE *nhfp)
|
||||
check_special_room(FALSE);
|
||||
return 1;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
staticfn void
|
||||
rest_stairs(NHFILE *nhfp)
|
||||
{
|
||||
int buflen = 0;
|
||||
stairway stway = UNDEFINED_VALUES;
|
||||
#ifndef SFCTOOL
|
||||
stairway *newst;
|
||||
#endif
|
||||
|
||||
#ifndef SFCTOOL
|
||||
stairway_free_all();
|
||||
#endif
|
||||
while (1) {
|
||||
Sfi_int(nhfp, &buflen, "stairs-staircount");
|
||||
if (buflen == -1)
|
||||
@@ -906,11 +974,13 @@ rest_stairs(NHFILE *nhfp)
|
||||
/* stairway dlevel is relative, make it absolute */
|
||||
stway.tolev.dlevel += u.uz.dlevel;
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
stairway_add(stway.sx, stway.sy, stway.up, stway.isladder,
|
||||
&(stway.tolev));
|
||||
newst = stairway_at(stway.sx, stway.sy);
|
||||
if (newst)
|
||||
newst->u_traversed = stway.u_traversed;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -932,7 +1002,8 @@ restcemetery(NHFILE *nhfp, struct cemetery **cemeteryaddr)
|
||||
} else {
|
||||
*cemeteryaddr = 0;
|
||||
}
|
||||
if ((nhfp->mode & CONVERTING) != 0) {
|
||||
if (((nhfp->mode & CONVERTING) != 0)
|
||||
|| ((nhfp->mode & UNCONVERTING) != 0)) {
|
||||
struct cemetery *thisbones, *nextbones;
|
||||
|
||||
/* free the memory */
|
||||
@@ -958,6 +1029,8 @@ rest_levl(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
void
|
||||
trickery(char *reason)
|
||||
{
|
||||
@@ -967,14 +1040,17 @@ trickery(char *reason)
|
||||
Strcpy(svk.killer.name, reason ? reason : "");
|
||||
done(TRICKED);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
void
|
||||
getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
{
|
||||
struct trap *trap;
|
||||
#ifndef SFCTOOL
|
||||
struct monst *mtmp;
|
||||
branch *br;
|
||||
int x, y;
|
||||
#endif
|
||||
long elapsed = 0L;
|
||||
int hpid = 0;
|
||||
xint8 dlvl = 0;
|
||||
@@ -986,9 +1062,11 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
#endif
|
||||
|
||||
program_state.in_getlev = TRUE;
|
||||
#ifndef SFCTOOL
|
||||
|
||||
if (ghostly)
|
||||
clear_id_mapping();
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#if 0
|
||||
#if defined(MSDOS) || defined(OS2)
|
||||
@@ -1007,6 +1085,7 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
Sfi_int(nhfp, &hpid, "gamestate-hackpid");
|
||||
/* CHECK: This may prevent restoration */
|
||||
Sfi_xint8(nhfp, &dlvl, "gamestate-dlvl");
|
||||
#ifndef SFCTOOL
|
||||
if ((pid && pid != hpid) || (lev && dlvl != lev)) {
|
||||
char trickbuf[BUFSZ];
|
||||
|
||||
@@ -1019,6 +1098,7 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
pline1(trickbuf);
|
||||
trickery(trickbuf);
|
||||
}
|
||||
#endif
|
||||
restcemetery(nhfp, &svl.level.bonesinfo);
|
||||
rest_levl(nhfp);
|
||||
|
||||
@@ -1051,10 +1131,14 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
}
|
||||
rest_rooms(nhfp); /* No joke :-) */
|
||||
if (svn.nroom) {
|
||||
#ifndef SFCTOOL
|
||||
gd.doorindex = svr.rooms[svn.nroom - 1].fdoor
|
||||
+ svr.rooms[svn.nroom - 1].doorct;
|
||||
} else {
|
||||
gd.doorindex = 0;
|
||||
#else
|
||||
gd.doorindex = 0;
|
||||
#endif /* !SFCTOOL */
|
||||
}
|
||||
|
||||
restore_timers(nhfp, RANGE_LEVEL, elapsed);
|
||||
@@ -1080,14 +1164,16 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
dealloc_trap(trap);
|
||||
|
||||
fobj = restobjchn(nhfp, FALSE);
|
||||
#ifndef SFCTOOL
|
||||
find_lev_obj();
|
||||
#endif /* !SFCTOOL */
|
||||
/* restobjchn()'s `frozen' argument probably ought to be a callback
|
||||
routine so that we can check for objects being buried under ice */
|
||||
svl.level.buriedobjlist = restobjchn(nhfp, FALSE);
|
||||
gb.billobjs = restobjchn(nhfp, FALSE);
|
||||
rest_engravings(nhfp);
|
||||
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* reset level.monsters for new level */
|
||||
for (x = 0; x < COLNO; x++)
|
||||
for (y = 0; y < ROWNO; y++)
|
||||
@@ -1133,6 +1219,7 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
if (ghostly || (elapsed > 00 && elapsed > (long) rnd(10)))
|
||||
hide_monst(mtmp);
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
restdamage(nhfp);
|
||||
rest_regions(nhfp);
|
||||
@@ -1140,6 +1227,7 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
load_exclusions(nhfp);
|
||||
rest_track(nhfp);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (ghostly) {
|
||||
stairway *stway = gs.stairs;
|
||||
while (stway) {
|
||||
@@ -1215,6 +1303,11 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
if (ghostly)
|
||||
clear_id_mapping();
|
||||
program_state.in_getlev = FALSE;
|
||||
#else
|
||||
nhUse(pid);
|
||||
nhUse(lev);
|
||||
#endif /* !SFCTOOL */
|
||||
program_state.in_getlev = FALSE;
|
||||
}
|
||||
|
||||
/* "name-role-race-gend-algn" occurs very early in a save file; sometimes we
|
||||
@@ -1247,7 +1340,10 @@ get_plname_from_file(
|
||||
}
|
||||
|
||||
/* restore Plane of Water's air bubbles and Plane of Air's clouds */
|
||||
staticfn void
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif
|
||||
void
|
||||
rest_bubbles(NHFILE *nhfp)
|
||||
{
|
||||
xint8 bbubbly;
|
||||
@@ -1265,7 +1361,10 @@ rest_bubbles(NHFILE *nhfp)
|
||||
restore_waterlevel(nhfp);
|
||||
}
|
||||
|
||||
staticfn void
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif
|
||||
void
|
||||
restore_gamelog(NHFILE *nhfp)
|
||||
{
|
||||
int slen = 0;
|
||||
@@ -1281,11 +1380,16 @@ restore_gamelog(NHFILE *nhfp)
|
||||
Sfi_char(nhfp, msg, "gamelog-gamelog_text", slen);
|
||||
msg[slen] = '\0';
|
||||
Sfi_gamelog_line(nhfp, &tmp, "gamelog-gamelog_line");
|
||||
#ifndef SFCTOOL
|
||||
gamelog_add(tmp.flags, tmp.turn, msg);
|
||||
#endif /* !SFCTOOL */
|
||||
}
|
||||
}
|
||||
|
||||
staticfn void
|
||||
#ifndef SFCTOOL
|
||||
staticfn
|
||||
#endif
|
||||
void
|
||||
restore_msghistory(NHFILE *nhfp)
|
||||
{
|
||||
int msgsize = 0;
|
||||
@@ -1300,14 +1404,20 @@ restore_msghistory(NHFILE *nhfp)
|
||||
panic("restore_msghistory: msg too big (%d)", msgsize);
|
||||
Sfi_char(nhfp, msg, "msghistory-msg", msgsize);
|
||||
msg[msgsize] = '\0';
|
||||
#ifndef SFCTOOL
|
||||
putmsghistory(msg, TRUE);
|
||||
#endif /* !SFCTOOL */
|
||||
++msgcount;
|
||||
}
|
||||
#ifndef SFCTOOL
|
||||
if (msgcount)
|
||||
putmsghistory((char *) 0, TRUE);
|
||||
debugpline1("Read %d messages from savefile.", msgcount);
|
||||
#endif /* !SFCTOOL */
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
|
||||
/* Clear all structures for object and monster ID mapping. */
|
||||
staticfn void
|
||||
clear_id_mapping(void)
|
||||
@@ -1483,5 +1593,6 @@ restore_menu(
|
||||
return (ch > 0) ? 1 : ch;
|
||||
}
|
||||
#endif /* SELECTSAVED */
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*restore.c*/
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
* and placed there by 'makedefs'.
|
||||
*/
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn void unpadline(char *);
|
||||
staticfn void init_rumors(dlb *);
|
||||
staticfn char *get_rnd_line(dlb *, char *, unsigned, int (*)(int),
|
||||
@@ -615,6 +616,7 @@ save_oracles(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
void
|
||||
restore_oracles(NHFILE *nhfp)
|
||||
@@ -632,6 +634,7 @@ restore_oracles(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
void
|
||||
outoracle(boolean special, boolean delphi)
|
||||
{
|
||||
@@ -947,5 +950,6 @@ free_CapMons(void)
|
||||
}
|
||||
CapMonSiz = 0;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*rumors.c*/
|
||||
|
||||
@@ -115,7 +115,7 @@ dosave0(void)
|
||||
clear_nhwindow(WIN_MESSAGE);
|
||||
There("seems to be an old save file.");
|
||||
if (y_n("Overwrite the old file?") == 'n') {
|
||||
//nh_sfconvert(fq_save);
|
||||
nh_sfconvert(fq_save);
|
||||
nh_compress(fq_save);
|
||||
goto done;
|
||||
}
|
||||
@@ -131,8 +131,7 @@ dosave0(void)
|
||||
goto done;
|
||||
}
|
||||
if (nhfp && nhfp->fplog) {
|
||||
/* (void) fprintf(nhfp->fplog, "# just opened\n"); */
|
||||
nhfp->count = 0L;
|
||||
nhfp->rcount = nhfp->wcount = 0L;
|
||||
}
|
||||
|
||||
vision_recalc(2); /* shut down vision to prevent problems
|
||||
@@ -221,7 +220,7 @@ dosave0(void)
|
||||
/* get rid of current level --jgm */
|
||||
delete_levelfile(ledger_no(&u.uz));
|
||||
delete_levelfile(0);
|
||||
///nh_sfconvert(fq_save);
|
||||
nh_sfconvert(fq_save);
|
||||
nh_compress(fq_save);
|
||||
/* this should probably come sooner... */
|
||||
program_state.something_worth_saving = 0;
|
||||
@@ -1144,7 +1143,7 @@ freedynamicdata(void)
|
||||
#endif
|
||||
discard_gamelog();
|
||||
release_runtime_info(); /* build-time options and version stuff */
|
||||
//free_convert_filenames();
|
||||
free_convert_filenames();
|
||||
#endif /* FREE_ALL_MEMORY */
|
||||
|
||||
if (VIA_WINDOWPORT())
|
||||
|
||||
1126
src/sfbase.c
1126
src/sfbase.c
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,8 @@
|
||||
|
||||
/* #define SFLOGGING */ /* debugging */
|
||||
|
||||
staticfn void sfstruct_read_error(void);
|
||||
|
||||
/* historical full struct savings */
|
||||
|
||||
#ifdef SAVEFILE_DEBUGGING
|
||||
@@ -29,6 +31,9 @@ staticfn void logging_finish(void);
|
||||
|
||||
#define SFI_BODY(dt) \
|
||||
{ \
|
||||
if (nhfp->eof) { \
|
||||
sfstruct_read_error(); \
|
||||
} \
|
||||
mread(nhfp->fd, (genericptr_t) d_##dt, sizeof *d_##dt); \
|
||||
if (restoreinfo.mread_flags == -1) \
|
||||
nhfp->eof = TRUE; \
|
||||
@@ -46,20 +51,37 @@ void historical_sfi_##dtyp(NHFILE *nhfp, dtyp *d_##dtyp,
|
||||
const char *myname UNUSED) \
|
||||
SFI_BODY(dtyp)
|
||||
|
||||
#define SFO_CBODY(dt) \
|
||||
{ \
|
||||
normalize_pointers_##dt(d_##dt); \
|
||||
bwrite(nhfp->fd, (genericptr_t) d_##dt, sizeof *d_##dt); \
|
||||
}
|
||||
|
||||
#define SFI_CBODY(dt) \
|
||||
{ \
|
||||
if (nhfp->eof) { \
|
||||
sfstruct_read_error(); \
|
||||
} \
|
||||
mread(nhfp->fd, (genericptr_t) d_##dt, sizeof *d_##dt); \
|
||||
normalize_pointers_##dt(d_##dt); \
|
||||
if (restoreinfo.mread_flags == -1) \
|
||||
nhfp->eof = TRUE; \
|
||||
}
|
||||
|
||||
#define SF_C(keyw, dtyp) \
|
||||
void historical_sfo_##dtyp(NHFILE *, keyw dtyp *d_##dtyp, \
|
||||
const char *); \
|
||||
void historical_sfi_##dtyp(NHFILE *, keyw dtyp *d_##dtyp, \
|
||||
const char *); \
|
||||
extern void normalize_pointers_##dtyp(keyw dtyp *d_##dtyp); \
|
||||
\
|
||||
void historical_sfo_##dtyp(NHFILE *nhfp, keyw dtyp *d_##dtyp, \
|
||||
const char *myname UNUSED) \
|
||||
SFO_BODY(dtyp) \
|
||||
SFO_CBODY(dtyp) \
|
||||
\
|
||||
void historical_sfi_##dtyp(NHFILE *nhfp, keyw dtyp *d_##dtyp, \
|
||||
const char *myname UNUSED) \
|
||||
SFI_BODY(dtyp)
|
||||
SFI_CBODY(dtyp)
|
||||
|
||||
#define SF_X(xxx, dtyp) \
|
||||
void historical_sfo_##dtyp(NHFILE *, xxx *d_##dtyp, const char *, int); \
|
||||
@@ -121,7 +143,7 @@ SF_C(union, any)
|
||||
SF_A(aligntyp)
|
||||
SF_A(boolean)
|
||||
SF_A(coordxy)
|
||||
SF_A(genericptr_t)
|
||||
//SF_A(genericptr_t)
|
||||
SF_A(int)
|
||||
SF_A(int16)
|
||||
SF_A(int32)
|
||||
@@ -159,6 +181,32 @@ historical_sfi_char(NHFILE *nhfp, char *d_char,
|
||||
if (restoreinfo.mread_flags == -1)
|
||||
nhfp->eof = TRUE;
|
||||
}
|
||||
//extern void sfo_genericptr(NHFILE *, void **, const char *);
|
||||
//extern void sfi_genericptr(NHFILE *, void **, const char *);
|
||||
//extern void sfo_x_genericptr(NHFILE *, void **, const char *);
|
||||
//extern void sfi_x_genericptr(NHFILE *, void **, const char *);
|
||||
|
||||
void historical_sfo_genericptr_t(NHFILE *, genericptr_t *d_genericptr_t,
|
||||
const char *);
|
||||
void historical_sfi_genericptr_t(NHFILE *, genericptr_t *d_genericptr_t,
|
||||
const char *);
|
||||
void
|
||||
historical_sfo_genericptr_t(NHFILE *nhfp, genericptr_t *d_genericptr_t,
|
||||
const char *myname UNUSED)
|
||||
{
|
||||
bwrite(nhfp->fd, (genericptr_t) d_genericptr_t, sizeof *d_genericptr_t);
|
||||
}
|
||||
void
|
||||
historical_sfi_genericptr_t(NHFILE *nhfp, genericptr_t *d_genericptr_t,
|
||||
const char *myname UNUSED)
|
||||
{
|
||||
if (nhfp->eof) {
|
||||
sfstruct_read_error();
|
||||
}
|
||||
mread(nhfp->fd, (genericptr_t) d_genericptr_t, sizeof *d_genericptr_t);
|
||||
if (restoreinfo.mread_flags == -1)
|
||||
nhfp->eof = TRUE;
|
||||
}
|
||||
|
||||
SF_X(uint8_t, bitfield)
|
||||
|
||||
@@ -592,6 +640,7 @@ mread(int fd, genericptr_t buf, unsigned len)
|
||||
restoreinfo.mread_flags = -1;
|
||||
return;
|
||||
} else {
|
||||
#ifndef SFCTOOL
|
||||
pline("Read %d instead of %u bytes.", (int) rlen, len);
|
||||
display_nhwindow(WIN_MESSAGE, TRUE); /* flush before error() */
|
||||
if (program_state.restoring) {
|
||||
@@ -600,10 +649,18 @@ mread(int fd, genericptr_t buf, unsigned len)
|
||||
error("Error restoring old game.");
|
||||
}
|
||||
panic("Error reading level file.");
|
||||
#else
|
||||
printf("Read %d instead of %u bytes.\n", (int) rlen, len);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staticfn void
|
||||
sfstruct_read_error(void)
|
||||
{
|
||||
/* problem */;
|
||||
}
|
||||
|
||||
#ifdef SFLOGGING
|
||||
staticfn void
|
||||
@@ -628,4 +685,3 @@ logging_finish(void)
|
||||
icnt = 0L;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "hack.h"
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn void stoned_dialogue(void);
|
||||
staticfn void vomiting_dialogue(void);
|
||||
staticfn void sleep_dialogue(void);
|
||||
@@ -2682,6 +2683,7 @@ save_timers(NHFILE *nhfp, int range)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*
|
||||
* Pull in the structures from disk, but don't recalculate the object and
|
||||
@@ -2705,10 +2707,13 @@ restore_timers(NHFILE *nhfp, int range, long adjust)
|
||||
Sfi_fe(nhfp, curr, "timer");
|
||||
if (ghostly)
|
||||
curr->timeout += adjust;
|
||||
#ifndef SFCTOOL
|
||||
insert_timer(curr);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
DISABLE_WARNING_FORMAT_NONLITERAL
|
||||
|
||||
/* to support '#stats' wizard-mode command */
|
||||
@@ -2753,5 +2758,6 @@ relink_timers(boolean ghostly)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*timeout.c*/
|
||||
|
||||
@@ -18,6 +18,7 @@ initrack(void)
|
||||
(void) memset((genericptr_t) &utrack, 0, sizeof(utrack));
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* add to track */
|
||||
void
|
||||
settrack(void)
|
||||
@@ -51,6 +52,7 @@ gettrack(coordxy x, coordxy y)
|
||||
}
|
||||
return (coord *) 0;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* return TRUE if x,y has hero tracks on it */
|
||||
boolean
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "dlb.h"
|
||||
|
||||
#ifndef MINIMAL_FOR_RECOVER
|
||||
#ifndef SFCTOOL
|
||||
|
||||
#ifndef OPTIONS_AT_RUNTIME
|
||||
#define OPTIONS_AT_RUNTIME
|
||||
@@ -357,6 +358,14 @@ comp_times(long filetime)
|
||||
return ((unsigned long) filetime < (unsigned long) nomakedefs.build_time);
|
||||
}
|
||||
#endif
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
#ifdef SFCTOOL
|
||||
#ifdef wait_synch
|
||||
#undef wait_synch
|
||||
#endif
|
||||
#define wait_synch()
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
boolean
|
||||
check_version(
|
||||
@@ -385,11 +394,13 @@ check_version(
|
||||
version_data->incarnation != nomakedefs.version_number
|
||||
#endif
|
||||
) {
|
||||
#ifndef SFCTOOL
|
||||
if (complain) {
|
||||
pline("Version mismatch for file \"%s\".", filename);
|
||||
if (WIN_MESSAGE != WIN_ERR)
|
||||
display_nhwindow(WIN_MESSAGE, TRUE);
|
||||
}
|
||||
#endif
|
||||
return FALSE;
|
||||
} else if (
|
||||
(version_data->feature_set & ~nomakedefs.ignored_features)
|
||||
@@ -397,42 +408,18 @@ check_version(
|
||||
|| ((utdflags & UTD_SKIP_SANITY1) == 0
|
||||
&& version_data->entity_count != nomakedefs.version_sanity1)
|
||||
) {
|
||||
#ifndef SFCTOOL
|
||||
if (complain) {
|
||||
pline("Configuration incompatibility for file \"%s\".", filename);
|
||||
display_nhwindow(WIN_MESSAGE, TRUE);
|
||||
}
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
store_version(NHFILE *nhfp)
|
||||
{
|
||||
struct version_info version_data = {
|
||||
0UL, 0UL, 0UL,
|
||||
};
|
||||
|
||||
/* actual version number */
|
||||
version_data.incarnation = nomakedefs.version_number;
|
||||
/* bitmask of config settings */
|
||||
version_data.feature_set = nomakedefs.version_features;
|
||||
/* # of monsters and objects */
|
||||
version_data.entity_count = nomakedefs.version_sanity1;
|
||||
|
||||
/* bwrite() before bufon() uses plain write() */
|
||||
if (nhfp->structlevel)
|
||||
bufoff(nhfp->fd);
|
||||
|
||||
store_critical_bytes(nhfp);
|
||||
Sfo_version_info(nhfp, (struct version_info *) &version_data,
|
||||
"version_info");
|
||||
|
||||
if (nhfp->structlevel)
|
||||
bufon(nhfp->fd);
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
#ifdef AMIGA
|
||||
const char amiga_version_string[] = AMIGA_VERSION_STRING;
|
||||
#endif
|
||||
@@ -518,6 +505,34 @@ dump_version_info(void)
|
||||
release_runtime_info();
|
||||
return;
|
||||
}
|
||||
void
|
||||
store_version(NHFILE *nhfp)
|
||||
{
|
||||
struct version_info version_data = {
|
||||
0UL,
|
||||
0UL,
|
||||
0UL,
|
||||
};
|
||||
/* actual version number */
|
||||
version_data.incarnation = nomakedefs.version_number;
|
||||
/* bitmask of config settings */
|
||||
version_data.feature_set = nomakedefs.version_features;
|
||||
/* # of monsters and objects */
|
||||
version_data.entity_count = nomakedefs.version_sanity1;
|
||||
|
||||
/* bwrite() before bufon() uses plain write() */
|
||||
if (nhfp->structlevel)
|
||||
bufoff(nhfp->fd);
|
||||
|
||||
store_critical_bytes(nhfp);
|
||||
Sfo_version_info(nhfp, (struct version_info *) &version_data,
|
||||
"version_info");
|
||||
|
||||
if (nhfp->structlevel)
|
||||
bufon(nhfp->fd);
|
||||
return;
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
#endif /* MINIMAL_FOR_RECOVER */
|
||||
|
||||
struct critical_sizes_with_names {
|
||||
@@ -662,9 +677,10 @@ store_critical_bytes(NHFILE *nhfp)
|
||||
/* int cmc = 0; */
|
||||
|
||||
if (nhfp->mode & WRITING) {
|
||||
indicate = (nhfp->structlevel) ? 'h'
|
||||
: (nhfp->fnidx == cnvascii) ? 'a'
|
||||
: '?';
|
||||
indicate = (nhfp->structlevel) ? 'h'
|
||||
: (nhfp->fnidx == exportascii)
|
||||
? 'a'
|
||||
: '?';
|
||||
Sfo_char(nhfp, &indicate, "indicate-format", 1);
|
||||
Sfo_char(nhfp, &csc_count, "count-critical_sizes", 1);
|
||||
cnt = (int) csc_count;
|
||||
@@ -693,7 +709,11 @@ store_critical_bytes(NHFILE *nhfp)
|
||||
int
|
||||
uptodate(NHFILE *nhfp, const char *name, unsigned long utdflags)
|
||||
{
|
||||
#ifdef SFCTOOL
|
||||
extern struct version_info vers_info;
|
||||
#else
|
||||
struct version_info vers_info;
|
||||
#endif
|
||||
char indicator;
|
||||
int sfstatus = 0, idx_1st_mismatch = 0;
|
||||
boolean quietly = (utdflags & UTD_QUIETLY) != 0;
|
||||
@@ -708,19 +728,18 @@ uptodate(NHFILE *nhfp, const char *name, unsigned long utdflags)
|
||||
critical_sizes[idx_1st_mismatch].ucsize,
|
||||
critical_sizes[idx_1st_mismatch].nm);
|
||||
}
|
||||
return sfstatus;
|
||||
}
|
||||
|
||||
Sfi_version_info(nhfp, &vers_info, "version_info");
|
||||
if (!check_version(&vers_info, name, verbose, utdflags)) {
|
||||
if (verbose) {
|
||||
if ((utdflags & UTD_WITHOUT_WAITSYNCH_PERFILE) == 0)
|
||||
if ((utdflags & UTD_WITHOUT_WAITSYNCH_PERFILE) == 0) {
|
||||
wait_synch();
|
||||
}
|
||||
}
|
||||
return SF_OUTDATED;
|
||||
}
|
||||
|
||||
return SF_UPTODATE;
|
||||
return sfstatus;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -819,12 +838,15 @@ validate(NHFILE *nhfp, const char *name, boolean without_waitsynch_perfile)
|
||||
unsigned long utdflags = 0L;
|
||||
int validsf = 0;
|
||||
|
||||
#ifdef SFCTOOL
|
||||
utdflags |= UTD_QUIETLY;
|
||||
#endif
|
||||
if (nhfp->structlevel)
|
||||
utdflags |= UTD_CHECKSIZES;
|
||||
if (without_waitsynch_perfile)
|
||||
utdflags |= UTD_WITHOUT_WAITSYNCH_PERFILE;
|
||||
if (nhfp->fieldlevel)
|
||||
utdflags |= UTD_CHECKFIELDCOUNTS | UTD_SKIP_SANITY1 | UTD_QUIETLY;
|
||||
utdflags |= UTD_CHECKFIELDCOUNTS | UTD_SKIP_SANITY1;
|
||||
validsf = uptodate(nhfp, name, utdflags);
|
||||
return validsf;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ struct wseg {
|
||||
coordxy wx, wy; /* the segment's position */
|
||||
};
|
||||
|
||||
#ifndef SFCTOOL
|
||||
staticfn void toss_wsegs(struct wseg *, boolean) NO_NNARGS;
|
||||
staticfn void shrink_worm(int);
|
||||
|
||||
@@ -21,6 +22,7 @@ staticfn void shrink_worm(int);
|
||||
staticfn void random_dir(int, int, int *, int *);
|
||||
#endif
|
||||
staticfn struct wseg *create_worm_tail(int); /* may return NULL */
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/* Description of long worm implementation.
|
||||
*
|
||||
@@ -76,6 +78,7 @@ static struct wseg *wheads[MAX_NUM_WORMS] = DUMMY,
|
||||
*wtails[MAX_NUM_WORMS] = DUMMY;
|
||||
static long wgrowtime[MAX_NUM_WORMS] = DUMMY;
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/*
|
||||
* get_wormno()
|
||||
*
|
||||
@@ -563,6 +566,7 @@ save_worm(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*
|
||||
* rest_worm()
|
||||
@@ -598,6 +602,7 @@ rest_worm(NHFILE *nhfp)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/*
|
||||
* place_wsegs()
|
||||
*
|
||||
@@ -991,5 +996,6 @@ redraw_worm(struct monst *worm)
|
||||
curr = curr->nseg;
|
||||
}
|
||||
}
|
||||
#endif /* !SFCTOOL */
|
||||
|
||||
/*worm.c*/
|
||||
|
||||
@@ -288,6 +288,11 @@ package: $(GAME) recover $(VARDAT) spec_levs
|
||||
recover: $(GAME)
|
||||
( cd util ; $(MAKE) $(RECOVERBIN) )
|
||||
|
||||
# sfctool can be configured by the sysadmin to convert the savefile
|
||||
# content format as necessary.
|
||||
sfctool: $(GAME)
|
||||
( cd util ; $(MAKE) sfctool )
|
||||
|
||||
dofiles:
|
||||
target=`sed -n \
|
||||
-e '/librarian/{' \
|
||||
|
||||
@@ -118,6 +118,12 @@ LIBS =
|
||||
|
||||
OBJDIR = ../src
|
||||
|
||||
# This is the universal ctags utility which produces the tags in the
|
||||
# format that util/readtags requires.
|
||||
# https://github.com/universal-ctags/ctags.git
|
||||
#CTAGSCMD = universal-ctags
|
||||
CTAGSCMD = ctags
|
||||
|
||||
# if you change this to 1, feedback while building will omit -Dthis -Wthat
|
||||
# -Isomewhere so that each file being compiled is listed on one short line;
|
||||
# it requires support for '$<' in rules with more than one prerequisite
|
||||
@@ -288,6 +294,166 @@ recover.o: recover.c $(CONFIG_H)
|
||||
|
||||
recover-version.o: ../src/version.c $(HACK_H)
|
||||
$(CC) $(CFLAGS) $(CSTD) -DMINIMAL_FOR_RECOVER -c ../src/version.c -o $@
|
||||
#
|
||||
# dependencies for optional sfctool
|
||||
#
|
||||
# object files for sfctool utility
|
||||
SFCTOOLOBJS = $(TARGETPFX)sfctool.o $(TARGETPFX)sf-alloc.o \
|
||||
$(TARGETPFX)sf-monst.o $(TARGETPFX)sf-objects.o \
|
||||
$(TARGETPFX)sfbase.o $(TARGETPFX)sfstruct.o \
|
||||
$(TARGETPFX)sfexpasc.o \
|
||||
$(TARGETPFX)sfdata.o $(TARGETPFX)sf-nhlua.o \
|
||||
$(TARGETPFX)panic.o $(TARGETPFX)sf-date.o \
|
||||
$(TARGETPFX)sf-decl.o $(TARGETPFX)sf-artifact.o \
|
||||
$(TARGETPFX)sf-dungeon.o $(TARGETPFX)sf-end.o \
|
||||
$(TARGETPFX)sf-engrave.o $(TARGETPFX)sf-cfgfiles.o \
|
||||
$(TARGETPFX)sf-files.o $(TARGETPFX)sf-light.o \
|
||||
$(TARGETPFX)sf-mdlib.o $(TARGETPFX)sf-mkmaze.o \
|
||||
$(TARGETPFX)sf-mkroom.o $(TARGETPFX)sf-o_init.o \
|
||||
$(TARGETPFX)sf-region.o $(TARGETPFX)sf-restore.o \
|
||||
$(TARGETPFX)sf-rumors.o $(TARGETPFX)sf-sys.o \
|
||||
$(TARGETPFX)sf-timeout.o $(TARGETPFX)sf-track.o \
|
||||
$(TARGETPFX)sf-version.o $(TARGETPFX)sf-worm.o \
|
||||
$(TARGETPFX)strutil.o
|
||||
SFCTOOLBIN = sfctool
|
||||
|
||||
SFFLAGS=-DSFCTOOL -DNOPANICTRACE -DNOCRASHREPORT -DNO_CHRONICLE
|
||||
sfutil: $(SFCTOOLBIN)
|
||||
@echo '$(SFCTOOLBIN) is up to date.'
|
||||
$(SFCTOOLBIN): $(SFCTOOLOBJS) $(HACKLIB)
|
||||
$(TARGET_CLINK) $(TARGET_LFLAGS) -o $@ $(SFCTOOLOBJS) $(HACKLIB) $(TARGET_LIBS)
|
||||
$(TARGETPFX)sfctool.o: sfctool.c $(HACK_H) ../include/sfprocs.h
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c sfctool.c
|
||||
$(TARGETPFX)sfdata.o: sfdata.c $(HACK_H) ../include/sfprocs.h ../include/sfproto.h
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c sfdata.c
|
||||
$(TARGETPFX)sfexpasc.o: sfexpasc.c $(HACK_H) ../include/sfprocs.h ../include/sfproto.h
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c sfexpasc.c
|
||||
$(TARGETPFX)sf-alloc.o: ../src/alloc.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/alloc.c
|
||||
$(TARGETPFX)sf-date.o: ../src/date.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/date.c
|
||||
$(TARGETPFX)sf-decl.o: ../src/decl.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/decl.c
|
||||
$(TARGETPFX)sf-panic.o: panic.c $(CONFIG_H)
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c panic.c
|
||||
$(TARGETPFX)sf-monst.o: ../src/monst.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/monst.c
|
||||
$(TARGETPFX)sf-objects.o: ../src/objects.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/objects.c
|
||||
$(TARGETPFX)sf-sfbase.o: ../src/sfbase.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/sfbase.c
|
||||
$(TARGETPFX)sfstruct.o: ../src/sfstruct.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/sfstruct.c
|
||||
$(TARGETPFX)sf-artifact.o: ../src/artifact.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/artifact.c
|
||||
$(TARGETPFX)sf-dungeon.o: ../src/dungeon.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/dungeon.c
|
||||
$(TARGETPFX)sf-end.o: ../src/end.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/end.c
|
||||
$(TARGETPFX)sf-engrave.o: ../src/engrave.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/engrave.c
|
||||
$(TARGETPFX)sf-cfgfiles.o: ../src/cfgfiles.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/cfgfiles.c
|
||||
$(TARGETPFX)sf-files.o: ../src/files.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/files.c
|
||||
$(TARGETPFX)sf-light.o: ../src/light.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/light.c
|
||||
$(TARGETPFX)sf-mdlib.o: ../src/mdlib.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/mdlib.c
|
||||
$(TARGETPFX)sf-mkmaze.o: ../src/mkmaze.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/mkmaze.c
|
||||
$(TARGETPFX)sf-mkroom.o: ../src/mkroom.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/mkroom.c
|
||||
$(TARGETPFX)sf-o_init.o: ../src/o_init.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/o_init.c
|
||||
$(TARGETPFX)sf-region.o: ../src/region.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/region.c
|
||||
$(TARGETPFX)sf-restore.o: ../src/restore.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/restore.c
|
||||
$(TARGETPFX)sf-rumors.o: ../src/rumors.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/rumors.c
|
||||
$(TARGETPFX)sf-sys.o: ../src/sys.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/sys.c
|
||||
$(TARGETPFX)sf-timeout.o: ../src/timeout.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/timeout.c
|
||||
$(TARGETPFX)sf-track.o: ../src/track.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/track.c
|
||||
$(TARGETPFX)sf-version.o: ../src/version.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/version.c
|
||||
$(TARGETPFX)sf-worm.o: ../src/worm.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/worm.c
|
||||
$(TARGETPFX)sf-nhlua.o: ../src/nhlua.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/nhlua.c
|
||||
$(TARGETPFX)sfbase.o: ../src/sfbase.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/sfbase.c
|
||||
$(TARGETPFX)strutil.o: ../src/strutil.c
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c ../src/strutil.c
|
||||
|
||||
sftags: sftags.o
|
||||
$(CLINK) $(LFLAGS) -o $@ sftags.o $(LIBS)
|
||||
sftags.o: sftags.c $(HACK_H)
|
||||
$(CC) $(CFLAGS) -c sftags.c
|
||||
../include/sfproto.h: sf.tags sftags
|
||||
./sftags
|
||||
sfdata.c: sf.tags sftags
|
||||
./sftags
|
||||
# dependencies for sftags
|
||||
# #
|
||||
CTAGDEP = ../include/align.h ../include/artifact.h ../include/artilist.h \
|
||||
../include/attrib.h ../include/context.h ../include/coord.h \
|
||||
../include/decl.h ../include/dungeon.h ../include/engrave.h \
|
||||
../include/flag.h ../include/func_tab.h ../include/global.h \
|
||||
../include/hack.h ../include/mextra.h \
|
||||
../include/mkroom.h ../include/monst.h ../include/defsym.h \
|
||||
../include/obj.h ../include/objclass.h ../include/prop.h \
|
||||
../include/quest.h ../include/rect.h ../include/region.h \
|
||||
../include/rm.h ../include/skills.h ../include/spell.h \
|
||||
../include/sys.h ../include/timeout.h ../include/trap.h \
|
||||
../include/you.h ../include/onames.h ../include/wintype.h
|
||||
# ../include/permonst.h
|
||||
CTAGSOPT = --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern
|
||||
#
|
||||
INCL=../include/
|
||||
SRC=../src/
|
||||
sf.tags: $(CTAGDEP)
|
||||
$(CTAGSCMD) $(CTAGSOPT) -f $@ $(INCL)align.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)artifact.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)artifact.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)artilist.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)attrib.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)bones.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)context.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)coord.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)decl.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)decl.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)dungeon.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)engrave.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)engrave.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)flag.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)func_tab.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)global.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)hack.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)mextra.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)mkroom.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)monst.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)defsym.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)obj.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)objclass.h
|
||||
# $(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)permonst.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)prop.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)quest.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)rect.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)region.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)rm.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)skills.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)spell.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)stairs.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)sys.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)timeout.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)trap.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)you.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)onames.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)wintype.h
|
||||
|
||||
# dependencies for dlb
|
||||
#
|
||||
|
||||
@@ -49,6 +49,7 @@ dospkg: dodata dosfonts $(GAMEBIN) $(TARGETPFX)recover.exe ../dat/nhtiles.bmp
|
||||
mkdir -p $(TARGETPFX)pkg
|
||||
cp $(GAMEBIN) $(TARGETPFX)pkg/NETHACK.EXE
|
||||
cp $(TARGETPFX)recover.exe $(TARGETPFX)pkg/RECOVER.EXE
|
||||
-cp $(SFCTOOLBIN) $(TARGETPFX)pkg/SFCTOOL.EXE
|
||||
cp ../dat/nhdat $(TARGETPFX)pkg/NHDAT
|
||||
cp ../dat/license $(TARGETPFX)pkg/LICENSE
|
||||
cp ../dat/nhtiles.bmp $(TARGETPFX)pkg/NHTILES.BMP
|
||||
|
||||
@@ -228,6 +228,7 @@ override LUALIBS=
|
||||
override TOPLUALIB=
|
||||
override GAMEBIN = $(TARGETPFX)nethack.exe
|
||||
override RECOVERBIN = $(TARGETPFX)recover.exe
|
||||
override SFCTOOLBIN = $(TARGETPFX)sfctool.exe
|
||||
override PACKAGE = dospkg
|
||||
override PREGAME += mkdir -p $(TARGETDIR) ; make $(TARGETPFX)exceptn.o ;
|
||||
override CLEANMORE += rm -f -r $(TARGETDIR) ; rm -f -r $(FONTTARGETS) ;
|
||||
|
||||
@@ -866,15 +866,15 @@ COREOBJTTY = \
|
||||
$(OTTY)quest.o $(OTTY)questpgr.o $(OTTY)read.o $(OTTY)rect.o \
|
||||
$(OTTY)region.o $(OTTY)report.o $(OTTY)restore.o $(OTTY)rip.o \
|
||||
$(OTTY)rnd.o $(OTTY)role.o $(OTTY)rumors.o $(OTTY)save.o \
|
||||
$(OTTY)selvar.o $(OTTY)sfstruct.o $(OTTY)shk.o $(OTTY)shknam.o \
|
||||
$(OTTY)sit.o $(OTTY)sounds.o $(OTTY)sp_lev.o $(OTTY)spell.o \
|
||||
$(OTTY)stairs.o $(OTTY)steal.o $(OTTY)steed.o $(OTTY)strutil.o \
|
||||
$(OTTY)symbols.o $(OTTY)sys.o $(OTTY)teleport.o $(OTTY)timeout.o \
|
||||
$(OTTY)topten.o $(OTTY)track.o $(OTTY)trap.o $(OTTY)u_init.o \
|
||||
$(OTTY)uhitm.o $(OTTY)utf8map.o $(OTTY)vault.o $(OTTY)vision.o \
|
||||
$(OTTY)weapon.o $(OTTY)were.o $(OTTY)wield.o $(OTTY)windows.o \
|
||||
$(OTTY)wizard.o $(OTTY)wizcmds.o $(OTTY)worm.o $(OTTY)worn.o \
|
||||
$(OTTY)write.o $(OTTY)zap.o $(OTTY)sfbase.o
|
||||
$(OTTY)selvar.o $(OTTY)sfbase.o $(OTTY)sfstruct.o $(OTTY)shk.o \
|
||||
$(OTTY)shknam.o $(OTTY)sit.o $(OTTY)sounds.o $(OTTY)sp_lev.o \
|
||||
$(OTTY)spell.o $(OTTY)stairs.o $(OTTY)steal.o $(OTTY)steed.o \
|
||||
$(OTTY)strutil.o $(OTTY)symbols.o $(OTTY)sys.o $(OTTY)teleport.o \
|
||||
$(OTTY)timeout.o $(OTTY)topten.o $(OTTY)track.o $(OTTY)trap.o \
|
||||
$(OTTY)u_init.o $(OTTY)uhitm.o $(OTTY)utf8map.o $(OTTY)vault.o \
|
||||
$(OTTY)vision.o $(OTTY)weapon.o $(OTTY)were.o $(OTTY)wield.o \
|
||||
$(OTTY)windows.o $(OTTY)wizard.o $(OTTY)wizcmds.o $(OTTY)worm.o \
|
||||
$(OTTY)worn.o $(OTTY)write.o $(OTTY)zap.o
|
||||
|
||||
OBJSTTY = $(MDLIBTTY) $(COREOBJTTY) $(REGEXTTY) $(RANDOMTTY)
|
||||
|
||||
@@ -929,15 +929,15 @@ COREOBJGUI = \
|
||||
$(OGUI)quest.o $(OGUI)questpgr.o $(OGUI)read.o $(OGUI)rect.o \
|
||||
$(OGUI)region.o $(OGUI)report.o $(OGUI)restore.o $(OGUI)rip.o \
|
||||
$(OGUI)rnd.o $(OGUI)role.o $(OGUI)rumors.o $(OGUI)save.o \
|
||||
$(OGUI)selvar.o $(OGUI)sfstruct.o $(OGUI)shk.o $(OGUI)shknam.o \
|
||||
$(OGUI)sit.o $(OGUI)sounds.o $(OGUI)sp_lev.o $(OGUI)spell.o \
|
||||
$(OGUI)stairs.o $(OGUI)steal.o $(OGUI)steed.o $(OGUI)strutil.o \
|
||||
$(OGUI)symbols.o $(OGUI)sys.o $(OGUI)teleport.o $(OGUI)timeout.o \
|
||||
$(OGUI)topten.o $(OGUI)track.o $(OGUI)trap.o $(OGUI)u_init.o \
|
||||
$(OGUI)uhitm.o $(OGUI)utf8map.o $(OGUI)vault.o $(OGUI)vision.o \
|
||||
$(OGUI)weapon.o $(OGUI)were.o $(OGUI)wield.o $(OGUI)windows.o \
|
||||
$(OGUI)wizard.o $(OGUI)wizcmds.o $(OGUI)worm.o $(OGUI)worn.o \
|
||||
$(OGUI)write.o $(OGUI)zap.o $(OGUI)sfbase.o
|
||||
$(OGUI)selvar.o $(OGUI)sfbase.o $(OGUI)sfstruct.o $(OGUI)shk.o \
|
||||
$(OGUI)shknam.o $(OGUI)sit.o $(OGUI)sounds.o $(OGUI)sp_lev.o \
|
||||
$(OGUI)spell.o $(OGUI)stairs.o $(OGUI)steal.o $(OGUI)steed.o \
|
||||
$(OGUI)strutil.o $(OGUI)symbols.o $(OGUI)sys.o $(OGUI)teleport.o \
|
||||
$(OGUI)timeout.o $(OGUI)topten.o $(OGUI)track.o $(OGUI)trap.o \
|
||||
$(OGUI)u_init.o $(OGUI)uhitm.o $(OGUI)utf8map.o $(OGUI)vault.o \
|
||||
$(OGUI)vision.o $(OGUI)weapon.o $(OGUI)were.o $(OGUI)wield.o \
|
||||
$(OGUI)windows.o $(OGUI)wizard.o $(OGUI)wizcmds.o $(OGUI)worm.o \
|
||||
$(OGUI)worn.o $(OGUI)write.o $(OGUI)zap.o
|
||||
|
||||
OBJSGUI = $(MDLIBGUI) $(COREOBJGUI) $(REGEXGUI) $(RANDOMGUI)
|
||||
|
||||
@@ -1155,7 +1155,7 @@ R_CTAGSDIR=$(LIBDIR)ctags
|
||||
CTAGSDIR=$(R_CTAGSDIR)$(BACKSLASH)
|
||||
#U_CTAGSDIR=$(CTAGSDIR:\=/)
|
||||
!ELSE
|
||||
R_CTAGSDIR=..\..\..\ctags
|
||||
R_CTAGSDIR=..\lib\ctags
|
||||
CTAGSDIR=$(R_CTAGSDIR)$(BACKSLASH)
|
||||
#U_CTAGSDIR=$(CTAGSDIR:\=/)
|
||||
!ENDIF
|
||||
@@ -1724,6 +1724,7 @@ binary.tag: $(DAT)data $(DAT)rumors $(DAT)oracles $(DLB) \
|
||||
if exist $(DAT)symbols copy $(DAT)symbols $(GAMEDIR)symbols
|
||||
if exist $(DOC)guidebook.txt copy $(DOC)guidebook.txt $(GAMEDIR)Guidebook.txt
|
||||
if exist $(DOC)nethack.txt copy $(DOC)nethack.txt $(GAMEDIR)NetHack.txt
|
||||
# if exist $(UTIL)sfctool.pdb copy $(UTIL)sfctool.pdb $(GAMEDIR)sfctool.pdb
|
||||
@if exist $(GAMEDIR)NetHack.PDB echo NOTE: You may want to remove $(U_GAMEDIR)/NetHack.PDB to conserve space
|
||||
@if exist $(GAMEDIR)NetHackW.PDB echo NOTE: You may want to remove $(U_GAMEDIR)/NetHackW.PDB to conserve space
|
||||
-if exist $(MSWSYS)nethackrc.template copy $(MSWSYS)nethackrc.template $(R_GAMEDIR)
|
||||
@@ -2471,6 +2472,174 @@ $(DAT)epitaph: $(U)makedefs.exe $(DAT)epitaph.txt
|
||||
$(DAT)bogusmon: $(U)makedefs.exe $(DAT)bogusmon.txt
|
||||
$(U)makedefs -3
|
||||
|
||||
# This is the universal ctags utility which produces the tags in the
|
||||
# format that util/readtags requires.
|
||||
# https://github.com/universal-ctags/ctags.git
|
||||
|
||||
#===============================================================================
|
||||
# sfutil
|
||||
#===============================================================================
|
||||
SFCTOOLOBJS = $(OUTL)sfctool.o $(OUTL)sf-alloc.o \
|
||||
$(OUTL)sf-monst.o $(OUTL)sf-objects.o \
|
||||
$(OUTL)sfbase.o $(OUTL)sf-struct.o \
|
||||
$(OUTL)sfexpasc.o \
|
||||
$(OUTL)sfdata.o $(OUTL)sf-nhlua.o \
|
||||
$(OUTL)panic.o $(OUTL)sf-date.o $(OUTL)sf-decl.o \
|
||||
$(OUTL)sf-artifact.o $(OUTL)sf-cfgfiles.o \
|
||||
$(OUTL)sf-dungeon.o $(OUTL)sf-end.o \
|
||||
$(OUTL)sf-engrave.o $(OUTL)sf-files.o $(OUTL)sf-light.o \
|
||||
$(OUTL)sf-mdlib.o $(OUTL)sf-mkmaze.o $(OUTL)sf-mkroom.o \
|
||||
$(OUTL)sf-o_init.o $(OUTL)sf-region.o \
|
||||
$(OUTL)sf-restore.o $(OUTL)sf-rumors.o \
|
||||
$(OUTL)sf-sys.o $(OUTL)sf-timeout.o $(OUTL)sf-track.o \
|
||||
$(OUTL)sf-version.o $(OUTL)sf-worm.o \
|
||||
$(OUTL)strutil.o $(OUTL)sf-windsys.o
|
||||
|
||||
SFCTOOLBIN = $(BinDir)sfctool.exe
|
||||
SFFLAGS = -DSFCTOOL -DNOPANICTRACE -DNOCRASHREPORT -DNO_CHRONICLE
|
||||
|
||||
#CTAGSCMD = $(LIB)\ctags\ctags.exe
|
||||
|
||||
#
|
||||
# dependencies for optional sfctool
|
||||
#
|
||||
# $(Q)$(CC) $(CFLAGS) -Fo$@ monst.c
|
||||
|
||||
#$(UTIL)sfutil.exe: $(SFCTOOLBIN)
|
||||
#$(UTIL)sfctool.exe: $(SFCTOOLBIN)
|
||||
|
||||
$(SFCTOOLBIN): $(OUTLHACKLIB) $(SFCTOOLOBJS)
|
||||
$(link) $(lflags) -out:$@ /PDB:$(BinDir)$(@B).PDB $(SFCTOOLOBJS) \
|
||||
$(LIBS) ole32.lib Shell32.lib userenv.lib advapi32.lib $(OUTLHACKLIB)
|
||||
@echo '$(SFCTOOLBIN) is up to date.'
|
||||
$(OUTL)sfctool.o: $(UTIL)sfctool.c $(HACK_H) $(INCL)sfprocs.h
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(UTIL)sfctool.c
|
||||
$(OUTL)sfdata.o: $(UTIL)sfdata.c $(HACK_H) $(INCL)sfprocs.h $(INCL)sfproto.h
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(UTIL)sfdata.c
|
||||
$(OUTL)sfexpasc.o: $(UTIL)sfexpasc.c $(HACK_H) $(INCL)sfprocs.h $(INCL)sfproto.h
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(UTIL)sfexpasc.c
|
||||
$(OUTL)sf-alloc.o: $(SRC)alloc.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)alloc.c
|
||||
$(OUTL)sf-date.o: $(SRC)date.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)date.c
|
||||
$(OUTL)sf-decl.o: $(SRC)decl.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)decl.c
|
||||
$(OUTL)sf-monst.o: $(SRC)monst.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)monst.c
|
||||
$(OUTL)sf-objects.o: $(SRC)objects.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)objects.c
|
||||
$(OUTL)sfbase.o: $(SRC)sfbase.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)sfbase.c
|
||||
$(OUTL)sf-struct.o: $(SRC)sfstruct.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)sfstruct.c
|
||||
$(OUTL)sf-artifact.o: $(SRC)artifact.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)artifact.c
|
||||
$(OUTL)sf-cfgfiles.o: $(SRC)cfgfiles.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)cfgfiles.c
|
||||
$(OUTL)sf-dungeon.o: $(SRC)dungeon.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)dungeon.c
|
||||
$(OUTL)sf-end.o: $(SRC)end.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)end.c
|
||||
$(OUTL)sf-engrave.o: $(SRC)engrave.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)engrave.c
|
||||
$(OUTL)sf-files.o: $(SRC)files.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)files.c
|
||||
$(OUTL)sf-light.o: $(SRC)light.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)light.c
|
||||
$(OUTL)sf-mdlib.o: $(SRC)mdlib.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)mdlib.c
|
||||
$(OUTL)sf-mkmaze.o: $(SRC)mkmaze.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)mkmaze.c
|
||||
$(OUTL)sf-mkroom.o: $(SRC)mkroom.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)mkroom.c
|
||||
$(OUTL)sf-o_init.o: $(SRC)o_init.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)o_init.c
|
||||
$(OUTL)sf-region.o: $(SRC)region.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)region.c
|
||||
$(OUTL)sf-restore.o: $(SRC)restore.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)restore.c
|
||||
$(OUTL)sf-rumors.o: $(SRC)\rumors.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)rumors.c
|
||||
$(OUTL)sf-timeout.o: $(SRC)timeout.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)timeout.c
|
||||
$(OUTL)sf-version.o: $(SRC)version.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)version.c
|
||||
$(OUTL)sf-worm.o: $(SRC)worm.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)worm.c
|
||||
$(OUTL)sf-nhlua.o: $(SRC)nhlua.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)nhlua.c
|
||||
$(OUTL)sf-track.o: $(SRC)track.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)track.c
|
||||
$(OUTL)sf-sys.o: $(SRC)sys.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(SRC)sys.c
|
||||
$(OUTL)sf-windsys.o: $(MSWSYS)windsys.c
|
||||
$(Q)$(CC) $(CFLAGS) $(SFFLAGS) -Fo$@ -c $(MSWSYS)windsys.c
|
||||
|
||||
$(UTIL)sftags.exe: $(OUTL)sftags.o
|
||||
$(link) $(LFLAGS) /OUT:$@ $(OUTL)sftags.o
|
||||
$(OUTL)sftags.o: $(UTIL)sftags.c $(HACK_H)
|
||||
$(Q)$(CC) $(CFLAGS) -Fo$@ -c $(UTIL)sftags.c
|
||||
$(INCL)sfproto.h: $(UTIL)sftags.exe $(UTIL)sf.tags
|
||||
$(UTIL)sftags.exe
|
||||
$(UTIL)sfdata.c: $(UTIL)sftags.exe $(UTIL)sf.tags
|
||||
$(UTIL)sftags.exe
|
||||
# dependencies for sftags
|
||||
# #
|
||||
CTAGDEP = $(INCL)align.h $(INCL)artifact.h $(INCL)artilist.h \
|
||||
$(INCL)attrib.h $(INCL)context.h $(INCL)coord.h \
|
||||
$(INCL)decl.h $(INCL)dungeon.h $(INCL)engrave.h \
|
||||
$(INCL)flag.h $(INCL)func_tab.h $(INCL)global.h \
|
||||
$(INCL)hack.h $(INCL)mextra.h \
|
||||
$(INCL)mkroom.h $(INCL)monst.h \
|
||||
$(INCL)obj.h $(INCL)objclass.h $(INCL)prop.h \
|
||||
$(INCL)quest.h $(INCL)rect.h $(INCL)region.h \
|
||||
$(INCL)rm.h $(INCL)skills.h $(INCL)spell.h \
|
||||
$(INCL)stairs.h $(INCL)sys.h $(INCL)timeout.h \
|
||||
$(INCL)trap.h $(INCL)you.h $(INCL)onames.h \
|
||||
$(INCL)wintype.h
|
||||
# $(INCL)permonst.h
|
||||
CTAGSOPT = --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern
|
||||
#
|
||||
$(UTIL)sf.tags: $(CTAGDEP)
|
||||
$(CTAGSCMD) $(CTAGSOPT) -f $@ $(INCL)align.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)artifact.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)artifact.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)artilist.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)attrib.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)bones.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)context.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)coord.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)decl.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)decl.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)dungeon.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)engrave.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(SRC)engrave.c
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)flag.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)func_tab.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)global.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)hack.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)mextra.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)mkroom.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)monst.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)defsym.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)obj.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)objclass.h
|
||||
# $(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)permonst.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)prop.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)quest.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)rect.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)region.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)rm.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)skills.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)spell.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)stairs.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)sys.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)timeout.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)trap.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)you.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)onames.h
|
||||
$(CTAGSCMD) $(CTAGSOPT) -a -f $@ $(INCL)wintype.h
|
||||
|
||||
#===============================================================================
|
||||
# Integrated sound files
|
||||
#===============================================================================
|
||||
@@ -2541,13 +2710,15 @@ $(SndWavDir)sa2_xplevelup.wav: $(SndWavDir)sa2_xplevelup.uu $(U)uudecode.exe
|
||||
#===============================================================================
|
||||
|
||||
PKGFILES = nethackrc.template Guidebook.txt license NetHack.exe NetHack.txt \
|
||||
NetHackW.exe opthelp nhdat370 record symbols sysconf.template
|
||||
NetHackW.exe opthelp nhdat370 record symbols sysconf.template \
|
||||
sfctool.exe
|
||||
FILESTOZIP = $(BinDir)nethackrc.template $(BinDir)Guidebook.txt $(BinDir)license \
|
||||
$(BinDir)NetHack.exe $(BinDir)NetHack.txt $(BinDir)NetHackW.exe \
|
||||
$(BinDir)opthelp $(BinDir)nhdat370 $(BinDir)record \
|
||||
$(BinDir)symbols $(BinDir)sysconf.template
|
||||
DBGSYMS = NetHack.PDB NetHackW.PDB
|
||||
PDBTOZIP = $(BinDir)NetHack.PDB $(BinDir)NetHackW.PDB
|
||||
$(BinDir)symbols $(BinDir)sysconf.template $(BinDir)sfctool.exe
|
||||
|
||||
DBGSYMS = NetHack.PDB NetHackW.PDB sfctool.PDB
|
||||
PDBTOZIP = $(BinDir)NetHack.PDB $(BinDir)NetHackW.PDB $(BinDir)sfctool.PDB
|
||||
MAINZIP = $(PkgDir)nethack-$(NHV)-win-$(TARGET_CPU).zip
|
||||
DBGSYMZIP = $(PkgDir)nethack-$(NHV)-win-$(TARGET_CPU)-debugsymbols.zip
|
||||
|
||||
@@ -2568,7 +2739,7 @@ binary: envchk.tag libdir.tag ottydir$(TARGET_CPU).tag \
|
||||
$(INCL)nhlua.h $(OUTL)utility.tag \
|
||||
$(DAT)data $(DAT)rumors $(DAT)oracles $(DAT)engrave \
|
||||
$(DAT)epitaph $(DAT)bogusmon $(GAMEDIR)NetHack.exe \
|
||||
$(GAMEDIR)NetHackW.exe $(GAMEDIRDLLS) binary.tag
|
||||
$(GAMEDIR)NetHackW.exe $(GAMEDIR)sfctool.exe $(GAMEDIRDLLS) binary.tag
|
||||
@echo NetHack is up to date.
|
||||
|
||||
#===============================================================================
|
||||
|
||||
@@ -317,4 +317,4 @@
|
||||
<Target Name="AfterRebuild">
|
||||
<MSBuild Projects="afternethack.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
|
||||
</Target>
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
@@ -379,4 +379,4 @@
|
||||
<Target Name="AfterRebuild">
|
||||
<MSBuild Projects="$(vsDir)NetHack\afternethack.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
|
||||
</Target>
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
<WinCursDir>$(RootDir)win\curses\</WinCursDir>
|
||||
<SubmodulesDir>$(RootDir)submodules\</SubmodulesDir>
|
||||
<LuaDir>$(LibDir)lua-$(LUA_VERSION)\src\</LuaDir>
|
||||
<SftagsDir>$(RootDir)\sys\windows\vs\sftags\</SftagsDir>
|
||||
<SfctoolDir>$(RootDir)\sys\windows\vs\sfctool\</SfctoolDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(PDCURSESMOD)'=='' AND Exists('$(LibDir)pdcursesmod\curses.h')">
|
||||
<PDCURSESMOD>$(LibDir)pdcursesmod\</PDCURSESMOD>
|
||||
|
||||
49
sys/windows/vs/fetchctags/fetchctags.nmake
Normal file
49
sys/windows/vs/fetchctags/fetchctags.nmake
Normal file
@@ -0,0 +1,49 @@
|
||||
# NetHack 3.7 fetchctags.nmake
|
||||
#==============================================================================
|
||||
#
|
||||
# The version of the game this Makefile was designed for
|
||||
NETHACK_VERSION="3.7.0"
|
||||
|
||||
# A brief version for use in macros
|
||||
NHV=$(NETHACK_VERSION:.=)
|
||||
NHV=$(NHV:"=)
|
||||
|
||||
# The location of the ctags that we want
|
||||
CTAGS_VERSION=6.1.0
|
||||
CURLCTAGSSRC=https://github.com/universal-ctags/ctags-win32/releases/download/v$(CTAGS_VERSION)/ctags-v$(CTAGS_VERSION)-x64.zip
|
||||
CURLCTAGSDST=ctags-v$(CTAGS_VERSION)-x64.zip
|
||||
|
||||
#
|
||||
# relative directories from root of NetHack tree.
|
||||
#
|
||||
|
||||
ROOTDIR=..\..\..\.. # root of NetHack tree relative to project file
|
||||
LIBDIR=$(ROOTDIR)\lib
|
||||
CTAGSDIR=$(LIBDIR)\ctags
|
||||
|
||||
default: fetchall
|
||||
|
||||
fetchall: fetch-ctags
|
||||
|
||||
fetch-ctags: $(CTAGSDIR)
|
||||
cd $(LIBDIR)
|
||||
curl --insecure -L -R -O $(CURLCTAGSSRC)
|
||||
# cd ctags
|
||||
tar zxf $(CURLCTAGSDST) -C ctags
|
||||
cd ..\sys\windows\vs\fetchctags
|
||||
@echo ctags.exe has been fetched into $(LIBDIR)\ctags
|
||||
|
||||
$(CTAGSDIR): $(LIBDIR)
|
||||
@if not exist $(CTAGSDIR)\*.* echo creating directory $(CTAGSDIR:\=/)
|
||||
@if not exist $(CTAGSDIR)\*.* mkdir $(CTAGSDIR)
|
||||
|
||||
$(LIBDIR):
|
||||
@if not exist $(LIBDIR)\*.* echo creating directory $(LIBDIR:\=/)
|
||||
@if not exist $(LIBDIR)\*.* mkdir $(LIBDIR)
|
||||
|
||||
rebuild:
|
||||
@if exist $(CTAGSDIR)\ctags.exe echo nothing to do for $(CTAGSDIR)\ctags.exe
|
||||
|
||||
clean:
|
||||
if exist $(CURLCTAGSDST) del $(CURLCTAGSDST)
|
||||
|
||||
71
sys/windows/vs/fetchctags/fetchctags.vcxproj
Normal file
71
sys/windows/vs/fetchctags/fetchctags.vcxproj
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<Import Project="..\config.props" />
|
||||
<Import Project="..\dirs.props" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<ProjectGuid>{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="Exists('$(LibDir)ctags') AND Exists('$(LibDir)ctags\ctags.exe')">
|
||||
<NMakeBuildCommandLine>echo ..\lib\ctags is already present</NMakeBuildCommandLine>
|
||||
<NMakeCleanCommandLine>pushd $(vsDir)fetchctags %26%26 nmake -F fetchctags.nmake clean %26%26 popd</NMakeCleanCommandLine>
|
||||
<NMakeReBuildCommandLine>echo rebuilding $(vsDir)fetchctags </NMakeReBuildCommandLine>
|
||||
<NMakePreprocessorDefinitions>_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="!Exists('$(LibDir)ctags\ctags.exe')">
|
||||
<NMakeBuildCommandLine>pushd $(vsDir)fetchctags %26%26 nmake -F fetchctags.nmake %26%26 popd</NMakeBuildCommandLine>
|
||||
<NMakeCleanCommandLine>pushd $(vsDir)fetchctags %26%26 nmake -F fetchctags.nmake clean %26%26 popd</NMakeCleanCommandLine>
|
||||
<NMakeReBuildCommandLine>pushd $(vsDir)fetchprereq %26%26 nmake -F fetchctags.nmake rebuild %26%26 popd</NMakeReBuildCommandLine>
|
||||
<NMakePreprocessorDefinitions>_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
|
||||
58
sys/windows/vs/sfctool.sln
Normal file
58
sys/windows/vs/sfctool.sln
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.13.35913.81
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sfctool", "sfctool\sfctool.vcxproj", "{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615} = {628C594A-7565-4366-9FCA-41DB67C6B615}
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD} = {AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sftags", "sftags\sftags.vcxproj", "{628C594A-7565-4366-9FCA-41DB67C6B615}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD} = {AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fetchctags", "fetchctags\fetchctags.vcxproj", "{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Debug|x64.Build.0 = Debug|x64
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Debug|x86.Build.0 = Debug|Win32
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Release|x64.ActiveCfg = Release|x64
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Release|x64.Build.0 = Release|x64
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Release|x86.ActiveCfg = Release|Win32
|
||||
{3BFA3C14-6DA2-4750-B1C6-028B9BCE825E}.Release|x86.Build.0 = Release|Win32
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Debug|x64.Build.0 = Debug|x64
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Debug|x86.Build.0 = Debug|Win32
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Release|x64.ActiveCfg = Release|x64
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Release|x64.Build.0 = Release|x64
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Release|x86.ActiveCfg = Release|Win32
|
||||
{628C594A-7565-4366-9FCA-41DB67C6B615}.Release|x86.Build.0 = Release|Win32
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Debug|x64.Build.0 = Debug|x64
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Debug|x86.Build.0 = Debug|Win32
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Release|x64.ActiveCfg = Release|x64
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Release|x64.Build.0 = Release|x64
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Release|x86.ActiveCfg = Release|Win32
|
||||
{AAE63AD3-8185-4E19-B6A3-13F4CB891AAD}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {1000CD98-D3C0-493F-9EA7-E2D81FA96432}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
193
sys/windows/vs/sfctool/sfctool.vcxproj
Normal file
193
sys/windows/vs/sfctool/sfctool.vcxproj
Normal file
@@ -0,0 +1,193 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\config.props" />
|
||||
<Import Project="..\dirs.props" />
|
||||
<Import Project="..\default.props" />
|
||||
<Import Project="..\NetHackProperties.props" />
|
||||
<Import Project="..\console.props" />
|
||||
<Import Project="..\common.props" />
|
||||
<Import Project="..\files.props" />
|
||||
<PropertyGroup>
|
||||
<OutDir>$(BinDir)</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(SrcDir)alloc.c" />
|
||||
<ClCompile Include="$(SrcDir)artifact.c" />
|
||||
<ClCompile Include="$(SrcDir)cfgfiles.c" />
|
||||
<ClCompile Include="$(SrcDir)decl.c" />
|
||||
<ClCompile Include="$(SrcDir)dungeon.c" />
|
||||
<ClCompile Include="$(SrcDir)end.c" />
|
||||
<ClCompile Include="$(SrcDir)engrave.c" />
|
||||
<ClCompile Include="$(SrcDir)files.c" />
|
||||
<ClCompile Include="$(SrcDir)light.c" />
|
||||
<ClCompile Include="$(SrcDir)mkmaze.c" />
|
||||
<ClCompile Include="$(SrcDir)mkroom.c" />
|
||||
<ClCompile Include="$(SrcDir)monst.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlua.c" />
|
||||
<ClCompile Include="$(SrcDir)objects.c" />
|
||||
<ClCompile Include="$(SrcDir)o_init.c" />
|
||||
<ClCompile Include="$(SrcDir)region.c" />
|
||||
<ClCompile Include="$(SrcDir)restore.c" />
|
||||
<ClCompile Include="$(SrcDir)rumors.c" />
|
||||
<ClCompile Include="$(SrcDir)sfbase.c" />
|
||||
<ClCompile Include="$(SrcDir)sfstruct.c" />
|
||||
<ClCompile Include="$(SrcDir)strutil.c" />
|
||||
<ClCompile Include="$(SrcDir)timeout.c" />
|
||||
<ClCompile Include="$(SrcDir)track.c" />
|
||||
<ClCompile Include="$(SrcDir)version.c" />
|
||||
<ClCompile Include="$(SrcDir)worm.c" />
|
||||
<ClCompile Include="$(SrcDir)sys.c" />
|
||||
<ClCompile Include="$(SrcDir)date.c" />
|
||||
<ClCompile Include="$(SrcDir)mdlib.c" />
|
||||
<ClCompile Include="$(UtilDir)panic.c" />
|
||||
<ClCompile Include="$(UtilDir)sfctool.c" />
|
||||
<ClCompile Include="$(UtilDir)sfexpasc.c" />
|
||||
<ClCompile Include="$(UtilDir)sfdata.c" />
|
||||
<ClCompile Include="$(SysWindDir)windsys.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="$(IncDir)extern.h" />
|
||||
<ClInclude Include="$(IncDir)sfprocs.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{3bfa3c14-6da2-4750-b1c6-028b9bce825e}</ProjectGuid>
|
||||
<RootNamespace>sfctool</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(ToolsDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>hacklib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_NDEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(ToolsDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>hacklib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(ToolsDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>hacklib.lib;userenv.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_NDEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(ToolsDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>hacklib.lib;userenv.lib;advapi32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
48
sys/windows/vs/sftags/aftersftags.proj
Normal file
48
sys/windows/vs/sftags/aftersftags.proj
Normal file
@@ -0,0 +1,48 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\dirs.props"/>
|
||||
<Import Project="$(vsDir)files.props"/>
|
||||
<Target Name="Build" Outputs="$(IncDir)sfdata.c;$(SrcDir)sfdata.c">
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -f sf.tags $(IncDir)align.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)artifact.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(SRC)artifact.c" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)artilist.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)attrib.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(SRC)bones.c" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)context.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)coord.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)decl.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(SRC)decl.c" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)dungeon.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)engrave.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(SRC)engrave.c" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)flag.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)func_tab.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)global.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)hack.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)mextra.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)mkroom.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)monst.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)defsym.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)obj.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)objclass.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)prop.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)quest.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)rect.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)region.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)rm.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)skills.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)spell.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)stairs.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)sys.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)timeout.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)trap.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)you.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)onames.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="..\lib\ctags\ctags --language-force=c --sort=no -D"Bitfield(x,n)=unsigned x : n" --excmd=pattern -a -f sf.tags $(IncDir)wintype.h" WorkingDirectory="$(UtilDir)"/>
|
||||
<Exec Command="$(ToolsDir)sftags.exe" WorkingDirectory="$(UtilDir)"/>
|
||||
</Target>
|
||||
<Target Name="Clean">
|
||||
<Delete Files="$(UtilDir)sf.tags"/>
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
156
sys/windows/vs/sftags/sftags.vcxproj
Normal file
156
sys/windows/vs/sftags/sftags.vcxproj
Normal file
@@ -0,0 +1,156 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\config.props" />
|
||||
<Import Project="..\dirs.props" />
|
||||
<Import Project="..\default.props" />
|
||||
<Import Project="..\NetHackProperties.props" />
|
||||
<Import Project="..\console.props" />
|
||||
<Import Project="..\common.props" />
|
||||
<Import Project="..\files.props" />
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(UtilDir)sftags.c" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{628c594a-7565-4366-9fca-41db67c6b615}</ProjectGuid>
|
||||
<RootNamespace>sftags</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);$(UtilDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;WIN32CON;NO_TILE_C;DLB;SAFEPROCS;SND_LIB_WINDSOUND;USER_SOUNDS;_LIB;HAS_STDINT_H;SFCTOOL;NOPANICTRACE;NOCRASHREPORT;NO_CHRONICLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
<Target Name="AfterBuild">
|
||||
<MSBuild Projects="aftersftags.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
|
||||
</Target>
|
||||
<Target Name="AfterClean">
|
||||
<MSBuild Projects="aftersftags.proj" Targets="Clean" Properties="Configuration=$(Configuration)" />
|
||||
</Target>
|
||||
<Target Name="AfterRebuild">
|
||||
<MSBuild Projects="aftersftags.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -44,6 +44,10 @@
|
||||
|
||||
static char portable_device_path[MAX_PATH];
|
||||
|
||||
static boolean path_buffer_set = FALSE;
|
||||
static char path_buffer[MAX_PATH];
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* runtime cursor display control switch */
|
||||
boolean win32_cursorblink;
|
||||
|
||||
@@ -53,6 +57,9 @@ WIN32_FIND_DATA ffd;
|
||||
extern int GUILaunched;
|
||||
extern boolean getreturn_enabled;
|
||||
int redirect_stdout;
|
||||
static char *get_executable_path(void);
|
||||
|
||||
|
||||
|
||||
#ifdef WIN32CON
|
||||
typedef HWND(WINAPI *GETCONSOLEWINDOW)(void);
|
||||
@@ -780,7 +787,9 @@ nt_assert_failed(const char *expression, const char *filepath, int line)
|
||||
impossible("nhassert(%s) failed in file '%s' at line %d",
|
||||
expression, filename, line);
|
||||
}
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
/* used by util/sfctool.c as well as files.c */
|
||||
boolean
|
||||
get_user_home_folder(char *homebuf, size_t sz)
|
||||
{
|
||||
@@ -794,13 +803,12 @@ get_user_home_folder(char *homebuf, size_t sz)
|
||||
result = GetUserProfileDirectoryA(hToken, szHomeDirBuf, &BufSize);
|
||||
// Close handle opened via OpenProcessToken
|
||||
CloseHandle(hToken);
|
||||
if (result != 0) {
|
||||
Snprintf(homebuf, sz, "%s", szHomeDirBuf);
|
||||
}
|
||||
|
||||
return (result != 0);
|
||||
}
|
||||
static char *get_executable_path(void);
|
||||
|
||||
static boolean path_buffer_set = FALSE;
|
||||
static char path_buffer[MAX_PATH];
|
||||
|
||||
char *
|
||||
get_executable_path(void)
|
||||
@@ -1019,6 +1027,7 @@ set_default_prefix_locations(const char *programPath UNUSED)
|
||||
strcpy(executable_path, get_executable_path());
|
||||
append_slash(executable_path);
|
||||
|
||||
#ifndef SFCTOOL
|
||||
if (test_portable_config(executable_path, portable_device_path,
|
||||
sizeof portable_device_path)) {
|
||||
gf.fqn_prefix[SYSCONFPREFIX] = executable_path;
|
||||
@@ -1032,6 +1041,7 @@ set_default_prefix_locations(const char *programPath UNUSED)
|
||||
gf.fqn_prefix[TROUBLEPREFIX] = portable_device_path;
|
||||
gf.fqn_prefix[DATAPREFIX] = executable_path;
|
||||
} else {
|
||||
#endif /* SFCTOOL */
|
||||
if (!build_known_folder_path(&FOLDERID_Profile, profile_path,
|
||||
sizeof(profile_path), FALSE))
|
||||
strcpy(profile_path, executable_path);
|
||||
@@ -1061,7 +1071,9 @@ set_default_prefix_locations(const char *programPath UNUSED)
|
||||
gf.fqn_prefix[LOCKPREFIX] = versioned_global_data_path;
|
||||
gf.fqn_prefix[TROUBLEPREFIX] = versioned_profile_path;
|
||||
gf.fqn_prefix[DATAPREFIX] = executable_path;
|
||||
#ifndef SFCTOOL
|
||||
}
|
||||
#endif /* SFCTOOL */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1138,6 +1150,7 @@ get_portable_device(void)
|
||||
return (const char *) portable_device_path;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
/* Windows helpers for CRASHREPORT etc */
|
||||
#ifdef CRASHREPORT
|
||||
struct CRctxt {
|
||||
@@ -1429,6 +1442,7 @@ win32_cr_shellexecute(const char *url){
|
||||
return rv;
|
||||
}
|
||||
#endif /* CRASHREPORT */
|
||||
#endif /* SFCTOOL */
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
|
||||
5
util/.gitignore
vendored
5
util/.gitignore
vendored
@@ -31,4 +31,7 @@ heaputil.c
|
||||
tilemappings.lst
|
||||
clang_rt.asan*.dll
|
||||
*.sln
|
||||
|
||||
sf.tags
|
||||
sfdata.c
|
||||
sfctool
|
||||
sftags
|
||||
|
||||
1323
util/sfctool.c
Normal file
1323
util/sfctool.c
Normal file
File diff suppressed because it is too large
Load Diff
1296
util/sfexpasc.c
Normal file
1296
util/sfexpasc.c
Normal file
File diff suppressed because it is too large
Load Diff
2230
util/sftags.c
Normal file
2230
util/sftags.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user