*DECK HHIR USETEXT NIPDEF USETEXT ACB USETEXT APPSTAT USETEXT AT USETEXT DRHDR USETEXT FREETAB USETEXT NWLHEAD USETEXT NWLNTRY USETEXT OVERLAY USETEXT PT USETEXT STATTAB USETEXT SYSCOMD USETEXT SWAPIN PROC HHIR; # HOST INTERFACE ROUTINE # STARTIMS; # *1DC HHIR * * 1. PROC NAME AUTHOR DATE * HHIR E. GEE 78/02/07 * * 2. FUNCTIONAL DESCRIPTION. * THIS ROUTINE IS THE TOP LEVEL HOST-SIDE PROCESSING ROUTINE. ALL * PROCESSING NEEDED TO HANDLE CPU PROGRAM ACCESS TO THE NETWORK * IS INITIATED FROM HERE. * * 3. METHOD USED. * CHECK TO SEE IF THERE IS WORK TO DO. I.E. GET NWL BUFFER OR * PROCESS WORKLIST FROM OPERATING SYSTEM * IF NOTHING TO DO, GO INTO RECALL AND RETURN * GET SECOND NWL BUFFER * UNLESS ALREADY HAVE ONE, SO ONLY TWO WORKLISTS PROCESSED * OR UNLESS IN SHUTDOWN MODE AND THERE IS NO OTHER WORKLIST * SO THAT ONLY ONE WORKLIST IS PROCESSED DURING SHUTDOWN * IF NIP HAS A WORKLIST TO PROCESS, EXECUTE THE FOLLOWING * STEPS: * IF SECOND NWL EXISTS AND NOT IN SHUTDOWN, RESET * RA.SSC TO POINT TO SECOND NWL * SO OPERATING SYSTEM CAN SEND ANOTHER WORKLIST FOR NIP * TO PROCESS WHILE NIP IS PROCESSING FIRST ONE * IF NETOFF WORKLIST, CALL HPNOFF TO PROCESS IT * IF NETON WORKLIST, CALL HPNON TO PROCESS IT * IF NORMAL WORKLIST, VERIFY WORKLIST IS OKAY, SET FIELDS * IN ACB, AND CALL HWLP TO PROCESS THE WORKLIST * IF APPLICATION IS TO BE ABORTED, CALL XABTAPP TO DO IT * IF APPLICATION HAS FAILED, CALL HAPFAIL TO PROCESS IT * GET NEW NWL UNLESS IN SHUTDOWN MODE. * SWITCH NWL PTR WITH SECOND NWL PTR * SO NEXT NWL TO BE PROCESSED IS OLDER ONE * SET UP RA.SSC IF NOT PREVIOUSLY DONE * * 4. ENTRY PARAMETERS. * NWLADDR BUFFER TO HOLD SCP REQUEST * NWLPN PROCESS NUMBER OF APPLICATION AFTER NETON * NWLSIZE * SSCWORD LOCATION OF SUBSYSTEM CALL WORD * * 5. EXIT PARAMETERS. * NWLADDR LOCATION FOR AWL * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * ACB APPSTAT AT * DRHDR NIPDEF NWLHEAD * NWLNTRY OVERLAY PT * STATTAB SYSCOMD * DRHDR MSGIDX NIPDEF * NWLHEAD NWLNTRY OVERLAY PARAMP * PARAMS PT STATTAB SYSCOMD * * 7. ROUTINES AND OVERLAYS CALLED. * HAPFAIL OVL PROCESS AN APPLICATION FAILURE * HPNOFF OVL PROCESS A *NETOFF* WORKLIST ENTRY * HPNON OVL PROCESS A *NETON* WORKLIST ENTRY * HWLP PROCESS WORKLIST * OTIME GET SYSTEM RTIME * OVLCALL LOAD OVERLAY * XABTAPP OVL ABORT THE APPLICATION * XTRACE TRACES CALLS * * 8. DAYFILE MESSAGE. NONE * THIS PROCEDURE IS CALLED BY XEXEC. * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC HWLP; # PROCESS WORKLIST # PROC MGETS; # ALLOCATE EMPTY BUFFER # PROC MRELS ; PROC OSCHAPP; # SCHEDULE APPLICATION # PROC OTIME; # GET SYSTEM RTIME # PROC OVLCALL; # LOAD AND EXECUTE OVERLAY # PROC HGETNWL; # UPDATE RA.SSC WORD # PROC XRECALL; # RECALL # PROC XTRACE; # TRACE CALLS # END # INTERNAL VARIABLES # ITEM AN U; # APPLICATION NUMBER # ITEM NEXTNWL U; # NEXT NWL BUFFER ADDRESS # ITEM HOSTSD B; # HOST SHUTDOWN INDICATOR # CONTROL IFEQ STAT,1; ARRAY STIME P(1); # RTIME BUFFER FOR STARTING TIME # BEGIN ITEM SMILS U(0,24,36); # STARTING TIME IN MILLESECONDS # END ARRAY ETIME P(1); # RTIME BUFFER FOR ENDING TIME # BEGIN ITEM EMILS U(0,24,36); # ENDING TIME IN MILLESECONDS # END ITEM STTEMP; # TEMPORARY STATISTICS VARIABLE # CONTROL FI; #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1; XTRACE("HHIR ") ; CONTROL FI; IF SSCLK[0] THEN # RECEIVED NEW NETWORK WORKLIST FROM APPLICATION # BEGIN # PROCESS INCOMING WORKLIST # CONTROL IFEQ STAT,1; OTIME(STIME); # GET SYSTEM TIME BEFORE PROCESSING WKLST # CONTROL FI; HOSTSD = SHUTDOWN; NWLADDR = SSCAP[0] - BLKHSIZE; # FWA OF NWL # # PRESET ABORT PARAMETERS IN CASE APPLICATION IS TO BE ABORTED # ABTADDR = NWLADDR; # FWA OF BUFFER TO HOLD SF.REGR SCP FUNC # ABTSIZE = SIZENWL; # SIZE OF SF.REGR SCP BUFFER # P = 0; NEXTNWL = NEXTPTR[NWLADDR]; # NEXT FREE BUFFER AVAILABLE # IF NOT HOSTSD THEN # HOST NOT IN LOCAL SHUTDOWN MODE # BEGIN # TWO NWL WORKLISTS MAY BE OUTSTANDING AT ANY ONE TIME # HGETNWL(NEXTNWL); # UPDATE RA.SSC WORD TO PROVIDE NEW NWL # END P = NWLADDR; # FWA OF NWL # # CHECK IF APPLICATION HAS FAILED # IF NWLSTAT[0] NQ 0 THEN # APPLICATION HAS FAILED # FAILADR = NWLADDR; # NETWORK WORKLIST ADDRESS # ELSE BEGIN # CHECK IF APPLICATION IS REQUESTING NETOFF # P = NWLADDR + NWLHSIZE; IF NWLOP[0] EQ WLOPNOFF THEN BEGIN # PROCESS NETOFF # OVLNAME = HPNOFFP; # NAME OF OVERLAY PROGRAM TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END ELSE BEGIN # CHECK IF APPLICATION IS REQUESTING NETON # AN = NWLPN[0]; # APPLICATION NUMBER # IF AN EQ 0 THEN BEGIN # ONLY NETON IS ALLOWED # IF NWLOP[0] EQ WLOPNON THEN BEGIN # PROCESS NETON # OVLNAME = HPNONP; # NAME OF OVERLAY PROGRAM TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END ELSE # ABORT APP CAUSE IT HAS NOT NETTED ON # ABTAPPF = XNOTNETON; # SET ABORT-APPLICATION FLAG # END ELSE # APPLICATION NETTED ON # BEGIN # VALIDATE WORKLIST # IF AN GR ATHAN[0] THEN # APPLICATION NUMBER UNKNOWN # ABTAPPF = XBADPN; # SET ABORT-APPLICATION FLAG # ELSE BEGIN ACBADDR = ATACBA[AN]; # FWA OF APPLICATION-S ACB # P = ACBADDR; IF NWLOP[0] EQ WLOPRSET THEN BEGIN # RESET WORKLIST COMING IN # IF P NQ 0 THEN BEGIN IF ACBWLFWA[0] NQ 0 THEN BEGIN # RELEASE THE WHOLE WL # P = ACBWLFWA[0] ; BLKBS [0] = ACBWLLWA[0] - P + 1 ; MRELS(P) ; ACBNWLWD[0] = 0 ; END # RELEASE THE WHOLE WORKLIST # IF ACBFLIST[0] NQ 0 THEN BEGIN MRELS(ACBFLIST[0]) ; ACBFLIST[0] = 0 ; END END ATASBR[AN] = FALSE; # CLEAR NETWAIT FLAG IF SET# END # RESET WORKLIST # IF P EQ 0 # APPLICATION NOT EXISTS # OR ACBJNWD[0] NQ NWLJOBID[0] # BAD APP NUMBER # OR ATNVFN[AN] # APPLICATION NETTED OFF # THEN # ABORT MISBEHAVED APPLICATION # ABTAPPF = XBADPN; ELSE BEGIN IF ACBWLFWA[0] NQ 0 THEN # NIP IS STILL PROCESSING EARLIER WORKLIST# ABTAPPF = XOSWL; # SO ABORT ILL-BEHAVED APP # ELSE # NO OUTSTANDING WORKLIST EXISTS # BEGIN IF NWLAWLADDR[0] EQ 0 THEN # NO ADDRESS WAS SPECIFIED TO WRITE AWL # ABTAPPF = XNOAWLA; ELSE # VALID WORKLIST FROM APPLICATION # BEGIN IF ATASBI[AN] THEN # SWAPIN PREVIOUSLY ISSUED FOR APP # BEGIN IF ACBSCPCB[0] EQ 0 THEN # SWAPIN NOT COMPLETE YET # BEGIN # WAIT FOR SWAPIN TO COMPLETE # XRECALL(LOC(ACBSCPCB[0])); # ENTER RECALL # END ATASBSO[AN] = FALSE; # CLEAR SWAPPED OUT FLG# ATASBI[AN] = FALSE; # CLEAR SWAP IN FLAG # ACBID[0] = ACBIDVALUE; # RESTORE ACB ID # END ACBUCPADR[0] = NWLHADDR[0]; # UCP COMP BIT ADR # ACBNWLE[0] = NWLNE[0]; # NUMBER OF ENTRIES # ACBWLFWA[0] = NWLADDR; # FWA OF NWL # ACBWLADR[0] = NWLADDR + NWLHSIZE; ACBWLLWA[0] = NWLADDR + SIZENWL - 1; # LWA NWL # ACBAWLADDR[0] = NWLAWLADDR[0]; HWLP; # PROCESS ALL NWL ENTRIES # END END END END END END END # CHECK IF APPLICATION IS TO BE ABORTED # IF ABTAPPF NQ 0 THEN BEGIN # ABORT APPLICATION # OVLNAME = XABTAPPP; # NAME OF OVERLAY PROGRAM TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END # CHECK IF APPLICATION HAS FAILED # IF FAILADR NQ 0 THEN BEGIN # PROCESS APPLICATION FAILURE # OVLNAME = HAPFAILP; # NAME OF OVERLAY PROGRAM TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END IF HOSTSD THEN # NAM IS IN LOCAL SHUTDOWN MODE # BEGIN # ONLY ONE WORKLIST MAY BE OUTSTANDING # HGETNWL(NEXTNWL); # UPDATE RA.SSC TO PROVIDE NEW NWL BUFFER # END CONTROL IFEQ STAT,1; OTIME(ETIME); # GET SYSTEM TIME AFTER PROCESSING WORKLST# STTEMP = EMILS[0] - SMILS[0]; IF STTEMP GR ST$LHI THEN # FOUND LARGER TIME INTERVAL # BEGIN ST$LHI = STTEMP; # LARGEST TIME INTERVAL # END IF STTEMP GR 200 THEN # SPENT MORE THAN .2 SECONDS IN INTERVAL # BEGIN ST$MHI = ST$MHI + 1; # INCREMENT NO OF TIMES GREATER .2 SEC# END ST$THI = ST$THI + STTEMP; # INCREMENT TOTAL TIME PROCESSING # CONTROL FI; END # END NWL WORKLIST PROCESSING # ELSE # NO INCOMING WORKLIST TO PROCESS # BEGIN CONTROL IFEQ STAT,1; # STATISTICS ON # ST$ESB = ST$ESB + 1; # INCR NO OF TIMES WORKLIST FOUND EMPTY # CONTROL FI; END # CHECK FOR NETWORK SHUTDOWN # IF SHUTDOWN AND ATENTRYW[NVFAN] EQ 0 # NVF NETTED OFF # AND SWAPINFP EQ 0 # NO-ACB-SWAPIN-RING NOT EXIST # THEN BEGIN # PROCESS NETWORK TERMINATION # OVLNAME = XENDNAMP; OVLCALL; END RETURN; END TERM