mirror of
https://github.com/vattam/BSDGames.git
synced 2025-12-21 03:14:50 +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
|
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
2
debian/control
vendored
@@ -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
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
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
|
* 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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user