8
|
1 /*--------------------------------------------------------------------------
|
|
2 NETREK II -- Paradise
|
|
3
|
|
4 Permission to use, copy, modify, and distribute this software and its
|
|
5 documentation, or any derivative works thereof, for any NON-COMMERCIAL
|
|
6 purpose and without fee is hereby granted, provided that this copyright
|
|
7 notice appear in all copies. No representations are made about the
|
|
8 suitability of this software for any purpose. This software is provided
|
|
9 "as is" without express or implied warranty.
|
|
10
|
|
11 Xtrek Copyright 1986 Chris Guthrie
|
|
12 Netrek (Xtrek II) Copyright 1989 Kevin P. Smith
|
|
13 Scott Silvey
|
|
14 Paradise II (Netrek II) Copyright 1993 Larry Denys
|
|
15 Kurt Olsen
|
|
16 Brandon Gillespie
|
|
17 --------------------------------------------------------------------------*/
|
|
18
|
|
19 /*
|
|
20 * Robert Forsman
|
|
21 *
|
|
22 * Scans the score file for royalty.
|
|
23 */
|
|
24
|
|
25 #include "config.h"
|
|
26
|
|
27 #include <stdio.h>
|
|
28 #include <sys/types.h>
|
|
29 #include <sys/file.h>
|
|
30 #include <pwd.h>
|
|
31 #include "defs.h"
|
|
32 #include "struct.h"
|
|
33 #include "data.h"
|
|
34
|
|
35
|
|
36 struct person
|
|
37 {
|
|
38 int royal;
|
|
39 char name[16];
|
|
40 struct person *next;
|
|
41 };
|
|
42
|
|
43 int
|
|
44 compare_people(a, b)
|
|
45 struct person *a, *b;
|
|
46 {
|
|
47 if (a->royal > b->royal)
|
|
48 return 1;
|
|
49 else
|
|
50 return -1;
|
|
51 }
|
|
52
|
|
53 int
|
|
54 main(argc, argv)
|
|
55 int argc;
|
|
56 char **argv;
|
|
57 {
|
|
58 struct statentry plstats;
|
|
59 struct person *head = 0;
|
|
60 int royalty;
|
|
61
|
|
62 printf("Reading players file from stdin...");
|
|
63 while (1 == fread(&plstats, sizeof(plstats), 1, stdin))
|
|
64 {
|
|
65 if (plstats.stats.st_royal > 0)
|
|
66 {
|
|
67 /* royalty! insert into linked list. */
|
|
68 struct person **scan;
|
|
69 struct person *dude;
|
|
70 dude = (struct person *) malloc(sizeof(*dude));
|
|
71 dude->royal = plstats.stats.st_royal;
|
|
72 strncpy(dude->name, plstats.name, sizeof(dude->name));
|
|
73 for (scan = &head;
|
|
74 *scan && 0 > compare_people(dude, *scan);
|
|
75 scan = &(*scan)->next)
|
|
76 ;
|
|
77 dude->next = *scan;
|
|
78 *scan = dude;
|
|
79 }
|
|
80 }
|
|
81 printf("done.\n");
|
|
82
|
|
83
|
|
84 royalty = -1;
|
|
85 while (head)
|
|
86 {
|
|
87 struct person *temp;
|
|
88 if (royalty != head->royal)
|
|
89 {
|
|
90 royalty = head->royal;
|
|
91 printf("%s:\n", royal[royalty].name);
|
|
92 }
|
|
93 printf(" %s\n", head->name);
|
|
94 temp = head;
|
|
95 head = head->next;
|
|
96 free(temp);
|
|
97 }
|
|
98
|
|
99 exit(0);
|
|
100 }
|