|
|
1.1 root 1: # TABLW
2: #
3: # Tabulate words
4: #
5: # Ralph E. Griswold
6: #
7: # Last modified 4/29/86
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 := 3 # alphabetical ordering switch
17: i := 0
18: while i < *x do {
19: s := x[i +:= 1] | break
20: case s of {
21: "-a": order := 3
22: "-i": icase := 1
23: "-n": order := 4
24: "-l": 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: while s := get(a) do
34: if get(a) = 1 then write(s)
35: }
36: else {
37: max := 0
38: rwidth := 0
39: i := 1
40: while i < *a do {
41: max <:= *a[i]
42: rwidth <:= *a[i +:= 1]
43: }
44: lwidth := max + 3
45: while write(left(get(a),lwidth),right(get(a),rwidth))
46: }
47: end
48:
49: # generate words
50: #
51: procedure words()
52: local wchar, line, word
53: wchar := &lcase ++ &ucase
54: while line := read() do {
55: if \icase then line := map(line)
56: line ? while tab(upto(wchar)) do {
57: word := tab(many(wchar)) || ((tab(any('-\'')) || tab(many(wchar))) | "")
58: if *word > limit then suspend word
59: }
60: }
61: end
62:
63: procedure Usage()
64: stop("usage: tablw [-a -i -n -l n -u]")
65: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.