|
|
1.1 root 1: #include <stdio.h>
2:
3: #define NBUF (64*1024)
4: int space[256];
5: char *opt="lwc";
6: long twords;
7: long tlines;
8: long tchars;
9:
10: main(argc, argv)
11: char *argv[];
12: {
13: register i, fd, status=0;
14: if(argc>1 && argv[1][0]=='-'){
15: opt=++argv[1];
16: --argc, argv++;
17: }
18: for(i = 0; i < 256; i++)
19: space[i] = 0;
20: space[' '] = space['\t'] = space['\n'] = 1;
21: if(argc==1)
22: count(0, (char *)0);
23: else for(i=1; i<argc; i++){
24: fd=open(argv[i], 0);
25: if(fd<0){
26: fprintf(stderr, "wc: ");
27: perror(argv[i]);
28: status=1;
29: continue;
30: }
31: count(fd, argv[i]);
32: }
33: if(argc>2)
34: printout(tchars, twords, tlines, "total");
35: return status;
36: }
37: unsigned char buf[NBUF+2]; /* 2 for sentinels */
38: count(fd, name)
39: char *name;
40: {
41: register n;
42: register unsigned char *cp, *cpend;
43: register long chars=0, lines=0, words=0;
44:
45: for(;;){
46: if((n=read(fd, buf, NBUF))<=0)
47: goto done;
48: chars+=n;
49: cp=buf;
50: *(cpend = buf+n) = ' ';
51: cpend[1] = 'a';
52: dospace:
53: for(;;){
54: if(*cp == '\n')
55: lines++;
56: if(space[*cp++] == 0){
57: if(cp > cpend)
58: break;
59: goto doword;
60: }
61: }
62: }
63: for(;;){
64: if((n=read(fd, buf, NBUF))<=0)
65: goto done;
66: chars+=n;
67: cp=buf;
68: *(cpend = buf+n) = ' ';
69: cpend[1] = 'a';
70: doword:
71: for(;;){
72: if(space[*cp++]){
73: if(cp > cpend)
74: break;
75: words++;
76: if(cp[-1] == '\n')
77: lines++;
78: goto dospace;
79: }
80: }
81: }
82: done:
83: close(fd);
84: printout(chars, words, lines, name);
85: tchars+=chars;
86: twords+=words;
87: tlines+=lines;
88: }
89: printout(charct, wordct, linect, name)
90: long charct, wordct, linect;
91: char *name;
92: {
93: register char *wd=opt;
94: while (*wd) switch (*wd++) {
95: case 'l':
96: printf("%7ld ", linect);
97: break;
98:
99: case 'w':
100: printf("%7ld ", wordct);
101: break;
102:
103: case 'c':
104: printf("%7ld", charct);
105: break;
106: }
107: if(name)
108: printf(" %s\n", name);
109: else
110: printf("\n");
111: }
112:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.