* 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 bsdgames (2.8-4) unstable; urgency=low
* Fixed rot13 test suite to work before the package is installed. * 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 Section: games
Priority: optional Priority: optional
Maintainer: Joey Hess <joeyh@master.debian.org> Maintainer: Joey Hess <joeyh@master.debian.org>
Standards-Version: 3.0.1.1 Standards-Version: 3.1.0.0
Package: bsdgames Package: bsdgames
Architecture: any Architecture: any

View File

@@ -187,6 +187,7 @@ main(ac, av)
sleep(1); sleep(1);
refresh(); refresh();
} }
Num_games = 1;
} while (!Auto_bot && another()); } while (!Auto_bot && another());
quit(0); quit(0);
/* NOTREACHED */ /* 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 * Copyright (c) 1980, 1993
@@ -38,19 +38,78 @@
#if 0 #if 0
static char sccsid[] = "@(#)score.c 8.1 (Berkeley) 5/31/93"; static char sccsid[] = "@(#)score.c 8.1 (Berkeley) 5/31/93";
#else #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
#endif /* not lint */ #endif /* not lint */
# include "robots.h" # include "robots.h"
# include "pathnames.h" # include "pathnames.h"
char *Scorefile = _PATH_SCORE; const char *Scorefile = _PATH_SCORE;
int Max_per_uid = MAX_PER_UID; int Max_per_uid = MAX_PER_UID;
static SCORE Top[MAXSCORES]; 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: * score:
* Post the player's score, if reasonable, and then print out the * Post the player's score, if reasonable, and then print out the
@@ -60,34 +119,28 @@ void
score(score_wfd) score(score_wfd)
int score_wfd; int score_wfd;
{ {
int inf = score_wfd; int inf = score_wfd;
SCORE *scp; SCORE *scp;
int uid; u_int32_t uid;
bool done_show = FALSE; bool done_show = FALSE;
static int numscores, max_uid;
Newscore = FALSE; Newscore = FALSE;
if (inf < 0) if (inf < 0)
return; return;
if (read(inf, &max_uid, sizeof max_uid) == sizeof max_uid) read_score(inf);
read(inf, Top, sizeof Top);
else {
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
scp->s_score = -1;
max_uid = Max_per_uid;
}
uid = getuid(); uid = getuid();
if (Top[MAXSCORES-1].s_score <= Score) { if (Top[MAXSCORES-1].s_score <= Score) {
numscores = 0; numscores = 0;
for (scp = Top; scp < &Top[MAXSCORES]; scp++) for (scp = Top; scp < &Top[MAXSCORES]; scp++)
if (scp->s_score < 0 || if ((scp->s_uid == uid && ++numscores == max_uid)) {
(scp->s_uid == uid && ++numscores == max_uid)) {
if (scp->s_score > Score) if (scp->s_score > Score)
break; break;
scp->s_score = Score; scp->s_score = Score;
scp->s_uid = uid; scp->s_uid = uid;
scp->s_auto = Auto_bot;
scp->s_level = Level;
set_name(scp); set_name(scp);
Newscore = TRUE; Newscore = TRUE;
break; break;
@@ -95,6 +148,8 @@ score(score_wfd)
if (scp == &Top[MAXSCORES]) { if (scp == &Top[MAXSCORES]) {
Top[MAXSCORES-1].s_score = Score; Top[MAXSCORES-1].s_score = Score;
Top[MAXSCORES-1].s_uid = uid; Top[MAXSCORES-1].s_uid = uid;
Top[MAXSCORES-1].s_auto = Auto_bot;
Top[MAXSCORES-1].s_level = Level;
set_name(&Top[MAXSCORES-1]); set_name(&Top[MAXSCORES-1]);
Newscore = TRUE; Newscore = TRUE;
} }
@@ -110,13 +165,19 @@ score(score_wfd)
else else
Full_clear = TRUE; 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++) { for (scp = Top; scp < &Top[MAXSCORES]; scp++) {
if (scp->s_score < 0) if (scp->s_score == 0)
break; break;
move((scp - Top) + 1, 15); move((scp - Top) + 2, 15);
if (!done_show && scp->s_uid == uid && scp->s_score == Score) if (!done_show && scp->s_uid == uid && scp->s_score == Score)
standout(); 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) { if (!done_show && scp->s_uid == uid && scp->s_score == Score) {
standend(); standend();
done_show = TRUE; done_show = TRUE;
@@ -126,9 +187,7 @@ score(score_wfd)
refresh(); refresh();
if (Newscore) { if (Newscore) {
lseek(inf, 0L, SEEK_SET); write_score(inf);
write(inf, &max_uid, sizeof max_uid);
write(inf, Top, sizeof Top);
} }
lseek(inf, 0, SEEK_SET); lseek(inf, 0, SEEK_SET);
} }
@@ -138,9 +197,10 @@ set_name(scp)
SCORE *scp; SCORE *scp;
{ {
PASSWD *pp; PASSWD *pp;
static char unknown[] = "???";
if ((pp = getpwuid(scp->s_uid)) == NULL) if ((pp = getpwuid(scp->s_uid)) == NULL)
pp->pw_name = "???"; pp->pw_name = unknown;
strncpy(scp->s_name, pp->pw_name, MAXNAME); strncpy(scp->s_name, pp->pw_name, MAXNAME);
} }
@@ -164,22 +224,20 @@ show_score()
{ {
SCORE *scp; SCORE *scp;
int inf; int inf;
static int max_score;
if ((inf = open(Scorefile, O_RDONLY)) < 0) { if ((inf = open(Scorefile, O_RDONLY)) < 0) {
warn("opening `%s'", Scorefile); warn("opening `%s'", Scorefile);
return; return;
} }
for (scp = Top; scp < &Top[MAXSCORES]; scp++) read_score(inf);
scp->s_score = -1;
read(inf, &max_score, sizeof max_score);
read(inf, Top, sizeof Top);
close(inf); close(inf);
inf = 1; 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++) for (scp = Top; scp < &Top[MAXSCORES]; scp++)
if (scp->s_score >= 0) if (scp->s_score > 0)
printf("%d\t%d\t%.*s\n", inf++, scp->s_score, printf("%5.5d %5.5d %-8.8s %-9.9s %5.5d\n",
(int)(sizeof(scp->s_name)), scp->s_name); inf++, scp->s_score, scp->s_name,
scp->s_auto ? "(autobot)" : "", scp->s_level);
} }