home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume16 / nethck31 / part104 < prev    next >
Encoding:
Internet Message Format  |  1993-02-05  |  59.9 KB

  1. Path: uunet!news.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v16i112:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Part104/108
  5. Message-ID: <4477@master.CNA.TEK.COM>
  6. Date: 5 Feb 93 22:03:55 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 2041
  9. Approved: billr@saab.CNA.TEK.COM
  10. Xref: uunet comp.sources.games:1663
  11.  
  12. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  13. Posting-number: Volume 16, Issue 112
  14. Archive-name: nethack31/Part104
  15. Supersedes: nethack3p9: Volume 10, Issue 46-108
  16. Environment: Amiga, Atari, Mac, MS-DOS, OS2, Unix, VMS, X11
  17.  
  18.  
  19.  
  20. #! /bin/sh
  21. # This is a shell archive.  Remove anything before this line, then unpack
  22. # it by saving it into a file and typing "sh file".  To overwrite existing
  23. # files, type "sh file -c".  You can also feed this as standard input via
  24. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  25. # will see the following message at the end:
  26. #        "End of archive 104 (of 108)."
  27. # Contents:  include/def_os2.h include/hack.h include/mkroom.h
  28. #   include/monattk.h include/monsym.h include/sp_lev.h
  29. #   include/winprocs.h rebuild.sh sys/mac/MacHelp sys/mac/mmodal.c
  30. #   sys/vms/Makefile.top util/dgn_comp.l win/X11/nh72icon
  31. # Wrapped by billr@saab on Wed Jan 27 16:09:32 1993
  32. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  33. if test -f 'include/def_os2.h' -a "${1}" != "-c" ; then 
  34.   echo shar: Will not clobber existing file \"'include/def_os2.h'\"
  35. else
  36. echo shar: Extracting \"'include/def_os2.h'\" \(4248 characters\)
  37. sed "s/^X//" >'include/def_os2.h' <<'END_OF_FILE'
  38. X/*    SCCS Id: @(#)def_os2.h    3.1    93/01/19    */
  39. X/*    Copyright (c) Timo Hakulinen, 1990, 1991, 1992, 1993. */
  40. X/*    NetHack may be freely redistributed.  See license for details. */
  41. X
  42. X/*
  43. X *    Only a small portion of all OS/2 defines are needed, so the
  44. X *    actual include files often need not be used.  In fact,
  45. X *    including the full headers may stall the compile in DOS.
  46. X */
  47. X
  48. X#ifdef OS2_USESYSHEADERS
  49. X
  50. X# define INCL_NOPMAPI
  51. X# define INCL_DOSFILEMGR
  52. X# define INCL_DOS
  53. X# define INCL_SUB
  54. X
  55. X# include <os2.h>
  56. X
  57. X#else
  58. X
  59. Xtypedef char CHAR;
  60. Xtypedef void VOID;
  61. X
  62. Xtypedef unsigned char UCHAR;
  63. Xtypedef unsigned short USHORT;
  64. Xtypedef unsigned int UINT;
  65. Xtypedef unsigned long ULONG;
  66. Xtypedef unsigned char BYTE;
  67. X
  68. X# ifdef OS2_32BITAPI
  69. X
  70. Xtypedef unsigned long SHANDLE;
  71. Xtypedef USHORT HKBD;
  72. Xtypedef USHORT HVIO;
  73. X
  74. X#  define CCHMAXPATHCOMP 256
  75. X
  76. X#  ifdef OS2_CSET2
  77. X#   define API16 _Far16 _Pascal
  78. X#   define DAT16
  79. X#   define API32 _System
  80. X#   define KbdGetStatus KBD16GETSTATUS
  81. X#   define KbdSetStatus KBD16SETSTATUS
  82. X#   define KbdCharIn    KBD16CHARIN
  83. X#   define KbdPeek      KBD16PEEK
  84. X#   define VioGetMode   VIO16GETMODE
  85. X#   define VioSetCurPos VIO16SETCURPOS
  86. X#  else
  87. X#   define API16
  88. X#   define DAT16
  89. X#   define API32
  90. X#  endif
  91. X
  92. X#  define DAT
  93. X
  94. X# else /* OS2_32BITAPI */
  95. X
  96. Xtypedef unsigned short SHANDLE;
  97. Xtypedef SHANDLE HKBD;
  98. Xtypedef SHANDLE HVIO;
  99. X
  100. X#  define CCHMAXPATHCOMP 13
  101. X
  102. X#  ifdef OS2_MSC
  103. X#   define API16 pascal far
  104. X#   define DAT16
  105. X#  endif
  106. X
  107. X#  define DAT DAT16
  108. X
  109. X# endif /* OS2_32BITAPI */
  110. X
  111. Xtypedef USHORT * DAT16 PUSHORT;
  112. Xtypedef BYTE * DAT16 PBYTE;
  113. Xtypedef ULONG * DAT PULONG;
  114. Xtypedef VOID * DAT PVOID;
  115. X
  116. Xtypedef SHANDLE HDIR;
  117. Xtypedef HDIR * DAT PHDIR;
  118. X
  119. Xtypedef char * DAT16 PCH;
  120. Xtypedef char * DAT PSZ;
  121. X
  122. X/* all supported compilers understand this */
  123. X
  124. X# pragma pack(2)
  125. X
  126. Xtypedef struct {
  127. X    UCHAR  chChar;
  128. X    UCHAR  chScan;
  129. X    UCHAR  fbStatus;
  130. X    UCHAR  bNlsShift;
  131. X    USHORT fsState;
  132. X    ULONG  time;
  133. X} KBDKEYINFO;
  134. X
  135. Xtypedef KBDKEYINFO * DAT16 PKBDKEYINFO;
  136. X
  137. X/* File time and date types */
  138. X
  139. Xtypedef struct {
  140. X    UINT twosecs : 5;
  141. X    UINT minutes : 6;
  142. X    UINT hours   : 5;
  143. X} FTIME;
  144. X
  145. Xtypedef struct {
  146. X    UINT day     : 5;
  147. X    UINT month   : 4;
  148. X    UINT year    : 7;
  149. X} FDATE;
  150. X
  151. X# ifdef OS2_32BITAPI
  152. X
  153. Xtypedef struct {
  154. X    ULONG oNextEntryOffset;
  155. X    FDATE fdateCreation;
  156. X    FTIME ftimeCreation;
  157. X    FDATE fdateLastAccess;
  158. X    FTIME ftimeLastAccess;
  159. X    FDATE fdateLastWrite;
  160. X    FTIME ftimeLastWrite;
  161. X    ULONG cbFile;
  162. X    ULONG cbFileAlloc;
  163. X    ULONG attrFile;
  164. X    UCHAR cchName;
  165. X    CHAR  achName[CCHMAXPATHCOMP];
  166. X} FILEFINDBUF3;
  167. X
  168. X# else
  169. X
  170. Xtypedef struct {
  171. X    FDATE  fdateCreation;
  172. X    FTIME  ftimeCreation;
  173. X    FDATE  fdateLastAccess;
  174. X    FTIME  ftimeLastAccess;
  175. X    FDATE  fdateLastWrite;
  176. X    FTIME  ftimeLastWrite;
  177. X    ULONG  cbFile;
  178. X    ULONG  cbFileAlloc;
  179. X    USHORT attrFile;
  180. X    UCHAR  cchName;
  181. X    CHAR   achName[CCHMAXPATHCOMP];
  182. X} FILEFINDBUF;
  183. X
  184. Xtypedef FILEFINDBUF * DAT16 PFILEFINDBUF;
  185. X
  186. X# endif /* OS2_32BITAPI */
  187. X
  188. Xtypedef struct {
  189. X    ULONG  idFileSystem;
  190. X    ULONG  cSectorUnit;
  191. X    ULONG  cUnit;
  192. X    ULONG  cUnitAvail;
  193. X    USHORT cbSector;
  194. X} FSALLOCATE;
  195. X
  196. Xtypedef struct {
  197. X    USHORT cb;
  198. X    USHORT fsMask;
  199. X    USHORT chTurnAround;
  200. X    USHORT fsInterim;
  201. X    USHORT fsState;
  202. X} KBDINFO;
  203. X
  204. Xtypedef KBDINFO * DAT16 PKBDINFO;
  205. X
  206. Xtypedef struct {
  207. X    USHORT cb;
  208. X    UCHAR  fbType;
  209. X    UCHAR  color;
  210. X    USHORT col;
  211. X    USHORT row;
  212. X    USHORT hres;
  213. X    USHORT vres;
  214. X    UCHAR  fmt_ID;
  215. X    UCHAR  attrib;
  216. X    ULONG  buf_addr;
  217. X    ULONG  buf_length;
  218. X    ULONG  full_length;
  219. X    ULONG  partial_length;
  220. X    PCH    ext_data_addr;
  221. X} VIOMODEINFO;
  222. X
  223. Xtypedef VIOMODEINFO * DAT16 PVIOMODEINFO;
  224. X
  225. X# pragma pack()
  226. X
  227. X/* OS2 API functions */
  228. X
  229. XUSHORT API16 KbdGetStatus(PKBDINFO, HKBD);
  230. XUSHORT API16 KbdSetStatus(PKBDINFO, HKBD);
  231. XUSHORT API16 KbdCharIn(PKBDKEYINFO, USHORT, HKBD);
  232. XUSHORT API16 KbdPeek(PKBDKEYINFO, HKBD);
  233. X
  234. XUSHORT API16 VioGetMode(PVIOMODEINFO, HVIO);
  235. XUSHORT API16 VioSetCurPos(USHORT, USHORT, HVIO);
  236. X
  237. X# ifdef OS2_32BITAPI
  238. XULONG API32 DosQueryFSInfo(ULONG, ULONG, PVOID, ULONG);
  239. XULONG API32 DosFindFirst(PSZ, PHDIR, ULONG, PVOID, ULONG, PULONG, ULONG);
  240. XULONG API32 DosFindNext(HDIR, PVOID, ULONG, PULONG);
  241. XULONG API32 DosSetDefaultDisk(ULONG);
  242. X# else
  243. XUSHORT API16 DosQFSInfo(USHORT, USHORT, PBYTE, USHORT);
  244. XUSHORT API16 DosFindFirst(PSZ, PHDIR, USHORT, PFILEFINDBUF, USHORT, PUSHORT, ULONG);
  245. XUSHORT API16 DosFindNext(HDIR, PFILEFINDBUF, USHORT, PUSHORT);
  246. XUSHORT API16 DosSelectDisk(USHORT);
  247. X# endif /* OS2_32BITAPI */
  248. X
  249. X#endif /* OS2_USESYSHEADERS */
  250. END_OF_FILE
  251. if test 4248 -ne `wc -c <'include/def_os2.h'`; then
  252.     echo shar: \"'include/def_os2.h'\" unpacked with wrong size!
  253. fi
  254. # end of 'include/def_os2.h'
  255. fi
  256. if test -f 'include/hack.h' -a "${1}" != "-c" ; then 
  257.   echo shar: Will not clobber existing file \"'include/hack.h'\"
  258. else
  259. echo shar: Extracting \"'include/hack.h'\" \(4264 characters\)
  260. sed "s/^X//" >'include/hack.h' <<'END_OF_FILE'
  261. X/*    SCCS Id: @(#)hack.h    3.1    93/01/15    */
  262. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  263. X/* NetHack may be freely redistributed.  See license for details. */
  264. X
  265. X#ifndef HACK_H
  266. X#define HACK_H
  267. X
  268. X#ifndef CONFIG_H
  269. X#include "config.h"
  270. X#endif
  271. X
  272. X/*    For debugging beta code.    */
  273. X#ifdef BETA
  274. X#define Dpline    pline
  275. X#endif
  276. X
  277. X#define TELL        1
  278. X#define NOTELL        0
  279. X#define ON        1
  280. X#define OFF        0
  281. X#define BOLT_LIM    8    /* from this distance ranged attacks will be made */
  282. X#define MAX_CARR_CAP    1000    /* so that boulders can be heavier */
  283. X#ifndef __SASC_60
  284. X#ifdef NULL
  285. X#undef NULL
  286. X#endif /* NULL */
  287. X#define NULL  ((char *)0)
  288. X#endif
  289. X#define DUMMY { 0 }
  290. X
  291. X/* symbolic names for capacity levels */
  292. X#define UNENCUMBERED    0
  293. X#define SLT_ENCUMBER    1
  294. X#define MOD_ENCUMBER    2
  295. X#define HVY_ENCUMBER    3
  296. X#define EXT_ENCUMBER    4
  297. X#define OVERLOADED    5
  298. X
  299. X/* this is the way the game ends */
  300. X/* if these are rearranged, the arrays in end.c will need to be changed */
  301. X#define DIED         0
  302. X#define CHOKING         1
  303. X#define POISONING     2
  304. X#define STARVING     3
  305. X#define DROWNING     4
  306. X#define BURNING         5
  307. X#define CRUSHING     6
  308. X#define STONING         7
  309. X#define GENOCIDED     8
  310. X#define PANICKED     9
  311. X#define TRICKED        10
  312. X#define QUIT        11
  313. X#define ESCAPED        12
  314. X#define ASCENDED    13
  315. X
  316. X#ifndef DUNGEON_H    /* includes align.h */
  317. X#include "dungeon.h"
  318. X#endif
  319. X
  320. X#ifndef MONSYM_H
  321. X#include "monsym.h"
  322. X#endif
  323. X#ifndef MKROOM_H
  324. X#include "mkroom.h"
  325. X#endif
  326. X#ifndef OBJCLASS_H
  327. X#include "objclass.h"
  328. X#endif
  329. X
  330. X#ifndef DECL_H
  331. X#include "decl.h"
  332. X#endif
  333. X
  334. Xextern coord bhitpos;    /* place where thrown weapon falls to the ground */
  335. X
  336. X/* types of calls to bhit() */
  337. X#define ZAPPED_WAND    0
  338. X#define THROWN_WEAPON    1
  339. X#define KICKED_WEAPON    2
  340. X#define FLASHED_LIGHT    3
  341. X#define INVIS_BEAM    4
  342. X
  343. X#ifndef TRAP_H
  344. X#include "trap.h"
  345. X#endif
  346. X#ifndef FLAG_H
  347. X#include "flag.h"
  348. X#endif
  349. X
  350. X#ifndef RM_H
  351. X#include "rm.h"
  352. X#endif
  353. X
  354. X#ifndef VISION_H
  355. X#include "vision.h"
  356. X#endif
  357. X
  358. X#ifndef DISPLAY_H
  359. X#include  "display.h"
  360. X#endif
  361. X
  362. X#ifndef WINTYPE_H
  363. X#include  "wintype.h"
  364. X#endif
  365. X
  366. X#ifndef ENGRAVE_H
  367. X#include "engrave.h"
  368. X#endif
  369. X
  370. X#ifndef RECT_H
  371. X#include "rect.h"
  372. X#endif
  373. X
  374. X#ifdef OVERLAY    /* This doesn't belong here, but we have little choice */
  375. X#undef NDECL
  376. X#define NDECL(f) f()
  377. X#endif
  378. X
  379. X#ifndef EXTERN_H
  380. X#include "extern.h"
  381. X#endif
  382. X
  383. X#ifndef WINPROCS_H
  384. X#include "winprocs.h"
  385. X#endif
  386. X
  387. X#if defined(OVERLAY) && !defined(MOVERLAY)
  388. X#include "wintty.h"
  389. X#undef WINTTY_H
  390. X
  391. X#ifndef TRAMPOLI_H
  392. X#include "trampoli.h"
  393. X#endif
  394. X
  395. X#undef EXTERN_H
  396. X#include "extern.h"
  397. X#endif /* OVERLAY */
  398. X
  399. X#define NO_SPELL    0
  400. X
  401. X/*** some utility macros ***/
  402. X#define yn(query) yn_function(query,ynchars, 'n')
  403. X#define ynq(query) yn_function(query,ynqchars, 'q')
  404. X#define ynaq(query) yn_function(query,ynaqchars, 'y')
  405. X#define nyaq(query) yn_function(query,ynaqchars, 'n')
  406. X#define nyNaq(query) yn_function(query,ynNaqchars, 'n')
  407. X#define ynNaq(query) yn_function(query,ynNaqchars, 'y')
  408. X
  409. X#ifndef max
  410. X#define max(a,b) ((a) > (b) ? (a) : (b))
  411. X#endif
  412. X#ifndef min
  413. X#define min(x,y) ((x) < (y) ? (x) : (y))
  414. X#endif
  415. X#define plur(x)    (((x) == 1) ? "" : "s")
  416. X
  417. X#define ARM_BONUS(obj)    (objects[(obj)->otyp].a_ac + (obj)->spe \
  418. X             - min((int)(obj)->oeroded,objects[(obj)->otyp].a_ac))
  419. X
  420. X#define makeknown(x)    discover_object((x),TRUE)
  421. X#define distu(xx,yy)    dist2((int)(xx),(int)(yy),(int)u.ux,(int)u.uy)
  422. X#define onlineu(xx,yy)    online2((int)(xx),(int)(yy),(int)u.ux,(int)u.uy)
  423. X
  424. X#define rn1(x,y)    (rn2(x)+(y))
  425. X
  426. X#ifndef MUSE
  427. X#define find_mac(m)    ((m)->data->ac)
  428. X#endif
  429. X
  430. X#if defined(MICRO)
  431. X#define getuid() 1
  432. X#define getlogin() (NULL)
  433. X#endif /* MICRO */
  434. X
  435. X/* Macro for a few items that are only static if we're not overlaid.... */
  436. X#if defined(OVERLAY)
  437. X# define STATIC_PTR
  438. X#else
  439. X# define STATIC_PTR static
  440. X#endif
  441. X
  442. X#if defined(OVERLAY)&&(defined(OVL0)||defined(OVL1)||defined(OVL2)||defined(OVL3)||defined(OVLB))
  443. X# define STATIC_DCL extern
  444. X# define STATIC_OVL
  445. X# ifdef OVLB
  446. X#  define STATIC_VAR
  447. X# else
  448. X#  define STATIC_VAR extern
  449. X# endif
  450. X
  451. X#else    /* !OVERLAY || (!OVL0 && !OVL1 && !OVL2 && !OVL3 && !OVLB) */
  452. X# define STATIC_DCL static
  453. X# define STATIC_OVL static
  454. X# define STATIC_VAR static
  455. X
  456. X/* If not compiling an overlay, compile everything. */
  457. X# define OVL0    /* Highest priority */
  458. X# define OVL1
  459. X# define OVL2
  460. X# define OVL3    /* Lowest specified priority */
  461. X# define OVLB    /* The base overlay segment */
  462. X#endif    /* OVERLAY && (OVL0 || OVL1 || OVL2 || OVL3 || OVLB) */
  463. X
  464. X#endif /* HACK_H */
  465. END_OF_FILE
  466. if test 4264 -ne `wc -c <'include/hack.h'`; then
  467.     echo shar: \"'include/hack.h'\" unpacked with wrong size!
  468. fi
  469. # end of 'include/hack.h'
  470. fi
  471. if test -f 'include/mkroom.h' -a "${1}" != "-c" ; then 
  472.   echo shar: Will not clobber existing file \"'include/mkroom.h'\"
  473. else
  474. echo shar: Extracting \"'include/mkroom.h'\" \(3754 characters\)
  475. sed "s/^X//" >'include/mkroom.h' <<'END_OF_FILE'
  476. X/*    SCCS Id: @(#)mkroom.h    3.1    92/11/14    */
  477. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  478. X/* NetHack may be freely redistributed.  See license for details. */
  479. X
  480. X#ifndef MKROOM_H
  481. X#define MKROOM_H
  482. X
  483. X/* mkroom.h - types and structures for room and shop initialization */
  484. X
  485. Xstruct mkroom {
  486. X    schar lx,hx,ly,hy;    /* usually xchar, but hx may be -1 */
  487. X    schar rtype;        /* Type of room (zoo, throne, etc...) */
  488. X    schar rlit;        /* is the room lit ? */
  489. X    schar doorct;        /* Door count */
  490. X    schar fdoor;        /* Index for the first door of the room */
  491. X    schar nsubrooms;    /* Number of subrooms */
  492. X    boolean irregular;    /* true if room is non-rectangular */
  493. X    struct mkroom *sbrooms[MAX_SUBROOMS];  /* Subrooms pointers */
  494. X    struct monst *resident; /* priest/shopkeeper/guard for this room */
  495. X};
  496. X
  497. Xstruct shclass {
  498. X    const char *name;    /* name of the shop type */
  499. X    char    symb;        /* this identifies the shop type */
  500. X    int    prob;        /* the shop type probability in % */
  501. X    schar    shdist;        /* object placement type */
  502. X#define D_SCATTER    0    /* normal placement */
  503. X#define D_SHOP        1    /* shop-like placement */
  504. X#define D_TEMPLE    2    /* temple-like placement */
  505. X    struct itp {
  506. X        int iprob;        /* probability of an item type */
  507. X        int itype;    /* item type: if >=0 a class, if < 0 a specific item */
  508. X    } iprobs[5];
  509. X    const char **shknms;    /* list of shopkeeper names for this type */
  510. X};
  511. X
  512. Xextern struct mkroom rooms[(MAXNROFROOMS+1)*2];
  513. Xextern struct mkroom* subrooms;
  514. X/* the normal rooms on the current level are described in rooms[0..n] for
  515. X * some n<MAXNROFROOMS
  516. X * the vault, if any, is described by rooms[n+1]
  517. X * the next rooms entry has hx -1 as a flag
  518. X * there is at most one non-vault special room on a level
  519. X */
  520. X
  521. Xextern struct mkroom *dnstairs_room, *upstairs_room, *sstairs_room;
  522. X
  523. Xextern coord doors[DOORMAX];
  524. X
  525. X/* values for rtype in the room definition structure */
  526. X#define OROOM         0    /* ordinary room */
  527. X#define COURT         2    /* contains a throne */
  528. X#define SWAMP         3    /* contains pools */
  529. X#define VAULT         4    /* contains piles of gold */
  530. X#define BEEHIVE         5    /* contains killer bees and royal jelly */
  531. X#define MORGUE         6    /* contains corpses, undead and ghosts */
  532. X#define BARRACKS     7    /* contains soldiers and their gear */
  533. X#define ZOO         8    /* floor covered with treasure and monsters */
  534. X#define DELPHI         9    /* contains Oracle and peripherals */
  535. X#define TEMPLE        10    /* contains a shrine */
  536. X#define SHOPBASE    11    /* everything above this is a shop */
  537. X#define ARMORSHOP    12    /* specific shop defines for level compiler */
  538. X#define SCROLLSHOP    13
  539. X#define POTIONSHOP    14
  540. X#define WEAPONSHOP    15
  541. X#define FOODSHOP    16
  542. X#define RINGSHOP    17
  543. X#define WANDSHOP    18
  544. X#define TOOLSHOP    19
  545. X#define BOOKSHOP    20
  546. X#define UNIQUESHOP    21    /* shops here & above not randomly gen'd. */
  547. X#define CANDLESHOP    21
  548. X#define MAXRTYPE    21    /* maximum valid room type */
  549. X
  550. X/* Special type for search_special() */
  551. X#define ANY_TYPE    (-1)
  552. X#define ANY_SHOP    (-2)
  553. X
  554. X#define NO_ROOM        0    /* indicates lack of room-occupancy */
  555. X#define SHARED        1    /* indicates normal shared boundary */
  556. X#define SHARED_PLUS    2    /* indicates shared boundary - extra adjacent-
  557. X                 * square searching required */
  558. X
  559. X#define ROOMOFFSET    3    /*
  560. X                 * (levl[x][y].roomno - ROOMOFFSET) gives
  561. X                 * rooms[] index, for inside-squares and
  562. X                 * non-shared boundaries.
  563. X                 */
  564. X
  565. X#define IS_ROOM_PTR(x)        ((x) >= rooms && (x) < rooms + MAXNROFROOMS)
  566. X#define IS_ROOM_INDEX(x)    ((x) >= 0 && (x) < MAXNROFROOMS)
  567. X#define IS_SUBROOM_PTR(x)    ((x) >= subrooms && \
  568. X                 (x) < subrooms + MAXNROFROOMS)
  569. X#define IS_SUBROOM_INDEX(x)    ((x) > MAXNROFROOMS && (x) < (MAXNROFROOMS*2))
  570. X#define ROOM_INDEX(x)        ((x) - rooms)
  571. X#define SUBROOM_INDEX(x)    ((x) - subrooms)
  572. X#define IS_LAST_ROOM_PTR(x)    (ROOM_INDEX(x) == nroom)
  573. X#define IS_LAST_SUBROOM_PTR(x)    (!nsubroom || SUBROOM_INDEX(x) == nsubroom)
  574. X
  575. X#endif /* MKROOM_H */
  576. END_OF_FILE
  577. if test 3754 -ne `wc -c <'include/mkroom.h'`; then
  578.     echo shar: \"'include/mkroom.h'\" unpacked with wrong size!
  579. fi
  580. # end of 'include/mkroom.h'
  581. fi
  582. if test -f 'include/monattk.h' -a "${1}" != "-c" ; then 
  583.   echo shar: Will not clobber existing file \"'include/monattk.h'\"
  584. else
  585. echo shar: Extracting \"'include/monattk.h'\" \(3739 characters\)
  586. sed "s/^X//" >'include/monattk.h' <<'END_OF_FILE'
  587. X/*    SCCS Id: @(#)monattk.h    3.1    90/22/02    */
  588. X/* NetHack may be freely redistributed.  See license for details. */
  589. X/* Copyright 1988, M. Stephenson */
  590. X
  591. X#ifndef MONATTK_H
  592. X#define MONATTK_H
  593. X
  594. X/*    Add new attack types below - ordering affects experience (exper.c).
  595. X *    Attacks > AT_BUTT are worth extra experience.
  596. X */
  597. X#define AT_NONE        0        /* passive monster (ex. acid blob) */
  598. X#define AT_CLAW        1        /* claw (punch, hit, etc.) */
  599. X#define AT_BITE        2        /* bite */
  600. X#define AT_KICK        3        /* kick */
  601. X#define AT_BUTT        4        /* head butt (ex. a unicorn) */
  602. X#define AT_TUCH        5        /* touches */
  603. X#define AT_STNG        6        /* sting */
  604. X#define AT_HUGS        7        /* crushing bearhug */
  605. X#define AT_SPIT        10        /* spits substance - ranged */
  606. X#define AT_ENGL        11        /* engulf (swallow or by a cloud) */
  607. X#define AT_BREA        12        /* breath - ranged */
  608. X#define AT_EXPL        13        /* explodes - proximity */
  609. X#define AT_GAZE        14        /* gaze - ranged */
  610. X#define AT_TENT        15        /* tentacles */
  611. X
  612. X#define AT_WEAP        254        /* uses weapon */
  613. X#define AT_MAGC        255        /* uses magic spell(s) */
  614. X
  615. X/*    Add new damage types below.
  616. X *
  617. X *    Note that 1-10 correspond to the types of attack used in buzz().
  618. X *    Please don't disturb the order unless you rewrite the buzz() code.
  619. X */
  620. X#define AD_PHYS        0        /* ordinary physical */
  621. X#define AD_MAGM        1        /* magic missiles */
  622. X#define AD_FIRE        2        /* fire damage */
  623. X#define AD_COLD        3        /* frost damage */
  624. X#define AD_SLEE        4        /* sleep ray */
  625. X#define AD_DISN        5        /* disintegration (death ray) */
  626. X#define AD_ELEC        6        /* shock damage */
  627. X#define AD_DRST        7        /* drains str (poison) */
  628. X#define AD_ACID        8        /* acid damage */
  629. X#define AD_SPC1        9        /* for extension of buzz() */
  630. X#define AD_SPC2        10        /* for extension of buzz() */
  631. X#define AD_BLND        11        /* blinds (glowing eye) */
  632. X#define AD_STUN        12        /* stuns */
  633. X#define AD_SLOW        13        /* slows */
  634. X#define AD_PLYS        14        /* paralyses */
  635. X#define AD_DRLI        15        /* drains life levels (Vampire) */
  636. X#define AD_DREN        16        /* drains magic energy */
  637. X#define AD_LEGS        17        /* damages legs (xan) */
  638. X#define AD_STON        18        /* petrifies (Medusa, Cockatrice) */
  639. X#define AD_STCK        19        /* sticks to you (Mimic) */
  640. X#define AD_SGLD        20        /* steals gold (Leppie) */
  641. X#define AD_SITM        21        /* steals item (Nymphs) */
  642. X#define AD_SEDU        22        /* seduces & steals multiple items */
  643. X#define AD_TLPT        23        /* teleports you (Quantum Mech.) */
  644. X#define AD_RUST        24        /* rusts armour (Rust Monster)*/
  645. X#define AD_CONF        25        /* confuses (Umber Hulk) */
  646. X#define AD_DGST        26        /* digests opponent (trapper, etc.) */
  647. X#define AD_HEAL        27        /* heals opponent's wounds (nurse) */
  648. X#define AD_WRAP        28        /* special "stick" for eels */
  649. X#define AD_WERE        29        /* confers lycanthropy */
  650. X#define AD_DRDX        30        /* drains dexterity (Quasit) */
  651. X#define AD_DRCO        31        /* drains constitution */
  652. X#define AD_DRIN        32        /* drains intelligence (mind flayer) */
  653. X#define AD_DISE        33        /* confers diseases */
  654. X#define AD_DCAY        34        /* decays organics (Brown pudding) */
  655. X#define AD_SSEX        35        /* Succubus seduction (extended) */
  656. X                    /* If no SEDUCE then same as AD_SEDU */
  657. X#define AD_DETH        36        /* for Death only */
  658. X#define AD_PEST        37        /* for Pestilence only */
  659. X#define AD_FAMN        38        /* for Famine only */
  660. X
  661. X#define AD_CLRC        240        /* random clerical spell */
  662. X#define AD_SPEL        241        /* random magic spell */
  663. X#define AD_RBRE        242        /* random breath weapon */
  664. X
  665. X#define AD_SAMU        252        /* hits, may steal Amulet (Wizard) */
  666. X#define AD_CURS        253        /* random curse (ex. gremlin) */
  667. X
  668. X
  669. X/*
  670. X *  Monster to monster attacks.  When a monster attacks another (mattackm),
  671. X *  any or all of the following can be returned.  See mattackm() for more
  672. X *  details.
  673. X */
  674. X#define MM_MISS        0x0    /* aggressor missed */
  675. X#define MM_HIT        0x1    /* aggressor hit defender */
  676. X#define MM_DEF_DIED    0x2    /* defender died */
  677. X#define MM_AGR_DIED    0x4    /* aggressor died */
  678. X
  679. X#endif /* MONATTK_H */
  680. END_OF_FILE
  681. if test 3739 -ne `wc -c <'include/monattk.h'`; then
  682.     echo shar: \"'include/monattk.h'\" unpacked with wrong size!
  683. fi
  684. # end of 'include/monattk.h'
  685. fi
  686. if test -f 'include/monsym.h' -a "${1}" != "-c" ; then 
  687.   echo shar: Will not clobber existing file \"'include/monsym.h'\"
  688. else
  689. echo shar: Extracting \"'include/monsym.h'\" \(3968 characters\)
  690. sed "s/^X//" >'include/monsym.h' <<'END_OF_FILE'
  691. X/*    SCCS Id: @(#)monsym.h    3.1    92/10/18    */
  692. X/*    Monster symbols and creation information rev 1.0      */
  693. X/* NetHack may be freely redistributed.  See license for details. */
  694. X
  695. X#ifndef MONSYM_H
  696. X#define MONSYM_H
  697. X
  698. X/*
  699. X * Monster classes.  Below, are the corresponding default characters for
  700. X * them.  Monster class 0 is not used or defined so we can use it as a
  701. X * NULL character.
  702. X */
  703. X#define S_ANT        1
  704. X#define S_BLOB        2
  705. X#define S_COCKATRICE    3
  706. X#define S_DOG        4
  707. X#define S_EYE        5
  708. X#define S_FELINE    6
  709. X#define S_GREMLIN    7
  710. X#define S_HUMANOID    8
  711. X#define S_IMP        9
  712. X#define S_JELLY        10
  713. X#define S_KOBOLD    11
  714. X#define S_LEPRECHAUN    12
  715. X#define S_MIMIC        13
  716. X#define S_NYMPH        14
  717. X#define S_ORC        15
  718. X#define S_PIERCER    16
  719. X#define S_QUADRUPED    17
  720. X#define S_RODENT    18
  721. X#define S_SPIDER    19
  722. X#define S_TRAPPER    20
  723. X#define S_UNICORN    21
  724. X#define S_VORTEX    22
  725. X#define S_WORM        23
  726. X#define S_XAN        24
  727. X#define S_LIGHT        25
  728. X#define S_ZRUTY        26
  729. X#define S_ANGEL        27
  730. X#define S_BAT        28
  731. X#define S_CENTAUR    29
  732. X#define S_DRAGON    30
  733. X#define S_ELEMENTAL    31
  734. X#define S_FUNGUS    32
  735. X#define S_GNOME        33
  736. X#define S_GIANT        34
  737. X#define S_STALKER    35
  738. X#define S_JABBERWOCK    36
  739. X#define S_KOP        37
  740. X#define S_LICH        38
  741. X#define S_MUMMY        39
  742. X#define S_NAGA        40
  743. X#define S_OGRE        41
  744. X#define S_PUDDING    42
  745. X#define S_QUANTMECH    43
  746. X#define S_RUSTMONST    44
  747. X#define S_SNAKE        45
  748. X#define S_TROLL        46
  749. X#define S_UMBER        47
  750. X#define S_VAMPIRE    48
  751. X#define S_WRAITH    49
  752. X#define S_XORN        50
  753. X#define S_YETI        51
  754. X#define S_ZOMBIE    52
  755. X#define S_HUMAN        53
  756. X#define S_GHOST        54
  757. X#define S_GOLEM        55
  758. X#define S_DEMON        56
  759. X#define S_EEL        57
  760. X#define S_LIZARD    58
  761. X
  762. X#define S_WORM_TAIL    59
  763. X#define S_MIMIC_DEF    60
  764. X
  765. X#define MAXMCLASSES 61    /* number of monster classes */
  766. X
  767. X#if 0    /* moved to decl.h so that makedefs.c won't see them */
  768. Xextern const char def_monsyms[MAXMCLASSES];    /* default class symbols */
  769. Xextern uchar monsyms[MAXMCLASSES];        /* current class symbols */
  770. X#endif
  771. X
  772. X/*
  773. X * Default characters for monsters.  These correspond to the monster classes
  774. X * above.
  775. X */
  776. X#define DEF_ANT        'a'
  777. X#define DEF_BLOB    'b'
  778. X#define DEF_COCKATRICE    'c'
  779. X#define DEF_DOG        'd'
  780. X#define DEF_EYE        'e'
  781. X#define DEF_FELINE    'f'
  782. X#define DEF_GREMLIN    'g'
  783. X#define DEF_HUMANOID    'h'
  784. X#define DEF_IMP        'i'
  785. X#define DEF_JELLY    'j'
  786. X#define DEF_KOBOLD    'k'
  787. X#define DEF_LEPRECHAUN    'l'
  788. X#define DEF_MIMIC    'm'
  789. X#define DEF_NYMPH    'n'
  790. X#define DEF_ORC        'o'
  791. X#define DEF_PIERCER    'p'
  792. X#define DEF_QUADRUPED    'q'
  793. X#define DEF_RODENT    'r'
  794. X#define DEF_SPIDER    's'
  795. X#define DEF_TRAPPER    't'
  796. X#define DEF_UNICORN    'u'
  797. X#define DEF_VORTEX    'v'
  798. X#define DEF_WORM    'w'
  799. X#define DEF_XAN        'x'
  800. X#define DEF_LIGHT    'y'
  801. X#define DEF_ZRUTY    'z'
  802. X#define DEF_ANGEL    'A'
  803. X#define DEF_BAT        'B'
  804. X#define DEF_CENTAUR    'C'
  805. X#define DEF_DRAGON    'D'
  806. X#define DEF_ELEMENTAL    'E'
  807. X#define DEF_FUNGUS    'F'
  808. X#define DEF_GNOME    'G'
  809. X#define DEF_GIANT    'H'
  810. X#define DEF_STALKER    'I'
  811. X#define DEF_JABBERWOCK    'J'
  812. X#define DEF_KOP        'K'
  813. X#define DEF_LICH    'L'
  814. X#define DEF_MUMMY    'M'
  815. X#define DEF_NAGA    'N'
  816. X#define DEF_OGRE    'O'
  817. X#define DEF_PUDDING    'P'
  818. X#define DEF_QUANTMECH    'Q'
  819. X#define DEF_RUSTMONST    'R'
  820. X#define DEF_SNAKE    'S'
  821. X#define DEF_TROLL    'T'
  822. X#define DEF_UMBER    'U'
  823. X#define DEF_VAMPIRE    'V'
  824. X#define DEF_WRAITH    'W'
  825. X#define DEF_XORN    'X'
  826. X#define DEF_YETI    'Y'
  827. X#define DEF_ZOMBIE    'Z'
  828. X#define DEF_HUMAN    '@'
  829. X#define DEF_GHOST    ' '
  830. X#define DEF_GOLEM    '\''
  831. X#define DEF_DEMON    '&'
  832. X#define DEF_EEL        ';'
  833. X#define DEF_LIZARD    ':'
  834. X
  835. X#define DEF_WORM_TAIL    '~'
  836. X#define DEF_MIMIC_DEF    ']'
  837. X
  838. X
  839. X#define G_UNIQ        0x1000        /* generated only once */
  840. X#define G_NOHELL    0x0800        /* not generated in "hell" */
  841. X#define G_HELL        0x0400        /* generated only in "hell" */
  842. X#define G_NOGEN        0x0200        /* generated only specially */
  843. X#define G_NOCORPSE    0x0100        /* no corpse left ever */
  844. X#define G_SGROUP    0x0080        /* appear in small groups normally */
  845. X#define G_LGROUP    0x0040        /* appear in large groups normally */
  846. X#define G_GENO        0x0020        /* can be genocided */
  847. X#define G_GENOD        0x0010        /* have been genocided */
  848. X#define G_EXTINCT    0x0008        /* have been extinguished as
  849. X                       population control */
  850. X#define G_FREQ        0x0007        /* creation frequency mask */
  851. X
  852. X#endif /* MONSYM_H */
  853. END_OF_FILE
  854. if test 3968 -ne `wc -c <'include/monsym.h'`; then
  855.     echo shar: \"'include/monsym.h'\" unpacked with wrong size!
  856. fi
  857. # end of 'include/monsym.h'
  858. fi
  859. if test -f 'include/sp_lev.h' -a "${1}" != "-c" ; then 
  860.   echo shar: Will not clobber existing file \"'include/sp_lev.h'\"
  861. else
  862. echo shar: Extracting \"'include/sp_lev.h'\" \(3894 characters\)
  863. sed "s/^X//" >'include/sp_lev.h' <<'END_OF_FILE'
  864. X/*    SCCS Id: @(#)sp_lev.h    3.1    92/04/19    */
  865. X/* Copyright (c) 1989 by Jean-Christophe Collet              */
  866. X/* NetHack may be freely redistributed.  See license for details. */
  867. X
  868. X#ifndef SP_LEV_H
  869. X#define SP_LEV_H
  870. X
  871. X    /* wall directions */
  872. X#define W_NORTH     1
  873. X#define W_SOUTH     2
  874. X#define W_EAST        4
  875. X#define W_WEST        8
  876. X#define W_ANY        (W_NORTH|W_SOUTH|W_EAST|W_WEST)
  877. X
  878. X    /* MAP limits */
  879. X#define MAP_X_LIM  76
  880. X#define MAP_Y_LIM  21
  881. X
  882. X    /* Per level flags */
  883. X#define NOTELEPORT   1
  884. X#define HARDFLOOR    2
  885. X#define NOMMAP         4
  886. X#define SHORTSIGHTED 8
  887. X
  888. X    /* special level types */
  889. X#define SP_LEV_ROOMS    1
  890. X#define SP_LEV_MAZE    2
  891. X
  892. X/*
  893. X * Structures manipulated by the special levels loader & compiler
  894. X */
  895. X
  896. Xtypedef struct {
  897. X    boolean    init_present;
  898. X    char    fg, bg;
  899. X    boolean    smoothed, joined;
  900. X    xchar   lit, walled;
  901. X} lev_init;
  902. X
  903. Xtypedef struct {
  904. X    xchar x, y, mask;
  905. X} door;
  906. X
  907. Xtypedef struct {
  908. X    xchar wall, pos, secret, mask;
  909. X} room_door;
  910. X
  911. Xtypedef struct {
  912. X    xchar x, y, type;
  913. X} trap;
  914. X
  915. Xtypedef struct {
  916. X    xchar x, y, class, appear;
  917. X    schar peaceful, asleep;
  918. X    aligntyp    align;
  919. X    short id;
  920. X    char  *name;
  921. X    char  *appear_as;
  922. X} monster;
  923. X
  924. Xtypedef struct {
  925. X    xchar x, y, class;
  926. X    xchar curse_state;
  927. X    short id;
  928. X    short spe;
  929. X    int   corpsenm;
  930. X    char  *name;
  931. X} object;
  932. X
  933. X#include "align.h"
  934. X
  935. Xtypedef struct {
  936. X    xchar        x, y;
  937. X    aligntyp    align;
  938. X    xchar        shrine;
  939. X} altar;
  940. X
  941. Xtypedef struct {
  942. X    xchar x, y, dir, db_open;
  943. X} drawbridge;
  944. X
  945. Xtypedef struct {
  946. X    xchar x, y, dir;
  947. X} walk;
  948. X
  949. Xtypedef struct {
  950. X    xchar x1, y1, x2, y2;
  951. X} digpos;
  952. X
  953. Xtypedef struct {
  954. X    xchar x, y, up;
  955. X} lad;
  956. X
  957. Xtypedef struct {
  958. X    xchar x, y, up;
  959. X} stair;
  960. X
  961. Xtypedef struct {
  962. X    xchar x1, y1, x2, y2;
  963. X    xchar rtype, rlit, rirreg;
  964. X} region;
  965. X
  966. X/* values for rtype are defined in dungeon.h */
  967. Xtypedef struct {
  968. X    struct { xchar x1, y1, x2, y2; } inarea;
  969. X    struct { xchar x1, y1, x2, y2; } delarea;
  970. X    boolean in_islev, del_islev;
  971. X    xchar rtype;
  972. X    char *rname;
  973. X} lev_region;
  974. X
  975. Xtypedef struct {
  976. X    xchar x, y;
  977. X    int   amount;
  978. X} gold;
  979. X
  980. Xtypedef struct {
  981. X    xchar x, y;
  982. X    union {
  983. X    int length;
  984. X    char  *text;
  985. X    } e;
  986. X    xchar etype;
  987. X} engraving;
  988. X
  989. Xtypedef struct {
  990. X    xchar x,y;
  991. X} fountain;
  992. X
  993. Xtypedef struct {
  994. X    xchar x,y;
  995. X} sink;
  996. X
  997. Xtypedef struct {
  998. X    xchar x,y;
  999. X} pool;
  1000. X
  1001. Xtypedef struct {
  1002. X    char halign, valign;
  1003. X    char xsize, ysize;
  1004. X    char **map;
  1005. X    char nrobjects;
  1006. X    char *robjects;
  1007. X    char nloc;
  1008. X    char *rloc_x;
  1009. X    char *rloc_y;
  1010. X    char nrmonst;
  1011. X    char *rmonst;
  1012. X    char nreg;
  1013. X    region **regions;
  1014. X    char nlreg;
  1015. X    lev_region **lregions;
  1016. X    char ndoor;
  1017. X    door **doors;
  1018. X    char ntrap;
  1019. X    trap **traps;
  1020. X    char nmonster;
  1021. X    monster **monsters;
  1022. X    char nobject;
  1023. X    object **objects;
  1024. X    char ndrawbridge;
  1025. X    drawbridge **drawbridges;
  1026. X    char nwalk;
  1027. X    walk **walks;
  1028. X    char ndig;
  1029. X    digpos **digs;
  1030. X    char nlad;
  1031. X    lad **lads;
  1032. X    char nstair;
  1033. X    stair **stairs;
  1034. X    char naltar;
  1035. X    altar **altars;
  1036. X    char ngold;
  1037. X    gold **golds;
  1038. X    char nengraving;
  1039. X    engraving **engravings;
  1040. X    char nfountain;
  1041. X    fountain **fountains;
  1042. X} mazepart;
  1043. X
  1044. Xtypedef struct {
  1045. X    long flags;
  1046. X    lev_init init_lev;
  1047. X    short filling;
  1048. X    char numpart;
  1049. X    mazepart **parts;
  1050. X} specialmaze;
  1051. X
  1052. Xtypedef struct _room {
  1053. X    char  *name;
  1054. X    char  *parent;
  1055. X    xchar x, y, w, h;
  1056. X    xchar xalign, yalign;
  1057. X    xchar rtype, chance, rlit, filled;
  1058. X    char ndoor;
  1059. X    room_door **doors;
  1060. X    char ntrap;
  1061. X    trap **traps;
  1062. X    char nmonster;
  1063. X    monster **monsters;
  1064. X    char nobject;
  1065. X    object **objects;
  1066. X    char naltar;
  1067. X    altar **altars;
  1068. X    char nstair;
  1069. X    stair **stairs;
  1070. X    char ngold;
  1071. X    gold **golds;
  1072. X    char nengraving;
  1073. X    engraving **engravings;
  1074. X    char nfountain;
  1075. X    fountain **fountains;
  1076. X    char nsink;
  1077. X    sink **sinks;
  1078. X    char npool;
  1079. X    pool **pools;
  1080. X    /* These three fields are only used when loading the level... */
  1081. X    int nsubroom;
  1082. X    struct _room *subrooms[MAX_SUBROOMS];
  1083. X    struct mkroom *mkr;
  1084. X} room;
  1085. X
  1086. Xtypedef struct {
  1087. X    struct {
  1088. X        xchar room;
  1089. X        xchar wall;
  1090. X        xchar door;
  1091. X    } src, dest;
  1092. X} corridor;
  1093. X
  1094. Xtypedef struct {
  1095. X    long flags;
  1096. X    lev_init init_lev;
  1097. X    char nrobjects;
  1098. X    char *robjects;
  1099. X    char nrmonst;
  1100. X    char *rmonst;
  1101. X    xchar nroom;
  1102. X    room **rooms;
  1103. X    xchar ncorr;
  1104. X    corridor **corrs;
  1105. X} splev;
  1106. X
  1107. X#endif /* SP_LEV_H */
  1108. END_OF_FILE
  1109. if test 3894 -ne `wc -c <'include/sp_lev.h'`; then
  1110.     echo shar: \"'include/sp_lev.h'\" unpacked with wrong size!
  1111. fi
  1112. # end of 'include/sp_lev.h'
  1113. fi
  1114. if test -f 'include/winprocs.h' -a "${1}" != "-c" ; then 
  1115.   echo shar: Will not clobber existing file \"'include/winprocs.h'\"
  1116. else
  1117. echo shar: Extracting \"'include/winprocs.h'\" \(4257 characters\)
  1118. sed "s/^X//" >'include/winprocs.h' <<'END_OF_FILE'
  1119. X/*    SCCS Id: @(#)winprocs.h    3.1    92/09/19    */
  1120. X/* Copyright (c) David Cohrs, 1992                  */
  1121. X/* NetHack may be freely redistributed.  See license for details. */
  1122. X
  1123. X#ifndef WINPROCS_H
  1124. X#define WINPROCS_H
  1125. X
  1126. Xstruct window_procs {
  1127. X    const char *name;
  1128. X    void NDECL((*win_init_nhwindows));
  1129. X    void NDECL((*win_player_selection));
  1130. X    void NDECL((*win_askname));
  1131. X    void NDECL((*win_get_nh_event)) ;
  1132. X    void FDECL((*win_exit_nhwindows), (const char *));
  1133. X    void FDECL((*win_suspend_nhwindows), (const char *));
  1134. X    void NDECL((*win_resume_nhwindows));
  1135. X    winid FDECL((*win_create_nhwindow), (int));
  1136. X    void FDECL((*win_clear_nhwindow), (winid));
  1137. X    void FDECL((*win_display_nhwindow), (winid, BOOLEAN_P));
  1138. X    void FDECL((*win_destroy_nhwindow), (winid));
  1139. X    void FDECL((*win_curs), (winid,int,int));
  1140. X    void FDECL((*win_putstr), (winid, int, const char *));
  1141. X    void FDECL((*win_display_file), (const char *, BOOLEAN_P));
  1142. X    void FDECL((*win_start_menu), (winid));
  1143. X    void FDECL((*win_add_menu), (winid, CHAR_P, int, const char *));
  1144. X    void FDECL((*win_end_menu), (winid, CHAR_P, const char *, const char *));
  1145. X    char FDECL((*win_select_menu), (winid));
  1146. X    void NDECL((*win_update_inventory));
  1147. X    void NDECL((*win_mark_synch));
  1148. X    void NDECL((*win_wait_synch));
  1149. X#ifdef CLIPPING
  1150. X    void FDECL((*win_cliparound), (int, int));
  1151. X#endif
  1152. X    void FDECL((*win_print_glyph), (winid,XCHAR_P,XCHAR_P,int));
  1153. X    void FDECL((*win_raw_print), (const char *));
  1154. X    void FDECL((*win_raw_print_bold), (const char *));
  1155. X    int NDECL((*win_nhgetch));
  1156. X    int FDECL((*win_nh_poskey), (int *, int *, int *));
  1157. X    void NDECL((*win_nhbell));
  1158. X    int NDECL((*win_doprev_message));
  1159. X    char FDECL((*win_yn_function), (const char *, const char *, CHAR_P));
  1160. X    void FDECL((*win_getlin), (const char *,char *));
  1161. X#ifdef COM_COMPL
  1162. X    void FDECL((*win_get_ext_cmd), (char *));
  1163. X#endif /* COM_COMPL */
  1164. X    void FDECL((*win_number_pad), (int));
  1165. X    void NDECL((*win_delay_output));
  1166. X
  1167. X    /* other defs that really should go away (they're tty specific) */
  1168. X    void NDECL((*win_start_screen));
  1169. X    void NDECL((*win_end_screen));
  1170. X};
  1171. X
  1172. Xextern struct window_procs NEARDATA windowprocs;
  1173. X
  1174. X/*
  1175. X * If you wish to only support one window system and not use procedure
  1176. X * pointers, add the appropriate #ifdef below.
  1177. X */
  1178. X
  1179. X#define init_nhwindows (*windowprocs.win_init_nhwindows)
  1180. X#define player_selection (*windowprocs.win_player_selection)
  1181. X#define askname (*windowprocs.win_askname)
  1182. X#define get_nh_event (*windowprocs.win_get_nh_event)
  1183. X#define exit_nhwindows (*windowprocs.win_exit_nhwindows)
  1184. X#define suspend_nhwindows (*windowprocs.win_suspend_nhwindows)
  1185. X#define resume_nhwindows (*windowprocs.win_resume_nhwindows)
  1186. X#define create_nhwindow (*windowprocs.win_create_nhwindow)
  1187. X#define clear_nhwindow (*windowprocs.win_clear_nhwindow)
  1188. X#define display_nhwindow (*windowprocs.win_display_nhwindow)
  1189. X#define destroy_nhwindow (*windowprocs.win_destroy_nhwindow)
  1190. X#define curs (*windowprocs.win_curs)
  1191. X#define putstr (*windowprocs.win_putstr)
  1192. X#define display_file (*windowprocs.win_display_file)
  1193. X#define start_menu (*windowprocs.win_start_menu)
  1194. X#define add_menu (*windowprocs.win_add_menu)
  1195. X#define end_menu (*windowprocs.win_end_menu)
  1196. X#define select_menu (*windowprocs.win_select_menu)
  1197. X#define update_inventory (*windowprocs.win_update_inventory)
  1198. X#define mark_synch (*windowprocs.win_mark_synch)
  1199. X#define wait_synch (*windowprocs.win_wait_synch)
  1200. X#ifdef CLIPPING
  1201. X#define cliparound (*windowprocs.win_cliparound)
  1202. X#endif
  1203. X#define print_glyph (*windowprocs.win_print_glyph)
  1204. X#define raw_print (*windowprocs.win_raw_print)
  1205. X#define raw_print_bold (*windowprocs.win_raw_print_bold)
  1206. X#define nhgetch (*windowprocs.win_nhgetch)
  1207. X#define nh_poskey (*windowprocs.win_nh_poskey)
  1208. X#define nhbell (*windowprocs.win_nhbell)
  1209. X#define nh_doprev_message (*windowprocs.win_doprev_message)
  1210. X#define yn_function (*windowprocs.win_yn_function)
  1211. X#define getlin (*windowprocs.win_getlin)
  1212. X#ifdef COM_COMPL
  1213. X#define get_ext_cmd (*windowprocs.win_get_ext_cmd)
  1214. X#endif
  1215. X#define number_pad (*windowprocs.win_number_pad)
  1216. X#define delay_output (*windowprocs.win_delay_output)
  1217. X
  1218. X/* other defs that really should go away (they're tty specific) */
  1219. X#define start_screen (*windowprocs.win_start_screen)
  1220. X#define end_screen (*windowprocs.win_end_screen)
  1221. X
  1222. X#endif
  1223. END_OF_FILE
  1224. if test 4257 -ne `wc -c <'include/winprocs.h'`; then
  1225.     echo shar: \"'include/winprocs.h'\" unpacked with wrong size!
  1226. fi
  1227. # end of 'include/winprocs.h'
  1228. fi
  1229. if test -f 'rebuild.sh' -a "${1}" != "-c" ; then 
  1230.   echo shar: Will not clobber existing file \"'rebuild.sh'\"
  1231. else
  1232. echo shar: Extracting \"'rebuild.sh'\" \(2806 characters\)
  1233. sed "s/^X//" >'rebuild.sh' <<'END_OF_FILE'
  1234. X#!/bin/sh
  1235. X#
  1236. X# small sh script to concatenate the files that were split for posting
  1237. X#
  1238. XTOP=`pwd`
  1239. XDAT=$TOP/dat
  1240. XDOC=$TOP/doc
  1241. XSRC=$TOP/src
  1242. XAMIGA=$TOP/sys/amiga
  1243. XMAC=$TOP/sys/mac
  1244. XSHARE=$TOP/sys/share
  1245. X
  1246. X# dat
  1247. Xcd $DAT
  1248. Xcat quest.tx1 quest.tx2 > quest.txt
  1249. Xif test -f quest.txt
  1250. Xthen echo "'quest.txt' made"; rm quest.tx1 quest.tx2
  1251. Xelse echo "'quest.txt' not made - do cat by hand"
  1252. Xfi
  1253. Xcd $TOP
  1254. X
  1255. X# doc
  1256. Xcd $DOC
  1257. Xcat Guidebook.te1 Guidebook.te2 > Guidebook.tex
  1258. Xcat Guidebook.uu1 Guidebook.uu2 | uudecode
  1259. Xif test -f Guidebook.tex
  1260. Xthen echo "'Guidebook.tex' made"; rm Guidebook.te1 Guidebook.te2
  1261. Xelse echo "'Guidebook.tex' not made - do cat by hand"
  1262. Xfi
  1263. Xif test -f Guidebook.txt
  1264. Xthen echo "'Guidebook.txt' made"; rm Guidebook.uu1 Guidebook.uu2
  1265. Xelse echo "'Guidebook.txt' not made - do cat and uudecode by hand"
  1266. Xfi
  1267. Xcd $TOP
  1268. X
  1269. X# src
  1270. Xcd $SRC
  1271. Xcat mhitu.c1 mhitu.c2 > mhitu.c
  1272. Xcat monst.c1 monst.c2 monst.c3 > monst.c
  1273. Xcat shk.c1 shk.c2 > shk.c
  1274. Xcat sp_lev.c1 sp_lev.c2 > sp_lev.c
  1275. Xcat trap.c1 trap.c2 > trap.c
  1276. Xcat vision.c1 vision.c2 > vision.c
  1277. Xcat zap.c1 zap.c2 > zap.c
  1278. Xif test -f mhitu.c
  1279. Xthen echo "'mhitu.c' made"; rm mhitu.c1 mhitu.c2
  1280. Xelse echo "'mhitu.c' not made - do cat by hand"
  1281. Xfi
  1282. Xif test -f monst.c
  1283. Xthen echo "'monst.c' made"; rm monst.c1 monst.c2 monst.c3
  1284. Xelse echo "'monst.c' not made - do cat by hand"
  1285. Xfi
  1286. Xif test -f shk.c
  1287. Xthen echo "'shk.c' made"; rm shk.c1 shk.c2
  1288. Xelse echo "'shk.c' not made - do cat by hand"
  1289. Xfi
  1290. Xif test -f sp_lev.c
  1291. Xthen echo "'sp_lev.c' made"; rm sp_lev.c1 sp_lev.c2
  1292. Xelse echo "'sp_lev.c' not made - do cat by hand"
  1293. Xfi
  1294. Xif test -f trap.c
  1295. Xthen echo "'trap.c' made"; rm trap.c1 trap.c2
  1296. Xelse echo "'trap.c' not made - do cat by hand"
  1297. Xfi
  1298. Xif test -f vision.c
  1299. Xthen echo "'vision.c' made"; rm vision.c1 vision.c2
  1300. Xelse echo "'vision.c' not made - do cat by hand"
  1301. Xfi
  1302. Xif test -f zap.c
  1303. Xthen echo "'zap.c' made"; rm zap.c1 zap.c2
  1304. Xelse echo "'zap.c' not made - do cat by hand"
  1305. Xfi
  1306. Xcd $TOP
  1307. X
  1308. X# amiga
  1309. Xcd $AMIGA
  1310. Xcat wb.c1 wb.c2 > wb.c
  1311. Xcat winami.c1 winami.c2 > winami.c
  1312. Xif test -f wb.c
  1313. Xthen echo "'wb.c' made"; rm wb.c1 wb.c2
  1314. Xelse echo "'wb.c' not made - do cat by hand"
  1315. Xfi
  1316. Xif test -f winami.c
  1317. Xthen echo "'winami.c' made"; rm winami.c1 winami.c2
  1318. Xelse echo "'winami.c' not made - do cat by hand"
  1319. Xfi
  1320. Xcd $TOP
  1321. X
  1322. X# mac
  1323. Xcd $MAC
  1324. Xcat NHsound.hq1 NHsound.hq2 NHsound.hq3 NHsound.hq4 > NHsound.hqx
  1325. Xcat macwin.c1 macwin.c2 > macwin.c
  1326. Xif test -f NHsound.hqx
  1327. Xthen echo "'NHsound.hqx' made"; rm NHsound.hq1 NHsound.hq2 NHsound.hq3 NHsound.hq4
  1328. Xelse echo "'NHsound.hqx' not made - do cat by hand"
  1329. Xfi
  1330. Xif test -f macwin.c
  1331. Xthen echo "'macwin.c' made"; rm macwin.c1 macwin.c2
  1332. Xelse echo "'macwin.c' not made - do cat by hand"
  1333. Xfi
  1334. Xcd $TOP
  1335. X
  1336. X# share
  1337. Xcd $SHARE
  1338. Xcat lev_yacc.c1 lev_yacc.c2 > lev_yacc.c
  1339. Xif test -f lev_yacc.c
  1340. Xthen echo "'lev_yacc.c' made"; rm lev_yacc.c1 lev_yacc.c2
  1341. Xelse echo "'lev_yacc.c' not made - do cat by hand"
  1342. Xfi
  1343. Xcd $TOP
  1344. X
  1345. Xexit 0
  1346. END_OF_FILE
  1347. if test 2806 -ne `wc -c <'rebuild.sh'`; then
  1348.     echo shar: \"'rebuild.sh'\" unpacked with wrong size!
  1349. fi
  1350. chmod +x 'rebuild.sh'
  1351. # end of 'rebuild.sh'
  1352. fi
  1353. if test -f 'sys/mac/MacHelp' -a "${1}" != "-c" ; then 
  1354.   echo shar: Will not clobber existing file \"'sys/mac/MacHelp'\"
  1355. else
  1356. echo shar: Extracting \"'sys/mac/MacHelp'\" \(4355 characters\)
  1357. sed "s/^X//" >'sys/mac/MacHelp' <<'END_OF_FILE'
  1358. X            Macintosh-specific help file for NetHack 3.1
  1359. X
  1360. XThe following are options, features, or concerns specific to the
  1361. XMacintosh port of NetHack 3.1.  Bug reports, suggestions, comments,
  1362. Xand so on, should be addressed to:
  1363. X
  1364. XTo: nethack-bugs@linc.cis.upenn.edu
  1365. XSubject: Mac NetHack 3.1
  1366. X
  1367. XPlease include your machine-type, system software version and other
  1368. Xrelevant information (i.e. system extensions, monitor, accelerators
  1369. Xand so on).
  1370. X
  1371. X
  1372. X=== Configuration of a playground
  1373. X    NetHack 3.1 is packaged in a Dungeon Folder which includes:
  1374. X    NetHack - the application file itself.
  1375. X    NetHack Defaults - text file for default option settings.
  1376. X    miscellaneous text files - Record and logfile.  logfile
  1377. X        will be created if it doesn't exist.
  1378. X    various special level files (with a ".lev" suffix).
  1379. X    various help and other utility NetHack documents.
  1380. X
  1381. X    During play another file type appears:
  1382. X    player level files (labelled "iName.n", i is a constant number,
  1383. X        Name is the player name and n is the dungeon level).
  1384. X
  1385. X    Two other types of files will appear in the Dungeon Folder
  1386. X        as a result of playing NetHack:
  1387. X    bones files (of previously deceased players).
  1388. X    saved games (labelled "save/iName", i is a number, same as above,
  1389. X        and Name is the player name).
  1390. X
  1391. X    The following files or file types may be thrown away:
  1392. X    logfile - if it becomes too large.  A new one will be generated.
  1393. X    player level files _not_ belonging to a game in progress.
  1394. X        Alternatively, these files may be processed by a utility
  1395. X        application, Recover (not included in this distribution).
  1396. X    Old bones files and saved games.
  1397. X
  1398. X=== Resuming a saved game
  1399. X    Double-click (or open) the desired saved game file or open NetHack
  1400. X        and answer the "Who are you?" dialog with the player name of
  1401. X        the saved game in the Dungeon Folder.
  1402. X
  1403. X=== Windows
  1404. X    Dungeon Map, Message and Status are the essential windows used
  1405. X        for play.  As needed, Info windows are generated and may be
  1406. X        dismissed (clicking the close box or hitting the space bar
  1407. X        when that window is frontmost) at any time.  Special inventory
  1408. X        and list windows also appear in the front from time to time
  1409. X        and are dismissed by hitting the space bar (or Return or
  1410. X        Enter keys).  Hitting the ESCape key will dismiss a window
  1411. X        without scrolling to the end.
  1412. X
  1413. X    The Extended command "Window Cleanup" may be used to restore the
  1414. X        the startup sizes and locations of the essential windows.  The
  1415. X        window positions are saved in a file labelled "NetHack Windows"
  1416. X        in the appropriate preferences folder.
  1417. X
  1418. X=== Default options
  1419. X    The following options are specific to the Macintosh port:
  1420. X    MACgraphics  - use enhanced dungeon map symbols [TRUE]
  1421. X    large_font   - use 12 point font instead of 9 point font [FALSE]
  1422. X    popup_dialog - use real dialogs for question prompts [FALSE]
  1423. X
  1424. X    large_font is currently a pre-game option and has no effect
  1425. X        after the Dungeon Map, Message and Status windows are created.
  1426. X
  1427. X    Default options may be set by editing the NetHack Defaults text
  1428. X        file (possibly using TeachText or your favorite editor).
  1429. X        Unix(tm)-style notation is used, as in:
  1430. X    OPTIONS=name:Arnold,time,!tombstone
  1431. X
  1432. X    See option help (?f or ?g) for more details.
  1433. X
  1434. X=== Movement by mouse
  1435. X    The shape (direction) of the cursor over the Dungeon Map window,
  1436. X    typically, indicates the direction that you desire to move in when
  1437. X    the mouse is clicked.  Modifier keys affect mouse-movement in the
  1438. X    same way that they affect keyboard movement.  Clicking on yourself
  1439. X    means rest one turn and Shift-clicking on yourself means "open door"
  1440. X    in the subsequently indicated direction.
  1441. X
  1442. X=== Sounds
  1443. X    Real sounds (resources) have been added for various instruments.
  1444. X    The option "silent" [FALSE] controls whether or not a sound will
  1445. X    be heard when an instrument is applied.
  1446. X
  1447. X=== Debugging-Mode
  1448. X    Open NetHack and answer "wizard" to the "Who are you?" dialog.
  1449. X    The debug-mode (wizard-mode) commands are then listed in the
  1450. X    help menu, ?k.
  1451. X
  1452. X    WARNING: This mode is only intended for developers and others
  1453. X    interested in characterizing bugs.  Using this mode for other
  1454. X    purposes will have confusing results and may significantly
  1455. X    decrease your enjoyment of the game!
  1456. END_OF_FILE
  1457. if test 4355 -ne `wc -c <'sys/mac/MacHelp'`; then
  1458.     echo shar: \"'sys/mac/MacHelp'\" unpacked with wrong size!
  1459. fi
  1460. # end of 'sys/mac/MacHelp'
  1461. fi
  1462. if test -f 'sys/mac/mmodal.c' -a "${1}" != "-c" ; then 
  1463.   echo shar: Will not clobber existing file \"'sys/mac/mmodal.c'\"
  1464. else
  1465. echo shar: Extracting \"'sys/mac/mmodal.c'\" \(3856 characters\)
  1466. sed "s/^X//" >'sys/mac/mmodal.c' <<'END_OF_FILE'
  1467. X/*    SCCS Id: @(#)mmodal.c    3.1    93/01/24          */
  1468. X/* Copyright (c) Jon W{tte, Hao-Yang Wang, Jonathan Handler 1992. */
  1469. X/* NetHack may be freely redistributed.  See license for details. */
  1470. X
  1471. X#include "hack.h"
  1472. X#include <OSUtils.h>
  1473. X
  1474. Xvoid FlashButton ( DialogPtr , short ) ;
  1475. Xvoid trans_num_keys ( EventRecord * ) ;
  1476. X
  1477. X#define MAX_MV_DIALOGS 20
  1478. Xstatic int old_dialog_count = 0;
  1479. Xstatic struct {
  1480. X    short      id;
  1481. X    Boolean   init_visible;
  1482. X    DialogPtr dialog;
  1483. X} old_dialog[MAX_MV_DIALOGS];
  1484. X
  1485. X/* Instead of calling GetNewDialog everytime, just call
  1486. X   SelectWindow/ShowWindow for the old dialog to remember its location.
  1487. X*/
  1488. X/*
  1489. X *    Unfortunately, this does not work, as it doesn't handle old text
  1490. X *    in edit text boxes, and not ParamText parameters either.
  1491. X *
  1492. X */
  1493. XDialogPtr
  1494. Xmv_get_new_dialog(short dialogID)
  1495. X{
  1496. X    DialogPtr dialog;
  1497. X    int d_idx = old_dialog_count;
  1498. X    Rect oldRect ;
  1499. X    Boolean hadOld = 0 ;
  1500. X
  1501. X    old_dialog[0].id = dialogID;
  1502. X    while (old_dialog[d_idx].id != dialogID)
  1503. X        --d_idx;
  1504. X
  1505. X/*
  1506. X *    This routine modified so that the old dialog is
  1507. X *    disposed, and the new one read in after we remember
  1508. X *    the old dialog's position.
  1509. X *
  1510. X *    This takes care of strange default strings and ParamTexts
  1511. X *
  1512. X */
  1513. X
  1514. X    if ( d_idx ) {
  1515. X
  1516. X        dialog = old_dialog [ d_idx ] . dialog ;
  1517. X        oldRect = dialog -> portBits . bounds ;
  1518. X        DisposeDialog ( dialog ) ;
  1519. X        old_dialog [ d_idx ] . dialog = ( DialogPtr ) NULL ;
  1520. X        hadOld = 1 ;
  1521. X
  1522. X    } else {
  1523. X
  1524. X        d_idx = ++ old_dialog_count ;
  1525. X    }
  1526. X
  1527. X    dialog = GetNewDialog(dialogID, nil, (WindowPtr)-1);
  1528. X    if (dialog) {
  1529. X
  1530. X        if ( hadOld ) {
  1531. X
  1532. X            MoveWindow ( dialog , - oldRect . left , - oldRect . top , FALSE ) ;
  1533. X        }
  1534. X        old_dialog[d_idx].id = dialogID;
  1535. X        old_dialog[d_idx].init_visible
  1536. X            = ((WindowPeek)dialog)->visible;
  1537. X        old_dialog[d_idx].dialog = dialog;
  1538. X    }
  1539. X    return dialog;
  1540. X}
  1541. X
  1542. X/* Instead of actually closing the dialog, just hide it so its location
  1543. X   is remembered. */
  1544. Xvoid mv_close_dialog(DialogPtr dialog) {
  1545. X    HideWindow(dialog);
  1546. X}
  1547. X
  1548. X/* This routine is stolen/borrowed from HandleClick (macwin.c).  See the
  1549. X   comments in mv_modal_dialog for more information. */
  1550. Xvoid
  1551. Xmv_handle_click ( EventRecord * theEvent )
  1552. X{
  1553. X    int code ;
  1554. X    WindowPtr theWindow ;
  1555. X    Rect r = ( * GetGrayRgn ( ) ) -> rgnBBox ;
  1556. X
  1557. X    InsetRect ( & r , 4 , 4 ) ;
  1558. X    InitCursor ( ) ;
  1559. X
  1560. X    code = FindWindow ( theEvent -> where , & theWindow ) ;
  1561. X
  1562. X    switch ( code ) {
  1563. X
  1564. X    case inContent :
  1565. X        if ( theWindow != FrontWindow ( ) ) {
  1566. X            nhbell ( ) ;
  1567. X        }
  1568. X        break ;
  1569. X
  1570. X    case inDrag :
  1571. X        InitCursor ( ) ;
  1572. X        DragWindow ( theWindow , theEvent -> where , & r ) ;
  1573. X        SaveWindowPos ( theWindow ) ;
  1574. X        break ;
  1575. X
  1576. X    default :
  1577. X        HandleEvent ( theEvent ) ;
  1578. X    }
  1579. X}
  1580. X
  1581. Xvoid
  1582. Xmv_modal_dialog(ModalFilterProcPtr filterProc, short *itemHit)
  1583. X{
  1584. X    GrafPtr org_port;
  1585. X    GetPort(&org_port);
  1586. X
  1587. X    for (;;) {
  1588. X        DialogPtr dialog = FrontWindow();
  1589. X        EventRecord evt;
  1590. X
  1591. X        WaitNextEvent(everyEvent, &evt, GetCaretTime(), nil);
  1592. X
  1593. X        if (evt.what == keyDown)
  1594. X            if (evt.modifiers & cmdKey) {
  1595. X                if ((evt.message & charCodeMask) == '.') {
  1596. X                    /* 0x351b is the key code and character code of the esc key. */
  1597. X                    evt.message = 0x351b;
  1598. X                    evt.modifiers &= ~cmdKey;
  1599. X                }
  1600. X            } else
  1601. X                trans_num_keys(&evt);
  1602. X
  1603. X        if (filterProc) {
  1604. X            if ((*filterProc)(dialog, &evt, itemHit))
  1605. X                break;
  1606. X        } else if (evt.what == keyDown) {
  1607. X            char ch = evt.message & charCodeMask;
  1608. X            if (ch == CHAR_CR || ch == CHAR_ENTER) {
  1609. X                *itemHit = ok;
  1610. X                FlashButton(dialog, ok);
  1611. X                break;
  1612. X            }
  1613. X        }
  1614. X
  1615. X        if (IsDialogEvent(&evt)) {
  1616. X            DialogPtr dont_care;
  1617. X            if (DialogSelect(&evt, &dont_care, itemHit))
  1618. X                break;
  1619. X
  1620. X        /* The following part is problemmatic: (1) Calling HandleEvent
  1621. X           here may cause some re-entrance problem (seems ok, but I am
  1622. X           not sure). (2) It is ugly to treat mouseDown events as a
  1623. X           special case.  If we can just say "else HandleEvent(&evt);"
  1624. X           here it will be better. */
  1625. X        } else if (evt.what == mouseDown)
  1626. X                mv_handle_click(&evt);
  1627. X            else
  1628. X                HandleEvent(&evt);
  1629. X
  1630. X        SetPort(org_port);
  1631. X    }
  1632. X}
  1633. END_OF_FILE
  1634. if test 3856 -ne `wc -c <'sys/mac/mmodal.c'`; then
  1635.     echo shar: \"'sys/mac/mmodal.c'\" unpacked with wrong size!
  1636. fi
  1637. # end of 'sys/mac/mmodal.c'
  1638. fi
  1639. if test -f 'sys/vms/Makefile.top' -a "${1}" != "-c" ; then 
  1640.   echo shar: Will not clobber existing file \"'sys/vms/Makefile.top'\"
  1641. else
  1642. echo shar: Extracting \"'sys/vms/Makefile.top'\" \(4301 characters\)
  1643. sed "s/^X//" >'sys/vms/Makefile.top' <<'END_OF_FILE'
  1644. X#    NetHack Makefile (VMS) - top level for making & installing everything.
  1645. X#    SCCS Id: @(#)Makefile.top    3.1    93/01/06
  1646. X
  1647. X#  Copy this file to <top>Makefile.; edit the appropriate values for
  1648. X#  GAMEDIR ("playground" location) and GAMEOWNER (UIC or identifier
  1649. X#  for the owner of playground files).
  1650. X
  1651. X#    usage:    mms all,install
  1652. X
  1653. XMAKE    = mms
  1654. XCD    = set default
  1655. XECHO    = write sys$output
  1656. XEXEC    = @
  1657. XNOOP    = !            # don't do anything
  1658. XTOUCH    = set file/truncate    # multiple files per $(TOUCH), but no creation
  1659. X# support directories, relative to 'top'
  1660. XDAT = [.dat]
  1661. XDOC = [.doc]
  1662. XSRC = [.src]
  1663. XTOP = [-]    # relative to the others
  1664. XUTL = [.util]
  1665. XVMS = [.sys.vms]
  1666. X
  1667. XGAMEDIR =            # defaults to [.play]
  1668. XGAMEOWNER =            # defaults to installer's UIC
  1669. X# these are the distributed values in [.include]vmsconf.h
  1670. X#GAMEDIR = DISK$USERS:[GAMES.NETHACK.3-1-0.PLAY]
  1671. X#GAMEOWNER = NHWIZARD
  1672. X
  1673. X# just about everything, except installation
  1674. Xall :    program utilities data documentation
  1675. X      @ $(ECHO) "all code and data is now up to date."
  1676. X
  1677. Xprogram :
  1678. X    $(CD) $(SRC)
  1679. X    $(MAKE)$(MAKEFLAGS) all
  1680. X      @ $(CD) $(TOP)
  1681. Xutilities :
  1682. X    $(CD) $(UTL)
  1683. X    $(MAKE)$(MAKEFLAGS) all
  1684. X      @ $(CD) $(TOP)
  1685. Xdata :
  1686. X    $(CD) $(DAT)
  1687. X    $(MAKE)$(MAKEFLAGS) all
  1688. X      @ $(CD) $(TOP)
  1689. Xdocumentation :
  1690. X    $(CD) $(DOC)
  1691. X    $(MAKE)$(MAKEFLAGS) all
  1692. X      @ $(CD) $(TOP)
  1693. X
  1694. Xinstall :    make_directories create_writeable_files update
  1695. X      @ $(ECHO) "installation is now complete."
  1696. X
  1697. X# assume there're no active games in progress
  1698. Xupdate    :    place_readonly_files place_executable place_vms_support
  1699. X      @ open/Write f tmp-update.com;
  1700. X      @ write f "$ set noon"
  1701. X      @ write f "$ if p1.eqs."""" then  p1 = f$trnlnm(""HACKDIR"")"
  1702. X      @ write f "$ if p1.eqs."""" then  p1 = ""[.play]"""
  1703. X      @ write f "$ old_default = f$environ(""DEFAULT"")"
  1704. X      @ write f "$ set default 'p1'"
  1705. X      @ write f\
  1706. X "$ if f$search(""*.*;-2"").nes."""" then  set file/prot=(s:rwed,o:rwed) *.*;-2"
  1707. X      @ write f\
  1708. X "$ if f$search(""*.*;-1"").nes."""" then  set file/prot=(s:rwed,o:rwed) *.*;-1"
  1709. X      @ write f "$ if f$search(""*.*;-1"").nes."""" then  purge"
  1710. X      @ write f "$ if f$search(""bones*.*"").nes."""" then  $(TOUCH) bones*.*"
  1711. X      @ write f "$ if f$search(""[.save]*"").nes."""" then  $(TOUCH) [.save]*"
  1712. X      @ write f "$ set default 'old_default'"
  1713. X      @ write f "$ exit"
  1714. X      @ close f
  1715. X      - $(EXEC)tmp-update.com; $(GAMEDIR)  !purge old version, touch save files
  1716. X      @ delete tmp-update.com;
  1717. X      @ $(ECHO) "playground files updated."
  1718. X
  1719. XGuidebook :
  1720. X    $(CD) $(DOC)
  1721. X    $(MAKE)$(MAKEFLAGS) Guidebook
  1722. X      @ $(CD) $(TOP)
  1723. Xmanpages :
  1724. X    $(CD) $(DOC)
  1725. X    $(MAKE)$(MAKEFLAGS) manpages
  1726. X      @ $(CD) $(TOP)
  1727. X
  1728. Xmake_directories :
  1729. X    $(EXEC)$(VMS)install.com "$(GAMEDIR)" "$(GAMEOWNER)" directories
  1730. X
  1731. Xcreate_writeable_files :
  1732. X    $(EXEC)$(VMS)install.com "$(GAMEDIR)" "$(GAMEOWNER)" writeable_files
  1733. X
  1734. Xplace_readonly_files :
  1735. X    $(EXEC)$(VMS)install.com "$(GAMEDIR)" "$(GAMEOWNER)" readonly_files
  1736. X
  1737. Xplace_executable :
  1738. X    $(EXEC)$(VMS)install.com "$(GAMEDIR)" "$(GAMEOWNER)" executable
  1739. X
  1740. Xplace_vms_support :
  1741. X    $(EXEC)$(VMS)install.com "$(GAMEDIR)" "$(GAMEOWNER)" termcap
  1742. X    $(EXEC)$(VMS)install.com "$(GAMEDIR)" "$(GAMEOWNER)" procedure
  1743. X    $(EXEC)$(VMS)install.com "$(GAMEDIR)" "$(GAMEOWNER)" documentation
  1744. X
  1745. X
  1746. X# 'make no_tools' should be done first if you don't have the appropriate
  1747. X# tools to process the parser and scanner for the special level and
  1748. X# dungeon compilers; doing so will copy distributed, pre-processed files
  1749. X# from [.sys.share] to [.util].  If you _do_ have the tools, be sure to
  1750. X# edit [.util]Makefile so that it uses the right ones.
  1751. Xno_tools :
  1752. X    $(CD) $(UTL)
  1753. X    $(MAKE)$(MAKEFLAGS) no_yacc
  1754. X    $(MAKE)$(MAKEFLAGS) no_lex
  1755. X      @ $(CD) $(TOP)
  1756. X
  1757. X
  1758. X# 'make clean' removes all the .obj files, but leaves around all the executables
  1759. X# and compiled data files.
  1760. Xclean :
  1761. X    $(CD) $(SRC)
  1762. X      - $(MAKE)$(MAKEFLAGS) clean
  1763. X      @ $(CD) $(TOP)
  1764. X    $(CD) $(UTL)
  1765. X      - $(MAKE)$(MAKEFLAGS) clean
  1766. X      @ $(CD) $(TOP)
  1767. X
  1768. X# 'make spotless' returns the source tree to near-distribution condition.
  1769. X# it removes .obj files, executables, and compiled data files.
  1770. Xspotless :
  1771. X    $(CD) $(SRC)
  1772. X      - $(MAKE)$(MAKEFLAGS) spotless
  1773. X      @ $(CD) $(TOP)
  1774. X    $(CD) $(UTL)
  1775. X      - $(MAKE)$(MAKEFLAGS) spotless
  1776. X      @ $(CD) $(TOP)
  1777. X    $(CD) $(DAT)
  1778. X      - $(MAKE)$(MAKEFLAGS) spotless
  1779. X      @ $(CD) $(TOP)
  1780. X    $(CD) $(DOC)
  1781. X      - $(MAKE)$(MAKEFLAGS) spotless
  1782. X      @ $(CD) $(TOP)
  1783. END_OF_FILE
  1784. if test 4301 -ne `wc -c <'sys/vms/Makefile.top'`; then
  1785.     echo shar: \"'sys/vms/Makefile.top'\" unpacked with wrong size!
  1786. fi
  1787. # end of 'sys/vms/Makefile.top'
  1788. fi
  1789. if test -f 'util/dgn_comp.l' -a "${1}" != "-c" ; then 
  1790.   echo shar: Will not clobber existing file \"'util/dgn_comp.l'\"
  1791. else
  1792. echo shar: Extracting \"'util/dgn_comp.l'\" \(4261 characters\)
  1793. sed "s/^X//" >'util/dgn_comp.l' <<'END_OF_FILE'
  1794. X%{
  1795. X/*    SCCS Id: @(#)dgn_lex.c    3.1    92/10/23    */
  1796. X/*    Copyright (c) 1989 by Jean-Christophe Collet */
  1797. X/*    Copyright (c) 1990 by M. Stephenson         */
  1798. X/* NetHack may be freely redistributed.  See license for details. */
  1799. X
  1800. X#define DGN_COMP
  1801. X
  1802. X#include "config.h"
  1803. X#include "dgn_comp.h"
  1804. X#include "dgn_file.h"
  1805. X
  1806. Xlong *FDECL(alloc, (unsigned int));
  1807. X/*
  1808. X * Most of these don't exist in flex, yywrap is macro and
  1809. X * yyunput is properly declared in flex.skel.
  1810. X */
  1811. X#ifndef FLEX_SCANNER
  1812. Xint FDECL (yyback, (int *, int));
  1813. Xint NDECL (yylook);
  1814. Xint NDECL (yyinput);
  1815. Xint NDECL (yywrap);
  1816. Xint NDECL (yylex);
  1817. X    /* Traditional lexes let yyunput() and yyoutput() default to int;
  1818. X     * newer ones may declare them as void since they don't return
  1819. X     * values.  For even more fun, the lex supplied as part of the
  1820. X     * newer unbundled compiler for SunOS 4.x adds the void declarations
  1821. X     * (under __STDC__ or _cplusplus ifdefs -- otherwise they remain
  1822. X     * int) while the bundled lex and the one with the older unbundled
  1823. X     * compiler do not.  To detect this, we need help from outside --
  1824. X     * sys/unix/Makefile.utl.
  1825. X     */
  1826. X# if defined(NeXT) || defined(SVR4)
  1827. X#  define VOIDYYPUT
  1828. X# endif
  1829. X# if !defined(VOIDYYPUT)
  1830. X#  if defined(POSIX_TYPES) && !defined(BOS) && !defined(HISX)
  1831. X#   define VOIDYYPUT
  1832. X#  endif
  1833. X# endif
  1834. X# if !defined(VOIDYYPUT) && defined(WEIRD_LEX)
  1835. X#  if defined(SUNOS4) && defined(__STDC__) && (WEIRD_LEX != 0) 
  1836. X#   define VOIDYYPUT
  1837. X#  endif
  1838. X# endif
  1839. X# ifdef VOIDYYPUT
  1840. Xvoid FDECL (yyunput, (int));
  1841. Xvoid FDECL (yyoutput, (int));
  1842. X# else
  1843. Xint FDECL (yyunput, (int));
  1844. Xint FDECL (yyoutput, (int));
  1845. X# endif
  1846. X#endif    /* FLEX_SCANNER */
  1847. X
  1848. Xvoid FDECL (init_yyin, (FILE *));
  1849. Xvoid FDECL (init_yyout, (FILE *));
  1850. X
  1851. X#ifdef MICRO
  1852. X#undef exit
  1853. Xextern void FDECL(exit, (int));
  1854. X#endif
  1855. X
  1856. X/* this doesn't always get put in dgn_comp.h
  1857. X * (esp. when using older versions of bison)
  1858. X */
  1859. X
  1860. Xextern YYSTYPE yylval;
  1861. X
  1862. Xint line_number = 1;
  1863. X/*
  1864. X *    This is a hack required by Michael Hamel to get things
  1865. X *    working on the Mac.
  1866. X */
  1867. X#if defined(applec) && !defined(FLEX_SCANNER)
  1868. X#undef input
  1869. X#undef unput
  1870. X#define unput(c) { yytchar = (c); if (yytchar == 10) yylineno--; *yysptr++ = yytchar; }                  
  1871. X# ifndef YYNEWLINE
  1872. X# define YYNEWLINE 10
  1873. X# endif
  1874. X
  1875. Xchar
  1876. Xinput() {    /* Under MPW \n is chr(13)! Compensate for this. */
  1877. X
  1878. X    if (yysptr > yysbuf) return(*--yysptr);
  1879. X    else {
  1880. X        yytchar = getc(yyin);
  1881. X         if (yytchar == '\n') {
  1882. X            yylineno++;
  1883. X            return(YYNEWLINE);
  1884. X        }
  1885. X        if (yytchar == EOF) return(0);
  1886. X        else            return(yytchar);
  1887. X    }
  1888. X}
  1889. X#endif    /* applec && !FLEX_SCANNER */
  1890. X
  1891. X%}
  1892. X%%
  1893. XDUNGEON        return(A_DUNGEON);
  1894. Xup        { yylval.i=1; return(UP_OR_DOWN); }
  1895. Xdown        { yylval.i=0; return(UP_OR_DOWN); }
  1896. XENTRY        return(ENTRY);
  1897. Xstair        return(STAIR);
  1898. Xno_up        return(NO_UP);
  1899. Xno_down        return(NO_DOWN);
  1900. Xportal        return(PORTAL);
  1901. XPROTOFILE    return(PROTOFILE);
  1902. XDESCRIPTION    return(DESCRIPTION);
  1903. XLEVELDESC    return(LEVELDESC);
  1904. XALIGNMENT       return(ALIGNMENT);
  1905. XLEVALIGN        return(LEVALIGN);
  1906. Xtown        { yylval.i=TOWN ; return(DESCRIPTOR); }
  1907. Xhellish        { yylval.i=HELLISH ; return(DESCRIPTOR); }
  1908. Xmazelike    { yylval.i=MAZELIKE ; return(DESCRIPTOR); }
  1909. Xroguelike    { yylval.i=ROGUELIKE ; return(DESCRIPTOR); }
  1910. Xunaligned       { yylval.i=D_ALIGN_NONE ; return(DESCRIPTOR); }
  1911. Xnoalign         { yylval.i=D_ALIGN_NONE ; return(DESCRIPTOR); }
  1912. Xlawful          { yylval.i=D_ALIGN_LAWFUL ; return(DESCRIPTOR); }
  1913. Xneutral         { yylval.i=D_ALIGN_NEUTRAL ; return(DESCRIPTOR); }
  1914. Xchaotic         { yylval.i=D_ALIGN_CHAOTIC ; return(DESCRIPTOR); }
  1915. XBRANCH        return(BRANCH);
  1916. XCHAINBRANCH    return(CHBRANCH);
  1917. XLEVEL        return(LEVEL);
  1918. XRNDLEVEL    return(RNDLEVEL);
  1919. XCHAINLEVEL    return(CHLEVEL);
  1920. XRNDCHLEVEL    return(RNDCHLEVEL);
  1921. X[-0-9]+        { yylval.i=atoi(yytext); return(INTEGER); }
  1922. X\"[^"]*\"    { yytext[yyleng-1] = 0; /* Discard the trailing \" */
  1923. X          yylval.str = (char *) alloc(strlen(yytext+1)+1);
  1924. X          strcpy(yylval.str, yytext+1); /* Discard the first \" */
  1925. X          return(STRING); }
  1926. X^#.*\n        { line_number++; }
  1927. X\n        { line_number++; }
  1928. X[ \t]+        ;    /* skip trailing tabs & spaces */
  1929. X.        { return yytext[0]; }
  1930. X%%
  1931. X
  1932. X/* routine to switch to another input file; needed for flex */
  1933. Xvoid init_yyin( input_f )
  1934. XFILE *input_f;
  1935. X{
  1936. X#ifdef FLEX_SCANNER
  1937. X    if (yyin)
  1938. X        yyrestart(input_f);
  1939. X    else
  1940. X#endif
  1941. X        yyin = input_f;
  1942. X}
  1943. X/* analogous routine (for completeness) */
  1944. Xvoid init_yyout( output_f )
  1945. XFILE *output_f;
  1946. X{
  1947. X    yyout = output_f;
  1948. X}
  1949. X
  1950. END_OF_FILE
  1951. if test 4261 -ne `wc -c <'util/dgn_comp.l'`; then
  1952.     echo shar: \"'util/dgn_comp.l'\" unpacked with wrong size!
  1953. fi
  1954. # end of 'util/dgn_comp.l'
  1955. fi
  1956. if test -f 'win/X11/nh72icon' -a "${1}" != "-c" ; then 
  1957.   echo shar: Will not clobber existing file \"'win/X11/nh72icon'\"
  1958. else
  1959. echo shar: Extracting \"'win/X11/nh72icon'\" \(4333 characters\)
  1960. sed "s/^X//" >'win/X11/nh72icon' <<'END_OF_FILE'
  1961. X/*    SCCS Id: @(#)nh72icon    3.1    93/01/21            */
  1962. X/*    Copyright (c) 1993 by M. Stephenson                */
  1963. X/* NetHack may be freely redistributed.  See license for details.    */
  1964. X
  1965. X/*    72x72 X11 icon for NetHack.                    */
  1966. X
  1967. X#define nh72icon_width 72
  1968. X#define nh72icon_height 72
  1969. Xstatic char nh72icon_bits[] = {
  1970. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  1971. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  1972. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  1973. X   0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00,
  1974. X   0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
  1975. X   0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
  1976. X   0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00,
  1977. X   0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00,
  1978. X   0x10, 0x00, 0xe0, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0xe0,
  1979. X   0x07, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe0, 0x07, 0x3e, 0xc8,
  1980. X   0x07, 0x00, 0xf8, 0x13, 0x7c, 0xe0, 0x07, 0x22, 0x08, 0xfc, 0xc1, 0x0f,
  1981. X   0x10, 0x44, 0xe0, 0x07, 0x36, 0x08, 0x00, 0x7f, 0x00, 0x10, 0x6c, 0xe0,
  1982. X   0x07, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x10, 0x38, 0xe0, 0x07, 0x14, 0x08,
  1983. X   0x00, 0x00, 0x00, 0x10, 0x28, 0xe0, 0x07, 0x1c, 0x08, 0x00, 0x00, 0x00,
  1984. X   0x10, 0x38, 0xe0, 0x07, 0x14, 0x08, 0x00, 0x00, 0x00, 0x10, 0x28, 0xe0,
  1985. X   0x07, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x10, 0x38, 0xe0, 0x07, 0x14, 0x08,
  1986. X   0x00, 0x00, 0x00, 0x10, 0x28, 0xe0, 0x87, 0xff, 0x08, 0x10, 0x00, 0x10,
  1987. X   0x10, 0xff, 0xe1, 0xc7, 0xff, 0x09, 0x38, 0x10, 0x38, 0x90, 0xff, 0xe3,
  1988. X   0x47, 0x1c, 0x09, 0x78, 0x38, 0x3c, 0x90, 0x38, 0xe2, 0x07, 0x1c, 0x08,
  1989. X   0xfc, 0x39, 0x7f, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0xfc, 0xbb, 0x7f,
  1990. X   0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0xfe, 0xff, 0xff, 0x10, 0x38, 0xe0,
  1991. X   0x07, 0x1c, 0x08, 0xfe, 0xff, 0xff, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08,
  1992. X   0xfe, 0xff, 0xff, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0xfe, 0xff, 0xff,
  1993. X   0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0xfe, 0xff, 0xff, 0x10, 0x38, 0xe0,
  1994. X   0x07, 0x1c, 0x08, 0xfc, 0xbb, 0x7f, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08,
  1995. X   0xfc, 0x39, 0x7f, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0x78, 0x38, 0x3c,
  1996. X   0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0x38, 0x38, 0x38, 0x10, 0x38, 0xe0,
  1997. X   0x07, 0x1c, 0x08, 0x10, 0x38, 0x10, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08,
  1998. X   0x00, 0x38, 0x00, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0x00, 0x38, 0x00,
  1999. X   0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0x00, 0x38, 0x00, 0x10, 0x38, 0xe0,
  2000. X   0x07, 0x1c, 0x08, 0x00, 0x38, 0x00, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08,
  2001. X   0x00, 0x38, 0x00, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0x00, 0x38, 0x00,
  2002. X   0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0x00, 0x38, 0x00, 0x10, 0x38, 0xe0,
  2003. X   0x07, 0x1c, 0x08, 0x00, 0x38, 0x00, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08,
  2004. X   0x00, 0x28, 0x00, 0x10, 0x38, 0xe0, 0x07, 0x1c, 0x08, 0x00, 0x38, 0x00,
  2005. X   0x10, 0x38, 0xe0, 0x07, 0x08, 0x18, 0x00, 0x28, 0x00, 0x10, 0x10, 0xe0,
  2006. X   0x07, 0x08, 0x30, 0x00, 0x38, 0x00, 0x18, 0x10, 0xe0, 0x07, 0x00, 0x60,
  2007. X   0x00, 0x28, 0x00, 0x0c, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x00, 0x38, 0x00,
  2008. X   0x06, 0x00, 0xe0, 0x07, 0x00, 0x80, 0x01, 0x28, 0x00, 0x03, 0x00, 0xe0,
  2009. X   0x07, 0x00, 0x00, 0x03, 0x38, 0x80, 0x01, 0x00, 0xe0, 0x07, 0x00, 0x00,
  2010. X   0x06, 0x6c, 0xc0, 0x00, 0x10, 0xe0, 0x07, 0x08, 0x00, 0x0c, 0x44, 0x60,
  2011. X   0x00, 0x92, 0xe0, 0x07, 0x49, 0x00, 0x18, 0x7c, 0x30, 0x00, 0x6c, 0xe0,
  2012. X   0x07, 0x36, 0x00, 0x30, 0x00, 0x18, 0x00, 0x44, 0xe0, 0x07, 0x22, 0x00,
  2013. X   0x60, 0x00, 0x0c, 0x00, 0x83, 0xe1, 0x87, 0xc1, 0x00, 0xc0, 0x00, 0x06,
  2014. X   0x00, 0x44, 0xe0, 0x07, 0x22, 0x00, 0x80, 0x01, 0x03, 0x00, 0x6c, 0xe0,
  2015. X   0x07, 0x36, 0x00, 0x00, 0x83, 0x01, 0x00, 0x92, 0xe0, 0x07, 0x49, 0x00,
  2016. X   0x00, 0xfe, 0x00, 0x00, 0x10, 0xe0, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
  2017. X   0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
  2018. X   0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00,
  2019. X   0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
  2020. X   0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
  2021. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  2022. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  2023. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
  2024. END_OF_FILE
  2025. if test 4333 -ne `wc -c <'win/X11/nh72icon'`; then
  2026.     echo shar: \"'win/X11/nh72icon'\" unpacked with wrong size!
  2027. fi
  2028. # end of 'win/X11/nh72icon'
  2029. fi
  2030. echo shar: End of archive 104 \(of 108\).
  2031. cp /dev/null ark104isdone
  2032. MISSING=""
  2033. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
  2034. 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \
  2035. 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \
  2036. 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 \
  2037. 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 \
  2038. 101 102 103 104 105 106 107 108 ; do
  2039.     if test ! -f ark${I}isdone ; then
  2040.     MISSING="${MISSING} ${I}"
  2041.     fi
  2042. done
  2043. if test "${MISSING}" = "" ; then
  2044.     echo You have unpacked all 108 archives.
  2045.     echo "Now execute 'rebuild.sh'"
  2046.     rm -f ark10[0-8]isdone ark[1-9]isdone ark[1-9][0-9]isdone
  2047. else
  2048.     echo You still need to unpack the following archives:
  2049.     echo "        " ${MISSING}
  2050. fi
  2051. ##  End of shell archive.
  2052. exit 0
  2053.