|
|
1.1 root 1: # TABLW(1)
2: #
3: # Tabulate words
4: #
5: # Ralph E. Griswold
6: #
7: # Last modified 8/11/84
8: #
9:
10: global limit, icase
11:
12: procedure main(x)
13: local wcount, unique, order, i, s, a, pair, lwidth, rwidth, max
14: limit := 0 # lower limit on usage to list
15: unique := 0 # switch to list unique usage only
16: order := 1 # alphabetical ordering switch
17: i := 0
18: while i < *x do {
19: s := x[i +:= 1] | break
20: case s of {
21: "-a": order := 1
22: "-i": icase := 1
23: "-n": order := 2
24: "-s": limit := (0 < integer(x[i +:= 1])) | Usage()
25: "-u": unique := 1
26: default: Usage()
27: }
28: }
29: wcount := table(0) # table of words
30: every wcount[words()] +:= 1
31: a := sort(wcount,order)
32: if unique = 1 then {
33: every pair := !a do
34: if pair[2] = 1 then write(pair[1])
35: }
36: else {
37: max := 0
38: every max <:= *((!a)[1])
39: lwidth := max + 3
40: rwidth := 0
41: every rwidth <:= *((!a)[2])
42: every pair := !a do
43: write(left(pair[1],lwidth),right(pair[2],rwidth))
44: }
45: end
46:
47: # generate words
48: #
49: procedure words()
50: local wchar, line, word
51: wchar := &lcase ++ &ucase
52: while line := read() do {
53: if \icase then line := map(line)
54: line ? while tab(upto(wchar)) do {
55: word := tab(many(wchar)) || ((tab(any('-\'')) || tab(many(wchar))) | "")
56: if *word > limit then suspend word
57: }
58: }
59: end
60:
61: procedure Usage()
62: stop("usage: tablw [-a -i -n -s n -u]")
63: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.