*COMDECK PBIOSERV 
_$J+  PAGE EJECT? 
_*****************************
*                            *
*         PBIOSERV           *
*       I/O SERVICES         *
*                            *
*****************************?
_$R+,G+,I-     RECURSIVE
               INTERRUPTABLE ?
_***********************************************************************
*                                                                      *
**OVERVIEW- PBIOSERV FORMATS A USER LRP INTO A PRP AND PASSES THE      *
*           PRP TO START I/O.  IF NO DEVICE NUMBER IS ASSIGNED,        *
*           PBIOSERV ASSIGNS A DEVICE NUMBER BASED ON THE LOGICAL      *
*           I/O (LIO) SPECIFIED.                                       *
*                                                                      *
**INPUT- USER LOGICAL REQUEST PACKET (LRP).                            *
*                                                                      *
**OUTPUT- I/O BEGUN OR ERROR FLAG SET.                                 *
*                                                                      *
**EXTERNAL SUBROUTINES-                                                *
*              1) PBOFMT           FORMAT CONSOLE OUTPUT               *
*              2) PBGET1BF         GET A BUFFER                        *
*              3) PBSTARTIO        START I/O                           *
*              4) PBOFMT           FORMAT CONSOLE OUTPUT               *
*                                  CALLED BY PBXFER                    *
*              5) PBXFER           TRANSFER TO ANOTHER PAGE            *
*                                                                      *
***********************************************************************?
PROCEDURE PBIOSERV(VAR LRP : JCPACKET; VAR ERR : BOOLEAN);
VAR PRP : B0BUFPTR; 
BEGIN 
  WITH LRP DO 
  BEGIN 
    IF NODEVICE = JCPD
    THEN JCPD := JBASSIGNTABLE[JCLIO];      _ASSIGN DEVICE CODE        ?
    IF (TTY = JCPD) & (NOT JCIMMEDFLG) &
       (BYWLCB[B0TTYP].BYCNT +              _ TEST FOR TOO MANY CONSOLE?
        BYWLCB[B0TTYN].BYCNT > C0THRESH)    _-MESSAGES                 ?
    THEN                                    _                          ?
    BEGIN 
      PBRELCHN (JCPOINTER,JCBUFSZE);        _DISCARD MESSAGE           ?
      ERR := TRUE;
    END 
    ELSE
    IF NODEVICE " JCPD THEN                 _CHECK FOR VALID ASSIGNMENT?
    BEGIN 
      ERR := FALSE;                         _CLEAR ERROR FLAG          ?
      IF JCPOINTER'.BFFORMAT &              _CHECK CONSOLE FORMAT FLAG ?
         (OPS = LEVELNO)
      THEN
      BEGIN 
        BABUFOFMT := JCPOINTER;             _PASS SOURCE BUFFER POINTER?
        PBOFMT;                             _FORMAT CONSOLE OUTPUT     ?
        JCPOINTER := BABUFOFMT;             _RESTORE SOURCE BUFFER PTR ?
      END;
      PRP := PBGET1BF (B0S16);              _GET BFR FOR PRP           ?
      PRP'.BCPRP := LRP;                    _COPY LRP INTO PRP         ?
      BIODEVICE := JCPD;                    _SET DEVICE TYPE           ?
      BIOPRP    := PRP;                     _SET PRP ADDRESS           ?
      PBSTARTIO;                            _START INPUT/OUTPUT        ?
      JCPD := NODEVICE;                     _CLEAR DEVICE IN LRP       ?
    END 
    ELSE ERR := TRUE;                       _NO DEVICE- SET ERROR FLAG ?
  END; _WITH? 
END; _PBIOSERV? 
