*COMDECK PBSUPMSG                                                             UP
_$J+?                                                                    UPDATES
_*****************************                                           UPDATES
*                            *                                           UPDATES
*         PBSUPMSG           *                                           UPDATES
*   SUPERVISORY MESSAGE      *                                           UPDATES
*                            *                                           UPDATES
*****************************?                                           UPDATES
_$R-,G-,I-     NON-RECURSIVE                                             UPDATES
               INTERRUPTABLE ?                                           UPDATES
_*********************************************************************** UPDATES
*                                                                      * UPDATES
**OVERVIEW- PBSUPMSG DECODES AND EXECUTES SUPERVISORY INPUT            * UPDATES
*           MESSAGES FROM THE NPU CONSOLE.  THE SUPERVISORY            * UPDATES
*           MESSAGES RECOGNIZED BY PBSUPMSG ARE:                       * UPDATES
*                                                                      * UPDATES
*                 1) IN            ROUTE INPUT SM#S                    * UPDATES
*                 2) OUT           ROUTE OUTPUT SM#S                   * UPDATES
*                 3) LOC           LOCALLY GENERATED SM#S              * UPDATES
*                 4) MSNOP         MESSAGE TO NOP                      *
*                                                                      * UPDATES
**INPUT- SUPERVISORY INPUT MESSAGE.                                    * UPDATES
*                                                                      * UPDATES
**OUTPUT- ACTION PERFORMED OR ERROR RESPONSE TO NPU CONSOLE.           * UPDATES
*                                                                      * UPDATES
**EXTERNAL SUBROUTINES-                                                * UPDATES
*              1) PBDBREL          RELEASE A CHAIN OF DATA BUFFERS     * UPDATES
*              2) PBMEMBER         TEST ASCII SET MEMBERSHIP           * UPDATES
*              3) PBFMAH           CONVERT FROM ASCII HEX              * UPDATES
*              4) PNSMGEN          GENERATE SERVICE MESSAGE            *
*                                                                      * UPDATES
***********************************************************************? UPDATES
PROCEDURE PBSUPMSG;                                                      UPDATES
TYPE SUP = (INP,                            _INPUT SM ROUTING          ? 31OCT75
            OUT,                            _OUTPUT SM ROUTING         ? UPDATES
            LOC,                            _LOCAL ROUTING             ? UPDATES
            MSNOP,                          _ MSG TO NOP               ?
            BAD);                                                        UPDATES
VAR PFC,                                                                 UPDATES
    SFC,                                                                 UPDATES
    RO : INTEGER;                                                        UPDATES
    SUPMSG : ARRAY [SUP] OF INTEGER;        _SUPERVISORY MESSAGES      ? UPDATES
    MSG : SUP;                                                           UPDATES
    I : INTEGER;                                                         UPDATES
    TEMP : B0OVERLAY;                                                    UPDATES
    WORD : B018BITS;
VALUE SUPMSG = ($494E,                      _IN      ?                   UPDATES
                $4F55,                      _OU      ?                   UPDATES
                $4C4F,                      _LO      ?                   UPDATES
                $4D53,                      _MS      ?
                $0000);                     _BAD MSG ?                   UPDATES
BEGIN                                                                    UPDATES
  WITH B1BUFF' DO                           _SUP MESSAGE BUFFER        ? UPDATES
  BEGIN                                                                  UPDATES
    MSG := INP;                                                          31OCT75
    WHILE (BIINT[J1FRSTCHAR/2 + 1] "        _ LOOK UP MSG MNEMONIC     ?
           SUPMSG[MSG]) &                   _                          ?
          (BAD " MSG) DO                                                 UPDATES
    MSG := SUCC(MSG);                                                    UPDATES
    I := J1FRSTCHAR - 1;                    _ STARTING WITH 1ST DATA CH?
    REPEAT                                  _BUMP TO 1ST PARAMETER     ? UPDATES
      I := I+1;                                                          UPDATES
      TEMP.BA1CHAR := BFDATAC[I];                                        UPDATES
    UNTIL PBMEMBER(TEMP,JSDELIMSET);                                     UPDATES
    I := I+1;                                                            UPDATES
    IF BAD = MSG                            _CHECK IF VALID MNEMONIC   ? UPDATES
    THEN GOTO 20;                           _ERROR                     ? UPDATES
    CASE MSG OF                                                          UPDATES
_?                                                                       UPDATES
    INP,OUT:                                _SM ROUTING                ?
    BEGIN                                                                UPDATES
      IF NOT PBFMAH(WORD,B1BUFF,I)          _CONVERT PFC               ?
      THEN GOTO 20;                         _ERROR                     ?
      PFC := WORD.B0WORD.BAINT; 
      IF NOT PBFMAH(WORD,B1BUFF,I)          _CONVERT SFC               ?
      THEN GOTO 20;                         _ERROR                     ?
      RO := WORD.B0WORD.BAINT;
      IF (0 = PFC) ! (D8LAST < PFC)         _VALIDATE PFC              ? UPDATES
      THEN GOTO 20;                         _ERROR                     ? UPDATES
      IF (J4DISCARD > RO) ! (J4BOTH < RO)   _VALIDATE ROUTING OPTION   ? UPDATES
      THEN GOTO 20;                         _ERROR                     ? UPDATES
      WITH DBPFCTBLE[PFC] DO                                             31OCT75
      CASE MSG OF                                                        UPDATES
      INP: DBINRTE  := RO;                  _INPUT ROUTING             ? 31OCT75
      OUT: DBOUTRTE := RO;                  _OUTPUT ROUTING            ? UPDATES
      END;                                                               UPDATES
      PBREL1BF(B1BUFF,R1SBFSZE);            _RELEASE SUP MESSAGE       ? 31OCT75
    END;                                                                 UPDATES
_?                                                                       UPDATES
    BAD: 20:                                                             UPDATES
    BEGIN                                   _FORMAT ERROR RESPONSE     ? UPDATES
      BFFORMAT := FALSE;                    _SET FORMAT FLAG           ? UPDATES
      PBLOAD(B1BUFF,J0ERRMSG,PBMIN(BFLCD,   _LOAD ERROR MESSAGE        ?
        BUFLCD[B0S2]),BUFLCD[B0S2]);
      JCOPSLRP.JCBUFSZE := R1SBFSZE;        _BUFFER SIZE               ? UPDATES
      JCOPSLRP.JCPOINTER := B1BUFF;         _ERROR MESSAGE             ? UPDATES
      PBIOSERV(JCOPSLRP,TEMP.BA1BOL);       _DISPATCH TO NPU CONSOLE   ? UPDATES
    END;                                                                 UPDATES
_?                                                                       UPDATES
    END; _CASE?                                                          UPDATES
  END; _WITH?                                                            UPDATES
END; _PBSUPMSG?                                                          UPDATES
