1 /* SCCS Id: @(#)pcconf.h 3.4 1995/10/11 */ 2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3 /* NetHack may be freely redistributed. See license for details. */ 4 5 #ifndef PCCONF_H 6 #define PCCONF_H 7 8 #define MICRO /* always define this! */ 9 10 #ifdef MSDOS /* some of this material is MS-DOS specific */ 11 12 /* 13 * Automatic Defines: 14 * 15 * __GO32__ is defined automatically by the djgpp port of gcc. 16 * __DJGPP__ is defined automatically by djgpp version 2 and above. 17 * _MSC_VER is defined automatically by Microsoft C. 18 * __BORLANDC__ is defined automatically by Borland C. 19 * __SC__ is defined automatically by Symantec C. 20 * Note: 3.4.1 was not verified with Symantec C. 21 */ 22 23 /* 24 * The following options are somewhat configurable depending on 25 * your compiler. 26 */ 27 28 /* 29 * For pre-V7.0 Microsoft Compilers only, manually define OVERLAY here. 30 */ 31 32 /*#define OVERLAY */ /* Manual overlay definition (MSC 6.0ax only) */ 33 34 # ifndef __GO32__ 35 #define MFLOPPY /* Support for floppy drives and ramdisks by dgk */ 36 # endif 37 38 # define SHELL /* via exec of COMMAND.COM */ 39 40 # ifdef __BORLANDC__ 41 #define PCMUSIC /* Music option, enable very basic pc speaker music notes */ 42 # endif 43 44 /* 45 * Screen control options 46 * 47 * You may uncomment: 48 * ANSI_DEFAULT 49 * or TERMLIB 50 * or ANSI_DEFAULT and TERMLIB 51 * or NO_TERMS 52 */ 53 54 /* # define TERMLIB */ /* enable use of termcap file /etc/termcap */ 55 /* or ./termcap for MSDOS (SAC) */ 56 /* compile and link in Fred Fish's termcap library, */ 57 /* enclosed in TERMCAP.ARC, to use this */ 58 59 /* # define ANSI_DEFAULT */ /* allows NetHack to run without a ./termcap */ 60 61 # define NO_TERMS /* Allows Nethack to run without ansi.sys by linking */ 62 /* screen routines into the .exe */ 63 64 # ifdef NO_TERMS /* if NO_TERMS select one screen package below */ 65 #define SCREEN_BIOS /* Use bios calls for all screen control */ 66 /* #define SCREEN_DJGPPFAST */ /* Use djgpp fast screen routines */ 67 # endif 68 69 70 /* # define PC9800 */ /* Allows NetHack to run on NEC PC-9800 machines */ 71 /* Yamamoto Keizo */ 72 73 74 /* 75 * PC video hardware support options (for graphical tile support) 76 * 77 * You may uncomment any/all of the options below. 78 * 79 */ 80 # ifndef SUPPRESS_GRAPHICS 81 # if (defined(SCREEN_BIOS) || defined(SCREEN_DJGPPFAST)) && !defined(PC9800) 82 # ifdef USE_TILES 83 #define SCREEN_VGA /* Include VGA graphics routines in the build */ 84 # endif 85 # endif 86 # else 87 # undef NO_TERMS 88 # undef SCREEN_BIOS 89 # undef SCREEN_DJGPPFAST 90 # undef SCREEN_VGA 91 # undef TERMLIB 92 # define ANSI_DEFAULT 93 # endif 94 95 # define RANDOM /* have Berkeley random(3) */ 96 97 # define MAIL /* Allows for fake mail daemon to deliver mail */ 98 /* in the MSDOS version. (For AMIGA MAIL see */ 99 /* amiconf.h). In the future this will be the */ 100 /* hook for mail reader implementation. */ 101 102 /* The following is needed for prototypes of certain functions */ 103 104 #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__SC__) 105 #include <process.h> /* Provides prototypes of exit(), spawn() */ 106 #endif 107 108 #if defined(__BORLANDC__) && defined(STRNCMPI) 109 #include <string.h> /* Provides prototypes of strncmpi(), etc. */ 110 #endif 111 112 #if defined(__DJGPP__) 113 #define _NAIVE_DOS_REGS 114 #include <stdlib.h> 115 #include <string.h> /* Provides prototypes of strncmpi(), etc. */ 116 # ifndef M 117 #define M(c) ((char) (0x80 | (c))) 118 # endif 119 #endif 120 121 /* 122 * On the VMS and unix, this option controls whether a delay is done by 123 * the clock, or whether it is done by excess output. On the PC, however, 124 * there is always a clock to use for the delay. The TIMED_DELAY option 125 * on MSDOS (without the termcap routines) is used to determine whether to 126 * include the delay routines in the code (and thus, provides a compile time 127 * method to turn off napping for visual effect). However, it is also used 128 * in the music code to wait between different notes. So it is needed in that 129 * case as well. 130 131 * Whereas on the VMS and unix, flags.nap is a run-time option controlling 132 * whether there is a delay by clock or by excess output, on MSDOS it is 133 * simply a flag to turn on or off napping for visual effects at run-time. 134 */ 135 136 #define TIMED_DELAY /* enable the `timed_delay' run-time option */ 137 138 # ifdef PCMUSIC 139 #define TIMED_DELAY /* need it anyway */ 140 # endif 141 #define NOCWD_ASSUMPTIONS /* Allow paths to be specified for HACKDIR, 142 LEVELDIR, SAVEDIR, BONESDIR, DATADIR, 143 SCOREDIR, LOCKDIR, CONFIGDIR, and TROUBLEDIR. */ 144 145 #endif /* MSDOS configuration stuff */ 146 147 #define PATHLEN 64 /* maximum pathlength */ 148 #define FILENAME 80 /* maximum filename length (conservative) */ 149 #ifndef MICRO_H 150 #include "micro.h" /* contains necessary externs for [os_name].c */ 151 #endif 152 153 154 /* =================================================== 155 * The remaining code shouldn't need modification. 156 */ 157 158 #ifndef SYSTEM_H 159 #include "system.h" 160 #endif 161 162 #ifdef __DJGPP__ 163 #include <unistd.h> /* close(), etc. */ 164 /* lock() in io.h interferes with lock[] in decl.h */ 165 #define lock djlock 166 #include <io.h> 167 #undef lock 168 #include <pc.h> /* kbhit() */ 169 #define PC_LOCKING 170 #define HOLD_LOCKFILE_OPEN 171 #define SELF_RECOVER /* NetHack itself can recover games */ 172 #endif 173 174 # ifdef MSDOS 175 # ifndef EXEPATH 176 #define EXEPATH /* HACKDIR is .exe location if not explicitly defined */ 177 # endif 178 # endif 179 180 # if defined(_MSC_VER) && defined(MSDOS) 181 # if (_MSC_VER >= 700) && !defined(FUNCTION_LEVEL_LINKING) 182 # ifndef MOVERLAY 183 #define MOVERLAY /* Microsoft's MOVE overlay system (MSC >= 7.0) */ 184 # endif 185 # endif 186 #define PC_LOCKING 187 # endif 188 189 /* Borland Stuff */ 190 # if defined(__BORLANDC__) 191 # if defined(__OVERLAY__) && !defined(VROOMM) 192 /* __OVERLAY__ is automatically defined by Borland C if overlay option is on */ 193 #define VROOMM /* Borland's VROOMM overlay system */ 194 # endif 195 # if !defined(STKSIZ) 196 #define STKSIZ 5*1024 /* Use a default of 5K stack for Borland C */ 197 /* This macro is used in any file that contains */ 198 /* a main() function. */ 199 # endif 200 #define PC_LOCKING 201 # endif 202 203 #ifdef PC_LOCKING 204 #define HLOCK "NHPERM" 205 #endif 206 207 #ifndef index 208 # define index strchr 209 #endif 210 #ifndef rindex 211 # define rindex strrchr 212 #endif 213 214 #ifndef AMIGA 215 #include <time.h> 216 #endif 217 218 #ifdef RANDOM 219 /* Use the high quality random number routines. */ 220 # define Rand() random() 221 #else 222 # define Rand() rand() 223 #endif 224 225 #ifndef TOS 226 # define FCMASK 0660 /* file creation mask */ 227 #endif 228 229 #include <fcntl.h> 230 231 #ifndef REDO 232 # undef Getchar 233 # define Getchar nhgetch 234 #endif 235 236 #ifdef MSDOS 237 # define TEXTCOLOR /* */ 238 # define PORT_HELP "msdoshlp.txt" /* msdos port specific help file */ 239 #endif 240 241 242 /* Sanity check, do not modify these blocks. */ 243 244 /* OVERLAY must be defined with MOVERLAY or VROOMM */ 245 #if (defined(MOVERLAY) || defined(VROOMM)) 246 # ifndef OVERLAY 247 # define OVERLAY 248 # endif 249 #endif 250 251 #if defined(FUNCTION_LEVEL_LINKING) 252 #define OVERLAY 253 #define OVL0 254 #define OVL1 255 #define OVL2 256 #define OVL3 257 #define OVLB 258 #endif 259 260 #if defined(OVERLAY) && !defined(MOVERLAY) && !defined(VROOMM) && !defined(FUNCTION_LEVEL_LINKING) 261 #define USE_TRAMPOLI 262 #endif 263 264 #if defined(MSDOS) && defined(NO_TERMS) 265 # ifdef TERMLIB 266 # if defined(_MSC_VER) || defined(__SC__) 267 # pragma message("Warning -- TERMLIB defined with NO_TERMS in pcconf.h") 268 # pragma message(" Forcing undef of TERMLIB") 269 # endif 270 #undef TERMLIB 271 # endif 272 # ifdef ANSI_DEFAULT 273 # if defined(_MSC_VER) || defined(__SC__) 274 # pragma message("Warning -- ANSI_DEFAULT defined with NO_TERMS in pcconf.h") 275 # pragma message(" Forcing undef of ANSI_DEFAULT") 276 # endif 277 #undef ANSI_DEFAULT 278 # endif 279 /* only one screen package is allowed */ 280 # if defined(SCREEN_BIOS) && defined(SCREEN_DJGPPFAST) 281 # if defined(_MSC_VER) || defined(__SC__) 282 # pragma message("Warning -- More than one screen package defined in pcconf.h") 283 # endif 284 # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__SC__) 285 # if defined(SCREEN_DJGPPFAST) 286 # if defined(_MSC_VER) || defined(__SC__) 287 # pragma message(" Forcing undef of SCREEN_DJGPPFAST") 288 # endif 289 #undef SCREEN_DJGPPFAST /* Can't use djgpp fast with other compilers anyway */ 290 # endif 291 # else 292 /* djgpp C compiler */ 293 # if defined(SCREEN_BIOS) 294 #undef SCREEN_BIOS 295 # endif 296 # endif 297 # endif 298 # define ASCIIGRAPH 299 # ifdef TEXTCOLOR 300 # define VIDEOSHADES 301 # endif 302 /* SCREEN_8514, SCREEN_VESA are only placeholders presently - sub VGA instead */ 303 # if defined(SCREEN_8514) || defined(SCREEN_VESA) 304 # undef SCREEN_8514 305 # undef SCREEN_VESA 306 # define SCREEN_VGA 307 # endif 308 /* Graphical tile sanity checks */ 309 # ifdef SCREEN_VGA 310 # define SIMULATE_CURSOR 311 # define POSITIONBAR 312 /* Select appropriate tile file format, and map size */ 313 # define PLANAR_FILE 314 # define SMALL_MAP 315 # endif 316 #endif /* End of sanity check block */ 317 318 #if defined(MSDOS) && defined(DLB) 319 #define FILENAME_CMP stricmp /* case insensitive */ 320 #endif 321 322 #ifdef MSC7_WARN /* define with cl /DMSC7_WARN */ 323 #pragma warning(disable:4131) 324 #endif 325 326 #ifdef TIMED_DELAY 327 # ifdef __DJGPP__ 328 # define msleep(k) (void) usleep((k)*1000) 329 # endif 330 # ifdef __BORLANDC__ 331 # define msleep(k) delay(k) 332 # endif 333 # ifdef __SC__ 334 # define msleep(k) (void) usleep((long)((k)*1000)) 335 # endif 336 #endif 337 338 #endif /* PCCONF_H */ 339