*COMDECK PBDISPLAY
_$J+? 
_*****************************
*                            *
*         PBDISPLAY          *
* DISPLAY MESSAGE ON CONSOLE *
*                            *
*****************************?
_$R+,G+,I-     RECURSIVE
               INTERRUPTABLE ?
_***********************************************************************
**OVERVIEW- PBDISPLAY QUEUES A USER SUPPLIED MESSAGE                   *
*           FOR OUTPUT TO THE LOCAL CONSOLE.                           *
*                                                                      *
**INPUT- NAME OF USER MESSAGE.                                         *
*                                                                      *
**OUTPUT- MESSAGE LOADED INTO A 32-WORD BUFFER AND                     *
          PASSED TO PBIOSERV.                                          *
*                                                                      *
**EXTERNAL SUBROUTINES USED-                                           *
*                                                                      *
*            1) PBBFAVAIL - CHECK BUFFER THRESHOLDS                    *
*            2) PBGET1BF  - GET 1 BUFFER                               *
*            3) PBLOAD    - LOAD A CANNED MESSAGE                      *
*            4) PBIOSERV  - I/O SERVICES                               *
*                                                                      *
**NOTE- TYPE CHECKING IS DEFEATED FOR PBDISPLAY.                       *
*                                                                      *
***********************************************************************?
PROCEDURE PBDISPLAY(VAR MSG : J0ML28);
CONST 
      LIMIT = 300;                          _ MAX DISPLAY SIZE         ?
VAR 
      I       : INTEGER;                    _ MESSAGE INDEX            ?
      J       : INTEGER;                    _ BUFFER INDEX             ?
      LRP     : JCPACKET;                   _ I/O REQUEST PACKET       ?
      ERR     : BOOLEAN;
      CURRENT : B0BUFPTR;                   _ CURRENT BUFFER           ?
BEGIN 
  
  WITH LRP DO                               _ LOCAL I/O REQUEST PACKET ?
  BEGIN 
    LRP       := JCOPSLRP;                  _ SET UP REQUEST PACKET    ?
    JCBUFSZE  := BEDBSIZE;                  _ BUFFER SIZE              ?
    CURRENT   := PBGET1BF (BEDBSIZE);       _ ALLOCATE A DATA BUFFER   ?
    JCPOINTER := CURRENT;                   _ PUT IN REQUEST PKT       ?
    I         := 1;                         _ INITIALIZE MESSAGE INDEX ?
10 :  
    J         := J1FRSTCHAR;                _ FIRST CHAR TO STORE INDEX?
    CURRENT'.BFFCD := J1FRSTCHAR;           _ FIRST CHAR TO STORE INDEX?
_ 
*              ---- STORE CHARACTERS IN BUFFERS ----
? 
    WHILE ( MSG[I] " #]# ) & ( I @ LIMIT ) DO _ LOOP UNTIL DONE        ?
    WITH CURRENT' DO                        _ CURRENT BUFFER           ?
    BEGIN 
      BFDATAC[J] := MSG[I];                 _ STORE A CHARACTER        ?
      I          := I + 1;                  _ INCR MSG INDEX           ?
      J          := J + 1;                  _ INCR BUFFER INDEX        ?
      IF J > BFLCD                          _ CK FOR END OF BUFFER     ?
      THEN
      BEGIN 
        BCCHAINS[DBUFLENGTH] := PBGET1BF (BEDBSIZE);  _ GET NEXT BUFFER?
        CURRENT := BCCHAINS[DBUFLENGTH];    _ SET UP NEW CURRENT       ?
        GOTO 10;                            _ START BUFFER LOOP AGAIN  ?
      END;  _ NEW BUFFER ?
  
    END;  _ WHILE  ?
    CURRENT'.BFLCD := J - 1;                _ SET LCD OF LAST BUFFER   ?
  
    PBIOSERV (LRP,ERR);                     _ SEND TO CONSOLE          ?
  END;  _ WITH      ? 
  
END;    _ PBDISPLAY ? 
