|
|
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.