home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume4 / sail / part04 / lo_main.c < prev    next >
C/C++ Source or Header  |  1988-04-13  |  2KB  |  69 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that this notice is preserved and that due credit is given
  7.  * to the University of California at Berkeley. The name of the University
  8.  * may not be used to endorse or promote products derived from this
  9.  * software without specific prior written permission. This software
  10.  * is provided ``as is'' without express or implied warranty.
  11.  */
  12.  
  13. #ifndef lint
  14. static char sccsid[] = "@(#)lo_main.c    5.2 (Berkeley) 3/9/88";
  15. #endif /* not lint */
  16.  
  17. /*
  18.  * Print out the top ten SAILors
  19.  *
  20.  * -l force a long listing (print out real usernames)
  21.  */
  22. #include <pwd.h>
  23. #include "externs.h"
  24.  
  25. char *title[] = {
  26.     "Admiral", "Commodore", "Captain", "Captain",
  27.     "Captain", "Captain", "Captain", "Commander",
  28.     "Commander", "Lieutenant"
  29. };
  30.  
  31. lo_main()
  32. {
  33.     FILE *fp;
  34.     char sbuf[32];
  35.     int n = 0, people;
  36.     struct passwd *getpwuid(), *pass;
  37.     struct logs log;
  38.     struct ship *ship;
  39.  
  40.     if ((fp = fopen(LOGFILE, "r")) == 0) {
  41.         perror(LOGFILE);
  42.         exit(1);
  43.     }
  44.     switch (fread((char *)&people, sizeof people, 1, fp)) {
  45.     case 0:
  46.         printf("Nobody has sailed yet.\n");
  47.         exit(0);
  48.     case 1:
  49.         break;
  50.     default:
  51.         perror(LOGFILE);
  52.         exit(1);
  53.     }
  54.     while (fread((char *)&log, sizeof log, 1, fp) == 1 &&
  55.            log.l_name[0] != '\0') {
  56.         if (longfmt && (pass = getpwuid(log.l_uid)) != NULL)
  57.             (void) sprintf(sbuf, "%10.10s (%s)",
  58.                 log.l_name, pass->pw_name);
  59.         else
  60.             (void) sprintf(sbuf, "%20.20s", log.l_name);
  61.         ship = &scene[log.l_gamenum].ship[log.l_shipnum];
  62.         printf("%-10s %21s of the %15s %3d points, %5.2f equiv\n",
  63.             title[n++], sbuf, ship->shipname, log.l_netpoints,
  64.             (float) log.l_netpoints / ship->specs->pts);
  65.     }
  66.     printf("\n%d people have played.\n", people);
  67.     return 0;
  68. }
  69.