*DECK NP$RESP 
USETEXT AIPDEF
USETEXT NP$MODE 
USETEXT NP$NWL
USETEXT NP$STAT 
*IF DEF,XFR 
USETEXT NX$ACBF 
*ENDIF
*IF,DEF,DEBUG 
USETEXT NP$DB 
*ENDIF
PROC NP$RESP; 
*IF DEF,IMS 
  
 #
*1DC  NP$RESP 
* 
*     1. PROC NAME         AUTHOR                DATE 
*        NP$RESP             S.KRULEVITCH        77/3/21
* 
*     2. FUNCTIONAL DESCRIPTION 
*        THIS ROUTINE PROCESSES THE EXPECTED RESPONSE FROM NIP. 
* 
*     3. METHOD USED
*        NIP RESPONSE IS EXPECTED IN AIP"S WORKLIST AFTER THE HEADER
*        WORDS.  NP$RESP RESETS THE NP$NWL HEADER WORD AND TABLE
*        POINTER WORDS: NEXT AND SPACE$LEFT.  THE POSSIBLE WORKLIST 
*        RESPONSES ARE TREATED AS FOLLOWS:  
* 
*        A NETON RESPONSE IS TREATED IN NP$ON.
* 
*        FOR A GET/GETL/GTFL/GETF RESPONSE, NP$RESP WILL PASS THE 
*        APPLICATION BLOCK HEADER OF THE DATA MESSAGE TO THE APPLICATION
*        HEADER ADDRESS (HA).  NP$RESP WILL LOG THE MESSAGE ON AIP
*        DEBUG FILE VIA ROUTINE NP$DBG. IF STAT IS DEFINED
*        THEN THE NUMBER OF MESSAGES OF A SPECIFIC ABT IS INCREMENTED.
* 
*        FOR A GETSM RESPONSE, THE SMB POINTERS ARE UPDATED AND THE 
*        NEXTSMLEN WORD ( WHICH SPECIFIES THE LENGTH
*        OF THE NEXT SUPERVISORY MESSAGE IN NIP"S FIELD LENGTH WAITING
*        FOR ROOM IN THIS APPLICATION"S SMB) IS SET.
*        IF THE APPLICATION HAD PREVIOUSLY REQUESTED A SUPERVISOR 
*        MESSAGE, THEN NP$GSM IS CALLED. LTAA IS SET TO ZERO, AND 
*        DEFER$GSM IS SET TO FALSE. 
* 
*        IF THE DOWNLINE BUFFER FEATURE IS IN USE, RESET THE WORKLIST 
*        TABLE POINTER WORDS FOR THE APPLICATION-SUPPLIED DOWNLINE
*        BUFFER.
* 
*     4. ENTRY CONDITIONS 
*        AWL$NEXT[NHDR] - AWL WORD COUNT. 
*        LOC$HA - LOCATION FOR THE HEADER ADDRESS.
* 
*     5. EXIT CONDITIONS
*        HA - CONTAINS ABH IF THERE WAS A GET/GETL/GETF.
*        NEXTSMLEN - ZERO IF NO SUPERVISORY MESSAGES AVAILABLE FOR USER.
*                    OTHERWISE, LENGTH OF THE NEXT MESSAGE. 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        AIPDEF    NP$CRT    NP$DB     NP$MODE
*        NP$NWL    NP$STAT
* 
*     7. ROUTINES CALLED
*        NP$GSM 
*        NP$DBG 
*        NP$ON
*        NP$SN - INCREMENTS STATISTICS COUNTER
* 
*     8. DAYFILE MESSAGES 
*        NONE 
* 
 #
  
*ENDIF
      BEGIN 
  
#                                                                     # 
*CALL NP$CRT
  
#                                                                     # 
#     ROUTINE CALLED:                                                 # 
#                                                                     # 
      XREF
        BEGIN 
*IF DEF,DEBUG 
        PROC NP$DBG;                    #OUTPUT MESSAGE TO ZZZZZDN    # 
*ENDIF
        PROC NP$GSM;                    #DELIVERS A SUP MSG TO APP    # 
        PROC NP$ON;                     #PROCESSES NETON RESPONSE     # 
*IF DEF,STAT
        PROC NP$SN;                     #INCREMENTS STATISTICS COUNTER# 
*ENDIF
        END 
      ITEM
        I               I,              #TEMPORARY VARIABLE            #
        J;                              # TEMPORARY VARIABLE           #
      BASED ARRAY MEM[0:O"77777"] S(1); 
        ITEM
        HA              I (0);          #HEADER AREA                   #
  
#**********************************************************************#
#                                                                     # 
#     NP$RESP EXECUTION BEGINS HERE                                   # 
#                                                                     # 
*CALL NP$RST
      FOR I=NEXT WHILE N$AWL[0] NQ 0
      DO
        BEGIN 
        IF N$GETAWL[0] NQ 0 
        THEN
          BEGIN    # GET/GETL/GETF/GETFL AWL RESPONSE                  #
          P<MEM> = LOC$HA;
          HA[0] = ABH[I+1]; 
*IF DEF,DEBUG 
          NP$DBG;  # WRITE TO ZZZZZDN FILE                             #
*ENDIF
*IF DEF,STAT
          J = TYPE"INB" + ABH$ABT[I+1]; 
          NP$SN(J);  # UPDATE STATISTICS                               #
*ENDIF
          N$GETAWL[0] = 0;
          TEST I; 
          END 
  
        I = I + AWLESIZE;    # GMM AWL ALWAYS 2ND AWL ENTRY            #
        IF N$GMMAWL[0] NQ 0 
        THEN                 # GETMM AWL RESPONSE                      #
          BEGIN 
          GMBFOOT = GMBFOOT + GMM$NW[I+1];  # UPDATE FOOT OF DATA BUF  #
          GMBLN = GMM$ALN[I+1];  # LIST NUMBER OF DATA IN AIP QUEUE    #
  
*IF,DEF,STAT
          STAT[TYPE"GMD"] = STAT[TYPE"GMD"] + GMM$NM[I];
          STAT[TYPE"GMWD"] = STAT[TYPE"GMWD"] + GMM$NW[I+1];
*ENDIF
  
          N$GMMAWL[0] = 0;   # END GETMM PROCESING                     #
          END 
  
        IF N$GSMAWL[0] NQ 0 
        THEN                 # GSM AWL RESPONSE                        #
          BEGIN 
          I = I + AWLESIZE;  # GSM AWL ALWAYS 3RD AWL ENTRY            #
  
*IF,DEF,STAT
          STAT[TYPE"GSD"] = STAT[TYPE"GSD"] + GMM$NM[I];
          STAT[TYPE"GSWD"] = STAT[TYPE"GSWD"] + ABH$TLC[I+1]; 
*ENDIF
          FOOT = FOOT + ABH$TLC[I+1];  # UPDATE FOOT PTR OF SMB        #
          NEXTSMLEN = NWL$RC[I+1];  # SIZE OF NEXT AVAIL SM            #
          N$AWL[0] = 0;  # END AWL PROCESSING                          #
          IF DEFER$GSM
          THEN
            BEGIN 
            NP$GSM;          # SEND SM TO APPLICATION                  #
            LTAA = 0; 
            DEFER$GSM = FALSE;
            END 
          TEST I; 
          END 
  
        IF N$NETONAWL[0] NQ 0 
        THEN                 # NETON AWL RESPONSE                      #
          BEGIN 
          NP$ON;
          N$AWL[0] = 0;      # END AWL PROCESSING                      #
          END 
*IF DEF,XFR 
        IF N$XFRAWL[0] NQ 0 
        THEN
          BEGIN 
          NET$AWL$XFR = NWL$RC[NEXT] ;
          N$AWL[0] = 0 ;
          END 
*ENDIF
        END                  #END FOR LOOP                             #
  
      IF DOWNUSE
      THEN                   # DOWNLINE BUFFER FEATURE IS IN USE       #
        BEGIN 
        P<WORKLIST> = LOC$APBUF;     # POINT WORKLIST TO APPL BUFFER   #
        NEXT = 0; 
        SPACE$LEFT = AB$SIZE[0];
        END 
  
      RETURN; 
      END #NP$RESP# 
      TERM
