#include "os.h" #include "structs.h" #define GET_LEVEL_TEXT(l) \ (l == 0 ? "NEW" : \ (l < 4 ? "LOW" : \ (l < 7 ? "MED" : \ (l < 10 ? "EXP" : \ (l < 16 ? "ADV" : \ (l < 20 ? "HIG" : \ (l ==20 ? "SUP" : \ (l < 24 ? "IMM" : "WIZ")))))))) #define GET_CLASS_TEXT(c) \ (c == CLASS_MAGIC_USER ? "<MAGIC> " : \ (c == CLASS_CLERIC ? "<CLERIC>" : \ (c == CLASS_THIEF ? "<THIEF>" : \ (c == CLASS_WARRIOR ? "<FIGHT>" : "<UNDEF>")))) void list (char *filename); int main (int argc, char **argv) { if (argc != 2) fprintf (stderr, "Usage: %s <DikuMUD playerfile-name>\n", argv[0]); else list (argv[1]); return 0; } void list (char *filename) { FILE *fl; struct char_file_u buf; char *point; int num, days; long played; if (!(fl = fopen (filename, "rb"))) { perror (filename); exit (1); } played = 0; for (num = 1;; num++) { fread (&buf, sizeof (buf), 1, fl); if (feof (fl)) break; printf ("[%3d] %-20s ", num, buf.name); printf ("<%s %2d> ", GET_LEVEL_TEXT (buf.level), buf.level); printf ("%-8s ", GET_CLASS_TEXT (buf.class)); days = (time (0) - buf.last_logon) / SECS_PER_REAL_DAY; if (days >= 7) printf ("[DAY %2d] ", days); else printf ("[--- --] "); printf ("[%s]", buf.pwd); printf ("\n"); played += buf.played; /* for (point = buf.name; *point; ++point) printf("'%c':%d ", *point, *point); putchar('\n'); */ } fclose (fl); printf ("\nGrand total time played is %ld seconds\n", played); printf (" (First started on Sat Feb 2 19:20:55 1991)\n\n"); printf (" Equals %ld hours\n", (played / SECS_PER_REAL_HOUR)); printf (" Equals %ld days\n", (played / SECS_PER_REAL_DAY)); }