mirror of
https://github.com/vattam/BSDGames.git
synced 2025-12-20 19:04:49 +00:00
* 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:
9
debian/changelog
vendored
9
debian/changelog
vendored
@@ -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
2
debian/control
vendored
@@ -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
|
||||
|
||||
@@ -187,6 +187,7 @@ main(ac, av)
|
||||
sleep(1);
|
||||
refresh();
|
||||
}
|
||||
Num_games = 1;
|
||||
} while (!Auto_bot && another());
|
||||
quit(0);
|
||||
/* NOTREACHED */
|
||||
|
||||
124
robots/score.c
124
robots/score.c
@@ -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
|
||||
@@ -60,34 +119,28 @@ void
|
||||
score(score_wfd)
|
||||
int score_wfd;
|
||||
{
|
||||
int inf = score_wfd;
|
||||
SCORE *scp;
|
||||
int uid;
|
||||
bool done_show = FALSE;
|
||||
static int numscores, max_uid;
|
||||
int inf = score_wfd;
|
||||
SCORE *scp;
|
||||
u_int32_t uid;
|
||||
bool done_show = FALSE;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user