Kicks Manual

 KICKS

A transaction processing system for CMS & TSO

 

Below is a copy of the official documentation for KICKS 1.5.0 as a backup just in case.

 

Configuration

The tables

Most of KICKS configuration is done by assembling option tables. In this version there are five tables – the System Initialization Table (SIT), the File Control Table (FCT), the Task Control Table (PCT), the Destination Control Table (DCT), and the Program Properties Table (PPT).
In TSO the tables are assembled into load modules in userid.KICKS.V1R5M0.SKIKLOAD  (searched first) or userid.KICKSSYS.V1R5M0.SKIKLOAD. In CMS the tables are assembled into object decks in KIKULOD TXTLIB (searched first) or KIKSLOD TXTLIB. The table objects themselves are named KIKSIT?? (SIT), KIKFCT?? (FCT), KIKPCT?? (PCT), KIKDCT?? (DCT), and KIKPPT?? (PPT) where ?? represents the 2 character load module suffix. Since the table names have these suffixes many version of each table can be present in the library, selected by suffix when KICKS starts up. Suffixes 0? and ?$ (where ? is any character) are reserved, meaning I might use them so you should not. All other combinations (that result in valid PDS member names) are available. You should establish your own convention of suffix use – for example you might use @1, @2, - or A1, A2, – or 1A, 1B, – whatever you like.
With many different suffixed version of tables how does KICKS know which ones to use? By default it will use a suffix of 00 for all tables. If you want it to use something else you have to tell it. How do you tell it? In one or more ways:
  • When you start KICKS you can pass it a list of parameters (PARMS) which KICKS expects to be things like SIT table arguments (see following SIT discussion). Among these are suffix specifiers like ‘SIT=3$’. If you look at the KICKS clist in TSO you will see something like this going on:
PROC 0 SIP(1$) SIT(1$) + …                         
CALL 'KICKS.&VER..SKIKLOAD(KIKSIP&SIP)' 'SIT=&SIT +
or, looking at the KICKS exec in CMS
&SIP = 1$
…                         
&KICKS = &CONCAT KIKSIP &SIP
&KICKS SIT=1$
which results in KICKS using KIKSIT1$ instead of the default KIKSIT00. You might notice this also runs a suffixed version of KIKSIP (the KICKS system initialization program). In this case it’s not KICKS itself doing the suffixing, it’s the CLIST/EXEC…
  • In TSO KICKS will also read SYSIN looking for these SIT table arguments (one argument per line). KICKS could do this in CMS as well, but the exec has SYSIN dummied...
  • Finally KICKS will use the loaded SIT to obtain the suffixes for all the other tables and management modules (except for KIKSIP which can only be suffixed as above).
The order of all this suffix behavior is: (a) KIKSIP suffixing is handled by clist/exec executing whichever KIKSIPxx is desired; (b) KIKSIP presets all other suffixes to 00; (c) KIKSIP reads all the command line arguments looking for SIT=xx; (d) KIKSIP load SIT=xx (or 00 if there was no SIT=xx); (e) KIKSIP sets all the suffixes and other startup variables to values specified in loaded SIT; (f) KIKSIP makes a 2nd pass of the command line arguments looking for other suffix specifiers and startup variables and merges them in; (g) KIKSIP reads SYSIN looking for other suffix specifiers and startup variables and merges them in. With all this finished KICKS begins loading the requested tables and management programs.

SYSTEM INITIALIZATION TABLE (SIT)

The SIT is a list of table and program suffixes and of other startup parameters. It is generated with the KIKSIT macro, as below, with the values shown being the defaults.
KIKSIT SUFFIX=00,       suffix for system initialization table*
      DCT=00,           suffix for destination control table  *
      FCT=00,           suffix for file control table         *
      PCT=00,           suffix for task control table         *
      PPT=00,           suffix for program control table      *
      BMS=00,           suffix for basic mapping support PGM  *
      DCP=00,           suffix for destination control PGM    *
      FCP=00,           suffix for file control PGM           *
      KCP=00,           suffix for task control PGM           *
      PCP=00,           suffix for program control PGM        *
      TCP=00,           suffix for terminal control PGM       *
      TSP=00,           suffix for temp storage control PGM   *
      OPID=999,         3 char (numeric?) 'operator id'       *
      NATLANG=E,        1 char language code                  *
      TRCNUM=100,       # entries in the internal trace tbl   *
      TRCFLAG=1,        trace control startup configuration   *
      DMPCLAS=A,        sysout class for 'spin off' dumps     *
      ICVR=5000,        time (milliseconds) to AICA           *
      MAXDELY=180,      max time (seconds) for a 'DELAY'      *
      PLTPI=KSGM,       first transaction                     *
      PLTSD=K999,       last transaction                      *
      CWAL=100,         size (characters) of CWA              *
      TCTUAL=100,       size (characters) of TCTTEUA          *
      FFREEKB=NO,       whether to force terminal freekb      *
      ENQSCOP=SYSTEMS   must be SYSTEM or SYSTEMS             *
      SYNCPGM=          name of syncpoint exit, or null
SUFFIX is the suffix for the SIT itself. It should match the suffix used to name the table in the load lib. The KIKSIT macro default is ‘00’ but the supplied SIT assembly job specifies 1$. DCT is the suffix to be used (subject to PARM and SYSIN overrides) for the destination control table. The KIKSIT macro default is ‘00’ but the supplied SIT assembly job, and the supplied DCT assembly job, specify 1$.
FCT is the suffix to be used (subject to PARM and SYSIN overrides) for the file control table. The KIKSIT macro default is ‘00’ but the supplied SIT assembly job, and the supplied FCT assembly job, specify 1$.
PCT is the suffix to be used (subject to PARM and SYSIN overrides) for the task control table. The KIKSIT macro default is ‘00’ but the supplied SIT assembly job and the supplied PCT assembly job, specify 1$.
PPT is the suffix to be used (subject to PARM and SYSIN overrides) for the program control table. The KIKSIT macro default is ‘00’ but the supplied SIT assembly job, and the supplied PPT assembly job, specify 1$.
BMS, DCP, FCP, KCP, PCP, TCP and TSP are suffixes for KICKS internal service programs. Although the macro default for them is 00 the supplied SIT overrides this to 1$, which matches the suffixes of the load modules supplied in the KIKSLOD library. Being able to change the KICKS management modules (programs) by suffix is of limited use to you – I usually only supply a few of each (suffixed 0$, 1$, 2$) and those are what you use (or what the KICKS clist selects). 0$ reflect null functionality, 1$ is used for most cases, 2$ if for unusual situations (such as KIKTCP2$ being used for legacy "no lock" terminal support).
OPID is the 3 character operator id that your programs can recover using EXEC KICKS ASSIGN OPID(myvar). Little used now, OPID is a leftover from pre-RACF days when applications all managed their own users. CICS had a table called the SNT (signon) of userids and passwords, with associated OPID’s for each. When you signed on CICS kept a copy of your OPID which it could check against transactions to see if you should be allowed to run them. KICKS implements none of this since a RACF style userid (your TSO id) is already available. But some applications still ask for it (as above). So for compatibility's sake some value must be returned and here is where you can set it to whatever you want it to be! The default is ‘999’, as good as any…
NATLANG is the 1 character operator id that your programs can recover using EXEC KICKS ASSIGN NATLANGINUSE(myvar), and of course also thereby implicitly defines the 3 character result you will obtain using EXEC KICKS ASSIGN LANGINUSE(myvar) as well. The default is 'E', (ENU, American English). A table relating IBM's definition of these codes to each other can be found in SC33-1688 ( CICS Application Programming Reference, available online as DFHP400.PDF ).
TRCNUM is the number of entries in the internal trace table. Each entry is 16 bytes. TRCNUM’s value can be 0 (no internal trace) or any value from 100 to 1000. The default is 100.
TRCFLAG is the initial state of 3 trace controls: whether the internal trace is active (1); whether the auxiliary (external, to file DD AUXTRAC) trace is active (2); and whether events marked as ’intense’ should be traced (8). The default value (1) means the internal trace is active. To combine flags add them, so to enable both the internal and the auxiliary trace set TRXFLAG=3.
These trace controls can be manipulated online using the KSMT transaction, so, for example, you can turn auxiliary trace on and off while KICKS is running. Changing the value using KSMT is only effective until KICKS is shutdown.
DMPCLAS is the sysout class that will be used when you want transaction dumps to print as soon as they are available (instead of waiting until you exit KICKS). The default is class A.
Additional information regarding transaction dumps and the trace table can be found in the Debugging Section of this User’s Guide.
ICVR is the number of milliseconds of elapsed time (not cpu time) to allow a user task to run before killing it with an AICA abend. ICVR’s value can be 0 (no time limit) or any value from 1000 (1 second) to 600000 (10 minutes). The default is 5000 (5 seconds).
This value can also be set up or down online using the KSMT transaction. Changing the value using KSMT is only effective until KICKS is shutdown.
Additional information regarding AICA abends and the ICVR parameter can be found in KooKbooK recipe #4.
MAXDELY is the maximum number of seconds of elapsed time (not cpu time) to allow a user task to delay using the EXEC KICKS DELAY api. The default is 180.
PLTPI is the 4 character transaction id for the first transaction KICKS is to run (before the first user input). The default is ‘KSGM’ (The transaction that put the big color letters ‘KICKS’ on the screen).
PLTSD is the 4 character transaction id for the last transaction KICKS is to run (after the last user input). The default is ‘K999’ (which just does a brief delay to let you see anything left on the screen).
Additional information regarding the PLTPI and PLTSD arguments, and the KSGM/KSSF/K999 transactions can be found in KooKbooK recipes #2 and #3. Source code for the KSGM/KSSF/K999 transactions can be found in KICKS.V1R5M0.COB.
CWAL is the length of the ‘Common Work Area’, or CWA. CWAL’s value can be 0 (no CWA) or any value from 1 to 1024. The default is 100.
TCTUAL is the length of the ‘TCTTE Work Area’, or TCTTEUA. TCTUAL’s value can be 0 (no TCTTEUA) or any value from 1 to 1024. The default is 100.
Additional information regarding the CWA and the TCTTEUA can be found in KooKbooK recipe #5.
FFREEKB is used to tell KICKS whether to force on the FREEKB option for all terminal writes, thus ensuring the keyboard is never locked. Recommend to leave default NO, meaning control over keyboard locked state is up to the application (as is always the case in CICS).
ENQSCOP is the scope value KICKS will use with the VSAM file control ENQ and DEQ macros it issues. ENQSCOP’s value can be SYSTEM or SYSTEMS. The default is SYSTEMS.
SYNCPGM, if specified, is the name of a program (which must also be defined in the PPT) that is to receive control when certain events occur. These events include SYNCPOINT COMMIT, SYNCPOINT ROLLBACK, task initiation, normal task end, and abnormal task end (abend). See HERC01.KICKSSYS.V1R5M0.COB(SYNCXIT) for a sample exit program.
KICKS.V1R5M0.INSTLIB(KIKSIT1$) is the source for the SIT used by default with the KICKS clist. I suggest that instead of modifying it you create a new member – such as KIKSITZZ, perhaps in your own dataset – copy KIKSIT1$ into it, edit it (especially change SUFFIX to ZZ and the name in the SYSLMOD override – 3rd card from the bottom), and submit. To run with your new SIT just start KICKS by typing
KICKS SIT(ZZ)
Instead of just
KICKS
When you add a new application to KICKS you will generally have some programs (these are defined in the PPT), some maps (screen layouts) (also defined in the PPT), some transactions used to initiate the programs (defined in the PCT) some VSAM files (defined in the FCT) and perhaps a new destination (defined in the DCT).

PROGRAM CONTROL TABLE (PPT)

The PPT is a list of programs residing in the KIKRPL concatenation. It is generated with the KIKPPT macro, as below, with the values shown being the defaults. For historical reasons PPT is "Processing Program Table" in CICS, but that full title is seldom used, it's almost always simply called "the PPT".

KIKPPT SUFFIX=00,       suffix for program control table      *
      TYPE=ENTRY,       INITIAL, ENTRY, or FINAL              *
      PROGRAM=,                                               *
      MAPSET=,                                                *
      USAGE=,                                                 *
      PGMLANG=CMDLVL,                                         *
      LOAD=DEFERRED,    INITIAL or DEFERRED                   *
      PGMSTAT=ENABLED   ENABLED or DISABLED
SUFFIX is the suffix for the PPT itself. It should match the suffix used to name the table in the load lib. The KIKPPT macro default is ‘00’ but the supplied PPT assembly job specifies 1$.
TYPE is either INITIAL, ENTRY, or FINAL. Your PPT assembly job should have one leading TYPE= INITIAL, as may TYPE=ENTRY’s as you have programs (or maps) to define, and one trailing TYPE=FINAL.
Your TYPE=INITIAL has only one other argument, SUFFIX.
Your TYPE=FINAL has no arguments.
Your TYPE=ENTRY’s (which may omit TYPE=ENTRY as it is the default) should specify PROGRAM or MAPSET (but not both), PGMLANG or USAGE (but not both), and optionally LOAD and/or PGMSTAT.
PROGRAM is the name of the load module in KIKRPL.
MAPSET is an alias for PROGRAM.
USAGE is a ‘one valid value’ – USAGE=MAP. It means the same as PGMLANG=MAP.
PGMLANG is the programming language used to code the program. It may be CMDLVL, ASSEMBLER, MACC, or MAP. CMDLVL should be used for any program that comes out of one of the preprocessor procs (KIKCOBCL, K2KCOBCL, KIKCB2CL, or KIKGCCCL) - meaning all of your COBOL or GCC programs. ASSEMBLER should be used for non-executable tables (such as KEDFILTR). MACC is used for programs coded with the 'macro level' interface (an undocumented internal interface for some system level transactions). MAP means the same as USAGE=MAP. If you look at the macro you will see some other values (COBOL, COB, MVTCOB, LECOB, GCC, etc) but these are in most cases just aliases for CMDLVL.
Older versions of KICKS had some entries coded with PGMLANG=C. This was the same as what is now MACC. PGMLANG=C has been removed to avoid confusion in how to code PPT entrees for GCCMVS programs, which, as above, should be coded PGMLANG=CMDLVL.
LOAD is used to tell KICKS when to load the program, and may have the value INITIAL or DEFERRED. Recommend to leave in default DEFERRED state.
PGMSTAT is used to tell KICKS whether it is allowed to use the program, and may have the value ENABLED or DISABLED. Recommend to leave in default ENABLED state.
The PPT source is in KICKS.V1R5M0.INSTLIB(KIKPPT1$). I suggest that instead of modifying it you create a new member – such as KIKPPTZZ, perhaps in your own dataset – copy KIKPPT1$ into it, edit it (especially change SUFFIX to ZZ and the name in the SYSLMOD override – 3rd card from the bottom), and submit. To run with your new PPT just start KICKS by typing
KICKS PPT(ZZ)
Instead of just
KICKS
When you look at the PPT source you will see it is just a series of KIKPPT macros. The first is a TYPE=INITIAL and just gives the suffix. The last is a TYPE=FINAL and just provides for final wrap up. In between are TYPE=ENTRY macros that define your maps and programs. The order of the TYPE=ENTRY macros is not significant except that you should use some convention to make it easy for you to find entries you want. Note that the first several TYPE=ENTRY macros are for KSGMPRG, KSGMMAP, and KSSFPRG. These are required entries for the KSGM (good morning message) and KSSF (signoff) programs. In general you should not name programs, transactions, or files with a first character of ‘K’ as these are used by KICKS. Also you should avoid naming these entities with a first character of ‘C’ as that is the equivalent CICS reservation.
Code the TYPE=ENTRY macros for your programs and maps like those in KIKPPT1$: for a COBOL program use
KIKPPT TYPE=ENTRY,PROGRAM=XXXXX,PGMLANG=CMDLVL
and for a map use
KIKPPT TYPE=ENTRY, PROGRAM=YYYYY,USAGE=MAP
The PGMLANG keyword provides a couple of other choices (such as ‘C’) but you shouldn’t waste your time trying to get those to work with this KICKS release!

TASK CONTROL TABLE (PCT)

The PCT is a list of transactions and associated programs to be run when the transactions are started. It is generated with the KIKPCT macro, as below, with the values shown being the defaults. For historical reasons PCT is "Processing Control Table" in CICS, but that full title is seldom used, it's almost always simply called "the PCT".

KIKPCT SUFFIX=00,        suffix for task control table        *
       TYPE=ENTRY,       INITIAL, ENTRY, or FINAL             *
       TPURGE=,SPURGE=,TRANSEC=,                              *
       TRANSID=,                                              *
       PROGRAM=,                                              *
       TWASIZE=0,        0-1024                               *
       KPOPEN=DISABLED,  ENABLED or DISABLED                  *
       ISTAT=ENABLED     ENABLED or DISABLED
SUFFIX is the suffix for the PCT itself. It should match the suffix used to name the table in the load lib. The KIKPCT macro default is ‘00’ but the supplied PCT assembly job specifies 1$.
TYPE is either INITIAL, ENTRY, or FINAL. Your PCT assembly job should have one leading TYPE= INITIAL, as may TYPE=ENTRY’s as you have transactions to define, and one trailing TYPE=FINAL.
Your TYPE=INITIAL has only one other argument, SUFFIX.
Your TYPE=FINAL has no arguments.
Your TYPE=ENTRY’s (which may omit TYPE=ENTRY as it is the default) should specify TRANSID, PROGRAM, and optionally TWASIZE and/or KPOPEN and/or ISTAT.
TPURGE, SPURGE, and TRANSEC are CICS PCT keywords that are tolerated but not acted upon in a KICKS PCT definition.
TRANSID is the 4 character transaction id that will be used for this transaction.
PROGRAM is the name of a program, named in the PPT, that will be used with this transaction.
TWASIZE is a number that represent the size in bytes of the Transaction Work Area (TWA). TWASIZE’s value can be 0 (no TWA) or any value from 1 to 1024. The default is 0. Additional information regarding the TWA can be found in KooKbooK recipe #5.
KPOPEN is used to tell KICKS whether to release a conversational task's open files for use by other KICKS users when the task does a blocking terminal control read (ie, RECEIVE or RECEIVE MAP). Recommend to leave in default DISABLED state, meaning files will be released.
ISTAT is used to tell KICKS whether it is allowed to use the transaction, and may have the value ENABLED or DISABLED. Recommend to leave in default ENABLED state.
The PCT source is in KICKS.V1R5M0.INSTLIB(KIKPCT1$). I suggest that instead of modifying it you create a new member – such as KIKPCTZZ, perhaps in your own dataset – copy KIKPCT1$ into it, edit it (especially change SUFFIX to ZZ and the name in the SYSLMOD override – 3rd card from the bottom), and submit. To run with your new PCT just start KICKS by typing
KICKS PCT(ZZ)
Instead of just
KICKS
When you look at the PCT source you will see it is just a series of KIKPCT macros. The first is a TYPE=INITIAL and just gives the suffix. The last is a TYPE=FINAL and just provides for final wrap-up. In between are TYPE=ENTRY macros that define your transaction id’s. The order of the TYPE=ENTRY macros is not significant except that you should use some convention to make it easy for you to find entries you want. Note that the first several TYPE=ENTRY macros are for KSGM, CSGM, KSSF, and CSSF. The id’s starting with ‘K’ are for the Good Morning Message program and for the Signoff transaction. The id’s starting with ‘C’ are the equivalent CICS transactions (thus allowing you to type either CSSF or KSSF to logoff).
Code the TYPE=ENTRY macros for your transaction id’s like those in KIKPCT1$: use KIKPCT
TYPE=ENTRY,TRANSID=XXXX,PROGRAM=YYYYYYYY
Every program specified with a PROGRAM keyword in a KIKPCT TYPE=ENTRY must also have a corresponding KIKPPT TYPE=ENTRY,PROGRAM= entry in the active PPT!

FILE CONTROL TABLE (FCT)

The FCT is a list of VSAM files. It is generated with the KIKFCT macro, as below, with the values shown being the defaults.


KIKFCT SUFFIX=00,       suffix for file control table         *
      TYPE=DATASET,     INITIAL, DATASET, or FINAL            *
      FILSTAT=ENABLED,  ENABLED or DISABLED                   *
      NUMREQ=,                                                *
      DATASET=,                                               *
      BASE=,                                                  *
      CATUSER=CMSUSER,                                        *
      CATLNK1=194,                                            *
      CATLNK2=222,                                            *
      CATPASS=WRITE,                                          *
      CATFM=O,                                                *
      CATVOL=VSAMIN
SUFFIX is the suffix for the FCT itself. It should match the suffix used to name the table in the load lib. The KIKFCT macro default is ‘00’ but the supplied FCT assembly job specifies 1$.
TYPE is either INITIAL, DATASET, or FINAL.
Your FCT assembly job should have one leading TYPE= INITIAL, as may TYPE=DATASET’s as you have files to define, and one trailing TYPE=FINAL.
Your TYPE=INITIAL has one required argument, SUFFIX, and seven optional arguments..
CATUSER, CATLNK1, CATLNK2, CATPASS, CATFM, and CATVOL, used only in CMS and on your  TYPE=INITIAL macro, define the VSAM environment for all the files in this FCT. CATUSER, CATLNK1, CATLNK2, and CATPASS are used to link [ ie,   CP LINK CATUSER CATLNK1 CATLNK1 WRITE CATPASS ] to a DOS formated mini-disk holding the VSAM catalog and space (which in turn holds all the files). CATLNK2 and CATFM are used to associate that linked mini-disk with a drive letter [ IE,   ACC CATLNK2 CATFM ]. CATVOL is used by various utilities (such as AMSERV) that need to know the volser of the mini-disk. So CATUSER is the 'owner' logon id of the VSAM minidisk, CATLNK1 is the virtual device address in his virtual machine, CATLNK2 is the virtual device address in your virtual machine, CATPASS is the write password for the minidisk, CATFM is the drive letter in your virtual machine, and CATVOL is the volser of the mini-disk.
NUMREQ is the maximum number of concurrent but independent browses that will be active. It is specified on the TYPE=INITIAL macro to set the default for the files that follow. The default is 10. The minimum value is 1. The maximum value is 15.
Your TYPE=FINAL has no arguments.
Your TYPE= DATASET’s (which may omit TYPE=DATASET as it is the default) should specify DATASET and optionally FILESTAT and/or NUMREQ and/or BASE.
DATASET is the DDNAME you will use for the file
NUMREQ is the maximum number of concurrent but independent browses that will be active. The default is whatever was specified (or defaulted) in the TYPE=INITIAL macro. The minimum value is 1. The maximum value is 15.
BASE is used when this entry is for a path (access via alternate index), and it names the DATASET= for some other entry in the FCT that is for the base cluster of the path.
FILESTAT is used to tell KICKS whether it is allowed to use the file, and may have the value ENABLED or DISABLED. Recommend to leave in default ENABLED state.
The FCT source is in KICKS.V1R5M0.INSTLIB(KIKFCT1$). I suggest that instead of modifying it you create a new member – such as KIKFCTZZ, perhaps in your own dataset – copy KIKFCT1$ into it, edit it (especially change SUFFIX to ZZ and the name in the SYSLMOD override – 3rd card from the bottom), and submit. To run with your new FCT just start KICKS by typing
KICKS FCT(ZZ)
Instead of just
KICKS
When you look at the FCT source you will see it is just a series of KIKFCT macros. The first is a TYPE=INITIAL and just gives the suffix. The last is a TYPE=FINAL and just provides for final wrap up. In between are TYPE= DATASET macros that define your VSAM files. The order of the TYPE=DATASET macros is not significant except that you should use some convention to make it easy for you to find datasets you want. KICKS has no required entries in the FCT. Code the TYPE= DATASET macros for your transaction id’s like those in KIKFCT1$: use KIKPCT TYPE= DATASET, DATASET =XXXXXXXX
If the dataset is a path, BASE must name another KIKFCT TYPE=DATASET that is the base cluster for the path. So for example in KIKFCT1$ you see
    KIKFCT TYPE=DATASET,DATASET=INVOICE
    KIKFCT TYPE=DATASET,DATASET=INVPATH,BASE=INVOICE

which will allow KICKS to enqueue against the INVOICE base cluster when it needs to access INVPATH.

DESTINATION CONTROL TABLE (DCT)

The DCT is a list of destination queues your program can access with the READQ and WRITEQ api’s. This version of KICKS supports extrapartition  and indirect destination queues.
Extrapartition destinations are sequential files, often SYSIN or SYSOUT datasets. Application logs for example are often extrapartition destinations written using the WRITEQ TD api.
Indirect destinations are aliases for other destinations and can be used to consolidate output. Suppose you have 5 different applications that want to write various log messages. One refers to destination MLOG. Another to LOG1. The other 3 to SLOG. You could define 3 separate logs, each an extrapartition destination, or you could define one extrapartition destination and two indirect destinations pointing to the single extrapartition destination. The applications won't know or care this is going on. It's pretty common on CICS systems to define a single logging destination and then use indirect destinations to route all application logging to the common log.
The DCT is generated with the KIKDCT macro, as below, with the values shown being the defaults.

KIKDCT SUFFIX=00,     suffix for destination control table    *
      TYPE=EXTRA,     INITIAL, EXTRA, INTRA, INDIR or FINAL   *
      DESTID=,                                                *
      PHYDEST=,                                               *
      FILE=,                                                  *
      TYPEFIL=INPUT,                                          *
      ISTAT=ENABLED,  ENABLED or DISABLED                     *
      OPEN=INITIAL
SUFFIX is the suffix for the DCT itself. It should match the suffix used to name the table in the load lib. The KIKDCT macro default is ‘00’ but the supplied DCT assembly job specifies 1$.
TYPE is either INITIAL, EXTRA, INTRA, INDIR, or FINAL.
Your DCT assembly job should have one leading TYPE= INITIAL, as many TYPE=EXTRA’s, INTRA's, and INDIR's as you have destinations (or aliases) to define, and one trailing TYPE=FINAL.
Your TYPE=INITIAL has one required argument, SUFFIX..
Your TYPE=FINAL has no arguments.
Your TYPE= EXTRA’s should specify DESTID, FILE, TYPEFIL and optionally ISTAT and/or OPEN.
Your TYPE= INTRA’s should specify DESTID and optionally ISTAT
Your TYPE= INDIR’s should specify DESTID and PHYDEST.
DESTID is the 4 character name you will use in your API calls referring to this destination.
PHYDEST is used only in TYPE=INDIR's and is the 4 character name of a TYPE=EXTRA entry this destination aliases.
FILE is the 8 character DDNAME you will use for the destination
TYPEFIL is either 'INPUT' or 'OUTPUT' and specifies that you will be using READQ or WRITEQ (respectively) API calls to this destination.
ISTAT is used to tell KICKS whether it is allowed to use the destination, and may have the value 'ENABLED' or 'DISABLED'. Recommend to leave in default ENABLED state
OPEN is either 'INITIAL' (meaning the destination is opened when KICKS starts) or 'DEFERRED' (meaning KICKS does not open the destination until it is first referenced).
The DCT source is in KICKS.V1R5M0.INSTLIB(KIKDCT1$). I suggest that instead of modifying it you create a new member – such as KIKDCTZZ, perhaps in your own dataset – copy KIKDCT1$ into it, edit it (especially change SUFFIX to ZZ and the name in the SYSLMOD override – 3rd card from the bottom), and submit. To run with your new DCT just start KICKS by typing
KICKS DCT(ZZ)
Instead of just
KICKS
When you look at the DCT source you will see it is just a series of KIKDCT macros. The first is a TYPE=INITIAL and just gives the suffix. The last is a TYPE=FINAL and just provides for final wrap up. In between are TYPE= EXTRA and TYPE=INDIR macros that define your destinations. The order of the TYPE= EXTRA and TYPE=INDIR macros is not significant except that you should use some convention to make it easy for you to find destinations you want. KICKS has no required entries in the DCT.

The Clist

The purpose of the KICKS clist  (exec in CMS) is to let the user start KICK by simply typing KICKS (enter). To this end, in TSO it
  • Ensures KICKS startup is ‘allowed’
  • FREE’s any files allocated by a previous (possibly failed) startup
  • ALLOC’s necessary files
  • Starts KICKS with the desired SIT (and possibly overrides)
  • FREE’s allocated files following KICKS shutdown And of course you can customize it to do anything else you desire.
In CMS it
  • Detects environment (for example, VM/370 or Z/VM) and adapts startup defaults as necessary
  • Sets up FILEDEF's for non-VSAM files 
  • Uses the KICKSD exec to set up DLBL's for VSAM files
  • Starts KICKS with the desired SIT (and possibly overrides)
  • And of course you can customize it to do anything else you desire.
The reality is you will customize it, if only to add your own files.

Checking to see if KICKS should be allowed to run

In TSO you may want to prevent users from starting KICKS – for example if you are running batch jobs that need the same files the KICKS users would be updating. The clist allows you to control this by doing a trial allocation of its loadlib. If that succeeds the loadlib is freed and the clist continues normally (ultimately reallocating the loadlib as part of the SKIKLOAD concatenation). If not a message tells the user KICKS is not available and the clist ends. This facility is intended for 'system installs' of KICKS. In a normal user install this file is userid qualified, hence not particularly useful.
In use, the operator would run a job/started task that uncataloged the loadlib, This would prevent new KICKS starts. When it was OK for users to run KICKS again the operator would run another job/started task the recataloged the loadlib.
The KICKS installation does not provide a similar facility for CMS.

Detecting the environment and adapting startup defaults

In CMS the KTESTS EXEC is called to set exec globals defining the environment: VM/370 (or not), VSAM available (or not), MECAFF available (or not), and running in CMSBATCH (or not). If VSAM is available KFDEFLT is called  to return the VSAM definition variables (CATUSER, CATLNK1, CATLNK2, CATPASS, CATFM, and CATVOL) from the current FCT.
In TSO this environment detection/adaptation is part of the installation procedure so does not need to be done at KICKS startup.

Freeing previously allocated files

The TSO allocate command will fail if the file is already allocated. To simplify the clist’s error recovery it frees all the files it allocates – both before it begins the allocate process, and after a normal KICKS shutdown. Of course in the former case the FREE command might fail if the file wasn’t allocated, but the clist uses NOMSG NOFLUSH to hide these uninteresting errors.
This is not an issue in CMS since it isn't an error to allocate a file you've already allocated.
This step also deletes the old auxiliary trace file (if it exists).

Allocating necessary files (or, in CMS, Sets up FILEDEF's for non-VSAM files)

  • KICKS files SKIKLOAD The KICKS system load library concatenation
    • TSO: userid.KICKS.V1R5M0.SKIKLOAD
    •          userid.KICKSSYS.V1R5M0.SKIKLOAD
    • CMS: KIKULOD, KIKSLOD txtlibs
    KIKRPL The KICKS transaction program and map load library concatenation
    • TSO userid.KICKS.V1R5M0.KIKRPL
              userid.KICKSSYS.V1R5M0.KIKRPL
    • CMS KIKURPL, KIKSRPL txtlibs
    SYSIN Used for SIT overrides
    • TSO userid.KICKS.V1R5M0.OPIDS(userid) or, if that does not exist, DUMMY
    • CMS always DUMMY
    SYSTERM Used for TSO command output (from ALLOC, FREE, etc)
    • TERMINAL
    SYSPRINT Used for line mode output from KICKS (startup messages)
    • TERMINAL or SYSOUT if QUIET specified (see below)
    SYSOUT Used for COBOL debugging output
    • SYSOUT(A)
    TRANDUMP Used for transaction dumps
    • Unallocated, which caused the dump program to allocate it dynamically and spin it off for printing as soon as the dump is completed, or
    • Allocate to SYSOUT(A) if you want the dumps printed all at once when you logoff, or
    • (not recommended) allocate to SYSOUT(Z) if you don’t want them to print at all.
    SYSUDUMP Used for system dumps, especially for ASRA, ASRB, and AICA KICKS abends
    • SYSOUT(A)
    AUXTRC Used for the external trace
    • userid.KICKS.AUXTRC
  • USER files
    One for each ‘TYPE=DATASET’ VSAM cluster (or path) in the FCT and for each 'TYPE=EXTRA' destination in the DCT. As distributed these will be the files for the example programs. In TSO ou will modify the clist to add your files here. Don’t forget to ‘free’ them in the appropriate parts of the clist. VSAM files are usually allocated DISP(SHR) allowing multiple KICKS users to access the file. DISP(OLD) is ok is the file is not to be shared (userid qualified?)
In CMS, if VSAM is available the KICKSD EXEC is called (using the VSAM definition variables obtained from KFDEFLT) to setup the required DLBL's for the VSAM files. It is expected the user will modify KICKSD EXEC to include DLBL's for his own files as necessary to match changes to his FCT.
However, if you choose you can leave KICKSD alone and use your own exec instead. Just copy KICKSD EXEC to your own (for example YOURNAME EXEC), make changes as you like, and start KICKS using it with KICKS DLBLS YOURNAME.
Whether you use KICKSD or your own exec to setup DLBLs, be sure you use SYSCAT for the logical unit, and that you use &CATFM for the file mode. As discussed above (under FCT), in this version of KICKS all VSAM files must be on one mini-disk (ie, &CATFM) that also contains the VSAM master catalog.

Starts KICKS with the desired SIT (and possibly overrides)

Based on the environment the appropriate default suffixes are selected. For example in CMS if MECAFF is present TCP=2$ is defaulted instead of TCP=1$ as would normally be used for Z/VM. Or if VSAM is not present FCP=0$ is defaulted instead of FCP=1$ as normal. Then EXEC arguments are analyzed, defaults updated, and KICKS is started with resulting program and table suffixes..
In TSO there is a bit less of this automatic selection of suffixes, but unlike the CMS exec the TSO clist supports SYSIN overrides to the SIT and command line arguments.

FREE’s allocated files following KICKS shutdown

The same file list freed during startup is freed again after a normal shutdown.

More Customization

The SIT overrides in the clist/exec are the ones I thought most likely necessary. You can easily add more if you want. Just make sure the name of the override is the same as the SIT assembly argument.
The TSO clist frees, reallocates, and finally frees a number of DD’s that may be important for other TSO applications you run. You should review its final disposition of SYSIN, SYSTERM, SYSPRINT, SYSOUT, and SYSUDUMP to ensure free’ing those DD’s does not interfere with your other applications.
The TSO clist is written using standard TSO features available in the base TK3. This version of TSO is missing many features in more modern TSO/E implementations, especially the &SYSDSN clist function. That’s why you see tests for allocation failure (etc) instead of SYSDSN tests to ensure the file exists before allocating it. In most cases this is just a stylistic concern, but in the case of the SYSIN allocation & member test it results in a 013-18 message on the system console when the member does not exist. A couple of possible solutions to eliminate the message are (1) just allocate SYSIN to dummy and don’t use it for SIT overrides; (2) add members to the OPID dataset for all KICKS users; (3) install ZP60014 (see http://www.prycroft6.com.au/vs2mods/download/zp60014.zip) to provide &SYSDSN support. Of course this is not an issue under Z/OS.
Nothing says you have to use my clist/exec to run KICKS. Make your own to do whatever you think it should do!
For example the CMS api tests use a customized exec - TKICKS EXEC - to run KICKS in a CRLP environment. It forces CRLP input (and output) even if run in an interactive environment and used TKICKSD to define it's files instead of KICKSD. It also allows you to specify an additional user TXTLIB for programs and tables. Almost all the sample execs (in TESTCOB VMARC and TESTGCC VMARC) use TKICKS this way.
For another example you might want to use KICKS as a ‘hidden’ wrapper for some application of your own. If you suppress the startup messages, make your application the PLTPI startup application, and have your application issue EXEC KICKS SIGNOFF before its final EXEC KICKS RETURN you can easily achieve this. You would use a renamed custom version of the KICKS clist/exec to run your app.


 

KICKS

A transaction processing system for CMS & TSO

Operation

 

File Sharing

KICKS implements VSAM file sharing by the simple expedient of opening files only when access is demanded and closing files at the end of each transaction (or when a blocking terminal read is attempted). Enqueues against the base cluster are issued to ensure opens will succeed without excessive console messages.
This creates a possibility for deadly embrace in that since enqueues are obtained as files are accessed, a program that accesses files in different initial order (based on some criteria) could lock up against another copy of the same program operated by another user – even if that program did not exhibit such behavior under real CICS. If such a scenario is detected KICKS will abend one of the tasks. Programs that exhibit such behavior can be fixed by making them initially access (in fixed order) each of the files they might use.
Since with this scheme only one task will ever be using any file those files should be defined with VSAM shareoptions (1 3) – meaning only one task can have the file open at a time for read or write. Of course in order for multiple users to be able to open the files as needed the files must be allocated DISP=SHR.
This provides for file sharing between KICKS users. It does not allow for file sharing between KICKS users and CICS users, or between KICKS users and normal batch jobs (ie, batch jobs other than KICKS in batch) . CICS and normal batch jobs usually open files at startup and keep them open until the program ends so usually can’t participate in the kind of file sharing KICKS uses.

Shutdown KICKS, prevent any new KICKS startups

In an environment where KICKS is installed at the system level and available to all users it may be desirable to control when KICKS is available and/or shutdown all running KICKS users.
When KICKS is started the clist performs a test allocation of the system level SKIKLOAD dataset. If the attempted allocation fails, the clist issues a message to the TSO user and quits. This behavior allows the operator to control new KICKS logons by cataloging or uncataloging that SKIKLOAD dataset.
So
  • To disable further KICKS logons run a job (or started task) to uncatalog that SKIKLOAD dataset
  • To terminate currently running KICKS tasks ‘P TSO’ (then restart it with S TSO to enable non-KICKS TSO use)
And
  • To re-enable KICKS logons run a job (or started task) to recatalog that SKIKLOAD dataset.

Using KICKS in batch

It's possible to run KICKS as a batch job. Essentially what you do is replace the KICKS clist with similar JCL and allocate two new datasets, CRLPIN and CRPLOUT. These are the input and output side (respectively) of the simulated terminal KICKS uses for the batch run.
The KICKS userid in batch will be either the JOBNAME on the JCL jobcard, or the USERID you specified on the JCL jobcard or that your security system supplied (if you have a security system installed).
The simulated terminal is by default a 24x80 3270 and has a default id of "CRLP". If there is a problem using that as a terminal id - for example some transactions use the terminal id as part of some resource name (a common practice in naming temporary storage queues) - you can use the CRLP transaction to change it.  The CRLP transaction can also change the batch terminal's default behavior from 3270 to a legacy pure card-in / printer-out behavior if necessary (specify PURE or NO3270 to change it, 3270 to change it back).
When the terminal is in legacy mode each record of CRLPIN is presented to the program one at a time without any edits (including line numbers if present) and each terminal write results in printing exactly one line into CRLPOUT. The maximum input or output length is 80 characters.
When NOT in legacy mode:
When the transaction sends 3270 data to the terminal KICKS translates that datastream into a printer representation (pretty much like a screen shot - black characters on a white background, attributes ignored) and writes it to CRLPOUT.
KICKS reads card images from CRLPIN and makes the data available to the transaction. Data on each card should end with a <XXX> , where the XXX can be an upper or lower case command or aid. Commands are REMARK (or just REM), TAB, BTAB, HOME, END, ERASE and <RR,CC> cursor placement. Aids are ENTER, CLEAR, PA1-PA3, and PF1-PF24. Anything following the <XXX> on the card is a remark.
<REM> or <REMARK> is just a way to end terminal input from the current card (allowing remarks to follow) without doing anything.
<TAB> advances the cursor (where data goes) to the next input field.
<BTAB> moves the cursor to the start of the current field, or, if the cursor is already at the start of a field, to the start of the previous field.
<HOME> moves the cursor to the start of the first field on the screen. First being top left most.
<END> moves the cursor to the start of the last field on the screen, Last being the bottom right most. <END> is logically equivalent to <HOME><BTAB>.
<ERASE> fills the remainder of the current field with binary zeros but does not move the cursor.
<RR,CC> places the cursor at row RR (1-24), column CC (1-80).
Since anything following a <XXX>  is a remark only the first <XXX> on the card is a command. (Others being remarks!)
Actually, anything starting with a < is expected to be a <XXX> and terminates input on the card. If you need to enter data containing a < you must 'escape' it using a \, so to enter "here is an <XXX>" you would code "here is an \<XXX>". If you need to enter a \ you would use \\. 
Data on a card preceding the <XXX> is put, character by character, into fields starting at the current cursor location (which is initially wherever the last terminal write left it). If the cursor hits the end of a field it will either advance to the next field, or to the next input field depending on askip as usual. If the field it ends up in does not allow input then any data entered is thrown away without moving the cursor until something (<TAB> ?) does move the cursor. This simulates a 'locked' state.
When a <XXX> is an aid - <ENTER> <CLEAR> <PA1> <PF1> etc - the resulting data is made available to the transaction.
End of file on CRLPIN simulates a <CLEAR> and sets the KICKS shutdown bit, which will take effect when the current transaction (if any) ends.
Here is sample JCL from userid.KICKSSYS.V1R5M0.TESTCOB(BATCH1) to start KICKS and run a couple of transactions.
//BATCH1  JOB  CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),REGION=2000K,
// USER=HERC01
//*
//ALLOW  EXEC PGM=IEFBR14
//ALLOW    DD DSN=HERC01.KICKSSYS.V1R5M0.ALLOW.STARTUP,DISP=SHR
//* fail job if KICKS startup not allowed...
//GO     EXEC PGM=KIKSIP1$,TIME=1,PARM='SIT=1$'
//* kiksip1$ comes from steplib...
//STEPLIB  DD DSN=HERC01.KICKSSYS.V1R5M0.SKIKLOAD,DISP=SHR
//* tables come from skikload...
//SKIKLOAD DD DSN=HERC01.KICKSSYS.V1R5M0.SKIKLOAD,DISP=SHR
//* programs & maps come from kikrpl...
//KIKRPL   DD DSN=HERC01.KICKS.V1R5M0.KIKRPL,DISP=SHR,
//         DCB=BLKSIZE=32000
//         DD DSN=HERC01.KICKSSYS.V1R5M0.KIKRPL,DISP=SHR
//*
//SYSPRINT DD SYSOUT=*,DCB=(RECFM=F,BLKSIZE=80)
//SYSTERM  DD SYSOUT=*,DCB=(RECFM=F,BLKSIZE=80)
//SYSOUT   DD SYSOUT=*,DCB=BLKSIZE=132
//CRLPOUT  DD SYSOUT=*,DCB=(RECFM=F,BLKSIZE=132)
//TRANDUMP DD SYSOUT=*,DCB=(RECFM=F,BLKSIZE=132)
//SYSUDUMP DD SYSOUT=*
//*
//AUXTRC   DD SYSOUT=*,DCB=(RECFM=F,BLKSIZE=120)
//*
//SYSIN    DD DUMMY,DCB=(RECFM=F,BLKSIZE=80)
//*
//TACDATA  DD DSN=HERC01.KICKS.TACDATA,DISP=SHR
//*
//CRLPIN   DD *,DCB=BLKSIZE=80
<clear>            get blank screen to enter next transaction
crlp<REMARK>       the CRLP transaction can be used to set
    <REMARK>       or change the sequential terminal name or options
    <REMARK>       TERMID=xxxx - change name from default CRLP to ?
    <REMARK>       TRIM/NOTRIM - trailing spaces trimmed off (or not)
    <REMARK>       BORDER/NOBORDER - box around screen (or not)
    <REMARK>       ** note that TRIM & BORDER are mutually exclusive
    <REMARK>       ECHO/NOECHO - crlpin echoed to crlpout (or not)
    <REMARK>       TIOA/NOTIOA - generated TIOA displayed (or not)
    <REMARK>       SHOWI/NOSHOWI - input screen displayed (or not)
border<enter>      show current options
<clear>            get blank screen to enter next transaction
BTC0<ENTER>        show the main menu
<PF1>              show the auto refund menu
<PF1>              show the add request screen
10<REM>            YEAR, NO <TAB> 'CAUSE AUTOSKIPPED ALREADY
memyself<erase>    NAME, NO SPACES, AUTOSKIP (except last!)
<TAB>              <tab> can't go on same line <erase> above...
14725 INNER WAY<ERASE>
<TAB>
SITKA<ERASE>
<TAB>
AK<REM>            ST,  NO <ERASE> OR <TAB> 'CAUSE FIELD FILLED
99835<REM>         ZIP, NO <ERASE> OR <TAB> 'CAUSE FIELD FILLED
516384991<REM>     SSN, NO <ERASE> OR <TAB> 'CAUSE FIELD FILLED
43210<ERASE>       GROSS
<TAB>
1NOT<ERASE>        CONTRIB - not numeric, force error
<ENTER>            try to do the add, get error msg
<CLEAR>            back up to auto refund menu
<CLEAR>            back up to main menu
<CLEAR>            back up to 'data entry concluded'
<clear>            get blank screen to enter next transaction
KSSF<ENTER>        LOGOFF - would happen anyway at following /*
/*
//
Here is the output (from DD CRLPOUT) the above JCL produces. I've highlighted the echoed input in yellow...
*--------------------------------------------------------------------------------*
| KSGM for TSO user HERC01   at terminal CRLP       BSP1    08:51:21  02/25/14   |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|            KK        KK   IIIIIIIIII    CCCCCCCCCC   KK        KK   SSSSSSSSSS |
|           KK       KK    IIIIIIIIII   CCCCCCCCCCCC  KK       KK   SSSSSSSSSSSS |
|          KK      KK         II       CC        CC  KK      KK    SS        SS  |
|         KK     KK          II       CC            KK     KK     SS             |
|        KK    KK           II       CC            KK    KK      SSS             |
|       KKKKKKK            II       CC            KKKKKKK        SSSSSSSSS       |
|      KKKKKKK            II       CC            KKKKKKK         SSSSSSSSS       |
|     KK    KK           II       CC            KK    KK               SSS       |
|    KK     KK          II       CC            KK     KK               SS        |
|   KK      KK         II       CC        CC  KK      KK    SS        SS         |
|  KK       KK    IIIIIIIIII   CCCCCCCCCCCC  KK       KK    SSSSSSSSSSSS         |
| KK        KK   IIIIIIIIII    CCCCCCCCCCC  KK        KK    SSSSSSSSSS           |
|                                                                      TM        |
|                                                                                |
|                                                            For TSO             |
|                                                                                |
|                                                            V1R5M0              |
|                                                            January 2014        |
| Press CLEAR to continue...                                 © Mike Noel         |
*--------------------------------------------------------------------------------*

<clear>            get blank screen to enter next transaction

*--------------------------------------------------------------------------------*
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

crlp<REMARK>       the CRLP transaction can be used to set
    <REMARK>       or change the sequential terminal name or options
    <REMARK>       TERMID=xxxx - change name from default CRLP to ?
    <REMARK>       TRIM/NOTRIM - trailing spaces trimmed off (or not)
    <REMARK>       BORDER/NOBORDER - box around screen (or not)
    <REMARK>       ** note that TRIM & BORDER are mutually exclusive
    <REMARK>       ECHO/NOECHO - crlpin echoed to crlpout (or not)
    <REMARK>       TIOA/NOTIOA - generated TIOA displayed (or not)
    <REMARK>       SHOWI/NOSHOWI - input screen displayed (or not)
<enter>            show current options


*--------------------------------------------------------------------------------*
|CRLP TERMID=CRLP NOTRIM BORDER ECHO NOTIOA NOSHOWI 3270                         |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

<clear>            get blank screen to enter next transaction

*--------------------------------------------------------------------------------*
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

BTC0<ENTER>        show the main menu

*--------------------------------------------------------------------------------*
| TACMS01     NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS    TACMENU |
| 02/24/14                                                               02/24/14|
|                                   MASTER MENU                                  |
|                                                                                |
|                                                                                |
|             PRESS THE PF KEY CORRESPONDING TO THE DESIRED FUNCTION             |
|                                                                                |
|             PF1  ---  EMPLOYEE AUTOMATIC REFUND  ------------ PF13             |
|             PF2  ---  MANUAL REFUND  ------------------------ PF14             |
|             PF3  ---  CANCELLATION  ------------------------- PF15             |
|             PF4  ---  DISHONORED ITEM  ---------------------- PF16             |
|             PF5  ---  DEPOSIT  ------------------------------ PF17             |
|             PF6  ---  REDEMPTION  --------------------------- PF18             |
|             PF7  ---  OTHER MANUAL PROCESSES  --------------- PF19             |
|       N/A   PF8  ---  --------------------------------------- PF20   N/A       |
|       N/A   PF9  ---  --------------------------------------- PF21   N/A       |
|       N/A   PF10 ---  --------------------------------------- PF22   N/A       |
|       N/A   PF11 ---  --------------------------------------- PF23   N/A       |
|             PF12 ---  RETURN TO KICKS ----------------------- PF24             |
|                                                                                |
|             IF TERMINAL HAS NO PF KEYS ENTER CODE HERE ====>                   |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

<PF1>              show the auto refund menu

*--------------------------------------------------------------------------------*
| TACMS01     NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS    TACMENU |
| 02/24/14                                                               02/24/14|
|                         EMPLOYEE AUTOMATIC REFUND MENU                         |
|                                                                                |
|                                                                                |
|             PRESS THE PF KEY CORRESPONDING TO THE DESIRED FUNCTION             |
|                                                                                |
|             PF1  ---  ADD    REFUND REQUEST  ---------------- PF13             |
|             PF2  ---  REVIEW REFUND REQUEST  ---------------- PF14             |
|       N/A   PF3  ---  CHANGE REFUND REQUEST  ---------------- PF15   N/A       |
|       N/A   PF4  ---  DELETE REFUND REQUEST  ---------------- PF16   N/A       |
|       N/A   PF5  ---  --------------------------------------- PF17   N/A       |
|       N/A   PF6  ---  --------------------------------------- PF18   N/A       |
|       N/A   PF7  ---  --------------------------------------- PF19   N/A       |
|       N/A   PF8  ---  --------------------------------------- PF20   N/A       |
|       N/A   PF9  ---  --------------------------------------- PF21   N/A       |
|       N/A   PF10 ---  --------------------------------------- PF22   N/A       |
|       N/A   PF11 ---  --------------------------------------- PF23   N/A       |
|             PF12 ---  RETURN TO MASTER MENU  ---------------- PF24             |
|                                                                                |
|             IF TERMINAL HAS NO PF KEYS ENTER CODE HERE ====>                   |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

<PF1>              show the add request screen

*--------------------------------------------------------------------------------*
| TACMS02     NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS    TACARA  |
| 02/24/14                                                               02/24/14|
|                         EMPLOYEE AUTOMATIC REFUND - ADD                        |
|                                                                                |
|                                                                                |
|              CALENDAR YEAR              81                                     |
|                                                                                |
|              NAME                       * * *************                      |
|              ADDRESS FIRST LINE         *************************              |
|              CITY                       **********************                 |
|              STATE                      **                                     |
|              ZIP CODE                   00000                                  |
|                                                                                |
|              SSN                        000000000                              |
|                                                                                |
|              GROSS WAGES                00000000                               |
|              EMPLOYEE CONTRIBUTIONS     00000                                  |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|       TYPE REQUIRED DATA AND PRESS ENTER.  PRESS CLEAR TO RETURN TO MENU.      |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

12<REM>            YEAR, NO <TAB> 'CAUSE AUTOSKIPPED ALREADY
memyself<erase>    NAME, NO SPACES, AUTOSKIP (except last!)
<TAB>              <tab> can't go on same line <erase> above...
14725 INNER WAY<ERASE>
<TAB>
SITKA<ERASE>
<TAB>
AK<REM>            ST,  NO <ERASE> OR <TAB> 'CAUSE FIELD FILLED
99835<REM>         ZIP, NO <ERASE> OR <TAB> 'CAUSE FIELD FILLED
516384991<REM>     SSN, NO <ERASE> OR <TAB> 'CAUSE FIELD FILLED
43210<ERASE>       GROSS
<TAB>
1NOT<ERASE>        CONTRIB - not numeric, force error
<ENTER>            try to do the add, get error msg

*--------------------------------------------------------------------------------*
| TACMS02     NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS    TACARA  |
| 02/24/14                                                               02/24/14|
|                         EMPLOYEE AUTOMATIC REFUND - ADD                        |
|                                                                                |
|                                                                                |
|              CALENDAR YEAR              12                                     |
|                                                                                |
|              NAME                       M E MYSELF                             |
|              ADDRESS FIRST LINE         14725 INNER WAY                        |
|              CITY                       SITKA                                  |
|              STATE                      AK                                     |
|              ZIP CODE                   99835                                  |
|                                                                                |
|              SSN                        516384991                              |
|                                                                                |
|              GROSS WAGES                00043210                               |
|              EMPLOYEE CONTRIBUTIONS     01NOT                                  |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|       TYPE REQUIRED DATA AND PRESS ENTER.  PRESS CLEAR TO RETURN TO MENU.      |
|                                                                                |
| EMPLOYEE CONTRIBUTIONS NOT NUMERIC                                             |
*--------------------------------------------------------------------------------*

<CLEAR>            back up to auto refund menu

*--------------------------------------------------------------------------------*
| TACMS01     NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS    TACMENU |
| 02/24/14                                                               02/24/14|
|                         EMPLOYEE AUTOMATIC REFUND MENU                         |
|                                                                                |
|                                                                                |
|             PRESS THE PF KEY CORRESPONDING TO THE DESIRED FUNCTION             |
|                                                                                |
|             PF1  ---  ADD    REFUND REQUEST  ---------------- PF13             |
|             PF2  ---  REVIEW REFUND REQUEST  ---------------- PF14             |
|       N/A   PF3  ---  CHANGE REFUND REQUEST  ---------------- PF15   N/A       |
|       N/A   PF4  ---  DELETE REFUND REQUEST  ---------------- PF16   N/A       |
|       N/A   PF5  ---  --------------------------------------- PF17   N/A       |
|       N/A   PF6  ---  --------------------------------------- PF18   N/A       |
|       N/A   PF7  ---  --------------------------------------- PF19   N/A       |
|       N/A   PF8  ---  --------------------------------------- PF20   N/A       |
|       N/A   PF9  ---  --------------------------------------- PF21   N/A       |
|       N/A   PF10 ---  --------------------------------------- PF22   N/A       |
|       N/A   PF11 ---  --------------------------------------- PF23   N/A       |
|             PF12 ---  RETURN TO MASTER MENU  ---------------- PF24             |
|                                                                                |
|             IF TERMINAL HAS NO PF KEYS ENTER CODE HERE ====>                   |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

<CLEAR>            back up to main menu

*--------------------------------------------------------------------------------*
| TACMS01     NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS    TACMENU |
| 02/24/14                                                               02/24/14|
|                                   MASTER MENU                                  |
|                                                                                |
|                                                                                |
|             PRESS THE PF KEY CORRESPONDING TO THE DESIRED FUNCTION             |
|                                                                                |
|             PF1  ---  EMPLOYEE AUTOMATIC REFUND  ------------ PF13             |
|             PF2  ---  MANUAL REFUND  ------------------------ PF14             |
|             PF3  ---  CANCELLATION  ------------------------- PF15             |
|             PF4  ---  DISHONORED ITEM  ---------------------- PF16             |
|             PF5  ---  DEPOSIT  ------------------------------ PF17             |
|             PF6  ---  REDEMPTION  --------------------------- PF18             |
|             PF7  ---  OTHER MANUAL PROCESSES  --------------- PF19             |
|       N/A   PF8  ---  --------------------------------------- PF20   N/A       |
|       N/A   PF9  ---  --------------------------------------- PF21   N/A       |
|       N/A   PF10 ---  --------------------------------------- PF22   N/A       |
|       N/A   PF11 ---  --------------------------------------- PF23   N/A       |
|             PF12 ---  RETURN TO KICKS ----------------------- PF24             |
|                                                                                |
|             IF TERMINAL HAS NO PF KEYS ENTER CODE HERE ====>                   |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

<CLEAR>            back up to 'data entry concluded'

*--------------------------------------------------------------------------------*
|DATA ENTRY CONCLUDED                                                            |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

<clear>            get blank screen to enter next transaction

*--------------------------------------------------------------------------------*
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*

KSSF<ENTER>        LOGOFF - would happen anyway at following /*

*--------------------------------------------------------------------------------*
| KICKS is shutting down...                                                      |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
|                                                                                |
*--------------------------------------------------------------------------------*
One use for KICKS in batch is CLG (Compile, Link & Go) debugging of your KICKS transactions - see the various jobs in userid.KICKSSYS.V1R5M0.TESTCOB (and TESTGCC). These jobs are intended to illustrate how to use some of the KICKS API's, but are also useful as models for your own 'CLG' jcl. A few things to notice about those jobs: they use SIT=B$, which pulls in PCT=B$, PPT=B$, FCT=B$, and DCT=B$. SIT=B$ also specifies a null PLTPI, which is why KSGM doesn't show up as the initial screen when you run the TESTJCL jobs. You should examine the tables so you know what is in them, but the most important point is that the PCT has a entry named TCOB that calls a program TESTCOB; and the PPT has an entry TESTCOB for a command level program. So all the CLG test jobs link their programs as TESTCOB, and all the test jobs run the transaction TCOB in batch KICKS.

Supplied Transactions

KICKS is supplied with a number of  transactions and associated programs to assist with its operation These include

KSGM (aka CSGM)

The KSGM transaction is typically used to present the first screen the user sees when KICKS is started. This occurs because KSGM is typically the argument of the SIT PLTPI option, so this transaction is automatically run when KICKS starts.  Since it's the first message, this has been called the "good morning" (ie, GM) message.
The most usual action following display of the KSGM screen is to simply press the CLEAR (or PF3) key and enter the first transaction you need to run. But if you decide to stop and play you'll find you can get rapidly changing set of colors by rapidly pressing the ENTER key (or holding the ENTER key down if your terminal emulator implements repeat in that case). PF1 will display a limited help screen, and PF2 from the help screen will display (and allow you to print) the KICKS license.
The PCT entry for KSGM has an optional "TWASIZE" agrument. KSGM does not actually use a TWA (transaction work area), but it uses the defined size as the number of seconds to delay between changing the colors on the block letters displayed. If a static display (no color updates) is desired simply specify TWASIZE=0 (or omit TWASIZE altoghther). TWASIZE=1 is a special case that always produces exactly the same color combination, it's used for documentation purposes. TWASIZE=2 (meaning 2 seconds between color updates) thru 60 (once a minute) are available.
KSGM requires a PCT entry pointing to the COBOL program KSGMPGM, which in turn requires a PPT entry for KSGMPGM. It also requires a PPT entry for KSGMAPL which defines BMS maps for 24x80, 32x80, 43x80, 32x87, 27x132, and 62x160 screens. Limited help for this program is presented by the GCC program KSGMHLP (which also requires a PPT entry), and the help program may display or print the KICKS license agreement using the COBOL program KSGMLIC (which also requires a PPT entry. KSGMLIC is an example of a KICKS program that uses non-CICS api's, in this case batch COBOL i/o used to read the license from a pds member.
Other PCT entries may also point to KSGMPGM; CSGM (the usual CICS transaction id for the good morning message) is supplied with TWASIZE=0 for a random color but static display, and KSG1 is supplied to access the TWASIZE=1 special "documentation" version of the display.
Source for KSGMPGM (and for KSGMHLP and for KSGMLIC) is in HERC01.KICKSSYS.V1R5M0.COB as one source member KSGMPGM. Source for KSGMAP and KSGMAPL maps are in HERC01.KICKSSYS.V1R5M0.MAPSRC as one source member KSGMMAP.

KSSF (aka CSSF, aka LOGOFF)

The KSSF transaction is used for user initiated KICKS shutdown. The similar CICS transaction, CSSF, refers to "sign off", and indeed signoff is the api that the KSSF transaction will initiate. But signoff from KICKS is the same as shutting down KICKS and returning to TSO...
The KSSF transaction runs KSSFPGM, which, besides putting out a cute little KICKS is shutting down message, mainly does an
    EXEC KICKS SIGNOFF END-EXEC
to tell KICKS it's time to quit (see the SIGNOFF api in the Programming section of this User's Guide).
If you have some action that needs to happen at KICKS shutdown you might be tempted to add them to KSSFPGM. Do NOT. This isn't the only place that the SIGNOFF api might be triggered! For example the batch (CRLP) terminal will signal SIGNOFF when it encounters EOF on the input file (CRLPIN). Instead add your actions to K999PGM (or whatever you are using for a PLTSD program); these will always be executed at shutdown, regardless of the path taken to get there...
KSSF requires a PCT entry pointing to the COBOL program KSSFPGM, which in turn requires a PPT entry for KSSFPGM.
Other PCT entries may also point to KSSFPGM; CSSF (the usual CICS transaction id for 'signoff') is available, as is LOGOFF (LOGO actually, KICKS and CICS only see the first 4 characters of a transaction).
Source for KSSFPGM is in HERC01.KICKSSYS.V1R5M0.COB.

K999

The K999 transaction is typically the last thing run when KICKS is shutdown. This occurs because K999 is typically the argument of the SIT PLTSD option, so this transaction is automatically run just before KICKS quits. 
The K999 transaction runs K999PGM, which, as delivered, is just a shell you can modify to do anything you think needs to happen at that point.
K999 requires a PCT entry pointing to the COBOL program K999PGM, which in turn requires a PPT entry for K999PGM.
Source for K999PGM is in HERC01.KICKSSYS.V1R5M0.COB.

KSMT (aka KEMT, aka CSMT, aka CEMT)

The KSMT transaction is used to display and modify KICKS internal control variables.
 KICKS Master Terminal Program      (maxcc =     0)                             
                                                                                
                                                                                
Press a PF key to obtain indicated action:                                      
                                                                                
PF1  =  SHOW TRACE STATUS                                                       
PF2  =  TOGGLE INTERNAL TRACE ON/OFF                                            
PF3  =  TOGGLE AUX TRACE ON/OFF                                                 
PF4  =  TOGGLE INTENSE TRACE ON/OFF                                             
                                                                                
PF5  =  SHOW ICVR VALUE                                                         
PF6  =  DECREASE ICVR                                                           
PF7  =  INCREASE ICVR                                                           
PF8  =                                                                          
PF9  =                                                                          
PF10 =                                                                          
PF11 =                                                                          
PF12 =  QUIT                                                                    
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
As above,KSMT is PF key driven, PF12 quits.
The KSMT transaction runs the KSMTPGM program
KSMT requires a PCT entry pointing to the COBOL program KSMTPGM, which in turn requires a PPT entry for KSMTPGM. It also requires a set of PPT entries for MACC routines it uses to obtain and change KICKS system information; these entries are KTRCSTA (get trace status), KTRCON (turn trace on), KTRCOFF (turn trace off), KTRCAON (turn aux trace on), KTRCAOF (turn aux trace off), KTRCINON (turn intense trace on), KTRCINOF (turn intense trace off), KICVRGET (obtain ICVR value), KICVRPUT (change ICVR value),  KLASTCCG (get lastcc value), KLASTCCP (change lastcc value), KMAXCCG (get maxcc value), and KMAXCCP  (change maxcc value).
Other PCT entries such as CSMT and CEMT may also point to KSMTPGM.
Source for KSMTPGM is in HERC01.KICKSSYS.V1R5M0.COB. Source for the subroutines is part of the KICKS source distribution, in HERC01.KICKSTS.JCL members KSMTSUBS and LASTCC.

KEDF (aka CEDF)

The KEDF transaction is used to turn the interactive debug facility on or off; to specify on which EXEC KICKS api calls the debug facility is to display it's before/after screens; and to enable source code trace.
When entered as just "KEDF" it displays a table of api calls, each of which is shown as hightlighed (enabled), or not highlighed (not enabled).
 KEDF (1.5.0) is  OFF  to toggle it ON   press PF4            12:31:49  10/21/14
                                                                                
 Highlighed items will be displayed, to change put cursor on item,  press PF5   
                                                                                
                                                                                
                                                                                
    DELETEQ TD      DELETE         ADDRESS       ABEND         RECEIVE          
    READQ TD        ENDBR          ASKTIME       DUMP          RECEIVE MAP      
    WRITEQ TD       READ           ASSIGN        ENTER         SEND TEXT        
                    READNEXT       ENQ           LINK          SEND MAP         
    SPOOLOPEN       READPREV       DELAY         LOAD          SEND CONTROL     
    SPOOLWRITE      RESETBR        DEQ           RELEASE                        
    SPOOLCLOSE      REWRITE        FORMATTIME    RETURN        HANDLE CONDITION 
                    STARTBR        SIGNOFF       XCTL          IGNORE CONDITION 
    DELETEQ TS      UNLOCK         SUSPEND                     HANDLE AID       
    READQ TS        WRITE          SYNCPOINT     FREEMAIN      HANDLE ABEND     
    WRITEQ TS       WRITE OPERATOR               GETMAIN                        
                                                                                
                    SOURCE TRACE                                                
                                                                                
                                                                                
 To highlight all press PF6, to Un-high all press PF7                           
                                                                                
 Enter (or PF3) - exit+save                                  Clear - exit+nosave
KEDF is PF driven. On the top line you will note use of PF4 to turn the debugger on or off. On the bottom line you will note use of ENTER or PF3 to exit with changes saved, and CLEAR to exit with any changes discarded. PF6 is used to highlight (enable) all the api's, and PF7 is used to un-highlight (disable) all the api's.  Individual api's can be toggled between enabled/disabled by moving the cursor to the api name and pressing PF5.
Besides the interactive "KEDF" invocation as above you can also use "KEDF ON" to simply turn on the debugger with current api selection but no source trace, or "KEDF ON/S" to turn in on with current api selection and source trace, or "KEDF OFF" to turn off further debugger interaction.
The KEDF transaction runs KEDFPGM.
KEDF requires a PCT entry pointing to the COBOL program KEDFPGM, which in turn requires a PPT entry for KEDFPGM. It also requires a PPT entry for KEDMAP which defines BMS maps for a 24x80 screen. It also requires a PPT entry for KEDFILTR which is the table of default api trace enable switches that KEDFPGM displays and modifies. It also requires a set of PPT entries for MACC routines it uses to obtain and change KEDF system information; these entries are .
KIKPPT TYPE=ENTRY,PROGRAM=KEDFON,PGMLANG=MACC KEDF ON
KIKPPT TYPE=ENTRY,PROGRAM=KEDFOFF,PGMLANG=MACC KEDF OFF
KIKPPT TYPE=ENTRY,PROGRAM=KEDFSTA,PGMLANG=MACC KEDF STATUS
Other PCT entries may also point to KEDFPGM, especially CEDF, the transid used in CICS systems.
Source for KEDFPGM is in HERC01.KICKSSYS.V1R5M0.COB.Source for KEDMAP is in HERC01.KICKSSYS.V1R5M0.MAPSRC. Source for KEDFILTR is in HERC01.KICKSSYS.V1R5M0.INSTLIB. Source for the subroutines is part of the KICKS source distribution, in HERC01.KICKSTS.JCL member KEDFSUBS.

KEDFILTR

The KEDFILTR table is assembled from source in HERC01.KICKSSYS.V1R5M0.INSTLIB. It is referenced by the online debugger to determine if a given api call should cause a break or not. It is loaded and modified (in memory only) by KEDFPGM.
Each line in the assembler source shows the api's eibfn and a flag value indicating, if zero, that that api call should cause a break, or by a one that the api call should not cause a break. Comments on the line indicate the name of the api call. Note that 9999 is not an api eibfn, rather it is a flag for source trace. Zero marks the end of the list.
Do not rearrange the list; KEDFPGM depends on the existing order...

KSDB

The KSDB transaction reads input generated by the language preprocessors and updates the online source code database used by the debugger to display lines of the source code for a running application. KSDB is intended for batch use only. It is run in the final step of the KIKCB2CS, K2KCOBCS, and KIKGCCCS procs.
The KSDB transaction runs the KSDBLOAD program.
KSDB requires a PCT entry pointing to the COBOL program KSDBLOAD, which in turn requires a PPT entry for KSDBLOAD.  KSDBLOAD is another example of a KICKS program that uses non-CICS api's, in this case batch COBOL i/o used to read the preprocessor input and annotation.
Source for KSDBLOAD is in HERC01.KICKSSYS.V1R5M0.COB.

CRLP

The CRLP transaction is used to control the sequential terminal used when KICKS is run in batch.
An example of use of the CRLP transaction is shown in Using KICKS in Batch.
CRLP requires a PCT entry pointing to the macro level GCC program CRLPPGM, which in turn requires a PPT entry for CRLPPGM.
Source for this program is part of the KICKS source distribution, in HERC01.KICKSTS.ROOT.C member CRLPPGM.

KEBR (aka CEBR)

KEBR is used to browse temporary storage queues and delete them. It is modeled on the CEBR transaction used for the same purpose in CICS. You can also use the KEBR transaction to transfer the contents of a file or transient data queue to temporary storage in order to look at them, and to reestablish the transient data queue when you have finished. The KEBR commands that perform these transfers allow you to add records to a transient data queue and remove all records from a transient data queue. KEBR commands do not edit or delete files.
How to use the KEBR transaction
You start the KEBR transaction by entering the transaction identifier KEBR, followed by the name of the queue you want to browse. For example, to display the temporary storage queue named TSTST, you type:
KEBR TSTST
and press ENTER. KICKS responds with a display of the queue, for example:
 KEBR TS Queue TSTST                                  Line/Item     1 of      7 
 Command ===>                                            Column     1 of    389 
 Transaction Q                                                                  
 Ok                                                                             
       ....|....1....|....2....|....3....|....4....|....5....|....6....|....7.. 
 *** TOP OF QUEUE ******                                                        
 00001 00358491-07-23400015PROM1     000000100000000050000010000000050000000000 
 00002 00358591-07-23400003PROM1               0000000000000000000000000        
 00003 00358691-07-23400007PROM1               0000000000000000000000000        
 00004 00358791-07-23400005PROM1               0000000000000000000000000        
 00005 00358891-07-23400004PROM1               0000000000000000000000000        
 00006 00358991-07-23400016PROM1               0000000000000000000000000        
 00007 00359091-07-23400003PROM1               0000000000000000000000000        
 *** BOTTOM OF QUEUE ******                                                     
                                                                                
                                                                                
       ....|....1....|....2....|....3....|....4....|....5....|....6....|....7.. 
 PF1 : Help          PF2 : HEX/Char     PF3 : Quit          PF4 :               
 PF5 : RFind         PF6 :              PF7 : Back          PF8 : Forward       
 PF9 :               PF10: Left         PF11: Right         PF12: Quit          
If instead you invoke the KEBR transaction and do not supply a queue name the transaction responds by displaying the temporary storage queue whose name consists of the four letters KEBR followed by the four letters of your terminal identifier.
 KEBR TS Queue KEBRU0C0                               Line/Item     0 of      0 
 Command ===>                                            Column     0 of      0 
 Default Q                                                                      
 Can not read that QUEUE                                                        
                                                                                
                                                                                
                                                                                
                                                                                
 PF1 : Help          PF2 : HEX/Char     PF3 : Quit          PF4 :               
 PF5 : RFind         PF6 :              PF7 : Back          PF8 : Forward       
 PF9 :               PF10: Left         PF11: Right         PF12: Quit          
The transaction display consists of a header, a command area, a body (the primary display area), and a menu of functions you can select at this point.
The header The header shows:
  • The transaction being run, that is, KEBR.
  • The identifier of the temporary storage queue. You can overtype this field in the header if you want to switch the screen to another queue.
  • The number of the top record in the body.
  • The number of records in the queue (seven in TSTST and none in KEBRU0C0).
  • The position in each record at which the screen starts (position 1 for queue TSTST, zero for queue KEBRU0C0) and the length of the longest record (389 for queue TSTST and zero for queue KEBRU0C0).
The command area
The command area is where you enter commands that control what is to be displayed and what function is to be performed.
The body
The body is where the command response, queue records, and other indicators are shown.
When a command (other than positioning) is complete the top two lines of the body display the text of the command and the response.
Indicators include "*** TOP OF QUEUE ******" (white), "*** TOP OF QUEUE ******" (white), and rulers (magenta). Rulers can be turned on or off using either the RULER command.
Queue records are prefaced by their 5 digit item number and begin one space thereafter at the item position indicated in the header. If a record is too long for the line, it is truncated. You can change the portion of the record that is displayed, however, so that you can see an entire record on successive screens. If the queue contains more records than will fit on the screen, you can page forward and backward through them, or specify at what record to start the display, so that you can see all the records you want.
The menu of functions
The function keys that you can use are displayed at the bottom of every KEBR screen. The keys have the same meaning on all screens.
PF1 (command HELP) - Displays a help screen that lists all the commands you can use when the KEBR transaction is running. You can return to the main screen by pressing ENTER.
PF2 (command HEX) - Switches the screen from character to hexadecimal format, and back again. In hexadecimal format each item requires 3 lines: The first line is exactly as the character format display. The following two lines are 'vertical' hex of the characters in the first line.
PF3 (command QUIT) - Terminates the KEBR transaction. Same as PF12. Shift-PF3 (PF15) and Shift-PF12 (PF24) also quit.
PF5 (command RFIND) - Repeats the previous FIND command. Shift-PF5 (PF17) changes direction then does the RFIND.
PF7 - Moves the display backward by the number of records that fit on the screen. Shift-PF7 (PF19) moves he display backward to the top.
PF8 - Advances the display by the number of records that fit on the screen, Shift-PF8 (PF20) moves he display forward to the bottom.
PF10 (command LEFT) - Changes the screen to show the columns immediately after (to the right of) the columns currently on display. You can also use the COLUMN command to change the column at which the display begins.
PF11 (command RIGHT) - Changes the screen to show the columns immediately before (to the left of) the columns currently on display. You can also use the COLUMN command to change the column at which the display begins.
PF12 (command QUIT) - Terminates the KEBR transaction. Same as PF3. Shift-PF3 (PF15) and Shift-PF12 (PF24) also quit.
KEBR 'cursor' scrolling
KEBR scrolls by full screens, but like ISPF it is possible to make any item the top or bottom line on the screen by placing the cursor on that item before pressing PF7 or PF8 (respectively). In a similar manner it is possible to modify the LEFT and RIGHT scrolls by placing the cursor on the desired first or last column of an item before pressing PF10 or PF11 (respectively).
KEBR commands
BOTTOM (Abbreviation: BOT) Shows the last records in the temporary storage queue (as many as fill up the body of the screen, with the last record on the last line).
COLUMN nnnn  (Abbreviation: COL nnnn) Displays the records starting at character position (column) nnnn of each record. The default starting position, assumed when you initiate the KEBR transaction, is the first character in the record.
FIND [FWD/BWD] string (Abbreviation: F string) Finds the next (or previous) occurrence of the specified string. FWD is optional, being assumed if unspecified. The search starts one character after (or before) the top left item/column displayed. If the string is found, the body is scrolled to that line and column, thus making the sought string the new top left. If the string is not found the body is not scrolled, and a "NOT FOUND" message is shown. The value that you specify can be in character format (for example, find  ABCD) or in hexadecimal format (for example, find x'F0F1F2'). In a character search delimiters of your choice may optionally be used; ie, if the first and last characters of the string are the same they are assumed to be delimiters. A hexadecimal search is conducted using an even number of hex digits, so if you specify an odd number of digits a leading zero is assumed.
HELP Displays a brief summary of the KEBR commands
LEFT Changes the screen to show the columns immediately after (to the right of) the columns currently on display. You can also use the COLUMN command to change the column at which the display begins.
LINE nnnn Starts the body of the screen at the queue record nnnn, and sets the current line to nnnn.
PURGE Deletes the queue being browsed.
PUT xxxx Copies the temporary storage queue that is being browsed to the named transient data queue. xxxx must be either the name of an intrapartition transient data queue, or the name of an extrapartition transient data queue that has been opened for output. The special queue name SYSOUT is recognized making PUT SYSOUT an alias for PRINT.
PRINT [CLASS x LPP nn FIRST nnnn ITEMS nnnn] Prints a report of the current queue, either as lines of printable characters, or as vertical hex depending on the current screen display. Rulers or not, also as per the current display. Output class, lines per page, starting item number and number of items can be specified with optional arguments in any order. The defaults are CLASS A LPP 60 FIRST 1 ITEMS 50.
QUEUE xxxxxxxx (Abbreviation: Q xxxxxxxx) Changes the name of the queue you are browsing. The value that you specify can be in character format (for example, QUEUE ABCD) or in hexadecimal format (for example, QUEUE X'C1C2C3C4'). The KEBR transaction responds by displaying the data that is in the named queue. You can also change the queue name by overtyping the current value in the header.
=X
CANCEL
END
QUIT the command (and several aliases) used to quit the KEBR transaction. The screen will clear and the message "Browse ended normally. Ready for next transaction:" is shown.
REFRESH (same as just pressing ENTER) The queue is re-read and displayed at the current item and offset (if possible).
RFIND {FWD/BWD] repeats the previous find, changing direction as necessary if FWD or BWD is specified. If neither is specified the repeated find is in the direction of the last FIND or RFIND.
RIGHT Changes the screen to show the columns immediately after (to the left of) the columns currently on display. You can also use the COLUMN command to change the column at which the display begins.
RULER Toggles on/off the display of rulers and the top and bottom of the body to make it easier to determine data location.
TERM [xxxx] Changes the name of the queue you are browsing, but is tailored to applications that use the convention of naming temporary storage queues that are associated with a terminal by a constant in the first four characters and the terminal name in the last four. The new queue name is formed from the first four characters of the current queue name, followed by xxxx. If xxxx is not specified the current terminal id is used.
TOP Causes the KEBR transaction to start the display at the first record in the queue.
VGET xxxxxxxx [FIRST nnnn RECS nnnn] Transfers records of the named file to the end of the temporary storage queue currently on display. This enables you to browse the contents of the file. xxxxxxxx must be the name of a vsam file (ksds, esds, rrds, or path) defined in the FCT. The optional arguments FIRST and RECS specify the first record and the number of records to read. Either or both may be specified in any order following the file name. The defaults are FIRST 1 RECS 100.
Using the KEBR transaction with transient data
The GET command reads each record in the transient data queue that you specify and writes it at the end of the temporary storage queue you are browsing, until the transient data queue is empty. You can then view the records that were in the transient data queue. When you have finished your inspection, you can copy the temporary storage queue back to the transient data queue (using the PUT command). This usually leaves the transient data queue as you found it, but not always. Here are some points you need to be aware of when using the GET and PUT commands:
  • If you want to restore the transient data queue unchanged after you have browsed it, make sure that the temporary storage queue on display at the time of the GET command is empty. Otherwise, the existing temporary storage records will be copied to the transient data queue when the subsequent PUT command is issued.
  • After you get a transient data queue and before you put it back, other tasks may write to that transient data queue. When you issue your PUT command, the records in the temporary storage queue will be copied after the new records, so that the records in the queue are no longer in the order in which they were originally created. Some applications depend on sequential processing of the records in a queue.
The GET and PUT commands do not need to be used as a pair. You can add to a transient data queue from a temporary storage queue with a PUT command at any time. If you are debugging code that reads a transient data queue, you can create a queue in temporary storage (with the KEBR GET command, or by program) and then refresh the transient data queue as many times as you like from temporary storage. Similarly, you can empty a transient data queue by using a GET command without a corresponding PUT command.
More KEBR details
KEBR requires a PCT entry pointing to the COBOL program KEBRPGM, which in turn requires a PPT entry for KEBRPGM. PPT entries for KEBRM (the map) and KEBRHELP (the loaded help file) are also required.
Other PCT entries such as CEBR may also point to KEBRPGM.
Source for KEBRPGM and KEBRHELP is in HERC01.KICKSSYS.V1R5M0.COB. Source for KEBRM is in HERC01.KICKSSYS.V1R5M0.MAPSRC as member KEBRMAP.

KLOGIT

The KLOGIT program allows you to easily put a message onto the KICKS log (destination 'LOG ') with your message automatically prefaced by the date, time, user id, terminal id, and transaction id.
See for example any of the TESTFILE suite programs that use this to report unexpected returns.
KLOGIT requires a PPT entry for KLOGIT. Source for KLOGIT is in HERC01.KICKSSYS.V1R5M0.GCC.

LASTCC

The LASTCC programs allow you to set and retrieve the last and highest return codes in a current KICKS run. KICKS maintains the MAXCC as the highest set value of LASTCC or MAXCC. When KICKS ends it reports the then current value of MAXCC as the return code.
KLASTCCG (get) returns the lastcc as a S9(8) comp item.
KLASTCCP (put) sets the lastcc from a S9(8) comp item.
KMAXCCG (get) returns the maxcc as a S9(8) comp item.
KMAXCCP (put) sets the maxcc from a S9(8) comp item.
Most KICKS applications do not use these routines, and neither normal nor abend transaction ending sets  LASTCC/MAXCC, so KICKS normally shuts down with a return code of zero. If you want to change that you can use these programs to set LAST or MAX CC. See for example the KSDBLOAD program...
The required PPT entries are part of the KSMT group. Source for these programs is part of the KICKS source distribution, in HERC01.KICKSTS.JCL member LASTCC.

SYNCXIT

The SYNCXIT program is a sample syncpoint exit, coded as a command level COBOL program. The sample simply LINK's to KLOGIT to report each type of entry (transaction start, transaction end, transaction abend, syncpoint commit, syncpoint rollback) as it is made.
SYNCXIT requires a PPT entry for SYNCXIT . Source for SYNCXIT is in HERC01.KICKSSYS.V1R5M0.COB.

DSNHDECP

The DSNHDECP program is not included with KICKS, but a PPT for it (as a assembler table) is. This PPT entry causes KICKS to try to load DSNHDECP into memory on startup. KICKS never calls or uses this module, but if any of your applications use DB2 then the in memory copy of DSNHDECP will specify the DB2 subsystem to be used.
Copy member DSNHDECP from an 'appropriate' (meaning the one for the DB2 subsystem you intend to use) SDSNEXIT library to your KIKRPL library. Your application will use a CAF 'implicit' connection to DB2, and CAF will obtain the id of the DB2 subsystem to connect to by looking in the DSNHDECP member.


KICKS
A transaction processing system for CMS & TSO

Programming

A KICKS application consists of a a group of related objects. The first set of objects in the group are the MAPS that define terminal input and output characteristics. The second is set of objects are PROGRAMS that may use the MAPS to interact with the terminal, implement some kind of business logic, and optionally commit the results of the logic to external FILES, which are a third set of objects.
The relationship between KICKS application objects is created by the KICKS system tables (see KICKS configuration section) and by the programs that use the other objects.

Generating BMS maps

KICKS supports 3270 BMS maps much like CICS BMS maps. KICKS uses macros named KIKMSD, KIKMDI, and KIKMDF instead of DFHMSD, DFHMDI, and DFHMDF, but with similar arguments. To make conversion easier it also support ‘dummy’ versions of DFHMSD, DFHMDI, and DFHMDF that do nothing but invoke KIKMSD, KIKMDI, and KIKMDF respectively. This allows for generation of maps directly from source originally intended for CICS.
Detailed instructions for coding BMS maps may be found by simply Googling "BMS map". I recommend the IBM sites. Another excellent set of resources are the Murach books "CICS for the COBOL Programmer" and "CICS Programmer's Desk Reference". And don't overlook our own KooKbooK recipes!
The map you code needs to be translated into three separate components. The first is a COBOL copybook you include with each COBOL program that will use the map. The second is a GCCMVS include file you include with each GCC program that will use the map. The third is a binary representation of the map that KICKS will use to format the screen as you describe and to process input data from the screen when the user presses ‘enter’.
On an MVS system the KIKMAPS proc is used to directly generate the COBOL and GCC copybooks and binary representation from the map source. The proc takes arguments as indicated in the proc header below
//KIKMAPS PROC SOUT='*',                             
//          DSCTLIB='COBCOPY',                       
//          DSCTLIC='GCCCOPY',                       
//          MAPLIB='KIKRPL',                         
//          KIKSSYS='HERC01.KICKSSYS',               
//          KIKSUSR='HERC01.KICKS',                  
//          VER='V1R5M0',                            
//          ASM='IFOX00',           (ASMA90 FOR Z/OS)
//          MAPNAME='DUMMY'                          
The proc header is customized during installation so that it is usually only necessary to specify the MAPNAME of the map to be gnerated.
Most of the proc arguments should be self explanatory. The step names are COPY, BMAP, ASM, LINKMAP COBMAP, and GCCMAP. BMAP, COBMAP, and GCCMAP are the KICKS map translator executions and return condition 2-comment, 4-warning; 8-error; 12-fatal error.
Numerous examples of use of proc can be seen in the members of HERC01.KICKS.V1R5M0.MAPSRC, which compiles the sample program maps.
On a VM/CMS system the KIKMG exec  is used to directly generate the COBOL and GCC copybooks and binary representation from the map source. It takes arguments as below
        mapname filetype filemode txtlib  coblib   gcclib   asmnam
default -       MAPSRC   A        KIKURPL KIKCOUSR KIKGCUSR ASSEMB

There is no particular install customization of this exec.
Additional detail about the arguments can be obtained by typing KIKMG without any arguments. The steps executed are the same as in MVS/TSO: COPY, BMAP, ASM, LINKMAP COBMAP, and GCCMAP. BMAP, COBMAP, and GCCMAP are the KICKS map translator executions and return condition 2-comment, 4-warning; 8-error; 12-fatal error.
Numerous examples of use of this execs can be seen in the KIKSAMPM EXEC which compiles the sample program maps.
Whether MVS or VM/CMS, the map generator step(s) are controlled thru parm switches, ie
  -list     list stdin to stderr
* -nolist   do not list stdin to stderr
  -g=dsect  override source msd type with 'dsect'
  -g=map    override source msd type with 'map'
  -l=cobol  override source msd lang with 'COBOL'
  -l=c      override source msd lang with 'c'
* -t        translate DFH's to KIK's; CICS's to KICKS's
  -nt       do not translate DFH's and CICS's
  -v        show version
  -?        list help

where '*'s are built-in defaults; effectively what you get with KIKMG.
It is not usually necessary to be concerned with these; the exec/proc sets appropriate values for each pass.

Compiling COBOL programs

Detailed instructions for designing and coding COBOL programs for KICKS may be found by simply Googling "CICS programming". I recommend the IBM sites. Another excellent set of resources are the Murach books "CICS for the COBOL Programmer" and "CICS Programmer's Desk Reference". And don't overlook our own KooKbooK recipes!
Preparing a command level COBOL program to run in KICKS requires three steps:
  1. Run the KICKS command level pre-processor against the COBOL source, generating intermediate source that has been modified as necessary for the current release of KICKS. The pre-processor’s primary function is to translate “EXEC KICKS … END-EXEC” statements into a variety of COBOL statements necessary to implement the desired function. In most cases this ultimately turns into a call to KIKCOBGL which is the KICKS stub that is link edited into every KICKS command level program. To ease conversion of CICS programs to KICKS the pre-processor accepts “EXEC CICS” as equivalent to “EXEC KICKS”. It also generally sees anything starting with DFH as starting with KIK, so for example you don’t have to change something like DFHRESP to it equivalent KIKRESP – the preprocessor will do that for you.
  2. Compile the intermediate source with the COBOL compiler.
  3. Linkedit the compiled program, including KIKCOBGL for the current release of KICKS and place the resulting load module into a PDS in the KIKRPL concatenation of the KICKS clist.
An optional 4th step is to add the source code to an online vsam file so that the debugger's source trace facility can display it at run time. This is discussed in the KEDF section of this User's Guide.
On an MVS system several procs are supplied for doing all this, each proc corresponding to a different COBOL compiler. The first of these is K2KCOBCL, for the MVT ANSI COBOL compiler. This is the compiler on the Tur(n)key MVS system. It would not normally be installed on a Z/OS system, but is available for download at http://www.jaymoseley.com/hercules/compilers/cobol.htm.
K2KCOBCL's proc header looks like
//K2KCOBCL PROC SOUT='*',ZOUT='Z',                    
//           UNT='SYSDA',                             
//           KIKSSYS='HERC01.KICKSSYS',               
//           KIKSUSR='HERC01.KICKS',                  
//           VER='V1R5M0',                            
//           CBLPARM='SUPMAP,DMAP,CLIST'              
The proc will have been customized during install so that the default values will contain your TSO id instead of 'HERC01'. Tur(n)key or Z/OS, it is not usually necessary to override these customized defaults.
Most of the proc arguments should be self explanatory. The step names are COPY. PP1, COB1,  PP2, COB2, and LKED. COBs requires a condition code of less than 4 from PPs, and LKED requires condition codes of less than 4 from both PP and COB. PP’s condition code values are 2-warning; 4-error; 8-severe error; 12-fatal error (PP aborts).
Digression: Why are the preprocessor & compiler executed twice?

KICKS users upgrading from past releases will notice the name of this
proc has changed. The old proc, KIKCOBCL, is still available but
should not be used. The primary difference between them is that the
new proc executes the preprocessor and COBOL compiler twice, instead
of once as does the old proc. Why?? Because many KICKS api calls
require an argument length. 'Modern' compilers support a LENGTH OF
construct that allows the preprocessor to supply this length if it is
omitted. The ANSI MVT compiler supplied with the MVS Tur(n)key system
does not. To compensate for this missing COBOL feature the preprocessor
supplies the feature. It does so by using two passes; the first to
obtain the compiler DMAP (ie, symbol table), the second pass to provide
the required lengths by referencing the DMAP from the first pass.
Another COBOL compile proc is KIKCB2CL, for a 'modern' program product COBOL compiler. It's proc header looks like
//KIKCB2CL PROC SOUT='*',ZOUT='Z',                   
//           UNT='SYSDA',                            
//           KIKSSYS='HERC01.KICKSSYS',              
//           KIKSUSR='HERC01.KICKS',                 
//           VER='V1R5M0',                           
//           CBLPARM='OFFSET,MAP,XREF'               
The proc will have been customized during install so that the default values will contain your user id instead of 'HERC01'.. It is not usually necessary to override these customized defaults.
The rest of the proc arguments are similar to K2KCOBCL. The step names are the same except that since COBOL2 supports "LENGTH OF" the preprocessor and compiler and only executed once in this proc, so PP1 and COB1 are missing.
Besides K2KCOBCL & KIKCB2CL there are 2 similar procs, K2KCOBCS & KIKCB2CS, that are used when you need to setup your program for use with the KEDF source code trace facility and  are further explained in that section of the User's Guide.
Numerous examples of use of these procs can be seen in HERC01.KICKSSYS.V1R5M0.COB (CB2 for COBOL2) which compile the sample programs. Briefly, most of them look like this
//asdf JOB                                           
// EXEC PROC=K2KCOBCL    (or KIKCB2CL for COBOL2)    
//COPY.SYSUT1 DD *                                   
…COBOL source…                                       
/*                                                   
//LKED.SYSIN DD *                                    
INCLUDE SKIKLOAD(KIKCOBGL)                           
ENTRY asdf                                           
NAME asdf(R)                                         
/*                                                   
Where "ENTRY asdf" and  "NAME asdf" both reference the PROGRAM-ID in the ID DIVISION.
On an VM/CMS system several execs are supplied for doing all this, each exec corresponding to a different COBOL compiler.
The first of these is K2KCOBCL, for the MVT ANSI COBOL compiler. This is the compiler on the VM/370 turnkey system. It would not normally be installed on a Z/VM system, but is available for download at http://www.jaymoseley.com/hercules/compilers/cobol.htm.  The arguments for this exec are:
         pgmname filetype filemode txtlib  maclib glue   
defaults -       COBOL    A        KIKURPL *      KIKCOBGL

There is no particular install customization of this exec.
Another COBOL compile exec is KIKCB2CL, for a 'modern' program product COBOL compiler. It's arguments are the same as K2KCOBCL.
Additional detail about the arguments of these execs can be obtained by typing them without any arguments. The steps executed are the same as in MVS/TSO.
Numerous examples of use of these execs can be seen in the KIKSAMPP EXEC which compiles the sample programs.
It's worth noting that the same KICKS COBOL preprocessor is used on all systems, MVS or VM, legacy or modern. The environmental differences are passed from the clist/exec to the preprocessor mostly thru parm switches, ie
  -s        generate for source debugger
* -ns       do not generate for source debugger
* -t        translate DFH's to KIK's; CICS's to KICKS's
  -nt       do not translate DFH's and CICS's
  -cb2      generate for COBOL 2 instead of ansi COBOL
* -ncb2     generate for ansi COBOL instead of COBOL 2
* -wc       preprocess 'when compiled'
  -nwc      do not preprocess 'when compiled'
* -ndmap    no dmap processing
  -dmapin1  do 1st pass dmap processing
  -dmapin2  do 2nd pass dmap processing
  -nosyslib disable pre-processor 'copy' function
  -nokicks  generate for use in normal batch (or for CICS) (not KICKS) apps
  -v        show version
  -?        show help
where '*'s are built-in defaults; effectively what you get with K2KCOBCL. KIKCB2CL overrides to provides "-cb2".
It is not usually necessary to be concerned with these; the proc/exec sets appropriate values. But sometimes you may not want to translate DFH's and CICS's, and/or may not want "when compiled" handled by the pre-processor. Of course you could make your own special copy of K2KCOBCL to handle that but there is an easier way. The pre-processor understands a few simple  'markup' tags that you can add to your source program to control the pre-processor's actions. These tags begin with a "<" in column 1, followed by a tag, followed by a ">", with the remainder or the line subsequently ignored.  Note that none of these tags may be used within an 'EXEC' block. Here are the tags the pre-processor understands:
<T>         following lines handled as if "-t" were specified
<NT>        following lines handled as if "-nt" were specified 
<WC>        following lines handled as if "-wc" were specified
<NWC>       following lines handled as if "-nwc" were specified
So for example you could use <NT> at the top of a program that didn't want CICS's and DFH's translated; or you could put a <NT> just before lines with such strings in them and then put a <T> after them allowing translations everywhere but the selected lines.
Besides the parm switch overrides the pre-processor also supports matched sets of tags. These allow you to conditionally include program lines. The syntax is <xxx> to start, then the lines for that condition, then </xxx> to stop. Conditions are
<CB2>       lines to </CB2> only generate if -cb2 parm is set
<NCB2>      lines to </NCB2> only generate if -cb2 parm is not set

<TSO>       lines to </TSO> only generate if compiled on KICKS for TSO.
<NTSO>      lines to </NTSO> only generate if not KICKS for TSO.
         do not assume 'not KICKS for TSO' means 'is KICKS for CMS'

<CMS>       lines to </CMS> only generate if compiled on KICKS for CMS.
<NCMS>      lines to </NCMS> only generate if not KICKS for CMS.

<NOP>       lines to </NOP> do not generate.
<REM>       for a one line remark. There is no </REM>
<KICKS>     lines to </KICKS> only generate if -nokicks parm is not set
<NOKICKS>   lines to </NOKICKS> only generate if -nokicks parm is set 

<SD>, </SD>, <SN> are used in connection with source code tracing and are explained in that section of the documentation.

Compiling GCCMVS programs

A GCC C compiler (GCCMVS) and library (PDPCLIB) is included with most legacy MVS and VM/370 distributions and can also be installed on a Z/OS or Z/VM system.
Detailed instructions for designing and coding C programs for KICKS are not easy to find, but one place with numerous examples is the SAS C documentation site. KICKS with GCC is not exactly the same as CICS with SASC, but quite similar. And don't overlook our own KooKbooK recipes!
Preparing a command level GCCMVS program to run in KICKS requires three steps:
  1. Run the KICKS command level pre-processor against the C source, generating intermediate source that has been modified as necessary for the current release of KICKS. The pre-processor’s primary function is to translate “EXEC KICKS … ;” statements into a variety of C statements necessary to implement the desired function. In most cases this ultimately turns into a call to KIKGCCGL which is the KICKS stub that is link edited into every KICKS command level program. To ease conversion of CICS programs to KICKS the pre-processor accepts “EXEC CICS” as equivalent to “EXEC KICKS”. It also generally sees anything starting with DFH as starting with KIK, so for example you don’t have to change something like DFHRESP to it equivalent KIKRESP – the preprocessor will do that for you.
  2. Compile the intermediate source with the GCCMVS compiler.
  3. Linkedit the compiled program, including KIKGCCGL for the current release of KICKS from HERC01.KICKSSYS.V1R5M0.SKIKLOAD, and place the resulting load module into a PDS in the KIKRPL concatenation of the KICKS clist.
An optional 4th step is to add the source code to an online vsam file so that the debugger's source trace facility can display it at run time. This is discussed in the KEDF section of this User's Guide.
On an MVS system the KIKGCCCL proc is supplied for doing all this. It's proc header looks like
//KIKGCCCL PROC OUTC='*',LAOUTC='Z',LBOUTC='Z',      
//           UNT='SYSDA',                            
//           KIKSSYS='HERC01.KICKSSYS',              
//           KIKSUSR='HERC01.KICKS',                 
//           VER='V1R5M0',                           
//           ASM='IFOX00',            ASMA90 FOR Z/OS
//           COPTS='',                               
//           LOPTS='XREF,MAP',                       
//           GCCPREF='HERC01.GCC.V80',               
//           PDPPREF='HERC01.PDPCLIB.V80'            
The proc will have been customized during install so that the default values will contain your user id instead of 'HERC01'.
The GCCPREF and PDPPREF default values will probably have to be manually customized. On an MVS380 system they should be 'GCC' and 'PDPCLIB' respectively. On other systems that will likely vary. For example on a Z/OS system GCCMVS will likely have been installed by the TSO user with his own TSO id as a HLQ, and it may be that he would have installed it with a lower level qualifier (like 'V80') to denote what version of the compiler and library was used.
LAOUTC and LBOUTZ are sysout classes for optional listings for the preprocessor C source input and the C source output respectively. Normally they are directed to a JES dummy queue (usually Z), but you may want to override them if errors are detected. If the preprocessor complains about something it will indicate a line number and that number will correspond to a line number in the LAOUTC sysout. If the compiler complains about something it will indicate a line number and that number will correspond to a line number in the LBOUTC sysout.
Most of the other proc arguments should be self explanatory. The step names are COPY, LISTA, PP2, LISTB, COMP, ASM, and LKED. The list steps provides a listing of the preprocessor input and output, with line numbers, so that diagnostics from the compiler and be traced to the offending line of source. This is necessary because the GCCMVS compiler does not provide a listing itself. COMP requires a condition code of less than 4 from PP, and LKED requires condition codes of less than 4 from both PP and COMP. PP’s condition code values are 2-warning; 4-error; 8-severe error; 12-fatal error (PP aborts).
Besides KIKGCCCL there is a similar proc, KIKGCCCS, that is used when you need to setup your program for use with the KEDF source code trace facility and is further explained in that section of the User's Guide.
Some examples of use of these procs can be seen in HERC01.KICKSSYS.V1R5M0.TESTGCC which compile the api test programs. Briefly, most of them look like this
//asdf JOB                                           
// EXEC PROC=KIKGCCCL                                
//COPY.SYSUT1 DD *                                   
…GCC source…                                         
/*                                                   
//LKED.SYSIN DD *                                    
INCLUDE SKIKLOAD(KIKGCCGL)                           
ENTRY @@KSTRT                                        
NAME asdf(R)                                         
/*                                                   
Where "NAME asdf" matches the name you defined for this program in the PPT. If you use a <SN xxxxxxxx> preprocessor markup statement the name in your linkedit NAME statement should match.
On an VM/CMS system similarly named KIKGCCCL and KIKGCCCS execs are supplied for the same purpose. The arguments for the KIKGCCCL exec are:
         pgmname filetype filemode txtlib  maclib glue     asmname 
defaults -       C        A        KIKURPL *      KIKGCCGL ASSEMBLE

There is no particular install customization of this exec.
Additional detail about the arguments of these execs can be obtained by typing them without any arguments. The steps executed are the same as in MVS/TSO.
Numerous examples of use of these execs can be seen in the members of TESTGCC VMARC, which compiles the api test programs.
It's worth noting that the same KICKS GCC preprocessor is used on all systems, MVS or VM, legacy or modern. The environmental differences are passed from the clist/exec to the preprocessor mostly thru parm switches, ie
  -s        generate for source debugger
* -ns       do not generate for source debugger
* -t        translate DFH's to KIK's; CICS's to KICKS's
  -nt       do not translate DFH's and CICS's
  -v        show version
  -nokicks  generate for use in normal batch (or for CICS) (not KICKS) apps
  -?        show help
where '*'s are built-in defaults; effectively what you get with KIKGCCCL.
It is not usually necessary to be concerned with these; the proc sets appropriate values. But sometimes you may not want to translate DFH's and CICS's. Of course you could make your own special copy of KIKGCCCL to handle that but there is an easier way. The pre-processor understands a few simple  'markup' tags that you can add to your source program to control the pre-processor's actions. These tags begin with a "<" in column 1, followed by a tag, followed by a ">", with the remainder or the line subsequently ignored.  Note that none of these tags may be used within an 'EXEC' block. Here are the tags the pre-processor understands:
<T>         following lines handled as if "-t" were specified
<NT>        following lines handled as if "-nt" were specified 
So for example you could use <NT> at the top of a program that didn't want CICS's and DFH's translated; or you could put a <NT> just before lines with such strings in them and then put a <T> after them allowing translations everywhere but the selected lines.
Besides the parm switch overrides the pre-processor also supports matched sets of tags. These allow you to conditionally include program lines. The syntax is <xxx> to start, then the lines for that condition, then </xxx> to stop. Conditions are
<TSO>       lines to </TSO> only generate if compiled on KICKS for TSO.
<NTSO>      lines to </NTSO> only generate if not KICKS for TSO.
         do not assume 'not KICKS for TSO' means 'is KICKS for CMS'

<CMS>       lines to </CMS> only generate if compiled on KICKS for CMS.
<NCMS>      lines to </NCMS> only generate if not KICKS for CMS.

<NOP>       lines to </NOP> do not generate.
<REM>       for a one line remark. There is no </REM>
<KICKS>     lines to </KICKS> only generate if -nokicks parm is not set
<NOKICKS>   lines to </NOKICKS> only generate if -nokicks parm is set 

<SD>, </SD>, <SN> are used in connection with source code tracing and are explained in that section of the documentation.

KICKS (CICS) API

KICKS tries to be compatible with the application programming api (Application Programming Interface) as defined in CICS Application Programming Reference, SC33-1688, available online as DFHP400.PDF. Another good reference to this api is Murach's CICS Desk Reference.
The api is implemented using EXEC blocks. These blocks are "embedded" in the host programming language (COBOL or GCCMVS), parsed by a preprocessor that replaces the blocks with host language calls to a code library, then the output from the preprocessor is compiled by the host language compiler.
The blocks start with EXEC KICKS, then continue with the name of the function desired, followed by any required and optional arguments for that function, and finish with an END-EXEC. A block may be split over several lines and no continuation markup is required or allowed within it, however individual parameters within the block should not be split across lines. The block should be entirely upper case except, in the case of GCCMVS, for lower case letters that are part of variable names used in function arguments. No host language statements, including comments, should be on any line of the block.
The sole exception to "no host language statements" is that, in COBOL programs, a period may immediately follow the END-EXEC (same line). This period will be placed  immediately following the code for the host language calls generated by the block. If no period follows the END-EXEC the generated code will not contain any periods. This behavior is useful when you need such a block inside a COBOL 'if' statement.
In GCCMVS programs the END-EXEC is replaced by a semicolon.  These semicolons are 'consumed' by the preprocessor and should not be followed by further statements or comments on the same line. The code generated for the host language calls will be bracketed "{}" so that blocks may be safely placed within normal C constructs (such as 'if' statements).
The following table lists each supported function with a description of its purpose, a syntax diagram, arguments, and exceptional conditions. Syntax is shown for use in COBOL programs but use in GCCMVS programs is identical except that the END-EXEC's are replaced with semicolons.
Although none of the syntax diagrams show it, any of the functions in this table may be coded using the error recovery/reporting arguments NOHANDLE, RESP(data-area), or RESP2(data-area). For RESP the data-area is a PIC S9(4) COMP item (a "short" item for GCCMVS) which will receive a copy of EIBRESP. For RESP2 the data-area is also PIC S9(4) COMP and will receive a copy of EIBRESP2. If none of these are coded, "Exceptional Conditions" will almost always cause an associated transaction abend. Further, regarding "Exceptional Conditions":
  • these are run-time conditions, not preprocessor diagnostics.
  • reported conditions should be the same as CICS, but KICKS reports conditions as they are discovered and multiple conditions might not be discovered in the same order, which could result in CICS and KICKS reporting different conditions.
ABEND
Purpose:
The ABEND function forces the current task to terminate abnormally. If a HANDLE ABEND is in effect control will be transferred to the routine it specifies, otherwise control returns to KICKS.
Syntax:
EXEC KICKS ABEND
      [ABCODE(name)]
      [NODUMP]
END-EXEC
Arguments:
ABCODE(name) - specifies the 4 character ID used to title the storage dump and/or in the message produced for the terminal user.

NODUMP - a storage dump will be produced unless NODUMP is specified.
Exceptional Conditions:
None
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(TESTPGM) for usage example.
ADDRESS
Purpose:
The ADDRESS function lets you access system information that's maintained in storage outside your program.
Syntax:
EXEC KICKS ADDRESS
      [COMMAREA(pointer-ref)]
      [CSA(pointer-ref)]
      [CWA(pointer-ref)]
      [EIB(pointer-ref)]
      [TCTUA(pointer-ref)]
      [TIOA(pointer-ref)]
      [TIOAUSED(pointer-ref)]
      [TWA(pointer-ref)]
END-EXEC
Arguments:
COMMAREA(pointer-ref) - obtains the address of the current commarea.
 
CSA(pointer-ref) - obtains the address of the Common System Area. The CSA address is not especially useful in either CICS or KICKS (since the CSA is OCO in both), but in CICS the pointer returned will always be an EVEN number, and in KICKS it will always be an ODD number (actually -1). This provides a way for a program to determine at run time if it is in KICKS or CICS.

CWA(pointer-ref) - obtains the address of the Common Work Area.

EIB(pointer-ref)- obtains the address of the Exec Interface Block.
 
TCTUA(pointer-ref) - obtains the address of the Terminal User Area.

TIOA(pointer-ref)- obtains the address of the Terminal Input/Output Area. This area's address is available in KICKS but not in CICS. After a READ MAP, READ TEXT, SEND MAP,  SEND TEXT, or SEND CONTROL the area pointed to will contain the raw 3270 data for the last READ or SEND.

TIOAUSED(pointer-ref) - obtains the address of a PIC S9(4) COMP item containing the number of characters of the TIOA currently used. This area's address is available in KICKS but not in CICS. TIOAUSED+1 is where the next character will go in an output TIOA.
  
TWA(pointer-ref)- obtains the address of the Transaction Work Area.
Exceptional Conditions:
None
Notes:
  • One at a time! In CICS a single EXEC ADDRESS can obtain addresses of 1 or many of the above arguments, but KICKS requires that you code a separate EXEC ADDRESS for each of the arguments you need.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(ASSADRTS) for usage examples.
ASKTIME
Purpose:
The ASKTIME function lets you obtain the current time and date. This information is stored in two EIB fields: EIBTIME and EIBDATE. When a task is started those fields are updated to reflect the starting time and date for the task. ASKTIME simply updates those fields. You can also use the ABSTIME argument to specify a field where KICKS places an absolute time. You can then use this field in a FORMATTIME function to format the time in one of several ways.
Syntax:
EXEC KICKS ASKTIME
      [ABSTIME(data-area)]
END-EXEC
Arguments:
ABSTIME(data-area) - specifies an 8 byte area to receive the number of milliseconds elapsed since midnight January 1, 1900. Format is packed - PIC S9(15) COMP-3. This value may be passed to FORMATTIME to generate external representations of date and time.
Exceptional Conditions:
None
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(FMTTIME) for usage examples.
ASSIGN
Purpose:
The ASSIGN function lets you obtain information from various KICKS system areas.
Syntax:
EXEC KICKS ASSIGN
      [ABCODE(data-area)]
      [ALTSCRNHT(data-area)]
      [ALTSCRNWD(data-area)]
      [COLOR(data-area)]
      [CWALENG(data-area)]
      [DEFSCRNHT(data-area)]
      [DEFSCRNWD(data-area)]
      [EWASUPP(data-area)]
      [EXTDS(data-area)]
      [FACILITY(data-area)]
      [FCI(data-area)]
      [HILIGHT(data-area)]
      [LANGINUSE(data-area)]
      [NATLANGINUSE(data-area)]
      [NETNAME(data-area)]
      [OPID(data-area)]
      [PARTNS(data-area)]
      [PROGRAM(data-area)]
      [PS(data-area)]
      [SCRNHT(data-area)]
      [SCRNWD(data-area)]
      [SYSID(data-area)]
      [TCTUALENG(data-area)]
      [TERMCODE(data-area)]
      [TIOASIZE(data-area)]
      [TWALENG(data-area)]
      [USERID(data-area)]
END-EXEC
Arguments:
ABCODE(data-area) - gets the abend code associated with a captured abend (HANDLE ABEND) into a PIC X(4) item.

ALTSCRNHT(data-area) - gets the alternate screen height into a PIC S9(4) COMP item.

ALTSCRNWD(data-area) - gets the alternate screen width into a PIC S9(4) COMP item.

COLOR(data-area) - gets the terminal's 'color' attribute into a PIC X item, which is high values if color is supported (low values otherwise).

CWALENG(data-area) - gets the length of the Common Work Area (CWA) into a PIC S9(4) COMP item.

DEFSCRNHT(data-area) - gets the default screen height into a PIC S9(4) COMP item.

DEFSCRNWD(data-area) - gets the default screen width into a PIC S9(4) COMP item.

EWASUPP(data-area) - gets the terminal's 'erase write alternate' attribute into a PIC X item, which is high values if erase write alternate is supported (low values otherwise).

EXTDS(data-area) - gets the terminal's 'extended data stream' attribute into a PIC X item, which is high values if extended data streams are supported (low values otherwise).

FACILITY(data-area) - gets the terminal's ID into a PIC X(4) field.

FCI(data-area) - gets the type of facility used by the task into a PIC X field. For KICKS this will always be X'01', meaning 'terminal'.

HILIGHT(data-area) - gets the terminal's 'extended highlighting' attribute into a PIC X item, which is high values if extended highlighting is supported (low values otherwise).

LANGINUSE(data-area) - gets the 3 byte mnemonic code showing the language in use. This 3 byte code has a 1-1 relationship with the 1 byte NATLANGINUSE code.

NATLANGINUSE(data-area) - gets the 1 byte mnemonic code showing the language in use. This 1 byte code has a 1-1 relationship with the 3 byte LANGINUSE code.
The NATLANGINUSE code is directly specified with the NATLANG parameter in the KICKS SIT and may be overriden as usual during KICKS startup. It may be an upper case A-Z or 0-9. The default is 'E', aka 'ENU', aka US English. A table relating the codes to each other can be found in SC33-1688.

NETNAME(data-area) - gets the terminal's ID into a PIC X(8) field.

OPID(data-area) - gets the operator id (not userid!) into a PIC X(3) field.

PARTNS(data-area) - gets the terminal's 'partition' attribute into a PIC X item, which is high values if partitions are supported (low values otherwise). Note that KICKS does not presently support terminal partitions.

PROGRAM(data-area) - gets the name of the last loaded program (or mapset) into a PIC X(8) area.

PS(data-area) - gets the terminal's 'programmed symbols' attribute into a PIC X item, which is high values if programmed symbols are supported (low values otherwise). Note that KICKS does not presently support programmed symbols.

SCRNHT(data-area) - gets the current screen height into a PIC S9(4) COMP item.

SCRNWD(data-area) - gets the current screen width into a PIC S9(4) COMP item.

SYSID(data-area) - gets the 'system id' into a PIC X(4) item. In CICS the 'system id' is a unique id for each CICS system. In KICKS for TSO the 'system id' is the SMF id of the MVS system. In KICKS for CMS the 'system id' is spaces.

TCTUALENG(data-area) - gets the length of the Terminal User Area (TCTTEUA) into a PIC S9(4) COMP item.

TERMCODE(data-area) - gets a code defining the terminal type into a PIC S9(4) COMP item. Currently in KICKS this code will be either X'9902' (for a 3270 terminal), or X'1800' (for the CRLP sequential terminal).

TIOASIZE(data-area) - gets the size of the TIOA (Terminal Input Output Area) into a PIC S9(4) COMP item. This is available in KICKS but not in CICS.
  
TWALENG(data-area) - gets the length of the Transaction Work Area (TWA) into a PIC S9(4) COMP item.

USERID(data-area) - gets the 'userid' (not the Operator id!) into a PIC X(8) item. In KICKS this is usually your TSO id.
Exceptional Conditions:
None
Notes:
  • One at a time! In CICS a single EXEC ASSIGN can obtain information about 1 to 16 of the above, but KICKS requires that you code a separate EXEC ASSIGN for each of those you need.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(ASSADRTS) for usage examples.
DELAY
Purpose:
The DELAY function lets you suspend your task until specified time interval has elapsed or a specified time of day has arrived.
Syntax:
EXEC KICKS DELAY
       INTERVAL(hhmmss)
       TIME(hhmmss)
       FOR [HOURS(hh)] [MINUTES(mm)] [SECONDS(ss)]
       UNTIL [HOURS(hh)] [MINUTES(mm)] [SECONDS(ss)]
END-EXEC
Arguments:
INTERVAL(hhmmss) - delay for an amount of time specified by the PIC S9(7) COMP-3 variable hhmmss, where the top 2 digits (hh) are for the number of hours, the middle 2 digits (mm) are for the number of minutes, and the bottom 2 digits (ss) are for the number of seconds.

TIME(hhmmss) - delay until local time specified by the PIC S9(7) COMP-3 variable hhmmss is reached. As in INTERVAL, hhmmss represents the hour, minute and second of the time, in this case local time at which to end the delay.

FOR [HOURS(hh)] [MINUTES(mm)] [SECONDS(ss)] - delay for an 'INTERVAL' with the amount of time specified by HOURS(hh) and/or MINUTES(mm) and/or SECONDS(ss) where hh, mm, and ss are PIC S9(8) COMP variables.

UNTIL [HOURS(hh)] [MINUTES(mm)] [SECONDS(ss)] - delay until local time specified by the HOURS(hh) and/or MINUTES(mm) and/or SECONDS(ss) variables is reached. As in FOR, hh, mm, and ss are PIC S9(8) COMP.
Exceptional Conditions:
EXPIRED (aka eibresp=31)(aka abend AEI4) - (eibresp2=0) the time specified by TIME or UNTIL has already past. This can't happen for INTERVAL or FOR.

INVREQ (aka eibresp=16)(aka abend AEIP) - (eibresp2=0) the delay exceeds the SIT MAXDELY setting.
Notes:
  • Pick only one of INTERVAL, TIME, FOR, or UNTIL.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(DELAYTST) for usage examples.
DELETE DATASET/FILE
Purpose:
The DELETE function removes a record from a file. The record may have been previously read by a READ function with the UPDATE argument, or the record may be retrieved and deleted in a single operation by the DELETE function. The file can be a VSAM KSDS or RRDS, or a path, but not an ESDS.
Syntax:
EXEC KICKS DELETE 
       DATASET(name) | FILE(name)
       RIDFLD(data-area) KEYLENGTH(data-value)
       GENERIC NUMREC(data-area) RRN RBA
END-EXEC
Arguments:
DATASET(name) | FILE(name) - the 1-8 character name by which the VSAM file is accessed. This name must match an entry in the KICKS FCT.

RIDFLD(data-area) - "key" defining the record to be deleted.

KEYLENGTH(data-value) - the PIC S9(4) COMP length of the RIDFLD that is to be used to identify record(s) to be deleted. If GENERIC is specified this should be less than key length in the idcams DEFINE for the file, otherwise it should be exactly equal to the key length for idcams. If keylength is omitted the key size from the file definition is used.

GENERIC - specifies that only part of the key (RIDFLD) is used to identify records to be deleted. All records whose first 'keylength' bytes match will be deleted.

NUMREC(data-area) - a PIC S9(4) COMP receiving field that will be set to the number of records actually deleted.

RRN - specified that the RIDFLD is a relative record number for a VSAM RRDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).

RBA - specified that the RIDFLD is a relative byte address for a VSAM KSDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60  - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99  - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.

INVREQ - invalid request
RESP2 = 21  - delete from ESDS not supported
RESP2 = 22  - GENERIC specified, but file is RRDS
RESP2 = 25  - generic, given keylength > real keylength
RESP2 = 26  - not generic, given keylength != real keylength
RESP2 = 31  - RIDFLD not given, no prior "READ FOR UPDATE"
RESP2 = 42  - keylength < 0
RESP2 = 902 - should not happen (preprocessor allowed bad code?)
RESP2 = 903 - RBA specified, but file is RRDS
RESP2 = 904 - RRN specified, but file is KSDS
NOTFND - the specified record could not be located.
Notes:
  • KICKS does not report the DUPKEY condition as does CICS.
  • See the api test members TESTDKS, TESTDES, and TESTDRR (in HERC01.KICKSSYS.V1R5M0.TESTCOB) for usage examples.
DELETEQ TD
Purpose:
The DELETEQ TD function deletes the records in  transient data queue, reclaiming the space occupied by its records and removing any records that have not been read.
Syntax:
EXEC KICKS DELETEQ TD QUEUE(name) END-EXEC
Arguments:
QUEUE(name) - Specifies the one to four character name of the destination queue to be deleted.
Exceptional Conditions:
DISABLED - the queue is disabled.

INVREQ - the queue specifies an extrapartition queue. DELETEQ TD is only valid for intrapartition queues.

QIDERR - the queue isn't defined in the DCT.
DELETEQ TS
Purpose:
The DELETEQ TS function deletes a temporary storage queue, deleting any records remaining in the queue and reclaiming the space used by the queue.
Syntax:
EXEC KICKS DELETEQ TS QUEUE(name) END-EXEC
Arguments:
QUEUE(name) or QNAME(name) - Specifies the one to 16 character name of the temporary storage queue to be deleted.
Exceptional Conditions:
QIDERR - the queue doesn't exist.
DEQ
Purpose:
The DEQ function releases a user-defined resource that was reserved for exclusive use by an ENQ function issued by your task. Tasks of other KICKS users that have issued an ENQ function for the same resource will then be allowed to continue.
Syntax:
EXEC KICKS DEQ
       RESOURCE(data-area) [LENGTH(data-value)]
      [LUW | TASK | MAXLIFETIME(data-area)]
END-EXEC
Arguments:
RESOURCE(data-area) - identifies the resource to be released. If LENGTH is also specified the character string (up to 255 bytes) contained in the data-area is used to identify the resource. If LENGTH is omitted the address of the data-area identifies the resource.

LENGTH(data-value) - specifies a value indicating the length of the character sting specified in RESOURCE.

LUW - specifies that the resource was acquired with the LUW duration.

TASK - specifies that the resource was acquired with the TASK duration.

MAXLIFETIME(data-area) - specifies a value defining the acquired resource duration. Valid values are DFHVALUE(LUW)=246, and DFHVALUE(TASK)=233.
Exceptional Conditions:
INVREQ - the MAXLIFETIME value is invalid.

LENGERR - the LENGTH value is specified and is less than 1 or greater than 255.
Notes:
  • It is not an error to DEQ a resource that is not (or no longer) ENQ'ed.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(ENQDEQ) for usage examples.
DUMP
Purpose:
The DUMP function produces a storage dump but does not terminate the transaction.
Syntax:
EXEC KICKS DUMP
      DUMPCODE(data-value) | FROM(data-area)
    [ FLENGTH(data-value)  | LENGTH(data-value) ]
END-EXEC
Arguments:
DUMPCODE(data-value) - Specifies a 1-4 character name that identifies the dump.

FROM(data-area) - identifies a storage item that will be dumped and/or begins the storage to be dumped. If omitted a full transaction dump will be printed.

LENGTH(data-value)
FLENGTH(data-value) - specifies the number of bytes of storage to be dumped. If length is omitted  the preprocessor will pass the actual length of the FROM data-area.
Exceptional Conditions:
None
Notes:
  • DUMP does not cause an abend; the transaction continues after the dump is produced. To generate a dump and an abend use the ABEND function.
  • A transaction dump is produced automatically by most ABENDS, and much of the information in a transaction dump is available online using KEDF, so there is seldom a need to code a DUMP function.
  • Many other arguments valid in CICS are allowed but are taken only as comments.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(ENTRTST) for usage examples.
ENDBR
Purpose:
The ENDBR function terminates a browse operation.
Syntax:
EXEC KICKS ENDBR 
       DATASET(name) | FILE(name)
      [REQID(data-value)]
END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the
dataset. The dataset must be defined in the FCT.
REQID(data-value) - specifies a PIC S9(4) COMP numeric value that identifies the browse operation. Normally used only when you need more than one browse active at a time. Default is zero.
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60  - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99  - open failed due to enqueue failure, does NOT disable
INVREQ - not browsing, no STARTBR in effect...
Notes:
  • See the api test members TESTBKS, TESTBKP, TESTBES, TESTBEP and TESTBRR (in HERC01.KICKSSYS.V1R5M0.TESTCOB) for usage examples.
ENQ
Purpose:
The ENQ function reserves a user-defined resource for exclusive use by your task. All other KICKS users that issue an ENQ function for the same resource will be suspended until your task ends or does a DEQ function for the resource.
Syntax:
EXEC KICKS ENQ
       RESOURCE(data-area) [LENGTH(data-value)]
      [LUW | TASK | MAXLIFETIME(data-area)]
      [NOSUSPEND]
END-EXEC
Arguments:
RESOURCE(data-area) - identifies the resource to be reserved. If LENGTH is also specified the character string (up to 255 bytes) contained in the data-area is used to identify the resource. If LENGTH is omitted the address of the data-area identifies the resource.

LENGTH(data-value) - specifies a value indicating the length of the character sting specified in RESOURCE.

LUW - specifies that the resource should be held until the end of the current Logical Unit of Work. This is the default.

TASK - specifies that the resource should be held until the task ends.

MAXLIFETIME(data-area) - specifies a value defining how long the resource should be held. Valid values are DFHVALUE(LUW)=246, and DFHVALUE(TASK)=233.
NOSUSPEND - indicates that if the resource is already reserved, control is to be returned immediately to your program, with a failure notification
Exceptional Conditions:
ENQBUSY - indicates that another task has reserved the resource you specified

INVREQ - the MAXLIFETIME value is invalid.

LENGERR - the LENGTH value is less than 1 or greater than 255.
Notes:
  • It is not an error to ENQ a resource that your task already ENQ'ed. This simply increases your task's ENQ count for that resource. You should DEQ such resources the same number of times you ENQ'ed them.
  • KICKS won't actually be enqueing anything if you don't specify LENGTH. That's because since each KICKS users is in a different address space the RESOURCE addresses won't match, and there is only one task in the user's own KICKS system.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(ENQDEQ) for usage examples.
ENTER
Purpose:
The ENTER function writes a user trace entry in the KICKS trace table (and to the auxiliary trace file is it is open). The trace table is displayed when a transaction dump is produced and may also be examined using KEDF.
Syntax:
EXEC KICKS ENTER
       TRACENUM(data-value) | TRACEID(data-value)
       FROM(data-area) FROMLENGTH(data-area)
       RESOURCE(data-area) EXCEPTION
END-EXEC
Arguments:
TRACENUM(data-value)
TRACEID(data-value) - TRACENUM & TRACEID are synonyms for a number (1-199) that will be used as the trace identifier to associate with this user trace entry.

FROM(data-area) - a character field or literal that will be placed into the trace entry. Only the first 8 of these can be stored in the internal trace table entry, but up to 255 characters will be written to the auxiliary trace if it is available.

FROMLENGTH(data-area) - the length of the FROM field. If fromlength is omitted the preprocessor will pass the actual length of the FROM data-area or literal.

RESOURCE(data-area) - allowed as comments only, KICKS does not process.

EXCEPTION - allowed as comments only, KICKS does not process.
Exceptional Conditions:
None
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(ENTRTST) for usage examples.
FORMATTIME
Purpose:
The FORMATTIME function accepts a time value in the absolute time format and returns a time value in any of several other formats.
Syntax:
EXEC KICKS FORMATTIME ABSTIME(data-value)
       DATESEP(data-value)
       TIMESEP(data-value)
       YYDDD(data-area)
       YYYYDDD(data-area)
       YYMMDD(data-area)
       YYYYMMDD(data-area)
       YYDDMM(data-area)
       YYYYDDMM(data-area)
       DDMMYY(data-area)
       DDMMYYYY(data-area)
       MMDDYY(data-area)
       MMDDYYYY(data-area)
       DAYCOUNT(data-area)
       DAYOFWEEK(data-area)
       DAYOFMONTH(data-area)
       MONTHOFYEAR(data-area)
       YEAR(data-area)
       TIME(data-area)
END-EXEC
Arguments:
ABSTIME(data-value) - specifies a PIC S9(15) COMP-3 field containing the number of milliseconds elapsed since midnight January 1, 1900. This is usually obtained using the ASKTIME function.

DATESEP(data-value) - specifies a 1 byte value to be used as a separator between the month, day, and year in data values. If you omit DATESEP no separator is used. In CICS the argument of DATESEP is optional; in KICKS it is not.

TIMESEP(data-value) - specifies a 1 byte value to be used as a separator between the hour, minute, and second in time values. If you omit TIMESEP no separator is used. In CICS the argument of TIMESEP is optional; in KICKS it is not.

YYDDD(data-area)
YYYYDDD(data-area)
YYMMDD(data-area)
YYYYMMDD(data-area)
YYDDMM(data-area)
YYYYDDMM(data-area)
DDMMYY(data-area)
DDMMYYYY(data-area
MMDDYY(data-area)
MMDDYYYY(data-area) - specifies a character field to contain the formatted date, format being as indicated. Day, month, and year values will be separated using DATESEP if that was also specified. Receiving field size should be as indicated plus the number of separators.

DAYCOUNT(data-area) - specifies a PIC S9(8) COMP field to contain the number of days that have passes since January 1, 1900, which is day 1.

DAYOFWEEK(data-area) - specifies a PIC S9(8) COMP field to contain the day of the week. Sunday is day 0, Monday is day 1, ...

DAYOFMONTH(data-area) - specifies a PIC S9(8) COMP field to contain the day of the month. The first is 1, the second is 2, ...

MONTHOFYEAR(data-area) - specifies a PIC S9(8) COMP field to contain the month of the year. January is 1, February is 2, ...

YEAR(data-area) - specifies a PIC S9(8) COMP field to contain the four digit year.

TIME(data-area) - specifies a character field to contain the formatted time, format being as hhmmss. Hours, minutes, and second values will be separated using TIMESEP if that was also specified. Receiving field size should be as indicated plus the number of separators.
Exceptional Conditions:
INVREQ - ABSTIME value is invalid (not a valid PIC S9(15) COMP-3 number or specifies an invalid value).
Notes:
  • One at a time! In CICS a single EXEC FORMATTIME can generate information up to all of the above, but KICKS requires that you code a separate EXEC FORMATTIME for each of those you need. Pick one of: DATESEP and any of the date formats, or TIMESEP and TIME.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(FORMATIM) for usage examples.
FREEMAIN
Purpose:
The FREEMAIN function releases storage that was previously acquired using the GETMAIN function.
Syntax:
EXEC KICKS FREEMAIN
       DATA(data-area) | DATAPOINTER(pointer-ref)
END-EXEC
Arguments:
DATA(data-area) - specifies the name of the variable to be freed.

DATAPOINTER(pointer-ref) - specifies a pointer to the variable to be freed.
Exceptional Conditions:
INVREQ - storage specified not GETMAIN'ed (or perhaps previously FREEMAIN'ed).
Notes
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(GETFREE) for usage examples.
GETMAIN
Purpose:
The GETMAIN function acquires a specified amount of storage that is held until a FREEMAIN function is issued to release it (or, in the case of storage acquired without the SHARED argument, end of task).
Syntax:
EXEC KICKS GETMAIN
       SET(pointer-ref)
       LENGTH(data-value)| FLENGTH(data-value)
      [INITIMG(data-value)]
      [SHARED] [BELOW] [NOSUSPEND] [USERKEY] [CICSKEY]
END-EXEC
Arguments:
SET(pointer-ref) - specifies a variable to contain the address of the storage acquired.
LENGTH(data-value)
FLENGTH(data-value) - specifies a variable or literal value to indicate the length of storage to be acquired.

INITIMG(data-value) - specifies a 1 byte field or literal value used to initialize the storage acquired. If omitted the storage will not be initialized to any particular value.

SHARED - specifies that the storage will not be automatically freed when the task ends. Instead it must be explicitly freed by a FREEMAIN function (by this task or by some future task).

NOSUSPEND - default in KICKS, accepted as comments.
BELOW
USERKEY
CICSKEY - these arguments are accepted as comments only
Exceptional Conditions:
LENGERR - The specified length is less than one

NOSTG - The requested storage is not available
Notes:
  • The NOSTG condition does not result in an abend. You must check EIBRESP to ensure storage was actually obtained.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(GETFREE) for usage examples.
HANDLE ABEND
Purpose:
The HANDLE ABEND function establishes an abend exit which receives control when an abend occurs.
Syntax:
EXEC KICKS HANDLE ABEND
       LABEL(label) | CANCEL | RESET
END-EXEC
Arguments:
LABEL(label) - specifies the paragraph or section name of a routine within the current program that is to be invoked (by GO TO) if the program abends.

CANCEL - specifies that the effect of a previously established HANDLE ABEND is to be cancelled.
RESET - specifies that a previously cancelled HANDLE ABEND should be reestablished.
Exceptional Conditions:
None
Notes:
  • Catches normal abends but not AICA, ASRA, or ASRB
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(LINKTST) for usage example.
HANDLE AID
Purpose:
The HANDLE AID function establishes routines that are invoked when an AID key is detected by a RECEIVE command.
Syntax:
EXEC KICKS HANDLE AID
       KEY-NAME(label) KEY-NAME(label) ...
END-EXEC
Arguments:
KEY-NAME(label) - specifies the name of the AID key to be handled and the name of a paragraph or section that is to receive control (by GO TO) when the specified AID key is detected. If no label is specified any existing HANDLE for that AID is cancelled. The function recognizes AID names ENTER, CLEAR, PA1-3, and PF1-24.

Exceptional Conditions:
None
Notes:
  • 1 to16 at a time
  • KEY-NAMEs being ENTER, CLEAR, PA1, PA2, PA3, PF1, PF2, ... PF9, PF10, ... PF24
  • To cancel a previously issued HANDLE AID that associated some key with some label, just issue another HANDLE AID specifying the key without any label - ie - "EXEC KICKS HANDLE AID SOMEKEY END-EXEC".
  • HANDLE AID is not supported in GCCMVS KICKS programs.
  • See any of HERC01.KICKS.V1R5M0.COB(TAC?????) for usage examples.
HANDLE CONDITION
Purpose:
The HANDLE CONDITION function establishes routines that are invoked when certain exceptional conditions are detected.
Syntax:
EXEC KICKS HANDLE CONDITION
       CONDITION-NAME(label) CONDITION-NAME(label) ...
END-EXEC
Arguments:
CONDITION-NAME(label) - specifies the name of the condition to be handled and the name of a paragraph or section that is to receive control (by GO TO) when the specified condition is detected. If no label is specified any existing HANDLE for that condition is cancelled. The function recognizes the same condition names as DFHRESP.
Exceptional Conditions:
None
Notes:
  • 1 to16 at a time
  • To cancel a previously issued HANDLE CONDITION that associated some condition with some label, just issue another HANDLE CONDITION specifying the condition without any label - ie - "EXEC KICKS HANDLE CONDITION SOMECONDITION END-EXEC".
  • HANDLE CONDITION is not supported in GCCMVS KICKS programs.
  • See any of HERC01.KICKS.V1R5M0.COB(TAC?????) for usage examples.
IGNORE CONDITION
Purpose:
The IGNORE CONDITION function specifies that when certain exceptional conditions are detected the usual system action is ignored and control is returned to your program as usual.
Syntax:
EXEC KICKS IGNORE CONDITION
       CONDITION-NAME CONDITION-NAME ...
END-EXEC
Arguments:
CONDITION-NAME - specifies the name of the condition to be ignored. The function recognizes the same condition names as DFHRESP.
Exceptional Conditions:
None
Notes:
  • 1 to 16 at a time
  • CONDITION-NAMEs same as HANDLE CONDITION
  • There is a difference between HANDLE CONDITION no-label and IGNORE CONDITION. The former turns off handling of the condition, which means your transaction will abend if the condition occurs. The latter turns off the default action (abend) for the condition, so that if the condition occurs your transaction will continue and must itself detect the condition and take appropriate action.
  • IGNORE CONDITION is not supported in GCCMVS KICKS programs.
LINK
Purpose:
The LINK function invokes a program and optionally passes data to it. When the invoked program ends control returns to the statement following the LINK function.
Syntax:
EXEC KICKS LINK PROGRAM(name)
      [COMMAREA(data-area) [LENGTH(data-value)]]
END-EXEC
Arguments:
PROGRAM(name) - specifies the one to eight character name of the program to be invoked. The name must be defined in the PPT.

COMMAREA(data-area) - specifies a data area that is passed to the invoked program as a communication area. The invoked program access the data via its DFHCOMMAREA field, so it is the same storage in the invoking program and the invoked program, therefore the invoked program may change the storage and the invoking program will see the changes.

LENGTH(data-value) - the length of the data area specified in the COMMAREA argument. If length is omitted  the preprocessor will pass the actual length of the COMMAREA data-area.
Exceptional Conditions:
PGMIDERR - The program is not in the PPT

DISABLED - The PPT entry for the program is disabled (happens for example if the program is not present in the KIKRPL library concatenation).
LENGERR - the LENGTH specified is to large.
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(LINKTST) for usage example
LOAD
Purpose:
The LOAD function retrieves an object module and returns the entry point and length.
Syntax:
EXEC KICKS LOAD PROGRAM(name)
      [LENGTH(data-area) | FLENGTH(data-area]
      [ENTRY(pointer-ref) | SET(pointer-ref) ]
      [HOLD]
END-EXEC
Arguments:
PROGRAM(name) - specifies the one to eight character name of the object module to be loaded. The name must be defined in the PPT.

LENGTH(data-area) - specifies an S9(4) COMP variable that is set to the length of the object module.
FLENGTH(data-area) - specifies an S9(8) COMP variable that is set to the length of the object module.

ENTRY(pointer-ref) - specifies an S9(8) COMP variable that is set to the entry point of the loaded object module.
SET(pointer-ref) - specifies an S9(8) COMP variable that is set to the load point of the loaded object module.
HOLD - specifies that the loaded object module will be retained in storage until it is RELEASE'd. If HOLD is not specified the object module will be deleted from storage when the task ends.
Exceptional Conditions:
PGMIDERR - The program is not in the PPT

DISABLED - The PPT entry for the program is disabled (happens for example if the program is not present in the KIKRPL library concatenation).
Notes:
  • An object's entry point (where your program calls it) is not necessarily the same as it's load point (where it begins in storage).
  • Automatic deletion of a LOAD'd object module at task end (due to not coding HOLD) will only occur if your task's LOAD was responsible for bringing the module into storage. If it was previously LOAD'd with a HOLD and your task's LOAD only returned its address the module will remain in storage until RELEASE'd (ie, the original HOLD will continue to be honored).
  • See HERC01.KICKSSYS.V1R5M0.COB(KEDFPGM) for usage example (loading/modifying KEDFILTR).
READNEXT
Purpose:
The READNEXT function retrieves the next sequential record from a file during a browse operation. The file may be a VSAM KSDS, ESDS, RRDS, or a path.
Syntax:
EXEC KICKS READNEXT DATASET(name) | FILE(name)
       INTO(data-area) LENGTH(data-area)
       RIDFLD(data-area) KEYLENGTH(data-area)
      [RBA | RRN] [REQID(data-value)]
END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the dataset. The dataset must be defined in the FCT.
INTO(data-area) - specifies the area that will contain the record being read.
LENGTH(data-area) - PIC S9(4) COMP length of the record. On entry it should be set to the size of the INTO argument. On return it will be the size of the record actually retrieved. If length is omitted the record size from the file definition is used, and of course there is no feedback of the size of the actual record read.
RIDFLD(data-area) - "key" defining the record to be read.

KEYLENGTH(data-value) - PIC S9(4) COMP length of RIDFLD that is to be used to identify record(s) to be read. If keylength is omitted the key size from the file definition is used.

RRN - specified that the RIDFLD is a relative record number for a VSAM RRDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).

RBA - specified that the RIDFLD is a relative byte address for a VSAM KSDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).
REQID(data-value) - specifies a PIC S9(4) COMP numeric value that identifies the browse operation. Normally used only when you need more than one browse active at a time. Default is zero.
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60  - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99  - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.

INVREQ - invalid request.
    RESP2 = 25  - GENERIC & KEYLENGTH given,
                  but given KEYLENGTH > real!
    RESP2 = 26  - GENERIC not given, KEYLENGTH given,
                  but KEYLENGTH <> real!
    RESP2 = 34  - REQID not found - no STARTBR?
    RESP2 = 37  - RBA/RRN does not match STARTBR
    RESP2 = 42  - GENERIC & KEYLENGTH given, but KEYLENGTH < 0
    RESP2 = 905 - KEYLENGTH given with RBA/RRN

LENGERR - the length of the record is longer than the LENGTH argument specifies.

DUPKEY - indicates that at least one more record of the same key exists. Occurs only when accessing the file via an alternate index path (that allows duplicate keys).

ENDFILE - indicates that there are no more records to read.
Notes:
  • See the api test members TESTBKS, TESTBKP, TESTBES, TESTBEP and TESTBRR (in HERC01.KICKSSYS.V1R5M0.COB) for usage examples.
READPREV
Purpose:
The READPREV function retrieves the previous sequential record from a file during a browse operation. In other words, READPREV reads records backwards. The file may be a VSAM KSDS, ESDS, RRDS, or a path.
Syntax:
EXEC KICKS READPREV DATASET(name) | FILE(name)
       INTO(data-area) LENGTH(data-area)
       RIDFLD(data-area) KEYLENGTH(data-area)
      [RBA | RRN] [REQID(data-value)]
END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the
dataset. The dataset must be defined in the FCT.
INTO(data-area) - specifies the area that will contain the record being read.
LENGTH(data-area) - PIC S9(4) COMP length of the record. On entry it should be set to the size of the INTO argument. On return it will be the size of the record actually retrieved. If length is omitted the record size from the file definition is used, and of course there is no feedback of the size of the actual record read.
RIDFLD(data-area) - "key" defining the record to be read.

KEYLENGTH(data-value) - PIC S9(4) COMP length of RIDFLD that is to be used to identify record(s) to be read. If keylength is omitted the key size from the file definition is used.

RRN - specified that the RIDFLD is a relative record number for a VSAM RRDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).

RBA - specified that the RIDFLD is a relative byte address for a VSAM KSDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).
REQID(data-value) - specifies a PIC S9(4) COMP numeric value that identifies the browse operation. Normally used only when you need more than one browse active at a time. Default is zero.
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60  - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99  - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.

INVREQ - invalid request.
    RESP2 = 25  - GENERIC & KEYLENGTH given,
                  but given KEYLENGTH > real!
    RESP2 = 26  - GENERIC not given, KEYLENGTH given,
                  but KEYLENGTH <> real!
    RESP2 = 34  - REQID not found - no STARTBR?
    RESP2 = 37  - RBA/RRN does not match STARTBR
    RESP2 = 42  - GENERIC & KEYLENGTH given, but KEYLENGTH < 0
    RESP2 = 905 - KEYLENGTH given with RBA/RRN

LENGERR - the length of the record is longer than the LENGTH argument specifies.

DUPKEY - indicates that at least one more record of the same key exists. Occurs only when accessing the file via an alternate index path (that allows duplicate keys).

ENDFILE - indicates that there are no more records to read.
Notes:
  • See the api test members TESTBKS, TESTBKP, TESTBES, TESTBEP and TESTBRR (in HERC01.KICKSSYS.V1R5M0.COB) for usage examples.
READQ TD
Purpose:
The READQ TD function reads a record from a specified transient data queue (aka destination).
Syntax:
EXEC KICKS READQ TD QUEUE(name)
       INTO(data-area) LENGTH(data-area)
       NOSUSPEND
END-EXEC
Arguments:
QUEUE(name) - Specifies the one to four character name of the destination queue to be read.

INTO(data-area) - specifies the data area that will contain the record to be read.

LENGTH(data-area) - specifies the S9(4) COMP data area that, on entry, contains the maximum number of characters of data that will fit in the INTO data area. On return it contains the number of characters actually read into the data area. If length is omitted the size of the INTO area is used, and of course there is no feedback of the size of the actual record read.

NOSUSPEND - a required argument indicating immediate return (with RC) if the queue is not available (being used for output).
Exceptional Conditions:
NOTOPEN - the queue is not opened. This is reported only on first access, thereafter DISABLED is reported.

DISABLED - the queue is disabled.

INVREQ - the queue type is extrapartition and it is opened for output (so it can't be read).

QIDERR - the queue isn't defined in the DCT.
QBUSY - the queue is being used by another KICKS user.
QZERO - there are no (more) records in the queue. This is a normal 'end of file' condition.
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(DCPTST) for usage examples.
  • NOSUSPEND is an optional argument in CICS, but is required in KICKS.
READQ TS
Purpose:
The READQ TS function reads a record from a specified temporary storage queue.
Syntax:
EXEC KICKS READQ TS QUEUE(name)
       INTO(data-area) LENGTH(data-area)
      [NUMITEMS(data-area)] [ITEM(data-value) | NEXT]
END-EXEC
Arguments:
QUEUE(name) or QNAME(name) - Specifies the one to 16 character name of the temporary storage queue to be read.

INTO(data-area) - specifies the data area that will contain the record to be read.

LENGTH(data-area) - specifies the S9(4) COMP data area that, on entry, contains the maximum number of characters of data that will fit in the INTO data area. On return it contains the number of characters actually read into the data area.If length is omitted the size of the INTO area is used, and of course there is no feedback of the size of the actual record read.

NUMITEMS(data-area) - specifies the S9(4) COMP data area that, on return, will contain the total number of records in the specified queue.

NEXT
ITEM(data-value) - specifies the S9(4) COMP data area that, on entry, contains the item number of the queue record to be retrieved, or, that the NEXT record should be retrieved.
Exceptional Conditions:
QIDERR - the queue doesn't exist.

ITEMERR - no record exists for the ITEM number requested. This is a normal 'end of file' condition.
READ DATASET/FILE
Purpose:
The READ function retrieves one record from a file, which can be a VSAM KSDS, ESDS, RRDS, or path.
Syntax:
EXEC KICKS READ DATASET(name) | FILE(name)
       INTO(data-area) LENGTH(data-area)
       RIDFLD(data-area) KEYLENGTH(data-area)
      [GENERIC] [RBA | RRN] [GTEQ | EQUAL] [UPDATE]
END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the dataset. The dataset must be defined in the FCT.
INTO(data-area) - specifies the area that will contain the record being read.
LENGTH(data-area) - PIC S9(4) COMP length of the record. On entry it should be set to the size of the INTO argument. On return it will be the size of the record actually retrieved. If length is omitted the record size from the file definition is used, and of course there is no feedback of the size of the actual record read.
RIDFLD(data-area) - "key" defining the record to be read.

KEYLENGTH(data-value) - PIC S9(4) COMP length of RIDFLD that is to be used to identify record(s) to be read. If keylength is omitted the key size from the file definition is used.

RRN - specified that the RIDFLD is a relative record number for a VSAM RRDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).

RBA - specified that the RIDFLD is a relative byte address for a VSAM KSDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).

GENERIC - specifies that only part of the key in the RIDFLD argument should be used, as indicated by the KEYLENGTH argument.

EQUAL - specifies that the record whose key matches the RIDFLD exactly will be read.

GTEQ - specifies that the first record whose key is greater than or equal to the key specified in the RIDFLD argument will be read. This will always retrieve a record unless the specified key is greater than the largest in the file.
UPDATE - specifies your intent to update the retrieved record (by REWRITE'ing or DELETE'ing it). The record is held for your exclusive use (other tasks can't get it) until you do a REWRITE, DELETE, or UNLOCK for it - or until your task ends or you complete a logical unit of work (by issuing a SYNCPOINT).
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60  - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99  - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.

LENGERR - the length of the record is longer than the LENGTH argument specifies.

DUPKEY - indicates that at least one more record of the same key exists. Occurs only when accessing the file via an alternate index path (that allows duplicate keys).

NOTFND - indicates that there is no record with the required key.

INVREQ - invalid request.
RESP2 = 26  - not GENERIC and KEYLENGTH <> real key length.
RESP2 = 28  - read to file with update already pending.
RESP2 = 902 - can't RBA & RRN both, can't EQUAL & GTEQ both
RESP2 = 903 - can't RBA for RRDS.
RESP2 = 904 - can't RRN if not RRDS.
RESP2 = 905 - KEYLENGTH not allowed with ESDS, RRDS.
Notes:
  • See the api test members TESTDKS, TESTDES, and TESTDRR (in HERC01.KICKSSYS.V1R5M0.COB) for usage examples.
RECEIVE INTO
Purpose:
The RECEIVE function retrieves input data sent from a terminal. BMS mapping is not used so the format of the received data will be that of a raw 3270 input buffer (aka tioa, Terminal Input/Output Area).
Syntax:
EXEC KICKS RECEIVE
      [INTO(data-area)]
      [LENGTH(data-area)| FLENGTH(data-area)]
      [MAXLENGTH(data-value) | MAXFLENGTH(data-value)]
      [ASIS] [BUFFER] [CHECK]
END-EXEC
Arguments:
INTO(data-area) - specifies the name of the program variable that will contain the input data retrieved. If omitted a terminal read is still done, and the EIB is updated with the new aid and cursor address, but obviously no other data is made available.

LENGTH(data-area) - specifies the name of the program variable (PIC S9(4) COMP or short) that will contain the number of bytes retrieved.

FLENGTH(data-area) - specifies the name of the program variable (PIC S9(8) COMP or integer) that will contain the number of bytes retrieved.

MAXLENGTH(data-value)
MAXFLENGTH(data-value) - specifies the value or program variable that contains the maximum number of bytes to retrieve. If omitted, but LENGTH or FLENGTH is specified, the input value there is taken as the maximum number of bytes to retrieve. If neither MAXLENGTH/MAXFLENGTH nor LENGTH/FLENGTH is specified then the number of bytes to retrieve is taken to be zero.

ASIS - specifies that lower case letters are not be translated to upper case.

BUFFER - specifies that the complete 3270 buffer is returned, including the leading aid character and two character cursor address. If not specified these 3 characters are omitted (ie, returned data starts with the 4th character of the input buffer).
CHECK - specifies that no data is to be read, rather an indication of whether the terminal has data ready is to be returned. If data is ready EIBAID will be equal to 'R' after the call, otherwise it will be 'N'. The operation also includes a 1/10 second delay. When CHECK is specified all other arguments are ignored.
Exceptional Conditions:
LENGERR - available data exceeds MAXFLENGTH (or FLENGTH, see above. Not reported if INTO not specified.
Notes:
  • RECEIVE INTO is commonly used to retrieve data entered on the same line as the transaction id. One place you can see this is in the KEDF transaction, where it uses this command to see if you are doing a simple KEDF ON or a KEDF OFF before it puts up the full screen interface for a more complex interaction. RECEIVE MAP is much easier to use for other cases, primarily due to the complexity of the tioa's 3270 data structure.
  • LENGTH and MAXLENGTH (for use with S9(4) COMP or SHORT data items) not supported; use FLENGTH and MAXFLENGTH (for use with S9(8) COMP or INTEGER data items) instead.
  • NOTRUNCATE is not supported. Any data read but not returned due to MAXFLENGTH (etal) is lost
  • In CICS ASIS is ineffective on the first RECEIVE of a task (ie, the only RECEIVE of a pseudo conversational task) but in KICKS it works on all RECEIVE's where it is coded.
  • CHECK is a "KICKS only" argument not supported in CICS.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(SRTEXT) for usage examples; also HERC01.KICKSSYS.V1R5M0.COB(KSGMPGM) for use of the CHECK argument.
RECEIVE MAP
Purpose:
The RECEIVE MAP function reads data from a terminal and formats it using BMS map definitions.
Syntax:
EXEC KICKS RECEIVE MAP(name) MAPSET(name)
      [INTO(data-area)]
      [ASIS]
END-EXEC
Arguments:
MAP(name) - the one to seven character name of the bms map to be used to map the input data.

MAPSET(name) - the one to seven character name of the bms mapset that contains the map named in MAP(name). This object must be defined in the PPT.

INTO(data-area) - specifies the data area that will contain the mapped input data. This is usually the COPY'ed symbolic map generated by the MAPGEN procedure. If INTO is not specified the mapped area is assumed to be the MAP name suffixed by an "I".

ASIS - specifies that lower case letters are not to be made upper case.
Exceptional Conditions:
MAPFAIL - The data cannot be formatted
Notes:
  • RECEIVE MAP and SEND MAP can also generate Exceptional Conditions as documented under the LOAD function if the MAPSET is not in the PPT, is disabled, is not in the KIKRPL concatenation, etc.
  • In CICS ASIS is ineffective on the first RECEIVE of a task (ie, the only RECEIVE of a pseudo conversational task) but in KICKS it works on all RECEIVE's where it is coded.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(SRMAP) for usage examples.
RELEASE
Purpose:
The RELEASE function removes a previously LOAD'ed object module from storage.
Syntax:
EXEC KICKS RELEASE PROGRAM(name) END-EXEC
Arguments:
PROGRAM(name) - specifies the one to eight character name of the object module to be loaded. The name must be defined in the PPT.
Exceptional Conditions:
PGMIDERR - The program is not in the PPT
RESETBR
Purpose:
The RESETBR function resets the current position of a browse operation. It is, in effect, the same as an ENDBR for the file followed by a STARTBR with the same (as the RESETBR) arguments.

KICKS in fact implements RESETBR exactly as ENDBR followed by STARTBR.
Syntax:
EXEC KICKS RESETBR DATASET(name) | FILE(name)
       RIDFLD(data-area) KEYLENGTH(data-value)
      [GENERIC]] [RBA | RRN] [GTEQ | EQUAL]
      [REQID(data-value)]
END-EXEC
Arguments:
See STARTBR arguments...
Exceptional Conditions:
See ENDBR and STARTBR conditions...
Notes:
  • See the api test members TESTBKS, TESTBKP, TESTBES, TESTBEP and TESTBRR (in the TESTFILE VMARC file) for usage examples.
RETURN
Purpose:
The RETURN function terminates program execution; the invoking program regains control.
Syntax:
EXEC KICKS RETURN
      [TRANSID(name)
      [COMMAREA(data-area) LENGTH(data-value)]]
END-EXEC
Arguments:
TRANSID(name) - specifies the one to four character name of the transaction to be invoked when the terminal operator presses an AID key. The transaction id must be defined in the PCT.

COMMAREA(data-area) - specifies a data area that is passed to the next execution of a pseudo-conversational program.

LENGTH(data-value) - the length of the data area specified in the COMMAREA argument. If length is omitted  the preprocessor will pass the actual length of the COMMAREA data-area.
Exceptional Conditions:
INVREQ - TRANSID/COMMAREA given when the program returning is not 'at the highest level'. 
Notes:
  • When you LINK to a program it must do a simple RETURN (no TRANSID/COMMAREA). Only a program that ran as a result of a user transaction (or a program that was XCTL'ed to - not LINK'ed to - that program) may (but is not required to) use TRANSID/COMMAREA.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(LINKTST) for usage example.
REWRITE
Purpose:
The REWRITE function updates a record in a file. The record must have been previously read with a READ function with the UPDATE argument. The file may be a VSAM KSDS, ESDS, RRDS, or path.
Syntax:
EXEC KICKS REWRITE DATASET(name) | FILE(name)
       FROM(data-area) LENGTH(data-area)
END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the
dataset. The dataset must be defined in the FCT.
FROM(data-area) - specifies the area that contains the record being written.
LENGTH(data-area) - PIC S9(4) COMP length of the record. On entry it should be set to the size of record to be written, not the length of the FROM argument (unless they are the same). If length is omitted the record size from the file definition is used.
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60 - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99 - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.

LENGERR - the LENGTH argument specifies a record longer than allowed for the file.

DUPKEY - the record contains an alternate key value that already exists or the alternate index does not allow duplicate keys and the alternate index is part of the file's upgrade set.

INVREQ - the request is invalid.
RESP2 = 30  - no prior READ with UPDATE.
RESP2 = 23  - the key does not match the old key (or the record is truncated short of the full key).
Notes:
  • A REWRITE may not change the primary key.
  • See the api test members TESTDKS, TESTDES, and TESTDRR (in HERC01.KICKSSYS.V1R5M0.TESTCOB) for usage examples.
SEND TEXT
Purpose:
The SEND TEXT function lets you send text to a terminal. A map is not used, instead BMS just writes the data to the screen as is.

NOTE that "TEXT" is optional, that is, you could say "SEND TEXT FROM()..." or just "SEND FROM()...".
Syntax:
EXEC KICKS SEND TEXT
       FROM(data-area)
       LENGTH(data-area) | FLENGTH(data-area)
      [STRFIELD]
      [ERASE] [ALARM] [FREEKB] [ALTERNATE] [DEFAULT]
      [CURSOR(data-value)]
END-EXEC
Arguments:
FROM(data-area) - specifies the data area containing the text to send.

LENGTH(data-area)
FLENGTH(data-area) - specifies the length of the FROM data-area. If length is omitted  the preprocessor will pass the actual length of the FROM data-area.

STRFIELD - specifies that the FROM field contains a complete 3270 data stream that should be sent exactly as is. If you specify STRFIELD you may not specify any of the following arguments (ERASE, ALARM, FREEKB, ALTERNATE, DEFAULT, or CURSOR) as those choices should be explicit in the FROM field.
ERASE - specifies that before writing the data the screen should be erased.

ALARM - specifies that the terminal alarm (bell?) should sound.

FREEKB - specifies that the terminal keyboard should be unlocked.

ALTERNATE - specifies that alternate screen size should be selected.

DEFAULT - specifies that default screen size should be selected. Documentation only, sometimes used to make it explicit when also using sends with ALTERNATE.
CURSOR(data-value) - specifies where the cursor is to be placed.
Exceptional Conditions:
None
Notes:
  • When using the STRFIELD argument the FROM field may contain a leading escape character (hex 27), but that is not required. It must contain the 3270 write command and the 3270 WCC sequence.
  • When NOT using the STRFIELD argument the characters of the FROM field are written to the screen in groups of 78 characters (for an 80 column screen, corresponding more for larger) per line. For example if you send 100 characters using ERASE, the first 78 characters will be on the first line, the remaining 22 characters on the 2nd line. This is a little different from CICS, which tries to assure 'words' are not broken in the line wrapping.
  • See HERC01.KICKSSYS.V1R5M0.COB(KSSFPGM) for an example of STRFIELD usage.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(SRTEXT) for an example of more common usage without STRFIELD.
SEND MAP
Purpose:
The SEND MAP function sends data to a terminal, mapping it according to the specifications in a BMS map.
Syntax:
EXEC KICKS SEND MAP(name) MAPSET(name)
      [FROM(data-area)]
      [ERASEAUP] [ERASE] [ALARM] [FREEKB] [FRSET]
      [MAPONLY] [DATAONLY] [ALTERNATE] [DEFAULT]
      [CURSOR(data-value)]
END-EXEC
Arguments:
MAP(name) - the one to seven character name of the bms map to be used to map the output data.

MAPSET(name) - the one to seven character name of the bms mapset that contains the map named in MAP(name). This object must be defined in the PPT.

FROM(data-area) - specifies the name of the program variable that contains the data to be sent. This is usually the COPY'ed symbolic map generated by the MAPGEN procedure. If FROM is not specified the mapped area is assumed to be the MAP name suffixed by an "O".

ERASEAUP - specifies that before writing the data all the unprotected fields already on the screen should be erased.

FRSET - specifies that the modified data tag (MDT) for each attribute character is reset to zero.

MAPONLY - specifies that only constant data from the map is sent; the FROM area is unused.

DATAONLY - specifies that the FROM area data is to be sent, but constant data from the map is not sent.
ERASE - specifies that before writing the data the screen should be erased.

ALARM - specifies that the terminal alarm (bell?) should sound.

FREEKB - specifies that the terminal keyboard should be unlocked.

ALTERNATE - specifies that alternate screen size should be selected.

DEFAULT - specifies that default screen size should be selected. Documentation only, sometimes used to make it explicit when also using sends with ALTERNATE.
CURSOR(data-value) - specifies where the cursor is to be placed.
Exceptional Conditions:
MAPFAIL - The data cannot be formatted.
Notes:
  • SEND MAP and RECEIVE MAP can generate Exceptional Conditions as documented under the LOAD function if the MAPSET is not in the PPT, is disabled, is not in the KIKRPL concatenation, etc.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(SRMAP) for usage examples.
SEND CONTROL
Purpose:
The SEND CONTROL function lets you send device control commands to a terminal. No mapped data is sent.
Syntax:
EXEC KICKS SEND CONTROL
      [ERASE] [ALARM] [FREEKB] [ALTERNATE] [DEFAULT]
      [ERASEAUP] [FRSET]
      [CURSOR(data-value)]
END-EXEC
Arguments:
ERASEAUP - specifies that before writing the data all the unprotected fields already on the screen should be erased.

FRSET - specifies that the modified data tag (MDT) for each attribute character is reset to zero.

ERASE - specifies that before writing the data the screen should be erased.

ALARM - specifies that the terminal alarm (bell?) should sound.

FREEKB - specifies that the terminal keyboard should be unlocked.

ALTERNATE - specifies that alternate screen size should be selected.

DEFAULT - specifies that default screen size should be selected. Documentation only, sometimes used to make it explicit when also using sends with ALTERNATE.
CURSOR(data-value) - specifies where the cursor is to be placed.
Exceptional Conditions:
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(SRTEXT) for usage examples.
SIGNOFF
Purpose:
The SIGNOFF function initiates KICKS shutdown.
Syntax:
EXEC KICKS SIGNOFF END-EXEC
Arguments:
None
Exceptional Conditions:
None
Notes:
  • See the KSSFPGM COBOL program for usage examples.
STARTBR
Purpose:
The STARTBR function initiates a browse operation so that records can be retrieved using READNEXT and/or READPREV functions.
Syntax:
EXEC KICKS STARTBR DATASET(name) | FILE(name)
       RIDFLD(data-area) KEYLENGTH(data-value)
      [GENERIC] [RBA | RRN] [GTEQ | EQUAL]
      [REQID(data-value)]
END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the
dataset. The dataset must be defined in the FCT.
RIDFLD(data-area) - "key" defining the record where the browse is to begin.

KEYLENGTH(data-value) - PIC S9(4) COMP length of RIDFLD argument. If keylength is omitted the key size from the file definition is used.

GENERIC - specifies that only part of the key in the RIDFLD argument should be used, as indicated by the KEYLENGTH argument.

RRN - specified that the RIDFLD is a relative record number for a VSAM RRDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).

RBA - specified that the RIDFLD is a relative byte address for a VSAM KSDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).

EQUAL - specifies that positioning will be established at the record whose key matches the RIDFLD exactly. If no such record exists the NOTFND condition is raised and the browse is not started.

GTEQ - specifies that positioning will be established at the first record whose key is greater than or equal to the key specified in the RIDFLD argument. This will always establish positioning in the file unless the specified key is greater than the largest in the file.
REQID(data-value) - specifies a PIC S9(4) COMP numeric value that identifies the browse operation. Normally used only when you need more than one browse active at a time. Default is zero.
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60 - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99 - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.

INVREQ - invalid request.
    RESP2 = 25  - GENERIC & KEYLENGTH given,
                  but given KEYLENGTH > real!
    RESP2 = 26  - GENERIC not given, KEYLENGTH given,
                  but KEYLENGTH <> real!
    RESP2 = 33  - REQID already used for active browse
    RESP2 = 42  - GENERIC & KEYLENGTH given, but KEYLENGTH < 0
    RESP2 = 901 - no space for another active REQID
    RESP2 = 902 - can't RBA & RRN both
    RESP2 = 903 - can't RBA for RRDS file
    RESP2 = 904 - can't RRN for non-RRDS file
    RESP2 = 905 - can't RBA for RRDS file

NOTFND - The specified record could not be located.
Notes:
A browse operation may be:
  • A direct browse of a key sequenced data set (KSDS) by record key.
  • A direct browse of an entry sequenced data set (ESDS) by relative byte address (RBA).
  • A direct browse of a relative record data set (RRDS) by relative record number (RRN).
  • A browse of a key sequenced data set (KSDS) using an alternate index path.
  • A browse of an entry sequenced data set (ESDS) using an alternate index path. In this case, an ESDS is browsed by key in the same way as a KSDS. Some of the options that are not valid for a direct ESDS browse are valid for an alternate index browse.
  • A browse of a KSDS by RBA.
The options specified on the STARTBR command define the characteristics that apply throughout the subsequent browse operation.

Specifically, if GENERIC or GTEQ are specified, they are used not only when determining the starting point of the browse, but also whenever the value of RIDFLD is changed before issuing a READNEXT command.

If you specify the RBA option, it applies to every READNEXT or READPREV command in the browse, and causes CICS to return the relative byte address of each retrieved record.
None of these options can be changed during a browse, except by means of the RESETBR command.
Positioning to read forward from the first record:
  • KSDS - use a key of low-values.
  • ESDS - use an RBA of +0.
  • RRDS - use an RRN of +1.
Positioning to read backward from the last record:
  • KSDS - use a key of high-values.
  • ESDS - use an RBA of high-values.
  • RRDS - use an RRN of high-values.
Reading forward or backward then is just a series of repeated READNEXT or READPREV's.
See the api test members TESTBKS, TESTBKP, TESTBES, TESTBEP and TESTBRR (in HERC01.KICKSSYS.V1R5M0.TESTCOB) for usage examples.
SPOOLOPEN OUTPUT
Purpose:
The SPOOLOPEN OUTPUT function opens a file for sysout (or, special case, the internal reader). It can be used to send output to printers or to submit jobs.
Syntax:
EXEC KICKS SPOOLOPEN OUTPUT
      TOKEN(data-area) NODE(data-value) [ CLASS(data-value) ]
      USERID(data-value) | WRITER(data-value)
END-EXEC
Arguments:
TOKEN(data-area) - specifies an 8 character field where KICKS will store a token that must be used in subsequent SPOOLWRITE and SPOOLCLOSE operations for this file.

NODE(data-value) - specifies an 8 character value used as a DESTINATION for the sysout.

CLASS(data-value) - specifies an 1 character sysout class. Default=A.

USERID
WRITER(data-value) - synonyms for an 8 character userid for the sysout. Code this as 'INTRDR  ' if you want to submit jobs instead of sending the output to a printer.
Exceptional Conditions:
NOTOPEN - the open failed
  RESP=19, RESP2=8,  to many sysouts already open
  RESP=19, RESP2=9,  intrdr allocation failed
  RESP=19, RESP2=10, normal allocation failed
  RESP=19, RESP2=11, allocated sysout open failed
Notes:
  • CICS implements the SPOOLxxx functions with a direct interface to the spooler, but KICKS simply uses dynamically allocated sysout's (including, as necessary, INTRDR sysout's).
  • SPOOLOPEN INPUT not supported. This means KICKS can send jobs or printout to JES, but can't retrieve items that are in the JES queues.
  • WRITER, as a synonym for USERID, is KICKS only (CICS doesn't use it).
  • USERID & NODE are both required. Use USERID('*') and NODE('*') for local output.
  • You can have several sysout files open at once (each with their own token).
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(DCPTST) for usage examples.
SPOOLWRITE
Purpose:
The SPOOLWRITE function writes records to a previously opened sysout.
Syntax:
EXEC KICKS SPOOLWRITE
      TOKEN(data-area) FROM(data-area) FLENGTH(data-value)
END-EXEC
Arguments:
TOKEN(data-area) - specifies an 8 character field where KICKS stored a SPOOLOPEN token.

FROM(data-area) - a data area containing the record to be written.

FLENGTH(data-value) - the length of the data area to be written. If flength is omitted the preprocessor will pass the actual length of the FROM data-area.
Exceptional Conditions:
NOTOPEN - the sysout was not opened.

LENGERR - invalid FLENGTH
  RESP=22, RESP2=0,  FLENGTH <0 or >32767
  RESP=22, RESP2<>0, FLENGTH is 'RESP2' characters to big
Notes:
  • SPOOLREAD not supported.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(DCPTST) for usage examples.
SPOOLCLOSE
Purpose:
The SPOOLCLOSE function closes a previously opened sysout file.
Syntax:
EXEC KICKS SPOOLCLOSE TOKEN(data-area) END-EXEC
Arguments:
TOKEN(data-area) - specifies an 8 character field where KICKS stored a SPOOLOPEN token.
Exceptional Conditions:
NOTOPEN - the sysout was not opened.
Notes:
  • Any open sysouts are automatically closed when at the end of a logical unit of work (task end or SYNCPOINT).
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(DCPTST) for usage examples.
SUSPEND
Purpose:
The SUSPEND function returns control to KICKS, ever so briefly. The purpose of doing so it to reassure KICKS that your program is still functioning properly so it doesn't generate an AICA (run away task, aka timeout) abend.
Syntax:
EXEC KICKS SUSPEND END-EXEC
Arguments:
None
Exceptional Conditions:
None
SYNCPOINT
Purpose:
The SYNCPOINT function announces the end of a logical unit of work within a task.
Syntax:
EXEC KICKS SYNCPOINT [ROLLBACK] END-EXEC
Arguments:
ROLLBACK - indicates that file and database changes in the current logical unit of work should not be committed, but instead discarded.
Exceptional Conditions:
None
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(DELAYTST) for usage examples
  • Like CICS, no feedback is provided to your application as to the success (or failure) of the COMMIT or ROLLBACK.
  • The current version of KICKS does not itself attempt any action at all for a ROLLBACK request, however
  • a SYNCPOINT exit may be used for additional COMMIT and/or ROLLBACK processing, for example to automate database commits/rollbacks. This exit is also appropriately driven at task end (normal or abend). See HERC01.KICKSSYS.V1R5M0.COB(SYNCXIT) for a sample exit program.
UNLOCK
Purpose:
The UNLOCK function releases a record that was held by a READ with the UPDATE argument.
Syntax:
EXEC KICKS UNLOCK DATASET(name) | FILE(name)  END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the
dataset. The dataset must be defined in the FCT.
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60 - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99 - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.
Notes:
  • It would seem UNLOCK should report an error when the file was not locked, but it does not...
  • See the api test members TESTDKS, TESTDES, and TESTDRR (in HERC01.KICKSSYS.V1R5M0.TESTCOB) for usage examples..
WRITE DATASET/FILE
Purpose:
The WRITE function writes one record to a file, which can be a VSAM KSDS, ESDS, RRDS, or path.
Syntax:
EXEC KICKS WRITE DATASET(name) | FILE(name)
       FROM(data-area) LENGTH(data-area)
       RIDFLD(data-area) KEYLENGTH(data-area)
      [RBA | RRN]

END-EXEC
Arguments:
FILE(name)
DATASET(name) - synonyms for the one to eight character name of the dataset. The dataset must be defined in the FCT.
FROM(data-area) - specifies the area that contains the record being written.
LENGTH(data-area) - PIC S9(4) COMP length of the record. On entry it should be set to the size of record to be written, not the length of the FROM argument (unless they are the same). If length is omitted the record size from the file definition is used.
RIDFLD(data-area) - "key" defining the record to be written.

KEYLENGTH(data-value) - PIC S9(4) COMP length of RIDFLD that is to be used to identify record(s) to be written. If keylength is omitted the key size from the file definition is used.

RRN - specified that the RIDFLD is a relative record number for a VSAM RRDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified). Note that the RRN for the 1st record is 1.

RBA - specified that the RIDFLD is a relative byte address for a VSAM KSDS, so RIDFLD should be defined as PIC S9(8) COMP and KEYLENGTH will default to 4 (it should not be specified).
Exceptional Conditions:
DSIDERR (aka FILENOTFOUND) - The DATASET | FILE is not defined in the FCT.

DISABLED - the DATASET | FILE is defined in the FCT, but it is 'disabled', probably because it previously failed to open

NOTOPEN - the DATASET | FILE did not open
RESP2 = 60 - open failed due to VSAM open error, causes file to be marked 'disabled'.
RESP2 = 99 - open failed due to enqueue failure, does NOT disable
ILLOGIC - VSAM error. See EIBRCODE bytes 2,3,4,5 for VSAM rplrtncd, rplerrcd, rplfuncd, and rplcmpon
RESP2 = 110 - undifferentiated.
RESP2 = -1  - should not happen
IOERROR - an I/O error occurred.

LENGERR - the LENGTH argument specifies a record longer than allowed for the file.

DUPKEY - a record already exists with that key. Can also occur if the record contains an alternate key value that already exists or the alternate index does not allow duplicate keys and the alternate index is part of the file's upgrade set.

NOSPACE - there isn't enough space in the file to hold the new record.

INVREQ - the request is invalid.
RESP2 = 23  - embedded key does not match RIDFLD.
RESP2 = 26  - not GENERIC and KEYLENGTH <> real key length.
RESP2 = 902 - can't RBA & RRN both, can't EQUAL & GTEQ both
RESP2 = 903 - can't RBA for RRDS.
RESP2 = 904 - can't RRN if not RRDS.
RESP2 = 905 - KEYLENGTH not allowed with ESDS, RRDS.
Notes:
  • A WRITE to a file cancels any pending READ UPDATE's.
  • See the api test members TESTDKS, TESTDES, and TESTDRR (in HERC01.KICKSSYS.V1R5M0.TESTCOB) for usage examples..
WRITE OPERATOR
Purpose:
The WRITE OPERATOR function sends a message to one or more system operator consoles, and, optionally, waits for a reply, and optionally, times out the reply.
Syntax:
EXEC KICKS WRITE OPERATOR
       TEXT(data-area) [TEXTLENGTH(data-value)]
      [ROUTECODES(data-area) [NUMROUTES)data-value)]]
      [ACTION(data-value) | EVENTUAL | IMMEDIATE | CRITICAL]
      [REPLY(data-area) MAXLENGTH(data-value)
       REPLYLENGTH(data-area) [TIMEOUT(data-value)]]

END-EXEC
Arguments
TEXT(data-area) - the message to be sent to the console(s).

TEXTLENGTH(data-value) - the length of the message (less than 160). If textlength is omitted the preprocessor will pass the actual length of the TEXT data-area.

ROUTCODES(data-area) - a list of 1 byte route codes that indicate to which operator(s) the message should be sent. Each route code is a binary number 1 - 28. The default is 2.

NUMROUTES(data-value) - the number of routes in ROUTCODES. 1 - 28. Required if ROUTCODES specified.

IMMEDIATE
EVENTUAL
CRITICAL
ACTION(data-value) - The Action code associated with the message. For ACTION the valid values are 2=IMMEDIATE, 3=EVENTUAL, 11=CRITICAL. The default is IMMEDIATE.

REPLY(data-area) - The message requires a reply, which will be placed in the data-area given.

MAXLENGTH(data-value) - the maximum length of the reply. If maxlength is omitted the preprocessor will pass the actual length of the REPLY data-area.

REPLYLENGTH(data-area) - the length of the reply the operator typed.

TIMEOUT(data-value) - the number of seconds the operator has to reply before KICKS times out the reply and returns EXPIRED.
Exceptional Conditions:
INVREQ - one of the values ROUTECODES, NUMROUTES or ACTION was invalid.

EXPIRED - The reply timeout expired without operator reply.
Notes:
  • A wait for operator reply could be while. so you should consider using SYNCPOINT to release held resources before use WRITE OPERATOR w/REPLY.
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(WTOTST) for usage examples.
WRITEQ TD
Purpose:
The WRITEQ TD function writes a record to a transient data queue (aka destination).
Syntax:
EXEC KICKS WRITEQ TD QUEUE(name)
       FROM(data-area) LENGTH(data-area)
END-EXEC
Arguments:
QUEUE(name) - Specifies the one to four character name of the destination queue to be written.

FROM(data-area) - specifies the data area that will contains the record to be written.

LENGTH(data-area) - specifies the S9(4) COMP data area that contains the number of characters to write from the FROM data area. If length is omitted the preprocessor will pass the actual length of the FROM data-area.
Exceptional Conditions:
NOTOPEN - the queue is not opened. This is reported only on first access, thereafter DISABLED is reported.

DISABLED - the queue is disabled.

INVREQ - the queue type is extrapartition and it is opened for input (so it can't be written).

QIDERR - the queue isn't defined in the DCT.

LENGERR - the length specified is greater than the maximum allowed for this queue.

NOSPACE - there is not enough space left in the queue to write the record.
Notes:
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(DCPTST) for usage examples.
WRITEQ TS
Purpose:
The WRITEQ TS function writes a record to the specified temporary storage queue.
Syntax:
EXEC KICKS WRITEQ TS QUEUE(name)
       FROM(data-area) LENGTH(data-area)
      [ITEM(data-value) [REWRITE]]
      [NUMITEMS(data-area)]
      [MAIN | AUXILIARY] NOSUSPEND
END-EXEC
Arguments:
QUEUE(name) or QNAME(name) - Specifies the one to 16 character name of the temporary storage queue to be written.

FROM(data-area) - specifies the data area that contains the record to be written.

LENGTH(data-area) - specifies the S9(4) COMP data area that contains the number of characters to write from the FROM data area. If length is omitted the preprocessor will pass the actual length of the FROM data-area.

NUMITEMS(data-area) - specifies the S9(4) COMP data area that, on return, will contain the total number of records in the specified queue (including the one just written).

ITEM(data-value) - specifies, on entry, the S9(4) COMP data area that contains the item number of the queue record to be written (only if REWRITE specified). On return contains the item number written.

REWRITE - specifies that the record should be rewritten.

MAIN
AUXILIARY - these arguments are accepted as comments only.

NOSUSPEND - a required argument indicating immediate return (with RC) if space is not available to write the data.
Exceptional Conditions:
ITEMERR - the item number exists and REWRITE was not given, or, the item number does not exist and REWRITE was given.
QIDERR - the queue doesn't exist (for REWRITE only).

LENGERR - the length specified is greater than the maximum allowed for this queue.

NOSPACE - there is not enough space left in the queue to write the record.
Notes:
  • NOSUSPEND is an optional argument in CICS, but is required in KICKS.
XCTL
Purpose:
The XCTL function terminates the running program and invokes the specified program. Data can be passed to the invoked program.
Syntax:
EXEC KICKS XCTL PROGRAM(name)
      [COMMAREA(data-area) [LENGTH(data-value)]]
END-EXEC
Arguments:
PROGRAM(name) - specifies the one to eight character name of the program to be invoked. The name must be defined in the PPT.

COMMAREA(data-area) - specifies a data area that is passed to the invoked program as a communication area. The invoked program access the data via its DFHCOMMAREA field, so it is the same storage in the invoking program and the invoked program, therefore, since the invoking program is going away, this storage better not be inside it!

LENGTH(data-value) - the length of the data area specified in the COMMAREA argument. If length is omitted  the preprocessor will pass the actual length of the COMMAREA data-area.
Exceptional Conditions:
PGMIDERR - The program is not in the PPT

DISABLED - The PPT entry for the program is disabled (happens for example if the program is not present in the KIKRPL library concatenation).
LENGERR - the LENGTH specified is to large.
Notes:
  • Control does not normally return to the invoking program. However, if the XCTL itself fails (a PGMIDERR condition for example) it will.
  • Since the invoking program will go away the COMMAREA it passes to the invoked program better not be in the invoking program's WORKING-STORAGE!! Usually it will be the COMMAREA that was originally passed to the invoking program...
  • See HERC01.KICKSSYS.V1R5M0.TESTCOB(LINKTST) for usage example.

Use of non-CICS API’s

Although KICKS currently lacks support for some of the CICS command level programming api, I expect it will ultimately support all the important parts of it. That said, a big KICKS advantage over CICS is freedom from the CICS api! If you don’t care about compatibility, techniques that would crash a CICS system will work very well in KICKS! Since KICKS is itself just a normal TSO application that calls your application, your application can do just about anything you would normally do in a normal TSO or batch application.
  • Use normal COBOL file access. Define files using the INPUT-OUTPUT SECTION and FILE-CONTROL in the ENVIRONMENT DIVISION; FILE-SECTION and FD’s in the DATA DIVISION; normal OPEN’s, CLOSE’s, READ’s, WRITE’s, etc in the PROCEDURE DIVISION – just like a batch program. Be sure to include ALLOC’s (and FREE’s) for these files in your KICKS clist… This is a great way to implement some kind of file access KICKS does not support, especially ISAM, direct, and partitioned.
    But take some care: KICKS won’t be providing any kind of sharing support for this, you must implement any necessary sharing controls yourself! Some possibilities for ‘sharing safe’ allocations include temporary files, files with userid qualified file names, anything with DISP=OLD.
  • Use COBOL sort. Define using INPUT-OUTPUT SECTION and FILE-CONTROL in the ENVIRONMENT DIVISION; FILE-SECTION and SD’s in the DATA DIVISION; normal SORT’s and MERGE’s in the PROCEDURE DIVISION – just like a batch program. Be sure to include ALLOC’s (and FREE’s) for these sort work files in your KICKS clist…
    As with non-sort file access take some care: KICKS won’t be providing any kind of sharing support for this, you must implement any necessary sharing controls yourself. This may not be much of a problem as your sort work files would probably be allocated as temporary files.
  • Use COBOL report writer. Similar to use of normal COBOL files and sort work files as above. Note that closed SYSOUT’s are not usually available for JES processing until KICKS ends (when the ALLOC is FREE’d).
  • For GCCMVS apps compatibility is probably not an issue, but for the record your non-compatible GCCMVS based KICKS app can use most any PDPCLIB or other library api's it needs.

Debugging

The debugging process starts when you realize your program is doing something wrong and ends when you understand why.
Many times the whole process happens in your head when you first look at the problem: you've recently made a change to a program, and you realize you didn't consider the situation that you can now see lead to the problem. Debugging over, time to fix the problem.
Unfortunately sometime it's not so easy. Maybe you have just made a change (or two), but you just don't see how your change could possibly cause this mess...
The process (science? art?) you use to discover the cause is way beyond the scope of this documentation, but the process will certainly involve learning more about exactly what is going on to cause the problem, and that will involve using whatever debugging aids are available to help you.
KICKS provides several debugging aids: KICKS abends, user abends via EXEC KICKS ABEND in your program, formatted dumps, internal trace table and auxiliary trace, and KICKS's own 'execution debug facility' (aka KEDF).
When KICKS detects some kind of abnormal condition it usually either generates a defined abend with a dump, or, if your application requested it, returns to your application with appropriate codes set to allow your application to handle the problem. In the event your application requested error return but does not handle the problem it can generate its own abend that can produce a dump (or it can abend without a dump if the cause of the abend is so obvious no dump is needed).
Besides abends generated when KICKS detects some kind of abnormal condition there are three more abends that are the result of MVS detecting some situation. None of these abends are reflected to the user application, all result in KICKS shutdown following a formatted dump and a SYSUDUMP.
The first of these abends is AICA – aka runaway task – which occurs when an application takes longer than the time specified in the ICVR value of the SIT (default 5 seconds) between calls for KICKS service. If your code is doing something that really takes a long time make sure you at least do an EXEC KICKS SUSPEND END-EXEC every 3-4 seconds…
The second of the three special abends is ASRA – aka program check – which occurs when an application (or KICKS itself) gets a program check (0C1-bad instruction, 0C4-storage violation, 0C7-bad data, etc, etc).
The last of the three special abends is ASRB – aka OS abend – when some other kind of OS abend (804/80A out of memory? 222 operator cancel?) is detected.

Transaction Dumps

Here is a sample of the kind of transaction dump KICKS will produce for it's abends, or you can request for your own abends. The KICKS clist usually does not allocate the dump dataset (TRANDUMP), and when KICKS sees this situation it dynamically allocates a SYSOUT dataset for the dump, which is available immediately (you don't have to stop KICKS to get it).
Starting at line 158 you see the Exec Interface Block (EIB) contents. You can see (from EIBTRNID) that this is a dump for the DFXX transaction, task number 0006 (from EIBTASKN). You can also see (EIBAID) that the input was terminated with a PF6. Knowing what you do about the DFXX transaction (see EXAMPLES) all you need to do to reproduce this dump is type DFXX (enter), then type PF6. FYI, the source code for the DFXX transaction in HERC01.KICKS.V1R5M0.COB(DFXXP00A).
A little further down (line 274) you see the COMM-AREA and it’s length. Since a COMM-AREA exists (length not equal zero) this is not the first pseudo-conversational call to the program.
Next (lines 315-320) are the decoded trace table entries for the abending task (task 0006 - matching EIBTASKN). If you look just above that in the trace table you will see the entries for task 0005, which was the first pseudo-conversational call.
After that (lines 379-381) are your program registers for the KICKS call that resulted in the abend, with register 14 being the return point in your program DFXXP00A. Just below that (line 383) KICKS has determined that the register 14 return address is at offset 0D5C in program DFXXP00A. and it then lists program DFXXP00A (starting at program relative address 000000). Further down the listing (line 597) relative offset 0D5C is marked with an eyecatching <<<<. Listing your compiled program is not often useful, but the listing does contain your working storage, in this case beginning with ‘ABEND TESTER’ (line 399).
You know from the first line of the dump that this was an AEIL abend (file not found), and since there is only one file operation in DFXXP00A it’s not really a mystery what happened, but it’s easy to use the information in the dump to pinpoint exactly the line in the program where it occurred. Use of offset into DFXXP00A (0D5C, as given at line 383) and compare that to the code offsets in the compile listing CLIST at line 945, which shows the code was ‘between’ the start of line 334 and line 344 (ie, it was the CALL). Note that 334 and 344 are COBOL compiler line numbers corresponding to my compile listing line numbers 744-754. By either set of line numbers, those are lines of code the preprocessor added for the EXEC KICKS READ DATASET api call.

Internal and External API trace

KICKS has internal (in memory) and external (written to disk, or maybe sysout) traces. The internal trace (default 100 entries, settable by the SIT/startup parameter TRCNUM) wraps around, so that it only show the last 100 (sic) entries. The external trace (called the auxiliary trace) is the same format, but does not wrap so there is less risk of losing the necessary information when the chain of events leading to the error is a long one. The internal trace is (by default) always on, but the external trace is (by default) off because there is a pretty high overhead to running it, and because it may cause a crash if it fills up its disk allocation (or the JES2 spool). Since the external trace is normally turned off, you need to use KSMT to turn it on. The strategy is usually (1) use KSMT to turn it on; (2) do whatever you want traced; (3) turn it off; (4) shutdown KICKS and print (or review online) the auxiliary file. The 'REVIEW' utility (pre-installed on TK3UPD, SU1 and MVS380) is the best way I've found to look at this file online.
It’s also possible to write a user trace entry into the table. EXEC KICKS ENTER FROM() END-EXEC will do this. The resulting trace table entry will be a PU xxxx (program control entry, user trace, xxxx being text specified in ‘FROM’). The internal trace only saves the first 12 (at most) bytes of your FROM message. Up to 256 bytes of your message will be saved in the external trace (if it is turned on).

Use of non-CICS API’s (for debugging)

Earlier we discussed use of non-CICS api’s. Another use for some of those is debugging. You can sometimes use DISPLAY, EXHIBIT and READY TRACE to your advantage. All of these normally display their output on dd SYSOUT, which the KICKS clist directs to SYSOUT(A). DISPLAY can also be directed to SYSPUNCH (no DD for this in KICKS clist, you’d have to add it) and CONSOLE. I find it very convenient to DISPLAY UPON CONSOLE as I don’t have to wait for KICKS to shutdown to see what I’m after – but you need to make sure you don’t go overboard and flood the console (forcing an IPL).
You might be tempted to use ACCEPT (which actually works fine, except…) but I recommend against it. ACCEPT FROM CONSOLE would be your most likely desire and you should understand that it will block – which will trigger an AICA abend as described above when the block exceeds the ICVR value.

KEDF (KICKS Execution Debug Facility)

Debugging from a transaction dump, or using some of the other above discussed techniques is often sufficient. But there's a bigger gun in your arsenal! The Execution Debug Facility ( KEDF ) lets you peek inside your program, while it's running, immediately before and after every (or selected) KICKS api call! You can see the api call itself with all its arguments; the EIB; the COMM-AREA, the program (with WORKING-STORAGE); the internal trace table;  and a variety of KICKS storage areas such as the TWA, the CWA, and the TCTTEUA.
KEDF is enabled by use of the KEDF transaction, saying ON to turn it on.
kedf on                                                                         
                                                                                
                                                                                
                                                                                
which doesn't seem to do much, just acknowledges your request
     KEDF is on                                                                 
                                                                                
                                                                                
                                                                                
At this point you can type the transaction you want to debug (clear screen first, or just type it where KEDF left the cursor)
dfxx KEDF is on                                                                 
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
For this example we'll use the DFXX PF6 case we saw in the above transaction dump, so enter DFXX and press enter
 Transaction: DFXX Task: 0005 Program: DFXXP00A Offset X'000B0E'   KICKS 1.5.0  
 Status: ABOUT TO EXECUTE COMMAND                              14:39:04 14.304  
 EXEC KICKS SEND TEXT                                             EIBFN=X'1806' 
   FREEKB ERASE                                                                 
    LENGTH(1106)                                                                
000000 000BD5C8: C1C2C5D5 C440E3C5 E2E3C5D9 40404040  ABEN D TE STER            
000010 000BD5D8: 40404040 40404040 40404040 40404040                            
000020 000BD5E8: 40404040 40404040 40404040 40404040                            
000030 000BD5F8: 40404040 40404040 40404040 40404040                            
000040 000BD608: 40404040 40404040 40404040 40404040                            
000050 000BD618: 40404040 40404040 40404040 40404040                            
000060 000BD628: 40404040 40404040 40404040 40404040                            
000070 000BD638: 40404040 40404040 40404040 40404040                            
000080 000BD648: 40404040 40404040 40404040 40404040                            
000090 000BD658: 40404040 40404040 40404040 4040D799                   Pr       
0000A0 000BD668: 85A2A240 8140D7C6 409285A8 40A39640  ess  a PF  key  to        
0000B0 000BD678: 86969983 85409695 85409686 40A38885  forc e on e of  the       
0000C0 000BD688: 40869693 9396A689 95874081 82859584   fol lowi ng a bend       
0000D0 000BD698: A27A4040 40404040 40404040 40404040  s:                        
0000E0 000BD6A8: 40404040 40404040 40404040 40404040                            
0000F0 000BD6B8: 40404040 40404040 40404040 40404040                            
000100 000BD6C8: 40404040 40404040 40404040 40404040                            
                                                                                
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Well, this is new - it's the initial SEND TEXT from line 667 in the program listing, caught between DFXX saying to do it and KICKS starting to do it. Let's take a long look at this screen as it's a model for many more we'll shortly see.
The first thing at the top left of the screen is DFXX. Next is the task number (EIBTASKN).. Then the name of the program that is running - DFXXP00A, and the offset within that program to the displayed api call. If we weren't sure this is from the first SEND TEXT in the program we could use this offset, and the compile listing CLIST to verify that it is indeed from line 667.
On the 2nd line left, STATUS tells us this is a picture BEFORE the api call is executed. On the 2nd line right the date and time are for this screen display (not EIB date and time).
The 3rd line starts the api listing, telling us this is a SEND TEXT, with the FREEKB and ERASE options, that the text being sent is 948 characters long, and then showing us the text itself (in dump hex/ebcdic format).
The bottom line provides some clues about our choices. If we press ENTER the command will be executed and we will see the results
 Transaction: DFXX Task: 0005 Program: DFXXP00A Offset X'000B0E'   KICKS 1.5.0  
 Status: COMMAND EXECUTION COMPLETE                            14:39:19 14.304  
 EXEC KICKS SEND TEXT                                             EIBFN=X'1806' 
   FREEKB ERASE                                                                 
    LENGTH(1106)                                                                
000000 000BD5C8: C1C2C5D5 C440E3C5 E2E3C5D9 40404040  ABEN D TE STER            
000010 000BD5D8: 40404040 40404040 40404040 40404040                            
000020 000BD5E8: 40404040 40404040 40404040 40404040                            
000030 000BD5F8: 40404040 40404040 40404040 40404040                            
000040 000BD608: 40404040 40404040 40404040 40404040                            
000050 000BD618: 40404040 40404040 40404040 40404040                            
000060 000BD628: 40404040 40404040 40404040 40404040                            
000070 000BD638: 40404040 40404040 40404040 40404040                            
000080 000BD648: 40404040 40404040 40404040 40404040                            
000090 000BD658: 40404040 40404040 40404040 4040D799                   Pr       
0000A0 000BD668: 85A2A240 8140D7C6 409285A8 40A39640  ess  a PF  key  to        
0000B0 000BD678: 86969983 85409695 85409686 40A38885  forc e on e of  the       
0000C0 000BD688: 40869693 9396A689 95874081 82859584   fol lowi ng a bend       
0000D0 000BD698: A27A4040 40404040 40404040 40404040  s:                        
0000E0 000BD6A8: 40404040 40404040 40404040 40404040                            
0000F0 000BD6B8: 40404040 40404040 40404040 40404040                            
000100 000BD6C8: 40404040 40404040 40404040 40404040                            
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Here are the results. STATUS on the 2nd line tells us this is AFTER the api call is executed. Notice the time at the right of the 2nd line is updated as well.
On the prior screen the line one up from the bottom was blank. Now that line shows the KICKS feedback from the api call. On the left is the text response (would match what you code in a DFHRESP(NORMAL) statement); on the right is EIBRESP and EIBRESP2, both zero in this case as you would expect for a NORMAL return..
Lets see what some of those other keys across the bottom do. PF1 is HELP - seems promising
 Transaction: DFXX Task: 0005 Program: DFXXP00A Offset X'000B0E'   KICKS 1.5.0  
 Status: COMMAND EXECUTION COMPLETE                            14:39:19 14.304  
 EXEC KICKS SEND TEXT                                             EIBFN=X'1806' 
   FREEKB ERASE                                                                 
    LENGTH(1106)                                                                
000000 000BD5C8: C1C2C5D5 C440E3C5 E2E3C5D9 40404040  ABEN D TE STER            
000010 000BD5D8: 40404040 40404040 40404040 40404040                            
000020 000BD5E8: 40404040 40404040 40404040 40404040                            
000030 000BD5F8: 40404040 40404040 40404040 40404040                            
000040 000BD608: 40404040 40404040 40404040 40404040                            
000050 000BD618: 40404040 40404040 40404040 40404040                            
000060 000BD628: 40404040 40404040 40404040 40404040                            
000070 000BD638: 40404040 40404040 40404040 40404040                            
000080 000BD648: 40404040 40404040 40404040 40404040                            
000090 000BD658: 40404040 40404040 40404040 4040D799                   Pr       
0000A0 000BD668: 85A2A240 8140D7C6 409285A8 40A39640  ess  a PF  key  to        
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
                                     ENTER - step     CLEAR - Show user screen  
 PF1  - help      PF2   - src<->api  PF3   - goto bkpt PF4  - skip subroutine   
 PF5  - tog bkpt  PF6   - ....       PF7   - back      PF8  - forward           
 PF9  - trace tbl PF10  - eib        PF11  - commarea  PF12 - working storage   
 13/1 - tog ST    14/2  - cwa        15/3  - quit      16/4 -                   
 17/5 - dump      18/6  - abend      19/7  - top       20/8 - bottom            
 21/9 - twa       22/10 - tctteua    23/11 - tioa      24/12- re center         
What happened was a couple extra lines of help pushed up from the bottom telling us about more PF keys. If you push PF1 again a couple more lines of this will pop up. Push PF1 a third time will return to the single help line of the bottom of the screen.  For now lets press enter to see what comes next.
 Transaction: DFXX Task: 0005 Program: DFXXP00A Offset X'000EC8'   KICKS 1.5.0  
 Status: ABOUT TO EXECUTE COMMAND                              14:40:23 14.304  
 EXEC KICKS RETURN TRANSID(DFXX)                                  EIBFN=X'0E08' 
                                                                                
  COMM-AREA(000BDA30)     COMM-AREA LENGTH(1)                                   
                                                                                
000000 000BDA30: 00                                   .                         
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                     ENTER - step     CLEAR - Show user screen  
 PF1  - help      PF2   - src<->api  PF3   - goto bkpt PF4  - skip subroutine   
 PF5  - tog bkpt  PF6   - ....       PF7   - back      PF8  - forward           
 PF9  - trace tbl PF10  - eib        PF11  - commarea  PF12 - working storage   
If we peeked at the program listing we certainly hoped this would be next! We wrote the screen, so now it's time to become pseudo-conversational by doing a RETURN TRANSID. Let's press ENTER again to see what happens AFTER
ABEND TESTER                                                                    
                                                                                
Press a PF key to force one of the following abends:                            
                                                                                
PF1 = ASRA (Data Exception)                                                     
PF2 = ASRA (Decimal Divide Exception)                                           
PF3 = ASRA (Protection Exception)                                               
PF4 = ABM0 (Missing Map)                                                        
PF5 = AEIO (PGMIDERR)                                                           
PF6 = AEIL (DSIDERR)                                                            
PF7 = AICA  (Run away task)                                                     
                                                                                
                                                                                
Or press Enter to exit without abending.                                        
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
So the program screen is restored and the program is waiting for us to do something. Before moving on this is a good time to say that KEDF almost always is able to properly save and restore user screens, but unfortunately not absolutely 100% of the time. It actually does a much better job of this than does CICS's similar 'CEDF' facility, but it lacks CEDF's ability to debug using a second terminal (which probably really is a 100% solution). Using a second terminal doesn't seem practical in a TSO environment, so my commitment is to fix all problems with KEDF screen restore, but I can only do so if you bring problems to my attention!  Please do!!
Pick PF6 (the AEIL abend) to follow what was going on in the transaction dump
 Transaction: DFXX Task: 0006 Program: DFXXP00A Offset X'000D5C'   KICKS 1.5.0  
 Status: ABOUT TO EXECUTE COMMAND                              14:40:49 14.304  
 EXEC KICKS READ FILE(NOFILE  )                                   EIBFN=X'0602' 
  INTO(X'0BD560')  LENGTH(-1)                                                   
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                     ENTER - step     CLEAR - Show user screen  
 PF1  - help      PF2   - src<->api  PF3   - goto bkpt PF4  - skip subroutine   
 PF5  - tog bkpt  PF6   - ....       PF7   - back      PF8  - forward           
 PF9  - trace tbl PF10  - eib        PF11  - commarea  PF12 - working storage   
So the next thing that happens is the READ FILE api call. Notice it shows where the RIDFLD is located and its length, then the RIDFLD itself in hex and ebcdic, then it shows the INTO location and how big that area is. Notice the size is shown as -1, meaning the program did not supply a length, telling KICKS to use the file's record size. Also notice the task number is no longer 0005, it's incremented to 0006. Press ENTER again and we get
 Transaction: DFXX Task: 0006 Program: DFXXP00A Offset X'000D5C'   KICKS 1.5.0  
 Status: COMMAND EXECUTION COMPLETE                            14:41:25 14.304  
 EXEC KICKS READ FILE(NOFILE  )                                   EIBFN=X'0602' 
  INTO(X'0BD560')  LENGTH(-1)                                                   
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
 Last Response: FILENOTFOUND (DSIDERR)                  EIBRESP=12, EIBRESP2=1  
                                     ENTER - step     CLEAR - Show user screen  
 PF1  - help      PF2   - src<->api  PF3   - goto bkpt PF4  - skip subroutine   
 PF5  - tog bkpt  PF6   - ....       PF7   - back      PF8  - forward           
 PF9  - trace tbl PF10  - eib        PF11  - commarea  PF12 - working storage   
KICKS comes back and says there has been a problem! It show error responses in RED to make them harder to miss. Usually the response will be one word, but FILENOTFOUND is so often called DSIDERR that KICKS recognizes (and displays) both. On the right you see EIBRESP=12 (filenotfound/dsiderr) and EIBRESP=1. You could look these up if you want but I'm sure you already know that "NOFILE" isn't in the FCT. BTW - notice that the 0CE6 offset is the same as it was in the transaction dump.
Before pressing ENTER to see what happens next let's peek at the EIB and the internal trace table. Press PF10 to see the EIB
 Transaction: DFXX Task: 0006 Program: DFXXP00A Offset X'000D5C'   KICKS 1.5.0  
 Status: COMMAND EXECUTION COMPLETE                            14:41:25 14.304  
                                                                                
0D486C: EIBCALEN  1                                                             
0D486E: EIBCPOSN  0460 (15,1)                                                   
0D4870: EIBDATE   0114304F (14.304)                                             
0D4874: EIBTIME   0144049F (14:40:49)                                           
0D4878: EIBRESP   12                                                            
0D487C: EIBRESP2  1                                                             
0D4880: EIBRSRCE  NOFILE                                                        
0D4888: EIBDS     NOFILE                                                        
0D4890: EIBFN     0602                                                          
0D4892: EIBRCODE  00 00 00 00 00 00                                             
0D4898: EIBTRMID  U0C0                                                          
0D48A0: EIBAID    F6                                                            
0D48A1: EIBOPID   999                                                           
0D48A4: EIBUSRID  HERC01                                                        
0D48AC: EIBSYSID  BSP1                 0D48C8: EIBPROG   DFXXP00A               
0D48B4: EIBNETID  CUU0C0               0D48C4: EIBLINE    83886195              
0D48BC: EIBPGMID  DFXXP00A             0D48D0: EIBWC     14:53:09OCT 30, 2014   
                                     ENTER - step     CLEAR - Show user screen  
 PF1  - help      PF2   - src<->api  PF3   - goto bkpt PF4  - skip subroutine   
 PF5  - tog bkpt  PF6   - ....       PF7   - back      PF8  - forward           
 PF9  - trace tbl PF10  - eib        PF11  - commarea  PF12 - working storage   
Notice the difference between EIBTIME and the time in the upper right corner. This transaction has been "frozen" for almost a minute, meaning any resources it's holding are unavailable to other users. That's why you should be a little careful using KEDF if the transaction you are debugging uses resources (ie, files) someone else might be trying to use. They won't be happy about the transaction delays and timeouts you are causing them! Probably the best way to avoid this issue is to use 'test' files for your debugging...
You can also see that it really was a PF6 that got us here (EIBAID = F6).
On the subject of PF keys (and KEDF navigation), recall it was a PF10 that got us to this screen. If you press PF10 again on this screen you return to the api screen. Again and you come back to this screen.. From either of those screens press PF9 to get to the trace screen.
 Transaction: DFXX Task: 0006 Program: DFXXP00A Offset X'000D5C'   KICKS 1.5.0  
 Status: COMMAND EXECUTION COMPLETE                            14:41:25 14.304  
                                                                                
Trace Table storage address 0BB950, length 1600                                 
                                                                                
0001C0 000BBB10:  Program Control, exit               PX000       0005          
0001D0 000BBB20:  BMS, send text                      B04         0005          
0001E0 000BBB30:  Terminal Control, send              T02         0005          
0001F0 000BBB40:  Terminal Control, exit              TX000       0005          
000200 000BBB50:  BMS, exit                           BX000       0005          
000210 000BBB60:  Program Control, return             P05    DFXX 0005          
000220 000BBB70:  Task Control, exit                  KX001       0000          
000230 000BBB80:  Terminal Control, receive           T03         0000          
000240 000BBB90:  Terminal Control, exit              TX024       0000          
000250 000BBBA0:  Task Control, attach                K02DFXX     0006          
000260 000BBBB0:  Program Control, load               P02DFXXP00A 0006          
000270 000BBBC0:  Program Control, exit               PX000       0006          
000280 000BBBD0:  File Control, read                  F06NOFILE   0006          
000290 000BBBE0:  Program Control, abend (might be tr P07    AEIL 0006 <<<<     
                                                                                
                                     ENTER - step     CLEAR - Show user screen  
 PF1  - help      PF2   - src<->api  PF3   - goto bkpt PF4  - skip subroutine   
 PF5  - tog bkpt  PF6   - ....       PF7   - back      PF8  - forward           
 PF9  - trace tbl PF10  - eib        PF11  - commarea  PF12 - working storage   
This is the trace table, scrolled automatically to include the final entry for this transaction ( 0023 ). Note the AEIL abend, and the <<<<. marker to show you the last entry in the table.
Now let's see what DFXX is going to do with the problem.. Press Enter
ABEND TESTER                                                                    
                                                                                
Press a PF key to force one of the following abends:                            
                                                                                
PF1 = ASRA (Data Exception)                                                     
PF2 = ASRA (Decimal Divide Exception)                                           
PF3 = ASRA (Protection Exception)                                               
PF4 = ABM0 (Missing Map)                                                        
PF5 = AEIO (PGMIDERR)                                                           
PF6 = AEIL (DSIDERR)                                                            
PF7 = AICA  (Run away task)                                                     
                                                                                
                                                                                
Or press Enter to exit without abending.                                        
 Transaction Abend Code AEIL                                                    
                                                                                
                                                                                
                                                                                
Not a surprise, it didn't handle it at all! At this point the transaction dump we looked at earlier has been written. And although the transaction has finished, freeing any resources someone else was waiting for, KEDF is actually still active, waiting for us to do something else. We should press CLEAR, then type KEDF OFF to turn it off.
     KEDF is off                                                                
                                                                                
                                                                                
                                                                                
That's a quick intro to KEDF. Now lets look a little deeper.

KEDF filtering

Most real world debugging exercises aren't quite as easily resolved as this DFXX example. And if the transaction dump sometimes doesn't provide enough information, KEDF can easily bury you under too much. One problem is that it "trains" you to press ENTER to move on to the next screen, often before you've spent the time to realize the answer you are looking for is staring back at you from the screen you're about to leave behind.
For me, part of the solution to the overabundance is to filter what I have to look at. Of course filtering has its own risks, and I can't offer much in the way of advice on how to decide what to filter, but the way I often use filtering is to help me confirm or refute a hypothesis. For example I might say "This could be a data problem - let's see what records the transaction is reading and what they look like". If I'm interested in the files, I don't care (at least for the  moment) about programs or maps being loaded, screens being updated, returns or any of that stuff - and not having to look at it will help me focus on the few file api calls I really need to see.
KEDF implements filtering by allowing you to specify which api calls to break on when you start KEDF.  In the last example we used "KEDF ON" to turn it on, "KEDF OFF" to turn it off.  But if you don't say ON or OFF, but just "KEDF", you get a screen to fine tune your KEDF session.
 KEDF (1.5.0) is  OFF  to toggle it ON   press PF4            14:43:31  10/31/14
                                                                                
 Highlighed items will be displayed, to change put cursor on item,  press PF5   
                                                                                
                                                                                
                                                                                
    DELETEQ TD      DELETE         ADDRESS       ABEND         RECEIVE          
    READQ TD        ENDBR          ASKTIME       DUMP          RECEIVE MAP      
    WRITEQ TD       READ           ASSIGN        ENTER         SEND TEXT        
                    READNEXT       ENQ           LINK          SEND MAP         
    SPOOLOPEN       READPREV       DELAY         LOAD          SEND CONTROL     
    SPOOLWRITE      RESETBR        DEQ           RELEASE                        
    SPOOLCLOSE      REWRITE        FORMATTIME    RETURN        HANDLE CONDITION 
                    STARTBR        SIGNOFF       XCTL          IGNORE CONDITION 
    DELETEQ TS      UNLOCK         SUSPEND                     HANDLE AID       
    READQ TS        WRITE          SYNCPOINT     FREEMAIN      HANDLE ABEND     
    WRITEQ TS       WRITE OPERATOR               GETMAIN                        
                                                                                
                    SOURCE TRACE                                                
                                                                                
                                                                                
 To highlight all press PF6, to Un-high all press PF7                           
                                                                                
 Enter (or PF3) - exit+save                                  Clear - exit+nosave
From this KEDF screen you can turn it ON or OFF by pressing PF4. And any of the api's can be toggled on or off by placing the cursor under it and pressing PF5. They can all be turned on by pressing PF6, and all turned off by pressing PF7. Pressing ENTER or PF3 saves the on screen changes and exits, while CLEAR abandons all changes and quits.
So to follow up on my earlier plan to focus on the file control api's, I'd press PF7 to turn them all off, then move the cursor to DELETE and press PF5, then down arrow, then PF5, down, PF5, down, PF5, down, ... until the screen looked like this
 KEDF (1.5.0) is  OFF  to toggle it ON   press PF4            14:44:03  10/31/14
                                                                                
 Highlighed items will be displayed, to change put cursor on item,  press PF5   
                                                                                
                                                                                
                                                                                
    DELETEQ TD      DELETE         ADDRESS       ABEND         RECEIVE          
    READQ TD        ENDBR          ASKTIME       DUMP          RECEIVE MAP      
    WRITEQ TD       READ           ASSIGN        ENTER         SEND TEXT        
                    READNEXT       ENQ           LINK          SEND MAP         
    SPOOLOPEN       READPREV       DELAY         LOAD          SEND CONTROL     
    SPOOLWRITE      RESETBR        DEQ           RELEASE                        
    SPOOLCLOSE      REWRITE        FORMATTIME    RETURN        HANDLE CONDITION 
                    STARTBR        SIGNOFF       XCTL          IGNORE CONDITION 
    DELETEQ TS      UNLOCK         SUSPEND                     HANDLE AID       
    READQ TS        WRITE          SYNCPOINT     FREEMAIN      HANDLE ABEND     
    WRITEQ TS       WRITE OPERATOR               GETMAIN                        
                                                                                
                    SOURCE TRACE                                                
                                                                                
                                                                                
 To highlight all press PF6, to Un-high all press PF7                           
                                                                                
 Enter (or PF3) - exit+save                                  Clear - exit+nosave
Then press PF4 to turn KEDF on, and ENTER to save all changes and exit.
     KEDF is on                                                                 
                                                                                
                                                                                
                                                                                
The filtering changes remain in place until you change them, or until KICKS is shutdown. On restart the default filters are back. But the default filters can themselves be changed if desired. HERC01.KICKSSYS.V1R5M0.INSTLIB(KEDFILTR) is a job to reassemble the default filter table. Contained within are instructions for setting the default state (on or off) of each of the api filters.

Source code trace in KEDF

You probably observed references to 'source trace', 'goto bkpt', 'skip subroutine', and similar options on the preceding screens. These refer to controls for an additional level of KEDF tracing. KEDF normally traces KICKS api calls, possibly filtered. When source trace is enabled (and your program has been compiled for it) KEDF traces all your program's statements. Let's take a quick look at the DFXX transaction again, this time with source trace.
The first step to using source trace is to compile the program with a proc/exec that put the source into an online dataset so that KEDF can display it at run time. Generally speaking the normal compile proc/exec ends with an 'L' (K2KCOBCL, KIKCB2CL, KIKGCCCL, etc). The compile proc/exec for use with source trace ends with an 'S' (K2KCOBCS, KIKCB2CS, KIKGCCCS, etc).
The COBOL procs/exec uses the name of the program as specified in the "PROGRAM-ID." statement to save the online source. GCC programs have no such internal identification, so the GCC procs/exec require you to add a <SN xxxxxxxx> statement to the source, where xxxxxxxx is the name you want used to identify the online source.
JCL to compile DFXX for source trace, using the K2KCOBCS proc, is in HERC01.KICKS.V1R5M0.COB($DFXX).
KEDF is enabled by use of the KEDF transaction, saying ON/S to turn it on with trace
kedf on/s                                                                       
                                                                                
                                                                                
                                                                                
which doesn't seem to do much, just acknowledges your request
     KEDF is on                                                                 
                                                                                
                                                                                
                                                                                
At this point you can type the transaction you want to debug (clear screen first, or just type it where KEDF left the cursor)
dfxx KEDF is on                                                                 
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
For this example we'll use the DFXX PF6 case we saw in the above transaction dump, so enter DFXX and press enter
 Transaction: DFXX Task: 000B Program: DFXXP00A Offset X'000B12'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:07:55 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 67                      
                                                                                
         01  MORE-ARGS.                                                         
             05  FILLER              PIC S9(8) COMP.                            
             05  CWA-BLL             PIC S9(8) COMP.                            
                                                                                
         01  COMMON-WORK-AREA.                                                  
                                                                                
             05  CWA-DATE            PIC 9(06).                                 
                                                                                
         PROCEDURE DIVISION.                                                    
                                                                                
         0000-FORCE-USER-ABEND.                                                 
                                                                                
        *    EVALUATE TRUE                                                      
        *        WHEN EIBCALEN = ZERO                                           
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
The last time we did this, the first thing we saw was the 'before' screen for the SEND TEXT. This time we start with the PROCEDURE DIVISION of the program! Let's take a long look at this screen as it's a model for many more we'll shortly see. The first thing to note is that the source is displayed in several colors. Blue indicates the line will not trace and will not support a breakpoint, which makes sense for all the blue items here as they are either data division or comments. White indicates the line is the current line. Green indicates the line will trace and will accept a breakpoint.
Pressing ENTER on this screen will advance to the next source line.
 Transaction: DFXX Task: 000B Program: DFXXP00A Offset X'000B36'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:02 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 69                      
                                                                                
             05  CWA-BLL             PIC S9(8) COMP.                            
                                                                                
         01  COMMON-WORK-AREA.                                                  
                                                                                
             05  CWA-DATE            PIC 9(06).                                 
                                                                                
         PROCEDURE DIVISION.                                                    
                                                                                
         0000-FORCE-USER-ABEND.                                                 
                                                                                
        *    EVALUATE TRUE                                                      
        *        WHEN EIBCALEN = ZERO                                           
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                   ERASE                                        
                                   FREEKB                                       
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Nothing special here. Press ENTER to advance to the next source line.
 Transaction: DFXX Task: 000B Program: DFXXP00A Offset X'000B5A'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:03 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 73                      
                                                                                
             05  CWA-DATE            PIC 9(06).                                 
                                                                                
         PROCEDURE DIVISION.                                                    
                                                                                
         0000-FORCE-USER-ABEND.                                                 
                                                                                
        *    EVALUATE TRUE                                                      
        *        WHEN EIBCALEN = ZERO                                           
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                   ERASE                                        
                                   FREEKB                                       
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF1                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF1                                             
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Notice we have skipped the blue lines and are at the IF. Since we know this is the initial invocation of DFXX, we expect that EIBCALEN will be zero. Press ENTER to see confirmation in that the EXEC KICKS will be next.
 Transaction: DFXX Task: 000B Program: DFXXP00A Offset X'000BCE'   KICKS 1.5.0  
 Status (S): ABOUT TO EXECUTE COMMAND                          20:08:05 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 74                      
                                                                                
                                                                                
         PROCEDURE DIVISION.                                                    
                                                                                
         0000-FORCE-USER-ABEND.                                                 
                                                                                
        *    EVALUATE TRUE                                                      
        *        WHEN EIBCALEN = ZERO                                           
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                   ERASE                                        
                                   FREEKB                                       
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF1                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF1                                             
                     MOVE SPACE TO ALPHA-FIELD-2                                
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Here we are at the ABOUT TO EXECUTE COMMAND for the SEND TEXT we saw earlier, but this time the SEND TEXT is shown in-line with the souce. PRESS ENTER to see what happens next.
 Transaction: DFXX Task: 000B Program: DFXXP00A Offset X'0011DC'   KICKS 1.5.0  
 Status (S): ABOUT TO EXECUTE COMMAND                          20:08:06 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 136                     
                                                                                
                         SEND TEXT FROM(TERMINATION-MESSAGE)                    
                                   ERASE                                        
                                   FREEKB                                       
                     END-EXEC                                                   
                     EXEC KICKS                                                 
                         RETURN                                                 
                     END-EXEC.                                                  
        *    END-EVALUATE.                                                      
             EXEC KICKS                                                         
                 RETURN TRANSID('DFXX')                                         
                        COMMAREA(COMMUNICATION-AREA)                            
             END-EXEC.                                                          
        *                                                                       
         LOOP-FOREVER.                                                          
             GO TO LOOP-FOREVER.                                                
        *                                                                       
                                                                                
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Two things to note: previously when we looked at an api call we saw both a before (aka ABOUT TO EXECUTE) and an after (aka COMMAND COMPLETE). This time there was no 'after'. The source trace suppresses the 'after' when the result is normal (that is, when EIBRESP=0). The next thing to notice is that quite a few source statements have been bypassed (this being, as line 3 of the screen shows, line 136 of the source, the previous screen showing line 74 or the source). If you were to use the PF7 key to page back on this screen you would see that's due to the preceding lines being part of a large nested IF. Press ENTER to see what happens next.
ABEND TESTER                                                                    
                                                                                
Press a PF key to force one of the following abends:                            
                                                                                
PF1 = ASRA (Data Exception)                                                     
PF2 = ASRA (Decimal Divide Exception)                                           
PF3 = ASRA (Protection Exception)                                               
PF4 = ABM0 (Missing Map)                                                        
PF5 = AEIO (PGMIDERR)                                                           
PF6 = AEIL (DSIDERR)                                                            
PF7 = AICA  (Run away task)                                                     
                                                                                
                                                                                
Or press Enter to exit without abending.                                        
                                                                                
                                                                                
                                                                                
                                                                                
Since the last KEDF screen was for a RETURN TRANSID it should be no surprise to see the DFXX menu next. At this point please press PF6 to follow the path of the earlier discussion.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000B12'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:15 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 67                      
                                                                                
         01  MORE-ARGS.                                                         
             05  FILLER              PIC S9(8) COMP.                            
             05  CWA-BLL             PIC S9(8) COMP.                            
                                                                                
         01  COMMON-WORK-AREA.                                                  
                                                                                
             05  CWA-DATE            PIC 9(06).                                 
                                                                                
         PROCEDURE DIVISION.                                                    
                                                                                
         0000-FORCE-USER-ABEND.                                                 
                                                                                
        *    EVALUATE TRUE                                                      
        *        WHEN EIBCALEN = ZERO                                           
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Back to the PROCEDURE DIVISION entry for the new task 000C. Press ENTER to see what happens next.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000B36'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:18 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 69                      
                                                                                
             05  CWA-BLL             PIC S9(8) COMP.                            
                                                                                
         01  COMMON-WORK-AREA.                                                  
                                                                                
             05  CWA-DATE            PIC 9(06).                                 
                                                                                
         PROCEDURE DIVISION.                                                    
                                                                                
         0000-FORCE-USER-ABEND.                                                 
                                                                                
        *    EVALUATE TRUE                                                      
        *        WHEN EIBCALEN = ZERO                                           
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                   ERASE                                        
                                   FREEKB                                       
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Nothing special here. Press ENTER to advance to the next source line.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000B5A'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:20 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 73                      
                                                                                
             05  CWA-DATE            PIC 9(06).                                 
                                                                                
         PROCEDURE DIVISION.                                                    
                                                                                
         0000-FORCE-USER-ABEND.                                                 
                                                                                
        *    EVALUATE TRUE                                                      
        *        WHEN EIBCALEN = ZERO                                           
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                   ERASE                                        
                                   FREEKB                                       
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF1                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF1                                             
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Nothing special here either. Since this is NOT the first entry we do not expect EIBCALEN to be zero. Press ENTER to advance.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000BF8'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:21 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 81                      
                                                                                
                 IF EIBCALEN = ZERO                                             
                     EXEC KICKS                                                 
                         SEND TEXT FROM(START-UP-MESSAGE)                       
                                   ERASE                                        
                                   FREEKB                                       
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF1                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF1                                             
                     MOVE SPACE TO ALPHA-FIELD-2                                
                     MOVE 100   TO PACKED-FIELD-1                               
                     MULTIPLY PACKED-FIELD-1 BY PACKED-FIELD-2                  
        *        WHEN EIBAID = KIKPF2                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF2                                             
                     MOVE 100  TO PACKED-FIELD-1                                
                     MOVE ZERO TO PACKED-FIELD-2                                
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
As expected the SEND TEXT didn't happen, and the program is in the middle of the string of nested IF's checking to see if a PF key was pressed. Notice that the ELSE is in blue, meaning it will not trace and will not support a breakpoint. When the statements that the preprocessor needs to add to cause a line to trace cannot be added without changing the program logic the preprocessor does not add them, so they show up in blue. ELSE is a very common example, but not the only one.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000CC8'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:23 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 87                      
                                                                                
        *        WHEN EIBAID = KIKPF1                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF1                                             
                     MOVE SPACE TO ALPHA-FIELD-2                                
                     MOVE 100   TO PACKED-FIELD-1                               
                     MULTIPLY PACKED-FIELD-1 BY PACKED-FIELD-2                  
        *        WHEN EIBAID = KIKPF2                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF2                                             
                     MOVE 100  TO PACKED-FIELD-1                                
                     MOVE ZERO TO PACKED-FIELD-2                                
                     DIVIDE PACKED-FIELD-2 INTO PACKED-FIELD-1                  
        *        WHEN EIBAID = KIKPF3                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF3                                             
        *            SET ADDRESS OF COMMON-WORK-AREA TO NULL                    
                     MOVE 0 TO CWA-BLL                                          
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Of course we know we pressed PF6, so it's no suprise the next few screens will display checks for PF keys we did not press. So just press ENTER again to advance.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000D9A'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:25 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 93                      
                                                                                
        *        WHEN EIBAID = KIKPF2                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF2                                             
                     MOVE 100  TO PACKED-FIELD-1                                
                     MOVE ZERO TO PACKED-FIELD-2                                
                     DIVIDE PACKED-FIELD-2 INTO PACKED-FIELD-1                  
        *        WHEN EIBAID = KIKPF3                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF3                                             
        *            SET ADDRESS OF COMMON-WORK-AREA TO NULL                    
                     MOVE 0 TO CWA-BLL                                          
                     MOVE ZERO TO CWA-DATE                                      
        *        WHEN EIBAID = KIKPF4                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF4                                             
                     EXEC KICKS                                                 
                         SEND MAP('NOMAP1')                                     
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Just press ENTER again to advance.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000E2C'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:26 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 99                      
                                                                                
        *        WHEN EIBAID = KIKPF3                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF3                                             
        *            SET ADDRESS OF COMMON-WORK-AREA TO NULL                    
                     MOVE 0 TO CWA-BLL                                          
                     MOVE ZERO TO CWA-DATE                                      
        *        WHEN EIBAID = KIKPF4                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF4                                             
                     EXEC KICKS                                                 
                         SEND MAP('NOMAP1')                                     
                              MAPSET('NOSET1')                                  
                              FROM(I-O-AREA)                                    
                              ERASE                                             
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF5                                           
                 ELSE                                                           
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Just press ENTER again to advance.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000EE2'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:28 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 108                     
                                                                                
                     EXEC KICKS                                                 
                         SEND MAP('NOMAP1')                                     
                              MAPSET('NOSET1')                                  
                              FROM(I-O-AREA)                                    
                              ERASE                                             
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF5                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF5                                             
                     EXEC KICKS                                                 
                         XCTL PROGRAM('NOPGM1')                                 
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF6                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF6                                             
                     EXEC KICKS                                                 
                         READ DATASET('NOFILE')                                 
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Just press ENTER again to advance.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'000F78'   KICKS 1.5.0  
 Status (S): SOURCE CODE TRACE                                 20:08:29 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 114                     
                                                                                
        *        WHEN EIBAID = KIKPF5                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF5                                             
                     EXEC KICKS                                                 
                         XCTL PROGRAM('NOPGM1')                                 
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF6                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF6                                             
                     EXEC KICKS                                                 
                         READ DATASET('NOFILE')                                 
                              INTO(I-O-AREA)                                    
                              RIDFLD(ALPHA-FIELD-2)                             
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF7                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF7                                             
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
Finally we get to the IF statement matching what we typed. Press ENTER to advance.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'001008'   KICKS 1.5.0  
 Status (S): ABOUT TO EXECUTE COMMAND                          20:08:31 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 115                     
                                                                                
                 ELSE                                                           
                 IF EIBAID = KIKPF5                                             
                     EXEC KICKS                                                 
                         XCTL PROGRAM('NOPGM1')                                 
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF6                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF6                                             
                     EXEC KICKS                                                 
                         READ DATASET('NOFILE')                                 
                              INTO(I-O-AREA)                                    
                              RIDFLD(ALPHA-FIELD-2)                             
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF7                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF7                                             
                     PERFORM LOOP-FOREVER                                       
                                                                                
 Last Response: NORMAL                                   EIBRESP=0, EIBRESP2=0  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
And sure enough the program's about to execute the bad read. Press ENTER to advance.
 Transaction: DFXX Task: 000C Program: DFXXP00A Offset X'001008'   KICKS 1.5.0  
 Status (S): COMMAND EXECUTION COMPLETE                        20:08:32 14.306  
 COB program compiled 19:35:11NOV 02, 2014, now at line 115                     
                                                                                
                 ELSE                                                           
                 IF EIBAID = KIKPF5                                             
                     EXEC KICKS                                                 
                         XCTL PROGRAM('NOPGM1')                                 
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF6                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF6                                             
                     EXEC KICKS                                                 
                         READ DATASET('NOFILE')                                 
                              INTO(I-O-AREA)                                    
                              RIDFLD(ALPHA-FIELD-2)                             
                     END-EXEC                                                   
        *        WHEN EIBAID = KIKPF7                                           
                 ELSE                                                           
                 IF EIBAID = KIKPF7                                             
                     PERFORM LOOP-FOREVER                                       
                                                                                
 Last Response: FILENOTFOUND (DSIDERR)                  EIBRESP=12, EIBRESP2=1  
 PF1 - help       PF3 - goto bkpt    ENTER - step     CLEAR - Show user screen  
The last time we saw an api call there was no 'after'. This time there is, because the last response is not zero. Since as you can see neither RESP nor NOHANDLE was coded we know this is going to result in a transaction abend, so press ENTER to see it.
ABEND TESTER                                                                    
                                                                                
Press a PF key to force one of the following abends:                            
                                                                                
PF1 = ASRA (Data Exception)                                                     
PF2 = ASRA (Decimal Divide Exception)                                           
PF3 = ASRA (Protection Exception)                                               
PF4 = ABM0 (Missing Map)                                                        
PF5 = AEIO (PGMIDERR)                                                           
PF6 = AEIL (DSIDERR)                                                            
PF7 = AICA  (Run away task)                                                     
                                                                                
                                                                                
Or press Enter to exit without abending.                                        
 Transaction Abend Code AEIL                                                    
                                                                                
                                                                                
                                                                                
Although the transaction it done, KEDF is actually still active, waiting for us to do something else. We should press CLEAR, then type KEDF OFF to turn it off.
     KEDF is off                                                                
                                                                                
                                                                                
                                                                                
Source trace is a powerful feature and you may be tempted to compile all your programs to use it. You should be aware it has substantial overhead. First there is the file space the source data base uses to store your programs so that they can be displayed online. Probably more significant is the cpu overhead, and the corresponding slow down of executed programs, even when not actively tracing. This is due to adding several new statements before almost every original statement in your program! It is especially noticeable when program loops are used for character handling or similar activates. This effect can be reduced by using the <SD> and </SD> preprocessor markup to turn on and off (respectively) the generation of these additional statements. Of course if generation is off the original statements within the marked off block will show up in blue, meaning that you can't step thru them nor set breakpoints within them. KEBRPGM is a good example of use of <SD> and </SD> for such purpose.

Summary of KEDF commands

ENTER Pressing ENTER restores the user screen and returns to the user program. Often the next user program api occurs so quickly that the user screen is not seen, or seen only as a flash before the KEDF screen is showing again.
CLEAR Pressing CLEAR displays the user screen. Pressing CLEAR in that user screen display returns to the preceding KEDF display. Actually, pressing any AID key will return to the KEDF display.
PF1 ( help ) Pressing PF1 toggles between 1 line, 4 lines, and 7 lines of PF key command help at the bottom of the screen.
PF2 ( src <-> api ) Pressing PF2 switches between Source mode and API mode. If Source mode the first field on the 2nd screen line will show Status (S), if in API mode it will show Status (A).  This is only relevant in source trace mode (see PF13), and the difference is only apparent when the current line is a KICKS api call. If in Source mode the About to Execute Command api call is shown inline with the source, and the Command Execution Complete screen is suppressed. If in API mode the api call screens (both About & Complete) are shown as they normally are when not doing source trace.
PF3 ( goto bkpt ) Pressing PF3 restores the user screen and returns to the user program, then ignores further source or api trace events until until (a) a breakpoint (see PF5) is hit, or (b) a new transaction starts (see PF6), or (c) a KICKS api call results in an exceptional condition (ie, EIBRESP <> 0).
PF4 ( skip subroutine ) Pressing PF4 sets a temporary breakpoint at the next executable statement past the current statement (ie, the next green line), then does a "go to breakpoint" (see PF3). When that breakpoint is hit it is automatically unset. Assuming the current statement is a call or perform, this normally results in 'skipping' the called or performed code. Note however that the "next executable statement past the current statement" may not be the statement that will be executed when the called/performed code returns - so some care must be exercised in using this.
PF5 ( toggle breakpoint ) If the cursor is at the default location (just past Last Response:) pressing PF5 toggles a breakpoint at the current line (the white line in the middle of the screen).  If the cursor is instead on a line that is breakable (green) pressing PF5 toggles a breakpoint on that line. Breakpoints show up in reverse video. When breakpoints are set the right side of line 3 shows the number set and the maximum number the can be set.
PF6 ( .... or transaction id ) Pressing PF6 toggles the help text beside PF6 between '....' and the current transaction id. When it's .... a "go to breakpoint" will stop when the current transaction number changes (ie, the next pseudo conversational task). When it's a transaction id a "go to breakpoint will not stop until the transaction id is different from that.
PF7 ( page backward ) Pressing PF7 scrolls any scrollable area on the screen backward (toward lower addresses). PF8 will scroll the other way. PF19 (shift PF7) scrolls to the top (lowest address). PF20 (shift PF8) scrolls to the bottom (highest address). PF24 (shift PF12) will re-center on whatever was initially showing. These keys can used (for example) to page thru a program source listing in source trace mode.
PF8 ( page forward ) Pressing PF8 scrolls any scrollable area on the screen forward (toward higher addresses).
PF9 ( trace tbl ) Pressing PF9 displays the trace table. The scrolling keys (PF7, PF8, PF19, PF20, PF24) can be used to review the otherwise off screen portions.
PF10 ( EIB ) Pressing PF10 displays the EIB. This usually fits on one screen (but you may need to press PF1 a couple times to reduce the number help lines on a 24 line display).
PF11 ( CommArea ) Pressing PF11 displays a line showing the address and size of the current comm area, and if the length is non-zero it displays the comm area in a scrollable 'dump' format. In this dump format the first column is the offset, the second column is the address, the next 4 columns are 16 characters in hex format, and the last 4 columns are the same 16 characters in ebcdic (dots for unprintable).
PF12 ( Working Storage ) Pressing PF12 displays a line showing the address and size of the current program (including any internal working storage), and if the length is non-zero it displays the program in a scrollable 'dump' format.
PF13 ( tog ST )  Pressing PF13 (shift PF1) toggles source code display on/off. When source code trace is on the first field on the 2nd screen line will show Status (S) or Status (A). When it is off the 2nd screen line will show just Status.
PF14 ( CWA ) Pressing PF14 (shift PF2) displays a line showing the address and size of the common work area, and if the length is non-zero it displays the CWA in a scrollable 'dump' format.
PF15 ( QUIT ) Pressing PF15 (shift PF3) turns off KEDF and returns to the user program. KEDF can be turned on again by using the KEDF transaction.
PF16 ( unassigned )
PF17 ( dump ) Pressing PF17 (shift PF5) generates a transaction dump (code KEDF) for the user transaction, but no abend.
PF18 ( abend ) Pressing PF18 (shift PF6) generates a transaction abend (code KEDF) for the user transaction, which of course also terminates the current KEDF presentation. KEDF remains active however and will trace the next transaction.
PF19 ( top ) Pressing PF19 (shift PF7) scrolls any scrollable area on the screen backward  (to the  lowest address).
PF20  ( bottom ) Pressing PF20 (shift PF8) scrolls any scrollable area on the screen forward (to the highest address).
PF21 ( TWA ) Pressing PF21 (shift PF9) displays a line showing the address and size of the transaction work area, and if the length is non-zero it displays the TWA in a scrollable 'dump' format.
PF22 ( TCTTEUA ) Pressing PF22 (shift PF10) displays a line showing the address and size of the terminal user area, and if the length is non-zero it displays the TCTTEUA in a scrollable 'dump' format.
PF23 ( TIOA ) Pressing PF23 (shift PF11) displays a line showing the address and size of the terminal I/O area, and if the length is non-zero it displays the TIOA in a scrollable 'dump' format.
PF24  ( re-center ) Pressing PF24 (shift PF12)  scrolls any scrollable area on the screen to its initial location.

Securing your program from KEDF trace

If you accidentally leave KEDF turned on you'll see that essentially all command level programs will trace. But a few do not (like KEDF, KSGM, KSSF), and you may wonder how to similarly secure your own program's operation.
First, understand that the overhead of normal KEDF trace (not talking about source trace here!) code in your own program is minimal if KEDF is not turned on. Balance this tiny overhead against the ability to closely observe your program's operation if that becomes necessary. Still, there are may be situations where you do not want your program's operation observed, or have concerns that such observation may cause other problems (such as holding files for long periods).
To prevent KEDF from tracing your COBOL program linkedit it with KIKCOBGX instead of with KIKCOBGL. Linkedit your GCC program with KIKGCCGX instead of with KIKGCCGL. Note this will prevent trace, but will not eliminate the compiled in overhead in a source trace enabled program. The only way to do that is to recompile the program without source trace enabled.

No comments:

Post a Comment