.TITLE TIO .SBTTL INPUT/OUTPUT ROUTINES ;*********************************************************************** ; ; TERMINAL OUTPUT ROUTINE ; R1 = MESSAGE BLOCK POINTER (LENGTH,STRING) ; ;*********************************************************************** PRINT:: MOV (R1)+,MSGO+Q.IOPL+2 ;SAVE LENGTH MOV R1,MSGO+Q.IOPL ;STORE ADDRESS DIR$ #MSGO ;ISSUE THE MESSAGE DSWERR ;CHECK FOR ERROR RETURN ; MSGO: QIOW$ IO.WVB,1,1,,,,<0,0,40> ;*********************************************************************** ; ; OUTPUT TO A LISTING DEVICE ; R1 = MESSAGE FORMAT POINTER ; ;*********************************************************************** OUTPUT::PUSH R0 ;SAVE REGS PUSH R2 ; MOV #OUT,R0 ;OUTPUT BUFFER POINTER MOV #ARG,R2 ;ARG BLOCK POINTER CALL $EDMSG ;FORM THE MESSAGE PUT$ #OUTLST,#OUT,R1,OUTERR ;PRINT THE ASCII MESSAGE POP R2 ;RETRIEVE REGS POP R0 ; RETURN ;*********************************************************************** ; ; CLOSE ALL FILES ; ;*********************************************************************** CLOSE:: BIT #SPL,FLAG ;SPOOL FLAG SET? BEQ 1$ ;NO MOV #OUTLST,R0 ;FDB CALL .PRINT ;PRINT IT 1$: CLOSE$ #OUTLST CLOSE$ #PRIINP CLOSE$ #SECINP CALL INXDET RETURN ;*********************************************************************** ; ; READ FROM INPUT CIL ; R0 = FDB ADDRESS ; ;*********************************************************************** READ:: READ$ R0,,,,,,,INERR ;READ A BLOCK WAIT$ ; RETURN .PAGE ;*********************************************************************** ; ; TERMINAL COMMAND INPUT ; R1 IS RETURNED AS # OF BYTES READ ; ;*********************************************************************** INPUT:: GCML$ #CMDL ;READ AN INDIRECT COMMAND BCC .+6 ;OKAY JMP CMDK ;CHECK OUT PROBLEMS MOV CMDL+G.CMLD,R1 ;CALC THE END OF COMMAND LINE ADD CMDL+G.CMLD+2,R1 ; MOVB #177,(R1) ;AND PUT A FLAG CHAR THERE FOR $CAT5 MOV CMDL+G.CMLD,R1 ;LENGTH MOV CMDL+G.CMLD+2,R0 ;ADDRESS RETURN CMDK: CMPB CMDL+G.ERR,#GE.EOF ;GOT A CONTROL Z BNE CMDK2 ;NO EXIT$S ;EXIT IF SO CMDK2: MOV #CMDKM,R1 ;MESSAGE FORMAT CALL PRINT ;PRINT IT EXIT$S ;AND EXIT CMDKM: .WORD CMDKML ;LENGTH .ASCII /CIL> *** INDIRECT CALL NECESSARY TO PROCESS INDIRECT/ .ASCII / COMMANDS ***/ CMDKML = .-CMDKM-2 .EVEN .PAGE ;*********************************************************************** ; ; MODULE NOT FOUND IN CIL ; R2 = POINTER INTO INDIRECT COMMAND BUFFER ; ;*********************************************************************** MODNOT::MOV (R2)+,ARG ;SAVE NAME FOR OUTPUT MOV (R2)+,ARG2 ; MOV #-1,(R2)+ ;FLAG THAT BLOCK NOT EXIST TST (R2)+ ;SKIP TO START OF NEXT COMMAND PUSH R1 ;SAVE MOV #MODN,R1 ;MESSAGE FORMAT CALL OUTPUT ;PRINT THE WARNING POP R1 ;RECOVER RETURN MODN: .ASCIZ / *** %2R IS NOT FOUND IN INPUT FILES ***/ .EVEN ;*********************************************************************** ; ; ZERO OUT A BUFFER ; R1 = ADDR OF BUFFER, R2 = LENGTH ; ;*********************************************************************** BLANK:: CLR (R1)+ ;CLEAR A WORD SOB R2,BLANK ;LOOP RETURN .PAGE ;*********************************************************************** ; ; ERROR ROUTINES ; ;*********************************************************************** IOERR:: MOV #IOER,R1 ;POINT TO MESSAGE CALL PRINT ;PRINT IT EXIT$S IOER:: .WORD IOERL ;DSW ERR MESSAGE .ASCII ?CCM>*** FATAL DIRECTIVE I/O ERROR? IOERL = .-IOER-2 ;LENGTH .EVEN OUTERR::MOV #OUTMG,R1 ;MESSAGE POINTER POP R2 ;CLEAN STACK POP R0 ; CALL PRINT ;PRINT IT CALL CLOSE ;CLOSE ALL FILES JMP RESTRT ;RESTART OUTMG: .WORD OUTMGL ;LENGTH .ASCII ?CCM> *** OUTPUT FILE I/O ERROR ***? OUTMGL = .-OUTMG-2 .EVEN INERR:: MOV #INMG,R1 ;MESSAGE POINTER CALL PRINT ;PRINT IT CALL CLOSE ;CLOSE ALL FILES JMP RESTRT ;RESTART INMG: .WORD INMGL ;LENGTH .ASCII ?CCM> *** INPUT FILE I/O ERROR ***? INMGL = .-INMG-2 .EVEN LSTERR::MOV #LSTER,R1 ;MESSAGE POINTER CALL PRINT ;PRINT IT CALL CLOSE ;CLOSE ALL FILES JMP RESTRT ;RESTART LSTER: .WORD LSTERL ;LENGTH .ASCII ?CCM> *** ERROR OPENING LISTING FILE ***? LSTERL = .-LSTER-2 .EVEN PRIERR::MOV #PRIMG,R1 ;MESSAGE POINTER CALL PRINT ;PRINT IT CALL CLOSE ;CLOSE ALL FILES JMP RESTRT ;RESTART PRIMG: .WORD PRIMGL ;LENGTH .ASCII ?CCM> *** ERROR OPENING PRIMARY INPUT ***? PRIMGL = .-PRIMG-2 .EVEN UNDERR::MOV #UNDMG,R1 ;MESSAGE POINTER CALL PRINT ;PRINT IT CALL CLOSE ;CLOSE ALL FILES JMP RESTRT ;RESTART UNDMG: .WORD UNDMGL ;LENGTH .ASCII ?CCM> *** INPUT FILE NOT CIL FILE FORMAT ***? UNDMGL = .-UNDMG-2 .EVEN .END