|
|
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.