.NLIST ; VARIOUS MACROS ; .IDENT /1.4/ CR=15 LF=12 SO=16 MEF=13. ; QIO EVENT FLAG USED .MCALL QIOW$S .MACRO POP LIST .IRP R, MOV (SP)+,R .ENDR; R .ENDM POP .MACRO PUSH LIST .IRP R, MOV R,-(SP) .ENDR; R .ENDM PUSH .MACRO SAVE PUSH .ENDM .MACRO REST POP .ENDM REST .MACRO LEA,REG,SYMBOL ; ; LOADS THE POSITION INDEPENDENT ADDRESS OF A SYMBOL ; MOV PC,REG SUB #<.-SYMBOL>,REG .ENDM LEA ; ; TAB FUNCTIONS ; .MACRO TAB ROW,COL MOV ROW,-(SP) MOV COL,-(SP) CALL $TAB .ENDM TAB ; CLEAR SCREEN ; .MACRO CLEAR CALL $CLEAR .ENDM CLEAR ; ; ERASE TO END OF LINE ; .MACRO ERSEOL CALL $ERSEOL .ENDM ERSEOL .MACRO JEQ TAG,?HERE BNE HERE JMP TAG HERE: .ENDM JEQ .MACRO JNE TAG,?HERE BEQ HERE JMP TAG HERE: .ENDM JNE ; ; TTY TYPES THE CHARACTER IN R1 ON THE TI: DEVICE ; .MACRO TTY ?MESAG,?TAG MOVB R1,MESAG QIOW$S #IO.WVB,#5,#MEF,,,,<#MESAG,#1,#00> BR TAG MESAG: .BYTE 0 .EVEN TAG: .ENDM TTY .MACRO CRLF ; ; CARRIAGE RETURN AND LINE FEED ; CALL $CRLF .ENDM CRLF .MACRO TYPE MSG,?MESAG,?TAG .NCHR LEN, MOV #LEN,-(SP) MOV #MESAG,-(SP) CALL $TYPE BR TAG MESAG: .ASCII /MSG/ .EVEN TAG: .ENDM TYPE .MACRO TYPEAT ROW,COL,TXT,?TAG,?TEXT JMP TAG TEXT:.BYTE 33,'Y,ROW+31.,COL+31. .ASCII /TXT/ .NCHR LEN, LEN=LEN+4 .EVEN TAG: PUSH <#LEN,#TEXT> CALL $TYPE .ENDM TYPEAT ; ; TYPE MESSAGE POINTED TO BY "MSGPTR", WITH LENGTH OF LEN ; .MACRO TTYI MSGPTR,LEN PUSH CALL $TYPE .ENDM TTYI .MACRO TYPECR MSG ; ; TYPE A STRING AND CRLF (POSITION INDEPENDENT CODE) ; TYPE CRLF .ENDM TYPECR .MACRO DMPR1 ; ; DUMPS R1 CALL $DMPR1 .ENDM DMPR1 .MACRO OCVT ; ; DUMPS R1 IN OCTAL ONLY CALL $OCVT .ENDM OCVT .MACRO BYTE,?WKBUF,?TAG ; ; DUMPS A BYTE IN R1 IN OCTAL ONLY ; CALL $BYTE .ENDM BYTE .MACRO INPUT DATA,LEN PUSH <#DATA,#LEN> CALL $INPUT .ENDM INPUT .MACRO DUMP,WKBUF,LEN,PRINT,?LOOP,?TITLE,?BLOCK,?TAG,?CONTRL .MCALL EXIT$S SAVE MOV #WKBUF,R2 ; DATA MOV #BLOCK,R0 ; OUTPUT MOV #CONTRL,R1 ; CONTROL CALL $EDMSG ; DUMP IT .IF NB QIOW$S #IO.WVB,#6,#MEF,,,,<#TITLE,#TLEN,#40> .IFF QIOW$S #IO.WVB,#5,#MEF,,,,<#TITLE,#TLEN,#40> .ENDC MOV #<<'LEN'./8.>+1>,R0 ; NUMBER OF LINES MOV #BLOCK,R5 ; DATA ADDRESS LOOP: .IF NB QIOW$S #IO.WVB,#6,#MEF,,,, .IFF QIOW$S #IO.WVB,#5,#MEF,,,, .ENDC ADD #56.,R5 ; NEXT LINE SOB R0,LOOP REST JMP TAG BLOCK: .BLKB 'LEN'.*8.+100. .EVEN CONTRL: .ASCII /%'LEN/ .ASCIZ /P%3N/ .EVEN TITLE: .ASCII /**** DUMP OF 'WKBUF ****/ TLEN=.-TITLE .EVEN TAG: .ENDM DUMP .PAGE .SBTTL SUPPORT SUBROUTINES FOR THE ABOVE MACROS $TAB: ADD #31.,2(SP) ADD #31.,4(SP) MOVB 4(SP),TROW MOVB 2(SP),TCOL QIOW$S #IO.WAL,#5,#MEF,,,,<#TABX,#4,#0> MOV (SP)+,(SP) MOV (SP)+,(SP) RETURN $CLEAR: QIOW$S #IO.WAL,#5,#MEF,,,,<#CLSTG,#CLSTG$,#0> RETURN $ERSEOL: QIOW$S #IO.WAL,#5,#MEF,,,,<#ERSTG,#ERSTG$,#0> RETURN $TYPE: PUSH MOV 6(SP),R0 MOV 8.(SP),R1 QIOW$S #IO.WAL,#5,#MEF,,,, POP MOV (SP)+,(SP) MOV (SP)+,(SP) RETURN $CRLF: TTYI #100$,#2 RETURN 100$: .BYTE 12,15 $DMPR1: CALL $SAVAL MOV #WKBUF,R0 CLR R2 MOV #" ,WKBUF MOV #" ,WKBUF+2 MOV #" ,WKBUF+4 MOV R1,-(SP) CALL $CBDSG MOV #WKBUF1,R0 MOV (SP)+,R1 MOV #1,R2 ; NO ZERO SUPPRESSION CALL $CBOMG TTYI #WKBUF,#14. CRLF RETURN $OCVT: CALL $SAVAL MOV #WKBUF,R0 MOV #" ,WKBUF MOV #" ,WKBUF+2 MOV #" ,WKBUF+4 MOV #1,R2 ; NO ZERO SUPPRESSION CALL $CBOMG TTYI #WKBUF,#6 RETURN $BYTE: CALL $SAVAL MOV #WKBUF,R0 MOV #1,R2 ; NO ZERO SUPPRESSION BIC #177400,R1 CALL $CBOMG MOVB #'<,WKBUF+2 MOVB #'>,WKBUF+6 TTYI #WKBUF+2,#5 RETURN $INPUT: PUSH MOV 6(SP),R0 MOV 8.(SP),R1 QIOW$S #IO.RVB!TF.RAL,#5,#MEF,,,, POP MOV (SP)+,(SP) MOV (SP)+,(SP) RETURN .PAGE .SBTTL DATA WKBUFS FOR ABOVE ROUTINES WKBUF: .BLKW 3 .BYTE 9. ; TAB .EVEN WKBUF1: .BLKW 3 TABX: .BYTE 33 .ASCII /Y/ TROW: .BYTE TCOL: .BYTE CLSTG: .BYTE 33,133,77,62,154 .BYTE 33 .ASCII /H/ .BYTE 33 .ASCII /J/ CLSTG$=.-CLSTG ERSTG: .BYTE 33 .BYTE 113 ERSTG$=.-ERSTG .EVEN .LIST