! CONTEN - program to produce a table of contents for a ! MACRO program. ! ! G. Brown/R. McQueen/V. Brownell 5-Aug-77 ! ! Initialization and Patterns &TRIM = 1 * &VERSION = 200000005 ITEM = ARRAY(10) ; OLDITEM = ARRAY(10) ; NUMBER = ARRAY(10,0) POSIT = ARRAY(10); DEXT = '.MAC' POSIT<1> = 0 ; POSIT<2> = 5 ; POSIT<3> = 10 ; POSIT<4> = 15 POSIT<5> = 20 ; POSIT<6> = 25 SUBTPAT = ('S' ! 's') ('U' ! 'u') ('B' ! 'b') ('T' ! 't') + ('T' ! 't') ('L' ! 'l') FF = ASCII(14) REM . LINE EOL = ASCII(11) ! ASCII(12) ! ASCII(15) ! ASCII(14) MINSEP = (SPAN(' ') ! NULL) '--' (SPAN(' ') ! NULL) SUBPAT = POS(0) (SPAN(' ') ! NULL) SUBTPAT SPAN(' ') + REM . LINE INPUT('TTY1','TTY:') OUTPUT('TTY','TTY:','T') * EXIT(-1,,'CONTEN') EXIT(-1) ! Starting Code GETFILE TTY = 'FILE: '; FILE = TTY1 FILE '.' :S(HASEXTN) TRYAGN FILE BREAK('[') . T = T DEXT :S(HASEXTN) FILE = FILE DEXT HASEXTN FILE(FILE) :S(FILOPN) DEXT '.FAI' :S(GETFILE) FILE DEXT = DEXT = '.FAI' :(TRYAGN) FILOPN INPUT('INPUT',FILE,'T') :F(GETFILE) FILE '.' REM = '.CON' OUTPUT('OUTPUT',FILE) PAGENO = 1 TTY = 'NAME: ' FORNAME = TTY1 SW.INI.FLAG = ; SPC = 'SWITCH.INI' FILE(SPC) :F(NEXT) INPUT(.INI,SPC) LINE = INI :F(NEXT) LINE ? (POS(0) 'CONTEN' REM . SWITCHES) :F(-1) MODE = 'NOR'; FIRST = 'N' SWITCHES ? ('MODE:' LEN(3) . MODE) SWITCHES ? ('FIRST:' LEN(1) . FIRST) SW.INI.FLAG = 1; ENDFILE(SPC) :(DONT) NEXT TTY = 'FIRST? ' FIRST = TTY1 :F(END) TTY = 'MODE: ' MODE = TTY1 :F(END) DONT FIRST ? POS(0) ('Y' ! 'y') :S(2) DOFIRST = ABORT MODE POS(0) ('R' ! 'r') ('U' ! 'u') :F(2) RUNOFF.FLAG = 1 ! Produce the Table of Contents T = 1 OUTPUT = ' SUBTTL Table of Contents' OUTPUT = EQ(RUNOFF.FLAG) :S(3) OUTPUT = ';+' OUTPUT = ';.pag.lit' OUTPUT = OUTPUT = '; Table of Contents for ' FORNAME OUTPUT = ';' OUTPUT = ';' OUTPUT = '; Section Page' NEXTL LINE = INPUT :F(END.OF.FILE) CHKFF LINE FF :F(SUBTTL) PAGENO = PAGENO + 1 :(CHKFF) SUBTTL LINE SUBPAT :F(NEXTL) LINE DOFIRST EOL REM = :S(NOTFRST) DOFIRST = :(NEXTL) NOTFRST SECTION = 1 ; T = LINE BREAKUP LINE ARB . ITEM
MINSEP REM . T :F(SUBSEC) SECTION = SECTION + 1 ; LINE = T :(BREAKUP) SUBSEC ITEM
= T ; T = 0 BIGLOP OUTL = '; ' LLOOP GE(T,SECTION) :S(LEVEL) T = T + 1 IDENT(ITEM,OLDITEM) :S(LLOOP) LEVEL NUMBER = NUMBER + 1 ; LINE = T + 1 LEVELL NUMBER = 0 :F(TNUM) OLDITEM = LINE = LINE + 1 :(LEVELL) TNUM OUTL = OUTL DUPL(' ',POSIT) SECTNO = DUPL(' ',3 - SIZE(NUMBER<1>)) ; LINE = 1 NUMLOP SECTNO = SECTNO NUMBER '.' LINE = LINE + 1 LE(LINE,T) :S(NUMLOP) OUTL = OUTL SECTNO DUPL(' ',4 * T - SIZE(SECTNO) + 1 ) ITEM GE(T,SECTION) :S(GOTSEC) OUTPUT = OUTL ; OLDITEM = ITEM :(BIGLOP) GOTSEC OUTL = OUTL DUPL(' ',REMDR(SIZE(OUTL),2)) OUTL = OUTL DUPL('. ',(62 - SIZE(OUTL)) / 2) OUTPUT = OUTL DUPL(' ',4 - SIZE(PAGENO)) PAGENO OLDITEM = ITEM :(NEXTL) END.OF.FILE EQ(RUNOFF.FLAG) :S(END) OUTPUT = OUTPUT = ';.end lit.pag' OUTPUT = ';-' ! End of CONTEN.SNO END