|
|
1.1 root 1: /* Copyright (c) 1983 Regents of the University of California */
2:
3: #ifndef lint
4: static char sccsid[] = "@(#)cfscores.c 4.1 (Berkeley) 5/12/83";
5: #endif not lint
6:
7: #include <pwd.h>
8:
9: struct betinfo {
10: long hand; /* cost of dealing hand */
11: long inspection; /* cost of inspecting hand */
12: long game; /* cost of buying game */
13: long runs; /* cost of running through hands */
14: long information; /* cost of information */
15: long thinktime; /* cost of thinking time */
16: long wins; /* total winnings */
17: long worth; /* net worth after costs */
18: };
19:
20: char *scorefile = "/usr/games/lib/cfscores";
21: int dbfd;
22:
23: main(argc, argv)
24: int argc;
25: char *argv[];
26: {
27: register struct passwd *pw;
28: int uid;
29:
30: if (argc > 2) {
31: printf("Usage: cfscores [user]\n");
32: exit(1);
33: }
34: dbfd = open(scorefile, 0);
35: if (dbfd < 0) {
36: perror(scorefile);
37: exit(2);
38: }
39: setpwent();
40: if (argc == 1) {
41: uid = getuid();
42: pw = getpwuid(uid);
43: if (pw == 0) {
44: printf("You are not listed in the password file?!?\n");
45: exit(2);
46: }
47: printuser(pw, 1);
48: exit(0);
49: }
50: if (strcmp(argv[1], "-a") == 0) {
51: while ((pw = getpwent()) != 0)
52: printuser(pw, 0);
53: exit(0);
54: }
55: pw = getpwnam(argv[1]);
56: if (pw == 0) {
57: printf("User %s unknown\n", argv[1]);
58: exit(3);
59: }
60: printuser(pw, 1);
61: exit(0);
62: }
63:
64: /*
65: * print out info for specified password entry
66: */
67: printuser(pw, printfail)
68: register struct passwd *pw;
69: int printfail;
70: {
71: struct betinfo total;
72: int i;
73:
74: if (pw->pw_uid < 0) {
75: printf("Bad uid %d\n", pw->pw_uid);
76: return;
77: }
78: i = lseek(dbfd, pw->pw_uid * sizeof(struct betinfo), 0);
79: if (i < 0) {
80: perror("lseek");
81: return;
82: }
83: i = read(dbfd, (char *)&total, sizeof(total));
84: if (i < 0) {
85: perror("read");
86: return;
87: }
88: if (total.hand == 0) {
89: if (printfail)
90: printf("%s has never played canfield.\n", pw->pw_name);
91: return;
92: }
93: printf("*----------------------*\n");
94: if (total.worth >= 0)
95: printf("* Winnings for %-8s*\n", pw->pw_name);
96: else
97: printf("* Losses for %-10s*\n", pw->pw_name);
98: printf("*======================*\n");
99: printf("|Costs Total |\n");
100: printf("| Hands %8d |\n", total.hand);
101: printf("| Inspections %8d |\n", total.inspection);
102: printf("| Games %8d |\n", total.game);
103: printf("| Runs %8d |\n", total.runs);
104: printf("| Information %8d |\n", total.information);
105: printf("| Think time %8d |\n", total.thinktime);
106: printf("|Total Costs %8d |\n", total.wins - total.worth);
107: printf("|Winnings %8d |\n", total.wins);
108: printf("|Net Worth %8d |\n", total.worth);
109: printf("*----------------------*\n\n");
110: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.