1/*	SCCS Id: @(#)vmsconf.h	3.4	2003/05/19	*/
2/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3/* NetHack may be freely redistributed.  See license for details. */
4
5#ifdef VMS
6#ifndef VMSCONF_H
7#define VMSCONF_H
8
9/*
10 * Edit these to choose values appropriate for your site.
11 * WIZARD is the username allowed to use the debug option of nethack; no harm
12 *   is done by leaving it as a username that doesn't exist at your site.
13 * HACKDIR can be overridden at run-time with the logical name HACKDIR, as in
14 *   $ define hackdir disk$users:[games.nethack]
15 * Trailing NULs are present in the default values in order to make some
16 *   extra room for patching longer values into an existing executable.
17 */
18#define Local_WIZARD	"NHWIZARD\0\0\0\0"
19#define Local_HACKDIR	"DISK$USERS:[GAMES.NETHACK.3_4_X.PLAY]\0\0\0\0\0\0\0\0"
20
21/*
22 * This section cleans up the stuff done in config.h so that it
23 * shouldn't need to be modified.  It's conservative so that if
24 * config.h is actually edited, the changes won't impact us.
25 */
26#ifdef UNIX
27# undef UNIX
28#endif
29#ifdef HACKDIR
30# undef HACKDIR
31#endif
32#ifdef WIZARD
33# undef WIZARD
34#endif
35#ifdef WIZARD_NAME
36# undef WIZARD_NAME
37#endif
38#define HACKDIR Local_HACKDIR
39#ifndef KR1ED
40# define WIZARD Local_WIZARD
41# define WIZARD_NAME WIZARD
42#else
43# define WIZARD 1
44# define WIZARD_NAME Local_WIZARD
45#endif
46
47/* filenames require punctuation to avoid redirection via logical names */
48#undef RECORD
49#define RECORD	"record;1"	/* scoreboard file (retains high scores) */
50#undef LOGFILE
51#define LOGFILE "logfile;0"	/* optional file (records all games) */
52
53#define HLOCK	"perm;1"	/* an empty file used for locking purposes */
54
55/* want compression--for level & save files--performed within NetHack itself */
56#ifdef COMPRESS
57# undef COMPRESS
58#endif
59#ifndef INTERNAL_COMP
60# define INTERNAL_COMP
61#endif
62
63/*
64 * If nethack.exe will be installed with privilege so that the playground
65 * won't need to be left unprotected, define SECURE to suppress a couple
66 * of file protection fixups (protection of bones files and ownership of
67 * save files).
68 */
69/* #define SECURE */
70
71/*
72 * Put the readonly data files into a single container rather than into
73 * separate files in the playground directory.
74 */
75#define DLB	/* use data librarian code */
76
77/*
78 * You may define TEXTCOLOR if your system has any terminals that recognize
79 * ANSI color sequences of the form ``<ESCAPE>[#;#m'', where the first # is
80 * a number between 40 and 47 represented background color, and the second
81 * # is a number between 30 and 37 representing the foreground color.
82 * GIGI terminals and DECterm windows on color VAXstations support these
83 * color escape sequences, as do some 3rd party terminals and many micro
84 * computers.
85 */
86/* #define TEXTCOLOR */
87
88/*
89 * If you define USE_QIO_INPUT, then you'll get raw characters from the
90 * keyboard, not unlike those of the unix version of Nethack.  This will
91 * allow you to use the Escape key in normal gameplay, and the appropriate
92 * control characters in Wizard mode.  It will work most like the unix version.
93 * It will also avoid "<interrupt>" being displayed when ^Y is pressed.
94 *
95 * Otherwise, the VMS SMG calls will be used.  These calls block use of
96 * the escape key, as well as certain control keys, so gameplay is not
97 * the same, although the differences are fairly negligible.  You must
98 * then use a VTxxx function key or two <escape>s to give an ESC response.
99 */
100#define USE_QIO_INPUT	/* use SYS$QIOW instead of SMG$READ_KEYSTROKE */
101
102/*
103 * Allow the user to decide whether to pause via timer or excess screen
104 * output for various display effects like explosions and moving objects.
105 */
106#define TIMED_DELAY	/* enable the `timed_delay' run-time option */
107
108/*
109 * If you define MAIL, then NetHack will capture incoming broadcast
110 * messages such as "New mail from so-and-so" and "Print job completed,"
111 * and then deliver them to the player.  For mail and phone broadcasts
112 * a scroll of mail will be created, which when read will cause NetHack
113 * to prompt the player for a command to spawn in order to respond.  The
114 * latter capability will not be available if SHELL is disabled below.
115 * If you undefine MAIL, broadcasts will go straight to the terminal,
116 * resulting in disruption of the screen display; use <ctrl/R> to redraw.
117 */
118#define MAIL		/* enable broadcast trapping */
119
120/*
121 * SHELL enables the player to 'escape' into a spawned subprocess via
122 * the '!' command.  Logout or attach back to the parent to resume play.
123 * If the player attaches back to NetHack, then a subsequent escape will
124 * re-attach to the existing subprocess.  Any such subprocess left over
125 * at game exit will be deleted by an exit handler.
126 * SUSPEND enables someone running NetHack in a subprocess to reconnect
127 * to the parent process with the <ctrl/Z> command; this is not very
128 * close to Unix job control, but it's better than nothing.
129 */
130#define SHELL		/* do not delete the '!' command */
131#define SUSPEND		/* don't delete the ^Z command, such as it is */
132
133#define RANDOM		/* use sys/share/random.c instead of vaxcrtl rand */
134
135#define FCMASK	0660	/* file creation mask */
136
137
138/*
139 * The remainder of the file should not need to be changed.
140 */
141
142/* data librarian defs */
143#ifdef DLB
144# define DLBFILE	"nh-data.dlb"
145	/*
146	 * Since we can do without case insensitive filename comparison,
147	 * avoid enabling it because that requires compiling and linking
148	 * src/hacklib into util/dlb_main.
149	 */
150/* # define FILENAME_CMP strcmpi */	/* case insensitive */
151#endif
152
153#if defined(VAXC) && !defined(ANCIENT_VAXC)
154# ifdef volatile
155#  undef volatile
156# endif
157# ifdef const
158#  undef const
159# endif
160#endif
161
162#ifdef __DECC
163# define STRICT_REF_DEF /* used in lev_main.c */
164#endif
165#ifdef STRICT_REF_DEF
166# define DEFINE_OSPEED
167#endif
168
169#ifndef alloca
170	/* bison generated foo_yacc.c might try to use alloca() */
171# ifdef __GNUC__
172#  define alloca __builtin_alloca
173# else
174#  define ALLOCA_HACK	/* used in util/panic.c */
175# endif
176#endif
177
178#ifdef _DECC_V4_SOURCE
179/* <types.h> excludes some necessary typedefs when _DECC_V4_SOURCE is defined */
180#include <types.h>
181# ifndef __PID_T
182# define __PID_T
183typedef __pid_t pid_t;
184# endif
185# ifndef __UID_T
186# define __UID_T
187typedef __uid_t uid_t;
188# endif
189# ifndef __GID_T
190# define __GID_T
191typedef __gid_t gid_t;
192# endif
193# ifndef __MODE_T
194# define __MODE_T
195typedef __mode_t mode_t;
196# endif
197#endif	/* _DECC_V4_SOURCE */
198
199#include <time.h>
200#if 0	/* <file.h> is missing for old gcc versions; skip it to save time */
201#include <file.h>
202#else	/* values needed from missing include file */
203# define O_RDONLY 0
204# define O_WRONLY 1
205# define O_RDWR   2
206# define O_CREAT 0x200
207# define O_TRUNC 0x400
208#endif
209
210#ifndef REDO
211# define Getchar nhgetch
212#endif
213#define tgetch vms_getchar
214
215#include "system.h"
216
217#define index	strchr
218#define rindex	strrchr
219
220/* Use the high quality random number routines. */
221#if defined(RANDOM)
222#define Rand()	random()
223/* VMS V7 adds these entry points to DECC$SHR; stick with the nethack-supplied
224   code to avoid having to deal with version-specific conditionalized builds */
225#define random		nh_random
226#define srandom		nh_srandom
227#define initstate	nh_initstate
228#define setstate	nh_setstate
229#else
230#define Rand()	rand()
231#endif
232
233#ifndef __GNUC__
234# ifndef bcopy
235#define bcopy(s,d,n)	memcpy((d),(s),(n))	/* vaxcrtl */
236# endif
237#endif
238#define abort()		vms_abort()		/* vmsmisc.c */
239#define creat(f,m)	vms_creat(f,m)		/* vmsfiles.c */
240#define exit(sts)	vms_exit(sts)		/* vmsmisc.c */
241#define getuid()	vms_getuid()		/* vmsunix.c */
242#define link(f1,f2)	vms_link(f1,f2)		/* vmsfiles.c */
243#define open(f,k,m)	vms_open(f,k,m)		/* vmsfiles.c */
244/* #define unlink(f0)	vms_unlink(f0)		/* vmsfiles.c */
245#ifdef VERYOLD_VMS
246#define unlink(f0)	delete(f0)		/* vaxcrtl */
247#else
248#define unlink(f0)	remove(f0)		/* vaxcrtl, decc$shr */
249#endif
250#define C$$TRANSLATE(n) c__translate(n)		/* vmsfiles.c */
251
252/* VMS global names are case insensitive... */
253#define An vms_an
254#define The vms_the
255#define Shk_Your vms_shk_your
256
257/* avoid global symbol in Alpha/VMS V1.5 STARLET library (link trouble) */
258#define ospeed vms_ospeed
259
260/* used in several files which don't #include "extern.h" */
261extern void FDECL(vms_exit, (int));
262extern int FDECL(vms_open, (const char *,int,unsigned));
263
264#endif	/* VMSCONF_H */
265#endif	/* VMS */
266