home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / d / d-linux.zip / dm-dist / list.c < prev    next >
C/C++ Source or Header  |  1991-03-01  |  2KB  |  84 lines

  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. #include "structs.h"
  5.  
  6. #define GET_LEVEL_TEXT(l)   \
  7.   (l == 0 ? "NEW" :         \
  8.     (l < 4  ? "LOW" :         \
  9.     (l < 7  ? "MED" :         \
  10.     (l < 10 ? "EXP" :         \
  11.     (l < 16 ? "ADV" :         \
  12.     (l < 20 ? "HIG" :         \
  13.     (l ==20 ? "SUP" :         \
  14.     (l < 24 ? "IMM" : "WIZ"))))))))
  15.  
  16. #define GET_CLASS_TEXT(c)                \
  17.     (c == CLASS_MAGIC_USER ? "<MAGIC> " :  \
  18.     (c == CLASS_CLERIC ?     "<CLERIC>" :  \
  19.     (c == CLASS_THIEF ?      "<THIEF>"  :  \
  20.     (c == CLASS_WARRIOR ?    "<FIGHT>"  : "<UNDEF>"))))
  21.  
  22. void list(char *filename);
  23.  
  24. main(int argc, char **argv)
  25. {
  26.     if (argc != 2)
  27.         fprintf(stderr, "Usage: %s <DikuMUD playerfile-name>\n", argv[0]);
  28.     else
  29.         list(argv[1]);
  30. }
  31.  
  32.  
  33. void list(char *filename)
  34. {
  35.     FILE *fl;
  36.     struct char_file_u buf;
  37.     char *point;
  38.     int num, days;
  39.     long played;
  40.  
  41.     if (!(fl = fopen(filename, "r")))
  42.     {
  43.         perror(filename);
  44.         exit(1);
  45.     }
  46.  
  47.  
  48.     played = 0;
  49.  
  50.     for (num=1;;num++)
  51.     {
  52.         fread(&buf, sizeof(buf), 1, fl);
  53.         if (feof(fl))
  54.             break;
  55.  
  56.         printf("[%3d] %-20s  ", num, buf.name);
  57.         printf("<%s %2d>    ", GET_LEVEL_TEXT(buf.level), buf.level);
  58.         printf("%-8s  ", GET_CLASS_TEXT(buf.class));
  59.  
  60.         days = (time(0)-buf.last_logon)/SECS_PER_REAL_DAY;
  61.  
  62.         if (days >= 7)
  63.             printf("[DAY %2d]  ", days);
  64.         else
  65.             printf("[--- --]  ");
  66.         printf("[%s]", buf.pwd);
  67.         printf("\n");
  68.  
  69.         played += buf.played;
  70. /*
  71.         for (point = buf.name; *point; ++point)
  72.             printf("'%c':%d ", *point, *point);
  73.         putchar('\n');
  74. */            
  75.     }
  76.  
  77.     fclose(fl);
  78.  
  79.     printf("\nGrand total time played is %d seconds\n", played);
  80.     printf("   (First started on Sat Feb  2 19:20:55 1991)\n\n");
  81.     printf("   Equals %d hours\n", (played/SECS_PER_REAL_HOUR));
  82.     printf("   Equals %d days\n", (played/SECS_PER_REAL_DAY));
  83. }
  84.