*DECK HAPFAIL USETEXT NIPDEF USETEXT ACB USETEXT ACNB USETEXT AHEADER USETEXT ACNT USETEXT APPSTAT USETEXT AT USETEXT DISTAIL USETEXT DRHDR USETEXT DUMPFLG USETEXT FLIST USETEXT KDIS USETEXT MSGIDX USETEXT NWLHEAD USETEXT NWLNTRY USETEXT OVERLAY USETEXT PARAMS USETEXT PT USETEXT SUPABH USETEXT SUPMSG USETEXT PWL USETEXT SWAPIN PRGM HAPFAIL; # PROCESS A FAILED APPLICATION # STARTIMS; # *1DC HAPFAIL * * 1. PROC NAME AUTHOR DATE * HAPFAIL E. GEE 77/07/27 * * 2. FUNCTIONAL DESCRIPTION. * THIS ROUTINE IS RESPONSIBLE FOR PROCESSING A *FAILED-APP* * STATUS FROM A NWL OR A *RCUCPGONE* RETURN CODE FROM A SCP CALL. * * 3. METHOD USED. * CHECK IF FAILURE OCCURRED WHILE PROCESSING WORKLIST (APP IS * NO LONGER IN SYSTEM) OR OPERATING SYSTEM INFORMED US OF * APPLICATION-FAILED STATUS. * IF NIP RECEIVED APPLICATION-FAILED STATUS, CHECK TO SEE IF * ACB OR (NO ACB) SWAPIN ENTRY EXISTS. IF SO CLEAN UP * APPROPRIATE ENTRIES. * IF ACB EXISTS, CHECK IF IT IS NVF THAT FAILED. IF SO, ABORT. * IF APP STILL HAS CONNECTIONS WITH NETWORK, ISSUE SCP FUNCTION * TO CLEAR ALL CONNECTIONS. * SEND FAIL/APPL SUP MSG TO NVF IF NECESSARY * CLEAN UP WORKLIST * * 4. ENTRY PARAMETERS. * FAILADR ACB ADDRESS OR NWL ADDRESS * * 5. EXIT PARAMETERS. * FAILADR = 0. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * ACB APPSTAT AT DRHDR DUMPFLG * FLIST MSGIDX NIPDEF NWLHEAD * NWLNTRY OPSIZE OVERLAY PARAMS * PT SWAPIN * ACNB AHEADER ACNT KDIS * SUPABH SUPMSG * * 7. ROUTINES CALLED. * ABORT ABORT PROGRAM AND DAYFILE MESSAGES * BLINK LINK MESSAGE ON DATA RING * HCSTTP HOST CONNECTION STATE TABLE PROCESSOR * MGETS ALLOCATE BUFFER * MRELS RELEASE BUFFER SIZE * OMSG ISSUE DAYFILE MESSAGE * OSCHAPP SCHEDULE APPLICATION * OSCCALL SYSTEM-CONTROL-POINT CALL * OVLCALL LOAD OVERLAY * RDUMP DUMP NIP-S FIELD LENGTH * XRECALL ISSUE EVENT RECALL * XSAPPDL OVL DELINK (NO ACB) SWAPIN ENTRY * XTRACE TRACES CALLS * XERRMSG OVL DAYFILE MESSAGE * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION. * NVF FAILURE. * NIP UNABLE TO FIND FAILED APP XXXX . * * 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 AND XSACB. * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC ABORT; # ABORT PROGRAM AND DAYFILE MESSAGES # PROC BLINK ; PROC HCSTTP ; PROC MGETS ; PROC MRELS; # RELEASE BUFFER SPACE # PROC OVLCALL; # LOAD OVERLAY # PROC OMSG; # DAYFILE MESSAGE # PROC OSCCALL; PROC OSCHAPP ; PROC RDUMP; # DUMP NIP-S FIELD LENGTH # PROC XRECALL; # ISSUE EVENT RECALL # PROC XTRACE; # TRACE CALLS # LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL # END # INTERNAL VARIABLES # ITEM BLKADDR ; ITEM I ; ITEM LIMIT ; ITEM FOUND B; # TRUE = FOUND SWAPIN ENTRY FOR FAILED APP# ITEM IDX; ITEM OLDACNT; # ADDR OF ACNT OF FAILED APP # ITEM SECACN; # APP CON NUM FOR SECONDARY APPLICATION # ITEM HWHERE; # INDEX TO UNASSIGNED APP NAME IN ALERT # ITEM HAPNO; ITEM HINDEX; ITEM FAILANAME C(7); ARRAY LOCALFL S(FLSIZE) ; BEGIN ITEM WORD U(0,0,WL) ; END BASED ARRAY HALTNR [1:1] S(1); BEGIN ITEM HALTN C(00,00,07); END SWITCH HHN HM,HA,HB,HC,HD,HHE; #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1 ; XTRACE("HAPFA") ; CONTROL FI; # DETERMINE IF APP FAILED WHILE NIP WAS PROCESSING ITS WORKLIST OR NIP RECEIVED APPLICATION FAILED STATUS FROM CPU MONITOR # P = FAILADR; IF BLKID[0] NQ NWLIDVALUE THEN BEGIN # APPL FAILS WHILE PROCESSING # ACBADDR = FAILADR ; # NWL OR PWL # P = ACBADDR ; END # # ELSE BEGIN # NORMAL FAILURE CASE # P = FAILADR ; # NWL BUFFER # JOBID = NWLJOBID[0] ; # JOB ID WORD # FOUND = FALSE ; # INITIALIZE # ACBADDR = 0 ; # SEARCH FOR ACB # FOR I = 1 STEP 1 WHILE I LQ ATHAN[0] AND NOT FOUND DO BEGIN # SEARCHING # P = ATACBA[I] ; IF ACBJNWD[0] EQ JOBID THEN BEGIN # SAME ID WORD # ACBADDR = P ; FOUND = TRUE ; IF ATASBI[I] # SWAPIN IN PROGRESS # AND ACBSCPCB[0] EQ 0 # WAITING FOR SWAPIN COMPLETION # THEN BEGIN XRECALL(LOC(ACBSWAPWR[0])); # ISSUE EVENT RECALL # ACBID[0] = ACBIDVALUE; END ATASB[I]=FALSE;# CLEAR APPLICATION STATUS BITS # END # SAME ID WORD # END # SEARCHING # IF NOT FOUND OR ATNVFN[ACBAN[0]] # NETOFF IN PROGRESS # THEN BEGIN # ACN NOT FOUND # # LOOK INTO THE SWAP-IN RING # FOR IDX = SWAPINFP WHILE IDX NQ 0 AND IDX NQ LOC(SWAPINFP) DO BEGIN # SEARCH SWAP-IN RING # P = IDX ; IF SWPIJOBID[0] EQ JOBID THEN BEGIN # IN SWAP-IN RING # FOUND = TRUE ; IF SWPICB[0] EQ 0 THEN # WAITING FOR SCP REQUEST COMPLETION # XRECALL(LOC(SWPIFW[0])); # ISSUE EVENT RECALL # IDX = SWPIWR[0] ; IF IDX NQ 0 THEN MRELS(IDX) ; IDX = SWPIFL[0] ; IF IDX NQ 0 THEN MRELS(IDX) ; IDX = SWPINFP[0]; PARAMS1 = P ; # REMOVE ENTRY FOR SWAP IN RING # OVLNAME = XSAPPDLP ; OVLCALL ; MRELS(P) ; # RELEASE SWAP-IN RING ENTRY # END # IN SWAPPING IN RING # ELSE IDX = SWPINFP[0] ; END # SEARCHING # END # ACB NOT FOUND # IF NOT FOUND THEN BEGIN # ACB NOT FOUND IN *AT* AND # CONTROL IFEQ DEBUG,1; PARAMS1 = DFMSG04 ; # IN SWAP-IN RING # PARAMS2 = JOBID ; # ISSUE A DAYFILE MESSAGE # OVLNAME = XERRMSGP ; OVLCALL ; CONTROL FI; P = LOC(LOCALFL) - 1 ; # BLOCK FOR SCP CALL # FLFW[0] = 0 ; FLUCPA[0] = -1 ; FLFC[0] = SFENDT ; FLJOBID[0] = JOBID ; P = LOC(LOCALFL) ; HFCALL = TRUE ; OSCCALL(FLE) ; HFCALL = FALSE ; IF FLRC[0] EQ RCUCPAOOR THEN BEGIN # BAD REASON CODE RETURNED # D25M2[0] = "HAPFAIL" ; OMSG(DFMSG25,0); # NIP DUMP TAKEN # RDUMP ; END # BAD REASON CODE RETURNED # END MRELS(P) ; # RELEASE THE NWL # END # APPL. FAILURE CASE # # IF ACB EXISTS , CALL STATE TABLE PROCESSOR # IF ACBADDR NQ 0 THEN BEGIN # ACB STILL EXISTS # FAILANAME = ACBANAME[0]; # SAVE FAILED APPLICATION NAME # IF ACBAN[0] EQ NVFAN THEN ABORT(DFMSG10,0) ; # NVF NETTING OFF # IF ATNVFA[ACBAN[0]] THEN BEGIN # APPLIACTION DID NOT NETON O.K. # PARAMS1 = ACBAN[0] ; # RELEASE ACB AND NOT SEND APPL/FAIL# OVLNAME = RELACBP ; # TO NVF # OVLCALL ; END # NET/ON/A RECEIVED FOR THIS APPL # ELSE BEGIN # APPLICATION NETTED ON O.K. # IF NOT ATNVFN[ACBAN[0]] AND NOT ATNVFF[ACBAN[0]] THEN # APPLICATION NOT AWAITING NET/OFF/N FROM NVF # BEGIN P = ACBACNT[0] ; # ACNT TABLE # OLDACNT = P; LIMIT = ACNTHCN[0] - ACNTMINACN[0] + ACNTHSIZE ; FOR IDX = ACNTHSIZE STEP 1 UNTIL LIMIT DO BEGIN # CALL HC STATE TABLE # # WITH APP FAILED TRIGGER # IF ACNTACNB[IDX] NQ 0 THEN BEGIN P = ACNTACNB[IDX] ; ACNBRC[0] = RCRC"AF" ; # RC= 2, APPL FAILURE # HCSTTP(ACBADDR,ACNBACN[0],FAILAP,0) ; END ELSE BEGIN # IN-ACTIVE ENTRY # IF ACNTSECID[IDX] NQ 0 # SEC ID NOT ZERO # THEN BEGIN # LOANED CONN. EXIT # SECACN = ACNTSECACN[IDX]; # ACN FOR SECONDARY APP # P = ATACBA[ACNTSECAN[IDX]]; # ACB OF SECONDARY AP# P = ACBACNT[0]; # ACNT OF SECONDARY APP # P = ACNTACNB[SECACN-ACNTMINACN[0]-ACNTHSIZE]; IF P NQ 0 THEN # CON STILL EXISTS IN SEC APP # BEGIN ACNBPRAF[0] = TRUE; # SET PRI APP FAILED FLAG # END P = OLDACNT; # RESTORE ACNT ADR OF FAILED APP# END # LOANED CONN. EXIT # END # IN-ACTIVE ENTRY # END # CALL HC STATE TABLE # IF ACBFNTW0[0] NQ 0 THEN BEGIN # FILE LOANNING EXISTED # IF ACBFNTMAS[0] THEN PARAMS1 = TMAB ; # MASTER HAS FAILED # ELSE PARAMS1 = TSAB ; # ELSE IS SLAVE # PARAMS2 = ACBAN[0] ; # AC OF FAILED APPLICATION# PARAMS3 = 0 ; OVLNAME = HFNTSMP ; OVLCALL ; END # FORMAT APP/FAIL/U SM SEND TO NVF # MGETS(LAPPF + BLKHSIZE + ABHSIZE,BLKADDR,TRUE) ; P = BLKADDR + BLKHSIZE ; ABHWORD[0] = SMABHW[0] ; ABHTLC[0] = LAPPF ; P = BLKADDR + BLKHSIZE + ABHSIZE ; P = P ; FAILAN[0] = ACBAN[0] ; PFCSFC[0] = FAIAPP ; BLINK(BLKADDR,ATACBA[NVFAN]) ; OSCHAPP(ATACBA[NVFAN]) ; ATNVFF[ACBAN[0]] = TRUE; # SET WAITING FOR FAIL/APPL/N # END # SEND APPL/FAIL/U TO NVF # END # APPLICATION NETTED ON O.K. # IF KDAM[0] # NAM K DISPLAY IN APPLICATION MODE # AND KDAN[0] EQ ACBAN[0] # ASSIGNED TO FAILED APPLICATION # THEN # CLEAN UP NAM K DISPLAY TABLES # BEGIN OVLNAME = KPCLNUPP; OVLCALL; END IF NOT KDAM[0] # KDISPLAY IN NAME MODE # THEN BEGIN IF KDNAL[0] GR 0 # SOME APPL IN ALERT # THEN BEGIN # CHECK IF THIS IS THE ONE IN ALERT # HWHERE = 0; P = LOC(KAPALT1[0]); FOR HINDEX = 1 STEP 1 WHILE HWHERE EQ 0 AND HINDEX LQ KMAXALT DO BEGIN IF HALTN[HINDEX] EQ FAILANAME # IF NAME ON ALERT BUFFER # THEN # SAME AS FAILED APPL NAME # BEGIN HWHERE = HINDEX; # MARK THE INDEX # END END # END OF FOR # IF HWHERE NQ 0 # START SHIFT APPL NAMES IN ALERT BUFFER # THEN BEGIN FOR HINDEX = HWHERE STEP 1 UNTIL KMAXALT -1 DO BEGIN HALTN[HINDEX] = HALTN[HINDEX + 1]; END KAPALT5[0] = " "; GOTO HHN[HWHERE]; HM: ; HA: KDALAN1[0] = KDALAN2[0]; HB: KDALAN2[0] = KDALAN3[0]; HC: KDALAN3[0] = KDALAN4[0]; HD: KDALAN4[0] = KDALAN5[0]; HHE: KDALAN5[0] = 0; KDNAL[0] = KDNAL[0] - 1; END # END OF APPL SHIFT # END # END OF SOME KAPPL # END # END OF KDAM # END # END OF NON-ZERO ACB ADDRESS # FAILADR = 0 ; # APPL/FAILURE PROCESSED # GOTO RJMAIN; # RETURN TO CALLING PROGRAM # END TERM