]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - sail/lo_main.c
speed limit 80
[bsdgames-darwin.git] / sail / lo_main.c
index 3909864ead35b6bb6f530224bc308cff2e495559..48b19280d31b42ba99607abc294144f707b7af31 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: lo_main.c,v 1.7 2000/07/03 03:57:43 matt Exp $ */
+/*     $NetBSD: lo_main.c,v 1.19 2010/08/06 09:14:40 dholland Exp $    */
 
 /*
  * Copyright (c) 1983, 1993
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
@@ -38,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)lo_main.c  8.2 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: lo_main.c,v 1.7 2000/07/03 03:57:43 matt Exp $");
+__RCSID("$NetBSD: lo_main.c,v 1.19 2010/08/06 09:14:40 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -47,54 +43,117 @@ __RCSID("$NetBSD: lo_main.c,v 1.7 2000/07/03 03:57:43 matt Exp $");
  *
  * -l force a long listing (print out real usernames)
  */
-#include <sys/types.h>
+
+#include <err.h>
+#include <errno.h>
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <pwd.h>
+#include <curses.h>
+
 #include "extern.h"
 #include "pathnames.h"
 
-const char *const title[] = {
+
+static const char *const title[] = {
        "Admiral", "Commodore", "Captain", "Captain",
        "Captain", "Captain", "Captain", "Commander",
        "Commander", "Lieutenant"
 };
 
+void
+lo_curses(void)
+{
+       FILE *fp;
+       char sbuf[32];
+       int n = 0, npeople;
+       int line;
+       struct passwd *pass;
+       struct logs log;
+       struct ship *ship;
+
+       erase();
+
+       fp = fopen(_PATH_LOGFILE, "r");
+       if (fp == NULL) {
+               mvprintw(5, 10, "%s: %s", _PATH_LOGFILE, strerror(errno));
+               mvaddstr(7, 10, "Press any key...");
+               getch();
+               return;
+       }
+       switch (fread(&npeople, sizeof npeople, 1, fp)) {
+           case 0:
+               mvprintw(5, 10, "Nobody has sailed yet.");
+               mvaddstr(7, 10, "Press any key...");
+               getch();
+               return;
+           case 1:
+               break;
+           default:
+               mvprintw(5, 10, "%s: %s", _PATH_LOGFILE, strerror(errno));
+               mvaddstr(7, 10, "Press any key...");
+               getch();
+               return;
+       }
+       line = 0;
+       while (fread(&log, sizeof log, 1, fp) == 1 &&
+              log.l_name[0] != '\0' &&
+               line < LINES - 2) {
+               if (longfmt && (pass = getpwuid(log.l_uid)) != NULL)
+                       snprintf(sbuf, sizeof(sbuf),
+                               "%10.10s (%s)", log.l_name, pass->pw_name);
+               else
+                       snprintf(sbuf, sizeof(sbuf),
+                               "%20.20s", log.l_name);
+               ship = &scene[log.l_gamenum].ship[log.l_shipnum];
+               mvprintw(line, 0,
+                       "%-10s %21s of the %15s %3d points, %5.2f equiv",
+                       title[n++], sbuf, ship->shipname, log.l_netpoints,
+                       (float) log.l_netpoints / ship->specs->pts);
+               line++;
+       }
+       fclose(fp);
+       mvprintw(line+1, 0, "%d people have played. Press any key.", npeople);
+       getch();
+}
+
 int
-lo_main()
+lo_main(void)
 {
        FILE *fp;
        char sbuf[32];
-       int n = 0, people;
+       int n = 0, npeople;
        struct passwd *pass;
        struct logs log;
        struct ship *ship;
 
        if ((fp = fopen(_PATH_LOGFILE, "r")) == 0) {
-               perror(_PATH_LOGFILE);
-               exit(1);
+               err(1, "%s", _PATH_LOGFILE);
        }
-       switch (fread((char *)&people, sizeof people, 1, fp)) {
+       switch (fread(&npeople, sizeof npeople, 1, fp)) {
        case 0:
                printf("Nobody has sailed yet.\n");
                exit(0);
        case 1:
                break;
        default:
-               perror(_PATH_LOGFILE);
-               exit(1);
+               err(1, "%s", _PATH_LOGFILE);
        }
-       while (fread((char *)&log, sizeof log, 1, fp) == 1 &&
+       while (fread(&log, sizeof log, 1, fp) == 1 &&
               log.l_name[0] != '\0') {
                if (longfmt && (pass = getpwuid(log.l_uid)) != NULL)
-                       (void) sprintf(sbuf, "%10.10s (%s)",
-                               log.l_name, pass->pw_name);
+                       snprintf(sbuf, sizeof(sbuf),
+                               "%10.10s (%s)", log.l_name, pass->pw_name);
                else
-                       (void) sprintf(sbuf, "%20.20s", log.l_name);
+                       snprintf(sbuf, sizeof(sbuf),
+                               "%20.20s", log.l_name);
                ship = &scene[log.l_gamenum].ship[log.l_shipnum];
                printf("%-10s %21s of the %15s %3d points, %5.2f equiv\n",
                        title[n++], sbuf, ship->shipname, log.l_netpoints,
                        (float) log.l_netpoints / ship->specs->pts);
        }
-       printf("\n%d people have played.\n", people);
+       fclose(fp);
+       printf("\n%d people have played.\n", npeople);
        return 0;
 }