|
|
1.1 root 1: /*int mbuf[1024]; /*INSTR*/
2: int ig 100;
3: int esw;
4: int initf 1;
5: char ssp[270];
6: char *sym[9] {ssp,
7: ssp + 30,
8: ssp + 60,
9: ssp + 90,
10: ssp + 120,
11: ssp + 150,
12: ssp + 180,
13: ssp + 210,
14: ssp + 240
15: };
16:
17: main(argc, argv)
18: char *argv[];
19: {
20: auto f,fct,file,i;
21:
22: if(argc < 2) {
23: printf("Usage: crpost [-d] file1 file2 ...\n");
24: exit();
25: }
26:
27: if(argv[1][0] == '-') {
28: if(argv[1][1] == 'E') {
29: fct = argv[1][2] - '0';
30: esw = 1;
31: goto on;
32: }
33: fct = argv[1][1] - '0';
34: if((fct < 1) || (fct > 9)) {
35: printf("-d: 0 < d < 10\n");
36: exit();
37: }
38: if(argv[1][2] == 'x') {
39: ig = fct-1;
40: }
41: on:
42: printf("%s ", argv[1]);
43: argv++;
44: argc--;
45: } else {
46: fct = 3;
47: }
48:
49: f = 0;
50: while(++f < argc) {
51: file = open(argv[f], 0);
52:
53: edf(file, fct);
54:
55: close(file);
56: }
57: printf("\n");
58: flsh(1);
59:
60: exit();
61: }
62:
63: int lno 1;
64:
65: edf(file, fct)
66: {
67: auto i,j,l;
68: extern lno,etext;
69: char brk,*buf,bufsp[150],line[150];
70: char extern *sym[];
71:
72: /* monitor(&main,&etext,&mbuf,1024); /*INSTR*/
73: for(i = 0; i < fct; i++)
74: *sym[i] = 0200;
75: fields:
76: l = -1;
77: buf = &bufsp;
78:
79: for(i = 0; i < fct; ++i) {
80: buf--;
81:
82: swt:
83:
84: switch(*++buf = get(file)) {
85:
86: default:
87: if(esw && *buf >= 'A' && *buf <= 'Z'
88: && i == 0)
89: *buf =| 040;
90: goto swt;
91:
92: case -1:
93: *buf = ' ';
94: case '\t':
95: if(i == ig) continue;
96: brk = *buf;
97: *buf = '\0';
98: buf = &bufsp;
99: if(comp(buf, sym[i])) {
100: if(esw && i == 0) {
101: line[0] = line[1] = '\t';
102: l = 1;
103: goto rest;
104: }
105: line[++l] = '\t';
106: continue;
107: } else {
108: copy(buf, sym[i]);
109: l =+ copy(buf, &line[++l]);
110: line[--l] = brk;
111: if(l < 8 && esw && i == 0)
112: line[++l] = '\t';
113: j = i;
114: while(++j < fct)
115: *sym[j] = 0200;
116: continue;
117: }
118:
119: case '\n':
120: lno++;
121: brk = *buf;
122: *buf = '\0';
123: buf = &bufsp;
124: if(comp(buf, sym[i])) {
125: goto fields;
126: } else {
127: copy(buf, sym[i]);
128: l =+ copy(buf, &line[++l]);
129: line[--l] = '\n';
130: j = i;
131: while(++j < fct)
132: *sym[j] = 0;
133: goto out;
134: }
135:
136: case '\0':
137: goto fexit;
138: }
139: }
140:
141: rest:
142: while((line[++l] = get(file)) != '\n')
143: if(line[l] == '\0') goto fexit;
144:
145: lno++;
146: out:
147: if(*line != '\t') {
148: put(1,"\n",1);
149: lno++;
150: }
151:
152: put(1,line,++l);
153:
154: goto fields;
155:
156: fexit:
157: /* monitor(0); /*INSTR*/
158: return(0);
159:
160: }
161:
162:
163: copy(a, b)
164: char *a,*b;
165: {
166: char *c;
167:
168: b--;
169: c = --a;
170: while(*++b = *++a);
171: return(a - c);
172: }
173:
174: comp(a, b)
175: char *a, *b;
176: {
177: /* printf("comp: %s %s\n",a,b); /*DEBUG*/
178: a--;
179: b--;
180: while(*++a == *++b) {
181: if(*a == '\0') return(1);
182: }
183: return(0);
184: }
185:
186:
187: char buf[512];
188: int nread 1;
189:
190: get(ifile) int ifile;
191: {
192:
193: char static *ibuf;
194:
195: if(--nread){
196: return(*ibuf++);
197: }
198:
199: if(nread = read(ifile,buf,512)){
200: if(nread < 0)goto err;
201:
202: ibuf = buf;
203: return(*ibuf++);
204: }
205:
206: nread = 1;
207: return(0);
208:
209: err:
210: nread = 1;
211: printf("read error\n");
212: return(0);
213:
214: }
215:
216: int optr;
217: char bsp[512];
218:
219: char *obuf bsp;
220:
221: int nflush;
222:
223: put(fil, string, n)
224: char *string;
225: {
226: register int i;
227: register char *o;
228:
229: /*printf("%d %c %d\n",fil,*string,n);/*DEBUG*/
230:
231: string--;
232:
233: if((i = optr + n - 512) >= 0) {
234: n =- i;
235: o = &obuf[optr] -1;
236: while(--n >= 0)
237: *++o = *++string;
238: optr = 512;
239: flsh(fil);
240: n = i;
241: }
242:
243: o = &obuf[optr] - 1;
244: optr =+ n;
245:
246: while(--n >= 0) {
247: *++o = *++string;
248: }
249: return(0);
250: }
251:
252: flsh(fil)
253: {
254:
255: if(optr <= 0) return(optr);
256:
257: nflush++;
258: if(write(fil, obuf, optr) != optr)
259: return(-1);
260: optr = 0;
261: return(0);
262: }
263:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.