/* NetHack 3.5 global.h $Date$ $Revision$ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ #ifndef GLOBAL_H #define GLOBAL_H #include #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 #include #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)); # 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__) #else /* !MONITOR_HEAP */ extern long *FDECL(alloc, (unsigned int)); /* alloc.c */ #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_GLIBC #endif #ifdef UNIX # define PANICTRACE_GDB #endif #endif /* GLOBAL_H */