Annotation of 43BSD/games/monop/initdeck.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.