*DECK HWLP USETEXT NIPDEF USETEXT APPSTAT USETEXT AWLNTRY USETEXT DRHDR USETEXT FREETAB USETEXT NWLHEAD USETEXT NWLNTRY USETEXT OVERLAY USETEXT PARAMP USETEXT PT USETEXT AT USETEXT ACB USETEXT STATTAB PROC HWLP; # PROCESS WORKLIST # STARTIMS; # *1DC HWLP * * 1. PROC NAME AUTHOR DATE * HWLP E. GEE 78/01/25 * * 2. FUNCTIONAL DESCRIPTION. * PROCESS NETWORK WORKLIST * * 3. METHOD USED. * PROCESS WORKLIST ENTRIES UNTIL NONE LEFT OR LAST WORKLIST * FUNCTION NOT COMPLETED * CHECK FOR VALID AIP HEADER WORD * CALL APPROPRIATE ROUTINE TO PROCESS NETWORK WORKLIST ENTRY * FUNCTION * IF ENTIRE WORKLIST PROCESSED, THEN PROCESS AWL (IF ONE TO * PROCESS) AND RELEASE REST OF NWL * * 4. ENTRY PARAMETERS. * ACBADDR ACB ADDRESS * * 5. EXIT PARAMETERS. * ABTAPPF ABORT FLG SET IF AIP SENT US BAD WORKLIST * ENTRY * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * APPSTAT BUFFTAB DRHDR * NIPDEF NWLHEAD NWLNTRY * ACB * STATTAB STATISTICS TABLE * * 7. ROUTINES AND OVERLAYS CALLED. * HPAWL PROCESS AWL * HPGET PROCESS *NETGET* * HPGETMM PROCESS *NETGMM* * HPGETSM PROCESS *NETGSM* * HPPUT PROCESS *NETPUT* * HPWAIT PROCESS *NETWAIT* * HRELWWL RELEASE WHOLE WORKLIST * OTIME GET SYSTEM RTIME * XTRACE RECORD PROCEDURE CALLS * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION. * THIS PROCEDURE IS CALLED BY HHIR,HPFL, AND XSACB. * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC HPAWL; # PROCESS APPLICATION WORKLIST # PROC HPGET; # PROCESS NETGET, NETGETL, NEGETF, NETGTFL# PROC HPGETMM ; # PROCESS GETMM WORKLIST # PROC HPGETSM; # PROCESS NETGETSM # PROC HPPUT; # PROCESS NETPUT, NETPUTF # PROC HPWAIT; # PROCESS NETWAIT # PROC HPXFR ; PROC HPPUTQ ; PROC HRELWWL; # RELEASE WHOLE NWL # PROC MRELS; # RELEASE BUFFER SAPCE # PROC OTIME; # GET SYSTEM RTIME # PROC OVLCALL; # LOAD AND EXECUTE OVERLAY # PROC XTRACE; # TRACE CALL # END # INTERNAL VARIABLES # # NWL OP-CODE JUMP TABLE # SWITCH NWLOPJT ,OP1,OP2,OP3,OP4,OP5,OP6,OP7,OP8,OP9, OP10,OP11,OP12,OP13,OP14,OP15,OP16,OP17,OP18; ITEM TEMP; 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("HWLP ") ; CONTROL FI; # STEP 1 INITIALIZE FUNCTION-COMPLETE FLAG AND SEE IF ANYTHING TO DO # ABTADDR = ACBADDR; DONE = TRUE; P = ACBADDR; WLADDR = ACBWLADR[0]; FOR TEMP=TEMP WHILE DONE # PREVIOUS WORKLIST ENTRY COMPLETED # AND ACBNWLE[0] NQ 0 # MORE NWL ENTRY TO PROCESS # AND HRL NQ 0 # NAM BUFFER LEVEL NOT ZERO # DO BEGIN # THERE IS WORK FOR HWLP TO DO # # STEP 2 CHECK FOR VALID AIP HEADER WORD # P = WLADDR; TEMP = NWLEBS[0]; NEXTWLA = WLADDR + TEMP; IF NEXTWLA GR ACBWLLWA[0] OR TEMP LS LENGTHMIN THEN BEGIN ABTAPPF = XBADWCNE; # SET ABORT-APPLICATION FLAG # DONE = FALSE; END ELSE BEGIN IF NWLOP LS WLOPMIN OR NWLOP GR WLOPMAX THEN BEGIN ABTAPPF = XBADOP; DONE = FALSE; END ELSE BEGIN # STEP 3 PROCESS OP-CODE FUNCTION # # ********** BEGINNING OF CASE STATEMENT ********** # GOTO NWLOPJT[NWLOP[0]]; OP1: # PROCESS *NETPUT* # OP9: # PROCESS *NETPUTF* # CONTROL IFEQ STAT,1; OTIME(STIME); # GET SYSTEM TIME BEFORE PROCESSING PUT # CONTROL FI; HPPUT; CONTROL IFEQ STAT,1; OTIME(ETIME); # GET SYSTEM TIME AFTER PROCESSING PUT # ST$NPU = ST$NPU + 1; # INCREMENT NUMBER OF PUT TYPE CALLS# STTEMP = EMILS[0] - SMILS[0]; # TIME SPENT IN HPPUT # ST$TPU = ST$TPU + STTEMP; # TOTAL TIME SPENT IN HPPUT # IF ST$LPU LS STTEMP THEN # FOUND LARGER TIME INTERVAL IN HPPUT # BEGIN ST$LPU = STTEMP; # NEW LARGEST TIME INTERVAL # END CONTROL FI; GOTO CHECKFC; OP2: # PROCESS *NETGET* # OP3: # PROCESS *NETGETL* # OP8: # PROCESS *NETGETF* # OP10: # PROCESS *NETGTFL* # CONTROL IFEQ STAT,1; OTIME(STIME); # GET SYSTEM TIME BEFORE PROCESSING GET # CONTROL FI; HPGET; CONTROL IFEQ STAT,1; OTIME(ETIME); # GET SYSTEM TIME AFTER PRCESSING GET # ST$NGE = ST$NGE + 1; # INCRE NUMBER OF GET TYPE CALLS # STTEMP = EMILS[0] - SMILS[0]; # TIME SPENT IN HPGET # ST$TGE = ST$TGE + STTEMP; # TOTAL TIME SPENT IN HPGET # IF ST$LGE LS STTEMP THEN # FOUND LARGER TIME INTERVAL IN HPGET # BEGIN ST$LGE = STTEMP; # NEW LARGEST TIME INTERVAL # END CONTROL FI; GOTO CHECKFC; OP4: # PROCESS *NETGETSM* # CONTROL IFEQ STAT,1; OTIME(STIME); # GET SYSTEM TIME BEFORE PROCESSING GETSM # CONTROL FI; HPGETSM; CONTROL IFEQ STAT,1; OTIME(ETIME); # GET SYSTEM TIME AFTER PROCESSING GETSM # ST$NGS = ST$NGS + 1; # INCRE NUMBER OF NETGETSM CALLS # STTEMP = EMILS[0] - SMILS[0]; # TIME SPENT IN HPGETSM # ST$TGS = ST$TGS + STTEMP; # TOTAL TIME SPENT IN HPGETSM # IF ST$LGS LS STTEMP THEN # FOUND LARGER TIME INTERVAL IN HPGETSM # BEGIN ST$LGS = STTEMP; # NEW LARGEST TIME INTERVAL # END CONTROL FI; GOTO CHECKFC; OP5: # PROCESS *NETWAIT* # CONTROL IFEQ STAT,1; OTIME(STIME); # GET SYS TIME BEFORE PROCESSING NETWAIT # CONTROL FI; HPWAIT; CONTROL IFEQ STAT,1; OTIME(ETIME); # GET SYSTEM TIME AFTER PROCESSING NETWAIT# ST$NWA = ST$NWA + 1; # INCRE NUMBER OF NETWAIT CALLS # STTEMP = EMILS[0] - SMILS[0]; # TIME SPENT IN HPWAIT # ST$TWA = ST$TWA + STTEMP; # TATAL TIME SPENT IN HPWAIT # IF ST$LWA LS STTEMP THEN # FOUND LARGER TIME INTERVAL IN HPWAIT # BEGIN ST$LWA = STTEMP; # NEW LARGEST TIME INTERVAL # END CONTROL FI; GOTO CHECKFC; OP6: # NETON NOT ALLOWED HERE # OP7: # NETOFF NOT ALLOWED HERE # OP13: # BAD OPCODE RECEIVED FOR WORKLIST # OP15: OP16: OP17: DONE = FALSE; ABTAPPF = XBADOP; GOTO CHECKFC ; OP11: HPXFR ; GOTO CHECKFC ; OP12: GOTO CHECKFC ; OP14: # PROCESS GETMM WORKLIST # HPGETMM ; GOTO CHECKFC ; OP18: # PROCESS NETPUTQ OPCODE # HPPUTQ(NWLTLW[0],NWLPQN[0]) ; GOTO CHECKFC ; CHECKFC: # ********** END OF CASE STATEMENT ********** # # STEP 4 CHECK IF LAST FUNCTION COMPLETED # P = ACBADDR;# ACB MAY HAVE MOVED # IF DONE THEN # FUNCTION COMPLETED # BEGIN ACBNWLE[0] = ACBNWLE[0] - 1; WLADDR = NEXTWLA; ACBWLADR[0] = NEXTWLA; END END END END IF HRL EQ 0 # NAM REACHED MAX FL # AND DONE # PREVIOUS NWL ENTRY PROCESSED # AND ACBNWLE[0] NQ 0 # MORE NWL ENTRY TO PROCESS # THEN BEGIN # SUSPEND NWL WORKLIST PROCESSING # TEMP = ACBAN[0]; # APPLICATION NUMBER # ATHRL0[TEMP] = TRUE; # SET NWL SUSPENDED AT HRL=0 # END IF ATU[ACBAN[0]] THEN # DATA AVAIL WORD IN AIP NEEDS UPDATING # BEGIN # SUSPEND WORKLIST PROCESSING COMPLETION # DONE = FALSE; # TILL UPDATED # IF ATASBI[ACBAN[0]] THEN # APP SWAPPED OUT BY OS - SWAPIN ISSUED # BEGIN ATASBS[ACBAN[0]] = TRUE; # SET APP SWAPPED OUT BY OS FLAG # END END IF DONE # NWL PROCESSING COMPLETE # AND ACBNWLE[0] EQ 0 THEN BEGIN IF ACBAWLADDR[0] NQ 0 THEN # RETURN AWL/ CLEAR SHORT TERM CONNECTIONS # HPAWL; ELSE # CLEAN UP ACB # BEGIN HRELWWL; END IF (ACBAN[0] NQ 1) AND (ACBSMQ[0] GR MAXSUPMSG) THEN # IF A NON-NVF APP IS NOT PICKING UP QUEUED SUP MSGS # BEGIN ABTAPPF = X2MANYSM; # SET ABORT APPLICATION FLAG # END END RETURN; END TERM