[comp.sources.games] v08i031: hotel - boardgame of hotel development, Patch1

billr@saab.CNA.TEK.COM (Bill Randle) (09/20/89)

Submitted-by: Scott Turner <srt@lanai.cs.ucla.edu>
Posting-number: Volume 8, Issue 31
Archive-name: hotel/Patch1
Patch-To: hotel: Volume 7, Issue 15-16


	[I applied the patch to my source without the -l option
	 (see below) and everything worked just fine.	-br]

[[The following is the first "official" patch to Hotel.  It fixes some
minor bugs and adds two new features:

	(1) a -n option which allows the user to specify the number
	    of players on the command line and subsequently skip the
	    startup screens.

	(2) a -i option ("informed") which keeps track on-screen of the
	    stock held by each player.

Apply this patch with the -l option.  Due to some strangenesses, at least
one of the patches will fail without -l. 

Enjoy!
					-- Scott Turner]]

#! /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 Wed Sep 20 05:50:42 1989
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'\" \(21075 characters\)
sed "s/^X//" >'patches01' <<'END_OF_FILE'
Xdiff -c Orig/comp.c ./comp.c
X*** Orig/comp.c	Mon Sep 18 15:18:09 1989
X--- ./comp.c	Mon Sep 18 10:12:23 1989
X***************
X*** 414,423 ****
X  
X    /* Figure the maximum you can trade. */
X  
X!   if ((int) players[p].shares[sunk]/2 > hotels[sunk].shares)
X      maxtrade = hotels[sunk].shares * 2;
X    else
X!     maxtrade = players[p].shares[sunk];
X    
X    /* If game is old, trade all possible. */
X  
X--- 414,423 ----
X  
X    /* Figure the maximum you can trade. */
X  
X!   if (players[p].shares[sunk]/2 > hotels[sunk].shares)
X      maxtrade = hotels[sunk].shares * 2;
X    else
X!     maxtrade = ((int) players[p].shares[sunk]/2) * 2;
X    
X    /* If game is old, trade all possible. */
X  
X***************
X*** 454,460 ****
X     *
X     */
X  
X!   *trade = randum(maxtrade);
X    *sell = randum(players[p].shares[sunk] - *trade);
X    return;
X    
X--- 454,460 ----
X     *
X     */
X  
X!   *trade = (randum((int) maxtrade/2) * 2);
X    *sell = randum(players[p].shares[sunk] - *trade);
X    return;
X    
Xdiff -c Orig/defs.h ./defs.h
X*** Orig/defs.h	Mon Sep 18 15:18:18 1989
X--- ./defs.h	Mon Sep 18 10:13:08 1989
X***************
X*** 105,107 ****
X--- 105,108 ----
X  extern WINDOW *iowin;
X  extern int debug;  /* Debug flag */
X  extern int human_player;
X+ extern int be_informed;  /*  Should humans be told about computer players? */
Xdiff -c Orig/help.c ./help.c
X*** Orig/help.c	Mon Sep 18 15:18:20 1989
X--- ./help.c	Mon Sep 18 15:12:44 1989
X***************
X*** 110,121 ****
X  clear();
X  printw("\nGeneral\n\n");
X  printw("Most of the time, the 'q' key will quit the game and ^L will refresh\n");
X! printw("the screen.  'h' will usually give some help.\n");
X  printw("\nCredits\n\n");
X! printw("Hotel was written by Scott R. Turner (srt@cs.ucla.edu).  Special thanks\n");
X! printw("must go to Matthew Merzbacher (matthew@cs.ucla.edu) for help in debugging\n");
X! printw("and testing the various versions, and for helping me win the 1989 ACM\n");
X! printw("Scholastic Programming Championship.\n\n");
X  printw("---Hit any key to continue---");
X  refresh();
X  ch = getch();
X--- 110,134 ----
X  clear();
X  printw("\nGeneral\n\n");
X  printw("Most of the time, the 'q' key will quit the game and ^L will refresh\n");
X! printw("the screen.  'h' will usually give some help.\n\n");
X! printw("\nOptions\n\n");
X! printw("Hotel has two options:  hotel [-i] [-n #].\n\n");
X! printw("The -i option turns on `information'.  This changes the display so that\n");
X! printw("you are kept informed of who holds what stock.  It makes the game a little\n");
X! printw("easier.\n\n");
X! printw("The -n option (followed by a number from 2 to 7) sets the number of\n");
X! printw("players.  This will also skip the credit screen and the instructions.\n\n");
X! printw("---Hit any key to continue---");
X! refresh();
X! ch = getch();
X! clear();
X  printw("\nCredits\n\n");
X! printw("Hotel was written by Scott R. Turner (srt@cs.ucla.edu).  Bug fixes and some\n");
X! printw("new features have been contributed by Lex Mierop (lex@nrc.com), Carlton\n");
X! printw("B. Hommel (carlton@apollo.com) and Michael Urban (urban%rcc@rand.org).\n\n");
X! printw("Special thanks must go to Matthew Merzbacher (matthew@cs.ucla.edu) for\n");
X! printw("help in debugging and testing various versions, and for helping me\n");
X! printw("win the 1989 ACM Scholastic Programming Championship.\n\n");
X  printw("---Hit any key to continue---");
X  refresh();
X  ch = getch();
Xdiff -c Orig/hotel.c ./hotel.c
X*** Orig/hotel.c	Mon Sep 18 15:18:11 1989
X--- ./hotel.c	Mon Sep 18 15:14:35 1989
X***************
X*** 49,54 ****
X--- 49,92 ----
X   *
X   *  The main program and declarations for Hotel.
X   *
X+  *  Bug Fixes and Modifications  
X+  *
X+  *  From Lex Mierop(lex@nrc.com) (July 7, 1989)
X+  *
X+  *  Fixes to two problems.  First, the human player was not getting
X+  *  informed of what the computer players were doing during merges.
X+  *  This is clearly wrong, except that human players should not be 
X+  *  informed of the number of stocks remaining, unless the "be_informed"
X+  *  option is on.
X+  *
X+  *  Second, Lex discovered a bug in the liquidation routines - computer
X+  *  players were sometimes getting gypped out of a stock due to a
X+  *  rounding error.
X+  *
X+  *  From Carlton B. Hommel <carlton@apollo.com> (July 21, 1989)
X+  *
X+  *  In the original version of Hotel, the human player was not kept
X+  *  informed of the shares held by computer opponents.  He could, of
X+  *  course, calculate this information by hand and keep track of it,
X+  *  but the program did not track it for him.  Carlton and others
X+  *  thought this annoying, and so Carlton modified pcdisp.c to keep
X+  *  track on the screen of all the stock.  Personally, I think this
X+  *  just shows a certain lack of character :-), but I've included this
X+  *  patch (in a modified form) as a command-line option, -i.
X+  *
X+  *  From Michael Urban <urban%rcc@rand.org>  (Sept. 5, 1989)
X+  *
X+  *  Michael discovered that *trade was uninitialized in human_liquidate,
X+  *  which can cause obvious problems.
X+  *
X+  *  From Scott R. Turner <srt@cs.ucla.edu> (9/18/1989)
X+  *
X+  *  Added a command line option for the number of players, -n.  If you
X+  *  use -n you will skip over the title and instruction screens.
X+  *
X+  *  Cleaned up the pcdisp code by removing the commented out stuff
X+  *  from the old version.  Fixed the makefile.
X+  *
X   */
X  
X  #include "defs.h"
X***************
X*** 75,80 ****
X--- 113,119 ----
X  
X  int numplayers, numhotels, boardsize, numshares, numtiles, startcash;
X  int turn, maxbuy, debug, pnum;
X+ int be_informed = 0;
X  
X  /* Externals */
X  
X***************
X*** 113,121 ****
X    };
X  };
X  
X! main ()
X  {
X!   int i,j,k,x,y,hotelchoice,played;
X    int purchases[MAXHOTELS];
X    extern long time();
X  #ifdef UNIX
X--- 152,174 ----
X    };
X  };
X  
X! /*
X!  *  Usage and exit.
X!  *
X!  */
X! 
X! void usage()
X  {
X!   printf("Usage: hotel [-i] [-n #].");
X!   exit(0);
X! };
X! 
X! 
X! main(argc,argv)
X!     int argc;
X!     char **argv;
X! {
X!   int i,j,k,x,y,hotelchoice,played,argn;
X    int purchases[MAXHOTELS];
X    extern long time();
X  #ifdef UNIX
X***************
X*** 145,150 ****
X--- 198,229 ----
X  #endif
X  
X    /*
X+    *  Options
X+    *
X+    *  -i = be informed == what stocks do computer players hold?
X+    *  -n = number of players
X+    *
X+    */
X+ 
X+   argn = 0;
X+   numplayers = 0;
X+   while (++argn < argc) {
X+     if (strlen(argv[argn]) != 2 || argv[argn][0] != '-') usage();
X+     switch(argv[argn][1]) {
X+       case 'i':
X+         be_informed = 1;
X+ 	break;
X+       case 'n':
X+ 	sscanf(argv[++argn],"%d",&numplayers);
X+ 	if (numplayers < 2 || numplayers > 7) usage();
X+ 	break;
X+       default:
X+ 	usage();
X+ 	exit(1);
X+       }
X+   };
X+ 
X+   /*
X       Curses Initialization.
X     */
X     
X***************
X*** 373,378 ****
X--- 452,458 ----
X  	   
X  hotel_merge(x,y,p)
X    int x,y,p;
X+ 
X  {
X    int adj[MAXHOTELS+1],shares[MAXHOTELS+1];
X    int i, j, k, count, max, dup, winner, hot, maxhot;
X***************
X*** 473,478 ****
X--- 553,562 ----
X  	    players[cp].cash += sell*share_cost(j);
X  	    players[cp].shares[j] -= sell;
X  	    hotels[j].shares += sell;
X+ 	    printw("%s sold %d",
X+ 		   players[cp].name, sell);
X+ 	  } else {
X+ 	    printw("%s sold 0",players[cp].name);
X  	  };
X  	  
X  	  /* Trade as many as possible. */
X***************
X*** 484,495 ****
X  	    hotels[j].shares += numtraded;
X  	    players[cp].shares[maxhot] += round(numtraded / 2);
X  	    hotels[maxhot].shares -= round(numtraded / 2);
X  	  };
X  
X  	  /* Everything left gets held. */
X  	};
X- 	
X        };
X  
X    /*
X     *  Merge all the chains other than the winner into the winner.
X--- 568,586 ----
X  	    hotels[j].shares += numtraded;
X  	    players[cp].shares[maxhot] += round(numtraded / 2);
X  	    hotels[maxhot].shares -= round(numtraded / 2);
X+ 	    printw(" and traded %d", numtraded);
X  	  };
X  
X  	  /* Everything left gets held. */
X+ 	  if (be_informed) {
X+ 	      printw(" and held on to %d shares of %s.\n",
X+ 		     players[cp].shares[j], hotels[j].name);
X+ 	  } else {
X+ 	    printw(" shares of %s.\n",hotels[j].name);
X+ 	  };
X  	};
X        };
X+   any_key();
X  
X    /*
X     *  Merge all the chains other than the winner into the winner.
Xdiff -c Orig/human.c ./human.c
X*** Orig/human.c	Mon Sep 18 15:18:12 1989
X--- ./human.c	Mon Sep 18 10:12:21 1989
X***************
X*** 235,240 ****
X--- 235,241 ----
X    refresh();
X    if(players[p].shares[sunk]) {
X        *sell = MAXSHARES + 1;
X+       *trade = 0;
X        while(*sell+*trade > players[p].shares[sunk]) {
X  	move((boardsize+5),0);
X  	clrtobot();
Xdiff -c Orig/init.c ./init.c
X*** Orig/init.c	Mon Sep 18 15:18:13 1989
X--- ./init.c	Mon Sep 18 14:59:47 1989
X***************
X*** 128,156 ****
X      };
X      
X    /* Copyright Screen */
X!   clear();
X!   move(3,0);
X!   printw("                                   H*O*T*E*L\n");
X!   printw("                       Copyright 1989 by Scott R. Turner\n");
X!   refresh();
X!   sleep(1);
X!   clear();
X  
X!   /* Time to query the user. */
X  
X!   printw("Welcome to the game of Hotel.\n\n");
X!   printw("Instructions? (Y/N) ");
X!   refresh();
X!   noecho();
X!   crmode();
X!   ch = getch();
X!   if (ch == 'Y' || ch == 'y') help();
X!   printw("\nHow many players? (2 to %d) ",MAXPLAYERS);
X!   refresh();
X!   numplayers = getnum(2,MAXPLAYERS);
X    for(i=1;i<=numplayers;i++){
X    	players[i].strategy = 1;
X    };
X    human_player = randum(numplayers);
X    players[human_player].strategy = 0;
X    strcpy(players[human_player].name,"You");
X--- 128,160 ----
X      };
X      
X    /* Copyright Screen */
X!   if (!numplayers) {
X!     clear();
X!     move(3,0);
X!     printw("                                   H*O*T*E*L\n");
X!     printw("                       Copyright 1989 by Scott R. Turner\n");
X!     refresh();
X!     sleep(1);
X!     clear();
X  
X!     /* Time to query the user. */
X  
X!     printw("Welcome to the game of Hotel.\n\n");
X!     printw("Instructions? (Y/N) ");
X!     refresh();
X!     noecho();
X!     crmode();
X!     ch = getch();
X!     if (ch == 'Y' || ch == 'y') help();
X!     printw("\nHow many players? (2 to %d) ",MAXPLAYERS);
X!     refresh();
X!     numplayers = getnum(2,MAXPLAYERS);
X!   };
X! 
X    for(i=1;i<=numplayers;i++){
X    	players[i].strategy = 1;
X    };
X+   
X    human_player = randum(numplayers);
X    players[human_player].strategy = 0;
X    strcpy(players[human_player].name,"You");
X***************
X*** 172,177 ****
X--- 176,183 ----
X    		break;
X    	};
X    printw(" player.\n");
X+   noecho();
X+   crmode();
X    any_key();
X    clear();
X    
Xdiff -c Orig/makefile ./makefile
X*** Orig/makefile	Mon Sep 18 15:18:21 1989
X--- ./makefile	Mon Sep 18 15:14:33 1989
X***************
X*** 1,7 ****
X  #  Makefile for Hotel
X  
X! OBJECTS = hotel.o human.o comp.o init.o utils.o costs.o help.o my_wgets.o display.o
X! PCOBJECTS = hotel.obj human.obj comp.obj init.obj utils.obj costs.obj display.obj help.obj my_wgets.obj
X  SOURCE = init.c utils.c hotel.c human.c costs.c comp.c help.c my_wgets.c
X  CFLAGS = -DUNIX
X  
X--- 1,7 ----
X  #  Makefile for Hotel
X  
X! OBJECTS = hotel.o human.o comp.o init.o utils.o costs.o help.o my_wgets.o pcdisp.o
X! PCOBJECTS = hotel.obj human.obj comp.obj init.obj utils.obj costs.obj pcdisp.obj help.obj my_wgets.obj
X  SOURCE = init.c utils.c hotel.c human.c costs.c comp.c help.c my_wgets.c
X  CFLAGS = -DUNIX
X  
X***************
X*** 20,26 ****
X  hotel.2: hotel.c human.c init.c utils.c my_wgets.c my_wgets.h Notice
X  	shar hotel.c human.c init.c utils.c display.c my_wgets.c my_wgets.h Notice > hotel.2
X  
X! display.obj: defs.h
X  comp.c: defs.h
X  hotel.obj: defs.h
X  init.obj: defs.h
X--- 20,26 ----
X  hotel.2: hotel.c human.c init.c utils.c my_wgets.c my_wgets.h Notice
X  	shar hotel.c human.c init.c utils.c display.c my_wgets.c my_wgets.h Notice > hotel.2
X  
X! pcdisp.obj: defs.h
X  comp.c: defs.h
X  hotel.obj: defs.h
X  init.obj: defs.h
X***************
X*** 29,35 ****
X  costs.obj: defs.h
X  help.obj: defs.h
X  
X! display.o: defs.h
X  comp.c: defs.h
X  hotel.o: defs.h
X  init.o: defs.h
X--- 29,35 ----
X  costs.obj: defs.h
X  help.obj: defs.h
X  
X! pcdisp.o: defs.h
X  comp.c: defs.h
X  hotel.o: defs.h
X  init.o: defs.h
Xdiff -c Orig/pcdisp.c ./pcdisp.c
X*** Orig/pcdisp.c	Mon Sep 18 15:18:23 1989
X--- ./pcdisp.c	Mon Sep 18 14:54:30 1989
X***************
X*** 97,103 ****
X  print_board(p)
X       int p;
X  {
X!   int i,j,tile,x,y;
X  
X    getyx(stdscr,y,x);
X    tile = 1;
X--- 97,104 ----
X  print_board(p)
X       int p;
X  {
X!   int i,j,k,tile,x,y;
X!   char buf[10];
X  
X    getyx(stdscr,y,x);
X    tile = 1;
X***************
X*** 105,111 ****
X    addch(DULCORNER);
X    for(i=1;i<=boardsize;i++) {
X      move(2,(i-1)*2+4);
X- /*    addstr("MM"); */
X      addch(DLINE);
X      addch(DLINE);
X    }
X--- 106,111 ----
X***************
X*** 112,129 ****
X    move(2,boardsize*2+4);
X    addch(DLINE);
X    addch(DURCORNER);
X- /*  addstr("M;"); */
X    for(i=1;i<=boardsize;i++) {
X      move(i+2,3);
X- /*    addch(':'); */
X      addch(DVERTICAL);
X      for(j=1;j<=boardsize;j++) {
X        move(i+2,(2 * j)+3);
X        if (board[i][j] == UNUSED) {
X- /*	addch('~'); */
X          addch(BLOCK);
X        } else if (board[i][j] == 0) {
X- /*	addch('y');  */
X          addch(POINT);
X        } else if (board[i][j] == -p) {
X  	standout();
X--- 112,125 ----
X***************
X*** 130,157 ****
X  	addch('0' + tile++);
X  	standend();
X        } else if (board[i][j] == UNPLAYABLE && debug) {
X!         addch('*');
X        } else if (board[i][j] < 0) {
X- /*	addch('y');  */
X          addch(POINT);
X        } else
X  	addch(board[i][j] + 'A' - 1);
X      };
X      move(i+2,(boardsize*2+5));
X- /*    addch(':');  */
X      addch(DVERTICAL);
X    };
X    move(boardsize+3,3);
X- /*  addch('H'); */
X    addch(DLLCORNER);
X    for(i=1;i<=boardsize;i++) {
X      move(boardsize+3,(i-1)*2+4);
X- /*    addstr("MM");  */
X      addch(DLINE);
X      addch(DLINE);
X    }
X    move(boardsize+3,boardsize*2+4);
X- /*  addstr("M<"); */
X    addch(DLINE);
X    addch(DLRCORNER);
X  
X--- 126,148 ----
X  	addch('0' + tile++);
X  	standend();
X        } else if (board[i][j] == UNPLAYABLE && debug) {
X!         addch('x');
X        } else if (board[i][j] < 0) {
X          addch(POINT);
X        } else
X  	addch(board[i][j] + 'A' - 1);
X      };
X      move(i+2,(boardsize*2+5));
X      addch(DVERTICAL);
X    };
X    move(boardsize+3,3);
X    addch(DLLCORNER);
X    for(i=1;i<=boardsize;i++) {
X      move(boardsize+3,(i-1)*2+4);
X      addch(DLINE);
X      addch(DLINE);
X    }
X    move(boardsize+3,boardsize*2+4);
X    addch(DLINE);
X    addch(DLRCORNER);
X  
X***************
X*** 158,208 ****
X    /*  Now do rhs info. */
X  
X    move(2,(boardsize*2+8));
X!   printw("Hotel    Cost    Yours   Available");
X!   move(3,(boardsize*2+8));
X!   for (i=1;i<=6;i++) addch(LINE);
X!   addch(LINETEE);
X!   for (i=1;i<=8;i++) addch(LINE);
X!   addch(LINETEE);
X!   for (i=1;i<=7;i++) addch(LINE);
X!   addch(LINETEE);
X!   for (i=1;i<=10;i++) addch(LINE);
X! /*  printw("D D D D D D B D D D D D D D D B D D D D D D D B D D D D D D D D D D"); */
X    for(i=1;i<=numhotels;i++) {
X!     move(i+3,(boardsize*2+10));
X      clrtoeol();
X      addch(i+'A'-1);
X      if(hotels[i].size > 0) {
X!       move(i+3,(boardsize*2+17));
X!       printw("$%d",share_cost(i));
X      } else {
X!       move(i+3,(boardsize*2+16));
X        printw("($%d)",share_cost(i));
X      };
X!     if (players[p].shares[i] > 0) {
X!       move(i+3,(boardsize*2+27));
X!       printw("%d",players[p].shares[i]);
X      };
X-     move(i+3,(boardsize*2+36));
X-     printw("%d",hotels[i].shares);
X-     move(i+3,(boardsize*2+14));
X- /*    addch('3'); */
X-     addch(VERTICAL);
X-     move(i+3,(boardsize*2+23));    
X- /*    addch('3');  */
X-     addch(VERTICAL);
X-     move(i+3,(boardsize*2+31));
X- /*    addch('3');  */
X-     addch(VERTICAL);
X    };
X  
X    move(numhotels+6,(boardsize*2+18));
X    clrtoeol();
X    printw("Cash = $%d",players[p].cash);
X    move(0,0);
X- /*  printw("ZDDDDDDDDDDDDDDDDDDDDDDDDD 4 pHpOpTpEpLp C D D D D D D D D D D D D D D D D D D D D D D D D ?"); */
X    addch(ULCORNER);
X    for(i=1;i<=25;i++) addch(LINE);
X    addch(LHORTEE); addch(' ');
X    addch(TRIPLELINE); addch('H');
X    addch(TRIPLELINE); addch('O');
X--- 149,298 ----
X    /*  Now do rhs info. */
X  
X    move(2,(boardsize*2+8));
X!   if (be_informed) {
X!     /*
X!      *  The top line:  Hotel Cost Bank ... Player Names
X!      *
X!      */
X!     printw("H  Cost  Bank ");
X!     for (k=1; k<=numplayers; k++) {
X!       sprintf(buf, "%-4.4s ", players[k].name);
X!       if (k != p)
X! 	printw(buf);
X!       else {
X! 	standout();
X! 	printw(buf);
X! 	standend();
X!       }
X!     }
X!     /*
X!      *  The line under the title line.
X!      *
X!      */
X!     move(3,(boardsize*2+8));
X!     addch(LINE);                                  /* A-G */
X!     addch(LINETEE);
X!     for (i=1;i<=6;i++) addch(LINE);               /* Cost */
X!     addch(LINETEE);
X!     for (i=1;i<=4;i++) addch(LINE);               /* Bank */
X!     for (k=1; k<=numplayers; k++) {               /* Players */
X!       addch(LINETEE);
X!       for (i=1;i<=4;i++) addch(LINE);
X!     }
X!   } else {
X!       /*
X!        *  The title line, regular version.
X!        *
X!        */
X!       printw("Hotel    Cost    Yours   Available");
X!       move(3,(boardsize*2+8));
X!       for (i=1;i<=6;i++) addch(LINE);
X!       addch(LINETEE);
X!       for (i=1;i<=8;i++) addch(LINE);
X!       addch(LINETEE);
X!       for (i=1;i<=7;i++) addch(LINE);
X!       addch(LINETEE);
X!       for (i=1;i<=10;i++) addch(LINE);
X!     };
X! 
X!   /*
X!    *  For each hotel, print some information on its stock and price.
X!    *  In the informed version, print everyone's holdings.
X!    *
X!    */
X    for(i=1;i<=numhotels;i++) {
X!     if (be_informed) 
X!       move(i+3,(boardsize*2+8));
X!     else 
X!       move(i+3,(boardsize*2+10));
X      clrtoeol();
X+     /*
X+      *  The hotel initial
X+      *
X+      */
X      addch(i+'A'-1);
X+     if (be_informed) addch(VERTICAL);
X+     /*
X+      *  The price of the hotel, in parens if not active.
X+      *
X+      */
X      if(hotels[i].size > 0) {
X!       if (be_informed) 
X! 	move(i+3,(boardsize*2+11));
X!       else 
X! 	move(i+3,(boardsize*2+17));
X!       printw("$%d ",share_cost(i));
X!       if (be_informed) addch(VERTICAL);
X      } else {
X!       if (be_informed)
X! 	move(i+3,(boardsize*2+10));
X!       else
X! 	move(i+3,(boardsize*2+16));
X        printw("($%d)",share_cost(i));
X+       if (be_informed) addch(VERTICAL);
X      };
X!     /*
X!      *  Stock information
X!      *
X!      */
X!     if (be_informed) {
X!       move(i+3,(boardsize*2+18));
X!       /*
X!        *  The bank's shares
X!        *
X!        */
X!       printw("%2d ",hotels[i].shares);
X!       addch(VERTICAL);
X!       /*
X!        *  Each player.
X!        *
X!        */
X!       for (k=1; k<=numplayers; k++) {             /* Players */
X! 	if (players[k].shares[i] > 0) {
X! 	  move(i+3,(boardsize*2+23 + 5*(k-1) ));
X! 	  printw("%2d ",players[k].shares[i]);
X! 	  if (k != numplayers) addch(VERTICAL);
X! 	} else {
X! 	  move(i+3,(boardsize*2+26 + 5*(k-1)));
X! 	  if (k != numplayers) addch(VERTICAL);
X! 	}
X!       }
X!     } else {
X!       /*
X!        *  Regular version, only player and bank.
X!        *
X!        */
X!       if (players[p].shares[i] > 0) {
X! 	move(i+3,(boardsize*2+27));
X! 	printw("%d",players[p].shares[i]);
X!       };
X!       move(i+3,(boardsize*2+36));
X!       printw("%d",hotels[i].shares);
X!       move(i+3,(boardsize*2+14));
X!       addch(VERTICAL);
X!       move(i+3,(boardsize*2+23));    
X!       addch(VERTICAL);
X!       move(i+3,(boardsize*2+31));
X!       addch(VERTICAL);
X      };
X    };
X  
X+   /*
X+    *  Player's cash.
X+    *
X+    */
X    move(numhotels+6,(boardsize*2+18));
X    clrtoeol();
X    printw("Cash = $%d",players[p].cash);
X+   /*
X+    *  Exterior box.  Size to fit if playing the informed version.
X+    *
X+    */
X    move(0,0);
X    addch(ULCORNER);
X    for(i=1;i<=25;i++) addch(LINE);
X+   if (be_informed)
X+     for(i=1;i<numplayers;i++) addch(LINE);
X    addch(LHORTEE); addch(' ');
X    addch(TRIPLELINE); addch('H');
X    addch(TRIPLELINE); addch('O');
X***************
X*** 211,229 ****
X    addch(TRIPLELINE); addch('L');
X    addch(' '); addch(RHORTEE);
X    for(i=1;i<=25;i++) addch(LINE);
X    addch(URCORNER);
X    for(i=1;i<=(boardsize+3);i++) {
X    	move(i,0);
X- /*  	addch('3');  */
X          addch(VERTICAL);
X  	move(i,65);
X! /*  	addch('3');  */
X          addch(VERTICAL);
X    };
X    move((boardsize + 4),0);
X- /*  printw("@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDY"); */
X    addch(LLCORNER);
X    for(i=1;i<=64;i++) addch(LINE);
X    addch(LRCORNER);
X    move(y,x);
X    refresh();
X--- 301,324 ----
X    addch(TRIPLELINE); addch('L');
X    addch(' '); addch(RHORTEE);
X    for(i=1;i<=25;i++) addch(LINE);
X+   if (be_informed)
X+     for(i=1;i<numplayers;i++) addch(LINE);
X    addch(URCORNER);
X    for(i=1;i<=(boardsize+3);i++) {
X    	move(i,0);
X          addch(VERTICAL);
X  	move(i,65);
X! 	if (be_informed) move(i,65+2*(numplayers-1));
X          addch(VERTICAL);
X    };
X    move((boardsize + 4),0);
X    addch(LLCORNER);
X    for(i=1;i<=64;i++) addch(LINE);
X+   if (be_informed) 
X+     for (i=1;i<numplayers;i++) {
X+       addch(LINE);
X+       addch(LINE);
X+     };
X    addch(LRCORNER);
X    move(y,x);
X    refresh();
X
END_OF_FILE
if test 21075 -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