1*12856Smo static char *sccsid = "@(#)wc.c 4.6 (Berkeley) 06/01/83"; 21161Sbill /* wc line and word count */ 31161Sbill 41161Sbill #include <stdio.h> 51161Sbill long linect, wordct, charct, pagect; 61161Sbill long tlinect, twordct, tcharct, tpagect; 71161Sbill char *wd = "lwc"; 81161Sbill 91161Sbill main(argc, argv) 101161Sbill char **argv; 111161Sbill { 121161Sbill int i, token; 131161Sbill register FILE *fp; 141161Sbill register int c; 151161Sbill char *p; 161161Sbill 171161Sbill while (argc > 1 && *argv[1] == '-') { 181161Sbill switch (argv[1][1]) { 19*12856Smo case 'l': case 'w': case 'c': 201161Sbill wd = argv[1]+1; 211161Sbill break; 221750Smark default: 231750Smark usage: 24*12856Smo fprintf(stderr, "Usage: wc [-lwc] [files]\n"); 251750Smark exit(1); 261161Sbill } 271161Sbill argc--; 281161Sbill argv++; 291161Sbill } 301161Sbill 311161Sbill i = 1; 321161Sbill fp = stdin; 331161Sbill do { 341161Sbill if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) { 3512088Smckusick perror(argv[i]); 361161Sbill continue; 371161Sbill } 381161Sbill linect = 0; 391161Sbill wordct = 0; 401161Sbill charct = 0; 411161Sbill token = 0; 421161Sbill for(;;) { 431161Sbill c = getc(fp); 441161Sbill if (c == EOF) 451161Sbill break; 461161Sbill charct++; 471161Sbill if(' '<c&&c<0177) { 481161Sbill if(!token) { 491161Sbill wordct++; 501161Sbill token++; 511161Sbill } 521161Sbill continue; 531161Sbill } 541161Sbill if(c=='\n') { 551161Sbill linect++; 561161Sbill } 571161Sbill else if(c!=' '&&c!='\t') 581161Sbill continue; 591161Sbill token = 0; 601161Sbill } 611161Sbill /* print lines, words, chars */ 62*12856Smo wcp(wd, charct, wordct, linect); 631161Sbill if(argc>1) { 641161Sbill printf(" %s\n", argv[i]); 651161Sbill } else 661161Sbill printf("\n"); 671161Sbill fclose(fp); 681161Sbill tlinect += linect; 691161Sbill twordct += wordct; 701161Sbill tcharct += charct; 711161Sbill } while(++i<argc); 721161Sbill if(argc > 2) { 73*12856Smo wcp(wd, tcharct, twordct, tlinect); 741161Sbill printf(" total\n"); 751161Sbill } 761161Sbill exit(0); 771161Sbill } 781161Sbill 79*12856Smo wcp(wd, charct, wordct, linect) 801161Sbill register char *wd; 81*12856Smo long charct; long wordct; long linect; 821161Sbill { 831161Sbill while (*wd) switch (*wd++) { 841161Sbill case 'l': 851161Sbill ipr(linect); 861161Sbill break; 871161Sbill 881161Sbill case 'w': 891161Sbill ipr(wordct); 901161Sbill break; 911161Sbill 921161Sbill case 'c': 931161Sbill ipr(charct); 941161Sbill break; 951161Sbill 961161Sbill } 971161Sbill } 981161Sbill 991161Sbill ipr(num) 1001161Sbill long num; 1011161Sbill { 102*12856Smo printf(" %7ld", num); 1031161Sbill } 1041161Sbill 105