*DECK HPNOFF USETEXT NIPDEF USETEXT ACB USETEXT ACNT USETEXT ACNB USETEXT AHEADER USETEXT APPSTAT USETEXT AT USETEXT DRHDR USETEXT DUMPFLG USETEXT FLIST USETEXT KDIS USETEXT MSGIDX USETEXT NWLHEAD USETEXT OVERLAY USETEXT PARAMP USETEXT PARAMS USETEXT PT USETEXT SCPCOM USETEXT SUPABH USETEXT SUPMSG USETEXT DISTAIL PRGM HPNOFF; # PROCESS A *NET OFF* WORK LIST ENTRY # STARTIMS; # *1DC HPNOFF * * 1. PROC NAME AUTHOR DATE * HPNOFF E. GEE 77/07/27 * * 2. FUNCTIONAL DESCRIPTION. * THIS ROUTINE IS RESPONSIBLE FOR NETTING-OFF THE APPLICATION. * * 3. METHOD USED. * CHECK IF ACB EXISTS FOR APPLICATION NETTING OFF * IF ACB EXISTS AND THIS WAS A NEW WORKLIST, THROW AWAY ANY OLD * WORKLIST AND BUFFERS. * IF ACB EXISTS, * ABORT IF APPLICATION NETTING OFF IS NVF. * SET UP SCP FUNCTION LIST TO SEND SCP CONNECTIONS. * FORMAT AND SEND NET/OFF SUPERVISORY MESSAGE TO * NVF IF NONE OF THE NVF INTERFACE FLAGS ARE SET. * PROCESS RETURN CODE FROM SCP CALL. * IF NO ACB EXISTS, ISSUE SCP CALL TO END SHORT-TERM CONNECTION * BETWEEN NAM AND APP. * PROCESS RETURN CODE FROM SCP CALL. * * 4. ENTRY PARAMETERS. * PARAMP1 NWL ADDRESS OR NWL ENTRY ADDRESS * ACBADDR ACB ADDRESS IF PARAMP1 IS NWL ENTRY ADDRESS * WLADDR NWL ENTRY ADDRESS IF PARAMP1 IS NWL ENTRY * ADDRESS * * 5. EXIT PARAMETERS. * FAILADR SET TO ACB ADDRESS IF NIP GETS SCP RETURN * CODE = RCUCPGONE * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * AHEADER APPSTAT DRHDR DUMPFLG * AT FLIST MSGIDX NIPDEF * NWLHEAD OPSIZE PT * OVERLAY PARAMS ACB * SCPCOM ACNT ACNB * KDIS SUPABH SUPMSG * * 7. ROUTINES CALLED. * ABORT ABORT PROGRAM AND DAYFILE MESSAGE * KPCLNUP OVL CLEANUP K-DISPLAY TABLES * HCSTTP HOST CONNECTION STATE TABLE PROCESSOR * OMSG OUTPUT DAYFILE MESSAGE * MRELS RELEASE BUFFER SPACE * OSCCALL SYSTEM-CONTROL-POINT CALL * OSCHAPP SCHEDULE APPLICATION * OSCPSI OVL SWAPIN (NO ACB) APPLICATION * OVLCALL LOAD AND EXECUTE OVERLAY * RDUMP DUMP NIP-S FIELD LENGTH * XTRACE TRACES CALLS * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * NVF FAILURE. * NIP DUMP TAKEN - HPNOFF * * THIS PROGRAM IS A PRIMARY OVERLAY LOADED BY SUBROUTINE OVLCALL. * WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE TO LOCATION RJMAIN * TO RETURN TO THE CALLING PROGRAM. * * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY *CALL OPSIZE * * THIS OVERLAY IS CALLED BY HHIR. * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC ABORT; # ABORT PROGRAM AND DAYFILE MESSAGE # PROC HCSTTP ; PROC BLINK ; PROC MRELS; PROC XTRACE; # TRACE CALLS # PROC OMSG; # DAYFILE MESSAGE # PROC OSCCALL; # CLEAR LONG TERM CONNECTION # PROC OSCHAPP; # SCHEDULE APPLICATION # PROC OVLCALL; PROC RDUMP; PROC XRECALL; # ISSUE EVENT RECALL # LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL # END # INTERNAL VARIABLES # ITEM I ; ITEM ACBFOUND B ; ITEM AN ; ITEM FLNTRY ; ITEM LIMIT ; ITEM IDX; ITEM REASON; # RETURN CODE FROM SYS CONTROL PT CALLS # ITEM SECACN; # APP CON NUM FOR SECONDARY APPLICATION # ITEM WLLWA ; ITEM INDX1; BASED ARRAY KALANPTR [1:1] S(1); # TEMPLATE FOR ALT BUFFER AN # BEGIN ITEM KALNO U(00,00,09); END BASED ARRAY KALNAMPTR[1:1] S(1); BEGIN # ALERT NAME POINTER # ITEM KALNAM C(00,00,07); END #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1 ; XTRACE("HPNOF") ; CONTROL FI; CONTROL OVERLAP NWLHEADER, SCPCALL; # STEP 1 CHECK IF ACB EXIST # WLADDR = NWLADDR; WLLWA = WLADDR + SIZENWL - 1 ; P = WLADDR ; ACBFOUND = FALSE ; # CLEAR THE FLAG # P = WLADDR; CBA = NWLHADDR[0] ; JOBID = NWLJOBID[0] ; # JOB ID WORD IN HEADER # FOR IDX = 1 STEP 1 WHILE IDX LQ ATHAN[0] AND NOT ACBFOUND DO BEGIN # FIND ACB # P = ATACBA[IDX] ; # THIS ACB # IF P NQ 0 THEN BEGIN # NON-ZERO ACB # IF ACBJNWD[0] EQ JOBID THEN BEGIN # MATCH ACB # ACBADDR = P ; ACBFOUND = TRUE ; # FOUND THIS ACB # IF ATNVFN[IDX] # NET/OFF/R SENT TO NVF # OR ATNVFF[IDX] # FAIL/APP/R SENT TO NVF # THEN # NO FURTHER NETOFFS ALLOWED # GOTO NOFEXIT; # RELEASE NWL BUFFER # IF ATASBI[IDX] # SWAPIN IS IN PROGREE # AND ACBSCPCB[0] EQ 0 # REQUEST NOT YET COMPLETED # THEN # WAIT FOR SWAPIN REQUEST COMPLETION # BEGIN XRECALL(LOC(ACBSWAPWR[0])); # ISSUE EVENT RECALL # ACBID[0] = ACBIDVALUE; # ALLOW ACB TO MOVE AGAIN # END ATASBV[IDX] = 0; # CLEAR APPLICATION STATUS FLAGS # END # MATCH ACB # END # NON-ZERO ACB # END # FIND ACB # IF ACBFOUND THEN BEGIN # ACB EXISTS # # NETTING OFF APPLICATION IS NVF, ABORT # AN = ACBAN[0] ; ACBUCPADR[0] = CBA ; # SAVE COMPLETION ADDRESS FOR # # NET/OFF/N PROCESSING # IF AN EQ NVFAN THEN IF NOT SHUTDOWN THEN ABORT(DFMSG10,0) ; ELSE BEGIN ATENTRYW[NVFAN] = 0 ; # ZERO OUT THE AT ENTRY OF # # NVF FOR SHUTDOWN CASE # # TERMINATE NVF'S SCP CONNECTIONS # P = WLADDR; # NWL USED FOR SCP FUNCTION BUF # FLWD0[0] = 0; FLID[0] = NONMOVEABLE; # FUNCTION LIST BUF NONMOVABLE # FLBS[0] = FLSIZE + 3*FLESIZE; # SIZE OF FUNCTION LIST # FLFW[0] = 0; FLFP[0] = 3; # NUMBER OF FUNCTION LIST ENTRYS# FLFC[0] = SFLIST; # SCP FUNCTION CODE # FLJOBID[0] = JOBID; # NVF JOB ID # P = WLADDR + FLSIZE; FLSCPA[0] = P; FLEWD0[0] = 0; FLEFC[0] = SFENDT; # TERMINATE SHORT TERM CON FC # FLEUCPA[0] = CBA; # COMPLETION ADDRESS # FLEWD0[1] = 0; FLEFC[1] = SFENDT; # TERMINATE SHORT TERM CON FC # FLEUCPA[1] = CBA; # COMPLETION ADDRESS # FLEWD0[2] = 0; FLEFC[2] = SFCLTC; # TERMINATE LONG TERM CON FC # P = LOC(FLFW[0]); OSCCALL(FLE); # ISSUE SCP CALL # # PROCESS SCP RETURN CODE # REASON = FLRC[0]; # REASON CODE FROM SCP CALL # IF REASON EQ RCSWAPPEDOUT THEN # NVF WAS SWAPPED OUT # BEGIN PARAMS1 = WLADDR; # ADDRESS OF FUNCTION LIST # PARAMS2 = WLADDR + FLBS[0]; # ADDRESS TO SET UP SWAPIN # PARAMS3 = 0; OVLNAME = OSCPSIP; # NAME OF OVERLAY TO SET UP SWP # OVLCALL; P = WLADDR + FLBS[0] + SWPISIZE; END ELSE # OTHER REASON CODE FROM SCP CAL# BEGIN IF (REASON NQ RCUCPGONE) AND (REASON NQ 0) THEN # BAD RETURN CODE FROM NOS # BEGIN D25M2[0] = "HPNOFFN"; OMSG(DFMSG25,0); # ISSUE DAYFILE MESSAGE # RDUMP; END END END ELSE BEGIN # OTHER APPLICATION NETTED OFF # # CALL STATE TABLE FOR EACH EXISTING CONNECTION # # WITH NETOFF TRIGGER # P = ACBACNT[0] ; # ACNT OF THIS ACB # LIMIT = ACNTHCN[0] - ACNTMINACN[0] + ACNTHSIZE ; FOR I = ACNTHSIZE STEP 1 UNTIL LIMIT DO BEGIN # CALL HC STATE TABLE # IF ACNTACNB[I] NQ 0 THEN BEGIN # ACNB HERE # P = ACNTACNB[I] ; ACNBRC[0] = RCRC"ANO" ; # RC = 1, APPL NETTING OFF # HCSTTP(P,ACNBACN[0],OFFAP,0) ; END ELSE BEGIN IF ACNTSECID[I] NQ 0 THEN BEGIN # CONN. IS ON LOAN # SECACN = ACNTSECACN[I]; # ACN FOR SECONDARY APP # P = ATACBA[ACNTSECAN[I]]; # ACB OF SECONDARY APP # P = ACBACNT[0]; # ACNT OF SECONDARY APP # P = ACNTACNB[SECACN-ACNTMINACN[0]+ACNTHSIZE]; P = ACBADDR; # ACB ADDR OF NETTED OFF APP # P = ACBACNT[0]; # RESTORE ACNT ADR FOR NETOFF AP# IF P NQ 0 THEN # CON STILL EXISTS IN SEC APP # BEGIN ACNBPRAF[0] = TRUE; # SET PRI APP FAILED FLAG # END ELSE # BAD ENTRY IN PRI APP ACNT TABL# BEGIN ABORT("HPNOFF, NIP INTERNAL ERROR",0); END END # CONN. IS ON LOAN # END END # CALL HC STATE TABLE # IF ACBFNTW0[0] NQ 0 THEN BEGIN # FILE LOANNING EXISTED # IF ACBFNTMAS[0] THEN PARAMS1 = TMAB ; # MASTER NETTING OFF # ELSE PARAMS1 = TSOF ; # ELSE IS SLAVE # PARAMS2 = ACBAN[0] ; # AN OF NETTING OFF APPLICATION# PARAMS3 = 0 ; OVLNAME = HFNTSMP ; OVLCALL ; END # FORM NET/OFF AND SEND TO NVF # P = WLADDR ; # USE SAME BUFFER FOR NETOFF # DRBS[0] = LNETOFF + BLKHSIZE + ABHSIZE ; # APPLICATION BLOCK HEADER # P = WLADDR + BLKHSIZE ; ABHWORD[0] = SMABHW[0] ; ABHTLC[0] = LNETOFF ; # SUPERVISOR MESSAGE # P = WLADDR + BLKHSIZE + ABHSIZE ; P = P ; NETWD0[0] = 0 ; # CLEAR THE CONTENT BEFORE # PFCSFC[0] = NETOFFR ; NETAN[0] = AN ; # APPLICATION NUMBER # # CALL TO LINK TO NVF # BLINK(WLADDR,ATACBA[NVFAN]) ; OSCHAPP(ATACBA[NVFAN]) ; ATNVFN[ACBAN[0]] = TRUE ; # SET WAITING FLAG ON # WLADDR = WLADDR + DRBS[0] ; # UPDATE THE WL ADDRESS # P = WLADDR ; # READY TO RELEASE THE REST # IF KDAM[0] # NAM K DISPLAY IN APPLICATION MODE # AND KDAN[0] EQ ACBAN[0] # ASSIGNED TO K DISPLAY # THEN # CLEAN UP NAM K DISPLAY TABLES # BEGIN P = LOC(KDALAN1[0]); P = LOC(KAPALT1[0]); FOR INDX1 = 1 STEP 1 UNTIL KMAXALT DO BEGIN IF KDAN[0] EQ KALNO[INDX1] THEN # CLEAN UP ALERT BUFFER # BEGIN KALNO[INDX1] = 0; KALNAM[INDX1] = " "; END END OVLNAME = KPCLNUPP; OVLCALL; END END # OTHER APPLICATION NETTED OFF # END # ACB EXISTS # ELSE BEGIN # ACB DOES NOT EXIST # P = WLADDR ; # OVERWRITE SCP BUFFER # SCPWD0[0] = 0; SCPID[0] = NAFLIDVALUE ; # FUNCTION BLOCK ID # SCPBS[0] = SCPSIZE; SCPFW[0] = 0 ; SCPUCPA[0] = CBA ; # COMPLETION BIT ADDR # SCPFC[0] = SFENDT ; P = LOC(SCPFW[0]) ; OSCCALL(FLE) ; P = WLADDR ; REASON = FLRC[0] ; P = P ; IF REASON NQ 0 THEN BEGIN # NOT O.K. # IF REASON EQ RCSWAPPEDOUT THEN BEGIN # SWAPPED OUT # PARAMS1 = WLADDR ; PARAMS2 = WLADDR + FLBS[0] ; PARAMS3 = 0 ; OVLNAME = OSCPSIP ; OVLCALL ; P = WLADDR + FLBS[0] + SWPISIZE ; END # SWAPPED OUT # ELSE BEGIN D25M2[0] = "HPNOFF "; OMSG(DFMSG25,0); # "NIP DUMP TAKEN" # RDUMP ; END END #NOT O.K. # END # ACB DOES NOT EXIST # NOFEXIT: # RELEASE UNUSED BUFFER SPACE # BLKBS[0] = WLLWA - P + 1 ; MRELS(P) ; GOTO RJMAIN; END TERM