KICKS, MVS38J, TSO

KICKS in TK5

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.

Leave a Reply

Your email address will not be published. Required fields are marked *


CAPTCHA Image
Reload Image

This site uses Akismet to reduce spam. Learn how your comment data is processed.