v01i019: xmille: Mille Bourne for X, Part02/03

Mike Wexler mikew at wyse.wyse.com
Thu Sep 8 04:33:36 AEST 1988


Submitted-by: dana at thumper.bellcore.com(Dana Chee)
Posting-number: Volume 1, Issue 19
Archive-name: xmille/part02

#! /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 archive 2 (of 3)."
# Contents:  comp.c curses_ui.c drawcard.c fill
# Wrapped by mikew at x2 on Wed Sep  7 10:48:23 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f comp.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"comp.c\"
else
echo shar: Extracting \"comp.c\" \(9582 characters\)
sed "s/^X//" >comp.c <<'END_OF_comp.c'
X# include	"mille.h"
X
X/*
X * @(#)comp.c	1.1 (Berkeley) 4/1/82
X */
X
X# define	V_VALUABLE	40
X
Xcalcmove() {
X
X	reg CARD	card;
X	reg int		*value;
X	reg PLAY	*pp, *op;
X	reg bool	foundend, cango, canstop, foundlow;
X	reg unsgn int	i, count200, badcount, nummin, nummax, diff;
X	reg int		curmin, curmax;
X	reg CARD	safe, oppos;
X	int		valbuf[HAND_SZ], count[NUM_CARDS];
X	bool		playit[HAND_SZ];
X
X	Message ("");
X	pp = &Player[COMP];
X	op = &Player[PLAYER];
X	safe = 0;
X	cango = 0;
X	canstop = FALSE;
X	foundend = FALSE;
X	for (i = 0; i < NUM_CARDS; i++)
X		count[i] = 0;
X	for (i = 0; i < HAND_SZ; i++) {
X		card = pp->hand[i];
X		switch (card) {
X		  case C_STOP:	case C_CRASH:
X		  case C_FLAT:	case C_EMPTY:
X			if (playit[i] = canplay(pp, op, card))
X				canstop = TRUE;
X			goto norm;
X		  case C_LIMIT:
X			if ((playit[i] = canplay(pp, op, card))
X			    && Numseen[C_25] == Numcards[C_25]
X			    && Numseen[C_50] == Numcards[C_50])
X				canstop = TRUE;
X			goto norm;
X		  case C_25:	case C_50:	case C_75:
X		  case C_100:	case C_200:
X			if ((playit[i] = canplay(pp, op, card))
X			    && pp->mileage + Value[card] == End)
X				foundend = TRUE;
X			goto norm;
X		  default:
X			playit[i] = canplay(pp, op, card);
Xnorm:
X			if (playit[i])
X				++cango;
X			break;
X		  case C_GAS_SAFE:	case C_DRIVE_SAFE:
X		  case C_SPARE_SAFE:	case C_RIGHT_WAY:
X			if (pp->battle == opposite(card)
X			   || (pp->speed == C_LIMIT && card == C_RIGHT_WAY)) {
X				Movetype = M_PLAY;
X				Card_no = i;
X				return;
X			}
X			++safe;
X			playit[i] = TRUE;
X			break;
X		}
X		++count[card];
X	}
X	if (pp->hand[0] == C_INIT && Topcard > Deck) {
X		Movetype = M_DRAW;
X		return;
X	}
X	if (Debug)
X		fprintf(outf, "CALCMOVE: cango = %d, canstop = %d, safe = %d\n", cango, canstop, safe);
X	if (foundend)
X		foundend = !check_ext(TRUE);
X	for (i = 0; safe && i < HAND_SZ; i++) {
X		if (issafety(pp->hand[i])) {
X			if (onecard(op) || (foundend && cango && !canstop)) {
X				if (Debug)
X					fprintf(outf, "CALCMOVE: onecard(op) = %d, foundend = %d\n", onecard(op), foundend);
Xplaysafe:
X				Movetype = M_PLAY;
X				Card_no = i;
X				return;
X			}
X			oppos = opposite(pp->hand[i]);
X			if (Numseen[oppos] == Numcards[oppos])
X				goto playsafe;
X			else if (!cango
X			    && (op->can_go || !pp->can_go || Topcard < Deck)) {
X				card = (Topcard - Deck) - roll(1, 10);
X				if ((!pp->mileage) != (!op->mileage))
X					card -= 7;
X				if (Debug)
X					fprintf(outf, "CALCMOVE: card = %d, DECK_SZ / 4 = %d\n", card, DECK_SZ / 4);
X				if (card < DECK_SZ / 4)
X					goto playsafe;
X			}
X			safe--;
X			playit[i] = cango;
X		}
X	}
X	if (!pp->can_go && !isrepair(pp->battle))
X		Numneed[opposite(pp->battle)]++;
Xredoit:
X	foundlow = (cango || count[C_END_LIMIT] != 0
X			  || Numseen[C_LIMIT] == Numcards[C_LIMIT]
X			  || pp->safety[S_RIGHT_WAY] != S_UNKNOWN);
X	foundend = FALSE;
X	count200 = pp->nummiles[C_200];
X	badcount = 0;
X	curmax = -1;
X	curmin = 101;
X	nummin = -1;
X	nummax = -1;
X	value = valbuf;
X	for (i = 0; i < HAND_SZ; i++) {
X		card = pp->hand[i];
X		if (issafety(card) || playit[i] == (cango != 0)) {
X			if (Debug)
X				fprintf(outf, "CALCMOVE: switch(\"%s\")\n", C_name[card]);
X			switch (card) {
X			  case C_25:	case C_50:
X				diff = End - pp->mileage;
X				/* avoid getting too close */
X				if (Topcard > Deck && cango && diff <= 100
X				    && diff / Value[card] > count[card]
X				    && (card == C_25 || diff % 50 == 0)) {
X					if (card == C_50 && diff - 50 == 25
X					    && count[C_25] > 0)
X						goto okay;
X					*value = 0;
X					if (--cango <= 0)
X						goto redoit;
X					break;
X				}
Xokay:
X				*value = (Value[card] >> 3);
X				if (pp->speed == C_LIMIT)
X					++*value;
X				else
X					--*value;
X				if (!foundlow
X				   && (card == C_50 || count[C_50] == 0)) {
X					*value = (pp->mileage ? 10 : 20);
X					foundlow = TRUE;
X				}
X				goto miles;
X			  case C_200:
X				if (++count200 > 2) {
X					*value = 0;
X					break;
X				}
X			  case C_75:	case C_100:
X				*value = (Value[card] >> 3);
X				if (pp->speed == C_LIMIT)
X					--*value;
X				else
X					++*value;
Xmiles:
X				if (pp->mileage + Value[card] > End)
X					*value = (End == 700 ? card : 0);
X				else if (pp->mileage + Value[card] == End) {
X					*value = (foundend ? card : V_VALUABLE);
X					foundend = TRUE;
X				}
X				break;
X			  case C_END_LIMIT:
X				if (pp->safety[S_RIGHT_WAY] != S_UNKNOWN)
X					*value = (pp->safety[S_RIGHT_WAY] == S_PLAYED ? -1 : 1);
X				else if (pp->speed == C_LIMIT && End - pp->mileage <= 50)
X					*value = 1;
X				else if (pp->speed == C_LIMIT
X				    || Numseen[C_LIMIT] != Numcards[C_LIMIT]) {
X					safe = S_RIGHT_WAY;
X					oppos = C_LIMIT;
X					goto repair;
X				}
X				else {
X					*value = 0;
X					--count[C_END_LIMIT];
X				}
X				break;
X			  case C_REPAIRS:	case C_SPARE:	case C_GAS:
X				safe = safety(card) - S_CONV;
X				oppos = opposite(card);
X				if (pp->safety[safe] != S_UNKNOWN)
X					*value = (pp->safety[safe] == S_PLAYED ? -1 : 1);
X				else if (pp->battle != oppos
X				    && (Numseen[oppos] == Numcards[oppos] || Numseen[oppos] + count[card] > Numcards[oppos])) {
X					*value = 0;
X					--count[card];
X				}
X				else {
Xrepair:
X					*value = Numcards[oppos] * 6;
X					*value += (Numseen[card] - Numseen[oppos]);
X					if (!cango)
X					    *value /= (count[card]*count[card]);
X					count[card]--;
X				}
X				break;
X			  case C_GO:
X				if (pp->safety[S_RIGHT_WAY] != S_UNKNOWN)
X					*value = (pp->safety[S_RIGHT_WAY] == S_PLAYED ? -1 : 2);
X				else if (pp->can_go
X				 && Numgos + count[C_GO] == Numneed[C_GO]) {
X					*value = 0;
X					--count[C_GO];
X				}
X				else {
X					*value = Numneed[C_GO] * 3;
X					*value += (Numseen[C_GO] - Numgos);
X					*value /= (count[C_GO] * count[C_GO]);
X					count[C_GO]--;
X				}
X				break;
X			  case C_LIMIT:
X				if (op->mileage + 50 >= End) {
X					*value = (End == 700 && !cango);
X					break;
X				}
X				if (canstop || (cango && !op->can_go))
X					*value = 1;
X				else {
X					*value = (pp->safety[S_RIGHT_WAY] != S_UNKNOWN ? 2 : 3);
X					safe = S_RIGHT_WAY;
X					oppos = C_END_LIMIT;
X					goto normbad;
X				}
X				break;
X			  case C_CRASH:	case C_EMPTY:	case C_FLAT:
X				safe = safety(card) - S_CONV;
X				oppos = opposite(card);
X				*value = (pp->safety[safe]!=S_UNKNOWN ? 3 : 4);
Xnormbad:
X				if (op->safety[safe] == S_PLAYED)
X					*value = -1;
X				else {
X				    *value *= (Numneed[oppos] + Numseen[oppos] + 2);
X				    if (!pp->mileage || foundend || onecard(op))
X					*value += 5;
X				    if (op->mileage == 0 || onecard(op))
X					*value += 5;
X				    if (op->speed == C_LIMIT)
X					*value -= 3;
X				    if (cango && pp->safety[safe] != S_UNKNOWN)
X					*value += 3;
X				    if (!cango)
X					*value /= ++badcount;
X				}
X				break;
X			  case C_STOP:
X				if (op->safety[S_RIGHT_WAY] == S_PLAYED)
X					*value = -1;
X				else {
X				    *value = (pp->safety[S_RIGHT_WAY] != S_UNKNOWN ? 3 : 4);
X				    *value *= (Numcards[C_STOP] + Numseen[C_GO]);
X				    if (!pp->mileage || foundend || onecard(op))
X					*value += 5;
X				    if (!cango)
X					*value /= ++badcount;
X				    if (op->mileage == 0)
X					*value += 5;
X				    if ((card == C_LIMIT
X				      && op->speed == C_LIMIT) || (!op->can_go))
X					*value -= 5;
X				    if (cango && pp->safety[S_RIGHT_WAY] != S_UNKNOWN)
X					*value += 5;
X				}
X				break;
X			  case C_GAS_SAFE:	case C_DRIVE_SAFE:
X			  case C_SPARE_SAFE:	case C_RIGHT_WAY:
X				*value = cango ? 0 : 101;
X				break;
X			  case C_INIT:
X				*value = 0;
X			}
X		}
X		else
X			*value = cango ? 0 : 101;
X		if (card != C_INIT) {
X			if (*value >= curmax) {
X				nummax = i;
X				curmax = *value;
X			}
X			if (*value <= curmin) {
X				nummin = i;
X				curmin = *value;
X			}
X		}
X		if (Debug)
X			debug(i, "%3d %-14s",*value,C_name[pp->hand[i]]);
X		value++;
X	}
X	if (!pp->can_go && !isrepair(pp->battle))
X		Numneed[opposite(pp->battle)]++;
X	if (cango) {
X		ComputerStatus ("PLAY\n");
X		if (Debug)
X			getmove();
X		if (!Debug || Movetype == M_DRAW) {
X			Movetype = M_PLAY;
X			Card_no = nummax;
X		}
X	}
X	else {
X		ComputerStatus ("DISCARD\n");
X		if (Debug)
X			getmove();
X		if (!Debug || Movetype == M_DRAW) {
X			Movetype = M_DISCARD;
X			Card_no = nummin;
X		}
X	}
X	ComputerCard (pp->hand[Card_no]);
X}
X
Xonecard(pp)
Xreg PLAY	*pp; {
X
X	reg CARD	bat, spd, card;
X
X	bat = pp->battle;
X	spd = pp->speed;
X	card = -1;
X	if (pp->can_go || ((isrepair(bat) || bat == C_STOP
X	    || spd == C_LIMIT) && Numseen[S_RIGHT_WAY] != 0)
X	    || Numseen[safety(bat)] != 0)
X		switch (End - pp->mileage) {
X		  case 200:
X			if (pp->nummiles[C_200] == 2)
X				return FALSE;
X			card = C_200;
X		  case 100:
X		  case 75:
X			if (card == -1)
X				card = (End - pp->mileage == 75 ? C_75 : C_100);
X			if (spd == C_LIMIT)
X				return Numseen[S_RIGHT_WAY] == 0;
X		  case 50:
X		  case 25:
X			if (card == -1)
X				card = (End - pp->mileage == 25 ? C_25 : C_50);
X			return Numseen[card] != Numcards[card];
X		}
X	return FALSE;
X}
X
Xcanplay(pp, op, card)
Xreg PLAY	*pp, *op;
Xreg CARD	card; {
X
X	switch (card) {
X	  case C_200:
X		if (pp->nummiles[C_200] == 2)
X			break;
X	  case C_75:	case C_100:
X		if (pp->speed == C_LIMIT)
X			break;
X	  case C_50:
X		if (pp->mileage + Value[card] > End)
X			break;
X	  case C_25:
X		if (pp->can_go)
X			return TRUE;
X		break;
X	  case C_EMPTY:	case C_FLAT:	case C_CRASH:
X	  case C_STOP:
X		if (op->can_go && op->safety[safety(card) - S_CONV] != S_PLAYED)
X			return TRUE;
X		break;
X	  case C_LIMIT:
X		if (op->speed != C_LIMIT && op->safety[S_RIGHT_WAY] != S_PLAYED
X		    && op->mileage + 50 < End)
X			return TRUE;
X		break;
X	  case C_GAS:	case C_SPARE:	case C_REPAIRS:
X		if (pp->battle == opposite(card))
X			return TRUE;
X		break;
X	  case C_GO:
X		if (!pp->can_go
X		    && (isrepair(pp->battle) || pp->battle == C_STOP))
X			return TRUE;
X		break;
X	  case C_END_LIMIT:
X		if (pp->speed == C_LIMIT)
X			return TRUE;
X	}
X	return FALSE;
X}
END_OF_comp.c
if test 9582 -ne `wc -c <comp.c`; then
    echo shar: \"comp.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f curses_ui.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"curses_ui.c\"
else
echo shar: Extracting \"curses_ui.c\" \(10994 characters\)
sed "s/^X//" >curses_ui.c <<'END_OF_curses_ui.c'
X/*
X * ui.c
X *
X * curses interface routines for mille
X */
X
X# include	"mille.h"
X#undef TRUE
X#undef FALSE
X# include	"ui.h"
X#ifdef CTRL
X# undef CTRL
X#endif
X#define CTRL(x)	(x - 'A' + 1)
X
XWINDOW	*Board, *Miles, *Score;
X
Xchar	*C_fmt = "%-18.18s";	/* format for printing cards		*/
Xchar	Initstr[100];		/* initial string for error field	*/
Xchar	*_cn[NUM_CARDS] = {	/* Card name buffer			*/
X		"",
X		"25",
X		"50",
X		"75",
X		"100",
X		"200",
X		"Out of Gas",
X		"Flat Tire",
X		"Accident",
X		"Stop",
X		"Speed Limit", 
X		"Gasoline",
X		"Spare Tire",
X		"Repairs",
X		"Go",
X		"End of Limit",
X		"Extra Tank",
X		"Puncture Proof",
X		"Driving Ace",
X		"Right of Way"
X	},
X	**C_name = &_cn[1];	/* Card names				*/
X
XMessage (string)
Xchar	*string;
X{
X	wmove (Score, ERR_Y, ERR_X);
X	waddstr (Score, string);
X	wclrtoeol (Score);
X}
X
Xdebug (pos, string, a0, a1, a2)
X{
X	mvprintw (pos+6, 2, string, a0, a1, a2);
X}
X
XComputerStatus (string)
X{
X	mvaddstr (MOVE_Y + 1, MOVE_X, string);
X}
X
XComputerCard (type)
Xint	type;
X{
X	mvprintw (MOVE_Y + 2, MOVE_X, "%16s", C_name[type]);
X}
X
X
XPrompt (string)
Xchar *string;
X{
X	mvaddstr (MOVE_Y, MOVE_X, string);
X	clrtoeol ();
X	refresh ();
X}
X
Xchar *
XGetpromptedInput (string)
Xchar	*string;
X{
X	static char	buf[1024];
X	char		*sp;
X	
X	sp = buf;
X	Prompt (string);
X	leaveok (Board, FALSE);
X	while ((*sp = readch()) != '\n') {
X		if (*sp == _tty.sg_kill) {
X			sp = buf;
X			break;
X		}
X		else if (*sp == _tty.sg_erase) {
X			if (--sp < buf)
X				sp = buf;
X			else {
X				addch('\b');
X				/*
X				 * if the previous char was a control
X				 * char, cover up two characters.
X				 */
X				if (*sp < ' ')
X					addch('\b');
X				clrtoeol();
X			}
X		}
X		else
X			addstr(unctrl(*sp++));
X		refresh();
X	}
X	*sp = '\0';
X	leaveok (Board, TRUE);
X	return buf;
X}
X
Xnewboard()
X{
X	werase(Board);
X	werase(Score);
X	mvaddstr(5, 0, "--HAND--");
X	mvaddch(6, 0, 'P');
X	mvaddch(7, 0, '1');
X	mvaddch(8, 0, '2');
X	mvaddch(9, 0, '3');
X	mvaddch(10, 0, '4');
X	mvaddch(11, 0, '5');
X	mvaddch(12, 0, '6');
X	mvaddstr(13, 0, "--BATTLE--");
X	mvaddstr(15, 0, "--SPEED--");
X	mvaddstr(5, 20, "--DECK--");
X	mvaddstr(7, 20, "--DISCARD--");
X	mvaddstr(13, 20, "--BATTLE--");
X	mvaddstr(15, 20, "--SPEED--");
X	wmove(Miles, 0, 0);
X	if (winch(Miles) != '-') {
X		werase(Miles);
X		mvwaddstr(Miles, 0, 0, "--MILEAGE--");
X		mvwaddstr(Miles, 0, 41, "--MILEAGE--");
X	}
X	else {
X		wmove(Miles, 1, 0);
X		wclrtobot(Miles);
X	}
X	newscore();
X	stdscr = Board;
X}
X
Xnewscore() {
X
X	reg int	i;
X
X	stdscr = Score;
X	move(0, 22);
X	if (inch() != 'Y') {
X		erase();
X		mvaddstr(0, 22,  "You   Comp   Value");
X		mvaddstr(1, 2, "Milestones Played");
X		mvaddstr(2, 8, "Each Safety");
X		mvaddstr(3, 5, "All 4 Safeties");
X		mvaddstr(4, 3, "Each Coup Fourre");
X		mvaddstr(2, 37, "100");
X		mvaddstr(3, 37, "300");
X		mvaddstr(4, 37, "300");
X	}
X	else {
X		move(5, 1);
X		clrtobot();
X	}
X	for (i = 0; i < SCORE_Y; i++)
X		mvaddch(i, 0, '|');
X	move(SCORE_Y - 1, 1);
X	while (addch('_') != ERR)
X		continue;
X	if (WIndow == W_FULL || Finished) {
X		mvaddstr(5, 5, "Trip Completed");
X		mvaddstr(6, 10, "Safe Trip");
X		mvaddstr(7, 5, "Delayed Action");
X		mvaddstr(8, 10, "Extension");
X		mvaddstr(9, 11, "Shut-Out");
X		mvaddstr(10, 21, "----   ----   -----");
X		mvaddstr(11, 9, "Hand Total");
X		mvaddstr(12, 20, "-----  -----");
X		mvaddstr(13, 6, "Overall Total");
X		mvaddstr(14, 15, "Games");
X		mvaddstr(5, 37, "400");
X		mvaddstr(6, 37, "300");
X		mvaddstr(7, 37, "300");
X		mvaddstr(8, 37, "200");
X		mvaddstr(9, 37, "500");
X	}
X	else {
X		mvaddstr(5, 21, "----   ----   -----");
X		mvaddstr(6, 9, "Hand Total");
X		mvaddstr(7, 20, "-----  -----");
X		mvaddstr(8, 6, "Overall Total");
X		mvaddstr(9, 15, "Games");
X		mvaddstr(11, 2, "p: pick");
X		mvaddstr(12, 2, "u: use #");
X		mvaddstr(13, 2, "d: discard #");
X		mvaddstr(14, 2, "w: toggle window");
X		mvaddstr(11, 21, "q: quit");
X		mvaddstr(12, 21, "o: order hand");
X		mvaddstr(13, 21, "s: save");
X		mvaddstr(14, 21, "r: reprint");
X	}
X	stdscr = Board;
X}
X
Xinit_ui ()
X{
X	initscr();
X# ifdef attron
X#	define	CA	cursor_address
X# endif
X	if (!CA) {
X		printf("Sorry.  Need cursor addressing to play mille\n");
X		exit(-1);
X	}
X	delwin(stdscr);
X	stdscr = Board = newwin(BOARD_Y, BOARD_X, 0, 0);
X	Score = newwin(SCORE_Y, SCORE_X, 0, 40);
X	Miles = newwin(MILES_Y, MILES_X, 17, 0);
X#ifdef attron
X	idlok(Board, TRUE);
X	idlok(Score, TRUE);
X	idlok(Miles, TRUE);
X#endif
X	leaveok(Score, TRUE);
X	leaveok(Miles, TRUE);
X	clearok(curscr, TRUE);
X	crmode();
X	noecho();
X}
X
XError (string, arg)
Xchar *string;
X{
X	stdscr = Score;
X	mvprintw (Score, ERR_Y, ERR_X, string, arg);
X	clrtoeol ();
X	stdscr = Board;
X}
X
Xfinish_ui ()
X{
X	mvcur(0, COLS - 1, LINES - 1, 0);
X	endwin();
X}
X
Xupdate_ui ()
X{
X	refresh ();
X}
X
XBeep ()
X{
X	putchar ('\007');
X}
X
XCARD
Xgetcard()
X{
X	reg char	c, c1;
X
X	for (;;) {
X		while ((c = readch()) == '\n' || c == '\r' || c == ' ')
X			continue;
X		if (islower(c))
X			c = toupper(c);
X		if (c == _tty.sg_kill || c == _tty.sg_erase)
X			return -1;
X		addstr(unctrl(c));
X		clrtoeol();
X		switch (c) {
X		  case '1':	case '2':	case '3':
X		  case '4':	case '5':	case '6':
X			c -= '0';
X			break;
X		  case '0':	case 'P':	case 'p':
X			c = 0;
X			break;
X		  default:
X			putchar('');
X			addch('\b');
X			if (!isprint(c))
X				addch('\b');
X			c = -1;
X			break;
X		}
X		refresh();
X		if (c >= 0) {
X			while ((c1=readch()) != '\r' && c1 != '\n' && c1 != ' ')
X				if (c1 == _tty.sg_kill)
X					return -1;
X				else if (c1 == _tty.sg_erase) {
X					addch('\b');
X					clrtoeol();
X					refresh();
X					goto cont;
X				}
X				else
X					write(0, "", 1);
X			return c;
X		}
Xcont:		;
X	}
X}
X
X
X/*
X *	Get a yes or no answer to the given question.  Saves are
X * also allowed.  Return TRUE if the answer was yes, FALSE if no.
X */
Xgetyn(prompt)
Xreg char	*prompt; {
X
X	reg char	c;
X
X	Saved = FALSE;
X	for (;;) {
X		leaveok(Board, FALSE);
X		mvaddstr(MOVE_Y, MOVE_X, prompt);
X		clrtoeol();
X		refresh();
X		switch (c = readch()) {
X		  case 'n':	case 'N':
X			addch('N');
X			refresh();
X			leaveok(Board, TRUE);
X			return FALSE;
X		  case 'y':	case 'Y':
X			addch('Y');
X			refresh();
X			leaveok(Board, TRUE);
X			return TRUE;
X		  case 's':	case 'S':
X			addch('S');
X			refresh();
X			Saved = save();
X			continue;
X		  default:
X			addstr(unctrl(c));
X			refresh();
X			putchar('');
X			break;
X		}
X	}
X}
X
Xreadch()
X{
X	reg int		cnt;
X	static char	c;
X
X	for (cnt = 0; read(0, &c, 1) <= 0; cnt++)
X		if (cnt > 100)
X			exit(1);
X	return c;
X}
X
X
Xgetmove()
X{
X	reg char	c, *sp;
X	static char	moveprompt[] = ">>:Move:";
X#ifdef EXTRAP
X	static bool	last_ex = FALSE;	/* set if last command was E */
X
X	if (last_ex) {
X		undoex();
X		prboard();
X		last_ex = FALSE;
X	}
X#endif
X	for (;;) {
X		stand(MOVE_Y, MOVE_X, moveprompt);
X		clrtoeol();
X		move(MOVE_Y, MOVE_X + sizeof moveprompt);
X		leaveok(Board, FALSE);
X		refresh();
X		while ((c = readch()) == _tty.sg_kill || c == _tty.sg_erase)
X			continue;
X		if (islower(c))
X			c = toupper(c);
X		if (isprint(c) && !isspace(c)) {
X			addch(c);
X			refresh();
X		}
X		switch (c)
X		{
X		  case 'P':		/* Pick */
X			Movetype = M_DRAW;
X			goto ret;
X		  case 'U':		/* Use Card */
X		  case 'D':		/* Discard Card */
X			if ((Card_no = getcard()) < 0)
X				break;
X			Movetype = (c == 'U' ? M_PLAY : M_DISCARD);
X			goto ret;
X		  case 'O':		/* Order */
X			Order = !Order;
X			Movetype = M_ORDER;
X			goto ret;
X		  case 'Q':		/* Quit */
X			rub();		/* Same as a rubout */
X			break;
X		  case 'W':		/* WIndow toggle */
X			WIndow = nextwin(WIndow);
X			newscore();
X			prscore(TRUE);
X			wrefresh(Score);
X			break;
X		  case 'R':		/* Redraw screen */
X		  case CTRL('L'):
X			clearok(curscr, TRUE);
X			newboard();
X			prboard();
X			break;
X		  case 'S':		/* Save game */
X			On_exit = FALSE;
X			save();
X			break;
X		  case 'E':		/* Extrapolate */
X#ifdef EXTRAP
X			if (last_ex)
X				break;
X			Finished = TRUE;
X			if (WIndow != W_FULL)
X				newscore();
X			prscore(FALSE);
X			wrefresh(Score);
X			last_ex = TRUE;
X			Finished = FALSE;
X#else
X			error("%c: command not implemented", c);
X#endif
X			break;
X		  case '\r':		/* Ignore RETURNs and	*/
X		  case '\n':		/* Line Feeds		*/
X		  case ' ':		/* Spaces		*/
X		  case '\0':		/* and nulls		*/
X			break;
X		  case 'Z':		/* Debug code */
X			if (geteuid() == ARNOLD) {
X				if (!Debug && outf == NULL) {
X					char	buf[40];
Xover:
X					mvaddstr(MOVE_Y, MOVE_X, "file: ");
X					clrtoeol();
X					leaveok(Board, FALSE);
X					refresh();
X					sp = buf;
X					while ((*sp = readch()) != '\n') {
X						if (*sp == _tty.sg_kill)
X							goto over;
X						else if (*sp == _tty.sg_erase) {
X							if (--sp < buf)
X								sp = buf;
X							else {
X								addch('\b');
X								if (*sp < ' ')
X								    addch('\b');
X								clrtoeol();
X							}
X						}
X						else
X							addstr(unctrl(*sp++));
X						refresh();
X					}
X					*sp = '\0';
X					leaveok(Board, TRUE);
X					if ((outf = fopen(buf, "w")) == NULL)
X						perror(buf);
X					setbuf(outf, 0);
X				}
X				Debug = !Debug;
X				break;
X			}
X			/* FALLTHROUGH */
X		  default:
X			error("unknown command: %s", unctrl(c));
X			break;
X		}
X	}
Xret:
X	leaveok(Board, TRUE);
X}
X
X
X# define	COMP_STRT	20
X# define	CARD_STRT	2
X
Xprboard() {
X
X	reg PLAY	*pp;
X	reg int		i, j, k, temp;
X
X	for (k = 0; k < 2; k++) {
X		pp = &Player[k];
X		temp = k * COMP_STRT + CARD_STRT;
X		for (i = 0; i < NUM_SAFE; i++)
X			if (pp->safety[i] == S_PLAYED) {
X				mvaddstr(i, temp, C_name[i + S_CONV]);
X				if (pp->coups[i])
X					mvaddch(i, temp - CARD_STRT, '*');
X			}
X		mvprintw(14, temp, C_fmt, C_name[pp->battle]);
X		mvprintw(16, temp, C_fmt, C_name[pp->speed]);
X		for (i = C_25; i <= C_200; ) {
X			reg char	*name;
X			reg int		end;
X
X			name = C_name[i];
X			temp = k * 40;
X			end = pp->nummiles[i++];
X			for (j = 0; j < end; j++)
X				mvwaddstr(Miles, i, (j << 2) + temp, name);
X		}
X	}
X	prscore(TRUE);
X	temp = CARD_STRT;
X	pp = &Player[PLAYER];
X	for (i = 0; i < HAND_SZ; i++)
X		mvprintw(i + 6, temp, C_fmt, C_name[pp->hand[i]]);
X	mvprintw(6, COMP_STRT + CARD_STRT, "%2d", Topcard - Deck);
X	mvprintw(8, COMP_STRT + CARD_STRT, C_fmt, C_name[Discard]);
X	if (End == 1000) {
X		static char	ext[] = "Extension";
X
X		stand(EXT_Y, EXT_X, ext);
X	}
X	wrefresh(Board);
X	wrefresh(Miles);
X	wrefresh(Score);
X}
X
X/*
X *	Put str at (y,x) in standout mode
X */
Xstand(y, x, str)
Xreg int		y, x;
Xreg char	*str; {
X
X	standout();
X	mvaddstr(y, x, str);
X	standend();
X	return TRUE;
X}
X
Xprscore(for_real)
Xreg bool	for_real; {
X
X	reg PLAY	*pp;
X	reg int		x;
X	reg char	*Score_fmt = "%4d";
X
X	stdscr = Score;
X	for (pp = Player; pp < &Player[2]; pp++) {
X		x = (pp - Player) * 6 + 21;
X		mvprintw(1, x, Score_fmt, pp->mileage);
X		mvprintw(2, x, Score_fmt, pp->safescore);
X		if (pp->safescore == 400)
X			mvaddstr(3, x + 1, "300");
X		else
X			mvaddch(3, x + 3, '0');
X		mvprintw(4, x, Score_fmt, pp->coupscore);
X		if (WIndow == W_FULL || Finished) {
X#ifdef EXTRAP
X			if (for_real)
X				finalscore(pp);
X			else
X				extrapolate(pp);
X#else
X			finalscore(pp);
X#endif
X			mvprintw(11, x, Score_fmt, pp->hand_tot);
X			mvprintw(13, x, Score_fmt, pp->total);
X			mvprintw(14, x, Score_fmt, pp->games);
X		}
X		else {
X			mvprintw(6, x, Score_fmt, pp->hand_tot);
X			mvprintw(8, x, Score_fmt, pp->total);
X			mvprintw(9, x, Score_fmt, pp->games);
X		}
X	}
X	stdscr = Board;
X}
X
XFlushInput ()
X{
X	raw();	/* Flush input */
X	noraw();
X
X}
END_OF_curses_ui.c
if test 10994 -ne `wc -c <curses_ui.c`; then
    echo shar: \"curses_ui.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f drawcard.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"drawcard.c\"
else
echo shar: Extracting \"drawcard.c\" \(9034 characters\)
sed "s/^X//" >drawcard.c <<'END_OF_drawcard.c'
X/*
X * drawcard.c
X *
X * display cards on the table
X */
X
X# include	"mille.h"
X# include	"ui.h"
X# include	"card.h"
X# include	"background.h"
X
Xstruct card_init {
X	char	*bits;
X	char	*mask;
X	int	color;
X};
X
Xextern char	go_bits[], go_mask_bits[];
Xextern char	stop_bits[], stop_mask_bits[];
Xextern char	right_bits[], right_mask_bits[];
Xextern char	speed_bits[], speed_mask_bits[];
Xextern char	end_bits[], end_mask_bits[];
Xextern char	accident_bits[], accident_mask_bits[];
Xextern char	repairs_bits[], repairs_mask_bits[];
Xextern char	ace_bits[], ace_mask_bits[];
Xextern char	flat_bits[], flat_mask_bits[];
Xextern char	spare_bits[], spare_mask_bits[];
Xextern char	puncture_bits[], puncture_mask_bits[];
Xextern char	out_bits[], out_mask_bits[];
Xextern char	gas_bits[], gas_mask_bits[];
Xextern char	extra_bits[], extra_mask_bits[];
Xextern char	miles_mask_bits[];
Xextern char	_25_bits[], _50_bits[], _75_bits[], _100_bits[], _200_bits[];
X
Xextern char	deck_both_bits[];
X
Xstruct card_init card_inits[NUM_CARDS] = {
X{	_25_bits,	miles_mask_bits,	BLUE_COLOR,	},
X{	_50_bits,	miles_mask_bits,	BLUE_COLOR,	},
X{	_75_bits,	miles_mask_bits,	BLUE_COLOR,	},
X{	_100_bits,	miles_mask_bits,	BLUE_COLOR,	},
X{	_200_bits,	miles_mask_bits,	BLUE_COLOR,	},
X{	out_bits,	out_mask_bits,		RED_COLOR,	},
X{	flat_bits,	flat_mask_bits,		RED_COLOR,	},
X{	accident_bits,	accident_mask_bits,	RED_COLOR,	},
X{	stop_bits,	stop_mask_bits,		RED_COLOR,	},
X{	speed_bits,	speed_mask_bits,	RED_COLOR,	},
X{	gas_bits,	gas_mask_bits,		GREEN_COLOR,	},
X{	spare_bits,	spare_mask_bits,	GREEN_COLOR,	},
X{	repairs_bits,	repairs_mask_bits,	GREEN_COLOR,	},
X{	go_bits,	go_mask_bits,		GREEN_COLOR,	},
X{	end_bits,	end_mask_bits,		GREEN_COLOR,	},
X{	extra_bits,	extra_mask_bits,	BLUE_COLOR,	},
X{	puncture_bits,	puncture_mask_bits,	BLUE_COLOR,	},
X{	ace_bits,	ace_mask_bits,		BLUE_COLOR,	},
X{	right_bits,	right_mask_bits,	RED_COLOR,	},
X};
Xextern char	deck_red_bits[], deck_blue_bits[], deck_mask_bits[];
X
Xextern char	blank_bits[];
X
Xstruct card cards[NUM_CARDS];
X
Xstruct card backside;
Xstruct card eraseCard;
X
X
Xbw_init_cards()
X{
X	int	i;
X	Pixmap	bits, mask;
X	long	bits_p, mask_p, fill_p;
X
X	setbuf(stderr, NULL);
X	XSetFillStyle(dpy, cheap_gc, FillStippled);
X	XSetFunction(dpy, cheap_gc, GXcopy);
X	XSetTSOrigin(dpy, cheap_gc, 0, 0);
X	
X	eraseCard.bits = XCreatePixmap(dpy, xwindow, WIDTH, HEIGHT, 1);
X	bits = XCreateBitmapFromData (dpy, xwindow, blank_bits, WIDTH, HEIGHT);
X	bits_p = WhitePixel(dpy, screen);
X	
X	XSetForeground(dpy, cheap_gc, bits_p);
X	XSetStipple(dpy, cheap_gc, bits);
X	XFillRectangle (dpy, eraseCard.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X
X	XFreePixmap(dpy, bits);
X	
X	fill = XCreateBitmapFromData (dpy, xwindow, fill_bits, WIDTH, HEIGHT);
X	fill_p = WhitePixel(dpy, screen);
X	mask_p = bits_p = BlackPixel(dpy, screen);
X
X	fprintf(stderr, "Building pixmaps, please wait ");
X	
X	for (i = 0; i < (NUM_CARDS - 1); i++) {
X		mask = XCreateBitmapFromData (dpy, xwindow, card_inits[i].mask, WIDTH, HEIGHT);
X		
X		bits = XCreateBitmapFromData (dpy, xwindow, card_inits[i].bits, WIDTH, HEIGHT);
X
X		cards[i].bits = XCreatePixmap(dpy, xwindow, WIDTH, HEIGHT, 1);
X		
X		XCopyArea(dpy, eraseCard.bits, cards[i].bits, cheap_gc,
X			  0, 0, WIDTH, HEIGHT, 0, 0);
X		
X		XSetForeground(dpy, cheap_gc, fill_p);
X		XSetStipple(dpy, cheap_gc, fill);
X		XFillRectangle (dpy, cards[i].bits, cheap_gc, 0, 0,
X				WIDTH, HEIGHT);
X		
X		XSetForeground(dpy, cheap_gc, bits_p);
X		XSetStipple(dpy, cheap_gc, bits);
X		XFillRectangle (dpy, cards[i].bits, cheap_gc, 0, 0,
X				WIDTH, HEIGHT);
X		
X		XSetForeground(dpy, cheap_gc, mask_p);
X		XSetStipple(dpy, cheap_gc, mask);
X		XFillRectangle (dpy, cards[i].bits, cheap_gc, 0, 0,
X				WIDTH, HEIGHT);
X		XFreePixmap(dpy, mask);
X		XFreePixmap(dpy, bits);
X		fprintf(stderr, ". ");
X	}
X	backside.bits = XCreatePixmap(dpy, xwindow, WIDTH, HEIGHT, 1);
X
X	bits = XCreateBitmapFromData (dpy, xwindow, deck_both_bits,
X				      WIDTH, HEIGHT);
X	bits_p = BlackPixel(dpy, screen);
X
X	XSetForeground(dpy, cheap_gc, fill_p);
X	XSetStipple(dpy, cheap_gc, fill);
X	XFillRectangle (dpy, backside.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X		
X	XSetForeground(dpy, cheap_gc, bits_p);
X	XSetStipple(dpy, cheap_gc, bits);
X	XFillRectangle (dpy, backside.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X
X	XFreePixmap(dpy, bits);
X	fprintf(stderr, ". done\n");
X}
Xinit_cards ()
X{
X	int	i;
X	Pixmap	bits, mask, bits1, bits2;
X	long	bits_p, mask_p, fill_p, bits1_p, bits2_p;
X
X	setbuf(stderr, NULL);
X	XSetFillStyle(dpy, cheap_gc, FillStippled);
X	XSetFunction(dpy, cheap_gc, GXcopy);
X	XSetTSOrigin(dpy, cheap_gc, 0, 0);
X	
X	eraseCard.bits = XCreatePixmap(dpy, xwindow, WIDTH, HEIGHT,
X				       DefaultDepth(dpy, screen));
X	bits = XCreateBitmapFromData (dpy, xwindow, blank_bits, WIDTH, HEIGHT);
X	bits_p = colorMap[GREY_COLOR].pixel;
X	
X	XSetForeground(dpy, cheap_gc, bits_p);
X	XSetStipple(dpy, cheap_gc, bits);
X	XFillRectangle (dpy, eraseCard.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X
X	XFreePixmap(dpy, bits);
X	
X	fill = XCreateBitmapFromData (dpy, xwindow, fill_bits, WIDTH, HEIGHT);
X	fill_p = colorMap[WHITE_COLOR].pixel;
X
X	fprintf(stderr, "Building pixmaps, please wait ");
X	
X	for (i = 0; i < (NUM_CARDS - 1); i++) {
X		mask = XCreateBitmapFromData (dpy, xwindow, card_inits[i].mask, WIDTH, HEIGHT);
X		mask_p = colorMap[card_inits[i].color].pixel;
X		
X		bits = XCreateBitmapFromData (dpy, xwindow, card_inits[i].bits, WIDTH, HEIGHT);
X		bits_p = colorMap[BLACK_COLOR].pixel;
X
X		cards[i].bits = XCreatePixmap(dpy, xwindow, WIDTH, HEIGHT,
X					      DefaultDepth(dpy, screen));
X
X		XCopyArea(dpy, eraseCard.bits, cards[i].bits, cheap_gc,
X			  0, 0, WIDTH, HEIGHT, 0, 0);
X		
X		XSetForeground(dpy, cheap_gc, fill_p);
X		XSetStipple(dpy, cheap_gc, fill);
X		XFillRectangle (dpy, cards[i].bits, cheap_gc, 0, 0,
X				WIDTH, HEIGHT);
X		
X		XSetForeground(dpy, cheap_gc, bits_p);
X		XSetStipple(dpy, cheap_gc, bits);
X		XFillRectangle (dpy, cards[i].bits, cheap_gc, 0, 0,
X				WIDTH, HEIGHT);
X		
X		XSetForeground(dpy, cheap_gc, mask_p);
X		XSetStipple(dpy, cheap_gc, mask);
X		XFillRectangle (dpy, cards[i].bits, cheap_gc, 0, 0,
X				WIDTH, HEIGHT);
X		
X		XFreePixmap(dpy, mask);
X		XFreePixmap(dpy, bits);
X		fprintf(stderr, ". ");
X	}
X	backside.bits = XCreatePixmap(dpy, xwindow, WIDTH, HEIGHT,
X				      DefaultDepth(dpy, screen));
X
X	bits = XCreateBitmapFromData (dpy, xwindow, deck_red_bits,
X				      WIDTH, HEIGHT);
X	bits_p = colorMap[RED_COLOR].pixel;
X
X	bits1 = XCreateBitmapFromData (dpy, xwindow, deck_blue_bits,
X				      WIDTH, HEIGHT);
X	bits1_p = colorMap[BLUE_COLOR].pixel;
X
X	bits2 = XCreateBitmapFromData (dpy, xwindow, deck_mask_bits,
X				      WIDTH, HEIGHT);
X	bits2_p = colorMap[BLACK_COLOR].pixel;
X
X	fill_p = colorMap[GREEN_COLOR].pixel;
X	
X	XCopyArea(dpy, eraseCard.bits, backside.bits, cheap_gc,
X		  0, 0, WIDTH, HEIGHT, 0, 0);
X		
X	XSetForeground(dpy, cheap_gc, fill_p);
X	XSetStipple(dpy, cheap_gc, fill);
X	XFillRectangle (dpy, backside.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X		
X	XSetForeground(dpy, cheap_gc, bits2_p);
X	XSetStipple(dpy, cheap_gc, bits2);
X	XFillRectangle (dpy, backside.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X
X	XSetForeground(dpy, cheap_gc, bits1_p);
X	XSetStipple(dpy, cheap_gc, bits1);
X	XFillRectangle (dpy, backside.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X
X	XSetForeground(dpy, cheap_gc, bits_p);
X	XSetStipple(dpy, cheap_gc, bits);
X	XFillRectangle (dpy, backside.bits, cheap_gc, 0, 0, WIDTH, HEIGHT);
X
X	XFreePixmap(dpy, bits);
X	XFreePixmap(dpy, bits1);
X	XFreePixmap(dpy, bits2);
X	fprintf(stderr, ". done\n");
X}
X
XdisplayCard (card, x, y)
Xint	card;
Xint	x, y;
X{
X	if (card < 0 || card >= NUM_CARDS) {
X		cardDisplay (&eraseCard, x, y);
X	} else {
X		cardDisplay (&cards[card], x, y);
X	}
X}
X
Xstruct displayed {
X	struct displayed	*next;
X	struct card		*card;
X	int			x, y;
X	int			flag;
X};
X
Xstatic struct displayed	*onscreen;
X
XcardDisplay (c, x, y)
Xstruct card	*c;
X{
X	int	i;
X	struct displayed	*d, *p;
X	char			*malloc ();
X
X	p = 0;
X	for (d = onscreen; d; d = d->next) {
X		if (d->x == x && d->y == y) {
X			if (d->card == c)
X				return;
X			if (p) {
X				p->next = d->next;
X				d->next = onscreen;
X				onscreen = d;
X			}
X			goto gotim;
X		}
X		p = d;
X	}
X	d = (struct displayed *) malloc (sizeof (struct displayed));
X	d->x = x;
X	d->y = y;
X	if (p)
X		p->next = d;
X	else
X		onscreen = d;
X	d->next = 0;
Xgotim:	;
X	d->card = c;
X	drawIm (c, x, y);
X}
X
Xstatic
XdrawIm (c, x, y)
Xstruct card	*c;
Xint		x, y;
X{
X	int	i;
X
X	XSetFunction(dpy, cheap_gc, GXcopy);
X	XCopyArea(dpy, c->bits, xwindow, cheap_gc, 0, 0, WIDTH, HEIGHT,
X		  x, y);
X}
X
XcardRedisplay (x, y, w, h)
X{
X	struct displayed	*d;
X
X	for (d = onscreen; d; d = d->next)
X		d->flag = 0;
X	redisplaybelow (onscreen, x, y, w, h);
X}
X
Xstatic
Xredisplaybelow (d, x, y, w, h)
Xstruct displayed	*d;
X{
X	int			x2, y2;
X
X	x2 = x + w;
X	y2 = y + h;
X	for (; d; d = d->next) {
X		if ((d->x <= x2 && x <= (d->x + WIDTH)) &&
X		    (d->y <= y2 && y <= (d->y + HEIGHT)))
X 		{
X		    	if (d->flag == 0) {
X				drawIm (d->card, d->x, d->y);
X				d->flag = 1;
X				redisplaybelow (d->next, d->x, d->y, WIDTH, HEIGHT);
X			}
X		}
X	}
X
X}
X
XcardEraseAll ()
X{
X	struct displayed	*d, *n;
X
X	for (d = onscreen; d; d = n) {
X		n = d->next;
X		free (d);
X	}
X	onscreen = 0;
X}
END_OF_drawcard.c
if test 9034 -ne `wc -c <drawcard.c`; then
    echo shar: \"drawcard.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f fill -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"fill\"
else
echo shar: Extracting \"fill\" \(12265 characters\)
sed "s/^X//" >fill <<'END_OF_fill'
X#define fill_width 100
X#define fill_height 150
Xstatic char fill_bits[] = {
X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X   0xf0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0x0f, 0xf0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0x3f, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf0, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf1, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfc, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfc, 0xff,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfc,
X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
X   0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xf1, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xf1, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xf0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0x3f, 0xf0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X   0xff, 0xff, 0xff, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X   0x00, 0x00, 0x00, 0x00, 0x00, 0xf0};
END_OF_fill
if test 12265 -ne `wc -c <fill`; then
    echo shar: \"fill\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 2 \(of 3\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 3 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330



More information about the Comp.sources.x mailing list