Filewatcher File Search
FTP Search
  
Directory 
  
Content Search 
   
pkg://yahtzee-1.0-188.src.rpm:41462/colour-yahtzee.tar.gz  info  downloads

colour-yahtzee/ 40755      0      0           0  6045011535  12011 5ustar  rootrootcolour-yahtzee/Makefile100644      0      0         340  6044605115  13525 0ustar  rootrootCFLAGS =

OBJ = computer.o main.o

LIBS = -lncurses -ltermcap

BIN = yahtzee

CFLAGS = -O2 -I/usr/include/ncurses

$(BIN): $(OBJ)
	cc -o $@ $(OBJ) -lncurses -ltermcap

clean:
	rm -f $(OBJ) $(BIN)

$(OBJ): yahtzee.h config.h
colour-yahtzee/README100644      0      0        1161  6045011535  12765 0ustar  rootroot
		Y A H T Z E E

This is Zorst's old Yahtzee game for Unix after a facelift and a few
fixes. It started when I noticed that there is a small security hole
in the standard Linux version (because it predates a working rename())
it uses system() to run mv. Thus if setuid games it can be used to get
access as games.

I fixed this by putting the rename back. The old one blew up with ^Z so
I switched to ncurses. Finally since it was ncurses I added colour to
the entire game.

The gameplay/logic hasn't changed a line - proof that its the game play
that counts not the flash graphics.

	Alan


Zorst's readme is in README.old
colour-yahtzee/computer.c100644      0      0       27634  6044605116  14147 0ustar  rootroot#include <stdio.h>
#include <string.h>
#include "yahtzee.h"

/*
 * (c)1992 by orest zborowski
 */

/*
**	if defined, DEBUG will cause the computer to print out a bunch of
**	information as its trying to decide what to do with its rolls
#define DEBUG
*/

extern int num_players;
extern Player players[];
extern int dice_values[];

#ifdef DEBUG

static char *upper_headers[NUM_UPPER] =
{
	"(a) 1",
	"(b) 2",
	"(c) 3",
	"(d) 4",
	"(e) 5",
	"(f) 6"
};

static char *lower_headers[NUM_LOWER] =
{
	"(g) 3 of a Kind",
	"(h) 4 of a Kind",
	"(i) Full House",
	"(j) Small Straight",
	"(k) Large Straight",
	"(l) Yahtzee",
	"(m) Chance",
};
#endif

static int numrolls = 0;

/*
**	questions are:
**		0:	none
**		1:	"what dice to roll again?"
**		2:	"where do you want to put that?"
*/

static struct
{
	int value;
	char rerolls[20];
} bc_table[NUM_FIELDS];


/*
**	depending on the dice rolls, we fill in the choice table.  if
**	for a particular choice the rolls are good, we put an appropriate
**	value in the table.  we also give which die need to be rerolled.
**
**	basically, the value system is based off the highest score possible
**	rolling the dice - all 6 (6 x 5 = 30).  so the best any of the upper
**	ranks can get is 30.
*/

static int throwaway[NUM_FIELDS] =
{
	4,      /* 1 */
	3,      /* 2 */
	2,      /* 3 */
	2,      /* 4 */
	1,      /* 5 */
	1,      /* 6 */
	3,      /* 3 of a kind */
	5,      /* 4 of a kind */
	4,      /* Full House */
	3,      /* Small straight */
	5,      /* Large straight */
	4,      /* Yahtzee */
	0,      /* Chance */
};

void
build_table(int player)
{
	int i;
	int j;
	int k;
	int d;
	int d2;
	int overflow;
	char foo[10];
#ifdef DEBUG
	char fred[1024];
#endif

	++numrolls;

	for (i = 0; i < NUM_FIELDS; ++i)
	{
		if (players[player].used[i])
			bc_table[i].value = -99;
		else
			bc_table[i].value = throwaway[i];

		strcpy(bc_table[i].rerolls, "1 2 3 4 5");
	}

/*
**	HANDLING UPPER SLOTS
*/

/*
**	first, we calculate the overflow of the upper ranks. that is, we
**	count all the points we have left over from our 3-of-all rule
**	if we get 3 of all in the upper ranks, we get a bonus, so if
**	we get 4 of something, that means a lower roll may be acceptable,
**	as long as we remain in the running for a bonus.  overflow can
**	be negative as well, in which case throwaway rolls are not
**	encouraged, and a high roll will get a nice boost
*/
	overflow = 0;

	for (i = 0; i < NUM_UPPER; ++i)
	{
		if (players[player].used[i])
			continue;

		overflow += (count(i+1) - 3) * (i+1);
	}

	for (i = 0; i < NUM_UPPER; ++i)
	{
		if (players[player].used[i])
			continue;

		bc_table[i].rerolls[0] = '\0';

		for (d = 0; d < 5; ++d)
		{
			if (dice_values[d] != i + 1)
			{
				sprintf(foo, "%d ", d + 1);

				strcat(bc_table[i].rerolls, foo);
			}
		}

/*
**	ok. now we set a base value on the roll based on its count and
**	how much it is worth to us.
*/
		bc_table[i].value = count(i+1) * 8;

/*
**	we have to play games with the bonus.
**	if we already have a bonus, then all free slots are candidates for
**		throwing away - we only do this when there are no more rolls
**	if this would get us a bonus, we make it very attractive
**
**	if we get 3 of everything on the top, we get a bonus. so...
**	if we have more than 3, we make the choice more attractive.
**	if less than 3, we make it less attractive.
**	if our overflow (any that are more than 3, summed up) covers up
**		our lack (if we only have 2, and there were 4 6's), we
**		dont penalize ourselves as much (since we're still in the
**		running for a bonus)
*/

		if (upper_total(player) >= 63)
		{
			if (numrolls > 2)
				bc_table[i].value += 10;
		}

		else if (upper_total(player) + count(i+1) * (i+1) >= 63)
		{
			bc_table[i].value += 35;
		}

		if (count(i+1) < 3)
		{
			if (overflow < (3 - count(i+1)) * (i+1))
				bc_table[i].value -= (3 - count(i+1)) * 2;
		}

		else if (count(i+1) > 3)
		{
			bc_table[i].value += (count(i+1) - 3) * 2;
		}
	}

/*
**	HANDLING LOWER SLOTS
*/

/*
**	first, we look for potential.  these values will be larger than the
**	single rolls but less than the made rolls (or those with higher value)
**
**	we also do such thinking only if we're not supposed to be looking just
**	for the best combinations...
*/
	if (numrolls < 3)
	{
/*
**	searching for large straight... here we chicken out and only look at
**	runs which might have possibilities
*/
		if (!players[player].used[H_LS])
		{
			for (i = 4; i > 0; --i)
			{
				d2 = find_straight(i, 0);

				if (d2 == 0)
					continue;

				bc_table[H_LS].value = (40 * i) / 5;

				bc_table[H_LS].rerolls[0] = '\0';

				for (d = 1; d < 7; ++d)
				{
					if (count(d) > 0)
					{
						if (d < d2 || d >= d2 + i)
							k = count(d);

						else
							k = count(d) - 1;

						if (k < 1)
							continue;

						for (j = 0; j < 5; ++j)
						{
							if (dice_values[j]!=d)
								continue;

							sprintf(foo, "%d ",
							  j + 1);

							strcat(
							 bc_table[H_LS].rerolls,
							  foo);

							if (!--k)
								break;
						}
					}
				}

				break;
			}
		}
/*
**	searching for small straight... here we chicken out and only look at
**	runs which might have possibilities
*/
		if (!players[player].used[H_SS])
		{
			for (i = 3; i > 0; --i)
			{
				d2 = find_straight(i, 0);

				if (d2 == 0)
					continue;

				bc_table[H_SS].value = (30 * i) / 4;

				bc_table[H_SS].rerolls[0] = '\0';

				for (d = 1; d < 7; ++d)
				{
					if (count(d) > 0)
					{
						if (d < d2 || d >= d2 + i)
							k = count(d);

						else
							k = count(d) - 1;

						if (k < 1)
							continue;

						for (j = 0; j < 5; ++j)
						{
							if (dice_values[j]!=d)
								continue;

							sprintf(foo, "%d ",
							  j + 1);

							strcat(
							 bc_table[H_SS].rerolls,
							  foo);

							if (!--k)
								break;
						}
					}
				}

				break;
			}
		}
/*
**	searching for 3 of a kind
*/
		if (!players[player].used[H_3])
		{
			for (i = 2; i > 0; --i)
			{
				for (d = 6; d > 0; --d)
				{
					if (count(d) >= i)
						break;
				}

				if (d == 0)
					continue;

				bc_table[H_3].rerolls[0] = '\0';

				bc_table[H_3].value = (d * i);

				for (j = 0; j < 5; ++j)
					if (dice_values[j] != d)
					{
						sprintf(foo, "%d ", j + 1);

						strcat(bc_table[H_3].rerolls,
						  foo);
					}

				break;
			}
		}
/*
**	searching for 4 of a kind
*/
		if (!players[player].used[H_4])
		{
			for (i = 3; i > 0; --i)
			{
				for (d = 6; d > 0; --d)
				{
					if (count(d) >= i)
						break;
				}

				if (d == 0)
					continue;

				bc_table[H_4].value = (d * i);

				bc_table[H_4].rerolls[0] = '\0';

				for (j = 0; j < 5; ++j)
					if (dice_values[j] != d)
					{
						sprintf(foo, "%d ", j + 1);

						strcat(bc_table[H_4].rerolls,
						  foo);
					}

				break;
			}
		}

/*
**	searching for yahtzee... we can't set the potential value too high
**	because if we fail, the value will be no better than 4 of a kind (or so)
**	so, we make scoring the same as for 3-4 of a kind (this is 5 of a kind!)
*/
		if (!players[player].used[H_YA])
		{
			for (i = 4; i > 0; --i)
			{
				for (d = 6; d > 0; --d)
				{
					if (count(d) >= i)
						break;
				}

				if (d == 0)
					continue;

				bc_table[H_YA].value = (d * i);

				bc_table[H_YA].rerolls[0] = '\0';

				for (j = 0; j < 5; ++j)
					if (dice_values[j] != d)
					{
						sprintf(foo, "%d ", j + 1);

						strcat(bc_table[H_YA].rerolls,
						  foo);
					}

				break;
			}
		}

/*
**	searching for full house
*/
		if (!players[player].used[H_FH])
		{
			for (i = 4; i > 0; --i)
			{
				d = find_n_of_a_kind(i, 0);

				if (d == 0)
					continue;

				for (j = i; j > 0; --j)
				{
					d2 = find_n_of_a_kind(j, d);

					if (d2 > 0)
						break;
				}

				if (j == 0)
					continue;

				bc_table[H_FH].rerolls[0] = '\0';

				bc_table[H_FH].value = (i * 24 + j * 36) / 6;

				for (i = 0; i < 5; ++i)
				{
					if (dice_values[i] != d &&
					  dice_values[i] != d2)
					{
						sprintf(foo, "%d ", i + 1);

						strcat(bc_table[H_FH].rerolls,
						  foo);
					}
				}

				break;
			}
		}
	}

/*
**	now we look hard at what we got
*/
	if (!players[player].used[H_SS] && find_straight(4, 0, 0))
	{
		d = find_straight(4, 0, 0);

		for (i = 0; i < 5; ++i)
			if (count(dice_values[i]) > 1 ||
			  dice_values[i] < d || dice_values[i] > d + 3)
			{
				sprintf(bc_table[H_SS].rerolls, "%d", i + 1);

				break;
			}

		bc_table[H_SS].value = 30;
	}

	if (!players[player].used[H_LS] && find_straight(5, 0, 0))
	{
		bc_table[H_LS].value = 40;

		bc_table[H_LS].rerolls[0] = '\0';
	}

	if (!players[player].used[H_CH] && numrolls > 2)
	{
		bc_table[H_CH].value = add_dice();

		if (bc_table[H_CH].value < 20)
			bc_table[H_CH].value /= 2;

		bc_table[H_CH].rerolls[0] = '\0';

		for (i = 0; i < 5; ++i)
			if (dice_values[i] < 4)
			{
				sprintf(foo, "%d ", i + 1);

				strcat(bc_table[H_CH].rerolls, foo);
			}
	}

	if (!players[player].used[H_FH])
	{
		d = find_n_of_a_kind(3, 0);

		if (d != 0)
		{
			if (find_n_of_a_kind(2, d))
			{
				bc_table[H_FH].value = 25;

				bc_table[H_FH].rerolls[0] = '\0';
			}
		}
	}

	if (!players[player].used[H_3])
	{
		d = find_n_of_a_kind(3, 0);

		if (d != 0)
		{
			bc_table[H_3].value = add_dice();

			bc_table[H_3].rerolls[0] = '\0';

			for (i = 0; i < 5; ++i)
				if (d != dice_values[i])
				{
					sprintf(foo, "%d ", i + 1);

					strcat(bc_table[H_3].rerolls, foo);
				}
		}
	}

	if (!players[player].used[H_4])
	{
		d = find_n_of_a_kind(4, 0);

		if (d != 0)
		{
/*
**	there will be a tie between 3 of a kind and 4 of a kind. we add 1
**	to break the tie in favor of 4 of a kind
*/
			bc_table[H_4].value = add_dice() + 1;

			bc_table[H_4].rerolls[0] = '\0';

			for (i = 0; i < 5; ++i)
				if (d != dice_values[i])
				{
					sprintf(foo, "%d ", i + 1);

					strcat(bc_table[H_4].rerolls, foo);
				}
		}
	}

	if (find_n_of_a_kind(5, 0))
	{

		if (players[player].used[H_YA] &&
		  players[player].score[H_YA] == 0)
			bc_table[H_YA].value = -99;	/* scratch */

		else
			bc_table[H_YA].value = 150;	/* so he will use it! */
		
	}


#ifdef DEBUG
	for (i = 0; i < NUM_FIELDS; ++i)
	{
		sprintf(fred, "%s : VALUE = %d REROLLS='%s'", 
		  (i < NUM_UPPER) ? upper_headers[i] : lower_headers[i - NUM_UPPER],
		  bc_table[i].value, bc_table[i].rerolls);

		query(-1, 0, fred, foo, sizeof(foo));
	}
#endif
}

void
bc_1(int player, char *buf, int bufsiz)
{
	int i;
	int best;
	int bestv;
#ifdef DEBUG
	char fred[1024];
#endif

	build_table(player);

	best = 0;

	bestv = -99;

	for (i = NUM_FIELDS-1; i >= 0; --i)
		if (bc_table[i].value >= bestv)
		{
			best = i;

			bestv = bc_table[i].value;
		}

#ifdef DEBUG
		sprintf(fred, "<<BEST>> %s : VALUE = %d REROLLS='%s'", 
		  (best < NUM_UPPER) ? upper_headers[best] : lower_headers[best - NUM_UPPER],
		  bc_table[best].value, bc_table[best].rerolls);

		query(-1, 0, fred, fred, sizeof(fred));
#endif

	strcpy(buf, bc_table[best].rerolls);
}

/*
**	what we do here is generate a table of all the choices then choose
**	the highest value one.  in case of a tie, we go for the lower choice
**	cause higher choices tend to be easier to better
*/

void
bc_2(int player, char *buf, int bufsiz)
{
	int i;
	int best;
	int bestv;
#ifdef DEBUG
	char fred[1024];
#endif

	numrolls = 2;				/* in case skipped middle */

	build_table(player);

	numrolls = 0;				/* for next time */

	best = 0;

	bestv = -99;

	for (i = NUM_FIELDS-1; i >= 0; --i)
		if (player % 2)
		{
			if (bc_table[i].value > bestv)
			{
				best = i;

				bestv = bc_table[i].value;
			}
		}

		else
		{
			if (bc_table[i].value >= bestv)
			{
				best = i;

				bestv = bc_table[i].value;
			}
		}

#ifdef DEBUG
		sprintf(fred, "<<BEST>> %s : VALUE = %d REROLLS='%s'", 
		  (best < NUM_UPPER) ? upper_headers[best] : lower_headers[best - NUM_UPPER],
		  bc_table[best].value, bc_table[best].rerolls);

		query(-1, 0, fred, fred, sizeof(fred));
#endif

	sprintf(buf, "%c", best + 'a');
}

void
be_computer(int player, int question, char *buf, int bufsiz)
{
	*buf = '\0';

	switch(question)
	{
		case 1:
			bc_1(player, buf, bufsiz);
			break;

		case 2:
			bc_2(player, buf, bufsiz);
			break;

		default:
			strcpy(buf, "Huh?");
			break;
	}
}
colour-yahtzee/config.h100644      0      0         606  6044605116  13511 0ustar  rootroot#ifndef _config_H_
#define _config_H_

#define SCOREDIR "/usr/games"
#define SCOREFNAME "yahtzee.sco"	/* must allow .L extension */

#define NUM_TOP_PLAYERS 10
#define COMPUTER_DELAY 4		/* sec */

#if A
/*
   your linux either:
   a) has no rename, or
   b) can't rename regular files if newname exists
*/
#define HAS_RENAME			/* comment out if you don't */
#endif

#endif /* _config_H_ */
colour-yahtzee/README.old100644      0      0         756  6044605115  13535 0ustar  rootrootthe game of yahtzee for linux (and other) flavors of un*x.
the file config.h contains some parameters you may wish to change.
use "yahtzee -h" to see the options available.

it is very simple as it was written a long time ago, but it is still
 enjoyable.
it requires the curses library (with my patch for the missing function)
it could use the new rename system call, but it has a bug in that it
 doesn't allow the rename of an old file to a new file where the new file
 already exists.

zorst
colour-yahtzee/main.c100644      0      0       53011  6044605116  13221 0ustar  rootroot#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <signal.h>
#include <ncurses/ncurses.h>
#include <stdarg.h>
#include "yahtzee.h"

/*
 * (c)1992 by orest zborowski
 */

static char *header = "Yahtzee  Version 1.00  (c)1992 by zorst";

extern errno;

#define NUM_ROLLS 3

static char *upper_headers[NUM_UPPER] =
{
	"(a) 1 [total of 1s]",
	"(b) 2 [total of 2s]",
	"(c) 3 [total of 3s]",
	"(d) 4 [total of 4s]",
	"(e) 5 [total of 5s]",
	"(f) 6 [total of 6s]"
};

static char *lower_headers[NUM_LOWER] =
{
	"(g) 3 of a Knd [total]",
	"(h) 4 of a Knd [total]",
	"(i) Full House [25]",
	"(j) Sm Straight [30]",
	"(k) Lg Straight [40]",
	"(l) Yahtzee [50]",
	"(m) Chance [total]",
};

int dice_values[5];

static char *dice[6][4] =
{
	"",
	"     ",
	"  o  ",
	"     ",

	"",
	"o    ",
	"     ",
	"    o",

	"",
	"o    ",
	"  o  ",
	"    o",

	"",
	"o   o",
	"     ",
	"o   o",

	"",
	"o   o",
	"  o  ",
	"o   o",

	"",
	"o   o",
	"o   o",
	"o   o",
};

Player players[MAX_NUMBER_OF_PLAYERS];

int num_players;

static int longest_header;

int dodelay = 0;

int numlines;

init(void)
{
	int i;
	int j;

	num_players = 0;

	srand(getpid());

	for (i = 0; i < MAX_NUMBER_OF_PLAYERS; ++i)
	{
		players[i].name[0] = '\0';
		players[i].finished = 0;
		players[i].comp = 0;

		for (j = 0; j < NUM_FIELDS; ++j)
		{
			players[i].score[j] = 0;
			players[i].used[j] = 0;
		}
	}

	for (i = 0; i < NUM_UPPER; ++i)
		if (strlen(upper_headers[i]) > longest_header)
			longest_header = strlen(upper_headers[i]);

	for (i = 0; i < NUM_LOWER; ++i)
		if (strlen(lower_headers[i]) > longest_header)
			longest_header = strlen(lower_headers[i]);

	srand(getpid());
}

static void fill_box(int x,int y, int h, int w)
{
	int dx,dy;
	for(dy=y; dy<y+h; dy++)
	{
		for(dx=x;dx<x+w;dx++)
		{
			mvaddch(dx,dy,' ');
		}
	}
}
	

/*
**	SCREEN ORGANIZATION:
**		line 0:		version header
**		line 1:		-----------
**		line 2:		edit window
**		line 3:		-----------
**		line 4:		player names
**		line 5-10	upper bank
**		line 11:	upper total
**		line 12:	Bonus
**		line 13-19:	lower bank
**		line 20:	lower total
**		line 21:	total
*/

setup_screen(void)
{
	int i;

	initscr();
	if (LINES < 23)
		abort("Not enough lines on the terminal");
	numlines = LINES;
	
	if(has_colors())
	{
		start_color();
		init_pair(COLOR_WHITE, COLOR_BLACK, COLOR_WHITE);
		init_pair(COLOR_GREEN, COLOR_BLACK, COLOR_GREEN);
		init_pair(COLOR_YELLOW, COLOR_WHITE, COLOR_GREEN);
		init_pair(COLOR_RED, COLOR_WHITE, COLOR_RED);
	}
	clear();
	wattron(stdscr, COLOR_PAIR(COLOR_GREEN));
	fill_box(0,0,COLS,LINES);
	mvaddstr(0, 9, header);
	move(1, 9);
	for (i = 9; i < COLS; ++i)
		addch(ACS_HLINE);
	refresh();
}

yend(void)
{
	attron(0);
	move(0, 0);
	clear();
	refresh();
	endwin();
}

abort(char *msg)
{
	yend();
	putchar('\n');
	printf(msg);
	putchar('\n');
	exit(1);
}

say(char *fmt, ...)
{
	va_list ap;
	char buf[200];

	va_start(ap, fmt);
	vsprintf(buf, fmt, ap);
	va_end(ap);

	fill_box(2,10,COLS-10,1);
	mvaddstr(2, 10, buf);
	refresh();
}

/*
**	we have a trick in here - we will accept a '?' as the first character of
**	a human answer.  in that case, we ask the computer for the die to roll
**	or the place to put it.  then the human can decide what to do.
*/
void
query(int player, int question, char *prompt, char *ans, int len)
{
	int i;
	char c;
	int xpos;
	char foo[2];

	xpos = 10 + strlen(prompt);
	if (player >= 0 && players[player].comp) 	/* for the computer */
	{
		fill_box(2,10,COLS-10,1);
		mvaddstr(2, 10, prompt);
		be_computer(player, question, ans, len);
		mvaddstr(2, xpos, ans);
		refresh();
		if (dodelay)
			sleep(COMPUTER_DELAY);		/* let person read it */
		return;
	}

	for (;;)
	{
		cbreak();
		noecho();

		fill_box(2,10,COLS-10,1);
		mvaddstr(2, 10, prompt);
		refresh();

		i = 0;

		for (;;)
		{
			c = getch();
			if (c == '\b' || c == 0x7f)
			{
				if (i == 0)
					continue;
				--i;
				--xpos;
				mvaddch(2, xpos, ' ');
				move(2, xpos);
			}

			else if (c == 10 || c == 13)
				break;

			else
			{
				if (i == len)
					write(1, "\007", 1);

				else
				{
					addch(c);
					ans[i] = c;
					++xpos;
					++i;
				}
			}
			refresh();
		}

		ans[i] = '\0';

		echo();
		nocbreak();

		if (ans[0] != '?')
			break;

/*
**	let the computer decide and then we can put that up for the human to
**	read
*/
		be_computer(player, question, ans, len);
		query(-1, 0, ans, foo, sizeof(foo));
	}
}

int
raw_roll_dice(void)
{
	return((rand() % 6) + 1);
}

int
roll_dice(int num)
{
	int val;
	int i;
	int j;

	if (num < 1 || num > 5)
		abort("Bad dice loc passed");
		
	attron(COLOR_PAIR(COLOR_GREEN));

	for (j = 0; j < 1; ++j)
	{
/*
		val = (random() % 6) + 1;
*/
		val = raw_roll_dice();

		for (i = 0; i < 4; ++i)
		{
			move(((num - 1) * 4) + i, 0);

			if (i == 2)
				printw("%d", num);
			else
				addch(' ');
			attroff(COLOR_PAIR(COLOR_GREEN));
			attron(COLOR_PAIR(COLOR_WHITE));
			if(i==0)
			{
				if(num==1)
					addch(ACS_ULCORNER);
				else
					addch(ACS_LTEE);
				addch(ACS_HLINE);
				addch(ACS_HLINE);
				addch(ACS_HLINE);
				addch(ACS_HLINE);
				addch(ACS_HLINE);
				if(num==1)
					addch(ACS_URCORNER);
				else
					addch(ACS_RTEE);
			}
			else
			{
				addch(ACS_VLINE);
				addstr(dice[val - 1][i]);
				addch(ACS_VLINE);
			}
			attroff(COLOR_PAIR(COLOR_WHITE));
			attron(COLOR_PAIR(COLOR_GREEN));
		}

		if (num == 5)		/* put the last +---+ tail */
		{
			mvaddch(20, 0, ' ');
			attroff(COLOR_PAIR(COLOR_GREEN));
			attron(COLOR_PAIR(COLOR_WHITE));
			addch(ACS_LLCORNER);
			addch(ACS_HLINE);
			addch(ACS_HLINE);
			addch(ACS_HLINE);
			addch(ACS_HLINE);
			addch(ACS_HLINE);
			addch(ACS_LRCORNER);
			attroff(COLOR_PAIR(COLOR_WHITE));
			attron(COLOR_PAIR(COLOR_GREEN));
		}
	}
	refresh();
	return (val);
}

int
upper_total(int num)
{
	int val;
	int i;

	val = 0;

	for (i = 0; i < NUM_UPPER; ++i)
		val += players[num].score[i];

	return (val);
}

int
lower_total(int num)
{
	int val;
	int i;

	val = 0;

	for (i = 0; i < NUM_LOWER; ++i)
		val += players[num].score[i + NUM_UPPER];

	return (val);
}

int
total_score(int num)
{
	int upper_tot;
	int lower_tot;
	int i;

	upper_tot = 0;
	lower_tot = 0;

	lower_tot = lower_total(num);
	upper_tot = upper_total(num);

	if (upper_tot >= 63)
		upper_tot += 35;

	return (upper_tot + lower_tot);
}

void
show_player(int num, int field)
{
	int i;
	int line;
	int upper_tot;
	int lower_tot;
	int xpos;

	xpos = 10 + longest_header + (num * MAX_NAME_LENGTH);

	for (i = 0; i < NUM_FIELDS; ++i)
	{
		if (i == field || field == -1)
		{
			line = 5 + i;

			if (i >= NUM_UPPER)
				line += 2;

			move(line, xpos);

			if (players[num].used[i])
				printw(" %4d", players[num].score[i]);

			else
				addstr("     ");
		}
	}

	upper_tot = upper_total(num);
	lower_tot = lower_total(num);

	move(12, xpos);

	if (upper_tot >= 63)
	{
		printw("+%4d", 35);
		upper_tot += 35;
	}
	else
		addstr("    ");

	mvprintw(11, xpos, "(%4d)", upper_tot);
	mvprintw(20, xpos, "(%4d)", lower_tot);
	mvprintw(21, xpos, "[%4d]", upper_tot + lower_tot);

	refresh();
}

void
setup_board(void)
{
	int i;
	int j;

	move(3, 9);
	for (i = 9; i < COLS; ++i)
		addch(ACS_HLINE);

	for (i = 0; i < NUM_UPPER; ++i)
		mvaddstr(i+5, 9, upper_headers[i]);

	move(11, 9);
	attron(A_UNDERLINE|COLOR_PAIR(COLOR_YELLOW));
	addstr(" Upper Total");
	move(12, 9);
	addstr(" Bonus");
	attroff(A_UNDERLINE|COLOR_PAIR(COLOR_YELLOW));
	attron(COLOR_PAIR(COLOR_GREEN));

	for (i = 0; i < NUM_LOWER; ++i)
		mvaddstr(i+13, 9, lower_headers[i]);

	move(20, 9);
	attron(A_UNDERLINE|COLOR_PAIR(COLOR_YELLOW));
	addstr(" Lower Total");
	move(21, 9);
	addstr(" Grand Total");
	attroff(A_UNDERLINE|COLOR_PAIR(COLOR_YELLOW));
	attron(COLOR_PAIR(COLOR_GREEN));

	for (j = 0; j < num_players; ++j)
	{
		for (i = 4; i < 22; ++i)
			mvaddch(i, 9 + longest_header + (j * MAX_NAME_LENGTH),
				ACS_VLINE);
	}

	for (i = 0; i < num_players; ++i)
	{
		mvaddstr(4, 10 + longest_header + (i * MAX_NAME_LENGTH),
			 players[i].name);
		show_player(i, -1);
	}

	refresh();
}

int
count(int val)
{
	int i;
	int num;

	num = 0;

	for (i = 0; i < 5; ++i)
		if (dice_values[i] == val)
			++num;

	return (num);
}

int
find_n_of_a_kind(int n, int but_not)
{
	int val;
	int i;
	int j;

	for (i = 0; i < 5; ++i)
	{
		if (dice_values[i] == but_not)
			continue;

		if (count(dice_values[i]) >= n)
			return (dice_values[i]);
	}

	return (0);
}

int
find_straight(int run, int notstart, int notrun)
{
	int i;
	int j;

	for (i = 1; i < 7; ++i)
	{
		if (i >= notstart && i < notstart + notrun)
			continue;

		for (j = 0; j < run; ++j)
			if (!count(i + j))
				break;

		if (j == run)
			return (i);
	}

	return (0);
}

int
find_yahtzee(void)
{
	int i;

	for (i = 1; i < 7; ++i)
		if (count(i) == 5)
			return (i);

	return (0);
}

int
add_dice(void)
{
	int i;
	int val;

	val = 0;

	for (i = 0; i < 5; ++i)
		val += dice_values[i];

	return (val);
}

int
showoff(int p, short so)
{
	move(4, 10 + longest_header + (p * MAX_NAME_LENGTH));

	if (so)
	{
		attroff(COLOR_PAIR(COLOR_GREEN));
		attron(A_STANDOUT);
	}
	else
		attron(COLOR_PAIR(COLOR_GREEN));

	addstr(players[p].name);

	if (so)
	{
		attroff(A_STANDOUT);
		attron(COLOR_PAIR(COLOR_GREEN));
	}
	refresh();
}

void
handle_play(int player)
{
	int i;
	char buf[50];
	char *cp;
	char *num;
	int done;
	int field;
	int dummy;
	int numroll;

	if (players[player].finished)	/* all finished */
		return;

	showoff(player, 1);

	say("Rolling for %s", players[player].name);

	for (i = 1; i < 6; ++i)
		dice_values[i - 1] = roll_dice(i);

	for (numroll = 1; numroll < NUM_ROLLS; ++numroll)
	{
		query(player, 1, "What dice to roll again (<RETURN> for none)? ",
		  buf, sizeof(buf));

		cp = buf;
		if (*cp == '\0')
			break;

		done = 0;

		for (;;)
		{
			num = cp;
			while (*cp != '\0' && *cp != ',' && *cp != '\t' && *cp != ' ')
				++cp;
			if (*cp == '\0')
				done = 1;
			*cp++ = '\0';
			i = atoi(num);
			if (i >= 1 && i <= 5)
				dice_values[i - 1] = roll_dice(i);
			if (done)
				break;
		}
	}

	query(player, 2, "Where do you want to put that? ", buf, sizeof(buf));
	done = 0;

	for (;;)
	{
		if (buf[0] < 'a' || buf[0] > 'm')
		{
			query(player, 2, "No good! Where do you want to put that? ",
			  buf, sizeof(buf));
			continue;
		}

		field = buf[0] - 'a';

		switch(field)
		{
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
				if (players[player].used[field])
				{
					query(player, 2, "Already used! Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				players[player].used[field] = 1;

				players[player].score[field] =
				  count(field + 1) * (field + 1);

				done = 1;

				show_player(player, field);

				break;

			case 6:
				if (players[player].used[field])
				{
					query(player, 2, "Already used! Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				players[player].used[field] = 1;

				if (find_n_of_a_kind(3, 0))
					players[player].score[field] =
					  add_dice();

				show_player(player, field);

				done = 1;

				break;

			case 7:
				if (players[player].used[field])
				{
					query(player, 2, "Already used! Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				players[player].used[field] = 1;

				if (find_n_of_a_kind(4, 0))
					players[player].score[field] =
					  add_dice();

				show_player(player, field);

				done = 1;

				break;

			case 8:
				if (players[player].used[field])
				{
					query(player, 2, "Already used! Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				players[player].used[field] = 1;

				dummy = find_n_of_a_kind(3, 0);

				if (dummy != 0)
				{
					if (find_n_of_a_kind(2, dummy))
						players[player].score[field] =
						  25;
				}

				show_player(player, field);

				done = 1;

				break;

			case 9:
				if (players[player].used[field])
				{
					query(player, 2, "Already used! Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				players[player].used[field] = 1;

				if (find_straight(4, 0, 0))
					players[player].score[field] = 30;

				show_player(player, field);

				done = 1;

				break;

			case 10:
				if (players[player].used[field])
				{
					query(player, 2, "Already used! Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				players[player].used[field] = 1;

				if (find_straight(5, 0, 0))
					players[player].score[field] = 40;

				show_player(player, field);

				done = 1;

				break;

			case 11:
/*
**	if the player scratched, the score for that field will be 0.
**	in that case, we don't allow it to be used any more.
*/
				if ((players[player].score[field] == 0 ||
				  !find_yahtzee()) &&
				  players[player].used[field] == 1)
				{
					query(player, 2, "Already used! (he he) Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				if (find_yahtzee())
					players[player].score[field] += 50;

				players[player].used[field] = 1;

				show_player(player, field);

				done = 1;

				break;

			case 12:
				if (players[player].used[field])
				{
					query(player, 2, "Already used! Where do you want to put that? ",
					  buf, sizeof(buf));

					break;
				}

				players[player].used[field] = 1;

				players[player].score[field] = add_dice();

				show_player(player, field);

				done = 1;

				break;
		}

		if (done)
			break;
	}

	showoff(player, 0);

	for (i = 0; i < NUM_FIELDS; ++i)
		if (!players[player].used[i])
			return;

	players[player].finished = 1;
}

void
play(void)
{
	int i;
	int topscore;
	int winner;

	for (;;)
	{
		for (i = 0; i < num_players; ++i)
			handle_play(i);

		for (i = 0; i < num_players; ++i)
			if (!players[i].finished)
				break;

		if (i == num_players)
			break;
	}

	topscore = -1;

	for (i = 0; i < num_players; ++i)
		if (total_score(i) > topscore)
		{
			topscore = total_score(i);

			winner = i;
		}

	say("The winner is %s", players[winner].name);
}

#define L_LOCK 0
#define L_UNLOCK 1

void
lock(char *fname, int type)
{
	char lockfile[200];
	struct stat statbuf;
	int i;
	FILE *fp;

	strcpy(lockfile, fname);

	strcat(lockfile, ".L");

	if (type == L_LOCK)
	{
		for (i = 1; ;++i)
		{
			stat(lockfile, &statbuf);

			if (errno == ENOENT)
				break;

			say("Waiting for lock... (%d)", i);

			sleep(1);
		}

		fp = fopen(lockfile, "w");

		fclose(fp);
	}

	else
	{
		unlink(lockfile);
	}
}

static int
write_score(FILE *fp, char *name, char *date, int score)
{
	return fprintf(fp, "%s\001%s\001%d\n", name, date, score);
}

static int
read_score(FILE *fp, char *name, char *date, int *score)
{
	char buf[200];
	char *sb, *se;

	if (!fgets(buf, sizeof(buf), fp))
		return -1;
	if (!(se = strchr(buf, '\001')))
		return -1;
	*se++ = '\0';
	strcpy(name, buf);
	if ((sb = se) > buf + sizeof(buf))
		return -1;
	if (!(se = strchr(sb, '\001')))
		return -1;
	*se++ = '\0';
	strcpy(date, sb);
	if ((sb = se) > buf + sizeof(buf))
		return -1;
	if (!(se = strchr(sb, '\n')))
		return -1;
	*se = '\0';
	*score = atoi(sb);
	return 0;
}

/*
**	we keep track of the top nnn persons.
*/
void
update_scorefile(void)
{
	FILE *fp;
	FILE *tp;
	char scorefile[200];
	char tmpfile[100];
	int numtop;
	int nump;
	int j;
	char name[20];
	char date[30];
	char *curdate;
	int score;
	int topscore;
	int tmptop;
	long clock;
	char scall[100];

	sprintf(tmpfile, "%s/y.%x", SCOREDIR, getpid());
	sprintf(scorefile, "%s/%s", SCOREDIR, SCOREFNAME);

	clock = time(0);

	curdate = (char *) ctime(&clock);

	if (strchr(curdate, '\n'))
		*strchr(curdate, '\n') = '\0';

	if ((tp = fopen(tmpfile, "w")) == NULL)
	{
		say("Can't update score file.");
		return;
	}

	lock(scorefile, L_LOCK);

	fp = fopen(scorefile, "r");

	for (j = 0; j < num_players; ++j)
		players[j].finished = -1;

	numtop = 0;
	nump = 0;
	topscore = 99999;

	for (;;)
	{
/*
**	get the next entry from the score file.  if there isn't any, then
**	we set the score to beat to -99 (everyone playing can beat it)
*/
		if (fp == NULL || read_score(fp, name, date, &score))
			score = -99;

/*
**	now, we search through all players to find out which ones have scores
**	higher than the one read (but less than topscore).  these will get
**	saved before the read entry does. now, we only do this if all players
**	haven't been accounted for.
*/
		for (; nump != num_players;)
		{
			tmptop = -99;

			for (j = 0; j < num_players; ++j)
				if (total_score(j) > tmptop &&
				  total_score(j) < topscore)
				{
					tmptop = total_score(j);
				}

			if (tmptop == -99)	/* everybody better */
				break;

			if (tmptop > score)
			{
				topscore = tmptop;

				for (j = 0; j < num_players; ++j)
					if (total_score(j) == tmptop)
					{
						if (numtop >= NUM_TOP_PLAYERS)
							break;

						write_score(tp,
						  players[j].name, curdate,
						  tmptop);

						players[j].finished = numtop;

						++nump;

						++numtop;
					}
			}

			else
				break;
		}

		if (score != -99 && numtop < NUM_TOP_PLAYERS)
		{
			write_score(tp, name, date, score);
			++numtop;
		}
/*
**	if we processed all top slots or processed all players (and there
**	was no score to beat), we stop.
*/
		if (numtop == NUM_TOP_PLAYERS ||
		  (nump == num_players && score == -99))
			break;
	}

	fclose(tp);
	if (fp)
		fclose(fp);

#ifdef HAS_RENAME
	if (rename(tmpfile, scorefile))
	{
		say("rename failed!");
		unlink(tmpfile);
	}
#else
	sprintf(scall, "mv %s %s", tmpfile, scorefile);
	system(scall);
#endif

	lock(scorefile, L_UNLOCK);
}

void
show_top_scores(void)
{
	FILE *fp;
	char scorefile[200];
	int i, j, k, score;
	char stuff[1024];
	char name[32], date[32];
	
	attron(COLOR_PAIR(COLOR_RED));
	fill_box(0,0,COLS,LINES);
	attroff(COLOR_PAIR(COLOR_RED));
	attron(COLOR_PAIR(COLOR_WHITE));
	fill_box(0,0,COLS,1);
	move(0,(COLS-strlen("Yahtzee Top Scores"))/2); 
	addstr("Yahtzee Top Scores");
	attroff(COLOR_PAIR(COLOR_WHITE));

	sprintf(scorefile, "%s/%s", SCOREDIR, SCOREFNAME);

	if ((fp = fopen(scorefile, "r")) == NULL)
	{
		yend();
		printf("Can't get at score file.\n");
		return;
	}

	j = 0;
	attron(COLOR_PAIR(COLOR_RED));

	for (i = 0; i < NUM_TOP_PLAYERS; ++i)
	{
		if (read_score(fp, name, date, &score))
			break;

		if (j >= numlines - 4)
		{
			move(23,(COLS-strlen("<Hit Return>"))/2);
			addstr("<Hit Return>");
			refresh();
			getch();
			j = 0;
		}

		for (k = 0; k < num_players; ++k)
			if (players[k].finished == i)
				break;
		fill_box(j+3,4,COLS-4,1);
		move(j+3,4);
		sprintf(stuff,"%3d : %-10s %s %d", i + 1, name, date, score);
		addstr(stuff);
		++j;
	}

	fclose(fp);
	move(23,(COLS-strlen("<Hit Return>"))/2);
	addstr("<Hit Return>");
	refresh();
	getch();
	yend();
}

void
calc_random(void)
{
	char nrollstr[10];
	int nroll;
	int table[NUM_FIELDS];
	int i;
	int j;

	printf ("How many times to you wish to roll? ");

	gets(nrollstr);
	nroll = atoi(nrollstr);

	printf("Generating...\n");

	for (i = 0; i < NUM_FIELDS; ++i)
		table[i] = 0;

	for (i = 0; i < nroll; ++i)
	{
		for (j = 0; j < 5; ++j)
			dice_values[j] = raw_roll_dice();

		for (j = 1; j <= 6; ++j)
			if (count(j) > 0)
				++table[j-1];

		if (find_n_of_a_kind(3, 0))
			++table[6];

		if (find_n_of_a_kind(4, 0))
			++table[7];

		j = find_n_of_a_kind(3, 0);

		if (j != 0 && find_n_of_a_kind(2, j))
			++table[8];

		if (find_straight(4, 0, 0))
			++table[9];

		if (find_straight(5, 0, 0))
			++table[10];

		if (find_yahtzee())
			++table[11];
	}

	printf("%-35s %10s %20s\n", "Results:", "Num Rolls", "Total");

	for (i = 0; i < NUM_FIELDS; ++i)
	{
		if (i < NUM_UPPER)
			printf("%-35s", upper_headers[i]);

		else
			printf("%-35s", lower_headers[i-NUM_UPPER]);

		printf(" %10d %20d\n", table[i],
		  (long) (table[i] * 100) / nroll);
	}
}

void
signal_trap()
{
	yend();
	exit(0);
}

set_signal_traps()
{
	signal(SIGHUP, signal_trap);
	signal(SIGINT, signal_trap);
	signal(SIGQUIT, signal_trap);
}

main(int argc, char **argv)
{
	char num[10];
	int i;
	int num_computers;
	short onlyshowscores = 0;

	while (--argc > 0)
	{
		if ((*++argv)[0] == '-')
		{
			switch ((*argv)[1])
			{
				case 's':
					onlyshowscores = 1;
					break;

				case 'n':
					printf("obsolete function - delay turned off by default.\n");
					break;

				case 'd':
					dodelay = 1;
					break;

				case 'r':
					calc_random();
					exit(0);

				default:
					printf("usage: yahtzee [-s] [-d] [-r]\n");
					printf("\t-s\tonly show scores\n");
					printf("\t-d\tcomputer move delay\n");
					printf("\t-r\tcalculate random die throws (debug)\n");
					exit(0);
			}
		}
	}

	if (!onlyshowscores)
	{
		printf("\n\nWelcome to the game of Yahtzee...\n\n");

		init();

		do
		{
			printf("How many wish to play (max of %d)? ",
			  MAX_NUMBER_OF_PLAYERS);
			fflush(stdout);

			fgets(num, 10, stdin);

			if (strchr(num, '\n'))
				*strchr(num, '\n') = '\0';

			num_players = atoi(num);

			if (num_players == 0)
				break;
		}
		while (num_players < 1 || num_players > MAX_NUMBER_OF_PLAYERS);

		for (i = 0; i < num_players; ++i)
		{
			printf("What is the name of player #%d ? ", i + 1);
			fflush(stdout);

			fgets(players[i].name, MAX_NAME_LENGTH, stdin);

			if (strchr(players[i].name, '\n'))
				*strchr(players[i].name, '\n') = '\0';
		}

		if (num_players == MAX_NUMBER_OF_PLAYERS)
		{
			printf("Boo hoo... I can't play...\n");
		}

		else
		{
			do
			{
				printf("How many computers to play (max of %d) ? ",
				  MAX_NUMBER_OF_PLAYERS - num_players);
				fflush(stdout);

				fgets(num, sizeof(num), stdin);

				num_computers = atoi(num);
			}
			while (num_computers < 0 ||
			  num_players + num_computers > MAX_NUMBER_OF_PLAYERS);

			for (i = 0; i < num_computers; ++i)
			{
				players[num_players].comp = 1;

				sprintf(players[num_players].name, "Mr. %c",
				  i + 'A');

				++num_players;
			}
		}

		if (num_players == 0)
		{
			printf("Well, why did you run this anyways???\n\n");

			exit(8);
		}
	}

	setup_screen();

	set_signal_traps();

	if (!onlyshowscores)
	{
		setup_board();

		play();

		update_scorefile();
	}

	getch();
	show_top_scores();

	exit(0);
}
colour-yahtzee/yahtzee.h100644      0      0         730  6044605116  13713 0ustar  rootroot#ifndef _yahtzee_H_
#define _yahtzee_H_

#include "config.h"

#define MAX_NUMBER_OF_PLAYERS 6
#define MAX_NAME_LENGTH 8
#define NUM_UPPER 6
#define NUM_LOWER 7
#define NUM_FIELDS (NUM_UPPER + NUM_LOWER)

#define H_3 6
#define H_4 7
#define H_FH 8
#define H_SS 9
#define H_LS 10
#define H_YA 11
#define H_CH 12

typedef struct
{
	char name[MAX_NAME_LENGTH + 1];
	short used[NUM_FIELDS];
	int score[NUM_FIELDS];
	int finished;
	int comp;
} Player;

#endif /* _yahtzee_H_ */
colour-yahtzee/yahtzee100755      0      0      216777  6044605121  13570 0ustar  rootrootd 臯-̀\	`D$4	`P萰Ȱ5P`[̀1 2 3 4 5%d %dU(WVSE}E‰MˉЉB
f8t"E0&E0M<<hTE4R`EUEE}lE‰MˉЉB
f8t)E@Pz PE@UE띐E}E‰MˉЉB
f8tE0DE}WEUB9t;E@Ph^EPP`EPE4R{`E몐E@PzUӉэ0
}W>~K=~7E0MΉˍ0<
<m}W;ËE@PUB‰ƒ>~7E0MΉˍ0<#<E@PE@Pn)‹E@9U}\E@PLUӉэ0]]؋}؉ލ0)ljE؋}؉<3)lj<
nE@P~VE@PUӉэ0]]؋}؉ލ0E؋}؉<3lj<
E6=E‰f|rE}aj}WE}u3E $E}}WE9EEE9E},}WE!}Wx}}tE}bE9UtAE@Ph^EP`EPh$`M}uE룐EME‰f|E}nj}WE}u@E)‰щȅ}=E}}W?E9EEE9E})}WE!}Wx}}tE}bE9UtAE@Ph^EP9`EPhx`M}uE룐E
ME‰f|E}E}~1}W9EMԐ}u
x}}=E}?E9Ut'E@Ph^EP	`EPhH`E뿐M0E‰f|E}E}~1}W9EMԐ}u
x}}=E}?E9Ut'E@Ph^EP	`EPhH`E뿐M0E‰f| E}E}~1}W9EMԐ}u
x}}=8<E}?E9Ut'E@Ph^EP	`EPh<H`E뿐M0E‰f|?E}.j}W'E}u}}}~3}W}WE}~MҐ}u
EUӍэщȿE}RE9Ut6E9Ut'E@Ph^EP`EPh`E밐ME‰f|jjj(jjjEE}wE<Wk-E9UEU9*E@Phbh`E뎐E‰f|u%jjjRt ($E‰f|"=~zP=PPЉ=PTE};E<'E@Ph^EP_EPhT`EE‰f|u<jjE}t%}WjtE‰f|uzjjE}tcE}CEU9t'E@Ph^EP_EPh_E뿐E‰f|jj*E}thx=E}DEU9t'E@Ph^EP>_EPh}_E뿐jjtXE‰f| t1E‰|Pu88e[^_]ÐUS]SPEEE}|RE09E#]]E0]M볐E4R]Sj_]]%cUS]SEEE}EtPE09E}#]]E0]NE09E#]]E0]MREaPh]S_]]Huh?UEEtt*HURURURJURURUR*hUR_
]Yahtzee  Version 1.00  (c)1992 by zorst(f) 6 [total of 6s](e) 5 [total of 5s](d) 4 [total of 4s](c) 3 [total of 3s](b) 2 [total of 2s](a) 1 [total of 1s](m) Chance [total](l) Yahtzee [50](k) Lg Straight [40](j) Sm Straight [30](i) Full House [25](h) 4 of a Knd [total](g) 3 of a Knd [total]o   o    oo      o       UWVSh_P
_1ېDXD\1ɉ}E@$fB
EA~``~@T0щȃ9hs0щȃh9~ĻXp0щȃ9hs0щȃh9~s_P_e[^_]ÐUWVSuE9}I]E9}0ǐVSlRbtj lR,YC9|FEE9|e[^_]Not enough lines on the terminalUSX=hh=dhtsrt7pjjjqjjjqjjj	q$jjjplRmhlR"hRRjjj	jlRatj<RlRYj	jlR`	(9~RlRWC9lRU]]ÐUjlR/"jjlRk`lRllRcU_]ÐU	`9	`wj
h	`_
	`UR_	`9	`wj
h	`M_	
	`jx_USEPUR8S
_jPj
jNj
jlR_tjSlRgXlRtT4]UWVS0}Ѝx	}UR4jPj
jj
jlR^tjURlRWURURURURyWjlR^tjURlRW lRS=j_v%&jPj
jj
jlR.^tjURlRWlRS1lR`ÃtuItNOWjlR]tj lRTWjlR]R
t[
tV9uu!jhj_)PlRTUGFlRUR=UL$w%U:?u7URURURURjEPURjj$e[^_]ÐU(_B]Bad dice loc passed%dUWVS}Gvh_Rh
lQ/EE1dE1jDPlRE\uWhs~\j 
lQFSl`hPuR
lQSR
lQRR
lQRR
lQRR
lQR R
lQRuR
lQqRFR
lQQRjU2R
lQTR
lQ)Rl`hPCjjlRZtj 
lQQl`hPBR
lQQR
lQQR
lQ}Q R
lQgQR
lQTQR
lQAQR
lQ.Ql` hPE}llRNEe[^_]ÐUE11ҍ@H$B~ȉ]ÐUE11ҍ@H<B~ȉ]ÐUVS]SS>~#e[^] %4d+%4d    (%4d)[%4d]UWVSU
hE1ۍR9]t}uOC~CURPlRXf
tV$RhXjhlR}QC~URËURƋURjlRRX>~j#hX# jhlR
QShURjXVhURjX PhURjXlRLe[^_] Upper Total Bonus Lower Total Grand TotalUWVSj	jlRvW	9~!RlRyNC9j	SlR1Wtj,RlRPC
~j	jlRVhlRjh^lRO j	jlRVjhklROl`hPM 
j	SlRVtj$RlRWOC~j	jlRJVhlRjhrlRO j	jlRVjhlRNl`hP1 95~O<	hPSlRUtRlRLC~F9519~T
hPjlR`UtjVlR=NjS2`C9lR3Je[^_]ÐUS]19u@9~]]ÐUWVS}9;tR9E
9~1e[^_]ÐUWVS}U9|	E9|/19}PUKUtC9|9uF~1e[^_]ÐUSSu
C~1]]ÐU19~]ÐUVS]fu
hPjlRSft l`hPhlRj[PlRBLftl`hPlR0He[^]Rolling for %sWhat dice to roll again (<RETURN> for none)? Where do you want to put that? No good! Where do you want to put that? Already used! Where do you want to put that? Already used! (he he) Where do you want to put that? U@WVSUR0zjR7Ph
$&V2F~ỦUĐj2URh$jURb]ă}tzE؀8t+8,t!8	t8 tC;t;,t
;	t; u;uECP_ƍFwV}tGdj2]ShJ$jURE]E<vj2URhj$jURܐE̍p$h&&&&&&&&8'x''((x((URwfx
<f@
^SDÉD$EVUR,WURsfx
f@
jj$URsfx
f@
jjURsfx
lf@
jjPjuD$hURsfx
f@
jjj&D$URsfx
f@
jjjBD$(UR|$t	uu!f|s
uj2URh$`KtUR2URfDŽpVSURsfx
t'j2URh$jUR/f@
D$VURE}jUR1URfx
tF~URǀ0e[^_]The winner is %sUWVS19~S"C919~1|Xt`C99u19~%S9~
SƉ߃C9ݍPh)e[^_].LWaiting for lock... (%d)wUWVS]UR8Vy_h_*VN_u_WV
_=<	`t!Shb*vj_CՐh{*Vm_P_V_[^_]%s%s%d
UURURURh++UR3_]ÐUWVS}URh8V_tujVm_ÃtdCVURn_ރ9wMjVE_Ãt<CVURF_ރ9w%j
V_ÃtV_1
,[^_]/usr/games%s/y.%xyahtzee.sco%s/%sCan't update score file.rmv %s %sUWVS_Ph,h%,V _h-,h,h9,8S_ j_88P_ j
P3_tj
 Q_h{*Vu_,uh?,FYjShhX,SE_01ۃ9~1DX`C9Dž(Dž$Dž0t,4PPP0QDž419~3S9~S9~SƃC9΃9419~w1S9uF(	LV QR,Q(0$A(``C9$9
4t3(	*4QPP,QM((
t$9
m4`,Q_0t0Q_8SPhZ,<VN_V_jS[^_]Yahtzee Top ScoresCan't get at score file.
<Hit Return>%3d : %-10s %s %dUWVSh
lQ
hQ
Qjjl`hP j
QjjPj
lQFjh}/
lQ?l`(h-,h,h9,8S"_hX,S_u"h/K_1h
lQ1PPPQgt9|IPj
lQEjh/
lQ>
lQ:
lQH1 =~1ҡ@90t`9|jPj_S;jS
lQxEQPPFVh/8S_4jS
lQ2>G	Q_Pj
lQEjh/
lQ=
lQ9 
lQGM[^_]How many times to you wish to roll? Generating...
TotalNum RollsResults:%-35s %10s %20s
%-35s %10d %20d
UHWVShX2%_]S_S_Eh}2	_DNy19u9~S~DC~jjtEjjtEjjÃtSjtEjjjtEjjjtE@tEF9u?h2h2h2h2_1@@
Qh2_LI}PQh2_F~e[^_]ÐU(jY_Uhh4j_hh4j_hh4j_]obsolete function - delay turned off by default.
usage: yahtzee [-s] [-d] [-r]
	-s	only show scores
	-d	computer move delay
	-r	calculate random die throws (debug)


Welcome to the game of Yahtzee...

How many wish to play (max of %d)? What is the name of player #%d ? Boo hoo... I can't play...
How many computers to play (max of %d) ? Mr. %cWell, why did you run this anyways???

UWVS]uw18-@<nt	<dt%C<rt,<su8ah4n_QDj_h4>_h44_h
5*_h#5 _j_KgfhL5_]jhr5_h	`_h<	`j
S_j
S_ tj
S_SR_tHw19~QCSh5|_h	`_h<	`jV_j
Ve_ tj
VV_`9=uh5*_]+Ph5_h	`_h<	`j
S7_S_ƃ|19}:@ǀ4SARh5PK_C9|Ƀ=uh6z_jC_fu
lQFAj_UE`U	P1]U0Pj@P_1]UPj@P_1]UEv]Ðt;	tUtult^hl@jIt3hl@jthl@jP?1]U@]U@ ]Uj@P_=|t$|ƀ|ƀ|ƀ1]U0Pw_v]ÐD]Ð1Ґ9txv]Uhl@P!_1]Uhlj@P_1]@B A$@@@UWVSu/EEu\\E>$tPMуhF><tj$MPMу@F	`Pu>.uj>V}_mu%j$Mj<Mу	`Bt0;
;P$FBuـ>.u*F	`PtBP$ ;]EF>*uMFfte9E|YzhuS ;}(;]E1Eu*}WU}MуUBmR$Et؀>t
F>s1e[^_]Uhl@jUR]U|ƀ|ǀƀ`<`0`4@G@F0Pj@Px_t1]Ð]U|ǀ`<H<@G@F0Pj@P_t1]Ð]U|ƀJ<0PjBP_t
1]Ð]U|ƀ|H0H40Rj@PM_t1]Ð]U|ƀ|ǀH<H0H40Rj@P_t1]Ð]U|ǀJ<0PjBP_t
1]Ð]U|ƀb<0PjBP:_t
1]Ð]U|ƀƀ`0`40Rj@P_t1]Ð]UM|PB9BwPR_B1]U WVSEEEEPEPj?_=pu+ t>@pxtPKxtP/@71fx~~(@,f<Xt	S	C@~9|ڋ
1fy~~"B,fXB0fXCA~9|塄fzfxffpVS|WP4|@je|@P_jEPj_1e[^_]U\\]UWVSxpt
jye=\u9|t+\hLBjj
|PwMPjEfz~XBzHEMA(MM< uM8 tB~H9Eu)zUt#zXuBzH9EuMyu
X19}|{MA(M< u`J=`M`9\*MA(Mt=X;|JzMȃ9u{R~@(D\ذ9BtBhl@P_|PB9Bw%PR=_	B|AEH9Z~ƃt!hl@jRVCPjj&18dhl@j8P9@(Dذ9BtBhl@P^|PB9Bw%PRA_
Bhl@jdP1hl@jP@(Dذ9BtBhl@P]|PB9Bw%PR菺_B9BtBhl@P]|PB9Bw %PR4_B|Cz9|!{Utǂ	
`=`%hl@jP|R\IPO`MA(M4=X:|JzMȃ9uzR~@(D\ذ9BtBhl@P]\|PB9Bw%PR_B|AEH9Z~ƃt!hl@jRZVCPjj-8dhl@j8P	@(Dذ9BtBhl@Pb[|PB9Bw%PR_
Bhl@jdP1hl@jPW@(Dذ9BtBhl@PZ|PB9Bw%PR__B9BtBhl@PWZ|PB9Bw %PR_B|Cz9|!{Utǂ	G9}|zUtBzH9E|zUtdzXt^9EuY|M}
ǀ|]CjSQP+|ǀEB~9EjM9
t]Efz~~I1f~z~%C(MMA(MGFz9|EB~9E|e[^_]UUu8t#dttR;]ÐR
]UWVS@(}E@(EE1BzH9}PM}9uD]M쐐zWtM9tEEFBzH9}	}9tċBz9jzWtx}tr1HEjMQ|WP)|Mǀhl@jP@zHE9~7}M}9u&ËUM9u~9tVMQ|WP)|MB~H9Eu+zUt%zXuBzH9Euxu
X9E*}lj}EEM1=XJ|zz}9R~@(D\ذ9BtBhl@PV|PB9Bw"%PRȲ_B|AEH9Z~ƃt!hl@jR
VCPjj'8dhl@j8P@(Dذ9BtBhl@PU|PB9Bw%PR_
Bhl@jdP?1hl@jP@(Dذ9BtBhl@P`T|PB9Bw%PR_B9BtBhl@PT|PB9Bw %PR贰_B|Cz9|!{Utǂ	}}}E}M9Ee[^_]U$WVS@(}E@(E1xWtFt=@z~5MM]Eܐ}9tEM9M|Ej}W|QP$|ǀhl@jPEBzH9E}}܋M܋1=XB|zz}9R~@(D\ذ9BtBhl@PQ|PB9Bw %PR覮_B|AEH9Z~ƃt!hl@jRVCPjj#8dhl@j8P@(Dذ9BtBhl@PP|PB9Bw%PR衭_
Bhl@jdP1hl@jP@(Dذ9BtBhl@P@P|PB9Bw%PR_B9BtBhl@PO|PB9Bw %PR蔬_B|Cz9|!{Utǂ	EEBzH9E}Pz9U}M9u"ӋuUE9]t9t@z9E\HE}9~"M< uM}9}~8 t@zHE܋M9~ }< uM܋M9M~8 t}9}q_WMQ|WP |M}hl@jPM< C
4=X@|zz}܉9|R~@(D\ذ9BtBhl@PM|PB9Bw%PR^_
B|	EH9Z~ƃt!hl@jRVCPjjF8dhl@j8PY@(Dذ9BtBhl@PL|PB9Bw%PRa_
Bhl@jdPqhl@jP@(Dذ9BtBhl@PL|PB9Bw%PR诨_	B9BtBhl@PK|PB9Bw %PRT_B|Cz9z{Ut!ǂ_H}܋M}M9x}܉}M9}M}WMQ|WP|M}}M9MMܐ}܋7=XB|JzMȃ9~R~@(D\ذ9BtBhl@P1J|PB9Bw%PR_B|AEH9Z~ƃt!hl@jR*VCPjj8dhl@j8P@(Dذ9BtBhl@P2I|PB9Bw%PR_
Bhl@jdP_1hl@jP'@(Dذ9BtBhl@PH|PB9Bw%PR/_B9BtBhl@P'H|PB9Bw %PRԤ_B|Cz9|!{Utǂ	E}M9EMM}܋M}M9t}M9~M}WMQ|WPm|M}}M9
MM}7=XF|JzMȃ9R~@(D\ذ9BtBhl@PF|PB9Bw%PRT_B|AEH9Z~ƃt!hl@jRVCPjj68dhl@j8PI@(Dذ9BtBhl@PE|PB9Bw%PRQ_
Bhl@jdP1hl@jP@(Dذ9BtBhl@PD|PB9Bw%PR蟡_B9BtBhl@PD|PB9Bw %PRD_B|Cz9|!{Utǂ	EE}9}M9M}+EP}MP
}9}~E)PMMCz9}'uƋU‹:>ECz9E|e[^_]USt=hl@jR|ǀǀJtg|ǀǀjjPj0|ǀǀhl@jPD|ǀǀR~9}g|jSPS|ǀhl@jP|@~9|jj|QP?|ǀǀ]]UWVS}8Bd5hl@j8PM1=XB|JzMȃ9~R~@(D\ذ9BtBhl@P1A|PB9Bw%PR_B|AEH9Z~ƃt!hl@jR*VCPjj8dhl@j8P@(Dذ9BtBhl@P2@|PB9Bw%PR_
Bhl@jdP_1hl@jP'@(Dذ9BtBhl@P?|PB9Bw%PR/_B9BtBhl@P'?|PB9Bw %PRԛ_B|Cz9|!{Utǂ	EOhl@jdPUl9hl@jWlP*PM1=XB|JzMȃ9~R~@(D\ذ9BtBhl@P=|PB9Bw%PR萚_B|AEH9Z~ƃt!hl@jRVCPjjv8dhl@j8P@(Dذ9BtBhl@P<|PB9Bw%PR葙_
Bhl@jdP1hl@jP@(Dذ9BtBhl@P0<|PB9Bw%PRߘ_B9BtBhl@P;|PB9Bw %PR脘_B|Cz9|!{Utǂ	EOhl@jPM1=XC|JzMȃ9R~@(D\ذ9BtBhl@P:|PB9Bw%PRq_
B|AEH9Z~ƃt!hl@jRVCPjjV8dhl@j8Pi@(Dذ9BtBhl@P9|PB9Bw%PRq_
Bhl@jdP1hl@jP@(Dذ9BtBhl@P9|PB9Bw%PR迕_B9BtBhl@P8|PB9Bw %PRd_B|Cz9|!{Utǂ	EOe[^_]US]`tFhl@jS`Pw$Pj-hl@jPDKuߋ]]US]jURURSm	S1]]UE9u@PJ]UWVSMI
M}Gg߉EG
M}G,Mf<HHE]ËG0H9E}G(M}G(EM}9t`MI,Mf<qu}W0frfq;Mq9}fq!}W0r9~frECMA0}x9E`MA,Q0}fzfxG}FA9Myt
A@}u}ffOffOfO
fH1e[^_]TERMUh<	`h	`hme_PLt@l]Ð1]UWVS}MY1A9>A92*"	t(w}
tK
tmtS؃)9:j MQqC9|MQO1ۃK1wjWg3PMQMyA(9<tqI,Mf<qu"MQ0frMfqOMq9}%fq1YMQ0r9~frMA(<CA9~1FMA69~NytjQMfYf11e[^_]UWVS}]uu
W}?;tFPCWtԀ;u)PCWtN~;u1e[^_]UWVS}]u}Q;tSRWt;u8&RWXt܉N1e[^_]U WVS}Uzu}uPJ_E1ɉމu9}]UB6)ȋr(A9MUZ6uv(uuKUB49܋u^4)9}[UUuF(UF(EMF19 +EUR9~CEuF4)9|19}]UB4ȋr(A9|UZ4"uF(44CUB69|u^6)9~[UUuF(UF(EMF19 +EUR9~KEuF6)9UR蹑_
ufFf9Az'f~4fF6f9A~~djjjjtWPP.t!POu}|@zPUB6PjjGߡpt$WpPsPi6t!P7OuuFPPjj'jUB6r4)@PVR@1e[^_]UWVSu>FN(VE9w09 t!˃}uuF(+4E 9vӃ}t;uV,z9E|f<zufuf4zuN0yV(+9}fy1e[^_]UMUA9}]ÐA,f<Pu1]ø]UEP|)@,Pf8t]Ð9~1]UWVSM]EU9}C֐Q,u
fBfBQ0tfyf<BfB@9|1e[^_]UWVS]M=uHW~Uؙ}GzEș}уtQSWP1e[^_]Up]Upj@~HPjjU\thl@j\Py=huhl@j`PU=txt@j0|@P_
]USU]M|/B9'|#B9fJfJ 1]]USEPURS_jSlR{]UVSuEPURS讘_jSV=[^]UWVSu]EPURWj_SVlRujWlR	[^_]UWVSu]EPURW_SVURujWURt[^_]UVSuURURS莗_jSV[^]U|D]U|u]ÐuGƀ|uƀ|8uG>uƀ|8uƂ|ML	Hy1]UVSuE~u|tFtF9VuF t	V|tuu	SE~$}|~c|~JRF$|u.jPR胉_P
u~ tVÃ|j|PR
_P脏_u	=<	`tš|u|uƀ|8uƂ	Hy|\uƂ|8uƂ|ƀ	Hy}	~!u|tUMF
VPFP
QtFP
QFPV}t؍e[^]UVSE|Xuj|PRO_Pƍ_u	=<	`tŋ|tu|uƀ|8uƂ	Hy|ƀ[8Suf{
tL|DHy|ƀ|ƀƀC
EPMQ|P)_P
i|\uƂ|8uƂ|ƀ	Hy|j|PR}_P_u	=<	`tš|u|uƀ|8uƂ	Hy…V|\uƂ	|8uƂ|ƀ	Hy؍e[^]UWVS++++++++-|+~_+:'#o<>v^#<##(thl@j(PHE0ЉÃ9]׾SM9$\͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂͂MAM
@E9][e[^_]US]S?)C1]]Got a segmentation violation signal, cleaning up and exiting
U}uhh	`0_ji_UWVS]uEPVπ_PSHh_|.	`u}<	`u@	`<	`|p0|
Hǀǀ@ƀ|ƀ|ǀƀ|ƀ|ƀ|ƀ|ƀ,t,P貸>jjBzPB~Pq#0jjPzR@~PI#‰|
HP@@11d=t[d{t7;}
QjhHP
QjVFQj"PCЃ
hGdd8uEEEj]Sj_E@EEjSj`_=lu,jVBzPB~)P:"lu	1
|e[^_]UUu1]Á=ds$dMHd1]Ð]U`u]Ðhl@j`P蹴ftXftxh1]USfEfMfUf~+9X| f|9x~f|9x$Ј%]]UWVSf}fuf]fMhf~9x~szqufhwffdw`fdwZxqufwHfwAfw:hl@jPPPPhPbPU1
e[^_]U@o]U1`t=ft3ft)tt	xuXt\t]U]USMUfEf~	9X}-fff%ff:1]]U$WVS]ujUR}_1EU܉E})EURjjhCS莌_jMQ}_}+}E)E܉EU+UM)щMy~
ME@B}}EEt$}E)ǍUE}<>؍e[^_]UEl]TIOCGWINSZUEPhTMQ}_}!hЉ_]ÐEhUt҅t1]def_shell_mode() tcgetattr() failed:UP@P腄_uhAK_j,y_@tǀǀ1]def_prog_mode() tcgetattr() failed:U0P@P_uhՊ~_jx_`41]|UVS]uSP袂_hRS_t3VPy_u hRj_u1[^]/usr/lib/terminfoTERMTERM environment variable not set.
Not enough memory to create terminal structure.
TERMINFO%s/%c/%s'%s': Unknown terminal type.
CCLINESCOLUMNSUWVSuыu8hx_ƃu%}uNhh	`w_j	w_Vh0h{_ǃuG}t!Uhh	`Yw_jv_h=6x_tVPShFR@_VPhыhFS%_(WR}NWS{}@}tU1dVhOh	`v_ju_=thmww_thPh<_fUfPhp6w_tj
jPM_hhvw_tj
jP*_=lu&fx~~fxz~P~h@z=h~	=4URu&fx~~fxz~P~h@zfhfP~ffPz}t	U[^_]UU1]US]t%{tSR.u_S%u_1]]UVShmu_EE1ې1ҋ58t)M8uMB5<uC~e[^]%d%02d%03d%2d%3dUWVS]u1ZU$r79~(;;%t5((CЃ]$ܐ\<|ܕL,|,|\\̗|̛L(%("
=~'
E1Rh;C<	C;d	2u2=~
E1Rh>=~'
E1Rh$5(V`z_=(0щ΃5(	C;d	=~
E1Rh)>C;d=~
E1Rh-5(Vy_=(0щ΃5(l=~'
E1ҡ((!=~'
5u1R(Pfy_=(0щ΃5(C<@xC<x=~
5u1DC<(C=5uC1TBC<	v=~'
5u1҃=~%
E1!=~'
E1҃=~%
5u
1)щ=~'
5u1҃=~%
E1@=~'
E1҃=~%
5u
1ɉȉ֙=E=~'
5u1҃=~%
E1ɉȉ֙F=~'
5u1҃=~%
E1!=~'
E1҃=~%
5u
1	k=~'
5u1҃=~%
E11=~'
E1҃=~%
5u
19=~'
5u1҃=~%
E19Ѓ=5u=~'
E1҃=~%
5u
19x=~'
5u1҅8=~'
5u1҃=E=~'
5u1҅C1Ҁ;;%u,C;?u
B#;;u~\J
;eutL;tVC;u?C1Ҁ;t<;%uC;?u
B;;u~J;tC;uӀ;t
C;(e[^_]UURURURl]couldn't open terminfo file %s.
The terminal you are using is not defined.
UWVS]jSml_$},ShԜh	`0g_hh	`!g_jbf_jEP$QRm_	trfUEff	fEfUEff	fEfUEff	fEfUEff	fEfUEff	fEfUEff	fEf}t$WcE~Ph$Ql_}f}~jEP$Qj_E%~%PETP$W?l_f}%~!jEPWi_&]$MDTC$~EUШtj+P$Wk_u7EB~BPEzP$Qk_~1ېE!~!9}Zj(P$Wik_(u)uMfDYz!f()ff	Ћ}fD_zCf}!~)jEEP$Qh_&] }fD_zC ~=t+EuP|h_MAuMA} ~
Dž Dž y, d~dPW$Q2j_ƃ1ۉ9߉؋9u
|8t&D8‰ЋMA1MC9|j1ۉ9}S߉f:tMA1MC9|)  f}~"jEEP$W|f_&]MDŽC~EP}W$Qh_Ƌ$W__E9u1$Q__[^_]U1]UE`t<t"qq]Ð<t@q	q?p]UVSE]u!Sj`ffXtSjPXSjPtRP̗\tSjP\SjPxRP茗e[^]UWVS}uu XtVjXytqVjPPPPPPPPPR(PЖ|Xtgz@t%TtVjTR螖%x=xVjXPpxuЉ#x@tTtVjTR, t htVjhPt htVjhPܕt htVjhP贕t htVjhP茕t htVjhPdt ltVjlP<t htVjhPt htVjhPxЉ!@t  tVj P蹔t $tVj$P葔 t (tVj(Pit 4tVj4PAt DtVjDPt HtVjHPt @tVj@Pɓt <tVj<P術t LtVjLPy=ht%9tttVP=x1e[^_]Uhl@UR]UWVS]uU}u@~)Eu
@z)RVSMQǃu119uj؅uPYY_W(uD19}G(P[_C9|O,Q[_O0Q[_O(Q[_W[_1GG(M G(M9rF9uZe[^_]UWVSMu|{}|u}UZC9b}RU@9O}u}G)É)EuUB
})lj+MUB
EPBPQ}WÅu1Qs<US819M~%<}UB(U{(FA9MfC}{@؍e[^_]UUB
M)PBM)PMQMQR]UWVSujD-^_Ãu1juPUW_C(tbjuP8W_C,uSY_[(:juPW_C0u#SY_{(WY_[,SY_1fCffOf}f{f}fOf{f}f{f}f{
fCC0ɋB~9u
Bz9EKCCCCC C!C$CCC8C<C@fC4f}f{619}S,C0fHfJA9|UU
Az9u3K}uA~9u
}uKER~9uK؍e[^_]UWVS}_4}G(GEщ9Mru)Љ A9Est6}W,Z9f<Zuf4Z}w0^W(+9}f^C}G69u}ffG1e[^_]U$StEj]S
`_jSjX`_EEE]SEPj__ jX_PZ_jSj__蕋,thl@j,P謍]؉]US`u1҃=dtdB8uЅt`Ѓ`u]]US=tЃ;uhS_]]U=u]US]̀}أ]]ÐUSV]̀}أ]]ÐUSMU]̀}أ]]ÐUSM[]̀}أ]]/lib/ld.so/usr/i486-linux/lib/ld.so: can't load dynamic linker '/lib/ld.so nor /usr/i486-linux/lib/ld.so'
	statically linked
UhWVS]u=E bhtlht[})t8t@8u+PPjjGEPjh.񐐐hhVPEP}PEЋEPEP{ ,}q}*jEPj}je[^_]ÐUfUfur}fEf%fEf%?fUf	fEm]ÐUWVS}19v!WURURЃC9we[^_]Ðlibc.so.4DLL Jump 4.6pl27hjVA,2Kn,X	
`	
%Kp^x<F`s`?`inet_ntoGq`k+`X`H`8`lT`hD`Q`@!P3FTQT`Tr|0hhh<@Xth8+h+8%848FNlS;_;n;P=P=P=l@l@l@XlBJ\LB`$<`1lPCLKWa_khlvllmmmLnLnLnppp!q.q=qOTt\TtkTt}uuuuuuhvhvhv$w$w$w1pw>pwMpw_ykyzyy|&@/L;LJL\ԈhԈwԈl`(0(8?,IԜVԜeԜwptx*9K0W0f0xdd,Sl	0	R	o						
-
O
[




Lt5Zp
W

$
30
4:
5E
6O
7Z
8e
9p
;{
E

l
.
$ $-<$,GLOL^LpdLdL,p-?Rk&Gm=gJ|W3456789;E*Slw. LLLLLLLLLLLL$L/L:LELPL[LfLqL|LLLLLLLLLLLLL#2DM\nw-?FUgp!3<K]fu<<<<<*<<<F<U<g<o<~<<<<<<<<<<<<)<;<C<R<d<m@LA	`XXXXXXXXXXX%X0X;XFXQX\XgXrX}XXXXXXX(`(y@>	`p?#"*`38`;`I0`^hvh	`pxvxwh`X``̆8``/	8`K`U	bl@i`q	````	X`` ```P`$	`3`?`G	hN0V``o~``x` ```
`x
`8`(p`'
`0pw8lC`M`Z4ldpp
`x 
`hx
`	`l	``x:<	`d	` 	l n  ` :* (`> ``R `_ 	pj `r 	t| ` 	` 	x h` X 8` @` z h4 !Tt
!
`!Ԉ$!H`6!`
`>!
`K!(9]!	|a!`k!`x!
`!h,!Ln!`!!!(:!`!`!"""`"x40" `B">F"	`N"(``"hj"`t"h`"w"`"X`"u"H`" `"	`""`"X9"#"`#`#`#` #	)#P`<#D#@N#	T#`[#\	`h#	n#y#p`#q##p#`#`#p#0#P`#@`#Hu	$<$:$`"$(`3$?$L$Y$c$j$	r$`z$|$`$tl$	`$$H`$8;$p`$0`%`
%`"%	2%8#<%<H%	U%
`\%c%	`k%tx%`%/%@`%X#%%	%l%$w%L%2%%
`%`&&u%&$2&t	`<&@`E&L&`S&`&`m&?t&H"&`&:&@&x&8=&	`&?&x`&`&	&
`&$
'x
`'x'`x&'|4'P=9'(`D'
`L'<	`S'i')o'`{'	'`'X'*'='`'`'@'`'	'8`'d'	'`'`(86
(x	`(`()(/(`5(HD(4	`O(`V(P`](ud( `l(l
	`z((`(p`(0(8`(:(
`(	(8(`(`(`(,(P`((P`))/usr/lib/crt0.o__entrydone___shared_dummy_____shared_dummy1__computer.ogcc2_compiled.___gnu_compiled_c_numrolls_throwaway_bc_tablemain.ogcc2_compiled.___gnu_compiled_c_header_upper_headers_lower_headers_dice_longest_header_fill_box_write_score_read_scorelib_kernel.ogcc2_compiled.___gnu_compiled_c_speeds_buflib_tputs.ogcc2_compiled.___gnu_compiled_clib_raw.ogcc2_compiled.___gnu_compiled_clib_doupdate.ogcc2_compiled.___gnu_compiled_c_LRCORNER_ClrUpdate_TransformLine_move_right_cost_countc_inspace.18_ClearScreen_IDcTransformLine_NoIDcTransformLine_InsStr_DelCharlib_refresh.ogcc2_compiled.___gnu_compiled_clib_initscr.ogcc2_compiled.___gnu_compiled_clib_addch.ogcc2_compiled.___gnu_compiled_clib_addstr.ogcc2_compiled.___gnu_compiled_clib_scroll.ogcc2_compiled.___gnu_compiled_clib_clreol.ogcc2_compiled.___gnu_compiled_clib_touch.ogcc2_compiled.___gnu_compiled_clib_mvcur.ogcc2_compiled.___gnu_compiled_clib_endwin.ogcc2_compiled.___gnu_compiled_clib_move.ogcc2_compiled.___gnu_compiled_clib_printw.ogcc2_compiled.___gnu_compiled_clib_getch.ogcc2_compiled.___gnu_compiled_c_fifo_peek_kgetchlib_acs.ogcc2_compiled.___gnu_compiled_clib_clear.ogcc2_compiled.___gnu_compiled_clib_newterm.ogcc2_compiled.___gnu_compiled_c_cleanuplib_color.ogcc2_compiled.___gnu_compiled_clib_twait.ogcc2_compiled.___gnu_compiled_c_set.2lib_setup.ogcc2_compiled.___gnu_compiled_c__use_env_resize_name_match_do_prototypelib_tparm.ogcc2_compiled.___gnu_compiled_c_param_stack_ptr_buffer_bufptr_stack_variableread_entry.ogcc2_compiled.___gnu_compiled_c_TermNames_StringTablelib_unctrl.ogcc2_compiled.___gnu_compiled_c_buffer.2lib_vidattr.ogcc2_compiled.___gnu_compiled_c_do_color_current_pair_previous_attrlib_newwin.ogcc2_compiled.___gnu_compiled_clib_erase.ogcc2_compiled.___gnu_compiled_clib_tstp.ogcc2_compiled.___gnu_compiled_c__main.ogcc2_compiled.___gnu_compiled_c/usr/src/compilers/gcc-2.5.8/./libgcc2.cint:t1=r1;-2147483648;2147483647;char:t2=r2;0;127;long int:t3=r1;-2147483648;2147483647;unsigned int:t4=r1;0;-1;long unsigned int:t5=r1;0;-1;long long int:t6=r1;01000000000000000000000;0777777777777777777777;long long unsigned int:t7=r1;0000000000000;01777777777777777777777;short int:t8=r1;-32768;32767;short unsigned int:t9=r1;0;65535;signed char:t10=r1;-128;127;unsigned char:t11=r1;0;255;float:t12=r1;4;0;double:t13=r1;8;0;long double:t14=r1;12;0;complex int:t15=s8real:1,0,32;imag:1,32,32;;complex float:t16=r16;4;0;complex double:t17=r17;8;0;complex long double:t18=r18;12;0;void:t19=19reg_class:T20=eNO_REGS:0,AREG:1,DREG:2,\CREG:3,BREG:4,Q_REGS:5,SIREG:6,\DIREG:7,INDEX_REGS:8,GENERAL_REGS:9,\FP_TOP_REG:10,FP_SECOND_REG:11,FLOAT_REGS:12,\ALL_REGS:13,LIM_REG_CLASSES:14,;machine_mode:T21=eVOIDmode:0,QImode:1,HImode:2,\PSImode:3,SImode:4,PDImode:5,DImode:6,\TImode:7,OImode:8,QFmode:9,HFmode:10,\SFmode:11,DFmode:12,XFmode:13,TFmode:14,\SCmode:15,DCmode:16,XCmode:17,TCmode:18,\CQImode:19,CHImode:20,CSImode:21,\CDImode:22,CTImode:23,COImode:24,\BLKmode:25,CCmode:26,CCFPEQmode:27,\MAX_MACHINE_MODE:28,;mode_class:T22=eMODE_RANDOM:0,MODE_INT:1,MODE_FLOAT:2,\MODE_PARTIAL_INT:3,MODE_CC:4,MODE_COMPLEX_INT:5,\MODE_COMPLEX_FLOAT:6,MAX_MODE_CLASS:7,;ptrdiff_t:t1size_t:t4wchar_t:t3UQItype:t11SItype:t1USItype:t4DItype:t6UDItype:t7SFtype:t12DFtype:t13XFtype:t14word_type:t1DIstruct:T23=s8low:1,0,32;high:1,32,32;;DIunion:t24=u8s:23,0,64;ll:6,0,64;;func_ptr:t25=*26=f19__do_global_dtors:F19_exit_dummy_ref:G27=*1__do_global_ctors:F19_initialized.6__main:F19_exit.ogcc2_compiled.___gnu_compiled_c/usr/src/compilers/gcc-2.5.8/./libgcc2.cint:t1=r1;-2147483648;2147483647;char:t2=r2;0;127;long int:t3=r1;-2147483648;2147483647;unsigned int:t4=r1;0;-1;long unsigned int:t5=r1;0;-1;long long int:t6=r1;01000000000000000000000;0777777777777777777777;long long unsigned int:t7=r1;0000000000000;01777777777777777777777;short int:t8=r1;-32768;32767;short unsigned int:t9=r1;0;65535;signed char:t10=r1;-128;127;unsigned char:t11=r1;0;255;float:t12=r1;4;0;double:t13=r1;8;0;long double:t14=r1;12;0;complex int:t15=s8real:1,0,32;imag:1,32,32;;complex float:t16=r16;4;0;complex double:t17=r17;8;0;complex long double:t18=r18;12;0;void:t19=19reg_class:T20=eNO_REGS:0,AREG:1,DREG:2,\CREG:3,BREG:4,Q_REGS:5,SIREG:6,\DIREG:7,INDEX_REGS:8,GENERAL_REGS:9,\FP_TOP_REG:10,FP_SECOND_REG:11,FLOAT_REGS:12,\ALL_REGS:13,LIM_REG_CLASSES:14,;machine_mode:T21=eVOIDmode:0,QImode:1,HImode:2,\PSImode:3,SImode:4,PDImode:5,DImode:6,\TImode:7,OImode:8,QFmode:9,HFmode:10,\SFmode:11,DFmode:12,XFmode:13,TFmode:14,\SCmode:15,DCmode:16,XCmode:17,TCmode:18,\CQImode:19,CHImode:20,CSImode:21,\CDImode:22,CTImode:23,COImode:24,\BLKmode:25,CCmode:26,CCFPEQmode:27,\MAX_MACHINE_MODE:28,;mode_class:T22=eMODE_RANDOM:0,MODE_INT:1,MODE_FLOAT:2,\MODE_PARTIAL_INT:3,MODE_CC:4,MODE_COMPLEX_INT:5,\MODE_COMPLEX_FLOAT:6,MAX_MODE_CLASS:7,;ptrdiff_t:t1size_t:t4wchar_t:t3UQItype:t11SItype:t1USItype:t4DItype:t6UDItype:t7SFtype:t12DFtype:t13XFtype:t14word_type:t1DIstruct:T23=s8low:1,0,32;high:1,32,32;;DIunion:t24=u8s:23,0,64;ll:6,0,64;;func_ptr:t25=*26=f19_exit_dummy_decl:G1__U00010.o__T00018.o__T00050.o__T00051.o__T00053.o__T00059.o__T00062.o__T00063.o__T00122.o__T00139.o__T00176.o__T00275.o__T00335.o__T00420.o__T00428.o__T00435.o__T00448.o__T00449.o__T00450.o__T00452.o__T00461.o__T00468.o__T00469.o__T00478.o__T00481.o__T00485.o__T00495.o__D00006.o__D00120.o__D00126.o__D00127.o__fpu_control.o__load.o__setfpucw.oclose.ogcc2_compiled.___gnu_compiled_cfclose.ogcc2_compiled.___gnu_compiled_cfflush.ogcc2_compiled.___gnu_compiled_cfgets.ogcc2_compiled.___gnu_compiled_cfopen.ogcc2_compiled.___gnu_compiled_cfprintf.ogcc2_compiled.___gnu_compiled_cgetpid.ogcc2_compiled.___gnu_compiled_cgets.ogcc2_compiled.___gnu_compiled_cgettod.ogcc2_compiled.___gnu_compiled_cioctl.ogcc2_compiled.___gnu_compiled_ckill.ogcc2_compiled.___gnu_compiled_clseek.ogcc2_compiled.___gnu_compiled_copen.ogcc2_compiled.___gnu_compiled_cperror.ogcc2_compiled.___gnu_compiled_cprintf.ogcc2_compiled.___gnu_compiled_cread.ogcc2_compiled.___gnu_compiled_cselect.ogcc2_compiled.___gnu_compiled_cset-init.osigaction.ogcc2_compiled.___gnu_compiled_csigproc.ogcc2_compiled.___gnu_compiled_csprintf.ogcc2_compiled.___gnu_compiled_csrand.ogcc2_compiled.___gnu_compiled_cstat.ogcc2_compiled.___gnu_compiled_ctcgetattr.ogcc2_compiled.___gnu_compiled_cunlink.ogcc2_compiled.___gnu_compiled_cvsprintf.ogcc2_compiled.___gnu_compiled_cwrite.ogcc2_compiled.___gnu_compiled_c__libc.o__libc_CONFLICT_LIST__GOT_SIZE__PLT_SIZE__LAST_DATA_ADDRESS__T00016.o__T00074.o__T00125.o__T00132.o__T00138.o__T00142.o__T00145.o__T00199.o__T00211.o__T00217.o__T00243.o__T00261.o__T00273.o__T00309.o__T00317.o__T00320.o__T00347.o__T00419.o__T00431.o__T00438.o__T00443.o__T00482.o__T00514.o__T00528.o__T00552.o__T00697.o___kill_bc_1_vidattr___fpu_control_ungetch_abort_echo_open_total_score_nocbreak_count___ioctl_getpid_gettimeofday__IO_default_seekoff_isendwin___open_endwin_mvprintw_setup_screen_has_colors___SHARED_LIBRARIES____IO_default_pbackfail_fileno_calloc_init_pair_derwin__exit_dummy_decl__IO_switch_to_backup_area__IO_free_backup_area_acs_map__IO_adjust_column_vsprintf_color_pairs__outc_getenv___ctype_toupper_strtol_def_prog_mode_strtok_tcgetattr_vidputs_COLOR_PAIRS___tcgetattr___setfpucw___srandom__IO_fflush___lseek__IO_sungetc___close___do_global_dtors___DTOR_LIST____IO_fclose_strcat_LINES__edata__IO_sync___crt_dummy_____CTOR_LIST___strcmp_strchr__IO_remove_marker_strcpy_cfsetispeed__IO_flush_all__IO_printf_sigprocmask_wattron___do_global_ctors__IO_fprintf_subwin_waddnstr___new_exitfn_sprintf_printw_wredrawln__IO_setb_cfgetispeed_wrefresh_waddchnstr_printf_sigaddset___load_shared_libraries_upper_total___sigprocmask__IO_stdout__tzname__IO_sgetn__etext_baudrate__IO_stdin____exit_funcs_stdscr_initscr__IO_init_erasechar__IO_unsave_markers__IO_default_xsputn___underflow__isendwin_system_numlines__IO_default_underflow__IO_stderr__COLORS_strncpy_makenew__IO_link_in__IO_default_setbuf_wgetch_signal_trap_can_change_color_wclrtoeol_sigaction_timed_wait__IO_default_stat_signal___sigaction_reset_shell_mode_SP__IO_gets_cfsetospeed__IO_sprintf_update_scorefile_waddch__IO_vsprintf_lower_total_must_swap_flushinp__IO_switch_to_main_get_area_cfgetospeed_wclear_find_straight__IO_seekmark_set_signal_traps__IO_default_read_nl_perror__IO_default_seek__coloron___select_localtime_wprintw___random__IO_default_xsgetn_wtouchln_timegm__IO_un_link___ctype_b_use_env_asctime_curs_set_find_yahtzee___unlink___initstate___brk_select_ttytype__IO_default_write_unctrl_doupdate_COLS_tzset____brk_addr__end_setupterm__IO_fopen_wscrl__SHARABLE_CONFLICTS___def_shell_mode_fprintf__IO_flush_all_linebuffered_newterm_werase__IO_fgets_write_is_wintouched_tparm_killchar_unlink__IO_init_marker_ripoffline_show_player___libc_init_init_acs_query_curscr_malloc__exit_dummy_ref__IO_set_column_wnoutrefresh__IO_perror___libc_4_627__IO_marker_difference_tputs__IO_doallocbuf__IO_least_marker_srand__IO_default_doallocate___libc_subinit_add_dice_init_color_num_players_sleep_tgoto_mktime_build_table__IO_sputbackc_show_top_scores__IO_marker_delta_showoff_newwin_newscr_color_content_wmove_start_color_calc_random_tstp_stat__IO_get_column_yend_is_linetouched_handle_play_timezone___write_etext_ioctl_be_computer_del_curterm_noraw_find_n_of_a_kind_atexit_savetty_set_curterm_vwprintw_putp___ctype_tolower_noecho_time__IO_switch_to_get_mode_dice_values_read_read_entry_rand_roll_dice_mvwprintw_pair_content_raw_tcsetattr___stat_errno__NEEDS_SHRLIB_libc_4_play___overflow_rippedoff_tcflush_say_lock_cbreak_ctime___gettimeofday_nonl___setstate_cur_term__IO_default_seekpos_rsp_players_exit_atoi_main_daylight_gmtime_setup_board_init_free_raw_roll_dice___environ_lseek_close_mvcur_fflush__IO_list_all_kill_fopen_edata___getpid_resetty___read_end_reset_prog_mode_gets_fclose__IO_default_finish___main_fgets_dodelay__IO_nobackup_pbackfail_bc_2
Results 1 - 1
Help - FTP Sites List - Software Dir.
Searching half a billion files worldwide
© 1997-2009 MARUHN Internet Solutions