*COMDECK PBIFMT 
_$J+?                                                                    UPDATES
_*****************************                                           UPDATES
*                            *                                           UPDATES
*         PBIFMT             *                                           UPDATES
*  FORMAT CONSOLE INPUT      *                                           UPDATES
*                            *                                           UPDATES
*****************************?                                           UPDATES
_$R-,G-,I-     NON-RECURSIVE                                             UPDATES
               INTERRUPTABLE ?                                           UPDATES
_*********************************************************************** UPDATES
*                                                                      * UPDATES
**OVERVIEW- PBIFMT DECODES AND EXECUTES SUPERVISORY CONSOLE INPUT      * UPDATES
*           AND FORMATS TRAFFIC CONSOLE INPUT INTO INTERNAL FORM.      * UPDATES
*           BUFFER FLAG BFSP7 SET SPECIFIES SUPERVISORY INPUT.         * UPDATES
*                                                                      * UPDATES
**INPUT- MESSAGE TO HANDLE.                                            * UPDATES
*                                                                      * UPDATES
**OUTPUT- SUPERVISORY MESSAGE HANDLED, TRAFFIC MESSAGE FORMATTED.      * UPDATES
*                                                                      * UPDATES
**EXTERNAL SUBROUTINES-                                                * UPDATES
*              1) PBGET1BF         GET A BUFFER                        * UPDATES
*              2) PBDBREL          RELEASE A CHAIN OF DATA BUFFERS     * UPDATES
*              3) PBBUFREL         RELEASE A CHAIN OF BUFFERS          * UPDATES
*              4) PBSUPMSG         HANDLE SUPERVISORY MESSAGE          * UPDATES
*                                  CALLED BY PBXFER                    *
*              5) PBFMAH           CONVERT FROM ASCII HEX              * UPDATES
*              6) PBSTRIP          STRIP EMPTY BUFFERS                 * UPDATES
*              7) PBMIN            CALCULATE MINIMUM OF 2 NUMBERS      * UPDATES
*              8) PBREL1BF         RELEASE A BUFFER                    * UPDATES
*              9) PBXFER           TRANSFER TO ANOTHER PAGE            *
*                                                                      * UPDATES
***********************************************************************? UPDATES
PROCEDURE PBIFMT;                                                        UPDATES
VAR I,J,                                                                 UPDATES
    SCHN,                                   _SOURCE CHAIN INDEX        ? UPDATES
    DCHN : INTEGER;                         _DESTINATION CHAIN INDEX   ? UPDATES
    SBUF,                                   _SOURCE BUFFER             ? UPDATES
    DBUF,                                   _DESTINATION BUFFER        ? UPDATES
    D1ST : B0BUFPTR;                        _FIRST DESTINATION BUFFER  ? UPDATES
    TEMP : B0OVERLAY;                       _WORK FIELD                ? UPDATES
    CNVRT : B018BITS;                       _RESULT OF HEX CONVERSION  ?
_?                                                                       UPDATES
_$J+?                                                                    UPDATES
_*****************************                                           UPDATES
*                            *                                           UPDATES
*        PBFROMHEX           *     LOCAL TO PBIFMT                       UPDATES
* CONVERT ONE SOURCE BUFFER  *                                           UPDATES
*                            *                                           UPDATES
*****************************?                                           UPDATES
FUNCTION PBFROMHEX(SBUF : B0BUFPTR; VAR DBUF : B0BUFPTR) : BOOLEAN;      UPDATES
VAR I,J,                                                                 UPDATES
    SLCD: INTEGER;                          _SOURCE LCD SAVE           ? UPDATES
BEGIN                                                                    UPDATES
  WITH SBUF' DO                                                          UPDATES
  BEGIN                                                                  UPDATES
    I := BFFCD;                             _SAVE SOURCE FCD           ? UPDATES
    SLCD := BFLCD;                          _SAVE SOURCE LCD           ? UPDATES
  END;                                                                   UPDATES
  J := DBUF'.BFLCD;                         _SAVE DESTINATION LCD      ? UPDATES
  PBFROMHEX := TRUE;                        _CONVERSION OK             ? UPDATES
  WHILE I @ SLCD DO 
  WITH DBUF' DO                                                          UPDATES
  BEGIN                                                                  UPDATES
    IF PBFMAH(CNVRT,SBUF,I) THEN            _CONVERT 8-BITS            ?
    BEGIN                                                                UPDATES
      BFDATAC[J] := CNVRT.B0WORD.BA1CHAR;   _STORE CONVERTED 8-BITS    ?
      J := J+1;                             _BUMP DESTINATION INDEX    ? UPDATES
      IF J > BUFLCD [B0S3] THEN             _CHECK IF END OF DEST BUFF ?
      BEGIN                                                              UPDATES
        BFLCD := J-1;                       _SET LCD                   ? UPDATES
        IF I < SLCD THEN                    _CHECK IF MORE SOURCE      ? UPDATES
        BEGIN                                                            UPDATES
          BCCHAIN[DCHN] := PBGET1BF(BEDBSIZE); _ GET ANOTHER DEST BUFF ?
          DBUF := DBUF'.BCCHAIN[DCHN];      _CHAIN IT                  ? UPDATES
          J := J1FRSTCHAR;                  _RESET DEST INDEX          ? UPDATES
        END;                                                             UPDATES
      END;                                                               UPDATES
    END                                                                  UPDATES
    ELSE PBFROMHEX := FALSE;                _ERROR IN CONVERSION       ? UPDATES
  END; _WITH?                                                            UPDATES
  DBUF'.BFLCD := J;                         _SET DEST LCD              ? UPDATES
END; _PBFROMHEX?                                                         UPDATES
_$J+?                                                                    UPDATES
_*****************************                                           UPDATES
*                            *                                           UPDATES
*         PBHEX              *     LOCAL TO PBIFMT                       UPDATES
*  PERFORM HEX CONVERSION    *                                           UPDATES
*                            *                                           UPDATES
*****************************?                                           UPDATES
PROCEDURE PBHEX(RLS : BOOLEAN);                                          UPDATES
VAR DBUF,                                                                UPDATES
    SBUF : B0BUFPTR;                                                     UPDATES
BEGIN                                                                    UPDATES
  D1ST := PBGET1BF (BEDBSIZE);              _GET FIRST DEST. BUFFER    ?
  D1ST'.BIINT[1] := $100*BLOCK+BLOCK;       _SET LCD, FCD              ? UPDATES
  DBUF := D1ST;                                                          UPDATES
  SBUF := B1BUFF;                                                        UPDATES
  REPEAT                                                                 UPDATES
  WITH SBUF' DO                                                          UPDATES
  BEGIN                                                                  UPDATES
    IF PBFROMHEX(SBUF,DBUF) THEN            _CONVERT ONE SOURCE BUFFER ? UPDATES
    BEGIN                                                                UPDATES
      TEMP.BA1CHAR := BFDATAC[BFLCD];       _SAVE LAST CHAR IN SOURCE  ? UPDATES
      SBUF := BCCHAIN[SCHN];                _CHAIN TO NEXT SOURCE      ? UPDATES
      IF NOT PBMEMBER(TEMP,JSDELIMSET) THEN _TEST BUFFER BOUNDARY      ? 31OCT75
      WITH SBUF' DO                                                      UPDATES
      BEGIN                                                              UPDATES
        I := BFFCD;                                                      UPDATES
        IF PBFMAH(CNVRT,SBUF,I) THEN        _CONVERT 1ST PARAMETER     ?
        BEGIN                                                            UPDATES
          IF 2 = I-BFFCD THEN               _PARAM CROSSES BOUNDARY    ? UPDATES
          WITH DBUF' DO                                                  UPDATES
          BFDATAC[BFLCD-1] :=               _COMPLETE PARTIAL PARAM    ? UPDATES
          CHR($10*ORD(BFDATAC[BFLCD-1])+
          ORD(CNVRT.B0WORD.BA1CHAR)); 
          BFFCD := I;                       _BUMP FCD                  ? UPDATES
        END                                                              UPDATES
        ELSE GOTO 10;                       _ERROR                     ? UPDATES
      END;                                                               UPDATES
    END                                                                  UPDATES
    ELSE                                                                 UPDATES
    BEGIN                                                                UPDATES
10 :  PBRELCHN (DBUF,BEDBSIZE);             _RELEASE ALL DEST BUFFERS  ?
      IF BCCHAIN[SCHN] " NIL THEN           _ CHECK FOR MORE THAN 1 BFR?
      PBRELCHN (BCCHAIN[SCHN],R1SBFSZE);    _RELEASE ALL BUT FIRST SRCE?
      BFFORMAT := FALSE;                    _CLEAR REFORMAT FLAG       ? UPDATES
      PBLOAD(B1BUFF,J0ERRMSG,PBMIN(BFLCD,   _LOAD ERROR MESSAGE        ? UPDATES
             BUFLCD [B0S2]), BUFLCD [B0S2]);
      WITH JCOPSLRP DO                                                   UPDATES
      BEGIN                                                              UPDATES
        JCBUFSZE := R1SBFSZE;               _BUFFER SIZE               ? UPDATES
        JCPOINTER := B1BUFF;                _BUFFER ADDRESS            ? UPDATES
      END;                                                               UPDATES
      PBIOSERV(JCOPSLRP,TEMP.BA1BOL);       _OUTPUT ERROR RESPONSE     ? 31OCT75
      B6OSERR := TRUE;                      _SET ERROR FLAG            ? UPDATES
      GOTO 20;                              _EXIT LOOP                 ? UPDATES
    END;                                                                 UPDATES
  END; _WITH?                                                            UPDATES
  UNTIL NIL = SBUF;                         _END OF SOURCE             ? UPDATES
  WITH DBUF' DO                                                          UPDATES
  BFLCD := BFLCD-1;                         _SET LCD                   ? UPDATES
  PBSTRIP(D1ST);                            _STRIP ANY EMPTY BUFFERS   ? 31OCT75
  IF RLS THEN                               _CHECK FOR SOURCE RELEASE  ? UPDATES
  WHILE B1BUFF " NIL DO                     _ RELEASE SOURCE BUFFERS   ?
    PBREL1BF (B1BUFF,R1SBFSZE); 
  20:;                                      _ERROR BYPASS              ? UPDATES
END; _PBHEX?                                                             UPDATES
_$J+?                                                                    UPDATES
BEGIN                                                                    UPDATES
  B6OSERR := FALSE;                         _GOOD RETURN               ? UPDATES
  DCHN := BEDBSIZE'.BEMSK.BAINT + 1;        _CHAIN INDEX FOR DEST      ?
  SCHN := R1SBFSZE'.BEMSK.BAINT + 1;        _CHAIN INDEX FOR SOURCE    ?
  WITH B1BUFF' DO                                                        UPDATES
  IF BFFORMAT THEN                          _CHECK FOR SUPERVISORY MSG ? UPDATES
  BEGIN                                                                  UPDATES
    B6OSERR := TRUE;                        _SUPERVISORY RETURN        ? UPDATES
    PBSUPMSG;                               _SUPERVISORY MESSAGE       ?
  END                                                                    UPDATES
  ELSE                                                                   UPDATES
  BEGIN                                                                  UPDATES
    I := BFFCD-1;                                                        UPDATES
    FOR J := 1 TO 6 DO
    BEGIN                                                                UPDATES
      REPEAT
        I := I+1;                                                        UPDATES
        TEMP.BA1CHAR := BFDATAC[I];                                      UPDATES
      UNTIL PBMEMBER(TEMP,JSDELIMSET) !                                  UPDATES
            (I = BFLCD);                                                 UPDATES
      IF I = BFLCD THEN GOTO 10;            _CHECK IF HEADER ONLY      ? UPDATES
    END;                                                                 UPDATES
_?                                                                       UPDATES
    J := BFLCD;                             _SAVE LCD                  ? UPDATES
    BFLCD := I;                             _SET LCD TO END OF HEADER  ? UPDATES
    SBUF := BCCHAIN[SCHN];                  _SAVE 2ND  SOURCE BUFFER   ? UPDATES
    BCCHAIN[SCHN] := NIL;                   _UNCHAIN 1ST SOURCE BFR    ? UPDATES
    PBHEX(FALSE);                           _CONVERT HEADER            ? UPDATES
    BCCHAIN[SCHN] := SBUF;                  _RECHAIN REST OF MESSAGE   ?
    IF NOT B6OSERR THEN                     _CONVERSION OK             ?
    BEGIN 
    IF (ORD(D1ST'.BFDATAC[BTPT]) MOD $10)   _CHECK FOR DATA PACKET     ?
        IN J0DATAMSG THEN 
    BEGIN                                                                UPDATES
      I := 1;                               _**TEMPORARY- PASCAL BUG** ?
      FOR I := 0 TO 4 DO                    _-PUT CONVERTED HEADER     ? UPDATES
      BFDATAC[BFLCD-4+I] :=                 _-BACK INTO SOURCE BUFFER  ? UPDATES
      D1ST'.BFDATAC[BLOCK+I];                                            UPDATES
      BFFCD := BFLCD+1;                     _SET FCD PAST HEADER       ? 31OCT75
      BFLCD := J;                           _RESTORE LCD               ? UPDATES
           DBUF := NIL; 
           PBFCOPY(B1BUFF, DBUF);           _COPY MESSAGE              ?
           D1ST'.BCCHAIN[DCHN] := DBUF; 
           PBRELCHN(B1BUFF, R0BUFSZE);
    END                                                                  UPDATES
    ELSE                                                                 UPDATES
    BEGIN                                                                UPDATES
      BFLCD := J;                           _RESTORE LCD               ? UPDATES
      PBREL1BF (D1ST,BEDBSIZE);             _RELEASE TEMPORY DEST      ?
  10: PBHEX(TRUE);                          _CONVERT TO HEX            ? UPDATES
    END;                                                                 UPDATES
    B1BUFF := D1ST;                         _RETURN CONVERTED MESSAGE  ? UPDATES
    END;
  END; _ELSE?                                                            UPDATES
END; _PBIFMT?                                                            UPDATES
