Introduction
Introduction Statistics Contact Development Disclaimer Help
wc.c - 9base - revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log
Files
Refs
README
LICENSE
---
wc.c (15163B)
---
1 /*
2 * wc -- count things in utf-encoded text files
3 * Bugs:
4 * The only white space characters recognized are ' ', '\t' and '…
5 * ISO 10646 has many more blanks scattered through it.
6 * Should count characters that cannot occur in any rune (hex f0-…
7 * Should count non-canonical runes (e.g. hex c1,80 instead of he…
8 */
9 #include <u.h>
10 #include <libc.h>
11 #define NBUF (8*1024)
12 uvlong nline, tnline, pline;
13 uvlong nword, tnword, pword;
14 uvlong nrune, tnrune, prune;
15 uvlong nbadr, tnbadr, pbadr;
16 uvlong nchar, tnchar, pchar;
17 void count(int, char *);
18 void report(uvlong, uvlong, uvlong, uvlong, uvlong, char *);
19 void
20 main(int argc, char *argv[])
21 {
22 char *status="";
23 int i, f;
24 ARGBEGIN {
25 case 'l': pline++; break;
26 case 'w': pword++; break;
27 case 'r': prune++; break;
28 case 'b': pbadr++; break;
29 case 'c': pchar++; break;
30 default:
31 fprint(2, "Usage: %s [-lwrbc] [file ...]\n", argv0);
32 exits("usage");
33 } ARGEND
34 if(pline+pword+prune+pbadr+pchar == 0) {
35 pline = 1;
36 pword = 1;
37 pchar = 1;
38 }
39 if(argc==0)
40 count(0, 0);
41 else{
42 for(i=0;i<argc;i++){
43 f=open(argv[i], OREAD);
44 if(f<0){
45 perror(argv[i]);
46 status="can't open";
47 }
48 else{
49 count(f, argv[i]);
50 tnline+=nline;
51 tnword+=nword;
52 tnrune+=nrune;
53 tnbadr+=nbadr;
54 tnchar+=nchar;
55 close(f);
56 }
57 }
58 if(argc>1)
59 report(tnline, tnword, tnrune, tnbadr, tnchar, "…
60 }
61 exits(status);
62 }
63 void
64 report(uvlong nline, uvlong nword, uvlong nrune, uvlong nbadr, uvlong nc…
65 {
66 char line[1024], word[128];
67 line[0] = '\0';
68 if(pline){
69 sprint(word, " %7llud", nline);
70 strcat(line, word);
71 }
72 if(pword){
73 sprint(word, " %7llud", nword);
74 strcat(line, word);
75 }
76 if(prune){
77 sprint(word, " %7llud", nrune);
78 strcat(line, word);
79 }
80 if(pbadr){
81 sprint(word, " %7llud", nbadr);
82 strcat(line, word);
83 }
84 if(pchar){
85 sprint(word, " %7llud", nchar);
86 strcat(line, word);
87 }
88 if(fname){
89 sprint(word, " %s", fname);
90 strcat(line, word);
91 }
92 print("%s\n", line+1);
93 }
94 /*
95 * How it works. Start in statesp. Each time we read a character,
96 * increment various counts, and do state transitions according to the
97 * following table. If we're not in statesp or statewd when done, the
98 * file ends with a partial rune.
99 * | character
100 * state |09,20| 0a |00-7f|80-bf|c0-df|e0-ef|f0-f7|f8-ff
101 * -------+-----+-----+-----+-----+-----+-----+-----+-----
102 * statesp|ASP |ASPN |AWDW |AWDWX|AC2W |AC3W |AC4W |AWDWX
103 * statewd|ASP |ASPN |AWD |AWDX |AC2 |AC3 |AC4 |AWDX
104 * statec2|ASPX |ASPNX|AWDX |AWDR |AC2X |AC3X |AC4X |AWDX
105 * statec3|ASPX |ASPNX|AWDX |AC2R |AC2X |AC3X |AC4X |AWDX
106 * statec4|ASPX |ASPNX|AWDX |AC3R |AC2X |AC3X |AC4X |AWDX f4 8f b…
107 */
108 enum{ /* actions */
109 AC2, /* enter statec2 */
110 AC2R, /* enter statec2, don't count a rune */
111 AC2W, /* enter statec2, count a word */
112 AC2X, /* enter statec2, count a bad rune */
113 AC3, /* enter statec3 */
114 AC3R, /* enter statec3, don't count a rune */
115 AC3W, /* enter statec3, count a word */
116 AC3X, /* enter statec3, count a bad rune */
117 AC4, /* enter statec4 */
118 AC4W, /* enter statec4, count a word */
119 AC4X, /* enter statec4, count a bad rune */
120 ASP, /* enter statesp */
121 ASPN, /* enter statesp, count a newline */
122 ASPNX, /* enter statesp, count a newline, count a…
123 ASPX, /* enter statesp, count a bad rune */
124 AWD, /* enter statewd */
125 AWDR, /* enter statewd, don't count a rune */
126 AWDW, /* enter statewd, count a word */
127 AWDWX, /* enter statewd, count a word, count a ba…
128 AWDX, /* enter statewd, count a bad rune */
129 };
130 uchar statesp[256]={ /* looking for the start of a word */
131 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 00-07 */
132 AWDW, ASP, ASPN, AWDW, AWDW, AWDW, AWDW, AWDW, /* 08-0f */
133 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 10-17 */
134 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 18-1f */
135 ASP, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 20-27 */
136 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 28-2f */
137 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 30-37 */
138 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 38-3f */
139 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 40-47 */
140 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 48-4f */
141 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 50-57 */
142 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 58-5f */
143 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 60-67 */
144 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 68-6f */
145 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 70-77 */
146 AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, AWDW, /* 78-7f */
147 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* 80-87 */
148 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* 88-8f */
149 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* 90-97 */
150 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* 98-9f */
151 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* a0-a7 */
152 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* a8-af */
153 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* b0-b7 */
154 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* b8-bf */
155 AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, /* c0-c7 */
156 AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, /* c8-cf */
157 AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, /* d0-d7 */
158 AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, AC2W, /* d8-df */
159 AC3W, AC3W, AC3W, AC3W, AC3W, AC3W, AC3W, AC3W, /* e0-e7 */
160 AC3W, AC3W, AC3W, AC3W, AC3W, AC3W, AC3W, AC3W, /* e8-ef */
161 AC4W, AC4W, AC4W, AC4W, AC4W, AC4W, AC4W, AC4W, /* f0-f7 */
162 AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,AWDWX,/* f8-ff */
163 };
164 uchar statewd[256]={ /* looking for the next character in a word …
165 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 00-07 */
166 AWD, ASP, ASPN, AWD, AWD, AWD, AWD, AWD, /* 08-0f */
167 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 10-17 */
168 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 18-1f */
169 ASP, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 20-27 */
170 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 28-2f */
171 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 30-37 */
172 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 38-3f */
173 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 40-47 */
174 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 48-4f */
175 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 50-57 */
176 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 58-5f */
177 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 60-67 */
178 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 68-6f */
179 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 70-77 */
180 AWD, AWD, AWD, AWD, AWD, AWD, AWD, AWD, /* 78-7f */
181 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 80-87 */
182 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 88-8f */
183 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 90-97 */
184 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 98-9f */
185 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* a0-a7 */
186 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* a8-af */
187 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* b0-b7 */
188 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* b8-bf */
189 AC2, AC2, AC2, AC2, AC2, AC2, AC2, AC2, /* c0-c7 */
190 AC2, AC2, AC2, AC2, AC2, AC2, AC2, AC2, /* c8-cf */
191 AC2, AC2, AC2, AC2, AC2, AC2, AC2, AC2, /* d0-d7 */
192 AC2, AC2, AC2, AC2, AC2, AC2, AC2, AC2, /* d8-df */
193 AC3, AC3, AC3, AC3, AC3, AC3, AC3, AC3, /* e0-e7 */
194 AC3, AC3, AC3, AC3, AC3, AC3, AC3, AC3, /* e8-ef */
195 AC4, AC4, AC4, AC4, AC4, AC4, AC4, AC4, /* f0-f7 */
196 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* f8-ff */
197 };
198 uchar statec2[256]={ /* looking for 10xxxxxx to complete a rune */
199 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 00-07 */
200 AWDX, ASPX, ASPNX,AWDX, AWDX, AWDX, AWDX, AWDX, /* 08-0f */
201 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 10-17 */
202 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 18-1f */
203 ASPX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 20-27 */
204 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 28-2f */
205 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 30-37 */
206 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 38-3f */
207 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 40-47 */
208 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 48-4f */
209 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 50-57 */
210 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 58-5f */
211 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 60-67 */
212 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 68-6f */
213 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 70-77 */
214 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 78-7f */
215 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* 80-87 */
216 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* 88-8f */
217 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* 90-97 */
218 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* 98-9f */
219 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* a0-a7 */
220 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* a8-af */
221 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* b0-b7 */
222 AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, AWDR, /* b8-bf */
223 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* c0-c7 */
224 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* c8-cf */
225 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* d0-d7 */
226 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* d8-df */
227 AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, /* e0-e7 */
228 AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, /* e8-ef */
229 AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, /* f0-f7 */
230 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* f8-ff */
231 };
232 uchar statec3[256]={ /* looking for 10xxxxxx,10xxxxxx to complete…
233 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 00-07 */
234 AWDX, ASPX, ASPNX,AWDX, AWDX, AWDX, AWDX, AWDX, /* 08-0f */
235 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 10-17 */
236 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 18-1f */
237 ASPX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 20-27 */
238 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 28-2f */
239 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 30-37 */
240 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 38-3f */
241 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 40-47 */
242 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 48-4f */
243 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 50-57 */
244 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 58-5f */
245 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 60-67 */
246 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 68-6f */
247 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 70-77 */
248 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 78-7f */
249 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* 80-87 */
250 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* 88-8f */
251 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* 90-97 */
252 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* 98-9f */
253 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* a0-a7 */
254 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* a8-af */
255 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* b0-b7 */
256 AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, AC2R, /* b8-bf */
257 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* c0-c7 */
258 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* c8-cf */
259 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* d0-d7 */
260 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* d8-df */
261 AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, /* e0-e7 */
262 AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, /* e8-ef */
263 AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, /* f0-f7 */
264 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* f8-ff */
265 };
266 uchar statec4[256]={ /* looking for 10xxxxxx,10xxxxxx,10xxxxxx to…
267 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 00-07 */
268 AWDX, ASPX, ASPNX,AWDX, AWDX, AWDX, AWDX, AWDX, /* 08-0f */
269 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 10-17 */
270 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 18-1f */
271 ASPX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 20-27 */
272 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 28-2f */
273 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 30-37 */
274 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 38-3f */
275 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 40-47 */
276 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 48-4f */
277 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 50-57 */
278 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 58-5f */
279 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 60-67 */
280 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 68-6f */
281 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 70-77 */
282 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 78-7f */
283 AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, /* 80-87 */
284 AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, /* 88-8f */
285 AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, AC3R, /* 90-97 */
286 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* 98-9f */
287 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* a0-a7 */
288 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* a8-af */
289 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* b0-b7 */
290 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* b8-bf */
291 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* c0-c7 */
292 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* c8-cf */
293 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* d0-d7 */
294 AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, AC2X, /* d8-df */
295 AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, /* e0-e7 */
296 AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, AC3X, /* e8-ef */
297 AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, AC4X, /* f0-f7 */
298 AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, AWDX, /* f8-ff */
299 };
300 void
301 count(int f, char *name)
302 {
303 int n;
304 uchar buf[NBUF];
305 uchar *bufp, *ebuf;
306 uchar *state=statesp;
307
308 nline = 0;
309 nword = 0;
310 nrune = 0;
311 nbadr = 0;
312 nchar = 0;
313
314 for(;;){
315 n=read(f, buf, NBUF);
316 if(n<=0)
317 break;
318 nchar+=n;
319 nrune+=n; /* might be too large, gets decreased l…
320 bufp=buf;
321 ebuf=buf+n;
322 do{
323 switch(state[*bufp]){
324 case AC2: state=statec2; bre…
325 case AC2R: state=statec2; --nrune; bre…
326 case AC2W: state=statec2; nword++; bre…
327 case AC2X: state=statec2; nbadr++; bre…
328 case AC3: state=statec3; bre…
329 case AC3R: state=statec3; --nrune; bre…
330 case AC3W: state=statec3; nword++; bre…
331 case AC3X: state=statec3; nbadr++; bre…
332 case AC4: state=statec4; bre…
333 case AC4W: state=statec4; nword++; bre…
334 case AC4X: state=statec4; nbadr++; bre…
335 case ASP: state=statesp; bre…
336 case ASPN: state=statesp; nline++; bre…
337 case ASPNX: state=statesp; nline++; nbadr++; bre…
338 case ASPX: state=statesp; nbadr++; bre…
339 case AWD: state=statewd; bre…
340 case AWDR: state=statewd; --nrune; bre…
341 case AWDW: state=statewd; nword++; bre…
342 case AWDWX: state=statewd; nword++; nbadr++; bre…
343 case AWDX: state=statewd; nbadr++; bre…
344 }
345 }while(++bufp!=ebuf);
346 }
347 if(state!=statesp && state!=statewd)
348 nbadr++;
349 if(n<0)
350 fprint(2, "%s: %r\n", name);
351 report(nline, nword, nrune, nbadr, nchar, name);
352 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.