/ns .......|.......|.......|.......|.......|.......|.......|.......|......... ; ; This glossary will reformat an entire file, assuming block ;structured paragraphs. ; ; If you wish to have unformmatted or centered text, put a "u" or ;"c" in column 3 of the ruler. For example: ; ; ..u.....|........|.......|......|....... ; this text is unformatted ; ; ..c.....|........|.......|......|...... ; this text will be centered ; ; ........|........|.......|......|...... ; this text will be reformatted ; ; ; ;*********************** ;* * ;* Format File * ;* * ;*********************** ; 'key ^ Reformat File :goforit ;;; display-off ; comment out if you wish do see display 'home 'br loop2 :loop 'column 3 'ruler 'xchar 'range uu UU 'beq noformat 'xchar 'range cc CC 'beq center 'call reformat :loop2 'display-pos 'call nxtpar 'eof 'bne loop :loop9 'home 'rtn :noformat 'down 'putcol 'tab 'getcol 'eof 'beq loop9 'call dotcmd 'bne noformat 'down ; go past ruler 'br loop :center 'text ^s^c 'down 'eof 'beq loop9 'column 3 'ruler 'range cc CC 'beq center 'down 'br loop ;*********************** ; * ; Reformat from cursor * ; through next ruler * ; * ;*********************** 'key R Reformat Til' Next Ruler 'display-off 'crt clear 'rulerflag=1 :rloop 'column > 'eof 'beq endrul 'eol 'beq rl1 'call dotcmd 'bne rl2 :rl1 'display-pos 'call nxtpar 'cmpnum rulerflag,0 'beq endrul 'eof 'beq endrul :rl2 'call reformat 'jmp rl1 :endrul 'display-page 'rtn ; ;*********************** ;* * ;* Reformat Paragraph * ;* * ;*********************** ; ; This macro reformats the paragraph the cursor is on. Before ;formatting the paragraph it moves the left margin to the new left margin. ;It assumes you are useing block style paragraphs, with one or more blank ;lines between paragraphs. 'key F Reformat Paragraph :reformat 'display-off ; for speed :rfm0 'column 1 ; go to beginning of line 'cmp ; blank? 'beq rfm1 ; if not then advance to next line 'text ^w :rfm1 'putcol ; save our column address 'column > ; move to left margin 'text ^s^u ; and align our text there 'getcol ; return to old column address 'eof ; just align last line in file? 'beq rfm4 ; then go back up and reformat 'down ; check out the next line 'eol ; empty? 'beq rfm4 ; then go back up and reformat 'call dotcmd ; see if this is a dot command 'beq rfm4 ; if so then go back up and reformat 'br rfm0 ; else align this line ; go back to top of paragraph :rfm4 'up ; up one line 'bof ; beginning of file? 'beq rfm6 'call dotcmd ; dot command? 'beq rfm5 'eol ; empty line? 'bne rfm4 :rfm5 'down ; get back to start of paragraph :rfm6 'display-line ; re-enable output 'reformat ; now reformat the paragraph 'rtn ; all done ; this routine tests to see if the current line is a dot command :dotcmd 'putcol ; save column address 'column 1 ; and go to column 1 'cmp . ; is this a dot command 'getcol ; restore original column 'rtn ; and return to the user ; ;*********************** ;* * ;* Next Paragraph * ;* * ;*********************** ; ; This macro advances the cursor to the beginning of the next ;paragraph. It assumes you are using block style paragraphs with one or ;more blank lines between paragraphs. 'key T Next Paragraph :nxtpar 'column > ; get to left margin 'down 'eof ; end of file 'req ; yes, this is as far as we can go 'eol ; blank line? 'beq nxp2 ; then we must be out of this paragraph 'call dotcmd ; dot command also terminates paragraph 'bne nxtpar 'cmpnum rulerflag,1 ; is this baby set for key R? 'ifeq (column 2 (range .. || $$ >> ;a ruler? (bne nxp2 (col=1 (rulerflag=0 (rtn 'endif ; past end of first paragraph, so advance to next one :nxp2 'cr 'column > ; in case margins changed 'call dotcmd ; dot command does not start a paragraph 'bne n3 'cmpnum rulerflag,1 ; is this baby set for key R? 'ifeq (column 2 (range .. || $$ >> ;a ruler? (bne nxp2 (col=1 (rulerflag=0 (rtn 'endif 'jmp nxp2 :n3 'eof ; quit if end of file 'req 'eol ; blank line? 'beq nxp2 ; then keep looking 'rtn ; we're there!! 'variable rulerflag,1 .