|
|
1.1 root 1: # include <stdio.h>
2: # include "strfile.h"
3:
4: /*
5: * This program un-does what "strfile" makes, thereby obtaining the
6: * original file again. This can be invoked with the name of the output
7: * file, the input file, or both. If invoked with only a single argument
8: * ending in ".dat", it is pressumed to be the input file and the output
9: * file will be the same stripped of the ".dat". If the single argument
10: * doesn't end in ".dat", then it is presumed to be the output file, and
11: * the input file is that name prepended by a ".dat". If both are given
12: * they are treated literally as the input and output files.
13: *
14: * Ken Arnold Aug 13, 1978
15: */
16:
17: char sccsid[] = "@(#)unstr.c 1.2 (Berkeley) 5/14/81";
18:
19: # define reg register
20:
21: # define DELIM_CH '-'
22:
23: char infile[50], /* name of input file */
24: outfile[50], /* name of output file */
25: *rindex();
26:
27: long *calloc();
28:
29: main(ac, av)
30: int ac;
31: char *av[]; {
32:
33: reg char c;
34: reg FILE *inf, *outf;
35: int nstr, delim;
36: long *seekpts;
37: STRFILE tbl; /* description table */
38:
39: getargs(ac, av);
40: if ((inf = fopen(infile, "r")) == NULL) {
41: perror(infile);
42: exit(-1);
43: }
44: fread(&tbl,sizeof tbl,1,inf);
45: nstr = tbl.str_numstr;
46: if ((seekpts = calloc(sizeof *seekpts, nstr)) == NULL) {
47: perror("calloc");
48: exit(-1);
49: }
50: fread(seekpts, (sizeof seekpts[0]), nstr, inf);
51: if ((outf = fopen(outfile, "w")) == NULL) {
52: perror(outfile);
53: exit(-1);
54: }
55: delim = 0;
56: while ((c = getc(inf)) != EOF)
57: if (c != '\0')
58: putc(c, outf);
59: else if (--nstr)
60: if (ftell(inf) == tbl.str_delims[delim]) {
61: fputs("%-\n", outf);
62: delim++;
63: }
64: else
65: fputs("%%\n", outf);
66: }
67: getargs(ac, av)
68: reg int ac;
69: reg char **av; {
70:
71: reg char *sp;
72:
73: if (ac < 2) {
74: printf("usage: %s datafile[.dat] [ outfile ]\n",av[0]);
75: exit(-1);
76: }
77: strcpy(infile,av[1]);
78: if (ac < 3) {
79: strcpy(outfile,infile);
80: if ((sp = rindex(av[1])) && strcmp(sp, ".dat") == 0)
81: outfile[strlen(outfile) - 4] = '\0';
82: else
83: strcat(infile, ".dat");
84: }
85: else
86: strcpy(outfile, av[2]);
87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.