[comp.sources.games] v02i032: nethack - display oriented dungeons & dragons, Patch1

games-request@tekred.TEK.COM (08/15/87)

Submitted by: mike@genat.UUCP (Mike Stephenson)
Comp.sources.games: Volume 2, Issue 32
Archive-name: nethack/Patch1

	[This is the first official patch for the previously posted
	 nethack game.  Send additional bugs/fixes to Mike.   -br]

#! /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 shell archive."
# Contents:  README.NEW Fixes.1.4 Manifest.upd Makefile.tcc Maketcc.ini
#   update.patches
# Wrapped by billr@tekred on Fri Aug 14 15:09:29 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f README.NEW -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"README.NEW\"
else
echo shar: Extracting \"README.NEW\" \(2441 characters\)
sed "s/^X//" >README.NEW <<'END_OF_README.NEW'
X			NetHack Release 1.4 README
X
X	Hi there folks.  Here is the new release of NetHack.  What I have
Xdone over the past few weeks is to collect and implement all of the bug fixes
Xand modifications (there were even a few additions!) to the code.
X
X	To implement this update, unpack the files in the same directory as
Xyour original ***UNADULTERATED*** 1.3d sources.  It is imperitive that you
Xhaven't patched any of the source since the update is done in a very simple
Xway by ed (approximately 150Kb size is saved doing it this way).  Since ed is
Xbeing used to apply the patches, they will be applied by absolute line number,
Xnot by context.  As a result, any additional or missing lines in your code
Xcould (almost certainly will) cause the patches to be applied in the wrong
Xplaces.
X
X	You can (with some difficulty) apply the patches by hand.  It is
Xeasier to do this with a multi-window editor like Emacs.
X
X	There are a couple of additional "Make" files included to extend
Xthe portability to include the Turbo "C" compiler.  These files have "tcc"
Xin the name.
X
X	The file Manifest gives a list of the files which will be modified
Xduring the update process.
X
X	The Fixes.1.4 file gives a more or less complete list of bug fixes.
X
X	The update is provided in a form which can be run as a shell script.
XEither "sh" or "csh" can be used.  Simply type "[c]sh update.patches".  You
Xwill require "cp" and "ed".  Each of the (68) files it modifies will be
Xprocessed as follows:
X
X	cp $file $file.orig
X	ed $file
X
X	... modifications made ...
X
X	w
X	q
X
X	There *are* a few bugs still in the code.  Here's a list of the ones
XI know about:
X
X	1)	There is still something wrong with mkmon().  It won't make
X		"B"'s and it seems to be responsible for some of those deep
X	in the dungeon crashes.
X
X	2)	The leash code (as I explained in the README for the initial
X		release) is very crude.  It won't handle the case of you
X	dropping the leash while it is still attached to the dog.  If you do,
X	the game still considers you and the dog to be "attached".
X
X	3)	I have modified the files to build on Xenix and Dos, but have
X		not tested them.  There may be a few minor glitches left.
X
X	I will be going to England for three weeks starting on the 19th of
XAugust.  As a result, the mail is going to stack up here.  I will take all
Xof the patches and fixes when I get back and put together an update for a
X1.5 (or maybe 2.0) release.
X
X			Happy Hacking!!!
X						Mike Stephenson
END_OF_README.NEW
if test 2441 -ne `wc -c <README.NEW`; then
    echo shar: \"README.NEW\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Fixes.1.4 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Fixes.1.4\"
else
echo shar: Extracting \"Fixes.1.4\" \(2796 characters\)
sed "s/^X//" >Fixes.1.4 <<'END_OF_Fixes.1.4'
X		NetHack Fixes List	Revision 1.4
X
Xdogmove.c:	Death code fixed so dog with <1 hp doesn't "die of hunger".
X		Slack leash message not invoked unless leash attached.
X		Added "DOGNAME" option (thanks to Roland McGrath).
X
Xu_init.c:	Priest(esse)s start off with their weapon blessed.
X
Xspell.c:	Allows high level characters to cast spells upon themselves
Xzap.c:		(such as polymorph).
X
Xpray.c:		allows for de-cursing worn rings as well as weapons.
X		Knights, Priests and Priestesses can now "#turn" undead
X		(UNDEAD = "VWZ &").
X		fixed bugs in blessings bestowed by gods.
X
Xread.c:		SPE_CAUSE_FEAR does not give a "You hear..." message unless no
X		monsters are nearby.
X		fix to bug in "do_genocide" which allowed player to wipe out
X		all '@'s and survive.
X
Xpolyself.c:	fix to rehumanize to catch players who wipe out '@'s while
X		in polymorphed form as they de-polymorph.
X
Xwield.c:	bug causing segmentation fault on "w-" followed by "w[weapon]"
X		fixed by chuq@sun
X
Xtrap.c:		similar null pointer problem corrected.
X
Xmake.exe.uu:	correction of names at top of uuencoded files which caused the
Xnansi.sys.uu:	original files to be overwritten by the decoded files when
X		uudecode was invoked. (found by len@elxsi).
X
Xnethack.6:	general beautification and appropriate acknowledgement of
X		trademarks to avoid getting sued. :-) (thanks chuq)
X
Xhelp:		addition of "V" and "#" commands to help text.
X
Xinvent.c:	fix to REDO bug inhibiting the appearance of the item usage
X		prompt.
X
Xmakedefs.c:	added "{", "\" and corrected Rockmole definition in "data".
X		fixed things for Dos users (file open modes, etc.)
X
Xcmd.c:		added #[command] auto-substitution.
X
Xtermcap.c:	fixed termlib / curses dependencies.
X		fixed null padding bug on output of SO/SE/HI/HE.
X
Xpcmain.c:	many fixes by Ralf Brown (ralf@b.gp.cs.cmu.edu) to allow the
Xpcunix.c:	program to be compiled using the Turbo C compiler in a Dos
XMakefile.tcc:	enviornment.
X
Xengrave.c:	engravings burned or engraved into the floor (as opposed to
X		those made with finger or marker) can be felt out when blind.
X		(inspired by Stefan Wrammerfors).
X
Xmon.c:		fixed "monster looked at a strange trap" bug for 16 bit
X		machines (long vs. int problem reported by mike@cimcor). 
X
Xfight.c:	hitmm() fixed to return 0 (no hit) if either monster passed
X		in is non-existant.  This fixes a number of null reference
X		problems (ex. monmove.c[~360]).
X		Misc zero reference errors fixed by Paul Eggert. eggert@grand
X
XMakefile.xenix:	New version (that works) supplied by Greg Laskin greg@smash
X
Xfountain.c:	Misc zero reference errors fixed by Paul Eggert. eggert@grand
Xsearch.c:
X
Xoptions.c:	New options added for GRAPHICS, DOGNAME, and new routine
X		added to allow easier sorting of string parameters (":,"
X		are considered to be string terminators for copying in
X		name, and dogname).
END_OF_Fixes.1.4
if test 2796 -ne `wc -c <Fixes.1.4`; then
    echo shar: \"Fixes.1.4\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Manifest.upd -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Manifest.upd\"
else
echo shar: Extracting \"Manifest.upd\" \(562 characters\)
sed "s/^X//" >Manifest.upd <<'END_OF_Manifest.upd'
XMakefile.pc
XMakefile.unix
XMakefile.xenix
Xapply.c
Xcmd.c
Xconfig.h
Xdata.base
Xdecl.c
Xdo.c
Xdo_name.c
Xdog.c
Xdogmove.c
Xeat.c
Xend.c
Xengrave.c
Xfight.c
Xfountain.c
Xhack.c
Xhack.h
Xhelp
Xhh
Xinvent.c
Xlev.c
Xmakedefs.c
Xmakemon.c
Xmklev.c
Xmkmaze.c
Xmkobj.c
Xmon.c
Xmsdos.c
Xmsdos.h
Xnethack.6
Xo_init.c
Xobjclass.h
Xobjects.h
Xoptions.c
Xpager.c
Xpcmain.c
Xpctty.c
Xpcunix.c
Xpolyself.c
Xpotion.c
Xpray.c
Xpri.c
Xprisym.c
Xread.c
Xrip.c
Xrm.h
Xrnd.c
Xsave.c
Xsearch.c
Xshk.c
Xsit.c
Xspell.c
Xsteal.c
Xtermcap.c
Xtopl.c
Xtopten.c
Xtrap.c
Xu_init.c
Xunixmain.c
Xunixtty.c
Xversion.c
Xwield.c
Xwizard.c
Xwrite.c
Xyou.h
Xzap.c
END_OF_Manifest.upd
if test 562 -ne `wc -c <Manifest.upd`; then
    echo shar: \"Manifest.upd\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Makefile.tcc -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Makefile.tcc\"
else
echo shar: Extracting \"Makefile.tcc\" \(4358 characters\)
sed "s/^X//" >Makefile.tcc <<'END_OF_Makefile.tcc'
X#
X#	SCCS Id: @(#)Makefile.tcc	1.4	87/08/08
X# 	Makefile for NetHack (PC) version 1.0 written using
X#	Turbo C v1.0
X# 
X# Unfortunately, large model is limited to a total of 64K global data
X# Huge memory model, remove stack probes, optimize for space:
XWIZARD=
XV = 14
XCFLAGS = -m$(MODEL) -DLINT_ARGS -DVER=$(V) $(WIZARD) -N- -Z -K- -O -w-pro -w-nod
X
X# The game name
XGAME = hack.exe
X
X# The game directory
XGAMEDIR = .
X
X# The directory containing the libraries
XLIBDIR = c:\c\lib
X
X# All object modules
XOBJS = decl.obj apply.obj bones.obj cmd.obj do.obj dothrow.obj\
X	do_name.obj do_wear.obj dog.obj dogmove.obj eat.obj end.obj \
X	engrave.obj fight.obj fountain.obj hack.obj invent.obj \
X	lev.obj main.obj makemon.obj mhitu.obj mklev.obj \
X	mkmaze.obj mkobj.obj mkshop.obj mon.obj monmove.obj\
X	monst.obj o_init.obj objnam.obj options.obj \
X	pager.obj polyself.obj potion.obj pray.obj pri.obj prisym.obj\
X	read.obj rip.obj rumors.obj save.obj \
X	search.obj shk.obj shknam.obj sit.obj spell.obj steal.obj \
X	termcap.obj timeout.obj topl.obj topten.obj track.obj trap.obj \
X	tty.obj unix.obj u_init.obj vault.obj wield.obj \
X	wizard.obj worm.obj worn.obj write.obj zap.obj \
X	version.obj rnd.obj alloc.obj msdos.obj
X
X# The main target
X#
X$(GAME) : $(OBJS)
X	link /x:400 $(LIBDIR)\c0$(MODEL).obj @objs.lnk,$(GAME),,$(LIBDIR)\c$(MODEL).lib
X
X#	variable auxilary files.
X#
XVARAUX = data rumors
X
Xinstall : $(GAME) $(VARAUX)
X	- exepack $(GAME) $(GAMEDIR)\$(GAME)
X	- exemod $(GAMEDIR)\$(GAME) /max 1
X
Xclean :
X	erase $(GAME)
X
Xspotless: clean
X	erase *.obj
X	erase main.c
X	erase tty.c
X	erase unix.c
X
Xsrcs :
X	copy makefile \tmp
X	copy *.c \tmp
X	copy *.h \tmp
X	copy \local\make\make.doc \tmp
X	copy \local\make\make.ini \tmp
X	copy \bin\make.exe \tmp
X	cd \tmp
X	time
X	touch *.*
X	arc m hack$Vs * *.*
X	cd $(CWD)
X
X
X#	Other dependencies
X#
XRUMORFILES= rumors.bas rumors.kaa rumors.mrx
X
Xmakedefs.exe:	makedefs.c alloc.obj config.h
X	cl -AL makedefs.c alloc.obj
X
X
Xrumors :  config.h $(RUMORFILES) makedefs.exe
X	makedefs.exe -r
X
Xdata :  config.h data.bas makedefs.exe
X	makedefs.exe -d
X
Xonames.h :  config.h objects.h makedefs.exe
X	makedefs.exe -o
X
X#	Below is a kluge.  date.h should actually depend on any source
X#	module being changed. (but hack.h is close enough for most).
X#
Xdate.h :  hack.h makedefs.exe
X	makedefs.exe -D
X
Xtrap.h :  config.h makedefs.exe
X	makedefs.exe -t
X
Xmain.obj : main.c
X
Xmain.c :  pcmain.c hack.h
X	copy pcmain.c main.c
X	touch main.c
X
Xtty.obj : tty.c
X
Xtty.c :  pctty.c hack.h msdos.h
X	copy pctty.c tty.c
X	touch tty.c
X
Xunix.obj : unix.c
X
Xunix.c :  pcunix.c hack.h mkroom.h
X	copy pcunix.c unix.c
X	touch unix.c
X
Xdecl.obj :  hack.h mkroom.h
Xapply.obj :  hack.h edog.h mkroom.h
Xbones.obj :  hack.h
Xhack.obj :  hack.h
Xcmd.obj :  hack.h func_tab.h msdos.h
Xdo.obj :  hack.h
Xdo_name.obj :  hack.h
Xdo_wear.obj :  hack.h
Xdog.obj :  hack.h edog.h mkroom.h
Xdogmove.obj :  hack.h mfndpos.h
Xdothrow.obj :  hack.h
Xeat.obj :  hack.h
Xend.obj :  hack.h
Xengrave.obj :  hack.h
Xfight.obj :  hack.h
Xfountain.obj :  hack.h
Xinvent.obj :  hack.h wseg.h
Xioctl.obj :  config.h
Xlev.obj :  hack.h mkroom.h wseg.h
Xmakemon.obj :  hack.h
Xmhitu.obj :  hack.h
Xmklev.obj :  hack.h mkroom.h
Xmkmaze.obj :  hack.h mkroom.h
Xmkobj.obj :  hack.h
Xmkshop.obj :  hack.h mkroom.h eshk.h
Xmon.obj :  hack.h mfndpos.h
Xmonmove.obj :  hack.h mfndpos.h
Xmonst.obj :  hack.h eshk.h
Xo_init.obj :  config.h objects.h onames.h
Xobjnam.obj :  hack.h
Xoptions.obj :  config.h hack.h
Xpager.obj :  hack.h
Xpolyself.obj :  hack.h
Xpotion.obj :  hack.h
Xpray.obj :  hack.h
Xpri.obj :  hack.h
Xprisym.obj :  hack.h wseg.h
Xread.obj :  hack.h
Xrip.obj :  hack.h
X	tcc -c $(CFLAGS) -d- rip.c
Xrumors.obj :  config.h
Xsave.obj :  hack.h
Xsearch.obj :  hack.h
Xshk.obj :  hack.h mfndpos.h mkroom.h eshk.h
Xshknam.obj :  hack.h
Xsit.obj :  hack.h
Xspell.obj:  hack.h
Xsteal.obj :  hack.h
Xtermcap.obj :  config.h flag.h
Xtimeout.obj :  hack.h
Xtopl.obj :  hack.h
Xtopten.obj :  hack.h
Xtrack.obj :  hack.h
Xtrap.obj :  hack.h mkroom.h
Xu_init.obj :  hack.h
Xvault.obj :  hack.h mkroom.h
Xversion.obj : hack.h date.h
Xwield.obj :  hack.h
Xwizard.obj :  hack.h
Xworm.obj :  hack.h wseg.h
Xworn.obj :  hack.h
Xwrite.obj :  hack.h
Xzap.obj :  hack.h
Xmsdos.obj : msdos.h
Xextern.h: config.h
X	touch extern.h
Xhack.h :  config.h objclass.h monst.h gold.h trap.h obj.h flag.h rm.h permonst.h onames.h spell.h extern.h you.h
X	touch hack.h
Xobjects.h :  config.h objclass.h
X	touch objects.h
END_OF_Makefile.tcc
if test 4358 -ne `wc -c <Makefile.tcc`; then
    echo shar: \"Makefile.tcc\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Maketcc.ini -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Maketcc.ini\"
else
echo shar: Extracting \"Maketcc.ini\" \(1759 characters\)
sed "s/^X//" >Maketcc.ini <<'END_OF_Maketcc.ini'
X#	SCCS Id: @(#)Maketcc.ini	1.4	87/08/08
X# This is a sample `make.ini' file for NDMAKE v3.7.  You will probably want
X# to customize it for your system.
X
X
X
X# The order to search for rules and files is specified by .SUFFIXES
X#.SUFFIXES : .exe .obj .c .for .asm
X
X# A few macros.
XCFLAGS = -m$(MODEL)
XMODEL = h
XLIBS = c:\c\lib\emu.lib c:\c\lib\math$(MODEL).lib c:\c\lib\c$(MODEL).lib
XBIN =
XLFLAGS =
X
X# A universally useful target.
X#clean:
X#	+-erase *.bak
X#	+-erase *.map
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
X
X# DEFAULT RULES
X# To produce a `.obj' file from a `.asm' file using MASM.
X.asm.obj:
X	masm $*.asm;
X
X# To produce a `.obj' file from a `.c' file using Microsoft C. 
X.c.obj:
X	tcc -c $(CFLAGS) $*.c
X
X# To produce a `.obj' file from a `.for' file using Microsoft Fortran.
X.for.obj:
X	for1 $*.for;
X	pas2
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.obj.exe:
X	tlink c:\c\lib\c0$(MODEL).obj $*.obj,$@,,$(LIBS) $(LFLAGS);
X
X# To produce a `.exe' file from a `.asm' file.
X.asm.exe:
X	masm $*.asm;
X	tlink $*.obj, $@,, $(LIBS)
X	erase $*.obj
X
X# To produce a `.exe' file from a `.c' file.
X.c.exe:
X	tcc $(CFLAGS) $*.c
X	erase $*.obj
X
X# To produce a `.exe' file from a `.for' file.
X.for.exe:
X	for1 $*.for;
X	pas2
X	link $*.obj, $@,, $(LIB)\FORTRAN.LIB
X	erase $*.obj
END_OF_Maketcc.ini
if test 1759 -ne `wc -c <Maketcc.ini`; then
    echo shar: \"Maketcc.ini\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f update.patches -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"update.patches\"
else
echo shar: Extracting \"update.patches\" \(43078 characters\)
sed "s/^X//" >update.patches <<'END_OF_update.patches'
Xcp Makefile.pc Makefile.pc.orig
Xed Makefile.pc <<ED_EOF
X114a
Xdothrow.obj :  hack.h
X.
X103a
X	touch unix.c
X.
X100c
Xunix.obj : unix.c
X.
X98a
X	touch tty.c
X.
X95c
Xtty.obj : tty.c
X.
X93a
X	touch main.c
X.
X90c
Xmain.obj : main.c
X.
X87,88c
Xtrap.h :  config.h makedefs.exe
X	makedefs.exe -t
X.
X84,85c
Xdate.h :  hack.h makedefs.exe
X	makedefs.exe -D
X.
X80a
Xdata :  config.h data.bas makedefs.exe
X	makedefs.exe -d
X
Xonames.h :  config.h objects.h makedefs.exe
X	makedefs.exe -o
X
X.
X78,79c
Xrumors :  config.h $(RUMORFILES) makedefs.exe
X	makedefs.exe -r
X.
X75,76d
X72,73c
Xmakedefs.exe:	makedefs.c alloc.obj config.h
X	cl -AL makedefs.c alloc.obj
X.
X70c
XRUMORFILES= rumors.bas rumors.kaa rumors.mrx
X.
X18c
XOBJS = decl.obj apply.obj bones.obj cmd.obj do.obj dothrow.obj\
X.
X10a
XLIBS =
XLFLAGS =
XMODEL = L
XSETARGV = $(LIB)\$(MODEL)SETARGV
X.SUFFIXES: .exe .obj .c
X.c.obj:; cl $(CFLAGS) -c $*.c
X.c.exe:;
X    cl $(CFLAGS) -c $*.c
X    link $*.obj $(SETARGV), $@,, $(LIBS) $(LFLAGS);
X
X.
X9c
XCFLAGS = -A$(MODEL) -DREGBUG -DLINT_ARGS -DVER=$V $(WIZARD) -Ot -Gs -Gt100
X.
X2c
X#	SCCS Id: @(#)Makefile.pc	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp Makefile.unix Makefile.unix.orig
Xed Makefile.unix <<ED_EOF
X146a
X
Xtags: $(SOURCES)
X	@echo ctags -tw ...
X	@ctags -tw $(SOURCES)
X  
X.
X137a
X	touch $(GAMEDIR)/perm $(GAMEDIR)/record
X.
X134c
Xinstall: $(VARAUX) $(GAME)
X	-mkdir $(GAMEDIR)
X	-mkdir $(GAMEDIR)/save
X.
X83c
X	./makedefs -o
X.
X80c
X	./makedefs -t
X.
X77c
X	./makedefs -D
X.
X74c
X	./makedefs -d
X.
X71c
X	./makedefs -r
X.
X60c
X	@cc $(LFLAGS) -o $(GAME) $(HOBJ) $(TERMLIB)
X.
X22c
XLFLAGS =
X.
X2c
X#	SCCS Id: @(#)Makefile.unix	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp Makefile.xenix Makefile.xenix.orig
Xed Makefile.xenix <<ED_EOF
X288d
X286d
X284d
X282d
X280d
X278d
X276d
X274d
X272d
X270d
X268d
X266d
X264d
X262d
X260d
X258d
X256d
X254d
X252d
X250d
X248d
X246d
X244d
X242d
X240d
X238d
X236d
X234d
X232d
X230d
X228d
X226d
X224d
X222d
X220d
X218d
X216d
X214d
X212d
X210d
X208d
X206d
X204d
X202d
X200d
X198d
X196d
X194d
X192d
X190d
X188d
X186d
X184d
X182d
X180d
X176,178d
X174d
X172d
X170d
X168d
X166d
X164d
X161,162d
X103,105d
X98c
X	cc ${CFLAGS} -c tty.c
X.
X92d
X71a
XSalloc.o:	alloc.c
X	cp alloc.c Salloc.c
X	cc -O -c Salloc.c
Xpc: 
X	cd dos; make
X
X.
X69,70c
Xmakedefs:	makedefs.c Salloc.o config.h
X	cc -O -o makedefs Salloc.o makedefs.c
X.
X65a
X	
X.
X63,64c
X	cc $(LFLAGS) -m hack.map -o $(GAME) /lib/Lsignal.o $(CRT0) $(HOBJ) $(LIBS) -SEG#256
X.
X61a
X.c.o:
X	cc -O -c -Gt24 ${CFLAGS} $*.c
X
X.
X24,25c
XMANDIR  = 
XCFLAGS = -LARGE -Ml
X.
X15,16c
XLIBS = ${TERMLIB} 
X.
X12,13d
X2c
X#	SCCS Id: @(#)Makefile.xenix	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp apply.c apply.c.orig
Xed apply.c <<ED_EOF
X187d
X183,185d
X1c
X/*	SCCS Id: @(#)apply.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp cmd.c cmd.c.orig
Xed cmd.c <<ED_EOF
X348a
X#endif
X.
X347a
X#ifdef COM_COMPL
X	get_ext_cmd(buf);
X#else
X.
X249c
X	if(!*cmd || *cmd == (char)0377 || (flags.no_rest_on_space && *cmd == ' ')){
X.
X247c
X	if(!*cmd || *cmd == (char)0377) {
X.
X214a
X	"turn", "turn undead", doturn,
X.
X196c
X	{GOLD_SYM, doprgold},
X.
X123c
X#endif /* REDO */
X.
X84c
Xextern int in_doagain;
X.
X40c
X#ifdef DGKMOD
X.
X16c
Xint dosit(), doturn();
X.
X1c
X/*	SCCS Id: @(#)cmd.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp config.h config.h.orig
Xed config.h <<ED_EOF
X206a
X#define COM_COMPL	/* Command line completion by John S. Bien */
X#define GRAPHICS	/* Funky screen character support (Eric S. Raymond) */
X#define HACKOPTIONS	/* Support DGK-style HACKOPTIONS processing (ESR) */
X.
X187c
X
X#define	DOGNAME		/* Name of your first dog as an option */ 
X.
X170,177d
X147a
X * otherwise:
X *	#define	Bitfield(x,n)	unsigned x:n
X.
X108a
X#define memcpy(d, s, n)		bcopy(s, d, n)
X#define memcmp(s1, s2, n)	bcmp(s2, s1, n)
X.
X35,37c
X/* #define TERMINFO		/* uses "curses" rather than termcap */
X
X#ifdef __TURBOC__
X#define	alloc	malloc
X#define	signal	ssignal
X.
X29c
X#define VERSION	"1.4f"	/* version number. */
X.
X24a
X/* #define	GENIX		/* Yet Another Unix Clone */
X.
X14d
X1c
X/*	SCCS Id: @(#)config.h	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp data.base data.base.orig
Xed data.base <<ED_EOF
X25c
X`	an enormous rock
X.
X1,2c
X	NetHack & Quest data file - version 1.1
X@	human (or you in human guise)
X.
Xw
Xq
XED_EOF
X
Xcp decl.c decl.c.orig
Xed decl.c <<ED_EOF
X14d
X7a
X
X#ifdef GRAPHICS
Xstruct symbols defsyms = {
X    ' ', '|', '-', '-', '-', '-', '-', '+', '.', '#', '<', '>', '^',
X#ifdef FOUNTAINS
X    '}', '{',
X#endif
X#ifdef NEWCLASS
X    '\\',
X#endif
X#ifdef SPIDERS
X    '"',
X#endif
X};
X#endif
Xstruct symbols showsyms;	/* will contain the symbols actually used */
X
X.
X1c
X/*	SCCS Id: @(#)decl.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp do.c do.c.orig
Xed do.c <<ED_EOF
X301c
X	read_engr_at(u.ux,u.uy);
X.
X27c
X	if(obj->olet == GOLD_SYM) {		/* pseudo object */
X.
X1c
X/*	SCCS Id: @(#)do.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp do_name.c do_name.c.orig
Xed do_name.c <<ED_EOF
X215,221c
X	"Ron", "Tom", "Wilmar", "Nick Danger", "Phoenix", "Miracleman",
X	"Stephan"
X.
X209d
X55c
X	getpos(&cc, 0, "the monster you want to name");
X.
X44,46c
X	cc->x = cx;
X	cc->y = cy;
X	return(0);
X.
X37,39c
X			cc->x = -1;
X			cc->y = 0;
X			return(0);
X.
X16d
X10,11c
Xgetpos(cc,force,goal)
Xcoord	*cc;
Xint force; char *goal;
X{
X.
X1c
X/*	SCCS Id: @(#)do_name.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp dog.c dog.c.orig
Xed dog.c <<ED_EOF
X20a
X#ifdef	DOGNAME
X	if (dogname[0]) {
X		register struct monst *mtmp2;
X		mtmp->mnamelth = strlen(dogname);
X		mtmp2 = newmonst(sizeof(struct edog) + mtmp->mnamelth);
X		*mtmp2 = *mtmp;
X		strcpy(NAME(mtmp2), dogname);
X		replmon(mtmp, mtmp2);
X		mtmp = mtmp2;
X	}
X#endif	/* DOGNAME */
X.
X9a
X#ifdef	DOGNAME
Xchar dogname[63];
X#endif	/* DOGNAME */
X
X.
X1c
X/*	SCCS Id: @(#)dog.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp dogmove.c dogmove.c.orig
Xed dogmove.c <<ED_EOF
X198,199c
X			if(mtmp2)
X			    if(mtmp2->data->mlevel >= mdat->mlevel+2 ||
X			       mtmp2->data->mlet == 'c')
X.
X51c
X		if(cansee(omx,omy))
X			pline("%s dies%s.", Monnam(mtmp),
X			      (mtmp->mhp >= 1) ? "" : " from hunger");
X		else
X			pline("You have a sad feeling for a moment, then it passes.");
X.
X48,49c
X		if(mtmp->mleashed) {
X			mtmp->mleashed = 0;
X			pline("Your leash goes slack...");
X		}
X.
X44,46d
X1c
X/*	SCCS Id: @(#)dogmove.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp eat.c eat.c.orig
Xed eat.c <<ED_EOF
X560c
X		    u.usym = GOLD_SYM;
X.
X1c
X/*	SCCS Id: @(#)eat.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp end.c end.c.orig
Xed end.c <<ED_EOF
X67a
X		killer = buf;
X      } else if(mtmp->isshk) {         /* stewr 870807 */
X	        Sprintf(buf, "shopkeeper, %s %s",
X			rn2(2) ? "Mr." : "Ms.", shkname(mtmp));
X.
X57a
Xextern char *shkname();
X.
X1c
X/*	SCCS Id: @(#)end.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp engrave.c engrave.c.orig
Xed engrave.c <<ED_EOF
X391c
X	        /* kludge by stewr 870708 */
X	for (sptmp = sp, tmp=0; !(tmp == len); sptmp++,tmp++) {
X	        if (((type == DUST) && !rn2(25))
X		     || (Blind && !rn2(12))
X		     || (Confusion && !rn2(3))) {
X		         *sptmp = '!' + rn2(93); /* ASCII-code only */
X		       }
X	      }
X
X.
X175,176c
Xregister int len, tmp;
Xregister char *sp, *sptmp;
X.
X132c
X	    if (canfeel)
X		pline("You %s: \"%s\".",
X		      (Blind) ? "feel the words" : "read",  ep->engr_txt);
X.
X130a
X		canfeel = 1;
X.
X125c
X		if(!Blind) pline("There's some graffiti here on the floor.");
X		canfeel = 0;
X.
X122a
X		canfeel = 1;
X.
X119a
X		canfeel = 1;
X.
X116c
X		if(!Blind) pline("Something is written here in the dust.");
X		canfeel = 0;
X.
X112a
Xregister int	canfeel;
X.
X1c
X/*	SCCS Id: @(#)engrave.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp fight.c fight.c.orig
Xed fight.c <<ED_EOF
X456,469d
X451,452c
X		    else
X			pline("That spellbook was %s.", defmonnam(mtmp));
X		}
X		else if (levl[u.ux+u.dx][u.uy+u.dy].scrsym == GOLD_SYM)
X.
X447,448c
X		if (levl[u.ux+u.dx][u.uy+u.dy].scrsym == DOOR_SYM)
X		{
X.
X217,218c
X		    if((dtmp = mkmon_at('&',u.ux,u.uy)))
X			(void)tamedog(dtmp,(struct obj *)0);
X.
X26a
X	if(!magr || !mdef) return(0);		/* mike@genat */
X.
X1c
X/*	SCCS Id: @(#)fight.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp fountain.c fountain.c.orig
Xed fountain.c <<ED_EOF
X61d
X58c
X	if((mtmp = mkmon_at('N',u.ux,u.uy))) {
X.
X47,52c
X	if((mtmp = mkmon_at('&',u.ux,u.uy))) {
X	    pline("You have unleashed a water demon!");
X	    if (rnd(100)>97) {
X		pline("Grateful for his release, he grants you a wish!");
X		makewish();
X		mondied(mtmp);
X	    }
X.
X1c
X/*	SCCS Id: @(#)fountain.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp hack.c hack.c.orig
Xed hack.c <<ED_EOF
X1034a
X#else
X	        carrcap = 5*u.ulevel;      /* New strength stewr 870807 */
X		if (u.ustr < 19) carrcap += 5*u.ustr;
X		if (u.ustr > 18) carrcap += u.ustr - 18 + 90;
X		if (u.ustr > 68) carrcap += u.ustr - 68;
X		if (u.ustr > 93) carrcap += u.ustr - 93;
X		if (u.ustr > 108) carrcap += 2*(u.ustr - 108);
X		if (u.ustr > 113) carrcap += 5*(u.ustr - 113);
X		if (u.ustr == 118) carrcap += 100;
X#endif
X.
X1033a
X#ifdef HARD
X.
X704,742d
X692c
X		} else if (sym == TRAP_SYM) {
X.
X676c
X		} else if (sym == CORR_SYM) {
X.
X672c
X		else if (sym == DOOR_SYM) {
X.
X669,670c
X		if (sym == VWALL_SYM || sym == HWALL_SYM
X		    || sym == ROOM_SYM || sym == STONE_SYM
X		    || IS_CORNER(sym))
X.
X665d
X515c
X	if(all || index(olets, GOLD_SYM))
X.
X465c
X		if(g_at(u.ux,u.uy)) ilets[iletct++] = GOLD_SYM;
X.
X105,106c
X			if((mtmp = m_at(rx,ry))) {
X			    if(canseemon(mtmp))
X				pline("There's %s on the other side.", monnam(mtmp));
X			    else
X				pline("You hear a monster behind the rock.");
X.
X96a
X	register struct	monst *mtmp, *m_at();
X.
X82,86c
X				if(!lev->lit && lev->scrsym == ROOM_SYM)
X.
X39,44c
X		if(!lev->lit && lev->scrsym == ROOM_SYM) {
X			lev->scrsym = STONE_SYM;
X.
X7c
Xstatic	char	SCCS_Id[] = "@(#)hack.c	1.4\t87/08/08";
X.
Xw
Xq
XED_EOF
X
Xcp hack.h hack.h.orig
Xed hack.h <<ED_EOF
X50a
X#else
X#define	MAX_CARR_CAP	500
X#endif
X.
X49a
X#ifdef HARD
X.
X47a
X#endif
X.
X46a
X#ifdef GENIX
X#define DIST	jhndist
X/*	genix compiler chokes on DIST macro below - jhn*/
X#else
X.
X6a
X#ifdef __TURBOC__
X/* work around the case-insensitivity of the DOS linker */
X#define Amonnam Amonnam_
X#define Xmonnam Xmonnam_
X#define Monnam Monnam_
X#define POISONOUS POISONOUS_
X#define Doname Doname_
X#define Tmp_at Tmp_at_
X/* rename the next two functions because they clash with the Turbo C library */
X#define getdate getdate_
X#define itoa itoa_
X#endif
X
X
X.
X1c
X/*	SCCS Id: @(#)hack.h	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp help help.orig
Xed help <<ED_EOF
X124c
X	v	prints the version number.
X	V	prints a longer identification of the version, including the
X		history of the game.
X	#	introduces one of the "extended" commands.  To get a list of
X		the commands you can use with "#" type "#?".  The extended
X		commands you can use depends upon what options the game was
X		compiled with, along with your class and what type of monster
X		you most closely resemble at a given moment.
X.
X91c
X	T	Takeoff armor.
X	A	Remove some or all armor.
X.
X88c
X	P	Put on a ring.
X.
X82a
X		If you see fancy graphics on your screen it may ask you to
X		specify a location rather than taking a symbol argument.
X.
Xw
Xq
XED_EOF
X
Xcp hh hh.orig
Xed hh <<ED_EOF
X49a
XT	remove	take off some armor
XA	remove	take off some or all armor
X.
X48d
X18c
Xv	version	print version number
XV	history	print game history.
X.
X4,7c
X /|\			  (until stopped by e.g. a wall)
Xb j n		g<dir>:   fast movement in direction <dir>
X			  (until something interesting is seen)
X		m<dir>:   move without picking up objects
X.
Xw
Xq
XED_EOF
X
Xcp invent.c invent.c.orig
Xed invent.c <<ED_EOF
X1024c
X	if (HI && HE)
X	    Sprintf(buf, "%s%s%s", HI, names[pos - obj_symbols], HE);
X	else
X	    Sprintf(buf, "%s", names[pos - obj_symbols]);
X.
X792,793c
X#ifdef KAA
X    read_engr_at(u.ux, u.uy); /* Eric Backus */
X.
X778,783d
X745c
X	if(c == GOLD_SYM)
X.
X717c
X	if(u.ugold) stuff[stct++] = GOLD_SYM;
X.
X507c
X		if(sym == GOLD_SYM) {
X.
X481c
X		if(allowgold) ilets[iletct++] = GOLD_SYM;
X.
X400c
X		if(ilet == GOLD_SYM) {
X.
X396a
X		}
X.
X395c
X		if(index(quitchars,ilet)) {
X			pline("Never mind.");
X.
X380c
X		}
X.
X374c
X		} else {
X.
X369c
X		if(!buf[0]) {
X.
X317c
X	if(allowgold) *bp++ = GOLD_SYM;
X.
X313c
X	if(*let == GOLD_SYM) let++, allowgold = TRUE;
X.
X282c
X	otmp->olet = GOLD_SYM;
X.
X1c
X/*	SCCS Id: @(#)invent.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp lev.c lev.c.orig
Xed lev.c <<ED_EOF
X374c
X					nsym = showsyms.hwall;
X.
X372c
X					nsym = showsyms.brcorn;
X.
X370c
X					nsym = showsyms.blcorn;
X.
X368c
X					nsym = showsyms.trcorn;
X.
X366c
X					nsym = showsyms.tlcorn;
X.
X349c
X						nsym = showsyms.hwall;
X.
X347c
X						nsym = showsyms.vwall;
X.
X343c
X						nsym = showsyms.vwall;
X.
X339c
X						nsym = showsyms.corr;
X.
X335c
X						nsym = showsyms.door;
X.
X331c
X						nsym = showsyms.room;
X.
X320c
X	if (memcmp((char *) &osymbol, (char *) &showsyms, sizeof (struct symbols))) {
X.
X311c
X#ifdef GRAPHICS
X.
X289c
X#ifdef GRAPHICS
X.
X94,97c
X#ifdef DGK
X	if (!count_only)
X#endif
X	{
X		fgold = 0;
X		ftrap = 0;
X		fmon = 0;
X		fobj = 0;
X	}
X.
X75,76c
X#ifdef GRAPHICS
X	bwrite(fd, (char *) &showsyms, sizeof(struct symbols));
X.
X1c
X/*	SCCS Id: @(#)lev.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp makedefs.c makedefs.c.orig
Xed makedefs.c <<ED_EOF
X592a
X}
X#endif
X
X#ifdef __TURBOC__
Xint getpid() {
X	return(1);
X.
X583c
X#if defined(SYSV) || defined(GENIX)
X.
X255c
X	if(freopen(ONAME_FILE, WRMODE, stdout) == NULL) {
X.
X223d
X218a
X		printf("{\ta fountain\n");
X	    } else
X#endif
X#ifdef NEWCLASS
X	    if(!strcmp(inline, "^	a trap")) {
X		puts(inline);
X		printf("\\\tan opulant throne.\n");
X	    } else
X#endif
X		puts(inline);
X.
X217a
X#ifdef	SPELLS
X	    if (!strcmp(inline, "+	a door"))
X		printf("+\ta door (or a spell book)\n");
X	    else
X#endif
X#ifdef	FOUNTAINS
X	    if(!strcmp(inline, "}	water filled area")) {
X.
X215a
X	    else if (!strcmp(inline, "\"	an amulet"))
X		printf("\"\tan amulet (or a web)\n");
X.
X210c
X		printf("r\ta rockmole\n");
X.
X191c
X	if(freopen(DATA_FILE, WRMODE, stdout) == NULL) {
X.
X186c
X	if(freopen(tmpfile, RDMODE, stdin) == NULL) {
X.
X176a
X#ifdef MSDOS
X	remove(DATE_FILE);
X#endif
X.
X159c
X	if(freopen(DATE_FILE, RDMODE, stdin) == NULL) {
X.
X154c
X	if(freopen(tmpfile, WRMODE, stdout) == NULL) {
X.
X139c
X	if(freopen(infile, RDMODE, stdin) == NULL)	perror(infile);
X.
X132c
X	if(freopen(infile, RDMODE, stdin) == NULL)	perror(infile);
X.
X122c
X#endif
X	if(freopen(infile, RDMODE, stdin) == NULL) {
X.
X120a
X#ifdef MSDOS
X	sprintf(infile, "%s.bas", RUMOR_FILE);
X#else
X.
X116c
X	if(freopen(RUMOR_FILE, WRMODE, stdout) == NULL) {
X.
X101a
X#ifdef MSDOS
X	remove(TRAP_FILE);
X#endif
X.
X68c
X	if(freopen(TRAP_FILE, RDMODE, stdin) == NULL) {
X.
X63c
X	if(freopen(tmpfile, WRMODE, stdout) == NULL) {
X.
X10a
X#define	alloc	malloc
X#define RDMODE	"r"
X#define WRMODE	"w"
X#else
X#define RDMODE	"r+"
X#define WRMODE	"w+"
X.
X4c
Xstatic	char	SCCS_Id[] = "@(#)makedefs.c	1.4\t87/08/08";
X.
Xw
Xq
XED_EOF
X
Xcp makemon.c makemon.c.orig
Xed makemon.c <<ED_EOF
X248c
X	cc->x = foo[rn2(tfoo-foo)].x;
X	cc->y = foo[rn2(tfoo-foo)].y;
X	return(0);
X.
X210,211c
Xenexto(cc, xx,yy)
Xcoord	*cc;
X.
X149c
X			enexto(&mm, mm.x, mm.y);
X.
X143d
X1c
X/*	SCCS Id: @(#)makemon.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp mklev.c mklev.c.orig
Xed mklev.c <<ED_EOF
X874c
X		      mazexy(&mm);
X.
X872d
X847c
X			mazexy(&mm);
X.
X845d
X826,830c
X			fakegold ? '$' : fakedoor ? DOOR_SYM :
X.
X815c
X				mazexy(&mm);
X.
X813d
X731d
X727,729d
X717c
X		rm->scrsym = STONE_SYM;
X.
X709c
X		finddpos(&dd, aroom->lx, aroom->ly-1, aroom->hx, aroom->ly-1);
X.
X706c
X		finddpos(&dd, aroom->lx, aroom->hy+1, aroom->hx, aroom->hy+1);
X.
X575c
X			crm->scrsym = STONE_SYM;
X.
X570d
X566,568d
X539,540c
X		finddpos(&cc, croom->lx, yy, croom->hx, yy);
X		finddpos(&tt, troom->lx, ty, troom->hx, ty);
X.
X532,533c
X		finddpos(&cc, xx, croom->ly, xx, croom->hy);
X		finddpos(&tt, tx, troom->ly, tx, troom->hy);
X.
X526c
X		finddpos(&tt, troom->lx, ty, troom->hx, ty);
X.
X524c
X		finddpos(&cc, croom->lx, yy, croom->hx, yy);
X.
X518,519c
X		finddpos(&cc, xx, croom->ly, xx, croom->hy);
X		finddpos(&tt, tx, troom->ly, tx, troom->hy);
X.
X446,466c
X	levl[lowx-1][lowy-1].scrsym = TLCORN_SYM;
X	levl[hix+1][lowy-1].scrsym = TRCORN_SYM;
X	levl[lowx-1][hiy+1].scrsym = BLCORN_SYM;
X	levl[hix+1][hiy+1].scrsym = BRCORN_SYM;
X.
X443c
X		levl[x][y].scrsym = ROOM_SYM;
X.
X438c
X		levl[x][y].scrsym = VWALL_SYM;
X.
X433c
X		levl[x][y].scrsym = HWALL_SYM;
X.
X430d
X359,363c
X		levl[x][y].scrsym = DOOR_SYM;
X.
X355c
X	if(!IS_WALL(levl[x][y].typ))	/* avoid SDOORs with DOOR_SYM as scrsym */
X.
X315,317c
X	cc->x = x;
X	cc->y = y;
X	return(0);
X.
X294,296c
Xfinddpos(cc, xl,yl,xh,yh)
Xcoord	*cc;
Xint	xl,yl,xh,yh;
X{
X.
X79c
X	levl[xupstair][yupstair].scrsym = UP_SYM;
X.
X70c
X	levl[xdnstair][ydnstair].scrsym = DN_SYM;
X.
X28c
Xextern xchar xdnstair,xupstair,ydnstair,yupstair;
X.
X21c
Xextern coord doors[DOORMAX];
X.
X19c
Xextern struct mkroom rooms[MAXNROFROOMS+1];
X.
X1c
X/*	SCCS Id: @(#)mklev.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp mkmaze.c mkmaze.c.orig
Xed mkmaze.c <<ED_EOF
X182,187c
Xmazexy(cc)
Xcoord	*cc;
X{
X	cc->x = 3 + 2*rn2(COLNO/2 - 2);
X	cc->y = 3 + 2*rn2(ROWNO/2 - 2);
X	return(0);
X.
X93,94c
X	mazexy(&mm);
X	levl[(xupstair = mm.x)][(yupstair = mm.y)].scrsym = UP_SYM;
X.
X88c
X		mazexy(&mm);
X.
X84c
X		mazexy(&mm);
X.
X81c
X	mazexy(&mm);
X.
X78c
X		mazexy(&mm);
X.
X74c
X		mazexy(&mm);
X.
X63,70d
X61c
X				levl[x][y].scrsym = ROOM_SYM;
X.
X58c
X				levl[x][y].scrsym = HWALL_SYM;
X.
X56d
X45c
X	    mazexy(&mm);
X.
X10d
X1c
X/*	SCCS Id: @(#)mkmaze.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp mkobj.c mkobj.c.orig
Xed mkobj.c <<ED_EOF
X134,135c
X				otmp->spe = -rne(3);
X			} else otmp->spe = rne(3);
X.
X121c
X			otmp->spe = -rne(2);
X.
X119c
X		if(!rn2(10)) otmp->spe = rne(2);
X.
X91c
X			otmp->spe = -rne(2);
X.
X88c
X		if(!rn2(11)) otmp->spe = rne(2);
X.
X1c
X/*	SCCS Id: @(#)mkobj.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp mon.c mon.c.orig
Xed mon.c <<ED_EOF
X710c
X		mtmp->mappearance = (levl[mtmp->mx][mtmp->my].typ == DOOR) ? DOOR_SYM : GOLD_SYM;
X.
X653c
X	enexto(&mm, u.ux, u.uy);
X.
X651d
X262c
X				tt = 1L << ttmp->ttyp;
X.
X260c
X		  register long tt;
X.
X171c
X		if(levl[mtmp->mx][mtmp->my].scrsym == GOLD_SYM)
X.
X62a
X#endif
X.
X60a
X#ifdef HARD
X.
X1c
X/*	SCCS Id: @(#)mon.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp msdos.c msdos.c.orig
Xed msdos.c <<ED_EOF
X257c
X	char	*dta, buf[PATHLEN];
X.
X238a
X#endif
X.
X226c
X#ifndef __TURBOC__
X/* Get disk transfer area, Turbo C already has getdta */
X.
X1c
X/*	SCCS Id: @(#)msdos.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp msdos.h msdos.h.orig
Xed msdos.h <<ED_EOF
X31c
Xvoid	msmsg(char *, ...);
X.
X1c
X/*	SCCS Id: @(#)msdos.h	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp nethack.6 nethack.6.orig
Xed nethack.6 <<ED_EOF
X170a
X.PP
XDungeons & Dragons is a Trademark of TSR Inc.
X.
X110c
X.PP
X.
X107c
X.PP
X.
X103c
X.PP
X.
X100c
X.PP
X.
X97a
X.PP
X.
X36c
Xis a display oriented Dungeons & Dragons(tm) - like game.
X.
X20,21c
X.B /usr/games/net[hack quest]
X.
X6,7c
X.B /usr/games/net[hack quest]
X.
Xw
Xq
XED_EOF
X
Xcp o_init.c o_init.c.orig
Xed o_init.c <<ED_EOF
X21a
X
X	/* bug fix to prevent "initialization error" abort on Intel Xenix.
X	 * reported by mikew@semike
X	 */
X        for(i = 0; i != sizeof(obj_symbols); i++)
X                bases[i] = 0;
X
X.
X1c
X/*	SCCS Id: @(#)o_init.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp objclass.h objclass.h.orig
Xed objclass.h <<ED_EOF
X60a
X#define	GOLD_SYM	'$'
X.
X1c
X/*	SCCS Id: @(#)objclass.h	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp objects.h objects.h.orig
Xed objects.h <<ED_EOF
X185a
X# endif
X#else
X# ifdef KAA
X	{ "enormous rock", NULL, NULL, 1, 0,
X		ROCK_SYM, 100, 0, 400 /* > MAX_CARR_CAP */, 0, 20, 20 },
X# else
X	{ "enormous rock", NULL, NULL, 1, 0,
X		ROCK_SYM, 100, 0, 550 /* > MAX_CARR_CAP */, 0, 0, 0 },
X# endif
X.
X183c
X# else
X.
X180a
X#ifdef HARD
X# ifdef KAA
X.
X179d
X1c
X/*	SCCS Id: @(#)objects.h	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp options.c options.c.orig
Xed options.c <<ED_EOF
X393a
X
Xnmcpy(dest, source, maxlen)
X	char	*dest, *source;
X	int	maxlen;
X{
X	char	*cs, *cd;
X	int	count;
X
X	cd = dest;
X	cs = source;
X	for(count = 1; count < maxlen; count++) {
X		if(*cs == ',') break;
X		*cd++ = *cs++;
X	}
X	*cd = 0;
X}
X.
X304c
X"and engame.", "", "");
X.
X295a
X#ifdef	DOGNAME
X" dogname, which gives the name of your (first) dog (e.g. dogname:Rover)",
X#endif	/* DOGNAME */
X.
X294c
X			pline("%s%s%s%s",
X.
X278c
X#ifdef GRAPHICS
X"engame, and graphics.", "", "");
X#else
X"and engame.", "", "");
X#endif
X.
X269a
X#ifdef	DOGNAME
X" dogname, which gives the name of your (first) dog (e.g. dogname:Rover)",
X#endif	/* DOGNAME */
X.
X268c
X			pline("%s%s%s%s",
X.
X255a
X#ifdef	DOGNAME
X	if(!strncmp(opts, "dogname", 3)) {
X		extern char dogname[];
X		op = index(opts, ':');
X		if (!op) goto bad;
X		nmcpy(dogname, ++op, 62);
X		return;
X	}
X#endif	/* DOGNAME */
X.
X222a
X#ifdef GRAPHICS
X	/* graphics:string */
X	if(!strncmp(opts,"graphics",4)) {
X		char buf[MAXPCHARS];
X		if(!from_env) {
X#ifdef DGK
X		  pline("'graphics' only settable from %s.", configfile);
X#else
X		  pline("The graphics string can be set only from HACKOPTIONS.");
X#endif
X		  return;
X		}
X		op = index(opts,':');
X		if(!op)
X		    goto bad;
X		else
X		    opts++;
X/*
X * You could have problems here if you configure FOUNTAINS, SPIDERS or NEWCLASS
X * in or out and forget to change the tail entries in your graphics string.
X */
X#define SETPCHAR(f, n)	showsyms.f = (strlen(opts) > n) ? opts[n] : defsyms.f
X		SETPCHAR(stone, 0);
X		SETPCHAR(vwall, 1);
X		SETPCHAR(hwall, 2);
X		SETPCHAR(tlcorn, 3);
X		SETPCHAR(trcorn, 4);
X		SETPCHAR(blcorn, 5);
X		SETPCHAR(brcorn, 6);
X		SETPCHAR(door, 7);
X		SETPCHAR(room, 8);
X		SETPCHAR(corr, 9);
X		SETPCHAR(upstair, 10);
X		SETPCHAR(dnstair, 11);
X		SETPCHAR(trap, 12);
X#ifdef FOUNTAINS
X		SETPCHAR(pool, 13);
X		SETPCHAR(fountain, 14);
X#endif
X#ifdef NEWCLASS
X		SETPCHAR(throne, 15);
X#endif
X#ifdef SPIDERS
X		SETPCHAR(web, 16);
X#endif
X#undef SETPCHAR
X		return;
X	}
X#endif /* GRAPHICS */
X
X.
X219c
X		nmcpy(plname, op+1, sizeof(plname)-1);
X.
X36c
X#endif
X#ifdef HACKOPTIONS
X.
X1c
X/*	SCCS Id: @(#)options.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp pager.c pager.c.orig
Xed pager.c <<ED_EOF
X422c
X	(void) wait((int *) 0);
X.
X385,403d
X43a
X#endif
X.
X42a
X#ifdef GRAPHICS
X				buf[0] = r;
X#else
X.
X29a
X#else
X		coord	cc; extern coord getpos();
X		char	r;	
X
X		pline("Please move the cursor to the unknown object.");
X		getpos(&cc, TRUE, "the unknown object");
X		r = levl[cc.x][cc.y].scrsym;
X
X		if (r == showsyms.stone) q = defsyms.stone;
X		else if (r == showsyms.vwall) q = defsyms.vwall;
X		else if (r == showsyms.hwall) q = defsyms.hwall;
X		else if (r == showsyms.tlcorn) q = defsyms.tlcorn;
X		else if (r == showsyms.trcorn) q = defsyms.trcorn;
X		else if (r == showsyms.blcorn) q = defsyms.blcorn;
X		else if (r == showsyms.brcorn) q = defsyms.brcorn;
X		else if (r == showsyms.door) q = defsyms.door;
X		else if (r == showsyms.room) q = defsyms.room;
X		else if (r == showsyms.corr) q = defsyms.corr;
X		else if (r == showsyms.upstair) q = defsyms.upstair;
X		else if (r == showsyms.dnstair) q = defsyms.dnstair;
X		else if (r == showsyms.trap) q = defsyms.trap;
X#ifdef FOUNTAINS
X		else if (r == showsyms.pool) q = defsyms.pool;
X		else if (r == showsyms.fountain) q = defsyms.fountain;
X#endif
X#ifdef NEWCLASS
X		else if (r == showsyms.throne) q = defsyms.throne;
X#endif
X#ifdef SPIDERS
X		else if (r == showsyms.web) q = defsyms.web;
X		else
X		    q = r;
X#endif
X#endif /* GRAPHICS */
X.
X27a
X#ifndef GRAPHICS
X.
X1c
X/*	SCCS Id: @(#)pager.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp pcmain.c pcmain.c.orig
Xed pcmain.c <<ED_EOF
X363a
X			if (!rn2(4)) u_wipe_engr(rnd(3));
X.
X254c
X		read_engr_at(u.ux,u.uy);
X.
X54a
X
X#ifdef GRAPHICS
X	/* Set the default values of the presentation characters */
X	memcpy((char *) &showsyms, (char *) &defsyms, sizeof(struct symbols));
X#endif
X.
X1c
X/*	SCCS Id: @(#)pcmain.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp pctty.c pctty.c.orig
Xed pctty.c <<ED_EOF
X205a
X#ifdef COM_COMPL
X/* Read in an extended command - doing command line completion for
X * when enough character have been entered to make a unique command.
X * This is just a modified getlin().   -jsb
X */
Xget_ext_cmd(bufp)
Xregister char *bufp;
X{
X	register char *obufp = bufp;
X	register int c;
X	int com_index, index;
X
X	flags.toplin = 2;		/* nonempty, no --More-- required */
X
X	for(;;) {
X		(void) fflush(stdout);
X		if((c = readchar()) == EOF) {
X			*bufp = 0;
X			return;
X		}
X		if(c == '\033') {
X			*obufp = c;
X			obufp[1] = 0;
X			return;
X		}
X		if(c == erase_char || c == '\b') {
X			if(bufp != obufp) {
X				bufp--;
X				putstr("\b \b"); /* putsym converts \b */
X			} else	bell();
X		} else if(c == '\n') {
X			*bufp = 0;
X			return;
X		} else if(' ' <= c && c < '\177') {
X				/* avoid isprint() - some people don't have it
X				   ' ' is not always a printing char */
X			*bufp = c;
X			bufp[1] = 0;
X			index = 0;
X			com_index = -1;
X
X			while(extcmdlist[index].ef_txt != (char *) 0){
X				if(!strncmp(obufp, extcmdlist[index].ef_txt,
X				strlen(obufp)))
X					if(com_index == -1) /* No matches yet*/
X					    com_index = index;
X					else /* More than 1 match */
X					    com_index = -2;
X				index++;
X			}
X			if(com_index >= 0){
X				strcpy(obufp,
X				extcmdlist[com_index].ef_txt);
X				/* finish print our string */
X				putstr(bufp);
X				bufp = obufp; /* reset it */
X				if(strlen(obufp) < BUFSIZ-1 &&
X				 strlen(obufp) < COLNO)
X					/* set bufp at the end of our
X					 * string
X					 */
X					bufp += strlen(obufp);
X			} else {
X				putstr(bufp);
X				if(bufp-obufp < BUFSZ-1 && bufp-obufp < COLNO)
X					bufp++;
X			}
X		} else if(c == kill_char || c == '\177') { /* Robert Viduya */
X				/* this test last - @ might be the kill_char */
X			while(bufp != obufp) {
X				bufp--;
X				putstr("\b \b");
X			}
X		} else
X			bell();
X	}
X
X}
X#endif COM_COMPL
X.
X8a
X#include "func_tab.h"
X.
X1c
X/*	SCCS Id: @(#)pctty.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp pcunix.c pcunix.c.orig
Xed pcunix.c <<ED_EOF
X80a
X}
X
Xgethdate(name) char *name; {
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
Xregister char *np, *path;
Xchar filename[MAXPATHLEN+1];
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            (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}
X
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.
X21a
Xstatic struct stat buf, hbuf;
X.
X19a
X#include        <sys/stat.h>
X.
X18a
X#endif
X.
X17a
X#ifndef __TURBOC__  /* Turbo C has time_t in time.h */
X.
X15a
X#include <stdio.h>	/* mainly for NULL */
X.
X1c
X/*	SCCS Id: @(#)pcunix.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp polyself.c polyself.c.orig
Xed polyself.c <<ED_EOF
X175a
X
X     if (u.uhp < 1)	done("died");
X.
X1c
X/*	SCCS Id: @(#)polyself.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp potion.c potion.c.orig
Xed potion.c <<ED_EOF
X588,595c
X	if(u.ustr > 118)	u.ustr = 118;
X	if(u.ustr > u.ustrmax)	u.ustrmax = u.ustr;
X.
X586c
X	if (inc) u.ustr++;
X	else {
X	         if (u.ustr < 18) u.ustr += (rn2(4) ? 1 : rnd(6) );
X		 else if (u.ustr < 103) u.ustr += rnd(10);
X		 else u.ustr++;
X	       }
X.
X562a
X#ifdef HARD
X	else	if (!rn2(4)) useup(potion);
X#endif
X.
X306c
X		if (u.mh > u.mhmax) u.mh = (u.mhmax + nxtra);
X.
X1c
X/*	SCCS Id: @(#)potion.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp pray.c pray.c.orig
Xed pray.c <<ED_EOF
X161a
X#ifdef NEWCLASS
Xdoturn() {	/* Knights & Priest(esse)s only please */
X
X	register struct monst *mtmp;
X	register int	xlev = 6;
X	extern char	pl_character[];
X
X	if((pl_character[0] != 'P') &&
X	   (pl_character[0] != 'K')) {
X
X		pline("You don't know how to turn undead!");
X		return(0);
X	}
X	if (Inhell) {
X
X		pline("Being in hell, your gods won't help you.");
X		aggravate();
X		return(0);
X	}
X	pline("Calling upon your gods, you chant an arcane formula.");
X	for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X	    if(cansee(mtmp->mx,mtmp->my)) {
X		if(index(UNDEAD,mtmp->data->mlet) ||
X		   ((mtmp->data->mlet == '&') && (u.ulevel > 10))) {
X
X		    if(Confusion) {
X			pline("Unfortunately, your voice falters.");
X			mtmp->mflee = mtmp->mfroz = mtmp->msleep = 0;
X		    } else if (! resist(mtmp, '+', 0, TELL))
X			switch (mtmp->data->mlet) {
X			    case 'V':   xlev += 2;
X			    case 'W':   xlev += 4;
X			    case 'Z':   if(u.ulevel >= xlev)  {
X					    if(!resist(mtmp, '+', 0, NOTELL)) {
X						pline("You destroy the %s", monnam(mtmp));
X						mondied(mtmp);
X					    } else	mtmp->mflee = 1;
X					} else	mtmp->mflee = 1;
X					break;
X			    default:    mtmp->mflee = 1;
X					break;
X			}
X		   }
X	    }
X	    nomul(-5);
X	    return(1);
X}
X#endif /* NEWCLASS /**/
X.
X140c
X			mkobj_at('+', u.ux, u.uy);
X.
X131c
X				Protection |= INTRINSIC;
X.
X127c
X				Stealth |= INTRINSIC;
X.
X124c
X				Fast |= INTRINSIC;
X.
X121c
X				HTelepat |= INTRINSIC;
X.
X115a
X			flags.botl = 1;
X.
X91a
X#ifdef KAA
X.
X89c
X			    if(uleft->cursed) {
X				pline("your left hand glows amber.");
X				uleft->cursed = 0;
X			    } else if(uright->cursed) {
X				pline("your right hand glows amber.");
X				uleft->cursed = 0;
X			    } else    pline("but nothing seems to happen.");
X.
X87d
X1c
X/*	SCCS Id: @(#)pray.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp pri.c pri.c.orig
Xed pri.c <<ED_EOF
X404c
X		u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax,
X.
X395c
X		u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax,
X.
X312d
X308,310d
X6a
X#ifdef GENIX
X#define	void	int	/* jhn - mod to prevent compiler from bombing */
X#endif
X.
X1c
X/*	SCCS Id: @(#)pri.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp prisym.c prisym.c.orig
Xed prisym.c <<ED_EOF
X248d
X245,246c
X		if(room->lit || cansee(x,y) || Blind) tmp = ROOM_SYM;
X		else tmp = STONE_SYM;
X.
X224,241d
X221c
X		tmp = DOOR_SYM;
X.
X217c
X		tmp = VWALL_SYM;
X.
X214c
X			tmp = HWALL_SYM;
X.
X210d
X203c
X	else if((ttmp = t_at(x,y)) && ttmp->tseen) tmp = TRAP_SYM;
X.
X201c
X	else if(ttmp && ttmp->tseen) tmp = TRAP_SYM;
X.
X196,198c
X		tmp = Hallucination ? rndobjsym() : GOLD_SYM;
X	else if(x == xupstair && y == yupstair) tmp = UP_SYM;
X	else if(x == xdnstair && y == ydnstair) tmp = DN_SYM;
X.
X191c
X	if(!room->seen) tmp = STONE_SYM;
X.
X172,173c
X		atl(x,y,Hallucination ? rndobjsym() : GOLD_SYM);
X	else if(!room->seen || room->scrsym == STONE_SYM) {
X.
X1c
X/*	SCCS Id: @(#)prisym.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp read.c read.c.orig
Xed read.c <<ED_EOF
X673c
X			if(lev->scrsym == STONE_SYM || !lev->scrsym)
X				newsym(zx,zy);
X.
X661,665c
X			lev->scrsym = DOOR_SYM;
X.
X658d
X654,656d
X633a
X		killer = "scroll of genocide";
X	/* A polymorphed character will die as soon as he is rehumanized. */
X		if(u.usym != '@')	pline("You feel dead inside.");
X		else			done("died");
X.
X631,632d
X602,604c
Xdo_genocide() {
X.
X345c
X				at(gtmp->gx, gtmp->gy, Hallucination ? rndobjsym() : GOLD_SYM);
X.
X324c
X				at(ttmp->tx, ttmp->ty, Hallucination ? rndobjsym() : GOLD_SYM);
X.
X166,168c
X# ifdef SPELLS
X		    else if(sobj->otyp == SCR_SCARE_MONSTER)
X# endif
X			pline ("You hear %s close by.",
X			       (confused) ? "sad wailing" : "maniacal laughter");
X.
X164c
X			  (confused) ? "sad wailing" : "maniacal laughter");
X.
X79c
X	    {
X.
X69a
X	extern struct obj *some_armor();
X.
X1c
X/*	SCCS Id: @(#)read.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp rip.c rip.c.orig
Xed rip.c <<ED_EOF
X6a
X#ifdef GENIX
X#define	void	int	/* jhn - mod to prevent compiler from bombing */
X#endif
X.
X1c
X/*	SCCS Id: @(#)rip.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp rm.h rm.h.orig
Xed rm.h <<ED_EOF
X60,63c
X	unsigned typ:5;
X	unsigned new:1;
X	unsigned seen:1;
X	unsigned lit:1;
X.
X49a
X#define MAXPCHARS	17	/* maximum number of mapped characters */
X
X#define IS_CORNER(x)	((x) == TLCORN_SYM || (x) == TRCORN_SYM \
X			 || (x) == BLCORN_SYM || (x) == BRCORN_SYM)
X
X.
X47a
X/* screen symbols for using character graphics. */
Xstruct symbols {
X    unsigned char stone, vwall, hwall, tlcorn, trcorn, blcorn, brcorn;
X    unsigned char door, room, corr, upstair, dnstair, trap;
X#ifdef FOUNTAINS
X    unsigned char pool, fountain;
X#endif
X#ifdef NEWCLASS
X    unsigned char throne;
X#endif
X#ifdef SPIDERS
X    unsigned char web;
X#endif
X};
Xextern struct symbols showsyms, defsyms;
X
X#define STONE_SYM	showsyms.stone
X#define VWALL_SYM	showsyms.vwall
X#define HWALL_SYM	showsyms.hwall
X#define TLCORN_SYM	showsyms.tlcorn
X#define TRCORN_SYM	showsyms.trcorn
X#define BLCORN_SYM	showsyms.blcorn
X#define BRCORN_SYM	showsyms.brcorn
X#define DOOR_SYM	showsyms.door
X#define ROOM_SYM	showsyms.room
X#define	CORR_SYM	showsyms.corr
X#define UP_SYM		showsyms.upstair
X#define DN_SYM		showsyms.dnstair
X#define TRAP_SYM	showsyms.trap
X#define	POOL_SYM	showsyms.pool
X#define FOUNTAIN_SYM    showsyms.fountain
X#define THRONE_SYM      showsyms.throne
X#define WEB_SYM         showsyms.web
X#endif
X
X.
X46c
X#else /* GRAPHICS */
X.
X41a
X#define UP_SYM		'<'
X#define DN_SYM		'>'
X#define TRAP_SYM	'^'
X.
X40c
X# define	CORR_SYM	'#'
X.
X38c
X# define	CORR_SYM	':'
X.
X36a
X#ifndef GRAPHICS
X
X#define STONE_SYM	' '
X#define VWALL_SYM	'|'
X#define HWALL_SYM	'-'
X#define TLCORN_SYM	'+'
X#define TRCORN_SYM	'+'
X#define BLCORN_SYM	'+'
X#define BRCORN_SYM	'+'
X#define DOOR_SYM	'+'
X#define ROOM_SYM	'.'
X.
X35c
X * The level-map symbols may be compiled in or defined at initialization time
X.
X4a
X/*
X * The dungeon presentation graphics code and data structures were rewritten
X * and generalized for NetHack's release 2 by Eric S. Raymond (eric@snark)
X * building on Don G. Kneller's MS-DOS implementation. See options.c for
X * the code that permits the user to set the contents of the symbol structure.
X */
X
X.
X1c
X/*	SCCS Id: @(#)rm.h	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp rnd.c rnd.c.orig
Xed rnd.c <<ED_EOF
X30a
X}
X
Xrne(x)          /* by stewr 870807 */
Xregister x;
X{
X        register tmp = 1;
X	while(!rn2(x)) tmp++;
X	return(tmp);
X}
X
Xrnz(x)
Xregister x;
X{
X        register tmp = 1000;
X	tmp += rn2(1000);
X	tmp *= rne(4);
X	if (rn2(2)) { x *= tmp; x /= 1000; }
X	else { x *= 1000; x /= tmp; }
X	return(x);
X.
X1c
X/*	SCCS Id: @(#)rnd.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp save.c save.c.orig
Xed save.c <<ED_EOF
X379c
X			mtmp->data = &d_prince;
X.
X376c
X			mtmp->data = &d_lord;
X.
X49a
X#endif
X.
X48a
X#ifndef __TURBOC__
X.
X1c
X/*	SCCS Id: @(#)save.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp search.c search.c.orig
Xed search.c <<ED_EOF
X106c
X				if(!vism_at(x,y)) atl(x,y,TRAP_SYM);
X.
X103c
X				    return(1);
X.
X100,101c
X				    deltrap(trap);
X				    if((mtmp=makemon(PM_PIERCER,x,y)))
X.
X50c
X						atl(zx,zy,TRAP_SYM);
X.
X40d
X36,38d
X28,32c
X				atl(zx, zy, DOOR_SYM);
X.
X1c
X/*	SCCS Id: @(#)search.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp shk.c shk.c.orig
Xed shk.c <<ED_EOF
X249,250c
X		    box = carrying(ICE_BOX) != (struct obj *)0;
X		    pick = carrying(PICK_AXE) != (struct obj *)0;
X.
X242a
X		    struct obj *carrying();
X.
X1c
X/*	SCCS Id: @(#)shk.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp sit.c sit.c.orig
Xed sit.c <<ED_EOF
X137c
X/*			levl[u.ux][u.uy].scrsym = ROOM_SYM; */
X.
X53a
X				heal_legs();
X.
X1c
X/*	SCCS Id: @(#)sit.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp spell.c spell.c.orig
Xed spell.c <<ED_EOF
X256c
X		healup(rnd(8), 0, 0, 0);
X.
X231,232c
X		if (!(objects[pseudo->otyp].bits & NODIR)) {
X			getdir(1);
X			if(!u.dx && !u.dy && !u.dz && (u.ulevel > 8)) {
X			    if((damage = zapyourself(pseudo)))
X				losehp(damage, "self-inflicted injury");
X			} else	weffects(pseudo);
X		} else weffects(pseudo);
X.
X206c
X		if (Hallucination)
X			pline("Far out... a light show!");
X		else	pline("The air around you crackles as you goof up.");
X.
X204c
X	if (confused ||
X	    (rn2(10) + u.ulevel + u.uluck - spellev(spell)) <= 0) {
X.
X182c
X	register int	 spell, energy, damage;
X.
X164,174c
X	default:
X		rndcurse();
X.
X123c
X	switch(rn2(level)) {
X.
X1,2c
X/*	SCCS Id: @(#)spell.c	1.4	87/08/08
X/* spell.c - version 1.0.1		M. Stephenson 07-04-86 */
X.
Xw
Xq
XED_EOF
X
Xcp steal.c steal.c.orig
Xed steal.c <<ED_EOF
X203c
X			atl(mtmp->mx,mtmp->my, Hallucination ? rndobjsym() : GOLD_SYM);
X.
X1c
X/*	SCCS Id: @(#)steal.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp termcap.c termcap.c.orig
Xed termcap.c <<ED_EOF
X301,302c
X#ifdef TERMINFO
X		tputs("$<50>", 1, xputs);
X#else
X		tputs("50", 1, xputs);
X#endif
X.
X106,107c
X	/* Get rid of padding numbers for HI and HE.  Hope they
X	 * aren't really needed!!!  HI and HE are ouputted to the
X	 * pager as a string - so how can you send it NULLS???
X	 *  -jsb
X	 */
X	    HI = (char *) alloc(strlen(SO));
X	    HE = (char *) alloc(strlen(SE));
X	    i = 0;
X	    while(isdigit(SO[i])) i++;
X	    strcpy(HI, &SO[i]);
X	    i = 0;
X	    while(isdigit(SE[i])) i++;
X	    strcpy(HE, &SE[i]);
X.
X57a
X	register int i;
X.
X14a
X#endif
X.
X13c
X# endif
X.
X11c
X#ifndef TERMINFO
X# ifndef lint
X.
X7a
X#ifdef GENIX
X#define	void	int	/* jhn - mod to prevent compiler from bombing */
X#endif
X
X.
X5a
X#include <ctype.h>	/* for isdigit() */
X.
X1c
X/*	SCCS Id: @(#)termcap.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp topl.c topl.c.orig
Xed topl.c <<ED_EOF
X6a
X#ifdef GENIX
X#define	void	int	/* jhn - mod to prevent compiler from bombing */
X#endif
X
X.
X1c
X/*	SCCS Id: @(#)topl.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp topten.c topten.c.orig
Xed topten.c <<ED_EOF
X49c
X#define HUP
X.
X6a
X#ifdef GENIX
X#define	void	int	/* jhn - mod to prevent compiler from bombing */
X#endif
X
X.
X1c
X/*	SCCS Id: @(#)topten.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp trap.c trap.c.orig
Xed trap.c <<ED_EOF
X647c
X	    newlevel = rnz(dlevel + 3);	/* 5 - 24 */
X.
X645c
X	    newlevel = rn2(5) ? rnz(dlevel + 3) : 30;
X.
X562c
X	read_engr_at(u.ux,u.uy);
X.
X523c
X		    getpos(&cc, 1, "the desired position"); /* 1: force valid */
X.
X507d
X173c
X				if (uwep && uwep->otyp == TWO_HANDED_SWORD) goto two_hand;
X.
X1c
X/*	SCCS Id: @(#)trap.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp u_init.c u_init.c.orig
Xed u_init.c <<ED_EOF
X396a
X# ifdef KAA
X		uwep->dknown = 1;	/* bless his primary weapon */
X# endif
X.
X221c
X		if (pc == 'q' || pc == 'Q') {
X
X			clearlocks();
X			settty((char *) 0);
X			exit(0);
X		}
X.
X203c
X	if (index("qQ", exper)) {
X		clearlocks();
X		settty((char *) 0);
X		exit(0);
X	}
X.
X7a
X#ifdef GENIX
X#define	void	int
X#endif
X
X.
X1c
X/*	SCCS Id: @(#)u_init.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp unixmain.c unixmain.c.orig
Xed unixmain.c <<ED_EOF
X568a
X
X#ifdef GENIX
Xjhndist(x1,y1,x2,y2)
X{
X	int x,y;
X	x=x1-x2;
X	y=y1-y2;
X	return (x*x + y*y);
X}
X#endif
X.
X334a
X			if (!rn2(4)) u_wipe_engr(rnd(3));
X.
X237c
X		read_engr_at(u.ux,u.uy);
X.
X72c
X#ifdef GRAPHICS
X	/* Set the default values of the presentation characters */
X	memcpy((char *) &showsyms, (char *) &defsyms, sizeof(struct symbols));
X#endif
X#ifdef HACKOPTIONS
X.
X1c
X/*	SCCS Id: @(#)unixmain.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp unixtty.c unixtty.c.orig
Xed unixtty.c <<ED_EOF
X331a
X
X#ifdef COM_COMPL
X/* Read in an extended command - doing command line completion for
X * when enough character have been entered to make a unique command.
X * This is just a modified getlin().   -jsb
X */
Xget_ext_cmd(bufp)
Xregister char *bufp;
X{
X	register char *obufp = bufp;
X	register int c;
X	int com_index, index;
X
X	flags.toplin = 2;		/* nonempty, no --More-- required */
X
X	for(;;) {
X		(void) fflush(stdout);
X		if((c = readchar()) == EOF) {
X			*bufp = 0;
X			return;
X		}
X		if(c == '\033') {
X			*obufp = c;
X			obufp[1] = 0;
X			return;
X		}
X		if(c == erase_char || c == '\b') {
X			if(bufp != obufp) {
X				bufp--;
X				putstr("\b \b"); /* putsym converts \b */
X			} else	bell();
X		} else if(c == '\n') {
X			*bufp = 0;
X			return;
X		} else if(' ' <= c && c < '\177') {
X				/* avoid isprint() - some people don't have it
X				   ' ' is not always a printing char */
X			*bufp = c;
X			bufp[1] = 0;
X			index = 0;
X			com_index = -1;
X
X			while(extcmdlist[index].ef_txt != (char *) 0){
X				if(!strncmp(obufp, extcmdlist[index].ef_txt,
X				strlen(obufp)))
X					if(com_index == -1) /* No matches yet*/
X					    com_index = index;
X					else /* More than 1 match */
X					    com_index = -2;
X				index++;
X			}
X			if(com_index >= 0){
X				strcpy(obufp,
X				extcmdlist[com_index].ef_txt);
X				/* finish print our string */
X				putstr(bufp);
X				bufp = obufp; /* reset it */
X				if(strlen(obufp) < BUFSIZ-1 &&
X				 strlen(obufp) < COLNO)
X					/* set bufp at the end of our
X					 * string
X					 */
X					bufp += strlen(obufp);
X			} else {
X				putstr(bufp);
X				if(bufp-obufp < BUFSZ-1 && bufp-obufp < COLNO)
X					bufp++;
X			}
X		} else if(c == kill_char || c == '\177') { /* Robert Viduya */
X				/* this test last - @ might be the kill_char */
X			while(bufp != obufp) {
X				bufp--;
X				putstr("\b \b");
X			}
X		} else
X			bell();
X	}
X
X}
X#endif COM_COMPL
X.
X9a
X#include	"func_tab.h"
X.
X1c
X/*	SCCS Id: @(#)unixtty.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp version.c version.c.orig
Xed version.c <<ED_EOF
X78a
X
X#endif
X.
X70,72c
X	pg_line("    Scott R. Turner    Tom Almy          John S. Bien");
X	pg_line("    Gil Neiger         Ralf Brown	  Eric S. Raymond");
X	pg_line("    Eric Backus        Roland McGrath    Greg Laskin");
X.
X29a
X#ifdef DGKMOD
X
X.
X1c
X/*	SCCS Id: @(#)version.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp wield.c wield.c.orig
Xed wield.c <<ED_EOF
X129c
X	return(obj && obj == uwep && obj->cursed &&
X.
X43c
X	else if (!uarmg && wep->otyp == DEAD_COCKATRICE) {
X.
X34,41d
X29c
X	else if(wep == &zeroobj) {
X	  if(uwep == 0){
X	    pline("You are already empty handed.");
X	  } else {
X	    setuwep((struct obj *) 0);
X	    res++;
X	    pline("You are empty handed.");
X	  }
X	} else if(uwep == wep)
X.
X1c
X/*	SCCS Id: @(#)wield.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp wizard.c wizard.c.orig
Xed wizard.c <<ED_EOF
X421,423c
X		if((mtmp = mkmon_at(nasties[rn2(nastynum)], u.ux, u.uy)))  {
X
X			mtmp->msleep = 0;
X			mtmp->mpeaceful = 0;
X		}
X.
X417c
X	nastynum = sizeof(nasties) - 1;
X.
X215c
X#endif /* KAA /**/
X.
X211c
X# endif /* KOPS /**/
X.
X71c
X	if(!carrying(AMULET_SYM)) {
X.
X1c
X/*	SCCS Id: @(#)wizard.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp write.c write.c.orig
Xed write.c <<ED_EOF
X22a
X# endif
X.
X20d
X1c
X/*	SCCS Id: @(#)write.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp you.h you.h.orig
Xed you.h <<ED_EOF
X44c
X#endif
X.
X1c
X/*	SCCS Id: @(#)you.h	1.4	87/08/08
X.
Xw
Xq
XED_EOF
X
Xcp zap.c zap.c.orig
Xed zap.c <<ED_EOF
X629c
X		(dx == dy) ? '\\' : (dx && dy) ? '/' : dx ? HWALL_SYM : VWALL_SYM;
X.
X347,348c
X		default: impossible("object %d used?",obj->otyp);
X	}
X.
X343,345c
X#ifdef SPELLS
X		case SPE_LIGHT:
X		    pline("You've blinded yourself!");
X		    Blind += rnd(100);
X		    break;		
X		case SPE_DIG:
X		case SPE_TURN_UNDEAD:
X		case SPE_DETECT_UNSEEN:
X#endif
X		case WAN_DIGGING:
X		case WAN_UNDEAD_TURNING:
X		case WAN_NOTHING:
X.
X340d
X337c
X		case WAN_DEATH:
X#ifdef SPELLS
X		case SPE_FINGER_OF_DEATH:
X#endif
X		    killer = "death ray";
X.
X334c
X		case WAN_TELEPORTATION:
X#ifdef SPELLS
X		case SPE_TELEPORT_AWAY:
X#endif
X.
X331c
X		case WAN_SLOW_MONSTER:
X#ifdef SPELLS
X		case SPE_SLOW_MONSTER:
X#endif
X.
X327a
X#ifdef SPELLS
X		case SPE_SLEEP:
X#endif
X.
X310c
X		case WAN_CANCELLATION:
X#ifdef SPELLS
X		case SPE_CANCELLATION:
X#endif
X.
X307a
X#ifdef SPELLS
X		case SPE_POLYMORPH:
X#endif
X.
X306c
X		case WAN_POLYMORPH:
X.
X304a
X#ifdef SPELLS
X		case SPE_MAGIC_MISSILE:
X#endif
X		    damage = d(4,6);
X		    pline("Idiot!  You've shot yourself!"); 
X.
X301,303c
X		case WAN_MAGIC_MISSILE:
X.
X299a
X#ifdef SPELLS
X		case SPE_CONE_OF_COLD:
X#endif
X		    pline("You imitate a popsicle!");
X		    if (!Cold_resistance) damage=d(12,6);
X.
X296,298c
X		case WAN_COLD:
X.
X292a
X#ifdef SPELLS
X		case SPE_FIREBALL:
X#endif
X		    pline("You've set light to yourself!");
X		    if (!Fire_resistance) damage=d(12,6);
X.
X289,291c
X		case WAN_FIRE:
X.
X287d
X284,285c
X	switch(obj->otyp) {
X		case WAN_STRIKING:
X#ifdef SPELLS
X		case SPE_FORCE_BOLT:
X#endif
X		    pline("You magically bash yourself!");
X.
X132a
X	        /* Amulets gets cheap   stewr 870807 */
X		if (obj->otyp == AMULET_OF_YENDOR) otmp2->spe = obj->spe;
X		/* Wands of wishing max 3 stewr 870808 */
X		if ((otmp2->otyp == WAN_WISHING) 
X		    && (obj->spe > 3)) otmp2->spe = 3;
X.
X1c
X/*	SCCS Id: @(#)zap.c	1.4	87/08/08
X.
Xw
Xq
XED_EOF
END_OF_update.patches
if test 43078 -ne `wc -c <update.patches`; then
    echo shar: \"update.patches\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0