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