For SYSTEM 2000 Version: 12.0
Problem Status: ZD -- ZAP DISTRIBUTED
Description of Problem:
IN RELEASES OF CICS AFTER 3.1, THE AUTOMATIC STOP S2K PROCESSING NO LONGER WORKS FOR PLEX USERS.
Note: Please send email to s2k@sas.com telling us which problem fixes you have downloaded so we can keep track of the fixes at your site in case questions or problems arise.
Top of Zap Deck:
* IBM R12.0 BUG 4707 MVS
./ CHANGE NAME=PLXFRMT
* *18* 12MAY93 GOH B4707 FOR CICS 3.2 AND 3.3 FIX 'STOP S2K' *18* 00010980
BE INIT0165 YES. BYPASS LOGIC *18* 00127000
CLI 13(R1),X'00' EVER DONE ? *18* 00127010
BNE INIT0165 YES. BYPASS LOGIC *18* 00127020
* START TRANSACTON PLXS FOR THE PURPOSE OF ENABLING THE *18* 00130000
* AUTOMATIC 'STOP S2K' PROCESSING FOR PLEX USERS. *18* 00131000
*18* CHANGE S2KX TO PLXS IN NEXT LINE 00133000
EXEC CICS START TRANSID('PLXS') 00134000
B INIT0165 CONTINUE *18* 00134010
MVC URBTASK,EIBTASKN SET TASK NUMBER *18* 00255010
MVC URBTASK,EIBTASKN SET TASK NUMBER *18* 00264010
CLI URBECB,URBTRMU WAS USER CANCELLED BY S2K *18* 00445010
BE FRMT9030 YES. FLUSH REQUEST *18* 00445020
BZ FRMT9150 YES. CONTINUE *18* 00918000
* *18* CHANGE DATASET TO FILE IN SET COMMANDS 01390990
EXEC CICS SET FILE(S2KCOM) CLOSED WAIT 01391000
EXEC CICS SET FILE(S2KCOM) OPEN 01392000
CLI RTRYSW,X'01' IN RETRY MODE ? *18* 01450010
BE ADR$0400 YES. DON'T RESET SWITCH *18* 01450020
ADR$0400 EQU * *18* 01451010
MVI READSW,X'FF' YES. TURN TO NORMAL *18* 01482010
./ CHANGE NAME=PLXINIT
* *18* 12MAY93 GOH B4707 CICS 3.2 'STOP S2K' PROCESS CHANGES *18* 00029098
BE INITTPLX YES. CONTINUE *18* 00085000
INIT0012 EQU * *18* 00091010
BE INIT0045 YES. *18* 00121010
CLC 0(3,R1),CSHU SHUTDOWN OPTION ? *18* 00121020
MVI PLXTALL,2 SET SHUTDOWN FLAG *18* 00122010
B INIT0012 FINISH UP *18* 00122020
CLC EIBTRNID,CTALL TERMINATE ALL ? *18* 00123010
BE INIT0010 YES. FINISH UP *18* 00123020
CLI PLXTALL,0 TERM ALL SET ? *18* 00198000
BNE INIT0140 YES. CONTINUE *18* 00199000
B INIT0150 BYPASS START LOGIC HERE *18* 00216010
CSHU DC CL3'SHU' *18* 00281010
./ CHANGE NAME=PLXTERM
* *17* 12MAY93 GOH B4707 CICS 3.2 'STOP S2K' PROCESS CHANGES 00018980
TERMCAP DS F *17* 00041010
SR R10,R10 CLEAR COMMAREA VECTOR *17* 00050010
ST R10,TERMCAP SAVE VALUE *17* 00057010
CLI PLXTALL,2 TERMINATE SYSTEM ? *17* 00067010
BE TERM0060 YES. DO IT *17* 00067020
L R15,TERMCAP ADDR COMMON AREA *17* 00085010
CLC 0(4,R15),CATDX FROM AUTO INST DELETE ? *17* 00085020
BNE TERM0052 NO. CONTINUE *17* 00085030
OI URBFLAG1,URBSTOP TURN ON STOP S2K *17* 00085040
TERM0052 EQU * *17* 00085050
TERM0060 EQU * *17* 00094020
L R14,PLXCUSE ADDRESS USER MODULE *17* 00094030
MVC S2KCSHD-DS2KCUSE(4,R14),=F'-1' SET SHUTDOWN *17* 00094040
LA R2,TERMMSG4 ADDRESS MESSAGE *17* 00094050
B TERM9930 RETURN TO CALLER *17* 00094060
CLI PLXTALL,0 TERM ALL ON ? *17* 00294000
BNE TERM9950 YES. WORK IS DONE *17* 00295000
CATDX DC CL4'ATDX' *17* 00339010
./ ADD NAME=PLXSTOP
./ NUMBER NEW1=1000,INCR=1000
**********************************************************************
* *
* PLXSTOP - STOP S2K LOGIC FOR PROCEDURAL LANGUAGE USERS *
* *
* FUNCTION - *
* *
* THIS ROUTINE WILL PROCESS THE STOP S2K FOR A GIVEN PLEX *
* USER OR USERS. *
* *
* INPUT - *
* *
* PLXCOMM - PLEX COMMON BLOCK *
* *
* REGISTER USAGE - *
* *
* 10 - PLEX COMMON AREA *
* *
**********************************************************************
* *00* 09JUN93 GOH B4707 ORIGINAL MODULE FOR NEW STOP S2K PROCESSING *
**********************************************************************
DFHEISTG
R14SAV1 DS F
TRMCOM DS F
STOPRC DS F
STOPFCI DS F
STOPTRN DS CL4
EJECT
USING PLXCOMM,R10
USING DURB,R8
USING DS2KCUSE,R7
PLXSTOP CSECT
B STOP0001
DC CL8'PLXSTOP'
STOP0001 EQU *
XC TRMCOM,TRMCOM CLEAR DUMMY COMMON AREA
EXEC CICS LINK PROGRAM('PLXINIT') COMMAREA(TRMCOM) LENGTH(4)
L R10,TRMCOM GET ADDRESS OF COMMON AREA
LTR R10,R10 OKAY ?
BZ STOP9950 NO. JUST RETURN
STOP0003 EQU *
MVI PLXTFLG,X'00' CLEAR PROCESS FLAG
L R7,PLXCUSE ADDRESS USER MODULE
L R9,S2KPLST ADDR STOP PARMS
L R5,STPMTRN-DSTOPPRM(R9) ADDR TRAN TABLE
EXEC CICS ASSIGN FCI(STOPFCI)
CLI STOPFCI,X'01' TERMINAL ORIENTED ?
BE STOP0004 YES. CHECK IT OUT
MVI 13(R9),X'FF' SET IT AS STARTED
B STOP0070 CONTINUE
STOP0004 EQU *
*
* THE USER HAS ISSUED A REQUEST FROM A TERMINAL TO START
* THE PLXSTOP PROGRAM. WE WILL DO THAT WITH A REQUEST TO
* START THE PLXS TRASACTION.
*
XC S2KCSHD,S2KCSHD CLEAR SHUTDOWN FLAG
EXEC CICS START TRANSID('PLXS')
MVI 13(R9),X'FF' YES. SET AS STARTED
EXEC CICS SEND FROM(STOPMSG1) LENGTH(50) ERASE
B STOP9960 RETURN TO CICS
*********************************************************************
* **
* PROCESS STOP S2K FOR ALL INACTIVE TASKS THAT HAVE URBS ASSIGNED **
* **
*********************************************************************
STOP0070 EQU *
CLC S2KCSHD,=F'-1' SHUTDOWN SET ?
BE STOP9950 YES. WRAPUP
L R8,S2KPLXU ADDRESS PLEX URBS
*
* REGISTER 8 POINTS TO THE FIRST PLEX URB (FROM PARM LIST)
*
STOP0072 EQU *
TM URBFLAG2,X'80' PSUEDO CONVERSATIONAL USER ?
BO STOP0074 YES. BY PASS THIS URB
OC URBUSER,URBUSER URB IN USE ?
BZ STOP0074 NO. CHECK NEXT ONE
*
* URB IN USE, SHOULD HAVE TASK NUMBER ASSOCIATED WITH IT.
* VERIFY THAT TASK IS STILL ACTIVE. IF NOT, STOP S2K USER.
*
EXEC CICS INQUIRE TASK(URBTASK) TRANSACTION(STOPTRN) RESP(STOPRC)
CLC STOPRC,=F'0' OKAY ?
BNE STOP0080 NO. HANDLE URB
STOP0074 EQU *
TM URBFLAG1,URBLAST LAST URB ?
BO STOP9000 YES. FINISH UP
AH R8,URBLEN NEXT URB
B STOP0072 CHECK IT
STOP0080 EQU *
*
* CHECK TRAN CODE FOR ONE THAT DOESN'T GET STOP ISSUED FOR IT.
* R5 POINTS TO TRAN CODE LIST.
*
LA R15,ACCTPGM ADDR TRAN CODE IN URB
LTR R6,R5 ADDRESS TRANSACTION TABLE
BZ STOP0090 NO TRAN TABLE. PROCESS URB
STOP0085 EQU *
CLC 2(4,R6),0(R15) MATCH ?
BE STOP0074 YES. BYPASS PROCESSING
CLI 0(R6),X'FF' NO. END OF TABLE ?
BE STOP0090 YES. PROCESS THE URB
LA R6,6(R6) NEXT ENTRY IN TRAN TABLE
B STOP0085 CHECK IT
STOP0090 EQU *
*
* FOR THE USER THAT HAS TRANSACTIONS THAT ARE NOT MARKED AS
* PSUEDO-CONVERSATIONAL BUT RUN IN THAT MODE, THE FOLLOWING
* BRANCH AROUND THE CHECK FOR NEXT TRANS ID SHOULD BE TAKEN
* OUT SO THAT THE LOGIC WILL FALL THROUGH THE CHECK FOR NEXT
* TRANS ID AND NOT CLEAN UP ANY USER THAT HAS IT SET.
*
B STOP0095 BYPASS NEXT TRAN ID CHECK
*
* CHECK IS NEXT TRANSACTION ID IS SET IN TERMINAL DEFINITION
* AND IF SO BYPASS STOP S2K LOGIC.
*
EXEC CICS INQUIRE TERMINAL(URBUSER) NEXTTRANSID(STOPTRN)
CLC STOPTRN,=CL4' ' ALL BLANK ?
BNE STOP0074 NO. MUST BE SET, BYPASS STOP
STOP0095 EQU *
MVC PLXUID,URBUSER SET USER ID
ST R8,PLXURB SET URB ADDRESS
OI URBFLAG1,URBERR+URBSTOP SET ERROR TASK AND NO STOP
BAL R14,STOP0100 PROCESS AN URB
B STOP0074 CONTINUE
EJECT
***********************************************************************
* *
* PROCEDURAL LANGUAGE URB HANDLING FOLLOWS. *
* *
***********************************************************************
*
STOP0100 EQU *
MVI PLXTFLG,X'01' A USER STOPPED
ST R14,R14SAV1 SAVE R14
NI URBFLAG1,X'FF'-URBSTOP RESET URBSTOP FLAG
MVI PLXTFLG,X'02' SET FOR NO DISPLAY
XC DUMCOM(120),DUMCOM ZERO COMMBLOCK
LA R1,DUMCOM UNIVERSAL DUMMY C B
ST R1,AS2KDM SET IN PARMS AS S2KDUM
ST R1,ACOMBK FILL PARM LIST
ST R1,ASCHEM
ST R1,ALIST
MVC DUMCOM,=F'92' SIMULATE STOP S2K COMMAND
MVI URBOPCOD,#URBONOR SUBMIT
B STOP0110 GO ON
*
STOP0105 EQU *
MVI URBOPCOD,X'00' INDICATE CLEAR OPERATION
STOP0110 DS 0H
LA R0,SVCPOSTC R0 <- POST SVC OP CODE
*
** ISSUE SVC
*
ST R0,PLXSVCC SET FUNCTION CODE
XC URBECB,URBECB CLEAR ECB
EXEC CICS LINK PROGRAM('S2KADRC') COMMAREA(PLXCOMM) LENGTH(500)
L R0,PLXRTCD SET RETURN CODE
*
LTR R0,R0 SUCCESSFUL RETURN CODE ?
BNZ STOP0150 NO ->TRY TO CLEAR SVC SLOT
*
** WAIT FOR RESPONSE FROM SYSTEM 2000.
*
LA R4,URBECB
TM URBTYPE2,#URBXMS IS THIS XMS?
BO STOP0132 YES...WAIT ON THIS URB
TM URBTYPE,#URBMVS IS THIS MVS?
BZ STOP0130 NO.
L R4,URBDUP WAIT ON URB IN CSA
STOP0130 EQU *
OI URBMUFLG-URBECB(R4),#URBWAIT TELL MU NO POST YET
STOP0132 EQU *
EXEC CICS WAIT EVENT ECADDR(R4)
TM URBTYPE2,#URBXMS IS THIS XMS?
BO STOP0140 YES..CHECK STATUS
TM URBTYPE,#URBMVS IS THIS MVS?
BZ STOP0140 NO...CHECK STATUS
L R15,URBDUP -> URB IN CSA
L R14,0(,R15) GET POST CODE FROM CSA
ST R14,URBECB MOVE TO INTERFACE URB
MVI 0(R15),X'00' CLEAR HIGH ORDER BYTE
NI URBMUFLG-URBECB(R15),X'FF'-#URBWAIT TELL MU POSTED
STOP0140 EQU *
*
** CHECK FOR POSSIBLE OUTPUT RESULTING FROM STOP S2K
*
CLI STATUS,#URBSWM
BL STOP0150 NO OUTPUT...DISCONNECT
CLI STATUS,#URBSWR
BH STOP0150 NO OUTPUT...DISCONNECT
MVI URBOPCOD,#URBOCIO LINE OF OUTPUT WRITTEN
B STOP0110 GO TO CHECK FOR MORE
STOP0150 EQU * DISCONNECT THE USER
*
* FREE LINK STORAGE
*
LA R4,10 LOOP CONTROL
LA R5,PILINKAR ADDRESS OF LINK BLOCK
USING PILINK,R5
STOP0160 EQU *
L R2,LNKRI ADDR LINK STORAGE
LTR R2,R2 VALID ?
BZ STOP0170 NO. FINISH FREE URB
XC LNKRI,LNKRI CLEAR POINTER
LA R5,LNKLNGTH(R5) NEXT ONE
BCT R4,STOP0160 DO IT
STOP0170 EQU *
*
* FREE URB
*
XC URBECB,URBECB CLEAR ECB
XC URBDUP,URBDUP DUPLICATE POINTER
XC URBECHO(URBUADDR-URBECHO),URBECHO REST OF URB
XC URBTCB(URBOPCOD-URBTCB),URBTCB MORE OF IT
XC URBSVC(URBCFLEN-URBSVC),URBSVC EVEN MORE
NI URBFLAG1,URBLAST CLEAN UP FLAG1
XC URBFLAG2,URBFLAG2 FLAG2 CLEAR
XC URBPLEXT(256),URBPLEXT CLEAN UP PLEX EXTENTION
XC URBPLEXT+256(256),URBPLEXT+256 "
XC URBPLEXT+512(URBPLEN$-URBBLEN$-512),URBPLEXT+512
L R14,R14SAV1 RESTORE RETURN ADDRESS
BR R14 RETURN
EJECT
**********************************************************************
* *
* DELAY FOR SPECIFED TIME INTERVAL *
* DEFAULT IS 00-HOURS 00-MINUTES 20-SECONDS
* CHANGE ACCORDING TO REQUIREMENTS
* *
**********************************************************************
STOP9000 EQU *
EXEC CICS DELAY INTERVAL(S2KCSTWT)
B STOP0070 RUN URBS AGAIN
EJECT
**********************************************************************
* *
* RETURN TO CALLING PROGRAM *
* *
**********************************************************************
STOP9950 EQU *
EXEC CICS DUMP DUMPCODE('ST02') TASK
LA R1,S2KPLST ADDRESS PARMS
MVI 13(R1),X'01' SET AS BEING STOPPED
STOP9960 EQU *
EXEC CICS RETURN
EJECT
**********************************************************************
* *
* PLXSTOP DEFINED CONSTANTS AND DEFINED STORAGE *
* *
**********************************************************************
STOPMSG1 DC CL50'PLXSTOP - START ISSUED FOR PLXS TRAN'
EJECT
LTORG
PLXCOMA
DS2KCUSE
DURBMU
DPLRBLKS
DSTOPPRM
END
./ CHANGE NAME=CICSIJCL
&STOPWT=000020, *09* X00010010
.* *09* 09JUN93 GOH B4707 ALLOW FOR NEW PLEX STOP S2K PROCESS *09* 00079010
PUNCH ' STOPWT=&STOPWT, *09* X00085010
****************' *09* 00085020
./ CHANGE NAME=DS2KCUSE
* *04* 09JUN93 GOH B4707 ALLOW FOR AUTOMATIC STOP S2K IN CICS 3.2 00006998
S2KCSHD DS F SHUTDOWN FLAG FOR PLXS TRAN *04* 00024010
S2KCSTWT DS F TIME TO WAIT TO ACTIVATE PLXS TRAN *04* 00024020
./ CHANGE NAME=DURBMU
.* DURBMU- 09 12MAY93 GOH B4707 CICS 3.2 'STOP S2K' PROCESS CHANGE 00012010
URBTASK DS F CICS TASK NUMBER *09* 00121010
DS 3F RESERVED *09* 00122000
./ CHANGE NAME=S2KUGEN
&STOPWT=000020, PLXSTOP WAIT INTERVAL *06* *00003010
.*06* GOH 13MAY93 B4707 CICS 3.X CHANGES FOR STOP S2K PROCESS 00042990
S2KCSHD DC F'0' SHUTDOWN SWITCH FOR PLXSTOP *06* 00080010
S2KCSTWT DC PL4'&STOPWT' PLXSTOP WAIT INTERVAL *06* 00080020
./ ADD NAME=DSTOPPRM
./ NUMBER NEW1=1000,INCR=1000
MACRO
DSTOPPRM
******************************************************************
* MAP OF THE STOP S2K PARAMETER LIST IN THE S2KCUSE LOAD MODULE *
******************************************************************
SPACE
DSTOPPRM DSECT
SPACE
STPMCON DS CL4 CONSTANT 'PLX '
STPMTRN DS F ADDRESS OF TRAN ID TABLE
STPMURB DS F ADDRESS OF START OF PLEX URBS
MEND
End of Zap Deck