Overview
KICKS is a transaction processing system enabling execution of CICS programs directly under TSO and provides a high level of source code compatibility with CICS. Compilers supported (not an exhaustive list) include MVT COBOL and MVS GCC.
KICKS is owned and authored by Mike Noel. Complete information on this product available at http://www.kicksfortso.com/
Installing KICKS on TK5 is as simple as following Mike Noel’s TSO legacy install instructions.
This post acts as an aid by complimenting and augmenting steps detailed in Mike’s instructions to install KICKS as a system-wide application using the HLQ USER.
KICKS v1.5 Installation
The below steps are not meant to be used stand-alone. Step numbers coincides with the installation steps outlined in the KICKS Turnkey MVS instructions.
1) Download KICKS v1.5 ZIP file from
http://www.kicksfortso.com/kicks-download.htm
2) Unzip kicks-tso-v1r5m0.zip into folder kicks-tso-v1r5m0
3) Follow instructions as outlined (preparation for install)
- Copy kicks-tso-v1r5m0.xmi to host machine e.g. root/mvs-tk5/tape
- Elected to use volume TSO002 on TK5 to store USER.KICKS and USER.KICKSSYS datasets
- Using IDCAMS, declare new ALIAS USER on user catalog SYS1.UCAT.TK5.
Below is sample JCL:
//USERALS0 JOB (SYS),'DEF USER ALIAS', <-- REVIEW AND MODIFY // CLASS=A,MSGCLASS=X, <-- REVIEW AND MODIFY // MSGLEVEL=(1,1),NOTIFY=&SYSUID <-- REVIEW AND MODIFY //DEFALIAS EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * PARM GRAPHICS(CHAIN(SN)) LISTCAT ALIAS ENT(USER) /* REVIEW AND MODIFY CATALOG NAME BELOW */ IF LASTCC NE 0 THEN - DEFINE ALIAS(NAME(USER) RELATE(SYS1.UCAT.TSO)) /* //
4) JOB GETXMI with modifications as depicted below:
//GETXMI JOB (SYS),'GET XMI via RDR', // CLASS=A,MSGCLASS=X,REGION=0M, // MSGLEVEL=(1,1),NOTIFY=&SYSUID //* //* devinit 10C tape/kicks-tso-v1r5m0.xmi ebcdic //* //SCRATCH EXEC PGM=IEFBR14 //* UPDATE THE HLQ IN THE FOLLOWING CARD BEFORE RUNNING <<<<<<<<<< //SYSUT2 DD DSN=USER.KICKS.V1R5M0.XMI,DISP=(MOD,DELETE), // UNIT=SYSDA,SPACE=(TRK,(0)) //LOAD EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY,DCB=BLKSIZE=80 //SYSUT1 DD UNIT=10C,DISP=OLD,DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200) //* UPDATE THE HLQ IN THE FOLLOWING CARD BEFORE RUNNING <<<<<<<<<< //SYSUT2 DD DSN=USER.KICKS.V1R5M0.XMI,DISP=(,CATLG), // DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=3200), // UNIT=SYSDA,VOL=SER=TSO002,SPACE=(TRK,(225,15),RLSE) //
5) JOB RCVKICKS with modifications as depicted below:
//RCVKICKS JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),REGION=4096K //RECV370 EXEC PGM=RECV370 //RECVLOG DD SYSOUT=* //* UPDATE THE HLQ IN THE FOLLOWING CARD BEFORE RUNNING <<<<<<<<<< //XMITIN DD DSN=USER.KICKS.V1R5M0.XMI,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&&SYSUT1, // UNIT=SYSDA, // SPACE=(TRK,(300,60)), // DISP=(NEW,DELETE,DELETE) //* UPDATE THE HLQ IN THE FOLLOWING CARD BEFORE RUNNING <<<<<<<<<< //SYSUT2 DD DSN=USER.KICKS.V1R5M0.BIGPDS, // UNIT=(SYSDA,SEP=SYSUT1),VOL=SER=TSO002, // SPACE=(TRK,(300,60,20)), // DISP=(NEW,CATLG,DELETE) //SYSIN DD DUMMY
FYI Initially, utilized TSO RECEIVE but noticed that load libraries were defined with attributes
RECFM=U, LRECL=256, BLKSIZE=6140). Decided to use RECV370 per instructions using set SPACE parameters and realize set RECV370 behavior per KICKS instructions!
7) JOB RCVKICK2 (V1R5M0 member) with modifications as depicted below:
//RCVKICK2 JOB CLASS=C,MSGCLASS=X,MSGLEVEL=(1,1),REGION=4096K //* //* UPDATE THE HLQ IN THE FOLLOWING CARD BEFORE RUNNING <<<<<<<<<< //RECV PROC UID=USER,MEM=DUMMY,MEM2=DUMMY,TRK=30,MLQ=KICKS //RECV370 EXEC PGM=RECV370 //RECVLOG DD SYSOUT=* //XMITIN DD DSN=&UID..KICKS.V1R5M0.BIGPDS(&MEM),DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&&SYSUT1, // UNIT=SYSALLDA, // SPACE=(TRK,(300,60)), // DISP=(NEW,DELETE,DELETE) //* ADD SPECIFIC VOLUME BELOW IF YOU CARE <<<<<<<<<< //SYSUT2 DD DSN=&UID..&MLQ..V1R5M0.&MEM2, // UNIT=SYSALLDA,VOL=SER=TSO002, // SPACE=(TRK,(&TRK,&TRK,100)), // DISP=(NEW,CATLG,DELETE) //SYSIN DD DUMMY // PEND //* //HCB2 EXEC RECV,MEM=HCB2,MEM2=CB2,TRK=150 //HCOB EXEC RECV,MEM=HCOB,MEM2=COB,TRK=150 //HCOBCOPY EXEC RECV,MEM=HCOBCOPY,MEM2=COBCOPY,TRK=150 //HGCC EXEC RECV,MEM=HGCC,MEM2=GCC,TRK=150 //HGCCCOPY EXEC RECV,MEM=HGCCCOPY,MEM2=GCCCOPY,TRK=150 //HINSTLIB EXEC RECV,MEM=HINSTLIB,MEM2=INSTLIB,TRK=30 //HKIKRPL EXEC RECV,MEM=HKIKRPL,MEM2=KIKRPL,TRK=150 //HMAPSRC EXEC RECV,MEM=HMAPSRC,MEM2=MAPSRC,TRK=45 //HOPIDS EXEC RECV,MEM=HOPIDS,MEM2=OPIDS,TRK=15 //HSPUFI EXEC RECV,MEM=HSPUFI,MEM2='SPUFI.IN',TRK=15 //* //SCMDPROC EXEC RECV,MLQ=KICKSSYS,MEM=SCMDPROC,MEM2=CLIST,TRK=15 //SCOB EXEC RECV,MLQ=KICKSSYS,MEM=SCOB,MEM2=COB,TRK=45 //SCOBCOPY EXEC RECV,MLQ=KICKSSYS,MEM=SCOBCOPY,MEM2=COBCOPY,TRK=60 //SDOC EXEC RECV,MLQ=KICKSSYS,MEM=SDOC,MEM2=DOC,TRK=15 //SGCC EXEC RECV,MLQ=KICKSSYS,MEM=SGCC,MEM2=GCC,TRK=15 //SGCCCOPY EXEC RECV,MLQ=KICKSSYS,MEM=SGCCCOPY,MEM2=GCCCOPY,TRK=60 //SINSTLIB EXEC RECV,MLQ=KICKSSYS,MEM=SINSTLIB,MEM2=INSTLIB,TRK=30 //SKIKRPL EXEC RECV,MLQ=KICKSSYS,MEM=SKIKRPL,MEM2=KIKRPL,TRK=150 //SMACLIB EXEC RECV,MLQ=KICKSSYS,MEM=SMACLIB,MEM2=MACLIB,TRK=15 //SMAPSRC EXEC RECV,MLQ=KICKSSYS,MEM=SMAPSRC,MEM2=MAPSRC,TRK=45 //SPROCLIB EXEC RECV,MLQ=KICKSSYS,MEM=SPROCLIB,MEM2=PROCLIB //SPROCLIZ EXEC RECV,MLQ=KICKSSYS,MEM=SPROCLIZ,MEM2=PROCLIBZ //SSKIKLOD EXEC RECV,MLQ=KICKSSYS,MEM=SSKIKLOD,MEM2=SKIKLOAD,TRK=150 //STESTCOB EXEC RECV,MLQ=KICKSSYS,MEM=STESTCOB,MEM2=TESTCOB,TRK=30 //STESTGCC EXEC RECV,MLQ=KICKSSYS,MEM=STESTGCC,MEM2=TESTGCC,TRK=30 //STESTFIL EXEC RECV,MLQ=KICKSSYS,MEM=STESTFIL,MEM2=TESTFILE,TRK=45 //
9) PROC modifications applied to USER.KICKSSYS.V1R5M0.CLIST(KFIX)
- SET UU3 = USER as HLQ for system-wide access (all user access), see snippet below
ALLOC FI(SYSPRINT) DA(*)
/* */
SET &UU1 = &SYSUID
SET &UU2 = &SYSPREF
SET &UU3 = USER /* EDIT THIS LINE TO GET WHAT YOU WANT */
/* */
SET &NM = 1
- Change ALLOC statements (DA parameter) near end of member KFIX as shown in below snippet:
ALLOC FI(SYSPRINT) DUMMY /* */ ALLOC FI(@UCB2) DA('&UU..&U..&VER..CB2') SHR ALLOC FI(@UCOB) DA('&UU..&U..&VER..COB') SHR ALLOC FI(@UCOBCPY) DA('&UU..&U..&VER..COBCOPY') SHR ALLOC FI(@UGCC) DA('&UU..&U..&VER..GCC') SHR /* FI(@UGCCCPY) DA('&UU..&U..&VER..GCCCOPY') S*/ ALLOC FI(@UINST) DA('&UU..&U..&VER..INSTLIB') SHR ALLOC FI(@UMAPS) DA('&UU..&U..&VER..MAPSRC') SHR ALLOC FI(@UOPIDS) DA('&UU..&U..&VER..OPIDS') SHR ALLOC FI(@USPUFI) DA('&UU..&U..&VER..SPUFI.IN') SHR ALLOC FI(@SCMD) DA('&UU..&S..&VER..CLIST') SHR ALLOC FI(@SCOB) DA('&UU..&S..&VER..COB') SHR ALLOC FI(@SCOBCPY) DA('&UU..&S..&VER..COBCOPY') SHR ALLOC FI(@SDOC) DA('&UU..&S..&VER..DOC') SHR ALLOC FI(@SGCC) DA('&UU..&S..&VER..GCC') SHR /* FI(@SGCCCPY) DA('&UU..&S..&VER..GCCCOPY') S*/ ALLOC FI(@SINST) DA('&UU..&S..&VER..INSTLIB') SHR ALLOC FI(@SMACS) DA('&UU..&S..&VER..MACLIB') SHR ALLOC FI(@SMAPS) DA('&UU..&S..&VER..MAPSRC') SHR ALLOC FI(@SPROC) DA('&UU..&S..&VER..PROCLIB') SHR ALLOC FI(@SPROCZ) DA('&UU..&S..&VER..PROCLIBZ') SHR ALLOC FI(@STESTC) DA('&UU..&S..&VER..TESTCOB') SHR ALLOC FI(@STESTG) DA('&UU..&S..&VER..TESTGCC') SHR ALLOC FI(@STESTF) DA('&UU..&S..&VER..TESTFILE') SHR /* */ CALL '&UU..&S..&VER..SKIKLOAD(PDSUPDTE)' '&UPDATE' /* */ /* THEN GET RID OF THE SYSIN FILE */ /* AND FREE ALL THE OTHER ALLOCS */ /* */
- exec ‘user.kickssys.v1r5m0.clist(kfix)’ at TSO READY prompt
- Select #3 to set HLQ to USER
- Sample dialog and expected result in below snippet
READY exec 'user.kickssys.v1r5m0.clist(kfix)' THE KICKS INSTALL HLQ (HIGH LEVEL QUALIFIER) WILL BE 3 USER -- IF THIS IS NOT WHAT YOU WANT, PRESS ENTER TO CYCLE THRU THE LIST, OR TYPE NO TO QUIT. -- IF IT IS WHAT YOU WANT THEN TYPE YES TO CONTINUE yes LOOKS LIKE TURNKEY MVS -- WILL CHANGE TCP TO 2$ DONE! READY
10) Review USER.KICKS.V1R5M0.INSTLIB(LOADMUR) per instructions
Changed VOL PUB002 to TSO001 for VSAM datasets
11) Review USER.KICKS.V1R5M0.INSTLIB(LOADTAC) per instructions
Change VOL PUB002 to TSO001
12) Review USER.KICKS.V1R5M0.INSTLIB(LOADSDB) per instructions
Change VOL PUB002 to TSO001
13) Review USER.KICKSSYS.V1R5M0.INSTLIB(LODINTRA) per instructions
Change VOL PUB002 to TSO001
14) Review USER.KICKSSYS.V1R5M0.INSTLIB(LODTEMP) per instructions
Changed VOL PUB002 to TSO001
15) Start KICKS under user HERC01 TSO session (from READY prompt)
exec ‘user.kickssys.v1r5m0.clist(kicks)’
Note: When KICKS is invoked first-time, users KICKS LOAD library is created:
e.g. HERC03.KICKS.V1R5M0.SKIKLOAD
After invoking the above exec, an error message was displayed.
(Intentionally, I did not attempt to determine root cause in installation procedure/JCL.)
READY exec 'user.kickssys.v1r5m0.clist(kicks)' DATA SET USER.KICKS.V1R5M0.SKIKLOAD NOT IN CATALOG OR CATALOG CAN NOT BE ACCESSED DATA SETS NOT CONCATENATED+ READY
Corrective Action: using RFE (REVIEW), Allocate dataset USER.KICKS.V1R5M0.SKIKLOAD using existing dataset USER.KICKSSYS.V1R5M0.SKIKLOAD as a model.
Terminate RFE returning to TSO READY prompt
Try staring KICKS, again, using exec ‘user.kickssys.v1r5m0.clist(kicks)’
KICKS v1.5 starts successfully!
Congratulations! KICKS is ready for use.
It is strongly recommended to complete reading and reviewing of remaining instructions, up to #17.
Being a system-level install, read and review section on Installing KICKS for many users (system install).
Plan and/or apply adjustments per your discretion.
Enjoy KICKS v1.5 on TK5!
Larry Belmontes
Software Disclaimer
No guarantee; No warranty; Install / Use at your own risk.
This post content is provided “AS IS” and without any expressed or implied warranties, including, without limitation, the implied warranties of merchantability and fitness for a particular purpose.
Submit any modifications, enhancements and/or suggestions to improve overall knowledge sharing with the MVS 3.8J hobbyist public domain community.
Closing
The KICKS system-wide install meets my needs as a SINGLE user simultaneously using multiple TSO USER IDs across terminal sessions!
For example:
User HERC01 utilizes ISPF to develop and compile a new application. The LOAD members (code and maps) land in the USER HLQ executable libraries, and COPY members (code and maps) land in the USER HLQ COPY libraries eliminating the need to terminate ISPF and execute KICKS from the READY prompt.
User HERC02, on a different terminal session, uses KICKS to test and debug the new application after compilation (re-compilation to correct an error or two… 😉 )!
One limitation!
If the same application already exists, the development and testing revisions may need to be isolated to the USERID HLQ as to not break the application in the USER HLQ!
Stay tuned for continuation of discussion and possibility, a potential proposal.
Please use the comment box below or the contact us link on the menu bar to communicate any suggestions, improvements, corrections or issues.