billr@saab.CNA.TEK.COM (Bill Randle) (02/09/91)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 12, Issue 27 Archive-name: NetHack3/Patch10c Patch-To: NetHack3: Volume 7, Issue 56-93 Environment: #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 3 (of 8)." # Contents: UPDATE10 patch10.05 # Wrapped by billr@saab on Fri Feb 8 17:18:58 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'UPDATE10' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'UPDATE10'\" to \"'UPDATE10.orig'\" mv -f 'UPDATE10' 'UPDATE10.orig' fi echo shar: Extracting \"'UPDATE10'\" \(1068 characters\) sed "s/^X//" >'UPDATE10' <<'END_OF_FILE' XUPDATE10 X XPatch 10 to NetHack 3.0 adds no new features, and few optimizations. XIt fixes many mostly rare bugs and extends support to a couple more Xsystem variants. X XThe major change with this patch is that the MSDOS overlay manager is Xnow bright enough to split up one logical executable among several disk Xfiles, thus simplifying distribution via floppies since each file can Xbe <360K. Entering debugging mode for the Macintosh is simplified. XThere are provisions for later versions of several compilers, although Xnot yet Turbo C++, as we have not gotten an executable with adequate Xperformance (see Install.ovl for gory details). X XNetHack should now get along better with Irises, IBM RS/6000s, NeXTs, Xand possibly even SCO UNIX. X XAmong the dead bugs are those involving artifact damage, VMS file Xmanipulation, crushed iron balls, elven equipment, orcs with 2^32-1 Xdaggers, trolls with ridiculously high hitpoints, exploding bags of Xholding on the ground, inappropriate messages, saved luck, unbounded Xdigging on special levels, and several distinct trap problems. X END_OF_FILE if test 1068 -ne `wc -c <'UPDATE10'`; then echo shar: \"'UPDATE10'\" unpacked with wrong size! fi # end of 'UPDATE10' if test -f 'patch10.05' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch10.05'\" to \"'patch10.05.orig'\" mv -f 'patch10.05' 'patch10.05.orig' fi echo shar: Extracting \"'patch10.05'\" \(50416 characters\) sed "s/^X//" >'patch10.05' <<'END_OF_FILE' X*** auxil/Guidebook.mn Tue Jun 26 21:19:58 1990 X--- auxil/Guidebook.mn Sun Feb 3 12:33:05 1991 X*************** X*** 1221,1243 **** X .TS S X center; X c c c. X! Richard Addison Bruce Holloway Pat Rankin X! Tom Almy Richard P. Hughey Eric S. Raymond X! Ken Arromdee Ari Huttunen John Rupley X! Eric Backus Del Lamb Olaf Seibert X! John S. Bien Greg Laskin Kevin Sitze X! Ralf Brown Johnny Lee Eric R. Smith X! Jean-Christophe Collet Steve Linhart Kevin Smolkowski X! Steve Creps Ken Lorber Michael Sokolov X! Kevin Darcy Benson I. Margulies Stephen Spackman X! Matthew Day Pierre Martineau Andy Swanson X! Joshua Delahunty Roland McGrath Kevin Sweet X! Jochen Erwied Norm Meluch Scott R. Turner X! David Gentzel Bruce Mewborne Janet Walz X! Mark Gooderum Izchak Miller Jon Watte X! David Hairston Gil Neiger Tom West X! Timo Hakulinen Greg Olson Gregg Wonderly X! Eric Hendrickson Mike Passaretti X .TE X .ed X X--- 1221,1243 ---- X .TS S X center; X c c c. X! Richard Addison Bruce Holloway Mike Passaretti X! Tom Almy Richard P. Hughey Pat Rankin X! Ken Arromdee Ari Huttunen Eric S. Raymond X! Eric Backus Del Lamb John Rupley X! John S. Bien Greg Laskin Olaf Seibert X! Ralf Brown Johnny Lee Kevin Sitze X! Jean-Christophe Collet Merlyn LeRoy Eric R. Smith X! Steve Creps Steve Linhart Kevin Smolkowski X! Kevin Darcy Ken Lorber Michael Sokolov X! Matthew Day Benson I. Margulies Stephen Spackman X! Joshua Delahunty Pierre Martineau Andy Swanson X! Jochen Erwied Roland McGrath Kevin Sweet X! David Gentzel Norm Meluch Scott R. Turner X! Mark Gooderum Bruce Mewborne Janet Walz X! David Hairston Izchak Miller Jon Watte X! Timo Hakulinen Gil Neiger Tom West X! Eric Hendrickson Greg Olson Gregg Wonderly X .TE X .ed X X*** auxil/Guidebook.mss Tue Jun 26 21:20:00 1990 X--- auxil/Guidebook.mss Sun Feb 3 12:33:11 1991 X*************** X*** 1183,1205 **** X particularly intriguing modification to help out with the game. The Gods of X the Dungeon sometimes make note of the names of the worst of these miscreants X in this, the list of Dungeoneers: X! Richard Addison Bruce Holloway Pat Rankin X! Tom Almy Richard P. Hughey Eric S. Raymond X! Ken Arromdee Ari Huttunen John Rupley X! Eric Backus Del Lamb Olaf Seibert X! John S. Bien Greg Laskin Kevin Sitze X! Ralf Brown Johnny Lee Eric R. Smith X! Jean-Christophe Collet Steve Linhart Kevin Smolkowski X! Steve Creps Ken Lorber Michael Sokolov X! Kevin Darcy Benson I. Margulies Stephen Spackman X! Matthew Day Pierre Martineau Andy Swanson X! Joshua Delahunty Roland McGrath Kevin Sweet X! Jochen Erwied Norm Meluch Scott R. Turner X! David Gentzel Bruce Mewborne Janet Walz X! Mark Gooderum Izchak Miller Jon Watte X! David Hairston Gil Neiger Tom West X! Timo Hakulinen Greg Olson Gregg Wonderly X! Eric Hendrickson Mike Passaretti X X Brand and product names are trademarks or registered trademarks of their X respective holders. X--- 1183,1205 ---- X particularly intriguing modification to help out with the game. The Gods of X the Dungeon sometimes make note of the names of the worst of these miscreants X in this, the list of Dungeoneers: X! Richard Addison Bruce Holloway Mike Passaretti X! Tom Almy Richard P. Hughey Pat Rankin X! Ken Arromdee Ari Huttunen Eric S. Raymond X! Eric Backus Del Lamb John Rupley X! John S. Bien Greg Laskin Olaf Seibert X! Ralf Brown Johnny Lee Kevin Sitze X! Jean-Christophe Collet Merlyn LeRoy Eric R. Smith X! Steve Creps Steve Linhart Kevin Smolkowski X! Kevin Darcy Ken Lorber Michael Sokolov X! Matthew Day Benson I. Margulies Stephen Spackman X! Joshua Delahunty Pierre Martineau Andy Swanson X! Jochen Erwied Roland McGrath Kevin Sweet X! David Gentzel Norm Meluch Scott R. Turner X! Mark Gooderum Bruce Mewborne Janet Walz X! David Hairston Izchak Miller Jon Watte X! Timo Hakulinen Gil Neiger Tom West X! Eric Hendrickson Greg Olson Gregg Wonderly X X Brand and product names are trademarks or registered trademarks of their X respective holders. X*** auxil/Guidebook.tex Tue Jun 26 21:20:02 1990 X--- auxil/Guidebook.tex Sun Feb 3 12:32:57 1991 X*************** X*** 459,466 **** X %.lp X \item[\tb{/}] X Tell what a symbol represents. You may choose to specify a location X- or type a symbol to define. X- Tell what a symbol represents. You may choose to specify a location X or type a symbol (or even a whole word) to define. If the X %.op X {\it help\/} X--- 459,464 ---- X*************** X*** 1346,1352 **** X %.lp X \item[\ib{graphics}] X Set the graphics symbols for screen displays (default X! ``\verb&|--------|||-\/.-|+.#<>& \verb&^"}{#\_<>##&''). The X %.op X {\it graphics\/} X option (if used) should come last, followed by a string of up to 35 X--- 1344,1350 ---- X %.lp X \item[\ib{graphics}] X Set the graphics symbols for screen displays (default X! ``\verb&|--------|||-\\/.-|+.#<>& \verb&^"}{#\\_<>##&''). The X %.op X {\it graphics\/} X option (if used) should come last, followed by a string of up to 35 X*************** X*** 1356,1365 **** X X The X %.op X! {\it DECgraphics} X and X %.op X! {\it IBMgraphics} X options use predefined selections of graphics symbols, so you need not X go to the trouble of setting up a full graphics string for these common X cases. These two options also set up proper handling of graphics X--- 1354,1363 ---- X X The X %.op X! {\it DECgraphics\/} X and X %.op X! {\it IBMgraphics\/} X options use predefined selections of graphics symbols, so you need not X go to the trouble of setting up a full graphics string for these common X cases. These two options also set up proper handling of graphics X*************** X*** 1604,1626 **** X %.sd X \begin{center} X \begin{tabular}{lll} X! Richard Addison & Bruce Holloway & Pat Rankin \\ X! Tom Almy & Richard P. Hughey & Eric S. Raymond \\ X! Ken Arromdee & Ari Huttunen & John Rupley \\ X! Eric Backus & Del Lamb & Olaf Seibert \\ X! John S. Bien & Greg Laskin & Kevin Sitze \\ X! Ralf Brown & Johnny Lee & Eric R. Smith \\ X! Jean-Christophe Collet & Steve Linhart & Kevin Smolkowski\\ X! Steve Creps & Ken Lorber & Michael Sokolov \\ X! Kevin Darcy & Benson I. Margulies & Stephen Spackman\\ X! Matthew Day & Pierre Martineau & Andy Swanson \\ X! Joshua Delahunty & Roland McGrath & Kevin Sweet \\ X! Jochen Erwied & Norm Meluch & Scott R. Turner \\ X! David Gentzel & Bruce Mewborne & Janet Walz \\ X! Mark Gooderum & Izchak Miller & Jon W\"atte \\ X! David Hairston & Gil Neiger & Tom West \\ X! Timo Hakulinen & Greg Olson & Gregg Wonderly \\ X! Eric Hendrickson & Mike Passaretti & X \end{tabular} X \end{center} X %.ed X--- 1602,1624 ---- X %.sd X \begin{center} X \begin{tabular}{lll} X! Richard Addison & Bruce Holloway & Mike Passaretti \\ X! Tom Almy & Richard P. Hughey & Pat Rankin \\ X! Ken Arromdee & Ari Huttunen & Eric S. Raymond \\ X! Eric Backus & Del Lamb & John Rupley \\ X! John S. Bien & Greg Laskin & Olaf Seibert \\ X! Ralf Brown & Johnny Lee & Kevin Sitze \\ X! Jean-Christophe Collet & Merlyn LeRoy & Eric R. Smith \\ X! Steve Creps & Steve Linhart & Kevin Smolkowski\\ X! Kevin Darcy & Ken Lorber & Michael Sokolov \\ X! Matthew Day & Benson I. Margulies & Stephen Spackman\\ X! Joshua Delahunty & Pierre Martineau & Andy Swanson \\ X! Jochen Erwied & Roland McGrath & Kevin Sweet \\ X! David Gentzel & Norm Meluch & Scott R. Turner \\ X! Mark Gooderum & Bruce Mewborne & Janet Walz \\ X! David Hairston & Izchak Miller & Jon W\"atte \\ X! Timo Hakulinen & Gil Neiger & Tom West \\ X! Eric Hendrickson & Greg Olson & Gregg Wonderly X \end{tabular} X \end{center} X %.ed X*** auxil/history Sat May 26 19:29:48 1990 X--- auxil/history Thu Jan 31 16:05:34 1991 X*************** X*** 43,62 **** X the Dungeon sometimes make note of the names of the worst of these miscreants X in this, the list of Dungeoneers: X X! Richard Addison Bruce Holloway Pat Rankin X! Tom Almy Richard P. Hughey Eric S. Raymond X! Ken Arromdee Ari Huttunen John Rupley X! Eric Backus Del Lamb Olaf Seibert X! John S. Bien Greg Laskin Kevin Sitze X! Ralf Brown Johnny Lee Eric R. Smith X! Jean-Christophe Collet Steve Linhart Kevin Smolkowski X! Steve Creps Ken Lorber Michael Sokolov X! Kevin Darcy Benson I. Margulies Stephen Spackman X! Matthew Day Pierre Martineau Andy Swanson X! Joshua Delahunty Roland McGrath Kevin Sweet X! Jochen Erwied Norm Meluch Scott R. Turner X! David Gentzel Bruce Mewborne Janet Walz X! Mark Gooderum Izchak Miller Jon Watte X! David Hairston Gil Neiger Tom West X! Timo Hakulinen Greg Olson Gregg Wonderly X! Eric Hendrickson Mike Passaretti X--- 43,62 ---- X the Dungeon sometimes make note of the names of the worst of these miscreants X in this, the list of Dungeoneers: X X! Richard Addison Bruce Holloway Mike Passaretti X! Tom Almy Richard P. Hughey Pat Rankin X! Ken Arromdee Ari Huttunen Eric S. Raymond X! Eric Backus Del Lamb John Rupley X! John S. Bien Greg Laskin Olaf Seibert X! Ralf Brown Johnny Lee Kevin Sitze X! Jean-Christophe Collet Merlyn LeRoy Eric R. Smith X! Steve Creps Steve Linhart Kevin Smolkowski X! Kevin Darcy Ken Lorber Michael Sokolov X! Matthew Day Benson I. Margulies Stephen Spackman X! Joshua Delahunty Pierre Martineau Andy Swanson X! Jochen Erwied Roland McGrath Kevin Sweet X! David Gentzel Norm Meluch Scott R. Turner X! Mark Gooderum Bruce Mewborne Janet Walz X! David Hairston Izchak Miller Jon Watte X! Timo Hakulinen Gil Neiger Tom West X! Eric Hendrickson Greg Olson Gregg Wonderly X*** include/extern.h Tue Jun 26 21:20:05 1990 X--- include/extern.h Wed Jan 30 08:48:46 1991 X*************** X*** 1235,1240 **** X--- 1235,1241 ---- X /* ### termcap.c ### */ X X E void NDECL(startup); X+ E void FDECL(number_pad, (int)); X E void NDECL(start_screen); X E void NDECL(end_screen); X #ifdef CLIPPING X*************** X*** 1307,1313 **** X X E boolean FDECL(rust_dmg, (struct obj *,const char *,int,BOOLEAN_P)); X E struct trap *FDECL(maketrap, (int,int,int)); X- E int FDECL(teleok, (int,int)); X E void FDECL(fall_through, (BOOLEAN_P)); X E void FDECL(dotrap, (struct trap *)); X E int FDECL(mintrap, (struct monst *)); X--- 1308,1313 ---- X*************** X*** 1378,1384 **** X E int NDECL(phase_of_the_moon); X E int NDECL(night); X E int NDECL(midnight); X! E void FDECL(gethdate, (char *)); X E int FDECL(uptodate, (int)); X E void NDECL(getlock); X E void FDECL(regularize, (char *)); X--- 1378,1384 ---- X E int NDECL(phase_of_the_moon); X E int NDECL(night); X E int NDECL(midnight); X! E void FDECL(gethdate, (const char *)); X E int FDECL(uptodate, (int)); X E void NDECL(getlock); X E void FDECL(regularize, (char *)); X*************** X*** 1445,1450 **** X--- 1445,1451 ---- X E void FDECL(regularize, (char *)); X E int FDECL(vms_creat, (char *,unsigned int)); X E int NDECL(vms_getuid); X+ E const char *NDECL(verify_termcap); X E void NDECL(privoff); X E void NDECL(privon); X # ifdef SHELL X*** include/global.h Thu May 17 23:20:32 1990 X--- include/global.h Tue Feb 5 08:41:45 1991 X*************** X*** 9,15 **** X X X /* #define BETA /* if a beta-test copy [MRS] */ X! #define VERSION "3.0i" /* version number. */ X X /* X * Files expected to exist in the playground directory. X--- 9,15 ---- X X X /* #define BETA /* if a beta-test copy [MRS] */ X! #define VERSION "3.0j" /* version number. */ X X /* X * Files expected to exist in the playground directory. X*** include/obj.h Sat Mar 31 10:39:26 1990 X--- include/obj.h Tue Jan 29 16:57:57 1991 X*************** X*** 5,10 **** X--- 5,13 ---- X #ifndef OBJ_H X #define OBJ_H X X+ /* #define obj obj_nh /* uncomment for SCO UNIX, which has a conflicting X+ * typedef for "obj" in <sys/types.h> */ X+ X struct obj { X struct obj *nobj; X struct obj *nexthere; /* for location lists */ X*** include/patchlevel.h Tue Jun 26 21:20:06 1990 X--- include/patchlevel.h Mon Feb 4 16:43:42 1991 X*************** X*** 104,107 **** X * and fix a couple more bugs X */ X X! #define PATCHLEVEL 9 X--- 104,114 ---- X * and fix a couple more bugs X */ X X! /* X! * Patch 10, February 5, 1991 X! * extend overlay manager to multiple files for easier binary distribution X! * allow for more system and compiler variance X! * remove more small insects X! */ X! X! #define PATCHLEVEL 10 X*** include/system.h Tue Jun 26 21:20:06 1990 X--- include/system.h Sat Feb 2 16:46:26 1991 X*************** X*** 200,206 **** X # ifdef THINKC4 X E size_t FDECL(strlen, (char *)); X # else X! E int FDECL(strlen, (char *)); X # endif /* THINKC4 */ X # endif /* HPUX */ X #endif /* MSDOS */ X--- 200,206 ---- X # ifdef THINKC4 X E size_t FDECL(strlen, (char *)); X # else X! E int FDECL(strlen, (const char *)); X # endif /* THINKC4 */ X # endif /* HPUX */ X #endif /* MSDOS */ X*************** X*** 262,276 **** X E char *FDECL(tgoto, (const char *,int,int)); X E void FDECL(tputs, (const char *,int,int (*)())); X #else X! E int FDECL(tgetent, (char *,char *)); X E int FDECL(tgetnum, (char *)); X E int FDECL(tgetflag, (char *)); X E char *FDECL(tgetstr, (char *,char **)); X E char *FDECL(tgoto, (char *,int,int)); X! E void FDECL(tputs, (char *,int,int (*)())); X #endif X X! #ifndef MACOS X E genericptr_t FDECL(malloc, (size_t)); X #endif X X--- 262,276 ---- X E char *FDECL(tgoto, (const char *,int,int)); X E void FDECL(tputs, (const char *,int,int (*)())); X #else X! E int FDECL(tgetent, (char *,const char *)); X E int FDECL(tgetnum, (char *)); X E int FDECL(tgetflag, (char *)); X E char *FDECL(tgetstr, (char *,char **)); X E char *FDECL(tgoto, (char *,int,int)); X! E void FDECL(tputs, (const char *,int,int (*)())); X #endif X X! #if defined(ALLOC_C) && !defined(MACOS) X E genericptr_t FDECL(malloc, (size_t)); X #endif X X*** include/unixconf.h Sun Apr 8 23:47:45 1990 X--- include/unixconf.h Sat Feb 2 16:52:38 1991 X*************** X*** 37,42 **** X--- 37,44 ---- X /* #define UNIXPC /* use in addition to SYSV for AT&T 7300/3B1 */ X /* also note that the stock cpp qualifies as a X STUPID_CPP for config.h */ X+ /* #define AIX_31 /* In AIX 3.1 (IBM RS/6000) use BSD ioctl's to gain X+ job control (note that AIX is SYSV otherwise) */ X X /* #define PYRAMID_BUG /* avoid a bug on the Pyramid */ X /* #define APOLLO /* same for the Apollo */ X*************** X*** 148,157 **** X /* X * BSD/ULTRIX systems are normally the only ones that can suspend processes. X * Suspending NetHack processes cleanly should be easy to add to other systems X! * that have SIGTSTP. Currently the only such system known to work is HPUX; X! * other systems will probably require tweaks to unixtty.c and ioctl.c. X */ X! #if defined(BSD) || defined(ULTRIX) || defined (HPUX) X #define SUSPEND /* let ^Z suspend the game */ X #endif X X--- 150,160 ---- X /* X * BSD/ULTRIX systems are normally the only ones that can suspend processes. X * Suspending NetHack processes cleanly should be easy to add to other systems X! * that have SIGTSTP. Currently the only such systems known to work are HPUX X! * and AIX 3.1; other systems will probably require tweaks to unixtty.c and X! * ioctl.c. X */ X! #if defined(BSD) || defined(ULTRIX) || defined (HPUX) || defined(AIX_31) X #define SUSPEND /* let ^Z suspend the game */ X #endif X X*** include/vmsconf.h Thu May 17 23:20:33 1990 X--- include/vmsconf.h Sat Feb 2 16:52:37 1991 X*************** X*** 42,66 **** X # define WIZARD_NAME Local_WIZARD X #endif X X #undef RECORD X! #define RECORD "record;1" X X #ifdef COMPRESS X # undef COMPRESS X #endif X! #ifdef ZEROCOMP X! # undef ZEROCOMP X #endif X X /* X * If you define MAIL, then the player will be notified of new broadcasts X * when they arrive. X */ X! #define MAIL X X! #define RANDOM /* use others/random.c instead of vaxcrtl rand/srand */ X X! #define FCMASK 0660 /* file creation mask */ X X /* vaxcrtl object library is not available on MicroVMS (4.4 thru 4.6(.7?)) X unless it's retreived from a full VMS system or leftover from a really X--- 42,81 ---- X # define WIZARD_NAME Local_WIZARD X #endif X X+ /* filenames require punctuation to avoid redirection via logical names */ X #undef RECORD X! #define RECORD "record;1" /* scoreboard file (retains high scores) */ X! #undef LOGFILE X! #define LOGFILE "logfile;0" /* optional file (records all games) */ X X+ #define HLOCK "perm;1" /* an empty file used for locking purposes */ X+ #define LLOCK "perm.lock;1" /* temporary link to previous */ X+ X+ /* want compression--for level & save files--performed within NetHack itself */ X #ifdef COMPRESS X # undef COMPRESS X #endif X! #ifndef ZEROCOMP X! # define ZEROCOMP X #endif X X /* X+ * If nethack.exe will be installed with privilege so that the playground X+ * won't need to be left unprotected, define SECURE to suppress a couple X+ * of file protection fixups (protection of bones files and ownership of X+ * save files). X+ */ X+ /* #define SECURE /**/ X+ X+ /* X * If you define MAIL, then the player will be notified of new broadcasts X * when they arrive. X */ X! #define MAIL X X! #define RANDOM /* use others/random.c instead of vaxcrtl rand/srand */ X X! #define FCMASK 0660 /* file creation mask */ X X /* vaxcrtl object library is not available on MicroVMS (4.4 thru 4.6(.7?)) X unless it's retreived from a full VMS system or leftover from a really X*************** X*** 95,104 **** X #endif X X #include <time.h> X #include <file.h> X! X! #define HLOCK "perm;1" /* an empty file used for locking purposes */ X! #define LLOCK "safelock;1" /* link to previous */ X X #ifndef REDO X # define Getchar vms_getchar X--- 110,123 ---- X #endif X X #include <time.h> X+ #ifndef __GNUC__ X #include <file.h> X! #else /* values needed from missing include file */ X! # define O_RDONLY 0 X! # define O_WRONLY 1 X! # define O_RDWR 2 X! # define O_CREAT 0x200 X! #endif /* __GNUC__ */ X X #ifndef REDO X # define Getchar vms_getchar X*** mac/mac.c Tue Jun 26 21:20:08 1990 X--- mac/mac.c Sat Jan 5 14:58:53 1991 X*************** X*** 81,91 **** X if (! flags.wantspace) SetCursor(&ARROW_CURSOR); X } X /* initialize cursor blinking */ X! message = TickCount(); X cursRectInv = FALSE; X while (!ch) { X (void)WaitNextEvent(everyEvent, &theEvent, (fInFront) ? 0L : 50L, 0L); X! if (theEvent.what == keyDown || theEvent.what == autoKey) { X ch = 0; X ObscureCursor(); X /* use raw key codes */ X--- 81,91 ---- X if (! flags.wantspace) SetCursor(&ARROW_CURSOR); X } X /* initialize cursor blinking */ X! message = TickCount() + ((Invisible || (macflags & fMoveWRTMouse)) ? 0L : cursorTime); X cursRectInv = FALSE; X while (!ch) { X (void)WaitNextEvent(everyEvent, &theEvent, (fInFront) ? 0L : 50L, 0L); X! if ((theEvent.what == keyDown || theEvent.what == autoKey) && (FrontWindow() == HackWindow)) { X ch = 0; X ObscureCursor(); X /* use raw key codes */ X*************** X*** 228,233 **** X--- 228,237 ---- X case kSuspendResumeMessage: X if (!SuspResIsResume(theEvent.message)) { X /* ---------- SUSPEND EVENT ------------ */ X+ if (cursRectInv) { X+ InvertRect(&cursorRect); X+ cursRectInv = FALSE; X+ } X fInFront = FALSE; X if (macflags & fZoomOnContextSwitch X && !EmptyRect(&(**(HackWindow)->visRgn).rgnBBox)) X*************** X*** 264,271 **** X X case updateEvt: X if (HackWindow == (WindowPtr)theEvent.message) { X doUpdate(t); X- if (cursRectInv) InvertRect(&cursorRect); /* restore cursor */ X } X break; X X--- 268,276 ---- X X case updateEvt: X if (HackWindow == (WindowPtr)theEvent.message) { X+ if (cursRectInv) InvertRect(&cursorRect); /* clear cursor */ X+ cursRectInv = FALSE; X doUpdate(t); X } X break; X X*************** X*** 299,304 **** X--- 304,313 ---- X break; X X case mouseDown: X+ if (cursRectInv) { X+ InvertRect(&cursorRect); X+ cursRectInv = FALSE; X+ } X ch = mButtonDown(theEvent, t, &nextCommand); X #ifdef THINK_C X repDelay = KeyThresh; X*** mac/macinit.c Mon May 21 22:21:10 1990 X--- mac/macinit.c Thu Jan 31 11:24:36 1991 X*************** X*** 239,248 **** X--- 239,263 ---- X t->curHilite = 0; X t->curAttr = 0; X X+ #define all4Mods (cmdKey | shiftKey | optionKey | controlKey) X+ #define nKeyCmd (all4Mods - cmdKey) X+ #define nKeyShf (all4Mods - shiftKey) X+ #define nKeyOpt (all4Mods - optionKey) X+ #define nKeyCtl (all4Mods - controlKey) X /* give time for Multifinder to bring NetHack window to front */ X+ /* check to see if this is a "wiz bang" start */ X for(tempFont = 0; tempFont<10; tempFont++) { X+ int theMod; X+ X SystemTask(); X (void)GetNextEvent(nullEvent,&theEvent); X+ X+ theMod = theEvent.modifiers & all4Mods; X+ if ((theMod == nKeyCmd) || (theMod == nKeyShf) || X+ (theMod == nKeyOpt) || (theMod == nKeyCtl)) { X+ Strcpy(plname, "wizard"); X+ /* SysBeep(1); /* useful only for debugging */ X+ } X } X X HackWindow = NewWindow(0L, &boundsRect, "\016NetHack [MOVE]", X*************** X*** 416,421 **** X--- 431,437 ---- X int fd; X short temp_flags; X term_info *t; X+ boolean saveWizard, newPrefs = FALSE; X X t = (term_info *)GetWRefCon(HackWindow); X SetVol(0L, t->system.sysVRefNum); X*************** X*** 430,436 **** X--- 446,455 ---- X tmp = CtoPstr(OPTIONS); X result = Create((StringPtr)tmp, (short)0, CREATOR, AUXIL_TYPE); X if (result == noErr) X+ { X fd = open(OPTIONS, O_WRONLY | O_BINARY); X+ newPrefs = TRUE; X+ } X } X } X X*************** X*** 437,442 **** X--- 456,469 ---- X if (fd < 0) X pline("can't create options file!"); X else { X+ /* if we initially store TRUE for wizard then X+ * the user will have intrinsic wizardry! X+ */ X+ if (newPrefs) { X+ saveWizard = wizard; X+ wizard = FALSE; X+ } X+ X write(fd, &flags, sizeof(flags)); X X write(fd, plname, PL_NSIZ); X*************** X*** 455,460 **** X--- 482,489 ---- X #endif X write(fd, inv_order, strlen(inv_order)+1); X close(fd); X+ X+ if (newPrefs) wizard = saveWizard; X } X X SetVol(0L, t->recordVRefNum); X*** others/Makefile.ovl Tue Jun 26 21:20:10 1990 X--- others/Makefile.ovl Mon Feb 4 16:19:03 1991 X*************** X*** 1,4 **** X! # SCCS Id: @(#)Makefile.ovl 3.0 90/06/03 X # PC NetHack 3.0 Makefile for Microsoft(tm) "C" 5.1 -- Pierre Martineau X # Overlay Arrangement -- Stephen Spackman, Pierre Martineau, Norm Meluch X # Multiple Compilation Hack and so forth -- Stephen Spackman X--- 1,4 ---- X! # SCCS Id: @(#)Makefile.ovl 3.0 90/01/29 X # PC NetHack 3.0 Makefile for Microsoft(tm) "C" 5.1 -- Pierre Martineau X # Overlay Arrangement -- Stephen Spackman, Pierre Martineau, Norm Meluch X # Multiple Compilation Hack and so forth -- Stephen Spackman X*************** X*** 32,38 **** X ASM = masm X EXEPATCH = exesmurf X # $(MAKE) macro is often predefined, so we use $(MAKEBIN) instead. X! MAKEBIN = make X # For those of us who have these on PC. X # YACC = yacc X # LEX = lex X--- 32,38 ---- X ASM = masm X EXEPATCH = exesmurf X # $(MAKE) macro is often predefined, so we use $(MAKEBIN) instead. X! MAKEBIN = ndmake45l X # For those of us who have these on PC. X # YACC = yacc X # LEX = lex X*************** X*** 57,69 **** X # /Di386 = Use 386 specific enhancements X # /DNOEMS = Do not use EMS memory X # /DDEBUG = Report memory usage on startup X AFLAGS = /MX X # X- ############################################################################### X- # Use the first line if you are using EXESMURF or the second for EXEMOD. X EXEFLAGS = /max4500 /min4500 X- # EXEFLAGS = /max 1194 /min 1194 X- ############################################################################### X # X # ***************************************************************************** X # ********* Directories (makedefs hardcodes these, don't change them) ********* X--- 57,66 ---- X # /Di386 = Use 386 specific enhancements X # /DNOEMS = Do not use EMS memory X # /DDEBUG = Report memory usage on startup X+ # /DNOSPLIT = EXE file is not split out to OVL files X AFLAGS = /MX X # X EXEFLAGS = /max4500 /min4500 X # X # ***************************************************************************** X # ********* Directories (makedefs hardcodes these, don't change them) ********* X*************** X*** 82,88 **** X # The game name X GAME = NetHack X # X! # The default make target (so just typing 'make' is useful) X DEFAULT : $(GAME) X # X # The game directory X--- 79,85 ---- X # The game name X GAME = NetHack X # X! # The default make target (so just typing 'ndmake45l' is useful) X DEFAULT : $(GAME) X # X # The game directory X*************** X*** 137,229 **** X $(OBJ)\objects.o $(OBJ)\invent.0 $(OBJ)\mkobj.0 $(OBJ)\mkroom.0 \ X $(OBJ)\rnd.0 $(OBJ)\termcap.0 X # main monster code X! OVL01 = $(OBJ)\cmd.0 $(OBJ)\dbridge.0 $(OBJ)\dog.0 $(OBJ)\engrave.0-1 \ X $(OBJ)\hack.0 $(OBJ)\mon.0-1 $(OBJ)\mondata.0-1 $(OBJ)\monmove.0-1 \ X $(OBJ)\mthrowu.0 $(OBJ)\priest.0 $(OBJ)\shk.0 $(OBJ)\track.0 \ X $(OBJ)\trap.0-1 $(OBJ)\were.0 X- # pet code X- OVL02 = $(OBJ)\apply.0 $(OBJ)\dog.1 $(OBJ)\dogmove.o X # advanced monsters X! OVL03 = $(OBJ)\demon.o $(OBJ)\mcastu.o X! OVL04 = $(OBJ)\priest.1-b X! OVL05 = $(OBJ)\shk.1-b X! OVL06 = $(OBJ)\were.1-b X! OVL07 = $(OBJ)\wizard.1-b X! OVL08 = $(OBJ)\worm.o X # main people things: you take your turn X! OVL09 = $(OBJ)\allmain.0 $(OBJ)\artifact.0 $(OBJ)\attrib.1 $(OBJ)\cmd.1 \ X $(OBJ)\do.1 $(OBJ)\do.3 $(OBJ)\eat.0 $(OBJ)\engrave.2 \ X $(OBJ)\getline.0-1 $(OBJ)\hack.1 $(OBJ)\lock.0 $(OBJ)\mail.0 \ X $(OBJ)\pickup.1 $(OBJ)\pri.1 $(OBJ)\prisym.1 $(OBJ)\sounds.0 \ X $(OBJ)\timeout.0 $(OBJ)\track.1 $(OBJ)\vault.0 $(OBJ)\wizard.0 X! OVL10 = $(OBJ)\attrib.0 X! OVL11 = $(OBJ)\attrib.2-b $(OBJ)\exper.o X! OVL12 = $(OBJ)\artifact.2 $(OBJ)\eat.1 $(OBJ)\invent.1 X! OVL13 = $(OBJ)\makemon.0-2 $(OBJ)\mkobj.1 X! OVL14 = $(OBJ)\makemon.b X! OVL15 = $(OBJ)\mkobj.2-b X! OVL16 = $(OBJ)\hack.2 X! OVL17 = $(OBJ)\mhitm.1-b X! OVL18 = $(OBJ)\mthrowu.1 X! OVL19 = $(OBJ)\mthrowu.2-b X! OVL20 = $(OBJ)\allmain.1 $(OBJ)\mhitm.0 $(OBJ)\mhitu.0-1 $(OBJ)\rnd.1 \ X! $(OBJ)\weapon.0-1 X! OVL21 = $(OBJ)\mon.2-b $(OBJ)\trap.2 X! OVL22 = $(OBJ)\artifact.1 $(OBJ)\search.0 $(OBJ)\uhitm.o $(OBJ)\weapon.2-b X! OVL23 = $(OBJ)\do_wear.0-1 $(OBJ)\mhitu.2-b X! OVL24 = $(OBJ)\steal.0-1 X! OVL25 = $(OBJ)\monmove.2-b $(OBJ)\steal.2-b X! OVL26 = $(OBJ)\rnd.2-b X! OVL27 = $(OBJ)\do_wear.2 $(OBJ)\getline.b $(OBJ)\mondata.2 $(OBJ)\objnam.0-1 \ X! $(OBJ)\pager.0 $(OBJ)\polyself.0-1 X! OVL28 = $(OBJ)\do_name.0 X! OVL29 = $(OBJ)\objnam.2-b X! OVL30 = $(OBJ)\pager.1-b X! OVL31 = $(OBJ)\pri.0 $(OBJ)\prisym.0 $(OBJ)\topl.0 X! OVL32 = $(OBJ)\pri.b $(OBJ)\topl.1-2 X! OVL33 = $(OBJ)\prisym.2 X! OVL34 = $(OBJ)\prisym.b X! OVL35 = $(OBJ)\topl.b X! OVL36 = $(OBJ)\termcap.1 $(OBJ)\unix.0 X! OVL37 = $(OBJ)\termcap.2-b X! OVL38 = $(OBJ)\dog.b $(OBJ)\sounds.1-b X! OVL39 = $(OBJ)\read.0 X! OVL40 = $(OBJ)\invent.b X! OVL41 = $(OBJ)\hack.b X! OVL42 = $(OBJ)\mondata.b $(OBJ)\timeout.1-b X! OVL43 = $(OBJ)\do.0 $(OBJ)\invent.3 X! OVL44 = $(OBJ)\cmd.2-b $(OBJ)\getline.2 $(OBJ)\write.o X! OVL45 = $(OBJ)\apply.2-b X! OVL46 = $(OBJ)\do.b X! OVL47 = $(OBJ)\dokick.o X! OVL48 = $(OBJ)\dothrow.o X! OVL49 = $(OBJ)\eat.2-b X! OVL50 = $(OBJ)\invent.2 $(OBJ)\pickup.0 $(OBJ)\pickup.2-b X! OVL51 = $(OBJ)\lock.1-b X OVL52 = $(OBJ)\polyself.2-b X! OVL53 = $(OBJ)\potion.o X! OVL54 = $(OBJ)\pray.o X! OVL55 = $(OBJ)\read.1-b $(OBJ)\spell.o X! OVL56 = $(OBJ)\search.1-b X # clothing stuff X! OVL57 = $(OBJ)\do_wear.b $(OBJ)\wield.o $(OBJ)\worn.o X # Zappage X! OVL58 = $(OBJ)\pri.2 $(OBJ)\zap.o X! OVL59 = $(OBJ)\dbridge.1-b X! OVL60 = $(OBJ)\trap.b X # Unusual circumstances X OVL61 = $(OBJ)\artifact.b $(OBJ)\do_name.1-b $(OBJ)\fountain.o $(OBJ)\music.o \ X $(OBJ)\rumors.o $(OBJ)\shknam.0 $(OBJ)\sit.o $(OBJ)\vault.1-b X # Uppers and Downers X! # Note: version.o is in OVL62, but in a special way. See below. X! OVL62 = $(OBJ)\allmain.2-b $(OBJ)\end.o $(OBJ)\engrave.b $(OBJ)\mail.1-b \ X $(OBJ)\o_init.o $(OBJ)\options.o $(OBJ)\restore.o $(OBJ)\rip.o \ X $(OBJ)\save.o $(OBJ)\shknam.1-b $(OBJ)\topten.o $(OBJ)\tty.o \ X $(OBJ)\u_init.o $(OBJ)\unix.1-b X- # Levelling X- OVL63 = $(OBJ)\apply.1 $(OBJ)\bones.o $(OBJ)\do.2 $(OBJ)\dog.2 \ X- $(OBJ)\extralev.o $(OBJ)\mklev.o $(OBJ)\mkmaze.o $(OBJ)\mkroom.1-b \ X- $(OBJ)\sp_lev.o $(OBJ)\track.2-b X X X # ***************************************************************************** X--- 134,226 ---- X $(OBJ)\objects.o $(OBJ)\invent.0 $(OBJ)\mkobj.0 $(OBJ)\mkroom.0 \ X $(OBJ)\rnd.0 $(OBJ)\termcap.0 X # main monster code X! OVL01 = $(OBJ)\attrib.0 X! OVL02 = $(OBJ)\prisym.b X! OVL03 = $(OBJ)\read.0 X! OVL04 = $(OBJ)\rnd.2-b X! OVL05 = $(OBJ)\steal.0-1 X! OVL06 = $(OBJ)\prisym.2 X! OVL07 = $(OBJ)\termcap.1 $(OBJ)\unix.0 X! OVL08 = $(OBJ)\were.1-b X! OVL09 = $(OBJ)\do_name.0 X! OVL10 = $(OBJ)\mthrowu.2-b X! OVL11 = $(OBJ)\topl.b X! OVL12 = $(OBJ)\hack.b X! OVL13 = $(OBJ)\makemon.b X! OVL14 = $(OBJ)\mondata.b $(OBJ)\timeout.1-b X! OVL15 = $(OBJ)\wizard.1-b X! OVL16 = $(OBJ)\do.b X! OVL17 = $(OBJ)\do.0 $(OBJ)\invent.3 X! OVL18 = $(OBJ)\worm.o X! OVL19 = $(OBJ)\pri.b $(OBJ)\topl.1-2 X! OVL20 = $(OBJ)\mkobj.2-b X! OVL21 = $(OBJ)\termcap.2-b X! OVL22 = $(OBJ)\mthrowu.1 X! OVL23 = $(OBJ)\attrib.2-b $(OBJ)\exper.o X! OVL24 = $(OBJ)\monmove.2-b $(OBJ)\steal.2-b X! OVL25 = $(OBJ)\hack.2 X! OVL26 = $(OBJ)\demon.o $(OBJ)\mcastu.o X! OVL27 = $(OBJ)\dothrow.o X! OVL28 = $(OBJ)\cmd.2-b $(OBJ)\getline.2 $(OBJ)\write.o X! OVL29 = $(OBJ)\artifact.2 $(OBJ)\eat.1 $(OBJ)\invent.1 X! OVL30 = $(OBJ)\dog.b $(OBJ)\sounds.1-b X! OVL31 = $(OBJ)\priest.1-b X! # pet code X! OVL32 = $(OBJ)\apply.0 $(OBJ)\dog.1 $(OBJ)\dogmove.o X! OVL33 = $(OBJ)\invent.b X! OVL34 = $(OBJ)\pager.1-b X! OVL35 = $(OBJ)\mhitm.1-b X! OVL36 = $(OBJ)\objnam.2-b X! OVL37 = $(OBJ)\pri.0 $(OBJ)\prisym.0 $(OBJ)\topl.0 X! OVL38 = $(OBJ)\dokick.o X! OVL39 = $(OBJ)\do_wear.2 $(OBJ)\getline.b $(OBJ)\mondata.2 $(OBJ)\objnam.0-1 \ X! $(OBJ)\pager.0 $(OBJ)\polyself.0-1 X! OVL40 = $(OBJ)\makemon.0-2 $(OBJ)\mkobj.1 X! OVL41 = $(OBJ)\mon.2-b $(OBJ)\trap.2 X! OVL42 = $(OBJ)\do_wear.0-1 $(OBJ)\mhitu.2-b X! OVL43 = $(OBJ)\allmain.1 $(OBJ)\mhitm.0 $(OBJ)\mhitu.0-1 $(OBJ)\rnd.1 \ X! $(OBJ)\weapon.0-1 X! OVL44 = $(OBJ)\apply.2-b X! OVL45 = $(OBJ)\artifact.1 $(OBJ)\search.0 $(OBJ)\uhitm.o $(OBJ)\weapon.2-b X! OVL46 = $(OBJ)\cmd.0 $(OBJ)\dbridge.0 $(OBJ)\dog.0 $(OBJ)\engrave.0-1 \ X $(OBJ)\hack.0 $(OBJ)\mon.0-1 $(OBJ)\mondata.0-1 $(OBJ)\monmove.0-1 \ X $(OBJ)\mthrowu.0 $(OBJ)\priest.0 $(OBJ)\shk.0 $(OBJ)\track.0 \ X $(OBJ)\trap.0-1 $(OBJ)\were.0 X # advanced monsters X! OVL47 = $(OBJ)\shk.1-b X # main people things: you take your turn X! OVL48 = $(OBJ)\allmain.0 $(OBJ)\artifact.0 $(OBJ)\attrib.1 $(OBJ)\cmd.1 \ X $(OBJ)\do.1 $(OBJ)\do.3 $(OBJ)\eat.0 $(OBJ)\engrave.2 \ X $(OBJ)\getline.0-1 $(OBJ)\hack.1 $(OBJ)\lock.0 $(OBJ)\mail.0 \ X $(OBJ)\pickup.1 $(OBJ)\pri.1 $(OBJ)\prisym.1 $(OBJ)\sounds.0 \ X $(OBJ)\timeout.0 $(OBJ)\track.1 $(OBJ)\vault.0 $(OBJ)\wizard.0 X! OVL49 = $(OBJ)\search.1-b X! OVL50 = $(OBJ)\lock.1-b X! OVL51 = $(OBJ)\dbridge.1-b X OVL52 = $(OBJ)\polyself.2-b X! OVL53 = $(OBJ)\invent.2 $(OBJ)\pickup.0 $(OBJ)\pickup.2-b X! OVL54 = $(OBJ)\eat.2-b X! OVL55 = $(OBJ)\pray.o X! OVL56 = $(OBJ)\potion.o X! OVL57 = $(OBJ)\trap.b X! OVL58 = $(OBJ)\read.1-b $(OBJ)\spell.o X # clothing stuff X! OVL59 = $(OBJ)\do_wear.b $(OBJ)\wield.o $(OBJ)\worn.o X # Zappage X! OVL60 = $(OBJ)\pri.2 $(OBJ)\zap.o X # Unusual circumstances X OVL61 = $(OBJ)\artifact.b $(OBJ)\do_name.1-b $(OBJ)\fountain.o $(OBJ)\music.o \ X $(OBJ)\rumors.o $(OBJ)\shknam.0 $(OBJ)\sit.o $(OBJ)\vault.1-b X+ # Levelling X+ OVL62 = $(OBJ)\apply.1 $(OBJ)\bones.o $(OBJ)\do.2 $(OBJ)\dog.2 \ X+ $(OBJ)\extralev.o $(OBJ)\mklev.o $(OBJ)\mkmaze.o $(OBJ)\mkroom.1-b \ X+ $(OBJ)\sp_lev.o $(OBJ)\track.2-b X # Uppers and Downers X! # Note: version.o is in OVL63, but in a special way. See below. X! OVL63 = $(OBJ)\allmain.2-b $(OBJ)\end.o $(OBJ)\engrave.b $(OBJ)\mail.1-b \ X $(OBJ)\o_init.o $(OBJ)\options.o $(OBJ)\restore.o $(OBJ)\rip.o \ X $(OBJ)\save.o $(OBJ)\shknam.1-b $(OBJ)\topten.o $(OBJ)\tty.o \ X $(OBJ)\u_init.o $(OBJ)\unix.1-b X X X # ***************************************************************************** X*************** X*** 257,263 **** X ($(OVL43)) ($(OVL44)) ($(OVL45)) ($(OVL46)) ($(OVL47)) ($(OVL48)) \ X ($(OVL49)) ($(OVL50)) ($(OVL51)) ($(OVL52)) ($(OVL53)) ($(OVL54)) \ X ($(OVL55)) ($(OVL56)) ($(OVL57)) ($(OVL58)) ($(OVL59)) ($(OVL60)) \ X! ($(OVL61)) ($(OVL62) $(OBJ)\version.o) ($(OVL63)) X X # object files for special levels compiler X SPLEVOBJS = $(OBJ)\lev_comp.o $(OBJ)\lev_lex.o $(OBJ)\lev_main.o \ X--- 254,260 ---- X ($(OVL43)) ($(OVL44)) ($(OVL45)) ($(OVL46)) ($(OVL47)) ($(OVL48)) \ X ($(OVL49)) ($(OVL50)) ($(OVL51)) ($(OVL52)) ($(OVL53)) ($(OVL54)) \ X ($(OVL55)) ($(OVL56)) ($(OVL57)) ($(OVL58)) ($(OVL59)) ($(OVL60)) \ X! ($(OVL61)) ($(OVL62)) ($(OBJ)\version.o $(OVL63)) X X # object files for special levels compiler X SPLEVOBJS = $(OBJ)\lev_comp.o $(OBJ)\lev_lex.o $(OBJ)\lev_main.o \ X*************** X*** 329,338 **** X X $(GAME).exe: $(GAMEFILE) X X! $(GAMEFILE): $(OBJ) $(HOBJ) X @echo Loading.... X $(LINK) $(ROOT) $(OVERLAYS),$(GAMEFILE),$(GAME),$(CLIB) $(TERMLIB) $(LFLAGS) ; X $(EXEPATCH) $(GAMEFILE) $(EXEFLAGS) X @echo NetHack is up to date. X X $(OBJ): X--- 326,336 ---- X X $(GAME).exe: $(GAMEFILE) X X! $(GAMEFILE): $(EXEPATCH) $(OBJ) $(HOBJ) X @echo Loading.... X $(LINK) $(ROOT) $(OVERLAYS),$(GAMEFILE),$(GAME),$(CLIB) $(TERMLIB) $(LFLAGS) ; X $(EXEPATCH) $(GAMEFILE) $(EXEFLAGS) X+ $(EXEPATCH) $(GAMEFILE) 1 49 X @echo NetHack is up to date. X X $(OBJ): X*************** X*** 392,397 **** X--- 390,403 ---- X X lev_comp.exe: $(SPLEVOBJS) X $(LINK) $(LFLAGS) $(SPLEVOBJS),lev_comp.exe,, $(CLIB); X+ X+ $(EXEPATCH): $(EXEPATCH).exe X+ X+ $(EXEPATCH).exe: $(OBJ)\$(EXEPATCH).o X+ $(LINK) $(OBJ)\$*.o,$*.exe; X+ X+ $(OBJ)\$(EXEPATCH).o: $(EXEPATCH).c X+ $(CC) /W0 /Fo$(OBJ)\$*.o $*.c X X # ***************************************************************************** X # ************************* Makedefs Stuff *********************************** X*** vms/install.com Thu May 24 00:44:05 1990 X--- vms/install.com Sat Jan 5 15:06:11 1991 X*************** X*** 14,19 **** X--- 14,20 ---- X $ play_files = "PERM.,RECORD.,LOGFILE." X $ help_files = "HELP.,HH.,CMDHELP.,HISTORY.,OPTHELP.,ORACLES.,LICENSE." X $ data_files = "DATA.,RUMORS." X+ $ trmcp_file = "[.others]termcap" X $ spec_files = "ENDGAME.,CASTLE.,TOWER%." X $ spec_input = "endgame.des castle.des tower.des" X $ makedefs := $sys$disk:[-.src]makedefs X*************** X*** 25,43 **** X $ set default [-.auxil] !move to auxiliary directory X $ makedefs -d !data X $ makedefs -r !rumors X! $! lev_comp 'spec_input' !special levels X! $! (flex'd version doesn't handle multiple inputs, so do them one at a time) X! $ lev_comp endgame.des X! $ lev_comp castle.des X! $ lev_comp tower.des X $ set default [-] !move up X $ X! $! set up the directories X! $ create/directory/owner='gameuic'/prot=(s:rwe,o:rwe,g:rwe,w:rwe)/log - X! 'f$string(gamedir - "]" + ".SAVE]")' X! $! create empty writeable files X $ create/owner='gameuic'/prot=(s:rwed,o:rwed,g:rwed,w:rwed) - X 'gamedir''play_files' X $! copy over the remaining game files, then make them readonly X $ copy/prot=(s:rwed,o:rwed,g:re,w:re) - X [.auxil]'help_files','data_files','spec_files',[.src]nethack.exe - X--- 26,50 ---- X $ set default [-.auxil] !move to auxiliary directory X $ makedefs -d !data X $ makedefs -r !rumors X! $ lev_comp 'spec_input' !special levels X $ set default [-] !move up X $ X! $! X! $! set up the playground and save directories X! $ srctree = f$environment("DEFAULT") X! $ set default 'gamedir' X! $ if f$parse("[-]").eqs."" then create/dir/log [-] !default owner & protection X! $ if f$parse("[]" ).eqs."" then - !needs to be world writable X! create/directory/owner='gameuic'/prot=(s:rwe,o:rwe,g:rwe,w:rwe)/log [] X! $ if f$search("SAVE.DIR;1").eqs."" then - X! create/directory/owner='gameuic'/prot=(s:rwe,o:rwe,g:rwe,w:rwe)/log - X! [.SAVE]/version_limit=2 X! $ set default 'srctree' X! $! X! $! create empty writeable files -- logfile, scoreboard, multi-user access lock X $ create/owner='gameuic'/prot=(s:rwed,o:rwed,g:rwed,w:rwed) - X 'gamedir''play_files' X+ $! X $! copy over the remaining game files, then make them readonly X $ copy/prot=(s:rwed,o:rwed,g:re,w:re) - X [.auxil]'help_files','data_files','spec_files',[.src]nethack.exe - X*************** X*** 44,49 **** X--- 51,63 ---- X 'gamedir'*.* X $ set file/owner='gameuic'/prot=(s:re,o:re) - X 'gamedir''help_files','data_files','spec_files',nethack.exe X+ $! X+ $! provide last-resort termcap file (if available) X+ $ if f$search(trmcp_file).eqs."" then goto skip_termcap X+ $ copy/prot=(s:rwed,o:rwed,g:re,w:re) 'trmcp_file' 'gamedir'termcap X+ $ set file/owner='gameuic'/prot=(s:re,o:re) 'gamedir'termcap X+ $skip_termcap: X+ $! X $! done X $ define/nolog hackdir 'gamedir' X $ write sys$output - X*** vms/lev_lex.h Tue Jun 26 21:20:41 1990 X--- vms/lev_lex.h Thu Jan 31 13:46:10 1991 X*************** X*** 5,13 **** X * src/lev_main.c, where stdin & stdout are still correctly defined. X */ X #ifdef VAXC X! # module lev_lex "3.0.9" X #endif X X #include <stdio.h> X #define stdin 0 X #define stdout 0 X--- 5,19 ---- X * src/lev_main.c, where stdin & stdout are still correctly defined. X */ X #ifdef VAXC X! # module lev_lex "3.0.10" X #endif X X #include <stdio.h> X+ #ifdef stdin X+ # undef stdin X+ #endif X #define stdin 0 X+ #ifdef stdout X+ # undef stdout X+ #endif X #define stdout 0 X*** vms/vmsbuild.com Tue Feb 5 22:14:41 1991 X--- vms/vmsbuild.com Tue Feb 5 22:15:48 1991 X*************** X*** 1,4 **** X! $ ! vms/vmsbuild.com -- compile and link NetHack 3.0 patchlevel 9 [pr] X $ ! X $ ! usage: X $ ! $ set default [.src] !or [-.src] if starting from [.vms] X--- 1,4 ---- X! $ ! vms/vmsbuild.com -- compile and link NetHack 3.0 patchlevel 10 [pr] X $ ! X $ ! usage: X $ ! $ set default [.src] !or [-.src] if starting from [.vms] X*************** X*** 17,23 **** X $ ! Default wizard definition moved to include/vmsconf.h. X $ X $ vaxc_ = "CC/NOLIST/OPTIMIZE=NOINLINE" !vaxc v3.x (2.x fixed below) X! $ gnuc_ = "GCC/CC1=""-fwritable-strings""" X $ gnulib = "gnu_cc:[000000]gcclib/Library" !(not used w/ vaxc) X $ ! common CC options (/obj=file doesn't work for GCC 1.36, use rename instead) X $ c_c_ = "/INCLUDE=[-.INCLUDE]" !/DEFINE=(""WIZARD=""""GENTZEL"""""") X--- 17,23 ---- X $ ! Default wizard definition moved to include/vmsconf.h. X $ X $ vaxc_ = "CC/NOLIST/OPTIMIZE=NOINLINE" !vaxc v3.x (2.x fixed below) X! $ gnuc_ = "GCC" X $ gnulib = "gnu_cc:[000000]gcclib/Library" !(not used w/ vaxc) X $ ! common CC options (/obj=file doesn't work for GCC 1.36, use rename instead) X $ c_c_ = "/INCLUDE=[-.INCLUDE]" !/DEFINE=(""WIZARD=""""GENTZEL"""""") X*************** X*** 113,119 **** X $ milestone "<compiling...>" X $ cc [-.vms]vmsmisc !try simplest one first X $ cc alloc.c X! $ if f$search("monst.c").eqs."" then copy/Concat monst.c1+.c2 *.c X $ cc monst.c X $ milestone " (monst)" X $ cc objects.c X--- 113,119 ---- X $ milestone "<compiling...>" X $ cc [-.vms]vmsmisc !try simplest one first X $ cc alloc.c X! $ if f$search("monst.c").eqs."" then copy/Concat monst.c1+.c2 monst.c X $ cc monst.c X $ milestone " (monst)" X $ cc objects.c X*************** X*** 121,127 **** X $ cc makedefs.c X $ link makedefs.obj,monst.obj,objects.obj,vmsmisc.obj,- X 'vaxcrtl''gnulib',sys$input:/Opt X! identification="makedefs 3.0.9" X $ milestone "makedefs" X $! create some build-time files X $ makedefs -p !pm.h X--- 121,127 ---- X $ cc makedefs.c X $ link makedefs.obj,monst.obj,objects.obj,vmsmisc.obj,- X 'vaxcrtl''gnulib',sys$input:/Opt X! identification="makedefs 3.0.10" X $ milestone "makedefs" X $! create some build-time files X $ makedefs -p !pm.h X*************** X*** 162,171 **** X $list_done: X $ i = i + 1 X $ if i.le.5 then goto list_loop X! $! one special case left X! $ cc [-.vms]vmstermcap.c - X! /Define=("bcopy(s,d,n)=memcpy((d),(s),(n))","exit=vms_exit") X $ libr/Obj 'nethacklib' vmstermcap.obj/Insert X $! X $link: X $ milestone "<linking...>" X--- 162,173 ---- X $list_done: X $ i = i + 1 X $ if i.le.5 then goto list_loop X! $! one special case left: gcc chokes on these commas, but has real bcopy X! $ vmstermcap_options = "/Define=(""bcopy(s,d,n)=memcpy(d,s,n)"",""exit=vms_exit"")" X! $ if c_opt.eq.5 then vmstermcap_options = "/Define=(""exit=vms_exit"")" X! $ cc 'vmstermcap_options' [-.vms]vmstermcap.c X $ libr/Obj 'nethacklib' vmstermcap.obj/Insert X+ $ delete vmstermcap.obj;* X $! X $link: X $ milestone "<linking...>" X*************** X*** 172,178 **** X $ link/Exe=nethack 'nethacklib'/Lib/Incl=(vmsmain,allmain,vmsunix,vmstty,decl),- X sys$disk:[]monst.obj,objects.obj,- !(data-only modules, like decl) X sys$input:/Opt,'vaxcrtl''gnulib' X! identification="NetHack 3.0.9" X $ milestone "NetHack" X $ if c_opt.eq.10 then goto done !"LINK" only X $special: X--- 174,180 ---- X $ link/Exe=nethack 'nethacklib'/Lib/Incl=(vmsmain,allmain,vmsunix,vmstty,decl),- X sys$disk:[]monst.obj,objects.obj,- !(data-only modules, like decl) X sys$input:/Opt,'vaxcrtl''gnulib' X! identification="NetHack 3.0.10" X $ milestone "NetHack" X $ if c_opt.eq.10 then goto done !"LINK" only X $special: X*************** X*** 188,194 **** X $ link lev_comp.obj,lev_lex.obj,lev_main.obj,- X monst.obj,objects.obj,alloc.obj,panic.obj,vmsmisc.obj,- X 'vaxcrtl''gnulib',sys$input:/Opt X! identification="lev_comp 3.0.9" X $ milestone "lev_comp" X $! X $done: X--- 190,196 ---- X $ link lev_comp.obj,lev_lex.obj,lev_main.obj,- X monst.obj,objects.obj,alloc.obj,panic.obj,vmsmisc.obj,- X 'vaxcrtl''gnulib',sys$input:/Opt X! identification="lev_comp 3.0.10" X $ milestone "lev_comp" X $! X $done: X*** vms/vmsmain.c Tue Jun 26 21:20:43 1990 X--- vms/vmsmain.c Sat Jan 5 15:00:18 1991 X*************** X*** 283,289 **** X flags.moonphase = phase_of_the_moon(); X if(flags.moonphase == FULL_MOON) { X You("are lucky! Full moon tonight."); X! if(!u.uluck) change_luck(1); X } else if(flags.moonphase == NEW_MOON) { X pline("Be careful! New moon tonight."); X } X--- 283,289 ---- X flags.moonphase = phase_of_the_moon(); X if(flags.moonphase == FULL_MOON) { X You("are lucky! Full moon tonight."); X! change_luck(1); X } else if(flags.moonphase == NEW_MOON) { X pline("Be careful! New moon tonight."); X } X*************** X*** 425,433 **** X--- 425,435 ---- X if (condition == SS$_ACCVIO /* access violation */ X || condition >= SS$_ASTFLT && condition <= SS$_TBIT X || condition >= SS$_ARTRES && condition <= SS$_INHCHME) { X+ # ifdef WIZARD X if (wizard) X abort(); /* enter the debugger */ X else X+ # endif X hu = TRUE; /* pretend that hangup has already been attempted */ X } X return SS$_RESIGNAL; X*** vms/vmstty.c Tue Jun 26 22:46:12 1990 X--- vms/vmstty.c Sat Jan 5 15:00:22 1991 X*************** X*** 8,15 **** X--- 8,24 ---- X X #include <descrip.h> X #include <iodef.h> X+ #ifndef __GNUC__ X #include <smgdef.h> X #include <ttdef.h> X+ #else /* values needed from missing include files */ X+ # define SMG$K_TRM_UP 274 X+ # define SMG$K_TRM_DOWN 275 X+ # define SMG$K_TRM_LEFT 276 X+ # define SMG$K_TRM_RIGHT 277 X+ # define TT$M_MECHTAB 0x00000100 X+ # define TT$M_MECHFORM 0x00080000 X+ #endif /* __GNUC__ */ X #include <errno.h> X X #define vms_ok(sts) ((sts)&1) X*** vms/vmsunix.c Thu May 24 20:21:46 1990 X--- vms/vmsunix.c Thu Jan 31 13:46:15 1991 X*************** X*** 23,31 **** X #undef off_t X #ifndef VAXC X #include <sys/stat.h> X! #else VAXC X #include <stat.h> X! #endif VAXC X #include <ctype.h> X #ifdef no_c$$translate X #include <errno.h> X--- 23,31 ---- X #undef off_t X #ifndef VAXC X #include <sys/stat.h> X! #else X #include <stat.h> X! #endif X #include <ctype.h> X #ifdef no_c$$translate X #include <errno.h> X*************** X*** 106,112 **** X static struct stat buf, hbuf; X X void X! gethdate(name) char *name; { X register char *np; X X if(stat(name, &hbuf)) X--- 106,112 ---- X static struct stat buf, hbuf; X X void X! gethdate(name) const char *name; { X register char *np; X X if(stat(name, &hbuf)) X*************** X*** 351,358 **** X return (getgid() << 16) | getuid(); X } X X #if defined(CHDIR) || defined(SHELL) X! unsigned int oprv[2]; X X void X privoff() X--- 351,451 ---- X return (getgid() << 16) | getuid(); X } X X+ /*------*/ X+ #ifndef LNM$_STRING X+ #include <lnmdef.h> /* logical name definitions */ X+ #endif X+ #define ENVSIZ LNM$C_NAMLENGTH /*255*/ X+ X+ #define ENV_USR 0 /* user-mode */ X+ #define ENV_SUP 1 /* supervisor-mode */ X+ #define ENV_JOB 2 /* job-wide entry */ X+ X+ /* vms_define() - assign a value to a logical name */ X+ int X+ vms_define(name, value, flag) X+ const char *name; X+ const char *value; X+ int flag; X+ { X+ struct dsc { int len; const char *adr; }; /* string descriptor */ X+ struct itm3 { short buflen, itmcode; const char *bufadr; short *retlen; }; X+ static struct itm3 itm_lst[] = { {0,LNM$_STRING,0,0}, {0,0} }; X+ struct dsc nam_dsc, val_dsc, tbl_dsc; X+ unsigned long result, SYS$CRELNM(), LIB$SET_LOGICAL(); X+ X+ /* set up string descriptors */ X+ nam_dsc.len = strlen( nam_dsc.adr = name ); X+ val_dsc.len = strlen( val_dsc.adr = value ); X+ tbl_dsc.len = strlen( tbl_dsc.adr = "LNM$PROCESS" ); X+ X+ switch (flag) { X+ case ENV_JOB: /* job logical name */ X+ tbl_dsc.len = strlen( tbl_dsc.adr = "LNM$JOB" ); X+ /*FALLTHRU*/ X+ case ENV_SUP: /* supervisor-mode process logical name */ X+ result = LIB$SET_LOGICAL(&nam_dsc, &val_dsc, &tbl_dsc); X+ break; X+ case ENV_USR: /* user-mode process logical name */ X+ itm_lst[0].buflen = val_dsc.len; X+ itm_lst[0].bufadr = val_dsc.adr; X+ result = SYS$CRELNM(0, &tbl_dsc, &nam_dsc, 0, itm_lst); X+ break; X+ default: /*[ bad input ]*/ X+ result = 0; X+ break; X+ } X+ result &= 1; /* odd => success (== 1), even => failure (== 0) */ X+ return !result; /* 0 == success, 1 == failure */ X+ } X+ X+ /* vms_putenv() - create or modify an environment value */ X+ int X+ vms_putenv(string) X+ const char *string; X+ { X+ char name[ENVSIZ+1], value[ENVSIZ+1], *p; /* [255+1] */ X+ X+ p = strchr(string, '='); X+ if (p > string && p < string + sizeof name && strlen(p+1) < sizeof value) { X+ (void)strncpy(name, string, p - string), name[p - string] = '\0'; X+ (void)strcpy(value, p+1); X+ return vms_define(name, value, ENV_USR); X+ } else X+ return 1; /* failure */ X+ } X+ X+ /* X+ Figure out whether the termcap code will find a termcap file; if not, X+ try to help it out. This avoids modifying the GNU termcap sources and X+ can simplify configuration for sites which don't already use termcap. X+ */ X+ #define GNU_DEFAULT_TERMCAP "emacs_library:[etc]termcap.dat" X+ #define NETHACK_DEF_TERMCAP "hackdir:termcap" X+ X+ const char * X+ verify_termcap() /* called from startup(src/termcap.c) */ X+ { X+ struct stat dummy; X+ char *tc = getenv("TERMCAP"); X+ if (tc) return (const char *)0; /* no fixups needed */ X+ if (!tc && !stat(GNU_DEFAULT_TERMCAP, &dummy)) tc = GNU_DEFAULT_TERMCAP; X+ if (!tc && !stat(NETHACK_DEF_TERMCAP, &dummy)) tc = NETHACK_DEF_TERMCAP; X+ if (!tc && !stat("termcap", &dummy)) tc = "termcap"; /* current dir */ X+ if (!tc && !stat("$TERMCAP", &dummy)) tc = "$TERMCAP"; /* alt environ */ X+ if (tc) { X+ /* putenv(strcat(strcpy(buffer,"TERMCAP="),tc)); */ X+ vms_define("TERMCAP", tc, ENV_USR); X+ } else { X+ /* Perhaps later we'll construct a termcap entry string and return that X+ when no file is found; for now, just return NULL unconditionally. */ X+ } X+ return (const char *)0; X+ } X+ /*------*/ X+ X #if defined(CHDIR) || defined(SHELL) X! static unsigned long oprv[2]; X X void X privoff() X*************** X*** 380,387 **** X int status; X X settty((char *) NULL); /* also calls end_screen() */ X- (void) signal(SIGINT,SIG_DFL); X (void) signal(SIGQUIT,SIG_IGN); X if (!dosh_pid || !((status = LIB$ATTACH(&dosh_pid)) & 1)) X { X #ifdef CHDIR X--- 473,480 ---- X int status; X X settty((char *) NULL); /* also calls end_screen() */ X (void) signal(SIGQUIT,SIG_IGN); X+ (void) signal(SIGINT,SIG_DFL); X if (!dosh_pid || !((status = LIB$ATTACH(&dosh_pid)) & 1)) X { X #ifdef CHDIR X*************** X*** 403,409 **** X #endif X docrt(); X if (!(status & 1)) X! pline("Spawn failed. Try again."); X return 0; X } X #endif X--- 496,502 ---- X #endif X docrt(); X if (!(status & 1)) X! pline("Spawn failed. (%%x%08X) ", status); X return 0; X } X #endif X END_OF_FILE if test 50416 -ne `wc -c <'patch10.05'`; then echo shar: \"'patch10.05'\" unpacked with wrong size! fi # end of 'patch10.05' echo shar: End of archive 3 \(of 8\). cp /dev/null ark3isdone MISSING="" for I in 1 2 3 4 5 6 7 8 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 8 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0