*COMDECK PBOFMT 
_$J+?                                                                    UPDATES
_*****************************                                           UPDATES
*                            *                                           UPDATES
*        PBOFMT              *                                           UPDATES
*   FORMAT CONSOLE OUTPUT    *                                           UPDATES
*                            *                                           UPDATES
*****************************?                                           UPDATES
_$R-,G-,I-     NON-RECURSIVE                                             UPDATES
               INTERRUPTABLE ?                                           UPDATES
_*********************************************************************** UPDATES
*                                                                      * UPDATES
**OVERVIEW- PBOFMT IS CALLED FROM I/O SERVICES (PBIOSERV) IF THE       * UPDATES
*           FORMAT FLAG (BFFORMAT) IS SET IN THE MESSAGE.  PBOFMT      * UPDATES
*           FORMATS THE MESSAGE FOR THE CONSOLE.                       * UPDATES
*                                                                      * UPDATES
**INPUT- MESSAGE TO FORMAT (VIA GLOBAL)                                *
*                                                                      * UPDATES
**OUTPUT- FORMATTED OUTPUT.                                            * UPDATES
*                                                                      * UPDATES
**EXTERNAL SUBROUTINES-                                                * UPDATES
*             1) PBGET1BF         GET A BUFFER                         * UPDATES
*             2) PBREL1BF         RELEASE A BUFFER                     * UPDATES
*             3) PBSTRIP          STRIP EMPTY BUFFERS                  * 31OCT75
*                                                                      * UPDATES
***********************************************************************? UPDATES
PROCEDURE PBOFMT; 
CONST LINESIZE = 48;                        _CHARACTERS/LINE           ? UPDATES
_?                                                                       UPDATES
VAR 
    I,J,K,MAXLCD : INTEGER;                                              31OCT75
    DBUFSVE : B0BUFPTR;                                                  UPDATES
    DBUF    : B0BUFPTR;                                                  UPDATES
    TEMP : B0OVERLAY;                                                    31OCT75
_?                                                                       UPDATES
_*****************************                                           UPDATES
*                            *                                           UPDATES
*      FORMAT TO HEX         *     LOCAL TO PBOFMT                       UPDATES
*                            *                                           UPDATES
*****************************?                                           UPDATES
PROCEDURE PBTOHEX;                                                       UPDATES
VAR DBUFSVE : B0BUFPTR;                                                  UPDATES
    L : INTEGER;                                                         31OCT75
_?                                                                       UPDATES
PROCEDURE PBBUMP;                                                        UPDATES
BEGIN                                                                    UPDATES
  J := J+1;                                 _BUMP DEST CHARACTER INDEX ? UPDATES
  IF J > MAXLCD THEN                        _CHECK FOR END-OF-BUFFER   ? UPDATES
  WITH DBUF' DO                                                          UPDATES
  BEGIN                                                                  UPDATES
    DBUF := PBGET1BF(BEDBSIZE);             _ GET ANOTHER DEST BFR     ?
    BCCHAIN[DBUFLENGTH] := DBUF;            _ CHAIN IT                 ?
    J := J1FRSTCHAR;                        _RESET CHARACTER INDEX     ? UPDATES
  END;                                                                   UPDATES
END;                                                                     UPDATES
_?                                                                       UPDATES
BEGIN                                                                    UPDATES
  K := 0;                                   _CHARACTERS IN LINE COUNT  ? UPDATES
  DBUF := PBGET1BF(BEDBSIZE);               _GET FIRST DEST BUFFER     ?
  DBUFSVE := DBUF;                          _SAVE IT                   ? UPDATES
  J := J1FRSTCHAR;                          _SET DEST CHARACTER INDEX  ? UPDATES
  REPEAT                                                                 UPDATES
    WITH BABUFOFMT', TEMP DO
    IF BFFCD @ BFLCD THEN                   _CHECK FOR DATA IN BFR     ? UPDATES
    FOR L := BFFCD TO BFLCD DO              _LOOP THROUGH SOURCE BFR   ? UPDATES
    BEGIN                                                                UPDATES
      BA1CHAR := BFDATAC[L];                _CONVERT ONE CHAR TO HEX   ? UPDATES
      DBUF'.BFDATAC[J] := JMCNVTO[BAHEX.B0H3];                           UPDATES
      PBBUMP;                                                            UPDATES
      DBUF'.BFDATAC[J] := JMCNVTO[BAHEX.B0H4];                           UPDATES
      PBBUMP;                                                            UPDATES
      DBUF'.BFDATAC[J] := # #;                                           UPDATES
      PBBUMP;                                                            UPDATES
      K := K+3;                             _BUMP CHARACTERS IN LINE   ? UPDATES
      IF LINESIZE @ K THEN                  _CHECK FOR FULL LINE       ? UPDATES
      BEGIN                                                              UPDATES
        K := 0;                             _RESET COUNT               ? UPDATES
        DBUF'.BFDATAC[J] := J1CR;           _INSERT CARRIAGE RETURN    ? UPDATES
        PBBUMP;                                                          UPDATES
        DBUF'.BFDATAC[J] := J1LF;           _INSERT LINE FEED          ? UPDATES
        PBBUMP;                                                          UPDATES
        DBUF'.BFDATAC[J] := J1CR;           _ SEND 6 MORE CARRIAGE     ?
        PBBUMP;                             _ RETURNS                  ?
        DBUF'.BFDATAC[J] := J1CR; 
        PBBUMP; 
        DBUF'.BFDATAC[J] := J1CR; 
        PBBUMP; 
        DBUF'.BFDATAC[J] := J1CR; 
        PBBUMP; 
        DBUF'.BFDATAC[J] := J1CR; 
        PBBUMP; 
        DBUF'.BFDATAC[J] := J1CR; 
        PBBUMP; 
      END;                                                               UPDATES
    END;                                                                 UPDATES
    PBREL1BF(BABUFOFMT, BEDBSIZE);          _RELEASE SOURCE BUFFER     ?
  UNTIL  NIL = BABUFOFMT;                   _END OF SOURCE BUFFER CHAIN?
  WITH DBUF' DO                                                          UPDATES
  BFLCD := J-1;                             _SET LCD                   ? 31OCT75
  PBSTRIP(DBUFSVE);                         _STRIP ANY EMPTY BUFFERS   ? 31OCT75
  BABUFOFMT := DBUFSVE;                     _RETURN FORMATTED TEXT     ?
END;                                                                     UPDATES
_$J+?                                                                    UPDATES
BEGIN                                                                    UPDATES
  DBUFSVE := PBGET1BF(BEDBSIZE);            _GET FIRST DEST BUFFER     ?
  MAXLCD  := DBUFSVE'.BFLCD;                _SET UP LCD                ?
  J := J1FRSTCHAR;                          _SET DEST CHARACTER INDEX  ? UPDATES
  WITH DBUFSVE',TEMP DO                                                  UPDATES
  BEGIN                                                                  UPDATES
    FOR I := DN TO BTPT DO                  _CONVERT DN,SN,CN,BT       ? UPDATES
    BEGIN                                                                UPDATES
      BA1CHAR      := BABUFOFMT'.BFDATAC[I];_COPY CHARACTER            ?
      BFDATAC[J]   := JMCNVTO[BAHEX.B0H3];                               UPDATES
      BFDATAC[J+1] := JMCNVTO[BAHEX.B0H4];                               UPDATES
      BFDATAC[J+2] := # #;                                               UPDATES
      J := J+3;                                                          UPDATES
    END;                                                                 UPDATES
    BFDATAC[J-1] := J1CR;                   _INSERT CARRIAGE RETURN    ? UPDATES
    BFDATAC[J]   := J1LF;                   _INSERT LINE FEED          ? UPDATES
    BFLCD := J;                             _SET LCD IN 1ST DEST BFR   ? UPDATES
  END;                                                                   UPDATES
  WITH BABUFOFMT' DO
  BEGIN                                                                  UPDATES
    BFFCD := BTPT+1;                        _SET FCD IN SOURCE TO DATA ? UPDATES
    IF (ORD(BFDATAC[BTPT]) MOD $10) IN      _TEST FOR DATA MESSAGE     ?
        J0DATAMSG 
    THEN
    WHILE BCCHAIN[DBUFLENGTH] " NIL DO
      PBREL1BF (BCCHAIN[DBUFLENGTH],BEDBSIZE) _ RELEASE ALL BUT FIRST  ?
    ELSE PBTOHEX;                           _CONVERT TEXT TO HEX       ?
    DBUFSVE'.BCCHAINS[DBUFLENGTH]           _CHAIN REST OF TEXT        ?
                                := BABUFOFMT; 
    BABUFOFMT := DBUFSVE;                   _RETURN FORMATTED TEXT     ?
  END;                                                                   UPDATES
END; _PBOFMT?                                                            UPDATES
