*DECK HPWAIT USETEXT NIPDEF USETEXT ACB USETEXT AT USETEXT APPSTAT USETEXT FLIST USETEXT NWLNTRY USETEXT PT USETEXT SYSTIME PROC HPWAIT; # PROCESS A *NET WAIT* # STARTIMS; # *1DC HPWAIT * * 1. PROC NAME AUTHOR DATE * HPWAIT P. C. TAM 78/02/15 * * 2. FUNCTIONAL DESCRIPTION. * THIS ROUTINE IS RESPONSIBLE FOR PROCESSING A *NET WAIT* WORK * LIST ENTRY. * * 3. METHOD USED. * IF NOT A FORCED NETWAIT AND DATA IS AVAILABLE,THEN UPDATE * WORKLIST POINTERS AND RETURN * COMPUTE WAIT TIME * SWAPOUT IF WAIT TIME IS GREATER THAN NTINE * * 4. ENTRY CONDITIONS. * ACBADDR ACB ADDRESS * WLADDR WORKLIST ADDRESS * * 5. EXIT CONDITIONS * DONE FALSE * FAILADDR ACBADDR IF SWAPOUT RESPONSE IS RCUCPGONE * ATASBF TRUE, FOR A FORCED NETWAIT * ATASBW TRUE, FOR NETWAIT WITHOUT SWAPOUT * ATASBR TRUE, FOR FORCED NETWAIT GR NTIME,DEFAULT=2 * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * ACB AT APPSTAT DUMPFLG FLIST * NIPDEF CONSTANT DEFINITIONS * NWLNTRY NWL ENTRY TEMPLATE * PT POINTER TABLE * SYSTIME SYSTEM TIME TABLE * * 7. ROUTINES CALLED. * MGETS ALLOCATE EMPTY BUFFER * MRELS RELEASE BUFFER SPACE * OSCCALL ISSUE SCP FUNCTION * RDUMP DUMP NIP-S FIELD LENGTH * XTRACE TRACES CALLS * * 8. DAYFILE MESSAGES. NONE * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC HRELWWL; # RELEASE NETWORK WORKLIST BUFFER # PROC OSCCALL; # ISSUE SYSTEM CONTROL POINT REQUEST # PROC XTRACE; # TRACE CALL # END # LOCAL VARIABLES # ITEM APPNUM; # APPLICATION NUMBER # ARRAY FL$BUF S(3); BEGIN ITEM FL$WORD U(00,00,60); END CONTROL EJECT; BEGIN # HPWAIT # CONTROL IFEQ DEBUG,1; XTRACE("HWAIT"); CONTROL FI; P = ACBADDR; P = WLADDR; APPNUM = ACBAN[0]; # APPLICATION NUMBER # IF NOT NWLFLAG AND ( (ACBSMQ[0] NQ 0) # ASYNC SUP MSGS QUEUED # OR ( (ACBPDATA[0]) # DELIVERABLE DATA QUEUED # AND (NWLWTDEL[0]) ) # SWAPOUT IF NO DELIVERABLE DATA# OR ( (ACBBLKSQ[0] NQ 0) # DATA MSGS QUEUED # AND (NOT NWLWTDEL[0] ) ) ) # IGNORE DELIVERABLE DATA FLAG # THEN # NOT FORCED NETWAIT AND MESSAGE(S) QUEUED # DONE = TRUE; # DO NOT HONOR NETWAIT REQUEST # ELSE #FORCED NETWAIT REQUEST OR NO MESSAGE QUEUED FOR APP # BEGIN IF NWLTIME LQ 1 THEN # NETWAIT TIME MUST BE ONE SECOND OR MORE # BEGIN NWLTIME = 1; NWLFLAG = TRUE; # SET FORCED NETWAIT MODE # END ACBNTL[0] = RTSECS + NWLTIME; # SET NETWAIT TIMER IN ACB # ATASBF[APPNUM] = NWLFLAG; # SET FORCED NETWAIT MODE # IF NWLTIME GR NTIME THEN # SWAP OUT APPLICATION # BEGIN ATASBW[APPNUM] = FALSE; P = LOC(FL$BUF); # FWA OF SCP REQUEST BLOCK # FLJOBID[0] = ACBJNWD[0]; # SET JOB ID # P = LOC(FLFW[0]); FLFC[0] = SFSWPO; # SET SCP FUNCTION CODE # OSCCALL(FLE); # ISSUE SCP SWAPOUT REQUEST # IF FLRC[0] NQ 0 AND FLRC[0] NQ RCSWAPPEDOUT THEN BEGIN IF FLRC[0] EQ RCUCPGONE OR FLRC[0] EQ RCSTCBAD THEN BEGIN FAILADR = ACBADDR; GOTO EXIT; END END ATASBR[APPNUM] = TRUE; # SET APPLICATION ROLLED OUT FLAG # END ELSE # NO SWAP OUT ISSUED ON APPLICATION, SET WAIT FLAG # ATASBW[APPNUM] = TRUE; DONE = FALSE; # DISABLE FURTHER WORKLIST ENTRY PROCESSING # ACBNWLE[0] = ACBNWLE[0] - 1; # DECREMENT WORKLIST ENTRY COUNT # IF ACBNWLE[0] EQ 0 THEN # ALL WORKLIST ENTRY(S) PROCESSED # HRELWWL; # RELEASE WORKLIST BUFFER # ELSE # STILL KORE WORKLIST ENTRY TO PROCESS # ACBWLADR[0] = NEXTWLA; END EXIT: RETURN; END # HPWAIT # TERM