*DECK,NP$SMSG 
*IF,DEF,XFR 
USETEXT AIPDEF
USETEXT NX$ACBX 
USETEXT HEADER
USETEXT NP$NWL
      PROC NP$SMSG; 
      BEGIN 
# 
*1DC  NP$SMSG 
* 
*     1. PROC NAME         AUTHOR               DATE
*        NP$SMSG           Y. C. YIP            02/19/1985
* 
*     2. FUNCTIONAL DESCRIPTION 
* 
*        GENERATES A LEGAL OR ILLEGAL TRIGGER BY DOING A
*        A TABLE LOOKUP FOR THE TRIGGER VALUE ASSOCIATED
*        WITH THAT ASYNC MESSAGE. 
* 
*     3. METHOD USED
*        FIRST A TABLE LOOKUP USING AN ARRAY PRESET WITH PFCSFC 
*        VALUES AND THE ASSOCIATED TRIGGER VALUES IS PERFORMED. 
*        THE LAST ENTRY OF THE ARRAY FOR EACH RESPECTIVE TABLE
*        (PRU SEND, PRU RECEIVE, CHARACTER SEND AND CHARACTER 
*        RECEIVE) IS RESERVED FOR STORING THE ASSOCIATED VALUE
*        OF THE ILLEGAL TRIGGER. THE INCOMING PFCSFC IS FIRST 
*        LOADED AT THE LAST ENTRY OF THE ARRAY PAIRED WITH THE
*        ILLEGAL TRIGGER VALUE ENTRY. IF THE SEARCH SUCCEEDS AT 
*        AN ENTRY PRIOR TO THE LAST ENTRY THEN WE GET A SUCCESSFUL
*        MATCH, ELSE IT WILL MATCH WITH ITSELF LOADED EARLIER AT THE
*        LAST ENTRY OF THE TABLE, HENCE RETURNING THE ILLEGAL TRIGGER 
*        IT THEN CALLS THE FILE TRANSFER ACTION PROCESSOR, NP$STPR. 
*        XFT/IER HAS DIFFERENT TRIGGER VALUES FOR DIFFERENT REASON
*        CODES. A SEPARATE BLOCK IS USED TO MAP THE REASON CODE TO
*        THE CORRESPONDING TRIGGERS USING A SIMILAR SCHEME AS WITH
*        THE PFCSFC.
* 
*     4. ENTRY CONDITIONS 
*        FTTINDEX IS THE INDEX OF THE FILE TRANSFER CONTROL 
*        BLOCK, FTT.
*        LOC$TA POINTS TO THE ADDRESS OF THE LOCATION, THE
*        ASYNC MESSAGE IS STORED. 
* 
*     5. EXIT CONDITONS 
*        FTTINDEX - UNCHANGED.
*        A TRIGGER VALUE CONTRIG IS PRODUCED ( LEGAL OR ILLEGAL)
*        AND IS USED IN CALLING NP$STPR.
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        NP$NWL, NX$ACBX
* 
*     7. ROUTINES CALLED
*        NP$STPR - FILE TRANSFER TABLE ACTION PROCESSOR.
*        NP$MSG  - DAYFILE MESSAGE PROCESSOR. 
* 
*     8. DAYFILE MESSAGES 
*        ILLEGAL TRIGGER RECEIVED.
# 
  
  
# 
**** PROC NP$SMSG - XREF LIST.
# 
     XREF                          # EXTERNAL REFERENCE TABLE          #
       BEGIN
       PROC NP$STPR;               # STATE TABLE PROCESSOR             #
       PROC NP$MSG;                # DAYFILE MESSAGE GENERATOR         #
       END
  
# 
****
# 
     DEF PRTBLMT   # 64 #;         # TABLE SIZE FOR THE 4 TABLES       #
     DEF PRSPLOWER # 1 #;          # LOWER BOUND OF PRU SENDER TABLE   #
     DEF PRSPUPPER # 16 #;         # UPPER BOUND OF PRU SENDER TABLE   #
     DEF PRRPLOWER # 17 #;         # LOWER BOUND OF PRU RECEIVER TABLE #
     DEF PRRPUPPER # 32 #;         # UPPER BOUND OF PRU RECEIVER TABLE #
     DEF PRSCLOWER # 33 #;         # LOWER BOUND OF CHAR SENDER TABLE  #
     DEF PRSCUPPER # 41 #;         # UPPER BOUND OF CHAR SENDER TABLE  #
     DEF PRRCLOWER # 49 #;         # LOWER BOUND OF CHAR RECEIVER TABLE#
     DEF PRRCUPPER # 58 #;         # UPPER BOUND OF CHAR RECEIVER TABLE#
     DEF XFTLMT # 16 #;            # SIZE OF THE XFT TABLE             #
     DEF XFTSPLOWER # 1 #;         # LOWER BOUND FOR XFT PRU SENDER    #
                                   # REASON CODE TABLE                 #
     DEF XFTSPUPPER # 8 #;         # UPPER BOUND FOR XFT PRU SENDER    #
                                   # REASON CODE TABLE                 #
     DEF XFTRPLOWER # 9 #;         # LOWER BOUND FOR XFT PRU RECEIVER  #
                                   # REASON CODE TABLE                 #
     DEF XFTRPUPPER # 16 #;        # UPPER BOUND FOR XFT PRU RECEIVER  #
                                   # REASON CODE TABLE                 #
     ITEM CRNT$ORD;                # TABLE ORDINAL                     #
     ITEM CONTRIG;                 # TRIGGER VALUE RESULTING FROM TABLE#
     ITEM RCORD;                   # TABLE ORDINAL FOR REASON CODE     #
                                   # TABLE                             #
                                   # SEARCH                            #
  
     ITEM BACKTRIG;                # RETURN TRIGGER BY CALLING NP$STPR #
      ARRAY ILLTRIG[0:0] S(3);     # WARNING FOR ILLEGAL TRIGGER       #
        BEGIN 
        ITEM ILLTRIGC C(00,00,24) = ["ILLEGAL TRIGGER RECEIVED"]; 
        ITEM ILLTRIGZ U(02,24,36) = [0];
        END 
  
     ARRAY PFCSFCTAB[1:PRTBLMT] S(1);  # PFCSFC VS TRIGGER  TABLE      #
       BEGIN
                                        # START OF PRU SENDER TABLE    #
       ITEM PFSFV U(00,00,16) =[ FCACK, # FOR TRIGGER NSPTFAK          #
                                 FCNAK, # FOR TRIGGER NSPTFNK          #
                                 CONCB, # FOR TRIGGER NSPTNCB          #
                                SHUINS, # FOR TRIGGER NSPTHSD          #
                                 SHISD, # FOR TRIGGER NSPTNSL          #
                                PRUONN, # FOR TRIGGER NSPTPRN          #
                                PRUONA, # FOR TRIGGER NSPTPRA          #
                                OFTEND, # FOR TRIGGER NSPTOFN          #
                                XFTIER, # FOR TRIGGER NSPTXFR          #
                               OFTOFFN, # FOR TRIGGER NSPTOFF          #
                               INTRUSR, # FOR TRIGGER NSPTINT          #
                               INTRAPP, # FOR TRIGGER NSPTINT          #
                                  FTON, # FOR TRIGGER NSPTFT           #
                                 FTOFF, # FOR TRIGGER NSPTFT           #
                                 FCBRK, # FOR TRIGGER NSPTBRK          #
                                      , # FOR TRIGGER NRSTILL          #
                                        # START OF PRU RECEIVER TABLE  #
                                 FCACK, # FOR TRIGGER NRPTFAK          #
                                 FCNAK, # FOR TRIGGER NRPTNAK          #
                                 CONCB, # FOR TRIGGER NRPTNCB          #
                                SHUINS, # FOR TRIGGER NRPTHSD          #
                                 SHISD, # FOR TRIGGER NRPTNSL          #
                                ESXOKR, # FOR TRIGGER NRPTESK          #
                                PRUONN, # FOR TRIGGER NRPTPRN          #
                                PRUONA, # FOR TRIGGER NRPTPRA          #
                                IFTEND, # FOR TRIGGER NRPTIFN          #
                                XFTIER, # FOR TRIGGER NRPTXFR          #
                               IFTOFFN, # FOR TRIGGER NRPTIFF          #
                                 FCRST, # FOR TRIGGER NRPTFRT          #
                               INTRUSR, # FOR TRIGGER NRPTINT          #
                               INTRAPP, # FOR TRIGGER NRPTINT          #
                                 FCBRK, # FOR TRIGGER NRPTBRK          #
                                      , # FOR TRIGGER NRSTILL          #
                                        # START OF CHAR SENDER TABLE   #
                                 FCACK, # FOR TRIGGER NSCTFAK          #
                                 FCNAK, # FOR TRIGGER NSCTFNK          #
                                 FCBRK, # FOR TRIGGER NSCRBRK          #
                                 CONCB, # FOR TRIGGER NSCTNCB          #
                                SHUINS, # FOR TRIGGER NSCTHSD          #
                                 SHISD, # FOR TRIGGER NSCTNSL          #
                               INTRUSR, # FOR TRIGGER NSCTINT          #
                               INTRAPP, # FOR TRIGGER NSCTINT          #
                                      , # FOR TRIGGER NSCTILL          #
                                      , 
                                      , 
                                      , 
                                      , 
                                      , 
                                      , 
                                      , 
                                        # START OF CHAR RECEIVER TABLE #
                                  FCACK,# FOR TRIGGER NRCTFAK          #
                                  FCNAK,# FOR TRIGGER NRCTNAK          #
                                  FCBRK,# FOR TRIGGER NRCTBRK          #
                                  FCRST,# FOR TRIGGER NRCTRST          #
                                  CONCB,# FOR TRIGGER NRCTNCB          #
                                 SHUINS,# FOR TRIGGER NRCTHSD          #
                                  SHISD,# FOR TRIGGER NRCTNSL          #
                                INTRUSR,# FOR TRIGGER NRCTINT          #
                                INTRAPP,# FOR TRIGGER NRCTINT          #
                                       ,# FOR TRIGGER NRCTILL          #
                                       ,
                                       ,
                                       ,
                                       ,
                                       ,
                                       ]; 
  
        ITEM PFSFTRIG U(00,30,30) =     # START OF PRU SENDER TABLE    #
                                    [ NSPTFAK,  #  FCACK               #
                                      NSPTFNK,  #  FCNAK               #
                                      NSPTNCB,  # CONCB                #
                                      NRSTHSD,  # SHUINS               #
                                      NRSTNSL,  # SHISD                #
                                      NSPTPRN,  # PRUONN               #
                                      NSPTPRA,  # PRUONA               #
                                      NSPTOFN,  # OFTEND               #
                                      NSPTXFR,  # XFTIER               #
                                      NSPTOFF,  # OFTOFFN              #
                                      NSPTINT,  # INTRUSR              #
                                      NSPTINT,  # INTRAPP              #
                                      NSPTFT ,  # FTON                 #
                                      NSPTFT ,  # FTOFF                #
                                      NSPTBRK,  # FCBRK                #
                                      NRSTILL,  # ILLEGAL TRIGGER      #
                                                # START OF PRU RECEIVER#
                                                # TABLE                #
                                      NRPTFAK,  # FCACK                #
                                      NRPTNAK,  # FCNAK                #
                                      NRPTNCB,  # CONCB                #
                                      NRSTHSD,  # SHUINS               #
                                      NRSTNSL,  # SHISD                #
                                      NRPTESK,  # ESXOKR               #
                                      NRPTPRN,  # PRUONN               #
                                      NRPTPRA,  # PRUONA               #
                                      NRPTIFN,  # IFTEND               #
                                      NRPTXFR,  # XFTIER               #
                                      NRPTIFF,  # IFTOFFN              #
                                      NRPTFRT,  # FCRST                #
                                      NRPTINT,  # INTRUSR              #
                                      NRPTINT,  # INTRAPP              #
                                      NRPTBRK,  # FCBRK                #
                                      NRSTILL,  # ILLEGAL TRIGGER      #
                                                # START OF CHAR SENDER #
                                                # TABLE                #
                                      NSCTACK,  # FCACK                #
                                      NSCTNAK,  # FCNAK                #
                                      NSCTBRK,  # FCBRK                #
                                      NSCTNCB,  # CONCB                #
                                      NSCTHSD,  # SHUINS               #
                                      NSCTNSL,  # SHISD                #
                                      NSCTINT,  # INTRUSR              #
                                      NSCTINT,  # INTRAPP              #
                                      NSCTILL,  # ILLEGAL TRIGGER      #
                                             ,
                                             ,
                                             ,
                                             ,
                                             ,
                                             ,
                                             ,
                                                # START OF CHAR RECVER #
                                                # TABLE                #
                                      NRCTACK,  # FCACK                #
                                      NRCTNAK,  # FCNAK                #
                                      NRCTBRK,  # FCBRK                #
                                      NRCTRST,  # FCRST                #
                                      NRCTNCB,  # CONCB                #
                                      NRCTHSD,  # SHUINS               #
                                      NRCTNSL,  # SHISD                #
                                      NRCTINT,  # INTRUSR              #
                                      NRCTINT,  # INTRAPP              #
                                      NRCTILL,  # ILLEGAL TRIGGER      #
                                             ,
                                             ,
                                             ,
                                             ,
                                             ,
                                             ]; 
        END 
  
      ARRAY BLKPTR [ 0:3] S(1);    # CONTROL BLOCK FOR INDEXES INTO    #
        BEGIN 
                                   # THE FOUR PFCSFC TABLES            #
        ITEM BLKLOWER U(00,00,30) = [ PRSPLOWER,  # LOWER BOUND OF PRU #
                                                  # SENDER             #
                                      PRRPLOWER,  # LOWER BOUND OF PRU #
                                                  # RECEIVER           #
                                      PRSCLOWER,  # LOWER BOUND OF CHAR#
                                                  # SENDER             #
                                      PRRCLOWER   # LOWER BOUND OF CHAR#
                                                  # RECEIVER           #
                                    ];
        ITEM BLKUPPER U(00,30,30) = [ PRSPUPPER,  # UPPER BOUND OF PRU #
                                                  # SENDER             #
                                      PRRPUPPER,  # UPPER BOUND OF PRU #
                                                  # RECEIVER           #
                                      PRSCUPPER,  # UPPER BOUND OF CHAR#
                                                  # SENDER             #
                                      PRRCUPPER   # UPER BOUND OF CHAR #
                                                  # RECEIVER           #
                                     ]; 
        END 
  
      ARRAY XFTRCTRIG [1:XFTLMT] S(1);  # RC - TRIGGER VALUE TABLE     #
        BEGIN                     # PRU SENDER XFTIER RC TABLE         #
        ITEM XFTRC U(00,00,30) = [ RC2, # REASON CODE 2                #
                                   RC3, # REASON CODE 3                #
                                   RC4, # REAOSN CODE 4                #
                                   RC9, # REASON CODE 9                #
                                   RC6, # REASON CODE 6                #
                                  RC10, # REASON CODE 10               #
                                   RC8, # REASON CODE 8                #
                                      , # PRU RECEIVER                # 
                                   RC1, # REASON CODE 1               # 
                                  RC10, # REASON CODE 10              # 
                                   RC8, # REASON CODE 8               # 
                                   RC3, # REASON CODE 3               # 
                                   RC5, # REASON CODE 5               # 
                                   RC7, # REASON CODE 7               # 
                                   RC9, # REASON CODE 9               # 
                                  ];
        ITEM XFTRIGV U(00,30,30) = [    # PRU SENDER                  # 
                                    NSPTQRE,  # FOR RC=2              # 
                                    NSPTXFR,  # FOR RC=3              # 
                                    NSPTQRE,  # FOR RC=4              # 
                                    NSPTRCT,  # FOR RC=9              # 
                                    NSPTIO7,  # FOR RC=6              # 
                                    NSPTQRE,  # FOR RC=10             # 
                                    NSPTQRE,  # FOR RC = 8            # 
                                    NRSTILL,  # ILLEGL TRIGGER        # 
                                              # PRU RECEIVER          # 
                                    NRPTXFR,  # FOR RC=1              # 
                                    NRPTXFR,  # FOR RC=10             # 
                                    NRPTIO7,  # FOR RC=8              # 
                                    NRPTBR3,  # FOR RC=3              # 
                                    NRPTES5,  # FOR RC=5              # 
                                    NRPTIO7,  # FOR RC=7              # 
                                    NRPTTM9,  # FOR RC=9              # 
                                    NRSTILL   # FOR ILLEGAL TRIGGER   # 
                                   ]; 
      END 
  
  
      ARRAY RCPTR[0:1] S(1);       # REASON CODE INDEX CONTROL BLOCK   #
        BEGIN 
        ITEM RCLOWER U(00,00,30) = [ XFTSPLOWER, # LOWER BOUND FOR PRU #
                                             # SENDER                  #
                                     XFTRPLOWER, # UPPER BOUND FOR PRU #
                                             # RECIVER                 #
                                    ];
        ITEM RCUPPER U(00,30,30) = [ XFTSPUPPER, # UPPER BOUND FOR PRU #
                                             # SENDER                  #
                                     XFTRPUPPER,  # UPPER BOUND FOR PRU#
                                             # RECEIVER                #
                                    ];
        END 
  
  
      ITEM INDEX;                  # LOOP INDEX                        #
      ITEM LEVLOP B;               # FLAG TO LEAVE LOOP                #
  
      CONTROL EJECT;
  
#                                                                      #
#                                                                      #
#                 CODE OF PROC NP$SMSG BEGINS HERE                     #
#                                                                      #
#                                                                      #
      P<SUPMSG> = LOC$TA;          # PULL TEMPLATE OVER MESSAGE        #
      PRERC = RC;                  # SAVE REASON CODE                  #
      CRNT$ORD = FTTSTORD[FTTINDEX];#PICKS UP TABLE ORDINAL FROM FTT   #
      IF PFCSFC NQ FCINA           # SKIP FCINA                        #
      THEN
        BEGIN 
        LEVLOP = FALSE;            # SET FLAG TO FALSE                 #
        PFSFV[BLKUPPER[CRNT$ORD]] = PFCSFC;  # LOAD PFCSFC AT ILLEGAL  #
                                   #        TRIGGER ENTRY              #
        FOR INDEX = BLKLOWER[CRNT$ORD] STEP 1 WHILE NOT LEVLOP
        DO
          BEGIN 
          IF PFCSFC EQ PFSFV[INDEX] #   IF MATCH FOUND                 #
          THEN
            BEGIN 
            CONTRIG = PFSFTRIG[INDEX];  # SAVE TRIGGER VALUE           #
            LEVLOP = TRUE;           # SET FLAG TO EXIT LOOP           #
            IF INDEX EQ BLKUPPER[CRNT$ORD]
            THEN
              BEGIN 
              NP$MSG(ILLTRIG,XFRDTYPE);  # ILLEGAL TRIGGER RECEIVED    #
              END                  # TO DAYFILE                        #
            END 
          END 
  
        IF CONTRIG EQ NSPTXFR AND CRNT$ORD EQ NETSPOD #SPECIAL CASE    #
                                   # XFTIER                            #
           OR CONTRIG EQ NRPTXFR AND CRNT$ORD EQ NETRPOD
        THEN
          BEGIN 
          RCORD = CRNT$ORD; 
          LEVLOP = FALSE; 
          XFTRC[RCUPPER[RCORD]] = RC;   # LOAD RC INTO TABLE          # 
          FOR INDEX = RCLOWER[RCORD] STEP 1 WHILE NOT LEVLOP
                                   #  SCAN REASON CODE TABLE          # 
          DO
            BEGIN 
            IF RC EQ XFTRC[INDEX]  #    IF MATCH FOUND                # 
            THEN
              BEGIN 
              CONTRIG = XFTRIGV[INDEX];   # SAVE TRIGGER VALUE        # 
              LEVLOP = TRUE;       #    SET FLAG TO LEAVE LOOP        # 
              IF INDEX EQ RCUPPER[RCORD]  # IF UPPER BOUND REACHED    # 
              THEN
                BEGIN 
                NP$MSG(ILLTRIG,XFRDTYPE); # ILLEGAL TRIGGER RECEIVED  # 
                END                 #     TO DAYFILE                  # 
              ELSE
                BEGIN 
                FTTICKVAL[FTTINDEX] = SPMCKMS[0];  # UPDATE LAST CHECK# 
                                    #      MARK NUMBER ACKNOWLEDGED   # 
                FTTCURPRU[FTTINDEX] = SPMCKMP[0];  # UPDATE CURRENT   # 
                END                                # PRU POSITION     # 
                                                   # ASSOCIATED WITH  # 
              END                                  # LAST CHECKMARK   # 
            END 
          END 
        BACKTRIG = CONTRIG;          # SET BACKTRIG TO TRIGGER        # 
        FOR INDEX = 0 WHILE BACKTRIG NQ NIL# REPEAT UNTIL BACKTRIG IS # 
        DO                           # NIL                            # 
          BEGIN 
          CONTRIG = BACKTRIG;        # SET CONTRIG TO BACKTRIG        # 
          NP$STPR(FTTINDEX,CONTRIG,BACKTRIG);# CALL NP$STPR           # 
          END 
        END 
      RETURN;                        # RETURN FROM CALLER             # 
      END                            # END OF PROC NP$SMSG            # 
TERM
*ENDIF
