*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<NWLHEADER> = WLADDR ;
ACBFOUND = FALSE ; # CLEAR THE FLAG #
P<DRHDRWD> = 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<ACB> = ATACBA[IDX] ; # THIS ACB #
IF P<ACB> NQ 0
THEN
BEGIN # NON-ZERO ACB #
IF ACBJNWD[0] EQ JOBID
THEN
BEGIN # MATCH ACB #
ACBADDR = P<ACB> ;
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<FLHEAD> = 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<FLE> = WLADDR + FLSIZE;
FLSCPA[0] = P<FLE>;
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<FLE> = 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<DRHDRWD> = 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<ACNT> = 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<ACNB> = ACNTACNB[I] ;
ACNBRC[0] = RCRC"ANO" ; # RC = 1, APPL NETTING OFF #
HCSTTP(P<ACB>,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<ACB> = ATACBA[ACNTSECAN[I]]; # ACB OF SECONDARY APP #
P<ACNT> = ACBACNT[0]; # ACNT OF SECONDARY APP #
P<ACNB> = ACNTACNB[SECACN-ACNTMINACN[0]+ACNTHSIZE];
P<ACB> = ACBADDR; # ACB ADDR OF NETTED OFF APP #
P<ACNT> = ACBACNT[0]; # RESTORE ACNT ADR FOR NETOFF AP#
IF P<ACNB> 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<DRHDRWD> = WLADDR ; # USE SAME BUFFER FOR NETOFF #
DRBS[0] = LNETOFF + BLKHSIZE + ABHSIZE ;
# APPLICATION BLOCK HEADER #
P<AHEADER> = WLADDR + BLKHSIZE ;
ABHWORD[0] = SMABHW[0] ;
ABHTLC[0] = LNETOFF ;
# SUPERVISOR MESSAGE #
P<SUPMSG> = WLADDR + BLKHSIZE + ABHSIZE ;
P<SMNVF> = P<SUPMSG> ;
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<DRHDRWD> = 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<KALANPTR> = LOC(KDALAN1[0]);
P<KALNAMPTR> = 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<SCPCALL> = 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<FLE> = LOC(SCPFW[0]) ;
OSCCALL(FLE) ;
P<FLHEAD> = WLADDR ;
REASON = FLRC[0] ;
P<DRHDRWD> = P<FLHEAD> ;
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<DRHDRWD> = 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<DRHDRWD> + 1 ;
MRELS(P<DRHDRWD>) ;
GOTO RJMAIN;
END
TERM