*DECK HPNOFFN 
USETEXT NIPDEF
USETEXT AT
USETEXT ACB 
USETEXT APPSTAT 
USETEXT OVERLAY 
USETEXT PARAMP
USETEXT PARAMS
USETEXT PT
USETEXT DUMPFLG 
USETEXT FLIST 
USETEXT MSGIDX
USETEXT SUPMSG
USETEXT SCPCOM
 PRGM HPNOFFN ; 
STARTIMS; 
 #
*1DC  HPNOFFN 
*     1. PROC NAME              AUTHOR          DATE
*        HPNOFFN                L.T.NGUYEN      82/06/16
* 
*     2. FUNCTIONAL DESCRIPTION:  
*        PROCESS NET/OFF/N AND FAIL/APP/N FROM APPLICATION. 
* 
*     3. METHOD USED: 
*        IF NETTED OFF APPLICATION IS NS OR CS, SEND REG/CP.
*        IF NOT PRU APPLICATION, GO AHEAD RELEASE THE ACB.
* 
*     4. INPUT PARAMS:  
*        PARAMP1 - APPLICATION NUMBER OF NETTED OFF APPLICATION 
* 
*     5. EXIT PARAMS: 
*        NONE.
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED 
*        NIPDEF     AT     ACB
*        OVERLAY     PARAMP     PARAMS
*        PT 
* 
*     7. ROUTINES CALLED
*        NCREGCP         OVL SEND REG/CP
*        RELACB          OVL RELEASE ACB
*        OVLCALL             LOAD AND EXECUTE OVERLAY 
*        XTRACE              TRACE PROCEDURE CALL 
* 
*     8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION 
*        W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY 
*CALL OPSIZE
*        THIS PROGRAM IS CALLED BY HPPUT. 
* 
* 
 #
STOPIMS;
  
# 
      XREF
# 
      XREF LABEL RJMAIN ; 
      XREF PROC ABORT ; 
      XREF PROC MGETS ; 
      XREF PROC MRELS ; 
      XREF PROC OSCCALL ; 
      XREF PROC OMSG ;
      XREF PROC RDUMP ; 
  
      XREF PROC OVLCALL ; 
      XREF PROC XTRACE ;
  
      ITEM AN ; 
      ITEM FLOFFAD I ;             # ADDRESS OF FLHEAD FOR NETOFFN CASE#
      ARRAY LOCALFL S(FLSIZE) ; 
        BEGIN 
        ITEM FLWORD U(0,0,60) ; 
        END 
      ITEM REASON U ; 
      ITEM FLNTRY U ; 
  
      BEGIN    # HPNOFFN  # 
      P<SUPMSG> = WLADDR + AIPHSIZE + ABHSIZE ; 
  
      CONTROL IFEQ DEBUG,1; 
        IF PFCSFC[0] EQ NETOFFN 
        THEN
          XTRACE("NOFFN") ; 
        ELSE
          XTRACE("FAILN") ; 
      CONTROL FI; 
  
      P<SMNVF> = P<SUPMSG> ;
      AN = NETAN ;                       # APPLICATION NUMBER          #
  
      P<AT> = PTAT[0] ; 
      P<ACB> = ATACBA[AN]    ;         # ACB OF NETOFFED APPL.         #
      IF PFCSFC[0] EQ NETOFFN 
      THEN
        BEGIN                      # NET OFF CASE                      #
  
        # CALLING SCP TO DISCONNECT SHORT AND LONG TERM CONNECTIONS    #
  
        IF ATNVFR[AN] 
        THEN
          FLNTRY = 2 ;             # WAITING FOR NET/ON/N              #
        ELSE
          FLNTRY = 3 ;             # APPLICATION NETTED ON O.K.        #
  
        MGETS(FLSIZE+SWPISIZE+FLNTRY*FLESIZE,FLOFFAD,TRUE) ;
  
        P<FLHEAD> = FLOFFAD ; 
        FLID[0] = NONMOVEABLE ;    # MAKE FUNCTION WORKLIST NON-MOVE   #
        FLAN[0] = AN ;                 # APPLICATION NUMBER            #
        FLFW[0] = 0 ; 
        FLFP[0] = FLNTRY ;
        FLFC[0] = SFLIST ;             # FUNCTION CODE                 #
        FLJOBID[0] = ACBJNWD[0] ; 
        P<FLE> = FLOFFAD + FLSIZE ; 
        FLSCPA[0] = P<FLE> ;
        FLEWD0[0] = 0 ; 
        FLEFC[0] = SFENDT ; 
        FLEUCPA[0] = ACBUCPADR[0] + 2;   # COMPLETION ADDRESS          #
        FLEWD0[1] = 0 ; 
        FLEFC[1] = SFENDT ; 
        FLEUCPA[1] = ACBUCPADR[0] ;      # COMPLETION ADDRESS          #
        FLEWD0[2] = 0 ; 
        FLEFC[2] = SFCLTC ; 
        P<FLE> = LOC(FLFW[0]) ; 
        OSCCALL(FLE) ;
        P<FLHEAD> = FLOFFAD ; 
        END                        # NET/OFF/N CASE                    #
      ELSE
        BEGIN                      # APPL/FAIL/N CASE                  #
        P<FLHEAD> = LOC(LOCALFL) - 1 ; # BLOCK FOR SCP CALL            #
        FLFW[0] = 0 ; 
        FLUCPA[0] = -1 ;
        FLFC[0] = SFENDT ;
        FLJOBID[0] = ACBJNWD[0] ; 
        P<FLE> = LOC(LOCALFL) ; 
        HFCALL = TRUE ; 
        OSCCALL(FLE) ;
        HFCALL = FALSE ;
  
        END                        # APPL/FAIL/N CASE                  #
  
  
# 
      PROCESS RETURNED REASON CODE
# 
      REASON = FLRC[0] ;
  
      IF PFCSFC[0] EQ NETOFFN 
      THEN
        BEGIN                          # NETTING OFF CASE              #
        IF REASON EQ RCSWAPPEDOUT 
        THEN
          BEGIN                      # SWAPPED OUT   DURING NETOFF     #
  
          PARAMS1 = FLOFFAD  ;
          FLBS[0] = FLBS[0] - SWPISIZE ;  # RESET SCP BUFFER SIZE,THE  #
                                         # REST IS FOR SWIPIN ENTRY    #
          PARAMS2 = FLOFFAD + FLBS[0] ; 
          PARAMS3 = 0 ; 
          OVLNAME = OSCPSIP ; 
          OVLCALL ; 
                                       # GO AND RELEASE ACB IF CAN     #
  
          END                        # SWAPPED OUT                     #
        ELSE
          BEGIN                      # OTHER THAN SWAPPED OUT RC       #
  
          MRELS(FLOFFAD) ;               # RELEASE THIS FL BUFFER      #
  
          IF REASON EQ RCUCPGONE
          THEN
            BEGIN 
            FAILADR = P<ACB> ;
            GOTO RJMAIN ; 
            END 
          ELSE
            BEGIN                     # BAD REASON CODE                #
            IF REASON NQ 0
            THEN
              BEGIN 
              D25M2[0] = "HPNOFFN" ;
              OMSG(DFMSG25,0) ; 
              RDUMP ; 
              END 
            END 
          END                        #    OTHER THAN SWAPPED OUT RC    #
        END                          # NETTING OFF CASE                #
  
  
      ELSE
        BEGIN                          # HAPFAIL CASE                  #
        IF REASON EQ RCUCPAOOR
        THEN
          BEGIN                      # BAD REASON CODE FROM OS         #
          D25M2[0] = "HPFAILN"; 
          OMSG(DFMSG25,0);  # "NIP DUMP TAKEN"                         #
          RDUMP ; 
          END                        # BAD REASON CODE FROM OS         #
  
        END                            # HAPFAIL CASE                  #
  
      IF AN EQ PROCAN[NSORD]
      OR AN EQ PROCAN[CSORD]
      THEN
        BEGIN                  # CS OR NS WENT AWAY                    #
  
        IF AN EQ PROCAN[NSORD]
        THEN
          PROCAN[NSORD] = 0;
        IF AN EQ PROCAN[CSORD]
        THEN
          PROCAN[CSORD] = 0;
  
        OVLNAME = NCREGCPP ;                # SEND REG/CP TO ALL       #
        PARAMS1 = 0 ; 
        PARAMS2 = 0 ; 
        OVLCALL ; 
  
        END                    # CS OR NS WENT AWAY                    #
  
      IF ACBNPRU[0] EQ 0
      THEN
        BEGIN                          # NO PRU                        #
        OVLNAME = RELACBP ;            # RELEASE ACB AND ACNT          #
        PARAMS1 =   AN  ; 
        OVLCALL ; 
        END 
      ELSE
        ACBWOFF[0] = TRUE ;            # TURN ON WORK LIST OFF FLAG    #
  
      GOTO RJMAIN ; 
  
      END   # HPNOFFN  #
  
      TERM
  
