[comp.sources.games.bugs] NetHack 2.3 Update Pt. 09 of 12

mike@genpyr.UUCP (Mike Stephenson) (04/14/88)

	Two more today...

-------------------------------cut here---------------------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	Update.2.3.d
# This archive created: Mon Apr  4 08:52:34 1988
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Update.2.3.d'" '(38790 characters)'
if test -f 'Update.2.3.d'
then
	echo shar: will not over-write existing file "'Update.2.3.d'"
else
cat << \SHAR_EOF > 'Update.2.3.d'
*** ./mon.c.orig	Mon Feb 22 08:40:08 1988
--- ./mon.c	Thu Mar 31 11:19:13 1988
***************
*** 1,4
! /*	SCCS Id: @(#)mon.c	2.1	87/10/17
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "hack.h"

--- 1,4 -----
! /*	SCCS Id: @(#)mon.c	2.3	87/12/12
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "hack.h"
***************
*** 3,9
  
  #include "hack.h"
  #include "mfndpos.h"
! extern struct monst *mkmon_at();
  extern struct trap *maketrap();
  extern struct obj *mkobj_at(), *mksobj_at();
  extern char *hcolor();

--- 3,9 -----
  
  #include "hack.h"
  #include "mfndpos.h"
! extern struct monst *makemon(), *mkmon_at();
  extern struct trap *maketrap();
  extern struct obj *mkobj_at(), *mksobj_at();
  extern char *hcolor();
***************
*** 41,47
  		mtmp->mlstmv = moves;
  
  		/* most monsters drown in pools */
! 		{ boolean inpool, iseel;
  
  		  inpool = (levl[mtmp->mx][mtmp->my].typ == POOL);
  		  iseel = (mtmp->data->mlet == ';');

--- 41,48 -----
  		mtmp->mlstmv = moves;
  
  		/* most monsters drown in pools */
! 		{ boolean inpool,infountain,iseel,isgremlin;
! 		  extern struct permonst pm_gremlin;
  
  		  inpool = (levl[mtmp->mx][mtmp->my].typ == POOL);
  		  iseel = (mtmp->data->mlet == ';');
***************
*** 45,51
  
  		  inpool = (levl[mtmp->mx][mtmp->my].typ == POOL);
  		  iseel = (mtmp->data->mlet == ';');
! 		  if(inpool && !iseel) {
  			if(cansee(mtmp->mx,mtmp->my))
  			    pline("%s drowns.", Monnam(mtmp));
  			mondead(mtmp);

--- 46,62 -----
  
  		  inpool = (levl[mtmp->mx][mtmp->my].typ == POOL);
  		  iseel = (mtmp->data->mlet == ';');
! 		  isgremlin = (mtmp->data->mlet == 'G' && mtmp->isgremlin);
! 		  infountain = (levl[mtmp->mx][mtmp->my].typ == FOUNTAIN);
! 		  if((inpool || infountain) && isgremlin && rn2(3)) {
! 			coord mm;
! 			enexto(&mm, mtmp->mx, mtmp->my);
! 			if(cansee(mtmp->mx,mtmp->my) && 
! 			   makemon(PM_GREMLIN, mm.x, mm.y))
! 				pline("%s multiplies.", Monnam(mtmp));
! 			if (infountain) dryup();
! 		  }
! 		  if(inpool && !iseel && !isgremlin) {
  			if(cansee(mtmp->mx,mtmp->my))
  			    pline("%s drowns.", Monnam(mtmp));
  			mondead(mtmp);
***************
*** 73,79
  			if(Conflict && cansee(mtmp->mx,mtmp->my)
  				&& (fr = fightm(mtmp)) == 2)
  				continue;
! 			if(fr<0 && dochugw(mtmp))
  				continue;
  		}
  		if(mtmp->mspeed == MFAST && dochugw(mtmp))

--- 84,92 -----
  			if(Conflict && cansee(mtmp->mx,mtmp->my)
  				&& (fr = fightm(mtmp)) == 2)
  				continue;
! #ifdef STOOGES
! 			if((mtmp->isstooge) && cansee(mtmp->mx,mtmp->my)
! 				&& (fr = fightm(mtmp)) == 2)
  				continue;
  #endif
    			if(fr<0 && dochugw(mtmp))
***************
*** 75,80
  				continue;
  			if(fr<0 && dochugw(mtmp))
  				continue;
  		}
  		if(mtmp->mspeed == MFAST && dochugw(mtmp))
  			continue;

--- 88,96 -----
  			if((mtmp->isstooge) && cansee(mtmp->mx,mtmp->my)
  				&& (fr = fightm(mtmp)) == 2)
  				continue;
+ #endif
+   			if(fr<0 && dochugw(mtmp))
+ 				continue;
  		}
  		if(mtmp->mspeed == MFAST && dochugw(mtmp))
  			continue;
***************
*** 265,271
  		{ register struct trap *ttmp = t_at(nx, ny);
  		  register long tt;
  			if(ttmp) {
! 				tt = 1L << ttmp->ttyp;
  				/* below if added by GAN 02/06/87 to avoid
  				 * traps out of range
  				 */

--- 281,290 -----
  		{ register struct trap *ttmp = t_at(nx, ny);
  		  register long tt;
  			if(ttmp) {
! /*				tt = 1L << ttmp->ttyp;*/
! /* why don't we just have code look like what it's supposed to do? then it
! /* might start working for every case. try this instead: -sac */
! 				tt = (ttmp->ttyp < TRAPNUM && ttmp->ttyp > 0);
  				/* below if added by GAN 02/06/87 to avoid
  				 * traps out of range
  				 */
***************
*** 270,276
  				 * traps out of range
  				 */
  				if(!(tt & ALLOW_TRAPS))  {
! 					impossible("A monster looked at a very strange trap");
  					continue;
  				}
  				if(mon->mtrapseen & tt){

--- 289,295 -----
  				 * traps out of range
  				 */
  				if(!(tt & ALLOW_TRAPS))  {
! 					impossible("A monster looked at a very strange trap of type %d.", ttmp->ttyp);
  					continue;
  				}
  				if(mon->mtrapseen & tt){
***************
*** 384,390
  
  	if(mon == fmon) fmon = fmon->nmon;
  	else {
! 		for(mtmp = fmon; mtmp->nmon != mon; mtmp = mtmp->nmon) ;
  		mtmp->nmon = mon->nmon;
  	}
  }

--- 403,409 -----
  
  	if(mon == fmon) fmon = fmon->nmon;
  	else {
! 		for(mtmp = fmon; mtmp && mtmp->nmon != mon; mtmp = mtmp->nmon) ;
  		mtmp->nmon = mon->nmon;
  	}
  }
***************
*** 483,489
  	/* punish bad behaviour */
  	if(mdat->mlet == '@') {
  		HTelepat = 0;
! 		u.uluck -= 2;
  	}
  	if(mtmp->mpeaceful || mtmp->mtame) u.uluck--;
  	if(mdat->mlet == 'u') u.uluck -= 5;

--- 502,508 -----
  	/* punish bad behaviour */
  	if(mdat->mlet == '@') {
  		HTelepat = 0;
! 		change_luck(-2);
  	}
  	if(mtmp->mpeaceful || mtmp->mtame)	change_luck(-1);
  	if(mdat->mlet == 'u')			change_luck(-5);
***************
*** 485,493
  		HTelepat = 0;
  		u.uluck -= 2;
  	}
! 	if(mtmp->mpeaceful || mtmp->mtame) u.uluck--;
! 	if(mdat->mlet == 'u') u.uluck -= 5;
! 	if((int)u.uluck < LUCKMIN) u.uluck = LUCKMIN;
  
  	/* give experience points */
  	tmp = 1 + mdat->mlevel * mdat->mlevel;

--- 504,511 -----
  		HTelepat = 0;
  		change_luck(-2);
  	}
! 	if(mtmp->mpeaceful || mtmp->mtame)	change_luck(-1);
! 	if(mdat->mlet == 'u')			change_luck(-5);
  
  	/* give experience points */
  	tmp = 1 + mdat->mlevel * mdat->mlevel;
***************
*** 492,513
  	/* give experience points */
  	tmp = 1 + mdat->mlevel * mdat->mlevel;
  	if(mdat->ac < 3) tmp += 2*(7 - mdat->ac);
! 	if(index(
! #ifdef RPH
! # ifdef KAA
! 		 "AcsSDXaeRTVWU&In:P89",
! # else
! 		 "AcsSDXaeRTVWU&In:P8",
! # endif
! #else
! # ifdef KAA
! 		 "AcsSDXaeRTVWU&In:P9",
! # else
! 		 "AcsSDXaeRTVWU&In:P",
! # endif
! #endif
! 					 mdat->mlet)) tmp += 2*mdat->mlevel;
! 
  	if(index("DeV&P",mdat->mlet)) tmp += (7*mdat->mlevel);
  	if(mdat->mlevel > 6) tmp += 50;
  	if(mdat->mlet == ';') tmp += 1000;

--- 510,516 -----
  	/* give experience points */
  	tmp = 1 + mdat->mlevel * mdat->mlevel;
  	if(mdat->ac < 3) tmp += 2*(7 - mdat->ac);
! 	if(index("AcsSDXaeRTVWU&In:P389",mdat->mlet)) tmp += 2*mdat->mlevel;
  	if(index("DeV&P",mdat->mlet)) tmp += (7*mdat->mlevel);
  	if(mdat->mlevel > 6) tmp += 50;
  	if(mdat->mlet == ';') tmp += 1000;
***************
*** 565,571
  #ifdef RPH
  	old_nlth = mtmp->mnamelth;
  	if (old_nlth > 0)  (void) strcpy (old_name, NAME(mtmp));
! #endif	    
  	mondead(mtmp);
  	tmp = mdat->mlet;
  	if(tmp == 'm') { /* he killed a minotaur, give him a wand of digging */

--- 568,582 -----
  #ifdef RPH
  	old_nlth = mtmp->mnamelth;
  	if (old_nlth > 0)  (void) strcpy (old_name, NAME(mtmp));
! #endif
! 	if (mdat->mlet == '&' && mtmp->isdjinni) { /* no djinni corpse */
! 		mondead(mtmp);
! 		return;
! 	}
! 	if (mdat->mlet == 'G' && mtmp->isgremlin) { /* no gremlin corpse */
! 		mondead(mtmp);
! 		return;
! 	}
  	mondead(mtmp);
  	tmp = mdat->mlet;
  	if(tmp == 'm') { /* he killed a minotaur, give him a wand of digging */
***************
*** 586,591
  		stackobj(fobj);
  	} else
  #endif
  #ifdef KAA
  	if(tmp == '&') (void) mkobj_at(0, x, y);
  	else

--- 597,608 -----
  		stackobj(fobj);
  	} else
  #endif
+ #ifdef SAC
+ 	if(tmp == '3') {
+ 		; /* don't do anything special- keep it from failing on */
+ 		  /* call to letter(tmp) */
+ 	} else
+ #endif /* SAC */
  #ifdef KAA
  	if(tmp == '&') (void) mkobj_at(0, x, y);
  	else
***************
*** 635,641
  						   old_name, old_nlth);
  # ifdef KOPS
  			else if (mdat->mlet == 'K')
! 			    obj2 = mksobj_at((rn2(4) ? CLUB : WHISTLE), x, y);
  # endif
  			else
  			    obj2 = mkobj_at(tmp,x,y);

--- 652,659 -----
  						   old_name, old_nlth);
  # ifdef KOPS
  			else if (mdat->mlet == 'K')
! 			    obj2 = mksobj_at((rn2(2) ? CLUB : 
! 				   (rn2(2)) ? WHISTLE : BADGE), x, y);
  # endif
  			else
  			    obj2 = mkobj_at(tmp,x,y);
***************
*** 686,692
  {
  	register mhp, hpn, hpd;
  
! 	if(mdat == mtmp->data) return(0);	/* still the same monster */
  #ifndef NOWORM
  	if(mtmp->wormno) wormdead(mtmp);	/* throw tail away */
  #endif

--- 704,719 -----
  {
  	register mhp, hpn, hpd;
  
! #ifdef RPH
! 	/* mdat = 0 -> caller wants a random monster shape */
! 	if (mdat == 0) {
! 	    /* ie. minimum shape is mons[15], minimum random range */
! 	    /* is 3, and randomness tails off as you descend into the */
! 	    /* depths max shape is mons[CMNUM-1] */
! 	mdat = &mons[CMNUM-1-rn2((CMNUM-17) - (CMNUM-20)*dlevel/MAXLEVEL)];
! 	}
! #endif	
!   	if(mdat == mtmp->data) return(0);	/* still the same monster */
  #ifndef NOWORM
  	if(mtmp->wormno) wormdead(mtmp);	/* throw tail away */
  #endif
*** ./monmove.c.orig	Mon Feb 22 08:40:08 1988
--- ./monmove.c	Thu Mar 31 11:19:13 1988
***************
*** 1,4
! /*	SCCS Id: @(#)monmove.c	2.1	87/10/18
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "hack.h"

--- 1,4 -----
! /*	SCCS Id: @(#)monmove.c	2.3	87/12/12
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "hack.h"
***************
*** 5,10
  #include "mfndpos.h"
  #define	NULL	(char *) 0
  
  extern int warnlevel;	/* defined in mon.c */
  
  dochugw(mtmp) register struct monst *mtmp; {

--- 5,11 -----
  #include "mfndpos.h"
  #define	NULL	(char *) 0
  
+ extern struct obj *mksobj_at();
  extern int warnlevel;	/* defined in mon.c */
  
  dochugw(mtmp) register struct monst *mtmp; {
***************
*** 31,37
  	register tmp, nearby, scared, onscary;
  
  	if(mtmp->cham && !rn2(6))
! 		(void) newcham(mtmp, &mons[dlevel+14+rn2(CMNUM-14-dlevel)]);
  	mdat = mtmp->data;
  	if(mdat->mlevel < 0)
  		panic("bad monster %c (%d)",mdat->mlet,mdat->mlevel);

--- 32,43 -----
  	register tmp, nearby, scared, onscary;
  
  	if(mtmp->cham && !rn2(6))
! 	    (void) newcham(mtmp,
! #ifndef RPH
! 			   &mons[dlevel+14+rn2(CMNUM-14-dlevel)]);
! #else
! 			   (struct permonst *)0);
! #endif
  	mdat = mtmp->data;
  	if(mdat->mlevel < 0)
  		panic("bad monster %c (%d)",mdat->mlet,mdat->mlevel);
***************
*** 111,117
  #endif
  	}
  #ifdef HARD	/* Demonic Blackmail!!! */
! 	if(mdat->mlet == '&' && mtmp->mpeaceful && !mtmp->mtame)
  		if(demon_talk(mtmp))
  			 return(1);	/* you paid it off */
  #endif

--- 117,124 -----
  #endif
  	}
  #ifdef HARD	/* Demonic Blackmail!!! */
! 	if(mdat->mlet == '&' && mtmp->mpeaceful 
! 	   && !mtmp->mtame && !mtmp->isdjinni)
  		if(demon_talk(mtmp))
  			 return(1);	/* you paid it off */
  #endif
*** ./monst.c.orig	Mon Feb 22 08:40:08 1988
--- ./monst.c	Thu Mar 31 17:16:47 1988
***************
*** 1,4
! /*	SCCS Id: @(#)monst.c	2.2	87/11/29
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "hack.h"

--- 1,4 -----
! /*	SCCS Id: @(#)monst.c	2.3	87/12/16
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "hack.h"
***************
*** 3,8
  
  #include "hack.h"
  #include "eshk.h"
  extern char plname[PL_NSIZ];
  
  struct permonst mons[CMNUM+2] = {

--- 3,9 -----
  
  #include "hack.h"
  #include "eshk.h"
+ #include "edog.h"
  extern char plname[PL_NSIZ];
  
  struct permonst mons[CMNUM+2] = {
***************
*** 87,95
  	{ "trapper",		',', 12,  3, 3,  0, 0,  0, 0 },
  	{ "purple worm",	'P', 15,  9, 6, 20, 2,  8, 0 },
  	{ "demon",		'&', 10, 12,-4, 30, 1,  4, 0 },
- #ifdef SAC
- 	{ "soldier",		'3', 12,  9,-3, 15,10,  4, 0 },
- #endif /* SAC */
  	{ "minotaur",		'm', 15, 15, 6,  0, 4, 10, 0 },
  	{ "shopkeeper", 	'@', 12, 18, 0, 50, 4,  8, sizeof(struct eshk) }
  };

--- 88,93 -----
  	{ "trapper",		',', 12,  3, 3,  0, 0,  0, 0 },
  	{ "purple worm",	'P', 15,  9, 6, 20, 2,  8, 0 },
  	{ "demon",		'&', 10, 12,-4, 30, 1,  4, 0 },
  	{ "minotaur",		'm', 15, 15, 6,  0, 4, 10, 0 },
  	{ "shopkeeper", 	'@', 12, 18, 0, 50, 4,  8, sizeof(struct eshk) }
  };
***************
*** 96,101
  
  struct permonst pm_ghost = { "ghost", ' ', 10, 3, -5, 50, 1, 1, sizeof(plname) };
  #ifdef SAC
  struct permonst pm_wizard = { "wizard of Yendor", '1', 20, 12, -8, 100, 2, 12, 0 };
  #else
  struct permonst pm_wizard = { "wizard of Yendor", '1', 15, 12, -2, 70, 1, 12, 0 };

--- 94,100 -----
  
  struct permonst pm_ghost = { "ghost", ' ', 10, 3, -5, 50, 1, 1, sizeof(plname) };
  #ifdef SAC
+ struct permonst pm_soldier = { "soldier", '3', 12, 4, -3, 15, 10, 4, 0 };
  struct permonst pm_wizard = { "wizard of Yendor", '1', 20, 12, -8, 100, 2, 12, 0 };
  #else
  struct permonst pm_wizard = { "wizard of Yendor", '1', 15, 12, -2, 70, 1, 12, 0 };
***************
*** 106,110
  #ifdef MAIL
  struct permonst pm_mail_daemon = { "mail daemon", '2', 100, 1, 10, 127, 0, 0, 0 };
  #endif
! struct permonst pm_eel = { "giant eel", ';', 15, 6, -3, 0, 3, 6, 0 };
! 

--- 105,115 -----
  #ifdef MAIL
  struct permonst pm_mail_daemon = { "mail daemon", '2', 100, 1, 10, 127, 0, 0, 0 };
  #endif
! struct permonst pm_eel    = {"electric eel", ';', 15, 6, -3, 0, 3, 6, 0};
! struct permonst pm_djinni = {"djinni",  '&', 10, 12, 0, 30, 2, 8, 0};
! struct permonst pm_gremlin= {"gremlin", 'G', 3, 12, 2, 25, 1, 8, 0};
! #ifdef STOOGES
! struct permonst pm_larry  = {"Larry",   '@', 3, 12, 10, 0, 1, 6, 0};
! struct permonst pm_curly  = {"Curly",   '@', 3, 12, 10, 0, 1, 6, 0};
! struct permonst pm_moe    = {"Moe",     '@', 3, 12, 10, 0, 1, 6, 0};
! #endif
*** ./monst.h.orig	Mon Feb 22 08:40:09 1988
--- ./monst.h	Thu Feb 11 11:44:52 1988
***************
*** 1,4
! /*	SCCS Id: @(#)monst.h	2.1	87/09/28
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  struct monst {

--- 1,4 -----
! /*	SCCS Id: @(#)monst.h	2.3	88/02/11
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  struct monst {
***************
*** 37,42
  #endif
  #ifdef WALKIES
  	Bitfield(mleashed,1);	/* monster is on a leash */
  #endif
  	long mtrapseen;		/* bitmap of traps we've been trapped in */
  	long mlstmv;		/* prevent two moves at once */

--- 37,48 -----
  #endif
  #ifdef WALKIES
  	Bitfield(mleashed,1);	/* monster is on a leash */
+ #endif
+ 	Bitfield(dragon,3);	/* multiple dragon type */
+ 	Bitfield(isdjinni,1);	/* is djinni */
+ 	Bitfield(isgremlin,1);	/* is gremlin */
+ #ifdef STOOGES
+ 	Bitfield(isstooge,1);	/* is stooge */
  #endif
  	long mtrapseen;		/* bitmap of traps we've been trapped in */
  	long mlstmv;		/* prevent two moves at once */
*** ./msdos.c.orig	Mon Feb 22 08:40:09 1988
--- ./msdos.c	Wed Dec 16 13:23:38 1987
***************
*** 1,4
! /*	SCCS Id: @(#)msdos.c	2.1	87/10/19
  /* An assortment of MSDOS functions.
   */
  

--- 1,4 -----
! /*	SCCS Id: @(#)msdos.c	2.3	87/12/16
  /* An assortment of MSDOS functions.
   */
  
***************
*** 90,96
  	char *comspec;
  
  	if (comspec = getcomspec()) {
! 		settty("To return to HACK, type \"exit\" at the DOS prompt.\n");
  		chdirx(orgdir, 0);
  		if (spawnl(P_WAIT, comspec, comspec, NULL) < 0) {
  			printf("\nCan't spawn %s !\n", comspec);

--- 90,96 -----
  	char *comspec;
  
  	if (comspec = getcomspec()) {
! 		settty("To return to NetHack, type \"exit\" at the DOS prompt.\n");
  		chdirx(orgdir, 0);
  		if (spawnl(P_WAIT, comspec, comspec, NULL) < 0) {
  			printf("\nCan't spawn %s !\n", comspec);
*** ./objclass.h.orig	Mon Feb 22 08:40:10 1988
--- ./objclass.h	Sun Jan 24 18:27:35 1988
***************
*** 1,4
! /*	SCCS Id: @(#)objclass.h	2.1	87/09/23
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* definition of a class of objects */

--- 1,4 -----
! /*	SCCS Id: @(#)objclass.h	2.3	88/01/24
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* definition of a class of objects */
***************
*** 31,39
  #define	wldam		oc_oc2	/* for weapons and PICK_AXE */
  
  #define	g_val		oc_oi	/* for gems: value on exit */
! #ifdef MSDOS
! 	int oc_descr_i;		/* where the description comes from */
! #endif
  #ifdef SPELLS
  #define spl_lev		oc_oi	/* for books: spell level */
  #endif

--- 31,37 -----
  #define	wldam		oc_oc2	/* for weapons and PICK_AXE */
  
  #define	g_val		oc_oi	/* for gems: value on exit */
! 
  #ifdef SPELLS
  #define spl_lev		oc_oi	/* for books: spell level */
  #endif
*** ./objects.h.orig	Mon Feb 22 08:40:10 1988
--- ./objects.h	Thu Mar 31 11:25:06 1988
***************
*** 1,4
! /*	SCCS Id: @(#)objects.h	2.2	87/11/29
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* objects have letter " % ) ( 0 _ ` [ ! ? / = * + */

--- 1,4 -----
! /*	SCCS Id: @(#)objects.h	2.3	87/12/16
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* objects have letter " % ) ( 0 _ ` [ ! ? / = * + */
***************
*** 31,36
  	FOOD("slice of pizza",	5, 0, 1, 250),
  	FOOD("cream pie",	3, 0, 1, 100),
  	FOOD("tin",		7, 0, 1, 0),
  	FOOD("orange",		1, 0, 1, 80),
  	FOOD("apple",		1, 0, 1, 50),
  	FOOD("pear",		1, 0, 1, 50),

--- 31,38 -----
  	FOOD("slice of pizza",	5, 0, 1, 250),
  	FOOD("cream pie",	3, 0, 1, 100),
  	FOOD("tin",		7, 0, 1, 0),
+ 	FOOD("K-ration",	0, 1, 1, 400),
+ 	FOOD("C-ration",	0, 1, 1, 300),
  	FOOD("orange",		1, 0, 1, 80),
  	FOOD("apple",		1, 0, 1, 50),
  	FOOD("pear",		1, 0, 1, 50),
***************
*** 154,161
  	WEAPON("crossbow",	5, 3, 4, 6),
  
  #ifdef WALKIES
! 	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 55, 0, 2, 0, 0, 0 },
! 	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 20, 0, 20, 0, 0, 0 },
  #else
  	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 75, 0, 2, 0, 0, 0 },
  	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 0, 0, 20, 0, 0, 0 },

--- 156,163 -----
  	WEAPON("crossbow",	5, 3, 4, 6),
  
  #ifdef WALKIES
! 	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 40, 0, 2, 0, 0, 0 },
! 	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 20, 0, 6, 0, 0, 0 },
  #else
  	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 60, 0, 2, 0, 0, 0 },
  	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 0, 0, 6, 0, 0, 0 },
***************
*** 157,164
  	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 55, 0, 2, 0, 0, 0 },
  	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 20, 0, 20, 0, 0, 0 },
  #else
! 	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 75, 0, 2, 0, 0, 0 },
! 	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 0, 0, 20, 0, 0, 0 },
  #endif
  	{ "magic whistle", "whistle", NULL, 0, 0, TOOL_SYM, 9, 0, 2, 0, 0, 0 },
  #ifdef RPH

--- 159,166 -----
  	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 40, 0, 2, 0, 0, 0 },
  	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 20, 0, 6, 0, 0, 0 },
  #else
! 	{ "whistle", "whistle", NULL, 0, 0, TOOL_SYM, 60, 0, 2, 0, 0, 0 },
! 	{ "leash", NULL, NULL, 1, 0, TOOL_SYM, 0, 0, 6, 0, 0, 0 },
  #endif
  	{ "magic whistle", "whistle", NULL, 0, 0, TOOL_SYM, 9, 0, 2, 0, 0, 0 },
  #ifdef RPH
***************
*** 174,179
  	{ "magic marker", NULL, NULL, 1, 0, TOOL_SYM, 1, 0, 1, 0, 0, 0 },
  	{ "stethoscope", NULL, NULL, 1, 0, TOOL_SYM, 1, 0, 3, 0, 0, 0 },
  	{ "can opener", NULL, NULL, 1, 1, TOOL_SYM, 1, 0, 1, 0, 0, 0 },
  
  	{ "heavy iron ball", NULL, NULL, 1, 0,
  		BALL_SYM, 100, 0, 20, 0, 0, 0 },

--- 176,184 -----
  	{ "magic marker", NULL, NULL, 1, 0, TOOL_SYM, 1, 0, 1, 0, 0, 0 },
  	{ "stethoscope", NULL, NULL, 1, 0, TOOL_SYM, 1, 0, 3, 0, 0, 0 },
  	{ "can opener", NULL, NULL, 1, 1, TOOL_SYM, 1, 0, 1, 0, 0, 0 },
+ 	{ "lamp", "lamp", NULL, 0, 0, TOOL_SYM, 12, 0, 10, 0, 0, 0 },
+ 	{ "magic lamp", "lamp", NULL, 0, 0, TOOL_SYM, 2, 0, 10, 0, 0, 0 },
+ 	{ "badge", "badge", NULL, 0, 0, TOOL_SYM, 1, 0, 2, 0, 0, 0 },
  
  	{ "heavy iron ball", NULL, NULL, 1, 0,
  		BALL_SYM, 100, 0, 20, 0, 0, 0 },
***************
*** 212,217
  	/* the armors below do not rust */
  	ARMOR("studded leather armor",	12, 3, 3, 7, 1),
  	ARMOR("elfin chain mail",	 1, 1, 2, 5, 3),
  	ARMOR("bronze plate mail",	 6, 5, 9, 4, 0),
  	ARMOR("crystal plate mail",	 1, 5, 9, 3, 2),
  	ARMOR("leather armor",		15, 3, 2, 8, 0),

--- 217,225 -----
  	/* the armors below do not rust */
  	ARMOR("studded leather armor",	12, 3, 3, 7, 1),
  	ARMOR("elfin chain mail",	 1, 1, 2, 5, 3),
+ #ifdef SHIRT
+ 	ARMOR("bronze plate mail",       5, 5, 9, 4, 0),
+ #else
  	ARMOR("bronze plate mail",	 6, 5, 9, 4, 0),
  #endif
  	ARMOR("crystal plate mail",	 1, 5, 9, 3, 2),
***************
*** 213,218
  	ARMOR("studded leather armor",	12, 3, 3, 7, 1),
  	ARMOR("elfin chain mail",	 1, 1, 2, 5, 3),
  	ARMOR("bronze plate mail",	 6, 5, 9, 4, 0),
  	ARMOR("crystal plate mail",	 1, 5, 9, 3, 2),
  	ARMOR("leather armor",		15, 3, 2, 8, 0),
  	ARMOR("elven cloak",		 5, 0, 2, 9, 3),

--- 221,227 -----
  	ARMOR("bronze plate mail",       5, 5, 9, 4, 0),
  #else
  	ARMOR("bronze plate mail",	 6, 5, 9, 4, 0),
+ #endif
  	ARMOR("crystal plate mail",	 1, 5, 9, 3, 2),
  	ARMOR("leather armor",		15, 3, 2, 8, 0),
  	ARMOR("elven cloak",		 5, 0, 2, 9, 3),
***************
*** 217,222
  	ARMOR("leather armor",		15, 3, 2, 8, 0),
  	ARMOR("elven cloak",		 5, 0, 2, 9, 3),
  	ARMOR("shield",			 3, 0, 2, 9, 0),
  	ARMOR("pair of gloves",		 1, 1, 2, 9, 0),
  
  #define POTION(name,color)	{ name, color, NULL, 0, 1,\

--- 226,236 -----
  	ARMOR("leather armor",		15, 3, 2, 8, 0),
  	ARMOR("elven cloak",		 5, 0, 2, 9, 3),
  	ARMOR("shield",			 3, 0, 2, 9, 0),
+ #ifdef SHIRT
+ 	ARMOR("Hawaiian shirt",          1, 0, 2,10, 0),
+ #else
+ 	ARMOR("Hawaiian shirt",          0, 0, 2,10, 0),
+ #endif
  	ARMOR("pair of gloves",		 1, 1, 2, 9, 0),
  
  #define POTION(name,color)	{ name, color, NULL, 0, 1,\
***************
*** 300,306
  	WAND("probing",		"oak",		0,	IMMEDIATE),
  #endif
  	WAND("digging",		"iron",		5,	RAY),
! 	WAND("magic missile",	"aluminum",	10,	RAY),
  	WAND("fire",		"steel",	5,	RAY),
  	WAND("sleep",		"curved",	5,	RAY),
  	WAND("cold",		"short",	5,	RAY),

--- 314,320 -----
  	WAND("probing",		"oak",		0,	IMMEDIATE),
  #endif
  	WAND("digging",		"iron",		5,	RAY),
! 	WAND("magic missile",	"aluminum",	5,	RAY),
  	WAND("fire",		"steel",	5,	RAY),
  	WAND("sleep",		"curved",	5,	RAY),
  	WAND("cold",		"short",	5,	RAY),
***************
*** 305,311
  	WAND("sleep",		"curved",	5,	RAY),
  	WAND("cold",		"short",	5,	RAY),
  	WAND("death",		"long",		1,	RAY),
! 	WAND(NULL,		"ebony",	0,	0),
  	WAND(NULL,		"runed",	0,	0),
  
  #ifdef SPELLS

--- 319,325 -----
  	WAND("sleep",		"curved",	5,	RAY),
  	WAND("cold",		"short",	5,	RAY),
  	WAND("death",		"long",		1,	RAY),
! 	WAND("lightning",	"ebony",	5,	RAY),
  	WAND(NULL,		"runed",	0,	0),
  
  #ifdef SPELLS
***************
*** 377,383
  	RING("teleport control", "iron",	0),
  	RING("polymorph",	"ivory",	0),
  	RING("polymorph control","blackened",	0),
! 	RING(NULL,		"hematite",	0),
  	RING(NULL,		"brass",	0),
  
  /* gems ************************************************************/

--- 391,397 -----
  	RING("teleport control", "iron",	0),
  	RING("polymorph",	"ivory",	0),
  	RING("polymorph control","blackened",	0),
! 	RING("shock resistance", "hematite",	0),
  	RING(NULL,		"brass",	0),
  
  /* gems ************************************************************/
***************
*** 383,390
  /* gems ************************************************************/
  #define	GEM(name,color,prob,gval)	{ name, color, NULL, 0, 1,\
  		GEM_SYM, prob, 0, 1, 0, 0, gval }
! 	GEM("dilithium crystal", "lavender", 1, 4500),
! 	GEM("diamond", "blue", 1, 4000),
  	GEM("ruby", "red", 1, 3500),
  	GEM("sapphire", "blue", 1, 3000),
  	GEM("emerald", "green", 1, 2500),

--- 397,404 -----
  /* gems ************************************************************/
  #define	GEM(name,color,prob,gval)	{ name, color, NULL, 0, 1,\
  		GEM_SYM, prob, 0, 1, 0, 0, gval }
! 	GEM("dilithium crystal", "white", 1, 4500),
! 	GEM("diamond", "white", 1, 4000),
  	GEM("ruby", "red", 1, 3500),
  	GEM("sapphire", "blue", 1, 3000),
  	GEM("emerald", "green", 1, 2500),
***************
*** 389,408
  	GEM("sapphire", "blue", 1, 3000),
  	GEM("emerald", "green", 1, 2500),
  	GEM("turquoise", "green", 1, 2000),
! 	GEM("aquamarine", "blue", 1, 1500),
! 	GEM("tourmaline", "green", 1, 1000),
! 	GEM("topaz", "yellow", 1, 900),
! 	GEM("opal", "yellow", 1, 800),
! 	GEM("garnet", "dark", 1, 700),
! 	GEM("amethyst", "violet", 1, 650),
! 	GEM("agate", "green", 2, 600),
! 	GEM("onyx", "white", 2, 550),
! 	GEM("jasper", "yellowish brown", 2, 500),
! 	GEM("jade", "green", 2, 450),
! 	GEM("worthless piece of blue glass", "blue", 20, 0),
! 	GEM("worthless piece of red glass", "red", 20, 0),
! 	GEM("worthless piece of yellow glass", "yellow", 20, 0),
! 	GEM("worthless piece of green glass", "green", 20, 0),
  	{ NULL, NULL, NULL, 0, 0, ILLOBJ_SYM, 0, 0, 0, 0, 0, 0 }
  };
  

--- 403,422 -----
  	GEM("sapphire", "blue", 1, 3000),
  	GEM("emerald", "green", 1, 2500),
  	GEM("turquoise", "green", 1, 2000),
! 	GEM("aquamarine", "green", 1, 1500),
! 	GEM("amber", "yellowish brown", 1, 1000),
! 	GEM("topaz", "yellowish brown", 1, 900),
! 	GEM("opal", "white", 1, 800),
! 	GEM("garnet", "red", 1, 700),
! 	GEM("amethyst", "violet", 1, 600),
! 	GEM("jasper", "red", 2, 500),
! 	GEM("fluorite", "violet", 2, 400),
! 	GEM("jade", "green", 2, 300),
! 	GEM("worthless piece of white glass", "white", 16, 100),
! 	GEM("worthless piece of blue glass", "blue", 16, 0),
! 	GEM("worthless piece of red glass", "red", 16, 0),
! 	GEM("worthless piece of yellowish brown glass", "yellowish brown", 17, 0),
! 	GEM("worthless piece of green glass", "green", 17, 0),
  	{ NULL, NULL, NULL, 0, 0, ILLOBJ_SYM, 0, 0, 0, 0, 0, 0 }
  };
  
*** ./objnam.c.orig	Mon Feb 22 08:40:10 1988
--- ./objnam.c	Tue Mar 29 09:02:11 1988
***************
*** 1,4
! /*	SCCS Id: @(#)objnam.c	2.1	87/09/28
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	"hack.h"

--- 1,4 -----
! /*	SCCS Id: @(#)objnam.c	2.3	88/01/21
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	"hack.h"
***************
*** 284,289
  		Sprintf(prefix, "%u ", obj->quan);
  	else
  		Strcpy(prefix, "a ");
  	switch(obj->olet) {
  	case AMULET_SYM:
  		if(strncmp(bp, "cheap ", 6))

--- 284,291 -----
  		Sprintf(prefix, "%u ", obj->quan);
  	else
  		Strcpy(prefix, "a ");
+ 	if((obj->cursed && obj->known))
+ 		Strcat(prefix, "cursed ");
  	switch(obj->olet) {
  	case AMULET_SYM:
  		if(strncmp(bp, "cheap ", 6))
***************
*** 306,312
  		break;
  #ifdef MARKER
  	case TOOL_SYM:			/* temp. hack by GAN 11/18/86 */
! 		if(obj->otyp != MAGIC_MARKER) break;
  #endif
  	case WAND_SYM:
  		if(obj->known)

--- 308,319 -----
  		break;
  #ifdef MARKER
  	case TOOL_SYM:			/* temp. hack by GAN 11/18/86 */
! 		if(obj->owornmask & W_TOOL) { /* blindfold or badge */
! 			Strcat(bp, " (being worn)");
! 			break;
! 		}
! 		if(!(obj->otyp == MAGIC_MARKER || obj->otyp == LAMP)) break;
! 		/* if marker or lamp fall trough to show charges */
  #endif
  	case WAND_SYM:
  		if(obj->known)
***************
*** 313,320
  			Sprintf(eos(bp), " (%d)", obj->spe);
  		break;
  	case RING_SYM:
! 		if(obj->owornmask & W_RINGR) Strcat(bp, " (on right hand)");
! 		if(obj->owornmask & W_RINGL) Strcat(bp, " (on left hand)");
  		if(obj->known && (objects[obj->otyp].bits & SPEC)) {
  			Strcat(prefix, sitoa(obj->spe));
  			Strcat(prefix, " ");

--- 320,331 -----
  			Sprintf(eos(bp), " (%d)", obj->spe);
  		break;
  	case RING_SYM:
! 		if(obj->owornmask & W_RINGR) Strcat(bp, " (on right ");
! 		if(obj->owornmask & W_RINGL) Strcat(bp, " (on left ");
! 		if(obj->owornmask & W_RING) {
! 		    if (humanoid(u.usym)) Strcat(bp, "hand)");
! 		    else		  Strcat(bp, "paw)");
! 		}
  		if(obj->known && (objects[obj->otyp].bits & SPEC)) {
  			Strcat(prefix, sitoa(obj->spe));
  			Strcat(prefix, " ");
***************
*** 321,328
  		}
  		break;
  	}
! 	if(obj->owornmask & W_WEP)
! 		Strcat(bp, " (weapon in hand)");
  	if(obj->unpaid)
  		Strcat(bp, " (unpaid)");
  	if(!strcmp(prefix, "a ") && index(vowels, *bp))

--- 332,342 -----
  		}
  		break;
  	}
! 	if(obj->owornmask & W_WEP) {
! 		Strcat(bp, " (weapon in ");
! 		    if (humanoid(u.usym)) Strcat(bp, "hand)");
! 		    else		  Strcat(bp, "paw)");
! 	}
  	if(obj->unpaid)
  		Strcat(bp, " (unpaid)");
  	if(!strcmp(prefix, " a ") && index(vowels, *bp))
***************
*** 325,332
  		Strcat(bp, " (weapon in hand)");
  	if(obj->unpaid)
  		Strcat(bp, " (unpaid)");
! 	if(!strcmp(prefix, "a ") && index(vowels, *bp))
! 		Strcpy(prefix, "an ");
  	bp = strprepend(bp, prefix);
  	return(bp);
  }

--- 339,346 -----
  	}
  	if(obj->unpaid)
  		Strcat(bp, " (unpaid)");
! 	if(!strcmp(prefix, " a ") && index(vowels, *bp))
! 		Strcpy(prefix, " an ");
  	bp = strprepend(bp, prefix);
  	return(bp);
  }
***************
*** 412,423
  		cnt = 1;
  		bp += 2;
  	}
- #ifdef KAA
- 	if(!strncmp(bp,"blessed ",8)) {
- 		blessed=1;
- 		bp += 8;
- 	}
- #endif
  	if(!cnt && digit(*bp)){
  		cnt = atoi(bp);
  		while(digit(*bp)) bp++;

--- 426,431 -----
  		cnt = 1;
  		bp += 2;
  	}
  	if(!cnt && digit(*bp)){
  		cnt = atoi(bp);
  		while(digit(*bp)) bp++;
***************
*** 424,430
  		while(*bp == ' ') bp++;
  	}
  	if(!cnt) cnt = 1;		/* %% what with "gems" etc. ? */
! 
  	if(*bp == '+' || *bp == '-'){
  		spesgn = (*bp++ == '+') ? 1 : -1;
  		spe = atoi(bp);

--- 432,443 -----
  		while(*bp == ' ') bp++;
  	}
  	if(!cnt) cnt = 1;		/* %% what with "gems" etc. ? */
! #ifdef KAA
! 	if(!strncmp(bp, "blessed ",8)) {
! 		blessed=1;
! 		bp += 8;
! 	}
! #endif
  	if(*bp == '+' || *bp == '-'){
  		spesgn = (*bp++ == '+') ? 1 : -1;
  		spe = atoi(bp);
***************
*** 528,533
  		goto srch;
  	}
  
  	p = eos(bp);
  #if defined(KOPS) && !defined(KJSMODS)
  	if (!strcmp(p-3, "kop")) {

--- 541,553 -----
  		goto srch;
  	}
  
+ #ifdef SHIRT
+ 	if (!strcmp(bp, "hawaiian shirt")) {
+ 		*(bp) = 'H';
+ 		an = bp;
+ 		goto srch;
+ 	}
+ #endif
  	p = eos(bp);
  #if defined(KOPS) && !defined(KJSMODS)
  	if (!strcmp(p-3, "kop")) {
***************
*** 607,613
  	if(heavy)	otmp->owt += 15;
  
  	if(cnt > 0 && index("%?!*)", let) &&
! 		(cnt < 4 ||
  #ifdef WIZARD
  		wizard ||
  #endif

--- 627,633 -----
  	if(heavy)	otmp->owt += 15;
  
  	if(cnt > 0 && index("%?!*)", let) &&
! 		(cnt < rnd(6) ||
  #ifdef WIZARD
  		wizard ||
  #endif
***************
*** 618,624
  #endif
  		))		otmp->quan = cnt;
  
! 	if(spe > 3 && spe > otmp->spe) {
  #ifdef WIZARD
  	    if(!wizard)
  #endif

--- 638,644 -----
  #endif
  		))		otmp->quan = cnt;
  
! 	if(spe > rnd(5) && spe > otmp->spe) {
  #ifdef WIZARD
  	    if(!wizard)
  #endif
***************
*** 631,637
  		else otmp->dknown=1;
  	}
  #endif
! 	if(spe == 3 && u.uluck < 0)
  		spesgn = -1;
  	if(let != WAND_SYM && spesgn == -1)
  		spe = -spe;

--- 651,657 -----
  		else otmp->dknown=1;
  	}
  #endif
! 	if(spe > 2 && u.uluck < 0)
  		spesgn = -1;
  	if(let != WAND_SYM && spesgn == -1)
  		spe = -spe;
***************
*** 645,650
  	else if(typ == MAGIC_MARKER)
  		spe = rn1(50,50);
  #endif
  	otmp->spe = spe;
  
  	if(spesgn == -1)

--- 665,674 -----
  	else if(typ == MAGIC_MARKER)
  		spe = rn1(50,50);
  #endif
+ 	else if(typ == LAMP)
+ 		spe = rnd(10);
+ 	else if(typ == MAGIC_LAMP)
+ 		spe = 1;
  	otmp->spe = spe;
  
  	if(spesgn == -1)
*** ./options.c.orig	Mon Feb 22 08:40:11 1988
--- ./options.c	Thu Mar 31 09:08:51 1988
***************
*** 1,4
! /*	SCCS Id: @(#)options.c	2.0	87/09/14
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "config.h"

--- 1,4 -----
! /*	SCCS Id: @(#)options.c	2.3	87/12/12
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include "config.h"
***************
*** 149,155
  				goto bad;		/* bad char in order */
  			else if (index(sp + 1, *sp))
  				goto bad;		/* dup char in order */
! 		tmp = (char *) alloc(strlen(inv_order) + 1);
  		(void) strcpy(tmp, op);
  		for (sp = inv_order, tmpend = strlen(tmp); *sp; sp++)
  			if (!index(tmp, *sp)) {

--- 149,155 -----
  				goto bad;		/* bad char in order */
  			else if (index(sp + 1, *sp))
  				goto bad;		/* dup char in order */
! 		tmp = (char *) alloc((unsigned)(strlen(inv_order)+1));
  		(void) strcpy(tmp, op);
  		for (sp = inv_order, tmpend = strlen(tmp); *sp; sp++)
  			if (!index(tmp, *sp)) {
***************
*** 233,240
  		else
  		    opts = op + 1;
  /*
!  * You could have problems here if you configure FOUNTAINS, SPIDERS or NEWCLASS
!  * in or out and forget to change the tail entries in your graphics string.
   */
  #define SETPCHAR(f, n)	showsyms.f = (strlen(opts) > n) ? opts[n] : defsyms.f
  		SETPCHAR(stone, 0);

--- 233,241 -----
  		else
  		    opts = op + 1;
  /*
!  * You could have problems here if you configure FOUNTAINS, SPIDERS, NEWCLASS
!  * or SINKS in or out and forget to change the tail entries in your graphics
!  * string.
   */
  #define SETPCHAR(f, n)	showsyms.f = (strlen(opts) > n) ? opts[n] : defsyms.f
  		SETPCHAR(stone, 0);
***************
*** 260,265
  #ifdef SPIDERS
  		SETPCHAR(web, 16);
  #endif
  #undef SETPCHAR
  		return;
  	}

--- 261,269 -----
  #ifdef SPIDERS
  		SETPCHAR(web, 16);
  #endif
+ #ifdef SINKS
+ 		SETPCHAR(sink, 17);
+ #endif
  #undef SETPCHAR
  		return;
  	}
***************
*** 427,433
  #ifndef QUEST
  			"Hack");
  #else
! 			"Quest);
  #endif
  	if(page_line("") || page_line(buf) || page_line(""))	 goto quit;
  

--- 431,437 -----
  #ifndef QUEST
  			"Hack");
  #else
! 			"Quest");
  #endif
  	if(page_line("") || page_line(buf) || page_line(""))	 goto quit;
  
***************
*** 443,449
  	Page_line("");
  
  #ifdef DGK
! 	Page_line("Boolean options are confirm, pickup, rawio, silent, sortpack, time, IBMBIOS,")
  	Page_line("and DECRainbow.  These can be negated by prefixing them with '!' or \"no\".");
  #else
  	Page_line("Boolean options are rest_on_space, news, time, null tombstone, and (fe)male,");

--- 447,453 -----
  	Page_line("");
  
  #ifdef DGK
! 	Page_line("Boolean options are confirm, pickup, rawio, silent, sortpack, time, IBMBIOS,");
  	Page_line("and DECRainbow.  These can be negated by prefixing them with '!' or \"no\".");
  #else
  	Page_line("Boolean options are rest_on_space, news, time, null tombstone, and (fe)male,");
*** ./pager.c.orig	Mon Feb 22 08:40:11 1988
--- ./pager.c	Tue Mar 29 08:43:08 1988
***************
*** 1,4
! /*	SCCS Id: @(#)pager.c	2.1	87/11/09
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* This file contains the command routine dowhatis() and a pager. */

--- 1,4 -----
! /*	SCCS Id: @(#)pager.c	2.3	87/12/12
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* This file contains the command routine dowhatis() and a pager. */
***************
*** 12,17
  extern char *CD;
  extern char quitchars[];
  extern char *getenv(), *getlogin();
  int done1();
  
  dowhatis()

--- 12,18 -----
  extern char *CD;
  extern char quitchars[];
  extern char *getenv(), *getlogin();
+ extern xchar curx;
  int done1();
  
  dowhatis()
***************
*** 69,74
  #endif
  #ifdef SPIDERS
  		else if (r == showsyms.web) q = defsyms.web;
  		else
  		    q = r;
  #endif

--- 70,79 -----
  #endif
  #ifdef SPIDERS
  		else if (r == showsyms.web) q = defsyms.web;
+ #endif
+ #ifdef SINKS
+ 		else if (r == showsyms.sink) q = defsyms.sink;
+ #endif
  		else
  		    q = r;
  #endif /* GRAPHICS */
***************
*** 71,77
  		else if (r == showsyms.web) q = defsyms.web;
  		else
  		    q = r;
- #endif
  #endif /* GRAPHICS */
  #ifdef DGKMOD
  		if (index(quitchars, q)) {

--- 76,81 -----
  #endif
  		else
  		    q = r;
  #endif /* GRAPHICS */
  #ifdef DGKMOD
  		if (index(quitchars, q)) {
***************
*** 251,256
  			cl_eos();
  		}
  	}
  	xputs(s); xputc('\n');
  	cury++;
  	return(0);

--- 255,261 -----
  			cl_eos();
  		}
  	}
+ #ifdef TERMINFO
  	xputs(s); xputc('\n');
  #else
  	puts(s);
***************
*** 252,257
  		}
  	}
  	xputs(s); xputc('\n');
  	cury++;
  	return(0);
  }

--- 257,265 -----
  	}
  #ifdef TERMINFO
  	xputs(s); xputc('\n');
+ #else
+ 	puts(s);
+ #endif
  	cury++;
  	return(0);
  }
***************
*** 295,301
  
  	    if(!text) return;	/* superfluous, just to be sure */
  	    linect++;
! 	    len = strlen(text);
  	    if(len > maxlen)
  		maxlen = len;
  	    tl = (struct line *)

--- 303,309 -----
  
  	    if(!text) return;	/* superfluous, just to be sure */
  	    linect++;
! 	    len = strlen(text) + 1; /* allow for an extra leading space */
  	    if(len > maxlen)
  		maxlen = len;
  	    tl = (struct line *)
***************
*** 302,308
  		alloc((unsigned)(len + sizeof(struct line) + 1));
  	    tl->next_line = 0;
  	    tl->line_text = (char *)(tl + 1);
! 	    (void) strcpy(tl->line_text, text);
  	    if(!texthead)
  		texthead = tl;
  	    else

--- 310,318 -----
  		alloc((unsigned)(len + sizeof(struct line) + 1));
  	    tl->next_line = 0;
  	    tl->line_text = (char *)(tl + 1);
! 	    tl->line_text[0] = ' ';
! 	    tl->line_text[1] = '\0';
! 	    (void) strcat(tl->line_text, text);
  	    if(!texthead)
  		texthead = tl;
  	    else
***************
*** 328,333
  		flags.toplin = 0;
  		curline = 1;
  		for (tl = texthead; tl; tl = tl->next_line) {
  		    curs (lth, curline);
  		    if(curline > 1)
  			cl_end ();

--- 338,346 -----
  		flags.toplin = 0;
  		curline = 1;
  		for (tl = texthead; tl; tl = tl->next_line) {
+ #ifdef MSDOS
+ 		    cmov (lth, curline);
+ #else
  		    curs (lth, curline);
  #endif
  		    if(curline > 1)
***************
*** 329,334
  		curline = 1;
  		for (tl = texthead; tl; tl = tl->next_line) {
  		    curs (lth, curline);
  		    if(curline > 1)
  			cl_end ();
  		    putsym(' ');

--- 342,348 -----
  		    cmov (lth, curline);
  #else
  		    curs (lth, curline);
+ #endif
  		    if(curline > 1)
  			cl_end ();
  		    xputs(tl->line_text);
***************
*** 331,337
  		    curs (lth, curline);
  		    if(curline > 1)
  			cl_end ();
- 		    putsym(' ');
  		    xputs(tl->line_text);
  		    curline++;
  		}

--- 345,350 -----
  #endif
  		    if(curline > 1)
  			cl_end ();
  		    xputs(tl->line_text);
  		    curx = curx + strlen(tl->line_text);
  		    curline++;
***************
*** 333,338
  			cl_end ();
  		    putsym(' ');
  		    xputs(tl->line_text);
  		    curline++;
  		}
  		curs (lth, curline);

--- 346,352 -----
  		    if(curline > 1)
  			cl_end ();
  		    xputs(tl->line_text);
+ 		    curx = curx + strlen(tl->line_text);
  		    curline++;
  		}
  #ifdef MSDOS
***************
*** 335,340
  		    xputs(tl->line_text);
  		    curline++;
  		}
  		curs (lth, curline);
  		cl_end ();
  		cmore (text);

--- 349,357 -----
  		    curx = curx + strlen(tl->line_text);
  		    curline++;
  		}
+ #ifdef MSDOS
+ 		cmov (lth, curline);
+ #else
  		curs (lth, curline);
  #endif
  		cl_end ();
***************
*** 336,341
  		    curline++;
  		}
  		curs (lth, curline);
  		cl_end ();
  		cmore (text);
  		home ();

--- 353,359 -----
  		cmov (lth, curline);
  #else
  		curs (lth, curline);
+ #endif
  		cl_end ();
  		cmore (text);
  		home ();
SHAR_EOF
if test 38790 -ne "`wc -c < 'Update.2.3.d'`"
then
	echo shar: error transmitting "'Update.2.3.d'" '(should have been 38790 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
-- 
						Mike Stephenson

Mail:	Genamation Inc.		Phone:	(416) 475-9434
	351 Steelcase Rd. W
	Markham, Ontario.	UUCP:	uunet!{mnetor,utzoo}!genat!genpyr!mike
	Canada   L3R 3W1		uunet!{mnetor,utzoo}!genat!mike