diff --git a/debian/changelog b/debian/changelog index a0f91d5..45466e7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +bsdgames (2.8-5) unstable; urgency=low + + * Patch from Malcolm Parsons 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 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. diff --git a/debian/control b/debian/control index f9d4e71..346275d 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: bsdgames Section: games Priority: optional Maintainer: Joey Hess -Standards-Version: 3.0.1.1 +Standards-Version: 3.1.0.0 Package: bsdgames Architecture: any diff --git a/robots/main.c b/robots/main.c index 31d9a95..1be552a 100644 --- a/robots/main.c +++ b/robots/main.c @@ -187,6 +187,7 @@ main(ac, av) sleep(1); refresh(); } + Num_games = 1; } while (!Auto_bot && another()); quit(0); /* NOTREACHED */ diff --git a/robots/score.c b/robots/score.c index 7dfc358..ba40bac 100644 --- a/robots/score.c +++ b/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); }