*COMDECK PBCONSOLE
_$J+?                                                                    31OCT75
_*****************************                                           31OCT75
*                            *                                           31OCT75
*       PBCONSOLE            *                                           31OCT75
*    CONSOLE HANDLER         *                                           31OCT75
*                            *                                           31OCT75
*****************************?                                           31OCT75
_$R-,G-,I-     NON-RECURSIVE                                             31OCT75
               INTERRUPTABLE ?                                           31OCT75
_*********************************************************************** 31OCT75
*                                                                      * 31OCT75
**OVERVIEW- PBCONSOLE OBTAINS MESSAGES FROM THE CONSOLE QUEUE          * 31OCT75
*           AND, IF A BUFFER IS AVAILABLE FOR A PRP, QUEUES            * 31OCT75
*           THE MESSAGE FOR OUTPUT, OTHERWISE, PBCONSOLE MAKES         * 31OCT75
*           ITSELF A WL ENTRY UNTIL A PRP BUFFER IS AVAILABLE.         * 31OCT75
*                                                                      * 31OCT75
**INPUT- CONSOLE WL ENTRY.                                             * 31OCT75
*                                                                      * 31OCT75
**OUTPUT- MESSAGE(S) QUEUED TO CONSOLE.                                * 31OCT75
*                                                                      * 31OCT75
**EXTERNAL SUBROUTINES-                                                * 31OCT75
*              1) PBBFAVAIL        CHECK FOR AVAILABILITY OF BUFFERS   * 31OCT75
*              2) PBGT1SEG         GET A SEGMENT FROM QUEUE            * 31OCT75
*              3) PBIOSERV         QUEUE I/O                           * 31OCT75
*              4) PBPUTLIST        MAKE A WL ENTRY FROM OPS LEVEL      * 31OCT75
***********************************************************************? 31OCT75
PROCEDURE PBCONSOLE;                                                     31OCT75
CONST NOTEMPTY = 2;                                                      31OCT75
      VDO = $FF;                       _FIXED CONSOLE DIAG. ORDIINAL   ?
VAR 
  X : BOOLEAN;
_***********************************************************************
*                                                                      *
**OVERVIEW- CNSLINPT CHECKS FOR OVERLAY COMMUNICATION MESSAGES AND     *
*           ADDS THE HEADER TO THEM. ALL OTHER CONSOLE MESSAGES ARE    *
*           SENT TO THE CONSOLE INPUT FORMATTER.                       *
*                                                                      *
**INPUT- MESSAGE(S) FROM NPU CONSOLE                                   *
*                                                                      *
**OUTPUT- MESSAGE(S) FOR ROUTING FROM CONSOLE.                         *
*         ERROR MESSAGE(S) QUEUED TO CONSOLE.                          *
*                                                                      *
**EXTERNAL SUBROUTINES-                                                *
*              1) PBCOPYBFRS       COPY BUFFER                         *
*              2) PBSWITCH         ROUTES MESSAGES                     *
*              3) PBLOAD           LOAD CANNED MESSAGE                 *
*              4) PBIFMT           CONSOLE INPUT MESSAGE FORMATTER     *
*                                  THIS ROUTINE IS CALLED VIA PBXFER   *
*              5) PBXFER           TRANSFER CONTROL TO ANOTHER PAGE    *
***********************************************************************?
PROCEDURE CNSLINPT; 
VAR FLAG : INTEGER; 
    DBUF : B0BUFPTR;                   _DESTINATION BUFFER POINTER     ?
    TEMP : BOOLEAN; 
PROCEDURE PBERROR;                     _PRINT ERROR MESSAGE            ?
BEGIN 
  B1BUFF'.BFFORMAT := FALSE;           _RESET FORMAT FLAG              ?
  JCOPSLRP.JCBUFSZE := R0BUFSZE;       _SET BUFFER TYPE                ?
  JCOPSLRP.JCPOINTER := B1BUFF;        _SET BUFFER ADDRESS             ?
  PBIOSERV(JCOPSLRP,TEMP);             _DISPATCH MESSAGE TO NPU CONSOLE?
END;
BEGIN 
  IF JACT[TTY].JAQCHOSEN = OVLQ THEN        _IF CONSOLE MODE IS OVERLAY?
  WITH B1BUFF' DO                           _WITH THE BUFFER ADDRESS   ?
  BEGIN 
    IF 0 " BYWLCB[B0DGWL].BYPRADDR          _ AND                      ?
    THEN                                    _ DIAGNOSTICS AVAILABLE    ?
                                            _TEST MESSAGE CONTENT      ?
      BEGIN 
        IF (BFDATAC[J1FRSTCHAR] = #D#) &    _IF THE MESSAGE STARTS WITH?
           (BFDATAC[J1FRSTCHAR+1]=#A#) THEN _DA--=,                    ?
        BEGIN 
          FLAG := 0;                        _AND ONE OF THE NEXT THREE ?
          IF BFDATAC[J1FRSTCHAR+2] =#=#     _CHARACTERS IS AN EQUALS,  ?
            THEN FLAG := 3; 
          IF BFDATAC[J1FRSTCHAR+3]=#=#
            THEN FLAG := 4; 
          IF BFDATAC[J1FRSTCHAR+4]=#=#
            THEN FLAG := 5; 
          IF FLAG " 0 THEN                  _THEN BUMP FCD PASS THE    ?
          BEGIN                             _EQUALS, MINUS 4 CHAR FOR  ?
            BFFCD := J1FRSTCHAR + FLAG-7;   _LEAVE ROOM FOR HEADER + DO?
            DBUF := NIL;               _COPYASCII STRING INTO          ?
            PBFCOPY(B1BUFF, DBUF);     _DATA BUFFER, LEAVE ROOM        ?
            PBRELCHN(B1BUFF, R0BUFSZE);_FOR HEADER                     ?
            B1BUFF := DBUF;            _REPLACE POINTER                ?
            WITH B1BUFF' DO            _WITH NEW DATA BUFFER ADDRESS   ?
            BEGIN                             _ADD HEADER              ?
              BFDATAC[DN] := CHR(CKLOCNODG);  _SET DISTINATION NODE    ?
              BFDATAC[SN] := CHR(CS);       _ SET SOURCE NODE          ?
              BFDATAC[CN] := CHR(0);          _SET CONNECTION NUMBER   ?
              BFDATAC[BTPT] := CHR(HTCMD);    _SET BLOCK TYPE          ?
                BFDATAC[PFC] := CHR(D8OLD); _SET PFC = DIAGNOSTICS     ?
                BFDATAC[SFC] := CHR(D9NP);  _SET SFC = DATA FROM NPU   ?
                BFDATAC[SFC+1] := CHR(VDO); _SET FIXED CONSOLE DO      ?
              PBSWLE (B1BUFF);              _MODULE                    ?
            END;                              _MODULE                  ?
          END  _IF? 
          ELSE                                _ELSE SEND FORMAT ERROR  ?
          BEGIN                               _MESSAGE                 ?
                                              _LOAD CANNED MESSAGE     ?
            PBLOAD(B1BUFF,J0ERRFOR,J1FRSTCHAR,J1LST32); 
            PBERROR;                          _SEND MESSAGE            ?
          END; _ELSE? 
        END _IF?
        ELSE                                _ELSE SEND FORMAT ERROR    ?
        BEGIN                               _MESSAGE                   ?
                                            _LOAD CANNED MESSAGE       ?
          PBLOAD(B1BUFF,J0ERRFOR,J1FRSTCHAR,J1LST32); 
          PBERROR;                          _SEND MESSAGE              ?
        END; _ELSE? 
    END _IF?
    ELSE                                    _ELSE SEND NO OVERLAY      ?
    BEGIN                                   _PRESENT MESSAGE           ?
                                            _LOAD CANNED MESSAGE       ?
      PBLOAD(B1BUFF,J0ERRNOO,J1FRSTCHAR,J1LST32); 
      PBERROR;                              _SEND MESSAGE              ?
    END; _ELSE? 
  END _IF?
  ELSE
  BEGIN 
    PBIFMT;                                 _FORMAT INPUT              ?
    IF NOT B6OSERR                          _NO FORMAT ERROR           ?
    THEN   PBSWLE (B1BUFF);                 _SWITCH BLOCK              ?
  END; _ELSE? 
END; _CNSLINPT? 
BEGIN 
  WITH BWWLENTRY[OPS] DO BEGIN
    IF B0EWLQ.MMWKCOD = A0WK1               _ IF INPUT WORK CODE:      ?
      THEN BEGIN
        B1BUFF := BWBLKPTR;                 _   POINT TO DATA,         ?
        CNSLINPT;                           _   AND GIVE TO INPUT      ?
                                            _     ROUTINE.             ?
        END 
      ELSE BEGIN
       10:  
        WITH JCOPSLRP DO BEGIN
          WITH C0CNSLTCB'.BSTCB.BSQPTR DO 
            BEGIN 
            JCPOINTER := BABUFPTR;
            IF JCPOINTER " NIL THEN         _IF ANYTHING IN Q          ?
              BEGIN 
              BABUFPTR := JCPOINTER'.BCCHAINS[QCHN];_RELEASE IT.       ?
              JCBUFSZE := BEDBSIZE;         _ BUFFER SIZE.             ?
              PBIOSERV(JCOPSLRP,X);         _ QUEUE I/O TO CONSOLE.    ?
              GOTO 10;
              END;
            END;
          END;
        END;
    END;
  END;
