1 /* NetHack 3.6	unixconf.h	$NHDT-Date: 1555361298 2019/04/15 20:48:18 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.42 $ */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /*-Copyright (c) Pasi Kallinen, 2018. */
4 /* NetHack may be freely redistributed.  See license for details. */
5 
6 #ifdef UNIX
7 #ifndef UNIXCONF_H
8 #define UNIXCONF_H
9 
10 /*
11  * Some include files are in a different place under SYSV
12  *      BSD                SYSV
13  * <sys/time.h>         <time.h>
14  * <sgtty.h>            <termio.h>
15  *
16  * Some routines are called differently
17  * index                strchr
18  * rindex               strrchr
19  *
20  */
21 
22 /* define exactly one of the following four choices */
23 #define BSD 1        /* define for 4.n/Free/Open/Net BSD  */
24                      /* also for relatives like SunOS 4.x, DG/UX, and */
25                      /* older versions of Linux */
26 /* #define ULTRIX */ /* define for Ultrix v3.0 or higher (but not lower) */
27                      /* Use BSD for < v3.0 */
28                      /* "ULTRIX" not to be confused with "ultrix" */
29 /* #define SYSV */   /* define for System V, Solaris 2.x, newer versions */
30                      /* of Linux */
31 /* #define HPUX */   /* Hewlett-Packard's Unix, version 6.5 or higher */
32                      /* use SYSV for < v6.5 */
33 
34 /* define any of the following that are appropriate */
35 #define SVR4           /* use in addition to SYSV for System V Release 4 */
36                        /* including Solaris 2+ */
37 #define NETWORK        /* if running on a networked system */
38                        /* e.g. Suns sharing a playground through NFS */
39 /* #define SUNOS4 */   /* SunOS 4.x */
40 #ifdef __linux__
41 #define LINUX    /* Another Unix clone */
42 #endif
43 /* #define CYGWIN32 */ /* Unix on Win32 -- use with case sensitive defines */
44 /* #define GENIX */    /* Yet Another Unix Clone */
45 /* #define HISX */     /* Bull Unix for XPS Machines */
46 /* #define BOS */      /* Bull Open Software - Unix for DPX/2 Machines */
47 /* #define UNIXPC */   /* use in addition to SYSV for AT&T 7300/3B1 */
48 /* #define AIX_31 */   /* In AIX 3.1 (IBM RS/6000) use BSD ioctl's to gain
49                         * job control (note that AIX is SYSV otherwise)
50                         * Also define this for AIX 3.2 */
51 
52 #define TERMINFO       /* uses terminfo rather than termcap */
53                        /* Should be defined for most SYSV, SVR4 (including
54                         * Solaris 2+), HPUX, and Linux systems.  In
55                         * particular, it should NOT be defined for the UNIXPC
56                         * unless you remove the use of the shared library in
57                         * the Makefile */
58 #define TEXTCOLOR      /* Use System V r3.2 terminfo color support
59                         * and/or ANSI color support on termcap systems
60                         * and/or X11 color.  Note:  if you get compiler
61                         * warnings about 'has_colors()' being implicitly
62                         * declared, uncomment NEED_HAS_COLORS_DECL below. */
63 #define POSIX_JOB_CONTROL /* use System V / Solaris 2.x / POSIX job control
64                            * (e.g., VSUSP) */
65 #define POSIX_TYPES /* use POSIX types for system calls and termios */
66                     /* Define for many recent OS releases, including
67                      * those with specific defines (since types are
68                      * changing toward the standard from earlier chaos).
69                      * For example, platforms using the GNU libraries,
70                      * Linux, Solaris 2.x
71                      */
72 
73 /* #define OPENWINBUG */  /* avoid a problem using OpenWindows 3.0 for
74                              X11 on SunOS 4.1.x, x>= 2.  Do not define
75                              for other X11 implementations. */
76 /* #define PYRAMID_BUG */ /* avoid a bug on the Pyramid */
77 /* #define BSD_43_BUG */  /* for real 4.3BSD cc's without schain botch fix */
78 /* #define MICROPORT_BUG */     /* problems with large arrays in structs */
79 /* #define MICROPORT_286_BUG */ /* changes needed in termcap.c to get it to
80                                    run with Microport Sys V/AT version 2.4.
81                                    By Jay Maynard */
82 /* #define AIXPS_2BUG */ /* avoid a problem with little_to_big() optimization
83                             */
84 
85 /* #define RANDOM */ /* if neither random/srandom nor lrand48/srand48
86                         is available from your system */
87 
88 /* see sys/unix/snd86unx.shr for more information on these */
89 /* #define UNIX386MUSIC */ /* play real music through speaker on systems
90                               with music driver installed */
91 /* #define VPIX_MUSIC */   /* play real music through speaker on systems
92                               with built-in VPIX support */
93 
94 /*
95  * The next two defines are intended mainly for the Andrew File System,
96  * which does not allow hard links.  If NO_FILE_LINKS is defined, lock files
97  * will be created in LOCKDIR using open() instead of in the playground using
98  * link().
99  *              Ralf Brown, 7/26/89 (from v2.3 hack of 10/10/88)
100  */
101 
102 /* #define NO_FILE_LINKS */                       /* if no hard links */
103 /* #define LOCKDIR "/usr/games/lib/nethackdir" */ /* where to put locks */
104 
105 /*
106  * If you want the static parts of your playground on a read-only file
107  * system, define VAR_PLAYGROUND to be where the variable parts are kept.
108  */
109 /* #define VAR_PLAYGROUND "/var/lib/games/nethack" */
110 
111 /*
112  * Define DEF_PAGER as your default pager, e.g. "/bin/cat" or "/usr/ucb/more"
113  * If defined, it can be overridden by the environment variable PAGER.
114  * Hack will use its internal pager if DEF_PAGER is not defined.
115  * (This might be preferable for security reasons.)
116  */
117 /* #define DEF_PAGER ".../mydir/mypager" */
118 
119 /*
120  * Define PORT_HELP to be the name of the port-specfic help file.
121  * This file is found in HACKDIR.
122  * Normally, you shouldn't need to change this.
123  * There is currently no port-specific help for Unix systems.
124  */
125 /* #define PORT_HELP "Unixhelp" */
126 
127 #ifdef TTY_GRAPHICS
128 /*
129  * To enable the `timed_delay' option for using a timer rather than extra
130  * screen output when pausing for display effect.  Requires that `msleep'
131  * function be available (with time argument specified in milliseconds).
132  * Various output devices can produce wildly varying delays when the
133  * "extra output" method is used, but not all systems provide access to
134  * a fine-grained timer.
135  */
136 /* #define TIMED_DELAY */ /* usleep() */
137 #endif
138 #if defined(MACOSX) && !defined(TIMED_DELAY)
139 #define TIMED_DELAY
140 #endif
141 
142 /* #define AVOID_WIN_IOCTL */ /* ensure USE_WIN_IOCTL remains undefined */
143 
144 /*
145  * If you define MAIL, then the player will be notified of new mail
146  * when it arrives.  If you also define DEF_MAILREADER then this will
147  * be the default mail reader, and can be overridden by the environment
148  * variable MAILREADER; otherwise an internal pager will be used.
149  * A stat system call is done on the mailbox every MAILCKFREQ moves.
150  */
151 #if !defined(NOMAIL)
152 #define MAIL /* Deliver mail during the game */
153 #endif
154 
155 /* The Andrew Message System does mail a little differently from normal
156  * UNIX.  Mail is deposited in the user's own directory in ~/Mailbox
157  * (another directory).  MAILBOX is the element that will be added on to
158  * the user's home directory path to generate the Mailbox path - just in
159  * case other Andrew sites do it differently from CMU.
160  *              dan lovinger
161  *              dl2n+@andrew.cmu.edu (dec 19 1989)
162  */
163 
164 /* #define AMS */ /* use Andrew message system for mail */
165 
166 /* NO_MAILREADER is for kerberos authenticating filesystems where it is
167  * essentially impossible to securely exec child processes, like mail
168  * readers, when the game is running under a special token.
169  *              dan
170  */
171 
172 /* #define NO_MAILREADER */ /* have mail daemon just tell player of mail */
173 
174 #ifdef MAIL
175 #if defined(BSD) || defined(ULTRIX)
176 #ifdef AMS
177 #define AMS_MAILBOX "/Mailbox"
178 #else
179 #if defined(__FreeBSD__) || defined(__OpenBSD__)
180 #define DEF_MAILREADER "/usr/bin/mail"
181 #else
182 #define DEF_MAILREADER "/usr/ucb/Mail"
183 #endif
184 #endif
185 #else
186 #if (defined(SYSV) || defined(DGUX) || defined(HPUX)) && !defined(LINUX)
187 #if defined(M_XENIX)
188 #define DEF_MAILREADER "/usr/bin/mail"
189 #else
190 #ifdef __sgi
191 #define DEF_MAILREADER "/usr/sbin/Mail"
192 #else
193 #define DEF_MAILREADER "/usr/bin/mailx"
194 #endif
195 #endif
196 #else
197 #define DEF_MAILREADER "/bin/mail"
198 #endif
199 #endif
200 
201 /* If SIMPLE_MAIL is defined, the mail spool file format is
202    "sender:message", one mail per line, and mails are
203    read within game, from demon-delivered mail scrolls.
204    The mail spool file will be deleted once the player
205    has read the message. */
206 /* #define SIMPLE_MAIL */
207 
208 #ifndef MAILCKFREQ
209 /* How often mail spool file is checked for new messages, in turns */
210 #define MAILCKFREQ 50
211 #endif
212 
213 #endif /* MAIL */
214 
215 /* If SERVER_ADMIN_MSG is defined and the file exists, players get
216    a message from the user defined in the file.  The file format
217    is "sender:message" all in one line. */
218 /* #define SERVER_ADMIN_MSG "adminmsg" */
219 #ifndef SERVER_ADMIN_MSG_CKFREQ
220 /* How often admin message file is checked for new messages, in turns */
221 #define SERVER_ADMIN_MSG_CKFREQ 25
222 #endif
223 
224 
225 /*
226  * Some terminals or terminal emulators send two character sequence "ESC c"
227  * when Alt+c is pressed.  The altmeta run-time option allows the user to
228  * request that "ESC c" be treated as M-c.
229  */
230 #define ALTMETA /* support altmeta run-time option */
231 
232 #ifdef COMPRESS
233 /* Some implementations of compress need a 'quiet' option.
234  * If you've got one of these versions, put -q here.
235  * You can also include any other strange options your compress needs.
236  * If you have a normal compress, just leave it commented out.
237  */
238 /* #define COMPRESS_OPTIONS "-q" */
239 #endif
240 
241 #ifndef FCMASK
242 #define FCMASK 0660 /* file creation mask */
243 #endif
244 
245 /* fcntl(2) is a POSIX-portable call for manipulating file descriptors.
246  * Comment out the USE_FCNTL if for some reason you have a strange
247  * OS/filesystem combination for which fcntl(2) does not work. */
248 #ifdef POSIX_TYPES
249 #define USE_FCNTL
250 #endif
251 
252 /*
253  * The remainder of the file should not need to be changed.
254  */
255 
256 #ifdef _AUX_SOURCE
257 #ifdef AUX /* gcc ? */
258 #define _SYSV_SOURCE
259 #define _BSD_SOURCE
260 #else
261 #define AUX
262 #endif
263 #endif /* _AUX_SOURCE */
264 
265 #if defined(LINUX) || defined(bsdi)
266 #ifndef POSIX_TYPES
267 #define POSIX_TYPES
268 #endif
269 #ifndef POSIX_JOB_CONTROL
270 #define POSIX_JOB_CONTROL
271 #endif
272 #endif
273 
274 /*
275  * BSD/ULTRIX systems are normally the only ones that can suspend processes.
276  * Suspending NetHack processes cleanly should be easy to add to other systems
277  * that have SIGTSTP in the Berkeley sense.  Currently the only such systems
278  * known to work are HPUX and AIX 3.1; other systems will probably require
279  * tweaks to unixtty.c and ioctl.c.
280  *
281  * POSIX defines a slightly different type of job control, which should be
282  * equivalent for NetHack's purposes.  POSIX_JOB_CONTROL should work on
283  * various recent SYSV versions (with possibly tweaks to unixtty.c again).
284  */
285 #ifndef POSIX_JOB_CONTROL
286 #if defined(BSD) || defined(ULTRIX) || defined(HPUX) || defined(AIX_31)
287 #define BSD_JOB_CONTROL
288 #else
289 #if defined(SVR4)
290 #define POSIX_JOB_CONTROL
291 #endif
292 #endif
293 #endif
294 #if defined(BSD_JOB_CONTROL) || defined(POSIX_JOB_CONTROL) || defined(AUX)
295 #define SUSPEND /* let ^Z suspend the game */
296 #endif
297 
298 /*
299  * Define SAFERHANGUP to delay hangup processing until the main command
300  * loop. 'safer' because it avoids certain cheats and also avoids losing
301  * objects being thrown when the hangup occurs.  All unix windowports
302  * support SAFERHANGUP (couldn't define it here otherwise).
303  */
304 #define SAFERHANGUP
305 
306 #if defined(BSD) || defined(ULTRIX)
307 #include <sys/time.h>
308 #else
309 #include <time.h>
310 #endif
311 
312 #define HLOCK "perm" /* an empty file used for locking purposes */
313 
314 #define tgetch getchar
315 
316 #ifndef NOSHELL
317 #define SHELL /* do not delete the '!' command */
318 #endif
319 
320 #include "system.h"
321 
322 #if defined(POSIX_TYPES) || defined(__GNUC__)
323 #include <stdlib.h>
324 #include <unistd.h>
325 #endif
326 
327 #if defined(POSIX_TYPES) || defined(__GNUC__) || defined(BSD) \
328     || defined(ULTRIX)
329 #include <sys/wait.h>
330 #endif
331 
332 #if defined(BSD) || defined(ULTRIX)
333 #if !defined(DGUX) && !defined(SUNOS4) && !defined(__FreeBSD__)
334 #define memcpy(d, s, n) bcopy(s, d, n)
335 #define memcmp(s1, s2, n) bcmp(s2, s1, n)
336 #endif
337 #ifdef SUNOS4
338 #include <memory.h>
339 #endif
340 #else         /* therefore SYSV */
341 #ifndef index /* some systems seem to do this for you */
342 #define index strchr
343 #endif
344 #ifndef rindex
345 #define rindex strrchr
346 #endif
347 #endif
348 
349 /* Use the high quality random number routines. */
350 /* the high quality random number routines */
351 #ifndef USE_ISAAC64
352 # if defined(BSD) || defined(LINUX) || defined(ULTRIX) || defined(CYGWIN32) \
353     || defined(RANDOM) || defined(MACOSX)
354 #  define Rand() random()
355 # else
356 #  define Rand() lrand48()
357 # endif
358 #endif
359 
360 #ifdef TIMED_DELAY
361 #if defined(SUNOS4) || defined(LINUX) || (defined(BSD) && !defined(ULTRIX))
362 #define msleep(k) usleep((k) *1000)
363 #endif
364 #ifdef ULTRIX
365 #define msleep(k) napms(k)
366 #endif
367 #endif
368 
369 /* Relevant for some systems which enable TEXTCOLOR:  some older versions
370    of curses (the run-time library optionally used by nethack's tty
371    interface in addition to its curses interface) supply 'has_colors()'
372    but corresponding <curses.h> doesn't declare it.  has_colors() is used
373    in unixtty.c by init_sco_cons() and init_linux_cons().  If the compiler
374    complains about has_colors() not being declared, try uncommenting
375    NEED_HAS_COLORS_DECL.  If the linker complains about has_colors not
376    being found, switch to ncurses() or update to newer version of curses. */
377 /* #define NEED_HAS_COLORS_DECL */
378 
379 #ifdef hc /* older versions of the MetaWare High-C compiler define this */
380 #ifdef __HC__
381 #undef __HC__
382 #endif
383 #define __HC__ hc
384 #undef hc
385 #endif
386 
387 #if defined(GNOME_GRAPHICS)
388 #if defined(LINUX)
389 #include <linux/unistd.h>
390 #if defined(__NR_getresuid) && defined(__NR_getresgid) /* ie., >= v2.1.44 */
391 #define GETRES_SUPPORT
392 #endif
393 #else
394 #if defined(BSD) || defined(SVR4)
395 /*
396  * [ALI] We assume that SVR4 means we can safely include syscall.h
397  * (although it's really a BSDism). This is certainly true for Solaris 2.5,
398  * Solaris 7, Solaris 8 and Compaq Tru64 5.1
399  * Later BSD systems will have the getresid system calls.
400  */
401 #include <sys/syscall.h>
402 #if (defined(SYS_getuid) || defined(SYS_getresuid)) \
403     && (defined(SYS_getgid) || defined(SYS_getresgid))
404 #define GETRES_SUPPORT
405 #endif
406 #endif /* BSD || SVR4 */
407 #endif /* LINUX */
408 #endif /* GNOME_GRAPHICS */
409 
410 #ifdef MACOSX
411 # define RUNTIME_PASTEBUF_SUPPORT
412 #endif
413 
414 /*
415  * /dev/random is blocking on Linux, so there we default to /dev/urandom which
416  * should still be good enough.
417  * BSD systems usually have /dev/random that is supposed to be used.
418  * OSX is based on NetBSD kernel and has both /dev/random and /dev/urandom.
419  */
420 #ifdef LINUX
421 # define DEV_RANDOM "/dev/urandom"
422 #else
423 # if defined(BSD) || defined(MACOSX)
424 #  define DEV_RANDOM "/dev/random"
425 # endif
426 #endif
427 
428 #endif /* UNIXCONF_H */
429 #endif /* UNIX */
430