1: # include   <stdio.h>
   2: # include   "strfile.h"
   3: 
   4: # define    TRUE    1
   5: # define    FALSE   0
   6: 
   7: /*
   8:  *	This program un-does what "strfile" makes, thereby obtaining the
   9:  * original file again.  This can be invoked with the name of the output
  10:  * file, the input file, or both. If invoked with only a single argument
  11:  * ending in ".dat", it is pressumed to be the input file and the output
  12:  * file will be the same stripped of the ".dat".  If the single argument
  13:  * doesn't end in ".dat", then it is presumed to be the output file, and
  14:  * the input file is that name prepended by a ".dat".  If both are given
  15:  * they are treated literally as the input and output files.
  16:  *
  17:  *	Ken Arnold		Aug 13, 1978
  18:  */
  19: 
  20: # define    DELIM_CH    '-'
  21: 
  22: char    Infile[100],            /* name of input file */
  23:     Outfile[100];           /* name of output file */
  24: 
  25: short   Oflag = FALSE;          /* use order of initial table */
  26: 
  27: FILE    *Inf, *Outf;
  28: 
  29: char    *rindex(), *malloc(), *strcat(), *strcpy();
  30: 
  31: main(ac, av)
  32: int ac;
  33: char    **av;
  34: {
  35:     register char   c;
  36:     register int    nstr, delim;
  37:     static STRFILE  tbl;        /* description table */
  38: 
  39:     getargs(ac, av);
  40:     if ((Inf = fopen(Infile, "r")) == NULL) {
  41:         perror(Infile);
  42:         exit(-1);
  43:         /* NOTREACHED */
  44:     }
  45:     if ((Outf = fopen(Outfile, "w")) == NULL) {
  46:         perror(Outfile);
  47:         exit(-1);
  48:         /* NOTREACHED */
  49:     }
  50:     (void) fread((char *) &tbl, sizeof tbl, 1, Inf);
  51:     if (Oflag) {
  52:         order_unstr(&tbl);
  53:         exit(0);
  54:         /* NOTREACHED */
  55:     }
  56:     nstr = tbl.str_numstr;
  57:     (void) fseek(Inf, (long) (sizeof (long) * (nstr + 1)), 1);
  58:     delim = 0;
  59:     for (nstr = 0; (c = getc(Inf)) != EOF; nstr++)
  60:         if (c != '\0')
  61:             putc(c, Outf);
  62:         else if (nstr != tbl.str_numstr - 1)
  63:             if (nstr == tbl.str_delims[delim]) {
  64:                 fputs("%-\n", Outf);
  65:                 delim++;
  66:             }
  67:             else
  68:                 fputs("%%\n", Outf);
  69:     exit(0);
  70:     /* NOTREACHED */
  71: }
  72: 
  73: getargs(ac, av)
  74: register int    ac;
  75: register char   **av;
  76: {
  77:     register char   *sp;
  78: 
  79:     if (ac > 1 && strcmp(av[1], "-o") == 0) {
  80:         Oflag++;
  81:         ac--;
  82:         av++;
  83:     }
  84:     if (ac < 2) {
  85:         printf("usage: %s datafile[.dat] [ outfile ]\n", av[0]);
  86:         exit(-1);
  87:     }
  88:     (void) strcpy(Infile, av[1]);
  89:     if (ac < 3) {
  90:         (void) strcpy(Outfile, Infile);
  91:         if ((sp = rindex(av[1], '.')) && strcmp(sp, ".dat") == 0)
  92:             Outfile[strlen(Outfile) - 4] = '\0';
  93:         else
  94:             (void) strcat(Infile, ".dat");
  95:     }
  96:     else
  97:         (void) strcpy(Outfile, av[2]);
  98: }
  99: 
 100: order_unstr(tbl)
 101: STRFILE *tbl;
 102: {
 103:     register int    i, c;
 104:     register int    delim;
 105:     register long   *seekpts;
 106: 
 107:     seekpts = (long *) malloc(sizeof *seekpts * tbl->str_numstr);   /* NOSTRICT */
 108:     if (seekpts == NULL) {
 109:         perror("malloc");
 110:         exit(-1);
 111:         /* NOTREACHED */
 112:     }
 113:     (void) fread((char *) seekpts, sizeof *seekpts, tbl->str_numstr, Inf);
 114:     delim = 0;
 115:     for (i = 0; i < tbl->str_numstr; i++, seekpts++) {
 116:         if (i != 0)
 117:             if (i == tbl->str_delims[delim]) {
 118:                 fputs("%-\n", Outf);
 119:                 delim++;
 120:             }
 121:             else
 122:                 fputs("%%\n", Outf);
 123:         (void) fseek(Inf, *seekpts, 0);
 124:         while ((c = getc(Inf)) != '\0')
 125:             putc(c, Outf);
 126:     }
 127: }

Defined functions

getargs defined in line 73; used 1 times
  • in line 39
main defined in line 31; never used
order_unstr defined in line 100; used 1 times
  • in line 52

Defined variables

Infile defined in line 22; used 5 times
Oflag defined in line 25; used 2 times
Outfile defined in line 23; used 6 times

Defined macros

DELIM_CH defined in line 20; never used
FALSE defined in line 5; used 1 times
  • in line 25
TRUE defined in line 4; never used
Last modified: 1986-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1205
Valid CSS Valid XHTML 1.0 Strict