|
|
1.1 ! root 1: # include <stdio.h> ! 2: # include "deck.h" ! 3: ! 4: /* ! 5: * This program initializes the card files for monopoly. ! 6: * It reads in a data file with Com. Chest cards, followed by ! 7: * the Chance card. The two are seperated by a line of "%-". ! 8: * All other cards are seperated by lines of "%%". In the front ! 9: * of the file is the data for the decks in the same order. ! 10: * This includes the seek pointer for the start of each card. ! 11: * All cards start with their execution code, followed by the ! 12: * string to print, terminated with a null byte. ! 13: */ ! 14: ! 15: # define TRUE 1 ! 16: # define FALSE 0 ! 17: ! 18: # define bool char ! 19: # define reg register ! 20: ! 21: char *infile = "cards.inp", /* input file */ ! 22: *outfile = "cards.pck"; /* "packed" file */ ! 23: ! 24: long ftell(); ! 25: ! 26: DECK deck[2]; ! 27: ! 28: FILE *inf, *outf; ! 29: ! 30: main(ac, av) ! 31: int ac; ! 32: char *av[]; { ! 33: ! 34: getargs(ac, av); ! 35: if ((inf = fopen(infile, "r")) == NULL) { ! 36: perror(infile); ! 37: exit(1); ! 38: } ! 39: count(); ! 40: /* ! 41: * allocate space for pointers. ! 42: */ ! 43: CC_D.offsets = calloc(CC_D.num_cards + 1, sizeof (long)); ! 44: CH_D.offsets = calloc(CH_D.num_cards + 1, sizeof (long)); ! 45: fseek(inf, 0L, 0); ! 46: if ((outf = fopen(outfile, "w")) == NULL) { ! 47: perror(outfile); ! 48: exit(0); ! 49: } ! 50: ! 51: fwrite(deck, sizeof (DECK), 2, outf); ! 52: fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); ! 53: fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); ! 54: putem(); ! 55: ! 56: fclose(inf); ! 57: fseek(outf, 0, 0L); ! 58: fwrite(deck, sizeof (DECK), 2, outf); ! 59: fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); ! 60: fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); ! 61: fclose(outf); ! 62: printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards); ! 63: exit(0); ! 64: } ! 65: ! 66: getargs(ac, av) ! 67: int ac; ! 68: char *av[]; { ! 69: ! 70: if (ac > 2) { ! 71: infile = av[2] ? av[2] : infile; ! 72: if (ac > 3) ! 73: outfile = av[3]; ! 74: } ! 75: } ! 76: /* ! 77: * count the cards ! 78: */ ! 79: count() { ! 80: ! 81: reg bool newline; ! 82: reg DECK *in_deck; ! 83: reg char c; ! 84: ! 85: newline = TRUE; ! 86: in_deck = &CC_D; ! 87: while ((c=getc(inf)) != EOF) ! 88: if (newline && c == '%') { ! 89: newline = FALSE; ! 90: in_deck->num_cards++; ! 91: if (getc(inf) == '-') ! 92: in_deck = &CH_D; ! 93: } ! 94: else ! 95: newline = (c == '\n'); ! 96: in_deck->num_cards++; ! 97: } ! 98: /* ! 99: * put strings in the file ! 100: */ ! 101: putem() { ! 102: ! 103: reg bool newline; ! 104: reg DECK *in_deck; ! 105: reg char c; ! 106: reg int num; ! 107: ! 108: in_deck = &CC_D; ! 109: CC_D.num_cards = 1; ! 110: CH_D.num_cards = 0; ! 111: CC_D.offsets[0] = ftell(outf); ! 112: putc(getc(inf), outf); ! 113: putc(getc(inf), outf); ! 114: for (num = 0; (c=getc(inf)) != '\n'; ) ! 115: num = num * 10 + (c - '0'); ! 116: putw(num, outf); ! 117: newline = FALSE; ! 118: while ((c=getc(inf)) != EOF) ! 119: if (newline && c == '%') { ! 120: putc('\0', outf); ! 121: newline = FALSE; ! 122: if (getc(inf) == '-') ! 123: in_deck = &CH_D; ! 124: while (getc(inf) != '\n') ! 125: continue; ! 126: in_deck->offsets[in_deck->num_cards++] = ftell(outf); ! 127: if ((c=getc(inf)) == EOF) ! 128: break; ! 129: putc(c, outf); ! 130: putc(c = getc(inf), outf); ! 131: for (num = 0; (c=getc(inf)) != EOF && c != '\n'; ) ! 132: num = num * 10 + (c - '0'); ! 133: putw(num, outf); ! 134: } ! 135: else { ! 136: putc(c, outf); ! 137: newline = (c == '\n'); ! 138: } ! 139: putc('\0', outf); ! 140: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.