.TITLE TERMINAL I/O CATCH-ALL .MCALL GMCR$,QIOW$C,QIO$C,EXIT$S,SPND$S,RSUM$,ASTX$S,GTSK$C,DIR$ .NLIST BEX .NLIST ME .MACRO DSWERR BCC .+10 MOV $DSW,R0 EMT 50 .ENDM .MACRO IOERR TSTB IOST BPL .+10 MOV IOST,R0 TRAP .ENDM .MACRO RSMERR BCC .+20 CMP $DSW,#IE.ITS BEQ .+10 MOV $DSW,R0 HALT .ENDM .PAGE ; ; MESSAGES ; CLR: .ASCII <32> CLRL = .-CLR .EVEN MSG: .ASCII <15><12><12><12><12><12><12><12><12><12><12><12><12> .ASCII / THIS TERMINAL IS INTENTIONALLY LOCKED-UP!!/ .ASCII <15><12> .ASCII / (YOU MUST KNOW THE ESCAPE CODE TO UNLOCK IT.)/ .ASCII <15><12><12><12><12><12><12><12><12><12><12> MSGL = .-MSG .EVEN PRP: .ASCII /1 CHAR. ESCAPE CODE -/ PRPL = .-PRP .EVEN TSKBF: .BLKW 16. IOST: .BLKW 2 ECODE: .BLKW 5 RESUM: RSUM$ ...BLP CMDL: GMCR$ ;COMMAND LINE .PAGE ; ; START OF MAIN CODE ; START: DIR$ #CMDL ;GET COMMAND LINE BCS GET ;IF ERR, PROMPT FOR INPUT MOV #CMDL+G.MCRB,R0 ;POINT TO CMD STRING CMP $DSW,#4 ;DID WE GET A CHARACTER BLE GET ;PROMPT IF NOT ENOUGH ADD #4,R0 ;SKIP "BLP " MOVB (R0),ECODE ;SAVE CODE CHAR BR CONT ;CONTINUE GET: QIOW$C IO.RPR,5,1,,IOST,, ;GET ESCAPE CODE DSWERR IOERR CONT: GTSK$C TSKBF ;GET TASK INFO TO GET NAME DSWERR MOV #TSKBF+G.TSTN,R2 ;RADIX TASK NAME MOV #RESUM+R.SUTN,R0 ;PLACE TO STORE IT MOV (R2)+,(R0)+ ;MOVE IT MOV (R2)+,(R0)+ ; QIOW$C IO.WVB,5,1,,IOST,, ;CLEAR THE SCREEN DSWERR IOERR QIOW$C IO.WVB,5,1,,IOST,, ;PRINT THE PROMPT DSWERR IOERR QIO$C IO.ATA,5,1,,IOST,, ;ACCEPT INPUT FROM TI: DSWERR IOERR SPND$S ;SUSPEND OURSELVES DONE: EXIT$S ;GET OUT .PAGE ; ; NORMAL I/O AST ROUTINE ; NORAST: MOV (SP)+,R0 ;POP INPUTTED CHARACTER CMPB R0,ECODE ;ESCAPE CODE? BNE NOESC ;NO DIR$ #RESUM ;RESUME OUR TASK RSMERR NOESC: ASTX$S ;AND RETURN ; ; CONTROL C AST ROUTINE ; XCAST: MOV (SP)+,R0 ; ASTX$S ;AND RETURN .END START