*DECK HWRAVAL
USETEXT NIPDEF
USETEXT ACB
USETEXT AT
USETEXT SCPCOM
USETEXT STATTAB
USETEXT SYSTIME
PROC HWRAVAL(ACBADR, CHECK); # WRITE DATA AVAIABLE WORD #
*IF DEF,IMS
#
*1DC HWRAVAL
*
* 1. PROC NAME AUTHOR DATE.
* HWRAVAL P.C.TAM 79/02/09
*
* 2. FUNCTIONAL DESCRIPTION.
* WRITE DATA AVAILABLE WORD
*
* 3. METHOD USED.
* IF APP NOT SWAPPED OUT,
* SET UP SCP REQUEST, CALL OSCALL FOR SCP SERVICE.
* IF RETURN CODE NOT ZERO,
* SCHEDULE APP, SET ATU FLAG.
*
* 4. ENTRY PARAMETER.
* ACBADR ADDRESS OF THE ACB OF APP TO WHOM
* NIP HAS TO WRITE DATA AVAILABLE WORD
* CHECK CHECK OR NOT CHECK OF ACB IN SWAPPED
* OUT STATE
*
* 5. EXIT PARAMETER.
* NONE.
*
* 6. COMDECKS CALLED AND SYMPL TEXTS USED.
* NIPDEF ACB SCPCOM PT AT
* STATTAB
*
* 7. ROUTINES CALLED.
* OSCHAPP SCHEDULE APP
* OSCCALL SCP SERVICE REQUEST
* OTIME GET SYSTEM RTIME
* XTRACE TRACE PROCEDURE CALL
*
* 8. DAYFILE MESSAGES AND OTHER IMPORTANT MESSAGES.
* THIS PROCEDURE IS CALLED BY BDELINK,BLINK, AND XSACB.
*
#
*ENDIF
#
INPUT PARAMETERS
#
ITEM
ACBADR, # ACB ADDRESS #
CHECK B; # CHECK OR NO CHECK FLAG #
#
OUTPUT PARAMETERS
#
# NONE #
#
EXTERNAL VARIABLES
#
XREF
BEGIN
PROC OSCCALL; # SCP REQUEST SERVICE #
PROC OSCHAPP; # SCHEDULE APPLICATION #
PROC OTIME; # GET SYSTEM RTIME #
PROC XTRACE; # TRACE PROCEDURE CALLS #
END
#
LOCAL VARIABLES
#
ITEM
RC, # REASON CODE #
I; # TEMPORARY VARIABLE #
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("HWRAV") ;
CONTROL FI ;
CONTROL IFEQ STAT,1;
OTIME(STIME); # GET SYSTEM TIME AT BEGINNING OF PROC #
CONTROL FI;
P<ACB> = ACBADR ; # SET ACB ADDRESS #
I = ACBAN[0]; # APPLICATION NUMBER #
IF NOT ATNVFN[I] # NOT WAITING FOR NET/OFF/N #
AND NOT ATNVFF[I] # NOT WAITING FOR FAIL/APPL/N #
THEN
BEGIN
IF NOT CHECK # NO CHECK FOR ACB SWAPPED OUT STATE #
OR (ATASBI[I] AND # SCP SWAPIN REQUEST HAS BEEN ISSUED AND #
ACBSCPCB[0] NQ 0) # HAS COMPLETED #
OR NOT (ATU[I] OR # NOT HWRAVAL DETECTED SWAPPED OUT APP #
ATASBSO[I]) # NOT APPLICATION SWAPPED OUT #
THEN # OKAY TO USE ACB FOR SF.WRITE SCP FUNCT #
BEGIN # NEED TO MODIFY DATA AVAILABLE WORD #
ACBSWAPWR[0] = ACBIASCP[0]; # SCP FUNCTION REQUEST WORD #
P<SCPCALL> = LOC(ACBSWAPWR[0]);
OSCCALL(SCPCALL);
RC = ACBSCPRC[0]; # REPLY CODE #
IF RC NQ 0
THEN
BEGIN
ATU[I] = TRUE; # UPDATE DATA AVAILABLE WORD #
OSCHAPP(ACBADR);
END
ELSE
BEGIN # SUCCESSFUL UPDATE RC=0 #
IF ATASBW[I] # APPLICATION IN NETWAIT STATE #
THEN
BEGIN # APPLICATION HAS TO BE AT CONTROL POINT #
MSG$AN = I; # STORE AT INDEX IN GLOBAL MSG$AN #
ATAMSG[I] = TRUE; # FLAG MESSAGE FOR APPLICATION #
END
END
END
ELSE
ATU[I] = TRUE; # UPDATE DATA AVAILABLE FLAG #
END
CONTROL IFEQ STAT,1;
OTIME(ETIME); # GET SYSTEM TIME AT END OF PROC #
ST$NDA = ST$NDA + 1; # INCREMENT NUMBER OF TIMES HWRAVAL CALLED#
STTEMP = EMILS[0] - SMILS[0]; # TIME SPENT IN THIS ROUTINE #
ST$TDA = ST$TDA + STTEMP; # TOTAL TIME SPENT IN THIS ROUTINE #
IF ST$LDA LS STTEMP
THEN # FOUND LARGER TIME INTERVAL IN ROUTINE #
BEGIN
ST$LDA = STTEMP; # NEW LARGEST TIME INTERVAL #
END
CONTROL FI;
RETURN; # RETURN TO CALLER #
END
TERM