Commit | Line | Data |
---|---|---|
ec5c7841 | 1 | /* |
d99e6414 | 2 | * Copyright (c) 1980 Regents of the University of California. |
ec5c7841 KB |
3 | * All rights reserved. |
4 | * | |
5 | * Redistribution and use in source and binary forms are permitted | |
d99e6414 KB |
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. | |
ec5c7841 KB |
16 | */ |
17 | ||
18 | #ifndef lint | |
19 | char copyright[] = | |
d99e6414 | 20 | "@(#) Copyright (c) 1980 Regents of the University of California.\n\ |
ec5c7841 KB |
21 | All rights reserved.\n"; |
22 | #endif /* not lint */ | |
23 | ||
24 | #ifndef lint | |
d99e6414 | 25 | static char sccsid[] = "@(#)initdeck.c 5.3 (Berkeley) %G%"; |
ec5c7841 KB |
26 | #endif /* not lint */ |
27 | ||
28 | # include <stdio.h> | |
29 | # include "deck.h" | |
30 | ||
31 | /* | |
32 | * This program initializes the card files for monopoly. | |
33 | * It reads in a data file with Com. Chest cards, followed by | |
34 | * the Chance card. The two are seperated by a line of "%-". | |
35 | * All other cards are seperated by lines of "%%". In the front | |
36 | * of the file is the data for the decks in the same order. | |
37 | * This includes the seek pointer for the start of each card. | |
38 | * All cards start with their execution code, followed by the | |
39 | * string to print, terminated with a null byte. | |
40 | */ | |
41 | ||
42 | # define TRUE 1 | |
43 | # define FALSE 0 | |
44 | ||
45 | # define bool char | |
46 | # define reg register | |
47 | ||
48 | char *infile = "cards.inp", /* input file */ | |
49 | *outfile = "cards.pck"; /* "packed" file */ | |
50 | ||
2497392a KB |
51 | extern long ftell(); |
52 | extern char *calloc(); | |
ec5c7841 KB |
53 | |
54 | DECK deck[2]; | |
55 | ||
56 | FILE *inf, *outf; | |
57 | ||
58 | main(ac, av) | |
59 | int ac; | |
60 | char *av[]; { | |
61 | ||
62 | getargs(ac, av); | |
63 | if ((inf = fopen(infile, "r")) == NULL) { | |
64 | perror(infile); | |
65 | exit(1); | |
66 | } | |
67 | count(); | |
68 | /* | |
69 | * allocate space for pointers. | |
70 | */ | |
2497392a KB |
71 | CC_D.offsets = (long *)calloc(CC_D.num_cards + 1, sizeof (long)); |
72 | CH_D.offsets = (long *)calloc(CH_D.num_cards + 1, sizeof (long)); | |
ec5c7841 KB |
73 | fseek(inf, 0L, 0); |
74 | if ((outf = fopen(outfile, "w")) == NULL) { | |
75 | perror(outfile); | |
76 | exit(0); | |
77 | } | |
78 | ||
79 | fwrite(deck, sizeof (DECK), 2, outf); | |
80 | fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); | |
81 | fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); | |
82 | putem(); | |
83 | ||
84 | fclose(inf); | |
85 | fseek(outf, 0, 0L); | |
86 | fwrite(deck, sizeof (DECK), 2, outf); | |
87 | fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); | |
88 | fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); | |
89 | fclose(outf); | |
90 | printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards); | |
91 | exit(0); | |
92 | } | |
93 | ||
94 | getargs(ac, av) | |
95 | int ac; | |
96 | char *av[]; { | |
97 | ||
98 | if (ac > 2) { | |
99 | infile = av[2] ? av[2] : infile; | |
100 | if (ac > 3) | |
101 | outfile = av[3]; | |
102 | } | |
103 | } | |
104 | /* | |
105 | * count the cards | |
106 | */ | |
107 | count() { | |
108 | ||
109 | reg bool newline; | |
110 | reg DECK *in_deck; | |
111 | reg char c; | |
112 | ||
113 | newline = TRUE; | |
114 | in_deck = &CC_D; | |
115 | while ((c=getc(inf)) != EOF) | |
116 | if (newline && c == '%') { | |
117 | newline = FALSE; | |
118 | in_deck->num_cards++; | |
119 | if (getc(inf) == '-') | |
120 | in_deck = &CH_D; | |
121 | } | |
122 | else | |
123 | newline = (c == '\n'); | |
124 | in_deck->num_cards++; | |
125 | } | |
126 | /* | |
127 | * put strings in the file | |
128 | */ | |
129 | putem() { | |
130 | ||
131 | reg bool newline; | |
132 | reg DECK *in_deck; | |
133 | reg char c; | |
134 | reg int num; | |
135 | ||
136 | in_deck = &CC_D; | |
137 | CC_D.num_cards = 1; | |
138 | CH_D.num_cards = 0; | |
139 | CC_D.offsets[0] = ftell(outf); | |
140 | putc(getc(inf), outf); | |
141 | putc(getc(inf), outf); | |
142 | for (num = 0; (c=getc(inf)) != '\n'; ) | |
143 | num = num * 10 + (c - '0'); | |
144 | putw(num, outf); | |
145 | newline = FALSE; | |
146 | while ((c=getc(inf)) != EOF) | |
147 | if (newline && c == '%') { | |
148 | putc('\0', outf); | |
149 | newline = FALSE; | |
150 | if (getc(inf) == '-') | |
151 | in_deck = &CH_D; | |
152 | while (getc(inf) != '\n') | |
153 | continue; | |
154 | in_deck->offsets[in_deck->num_cards++] = ftell(outf); | |
155 | if ((c=getc(inf)) == EOF) | |
156 | break; | |
157 | putc(c, outf); | |
158 | putc(c = getc(inf), outf); | |
159 | for (num = 0; (c=getc(inf)) != EOF && c != '\n'; ) | |
160 | num = num * 10 + (c - '0'); | |
161 | putw(num, outf); | |
162 | } | |
163 | else { | |
164 | putc(c, outf); | |
165 | newline = (c == '\n'); | |
166 | } | |
167 | putc('\0', outf); | |
168 | } |