billr@saab.CNA.TEK.COM (Bill Randle) (05/15/91)
Submitted-by: routley@tle.ENET.DEC.COM (Kevin Routley)
Posting-number: Volume 12, Issue 67
Archive-name: larn2/Patch1
Patch-To: larn2: Volume 12, Issue 54-65
Environment: Unix, VMS, MS-DOS, OS/2, termcap
#! /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: patches01
# Wrapped by billr@saab on Tue May 14 15:50:41 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches01' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'patches01'\"
else
echo shar: Extracting \"'patches01'\" \(11173 characters\)
sed "s/^X//" >'patches01' <<'END_OF_FILE'
X
X*** patchlog.org Mon May 13 21:26:38 1991
X--- patchlog Mon May 13 21:24:36 1991
X***************
X*** 0 ****
X--- 1,16 ----
X+ Patch 1
X+ =======
X+
X+ Prompted by Pat Ryan, fix a bug in the dropobj() code in main.c that
X+ allowed the player to drop a negative amount of gold. In the process, fix
X+ the backwards carriage return logic when printing the error response.
X+
X+ Document the new SIG_RETURNS_INT #define introduced by Bill Randle when the
X+ software was posted.
X+
X+ Prompted by Lasse Oestergaard, guard against out-of-bound array references
X+ in movem.c when on the Home level. Also fixed a bug where a 'smart' monster
X+ would fail to move towards the player when the player was on the boundary.
X+
X+ Prompted by Mitch Gorman, make the EXTRA #define compile and work under
X+ MS-DOS.
X*** patchlev.org Sat Mar 23 14:08:52 1991
X--- patchlev.h Mon May 13 21:17:10 1991
X***************
X*** 1,3 ****
X /* indicate which patches have been applied to Larn.
X */
X! #define PATCHLEVEL 0
X--- 1,3 ----
X /* indicate which patches have been applied to Larn.
X */
X! #define PATCHLEVEL 1
X*** config.org Sat Jul 07 13:58:52 1990
X--- config.c Mon May 13 20:32:26 1991
X***************
X*** 73,78 ****
X--- 73,81 ----
X char ckpfile[PATHLEN];
X char swapfile[PATHLEN];
X char larndir[DIRLEN] = LARNHOME;
X+ # ifdef EXTRA
X+ char diagfile[PATHLEN]; /* the diagnostic filename */
X+ # endif
X # else
X char savefilename[PATHLEN] = LARNHOME;
X char scorefile[PATHLEN] = LARNHOME;
X*** diag.org Sat Jul 07 13:47:32 1990
X--- diag.c Mon May 13 20:32:16 1991
X***************
X*** 24,29 ****
X--- 24,31 ----
X extern int rmst,maxitm,lasttime;
X extern char nosignal;
X
X+ #define max( _a, _b ) (( _a > _b ) ? _a : _b )
X+
X /*
X ***************************
X DIAG -- dungeon diagnostics
X***************
X*** 124,129 ****
X--- 126,133 ----
X lcreat((char*)0); lprcat("Done Diagnosing . . .");
X return(0);
X }
X+
X+ #ifndef MSDOS
X /*
X subroutine to count the number of occurrences of an object
X */
X***************
X*** 139,144 ****
X--- 143,149 ----
X if (cell[(long) p*MAXX*MAXY+i*MAXY+j].item == l) k++;
X return(k);
X }
X+ #endif
X
X /*
X subroutine to draw the whole screen as the player knows it
X*** header.org Mon Dec 24 14:10:10 1990
X--- header.h Mon May 13 20:31:28 1991
X***************
X*** 22,27 ****
X--- 22,28 ----
X #define FORTSNAME "larn.ftn"
X #define PLAYERIDS "larn.pid"
X #define HOLIFILE "holidays"
X+ #define DIAGFILE "Diagfile"
X #ifdef MSDOS
X # define LARNOPTS "larn.opt"
X # define SAVEFILE "larn.sav"
X*** io.org Tue Mar 26 14:39:08 1991
X--- io.c Mon May 13 20:32:20 1991
X***************
X*** 57,62 ****
X--- 57,66 ----
X #include "larndefs.h"
X #include <ctype.h>
X
X+ #ifdef EXTRA
X+ # include "player.h"
X+ #endif
X+
X #ifdef SYSV /* system III or system V */
X # ifndef MSDOS
X # include <termio.h>
X*** main.org Tue Mar 26 15:00:36 1991
X--- main.c Mon May 13 20:32:22 1991
X***************
X*** 167,178 ****
X
X /* Savefile and swapfile can be given explicitly as options
X */
X! if (!savefilename[0])
X {
X strcpy(savefilename, larndir);
X strcat(savefilename, SAVEFILE);
X }
X! if (!swapfile[0])
X {
X strcpy(swapfile, larndir);
X strcat(swapfile, SWAPFILE);
X--- 167,178 ----
X
X /* Savefile and swapfile can be given explicitly as options
X */
X! if (!savefilename[0])
X {
X strcpy(savefilename, larndir);
X strcat(savefilename, SAVEFILE);
X }
X! if (!swapfile[0])
X {
X strcpy(swapfile, larndir);
X strcat(swapfile, SWAPFILE);
X***************
X*** 184,193 ****
X strcpy(fortfile, larndir);
X strcpy(playerids, larndir);
X strcpy(ckpfile, larndir);
X
X # else /* MSDOS */
X
X! if ((ptr = getenv("HOME")) == 0)
X ptr = ".";
X #ifdef SAVEINHOME
X /* save file name in home directory */
X--- 184,196 ----
X strcpy(fortfile, larndir);
X strcpy(playerids, larndir);
X strcpy(ckpfile, larndir);
X+ # ifdef EXTRA
X+ strcpy(diagfile,larndir);
X+ # endif
X
X # else /* MSDOS */
X
X! if ((ptr = getenv("HOME")) == 0)
X ptr = ".";
X #ifdef SAVEINHOME
X /* save file name in home directory */
X***************
X*** 220,225 ****
X--- 223,232 ----
X strcat(holifile, HOLIFILE); /* the holiday data file name */
X # endif
X
X+ # ifdef EXTRA
X+ strcat(diagfile, DIAGFILE);
X+ # endif
X+
X #ifdef VT100
X /*
X * check terminal type to avoid users who have not vt100 type terminals
X***************
X*** 1036,1049 ****
X {
X register int i;
X register char *p;
X! long amt;
X
X p = &item[playerx][playery];
X while (1)
X {
X! if ((i = whatitem("drop"))=='\33')
X return;
X! if (i=='*')
X {
X i = showstr(TRUE);
X cursors();
X--- 1043,1056 ----
X {
X register int i;
X register char *p;
X! unsigned long amt;
X
X p = &item[playerx][playery];
X while (1)
X {
X! if ((i = whatitem("drop"))=='\33')
X return;
X! if (i=='*')
X {
X i = showstr(TRUE);
X cursors();
X***************
X*** 1059,1065 ****
X if ((amt=readnum((long)c[GOLD])) == 0) return;
X if (amt>c[GOLD])
X {
X! #ifndef MSDOS
X lprcat("\n");
X #endif MSDOS
X lprcat("You don't have that much!");
X--- 1066,1072 ----
X if ((amt=readnum((long)c[GOLD])) == 0) return;
X if (amt>c[GOLD])
X {
X! #ifdef MSDOS
X lprcat("\n");
X #endif MSDOS
X lprcat("You don't have that much!");
X*** makefile.org Sat Mar 23 19:09:40 1991
X--- makefile.pc Mon May 13 21:15:22 1991
X***************
X*** 31,36 ****
X--- 31,38 ----
X # RFCMAIL - mail messages are RFC822 conformant. Must be used with
X # MAIL above.
X # SAVEINHOME - put save files in users HOME instead of LARNHOME (default)
X+ # SIG_RETURNS_INT - define if signal() returns (int *)() instead of
X+ # (void *)()
X # SYSV - use system III/V (instead of V7) type ioctl calls
X # TIMECHECK - incorporates code to disable play during working hours (8-5)
X # UIDSCORE - Define to use user id's to manage scoreboard. Leaving this
X*** movem.org Sat Mar 23 16:14:34 1991
X--- movem.c Mon May 13 18:03:26 1991
X***************
X*** 311,323 ****
X
X /* test all spots around the current one being looked at.
X */
X! if ( ( curx >= xl && curx < xh ) &&
X! ( cury >= yl && cury < yh ) )
X {
X for (z=1; z<9; z++)
X {
X tmpx = curx + diroffx[z] ;
X tmpy = cury + diroffy[z] ;
X if (screen[tmpx][tmpy] == 0 )
X {
X screen[tmpx][tmpy] = curdist + 1;
X--- 311,324 ----
X
X /* test all spots around the current one being looked at.
X */
X! if ( ( curx >= xl && curx <= xh ) &&
X! ( cury >= yl && cury <= yh ) )
X {
X for (z=1; z<9; z++)
X {
X tmpx = curx + diroffx[z] ;
X tmpy = cury + diroffy[z] ;
X+ vxy( &tmpx, &tmpy );
X if (screen[tmpx][tmpy] == 0 )
X {
X screen[tmpx][tmpy] = curdist + 1;
X***************
X*** 448,453 ****
X--- 449,459 ----
X xl=i-1; yl=j-1; xh=i+2; yh=j+2;
X if (i<playerx) xl++; else if (i>playerx) --xh;
X if (j<playery) yl++; else if (j>playery) --yh;
X+
X+ if (xl < 0) xl = 0;
X+ if (yl < 0) yl = 0;
X+ if (xh > MAXX) xh = MAXX; /* MAXX OK; loop check below is <, not <= */
X+ if (yh > MAXY) yh = MAXY; /* MAXY OK; loop check below is <, not <= */
X
X /* check all spots in the range. find the one that is closest to
X the player. if the monster is already next to the player, exit
X*** scores.org Sun Mar 03 23:59:52 1991
X--- scores.c Mon May 13 20:32:30 1991
X***************
X*** 72,78 ****
X--- 72,80 ----
X long moves; /* number of moves made by player */
X short ac; /* armor class of player */
X short hp,hpmax; /* players hitpoints */
X+ # ifndef MSDOS
X short cputime; /* cpu time needed in seconds */
X+ # endif
X short killed,spused;/* monsters killed and spells cast */
X short usage; /* usage of the cpu in % */
X short lev; /* player level */
X***************
X*** 511,519 ****
X--- 513,523 ----
X register int f,win;
X char ch,*mod;
X long zzz,i;
X+ #ifndef MSDOS
X # ifdef EXTRA
X struct tms cputime;
X # endif
X+ #endif
X if (c[LIFEPROT]>0) /* if life protection */
X {
X switch((x>0) ? x : -x)
X***************
X*** 572,579 ****
X--- 576,585 ----
X time(&zzz); /* get cpu time -- write out score info */
X logg.diedtime=zzz;
X #ifdef EXTRA
X+ # ifndef MSDOS
X times(&cputime); /* get cpu time -- write out score info */
X logg.cputime = i = (cputime.tms_utime + cputime.tms_stime)/60 + c[CPUTIME];
X+ # endif
X logg.lev=c[LEVEL]; logg.ac=c[AC];
X logg.hpmax=c[HPMAX]; logg.hp=c[HP];
X logg.elapsedtime=(zzz-initialtime+59)/60;
X***************
X*** 645,653 ****
X #ifdef EXTRA
X if (logg.moves<=0) logg.moves=1;
X lprintf(" Experience Level: %d, AC: %d, HP: %d/%d, Elapsed Time: %d minutes\n",(long)(logg.lev),(long)(logg.ac),(long)(logg.hp),(long)(logg.hpmax),(long)(logg.elapsedtime));
X lprintf(" CPU time used: %d seconds, Machine usage: %d.%02d%%\n",(long)(logg.cputime),(long)(logg.usage/100),(long)(logg.usage%100));
X lprintf(" BYTES in: %d, out: %d, moves: %d, deaths: %d, spells cast: %d\n",(long)(logg.bytin),(long)(logg.bytout),(long)(logg.moves),(long)(logg.killed),(long)(logg.spused));
X! lprintf(" out bytes per move: %d, time per move: %d ms\n",(long)(logg.bytout/logg.moves),(long)((logg.cputime*1000)/logg.moves));
X #endif
X }
X lflush(); lrclose(); return;
X--- 651,665 ----
X #ifdef EXTRA
X if (logg.moves<=0) logg.moves=1;
X lprintf(" Experience Level: %d, AC: %d, HP: %d/%d, Elapsed Time: %d minutes\n",(long)(logg.lev),(long)(logg.ac),(long)(logg.hp),(long)(logg.hpmax),(long)(logg.elapsedtime));
X+ # ifndef MSDOS
X lprintf(" CPU time used: %d seconds, Machine usage: %d.%02d%%\n",(long)(logg.cputime),(long)(logg.usage/100),(long)(logg.usage%100));
X+ # endif
X lprintf(" BYTES in: %d, out: %d, moves: %d, deaths: %d, spells cast: %d\n",(long)(logg.bytin),(long)(logg.bytout),(long)(logg.moves),(long)(logg.killed),(long)(logg.spused));
X! lprintf(" out bytes per move: %d",(long)(logg.bytout/logg.moves));
X! # ifndef MSDOS
X! lprintf(", time per move: %d ms",(long)((logg.cputime*1000)/logg.moves));
X! # endif
X! lprintf("\n");
X #endif
X }
X lflush(); lrclose(); return;
X
END_OF_FILE
if test 11173 -ne `wc -c <'patches01'`; then
echo shar: \"'patches01'\" unpacked with wrong size!
fi
# end of 'patches01'
fi
echo shar: End of shell archive.
exit 0