|
|
1.1 root 1: /*
2: * Copyright (c) 1980 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: char copyright[] =
20: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
21: All rights reserved.\n";
22: #endif /* not lint */
23:
24: #ifndef lint
25: static char sccsid[] = "@(#)initdeck.c 5.3 (Berkeley) 6/18/88";
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:
51: extern long ftell();
52: extern char *calloc();
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: */
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));
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.