]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - robots/score.c
Add missing prototypes
[bsdgames-darwin.git] / robots / score.c
index c43e4011e5b8b5aeb4225a5a293142131de3e15c..aacb07eca796f41458a73614ca067b59ce090145 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: score.c,v 1.5 1997/10/12 14:16:28 lukem Exp $  */
+/*     $NetBSD: score.c,v 1.7 1999/05/16 00:03:35 christos Exp $       */
 
 /*
  * Copyright (c) 1980, 1993
@@ -38,7 +38,7 @@
 #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.7 1999/05/16 00:03:35 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -51,6 +51,65 @@ 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, 0);
+
+       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
@@ -59,11 +118,10 @@ static SCORE       Top[MAXSCORES];
 void
 score()
 {
-       int             inf;
-       SCORE           *scp;
-       int             uid;
-       bool            done_show = FALSE;
-       static int      numscores, max_uid;
+       int                     inf;
+       SCORE                   *scp;
+       int                     uid;
+       bool                    done_show = FALSE;
 
        Newscore = FALSE;
        if ((inf = open(Scorefile, O_RDWR)) < 0) {
@@ -71,13 +129,7 @@ score()
                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) {
@@ -89,6 +141,8 @@ 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;
@@ -96,6 +150,8 @@ score()
                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;
                }
@@ -111,13 +167,19 @@ score()
        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,
+                   Auto_bot ? "(autobot)" : "", scp->s_level);
                if (!done_show && scp->s_uid == uid && scp->s_score == Score) {
                        standend();
                        done_show = TRUE;
@@ -127,9 +189,7 @@ score()
        refresh();
 
        if (Newscore) {
-               lseek(inf, 0L, 0);
-               write(inf, &max_uid, sizeof max_uid);
-               write(inf, Top, sizeof Top);
+               write_score(inf);
        }
        close(inf);
 }
@@ -165,22 +225,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);
 }