|
|
1.1 root 1: # LABELS
2: #
3: # Format mailing labels
4: #
5: # Ralph E. Griswold
6: #
7: # Last modified 12/25/85
8: #
9:
10: global line, lsize, repet, llength, ldepth, first
11:
12: procedure main(x)
13: local selectors, use, y, i
14: line := ""
15: selectors := '#'
16: lsize := 9
17: ldepth := 8
18: llength := 40
19: repet := 1
20: i := 0
21: use := "usage: labels [-c n] [-s s] [-t] [-d n] [-w n] [-l n] [-f]"
22: while y := x[i +:= 1] do
23: case y of {
24: "-f": first := 1
25: "-s": selectors := cset(x[i +:= 1]) | stop(use)
26: "-t": {
27: lsize := 12
28: if ldepth > lsize then ldepth := lsize
29: }
30: "-w": llength := (0 < integer(x[i +:= 1])) | stop(use)
31: "-l": {
32: ldepth := (0 < integer(x[i +:= 1])) | stop(use)
33: if lsize < ldepth then lsize := ldepth
34: }
35: "-d": {
36: lsize := (0 < integer(x[i +:= 1])) | stop(use)
37: if ldepth > lsize then ldepth := lsize
38: }
39: "-c": repet := (0 < integer(x[i +:= 1])) | stop(use)
40: default: stop(use)
41: }
42: repeat { # processing loop
43: if line[1] == "#" & upto(selectors,line)
44: then obtain() else {
45: line := read() | break
46: }
47: }
48: end
49:
50: # Obtain next label
51: #
52: procedure obtain()
53: local label, max
54: label := []
55: max := 0
56: line := ""
57: while line := read() do {
58: if line[1] == "*" then next
59: if line[1] == "#" then break
60: if \first then {
61: write(line)
62: return
63: }
64: else put(label,line)
65: max <:= *line
66: if *label > ldepth then {
67: error(label[1],1)
68: return
69: }
70: if max > llength then {
71: error(label[1],2)
72: return
73: }
74: }
75: every 1 to repet do format(label,max)
76: end
77:
78: # Format a label
79: #
80: procedure format(label,width)
81: local j, indent
82: indent := repl(" ",(llength - width) / 2)
83: j := lsize - *label
84: every 1 to j / 2 do write()
85: every write(indent,!label)
86: every 1 to (j + 1) / 2 do write()
87: end
88:
89: # Issue label for an error
90: #
91: procedure error(name,type)
92: static badform
93: initial badform := list(lsize)
94: case type of {
95: 1: badform[3] := " **** too many lines"
96: 2: badform[3] := " **** line too long"
97: }
98: badform[1] := name
99: every write(&errout,!badform)
100: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.