*DECK NS$HNO
USETEXT NPT$NS
USETEXT HOC$NS
      PROC NS$HNO(REASON);   # CANCEL ALTERNATE LOAD FILE COMMAND      #
  
# TITLE NS$NHO - CANCEL ALTERNATE LOAD FILE COMMAND.                   #
  
      BEGIN    # NS$NHO # 
# 
**    NS$HNO - CANCEL ALTERNATE LOAD FILE COMMAND.
* 
*     J.C. LEE    1981
* 
*     THIS ROUTINE PROCESS THE CANCEL ALTERNATE LOAD FILE COMMAND.
* 
*     PROC NS$HNO(REASON) 
* 
*     ENTRY:  
*       NONE. 
* 
*     EXIT: 
*       REASON = COMMAND ERROR REASON CODE. 
* 
*     METHOD: 
*       SCAN THROUGH THE NPU TABLE, FIND THE NPU. 
*       IF NPU IDLE, RETURN THE FILE, RELEASE DIRECTORY TSB.
*       IF NPU ACTIVE, EXIT WITH REASON SET.
* 
# 
  
      ITEM REASON     U;     # COMMAND ERROR REASON CODE               #
  
      $BEGIN
      XREF
        BEGIN 
        PROC NS$DBG;         # TRACE CALL                              #
        END 
      $END
  
      XREF
        BEGIN 
        FUNC NS$XZFN C(10);  # ZERO-FILLED FILE NAME                   #
        PROC RETERN;         # RETURN FILE                             #
        PROC RETTSB;         # RELEASE TSB                             #
        END 
  
      ITEM I          U;     # LOOP VARIABLE                           #
      ITEM NPTCOUNT   U;     # NPT ENTRY COUNT                         #
  
      ARRAY ALF$FET [0:0] S(5); 
        BEGIN # ALTERNATE LOAD FILE FET                                #
        ITEM FET$LFN    C(00,00,07); # LOGICAL FILE NAME               #
        ITEM FET$FM     B(00,58,01) = [TRUE]; # BINARY FILE MODE       #
        ITEM FET$COMP   B(00,59,01) = [TRUE]; # COMPLETION BIT         #
        ITEM FET$RAN    B(01,12,01) = [TRUE]; # RANDOM FILE            #
        ITEM FET$FIRST  U(01,42,18) = [0];
        ITEM FET$IN     U(02,42,18) = [0];
        ITEM FET$OUT    U(03,42,18) = [0];
        ITEM FET$LIMIT  U(04,42,18) = [0];
        END 
  
CONTROL EJECT;
  
      $BEGIN
      NS$DBG("HNO");         # TRACE CALL                              #
      $END
  
      REASON = 0; 
      NPTCOUNT = NPT$EC[0]; # NPU TABLE ENTRY COUNT                    #
  
      FOR I = 1 STEP 1 UNTIL NPTCOUNT 
      DO # SCAN NPU TABLE FOR ENTRY USING ALT LOAD FILE                #
        BEGIN 
        IF NPT$ALFWD[I] NQ 0
        THEN # ALTERNATE NLF IN USE BY THIS NPU                        #
          BEGIN 
  
          IF NPT$NATTSB[I] EQ 0 
          THEN # NPU IS IDLE                                           #
            BEGIN 
            FET$LFN[0] = NS$XZFN(NPT$ALFPFN[I]); # SET LFN             #
            RETERN(ALF$FET); # RETURN FILE                             #
            RETTSB(NPT$DIRTSB[I]); # RELEASE DIRECTORY TSB             #
            NPT$ALFWD[I] = 0; 
            END 
  
          ELSE # NPU IS ACTIVE, LOAD FILE MAY BE IN USE                #
            REASON = HOPCMDERR"NPUACTIVE"; # CANNOT ACTION COMMAND     #
          END 
  
        END # END FOR LOOP I #
  
      RETURN; 
      END # NS$HNO #
      TERM
