xref: /original-bsd/games/sail/lo_main.c (revision 00986467)
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 the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 #ifndef lint
19 static char sccsid[] = "@(#)lo_main.c	5.3 (Berkeley) 06/18/88";
20 #endif /* not lint */
21 
22 /*
23  * Print out the top ten SAILors
24  *
25  * -l force a long listing (print out real usernames)
26  */
27 #include <pwd.h>
28 #include "externs.h"
29 
30 char *title[] = {
31 	"Admiral", "Commodore", "Captain", "Captain",
32 	"Captain", "Captain", "Captain", "Commander",
33 	"Commander", "Lieutenant"
34 };
35 
36 lo_main()
37 {
38 	FILE *fp;
39 	char sbuf[32];
40 	int n = 0, people;
41 	struct passwd *getpwuid(), *pass;
42 	struct logs log;
43 	struct ship *ship;
44 
45 	if ((fp = fopen(LOGFILE, "r")) == 0) {
46 		perror(LOGFILE);
47 		exit(1);
48 	}
49 	switch (fread((char *)&people, sizeof people, 1, fp)) {
50 	case 0:
51 		printf("Nobody has sailed yet.\n");
52 		exit(0);
53 	case 1:
54 		break;
55 	default:
56 		perror(LOGFILE);
57 		exit(1);
58 	}
59 	while (fread((char *)&log, sizeof log, 1, fp) == 1 &&
60 	       log.l_name[0] != '\0') {
61 		if (longfmt && (pass = getpwuid(log.l_uid)) != NULL)
62 			(void) sprintf(sbuf, "%10.10s (%s)",
63 				log.l_name, pass->pw_name);
64 		else
65 			(void) sprintf(sbuf, "%20.20s", log.l_name);
66 		ship = &scene[log.l_gamenum].ship[log.l_shipnum];
67 		printf("%-10s %21s of the %15s %3d points, %5.2f equiv\n",
68 			title[n++], sbuf, ship->shipname, log.l_netpoints,
69 			(float) log.l_netpoints / ship->specs->pts);
70 	}
71 	printf("\n%d people have played.\n", people);
72 	return 0;
73 }
74