*DECK NS$DAR
USETEXT DEF$NS
USETEXT ERR$NS
USETEXT NAT$NS
USETEXT NPT$NS
USETEXT PFC$NS
USETEXT PIC$NS
USETEXT SMB$NS
USETEXT SMD$NS
      PROC NS$DAR(ERRCODE); # PROCESS ABNORMAL RESPONSE FROM NPU       #
  
# TITLE NS$DAR - PROCESS ABNORMAL RESPONSE FROM NPU.                   #
  
      BEGIN    # NS$DAR # 
# 
**    NS$DAR - PROCESS ABNORMAL RESPONSE FROM NPU.
* 
*     J.C. LEE    1981
* 
*     THIS ROUTINE PROCESS ABNORMAL RESPONSE FROM NPU.
* 
*     PROC NS$DAR(ERRCODE)
* 
*     ENTRY:  
*       NONE. 
* 
*     EXIT: 
*       ERRCODE - SET IF ERROR IS FOUND.
* 
*     METHOD: 
*       IF RETRY-COUNT = 0, MESSAGE TO DAYFILE AND ABORT. 
*       IF RETRY-COUNT NOT REACH LIMIT, DETERMINE TYPE OF 
*       ABNORMAL RESPONSE.
*         IF ABNORMAL DUMP RESPONSE, SET DUMP REQUEST TEXT
*         LENGTH, AND RESTART REQUEST.
*         IF ABNORMAL LOAD RESPONSE, SET ERRCODE, AND ABORT 
*         NPU LOAD. 
*         IF ABNORMAL START RESPONSE, SET START REQUEST TEXT
*         LENGTH, AND RESTART REQUEST.
*       IF RETRY-COUNT REACH LIMIT. SET ERRCODE AND ABORT 
*       CURRENT ACTIVITY. 
* 
# 
  
      ITEM ERRCODE    U;     # ERROR CODE                              #
  
      $BEGIN
      XREF
        BEGIN 
        PROC NS$DBG;         # TRACE PROCEDURE CALL                    #
        END 
      $END
  
      XREF
        BEGIN 
        PROC NS$FBH;         # FORMAT APPLICATION BLOCK HEADER         #
        FUNC NS$FEC U;       # FORMAT ERROR CODE                       #
        PROC NS$MSG;         # DISPATCH MESSAGE                        #
        FUNC NS$CHD C(4);    # CONVERT HEX TO DISPLAY CODE             #
        PROC NETPUT;         # SEND MESSAGE TO NETWORK                 #
        END 
  
      DEF MAX$RETRYS # 3 #;  # MAXIMUM RETRY COUNT ALLOWED             #
  
      ITEM COMCODE    U;     # COMMAND CODE                            #
      ITEM CCMNEMONIC C(3) = "DLS";    # VALID NPU/DT/A COMMAND CODE   #
      ITEM TEMP       U;     # TEMPORARY                               #
  
      DEF DM$MAR     # DM$LOCAL+DM$NAMLOG+DM$EVENT #; # ROUTE OPTIONS  #
      DEF L$MAR      # 4 #; 
      ARRAY MSG$MAR [0:0] S(L$MAR); 
        BEGIN                # EVENT MESSAGE FOR ABNORMAL RESPONSE     #
        ITEM MAR$TEXT   C(0,0,38) =    # EVENT MESSAGE TEXT            #
          ["NPUNAME, RECEIVED NPU/DT/A(C) RC = XX."]; 
        ITEM MAR$NPNAM  C(00,00,07);   # NPU NAME                      #
        ITEM MAR$PFCSFC C(01,48,06);   # PFC/SFC OF SM                 #
        ITEM MAR$CC     U(02,42,06);   # COMMAND CODE                  #
        ITEM MAR$RC     U(03,30,12);   # REASON CODE IN HEXADECIMALS   #
        ITEM MAR$END    U(03,48,12) = [0];  # LINE TERMINATOR          #
        END 
  
      SWITCH ANPUDTCASE:DIRCODE # NPU/DT/A CASES                       #
        AR$DUMP:DUMP, 
        AR$LOAD:LOAD, 
        AR$START:START; 
  
CONTROL EJECT;
  
      $BEGIN
      NS$DBG("DAR");         # TRACE CALL                              #
      $END
  
      ERRCODE = 0;
      COMCODE = NPUCC[0]; # COMMAND CODE                               #
  
      IF NAT$RETRYS[0] EQ 0 
      THEN                   # NO RETRY HAS YET BEEN ATTEMPTED         #
        BEGIN                # DAYFILE ABNORMAL RESPONSE               #
        MAR$NPNAM[0] = NPNAM;          # SET NPU NAME                  #
        TEMP = C<COMCODE,1>CCMNEMONIC; # COMMAND CODE MNEMONIC         #
        MAR$CC[0] = TEMP; 
        TEMP = NS$CHD(NPURC[0]); # GET REASON CODE IN DISPLAY HEX      #
        MAR$RC[0] = TEMP; 
        NS$MSG(MSG$MAR,L$MAR,DM$MAR);  # DISPATCH MESSAGE              #
        END 
  
      NAT$RETRYS[0] = NAT$RETRYS[0] + 1; # INCREMENT RETRY COUNT       #
      IF NAT$RETRYS[0] LQ MAX$RETRYS
      THEN # MAXIMUM RETRY COUNT NOT REACHED                           #
        BEGIN # PROCESS ABNORMAL RESPONSE                              #
        GOTO ANPUDTCASE[COMCODE]; # CASE ON NPU/DT/A                   #
  
AR$DUMP:                     # ABNORMAL DUMP RESPONSE                  #
        TEMP = LNPUDTDR; # DUMP REQUEST TEXT LENGTH                    #
RESENDR: # RESEND REQUEST TO NPU                                       #
        NS$FBH(TEMP,FALSE); # FORMAT APPLICATION BLOCK HEADER          #
        EB[0] = FALSE; # RESET ERROR RESPONSE BIT                      #
        NPURC[0] = 0; # RESET REASON CODE TO ZERO                      #
        NETPUT(ABH$WORD,SMB$BUFFER); # RESEND REQUEST                  #
        GOTO DAREXIT; 
  
AR$LOAD:                     # ABNORMAL LOAD RESPONSE                  #
        ERRCODE = NS$FEC(EC"ERR$ABRESP",0); # ABORT NPU LOAD           #
        GOTO DAREXIT; 
  
AR$START:                    # ABNORMAL START RESPONSE                 #
        TEMP = LNPUDTSR; # START REQUEST TEXT LENGTH                   #
        GOTO RESENDR; # RESEND START REQUEST TO NPU                    #
  
        END 
  
      ELSE # RETRY COUNT EXCEEDED, ABORT CURRENT ACTIVITY              #
        BEGIN 
        NAT$RETRYS[0] = 0; # RESET RETRY COUNT                         #
        ERRCODE = NS$FEC(EC"ERR$RETRYS",0); 
        END 
  
DAREXIT:  
  
      RETURN; 
      END   # NS$DAR #
      TERM
