.TITLE SHOIO .IDENT /M01/ ; ; IMAGE I/O ROUTINES ; ; MACRO LIBRARY CALLS ; .MCALL GET$S,PUT$S,WRITE$,WTSE$S ; ; LOCAL DATA ; ; I/O STATUS BLOCK ; IOSB4:: .blkw 2 ;LUN = 4 io status blk , input file ; IOSB5:: .blkw 2 ;LUN = 5 io status blk , output file .IF DF RSTS IOSB: .BLKW 2 ; .ENDC ;+ ; FILE INPUT/OUTPUT ROUTINES ;- .ENABL LSB ; ; I/O ERROR EXITS ; WRERR3: CALL $ERMSG .WORD OUTERR WRERR4: JMP IMAGE ;RESTART RDERR3: CALL $ERMSG .WORD INPERR BR WRERR4 ;RESTART ; ; TERMINAL I/O ROUTINES ; ; THIS ROUTINE PERFORMS THE EQUIVALENT OF THE TTCALL 3, ; OF THE PDP-10. ; TTC3:: MOV @(SP),R0 ;GET ADDRESS OF INPUT STRING ADD #2,(SP) ;SKIP OVER STRING ADDRESS MOV #TTBUF,R1 ;ADDRESS OF OUTPUT STRING 20$: MOVB (R0)+,(R1)+ BNE 20$ SUB #TTBUF,R1 MOV R1,TTBLK+F.NRBD ;SET COUNT OF CHARACTERS TTC33:: PUT$S #TTBLK,#TTBUF CLR TTBLK+F.NRBD ;MAKE THE LINE EMPTY RETURN ; ;+ ; READ TERMINAL INPUT RECORD ;- TTC4N:: GET$S #TTIBLK ;GET A RECORD RETURN ; ;THIS ROUTINE SIMULATES TTCALL 1, WHICH OUTPUTS ONE ;CHARACTER AT A TIME TTC1:: CMP #TTLIN,TTBLK+F.NRBD ;CHECK FOR FULL BUFFER BGT 10$ ;IF GT NO CALL TTC33 ;OUTPUT THE LINE 10$: MOVB R1,@TTBLK+F.NRBD+2 INC TTBLK+F.NRBD+2 INC TTBLK+F.NRBD RETURN ; .END