*COMDECK PBREAD 
_$J+  PAGE EJECT? 
_*****************************
*                            *
*         PBREAD             *
*    READ ONE CHAR/STATUS    *
*                            *
*****************************?
_$R+,G+,I-     RECURSIVE
               INTERRUPTABLE ?
_***********************************************************************
*                                                                      *
**OVERVIEW- PBREAD READS DATA OR STATUS FROM A LOCAL PERIPHERAL        *
*           DEVICE.  THE Q-REGISTER CONTAINS THE EQUIPMENT             *
*           ADDRESS AND THE A-REGISTER CONTAINS THE DATA OR STATUS     *
*           READ.  PBREAD ATTEMPTS TO READ UNTIL EITHER A GOOD         *
*           REPLY IS RECEIVED OR UNTIL A RETRY COUNT IS REACHED.       *
*           THE REJECT COUNT IS BUMPED AND THE Q AND A VALUES          *
*           ARE SAVED FOR TIMEOUT AND DEBUGGING PURPOSES.              *
*                                                                      *
**INPUT- Q-REGISTER VALUE, DEVICE CODE.                                *
*                                                                      *
**OUTPUT- DATA/STATUS READ FROM DEVICE.                                *
*                                                                      *
**EXTERNAL SUBROUTINES-                                                *
*              1) PBGETCHAR        PERFORM READ (ASSEMBLY LANGUAGE)    *
*                                                                          *
***********************************************************************?
FUNCTION PBREAD(Q,DEVICE : INTEGER) : CHAR; 
VAR RESPONSE : J0IORESP;                    _USED BY PBGETCHAR         ?
    STORE    : CHAR;                        _USED BY PBGETCHAR         ?
    I        : INTEGER; 
BEGIN 
  WITH JACT[DEVICE] DO                      _DEVICE CONTROLLER TABLE   ?
  BEGIN 
    I := 0; 
    REPEAT
      RESPONSE := J0XREJECT;                _CLEAR RESPONSE            ?
      PBGETCHAR;                            _ATTEMP TO READ            ?
      I := I+1; 
    UNTIL (J0REPLY = RESPONSE) ! (I = JARETRY); 
    JAREJECT := JAREJECT+I-1;               _BUMP REJECT COUNT         ?
    JAREADFLG := TRUE;                      _SET READ DATA/STATUS FLAG ?
    JAQVALUE := Q;                          _SAVE Q VALUE              ?
    JAAVALUE := STORE;                      _SAVE A VALUE              ?
    PBREAD   := STORE;                      _RETURN DATA/STATUS READ   ?
  END; _WITH? 
END; _PBREAD? 
