[comp.sources.games] v07i091: NetHack3 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (07/25/89)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 7, Issue 91
Archive-name: NetHack3/Part36



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 36 (of 38)."
# Contents:  Files amiga/amifont8.uu amiga/amiunix.c auxil/cmdhelp
#   auxil/endgame.des auxil/opthelp auxil/tower.des include/monattk.h
#   include/monst.h include/obj.h include/unixconf.h
#   others/Maketcc.ini others/NetHack.cnf others/pcunix.c
#   src/lev_comp.l
# Wrapped by billr@saab on Sun Jul 23 21:33:22 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Files' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Files'\"
else
echo shar: Extracting \"'Files'\" \(3557 characters\)
sed "s/^X//" >'Files' <<'END_OF_FILE'
XThis is a listing of all files in a full NetHack 3.0 distribution, organized in
Xtheir standard manner on a UNIX system.  It indicates which files are necessary
Xfor which versions, so that you can tell which files may be deleted from or not
Xtransferred to your system if you wish.
X
X
X(files in top directory)
XFiles           Install.dos     Install.unix    Makefile.top    Porting
XREADME
X
X
Xamiga:
X(files for Amiga version)
XInstall.ami     Makefile.ami    NetHack.cnf     ami.lnk         amidos.c
Xamifont.uu      amifont8.uu     amimenu.c       amitcap.c       amitty.c
Xamiunix.c       amiwind.c       fcntl.h         signal.h        stdio.h
X
X
Xauxil:
X(files for all versions)
XGuidebook.mn    castle.des      cmdhelp         data.base       endgame.des
Xhelp            hh              history         license         opthelp
Xoracles         rumors.fal      rumors.tru      tower.des
X(files for UNIX versions)
XMakefile.auxil  lev_comp.6      nethack.6       nethack.sh
X
X
Xothers:
X(files for MSDOS version)
XMake.ini        Makefile.pc     Makefile.tcc    Maketcc.ini     NetHack.cnf
Xmsdos.c         termcap
X(files for MSDOS, Amiga, and Atari versions)
Xpcmain.c        pctty.c         pcunix.c
X(file for Atari version)
Xtos.c
X(file with random number routines, which may be included in any version)
Xrandom.c
X
X
Xinclude:
X(files for all versions)
Xamiconf.h       artifact.h      attrib.h        config.h        coord.h
Xdecl.h          edog.h          epri.h          eshk.h          extern.h
Xflag.h          func_tab.h      global.h        gold.h          hack.h
Xlev.h           mfndpos.h       mkroom.h        monattk.h       mondata.h
Xmonflag.h       monst.h         monsym.h        msdos.h         obj.h
Xobjclass.h      osbind.h        patchlevel.h    pcconf.h        permonst.h
Xprop.h          rm.h            sp_lev.h        spell.h         system.h
Xtosconf.h       tradstdc.h      trap.h          trapname.h      unixconf.h
Xvault.h         wseg.h          you.h           youprop.h
X(file for special level compiler (STRONGHOLD option))
Xlev_comp.h
X
Xsrc:
X(files for all versions)
Xalloc.c         apply.c         artifact.c      attrib.c        bones.c
Xcmd.c           dbridge.c       decl.c          demon.c         do.c
Xdo_name.c       do_wear.c       dog.c           dogmove.c       dokick.c
Xdothrow.c       eat.c           end.c           engrave.c       exper.c
Xextralev.c      fountain.c      getline.c       hack.c          invent.c
Xioctl.c         lock.c          mail.c          makedefs.c      makemon.c
Xmcastu.c        mhitm.c         mhitu.c         mklev.c         mkmaze.c
Xmkobj.c         mkroom.c        mon.c           mondata.c       monmove.c
Xmonst.c         mthrowu.c       music.c         o_init.c        objects.c
Xobjnam.c        options.c       pager.c         panic.c         pickup.c
Xpolyself.c      potion.c        pray.c          pri.c           priest.c
Xprisym.c        read.c          restore.c       rip.c           rnd.c
Xrumors.c        save.c          search.c        shk.c           shknam.c
Xsit.c           sounds.c        sp_lev.c        spell.c         steal.c
Xtermcap.c       timeout.c       topl.c          topten.c        track.c
Xtrap.c          u_init.c        uhitm.c         vault.c         version.c
Xweapon.c        were.c          wield.c         wizard.c        worm.c
Xworn.c          write.c         zap.c
X(files for special level compiler (STRONGHOLD option))
Xlev_comp.c      lev_comp.l      lev_comp.y      lev_lex.c       lev_main.c
X(files for UNIX versions)
XMakefile.src    unixmain.c      unixtty.c       unixunix.c
END_OF_FILE
if test 3557 -ne `wc -c <'Files'`; then
    echo shar: \"'Files'\" unpacked with wrong size!
fi
# end of 'Files'
fi
if test -f 'amiga/amifont8.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/amifont8.uu'\"
else
echo shar: Extracting \"'amiga/amifont8.uu'\" \(2955 characters\)
sed "s/^X//" >'amiga/amifont8.uu' <<'END_OF_FILE'
X
Xbegin 644 8
XM```#\P`````````!``````````````'Y```#Z0```?EP_TYU```````````,5
XM`````!H/@``!``````````````````````````````````````````!&140`Y
XM```````````,`````!H`````!W0`"`!```@`!@`!```@_P```&X`?@``!%X`E
XM```````````8;&P8`#@8##````````,\&#P\''X<?CP\```,`#`\?!C\//C^)
XM_CQF?@[F\(+&./PX_#Q^9L/&P\/^/,`\$``8`.``#@`<`.`8!N`X````````?
XM``@````````.&'!RS,%F````9F9F&!@````8&!@``!@88L!F`&9F&``8&``\U
XM;&P^QFP8&!AF&`````9F.&9F/&`P9F9F&!@8`!AFQCQF9FQF9F9F&`9F8,;FD
XM;&9L9F9:9L/&9L/&,&`,.``8`&``!@`V`&```&`8`````````!@````````82
XM&!B<,V-F````9F9F/!@````8&!@``!@\96-F`&9F&``8&``\`/Y@S&@P,`P\B
XM&`````QN&`8&;'Q@!F9F&!@P?@P&WCQFP&9@8,!F&`9L8.[VQF;&9G`89F;&,
XM/&:,,#`,;``,/&P\-CPP.VPX!F889GP\W#WL/CYF9F-C9GX8&!@`S#9F_W_^\
XM9^;G/!@````8&!@``!AF8#9G_^;G&``8&``8`&P\&'8`,`S_?@!^`!A^&!P<*
XMS`9\##P^``!@``8,WF9\P&9X>,Y^&`9X8/[>QGS&?#@89F;6&#P8,!@,Q@``V
XM!G9F;F9X9G88!FP8=V9F9F9V8!AF9FLV9DQP&`X`,QQF`&`&8`8`9AC_'_@?2
XM^/\``-O#?AM@``8`'__X_P`8`/X&,-P`,`P\&````#!V&#`&_@9F&&8&```PS
XM``P8WGYFP&9@8,9F&&9L8M;.QF#&;`X89CS^/!@R,`P,````'F9@9GXP9F88P
XM!G@8:V9F9F9F/!AF9FL<9A@8&!@`S!QF`&`&8`8`9A@`&!@``!@``,/;9NQ@<
XM``8`&!@8`````&Q\9LP`&!AF&!@`&&!F&&9F#&9F&&8,&!@8?A@`P,-F9FQF1
XM8&9F&&9F9L;&;&!L9F889CSN9AAF,`8,````9F9F9F`P/&88!FP88V9F?#Y@)
XM!AIF/#8V/#(8&!@`,S9F_V?F?_[GPQ@`&!@``!AS`&889C9GY^;_&!@8```8F
XM`&P8QG8`##```!@`&,`\?GX\'CP\&#PX&!@,`#`8>,/\//C^\#YF?CSF_L;&M
XM./`\XSP\/AC&PSS^/`,\````.SP\.SQXQN8\9N8\8V8\8`;P?`P[&#9C&'X.8
XM&'``S&-F`&9F``!FPQ@`&!@``!B<&#P89F-F9F8`&!@8````````````````]
XM`#```````````````````#`````````````````````````````&````````F
XM`````````/X`````````?```/```````\`<`````````<```````,\%F`&9F#
XM``!F`!@`&!@``!@``!@8`,!F9F8`&!@8``````@`"``(`!``"``8``@`(``(H
XM`"@`"``P``@`.``(`$``"`!(``@`4``(`%@`"`!@``@`:``(`'``"`!X``@`(
XM@``(`(@`"`"0``@`F``(`*``"`"H``@`L``(`+@`"`#```@`R``(`-``"`#8H
XM``@`X``(`.@`"`#P``@`^``(`0``"`$(``@!$``(`1@`"`$@``@!*``(`3``W
XM"`$X``@!0``(`4@`"`%0``@!6``(`6``"`%H``@!<``(`7@`"`&```@!B``(+
XM`9``"`&8``@!H``(`:@`"`&P``@!N``(`<``"`'(``@!T``(`=@`"`'@``@!,
XMZ``(`?``"`'X``@"```(`@@`"`(0``@"&``(`B``"`(H``@",``(`C@`"`)`<
XM``@"2``(`E``"`)8``@"8``(`F@`"`)P``@">``(`H``"`*(``@"D``(`I@`^
XM"`*@``@"J``(`K``"`*X``@"P``(`L@`"`+0``@"V``(`N``"`+H``@"\``(.
XM`O@`"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#S
XM```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,`Y
XM``@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``Y
XM"``(``@`$``(`!@`"``@``@`*``(`#``"``X``@`0``(`$@`"`!0``@`6``(P
XM`&``"`!H``@`<``(`'@`"`"```@`B``(`)``"`"8``@`H``(`*@`"`"P``@`P
XMN``(`,``"`#(``@`T``(`-@`"`#@``@`Z``(`/``"`#X``@#"``(`Q``"`,8I
XM``@#(``(`R@`"`,P``@#.``(`T``"`-(``@#4``(`U@`"`-@``@#:``(`W``1
XM"`-X``@#@``(`X@`"`.0``@#F``(`Z``"`.H``@#L``(`[@`"`/```@#R``(A
XM`P``"`,```@!V``(`>``"`'H``@!\``(`?@`"`(```@#T``(`]@`"`/@``@#!
XMZ``(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,`A
XM``@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``Y
XM"`+8``@"X``(`N@`"`+P``@"^``(````"``````#[`````0`````````#@``+
X2`$0```!<````8@````````/RW
X``
Xend
Xsize 2088
END_OF_FILE
if test 2955 -ne `wc -c <'amiga/amifont8.uu'`; then
    echo shar: \"'amiga/amifont8.uu'\" unpacked with wrong size!
fi
# end of 'amiga/amifont8.uu'
fi
if test -f 'amiga/amiunix.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/amiunix.c'\"
else
echo shar: Extracting \"'amiga/amiunix.c'\" \(3467 characters\)
sed "s/^X//" >'amiga/amiunix.c' <<'END_OF_FILE'
X/*    SCCS Id: @(#)amiunix.c    3.0    89/05/02
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X/* This file collects some Unix dependencies; pager.c contains some more */
X
X/*
X * The time is used for:
X *    - seed for rand()
X *    - year on tombstone and yymmdd in record file
X *    - phase of the moon (various monsters react to NEW_MOON or FULL_MOON)
X *    - night and midnight (the undead are dangerous at midnight)
X *    - determination of what files are "very old"
X */
X
X/* block some unused #defines to avoid overloading some cpp's */
X#define MONDATA_H
X#include "hack.h"   /* mainly for index() which depends on BSD */
X
X#define     NOSTAT
X
X#ifndef NOSTAT
X#include    <stat.h>
Xstatic struct stat buf, hbuf;
X#endif
X
Xextern time_t time();
X
Xvoid
Xsetrandom()
X{
X	(void) Srand((unsigned int) time ((time_t *) 0));
X}
X
Xstatic struct tm *
Xgetlt()
X{
X	time_t date;
X	struct tm *localtime();
X
X	(void) time((long *)(&date));
X	return(localtime(&date));
X}
X
Xint
Xgetyear()
X{
X	return(1900 + getlt()->tm_year);
X}
X
Xchar *
Xgetdate()
X{
X#ifdef LINT	/* static char datestr[7]; */
X	char datestr[7];
X#else
X	static char datestr[7];
X#endif
X	register struct tm *lt = getlt();
X
X	Sprintf(datestr, "%2d%2d%2d",
X		lt->tm_year, lt->tm_mon + 1, lt->tm_mday);
X	if(datestr[2] == ' ') datestr[2] = '0';
X	if(datestr[4] == ' ') datestr[4] = '0';
X	return(datestr);
X}
X
Xint
Xphase_of_the_moon()                     /* 0-7, with 0: new, 4: full */
X{					/* moon period: 29.5306 days */
X					/* year: 365.2422 days */
X	register struct tm *lt = getlt();
X	register int epact, diy, golden;
X
X	diy = lt->tm_yday;
X	golden = (lt->tm_year % 19) + 1;
X	epact = (11 * golden + 18) % 30;
X	if ((epact == 25 && golden > 11) || epact == 24)
X		epact++;
X
X	return( (((((diy + epact) * 6) + 11) % 177) / 22) & 7 );
X}
X
Xint
Xnight()
X{
X	register int hour = getlt()->tm_hour;
X
X	return(hour < 6 || hour > 21);
X}
X
Xint
Xmidnight()
X{
X	return(getlt()->tm_hour == 0);
X}
X
Xvoid
Xgethdate(name)
Xchar *name;
X{
X#ifndef NOSTAT
X/* old version - for people short of space */
X/*
X/* register char *np;
X/*	if(stat(name, &hbuf))
X/*		error("Cannot get status of %s.",
X/*			(np = rindex(name, '/')) ? np+1 : name);
X/*
X/* version using PATH from: seismo!gregc@ucsf-cgl.ARPA (Greg Couch) */
X
X/*
X * The problem with   #include	<sys/param.h> is that this include file
X * does not exist on all systems, and moreover, that it sometimes includes
X * <sys/types.h> again, so that the compiler sees these typedefs twice.
X */
X#define 	MAXPATHLEN	80
X
Xextern char PATH[];	/* In amigaDOS.c */
X
Xregister char *np, *path;
Xchar filename[MAXPATHLEN+1];
X
X    if (index(name, '/') != NULL || (path = PATH) == NULL)
X	path = "";
X
X    for (;;) {
X	if ((np = index(path, ':')) == NULL)
X	    np = path + strlen(path);       /* point to end str */
X	if (np - path <= 1)                     /* %% */
X	    (void) strcpy(filename, name);
X	else {
X	    (void) strncpy(filename, path, np - path);
X	    filename[np - path] = '/';
X	    (void) strcpy(filename + (np - path) + 1, name);
X	}
X	if (stat(filename, &hbuf) == 0)
X	    return;
X	if (*np == '\0')
X	path = "";
X	path = np + 1;
X    }
X    error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name);
X#endif
X}
X
Xint
Xuptodate(fd)
X{
X    return(1);
X}
X
Xvoid
Xregularize(s)    /* normalize file name - we don't like :'s or /'s */
Xregister char *s;
X{
X    register char *lp;
X
X    while((lp = index(s, ':')) || (lp = index(s, '/')))
X	*lp = '_';
X}
END_OF_FILE
if test 3467 -ne `wc -c <'amiga/amiunix.c'`; then
    echo shar: \"'amiga/amiunix.c'\" unpacked with wrong size!
fi
# end of 'amiga/amiunix.c'
fi
if test -f 'auxil/cmdhelp' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'auxil/cmdhelp'\"
else
echo shar: Extracting \"'auxil/cmdhelp'\" \(3325 characters\)
sed "s/^X//" >'auxil/cmdhelp' <<'END_OF_FILE'
X^	Show the type of a trap
X^[	Cancel command
X^A	Redo the previous command
X^C	Quit the game
X^D	Kick something (usually a door)
X^E	Search a room (available in debug mode only)
X^F	Map the level (available in debug mode only)
X^G	Create a monster (available in debug mode only)
X^I	Identify all items (available in debug mode only)
X^O	Show location of special levels (available in debug mode only)
X^P	Show previous message printed out
X^R	Redraw screen
X^T	Teleport around level
X^V	Teleport between levels (available in debug mode only)
X^W	Wish (available in debug mode only)
X^X	Show your intrinsic attributes (in debug or explore mode only)
X^Z	Suspend game (only if defined)
Xa	Apply (use) a tool
XA	Remove all Armor
Xb	Go southwest 1 space
XB	Go southwest until you are on top of something
X^B	Go southwest until you are near something
Xc	Close a door
XC	Call (name) a particular monster
Xd	Drop an item
XD	Drop specific item types
Xe	Eat something
XE	Engrave writing on the floor
Xg	Followed by direction, move until you are near something
XG	Followed by direction, same as control-direction
Xh	Go west 1 space
XH	Go west until you are on top of something
X^H	Go west until you are near something
Xi	Show your inventory
XI	Inventory specific item types
Xj	Go south 1 space (or if number_pad is on, jump to another location)
XJ	Go south until you are on top of something
X^J	Go south until you are near something
Xk	Go north 1 space (or if number_pad is on, kick something)
XK	Go north until you are on top of something
X^K	Go north until you are near something
Xl	Go east 1 space (or if number_pad is on, loot a box on the floor)
XL	Go east until you are on top of something
X^L	Go east until you are near something
Xm	Followed by direction, move without picking anything up
XM	Followed by direction, move a distance without picking anything up
Xn	Go southeast 1 space
XN	Go southeast until you are on something (if number_pad, name an object)
X^N	Go southeast until you are near something
Xo	Open a door
XO	Set options (O? explains options)
Xp	Pay your shopping bill
XP	Put on a ring
Xq	Quaff (drink) something
XQ	Quit the game
Xr	Read a scroll (or spell book, if defined)
XR	Remove a Ring
Xs	Search for traps and secret doors
XS	Save the game
Xt	Throw something
XT	Take off one piece of armor
Xu	Go northeast 1 space (or if number_pad is on, untrap something)
XU	Go northeast until you are on top of something
X^U	Go northeast until you are near something
Xv	Show version
XV	Show long version and game history
Xw	Wield (put in use) a weapon
XW	Wear a piece of armor
Xy	Go northwest 1 space
XY	Go northwest until you are on top of something
X^Y	Go northwest until you are near something
Xz	Zap a wand
XZ	Zap (cast) a spell (only if defined)
X<	Go up a staircase
X>	Go down a staircase
X/	Show what type of thing a symbol corresponds to
X?	Give a help message
X&	Tell what a command does
X!	Do a shell escape (only if defined)
X\	Show what object types have been discovered
X.	Rest one move while doing nothing
X 	Rest one move while doing nothing (if option restonspace set)
X:	Look at what is on the floor
X@	Toggle the pickup option on/off
X)	Show the weapon currently wielded
X[	Show the armor currently worn
X=	Show the ring(s) currently worn
X"	Show the amulet currently worn
X(	Show the tools currently in use
X$	Count your gold
X+	List known spells (only if defined)
X#	Perform an extended command
END_OF_FILE
if test 3325 -ne `wc -c <'auxil/cmdhelp'`; then
    echo shar: \"'auxil/cmdhelp'\" unpacked with wrong size!
fi
# end of 'auxil/cmdhelp'
fi
if test -f 'auxil/endgame.des' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'auxil/endgame.des'\"
else
echo shar: Extracting \"'auxil/endgame.des'\" \(3509 characters\)
sed "s/^X//" >'auxil/endgame.des' <<'END_OF_FILE'
X#	SCCS Id: @(#)endgame.des	3.0	89/07/02
X#	Copyright (c) 1989 by Jean-Christophe Collet
X# NetHack may be freely redistributed.  See license for details.
X#
X# This is the ENDGAME level
X# It's made of 3 shrines and a fighting area
X# Players are supposed to sacrifice the Amulet of Yendor on the appropriate
X# shrine. But to get to the shrines, they must cross the fighting area...
X
X# First shrine
XMAZE:"endgame"
XGEOMETRY:left,top
XMAP
X}}}}}}
X}}..}}
X}}....
X}}..}}
X}}}}}}
XENDMAP
XALTAR:(02,02),align[0],shrine
XMAZEWALK:(05,02),east
X
X# Second Shrine
XGEOMETRY:left,center
XMAP
X}}}}}}
X}}..}}
X}}....
X}}..}}
X}}}}}}
XENDMAP
XALTAR:(02,02),align[1],shrine
XMAZEWALK:(05,02),east
X
X# Third Shrine
XGEOMETRY:left,bottom
XMAP
X}}}}}}
X}}..}}
X}}....
X}}..}}
X}}}}}}
XENDMAP
XALTAR:(02,02),align[2],shrine
XMAZEWALK:(05,02),east
X
X# Note that the shrine alignments are random...
X
X# The fighting area : 7 rooms.
X# Each room contains a specific class of monsters.
X# Maybe this a little bit too hard (We have to test it in real game)
X
XGEOMETRY:center,center
XMAP
X.-----------------------------.
X.|........S.........|........S.
X.|........|.........|........|.
X.|........|.........|........|.
X.|........|.........|........|.
X.-S--------.........-S--------.
X.|........|.........|........|.
X.|........|.........|........|.
X.|........|}}}}.}}}}|........|.
X.|........|.........|........|.
X.|........|.........|........|.
X.--------S-.........--------S-.
X.|........|.........|........|.
X.|........|.........|........|.
X.|........|.........|........|.
X.S........|.........S........|.
X.-----------------------------.
XENDMAP
XMAZEWALK:(30,08),east
XMAZEWALK:(00,08),west
X# Non diggable walls
XNON_DIGGABLE:(00,00,30,16)
X# Doors
XDOOR:closed,(10,01)
XDOOR:closed,(29,01)
XDOOR:locked,(02,05)
XDOOR:locked,(21,05)
XDOOR:locked,(09,11)
XDOOR:closed,(28,11)
XDOOR:locked,(01,15)
XDOOR:locked,(20,15)
X# Rooms
XREGION:(02,01,09,04),lit,"ordinary"
XREGION:(21,01,28,04),lit,"ordinary"
XREGION:(02,06,09,10),lit,"ordinary"
XREGION:(21,06,28,10),lit,"ordinary"
XREGION:(02,12,09,15),lit,"ordinary"
XREGION:(21,12,28,15),lit,"ordinary"
XREGION:(11,01,19,15),unlit,"ordinary"
X# Rust monsters in the first room
XMONSTER:'R',random,(22,01)
XMONSTER:'R',random,(27,01)
XMONSTER:'R',random,(24,03)
XMONSTER:'R',random,(22,04)
XMONSTER:'R',random,(27,04)
X# Liches in the second one
XMONSTER:'l',random,(22,06)
XMONSTER:'l',random,(27,06)
XMONSTER:'l',random,(22,08)
XMONSTER:'l',random,(27,08)
XMONSTER:'l',random,(22,10)
XMONSTER:'l',random,(27,10)
X# Nagas in the 3rd one
XMONSTER:'n',random,(22,12)
XMONSTER:'n',random,(27,12)
XMONSTER:'n',random,(24,14)
XMONSTER:'n',random,(22,15)
XMONSTER:'n',random,(27,15)
X# Dragons in the central one
XMONSTER:'D',random,(12,02)
XMONSTER:'D',random,(18,02)
XMONSTER:'D',random,(13,03)
XMONSTER:'D',random,(17,04)
XMONSTER:'D',random,(13,06)
XMONSTER:'D',random,(17,06)
XMONSTER:'D',random,(12,07)
XMONSTER:'D',random,(18,07)
X# with krakens in the trenches
XMONSTER:';',"kraken",(12,08)
XMONSTER:';',"kraken",(14,08)
XMONSTER:';',"kraken",(16,08)
XMONSTER:';',"kraken",(18,08)
X# Giants in the 5th one
XMONSTER:'H',random,(03,01)
XMONSTER:'H',random,(07,01)
XMONSTER:'H',random,(05,03)
XMONSTER:'H',random,(03,04)
XMONSTER:'H',random,(07,04)
X# Ogres in the 6th one
XMONSTER:'O',random,(03,06)
XMONSTER:'O',random,(07,06)
XMONSTER:'O',random,(03,08)
XMONSTER:'O',random,(07,08)
XMONSTER:'O',random,(03,10)
XMONSTER:'O',random,(07,10)
X# Trolls in the last one
XMONSTER:'T',random,(03,12)
XMONSTER:'T',random,(07,12)
XMONSTER:'T',random,(05,14)
XMONSTER:'T',random,(03,15)
XMONSTER:'T',random,(07,15)
END_OF_FILE
if test 3509 -ne `wc -c <'auxil/endgame.des'`; then
    echo shar: \"'auxil/endgame.des'\" unpacked with wrong size!
fi
# end of 'auxil/endgame.des'
fi
if test -f 'auxil/opthelp' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'auxil/opthelp'\"
else
echo shar: Extracting \"'auxil/opthelp'\" \(3657 characters\)
sed "s/^X//" >'auxil/opthelp' <<'END_OF_FILE'
X
XBoolean options available in all versions (with default values in []):
X
Xconfirm		ask before hitting tame or peaceful monsters  [TRUE]
X(fe)male	sex of the player (may only be set on startup)  [MALE]
Xfixinv		try to retain the same letter for the same object  [TRUE]
Xignintr		ignore interrupt signal, including breaks  [FALSE]
Xnumber_pad	use the number keys to move instead of yuhjklbn  [FALSE]
Xpickup		automatically pick up objects you move over  [TRUE]
Xrest_on_space	count the space bar as a rest character  [FALSE]
Xsafe_pet	prevent you from (knowingly) attacking your pet(s)  [TRUE]
Xsilent		don't use your terminal's bell sound  [TRUE]
Xsortpack	group similar kinds of objects in inventory  [TRUE]
Xtime		display elapsed game time, in moves  [FALSE]
Xtombstone	print tombstone when you die  [TRUE]
Xverbose		print more commentary during the game  [TRUE]
X
XThere are further Boolean options that exist in some versions of NetHack 3.0.
X(You can tell which options exist in your version by checking the short
Xoption help, which is reached by 'O?'.)
X
X
X 
XBoolean option if NEWS was set at compile time:
Xnews		print any news from game administrator on startup  [TRUE]
X
XBoolean options if you are using MS-DOS and DGK was set at compile time:
XIBM_BIOS	allow the use of IBM ROM BIOS calls  [FALSE]
Xrawio		allow the use of raw I/O (may only be set on startup)  [FALSE]
XDEC_Rainbow	you are on a DEC Rainbow and want to use its graphics  [FALSE]
X		(if DECRAINBOW was also set at compile time)
X
XBoolean options if DGK was not set at compile time:
Xnull		allow nulls to be sent to your terminal  [TRUE]
Xstandout	use standout mode for --More-- on messages  [FALSE]
X
XAny Boolean option can be negated by prefixing it with a '!' or 'no'.
X
X
X
X
X
X
X
X 
XCompound options are written as option_name:option_value.
XCompound options which can be set during the game are:
X
Xpackorder	a list of default symbols for kinds of objects that gives the
X		order in which your pack will be displayed
X		If you specify only some kinds of items, the others from the
X		default order will be appended to the end.  [")[%?+!=/(*`0_]
Xendgame		the parts of the score list you wish to see when the game ends
X		You choose a combination of top scores, scores around that of
X		the ending game, and all of your own scores.
X		[!own/5 top/4 around]
Xfruit		the name of a fruit you enjoy eating
X		(basically a whimsy which NetHack uses from time to time)
X		[slime mold]
X
XCompound options which may be set only on startup are:
X
Xname		the name of your character
X		[obtained by asking the system or the player]
Xdogname		the name of your first dog  [NONE]
Xcatname		the name of your first cat  [NONE]
X 
Xgraphics	a list of symbols to be used in place of the default ones for
X		drawing the dungeon
X		The symbols are subjected to a fair amount of processing, so
X		that you can use C-style escapes such as \n or \081 as well as
X		indicate control characters by ^x or meta characters by \Mx.
X		As usual, \ can force the next character to be taken literally.
X		Since many of the default symbols are overloaded, they are
X		given here by name instead of symbol, with some added notes.
X		[stone                               (solid rock, normally ' ')
X		vwall hwall tlcorn trcorn blcorn brcorn       (room boundaries)
X		crwall tuwall tdwall tlwall trwall  (wallified maze characters)
X		vbeam hbeam lslant rslant			    (zap beams)
X		door room corr upstair dnstair trap web pool
X		fountain sink throne altar
X		upladder dnladder vdbridge hdbridge]
X
XSome sample options lists are
X!pickup,!tombstone,name:Gandalf,endgame:own/3 top/2 around
Xfemale,nonews,dogname:Rover,graphics: |--------|||-\\/+.#<>\^\"}{#\\_<>##
Xrest_on_space,!verbose
END_OF_FILE
if test 3657 -ne `wc -c <'auxil/opthelp'`; then
    echo shar: \"'auxil/opthelp'\" unpacked with wrong size!
fi
# end of 'auxil/opthelp'
fi
if test -f 'auxil/tower.des' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'auxil/tower.des'\"
else
echo shar: Extracting \"'auxil/tower.des'\" \(3636 characters\)
sed "s/^X//" >'auxil/tower.des' <<'END_OF_FILE'
X#	SCCS Id: @(#)tower.des	3.0	89/07/02
X#	Copyright (c) 1989 by Jean-Christophe Collet
X# NetHack may be freely redistributed.  See license for details.
X#
X# Upper stage of Vlad's tower
XMAZE:"tower1"
XGEOMETRY:center,center
XMAP
X.................
X...---.---.---...
X...|.|.|.|.|.|...
X.---S---S---S---.
X.|.......+.+...|.
X.---+-----.-----.
X...|...\.|.+.|...
X.---+-----.-----.
X.|.......+.+...|.
X.---S---S---S---.
X...|.|.|.|.|.|...
X...---.---.---...
X.................
XENDMAP
XMAZEWALK:(16,06),east
XLADDER:(12,06),down
XREGION:(02,04,08,04),unlit,"ordinary"
XREGION:(04,06,08,06),unlit,"ordinary"
XREGION:(02,08,08,08),unlit,"ordinary"
XREGION:(12,04,14,04),unlit,"ordinary"
XREGION:(12,08,14,08),unlit,"ordinary"
XREGION:(10,04,10,08),unlit,"ordinary"
X# The lord and his court
XMONSTER:'V',"Vlad the Impaler",(07,06)
XMONSTER:'V',random,(04,10)
XMONSTER:'V',random,(08,10)
XMONSTER:'V',random,(12,10)
XMONSTER:'V',random,(04,02)
XMONSTER:'V',random,(08,02)
XMONSTER:'V',random,(12,02)
X# The doors
XDOOR:closed,(04,03)
XDOOR:closed,(08,03)
XDOOR:closed,(12,03)
XDOOR:closed,(04,09)
XDOOR:closed,(08,09)
XDOOR:closed,(12,09)
XDOOR:locked,(04,05)
XDOOR:locked,(04,07)
X# treasures
XOBJECT:'(',"chest",(08,06)
XOBJECT:'(',"chest",(04,10)
XOBJECT:'(',"chest",(08,10)
XOBJECT:'(',"chest",(12,10)
XOBJECT:'(',"chest",(04,02)
XOBJECT:'(',"chest",(08,02)
XOBJECT:'(',"chest",(12,02)
X# We have to protect the tower against outside attacks
XNON_DIGGABLE:(00,00,16,12)
X
X
X# Intermediate stage of Vlad's tower
XMAZE:"tower2"
XGEOMETRY:center,center
XMAP
X.................
X...---.---.---...
X...|.|.|.|.|.|...
X.---S---S---S---.
X.|.S.........S.|.
X.---.------+----.
X...|......|..|...
X.--------.------.
X.|.S......+..S.|.
X.---S---S---S---.
X...|.|.|.|.|.|...
X...---.---.---...
X.................
XENDMAP
X# Random places are the 10 niches
XRANDOM_PLACES:(04,02),(08,02),(12,02),(02,04),(14,04),
X	      (02,08),(14,08),(04,10),(08,10),(12,10)
XMAZEWALK:(16,06),east
XLADDER:(12,06),up
XLADDER:(04,08),down
XREGION:(11,07,12,07),unlit,"ordinary"
XREGION:(11,09,12,09),unlit,"ordinary"
XMONSTER:'&',random,place[0]
XMONSTER:'&',random,place[1]
XMONSTER:'d',"hell hound pup",place[2]
XMONSTER:'d',"hell hound pup",place[3]
XMONSTER:'d',"winter wolf",place[4]
XOBJECT:'"',"amulet of life saving",place[5]
XOBJECT:'"',"amulet of strangulation",place[6]
XOBJECT:'[',"water walking boots",place[7]
XOBJECT:'[',"crystal plate mail",place[8]
XOBJECT:'+',"invisibility",place[9]
X# Walls in the tower are non diggable
XNON_DIGGABLE:(00,00,16,12)
X
X
X# Bottom most stage of Vlad's tower
XMAZE:"tower3"
XGEOMETRY:center,center
XMAP
X.................
X...---.---.---...
X...|.|.|.|.|.|...
X.---S---S---S---.
X.|.S.........S.|.
X.---.........---.
X...|.........+...
X.---.........---.
X.|.S.........S.|.
X.---S---S---S---.
X...|.|.|.|.|.|...
X...---.---.---...
X.................
XENDMAP
X# Random places are the 10 niches
XRANDOM_PLACES:(04,02),(08,02),(12,02),(02,04),(14,04),
X	      (02,08),(14,08),(04,10),(08,10),(12,10)
XMAZEWALK:(16,06),east
XREGION:(04,04,12,08),unlit,"ordinary"
XLADDER:(04,08),up
X# Entry door is, of course, locked
XDOOR:locked,(13,06)
X# Let's put a dragon behind the door, just for the fun...
XMONSTER:'D',random,(12,06)
XMONSTER:random,random,(11,05)
XMONSTER:random,random,(11,07)
XMONSTER:random,random,random
XMONSTER:random,random,random
XMONSTER:random,random,random
XMONSTER:random,random,random
XMONSTER:random,random,random
XMONSTER:random,random,random
XOBJECT:')',"long sword",place[0]
XTRAP:random,place[0]
XOBJECT:'(',"lock pick",place[1]
XTRAP:random,place[1]
XOBJECT:'[',"elven cloak",place[2]
XTRAP:random,place[2]
XOBJECT:'(',"blindfold",place[3]
XTRAP:random,place[3]
X# Walls in the tower are non diggable
XNON_DIGGABLE:(00,00,16,12)
END_OF_FILE
if test 3636 -ne `wc -c <'auxil/tower.des'`; then
    echo shar: \"'auxil/tower.des'\" unpacked with wrong size!
fi
# end of 'auxil/tower.des'
fi
if test -f 'include/monattk.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'include/monattk.h'\"
else
echo shar: Extracting \"'include/monattk.h'\" \(3161 characters\)
sed "s/^X//" >'include/monattk.h' <<'END_OF_FILE'
X/*	SCCS Id: @(#)monattk.h	3.0	89/06/15
X/* NetHack may be freely redistributed.  See license for details. */
X/* Copyright 1988, M. Stephenson */
X
X#ifndef MONATTK_H
X#define MONATTK_H
X
X/*	Add new attack types below - ordering affects experience (exper.c).
X *	Attacks > AT_BUTT are worth extra experience.
X */
X#define	AT_NONE		0		/* passive monster (ex. acid blob) */
X#define	AT_CLAW		1		/* claw (punch, hit, etc.) */
X#define	AT_BITE		2		/* bite */
X#define	AT_KICK		3		/* kick */
X#define	AT_BUTT		4		/* head butt (ex. a unicorn) */
X#define	AT_TUCH		5		/* touches */
X#define	AT_STNG		6		/* sting */
X#define AT_HUGS		7		/* crushing bearhug */
X#define	AT_SPIT		10		/* spits substance - ranged */
X#define	AT_ENGL		11		/* engulf (swallow or by a cloud) */
X#define	AT_BREA		12		/* breath - ranged */
X#define	AT_EXPL		13		/* explodes - proximity */
X#define	AT_GAZE		14		/* gaze - ranged */
X
X#define	AT_WEAP		254		/* uses weapon */
X#define	AT_MAGC		255		/* uses magic spell(s) */
X
X/*	Add new damage types below.
X *
X *	Note that 1-10 correspond to the types of attack used in buzz().
X *	Please don't disturb the order unless you rewrite the buzz() code.
X */
X#define	AD_PHYS		0		/* ordinary physical */
X#define	AD_MAGM		1		/* magic missiles */
X#define	AD_FIRE		2		/* fire damage */
X#define	AD_SLEE		3		/* sleep ray */
X#define	AD_COLD		4		/* frost damage */
X#define	AD_DISN		5		/* disintegration (death ray) */
X#define	AD_ELEC		6		/* shock damage */
X#define	AD_DRST		7		/* drains str (poison) */
X#define	AD_ACID		8		/* acid damage */
X#define	AD_SPC1		9		/* for extension of buzz() */
X#define	AD_SPC2		10		/* for extension of buzz() */
X#define	AD_BLND		11		/* blinds (glowing eye) */
X#define	AD_STUN		12		/* stuns */
X#define	AD_SLOW		13		/* slows */
X#define	AD_PLYS		14		/* paralyses */
X#define	AD_DRLI		15		/* drains life levels (Vampire) */
X#define	AD_DREN		16		/* drains magic energy */
X#define	AD_LEGS		17		/* damages legs (xan) */
X#define	AD_STON		18		/* petrifies (Medusa, Cockatrice) */
X#define	AD_STCK		19		/* sticks to you (Mimic) */
X#define	AD_SGLD		20		/* steals gold (Leppie) */
X#define	AD_SITM		21		/* steals item (Nymphs) */
X#define AD_SEDU		22		/* seduces & steals multiple items */
X#define	AD_TLPT		23		/* teleports you (Quantum Mech.) */
X#define	AD_RUST		24		/* rusts armour (Rust Monster)*/
X#define	AD_CONF		25		/* confuses (Umber Hulk) */
X#define AD_DGST		26		/* digests opponent (trapper, etc.) */
X#define AD_HEAL		27		/* heals opponent's wounds (nurse) */
X#define AD_WRAP		28		/* special "stick" for eels */
X#define	AD_WERE		29		/* confers lycanthropy */
X#define AD_DRDX		30		/* drains dexterity (Quasit) */
X#define AD_DRCO		31		/* drains constitution */
X#define AD_DISE		32		/* confers diseases */
X#define AD_DCAY		33		/* decays organics (Brown pudding) */
X#define AD_SSEX		34		/* Succubus seduction (extended) */
X					/* If no SEDUCE then same as AD_SEDU */
X
X#define	AD_CLRC		240		/* random clerical spell */
X#define	AD_SPEL		241		/* random magic spell */
X
X#define AD_SAMU		252		/* hits, may steal Amulet (Wizard) */
X#define AD_CURS		253		/* random curse (ex. gremlin) */
X#define AD_CUSS		255		/* says nasty things about you */
X
X#endif /* MONATTK_H /**/
END_OF_FILE
if test 3161 -ne `wc -c <'include/monattk.h'`; then
    echo shar: \"'include/monattk.h'\" unpacked with wrong size!
fi
# end of 'include/monattk.h'
fi
if test -f 'include/monst.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'include/monst.h'\"
else
echo shar: Extracting \"'include/monst.h'\" \(2778 characters\)
sed "s/^X//" >'include/monst.h' <<'END_OF_FILE'
X/*	SCCS Id: @(#)monst.h	3.0	88/04/15
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#ifndef MONST_H
X#define MONST_H
X
Xstruct monst {
X	struct monst *nmon;
X	struct permonst *data;
X	unsigned m_id;
X	uchar m_lev;		/* adjusted difficulty level of monster */
X	schar malign;		/* alignment of this monster, relative to the
X				   player (positive = good to kill) */
X	xchar mx, my;
X	xchar mux, muy;		/* where the monster thinks you are */
X	xchar mdx, mdy;		/* if mdispl then pos where last displayed */
X#define	MTSZ	4
X	coord mtrack[MTSZ];	/* monster track */
X	int mhp, mhpmax;
X	char mappearance;	/* nonzero for undetected 'M's and the Wizard */
X	int mspec_used; 	/* monster's special ability attack timeout */
X	schar mtame;		/* level of tameness, implies peaceful */
X
X	Bitfield(mimic,1);	/* undetected mimic */
X	Bitfield(mdispl,1);	/* mdx,mdy valid */
X	Bitfield(minvis,1);	/* invisible */
X	Bitfield(cham,1);	/* shape-changer */
X	Bitfield(mhide,1);	/* hides beneath objects */
X	Bitfield(mundetected,1);	/* not seen in present hiding place */
X	Bitfield(mspeed,2);
X
X	Bitfield(mflee,1);	/* fleeing */
X	Bitfield(mfleetim,7);	/* timeout for mflee */
X
X	Bitfield(msleep,1);	/* sleeping */
X	Bitfield(mfroz,1);	/* frozen */
X	Bitfield(mstun,1);	/* stunned (off balance) */
X	Bitfield(mconf,1);	/* confused */
X	Bitfield(mcan,1);	/* has been cancelled */
X	Bitfield(mpeaceful,1);	/* does not attack unprovoked */
X	Bitfield(mcansee,1);	/* cansee 1, temp.blinded 0, blind 0 */
X
X	Bitfield(mblinded,7);	/* cansee 0, temp.blinded n, blind 0 */
X	Bitfield(mtrapped,1);	/* trapped in a pit or bear trap */
X
X	Bitfield(isshk,1);	/* is shopkeeper */
X	Bitfield(isgd,1);	/* is guard */
X#if defined(ALTARS) && defined(THEOLOGY)
X	Bitfield(ispriest,1);	/* is a priest */
X#endif
X	Bitfield(iswiz,1);	/* is the Wizard of Yendor */
X	Bitfield(mleashed,1);	/* monster is on a leash */
X#ifdef WORM
X	Bitfield(wormno,5);	/* at most 31 worms on any level */
X#endif
X	long mtrapseen;		/* bitmap of traps we've been trapped in */
X	long mlstmv;		/* prevent two moves at once */
X	struct obj *minvent;
X	long mgold;
X	uchar mnamelth;		/* length of name (following mxlth) */
X	short mxlth;		/* length of following data */
X	/* in order to prevent alignment problems mextra should
X	   be (or follow) a long int */
X	int meating;		/* monster is eating timeout */
X	long mextra[1]; 	/* monster dependent info */
X};
X
X#define newmonst(xl)	(struct monst *) alloc((unsigned)(xl) + sizeof(struct monst))
X
Xextern struct monst *fmon;
Xextern struct monst *mydogs, *fallen_down;
X
X/* these are in mspeed */
X#define MSLOW 1 /* slow monster */
X#define MFAST 2 /* speeded monster */
X
X#define	NAME(mtmp)	(((char *) mtmp->mextra) + mtmp->mxlth)
X
X#endif /* MONST_H /**/
END_OF_FILE
if test 2778 -ne `wc -c <'include/monst.h'`; then
    echo shar: \"'include/monst.h'\" unpacked with wrong size!
fi
# end of 'include/monst.h'
fi
if test -f 'include/obj.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'include/obj.h'\"
else
echo shar: Extracting \"'include/obj.h'\" \(3109 characters\)
sed "s/^X//" >'include/obj.h' <<'END_OF_FILE'
X/*	SCCS Id: @(#)obj.h	3.0	88/04/12
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#ifndef OBJ_H
X#define OBJ_H
X
Xstruct obj {
X	struct obj *nobj;
X	struct obj *cobj;		/* id of container object is in */
X/*	unsigned o_cwt;			/* container weight capacity */
X	unsigned o_id;
X	xchar ox,oy;
X	xchar odx,ody;
X	unsigned otyp;
X	unsigned owt;
X	unsigned quan;		/* use oextra for tmp gold objects */
X
X	schar spe;		/* quality of weapon, armor or ring (+ or -)
X				   number of charges for wand ( >= -1 )
X				   marks your eggs, spinach tins, key shapes
X				   indicates statues have spellbooks inside
X				   tells which fruit a fruit is
X				   special for uball and amulet %% BAH */
X#define N_LOX	10	/* # of key/lock shapes */
X	char	olet;
X	char	invlet;
X	int	corpsenm;	/* type of corpse is mons[corpsenm] */
X#define leashmon  corpsenm	/* gets m_id of attached pet */
X	Bitfield(oinvis,1);	/* not yet implemented */
X	Bitfield(olocked,1);	/* object is locked */
X#define recharged olocked	/* recharged once */
X	Bitfield(otrapped,1);	/* container is trapped */
X#define opoisoned otrapped	/* weapon has been coated with poison */
X	Bitfield(odispl,1);
X	Bitfield(known,1);	/* exact nature known */
X	Bitfield(dknown,1);	/* color or text known */
X	Bitfield(bknown,1);	/* blessing or curse known */
X	Bitfield(cursed,1);
X	Bitfield(blessed,1);
X	Bitfield(unpaid,1);	/* on some bill */
X	Bitfield(rustfree,1);
X#define flameproof 	rustfree/* for non-metal armor items */
X	Bitfield(no_charge,1);	/* if shk shouldn't charge for this */
X	Bitfield(onamelth,6);
X	long age;		/* creation date */
X	long owornmask;
X#define	W_ARM	040000L
X#define	W_ARMC	0100000L
X#define	W_ARMH	0200000L
X#define	W_ARMS	0400000L
X#define	W_ARMG	01000000L
X#define	W_ARMF	02000000L
X#define	W_AMUL	04000000L
X#define	W_TOOL	010000000L	/* wearing another tool (see uprop) */
X#ifdef SHIRT
X#define	W_ARMU	020000000L
X#define	W_ARMOR	(W_ARM | W_ARMC | W_ARMH | W_ARMS | W_ARMG | W_ARMF | W_ARMU)
X#else
X#define	W_ARMOR	(W_ARM | W_ARMC | W_ARMH | W_ARMS | W_ARMG | W_ARMF)
X#endif
X#define	W_RINGL	010000L	/* make W_RINGL = RING_LEFT (see uprop) */
X#define	W_RINGR	020000L
X#define	W_RING	(W_RINGL | W_RINGR)
X#define	W_WEP	01000L
X#define	W_BALL	02000L
X#define	W_CHAIN	04000L
X	long oextra[1];		/* used for name of ordinary objects - length
X				   is flexible; amount for tmp gold objects */
X};
X
Xextern struct obj *fobj;
X
X#define newobj(xl)	(struct obj *) alloc((unsigned)(xl) + sizeof(struct obj))
X#define	ONAME(otmp)	((char *) otmp->oextra)
X#define	OGOLD(otmp)	(otmp->oextra[0])
X
X# ifndef STUPID_CPP	/* otherwise these macros are functions in lock.c */
X#define Is_container(otmp)	(otmp->otyp >= ICE_BOX && otmp->otyp <= BAG_OF_TRICKS)
X#define Is_box(otmp)	(otmp->otyp == LARGE_BOX || otmp->otyp == CHEST)
X#define Is_mbag(otmp)	(otmp->otyp == BAG_OF_HOLDING || otmp->otyp == BAG_OF_TRICKS)
X
X#define is_sword(otmp)	(otmp->otyp >= SHORT_SWORD && otmp->otyp <= KATANA)
X#define bimanual(otmp)	(otmp->olet == WEAPON_SYM && objects[otmp->otyp].oc_bimanual)
X# endif /* STUPID_CPP */
X
X#endif /* OBJ_H /**/
END_OF_FILE
if test 3109 -ne `wc -c <'include/obj.h'`; then
    echo shar: \"'include/obj.h'\" unpacked with wrong size!
fi
# end of 'include/obj.h'
fi
if test -f 'include/unixconf.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'include/unixconf.h'\"
else
echo shar: Extracting \"'include/unixconf.h'\" \(3456 characters\)
sed "s/^X//" >'include/unixconf.h' <<'END_OF_FILE'
X/*	SCCS Id: @(#)unixconf.h	3.0	88/07/21
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#ifdef UNIX
X#ifndef UNIXCONF_H
X#define UNIXCONF_H
X
X/*
X * Some include files are in a different place under SYSV
X * 	BSD		   SYSV
X * <sys/time.h>		<time.h>
X * <sgtty.h>		<termio.h>
X *
X * Some routines are called differently
X * index		strchr
X * rindex		strrchr
X *
X * Also, the code for suspend is only given for BSD
X */
X
X/* #define BSD		/* define for 4.n BSD  */
X			/* also for relatives like SunOS */
X#define ULTRIX		/* define for Ultrix v3.0 or higher (but not lower) */
X			/* Use BSD for < v3.0 */
X			/* "ULTRIX" not to be confused with "ultrix" */
X/* #define SYSV		/* define for System V */
X/* #define NETWORK	/* if running on a networked system */
X			/* e.g. Suns sharing a playground through NFS */
X
X/* #define GENIX	/* Yet Another Unix Clone */
X/* #define HISX		/* Bull Unix for XPS Machines */
X/* #define UNIXPC	/* use in addition to SYSV for AT&T 7300/3B1 */
X			/* also note that the stock cpp qualifies as a
X			   STUPID_CPP for config.h */
X
X/* #define PYRAMID_BUG 	/* avoid a bug on the Pyramid */
X/* #define APOLLO	/* same for the Apollo */
X/* #define RANDOM	/* if neither random/srandom nor lrand48/srand48
X			   is available from your system */
X
X/*
X * Define DEF_PAGER as your default pager, e.g. "/bin/cat" or "/usr/ucb/more"
X * If defined, it can be overridden by the environment variable PAGER.
X * Hack will use its internal pager if DEF_PAGER is not defined.
X * (This might be preferable for security reasons.)
X * #define DEF_PAGER	".../mydir/mypager"
X */
X
X/*
X * If you define MAIL, then the player will be notified of new mail
X * when it arrives. If you also define DEF_MAILREADER then this will
X * be the default mail reader, and can be overridden by the environment
X * variable MAILREADER; otherwise an internal pager will be used.
X * A stat system call is done on the mailbox every MAILCKFREQ moves.
X */
X
X#define	MAIL
X#define	DEF_MAILREADER	"/usr/ucb/Mail"		/* or e.g. /bin/mail */
X#define	MAILCKFREQ	50
X
X#ifdef COMPRESS
X/* Some implementations of compress need a 'quiet' option.
X * If you've got one of these versions, put -q here.
X * You can also include any other strange options your compress needs.
X * If you have a normal compress, just leave it commented out.
X */
X/* #define COMPRESS_OPTIONS	"-q"	/* */
X#endif
X
X#define	FCMASK	0660	/* file creation mask */
X
X
X/*
X * The remainder of the file should not need to be changed.
X */
X
X#if (defined(BSD) || defined(ULTRIX)) && !defined(MSDOS)
X#include	<sys/time.h>
X#else
X#include	<time.h>
X#endif
X
X#define	HLOCK	"perm"	/* an empty file used for locking purposes */
X#define LLOCK	"safelock"	/* link to previous */
X
X#ifndef REDO
X#define Getchar getchar
X#else
X#define tgetch getchar
X#endif
X
X#define SHELL		/* do not delete the '!' command */
X
X#include "system.h"
X
X#if defined(BSD) || defined(ULTRIX)
X#define	SUSPEND		/* let ^Z suspend the game */
X#define memcpy(d, s, n)		bcopy(s, d, n)
X#define memcmp(s1, s2, n)	bcmp(s2, s1, n)
X#else	/* therefore SYSV */
X#define index	strchr
X#define rindex	strrchr
X#endif
X
X/* Use the high quality random number routines. */
X#if defined(BSD) || defined(ULTRIX) || defined(RANDOM)
X#define Rand()	random()
X#define Srand(seed) srandom(seed)
X#else
X#define Rand()	lrand48()
X#define Srand(seed) srand48(seed)
X#endif
X
X#include "extern.h"
X
X#endif /* UNIXCONF_H /* */
X#endif /* UNIX /* */
END_OF_FILE
if test 3456 -ne `wc -c <'include/unixconf.h'`; then
    echo shar: \"'include/unixconf.h'\" unpacked with wrong size!
fi
# end of 'include/unixconf.h'
fi
if test -f 'others/Maketcc.ini' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'others/Maketcc.ini'\"
else
echo shar: Extracting \"'others/Maketcc.ini'\" \(3094 characters\)
sed "s/^X//" >'others/Maketcc.ini' <<'END_OF_FILE'
X#	SCCS Id: @(#)Maketcc.ini	3.0	89/07/07
X# Sample Turbo C 2.0 `make.ini' for NDMAKE 4.5.  Customize it for your setup.
X
X# If .NOIG is used, it *must* be the first directive in this file.
X#.NOIG
X
X# The order to search for rules and files is specified by .SUFFIXES
X.SUFFIXES : .com .exe .obj .c .tpu .pas .asm .y .l
X
X# The directory NDMAKE uses for temporary file
XMAKE_TMP = $(TMP)
X
X# Where NDMAKE looks for file without directory specifications
XVPATH = .;..
X
X# Macros for compilers and assemblers.
XAS	= tasm
XCC	= tcc
XCFLAGS	= -m$(MODEL)
X#LEX	 = lex
X#LFLAGS  =
X#YACC	 = yacc
X#YFLAGS  =
X
X# Other useful macros
XBIN	=
XECHO	= >stdout
XC	= c:\turbo\c
XLIB	= c:\turbo\c\lib
XLIBS	= $(LIB)\emu $(LIB)\math$(MODEL) $(LIB)\c$(MODEL)
XC0	= $(LIB)\c0$(MODEL).obj
XMODEL	= s
X# SETARGV	= $(LIB)\$(MODEL)SETARGV
XLFLAGS =
XTLFLAGS = /c /x
X
X# A universally useful target so "make clean" always works.
Xclean:
X	-(erase *.bak; erase *.map)
X
X#large:
X#	(if exist \bin\c3s.exe do goto end; \
X#	 rename \bin\c3.exe c3s.exe; \
X#	 rename \bin\c3l.exe c3.exe; \
X#	 :end)
X#small:
X#	(if exist \bin\c3s.exe do goto end; \
X#	 rename \bin\c3.exe c3l.exe; \
X#	 rename \bin\c3s.exe c3.exe; \
X#	 :end)
X
X#chkdsk:
X#	chkdsk d:
X
X# .BEFORE and .AFTER can be used to turn DPATH off and on.
X#.BEFORE:; @+echo For help with ndmake, use the command `make -h'
X#.AFTER:; @+echo All done.
X.BEFORE:; @\norton\tm start/C2/N
X.AFTER:; @\norton\tm stop/C2/L/N
X
X.RESPONSE_LINK: tlink link4
X.RESPONSE_LIB:	tlib
X
X# DEFAULT RULES
X#
X#	ASM -> OBJ using MASM.
X.asm.obj:
X	${AS} $<;
X
X#	C -> OBJ using Turbo C.
X.c.obj:
X	${CC} ${CFLAGS} -c $<
X
X#	FOR -> OBJ using Microsoft Fortran.
X#.for.obj:
X#	for1 $<;
X#	pas2
X
X#	Y -> C, for YACC
X#.y.c:
X#	$(YACC) $(YFLAGS) $<
X#	rename ytab.c $@
X
X#	L -> C, for LEX
X#.l.c:
X#	$(LEX) $(LFLAGS) $<
X#	mv lex.yy.c $@
X
X# To produce a `.exe' file from an `.obj' file.  Note that there is a
X# problem because LIBS may be different for linking `.obj' files
X# produced by different compilers (C, FORTRAN, PASCAL, etc).  To avoid
X# this problem you may want to have the C compiler produce `.cbj' files,
X# the FORTRAN compiler produce `.fbj' files, etc.  Then you could write
X# specific rules for `.cbj.exe' and `.fbj.exe' which would use the correct
X# libraries.
X
X# To produce a `.com' file from a `.c' file with Turbo C.
X.c.com:
X	${CC} $(CFLAGS) -mt -lt $<
X	erase $*.obj
X
X# To produce a `.exe' file from a `.c' file.
X.c.exe:
X	${CC} $(CFLAGS) $<
X#	${CC} $(CFLAGS) -c $<
X#	link $*.obj $(SETARGV), $@,, $(LIBS) $(LFLAGS);
X	erase $*.obj
X
X# To produce a `.exe' file from a `.asm' file.
X.asm.exe:
X	${AS} $<;
X	link $*.obj, $@,, $(LIBS)
X	erase $*.obj
X
X# To produce a `.exe' file from a `.for' file.
X#.for.exe:
X#	for1 $<;
X#	pas2
X#	link $*.obj, $@,, $(LIB)\FORTRAN
X#	erase $*.obj
X
X# To produce a `.exe' file from a `.pas' file.
X.pas.exe:
X	tpc $(PFLAGS) $*
X
X# To produce a `.tpu' file from a `.pas' file.
X.pas.tpu:
X	tpc $(PFLAGS) $*
X
X# C obj -> exe
X.obj.exe:
X#	link $< $(SETARGV), $@,, $(LIBS) $(LFLAGS);
X	tlink $(TLFLAGS) $(C0) $< $(SETARGV), $@,, $(LIBS);
X
X# To produce a `.com' file from a `.exe' file.
X.exe.com:
X	exe2bin $*.exe $*.com
X	erase $*.exe
END_OF_FILE
if test 3094 -ne `wc -c <'others/Maketcc.ini'`; then
    echo shar: \"'others/Maketcc.ini'\" unpacked with wrong size!
fi
# end of 'others/Maketcc.ini'
fi
if test -f 'others/NetHack.cnf' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'others/NetHack.cnf'\"
else
echo shar: Extracting \"'others/NetHack.cnf'\" \(3035 characters\)
sed "s/^X//" >'others/NetHack.cnf' <<'END_OF_FILE'
X# A '#' at the beginning of a line means the rest of the line is a comment.
X#
X# This configuration file is set up for two cases, for a hard disk
X# (as drive C:), and for two floppy disks.
X#
X# To change the configuration, comment out the unwanted lines, and
X# uncomment the configuration you want.
X
X
X# *** OPTIONS ***
X#
X# These two options should be used for most setups.  If you're machine isn't
X# very IBM-compatible, and NetHack doesn't work, try commenting out this line.
X#
XOPTIONS=rawio,IBM_BIOS
X# DEC Rainbows will hang if rawio is set, so they should instead use:
X#OPTIONS=IBM_BIOS,DEC_Rainbow
X#
X#
X# Some options to set personal preferences.  Uncomment and change these to
X# suit your personal preference.  If several people are to use the same
X# configuration, options like these should not be set.
X#
X#OPTIONS=name:Janet-V,female,dogname:Fido,catname:Morris,fruit:apricot
X#OPTIONS=packorder:")[%?+/=!(*0_`,endgame:10 top/2 around/own
X#
X#
X# Other general options.  You might also set "silent" so as not to attract
X# the boss's attention.
X#
XOPTIONS=time,rest_on_space,nopickup,number_pad
X
X
X# *** HARD DISK CONFIGURATION ***
X#
XHACKDIR=c:\games\nethack
X#
X#   LEVELS and SAVE default to HACKDIR
X#
X#LEVELS=c:\games\nethack\bones
X#SAVE=c:\games\nethack\bones;n
X#
X#   appending a ";n" to SAVE means don't prompt to insert a disk.
XSAVE=;n
X#
X#RAMDISK=d:
X
X
X# *** 2-FLOPPY CONFIGURATION ***
X#
X# HACKDIR=a:\
X# LEVELS=b:\
X# SAVE=b:\
X# RAMDISK=c:
X
X
X# *** CHARACTER GRAPHICS ***
X#
X# The 32 GRAPHICS characters (0-31) are:
X# stone, vertical wall, horizontal wall, top left corner, top right corner, 
X# bottom left corner, bottom right corner, crosswall, up T wall, down T wall, 
X# left T wall, right T wall, vertical beam, horizontal beam, left slant, right
X# slant, door, floor, corridor, up stairs, down stairs, trap, web, pool,
X# fountain, sink, throne, altar, up ladder, down ladder, vertical drawbridge
X# wall, horizontal drawbridge wall 
X#
X# If you specify less that 32 ASCII values, the remaining characters will be
X# set to their respective defaults.
X#
X#
X# An example using the IBM graphics character set:
X#	   ' '  |   -   .   .   `   '   -   -   -   -   -   |   -   \   /   +   .   #   <   >   ^   "   }   {   #   \   _   <   >   #   #
XGRAPHICS = 032 179 196 218 191 192 217 197 193 194 180 195 179 196 092 047 239 249 177 060 062 094 157 247 244 035 190 220 060 062 186 205
X# An alternative:
X#GRAPHICS= 032 186 205 201 187 200 188 206 202 203 185 204 179 196 092 047 239 249 177 060 062 094 034 247 244 035 092 095 060 062 179 196
X#
X#
X# Using the DEC Rainbow/ANSI line-drawing character set:
X#
X# You must also set the DECRainbow option, above.  NetHack will then switch
X# into the line drawing character set for any values over 128 below.  Just
X# add 128 to the value of any line-drawing character you want to use.  You
X# can use characters from both sets this way.  These are also the characters
X# to use for the ANSI ruling character set '0'.
X#
X#GRAPHICS= 032 248 241 236 235 237 234 238 246 247 245 244 248 241 092 047 043 254 225
END_OF_FILE
if test 3035 -ne `wc -c <'others/NetHack.cnf'`; then
    echo shar: \"'others/NetHack.cnf'\" unpacked with wrong size!
fi
# end of 'others/NetHack.cnf'
fi
if test -f 'others/pcunix.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'others/pcunix.c'\"
else
echo shar: Extracting \"'others/pcunix.c'\" \(3478 characters\)
sed "s/^X//" >'others/pcunix.c' <<'END_OF_FILE'
X/*	SCCS Id: @(#)pcunix.c	3.0	88/07/21
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X/* This file collects some Unix dependencies; pager.c contains some more */
X
X/*
X * The time is used for:
X *	- seed for rand()
X *	- year on tombstone and yymmdd in record file
X *	- phase of the moon (various monsters react to NEW_MOON or FULL_MOON)
X *	- night and midnight (the undead are dangerous at midnight)
X *	- determination of what files are "very old"
X */
X
X#include "hack.h"	/* mainly for index() which depends on BSD */
X#ifdef TOS
X#ifdef UNIXDEBUG
X#include <errno.h>
X#else
X#include <error.h>
X#endif /* UNIXDEBUG */
X#endif
X
X#include	<sys/types.h>
X#include	<sys/stat.h>
X
X#ifndef TOS
Xstatic struct stat buf, hbuf;
Xvoid
Xsetrandom()
X{
X	(void) Srand((int) time ((time_t *) 0));
X}
X
Xstatic struct tm *
Xgetlt()
X{
X	time_t date;
X
X	(void) time(&date);
X	return(localtime(&date));
X}
X
Xint
Xgetyear()
X{
X	return(1900 + getlt()->tm_year);
X}
X
Xchar *
Xgetdate()
X{
X	static char datestr[7];
X	register struct tm *lt = getlt();
X
X	Sprintf(datestr, "%2d%2d%2d",
X		lt->tm_year, lt->tm_mon + 1, lt->tm_mday);
X	if(datestr[2] == ' ') datestr[2] = '0';
X	if(datestr[4] == ' ') datestr[4] = '0';
X	return(datestr);
X}
X
Xint
Xphase_of_the_moon()			/* 0-7, with 0: new, 4: full */
X{					/* moon period: 29.5306 days */
X					/* year: 365.2422 days */
X	register struct tm *lt = getlt();
X	register int epact, diy, golden;
X
X	diy = lt->tm_yday;
X	golden = (lt->tm_year % 19) + 1;
X	epact = (11 * golden + 18) % 30;
X	if ((epact == 25 && golden > 11) || epact == 24)
X		epact++;
X
X	return( (((((diy + epact) * 6) + 11) % 177) / 22) & 7 );
X}
X
Xint
Xnight()
X{
X	register int hour = getlt()->tm_hour;
X
X	return(hour < 6 || hour > 21);
X}
X
Xint
Xmidnight()
X{
X	return(getlt()->tm_hour == 0);
X}
X
Xvoid
Xgethdate(name)
Xchar *name;
X{
X/* old version - for people short of space */
X/*
X/* register char *np;
X/*      if(stat(name, &hbuf))
X/*	      error("Cannot get status of %s.",
X/*		      (np = rindex(name, '/')) ? np+1 : name);
X/*
X/* version using PATH from: seismo!gregc@ucsf-cgl.ARPA (Greg Couch) */
X
X/*
X * The problem with   #include  <sys/param.h> is that this include file
X * does not exist on all systems, and moreover, that it sometimes includes
X * <sys/types.h> again, so that the compiler sees these typedefs twice.
X */
X#define	 MAXPATHLEN      1024
X
X    register char *np, *path;
X    char filename[MAXPATHLEN+1], *getenv();
X
X    if (index(name, '/') != NULL || (path = getenv("PATH")) == NULL)
X	path = "";
X
X    for (;;) {
X	if ((np = index(path, ':')) == NULL)
X	    np = path + strlen(path);       /* point to end str */
X	if (np - path <= 1)		     /* %% */
X	    Strcpy(filename, name);
X	else {
X	    (void) strncpy(filename, path, np - path);
X	    filename[np - path] = '/';
X	    Strcpy(filename + (np - path) + 1, name);
X	}
X	if (stat(filename, &hbuf) == 0)
X	    return;
X	if (*np == '\0')
X	path = "";
X	path = np + 1;
X    }
X    error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name);
X}
X
Xint
Xuptodate(fd) {
X    if(fstat(fd, &buf)) {
X	pline("Cannot get status of saved level? ");
X	return(0);
X    }
X    if(buf.st_mtime < hbuf.st_mtime) {
X	pline("Saved level is out of date. ");
X	return(0);
X    }
X    return(1);
X}
X#endif /* TOS /* */
X
Xvoid
Xregularize(s)	/* normalize file name - we don't like .'s, /'s, spaces */
Xregister char *s;
X{
X	register char *lp;
X
X	while((lp=index(s, '.')) || (lp=index(s, '/')) || (lp=index(s,' ')))
X		*lp = '_';
X}
END_OF_FILE
if test 3478 -ne `wc -c <'others/pcunix.c'`; then
    echo shar: \"'others/pcunix.c'\" unpacked with wrong size!
fi
# end of 'others/pcunix.c'
fi
if test -f 'src/lev_comp.l' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/lev_comp.l'\"
else
echo shar: Extracting \"'src/lev_comp.l'\" \(2732 characters\)
sed "s/^X//" >'src/lev_comp.l' <<'END_OF_FILE'
X%{
X/*	SCCS Id: @(#)lev_lex.c	3.0	89/07/02
X/*	Copyright (c) 1989 by Jean-Christophe Collet */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#include "hack.h"
X#include "lev_comp.h"
X#include "sp_lev.h"
X
Xint line_number = 1;
X
X/* This is *** UGLY *** but I can't think a better way to do it
X * I really need a huge buffer to scan maps...
X */
X
X#undef YYLMAX
X#define YYLMAX	2048
X
X%}
X%s MAPC
X%%
X^#.*\n		{ line_number++; }
XMAZE		return MAZE_ID;
XLEVEL		return LEVEL_ID;
XGEOMETRY	return GEOMETRY_ID;
X^MAP$		{ BEGIN MAPC; }
X<MAPC>[-|}{+SK\\#. ]*\n	{ line_number++; yymore(); }	
X<MAPC>ENDMAP$	{ BEGIN 0;
X		  yytext[yyleng-7] = 0; /* Discard \nENDMAP */
X		  yylval.map = (char *) alloc(strlen(yytext)+1);
X		  strcpy(yylval.map, yytext+1);
X		  return MAP_ID;
X		}
XOBJECT		return OBJECT_ID;
XMONSTER		return MONSTER_ID;
XTRAP		return TRAP_ID;
XDOOR		return DOOR_ID;
XDRAWBRIDGE	return DRAWBRIDGE_ID;
XMAZEWALK	return MAZEWALK_ID;
XREGION		return REGION_ID;
XRANDOM_OBJECTS	return RANDOM_OBJECTS_ID;
XRANDOM_MONSTERS	return RANDOM_MONSTERS_ID;
XRANDOM_PLACES	return RANDOM_PLACES_ID;
XALTAR		return ALTAR_ID;
XLADDER		return LADDER_ID;
XNON_DIGGABLE	return NON_DIGGABLE_ID;
XROOM		return ROOM_ID;
Xopen		{ yylval.i=D_ISOPEN; return DOOR_STATE; }
Xclosed		{ yylval.i=D_CLOSED; return DOOR_STATE; }
Xlocked		{ yylval.i=D_LOCKED; return DOOR_STATE; }
Xnodoor		{ yylval.i=D_NODOOR; return DOOR_STATE; }
Xbroken		{ yylval.i=D_BROKEN; return DOOR_STATE; }
Xnorth		{ yylval.i=W_NORTH; return DIRECTION; }
Xeast		{ yylval.i=W_EAST; return DIRECTION; }
Xsouth		{ yylval.i=W_SOUTH; return DIRECTION; }
Xwest		{ yylval.i=W_WEST; return DIRECTION; }
Xrandom		{ yylval.i = -1; return RANDOM_TYPE; }
Xobject		return O_REGISTER;
Xmonster		return M_REGISTER;
Xplace		return P_REGISTER;
Xalign		return A_REGISTER;
Xleft		{ yylval.i=1; return LEFT_OR_RIGHT; }
Xright		{ yylval.i=3; return LEFT_OR_RIGHT; }
Xcenter		{ yylval.i=2; return CENTER; }
Xtop		{ yylval.i=1; return TOP_OR_BOT; }
Xbottom		{ yylval.i=3; return TOP_OR_BOT; }
Xlit		{ yylval.i=1; return LIGHT_STATE; }
Xunlit		{ yylval.i=0; return LIGHT_STATE; }
Xlaw		{ yylval.i=A_LAW; return ALIGNMENT; }
Xneutral		{ yylval.i=A_NEUTRAL; return ALIGNMENT; }
Xchaos		{ yylval.i=A_CHAOS; return ALIGNMENT; }
Xshrine		{ yylval.i=1; return ALTAR_TYPE; }
Xaltar		{ yylval.i=0; return ALTAR_TYPE; }
Xup		{ yylval.i=1; return UP_OR_DOWN; }
Xdown		{ yylval.i=0; return UP_OR_DOWN; }
X[0-9]+		{ yylval.i=atoi(yytext); return INTEGER; }
X\"[^"]*\"	{ yytext[yyleng-1] = 0; /* Discard the trailing \" */
X		  yylval.map = (char *) alloc(strlen(yytext+1)+1);
X		  strcpy(yylval.map, yytext+1); /* Discard the first \" */
X		  return STRING; }
X\n		{ line_number++; }
X[ \t]+		;
X'.'		{ yylval.i = yytext[1]; return CHAR; }
X.		{ return yytext[0]; }
X%%
END_OF_FILE
if test 2732 -ne `wc -c <'src/lev_comp.l'`; then
    echo shar: \"'src/lev_comp.l'\" unpacked with wrong size!
fi
# end of 'src/lev_comp.l'
fi
echo shar: End of archive 36 \(of 38\).
cp /dev/null ark36isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 38 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0