* Patch from Malcolm Parsons <malcolm@bits.bris.ac.uk> to fix robots -A

score problem. (Closes: #49894)
   * Patch from Malcolm to fix robots so it asks if you want a new game after
     each game. (Closes: #49897)


git-svn-id: file:///srv/svn/joey/bsdgames-trunk@5107 a4a2c43b-8ac3-0310-8836-e0e880c912e2
This commit is contained in:
joey
1999-11-11 19:37:53 +00:00
parent 1c2a412a82
commit afe15edd7b
4 changed files with 102 additions and 34 deletions

9
debian/changelog vendored
View File

@@ -1,3 +1,12 @@
bsdgames (2.8-5) unstable; urgency=low
* Patch from Malcolm Parsons <malcolm@bits.bris.ac.uk> to fix robots -A
score problem. (Closes: #49894)
* Patch from Malcolm to fix robots so it asks if you want a new game after
each game. (Closes: #49897)
-- Joey Hess <joeyh@master.debian.org> Thu, 11 Nov 1999 11:28:52 -0800
bsdgames (2.8-4) unstable; urgency=low
* Fixed rot13 test suite to work before the package is installed.

2
debian/control vendored
View File

@@ -2,7 +2,7 @@ Source: bsdgames
Section: games
Priority: optional
Maintainer: Joey Hess <joeyh@master.debian.org>
Standards-Version: 3.0.1.1
Standards-Version: 3.1.0.0
Package: bsdgames
Architecture: any

View File

@@ -187,6 +187,7 @@ main(ac, av)
sleep(1);
refresh();
}
Num_games = 1;
} while (!Auto_bot && another());
quit(0);
/* NOTREACHED */

View File

@@ -1,4 +1,4 @@
/* $NetBSD: score.c,v 1.5 1997/10/12 14:16:28 lukem Exp $ */
/* $NetBSD: score.c,v 1.11 1999/09/18 19:38:54 jsm Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -38,19 +38,78 @@
#if 0
static char sccsid[] = "@(#)score.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: score.c,v 1.5 1997/10/12 14:16:28 lukem Exp $");
__RCSID("$NetBSD: score.c,v 1.11 1999/09/18 19:38:54 jsm Exp $");
#endif
#endif /* not lint */
# include "robots.h"
# include "pathnames.h"
char *Scorefile = _PATH_SCORE;
const char *Scorefile = _PATH_SCORE;
int Max_per_uid = MAX_PER_UID;
static SCORE Top[MAXSCORES];
static u_int32_t numscores, max_uid;
static void read_score __P((int));
static void write_score __P((int));
/*
* read_score:
* Read the score file in MI format
*/
static void
read_score(inf)
int inf;
{
SCORE *scp;
if (read(inf, &max_uid, sizeof max_uid) == sizeof max_uid) {
max_uid = ntohl(max_uid);
read(inf, Top, sizeof Top);
for (scp = Top; scp < &Top[MAXSCORES]; scp++) {
scp->s_uid = ntohl(scp->s_uid);
scp->s_score = ntohl(scp->s_score);
scp->s_auto = ntohl(scp->s_auto);
scp->s_level = ntohl(scp->s_level);
}
}
else {
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
scp->s_score = 0;
max_uid = Max_per_uid;
}
}
/*
* write_score:
* Write the score file in MI format
*/
static void
write_score(inf)
int inf;
{
SCORE *scp;
lseek(inf, 0L, SEEK_SET);
max_uid = htonl(max_uid);
write(inf, &max_uid, sizeof max_uid);
for (scp = Top; scp < &Top[MAXSCORES]; scp++) {
scp->s_uid = htonl(scp->s_uid);
scp->s_score = htonl(scp->s_score);
scp->s_auto = htonl(scp->s_auto);
scp->s_level = htonl(scp->s_level);
}
write(inf, Top, sizeof Top);
}
/*
* score:
* Post the player's score, if reasonable, and then print out the
@@ -62,32 +121,26 @@ score(score_wfd)
{
int inf = score_wfd;
SCORE *scp;
int uid;
u_int32_t uid;
bool done_show = FALSE;
static int numscores, max_uid;
Newscore = FALSE;
if (inf < 0)
return;
if (read(inf, &max_uid, sizeof max_uid) == sizeof max_uid)
read(inf, Top, sizeof Top);
else {
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
scp->s_score = -1;
max_uid = Max_per_uid;
}
read_score(inf);
uid = getuid();
if (Top[MAXSCORES-1].s_score <= Score) {
numscores = 0;
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
if (scp->s_score < 0 ||
(scp->s_uid == uid && ++numscores == max_uid)) {
if ((scp->s_uid == uid && ++numscores == max_uid)) {
if (scp->s_score > Score)
break;
scp->s_score = Score;
scp->s_uid = uid;
scp->s_auto = Auto_bot;
scp->s_level = Level;
set_name(scp);
Newscore = TRUE;
break;
@@ -95,6 +148,8 @@ score(score_wfd)
if (scp == &Top[MAXSCORES]) {
Top[MAXSCORES-1].s_score = Score;
Top[MAXSCORES-1].s_uid = uid;
Top[MAXSCORES-1].s_auto = Auto_bot;
Top[MAXSCORES-1].s_level = Level;
set_name(&Top[MAXSCORES-1]);
Newscore = TRUE;
}
@@ -110,13 +165,19 @@ score(score_wfd)
else
Full_clear = TRUE;
move(1, 15);
printw("%5.5s %5.5s %-9.9s %-8.8s %5.5s", "Rank", "Score", "User",
" ", "Level");
for (scp = Top; scp < &Top[MAXSCORES]; scp++) {
if (scp->s_score < 0)
if (scp->s_score == 0)
break;
move((scp - Top) + 1, 15);
move((scp - Top) + 2, 15);
if (!done_show && scp->s_uid == uid && scp->s_score == Score)
standout();
printw(" %d\t%d\t%-8.8s ", (scp - Top) + 1, scp->s_score, scp->s_name);
printw("%5.5d %5.5d %-8.8s %-9.9s %5.5d",
(scp - Top) + 1, scp->s_score, scp->s_name,
scp->s_auto ? "(autobot)" : "", scp->s_level);
if (!done_show && scp->s_uid == uid && scp->s_score == Score) {
standend();
done_show = TRUE;
@@ -126,9 +187,7 @@ score(score_wfd)
refresh();
if (Newscore) {
lseek(inf, 0L, SEEK_SET);
write(inf, &max_uid, sizeof max_uid);
write(inf, Top, sizeof Top);
write_score(inf);
}
lseek(inf, 0, SEEK_SET);
}
@@ -138,9 +197,10 @@ set_name(scp)
SCORE *scp;
{
PASSWD *pp;
static char unknown[] = "???";
if ((pp = getpwuid(scp->s_uid)) == NULL)
pp->pw_name = "???";
pp->pw_name = unknown;
strncpy(scp->s_name, pp->pw_name, MAXNAME);
}
@@ -164,22 +224,20 @@ show_score()
{
SCORE *scp;
int inf;
static int max_score;
if ((inf = open(Scorefile, O_RDONLY)) < 0) {
warn("opening `%s'", Scorefile);
return;
}
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
scp->s_score = -1;
read(inf, &max_score, sizeof max_score);
read(inf, Top, sizeof Top);
read_score(inf);
close(inf);
inf = 1;
printf("%5.5s %5.5s %-9.9s %-8.8s %5.5s\n", "Rank", "Score", "User",
" ", "Level");
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
if (scp->s_score >= 0)
printf("%d\t%d\t%.*s\n", inf++, scp->s_score,
(int)(sizeof(scp->s_name)), scp->s_name);
if (scp->s_score > 0)
printf("%5.5d %5.5d %-8.8s %-9.9s %5.5d\n",
inf++, scp->s_score, scp->s_name,
scp->s_auto ? "(autobot)" : "", scp->s_level);
}