/IOLIN.SB : SPL/8 LINE I/O ROUTINES / / I = INLIN(BUF) OR I = INLIN(DEV, BUF) / / READS IN CHARS FROM 'DEV' OR 'TTY' INTO LINE BUFFER 'BUF' / PUTS AN EOS AT END OF LINE. / RETURNS 0 NORMALLY. / RETURNS 'EOF' IF EOF ENCOUNTERED WHILE READING THE LINE / /////////////////////////////////////////////////////////////////// ABSYM EOS -1 ABSYM EOL -2 ABSYM EOF -3 ABSYM T 7 OPDEF TADI 1400 OPDEF DCAI 3400 ENTRY INLIN INLIN, BLOCK 2 JMS GET2A PLP, CALL 1,IN /GET A CHAR INLDEV, ARG 0 /FILLED IN BY DEV # TAD (2 /EOL? SNA JMP PCKEOL /YES IAC /EOF? SNA JMP PCKEOF /YES TAD (-3 /NO, RESTORE CHAR JMS PUT /STORE IT AWAY JMP PLP /MORE CHARS PCKEOF, TAD (-3 /EOF PCKEOL, DCA RTV /RETURNED FLAG VALUE STA JMS PUT /PACK EOS TAD RTV RETRN INLIN /RETURN DEFARG, 0 /DEFAULT ARGUMENT TAD INLIN DCA DFF STA TAD INLIN# DCA T DFF, HLT /CALLING FIELD TADI T /GET PARAM WORD AND (400 /ONE ARG? SNA CLA JMP RTDEF /YES, ASSUME TTY TADI INLIN# /GET FLD INC INLIN# DCA INLDEV TADI INLIN# INC INLIN# DCA INLDEV# /MOVE ARG PLACE JMP I DEFARG RTDEF, TAD LIT1A DCA INLDEV TAD LIT1P DCA INLDEV# LIT1A, JMP I DEFARG /MUST CDF!! LIT1P, LIT1P#;1 GET2A, 0 /GET ARGS JMS DEFARG /PROCESS IMPLIED 'TTY' ARG TAD INLIN DCA CFL CFL, HLT TADI INLIN# INC INLIN# DCA PUTF TADI INLIN# INC INLIN# DCA PUTA /MOVE BUFFER ADDRESS TAD PUTF DCA GETF /ALSO FOR GET JMP I GET2A /RETURN PUT, 0 /PUT ONE WORD PUTF, HLT DCAI PUTA INC PUTA JMP I PUT PUTA, 0 GET, 0 /GET A WORD GETF, HLT TADI PUTA INC PUTA JMP I GET RTV, 0 ///////////////////////////////////////////////// / / OUTLI : WRITE A LINE BUFFER TO A DEVICE / / PUTS OUT CHARS TO 'DEV' UNTIL 'EOS' OR 0000 WORD / ADDS AN EOL TO THE END OF THE OUTPUT / ////////////////////////////////////////////////// ENTRY OUTLI OUTLI, BLOCK 2 TAD OUTLI DCA INLIN TAD OUTLI# DCA INLIN# /MOVE CALL PLACE JMS GET2A /GET SECOND ARG TAD INLDEV DCA ODV TAD INLDEV# DCA ODV# TAD ODV DCA ODDV TAD ODV# DCA ODDV# OLP, TAD GETF DCA OCF TAD PUTA DCA OCF# JMS GET /GET THE CHAR SNA JMP EOLO /END OF LINE CHAR IAC /EOS? SNA CLA JMP EOLO /YES CALL 2,OUT /OUTPUT ODV, ARG 0 OCF, ARG 0 JMP OLP /NEXT CHAR EOLO, CALL 2,OUT ODDV, ARG 0 ARG (-2 /EOL RETRN INLIN /RETURN END