home *** CD-ROM | disk | FTP | other *** search
- /* wc line and word count */
-
- #include <stdio.h>
-
- main(argc, argv)
- char **argv;
- {
- int i, token;
- register FILE *fp;
- long linect, wordct, charct;
- long tlinect=0, twordct=0, tcharct=0;
- char *wd;
- register int c;
-
- wd = "lwc";
- if(argc > 1 && *argv[1] == '-') {
- wd = ++argv[1];
- argc--;
- argv++;
- }
-
- i = 1;
- fp = stdin;
- do {
- if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) {
- fprintf(stderr, "wc: can't open %s\n", argv[i]);
- continue;
- }
- linect = 0;
- wordct = 0;
- charct = 0;
- token = 0;
- for(;;) {
- c = getc(fp);
- if (c == EOF)
- break;
- charct++;
- if(' '<c&&c<0177) {
- if(!token) {
- wordct++;
- token++;
- }
- continue;
- }
- if(c=='\n')
- linect++;
- else if(c!=' '&&c!='\t')
- continue;
- token = 0;
- }
- /* print lines, words, chars */
- wcp(wd, charct, wordct, linect);
- if(argc>1) {
- printf(" %s\n", argv[i]);
- } else
- printf("\n");
- fclose(fp);
- tlinect += linect;
- twordct += wordct;
- tcharct += charct;
- } while(++i<argc);
- if(argc > 2) {
- wcp(wd, tcharct, twordct, tlinect);
- printf(" total\n");
- }
- exit(0);
- }
-
- wcp(wd, charct, wordct, linect)
- register char *wd;
- long charct; long wordct; long linect;
- {
- while (*wd) switch (*wd++) {
- case 'l':
- printf("%7ld", linect);
- break;
-
- case 'w':
- printf("%7ld ", wordct);
- break;
-
- case 'c':
- printf("%7ld", charct);
- break;
- }
- }
-