|
|
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: (1) source distributions retain this entire copyright
7: * notice and comment, and (2) distributions including binaries display
8: * the following acknowledgement: ``This product includes software
9: * developed by the University of California, Berkeley and its contributors''
10: * in the documentation or other materials provided with the distribution
11: * and in all advertising materials mentioning features or use of this
12: * software. Neither the name of the University nor the names of its
13: * contributors may be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: char copyright[] =
22: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
23: All rights reserved.\n";
24: #endif /* not lint */
25:
26: #ifndef lint
27: static char sccsid[] = "@(#)initdeck.c 5.5 (Berkeley) 6/1/90";
28: #endif /* not lint */
29:
30: # include <stdio.h>
31: # include "deck.h"
32:
33: /*
34: * This program initializes the card files for monopoly.
35: * It reads in a data file with Com. Chest cards, followed by
36: * the Chance card. The two are seperated by a line of "%-".
37: * All other cards are seperated by lines of "%%". In the front
38: * of the file is the data for the decks in the same order.
39: * This includes the seek pointer for the start of each card.
40: * All cards start with their execution code, followed by the
41: * string to print, terminated with a null byte.
42: */
43:
44: # define TRUE 1
45: # define FALSE 0
46:
47: # define bool char
48: # define reg register
49:
50: char *infile = "cards.inp", /* input file */
51: *outfile = "cards.pck"; /* "packed" file */
52:
53: extern long ftell();
54: extern char *calloc();
55:
56: DECK deck[2];
57:
58: FILE *inf, *outf;
59:
60: main(ac, av)
61: int ac;
62: char *av[]; {
63:
64: getargs(ac, av);
65: if ((inf = fopen(infile, "r")) == NULL) {
66: perror(infile);
67: exit(1);
68: }
69: count();
70: /*
71: * allocate space for pointers.
72: */
73: CC_D.offsets = (long *)calloc(CC_D.num_cards + 1, sizeof (long));
74: CH_D.offsets = (long *)calloc(CH_D.num_cards + 1, sizeof (long));
75: fseek(inf, 0L, 0);
76: if ((outf = fopen(outfile, "w")) == NULL) {
77: perror(outfile);
78: exit(0);
79: }
80:
81: fwrite(deck, sizeof (DECK), 2, outf);
82: fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
83: fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
84: putem();
85:
86: fclose(inf);
87: fseek(outf, 0, 0L);
88: fwrite(deck, sizeof (DECK), 2, outf);
89: fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
90: fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
91: fclose(outf);
92: printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards);
93: exit(0);
94: }
95:
96: getargs(ac, av)
97: int ac;
98: char *av[]; {
99:
100: if (ac > 1)
101: infile = av[1];
102: if (ac > 2)
103: outfile = av[2];
104: }
105:
106: /*
107: * count the cards
108: */
109: count() {
110:
111: reg bool newline;
112: reg DECK *in_deck;
113: reg char c;
114:
115: newline = TRUE;
116: in_deck = &CC_D;
117: while ((c=getc(inf)) != EOF)
118: if (newline && c == '%') {
119: newline = FALSE;
120: in_deck->num_cards++;
121: if (getc(inf) == '-')
122: in_deck = &CH_D;
123: }
124: else
125: newline = (c == '\n');
126: in_deck->num_cards++;
127: }
128: /*
129: * put strings in the file
130: */
131: putem() {
132:
133: reg bool newline;
134: reg DECK *in_deck;
135: reg char c;
136: reg int num;
137:
138: in_deck = &CC_D;
139: CC_D.num_cards = 1;
140: CH_D.num_cards = 0;
141: CC_D.offsets[0] = ftell(outf);
142: putc(getc(inf), outf);
143: putc(getc(inf), outf);
144: for (num = 0; (c=getc(inf)) != '\n'; )
145: num = num * 10 + (c - '0');
146: putw(num, outf);
147: newline = FALSE;
148: while ((c=getc(inf)) != EOF)
149: if (newline && c == '%') {
150: putc('\0', outf);
151: newline = FALSE;
152: if (getc(inf) == '-')
153: in_deck = &CH_D;
154: while (getc(inf) != '\n')
155: continue;
156: in_deck->offsets[in_deck->num_cards++] = ftell(outf);
157: if ((c=getc(inf)) == EOF)
158: break;
159: putc(c, outf);
160: putc(c = getc(inf), outf);
161: for (num = 0; (c=getc(inf)) != EOF && c != '\n'; )
162: num = num * 10 + (c - '0');
163: putw(num, outf);
164: }
165: else {
166: putc(c, outf);
167: newline = (c == '\n');
168: }
169: putc('\0', outf);
170: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.