C+======================================================================= SUBROUTINE TAQIO( IOFC, LUN, IEF, IPRI, IOSB, IPRL, IDSW ) INTEGER*2 IOFC, LUN, IEF, IPRI INTEGER*2 IOSB(2), IPRL(6), IDSW C PERFORMS AN INPUT QIO TO GET CHARACTERS FROM A TERMINAL C TYPE-AHEAD BUFFER. ALL PARAMETERS ARE EXACTLY AS FOR A C NORMAL QIO DIRECTIVE (EXCEPT THAT NONE ARE OPTIONAL). C THIS ROUTINE ACTS LIKE A QIO FOR WHICH AN IMMEDIATE C TIME-OUT HAS BEEN SPECIFIED, I.E. IT ONLY READS CHARACTERS C ALREADY TYPED AND RETURNS. IF LESS THAN THE DESIRED # OF C CHARS ARE IN THE TYPE-AHEAD BUFFER, THE IOSB RETURN CODE C IS SET TO "IS.TMO". C C-======================================================================= INTEGER*2 LCLPRL(6) !LOCAL COPY OF PARAM LIST PARAMETER ISSUC = 1, ISTMO = 2 C ----------------------------------------------------------------------- NWANT = IPRL(2) !DESIRED # TO READ NTA = NTABUF( LUN ) !ACTUAL # IN TA BUFFER NXPECT = MIN( NWANT, NTA ) IF ( NTA .LE. 0 ) GO TO 1000 C THERE ARE SOME CHARS IN TA BUFFER, ISSUE A READ FOR THEM LCLPRL(1) = IPRL(1) LCLPRL(2) = NXPECT CALL WTQIO( IOFC, LUN, IEF,, IOSB, LCLPRL, IDSW ) GO TO 2000 C TA BUFFER IS EMPTY, FAKE A TIMED OUT READ 1000 IDSW = ISSUC IOSB(1) = ISSUC !SUCCESSFUL READ OF ... IOSB(2) = 0 !NO CHARS 2000 CONTINUE C IF CALLER WANTED MORE THAN AVAILABLE, & WE READ ALL IN TA BUF IF ( (IOSB(2).LT.NWANT) .AND. (IOSB(1).EQ.ISSUC) ) 1 IOSB(1) = ISTMO !SET "TIMED-OUT" RETURN END C+======================================================================= INTEGER*2 FUNCTION NTABUF( LUN ) INTEGER*2 LUN C RETURNS THE NUMBER OF CHARACTERS IN THE TYPE-AHEAD BUFFER OF THE C TERMINAL ASSIGNED TO "LUN". THE TYPE-AHEAD BUFFER IS NOT ALTERED. C LOCAL EVENT FLAG "LUN" IS USED. C C-======================================================================= PARAMETER SFGMC = "2560 !GET MULTIPLE CHARACTERISTICS BYTE BUF(2) !CHARACTERISTICS BUFFER PARAMETER TCTBF = "71 !TA BUF COUNT CODE DATA BUF / TCTBF, 0 / INTEGER*2 IPRL(6) DATA IPRL(2) / 2 / !# OF BYTES IN BUF TO GET INTEGER*2 IOSB(2) BYTE IOS(2) EQUIVALENCE (IOS,IOSB(1)) C ----------------------------------------------------------------------- CALL GETADR( IPRL(1), BUF ) BUF(2) = 0 !ZERO TA COUNT CALL WTQIO( SFGMC, LUN, LUN,, IOSB, IPRL, IDSW ) NTABUF = BUF(2) RETURN END