1 /* SCCS Id: @(#)global.h 3.4 2003/08/31 */ 2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3 /* NetHack may be freely redistributed. See license for details. */ 4 5 #ifndef GLOBAL_H 6 #define GLOBAL_H 7 8 #include <stdio.h> 9 10 11 /* #define BETA */ /* if a beta-test copy [MRS] */ 12 13 /* 14 * Files expected to exist in the playground directory. 15 */ 16 17 #define RECORD "record" /* file containing list of topscorers */ 18 #define HELP "help" /* file containing command descriptions */ 19 #define SHELP "hh" /* abbreviated form of the same */ 20 #define DEBUGHELP "wizhelp" /* file containing debug mode cmds */ 21 #define RUMORFILE "rumors" /* file with fortune cookies */ 22 #define ORACLEFILE "oracles" /* file with oracular information */ 23 #define DATAFILE "data" /* file giving the meaning of symbols used */ 24 #define CMDHELPFILE "cmdhelp" /* file telling what commands do */ 25 #define HISTORY "history" /* file giving nethack's history */ 26 #define LICENSE "license" /* file with license information */ 27 #define OPTIONFILE "opthelp" /* file explaining runtime options */ 28 #define OPTIONS_USED "options" /* compile-time options, for #version */ 29 30 #define LEV_EXT ".lev" /* extension for special level files */ 31 32 33 /* Assorted definitions that may depend on selections in config.h. */ 34 35 /* 36 * for DUMB preprocessor and compiler, e.g., cpp and pcc supplied 37 * with Microport SysV/AT, which have small symbol tables; 38 * DUMB if needed is defined in CFLAGS 39 */ 40 #ifdef DUMB 41 #ifdef BITFIELDS 42 #undef BITFIELDS 43 #endif 44 #ifndef STUPID 45 #define STUPID 46 #endif 47 #endif /* DUMB */ 48 49 /* 50 * type xchar: small integers in the range 0 - 127, usually coordinates 51 * although they are nonnegative they must not be declared unsigned 52 * since otherwise comparisons with signed quantities are done incorrectly 53 */ 54 typedef schar xchar; 55 #ifndef SKIP_BOOLEAN 56 typedef xchar boolean; /* 0 or 1 */ 57 #endif 58 59 #ifndef TRUE /* defined in some systems' native include files */ 60 #define TRUE ((boolean)1) 61 #define FALSE ((boolean)0) 62 #endif 63 64 #ifndef STRNCMPI 65 # ifndef __SASC_60 /* SAS/C already shifts to stricmp */ 66 # define strcmpi(a,b) strncmpi((a),(b),-1) 67 # endif 68 #endif 69 70 /* comment out to test effects of each #define -- these will probably 71 * disappear eventually 72 */ 73 #ifdef INTERNAL_COMP 74 # define RLECOMP /* run-length compression of levl array - JLee */ 75 # define ZEROCOMP /* zero-run compression of everything - Olaf Seibert */ 76 #endif 77 78 /* #define SPECIALIZATION */ /* do "specialized" version of new topology */ 79 80 81 #ifdef BITFIELDS 82 #define Bitfield(x,n) unsigned x:n 83 #else 84 #define Bitfield(x,n) uchar x 85 #endif 86 87 #ifdef UNWIDENED_PROTOTYPES 88 # define CHAR_P char 89 # define SCHAR_P schar 90 # define UCHAR_P uchar 91 # define XCHAR_P xchar 92 # define SHORT_P short 93 #ifndef SKIP_BOOLEAN 94 # define BOOLEAN_P boolean 95 #endif 96 # define ALIGNTYP_P aligntyp 97 #else 98 # ifdef WIDENED_PROTOTYPES 99 # define CHAR_P int 100 # define SCHAR_P int 101 # define UCHAR_P int 102 # define XCHAR_P int 103 # define SHORT_P int 104 # define BOOLEAN_P int 105 # define ALIGNTYP_P int 106 # endif 107 #endif 108 #if defined(ULTRIX_PROTO) && !defined(__STDC__) 109 /* The ultrix 2.0 and 2.1 compilers (on Ultrix 4.0 and 4.2 respectively) can't 110 * handle "struct obj *" constructs in prototypes. Their bugs are different, 111 * but both seem to work if we put "void*" in the prototype instead. This 112 * gives us minimal prototype checking but avoids the compiler bugs. 113 * 114 * OBJ_P and MONST_P should _only_ be used for declaring function pointers. 115 */ 116 #define OBJ_P void* 117 #define MONST_P void* 118 #else 119 #define OBJ_P struct obj* 120 #define MONST_P struct monst* 121 #endif 122 123 #define SIZE(x) (int)(sizeof(x) / sizeof(x[0])) 124 125 126 /* A limit for some NetHack int variables. It need not, and for comparable 127 * scoring should not, depend on the actual limit on integers for a 128 * particular machine, although it is set to the minimum required maximum 129 * signed integer for C (2^15 -1). 130 */ 131 #define LARGEST_INT 32767 132 133 134 #ifdef REDO 135 #define Getchar pgetchar 136 #endif 137 138 139 #include "coord.h" 140 /* 141 * Automatic inclusions for the subsidiary files. 142 * Please don't change the order. It does matter. 143 */ 144 145 #ifdef VMS 146 #include "vmsconf.h" 147 #endif 148 149 #ifdef UNIX 150 #include "unixconf.h" 151 #endif 152 153 #ifdef OS2 154 #include "os2conf.h" 155 #endif 156 157 #ifdef MSDOS 158 #include "pcconf.h" 159 #endif 160 161 #ifdef TOS 162 #include "tosconf.h" 163 #endif 164 165 #ifdef AMIGA 166 #include "amiconf.h" 167 #endif 168 169 #ifdef MAC 170 #include "macconf.h" 171 #endif 172 173 #ifdef __BEOS__ 174 #include "beconf.h" 175 #endif 176 177 #ifdef WIN32 178 #ifdef WIN_CE 179 #include "wceconf.h" 180 #else 181 #include "ntconf.h" 182 #endif 183 #endif 184 185 /* Displayable name of this port; don't redefine if defined in *conf.h */ 186 #ifndef PORT_ID 187 # ifdef AMIGA 188 # define PORT_ID "Amiga" 189 # endif 190 # ifdef MAC 191 # define PORT_ID "Mac" 192 # endif 193 # ifdef MSDOS 194 # ifdef PC9800 195 # define PORT_ID "PC-9800" 196 # else 197 # define PORT_ID "PC" 198 # endif 199 # ifdef DJGPP 200 # define PORT_SUB_ID "djgpp" 201 # else 202 # ifdef OVERLAY 203 # define PORT_SUB_ID "overlaid" 204 # else 205 # define PORT_SUB_ID "non-overlaid" 206 # endif 207 # endif 208 # endif 209 # ifdef OS2 210 # define PORT_ID "OS/2" 211 # endif 212 # ifdef TOS 213 # define PORT_ID "ST" 214 # endif 215 # ifdef UNIX 216 # define PORT_ID "Unix" 217 # endif 218 # ifdef VMS 219 # define PORT_ID "VMS" 220 # endif 221 # ifdef WIN32 222 # define PORT_ID "Windows" 223 # ifndef PORT_SUB_ID 224 # ifdef MSWIN_GRAPHICS 225 # define PORT_SUB_ID "graphical" 226 # else 227 # define PORT_SUB_ID "tty" 228 # endif 229 # endif 230 # endif 231 #endif 232 233 #if defined(MICRO) 234 #if !defined(AMIGA) && !defined(TOS) && !defined(OS2_HPFS) 235 #define SHORT_FILENAMES /* filenames are 8.3 */ 236 #endif 237 #endif 238 239 #ifdef VMS 240 /* vms_exit() (sys/vms/vmsmisc.c) expects the non-VMS EXIT_xxx values below. 241 * these definitions allow all systems to be treated uniformly, provided 242 * main() routines do not terminate with return(), whose value is not 243 * so massaged. 244 */ 245 # ifdef EXIT_SUCCESS 246 # undef EXIT_SUCCESS 247 # endif 248 # ifdef EXIT_FAILURE 249 # undef EXIT_FAILURE 250 # endif 251 #endif 252 253 #ifndef EXIT_SUCCESS 254 # define EXIT_SUCCESS 0 255 #endif 256 #ifndef EXIT_FAILURE 257 # define EXIT_FAILURE 1 258 #endif 259 260 #if defined(X11_GRAPHICS) || defined(QT_GRAPHICS) || defined(GNOME_GRAPHICS) || defined(MSWIN_GRAPHICS) 261 # ifndef USE_TILES 262 # define USE_TILES /* glyph2tile[] will be available */ 263 # endif 264 #endif 265 #if defined(AMII_GRAPHICS) || defined(GEM_GRAPHICS) 266 # ifndef USE_TILES 267 # define USE_TILES 268 # endif 269 #endif 270 271 272 #define Sprintf (void) sprintf 273 #define Strcat (void) strcat 274 #define Strcpy (void) strcpy 275 #ifdef NEED_VARARGS 276 #define Vprintf (void) vprintf 277 #define Vfprintf (void) vfprintf 278 #define Vsprintf (void) vsprintf 279 #endif 280 281 282 /* primitive memory leak debugging; see alloc.c */ 283 #ifdef MONITOR_HEAP 284 extern long *FDECL(nhalloc, (unsigned int,const char *,int)); 285 extern void FDECL(nhfree, (genericptr_t,const char *,int)); 286 # ifndef __FILE__ 287 # define __FILE__ "" 288 # endif 289 # ifndef __LINE__ 290 # define __LINE__ 0 291 # endif 292 # define alloc(a) nhalloc(a,__FILE__,(int)__LINE__) 293 # define free(a) nhfree(a,__FILE__,(int)__LINE__) 294 #else /* !MONITOR_HEAP */ 295 extern long *FDECL(alloc, (unsigned int)); /* alloc.c */ 296 #endif 297 298 /* Used for consistency checks of various data files; declare it here so 299 that utility programs which include config.h but not hack.h can see it. */ 300 struct version_info { 301 unsigned long incarnation; /* actual version number */ 302 unsigned long feature_set; /* bitmask of config settings */ 303 unsigned long entity_count; /* # of monsters and objects */ 304 unsigned long struct_sizes; /* size of key structs */ 305 }; 306 307 308 /* 309 * Configurable internal parameters. 310 * 311 * Please be very careful if you are going to change one of these. Any 312 * changes in these parameters, unless properly done, can render the 313 * executable inoperative. 314 */ 315 316 /* size of terminal screen is (at least) (ROWNO+3) by COLNO */ 317 #define COLNO 80 318 #define ROWNO 21 319 320 #define MAXNROFROOMS 40 /* max number of rooms per level */ 321 #define MAX_SUBROOMS 24 /* max # of subrooms in a given room */ 322 #define DOORMAX 120 /* max number of doors per level */ 323 324 #define BUFSZ 256 /* for getlin buffers */ 325 #define QBUFSZ 128 /* for building question text */ 326 #define TBUFSZ 300 /* toplines[] buffer max msg: 3 81char names */ 327 /* plus longest prefix plus a few extra words */ 328 329 #define PL_NSIZ 32 /* name of player, ghost, shopkeeper */ 330 #define PL_CSIZ 32 /* sizeof pl_character */ 331 #define PL_FSIZ 32 /* fruit name */ 332 #define PL_PSIZ 63 /* player-given names for pets, other 333 * monsters, objects */ 334 335 #define MAXDUNGEON 16 /* current maximum number of dungeons */ 336 #define MAXLEVEL 32 /* max number of levels in one dungeon */ 337 #define MAXSTAIRS 1 /* max # of special stairways in a dungeon */ 338 #define ALIGNWEIGHT 4 /* generation weight of alignment */ 339 340 #define MAXULEV 30 /* max character experience level */ 341 342 #define MAXMONNO 120 /* extinct monst after this number created */ 343 #define MHPMAX 500 /* maximum monster hp */ 344 345 #endif /* GLOBAL_H */ 346