|
|
1.1 ! root 1: static char *sccsid = "@(#)wc.c 4.3 (Berkeley) 11/7/80"; ! 2: /* wc line and word count */ ! 3: ! 4: #include <stdio.h> ! 5: long linect, wordct, charct, pagect; ! 6: long tlinect, twordct, tcharct, tpagect; ! 7: int baud=300; /* baud rate */ ! 8: int cps=30; /* # of chars per second */ ! 9: int lpp=66; /* # of lines per page */ ! 10: char *wd = "lwc"; ! 11: int verbose; ! 12: int uucp; ! 13: ! 14: main(argc, argv) ! 15: char **argv; ! 16: { ! 17: int i, token; ! 18: register FILE *fp; ! 19: register int c; ! 20: char *p; ! 21: ! 22: while (argc > 1 && *argv[1] == '-') { ! 23: switch (argv[1][1]) { ! 24: case 'l': case 'w': case 'c': case 'p': case 't': ! 25: wd = argv[1]+1; ! 26: break; ! 27: case 's': ! 28: lpp = atoi(argv[1]+2); ! 29: if (lpp <= 0) ! 30: goto usage; ! 31: break; ! 32: case 'v': ! 33: verbose++; ! 34: wd = "lwcpt"; ! 35: break; ! 36: case 'u': ! 37: uucp++; ! 38: break; ! 39: case 'b': ! 40: baud = atoi(argv[1]+2); ! 41: if (baud == 110) ! 42: cps = 10; ! 43: else ! 44: cps = baud / 10; ! 45: if (cps <= 0) ! 46: goto usage; ! 47: break; ! 48: default: ! 49: usage: ! 50: fprintf(stderr, "Usage: wc [-lwcpt] [-v] [-u] [-spagesize] [-bbaudrate]\n"); ! 51: exit(1); ! 52: } ! 53: argc--; ! 54: argv++; ! 55: } ! 56: ! 57: if (uucp) ! 58: cps = cps * 9 / 10; /* 27 cps at 300 baud */ ! 59: ! 60: if (verbose) { ! 61: for (p=wd; *p; p++) ! 62: switch(*p) { ! 63: case 'l': ! 64: printf("lines\t"); ! 65: break; ! 66: case 'w': ! 67: printf("words\t"); ! 68: break; ! 69: case 'c': ! 70: printf("chars\t"); ! 71: break; ! 72: case 'p': ! 73: printf("pages\t"); ! 74: break; ! 75: case 't': ! 76: printf("time@%d\t",baud); ! 77: break; ! 78: } ! 79: printf("\n"); ! 80: } ! 81: ! 82: i = 1; ! 83: fp = stdin; ! 84: do { ! 85: if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) { ! 86: fprintf(stderr, "wc: can't open %s\n", argv[i]); ! 87: continue; ! 88: } ! 89: linect = 0; ! 90: wordct = 0; ! 91: charct = 0; ! 92: pagect = 0; ! 93: token = 0; ! 94: for(;;) { ! 95: c = getc(fp); ! 96: if (c == EOF) ! 97: break; ! 98: charct++; ! 99: if(' '<c&&c<0177) { ! 100: if(!token) { ! 101: wordct++; ! 102: token++; ! 103: } ! 104: continue; ! 105: } ! 106: if(c=='\n') { ! 107: linect++; ! 108: if (linect % lpp == 1) ! 109: pagect++; ! 110: } ! 111: else if(c!=' '&&c!='\t') ! 112: continue; ! 113: token = 0; ! 114: } ! 115: /* print lines, words, chars */ ! 116: wcp(wd, charct, wordct, linect, pagect); ! 117: if(argc>1) { ! 118: printf(" %s\n", argv[i]); ! 119: } else ! 120: printf("\n"); ! 121: fclose(fp); ! 122: tlinect += linect; ! 123: twordct += wordct; ! 124: tcharct += charct; ! 125: tpagect += pagect; ! 126: } while(++i<argc); ! 127: if(argc > 2) { ! 128: wcp(wd, tcharct, twordct, tlinect, tpagect); ! 129: printf(" total\n"); ! 130: } ! 131: exit(0); ! 132: } ! 133: ! 134: wcp(wd, charct, wordct, linect, pagect) ! 135: register char *wd; ! 136: long charct; long wordct; long linect, pagect; ! 137: { ! 138: while (*wd) switch (*wd++) { ! 139: case 'l': ! 140: ipr(linect); ! 141: break; ! 142: ! 143: case 'w': ! 144: ipr(wordct); ! 145: break; ! 146: ! 147: case 'c': ! 148: ipr(charct); ! 149: break; ! 150: ! 151: case 'p': ! 152: ipr(pagect); ! 153: break; ! 154: ! 155: case 't': ! 156: prttime(charct/cps); ! 157: break; ! 158: } ! 159: } ! 160: ! 161: ipr(num) ! 162: long num; ! 163: { ! 164: if (verbose) ! 165: printf("%ld\t", num); ! 166: else ! 167: printf("%7ld", num); ! 168: } ! 169: ! 170: prttime(secs) ! 171: long secs; ! 172: { ! 173: int hrs,mins; ! 174: float t; ! 175: long osecs; ! 176: char *units; ! 177: ! 178: osecs = secs; ! 179: hrs = secs / (60*60); ! 180: secs = secs % (60*60); ! 181: mins = secs / 60; ! 182: secs = secs % 60; ! 183: ! 184: t = osecs; ! 185: if (hrs) { ! 186: t /= (60*60); ! 187: units = "hr"; ! 188: } else if (mins) { ! 189: t /= 60; ! 190: units = "mi"; ! 191: } else { ! 192: units = "se"; ! 193: } ! 194: printf("%4.1f %2s\t", t, units); ! 195: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.