Commit | Line | Data |
---|---|---|
0c858d67 KT |
1 | /*int mbuf[1024]; /*INSTR*/ |
2 | int psw 1; | |
3 | int initf 1; | |
4 | ||
5 | main(argc, argv) | |
6 | char *argv[]; | |
7 | { | |
8 | auto f,fct,file; | |
9 | ||
10 | if(argc < 2) { | |
11 | printf("Usage: cpost [-d] file1 file2 ...\n"); | |
12 | exit(); | |
13 | } | |
14 | ||
15 | if(*argv[1] == '-') { | |
16 | fct = argv[1][1] - '0'; | |
17 | if((fct < 1) || (fct > 9)) { | |
18 | printf("-d: 0 < d < 10\n"); | |
19 | exit(); | |
20 | } | |
21 | argv++; | |
22 | argc--; | |
23 | } else { | |
24 | fct = 1; | |
25 | } | |
26 | ||
27 | f = 0; | |
28 | while(++f < argc) { | |
29 | file = open(argv[f], 0); | |
30 | ||
31 | edl(file, fct); | |
32 | ||
33 | close(file); | |
34 | psw = 0; | |
35 | } | |
36 | flsh(0); | |
37 | ||
38 | exit(); | |
39 | } | |
40 | ||
41 | int lno 1; | |
42 | ||
43 | edl(file) | |
44 | { | |
45 | auto t,l; | |
46 | char static buf[20],fld[20],line[200]; | |
47 | char c; | |
48 | field: | |
49 | t = -1; | |
50 | while(((buf[++t] = get(file)) != '\t') && (buf[t] != -1)) | |
51 | if(buf[t] == '\0') goto done; | |
52 | ||
53 | if((c = buf[t]) == -1) c = ' '; | |
54 | buf[t] = '\0'; | |
55 | if(comp(buf,fld)) { | |
56 | lno++; | |
57 | goto junk; | |
58 | } else { | |
59 | if(lno == 0) { | |
60 | put(0,line,++l); | |
61 | } | |
62 | l = copy(buf,line); | |
63 | copy(buf,fld); | |
64 | line[--l] = c; | |
65 | lno = 0; | |
66 | goto fill; | |
67 | } | |
68 | ||
69 | fill: | |
70 | while((line[++l] = get(file)) != '\n') { | |
71 | if(line[l] == -1) line[l] = ' '; | |
72 | if(line[l] == '\0') goto done; | |
73 | } | |
74 | ||
75 | goto field; | |
76 | ||
77 | junk: | |
78 | while((*line = get(file)) != '\n') | |
79 | if(*line == '\0') goto done; | |
80 | ||
81 | goto field; | |
82 | ||
83 | done: | |
84 | if(lno == 0) | |
85 | put(0,line,++l); | |
86 | lno = 1; | |
87 | return(0); | |
88 | ||
89 | } | |
90 | ||
91 | ||
92 | ||
93 | gfld(file, buf) | |
94 | char *buf; | |
95 | { | |
96 | char c; | |
97 | ||
98 | buf--; | |
99 | while(*++buf = get(file)) { | |
100 | if((*buf == '\t') || (*buf == '\n')) { | |
101 | c = *buf; | |
102 | *buf = '\0'; | |
103 | return(c); | |
104 | } else { | |
105 | continue; | |
106 | } | |
107 | } | |
108 | return('\0'); | |
109 | } | |
110 | ||
111 | copy(a, b) | |
112 | char *a,*b; | |
113 | { | |
114 | char *c; | |
115 | ||
116 | b--; | |
117 | c = --a; | |
118 | while(*++b = *++a); | |
119 | return(a - c); | |
120 | } | |
121 | ||
122 | comp(a, b) | |
123 | char *a, *b; | |
124 | { | |
125 | /* printf("comp: %s %s\n",a,b); /*DEBUG*/ | |
126 | a--; | |
127 | b--; | |
128 | while(*++a == *++b) { | |
129 | if(*a == '\0') return(1); | |
130 | } | |
131 | return(0); | |
132 | } | |
133 | ||
134 | ||
135 | char buf[512]; | |
136 | int nread 1; | |
137 | ||
138 | get(ifile) int ifile; | |
139 | { | |
140 | ||
141 | char static *ibuf; | |
142 | ||
143 | if(--nread){ | |
144 | return(*ibuf++); | |
145 | } | |
146 | ||
147 | if(nread = read(ifile,buf,512)){ | |
148 | if(nread < 0)goto err; | |
149 | ||
150 | ibuf = buf; | |
151 | return(*ibuf++); | |
152 | } | |
153 | ||
154 | nread = 1; | |
155 | return(0); | |
156 | ||
157 | err: | |
158 | nread = 1; | |
159 | printf("read error\n"); | |
160 | return(0); | |
161 | ||
162 | } | |
163 | ||
164 | ||
165 | int tp[1] 1; | |
166 | int optr[4]; | |
167 | char bsp[512]; | |
168 | ||
169 | char *obuf[1] bsp; | |
170 | ||
171 | int nflush; | |
172 | ||
173 | put(fil,string,n) | |
174 | char *string; | |
175 | { | |
176 | int i; | |
177 | char *o; | |
178 | ||
179 | /*printf("%d %c %d\n",fil,*string,n);/*DEBUG*/ | |
180 | ||
181 | string--; | |
182 | ||
183 | if((i = optr[fil] + n - 512) >= 0) { | |
184 | n =- i; | |
185 | o = &obuf[fil][optr[fil]] -1; | |
186 | while(--n >= 0) | |
187 | *++o = *++string; | |
188 | optr[fil] = 512; | |
189 | flsh(fil); | |
190 | n = i; | |
191 | } | |
192 | ||
193 | o = &obuf[fil][optr[fil]] - 1; | |
194 | optr[fil] =+ n; | |
195 | ||
196 | while(--n >= 0) { | |
197 | *++o = *++string; | |
198 | } | |
199 | return(0); | |
200 | } | |
201 | ||
202 | flsh(fil) | |
203 | { | |
204 | extern tp[]; | |
205 | ||
206 | if(optr[fil] <= 0) return(optr[fil]); | |
207 | ||
208 | nflush++; | |
209 | if(write(tp[fil],obuf[fil],optr[fil]) != optr[fil]) | |
210 | return(-1); | |
211 | optr[fil] = 0; | |
212 | return(0); | |
213 | } | |
214 |