399 lines
10 KiB
C
399 lines
10 KiB
C
/* NetHack 3.5 global.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
|
/* NetHack 3.5 global.h $Date: 2012/01/29 03:00:14 $ $Revision: 1.31 $ */
|
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#ifndef GLOBAL_H
|
|
#define GLOBAL_H
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
#define BETA /* development or beta testing [MRS] */
|
|
|
|
/*
|
|
* Files expected to exist in the playground directory.
|
|
*/
|
|
|
|
#define RECORD "record" /* file containing list of topscorers */
|
|
#define HELP "help" /* file containing command descriptions */
|
|
#define SHELP "hh" /* abbreviated form of the same */
|
|
#define DEBUGHELP "wizhelp" /* file containing debug mode cmds */
|
|
#define RUMORFILE "rumors" /* file with fortune cookies */
|
|
#define ORACLEFILE "oracles" /* file with oracular information */
|
|
#define DATAFILE "data" /* file giving the meaning of symbols used */
|
|
#define CMDHELPFILE "cmdhelp" /* file telling what commands do */
|
|
#define HISTORY "history" /* file giving nethack's history */
|
|
#define LICENSE "license" /* file with license information */
|
|
#define OPTIONFILE "opthelp" /* file explaining runtime options */
|
|
#define OPTIONS_USED "options" /* compile-time options, for #version */
|
|
#define SYMBOLS "symbols" /* replacement symbol sets */
|
|
#define LEV_EXT ".lev" /* extension for special level files */
|
|
|
|
|
|
/* Assorted definitions that may depend on selections in config.h. */
|
|
|
|
/*
|
|
* for DUMB preprocessor and compiler, e.g., cpp and pcc supplied
|
|
* with Microport SysV/AT, which have small symbol tables;
|
|
* DUMB if needed is defined in CFLAGS
|
|
*/
|
|
#ifdef DUMB
|
|
#ifdef BITFIELDS
|
|
#undef BITFIELDS
|
|
#endif
|
|
#ifndef STUPID
|
|
#define STUPID
|
|
#endif
|
|
#endif /* DUMB */
|
|
|
|
/*
|
|
* type xchar: small integers in the range 0 - 127, usually coordinates
|
|
* although they are nonnegative they must not be declared unsigned
|
|
* since otherwise comparisons with signed quantities are done incorrectly
|
|
*/
|
|
typedef schar xchar;
|
|
#ifndef SKIP_BOOLEAN
|
|
typedef xchar boolean; /* 0 or 1 */
|
|
#endif
|
|
|
|
#ifndef TRUE /* defined in some systems' native include files */
|
|
#define TRUE ((boolean)1)
|
|
#define FALSE ((boolean)0)
|
|
#endif
|
|
|
|
/*
|
|
* UNICODE_SUPPORT
|
|
* Unicode/wide character related support.
|
|
*/
|
|
#ifdef UNICODE_SUPPORT
|
|
# define UNICODE_DRAWING /* store drawing symbols in wchar_t data type */
|
|
# define UNICODE_WIDEWINPORT /* store and render wide chars in window port */
|
|
/*# define UNICODE_PLAYERTEXT*/ /* not implemented - player input in wide chars */
|
|
#include <limits.h>
|
|
#include <wchar.h>
|
|
#else
|
|
# undef UNICODE_DRAWING
|
|
# undef UNICODE_WIDEWINPORT
|
|
# undef UNICODE_PLAYERTEXT
|
|
#endif
|
|
|
|
#if defined(UNICODE_DRAWING)
|
|
typedef wchar_t nhsym; /* nhsym is wide char */
|
|
#else
|
|
typedef uchar nhsym;
|
|
#endif
|
|
|
|
#if defined(UNICODE_WIDEWINPORT)
|
|
typedef wchar_t nhwchar; /* nhwchar (window port char) is wide char */
|
|
#else
|
|
typedef char nhwchar;
|
|
#endif
|
|
|
|
#if 0
|
|
/* Not Implemented presently */
|
|
#if defined(UNICODE_PLAYERTEXT)
|
|
typedef wchar_t nhptext; /* player input is wide char */
|
|
#else
|
|
typedef char nhptext;
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef STRNCMPI
|
|
# ifndef __SASC_60 /* SAS/C already shifts to stricmp */
|
|
# define strcmpi(a,b) strncmpi((a),(b),-1)
|
|
# endif
|
|
#endif
|
|
|
|
/* comment out to test effects of each #define -- these will probably
|
|
* disappear eventually
|
|
*/
|
|
#ifdef INTERNAL_COMP
|
|
# define RLECOMP /* run-length compression of levl array - JLee */
|
|
# define ZEROCOMP /* zero-run compression of everything - Olaf Seibert */
|
|
#endif
|
|
|
|
/* #define SPECIALIZATION */ /* do "specialized" version of new topology */
|
|
|
|
|
|
#ifdef BITFIELDS
|
|
#define Bitfield(x,n) unsigned x:n
|
|
#else
|
|
#define Bitfield(x,n) uchar x
|
|
#endif
|
|
|
|
#define SIZE(x) (int)(sizeof(x) / sizeof(x[0]))
|
|
|
|
|
|
/* A limit for some NetHack int variables. It need not, and for comparable
|
|
* scoring should not, depend on the actual limit on integers for a
|
|
* particular machine, although it is set to the minimum required maximum
|
|
* signed integer for C (2^15 -1).
|
|
*/
|
|
#define LARGEST_INT 32767
|
|
|
|
|
|
#ifdef REDO
|
|
#define Getchar pgetchar
|
|
#endif
|
|
|
|
|
|
#include "coord.h"
|
|
/*
|
|
* Automatic inclusions for the subsidiary files.
|
|
* Please don't change the order. It does matter.
|
|
*/
|
|
|
|
#ifdef VMS
|
|
#include "vmsconf.h"
|
|
#endif
|
|
|
|
#ifdef UNIX
|
|
#include "unixconf.h"
|
|
#endif
|
|
|
|
#ifdef OS2
|
|
#include "os2conf.h"
|
|
#endif
|
|
|
|
#ifdef MSDOS
|
|
#include "pcconf.h"
|
|
#endif
|
|
|
|
#ifdef TOS
|
|
#include "tosconf.h"
|
|
#endif
|
|
|
|
#ifdef AMIGA
|
|
#include "amiconf.h"
|
|
#endif
|
|
|
|
#ifdef MAC
|
|
#include "macconf.h"
|
|
#endif
|
|
|
|
#ifdef __BEOS__
|
|
#include "beconf.h"
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
#ifdef WIN_CE
|
|
#include "wceconf.h"
|
|
#else
|
|
#include "ntconf.h"
|
|
#endif
|
|
#endif
|
|
|
|
/* Displayable name of this port; don't redefine if defined in *conf.h */
|
|
#ifndef PORT_ID
|
|
# ifdef AMIGA
|
|
# define PORT_ID "Amiga"
|
|
# endif
|
|
# ifdef MAC
|
|
# define PORT_ID "Mac"
|
|
# endif
|
|
# ifdef __APPLE__
|
|
# define PORT_ID "MacOSX"
|
|
# endif
|
|
# ifdef MSDOS
|
|
# ifdef PC9800
|
|
# define PORT_ID "PC-9800"
|
|
# else
|
|
# define PORT_ID "PC"
|
|
# endif
|
|
# ifdef DJGPP
|
|
# define PORT_SUB_ID "djgpp"
|
|
# else
|
|
# ifdef OVERLAY
|
|
# define PORT_SUB_ID "overlaid"
|
|
# else
|
|
# define PORT_SUB_ID "non-overlaid"
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# ifdef OS2
|
|
# define PORT_ID "OS/2"
|
|
# endif
|
|
# ifdef TOS
|
|
# define PORT_ID "ST"
|
|
# endif
|
|
/* Check again in case something more specific has been defined above. */
|
|
# ifndef PORT_ID
|
|
# ifdef UNIX
|
|
# define PORT_ID "Unix"
|
|
# endif
|
|
# endif
|
|
# ifdef VMS
|
|
# define PORT_ID "VMS"
|
|
# endif
|
|
# ifdef WIN32
|
|
# define PORT_ID "Windows"
|
|
# ifndef PORT_SUB_ID
|
|
# ifdef MSWIN_GRAPHICS
|
|
# define PORT_SUB_ID "graphical"
|
|
# else
|
|
# define PORT_SUB_ID "tty"
|
|
# endif
|
|
# endif
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(MICRO)
|
|
#if !defined(AMIGA) && !defined(TOS) && !defined(OS2_HPFS)
|
|
#define SHORT_FILENAMES /* filenames are 8.3 */
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VMS
|
|
/* vms_exit() (sys/vms/vmsmisc.c) expects the non-VMS EXIT_xxx values below.
|
|
* these definitions allow all systems to be treated uniformly, provided
|
|
* main() routines do not terminate with return(), whose value is not
|
|
* so massaged.
|
|
*/
|
|
# ifdef EXIT_SUCCESS
|
|
# undef EXIT_SUCCESS
|
|
# endif
|
|
# ifdef EXIT_FAILURE
|
|
# undef EXIT_FAILURE
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef EXIT_SUCCESS
|
|
# define EXIT_SUCCESS 0
|
|
#endif
|
|
#ifndef EXIT_FAILURE
|
|
# define EXIT_FAILURE 1
|
|
#endif
|
|
|
|
#if defined(X11_GRAPHICS) || defined(QT_GRAPHICS) || defined(GNOME_GRAPHICS) || defined(MSWIN_GRAPHICS)
|
|
# ifndef USE_TILES
|
|
# define USE_TILES /* glyph2tile[] will be available */
|
|
# endif
|
|
#endif
|
|
#if defined(AMII_GRAPHICS) || defined(GEM_GRAPHICS)
|
|
# ifndef USE_TILES
|
|
# define USE_TILES
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(UNIX) || defined(VMS) || defined(__EMX__) || defined(WIN32)
|
|
# define HANGUPHANDLING
|
|
#endif
|
|
#if defined(SAFERHANGUP) && (defined(NOSAVEONHANGUP) || !defined(HANGUPHANDLING))
|
|
# undef SAFERHANGUP
|
|
#endif
|
|
|
|
|
|
#define Sprintf (void) sprintf
|
|
#define Strcat (void) strcat
|
|
#define Strcpy (void) strcpy
|
|
#ifdef NEED_VARARGS
|
|
#define Vprintf (void) vprintf
|
|
#define Vfprintf (void) vfprintf
|
|
#define Vsprintf (void) vsprintf
|
|
#endif
|
|
|
|
|
|
/* primitive memory leak debugging; see alloc.c */
|
|
#ifdef MONITOR_HEAP
|
|
extern long *FDECL(nhalloc, (unsigned int,const char *,int));
|
|
extern void FDECL(nhfree, (genericptr_t,const char *,int));
|
|
extern char *FDECL(nhdupstr, (const char *,const char *,int));
|
|
# ifndef __FILE__
|
|
# define __FILE__ ""
|
|
# endif
|
|
# ifndef __LINE__
|
|
# define __LINE__ 0
|
|
# endif
|
|
# define alloc(a) nhalloc(a,__FILE__,(int)__LINE__)
|
|
# define free(a) nhfree(a,__FILE__,(int)__LINE__)
|
|
# define dupstr(s) nhdupstr(s,__FILE__,(int)__LINE__)
|
|
#else /* !MONITOR_HEAP */
|
|
extern long *FDECL(alloc, (unsigned int)); /* alloc.c */
|
|
extern char *FDECL(dupstr, (const char *)); /* ditto */
|
|
#endif
|
|
|
|
/* Used for consistency checks of various data files; declare it here so
|
|
that utility programs which include config.h but not hack.h can see it. */
|
|
struct version_info {
|
|
unsigned long incarnation; /* actual version number */
|
|
unsigned long feature_set; /* bitmask of config settings */
|
|
unsigned long entity_count; /* # of monsters and objects */
|
|
unsigned long struct_sizes1; /* size of key structs */
|
|
unsigned long struct_sizes2; /* size of more key structs */
|
|
};
|
|
|
|
struct savefile_info {
|
|
unsigned long sfi1; /* compression etc. */
|
|
unsigned long sfi2; /* miscellaneous */
|
|
unsigned long sfi3; /* thirdparty */
|
|
};
|
|
#ifdef NHSTDC
|
|
#define SFI1_EXTERNALCOMP (1UL)
|
|
#define SFI1_RLECOMP (1UL << 1)
|
|
#define SFI1_ZEROCOMP (1UL << 2)
|
|
#else
|
|
#define SFI1_EXTERNALCOMP (1L)
|
|
#define SFI1_RLECOMP (1L << 1)
|
|
#define SFI1_ZEROCOMP (1L << 2)
|
|
#endif
|
|
|
|
/*
|
|
* Configurable internal parameters.
|
|
*
|
|
* Please be very careful if you are going to change one of these. Any
|
|
* changes in these parameters, unless properly done, can render the
|
|
* executable inoperative.
|
|
*/
|
|
|
|
/* size of terminal screen is (at least) (ROWNO+3) by COLNO */
|
|
#define COLNO 80
|
|
#define ROWNO 21
|
|
|
|
#define MAXNROFROOMS 40 /* max number of rooms per level */
|
|
#define MAX_SUBROOMS 24 /* max # of subrooms in a given room */
|
|
#define DOORMAX 120 /* max number of doors per level */
|
|
|
|
#define BUFSZ 256 /* for getlin buffers */
|
|
#define QBUFSZ 128 /* for building question text */
|
|
#define TBUFSZ 300 /* toplines[] buffer max msg: 3 81char names */
|
|
/* plus longest prefix plus a few extra words */
|
|
|
|
#define PL_NSIZ 32 /* name of player, ghost, shopkeeper */
|
|
#define PL_CSIZ 32 /* sizeof pl_character */
|
|
#define PL_FSIZ 32 /* fruit name */
|
|
#define PL_PSIZ 63 /* player-given names for pets, other
|
|
* monsters, objects */
|
|
|
|
#define MAXDUNGEON 16 /* current maximum number of dungeons */
|
|
#define MAXLEVEL 32 /* max number of levels in one dungeon */
|
|
#define MAXSTAIRS 1 /* max # of special stairways in a dungeon */
|
|
#define ALIGNWEIGHT 4 /* generation weight of alignment */
|
|
|
|
#define MAXULEV 30 /* max character experience level */
|
|
|
|
#define MAXMONNO 120 /* extinct monst after this number created */
|
|
#define MHPMAX 500 /* maximum monster hp */
|
|
|
|
/* PANICTRACE: Always defined for BETA but only for supported platforms. */
|
|
#ifdef UNIX
|
|
# ifdef BETA
|
|
/* see end.c */
|
|
# ifndef PANICTRACE
|
|
# define PANICTRACE
|
|
# endif
|
|
# endif
|
|
#endif
|
|
/* The following are meaningless if PANICTRACE is not defined: */
|
|
#if defined(__linux__) && defined(__GLIBC__) && (__GLIBC__ >= 2)
|
|
# define PANICTRACE_LIBC
|
|
#endif
|
|
#if defined(MACOSX)
|
|
# define PANICTRACE_LIBC
|
|
#endif
|
|
#ifdef UNIX
|
|
# define PANICTRACE_GDB
|
|
#endif
|
|
|
|
#endif /* GLOBAL_H */
|