; MACROS FOR USE IN THIS PROGRAM ; ; PRINT MACRO - INITIALIZATION FOR THE PRINT MACROS. ; SPECIFIES LOGICAL UNIT NUMBER (LUN) ; AND EVENT FLAG (EVF) TO FACILITATE ; OUTPUT TO THE CURRENT TERMINAL, OR ; TO THE OPTIONAL DEVICE SPECIFIED. ; .MACRO TINIT LUN,EVF,DEV,UNIT,?L1 ; .MCALL DIR$,ALUN$,QIO$ .ENABL LSB DIR$ #QUTA BR L1 QUTQ:: QIO$ IO.WVB,LUN,EVF,,QUTS QUTW:: WTSE$ EVF QUTS: .WORD 0 .WORD 0 QUTDSW::.BLKW 1 .IF NB,DEV QUTA:: ALUN$ LUN,DEV,UNIT .IFF QUTA:: ALUN$ LUN,TI,0 .ENDC L1: .DSABL LSB .ENABL LSB .DSABL LSB CR=15 LF=12 HT=11 .ENDM ; ; PRINT MACRO - OUTPUT THE ASCII STRING OF ; LENGTH LEN WHICH IS IN THE ; BUFFER BEGINNING AT ADDR. ; .MACRO TTYOUT ADDR,LEN ; .MCALL DIR$ MOV ADDR,QUTQ+14 MOV LEN,QUTQ+16 DIR$ #QUTQ DIR$ #QUTW .ENDM ; ; PRINT MACRO - OUTPUT THE GIVEN STRING. ; STRING MUST CONFORM TO .ASCII ; DIRECTIVE. ; .MACRO PSTR STRING,?L1,?L2 JSR R5,QUTSTR .WORD L2-L1 L1: .ASCII STRING L2: .EVEN .ENDM ; ; PRINT MACRO - OUTPUT COMBINATION ; .MACRO PCRLF CALL QUTCR .ENDM ; ; PRINT MACRO - OUTPUT N AS A SIGNED OCTAL ; NUMBER IF 'SIGN' IS GIVEN, ; OR MAGNITUDE IF NOT GIVEN ; .MACRO POCT N,SIGN .MCALL QT$SGN MOV N,-(SP) QT$SGN SIGN CALL QUTOPT .ENDM ; ; PRINT MACRO - OUTPUT BYTE N AS DECIMAL ; NUMBER. 'SIGN' OR ; MAGNITUDE. ; .MACRO PDECB N,SIGN .MCALL QT$SGB MOVB N,-(SP) QT$SGB SIGN CALL QUTDPB .ENDM ; ; PRINT MACRO - OUTPUT THE RADIX-50 WORD VAL ; SUPPRESSING LEADING BLANKS, UNLESS ; 'BLANK' IS GIVEN. ; .MACRO PRAD50 VAL,BLANK MOV VAL,-(SP) .IF NB BLANK CALL QUTB50 .IFF CALL QUTR50 .ENDC .ENDM ; ; PRINT MACRO - OUTPUT LEN RADIX-50 WORDS ; BEGINNING AT ADDR IN ASCII, ; SUPPRESSING LEADING BLANKS UNLESS ; 'BLANK' IS GIVEN. ; .MACRO PRAD5S ADDR,LEN,BLANK MOV ADDR,-(SP) MOV LEN,-(SP) .IF NB BLANK CALL QUTB5S .IFF CALL QUTR5S .ENDC .ENDM .MACRO ENTER A,B,C,D,E,F .MCALL S$AVE R$R0=0 R$R1=0 R$R2=0 R$R3=0 R$R4=0 R$R5=0 .IIF NB A S$AVE A .IIF NB B S$AVE B .IIF NB C S$AVE C .IIF NB D S$AVE D .IIF NB E S$AVE E .IIF NB F S$AVE F .ENDM .MACRO LEAVE .IF NE R$R5 MOV (SP)+,R5 .ENDC .IF NE R$R4 MOV (SP)+,R4 .ENDC .IF NE R$R3 MOV (SP)+,R3 .ENDC .IF NE R$R2 MOV (SP)+,R2 .ENDC .IF NE R$R1 MOV (SP)+,R1 .ENDC .IF NE R$R0 MOV (SP)+,R0 .ENDC .ENDM ; ; PRINT SUPPORT MACRO - IF 'SIGN' GIVEN, ; OUTPUT THE SIGN OF THE ; WORD ON THE STACK. ; .MACRO QT$SGN SIGN .IF NB SIGN CALL QUTSGN .ENDC .ENDM ; ; PRINT SUPPORT MACRO - IF 'SIGN' GIVEN, ; OUTPUT THE SIGN OF THE NUMBER ; ON THE STACK. ; .MACRO QT$SGB SIGN .IF NB SIGN CALL QUTSGB .ENDC .ENDM .MACRO S$AVE X R$'X=1 MOV X,-(SP) .ENDM