Annotation of 43BSDReno/games/fortune/unstr.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1989 The Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * This code is derived from software contributed to Berkeley by
                      6:  * Ken Arnold.
                      7:  *
                      8:  * Redistribution and use in source and binary forms are permitted
                      9:  * provided that the above copyright notice and this paragraph are
                     10:  * duplicated in all such forms and that any documentation,
                     11:  * advertising materials, and other materials related to such
                     12:  * distribution and use acknowledge that the software was developed
                     13:  * by the University of California, Berkeley.  The name of the
                     14:  * University may not be used to endorse or promote products derived
                     15:  * from this software without specific prior written permission.
                     16:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     17:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     18:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     19:  */
                     20: 
                     21: #ifndef lint
                     22: char copyright[] =
                     23: "@(#) Copyright (c) 1989 The Regents of the University of California.\n\
                     24:  All rights reserved.\n";
                     25: #endif /* not lint */
                     26: 
                     27: #ifndef lint
                     28: static char sccsid[] = "@(#)unstr.c    5.6 (Berkeley) 12/15/89";
                     29: #endif /* not lint */
                     30: 
                     31: /*
                     32:  *     This program un-does what "strfile" makes, thereby obtaining the
                     33:  * original file again.  This can be invoked with the name of the output
                     34:  * file, the input file, or both. If invoked with only a single argument
                     35:  * ending in ".dat", it is pressumed to be the input file and the output
                     36:  * file will be the same stripped of the ".dat".  If the single argument
                     37:  * doesn't end in ".dat", then it is presumed to be the output file, and
                     38:  * the input file is that name prepended by a ".dat".  If both are given
                     39:  * they are treated literally as the input and output files.
                     40:  *
                     41:  *     Ken Arnold              Aug 13, 1978
                     42:  */
                     43: 
                     44: # include      <machine/endian.h>
                     45: # include      <sys/param.h>
                     46: # include      "strfile.h"
                     47: # include      <stdio.h>
                     48: # include      <ctype.h>
                     49: 
                     50: # ifndef MAXPATHLEN
                     51: # define       MAXPATHLEN      1024
                     52: # endif        /* MAXPATHLEN */
                     53: 
                     54: char   *Infile,                        /* name of input file */
                     55:        Datafile[MAXPATHLEN],           /* name of data file */
                     56:        Delimch;                        /* delimiter character */
                     57: 
                     58: FILE   *Inf, *Dataf;
                     59: 
                     60: char   *strcat(), *strcpy();
                     61: 
                     62: /* ARGSUSED */
                     63: main(ac, av)
                     64: int    ac;
                     65: char   **av;
                     66: {
                     67:        static STRFILE  tbl;            /* description table */
                     68: 
                     69:        getargs(av);
                     70:        if ((Inf = fopen(Infile, "r")) == NULL) {
                     71:                perror(Infile);
                     72:                exit(1);
                     73:        }
                     74:        if ((Dataf = fopen(Datafile, "r")) == NULL) {
                     75:                perror(Datafile);
                     76:                exit(1);
                     77:        }
                     78:        (void) fread((char *) &tbl, sizeof tbl, 1, Dataf);
                     79:        tbl.str_version = ntohl(tbl.str_version);
                     80:        tbl.str_numstr = ntohl(tbl.str_numstr);
                     81:        tbl.str_longlen = ntohl(tbl.str_longlen);
                     82:        tbl.str_shortlen = ntohl(tbl.str_shortlen);
                     83:        tbl.str_flags = ntohl(tbl.str_flags);
                     84:        if (!(tbl.str_flags & (STR_ORDERED | STR_RANDOM))) {
                     85:                fprintf(stderr, "nothing to do -- table in file order\n");
                     86:                exit(1);
                     87:        }
                     88:        Delimch = tbl.str_delim;
                     89:        order_unstr(&tbl);
                     90:        (void) fclose(Inf);
                     91:        (void) fclose(Dataf);
                     92:        exit(0);
                     93: }
                     94: 
                     95: getargs(av)
                     96: register char  *av[];
                     97: {
                     98:        if (!*++av) {
                     99:                (void) fprintf(stderr, "usage: unstr datafile\n");
                    100:                exit(1);
                    101:        }
                    102:        Infile = *av;
                    103:        (void) strcpy(Datafile, Infile);
                    104:        (void) strcat(Datafile, ".dat");
                    105: }
                    106: 
                    107: order_unstr(tbl)
                    108: register STRFILE       *tbl;
                    109: {
                    110:        register int    i;
                    111:        register char   *sp;
                    112:        auto off_t      pos;
                    113:        char            buf[BUFSIZ];
                    114: 
                    115:        for (i = 0; i < tbl->str_numstr; i++) {
                    116:                (void) fread((char *) &pos, 1, sizeof pos, Dataf);
                    117:                (void) fseek(Inf, ntohl(pos), 0);
                    118:                if (i != 0)
                    119:                        (void) printf("%c\n", Delimch);
                    120:                for (;;) {
                    121:                        sp = fgets(buf, sizeof buf, Inf);
                    122:                        if (sp == NULL || STR_ENDSTRING(sp, *tbl))
                    123:                                break;
                    124:                        else
                    125:                                fputs(sp, stdout);
                    126:                }
                    127:        }
                    128: }

unix.superglobalmegacorp.com

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