RUNOFF.MAC/AU/-BF=RUNOFF.VGN;1 \ -2 .IDENT /M02.1/ -35 ; ; CARTS LUG MODIFICATIONS ; CAR 1 ADD CHANGE BARS AND RIGHT SHIFT FUNCTION % -80,,/;CAR 1/ CBBIT==1 ;CHANGE BAR ON CBFBT==2 ;CHANGE BAR JUST TURNED OFF -109 $CBON:: .BLKW 1 ;CHANGE BAR ON ( 0=NO) -140 EBSIZ:: .BLKW 1 ;NUMBER OF CHANGE BAR INITAL SPACES ; -1 => NEG, +1 => POS, 0 => NONE -156,159 FOOTWB::.BLKB 322. FOOTS1::.WORD FOOTWB-1 FOOTS2::.WORD FOOTWB-1 .WORD FOOTWB+322. -170,171 HFIN:: .WORD 320.,0,0 INBUF:: .BLKB 322. -199,203 .WORD LINBF+320. LOUT1:: .WORD 0 LOUT2:: .WORD 0 LINBF:: .WORD 0 .BLKB 322. -232 ; FOR TOC HDST:: .WORD 0 ; HIGHEST DATA START IN ANY TOC LINE PFTC:: .WORD 0 ; ADDR OF 1ST DATA CHAR AFTER HEADER NUMBER TOCCHN::.WORD 0,TOCCHN ; CHAIN ; HOW TO EMPHASIZE FIELD CURRENTLY BEING UNDERLINED ULTYP:: .WORD 0 ; 0 = UNDERSCORE ; NZ = OVERPRINT ; HOW TO EMPHASIZE UNDERLINED FIELDS MARKED BY ; INSTREAM SOMMAND CHARACTERS ("&"). DFULT:: .WORD 0 ; 0 = UNDERSCORE ; NZ = OVERPRINT ; TO TRACK THE CHARACTER TO BE PRINTED FOR UNDERSCORE (OR OVERPRINT) ULCHRX: .WORD 0 ; SWITCH USED IN OUTPUT, TO HANDLE UNDERSCORE JUNK ULCASE: .WORD 0 ; 0 = JUST PRINT THE CHARACTER ; 1 = OVERPRINT THE CHAR BY BACKSPACE ; 2 = SIMULATE UNDERSCORE BY DASH ON NEXT LINE ; 3 = OVERPRINT UNDERSCORE ON SAME LINE ; 4 = OVERPRINT THE CHAR ON SAME LINE (DARK) CHSAVE: .WORD 0 ; TEMP SAVE CHAR RELTAB::.WORD -1 ; THE COLUMN TO MAKE TABS RELATIVE TO (NORMALLY 0) STDLM:: .WORD ILMRG ; STANDARD LEFT MARGIN ABSPAG::.WORD 1 ; THE ABSOLUTE PAGE NUMBER FOR /PA SWITCH CPI:: .WORD 0 ; FOR LA120 SIZE NSLA120::.WORD 0 ; NZ = LA120 SIZE CHANGED---MUST RESTORE IT FIGSAV::.WORD 0 ; FIGURE HELD OVER FOR NEXT PAGE -255,257 -266 CBNSP==3 ;CHAR OFFSET FOR CHANGE BARS -284 BAR==0174 ;BAR FOR CHANGE BAR -290,290 -292 BIC #2,$ULLSW -450 TSTEQ XFIRST,15$ CALL DOINX ; FORCE INDEX IF ANYTHING THERE 15$: CALL DOTOC ; PRINT THE TABLE OF CONTENTS -581 CLR ULCHRX -684,684 BHI 5$ JMP OUTFTC ; DON'T FORGET POSSIBLE FOOTNOTES 5$: -725,728 OUTNJ1: MOV RIGSHI,R2 ;GET RIGHT SHIFT CALL NSPAC ;DO IT MOV INDCT,R2 ;GET INDENTING IN CASE OF PARAGRAPH CLR INDCT ;(ONCE ONLY) ADD LMARG,R2 ;PLUS LEFT MARGIN ADD EBSIZ,R2 ;ADD ON CHANGE BAR SIZE TST EBSIZ ;CHECK IF BAR ENABLED BEQ 10$ ;NO SO SKIP BAR INSERTION TST $CBON ;CHECK IF CHANGE BAR ON BEQ 10$ ;IF EQ NO BIC #CBFBT,$CBON ;CLEAR THE LAST BAR BIT MOV R1,-(SP) ;SAVE R1 AS I DON'T KNOW IF ITS USED MOV #BAR,R1 ;GET A BAR CALL CCOUT ;AND OUTPUT IT MOV (SP)+,R1 ;GET R1 BACK DEC R2 ;1 CHAR IS OUT SO STOP ITS SPACE 10$: CALL NSPAC ;OUTPUT THAT MANY SPACES -779 OUTFTC: -801,824 MOV R2,-(SP) ; SAVE R2 MOV #3,R2 ; # OF TIMES TO OVERPRINT FOR DARK CALL OVPRNT MOV (SP)+,R2 -855 BMI 85$ ; ADD ALIGNING SPACES -857 85$: MOV HDST,R2 ; SEE WHERE WE WANT TO END UP SUB CPOS,R2 ; SUBTRACT WHERE WE ARE NOW ADD LMARG,R2 ;PLUS LEFT MARGIN CALL NSPAC BR 80$ -859,877 .PAGE ; PRINT THE UNDERLINE BUFFER IF THERE IS ANYTHING IN IT. ; KEEP TRACK OF CHARS TO OVERPRINT (DARK) JUST LIKE CCOUT DOES. ; ; VALUES OF BYTES IN THE UNDERLINE BUFFER (ULPBF): ; 0 = THAT'S ALL, FOLKS !!! ; 1 = UNDERSCORE ; 2 = DASH ; 3 = BLANK ; OTHER = THE ACTUAL CHAR TO PRINT ; ; CAN USE R1 & R3 ; R2 HAS LOOP COUNTER OVPRNT: TSTEQ ULCHRX,200$ ; BUFFER EMPTY, GO AWAY INC ULCHRX ; PLANT A NULL AT THE END CLRB @ULCHRX CLR ULCHRX ; RESET SIGNIFICANT CHAR PTR MOV #ULPBF,R3 ; INIT PTR MOV #CR,R1 CALL FOUT TSTEQB $ULSSW,10$ MOV #LF,R1 ; SIMULATE ON NEXT LINE CALL FOUT INC LINEC ; MAIN LOOP, PULL OUT CHARACTERS AND PRINT THEM 10$: MOVB (R3)+,R1 BEQ 60$ ; ALL DONE CMPNEB R1,#1,20$ MOV #LPUS,R1 ; UNDERSCORE MOVB #3,-1(R3) BR 50$ 20$: CMPNEB R1,#2,30$ MOVB #3,-1(R3) ; DASH MOV #'-,R1 BR 50$ 30$: CMPNEB R1,#3,40$ MOV #SPC,R1 ; SPACE BR 50$ 40$: MOV R3,ULCHRX ; A CHAR TO OVERPRINT DEC ULCHRX ; REMEMBER IT'S SPOT FOR NEXT TIME 50$: CALL FOUT BR 10$ 60$: DEC R2 ; OVERPRINT AGAIN IF DARK THINGS BNE OVPRNT 200$: CALL ULBSET RETURN .PAGE ; SUBROUTINE TO PRINT THE CHARACTER IN R1 ; ALSO FIGURES OUT WHAT TO DO FOR UNDERLINE & DARK ; BY BOTH BACKSPACE, OVERPRINT, AND SIMULATE CCSPC:: MOV #SPC,R1 ; PRINT A SPACE CCOUT: CMPEQ R1,#ULCHS,200$ ; EMPHASIZE THE *NEXT* CHAR CMPEQ R1,#QTS,CCSPC ; QUOTED SPACE BECOMES REAL SPACE MOVB #3,@ULPOS CMPEQ R1,#SPC,50$ ; NEVER EMPHASIZE BLANK TSTEQ ULCASE,50$ ; NORMAL--JUST PRINT IT CMPNE ULCASE,#1,10$ ; UNDERLINE CASE 1-----OVERPRINT BY BACKSPACE MOV R1,CHSAVE ; CHAR CALL FOUT MOV #BS,R1 ; BACKSPACE CALL FOUT MOV CHSAVE,R1 ; CHAR CALL FOUT MOV #BS,R1 ; BACKSPACE CALL FOUT MOV CHSAVE,R1 ; CHAR CALL FOUT MOV #BS,R1 ; BACKSPACE CALL FOUT MOV CHSAVE,R1 ; CHAR BR 50$ 10$: CMPNE ULCASE,#2,20$ ; UNDERLINE CASE 2 ---- SIMULATE BY DASH ON NEXT LINE MOVB #2,@ULPOS BR 40$ 20$: CMPNE ULCASE,#3,30$ ; UNDERLINE CASE 3 ---- OVERPRINT AN UNDERSCORE CHARACTER MOVB #1,@ULPOS BR 40$ ; UNDERLINE CASE 4 ---- OVERPRINT THE CHARACTER 30$: MOVB R1,@ULPOS 40$: MOV ULPOS,ULCHRX; REMEMBER WHERE WE PUT THE LAST SIGNIFICANT CHAR 50$: CLR ULCASE INC CPOS ; BUMP CARRIAGE POSITION INC ULPOS JMP FOUT ;*************************************************** ; NEXT CHAR IS TO BE EMPHASIZED BY ------ 200$: TSTEQB $ULMSW,250$ ;------ BY BACKSPACING TSTEQB ULTYP,210$ ; UNDERSCORE OR OVERSTRIKE (DARK) MOV #1,ULCASE ; ---- OVERSTRIKE RETURN 210$: MOV #LPUS,R1 ; ---- UNDERSCORE & BACKSPACE CALL FOUT MOV #BS,R1 BR 50$ ;------ BY OVERPRINT LINE OR SIMULATE BY DASHES ON NEXT LINE 250$: TSTNEB $ULMSW,255$ ; DON'T DO ANYTHING TSTNEB $ULSSW,260$ ; SIMULATE BY DASHES ON NEXT LINE TSTNE ULTYP,270$ ; OVERPRINT THE CHARACTER (DARK) MOV #3,ULCASE ; OVERPRINT AN UNDERSCORE 255$: RETURN 260$: MOV #2,ULCASE RETURN 270$: MOV #4,ULCASE RETURN -916,916 60$: BITNE #LITFG,F.1,80$ ; NO SPECIAL CHARS IN A LITERAL CMPEQ R1,#CWARN,CWR1 ;QUOTING A CHARACTER? -919,919 CMPEQ R1,#ULCHI,ULCHX; INSTREAM UNDERLINE REQUEST? -990,993 .PAGE ULMON: BIS #1,$ULLSW ; INSTREAM UNDERLINE REQUEST BR ULCHX ULMOF: BIC #1,$ULLSW ; INSTREAM UNDERLINE REQUEST OFF ULCHX: MOV DFULT,ULTYP ; UNDERSCORE OR OVERPRINT FLAG BR 10$ -1021 TST RELTAB BMI 5$ SUB RELTAB,R2 ; RELATIVE TO ABSOLUTE COLUMN NUMBER BR 20$ 5$: SUB LMARG,R2 ; RELATIVE TO CURRENT LEFT MARGIN -1042 inc abspag -1063 MOV $CBON,-(SP) ;SAVE THE BAR STATUS -1071 CLR $CBON ;CLEAR THE BAR BITS -1072,1072 MOV STDLM,LMARG ; RESET LM TO STANDARD -1108 MOV (SP)+,$CBON ;RESTORE BAR STATUS -1115,1115 TSTEQ $HDRSW,135$ -1118 MOV RIGSHI,R2 ;ADD SPACE FOR RIGHT SHIFT ADD EBSIZ,R2 ;ADD ON SPACE FOR CHANGE BAR OFFSET CALL NSPAC ;SPACE TO MARGIN -1162 MOV RIGSHI,R2 ;ADD SPACE FOR RIGHT SHIFT ADD EBSIZ,R2 ;ADD ON SPACE FOR CHANGE BAR OFFSET CALL NSPAC ;SPACE TO MARGIN -1167,1167 CALL SKIPN ; INCLUDING SUBTITLE 135$: MOV FIGSAV,R2 ; SPACE FOR FIGURE HELD OFF BECAUSE IT BEQ 136$ ; WOULDN'T FIT ON THE PREV PAGE CLR FIGSAV CALL SKIPN 136$: RETURN -1178,1178 RETURN /