|
|
1.1 root 1: # LABELS(1)
2: #
3: # Format mailing labels
4: #
5: # Ralph E. Griswold
6: #
7: # Last modified 4/27/83
8: #
9:
10: global line, lsize, repet
11:
12: procedure main(x)
13: local selectors, use, y, i
14: line := ""
15: selectors := '#'
16: lsize := 9
17: repet := 1
18: i := 0
19: use := "usage: labels [-n] [-s string] [-t]"
20: while y := x[i +:= 1] do
21: if y == "-s" then selectors := cset(x[i +:= 1]) | stop(use)
22: else if y == "-t" then lsize := 12 # tape labels
23: else if y[1] == "-" then
24: repet := integer(y[2:0]) | stop(use)
25: else stop(use)
26: repeat {
27: if line[1] == "#" & upto(selectors,line)
28: then obtain() else {line := read() | break}
29: }
30: end
31:
32: # format and write label
33: #
34: procedure format(label,width)
35: local j, indent
36: indent := repl(" ",(40-width)/2)
37: j := lsize - *label
38: every 1 to j/2 do write()
39: every write(indent,!label)
40: every 1 to (j+1)/2 do write()
41: end
42:
43: # format error message as label
44: #
45: procedure error(name,type)
46: static badform
47: initial badform := list(lsize)
48: case type of {
49: 1: badform[4] := " **** too many lines"
50: 2: badform[4] := " **** line too long"
51: }
52: badform[1] := name
53: every write(&errout,!badform)
54: end
55:
56: # obtain label
57: #
58: procedure obtain()
59: local label, max
60: label := []
61: max := 0
62: while line := read() do {
63: if line[1] == "*" then next # comment
64: if line[1] == "#" then break # new label
65: put(label,line)
66: if *line > max then max := *line
67: if *label > 8 then {error(label[1],1); return}
68: if max > 40 then {error(label[1],2); return}
69: }
70: every 1 to repet do format(label,max)
71: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.