If XCF is checking for status update resumed, the routine checks
a bit that the member turns on when it resumes updating its status
field:
- If the bit is on, the status user routine sets a return code of
SEUPDRES and issues the WTO macro to alert the operator that the member's
status update has resumed.
- If the bit is off, the routine sets a return code of SEUPDMIS
to alert XCF that the member still has not resumed updating its status
field.
***************************************************************
* *
* STATUS USER ROUTINE *
* *
***************************************************************
SEXIT3 CSECT
SEXIT3 AMODE 31
SEXIT3 RMODE ANY
@MAINENT DS 0H
USING *,R15
B @PROLOG
DC AL1(16)
DC C'SE 90006 SEXIT'
DROP R15
***************************************************************
* *
* ENTRY LINKAGE *
* *
***************************************************************
@PROLOG STM R14,R12,12(R13)
LR R12,R15
@PSTART EQU SEXIT3
*
* SET UP BASE REGISTER TO 12
*
USING @PSTART,R12
SLR R15,R15
IC R15,@SIZDATD
SLR R0,R0
ICM R0,7,@SIZDATD+1
STORAGE OBTAIN,LENGTH=(0),SP=(15)
LR R10,R1
USING @DATD,R10
ST R13,4(,R10)
ST R10,8(,R13)
LM R15,R1,16(R13)
LR R13,R10
***************************************************************
* *
* STATUS USER CODE *
* *
***************************************************************
*
* GET ADDRESSABILITY TO THE PARAMETER LIST
*
USING SEPL,R1
*
* IS XCF CHECKING FOR STATUS UPDATE MISSING? IF SO, BRANCH
*
CLI SEPLSTCH,SEUPDMIS
BZ @MISSING
*
* XCF IS CHECKING FOR STATUS UPDATE RESUMED
* GET ADDRESSABILITY TO THE MEMBER DATA, WHICH CONTAINS
* THE ADDRESS OF MDATASTR. MDATASTR CONTAINS THE BYTE
* (RESUMEB) THAT THE MEMBER TURNS ON IF IT RESUMED
* UPDATING ITS STATUS FIELD.
*
@FOUND L R2,SEPLMDAT
USING MDATASTR,R2
CLI RESUMEB,X'01' IS THE RESUME VALID?
BNZ @NOGOOD IF NOT, BRANCH
*
* LOAD INDICATOR FOR STATUS UPDATE RESUMED INTO REGISTER 7. THIS
* WILL BE TRANSFERRED TO REGISTER 15 DURING EXIT LINKAGE.
* THEN CLEAR REGISTER 8 TO INDICATE NO USER DATA BEING PASSED.
* REGISTER 8 GETS TRANSFERRED TO REGISTER 0 DURING EXIT LINKAGE.
*
LA R7,SEUPDRES IF VALID, SET RETURN CODES
SR R8,R8
WTO 'STATUS UPDATE HAS BEEN RESUMED',ROUTCDE=11, X
LINKAGE=BRANCH,MF=(E,WTOLST1)
B @OVER
*
* STATUS UPDATE IS MISSING SO CHECK QUEUE. TO DO SO,
* GET ADDRESSABILITY TO THE MEMBER DATA, WHICH CONTAINS
* THE ADDRESS OF MDATASTR. MDATASTR CONTAINS THE WORK QUEUE
* ADDRESS (WRKQADDR) AND THE ADDRESS OF THE NEXT ITEM OF
* WORK (NXTWRKAD).
*
@MISSING L R2,SEPLMDAT
*
* IF WORK ADDRESS IS ZERO, THE QUEUE IS EMPTY.
*
CLC WRKQADDR(4),ZERO IS THE QUEUE EMPTY?
BE @NOWORK IF YES, BRANCH
*
* LOAD INDICATOR FOR STATUS UPDATE MISSING INTO REGISTER 7
*
LA R7,SEUPDMIS
*
* LOAD USER DATA INTO REGISTER 8
*
L R8,UDATACD
DROP R2
B @OVER
*
* BRANCH HERE WHEN THE QUEUE IS EMPTY
*
*
* LOAD INDICATOR FOR STATUS UPDATE RESUMED INTO REGISTER 7
*
@NOWORK LA R7,SEUPDRES SET RETURN CODE
B @OVER
*
* BRANCH HERE WHEN STATUS UPDATE DID NOT RESUME
*
*
* LOAD INDICATOR FOR STATUS UPDATE MISSING INTO REGISTER 7
*
@NOGOOD LA R7,SEUPDMIS SET RETURN CODE
*
* RELEASE DYNAMIC AREA
*
@OVER LR R1,R10
L R13,4(,R13)
SLR R15,R15
IC R15,@SIZDATD
SLR R0,R0
ICM R0,7,@SIZDATD+1
STORAGE RELEASE,LENGTH=(0),ADDR=(1),SP=(15)
***************************************************************
* *
* EXIT LINKAGE *
* *
***************************************************************
*
* LOAD REGISTER 15 WITH THE RETURN CODE AND REGISTER 0 WITH
* THE USER DATA TO BE PASSED TO THE GROUP USER ROUTINES
*
LR R15,R7
LR R0,R8
L R14,12(R13)
LM R1,R12,24(R13)
BR R14
DS 0H
DS 0H
@PSIZE EQU ((*-SEXIT3+99)/100)*5
DC C'PATCH AREA - SEXIT3 90.006'
PUSH PRINT
PRINT ON,GEN,DATA
@PSPACE DC 25S(*)
ORG @PSPACE
DC ((@PSIZE+1)/2)S(*)
ORG ,
POP PRINT
@DATA DS 0H
@DATD DSECT
DS 0F
SAVEAREA DS 18F
@ENDDATD DS 0X
@DYNSIZE EQU ((@ENDDATD-@DATD+7)/8)*8
SEXIT3 CSECT ,
LTORG
DS 0D
UDATACD DC F'16'
ZERO DC F'0'
WTOLST1 WTO 'STATUS UPDATE HAS BEEN RESUMED',ROUTCDE=11,MF=L
WTOLNTH DC A(*-WTOLST1)
@SIZDATD DS 0A
DC AL1(0)
DC AL3(@DYNSIZE)
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
@ENDDATA EQU *
***************************************************************
* *
* MAPPING OF THE DATA STRUCTURE (MDATASTR) POINTED TO BY *
* MEMDATA (SEPLMDAT FIELD IN PARAMETER LIST) *
* *
* THIS SAME DATA STRUCTURE IS USED BY THE GROUP USER *
* ROUTINE. SOME FIELDS ARE NOT USED BY THE STATUS USER *
* ROUTINE, BUT ARE USED ONLY BY THE GROUP USER ROUTINE. *
* *
* TBLADDR ADDRESS OF TABLE MAINTAINED BY *
* GROUP USER ROUTINE *
* NEXTITEM ADDRESS OF NEXT AVAILABLE SLOT IN *
* TABLE *
* WRKQADDR ADDRESS OF MEMBER'S WORK QUEUE *
* NXTWRKAD ADDRESS OF NEXT AVAILABLE SLOT IN *
* MEMBER'S WORK QUEUE *
* TASKECB ADDRESS OF THE ATTACHED TASK'S ECB *
* (THIS TASK IS ATTACHED BY THE MAIN *
* ROUTINE. THIS FIELD IS USED BY *
* THE GROUP USER ROUTINE.) *
* MAINECB ADDRESS OF ECB USED FOR SYNCHRONIZING *
* (THE MAIN ROUTINE WAITS ON THIS ECB, *
* WHICH THE ATTACHED TASK POSTS WHEN *
* IT COMPLETES ITS WORK.) *
* FUNCTON GROUP USER ROUTINE TURNS THIS SWITCH ON *
* WHEN CALLED FOR THE FIRST TIME FOR A *
* STATUS UPDATE MISSING. *
* RESUMEB MAIN ROUTINE TURNS THIS SWITCH ON *
* WHEN IT RESUMES UPDATING ITS STATUS *
* FIELD. *
* *
***************************************************************
MDATASTR DSECT
TBLADDR DS 1F
NEXTITEM DS 1F
WRKQADDR DS 1F
NXTWRKAD DS 1F
TASKECB DS 1F
MAINECB DS 1F
FUNCTON DS X
RESUMEB DS X
***************************************************************
* *
* MAPPING MACROS *
* *
***************************************************************
IXCYSEPL
END SEXIT3