*DECK NPPWL 
USETEXT NIPDEF
USETEXT NBT 
USETEXT OVERLAY 
USETEXT PARAMP
USETEXT PARAMS
USETEXT PCNB
USETEXT LLCB
USETEXT NCNB
USETEXT NCNT
USETEXT PWL 
USETEXT PT
USETEXT APPSTAT 
 PROC NPPWL(BUFADDR);        # PROCESS A PRU WORKLIST                  #
 STARTIMS;
 #
*1DC  NPPWL 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        NPPWL               J.C. LEE            80/04/01 
* 
*     2. FUNCTIONAL DESCRIPTION.
*          PROCESS A PRU WORKLIST 
* 
*     3. METHOD USED. 
*          LOCATE NETWORK-SIDE PCNB 
*          VALIDATE FOR A PCNB AND ALLOWED OPCODE VALUE,
*          PROCESS PWL
* 
*     4. ENTRY PARAMETERS.
*        BUFADDR             ADDRESS OF WORKLIST BUFFER 
* 
*     5. EXIT PARAMETERS. 
*          CODE              ZERO IF THERE IS NO SPACE FOR BUFFER 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        NIPDEF     OPSIZE     OVERLAY
*        PARAMP     PCNB     PWL
*        LLCB     NCNT     APPSTAT
* 
*     7. ROUTINES AND OVERLAYS CALLED.
*          LOCLLCB           LOCATE LLCB
*          LOCNCNT           LOCATE NCNT
*          NCSTTP            NETWORK CONNECTION STATE TAB PROCESSOR 
*          NBSTTP            NETWORK BLOCK STATE TABLE PROC 
*          NGIGO      OVL    DAYFILE TEXT GENERATED BY NPU/PIP
*          NPISM      OVL    PROCESS ILLEGAL SUPERVISORY MESSAGE
*          XABTAPP       OVL ROUTINE TO ABORT APPLICATION 
*          HAPFAIL       OVL PROCESSS APPLICATION FAILURE 
*          NPPSM      OVL    PROCESS A PRU SUPERVISORY MESSAGE FROM PIP 
*          NRPWL      OVL    RELEASE A PROCESSED PWL
*          OVLCALL           LOAD AND EXECUTE OVERLAY 
*          XTRACE            TRACE CALLS
* 
*     8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION 
*        THIS PROCEDURE IS CALLED BY NEIB1 AND XSACB. 
* 
 #
 STOPIMS; 
# 
              EXTERNAL VARIABLES
# 
 XREF 
   BEGIN
   PROC LOCLLCB;
   PROC LOCNCNT;
   PROC NCSTTP; 
  PROC NBSTTP ; 
   PROC OVLCALL;             # LOAD AND EXECUTE OVERLAY                #
   PROC XTRACE; 
   END
# 
              INTERNAL VARIABLES
# 
      ITEM BUFADDR;          # BUFFER ADDRESS                          #
 ITEM CODE;                  # RETURN VALUE                            #
 ITEM PCNBADDR;              # PCNB ADDRESS                            #
 ITEM NCNTEAD;               # NCNT ENTRY ADDRESS                      #
 ITEM PRUCN;                 # PRU CONNECTION NUMBER                   #
 ITEM REASON U ;
 ITEM NCTRIGG ; 
  ITEM DISCRDF  B ;         # WAITING PIP CONN. TERMINATION            #
  
 SWITCH PWLOPJT ,NPWLOP1,NPWLOP2,NPWLOP3,NPWLOP4,NPWLOP5,NPWLOP6 ;
  
# ******************************************************************** #
      BEGIN 
  
      CONTROL IFEQ DEBUG,1; 
        XTRACE("NPPWL") ; 
      CONTROL FI; 
  
      P<PWLHDR> = BUFADDR;   # PRU WORKLIST ADDRESS                    #
      PARAMP4 = 0;                     # INITIALIZE NGIGO CALL FLAG    #
      DISCRDF = FALSE ; 
      IF PWLOP[0] EQ PWLOPDAYFI 
        OR ( PWLHN[0] EQ PWLTN[0] AND PWLOP[0] EQ PWLOPBPRU ) # OP =6  #
                                      # ON A COUPLER, DAYFILE AS OP=5  #
      THEN                             # DAYFILE TEXT FROM PIP         #$ 
        GOTO NPWLOP5 ;                 # DAYFILE TEXT FROM PIP         #
  
      PRUCN = PWLCN[0] ;
      LOCLLCB(PWLHN[0],PWLTN[0],P<LLCB>); 
      LOCNCNT(P<LLCB>,PRUCN,NCNTEAD); 
      P<NCNT> = NCNTEAD;
      PCNBADDR = NCNTNCNB[0]; 
#                                                                      #
  
      IF PCNBADDR EQ 0
      THEN                             # CANNOT LOCATE PCNB            #
        BEGIN 
        PARAMP4 = DMCUCN;              # UNKNOWN NETWORK CONNECTION NO #
        END 
  
      ELSE
        BEGIN                          # FOUND PCNB                    #
        P<PCNB> = PCNBADDR;            # PCNB ADDRESS                  #
  
        IF PCNBID[0] NQ PCNBIDVALUE 
           AND PCNBID[0] NQ LCNBIDVALUE 
        THEN                           # NOT A PCNB                    #
          BEGIN 
          IF PWLOP[0] EQ PWLOPBPRU     # IF OP=6, JUST DAYFILE IT      #
          THEN
            BEGIN 
            PARAMP4 = DMCPBPE;
            END 
          ELSE                         # DAYFILE AND ABORT ON OP OTHER #
            BEGIN                      # THAN 6.                       #
            PARAMP4 = DMCNPCN;
            END 
          END 
  
        ELSE
          BEGIN 
          CODE = PWLOP[0];             # PRU WORKLIST OPCODE           #
  
          IF CODE LS PWLOPNSM 
             OR  CODE GR PWLOPXPRU
          THEN                         # BAD PWL OPCODE                #
            BEGIN 
            PARAMP4 = DMCBPWO;         # BAD PWL OPCODE                #
            END 
  
          ELSE                         # VALID PWL OPCODE              #
            BEGIN 
# 
           CALL NETWORK BLOCK TABLE TO VALIDATE STATE 
# 
          PARAMP2 = 2 ;      # PRESET TO INITIAL ERROR STATE           #
          NBSTTP(PCNBADDR,PRUDTA,P<PWLHDR>) ; 
          IF PARAMP2 EQ 2 
          THEN
            BEGIN 
            PARAMP4 = 0;               # CLEAR NGIGO CALL FLAG - NGIGO #
                                       # OVERLAY HAS ALREADY BEEN CALLD#
            GOTO NPPWL1 ;       # TO PROCESS ILLEGAL PRU DATA          #
            END 
          IF PARAMP2 EQ 1 
          THEN
            DISCRDF = TRUE ;    # WE ARE WAITING FOR PRU TERMINATION   #
          GOTO PWLOPJT[CODE] ;         # SWITCH ON OPCODE              #
# 
            PROCESS PRU WORKLIST OPCODE FUNCTION
# 
NPWLOP1:  
            OVLNAME = NPPSMP;          # PROCESS A PRU SM FROM PIP     #
            IF DISCRDF
            THEN
              BEGIN 
              GOTO NPPWL1 ; 
              END 
            GOTO CALLOVL; 
NPWLOP2:  
            OVLNAME = NRPWLP;          # RELEASE A PROCESSED PWL       #
            GOTO CALLOVL; 
NPWLOP3:  
            IF PWLRC[0] EQ 0
            THEN
              NCTRIGG = PIPR ;
            ELSE
              BEGIN 
              IF PWLRC[0] LQ IFTRC
                  AND PWLRC[0] GR 0 
              THEN
                NCTRIGG = NXFTOFN ; 
              ELSE
                                   # REASON CODE IS NOT WITHIN THE RANG#
                BEGIN 
                PARAMP4 = DMCBTRC;     # BAD TERMINATE PRU CON RC      #
                END 
              END 
            IF PARAMP4 EQ 0 
            THEN
              BEGIN                # EVERYTHING O.K.                   #
              PARAMP1 = P<PWLHDR> ; 
              PARAMP2 = P<PCNB> ; 
              OVLNAME = NPPCTP ;
              OVLCALL ; 
              IF PARAMP4 EQ 0            # NO ERROR IN SSTP CALL       #
                    AND PARAMP2 NQ 0     # NCNB RETURNED               #
              THEN
                BEGIN                    # NO ERROR FOUND, GO AHEAD    #
                P<NCNB> = PARAMP2 ;      # CALL STATE PROCESSOR FOR    #
  
                NCSTTP(P<LLCB>,NCNBCN[0],NCTRIGG,P<PWLHDR>);
  
                END                      # NCNB                        #
              PARAMP4 = 0;             # CLEAR NGIGO CALL FLAG         #
              END                  # EVERYTHING WENT O.K.              #
  
  
            GOTO NPPWL1 ; 
NPWLOP4:  
            OVLNAME = NPISMP;          # PROCESS ILLOGICAL SUP MSG     #
            GOTO CALLOVL; 
NPWLOP5:  
            REASON = PWLRC[0];         # RC ASSOCIATED WITH DAY MSG    #
            IF REASON EQ DFTX 
            THEN                       # NIP IS TO DAYFILE PWL TEXT    #
              BEGIN 
              PARAMP4 = DMCPDM;        # DMC FOR PIP DAYFILE MSG       #
              END 
            ELSE                       # NIP IS NOT TO DAYFILE MSG     #
              BEGIN 
              IF REASON EQ DFBPE
              THEN                     # PIP DETECTED BLOCK PROTOCOL ER#
                BEGIN                  # IN UPLINE MSG                 #
                PARAMP4 = DMCBNBD;     # DMC FOR IVT BLK PROTOCOL ERR  #
                END 
              ELSE                     # CHECK FOR OTHER DAYFILE CODES #
                BEGIN 
                IF REASON  EQ DFME
                THEN                   # NIP IS TO DAYFILE MDI ERR STAT#
                  BEGIN 
                  PARAMP4 = DMCMDS;    # DMC FOR MDI DETAILED STATUS   #
                  END 
                ELSE                   # NIP IS TO DAYFILE NO SUP MSG  #
                  BEGIN 
                  IF REASON  EQ DFRDM 
                  THEN                 # PIP REJECTED DOWNLINE MSG     #
                    BEGIN 
                    PARAMP4 = DMCRDM;  # DMC FOR REJECTING DOWNLINE MSG#
                    END 
                  ELSE                 # NIP IS TO DAYFILE NO SUP MSG  #
                    BEGIN 
                    PARAMP4 = DMCNSV;  # DMC FOR NONSUPPORT MDI MSG    #
                    END 
                  END 
                END 
              END 
            GOTO NPPWL1 ; 
NPWLOP6:  
            PARAMP4 = DMCPBPE;         # PRU BLOCK PROTOCOL ERR WORKLST#
            # 
                 STATE TABLE CALL TO NCSTTP TO SEND TO PIP PWL WITH OP
                 9, PIP WILL RESPONSE PWL WITH OP = 3.
            # 
            RCBRK = RCCB"NE" ;   # RC = 20, NPU ERROR                  #
            NCSTTP(P<LLCB>,PRUCN,NCBRKPC,P<PWLHDR>);
            GOTO NPPWL1;
  
CALLOVL:  
            PARAMP1 = P<PWLHDR>;       # PRU WORKLIST ADDRESS          #
            PARAMP2 = PCNBADDR;        # PCNB ADDRESS                  #
            OVLCALL;                   # CALL OVERLAY                  #
            END 
          END 
        END 
  
NPPWL1: 
      IF PARAMP4 NQ 0 
      THEN
        BEGIN 
        PARAMP1 = P<PWLHDR>;           # PRU WORKLIST ADDRESS          #
        OVLNAME = NGIGOP;              # DAYFILE GARBLED TEXT          #
        OVLCALL;                       # CALL OVERLAY                  #
        END 
# 
      CHECK IF AN APPLICATION NEEDS TO BE ABORTED 
# 
      IF ABTAPPF NQ 0 
      THEN
        BEGIN 
        OVLNAME = XABTAPPP; 
        OVLCALL;
        END 
  
# 
      CHECK IF AN APPLICATION HAS FAILED
# 
      IF FAILADR NQ 0 
      THEN
        BEGIN                # PROCESS APPLICATION FAILURE             #
        OVLNAME = HAPFAILP; 
        OVLCALL;
        END 
      RETURN; 
      END 
TERM
