home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume16 / nethck31 / part102 < prev    next >
Encoding:
Internet Message Format  |  1993-02-05  |  59.2 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: v16i110:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Part102/108
  5. Message-ID: <4475@master.CNA.TEK.COM>
  6. Date: 5 Feb 93 22:03:43 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 1817
  9. Approved: billr@saab.CNA.TEK.COM
  10. Xref: uunet comp.sources.games:1661
  11.  
  12. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  13. Posting-number: Volume 16, Issue 110
  14. Archive-name: nethack31/Part102
  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 102 (of 108)."
  27. # Contents:  include/color.h include/dungeon.h include/objclass.h
  28. #   include/patchlevel.h include/wintty.h src/exper.c
  29. #   sys/amiga/wbdata.c sys/amiga/wbdefs.h sys/mac/NHrez.hqx
  30. #   sys/msdos/exesmurf.doc win/X11/Window.c
  31. # Wrapped by billr@saab on Wed Jan 27 16:09:30 1993
  32. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  33. if test -f 'include/color.h' -a "${1}" != "-c" ; then 
  34.   echo shar: Will not clobber existing file \"'include/color.h'\"
  35. else
  36. echo shar: Extracting \"'include/color.h'\" \(1467 characters\)
  37. sed "s/^X//" >'include/color.h' <<'END_OF_FILE'
  38. X/*    SCCS Id: @(#)color.h    3.1    92/02/02
  39. X/* Copyright (c) Steve Linhart, Eric Raymond, 1989. */
  40. X/* NetHack may be freely redistributed.  See license for details. */
  41. X
  42. X#ifndef COLOR_H
  43. X#define COLOR_H
  44. X
  45. X/*
  46. X * The color scheme used is tailored for an IBM PC.  It consists of the
  47. X * standard 8 colors, folowed by their bright counterparts.  There are
  48. X * exceptions, these are listed below.  Bright black doesn't mean very
  49. X * much, so it is used as the "default" foreground color of the screen.
  50. X */
  51. X#define BLACK        0
  52. X#define RED        1
  53. X#define GREEN        2
  54. X#define BROWN        3    /* on IBM, low-intensity yellow is brown */
  55. X#define BLUE        4
  56. X#define MAGENTA     5
  57. X#define CYAN        6
  58. X#define GRAY        7    /* low-intensity white */
  59. X#define NO_COLOR    8
  60. X#define ORANGE_COLORED    9    /* "orange" conflicts with the object */
  61. X#define BRIGHT_GREEN    10
  62. X#define YELLOW        11
  63. X#define BRIGHT_BLUE    12
  64. X#define BRIGHT_MAGENTA  13
  65. X#define BRIGHT_CYAN    14
  66. X#define WHITE        15
  67. X#define MAXCOLORS    16
  68. X
  69. X/* The "half-way" point for tty based color systems.  This is used in */
  70. X/* the tty color setup code.  (IMHO, it should be removed - dean).    */
  71. X#define BRIGHT        8
  72. X
  73. X/* these can be configured */
  74. X#define HI_OBJ        MAGENTA
  75. X#define HI_METAL    CYAN
  76. X#define HI_COPPER    YELLOW
  77. X#define HI_SILVER    GRAY
  78. X#define HI_GOLD     YELLOW
  79. X#define HI_LEATHER    BROWN
  80. X#define HI_CLOTH    BROWN
  81. X#define HI_ORGANIC    BROWN
  82. X#define HI_WOOD     BROWN
  83. X#define HI_PAPER    WHITE
  84. X#define HI_GLASS    BRIGHT_CYAN
  85. X#define HI_MINERAL    GRAY
  86. X#define HI_ZAP        BRIGHT_BLUE
  87. X
  88. X#endif /* COLOR_H */
  89. END_OF_FILE
  90. if test 1467 -ne `wc -c <'include/color.h'`; then
  91.     echo shar: \"'include/color.h'\" unpacked with wrong size!
  92. fi
  93. # end of 'include/color.h'
  94. fi
  95. if test -f 'include/dungeon.h' -a "${1}" != "-c" ; then 
  96.   echo shar: Will not clobber existing file \"'include/dungeon.h'\"
  97. else
  98. echo shar: Extracting \"'include/dungeon.h'\" \(5116 characters\)
  99. sed "s/^X//" >'include/dungeon.h' <<'END_OF_FILE'
  100. X/*    SCCS Id: @(#)dungeon.h    3.1    93/01/17    */
  101. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  102. X/* NetHack may be freely redistributed.  See license for details. */
  103. X
  104. X#ifndef DUNGEON_H
  105. X#define DUNGEON_H
  106. X
  107. Xtypedef struct d_flags {    /* dungeon/level type flags */
  108. X    Bitfield(town, 1);    /* is this a town? (levels only) */
  109. X    Bitfield(hellish, 1);    /* is this part of hell? */
  110. X    Bitfield(maze_like, 1);    /* is this a maze? */
  111. X    Bitfield(rogue_like, 1); /* is this an old-fashioned presentation? */
  112. X    Bitfield(align, 3);    /* dungeon alignment. */
  113. X    Bitfield(unused, 1);    /* etc... */
  114. X} d_flags;
  115. X
  116. X#include "align.h"
  117. X
  118. Xtypedef struct d_level {    /* basic dungeon level element */
  119. X    xchar    dnum;        /* dungeon number */
  120. X    xchar    dlevel;        /* level number */
  121. X} d_level;
  122. X
  123. Xtypedef struct s_level {    /* special dungeon level element */
  124. X    struct    s_level    *next;
  125. X    d_level    dlevel;        /* dungeon & level numbers */
  126. X    char    proto[15];    /* name of prototype file (eg. "tower") */
  127. X    char    boneid;        /* character to id level in bones files */
  128. X    uchar    rndlevs;    /* no. of randomly available similar levels */
  129. X    d_flags    flags;        /* type flags */
  130. X} s_level;
  131. X
  132. Xtypedef struct stairway {    /* basic stairway identifier */
  133. X    xchar    sx, sy;        /* x / y location of the stair */
  134. X    d_level    tolev;        /* where does it go */
  135. X    char    up;        /* what type of stairway (up/down) */
  136. X} stairway;
  137. X
  138. X/* level region types */
  139. X#define LR_DOWNSTAIR 0
  140. X#define LR_UPSTAIR 1
  141. X#define LR_PORTAL 2
  142. X#define LR_BRANCH 3
  143. X#define LR_TELE 4
  144. X#define LR_UPTELE 5
  145. X#define LR_DOWNTELE 6
  146. X
  147. Xtypedef struct dest_area {    /* non-stairway level change indentifier */
  148. X    xchar    lx, ly;        /* "lower" left corner (near [0,0]) */
  149. X    xchar    hx, hy;        /* "upper" right corner (near [COLNO,ROWNO]) */
  150. X    xchar    nlx, nly;    /* outline of invalid area */
  151. X    xchar    nhx, nhy;    /* opposite corner of invalid area */
  152. X} dest_area;
  153. X
  154. Xtypedef struct dungeon {    /* basic dungeon identifier */
  155. X    char    dname[24];    /* name of the dungeon (eg. "Hell") */
  156. X    char    proto[15];    /* name of prototype file (eg. "tower") */
  157. X    char    boneid;        /* character to id dungeon in bones files */
  158. X    d_flags    flags;        /* dungeon flags */
  159. X    xchar    entry_lev;    /* entry level */
  160. X    xchar    num_dunlevs;    /* number of levels in this dungeon */
  161. X    xchar    dunlev_ureached; /* how deep you have been in this dungeon */
  162. X    int    ledger_start,    /* the starting depth in "real" terms */
  163. X        depth_start;    /* the starting depth in "logical" terms */
  164. X} dungeon;
  165. X
  166. X/*
  167. X * A branch structure defines the connection between two dungeons.  They
  168. X * will be ordered by the dungeon number/level number of 'end1'.  Ties
  169. X * are resolved by 'end2'.  'Type' uses 'end1' arbitrarily as the primary
  170. X * point.
  171. X */
  172. Xtypedef struct branch {
  173. X    struct branch *next;    /* next in the branch chain */
  174. X    int          id;        /* branch identifier */
  175. X    int          type;        /* type of branch */
  176. X    d_level      end1;        /* "primary" end point */
  177. X    d_level      end2;        /* other end point */
  178. X    boolean      end1_up;    /* does end1 go up? */
  179. X} branch;
  180. X
  181. X/* branch types */
  182. X#define BR_STAIR   0    /* "Regular" connection, 2 staircases. */
  183. X#define BR_NO_END1 1    /* "Regular" connection.  However, no stair from  */
  184. X            /*    end1 to end2.  There is a stair from end2 */
  185. X            /*    to end1.                  */
  186. X#define BR_NO_END2 2    /* "Regular" connection.  However, no stair from  */
  187. X            /*    end2 to end1.  There is a stair from end1 */
  188. X            /*    to end2.                  */
  189. X#define BR_PORTAL  3    /* Connection by magic portals (traps) */
  190. X
  191. X
  192. X/* A particular dungeon contains num_dunlevs d_levels with dlevel 1..
  193. X * num_dunlevs.  Ledger_start and depth_start are bases that are added
  194. X * to the dlevel of a particular d_level to get the effective ledger_no
  195. X * and depth for that d_level.
  196. X *
  197. X * Ledger_no is a bookkeeping number that gives a unique identifier for a
  198. X * particular d_level (for level.?? files, e.g.).
  199. X *
  200. X * Depth corresponds to the number of floors below the surface.
  201. X */
  202. X#define Is_astralevel(x)    (on_level(x, &astral_level))
  203. X#define Is_earthlevel(x)    (on_level(x, &earth_level))
  204. X#define Is_waterlevel(x)    (on_level(x, &water_level))
  205. X#define Is_firelevel(x)        (on_level(x, &fire_level))
  206. X#define Is_airlevel(x)        (on_level(x, &air_level))
  207. X#define Is_medusa_level(x)    (on_level(x, &medusa_level))
  208. X#define Is_oracle_level(x)    (on_level(x, &oracle_level))
  209. X#define Is_valley(x)        (on_level(x, &valley_level))
  210. X#define Is_asmo_level(x)    (on_level(x, &asmodeus_level))
  211. X#define Is_baal_level(x)    (on_level(x, &baalzebub_level))
  212. X#define Is_wiz1_level(x)    (on_level(x, &wiz1_level))
  213. X#define Is_wiz2_level(x)    (on_level(x, &wiz2_level))
  214. X#define Is_wiz3_level(x)    (on_level(x, &wiz3_level))
  215. X#define Is_sanctum(x)        (on_level(x, &sanctum_level))
  216. X#define Is_portal_level(x)    (on_level(x, &portal_level))
  217. X#define Is_rogue_level(x)    (on_level(x, &rogue_level))
  218. X#define Is_stronghold(x)    (on_level(x, &stronghold_level))
  219. X#define Is_bigroom(x)        (on_level(x, &bigroom_level))
  220. X#ifdef MULDGN
  221. X#define Is_qstart(x)        (on_level(x, &qstart_level))
  222. X#define Is_qlocate(x)        (on_level(x, &qlocate_level))
  223. X#define Is_nemesis(x)        (on_level(x, &nemesis_level))
  224. X#define Is_knox(x)        (on_level(x, &knox_level))
  225. X#endif
  226. X
  227. X#define Inhell            In_hell(&u.uz)    /* now gehennom */
  228. X#define In_endgame(x)        ((x)->dnum == astral_level.dnum)
  229. X
  230. X#endif /* DUNGEON_H */
  231. END_OF_FILE
  232. if test 5116 -ne `wc -c <'include/dungeon.h'`; then
  233.     echo shar: \"'include/dungeon.h'\" unpacked with wrong size!
  234. fi
  235. # end of 'include/dungeon.h'
  236. fi
  237. if test -f 'include/objclass.h' -a "${1}" != "-c" ; then 
  238.   echo shar: Will not clobber existing file \"'include/objclass.h'\"
  239. else
  240. echo shar: Extracting \"'include/objclass.h'\" \(5079 characters\)
  241. sed "s/^X//" >'include/objclass.h' <<'END_OF_FILE'
  242. X/*    SCCS Id: @(#)objclass.h    3.1    92/10/18    */
  243. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  244. X/* NetHack may be freely redistributed.  See license for details. */
  245. X
  246. X#ifndef OBJCLASS_H
  247. X#define OBJCLASS_H
  248. X
  249. X/* definition of a class of objects */
  250. X
  251. Xstruct objclass {
  252. X    short    oc_name_idx;        /* index of actual name */
  253. X    short    oc_descr_idx;        /* description when name unknown */
  254. X    char *    oc_uname;        /* called by user */
  255. X    Bitfield(oc_name_known,1);
  256. X    Bitfield(oc_merge,1);    /* merge otherwise equal objects */
  257. X    Bitfield(oc_uses_known,1); /* obj->known affects full decription */
  258. X                /* otherwise, obj->dknown and obj->bknown */
  259. X                /* tell all, and obj->known should always */
  260. X                /* be set for proper merging behavior */
  261. X    Bitfield(oc_magic,1);    /* inherently magical object */
  262. X    Bitfield(oc_charged,1);    /* may have +n or (n) charges */
  263. X    Bitfield(oc_unique,1);    /* special one-of-a-kind object */
  264. X    Bitfield(oc_big,1);
  265. X#define oc_bimanual    oc_big    /* for weapons */
  266. X#define oc_bulky    oc_big    /* for armor */
  267. X
  268. X    Bitfield(oc_dir,2);
  269. X#define    NODIR        1
  270. X#define    IMMEDIATE    2
  271. X#define    RAY        3
  272. X
  273. X    Bitfield(oc_material,5);
  274. X#define LIQUID        1    /* currently only for venom */
  275. X#define WAX        2
  276. X#define VEGGY        3    /* foodstuffs */
  277. X#define FLESH        4    /*   ditto    */
  278. X#define PAPER        5
  279. X#define CLOTH        6
  280. X#define LEATHER        7
  281. X#define WOOD        8
  282. X#define BONE        9
  283. X#define DRAGON_HIDE    10    /* not leather! */
  284. X#define IRON        11    /* Fe - includes steel */
  285. X#define METAL        12    /* Sn, &c. */
  286. X#define COPPER        13    /* Cu - includes brass */
  287. X#define SILVER        14    /* Ag */
  288. X#define GOLD        15    /* Au */
  289. X#define PLATINUM    16    /* Pt */
  290. X#define MITHRIL        17
  291. X#define PLASTIC        18
  292. X#define GLASS        19
  293. X#define GEMSTONE    20
  294. X#define MINERAL        21
  295. X
  296. X#define is_organic(otmp)    (objects[otmp->otyp].oc_material <= WOOD)
  297. X#define is_metallic(otmp)    (objects[otmp->otyp].oc_material >= IRON && \
  298. X                 objects[otmp->otyp].oc_material <= PLATINUM)
  299. X#define is_corrodeable(otmp)    (objects[otmp->otyp].oc_material == COPPER)
  300. X#define is_rustprone(otmp)    (objects[otmp->otyp].oc_material == IRON)
  301. X
  302. X    uchar    oc_oprop;        /* property (invis, &c.) conveyed */
  303. X    char    oc_class;        /* object class */
  304. X    schar    oc_delay;        /* delay when using such an object */
  305. X#ifdef TEXTCOLOR
  306. X    uchar    oc_color;        /* display color of the object */
  307. X#endif /* TEXTCOLOR */
  308. X    short    oc_prob;        /* probability, used in mkobj() */
  309. X    unsigned short    oc_weight;    /* encumbrance (1 cn = 0.1 lb.) */
  310. X    short    oc_cost;        /* base cost in shops */
  311. X/* Check the AD&D rules!  The FIRST is small monster damage. */
  312. X/* for weapons, and tools, rocks, and gems useful as weapons */
  313. X    schar    oc_wsdam, oc_wldam;    /* max small/large monster damage */
  314. X    schar    oc_oc1, oc_oc2;
  315. X#define    oc_hitbon    oc_oc1        /* weapons: "to hit" bonus */
  316. X#define w_propellor    oc_oc2        /* weapons: negative value = bow */
  317. X#define WP_BOW        1
  318. X#define WP_SLING    2
  319. X#define WP_CROSSBOW    3
  320. X
  321. X#define    a_ac        oc_oc1    /* armor class, used in ARM_BONUS in do.c */
  322. X#define    a_can        oc_oc2        /* armor: used in mhitu.c */
  323. X#define oc_level    oc_oc2        /* books: spell level */
  324. X
  325. X    unsigned short    oc_nutrition;    /* food value */
  326. X};
  327. X
  328. Xstruct objdescr {
  329. X    const char *oc_name;        /* actual name */
  330. X    const char *oc_descr;        /* description when name unknown */
  331. X};
  332. X
  333. Xextern struct objclass NEARDATA objects[];
  334. Xextern struct objdescr NEARDATA obj_descr[];
  335. X
  336. X/*
  337. X * All objects have a class. Make sure that all classes have a corresponding
  338. X * symbol below.
  339. X */
  340. X#define    RANDOM_CLASS     0    /* used for generating random objects */
  341. X#define    ILLOBJ_CLASS     1
  342. X#define    WEAPON_CLASS     2
  343. X#define    ARMOR_CLASS     3
  344. X#define    RING_CLASS     4
  345. X#define    AMULET_CLASS     5
  346. X#define    TOOL_CLASS     6
  347. X#define    FOOD_CLASS     7
  348. X#define    POTION_CLASS     8
  349. X#define    SCROLL_CLASS     9
  350. X#define    SPBOOK_CLASS    10    /* actually SPELL-book */
  351. X#define    WAND_CLASS    11
  352. X#define    GOLD_CLASS    12
  353. X#define    GEM_CLASS    13
  354. X#define    ROCK_CLASS    14
  355. X#define    BALL_CLASS    15
  356. X#define    CHAIN_CLASS    16
  357. X#define    VENOM_CLASS    17
  358. X#define MAXOCLASSES     18
  359. X
  360. X#define ALLOW_COUNT    (MAXOCLASSES+1)    /* Can be used in the object class */
  361. X#define ALL_CLASSES    (MAXOCLASSES+2)    /* input to getobj().           */
  362. X#define ALLOW_NONE    (MAXOCLASSES+3)    /*                   */
  363. X
  364. X#if 0    /* moved to decl.h so that makedefs.c won't see them */
  365. Xextern const char def_oc_syms[MAXOCLASSES];    /* default class symbols */
  366. Xextern uchar oc_syms[MAXOCLASSES];        /* current class symbols */
  367. X#endif
  368. X
  369. X/* Default definitions of all object-symbols (must match classes above). */
  370. X
  371. X#define    ILLOBJ_SYM    ']'    /* should be same as S_MIMIC_DEF      */
  372. X#define    WEAPON_SYM    ')'
  373. X#define    ARMOR_SYM    '['
  374. X#define    RING_SYM    '='
  375. X#define    AMULET_SYM    '"'
  376. X#define    TOOL_SYM    '('
  377. X#define    FOOD_SYM    '%'
  378. X#define    POTION_SYM    '!'
  379. X#define    SCROLL_SYM    '?'
  380. X#define    SPBOOK_SYM    '+'
  381. X#define    WAND_SYM    '/'
  382. X#define    GOLD_SYM    '$'
  383. X#define    GEM_SYM        '*'
  384. X#define    ROCK_SYM    '`'
  385. X#define    BALL_SYM    '0'
  386. X#define    CHAIN_SYM    '_'
  387. X#define    VENOM_SYM    '.'
  388. X
  389. X#ifdef TUTTI_FRUTTI
  390. Xstruct fruit {
  391. X    char fname[PL_FSIZ];
  392. X    int fid;
  393. X    struct fruit *nextf;
  394. X};
  395. X#define newfruit() (struct fruit *)alloc(sizeof(struct fruit))
  396. X#define dealloc_fruit(rind) free((genericptr_t) (rind))
  397. X#endif
  398. X
  399. X#define OBJ_NAME(obj)  (obj_descr[(obj).oc_name_idx].oc_name)
  400. X#define OBJ_DESCR(obj) (obj_descr[(obj).oc_descr_idx].oc_descr)
  401. X#endif /* OBJCLASS_H */
  402. END_OF_FILE
  403. if test 5079 -ne `wc -c <'include/objclass.h'`; then
  404.     echo shar: \"'include/objclass.h'\" unpacked with wrong size!
  405. fi
  406. # end of 'include/objclass.h'
  407. fi
  408. if test -f 'include/patchlevel.h' -a "${1}" != "-c" ; then 
  409.   echo shar: Will not clobber existing file \"'include/patchlevel.h'\"
  410. else
  411. echo shar: Extracting \"'include/patchlevel.h'\" \(5118 characters\)
  412. sed "s/^X//" >'include/patchlevel.h' <<'END_OF_FILE'
  413. X/*
  414. X *  Patch 1, July 31, 1989
  415. X *  add support for Atari TOS (courtesy Eric Smith) and Andrew File System
  416. X *    (courtesy Ralf Brown)
  417. X *  include the uuencoded version of termcap.arc for the MSDOS versions that
  418. X *    was included with 2.2 and 2.3
  419. X *  make a number of simple changes to accommodate various compilers
  420. X *  fix a handful of bugs, and do some code cleaning elsewhere
  421. X *  add more instructions for new environments and things commonly done wrong
  422. X */
  423. X
  424. X/*
  425. X *  Patch 2, August 16, 1989
  426. X *  add support for OS/2 (courtesy Timo Hakulinen)
  427. X *  add a better makefile for MicroSoft C (courtesy Paul Gyugyi)
  428. X *  more accomodation of compilers and preprocessors
  429. X *  add better screen-size sensing
  430. X *  expand color use for PCs and introduce it for SVR3 UNIX machines
  431. X *  extend '/' to multiple identifications
  432. X *  allow meta key to be used to invoke extended commands
  433. X *  fix various minor bugs, and do further code cleaning
  434. X */
  435. X
  436. X/*
  437. X *  Patch 3, September 6, 1989
  438. X *  add war hammers and revise object prices
  439. X *  extend prototypes to ANSI compilers in addition to the previous MSDOS ones
  440. X *  move object-on-floor references into functions in preparation for planned
  441. X *    data structures to allow faster access and better colors
  442. X *  fix some more bugs, and extend the portability of things added in earlier
  443. X *    patches
  444. X */
  445. X
  446. X/*
  447. X *  Patch 4, September 27, 1989
  448. X *  add support for VMS (courtesy David Gentzel)
  449. X *  move monster-on-floor references into functions and implement the new
  450. X *    lookup structure for both objects and monsters
  451. X *  extend the definitions of objects and monsters to provide "living color"
  452. X *    in the dungeon, instead of a single monster color
  453. X *  ifdef varargs usage to satisfy ANSI compilers
  454. X *  standardize on the color 'gray'
  455. X *  assorted bug fixes
  456. X */
  457. X
  458. X/*
  459. X *  Patch 5, October 15, 1989
  460. X *  add support for Macintosh OS (courtesy Johnny Lee)
  461. X *  fix annoying dependency loop via new color.h file
  462. X *  allow interruption while eating -- general handling of partially eaten food
  463. X *  smarter treatment of iron balls (courtesy Kevin Darcy)
  464. X *  a handful of other bug fixes
  465. X */
  466. X
  467. X/*
  468. X *  Patch 6, November 19, 1989
  469. X *  add overlay support for MS-DOS (courtesy Pierre Martineau, Stephen
  470. X *    Spackman, and Norm Meluch)
  471. X *  refine Macintosh port
  472. X *  different door states show as different symbols (courtesy Ari Huttunen)
  473. X *  smarter drawbridges (courtesy Kevin Darcy)
  474. X *  add CLIPPING and split INFERNO off HARD
  475. X *  further refine eating code wrt picking up and resumption
  476. X *  make first few levels easier, by adding :x monsters and increasing initial
  477. X *    attribute points and hitting probability
  478. X *  teach '/' about configurable symbols
  479. X */
  480. X
  481. X/*
  482. X *  Patch 7, February 19, 1990
  483. X *  refine overlay support to handle portions of .c files through OVLx
  484. X *    (courtesy above plus Kevin Smolkowski)
  485. X *  update and extend Amiga port and documentation (courtesy Richard Addison,
  486. X *    Jochen Erwied, Mark Gooderum, Ken Lorber, Greg Olson, Mike Passaretti,
  487. X *    and Gregg Wonderly)
  488. X *  refine and extend Macintosh port and documentation (courtesy Johnny Lee,
  489. X *    Kevin Sitze, Michael Sokolov, Andy Swanson, Jon Watte, and Tom West)
  490. X *  refine VMS documentation
  491. X *  continuing ANSIfication, this time of const usage
  492. X *  teach '/' about differences within monster classes
  493. X *  smarter eating code (yet again), death messages, and treatment of
  494. X *    non-animal monsters, monster unconsciousness, and naming
  495. X *  extended version command to give compilation options
  496. X *  and the usual bug fixes and hole plugs
  497. X */
  498. X
  499. X/*
  500. X *  Patch 8, June 3, 1990
  501. X *  further debug and refine Macintosh port
  502. X *  refine the overlay manager, rearrange the OVLx breakdown for better
  503. X *    efficiency, rename the overlay macros, and split off the overlay
  504. X *    instructions to Install.ovl
  505. X *  introduce NEARDATA for better Amiga efficiency
  506. X *  support for more VMS versions (courtesy Joshua Delahunty and Pat Rankin)
  507. X *  more const fixes
  508. X *  better support for common graphics (DEC VT and IBM)
  509. X *  and a number of simple fixes and consistency extensions
  510. X */
  511. X
  512. X/*
  513. X *  Patch 9, June 26, 1990
  514. X *  clear up some confusing documentation
  515. X *  smooth some more rough edges in various ports
  516. X *  and fix a couple more bugs
  517. X */
  518. X
  519. X/*
  520. X *  Patch 10, February 5, 1991
  521. X *  extend overlay manager to multiple files for easier binary distribution
  522. X *  allow for more system and compiler variance
  523. X *  remove more small insects
  524. X */
  525. X
  526. X/* #define PATCHLEVEL    10 */
  527. X
  528. X/* END Version 3.0, BEGIN Version 3.1 */
  529. X
  530. X/*
  531. X *  NetHack 3.1, January 25, 1993
  532. X *  many, many changes and bugfixes -- some of the highlights include:
  533. X *  display rewrite using line-of-sight vision
  534. X *  general window interface, with the ability to use multiple interfaces
  535. X *    in the same executable
  536. X *  intelligent monsters
  537. X *  enhanced dungeon mythology
  538. X *  branching dungeons with more special levels, quest dungeons, and
  539. X *    multi-level endgame
  540. X *  more artifacts and more uses for artifacts
  541. X *  generalization to multiple shops with damage repair
  542. X *  X11 interface
  543. X *  ability to recover crashed games
  544. X *  full rewrite of Macintosh port
  545. X *  Amiga splitter
  546. X *  directory rearrangement (dat, doc, sys, win, util)
  547. X */
  548. X
  549. X#define PATCHLEVEL    0
  550. END_OF_FILE
  551. if test 5118 -ne `wc -c <'include/patchlevel.h'`; then
  552.     echo shar: \"'include/patchlevel.h'\" unpacked with wrong size!
  553. fi
  554. # end of 'include/patchlevel.h'
  555. fi
  556. if test -f 'include/wintty.h' -a "${1}" != "-c" ; then 
  557.   echo shar: Will not clobber existing file \"'include/wintty.h'\"
  558. else
  559. echo shar: Extracting \"'include/wintty.h'\" \(5357 characters\)
  560. sed "s/^X//" >'include/wintty.h' <<'END_OF_FILE'
  561. X/*    SCCS Id: @(#)wintty.h    3.1    92/10/06          */
  562. X/* Copyright (c) David Cohrs, 1991,1992                  */
  563. X/* NetHack may be freely redistributed.  See license for details. */
  564. X
  565. X#ifndef WINTTY_H
  566. X#define WINTTY_H
  567. X
  568. X#define E extern
  569. X
  570. X#ifndef WINDOW_STRUCTS
  571. X#define WINDOW_STRUCTS
  572. X
  573. X/* descriptor for tty-based windows */
  574. Xstruct WinDesc {
  575. X    int flags;            /* window flags */
  576. X    xchar type;            /* type of window */
  577. X    boolean active;        /* true if window is active */
  578. X    uchar offx, offy;        /* offset from topleft of display */
  579. X    short rows, cols;        /* dimensions */
  580. X    short curx, cury;        /* current cursor position */
  581. X    short maxrow, maxcol;    /* the maximum size used -- for MENU wins */
  582. X                /* maxcol is also used by WIN_MESSAGE for */
  583. X                /* tracking the ^P command */
  584. X    char **data;        /* window data [row][column] */
  585. X    char *resp;            /* valid menu responses (for NHW_MENU) */
  586. X    char *canresp;        /* cancel responses; 1st is the return value */
  587. X    char *morestr;        /* string to display instead of default */
  588. X};
  589. X
  590. X/* window flags */
  591. X#define WIN_CANCELLED 1
  592. X#define WIN_STOP 1        /* for NHW_MESSAGE; stops output */
  593. X
  594. X/* descriptor for tty-based displays -- all the per-display data */
  595. Xstruct DisplayDesc {
  596. X    uchar rows, cols;        /* width and height of tty display */
  597. X    uchar curx, cury;        /* current cursor position on the screen */
  598. X#ifdef TEXTCOLOR
  599. X    int color;            /* current color */
  600. X#endif
  601. X    int attrs;            /* attributes in effect */
  602. X    int toplin;            /* flag for topl stuff */
  603. X    int rawprint;        /* number of raw_printed lines since synch */
  604. X    int inmore;            /* non-zero if more() is active */
  605. X    int inread;            /* non-zero if reading a character */
  606. X    winid lastwin;        /* last window used for I/O */
  607. X};
  608. X
  609. X#endif /* WINDOW_STRUCTS */
  610. X
  611. X#define MAXWIN 20        /* maximum number of windows, cop-out */
  612. X
  613. X/* tty dependent window types */
  614. X#define NHW_BASE    6
  615. X
  616. Xextern struct window_procs tty_procs;
  617. X
  618. X/* port specific variable declarations */
  619. Xextern winid BASE_WINDOW;
  620. X
  621. Xextern struct WinDesc *wins[MAXWIN];
  622. X
  623. Xextern struct DisplayDesc *ttyDisplay;    /* the tty display descriptor */
  624. X
  625. Xextern char morc;        /* last character typed to xwaitforspace */
  626. Xextern char defmorestr[];    /* default --more-- prompt */
  627. X
  628. X/* port specific external function references */
  629. X
  630. X/* ### getline.c ### */
  631. XE void FDECL(xwaitforspace, (const char *));
  632. X
  633. X/* ### termcap.c ### */
  634. X
  635. XE void FDECL(tty_startup,(int*, int*));
  636. X#if defined(apollo)
  637. X/* Apollos don't widen old-style function definitions properly -- they try to
  638. X * be smart and use the prototype, or some such strangeness.  So we have to
  639. X * define UNWIDENDED_PROTOTYPES (in tradstdc.h), which makes CHAR_P below a
  640. X * char.  But the tputs termcap call was compiled as if xputc's argument
  641. X * actually would be expanded.  So here, we have to make an exception. */
  642. XE void FDECL(xputc, (int));
  643. X#else
  644. XE void FDECL(xputc, (CHAR_P));
  645. X#endif
  646. XE void FDECL(xputs, (const char *));
  647. XE void NDECL(cl_end);
  648. XE void NDECL(clear_screen);
  649. XE void NDECL(home);
  650. XE void NDECL(standoutbeg);
  651. XE void NDECL(standoutend);
  652. X# if 0
  653. XE void NDECL(revbeg);
  654. XE void NDECL(boldbeg);
  655. XE void NDECL(blinkbeg);
  656. XE void NDECL(dimbeg);
  657. XE void NDECL(m_end);
  658. X# endif
  659. XE void NDECL(backsp);
  660. XE void NDECL(graph_on);
  661. XE void NDECL(graph_off);
  662. XE void NDECL(cl_eos);
  663. X
  664. X/* ### topl.c ### */
  665. X
  666. XE void FDECL(addtopl, (const char *));
  667. XE void NDECL(more);
  668. XE void FDECL(update_topl, (const char *));
  669. XE void FDECL(putsyms, (const char*));
  670. X
  671. X/* ### wintty.c ### */
  672. X#ifdef CLIPPING
  673. XE void NDECL(setclipped);
  674. X#endif
  675. XE void FDECL(docorner, (int, int));
  676. XE void NDECL(end_glyphout);
  677. XE void FDECL(g_putch, (UCHAR_P));
  678. XE void NDECL(win_tty_init);
  679. X
  680. X/* external declarations */
  681. XE void NDECL(tty_init_nhwindows);
  682. XE void NDECL(tty_player_selection);
  683. XE void NDECL(tty_askname);
  684. XE void NDECL(tty_get_nh_event) ;
  685. XE void FDECL(tty_exit_nhwindows, (const char *));
  686. XE void FDECL(tty_suspend_nhwindows, (const char *));
  687. XE void NDECL(tty_resume_nhwindows);
  688. XE winid FDECL(tty_create_nhwindow, (int));
  689. XE void FDECL(tty_clear_nhwindow, (winid));
  690. XE void FDECL(tty_display_nhwindow, (winid, BOOLEAN_P));
  691. XE void FDECL(tty_dismiss_nhwindow, (winid));
  692. XE void FDECL(tty_destroy_nhwindow, (winid));
  693. XE void FDECL(tty_curs, (winid,int,int));
  694. XE void FDECL(tty_putstr, (winid, int, const char *));
  695. XE void FDECL(tty_display_file, (const char *, BOOLEAN_P));
  696. XE void FDECL(tty_start_menu, (winid));
  697. XE void FDECL(tty_add_menu, (winid, CHAR_P, int, const char *));
  698. XE void FDECL(tty_end_menu, (winid, CHAR_P, const char *, const char *));
  699. XE char FDECL(tty_select_menu, (winid));
  700. XE void NDECL(tty_update_inventory);
  701. XE void NDECL(tty_mark_synch);
  702. XE void NDECL(tty_wait_synch);
  703. X#ifdef CLIPPING
  704. XE void FDECL(tty_cliparound, (int, int));
  705. X#endif
  706. XE void FDECL(tty_print_glyph, (winid,XCHAR_P,XCHAR_P,int));
  707. XE void FDECL(tty_raw_print, (const char *));
  708. XE void FDECL(tty_raw_print_bold, (const char *));
  709. XE int NDECL(tty_nhgetch);
  710. XE int FDECL(tty_nh_poskey, (int *, int *, int *));
  711. XE void NDECL(tty_nhbell);
  712. XE int NDECL(tty_doprev_message);
  713. XE char FDECL(tty_yn_function, (const char *, const char *, CHAR_P));
  714. XE void FDECL(tty_getlin, (const char *,char *));
  715. X#ifdef COM_COMPL
  716. XE void FDECL(tty_get_ext_cmd, (char *));
  717. X#endif /* COM_COMPL */
  718. XE void FDECL(tty_number_pad, (int));
  719. XE void NDECL(tty_delay_output);
  720. X
  721. X/* other defs that really should go away (they're tty specific) */
  722. XE void NDECL(tty_start_screen);
  723. XE void NDECL(tty_end_screen);
  724. X
  725. X#undef E
  726. X
  727. X#endif /* WINTTY_H */
  728. END_OF_FILE
  729. if test 5357 -ne `wc -c <'include/wintty.h'`; then
  730.     echo shar: \"'include/wintty.h'\" unpacked with wrong size!
  731. fi
  732. # end of 'include/wintty.h'
  733. fi
  734. if test -f 'src/exper.c' -a "${1}" != "-c" ; then 
  735.   echo shar: Will not clobber existing file \"'src/exper.c'\"
  736. else
  737. echo shar: Extracting \"'src/exper.c'\" \(4843 characters\)
  738. sed "s/^X//" >'src/exper.c' <<'END_OF_FILE'
  739. X/*    SCCS Id: @(#)exper.c    3.1    90/22/02
  740. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  741. X/* NetHack may be freely redistributed.  See license for details. */
  742. X
  743. X#include "hack.h"
  744. X
  745. X#ifdef LINT
  746. X#define    NEW_SCORING
  747. X#endif
  748. Xlong
  749. Xnewuexp(lev)
  750. Xregister unsigned lev;
  751. X{
  752. X#ifdef LINT    /* long conversion */
  753. X    return(0L * lev);
  754. X#else
  755. X    if(lev < 10) return (10L*(1L << lev));
  756. X    if(lev < 20) return (10000L*(1L << (lev-10)));
  757. X    return (10000000L*(lev-19));
  758. X#endif
  759. X}
  760. X
  761. Xint
  762. Xexperience(mtmp, nk)    /* return # of exp points for mtmp after nk killed */
  763. X    register struct    monst *mtmp;
  764. X    register int    nk;
  765. X{
  766. X    register struct permonst *ptr = mtmp->data;
  767. X    int    i, tmp, tmp2;
  768. X
  769. X    tmp = 1 + mtmp->m_lev * mtmp->m_lev;
  770. X
  771. X/*    For higher ac values, give extra experience */
  772. X    if((i = find_mac(mtmp)) < 3) tmp += (7 - i) * (i < 0) ? 2 : 1;
  773. X
  774. X/*    For very fast monsters, give extra experience */
  775. X    if(ptr->mmove >= 12) tmp += (ptr->mmove >= 18) ? 5 : 3;
  776. X
  777. X/*    For each "special" attack type give extra experience */
  778. X    for(i = 0; i < NATTK; i++) {
  779. X
  780. X        tmp2 = ptr->mattk[i].aatyp;
  781. X        if(tmp2 > AT_BUTT) {
  782. X
  783. X        if(tmp2 == AT_WEAP) tmp += 5;
  784. X        else if(tmp2 == AT_MAGC) tmp += 10;
  785. X        else tmp += 3;
  786. X        }
  787. X    }
  788. X
  789. X/*    For each "special" damage type give extra experience */
  790. X    for(i = 0; i < NATTK; i++) {
  791. X
  792. X        tmp2 = ptr->mattk[i].adtyp;
  793. X        if(tmp2 > AD_PHYS && tmp2 < AD_BLND) tmp += 2*mtmp->m_lev;
  794. X        else if((tmp2 == AD_DRLI) || (tmp2 == AD_STON)) tmp += 50;
  795. X        else if(tmp != AD_PHYS) tmp += mtmp->m_lev;
  796. X        /* extra heavy damage bonus */
  797. X        if((int)(ptr->mattk[i].damd * ptr->mattk[i].damn) > 23)
  798. X        tmp += mtmp->m_lev;
  799. X    }
  800. X
  801. X/*    For certain "extra nasty" monsters, give even more */
  802. X    if(extra_nasty(ptr)) tmp += (7*mtmp->m_lev);
  803. X    if(ptr->mlet == S_EEL) tmp += 1000;
  804. X
  805. X/*    For higher level monsters, an additional bonus is given */
  806. X    if(mtmp->m_lev > 8) tmp += 50;
  807. X
  808. X#ifdef NEW_SCORING
  809. X    /* ------- recent addition: make nr of points decrease
  810. X           when this is not the first of this kind */
  811. X    { unsigned ul = u.ulevel;
  812. X      int ml = mtmp->m_lev;
  813. X    /* points are given based on present and future level */
  814. X      if(ul < MAXULEV)
  815. X        for(tmp2 = 0; !tmp2 || ul + tmp2 <= ml; tmp2++)
  816. X        if(u.uexp + 1 + (tmp + ((tmp2 <= 0) ? 0 : 4<<(tmp2-1)))/nk
  817. X            >= newuexp(ul) )
  818. X            if(++ul == MAXULEV) break;
  819. X
  820. X      tmp2 = ml - ul -1;
  821. X      tmp = (tmp + ((tmp2 < 0) ? 0 : 4<<tmp2))/nk;
  822. X      if(tmp <= 0) tmp = 1;
  823. X    }
  824. X    /* note: ul is not necessarily the future value of u.ulevel */
  825. X    /* ------- end of recent valuation change ------- */
  826. X#endif /* NEW_SCORING /**/
  827. X
  828. X#ifdef MAIL
  829. X    /* Mail daemons put up no fight. */
  830. X    if(mtmp->data == &mons[PM_MAIL_DAEMON]) tmp = 1;
  831. X#endif
  832. X
  833. X    return(tmp);
  834. X}
  835. X
  836. Xvoid
  837. Xmore_experienced(exp, rexp)
  838. X    register int exp, rexp;
  839. X{
  840. X    u.uexp += exp;
  841. X    u.urexp += 4*exp + rexp;
  842. X    if(exp
  843. X#ifdef SCORE_ON_BOTL
  844. X       || flags.showscore
  845. X#endif
  846. X       ) flags.botl = 1;
  847. X    if(u.urexp >= ((pl_character[0] == 'W') ? 1000 : 2000))
  848. X        flags.beginner = 0;
  849. X}
  850. X
  851. Xvoid
  852. Xlosexp() {    /* hit by drain life attack */
  853. X
  854. X    register int num;
  855. X
  856. X#ifdef POLYSELF
  857. X    if(resists_drli(uasmon)) return;
  858. X#endif
  859. X
  860. X    if(u.ulevel > 1) {
  861. X        pline("Goodbye level %u.", u.ulevel--);
  862. X        /* remove intrinsic abilities */
  863. X        adjabil((int)u.ulevel+1, (int)u.ulevel);
  864. X    } else
  865. X        u.uhp = -1;
  866. X    num = newhp();
  867. X    u.uhp -= num;
  868. X    u.uhpmax -= num;
  869. X    num = rn1((int)u.ulevel/2+1, 2);        /* M. Stephenson */
  870. X    u.uen -= num;
  871. X    if (u.uen < 0)        u.uen = 0;
  872. X    u.uenmax -= num;
  873. X    if (u.uenmax < 0)    u.uenmax = 0;
  874. X    u.uexp = newuexp(u.ulevel) - 1;
  875. X    flags.botl = 1;
  876. X}
  877. X
  878. X/*
  879. X * Make experience gaining similar to AD&D(tm), whereby you can at most go
  880. X * up by one level at a time, extra expr possibly helping you along.
  881. X * After all, how much real experience does one get shooting a wand of death
  882. X * at a dragon created with a wand of polymorph??
  883. X */
  884. Xvoid
  885. Xnewexplevel() {
  886. X
  887. X    register int tmp;
  888. X
  889. X    if(u.ulevel < MAXULEV && u.uexp >= newuexp(u.ulevel)) {
  890. X
  891. X        u.ulevel++;
  892. X        if (u.uexp >= newuexp(u.ulevel)) u.uexp = newuexp(u.ulevel) - 1;
  893. X        pline("Welcome to experience level %u.", u.ulevel);
  894. X        set_uasmon();    /* set up for the new level. */
  895. X        /* give new intrinsics */
  896. X        adjabil((int)u.ulevel-1, (int)u.ulevel);
  897. X        tmp = newhp();
  898. X        u.uhpmax += tmp;
  899. X        u.uhp += tmp;
  900. X        tmp = rn1((int)ACURR(A_WIS)/2+1, 2); /* M. Stephenson */
  901. X        u.uenmax += tmp;
  902. X        u.uen += tmp;
  903. X        flags.botl = 1;
  904. X    }
  905. X}
  906. X
  907. Xvoid
  908. Xpluslvl() {
  909. X    register int num;
  910. X
  911. X    You("feel more experienced.");
  912. X    num = newhp();
  913. X    u.uhpmax += num;
  914. X    u.uhp += num;
  915. X    num = rn1((int)ACURR(A_WIS)/2+1, 2);    /* M. Stephenson */
  916. X    u.uenmax += num;
  917. X    u.uen += num;
  918. X    if(u.ulevel < MAXULEV) {
  919. X        u.uexp = newuexp(u.ulevel);
  920. X        pline("Welcome to experience level %u.", ++u.ulevel);
  921. X        adjabil((int)u.ulevel-1, (int)u.ulevel);
  922. X    }
  923. X    flags.botl = 1;
  924. X}
  925. X
  926. Xlong
  927. Xrndexp()
  928. X{
  929. X    register long minexp,maxexp;
  930. X
  931. X    if(u.ulevel == 1)
  932. X        return rn2((int)newuexp(1));
  933. X    else {
  934. X        minexp = newuexp(u.ulevel - 1);
  935. X        maxexp = newuexp(u.ulevel);
  936. X        return(minexp + rn2((int)(maxexp - minexp)));
  937. X    }
  938. X}
  939. X
  940. X/*exper.c*/
  941. END_OF_FILE
  942. if test 4843 -ne `wc -c <'src/exper.c'`; then
  943.     echo shar: \"'src/exper.c'\" unpacked with wrong size!
  944. fi
  945. # end of 'src/exper.c'
  946. fi
  947. if test -f 'sys/amiga/wbdata.c' -a "${1}" != "-c" ; then 
  948.   echo shar: Will not clobber existing file \"'sys/amiga/wbdata.c'\"
  949. else
  950. echo shar: Extracting \"'sys/amiga/wbdata.c'\" \(5137 characters\)
  951. sed "s/^X//" >'sys/amiga/wbdata.c' <<'END_OF_FILE'
  952. X/*    SCCS Id: @(#)wbdata.c     3.1    93/01/08
  953. X/* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1992, 1993.  */
  954. X/* NetHack may be freely redistributed.  See license for details. */
  955. X
  956. Xstruct IntuitionBase *IntuitionBase;
  957. Xstruct GfxBase *GfxBase;
  958. Xstruct Library *IconBase;
  959. Xstruct DiskfontBase *DiskfontBase;
  960. Xstruct Screen *scrn;
  961. Xstruct Window *oldwin;
  962. Xchar *classes = "ABCEHKPRSTVW";
  963. Xstruct TmpRas tmpras;
  964. X
  965. XDEFAULTS  defgame =
  966. X{
  967. X    PL_RANDOM,
  968. X    NULL, NULL,
  969. X};
  970. X
  971. XOPTIONS curopts[] =
  972. X{
  973. X    { 0, 1, "checkpoint", NULL, GADOCHKPOINT, },
  974. X    { 0, 1, "color", NULL, GADOCOLOR, },
  975. X    { 0, 1, "confirm", NULL, GADOCONFIRM, },
  976. X    { 0, 1, "disclose", NULL, GADODISCLOSE, },
  977. X    { 0, 0, "female", NULL, GADOFEMALE, },
  978. X    { 0, 1, "fixinv", NULL, GADOFIXINV, },
  979. X    { 0, 0, "flush", NULL, GADOFLUSH, },
  980. X    { 0, 1, "help", NULL, GADOHELP, },
  981. X    { 0, 1, "hilite_pet", NULL, GADOHILITEPET, },
  982. X    { 0, 0, "ignintr", NULL, GADOIGNINTR, },
  983. X    { 0, 1, "legacy", NULL, GADOLEGACY, },
  984. X    { 0, 0, "lit_corridor", NULL, GADOLITCORRIDOR, },
  985. X    { 0, 1, "news", NULL, GADONEWS, },
  986. X    { 0, 0, "numberpad", NULL, GADONUMBERPAD, },
  987. X    { 0, 1, "null", NULL, GADONULL, },
  988. X    { 0, 1, "pickup", NULL, GADOPICKUP, },
  989. X    { 0, 0, "rest_on_space", NULL, GADORESTONSPACE, },
  990. X    { 0, 1, "safepet", NULL, GADOSAFEPET, },
  991. X    { 0, 0, "showexp", NULL, GADOSHOWEXP, },
  992. X    { 0, 0, "showscore", NULL, GADOSHOWSCORE, },
  993. X    { 0, 1, "silent", NULL, GADOSILENT, },
  994. X    { 0, 1, "sortpack", NULL, GADOSORTPACK, },
  995. X    { 0, 1, "sound", NULL, GADOSOUND, },
  996. X    { 0, 0, "standout", NULL, GADOSTANDOUT, },
  997. X    { 0, 0, "time", NULL, GADOTIME, },
  998. X    { 0, 1, "tombstone", NULL, GADOTOMBSTONE, },
  999. X    { 0, 1, "verbose", NULL, GADOVERBOSE, },
  1000. X    { 0, 0, "asksave", NULL, GADOASKSAVE, },
  1001. X    { 0, 0, "packorder", "", GADOPACKORDER, },
  1002. X    { 0, 0, "dogname", "", GADODOGNAME, },
  1003. X    { 0, 0, "catname", "", GADOCATNAME, },
  1004. X    { 0, 0, "fruit", "", GADOFRUIT, },
  1005. X    { 0, 0, "objects", "", GADOOBJECTS, },
  1006. X    { 0, 0, NULL, NULL, -1 },
  1007. X};
  1008. X
  1009. Xchar *players[ ] =
  1010. X{
  1011. X    "Random",
  1012. X    "Archeologist",
  1013. X    "Barbarian",
  1014. X    "CaveMan",
  1015. X    "Elf",
  1016. X    "Healer",
  1017. X    "Knight",
  1018. X    "Priest",
  1019. X    "Rogue",
  1020. X    "Samurai",
  1021. X    "Tourist",
  1022. X    "Valkyrie",
  1023. X    "Wizard",
  1024. X    NULL,
  1025. X};
  1026. X
  1027. Xchar *options[ NUMIDX + 1 ] =
  1028. X{
  1029. X    "Nethack:",                /* PATH_IDX */
  1030. X    "",                    /* OPTIONS_IDX */
  1031. X    "Nethack:",                /* HACKDIR_IDX */
  1032. X    "Nethack:levels",            /* LEVELS_IDX */
  1033. X    "Nethack:save",            /* SAVE_IDX */
  1034. X    "AAA,FFF,620,B08,181,C06,23E,D00",    /* PENS_IDX */
  1035. X
  1036. X    NULL,                /* Terminating option */
  1037. X};
  1038. X
  1039. XUSHORT __chip up_renderdata[] = {
  1040. X/* Plane 0 */
  1041. X   0xfff0,
  1042. X   0x8700,
  1043. X   0x8f80,
  1044. X   0xbfe0,
  1045. X   0x8000,
  1046. X
  1047. X/* Plane 1 */
  1048. X   0x0008,
  1049. X   0x0708,
  1050. X   0x0f88,
  1051. X   0x3fe8,
  1052. X   0x7ff8,
  1053. X
  1054. X};
  1055. X
  1056. Xstruct Image up_renderimage = {
  1057. X   0, 0,
  1058. X   13, 5, 2,
  1059. X   up_renderdata,
  1060. X   3,0,
  1061. X   NULL,
  1062. X};
  1063. X
  1064. XUSHORT __chip up_selectdata[] = {
  1065. X/* Plane 0 */
  1066. X   0x0008, 0x78f8, 0x7078, 0x4018, 0xfff8,
  1067. X/* Plane 1 */
  1068. X   0xfff0, 0xf8f0, 0xf070, 0xc010, 0x0000,
  1069. X};
  1070. X
  1071. Xstruct Image up_selectimage = {
  1072. X   0, 0,
  1073. X   13, 5, 2,
  1074. X   up_selectdata,
  1075. X   3,0,
  1076. X   NULL,
  1077. X};
  1078. X
  1079. XUSHORT __chip down_renderdata[] = {
  1080. X/* Plane 0 */
  1081. X   0xfff0,
  1082. X   0xbfe0,
  1083. X   0x8f80,
  1084. X   0x8700,
  1085. X   0x8000,
  1086. X
  1087. X/* Plane 1 */
  1088. X   0x0008,
  1089. X   0x3fe8,
  1090. X   0x0f88,
  1091. X   0x0708,
  1092. X   0x7ff8,
  1093. X
  1094. X};
  1095. X
  1096. Xstruct Image down_renderimage = {
  1097. X   0, 0,
  1098. X   13, 5, 2,
  1099. X   down_renderdata,
  1100. X   3,0,
  1101. X   NULL,
  1102. X};
  1103. X
  1104. XUSHORT __chip down_selectdata[] = {
  1105. X/* Plane 0 */
  1106. X   0x0008, 0x4018, 0x7078, 0x78f8, 0x7ff8,
  1107. X/* Plane 1 */
  1108. X   0xfff0, 0xc010, 0xf070, 0xf8f0, 0x8000,
  1109. X};
  1110. X
  1111. Xstruct Image down_selectimage = {
  1112. X   0, 0,
  1113. X   13, 5, 2,
  1114. X   down_selectdata,
  1115. X   3,0,
  1116. X   NULL,
  1117. X};
  1118. X
  1119. XUSHORT __chip leftimg[] =
  1120. X{
  1121. X    0x0380, 0x0000,
  1122. X    0x0f80, 0x0000,
  1123. X    0x3fff, 0xff00,
  1124. X    0xffff, 0xff00,
  1125. X    0x3fff, 0xff00,
  1126. X    0x0f80, 0x0000,
  1127. X    0x0380, 0x0000,
  1128. X};
  1129. X
  1130. XUSHORT __chip rightimg[] =
  1131. X{
  1132. X    0x0001, 0xc000,
  1133. X    0x0001, 0xf000,
  1134. X    0xffff, 0xfc00,
  1135. X    0xffff, 0xff00,
  1136. X    0xffff, 0xfc00,
  1137. X    0x0001, 0xf000,
  1138. X    0x0001, 0xc000,
  1139. X};
  1140. X
  1141. Xstruct Image leftarrow =
  1142. X{
  1143. X    0, 0,
  1144. X    24, 7, 1,
  1145. X    leftimg,
  1146. X    2, 0,
  1147. X    NULL,
  1148. X};
  1149. X
  1150. Xstruct Image rightarrow =
  1151. X{
  1152. X    0, 0,
  1153. X    24, 7, 1,
  1154. X    rightimg,
  1155. X    2, 0,
  1156. X    NULL,
  1157. X};
  1158. X
  1159. Xstruct Image dnleftarrow =
  1160. X{
  1161. X    0, 0,
  1162. X    24, 7, 1,
  1163. X    leftimg,
  1164. X    1, 0,
  1165. X    NULL,
  1166. X};
  1167. X
  1168. Xstruct Image dnrightarrow =
  1169. X{
  1170. X    0, 0,
  1171. X    24, 7, 1,
  1172. X    rightimg,
  1173. X    1, 0,
  1174. X    NULL,
  1175. X};
  1176. X
  1177. Xstruct MsgPort
  1178. X    *dosport;
  1179. X
  1180. XPLANEPTR
  1181. X    tmprasp;
  1182. X
  1183. XGPTR
  1184. X    lastgaddown,    /* Last game gadget user selected */
  1185. X    globgptr,
  1186. X    windowgads,        /* What is currently attached to the window */
  1187. X    gamehead,        /* Pointer to active games */
  1188. X    gameavail;        /* Pointer to available allocations */
  1189. X
  1190. Xint
  1191. X    wbopen = 0,        /* Is workbench open? */
  1192. X    shutdown = 0,    /* Close down workbench during game option */
  1193. X    errup = 0,        /* Error message on line */
  1194. X    cols = 0,        /* Total columns */
  1195. X    vcols = 0,        /* Columns visible */
  1196. X    scol = -1,        /* Starting column */
  1197. X    height,        /* Height of window */
  1198. X    width,        /* Width of window */
  1199. X    curcol = 0,        /* Offset to first display column */
  1200. X    active_count;    /* Number of games active */
  1201. X
  1202. Xchar
  1203. X    defgname[100] = "WBDefaults";
  1204. X
  1205. Xflag
  1206. X    quit=0;        /* time to cleanup */
  1207. X
  1208. Xstruct Window *win;    /* the window we create */
  1209. END_OF_FILE
  1210. if test 5137 -ne `wc -c <'sys/amiga/wbdata.c'`; then
  1211.     echo shar: \"'sys/amiga/wbdata.c'\" unpacked with wrong size!
  1212. fi
  1213. # end of 'sys/amiga/wbdata.c'
  1214. fi
  1215. if test -f 'sys/amiga/wbdefs.h' -a "${1}" != "-c" ; then 
  1216.   echo shar: Will not clobber existing file \"'sys/amiga/wbdefs.h'\"
  1217. else
  1218. echo shar: Extracting \"'sys/amiga/wbdefs.h'\" \(5037 characters\)
  1219. sed "s/^X//" >'sys/amiga/wbdefs.h' <<'END_OF_FILE'
  1220. X/*    SCCS Id: @(#)wbdefs.h     3.1    93/01/08
  1221. X/* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1992, 1993.  */
  1222. X/* NetHack may be freely redistributed.  See license for details. */
  1223. X
  1224. X#include <exec/types.h>
  1225. X#include <exec/memory.h>
  1226. X#include <graphics/gfxmacros.h>
  1227. X#include <graphics/gfxbase.h>
  1228. X#include <workbench/workbench.h>
  1229. X#include <workbench/startup.h>
  1230. X#include <intuition/intuition.h>
  1231. X#include <intuition/intuitionbase.h>
  1232. X
  1233. X#ifdef AZTEC_C
  1234. X#include <libraries/dosextens.h>
  1235. X#include <functions.h>
  1236. X#else
  1237. X#include <proto/exec.h>
  1238. X#include <proto/dos.h>
  1239. X#include <proto/intuition.h>
  1240. X#include <proto/icon.h>
  1241. X#include <proto/graphics.h>
  1242. X#endif
  1243. X
  1244. X#include <stdlib.h>
  1245. X#include <stdarg.h>
  1246. X#include <string.h>
  1247. X#include <ctype.h>
  1248. X#include <stdio.h>
  1249. X
  1250. X#ifdef  IDCMP_CLOSEWINDOW
  1251. X#define INTUI_NEW_LOOK  1
  1252. X#endif
  1253. X
  1254. X#define R_DISK        1   /* Refresh reasons */
  1255. X#define R_WINDOW    2
  1256. X#define R_SCROLL    3
  1257. X
  1258. X#define PLAYERMENU    0
  1259. X
  1260. X#define MENU_PROJECT    0   /* so we can shuffle them around easily */
  1261. X#define ITEM_HELP    0
  1262. X#define ITEM_ABOUT    1
  1263. X#define ITEM_SCORES    2
  1264. X#define ITEM_RECOVER    3
  1265. X/*#define ITEM_EDNEW        4*/
  1266. X#define ITEM_EDDEF    4
  1267. X#define ITEM_CONFIG    5
  1268. X#define ITEM_QUIT    6
  1269. X
  1270. X#define MENU_GAME    1
  1271. X#define ITEM_INFO    0
  1272. X#define ITEM_SETCOMMENT    1
  1273. X#define ITEM_SETOPT    2
  1274. X#define ITEM_COPYOPT    3
  1275. X#define ITEM_DISCARD    4
  1276. X#define ITEM_RENAME    5
  1277. X
  1278. X#define GADSCROLL    1   /* The scroll bar */
  1279. X#define GADNEWGAME    2   /* New Game requested */
  1280. X
  1281. X#define GADSCRLUP    3   /* Scroll Up Gadget */
  1282. X#define GADSCRLDOWN    4   /* Scroll Down Gadget */
  1283. X#define GADINFOSCRL    5   /* The scroll bar */
  1284. X
  1285. X#define GADQUESTYES    6
  1286. X#define GADQUESTNO    7
  1287. X
  1288. X#define GADCOMSTR    8
  1289. X
  1290. X#define GADCHARNAME    9
  1291. X#define GADOUTFILE    10
  1292. X#define GADCATNAME    11
  1293. X#define GADDOGNAME    12
  1294. X#define GADDEFLOAD    13
  1295. X#define GADDEFSAVE    14
  1296. X
  1297. X#define GADSTRSAVE    15
  1298. X#define GADSTRLEVELS    16
  1299. X#define GADSTRPATH    17
  1300. X#define GADSTRPENS    18
  1301. X#define GADSTRHACKDIR    19
  1302. X#define GADEDOPTIONS    20
  1303. X#define GADCONFSAVE    21
  1304. X#define GADCONFLOAD    22
  1305. X#define GADCONFNAME    23
  1306. X#define GADTOOLUP    24
  1307. X#define GADTOOLDOWN    25
  1308. X#define GADADDTOOL    26
  1309. X#define GADDELTOOL    27
  1310. X#define GADTOOLTYPES    28
  1311. X#define GADSTRCANCEL    29
  1312. X#define GADHELPOKAY    30
  1313. X#define GADHELPFRWD    31
  1314. X#define GADHELPBKWD    32
  1315. X#define GADEDDEF    33
  1316. X
  1317. X#define GADRESTDIR    34
  1318. X#define GADRESTOLD    35
  1319. X#define GADRESTNEW    36
  1320. X#define GADRESTCAN    37
  1321. X#define GADRESTOKAY    38
  1322. X
  1323. X/*
  1324. X *  Option gadgets GadgetID's
  1325. X */
  1326. X#define GADOCOLOR    101
  1327. X#define GADOCONFIRM    102
  1328. X#define GADODISCLOSE    103
  1329. X#define GADOFIXINV    104
  1330. X#define GADONULL    105
  1331. X#define GADOTIME    106
  1332. X#define GADONEWS    107
  1333. X#define GADOHELP    108
  1334. X#define GADOFLUSH    109
  1335. X#define GADORESTONSPACE    110
  1336. X#define GADOPICKUP    111
  1337. X#define GADOSOUND    112
  1338. X#define GADONUMBERPAD    113
  1339. X#define GADOSAFEPET    114
  1340. X#define GADOSILENT    115
  1341. X#define GADOTOMBSTONE    116
  1342. X#define GADOVERBOSE    117
  1343. X#define GADOSTANDOUT    118
  1344. X#define GADOSORTPACK    119
  1345. X#define GADOFEMALE    120
  1346. X#define GADOIGNINTR    121
  1347. X#define GADOPACKORDER    122
  1348. X#define GADODOGNAME    123
  1349. X#define GADOCATNAME    124
  1350. X#define GADOFRUIT    125
  1351. X#define GADOOBJECTS    126
  1352. X#define GADOASKSAVE    127
  1353. X#define GADOCANCEL    128
  1354. X#define GADOOKAY    129
  1355. X#define GADOCHKPOINT    130
  1356. X#define GADOHILITEPET    131
  1357. X#define GADOLEGACY    132
  1358. X#define GADOLITCORRIDOR    133
  1359. X#define GADOSHOWEXP    134
  1360. X#define GADOSHOWSCORE    135
  1361. X
  1362. X/* Definition of workbench size layout */
  1363. X
  1364. X#define ORIGINX ( win->BorderLeft + 5 )
  1365. X#define ORIGINY ( win->BorderTop + Message.Height + 5 )
  1366. X#define CORNERX ( win->Width - win->BorderRight )
  1367. X#define CORNERY ( win->Height - win->BorderBottom )
  1368. X
  1369. X/* String buffer in String Gadget */
  1370. X
  1371. X#define Sbuff(gd)    (((struct StringInfo*)((gd)->SpecialInfo))->Buffer)
  1372. X
  1373. X/* The string gadgets' buffers */
  1374. X
  1375. X#define StrPath        (Sbuff(&Conf_StrPath))
  1376. X#define StrOptions    (Sbuff(&Conf_StrOptions))
  1377. X#define StrHackdir    (Sbuff(&Conf_StrHackdir))
  1378. X#define StrPens        (Sbuff(&Conf_StrPens))
  1379. X#define StrLevels    (Sbuff(&Conf_StrLevels))
  1380. X#define StrSave        (Sbuff(&Conf_StrSave))
  1381. X#define NetHackCnf    (Sbuff(&Conf_ConfigName))
  1382. X
  1383. X#define RstDir        (Sbuff(&Rst_RestDir))
  1384. X#define RstOld        (Sbuff(&Rst_RestOld))
  1385. X#define RstNew        (Sbuff(&Rst_RestNew))
  1386. X
  1387. X#define DefPlayerName    (Sbuff(&Defs_PlayerName))
  1388. X#define DefOutFile    (Sbuff(&Defs_DefaultName))
  1389. X
  1390. X#define StrString    (Sbuff(&Str_String))
  1391. X
  1392. X#define StrTools    (Sbuff(&Info_ToolTypes))
  1393. X
  1394. X#define GAMEIMAGE    "HackExe:NetHack"
  1395. X#define GAMESTACK    50000
  1396. X
  1397. X#define PATH_IDX    0
  1398. X#define OPTIONS_IDX    1
  1399. X#define HACKDIR_IDX    2
  1400. X#define LEVELS_IDX    3
  1401. X#define SAVE_IDX    4
  1402. X#define PENS_IDX    5
  1403. X
  1404. X#define NUMIDX        6
  1405. X
  1406. X#define PL_RANDOM    0
  1407. X#define PL_ARCHEOLOGIST    1
  1408. X#define PL_BARBARIAN    2
  1409. X#define PL_CAVEMAN    3
  1410. X#define PL_ELF        4
  1411. X#define PL_HEALER    5
  1412. X#define PL_KNIGHT    6
  1413. X#define PL_PRIEST    7
  1414. X#define PL_ROGUE    8
  1415. X#define PL_SAMURAI    9
  1416. X#define PL_TOURIST    10
  1417. X#define PL_VALKYRIE    11
  1418. X#define PL_WIZARD    12
  1419. X
  1420. X#define MENUITEMNO( menu, itm, sitm ) FULLMENUNUM( menu, itm, sitm )
  1421. X#define GADWIDTH( gad )     max((gad)->Width, \
  1422. X            strlen((gad)->GadgetText->IText) * win->RPort->TxWidth)
  1423. X
  1424. X/* Horizontal space between gadgets */
  1425. X#define GADINCX        10
  1426. X
  1427. X/* Vertical space between gadgets */
  1428. X#define GADINCY        (win->RPort->TxHeight + 1)
  1429. X
  1430. X#define NO_FLASH    0
  1431. X#define FLASH        1
  1432. X
  1433. X#define GAME_FROM_DEFAULT   0
  1434. X#define GAME_FROM_INFO      1
  1435. END_OF_FILE
  1436. if test 5037 -ne `wc -c <'sys/amiga/wbdefs.h'`; then
  1437.     echo shar: \"'sys/amiga/wbdefs.h'\" unpacked with wrong size!
  1438. fi
  1439. # end of 'sys/amiga/wbdefs.h'
  1440. fi
  1441. if test -f 'sys/mac/NHrez.hqx' -a "${1}" != "-c" ; then 
  1442.   echo shar: Will not clobber existing file \"'sys/mac/NHrez.hqx'\"
  1443. else
  1444. echo shar: Extracting \"'sys/mac/NHrez.hqx'\" \(4948 characters\)
  1445. sed "s/^X//" >'sys/mac/NHrez.hqx' <<'END_OF_FILE'
  1446. X(This file must be converted with BinHex 4.0)
  1447. X:#8jPG%KKBfXZFJ"849K869"6)!%!!!!-8`!!!Dc!(%P13da94%8J)NjPG%KKBfX
  1448. XZFR0bBb)l#3N*,bSJ689195`J68*"8L`J38a59#`J9dP14#`J5801)b`JCA4M)#S
  1449. X[$8P13da94%8J)P0[G@jNFbjbFh*M)MX*#3N[+L"*ER0dFR9YC@jdFb"KFb"cEQ3
  1450. XJFQ9cEh9bBf9c)#S[$3dMD@jME(9NC5!L9(P`CA-ZFL)0)fPZBfaeC'8J)P0jFe4
  1451. XjF'9c,R)L$50TEQ0XG@4P)#*#B@aXEfpZ9(P`CA-ZFL)*)#!J)#mU)%eKBb"bCA0
  1452. X[GA*MC5"dHA"P)'4PCQPZDA4TEfjc)#S[$3ebC@&N)#G849K8*b!S-6!`-#`L5'9
  1453. XXF#)T)!NJ*#46D'9XE#JL4'&d)LNJ)NKPE(!L1`ebC@&N)#G849K8*b!S-6!`-5`
  1454. XL9fPk5'9XF#)T)#3N8fKPE'`S)N4KG#)T)#*ADAT)C@a`)MX0FQ9KC#!R9%9B9#F
  1455. XJ+$%`-$)X)Np`G%KPE(!L+5!N*&0SC@aX+#*%BA3L+5!L6h"d5'9XF#)l$5mU$A*
  1456. XPB@3J*e4&@&3R)#Ja-$!c,#*$E@4)C@a`)LNJ*#46D'9XE#JL4'&d)LNJ)N0YC%K
  1457. XPE(!L1`dU,`ebC@&N)#G849K8*b!S-6!`0#`L6@&M5'9XF#)T)#3N8fKPE'`S)Ne
  1458. XKBd4TFL)T)#*0B@0)C@a`)MX0$A*PB@3J*e4&@&3R)#Ja-$!e,#*)5#)T)!NJ*#4
  1459. X6D'9XE#JL4'&d)LNJ)NK))MX0FQ9KC#!R9%9B9#FJ+$%`-$BX)NKTFh4[FRNL+5!
  1460. XN*&0SC@aX+#*%BA3L+5!L5'PcG'pbH5)l$A*PB@3J*e4&@&3R)#Ja-$!h,#*-D@0
  1461. XPER0P)LNJ*#46D'9XE#JL4'&d)LNJ)NaTBf9ZFf8L1`d0FQ9KC#!R9%9B9#FJ+$%
  1462. X`-$JX)NjPGh-L+3NJ*#46D'9XE#JL6@&M4'Pb)LNJ)NjPGh-L1`ebC@&N)#G849K
  1463. X8*b!S-6!`15`L6h"dD@pZFb)T)#3N8fKPE'`S)NpLDN4TFL)T)#*2F(4TEfjc)MX
  1464. X0$5mU$A*PB@3J*e4&@&3R)#Ja-$%`,#*5G@e[FR-L+5!J*#46D'9XE#JL6f*U4'P
  1465. Xb)LNJ)P*eE@pbFb)l$A*PB@3J*e4&@&3R)#Ja-$%a,#*%BA4K)LNJ)#!J*#46D'9
  1466. XXE#JL6f*U4'Pb)LNJ)N4KG'%L1`dU,`d0)f4PCQPZC5"V8fPREQ&dGA*P)#GZD$-
  1467. Xa*`N*,bSJ3A"`E'PMBA4TEfiJFfPREQ&dGA*P,#"bC@GTFh4PFQ9N)(GTG'JJ4&4
  1468. X6)#S[$3dMC'9QD@jP)'Y@CA*cD@pZ)#)c,M'R-5)*#5mU)%0SB@jRC5"SCA*P)'&
  1469. XZC#"LC@a[Gb!U,`d0FQ9cEh9bBf8J*hCPFR-R)#Ja+5"l$3N`H$!c,#!`H$!a,#"
  1470. XLCA4K,#!`H$!a,#"fCA*98b`*,bSJ9Q9bFfP[ELpcG@*fCA*cD@pZ,hYKE("SBAa
  1471. XLCA4KI(*PE'9KFf9p,f0[G@jdFRNJ+Lm0#@Y@CA*cD@pZ,!d*DeCPFR0TEfiJ)L#
  1472. XT)$%j1$8X)$%j1$BX)$%j1$FX)$%j1$JX)$%j1$NX)$%j16!X)$%j16%X)$%j16)
  1473. XJBRNJ8h4TBfKdD@jR)%eKG'KPE@&dDA0MD#"$C@jdFR9Y)'&ZC#"0,L"6G'9`D'9
  1474. XZFfpZ,L)0I6X0$A4jF'8JDe0TCfjKG(9bC5"KFb!R8e45)#Fl$A*PFfpeFQ0P)'Y
  1475. X6D@GZBA4eFQ8J+$!XF(9bCf9KBQaP+5!0)#"l)#*1CA4)B@0V)(BL)'Y@CA*cD@p
  1476. XZ)#)J)L"p1`d0FQ9cEh9bBf8J*dC548BR)#Ja-MJXF(9bCf9KBQaP+5!0Hb!R39"
  1477. X36#FX)$!X)#)L)(dl$3ebCA0[GA*MC5!R4P*&4LFJ+$%b15a`GA*RC@&LE'8T)!e
  1478. Xl)#G639C&*b`J-5`J)L)JI6X0$A*PFfpeFQ0P)#G'8N9'*b!S-6-`,("eFQGPB@*
  1479. XXC5NJ$AXJ*e"548BR,#!b,#!L)L"p1`d0FQ9cEh9bBf8J*d*14%`R)#Ja-MJXF(9
  1480. XbCf9KBQaP+5!0Hb!J)'Y6D@GZBA4eFQ8X$3N`,!d*Hb!R5801)bFX$3N*Hb!`,#!
  1481. Xa-$!`,!d*#5!J-5`J-6!`-5`0#3NJ)$)X)$%`-$)0#3Pp,!d*#3d*#5G'8N9'*b`
  1482. X0#3Pl)$!X)$%b1#`0#3NJ)$%X)$%b15`0#3NJ)$)X)$%c-!d*#Ad0#Ad0I6X0$A*
  1483. XPFfpeFQ0P)#G659T&*b!S,6%T)(X0#A*PFf9bGQ9N,!d*B@0MCA"d8h9cF'9ZC&*
  1484. XPFh9YC89fC@jdFb`0#A*PFf9bGQ9N,!d*Bf&Z3Q&MDfGbEh9ZC#`0#@4[CA0"Bh4
  1485. XTGQ&dC8pZ4NG6GfPdBfJX$3PLB@0VCh*[G@jN3@jN4QpbC@GbEh9ZC#`0#@4[ER4
  1486. X(CA4'FQpZG%0XD@0VFb`0#@PREQpbC8&`F%4TC@4&GQ9ZG(-X$3PTFc-b3QPd3fp
  1487. XYF'&dD@*XC5`0#@j[G%KTCfK-CACPE%9fC@jd3AGKFQ8X$3P[EQaj6'pMB@a)6%9
  1488. XfC@jdFb`0#@j[G&0dBA4TEfjPFRP"Gf&bC5`0#@4[ER49Ff98CAKd4@4TG&0PFRC
  1489. XTBf9c,!d*FQ9cCA*fC@3X$3PbCA0PFRCPC#`0#A*PFf9bGQ9N,!d*-6J`-#!U)$%
  1490. X`-M3X#3N[+L"bC@0[E@ePEQ4PC#!U,`d*-6-`-#!U)$%`-M3*#3N[+L"KBR0[E(9
  1491. XdC5"YD@jTEA9Y,#"dEb"LC5"NCA4PFQeTEQ9N)#S[$Adl$3d[+L"6HA0dC@dJ0b"
  1492. XSC@a`)'*KE'a[EfiJD@jQEh*YBA4TEfiJ+Lm0FQ9cEh9bBf8J*fKQC()R)#JY06B
  1493. Xj0L`JF(9bCf9KBQaP+5"l)!dJ)#!J)%KPE("0Ch*@CA*cD@pZ,#"SE84PCQ&eE(4
  1494. X2F(4TEfjc,#!`,#!`,#![+L"SC@&NCA)JD@jQEh*YBA4TEfiJ+LmJ$3NJ)#!JHb"
  1495. X)69088P*PFdPdC@dJHb![+L"eFf8J*e088L!R)(*PFfpeFQ0P)$)`-$!J+LmJ-M!
  1496. X`-#"p)!d*I5!0I6X0$A*PFfpeFQ0P)#G69&)J*b!S-M!`-#`JF(9bCf9KBQaP+5"
  1497. Xl)#mU)%KPE(!JE@9cFf&RC5"QEh)JBA"`)'PMEfiJ+Lm0)#!J)NjPG%KKBfXJGL)
  1498. XJDeCPFR0TEfiJ)PaZ9'KTFb"TFb"dD'8JCQ&YEh9c)%4eEQGPEfjc)'&ZC#"%FQ&
  1499. XREfjcULeXD@YP)'GKE@8JF'pbG'9N)(4[)(4SC5"0B@0TER4[FfJZ)L!0I6X0$A*
  1500. XPFfpeFQ0P)#G69&)J*bJY-6Bc16BX)("eFQGPB@*XC5NJH`N[+L"AD@aX)'*P)'0
  1501. X[F'PPC#"dEb"dD'8JFf&fC@3JCQPXC5iJ+Lm0#5*1CA4)B@0V)JN*#3N*#3N[+L"
  1502. X6C@8J5@jcD@4P)%eKBb"@55`JF'&RC5!j,6)a,JNJ+Lm0I6X0$3d[+L"0B@-JCA*
  1503. XbEh)JC'9MEf4PFb!k)$)`-$!J,5"PFR)M)'C[FL"MEfeYEfiJCA*bEh*c,L""C'3
  1504. XJH@peFL"QBAC[FQPdCA-JBQ9XEhFJ+Lm0$A*PFfpeFQ0P)#G69&)J*b!S-M!c0#N
  1505. XJHb!LG'KP)'4TFfXJDA-JCR9XE#)J)(dl$A*PFfpeFQ0P)#G69&)J*b!S-M!c0LN
  1506. XJHb!LG'KPFQ8JGf&c)'&Z)%N[6b"PFR*[FL)J)(dl$A*PFfpeFQ0P)#G69&)J*b!
  1507. XS-M!d-bNJHb!LB5"QD@aP)'Pc)'eTFh0TEQFL)#"p1`ebCA0[GA*MC5!R8e45)#F
  1508. XJ+$)`0$3T)(XJ)R4SC5"NDA0V)'Pc)(GbDA4P,A"bEh4PBh4PC#)J)(dl$A*PFfp
  1509. XeFQ0P)#G69&)J*b!S-M!d0bNJHb!LG'KP)'CTE'8JDA-JBR9cH5)J)(dl$A*PFfp
  1510. XeFQ0P)#G69&)J*b!S-M!d15NJHb!LG'KP)'CTE'8JDA-JB@abC@&NH5"[F'9Z)L!
  1511. XJI6X0FQ9cEh9bBf8J*e088L!R)#Jb-6!i+5"l)#*dD'9bC5"TFb"ZEh3JC@j[G@G
  1512. XS)'ePE@pbH5)J)(dl$A*PFfpeFQ0P)#G69&)J*b!S-M%j-LNJHb!LB5"bCA0[GA*
  1513. XMC5"TFb"YDA0cD@jR)L!JI6X0i9B!!!%!!!!"EJ!!!'i!!!!q6Pj1GBKRCA4dFQ&
  1514. XMD`!!!!3!!!d!"`CeG(*KBfX!"3%*6Q9d5'&MDbjb!J!!!&4&@&408&-J!3!!!!I
  1515. XX!!!!!!!!9%9B9%e38b!"!!!!"q`!!!!!!!!!!!!!!!!!!!!!!!#RL'6$!!!-8`!
  1516. X!!Da*6NF*-MBe$50NC@CTEQ8*8d05Ad&06N9658%*-MBf$50NC@CTEQ8*8d05AdC
  1517. X*8N8*-MBh$50NC@CTEQ8*8d05Ae"96NP65%e&6P3*-MBi$50NC@CTEQ8*8d05Ad0
  1518. X)39*(58j(#6)f13dMC'9QD@jP#90$8Pp#6%&15ep339"&8JNb!!!!5!!*6@pZB@0
  1519. X[!!"[G#"PH'9MGA4P)'%JC'PbC@0dEh*j,#!!"J!%!$`!*!'0!Md!2!!N!Bd#2DH
  1520. X*M3X!!!+L!!!$%3!!!M-"!!!!!"i!2!!N!Bd#23!m!#3"M3)p!!!#-`!!!!!!!!!
  1521. X!!!!!!!%!!!!"EJ!!!'i!!!!q!(ppb"-D!!!!(!!q!!"08&05!!%!#J2Yrrm!!!!
  1522. X!!!!!!!2`rrm!!!"-!)&j-)9G:
  1523. END_OF_FILE
  1524. if test 4948 -ne `wc -c <'sys/mac/NHrez.hqx'`; then
  1525.     echo shar: \"'sys/mac/NHrez.hqx'\" unpacked with wrong size!
  1526. fi
  1527. # end of 'sys/mac/NHrez.hqx'
  1528. fi
  1529. if test -f 'sys/msdos/exesmurf.doc' -a "${1}" != "-c" ; then 
  1530.   echo shar: Will not clobber existing file \"'sys/msdos/exesmurf.doc'\"
  1531. else
  1532. echo shar: Extracting \"'sys/msdos/exesmurf.doc'\" \(5020 characters\)
  1533. sed "s/^X//" >'sys/msdos/exesmurf.doc' <<'END_OF_FILE'
  1534. X    SCCS Id: @(#)exesmurf.doc     3.1        91/01/29
  1535. X        Copyright (c) Pierre Martineau and Stephen Spackman 1991, 1992, 1993.
  1536. X        NetHack may be freely redistributed.  See license for details.
  1537. X             ============================
  1538. X             PC NetHack Support Utilities
  1539. X             ============================
  1540. X             Last revision: 1991January29
  1541. X
  1542. XThis file contains documentation for the NetHack MS-DOS support
  1543. Xutility EXESMURF.EXE.  This utility examines and modifies the load
  1544. Xparameters of an .EXE file and can be used to split .OVL files off a
  1545. Xmonolithic overlaid executable using ovlmgr.
  1546. X
  1547. XEXESMURF
  1548. X--------
  1549. Xexesmurf FILENAME[.EXT] /v
  1550. Xexesmurf FILENAME[.EXT] /minN
  1551. Xexesmurf FILENAME[.EXT] /maxN
  1552. Xexesmurf FILENAME[.EXT] /l
  1553. Xexesmurf FILENAME[.EXT] N... [/pPATTERN]
  1554. X
  1555. XThe programme exesmurf is basically a reimplementation of Microsoft's
  1556. XEXEMOD utility.  However, this incarnation is one that is
  1557. X"overlay-aware" (as they say).  It will provide the user with
  1558. Xinformation about the executable and its overlays, and allow you to
  1559. Xmodify the executable's parameters and overlay locations.
  1560. X
  1561. XThis program is made available for all users who were not graced with a
  1562. Xrelease of EXEMOD in their Microsoft product, or who need the
  1563. Xadditional functionality it provides.
  1564. X
  1565. X/v.
  1566. XIf exesmurf is invoked with a filename as argument, optionally
  1567. Xfollowed by a /v, the filename's exeheader is listed for your viewing
  1568. Xpleasure, along with the headers of any Microsoft-format overlays the
  1569. Xfile may contain.  The listing is verbose; if there are many overlays
  1570. Xyou will want to redirect the output.  Note that the redundancy in the
  1571. Xoutput listing largely reflects redundancy in the file structure.
  1572. X
  1573. X/minN, /maxN, /stackN.
  1574. XExesmurf may also be used to modify the "minalloc", "maxalloc" and
  1575. X"stack" allocation parameters of the executable file.  This can be
  1576. Xaccomplished with the /min, /max, and /stack flags respectively.  Any
  1577. Xarguments to these flags should be *immediately* followed by a decimal
  1578. Xnumber N.  Note that this is inconsistent with the arguments to EXEMOD
  1579. Xwhich takes hex numbers, and *needs* a space between the flag and the
  1580. Xnumber.
  1581. X
  1582. X/l.
  1583. XThe /l option requests a version of the /v listing (see above) in
  1584. Xwhich the information about overlays is very much compressed; only
  1585. Xtheir decimal file and load sizes are given, in a multi-column format.
  1586. XThe resulting display will generally fit on a single screen.  This
  1587. Xturns out to be very useful when contemplating appropriate parameters
  1588. Xfor the overlay splitting operation described next.
  1589. X
  1590. XN... [/pPATTERN].
  1591. XThe overlay-unpacking function of exesmurf is invoked by following the
  1592. Xfilename argument by a sequence of decimal numbers.  Each of these
  1593. Xnumbers is an overlay number at which a new external overlay file is
  1594. Xto be started.  The main executable file will keep its old name after
  1595. Xthe overlays have been unloaded; the original input file will be
  1596. Xretained, with its extension changed to .BAK.  By default, the output
  1597. Xfiles will be derived from the input file name by appending a
  1598. Xdiscriminating character (in sequence, 0, 1, ..., 9, a, b, ..., z) to
  1599. Xthe basename and changing the extension to .OVL; but if the basename
  1600. Xis a full 8 characters long, the discriminating character will replace
  1601. Xthe last character instead.  This default is chosen for compatibility
  1602. Xwith ovlmgr.  The default may be overridden with the /p option, which
  1603. Xspecifies a file PATTERN - a file name, possibly complete with
  1604. Xextension, containing one or more ? characters (* is not allowed),
  1605. Xwhich will be replaced by discriminating characters.  If there is
  1606. Xexactly one questionmark, it will be replaced by a digit or letter in
  1607. Xthe sequence described above, but if more than one questionmark
  1608. Xappears a decimal numbering scheme is used instead.
  1609. X    Note that the numeric arguments are overlay numbers, not
  1610. Xindices, and they indicate the starting overlays of files.  This
  1611. Xpermits us to manipulate files in which (for some reason) the overlays
  1612. Xare not stored in ascending order, but it does mean that if a
  1613. Xmentioned overlay does not exist in the original file, no new overlay
  1614. Xfile will be started.  This is a realistic risk, since the Microsoft
  1615. Xlinker does not seem to generate overlays at all if there is no actual
  1616. Xcode generated into the segments in question.
  1617. X    Note further that this operation can be reversed with the DOS
  1618. Xcopy/b operation, always supposing that it works as documented in your
  1619. Xrelease of the operating system: the overlays are simply moved
  1620. Xpage-by-page to the external files.
  1621. X    No guarantees are made as to how this programme will behave if
  1622. Xthere is debug information or other strangeness stored after the last
  1623. Xoverlay in the file.
  1624. X
  1625. XWhenever exesmurf is invoked, the extension .EXE is assumed for the
  1626. Xfile if no extension is given.  Other extensions are probably only
  1627. Xmeaningful for examining overlay files.
  1628. X----------------------------------------------------------------------
  1629. XStephen P Spackman                       stephen@estragon.uchicago.edu
  1630. X----------------------------------------------------------------------
  1631. END_OF_FILE
  1632. if test 5020 -ne `wc -c <'sys/msdos/exesmurf.doc'`; then
  1633.     echo shar: \"'sys/msdos/exesmurf.doc'\" unpacked with wrong size!
  1634. fi
  1635. # end of 'sys/msdos/exesmurf.doc'
  1636. fi
  1637. if test -f 'win/X11/Window.c' -a "${1}" != "-c" ; then 
  1638.   echo shar: Will not clobber existing file \"'win/X11/Window.c'\"
  1639. else
  1640. echo shar: Extracting \"'win/X11/Window.c'\" \(5183 characters\)
  1641. sed "s/^X//" >'win/X11/Window.c' <<'END_OF_FILE'
  1642. X/*    SCCS Id: @(#)Window.c    3.1    92/3/7
  1643. X/* Copyright (c) Dean Luick, 1992                  */
  1644. X/* NetHack may be freely redistributed.  See license for details. */
  1645. X
  1646. X/*
  1647. X * Data structures and support routines for the Window widget.  This is a
  1648. X * drawing canvas with 16 colors and one font.
  1649. X */
  1650. X#include <X11/IntrinsicP.h>
  1651. X#include <X11/StringDefs.h>
  1652. X#include "WindowP.h"
  1653. X
  1654. Xstatic XtResource resources[] = {
  1655. X#define offset(field) XtOffset(WindowWidget, window.field)
  1656. X    /* {name, class, type, size, offset, default_type, default_addr}, */
  1657. X    { XtNrows, XtCRows, XtRDimension, sizeof(Dimension),
  1658. X      offset(rows), XtRImmediate, (XtPointer) 21},
  1659. X    { XtNcolumns, XtCColumns, XtRDimension, sizeof(Dimension),
  1660. X      offset(columns), XtRImmediate, (XtPointer) 80},
  1661. X    { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
  1662. X      offset(foreground), XtRString, XtDefaultForeground },
  1663. X
  1664. X    { XtNblack, XtCColor, XtRPixel, sizeof(Pixel),
  1665. X      offset(black), XtRString, "black"},
  1666. X    { XtNred, XtCColor, XtRPixel, sizeof(Pixel),
  1667. X      offset(red), XtRString, "red" },
  1668. X    { XtNgreen, XtCColor, XtRPixel, sizeof(Pixel),
  1669. X      offset(green), XtRString, "pale green" },
  1670. X    { XtNbrown, XtCColor, XtRPixel, sizeof(Pixel),
  1671. X      offset(brown), XtRString, "brown" },
  1672. X    { XtNblue, XtCColor, XtRPixel, sizeof(Pixel),
  1673. X      offset(blue), XtRString, "blue" },
  1674. X    { XtNmagenta, XtCColor, XtRPixel, sizeof(Pixel),
  1675. X      offset(magenta), XtRString, "magenta" },
  1676. X    { XtNcyan, XtCColor, XtRPixel, sizeof(Pixel),
  1677. X      offset(cyan), XtRString, "light cyan" },
  1678. X    { XtNgray, XtCColor, XtRPixel, sizeof(Pixel),
  1679. X      offset(gray), XtRString, "gray" },
  1680. X    { XtNorange, XtCColor, XtRPixel, sizeof(Pixel),
  1681. X      offset(orange), XtRString, "orange" },
  1682. X    { XtNbright_green, XtCColor, XtRPixel, sizeof(Pixel),
  1683. X      offset(bright_green), XtRString, "green" },
  1684. X    { XtNyellow, XtCColor, XtRPixel, sizeof(Pixel),
  1685. X      offset(yellow), XtRString, "yellow" },
  1686. X    { XtNbright_blue, XtCColor, XtRPixel, sizeof(Pixel),
  1687. X      offset(bright_blue), XtRString, "royal blue" },
  1688. X    { XtNbright_magenta, XtCColor, XtRPixel, sizeof(Pixel),
  1689. X      offset(bright_magenta), XtRString, "violet" },
  1690. X    { XtNbright_cyan, XtCColor, XtRPixel, sizeof(Pixel),
  1691. X      offset(bright_cyan), XtRString, "cyan" },
  1692. X    { XtNwhite, XtCColor, XtRPixel, sizeof(Pixel),
  1693. X      offset(white), XtRString, "white" },
  1694. X
  1695. X    { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
  1696. X      offset(font), XtRString, XtDefaultFont },
  1697. X    { XtNexposeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
  1698. X      offset(expose_callback), XtRCallback, NULL },
  1699. X    { XtNcallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
  1700. X      offset(input_callback), XtRCallback, NULL },
  1701. X    { XtNresizeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
  1702. X      offset(resize_callback), XtRCallback, NULL },
  1703. X#undef offset
  1704. X};
  1705. X
  1706. X/* ARGSUSED */
  1707. Xstatic void InputAction(w, event, params, num_params)
  1708. X    Widget   w;
  1709. X    XEvent   *event;
  1710. X    String   *params;        /* unused */
  1711. X    Cardinal *num_params;    /* unused */
  1712. X{
  1713. X    XtCallCallbacks(w, XtNcallback, (caddr_t) event);
  1714. X}
  1715. X
  1716. X/* ARGSUSED */
  1717. Xstatic void no_op(w, event, params, num_params)
  1718. X    Widget   w;            /* unused */
  1719. X    XEvent   *event;        /* unused */
  1720. X    String   *params;        /* unused */
  1721. X    Cardinal *num_params;    /* unused */
  1722. X{
  1723. X}
  1724. X
  1725. Xstatic XtActionsRec actions[] =
  1726. X{
  1727. X    {"input",    InputAction},
  1728. X    {"no-op",    no_op},
  1729. X};
  1730. X
  1731. Xstatic char translations[] =
  1732. X"<Key>:        input()    \n\
  1733. X <BtnDown>:    input() \
  1734. X";
  1735. X
  1736. X/* ARGSUSED */
  1737. Xstatic void Redisplay(w, event, region)
  1738. X    Widget w;
  1739. X    XEvent *event;    /* unused */
  1740. X    Region *region;
  1741. X{
  1742. X    XtCallCallbacks(w, XtNexposeCallback, (caddr_t) region);
  1743. X}
  1744. X
  1745. X/* ARGSUSED */
  1746. Xstatic void Resize(w)
  1747. X    Widget w;
  1748. X{
  1749. X    XtCallCallbacks(w, XtNresizeCallback, (caddr_t) NULL);
  1750. X}
  1751. X
  1752. X
  1753. XWindowClassRec windowClassRec = {
  1754. X  { /* core fields */
  1755. X    /* superclass        */    (WidgetClass) &widgetClassRec,
  1756. X    /* class_name        */    "Window",
  1757. X    /* widget_size        */    sizeof(WindowRec),
  1758. X    /* class_initialize        */    NULL,
  1759. X    /* class_part_initialize    */    NULL,
  1760. X    /* class_inited        */    FALSE,
  1761. X    /* initialize        */    NULL,
  1762. X    /* initialize_hook        */    NULL,
  1763. X    /* realize            */    XtInheritRealize,
  1764. X    /* actions            */    actions,
  1765. X    /* num_actions        */    XtNumber(actions),
  1766. X    /* resources        */    resources,
  1767. X    /* num_resources        */    XtNumber(resources),
  1768. X    /* xrm_class        */    NULLQUARK,
  1769. X    /* compress_motion        */    TRUE,
  1770. X    /* compress_exposure    */    TRUE,
  1771. X    /* compress_enterleave    */    TRUE,
  1772. X    /* visible_interest        */    FALSE,
  1773. X    /* destroy            */    NULL,
  1774. X    /* resize            */    Resize,
  1775. X    /* expose            */    Redisplay,
  1776. X    /* set_values        */    NULL,
  1777. X    /* set_values_hook        */    NULL,
  1778. X    /* set_values_almost    */    XtInheritSetValuesAlmost,
  1779. X    /* get_values_hook        */    NULL,
  1780. X    /* accept_focus        */    NULL,
  1781. X    /* version            */    XtVersion,
  1782. X    /* callback_private        */    NULL,
  1783. X    /* tm_table            */    translations,
  1784. X    /* query_geometry        */    XtInheritQueryGeometry,
  1785. X    /* display_accelerator    */    XtInheritDisplayAccelerator,
  1786. X    /* extension        */    NULL
  1787. X  },
  1788. X  { /* window fields */
  1789. X    /* empty            */    0
  1790. X  }
  1791. X};
  1792. X
  1793. XWidgetClass windowWidgetClass = (WidgetClass)&windowClassRec;
  1794. X
  1795. XFont
  1796. XWindowFont(w) Widget w; { return ((WindowWidget)w)->window.font->fid; }
  1797. X
  1798. XXFontStruct *
  1799. XWindowFontStruct(w) Widget w; { return ((WindowWidget)w)->window.font; }
  1800. END_OF_FILE
  1801. if test 5183 -ne `wc -c <'win/X11/Window.c'`; then
  1802.     echo shar: \"'win/X11/Window.c'\" unpacked with wrong size!
  1803. fi
  1804. # end of 'win/X11/Window.c'
  1805. fi
  1806. echo shar: End of archive 102 \(of 108\).
  1807. cp /dev/null ark102isdone
  1808. MISSING=""
  1809. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
  1810. 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \
  1811. 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \
  1812. 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 \
  1813. 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 \
  1814. 101 102 103 104 105 106 107 108 ; do
  1815.     if test ! -f ark${I}isdone ; then
  1816.     MISSING="${MISSING} ${I}"
  1817.     fi
  1818. done
  1819. if test "${MISSING}" = "" ; then
  1820.     echo You have unpacked all 108 archives.
  1821.     echo "Now execute 'rebuild.sh'"
  1822.     rm -f ark10[0-8]isdone ark[1-9]isdone ark[1-9][0-9]isdone
  1823. else
  1824.     echo You still need to unpack the following archives:
  1825.     echo "        " ${MISSING}
  1826. fi
  1827. ##  End of shell archive.
  1828. exit 0
  1829.