[comp.sources.games] v06i018: ega-wanderer - wanderer 2.2 for EGA or curses, Patch2

games@tekred.CNA.TEK.COM (03/14/89)

Submitted-by: "Tony L. Hansen" <hansen@pegasus.att.com>
Posting-number: Volume 6, Issue 18
Archive-name: ega-wanderer/Patch2

	[This patch adds additional functionality and cleans up the code
	 in places.  I cleaned it up further so that it would still
	 compile on a standard Unix/curses machine.  This is not an
	 "official" patch from the original author.  Make a backup of
	 the source before you apply this patch just in case the original
	 author posts a future patch.  I tried this on my Sun 3/60 and it
	 works OK there.  -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.pch2 Patches02
# Wrapped by billr@saab on Mon Mar 13 11:31:23 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'README.pch2' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README.pch2'\"
else
echo shar: Extracting \"'README.pch2'\" \(1992 characters\)
sed "s/^X//" >'README.pch2' <<'END_OF_FILE'
XThe following changes have been made to wanderer:
X
XI cleaned up the option processing considerably. It now uses the standard
Xgetopt() function, which makes it much easier to do option processing.
X
XI added the capability of running. When you run, the spider continues going
Xin the same direction until it runs out of spaces. The default keys to use
Xfor running are HJKL, which can also be changed with the $NEWKEYS variable.
XThe first four characters of $NEWKEYS are the up-down-left-right keys as
Xbefore, the following four characters are the running keys in the same order
Xas the lowercase keys.
X
XI added a check to make certain that the length of $NEWKEYS is >= 4.
X
XI encoded the master password so that it doesn't show up if someone runs
X"strings" on the binary, giving away the secret. ckpasswd() was added to
Xundo the encoding.
X
XSystem V release 3.1 curses defines a macro named border() which conflicts
Xwith a variable in edit.c.
X
XThe -r option was added which automatically does a "restore game". If a file
Xname is provided on the command line, then it will be used for the file
Xname, otherwise $SAVENAME is used or it is prompted for. Specifying a
Xfilename requires the putenv() function and the code is #ifdef'ed so that if
Xyou don't have putenv(), you can get by without it.
X
XBoth running and the -r option were implemented using the function
Xungetch(), which doesn't exist in earlier versions of curses. Code is
Xprovided for those versions which don't have it. The Getch() function was
Xgeneralized for this purpose and moved out of ega.c. Just #define NOUNGETCH
Xin wand_head.h if you don't have it.
X
X
X					Tony Hansen
X				att!pegasus!hansen, attmail!tony
X				    hansen@pegasus.att.com
X==================
XI cleaned up the Makefile and wand_header.h files so that this version
Xwould compile on my Sun 3/60.  It should now work OK on any BSD derived
Xsystem, as well as System V.  To support this, the NOBEEP and NOKEYPAD
X#defines were added.
X
X		-Bill Randle
X		billr@saab.CNA.TEK.COM
END_OF_FILE
if test 1992 -ne `wc -c <'README.pch2'`; then
    echo shar: \"'README.pch2'\" unpacked with wrong size!
fi
# end of 'README.pch2'
fi
if test -f 'Patches02' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Patches02'\"
else
echo shar: Extracting \"'Patches02'\" \(18471 characters\)
sed "s/^X//" >'Patches02' <<'END_OF_FILE'
X*** Makefile.orig	Mon Mar 13 09:03:00 1989
X--- Makefile	Mon Mar 13 09:35:34 1989
X***************
X*** 26,31 ****
X--- 26,33 ----
X  CFLAGS = $(MODEL) $G $O $(EGA)
X  LDFLAGS = $(MODEL) $G $S $(STACK)
X  LIBS = -lcurses
X+ # BSD needs termcap lib too
X+ #LIBS = -lcurses -ltermcap
X  
X  DEST = /usr/games
X  DESTLIB=/usr/games/lib
X*** edit.c.orig	Mon Feb 13 11:54:40 1989
X--- edit.c	Mon Mar 13 09:18:55 1989
X***************
X*** 230,236 ****
X  invert( d, s )
X  bitmap *d, *s;
X  {
X!     int i, x, y, border, w = (s->width + 7) / 8;
X  
X      *d = *s;
X      memcpy( d->bits, s->bits, s->height * w );
X--- 230,237 ----
X  invert( d, s )
X  bitmap *d, *s;
X  {
X!     int i, x, y, j_border, w;
X!     w = (s->width + 7) / 8;
X  
X      *d = *s;
X      memcpy( d->bits, s->bits, s->height * w );
X***************
X*** 238,244 ****
X      for( i = 0; i < d->height * w; ++i )
X  	d->bits[i] ^= 0xff;
X  
X!     border = 0x0101 >> (d->width & 07);
X  
X      for( y = 0; y < d->height; ++y ) {
X  	if ( y == 0 )
X--- 239,245 ----
X      for( i = 0; i < d->height * w; ++i )
X  	d->bits[i] ^= 0xff;
X  
X!     j_border = 0x0101 >> (d->width & 07);
X  
X      for( y = 0; y < d->height; ++y ) {
X  	if ( y == 0 )
X***************
X*** 245,251 ****
X  	    for( x = 0; x < w; ++x )
X  		d->bits[y * w + x] = 0xff;
X  	d->bits[y * w] |= 0x80;
X! 	d->bits[y * w + w - 1] |= border;
X  	if ( y == d->height - 1 )
X  	    for( x = 0; x < w; ++x )
X  		d->bits[y * w + x] = 0xff;
X--- 246,252 ----
X  	    for( x = 0; x < w; ++x )
X  		d->bits[y * w + x] = 0xff;
X  	d->bits[y * w] |= 0x80;
X! 	d->bits[y * w + w - 1] |= j_border;
X  	if ( y == d->height - 1 )
X  	    for( x = 0; x < w; ++x )
X  		d->bits[y * w + x] = 0xff;
X*** ega.c.orig	Mon Mar 13 09:02:00 1989
X--- ega.c	Mon Mar 13 09:18:56 1989
X***************
X*** 538,564 ****
X  			}
X  }
X  
X- 
X- /*
X-  * Getch()
X-  */
X- Getch()
X- {
X- char	c = 0;
X- 
X- if(EGAaddr) {
X-     while( c == 0 )
X- 	    read(EGAifd, &c, 1);
X- 
X-     if(c == '\r')
X- 	c = '\n';
X- 
X-     return( c );
X-     }
X- else
X-     return( wgetch(stdscr) );
X- }
X- 
X  /*
X   * Clear()
X   */
X--- 538,543 ----
X*** game.c.orig	Mon Feb 13 11:54:33 1989
X--- game.c	Mon Mar 13 09:25:29 1989
X***************
X*** 156,171 ****
X  long *score;
X  char keys[10];
X  {
X! int  x,y,nx,ny,deadyet =0,
X       sx = -1,sy = -1,tx = -1,ty = -1,lx,ly,mx = -1,my = -1,
X       tmpx,tmpy, ch, newnum,
X       max_score = 250,
X       diamonds = 0, nf = 0,hd ,vd ,xdirection,ydirection;
X  static char     howdead[25];	/* M001 can't use auto var for return value */
X  direction new_disp;
X  struct mon_rec *monster,*current,*mp;
X  struct { int x,y,c; } redraw;
X  
X  tail_of_list = &start_of_list;
X  
X  for(x=0;x<=ROWLEN;x++)
X--- 156,176 ----
X  long *score;
X  char keys[10];
X  {
X! int  x,y,nx,ny,deadyet =0,running,
X       sx = -1,sy = -1,tx = -1,ty = -1,lx,ly,mx = -1,my = -1,
X       tmpx,tmpy, ch, newnum,
X       max_score = 250,
X       diamonds = 0, nf = 0,hd ,vd ,xdirection,ydirection;
X  static char     howdead[25];	/* M001 can't use auto var for return value */
X+ char *runkeys;
X  direction new_disp;
X  struct mon_rec *monster,*current,*mp;
X  struct { int x,y,c; } redraw;
X  
X+ if (strlen(keys) < 8)
X+     runkeys = "KJHL";
X+ else
X+     runkeys = keys+4;
X  tail_of_list = &start_of_list;
X  
X  for(x=0;x<=ROWLEN;x++)
X***************
X*** 240,255 ****
X  
X  nx=x;
X  ny=y;
X  
X! if((ch == keys[3] || ch == KEY_RIGHT) && (x <(ROWLEN-1)))  /* move about - but thats obvious */
X      nx++;
X! if((ch == keys[2] || ch == KEY_LEFT || ch == KEY_BACKSPACE || ch == '\b') && (x > 0))
X      nx--;
X! if((ch == keys[1] || ch == KEY_DOWN) && (y <(NOOFROWS-1)))
X      ny++;
X! if((ch == keys[0] || ch == KEY_UP) && (y > 0))
X      ny--;
X! if(ch == '1')                  /* Add or get rid of that awful sound */
X      {
X      *bell = 1;
X      beep();
X--- 245,286 ----
X  
X  nx=x;
X  ny=y;
X+ running=0;
X  
X!   /* move about - but that's obvious */
X! if(ch == keys[3] || ch == KEY_RIGHT) {
X!     if (x <(ROWLEN-1))
X      nx++;
X!     }
X! else if(ch == keys[2] || ch == KEY_LEFT || ch == KEY_BACKSPACE || ch == '\b') {
X!     if (x > 0)
X      nx--;
X!     }
X! else if(ch == keys[1] || ch == KEY_DOWN) {
X!     if(y <(NOOFROWS-1))
X      ny++;
X!     }
X! else if(ch == keys[0] || ch == KEY_UP) {
X!     if(y > 0)
X      ny--;
X!     }
X! else if(ch == runkeys[3]) {
X!     if(x <(ROWLEN-1))
X! 	nx++, running++;
X!     }
X! else if(ch == runkeys[2]) {
X!     if(x > 0)
X! 	nx--, running++;
X!     }
X! else if(ch == runkeys[1]) {
X!     if(y <(NOOFROWS-1))
X! 	ny++, running++;
X!     }
X! else if(ch == runkeys[0]) {
X!     if(y > 0)
X! 	ny--, running++;
X!     }
X! else if(ch == '1')                  /* Add or get rid of that awful sound */
X      {
X      *bell = 1;
X      beep();
X***************
X*** 270,276 ****
X  	}
X      continue;
X      }
X! if(ch == '0')
X      {
X      *bell = 0;
X  #ifdef	EGA
X--- 301,307 ----
X  	}
X      continue;
X      }
X! else if(ch == '0')
X      {
X      *bell = 0;
X  #ifdef	EGA
X***************
X*** 290,296 ****
X  	}
X      continue;
X      }
X! if(ch == '~' && !edit_mode)        /* level jump */
X      {
X      if((newnum = jumpscreen(*num)) == 0)
X  	return "a jump error";
X--- 321,327 ----
X  	}
X      continue;
X      }
X! else if(ch == '~' && !edit_mode)        /* level jump */
X      {
X      if((newnum = jumpscreen(*num)) == 0)
X  	return "a jump error";
X***************
X*** 302,308 ****
X      beep();
X      continue;
X      }
X! if(ch == '!' || ch == 'v')         /* look at the map */
X      {
X      if(debug_disp)
X  	continue;
X--- 333,339 ----
X      beep();
X      continue;
X      }
X! else if(ch == '!' || ch == 'v')         /* look at the map */
X      {
X      if(debug_disp)
X  	continue;
X***************
X*** 319,327 ****
X  	}
X      continue;
X      }
X! if(ch == 'q')
X      return "quitting the game";
X! if(ch == '?')
X      {
X      helpme(keys);
X  #ifdef	EGA
X--- 350,358 ----
X  	}
X      continue;
X      }
X! else if(ch == 'q')
X      return "quitting the game";
X! else if(ch == '?')
X      {
X      helpme(keys);
X  #ifdef	EGA
X***************
X*** 335,341 ****
X  	    display(sx,sy);
X      continue;
X      }
X! if((ch == '@')&&(!debug_disp))
X      {
X      sx = x;
X      sy = y;
X--- 366,372 ----
X  	    display(sx,sy);
X      continue;
X      }
X! else if((ch == '@')&&(!debug_disp))
X      {
X      sx = x;
X      sy = y;
X***************
X*** 342,348 ****
X      display(sx,sy);
X      continue;
X      }
X! if(ch == '#')
X      {
X      debug_disp = 1 - debug_disp;
X      sx = x; sy = y;
X--- 373,379 ----
X      display(sx,sy);
X      continue;
X      }
X! else if(ch == '#')
X      {
X      debug_disp = 1 - debug_disp;
X      sx = x; sy = y;
X***************
X*** 365,371 ****
X  	    }
X      continue;
X      }
X! if(ch == 'W' || ch == '\f')                     /* redraw screen */
X      {
X      redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X      continue;
X--- 396,402 ----
X  	    }
X      continue;
X      }
X! else if(ch == 'W' || ch == '\f')                     /* redraw screen */
X      {
X      redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X      continue;
X***************
X*** 372,378 ****
X      }
X  
X  /* M002  Added save/restore game feature.  Gregory H. Margo	*/
X! if(ch == 'S')           /* save game */
X      {
X      extern	struct	save_vars	zz;
X  
X--- 403,409 ----
X      }
X  
X  /* M002  Added save/restore game feature.  Gregory H. Margo	*/
X! else if(ch == 'S')           /* save game */
X      {
X      extern	struct	save_vars	zz;
X  
X***************
X*** 410,416 ****
X  	}
X      continue;
X      }
X! if(ch == 'R')    	/* restore game */
X      {
X      extern	struct	save_vars	zz;
X  
X--- 441,447 ----
X  	}
X      continue;
X      }
X! else if(ch == 'R')    	/* restore game */
X      {
X      extern	struct	save_vars	zz;
X  
X***************
X*** 457,463 ****
X      goto update_game;	/* the dreaded goto	*/
X      }
X  
X! if(screen[ny][nx] == 'C')
X      {
X      screen[ny][nx] = ':';
X      *score+=4;
X--- 488,494 ----
X      goto update_game;	/* the dreaded goto	*/
X      }
X  
X! else if(screen[ny][nx] == 'C')
X      {
X      screen[ny][nx] = ':';
X      *score+=4;
X***************
X*** 939,944 ****
X--- 970,982 ----
X  	}
X      }
X  
X+     /* see if we can continue running */
X+     if (running &&
X+ 	(((ch == runkeys[3]) && (screen[y][x+1] == ' ')) ||
X+ 	 ((ch == runkeys[2]) && (screen[y][x-1] == ' ')) ||
X+ 	 ((ch == runkeys[1]) && (screen[y+1][x] == ' ')) ||
X+ 	 ((ch == runkeys[0]) && (screen[y-1][x] == ' '))))
X+ 	ungetch(ch);
X  }
X  return(howdead);
X  }
X*** jump.c.orig	Mon Feb 13 11:55:37 1989
X--- jump.c	Mon Mar 13 09:25:30 1989
X***************
X*** 246,252 ****
X  /*
X   * Check for Wizard Mode
X   */
X! if(strcmp(word,MASTERPASSWORD) == 0)
X      {
X  #ifdef	EGA
X      if(EGAaddr) {
X--- 246,252 ----
X  /*
X   * Check for Wizard Mode
X   */
X! if(ckpasswd(word) == 0)
X      {
X  #ifdef	EGA
X      if(EGAaddr) {
X*** m.c.orig	Mon Mar 13 09:03:05 1989
X--- m.c	Mon Mar 13 09:32:15 1989
X***************
X*** 13,18 ****
X--- 13,19 ----
X  int maxscreens;
X  int edit_mode = 0;
X  int saved_game = 0;
X+ int restore_file = 0;
X  char *edit_screen;
X  char *screenpath;
X  /* Screen[NOOFROWS][ROWLEN] is centered inside area[NOOFROWS+2][ROWLEN+2].
X***************
X*** 20,31 ****
X   * screen[][] that happen to match a boulder, etc.
X   */
X  char area[1+NOOFROWS+1][1+ROWLEN+1];
X! char (*screen)[ROWLEN+1+1] = &area[1][1];
X  
X  main(argc,argv)
X  int  argc;
X  char *argv[];
X  {
X  struct stat statbuf;
X  int num,bell = 0,maxmoves = 0,x,y;
X  long score = 0;
X--- 21,35 ----
X   * screen[][] that happen to match a boulder, etc.
X   */
X  char area[1+NOOFROWS+1][1+ROWLEN+1];
X! char (*screen)[ROWLEN+1+1] = (char(*)[ROWLEN+2])&area[1][1];
X  
X  main(argc,argv)
X  int  argc;
X  char *argv[];
X  {
X+ int c;
X+ extern int optind;
X+ extern int getopt();
X  struct stat statbuf;
X  int num,bell = 0,maxmoves = 0,x,y;
X  long score = 0;
X***************
X*** 40,58 ****
X  if((screenpath = getenv("SCREENPATH")) == NULL)
X      screenpath = SCREENPATH;
X  
X! if(argc == 2)
X      {
X!     if(!strcmp(argv[1], "-e"))
X! 	{
X  	edit_mode = 1;
X! 	edit_screen = NULL;
X! 	}
X!     else if(!strcmp(argv[1], "-m"))
X! 	{
X  	erase_scores();
X  	return 0;
X! 	}
X!     else if(!strcmp(argv[1], "-c"))
X  	{
X  	char ch;
X  	int fp;
X--- 44,59 ----
X  if((screenpath = getenv("SCREENPATH")) == NULL)
X      screenpath = SCREENPATH;
X  
X! while ((c = getopt(argc, argv, "emcsfr")) != -1)
X!     switch (c)
X      {
X! 	case 'e':
X  	edit_mode = 1;
X! 	    break;
X! 	case 'm':
X  	erase_scores();
X  	return 0;
X! 	case 'c':
X  	{
X  	char ch;
X  	int fp;
X***************
X*** 65,100 ****
X  	while(read(fp,&ch,1) == 1)
X  	    putchar(ch);
X  	putchar('\n');
X! 	exit(0);
X          }
X!     else if(!strcmp(argv[1], "-s"))
X! 	{
X          savescore("",0L,0,NULL);
X          return 0;
X! 	}
X!     else if(!strcmp(argv[1], "-f"))
X!         {
X  	debug_disp = 1;
X! 	}
X!     else
X! 	{
X! 	fprintf(stderr,"Usage: %s [ -e [file] | -m | -c | -s | -f ]\n",argv[0]);
X  	exit(1);
X          }
X!     }
X! if(argc > 2)
X      {
X!     if(!strcmp(argv[1],"-e"))
X! 	{
X! 	edit_mode = 1;
X! 	edit_screen = argv[2];
X  	}
X-     else
X- 	{
X- 	fprintf(stderr,"Usage: %s [ -e [file] | -m | -c | -s | -f ]\n",argv[0]);
X-         exit(1);
X- 	}
X-     }
X  
X  /* use passwords?  if file "no_pws" exists and is readable, then no pws! */
X  sprintf(buffer,"%s/no_pws",screenpath);
X--- 66,103 ----
X  	while(read(fp,&ch,1) == 1)
X  	    putchar(ch);
X  	putchar('\n');
X! 	    return 0;
X          }
X! 	case 's':
X          savescore("",0L,0,NULL);
X          return 0;
X! 	case 'f':
X  	debug_disp = 1;
X! 	    break;
X! 	case 'r':
X! 	    restore_file = 1;
X! 	    break;
X! 	case '?':
X! 	    fprintf(stderr,"Usage: %s [ -e | -m | -c | -s | -f | -r] [file]\n",argv[0]);
X! 	    fprintf(stderr,"\t-s\tshow scores\n");
X! 	    fprintf(stderr,"\t-r\trestore from file\n");
X! 	    fprintf(stderr,"\t-f\tfull screen mode\n");
X! 	    fprintf(stderr,"\t-c\tshow credits\n");
X! 	    fprintf(stderr,"\t-e\tedit screen file\n");
X! 	    fprintf(stderr,"\t-m\tmanage score file\n");
X  	exit(1);
X          }
X! if (optind < argc)
X!     if (edit_mode)
X! 	edit_screen = argv[optind];
X!     else if (restore_file)
X      {
X! #ifndef NOPUTENV
X! 	static char savenamebuf[BUFSIZ];
X! 	sprintf(savenamebuf, "SAVENAME=%s", argv[2]);
X! 	putenv(savenamebuf);
X! #endif
X  	}
X  
X  /* use passwords?  if file "no_pws" exists and is readable, then no pws! */
X  sprintf(buffer,"%s/no_pws",screenpath);
X***************
X*** 130,136 ****
X  #endif
X  
X  if((keys = getenv("NEWKEYS")) == NULL)
X!     keys = "kjhl";
X  
X  #ifdef	EGA
X  if(egainit()) {
X--- 133,143 ----
X  #endif
X  
X  if((keys = getenv("NEWKEYS")) == NULL)
X!     keys = "kjhlKJHL";
X! if (strlen(keys) < 4) {
X!     fprintf(stderr, "%s: $NEWKEYS must define all keys or none\n", argv[0]);
X!     exit(1);
X!     }
X  
X  #ifdef	EGA
X  if(egainit()) {
X***************
X*** 156,161 ****
X--- 163,170 ----
X  	keypad(stdscr, TRUE);
X  	CBON;
X  	noecho();
X+ 	if (restore_file)
X+ 	    ungetch('R');
X  	}
X  
X  /* MAIN PROGRAM HERE */
X*** read.c.orig	Mon Mar 13 09:26:02 1989
X--- read.c	Mon Mar 13 09:32:15 1989
X***************
X*** 151,153 ****
X--- 151,189 ----
X      ungetch_ch = ch;
X  }
X  #endif
X+ #ifdef NOUNGETCH
X+ static int ungetch_ch = -1;
X+ #endif
X+ /*
X+  * Getch()
X+  */
X+ Getch()
X+ {
X+ #ifdef NOUNGETCH
X+     if (ungetch_ch != -1) {
X+ 	int sv = ungetch_ch;
X+ 	ungetch_ch = -1;
X+ 	return sv;
X+ 	}
X+ #endif
X+ #ifdef  EGA
X+ if(EGAaddr) {
X+     char c = 0;
X+     extern int EGAifd;
X+     while( c == 0 )
X+ 	    read(EGAifd, &c, 1);
X+     if(c == '\r')
X+ 	c = '\n';
X+     return( c );
X+     }
X+ else
X+ #endif
X+     return( wgetch(stdscr) );
X+ }
X+ #ifdef  NOUNGETCH
X+ ungetch(ch)
X+ int ch;
X+ {
X+     ungetch_ch = ch;
X+ }
X+ #endif
X*** scores.c.orig	Mon Mar 13 09:03:08 1989
X--- scores.c	Mon Mar 13 09:26:03 1989
X***************
X*** 312,318 ****
X      correct[index++] = c;
X      }
X  correct[index] = 0;
X! if(strcmp(correct,MASTERPASSWORD)) {
X      printf("\nFoo, charlatan!\n");
X      return;
X      }
X--- 312,318 ----
X      correct[index++] = c;
X      }
X  correct[index] = 0;
X! if(ckpasswd(correct)) {
X      printf("\nFoo, charlatan!\n");
X      return;
X      }
X***************
X*** 329,332 ****
X--- 329,344 ----
X      printf("\n");
X      }
X  printf("Byee!\n");
X+ }
X+ /* compare the given word against the master password */
X+ int ckpasswd(word)
X+ char *word;
X+ {
X+     char buf[30];
X+     char *p;
X+     strncpy(buf, word, sizeof(buf));
X+     for (p = buf; *p; p++)
X+ 	*p ^= 0123;
X+     *p = '\0';
X+     return strcmp(buf, MASTERPASSWORD);
X  }
X*** wand_head.h.orig	Mon Feb 13 11:54:28 1989
X--- wand_head.h	Mon Mar 13 11:02:06 1989
X***************
X*** 8,20 ****
X  #define NOOFROWS 16
X  
X  /* Change these to the necessary directories or files */
X  #define SCREENPATH "/usr/games/lib/wanderer"
X  #define HISCOREPATH "/usr/games/lib/.wanderer"
X  #define LOCKPATH "/tmp/wanderer.lock"      /* hiscore lock file */
X  #define DICTIONARY "/usr/lib/dictionary"
X  
X  /* change this to anything (12 characters or less), but don't forget what */
X! #define MASTERPASSWORD "slimy worms"
X  
X  /* change the numbers in this as well, but keep it in the same form */
X  #define PASSWD (num * num * 4373L + num * 16927L + 39L)
X--- 8,29 ----
X  #define NOOFROWS 16
X  
X  /* Change these to the necessary directories or files */
X+ #ifndef SCREENPATH
X  #define SCREENPATH "/usr/games/lib/wanderer"
X+ #endif
X+ #ifndef HISCOREPATH
X  #define HISCOREPATH "/usr/games/lib/.wanderer"
X+ #endif
X  #define LOCKPATH "/tmp/wanderer.lock"      /* hiscore lock file */
X+ #ifndef DICTIONARY
X  #define DICTIONARY "/usr/lib/dictionary"
X+ #endif
X  
X  /* change this to anything (12 characters or less), but don't forget what */
X! static char MASTERPASSWORD[] =
X!     { 's' ^ 0123, 'l' ^ 0123, 'i' ^ 0123, 'm' ^ 0123,
X!       'y' ^ 0123, ' ' ^ 0123, 'w' ^ 0123, 'o' ^ 0123,
X!       'r' ^ 0123, 'm' ^ 0123, 's' ^ 0123, 0 };
X  
X  /* change the numbers in this as well, but keep it in the same form */
X  #define PASSWD (num * num * 4373L + num * 16927L + 39L)
X***************
X*** 77,82 ****
X--- 86,95 ----
X  #define	getch()		Getch()
X  #define	beep()		Beep()
X  #endif
X+ #ifdef NOUNGETCH
X+ #undef getch
X+ #define getch()		Getch()
X+ #endif
X  
X  /* Save and Restore game additions (M002) by Gregory H. Margo	*/
X  /* mon_rec structure needed by save.c */
X***************
X*** 205,208 ****
X--- 218,236 ----
X  extern	void egamessage();
X  #endif
X  
X+ #endif
X+ 
X+ #ifndef KEY_UP
X+ /* for terminals/consoles without single character cursor key codes */
X+ /* (quick and dirty fix by Bill Randle, billr@saab.cna.tek.com) */
X+ #define NOKEYPAD
X+ #define KEY_UP		keys[0]
X+ #define KEY_DOWN	keys[1]
X+ #define KEY_LEFT	keys[2]
X+ #define KEY_RIGHT	keys[3]
X+ #define KEY_BACKSPACE	keys[2]
X+ #endif
X+ 
X+ #ifdef NOBEEP
X+ #define beep()	putchar('\007')
X  #endif
X*** Makefile.orig	Mon Mar 13 09:03:00 1989
X--- Makefile	Mon Mar 13 11:24:33 1989
X***************
X*** 1,5 ****
X--- 1,11 ----
X  # Makefile for wanderer
X+ #	last modified Mar. 10, 1989 by billr@saab.cna.tek.com
X  
X+ DEST = /usr/games
X+ DESTLIB=/usr/games/lib
X+ SCORE = $(DESTLIB)/.wanderer
X+ SCREENS = $(DESTLIB)/wanderer
X+ 
X  CURSESO = m.o save.o jump.o display.o icon.o game.o read.o help.o fall.o \
X  	scores.o edit.o
X  EGAO = 159x174.o 16x16.o 48x48.o ega.o
X***************
X*** 6,17 ****
X  
X  # For the EGA version, pick an initialization routine(s)
X  EGAINITO= iAPX286.o
X! EGAINITO= venix286.o
X! EGAINITO= 386ix.o 386ix_ega.o
X  EGA = -DEGA
X  OBJ = $(CURSESO) $(EGAO) $(EGAINITO)
X! # MODEL = -Ml
X  STACK =
X  
X  # If you just want the curses version, then use
X  #EGA =
X--- 12,24 ----
X  
X  # For the EGA version, pick an initialization routine(s)
X  EGAINITO= iAPX286.o
X! #EGAINITO= venix286.o
X! #EGAINITO= 386ix.o 386ix_ega.o
X  EGA = -DEGA
X  OBJ = $(CURSESO) $(EGAO) $(EGAINITO)
X! MODEL = -Ml
X  STACK =
X+ DEFINES =
X  
X  # If you just want the curses version, then use
X  #EGA =
X***************
X*** 18,36 ****
X  #OBJ = $(CURSESO)
X  #MODEL =
X  #STACK = -k 0x4000
X  
X  # You're on your own here...
X! G = -g
X! #O = -O
X  #S = -s
X! CFLAGS = $(MODEL) $G $O $(EGA)
X  LDFLAGS = $(MODEL) $G $S $(STACK)
X! LIBS = -lcurses
X  
X- DEST = /usr/games
X- DESTLIB=/usr/games/lib
X- SCORE = $(DESTLIB)/.wanderer
X- SCREENS = $(DESTLIB)/wanderer
X  GUID= games
X  GGID= other
X  
X--- 25,43 ----
X  #OBJ = $(CURSESO)
X  #MODEL =
X  #STACK = -k 0x4000
X+ # (These defines work well for BSD Unix)
X+ #DEFINES = -DHISCOREPATH=\"$(SCORE)\" -DSCREENPATH=\"$(SCREENS)\" -DDICTIONARY=\"/usr/dict/words\" -DNOUNGETCH -DNOBEEP
X  
X  # You're on your own here...
X! #G = -g
X! O = -O
X  #S = -s
X! CFLAGS = $(MODEL) $G $O $(EGA) $(DEFINES)
X  LDFLAGS = $(MODEL) $G $S $(STACK)
X! #LIBS = -lcurses
X! # BSD needs termcap lib too
X! LIBS = -lcurses -ltermcap
X  
X  GUID= games
X  GGID= other
X  
END_OF_FILE
if test 18471 -ne `wc -c <'Patches02'`; then
    echo shar: \"'Patches02'\" unpacked with wrong size!
fi
# end of 'Patches02'
fi
echo shar: End of shell archive.
exit 0