KICKS |
A transaction processing system for CMS & TSO |
Most of the example programs and maps are preinstalled. The files to use them are
defined and loaded during KICKS install. All the materials necessary to
reinstall them are also included. The DB2INQ1 program installation
materials are also included, but it is not preinstalled as it must be linked and
bound to your own DB2 system.
Mike Murach & Associates, Inc. (www.murach.com) publish a variety of computer programming books including CICS for the COBOL Programmer and the CICS Desk Reference, both excellent references for CICS (and KICKS) programming by Doug Lowe. Murach makes the sample programs for these books available for free download at http://www.murach.com/books/mccp/download.htm. The ‘Desk Reference’ set is actually a subset of the ‘for the COBOL Programmer’ set so there is no need to download both.
These programs are COBOL II (aka COBOL 85) and compile without issue in modern LE compilers on Z/OS.
But they required major modifications to compile using the ANSI COBOL compiler included with MVS38J. COBOL II’s structured programming constructs (EVALUATE, WHEN, END-IF, etc) were particularly problematic. What I did was un-nest all the structures where the ending END-XXXX (END-EVALUATE, END-IF, etc) was not immediately followed by a period. I put these un-nested structures in separate paragraphs at the end of the program, and put a PERFORM for the new paragraph where the nested structure had been. That allowed removal of the END-XXX statement. Generally I left the original statements in the program as comments.
Of course there were numerous smaller changes necessary; you can review the code to see them.
Plainly my goal was not to generate highly maintainable, nicely structured programs! I just wanted to convert them so they could be compiled with the ANSI COBOL compiler, thus allowing use of Murach's high quality CICS programming books with KICKS.
While testing I installed these programs (the originals, unmodified) on a modern Z/OS CICS system to confirm that the behavior of the modified versions in KICKS is just like the behavior of the originals in CICS. I discovered a few bugs in the originals, for example the programs consistently called ENDBR (and expected it to succeed) when the preceding STARTBR had failed. I made simple corrections to these minor errors when I found them.
In addition to the changes I made to get the programs to compile and run I also made a few changes to make them easier to present.
First, the copybooks for some of the files described much of the data as comp-3, but the test data Murach provides is not valid mainframe comp-3 data. Since I needed to fix (in some cases generate new) the test data anyway I decided it would be easier to change the copybooks to define the data as display, which of course makes the data much easier to handle in an upload/download environment.
Second, some of programs use programmer generated symbolic maps (aka dsects), but Murach named the copy members for these symbolic maps the same as the binary map. This is problematic since the standard map generation procedure (KICKS or CICS) will overlay the programmer generated members! To prevent this problem I renamed their programmer generated maps (usually adding a ‘X’ to the end of the name) and changed the COPY statements in the programs to match.
The following table summarizes the book location, program name, transaction id, and current KICKS status of these examples.
Chapter |
Program |
Transaction |
KICKS Status |
2 |
CUSTINQ1 |
INQ1 |
Works, No Issues. |
5 |
CUSTMNT1 |
MNT1 |
Works, No Issues. |
7 |
CUSTMNT3 |
MNT3 |
Works, No Issues. |
8 |
INTEDIT |
(Called Subroutine) |
Works, No Issues. |
8 |
NUMEDIT |
(Called Subroutine) |
Works, No Issues. |
8 |
SYSERR |
(Linked Routine) |
Works, No Issues. |
9 |
DFXXP00A |
DFXX |
Works, No Issues. |
11 |
INVMENU |
MENU |
Works, No Issues. |
12 |
CUSTMNT2 |
MNT2 |
Works, No Issues. |
13 |
ORDRENT |
ORD1 |
Works, No Issues. |
13 |
GETINV |
(Linked Routine) |
Works, No Issues. |
14 |
INVSUM1 |
SUM1 |
Works, No Issues. |
14 |
CUSTINQ2 |
INQ2 |
Works, No Issues. |
15 |
CUSTINQ3 |
INQ3 |
Works, No Issues. |
17 |
DB2INQ1 |
DIN1 |
Works (only in Z/OS with DB2 of course), No Issues. |
20 |
CSTMNTP |
CMNT |
Works, No Issues. |
20 |
CSTMNTB |
CMNT |
Works, No Issues. |
BTW, “No Issues” doesn’t mean the app works the way you or I think it should: It just means the app looks and works the same in KICKS as it does in CICS.
Works the same at least the in the version of CICS I used for testing! ‘CICS’ is a fuzzy target. There are dozens of releases spread over several hardware platforms and released over several decades, plus 3rd party products and local mods. |
INQ1 (and DIN1, the DB2 version of INQ1), INQ2, and INQ3 are increasingly capable versions of a customer lookup screen. In INQ1 you must enter a customer number, which is retrieved and displayed. In INQ2 that earlier behavior continues, but you can also press PF5 to obtain the first customer number on file, or PF6 to obtain the last, and you can use PF7/PF8 to scroll forward and back through the customer file. In INQ3 those earlier behaviors continue, and in addition to the customer file information you are also shown up to 10 invoices for the customer.
INQMAP3 Customer Inquiry INQ3 To start a new browse, type a customer number. Then press Enter. Customer number. . . . . 400003 Name and address . . . : HOWARD SUSAN 1107 SECOND AVE #312 REDWOOD CITY CA 94063 Invoice PO Number Date Total 003585 PROM1 91/07/23 292.83 003590 PROM1 91/07/23 110.49 F3=Exit F5=First F6=Last F7=Pre F8=Next F12=Cancel |
MNT1, MNT2 and MNT3 are increasingly capable versions of a customer file maintenance program, providing typical Add, Change, and Delete functionality. The difference between them is in the edits for the Add and Change screens and the use of screen highlighting to accent fields in error. In these transactions you enter a customer number and an action code (1 for Add, 2 for Change, 3 for Delete).
MNTMAP1 Customer Maintenance MNT2 Type a customer number. Then select an action and press Enter. Customer number. . . . . 400003 Action . . . . . . . . . 2 1. Add a new customer 2. Change an existing customer 3. Delete an existing F3=Exit F12=Cancel |
When you press enter you are taken to a second screen showing the record to be added, changed or deleted (in this case changed).
MNTMAP2 Customer Maintenance MNT2 Type changes. Then press Enter. Customer number. . . . : 400003 Last name. . . . . . . . HOWARD________________________ First name . . . . . . . SUSAN_______________ Address. . . . . . . . . 1107_SECOND_AVE_#312__________ City . . . . . . . . . . REDWOOD_CITY________ State. . . . . . . . . . CA Zip Code . . . . . . . . 94063_____ F3=Exit F12=Cancel |
Make your changes and press Enter, or Press PF3 or PF12 to return to the first screen without updating the record. Press PF3 or PF12 on the first screen to exit (to the menu program). Press PF3 or PF12 again to get back to KICKS.
MENU is the transaction id for the screen you’ve already seen after pressing PF3 or PF12 on one of the previous screens (INQ1, INQ2, INQ3, MNT1 or MNT2). It provides a convenient way to access MNT2 and INQ1 (if you think it really should bring up INQ2 or INQ3 go change the code for INVMENU & recompile!). It also accesses the Order Entry program we will look at next.
MENMAP1 Master Menu MENU Select an action. Then press Enter. Action . . . . _ 1. Display customer information 2. Maintain customer information 3. Enter orders F3=Exit F12=Cancel |
ORD1 is the transaction id that brings up the order entry system
ORDMAP1 Order Entry ORD1 Type order details. Then press Enter. Customer number . . . ______ Customer: P.O. number . . . . . __________ Prod code Qty Description List Net Amount __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ Invoice total: F3=Exit F12=Cancel |
This isn’t an especially easy system to use. You have to know the customer numbers (hint: 400001, 400002, … ) and the product numbers (hint: 0000000001, 0000000005, … ) to be able to generate an order. For example:
ORDMAP1 Order Entry ORD1 Press Enter to post this order. Or press F4 to enter corrections. Customer number . . . 400003 Customer: HOWARD P.O. number . . . . . SUSAN 1107 SECOND AVE #312 REDWOOD CITY CA 94063 Prod code Qty Description List Net Amount 0000000001 7 PENNY 0.01 0.01 0.07 0000000005 3 NICKEL 0.05 0.05 0.15 Invoice total: 0.22 F3=Exit F4=Change F12=Cancel |
Of course you can get a quick list of the customer numbers using the INQ2 or INQ3 transactions to browse that file. Unfortunately there isn’t a browse transactions for the product file, so the easiest way to get a list of all the product numbers is to examine the product file load in userid.kicks.v1r5m0.instlib(loadmur).
When you press ENTER on the above screen you are returned to a blank entry screen to enter another order. When you press PF12 or PF3 on that screen you will see
1 Orders entered. Press Enter to continue. |
And pressing ENTER again takes you back to the MENU screen.
If you press PF4 (to make corrections) instead of ENTER you’ll see
ORDMAP1 Order Entry ORD1 Type corrections. Then press Enter. Customer number . . . 400003 Customer: HOWARD P.O. number . . . . . __________ SUSAN 1107 SECOND AVE #312 REDWOOD CITY CA 94063 Prod code Qty Description List Net Amount 0000000001 7 PENNY 0.01 0.01 0.07 0000000005 3 NICKEL 0.05 0.05 0.15 0000000100 1____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ __________ _____ __________ Invoice total: 0.22 F3=Exit F12=Cancel |
Where you can change the info you entered and/or add new items. When done press ENTER to return to the ENTER/PF4 screen, then ENTER again to post the order.
SUM1 is a transaction id to generate a simple single screen summary of all the invoices on file.
SUMMAP1 Invoice summary SUM1 Press Enter to return to menu Invoices in file. . . . . . : 8 First invoice number. . . . : 003584 Last invoice number . . . . : 003591 Total value of invoices . . : $1,314.93 F3=Exit F12=Cancel |
Press CLEAR to enter the next transaction.
DFXX is a transaction you can use to generate a variety of abends (Just to see what happens I suppose).
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. |
For example, press PF6 here and you get a AEIL abend announcing itself on the line just below the “Or press Enter to …” (ie, the abend message shows up where the cursor was). Press CLEAR to type the next transactions.
It’s also worth noting how CICS and KICKS differ in their response to ASRA (and ASRB, and AICA) abends.
CICS is a multi user application. Even though continued operation after one of these abends may make it far more difficult to determine why the abend occurred, it would be even worse to shut down CICS for all its users just because one application failed for one user. So CICS ‘recovers’ in this situation and (usually) continues to operate ‘normally’. Unfortunately this recovery is not always 100% successful and sometimes CICS has to be ‘rolled’ later anyway, but at least it tried…
KICKS is a single user application. There is no reason to even try to continue after one of these abends, so KICKS just prints its own formatted dump, then (if you provided a SYSUDUMP or SYSABEND allocation) a system dump, then ends.
There is another significant difference between CICS and KICKS in abend processing - CICS is usually configured to backout file and database changes following a transaction abend – but KICKS does not do this for VSAM files. So if your transaction updated a record, then abended – CICS would undo the update – But KICKS would leave the file alone (the update would remain).
How CICS 'backout' is done depends on file type and ESDS's are a very special case (since delete isn't supported). |
If you enter PF1 on the above screen you will next see
KIKSIP1$ ENDED DUE TO ERROR+ READY |
At which point you can restart KICKS or initiate whatever other debugging (TSO test?) you want.
If you try the CMNT transaction you’ll see it looks and works pretty much that same as MENU, MNT2, INQ2. The differences are internal. The CMNT transaction is written as an example of a structured approach, with the ‘business’ parts of the transaction in one program and the ‘presentation’ parts in another.
Installing the Murach examples from the converted source consists of (a) reassembling the maps; (b) recompiling the programs; (c) defining and loading the files; (d) adding the required KICKS table entries; (e) updating the KICKS clist.
Reassembling the maps. The BMS maps are in userid.kicks.v1r5m0.mapsrc, named as in the book. Submit the job $MURMAPS in that library to reassemble the maps
Recompiling the programs. The COBOL copybooks (as well as the map dsects) are in userid.kicks.v1r5m0.cobcopy and the COBOL source programs are in userid.kicks.v1r5m0.cob (for ansi COBOL) and userid.kicks.v1r5m0.cb2 (for le COBOL), in both cases named as in the book. Submit the job $MURPGMS in the 'cob' or 'cb2' library to recompile the programs. These jobs compile without source trace. If you want to use source trace with the compiled programs change the the last character of the compile proc names from 'L' to 'S'.
Defining and loading the VSAM files. JCL to delete/define the VSAM files (including the alternate indexes) is in userid.kicks.v1r5m0.instlib. It uses a special program (STKCARDS) to take several card images and turn them into longer records to load them into the VSAM files with repro. STKCARDS is already compiled and ready to use, but if you want to examine or recompile it the source is in userid.kickssys.v1r5m0.instlib. Submit the job LOADMUR in userid.kicks.v1r5m0.instlib to delete/define/load all the VSAM files.
Adding the required KICKS table entries. The required table entries are included in the default file control table (fct), task control table (pct), and program properties table (ppt). In the event those default tables are altered the specific required entries are:
* FCT ENTRIES FOR MURACH/LOWE CICS FOR THE COBOL PROGRAMMER KIKFCT TYPE=DATASET,DATASET=CUSTMAS KIKFCT TYPE=DATASET,DATASET=INVCTL KIKFCT TYPE=DATASET,DATASET=PRODUCT KIKFCT TYPE=DATASET,DATASET=INVOICE KIKFCT TYPE=DATASET,DATASET=INVPATH,BASE=INVOICE * PCT ENTRIES FOR MURACH/LOWE CICS FOR THE COBOL PROGRAMMER KIKPCT TYPE=ENTRY,TRANSID=INQ1,PROGRAM=CUSTINQ1 KIKPCT TYPE=ENTRY,TRANSID=MNT1,PROGRAM=CUSTMNT1 * KIKPCT TYPE=ENTRY,TRANSID=MNT3,PROGRAM=CUSTMNT3 KIKPCT TYPE=ENTRY,TRANSID=DFXX,PROGRAM=DFXXP00A KIKPCT TYPE=ENTRY,TRANSID=MENU,PROGRAM=INVMENU KIKPCT TYPE=ENTRY,TRANSID=MNT2,PROGRAM=CUSTMNT2 KIKPCT TYPE=ENTRY,TRANSID=ORD1,PROGRAM=ORDRENT KIKPCT TYPE=ENTRY,TRANSID=SUM1,PROGRAM=INVSUM1 KIKPCT TYPE=ENTRY,TRANSID=INQ2,PROGRAM=CUSTINQ2 KIKPCT TYPE=ENTRY,TRANSID=INQ3,PROGRAM=CUSTINQ3 KIKPCT TYPE=ENTRY,TRANSID=DIN1,PROGRAM=DB2INQ1 KIKPCT TYPE=ENTRY,TRANSID=CMNT,PROGRAM=CMNTP * PPT ENTRIES FOR MURACH/LOWE CICS FOR THE COBOL PROGRAMMER KIKPPT TYPE=ENTRY,PROGRAM=INQSET1,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=MNTSET1,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=MENSET1,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=MNTSET2,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=ORDSET1,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=INQSET2,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=SUMSET1,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=INQSET3,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=DB2SET1,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=CMNTSET,USAGE=MAP * KIKPPT TYPE=ENTRY,PROGRAM=CUSTINQ1,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=CUSTMNT1,PGMLANG=CMDLVL * KIKPPT TYPE=ENTRY,PROGRAM=CUSTMNT3,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=SYSERR,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=DFXXP00A,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=INVMENU,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=CUSTMNT2,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=ORDRENT,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=GETINV,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=INVSUM1,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=CUSTINQ2,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=CUSTINQ3,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=DB2INQ1,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=CMNTP,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=CMNTB,PGMLANG=CMDLVL
Updating the KICKS clist
The KICKS clist needs to allocate the files needed for the application – ie – for each fct entry there should be an alloc in the clist. The specific statements are:
ALLOC FI(CUSTMAS) DA('userid.KICKS.MURACH.CUSTMAS') SHR ALLOC FI(INVCTL) DA('userid.KICKS.MURACH.INVCTL') SHR ALLOC FI(INVOICE) DA('userid.KICKS.MURACH.INVOICE') SHR ALLOC FI(INVPATH) DA('userid.KICKS.MURACH.INVOICE.PATH') SHR ALLOC FI(PRODUCT) DA('userid.KICKS.MURACH.PRODUCT') SHR
It’s usually good practice for a CLIST to free anything it allocates and if you examine the KICKS clist you will see the files freed when the CLIST starts (in case they got left allocated somehow) and when the CLIST is cleaning up. Note the SHR disposition. Obviously this is necessary if multiple KICKS users will be accessing these files. It’s also what KICKS uses to determine that it should enqueue access to files. When KICKS sees a DISP=OLD file, which obviously can’t be shared, it does not bother with enqueuing access.
Installation of the DIN1 transaction is detailed in KooKbooK recipe #13.
The TAC example is a real world system used for some years in a State Department of Labor . It was used as a data entry tool for a variety of records which were input to a nightly batch process, the ultimate goal being to reconcile an unemployment tax clearing account. It implements add and browse function on a VSAM esds. At the time it was written, IT management did not trust online update (!) so change and delete functionality, though anticipated, was not implemented.
Despite the screen titles this did not originate in Nevada. I’ve changed the name to protect the …. |
The various record types that can be entered are represented in the TACREC copybook, each redefining the previous. The ADD transactions each enter their own type of record, at the end (the file is a VSAM ESDS, so of course all added records are at the end of the file). The BROWSE transactions simply start at the beginning of the file and read the entire file displaying records matching the subtype in question. Absence of the CHANGE and DELETE functions meant mistakes could not be fixed, but fixing was not really necessary because a new record could be entered and the batch process would only apply the last (last record for a given employee for example) in any day’s run. A typical crude keypunch replacement system from the dawn of online processing.
This is a cookie cutter application. Lots of programs and maps, but all very similar. When you’ve seen one of the ‘add’ programs you’ve seen them all. Same with the browse programs. And of course the change and delete programs are all just stubs. The one thing that’s worth seeing is the use of Handle Aid and Handle Condition API’s, unused in the Murach examples.
While this was once a real production system, I’m not certain where in the system’s life cycle this code came from. There are indications it may have been a development snapshot rather than a production backup. In any event, it was coded in “VS COBOL”, a IBM COBOL dialect preceding COBOL II, and was relatively easy to convert to MVT ANSI COBOL. It was also fairly simple to convert it to run in a modern LE COBOL (One program using examine instead of inspect; and use of the preprocessor -wc option to eliminate its dependence on the VS COBOL when-compiled reserved word). For use as an example it’s nice that it displays the map name and program name at the top of each screen, with the compile/mapgen date on the line below.
Get a clear screen, type BTC0 , and press ENTER
If you look at the PCT you will observe a large number of ‘BTC?’ transactions. Only BTC0 is intended for operator use. The rest are used internally by the TAC system in RETURN TRANSID statements. If you type them yourself you’ll be rewarded with a ‘BRAF’ abend when the launched program discovers it didn’t get a COMM-AREA.. |
TACMS01 NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS TACMENU 09/16/14 09/16/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 ====> |
That gives you a menu of different kinds of records to enter. Select one of those with a PF key and you get to a sub menu with add/review/change/delete. You can also type ‘PF1’ or ‘PF01’ (of similar) at the ‘====> ’. This functionality is leftover from the days when PF keys were not standard on 3270 terminals!
To continue the example, press PF1 or PF13 for Automatic Refunds
TACMS01 NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS TACMENU 06/24/12 06/24/12 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 ====> |
Then (for example) press PF2/PF14 for the review screen
TACMS03 NEVADA DEPARTMENT OF LABOR - ACCOUNTS AND CONTRIBUTIONS TACARR 06/24/12 06/24/12 EMPLOYEE AUTOMATIC REFUND - REVIEW CALENDAR YEAR 00 NAME ADDRESS FIRST LINE CITY STATE ZIP CODE 00000 SSN 000000000 GROSS WAGES 00000000 EMPLOYEE CONTRIBUTIONS 00000 TYPE SSN OF FIRST REFUND TO REVIEW AND PRESS ENTER PRESS ENTER TO REVIEW NEXT REFUND. PRESS CLEAR TO RETURN TO MENU. |
If you press Enter you will review existing records until you reach the end of the file, after which you will be returned to the menu. Or enter an SSN to start the browse with the first of those found.
You can leave the Reconciliation system by repeatedly pressing PF12 or CLEAR.
As with the Murach examples, the maps are in userid.kicks.v1r5m0.mapsrc. Same story for the programs and COBOL copybooks. They’re in userid.kicks.v1r5m0.cob and userid.kicks.v1r5m0.cobcopy respectively. Use userid.kicks.v1r5m0.mapsrc($tacmaps) to generate all the maps, then userid.kicks.v1r5m0.cob($tacpgms) to compile all the programs - or userid.kicks.v1r5m0.cb2($tacpgms)in a Z/OS environment.
Similarly the file delete/define/load is in userid.kicks.v1r5m0.instlib(loadtac), just view and submit.
The table entries are in the default fct, pct, and ppt in userid.kickssys.v1r5m0.instlib – here repeated for the sake of consistency:
* ACCOUNTS AND CONTRIBUTIONS FCT ENTRY (ONLY ONE) * KIKFCT TYPE=DATASET,DATASET=TACDATA * ACCOUNTS AND CONTRIBUTIONS PCT ENTRIES * * MASTER MENU * KIKPCT TYPE=ENTRY,TRANSID=BTC0,PROGRAM=TACMENU * **** WILL NEVER EXIST TRANSID=BTC1 * * AUTO REFUND * KIKPCT TYPE=ENTRY,TRANSID=BTC2,PROGRAM=TACARA KIKPCT TYPE=ENTRY,TRANSID=BTC3,PROGRAM=TACARR KIKPCT TYPE=ENTRY,TRANSID=BTC4,PROGRAM=TACARC KIKPCT TYPE=ENTRY,TRANSID=BTC5,PROGRAM=TACARD * * MANUAL REFUND * KIKPCT TYPE=ENTRY,TRANSID=BTC6,PROGRAM=TACMRA KIKPCT TYPE=ENTRY,TRANSID=BTC7,PROGRAM=TACMRR KIKPCT TYPE=ENTRY,TRANSID=BTC8,PROGRAM=TACMRC KIKPCT TYPE=ENTRY,TRANSID=BTC9,PROGRAM=TACMRD * * CANCELLATIONS * KIKPCT TYPE=ENTRY,TRANSID=BTCA,PROGRAM=TACCCA KIKPCT TYPE=ENTRY,TRANSID=BTCB,PROGRAM=TACCCR * **** WILL NEVER EXIST TRANSID=BTCC KIKPCT TYPE=ENTRY,TRANSID=BTCD,PROGRAM=TACCCD * * DISHONORED ITEMS * KIKPCT TYPE=ENTRY,TRANSID=BTCE,PROGRAM=TACDHA KIKPCT TYPE=ENTRY,TRANSID=BTCF,PROGRAM=TACDHR KIKPCT TYPE=ENTRY,TRANSID=BTCG,PROGRAM=TACDHC KIKPCT TYPE=ENTRY,TRANSID=BTCH,PROGRAM=TACDHD * * DEPOSITS * KIKPCT TYPE=ENTRY,TRANSID=BTCI,PROGRAM=TACDPA KIKPCT TYPE=ENTRY,TRANSID=BTCJ,PROGRAM=TACDPR KIKPCT TYPE=ENTRY,TRANSID=BTCK,PROGRAM=TACDPC KIKPCT TYPE=ENTRY,TRANSID=BTCK,PROGRAM=TACDPD * * REDEEMPTIONS * KIKPCT TYPE=ENTRY,TRANSID=BTCM,PROGRAM=TACRDA KIKPCT TYPE=ENTRY,TRANSID=BTCN,PROGRAM=TACRDR KIKPCT TYPE=ENTRY,TRANSID=BTCO,PROGRAM=TACRDC KIKPCT TYPE=ENTRY,TRANSID=BTCP,PROGRAM=TACRDD * * OTHER MANUAL PROCESSES * KIKPCT TYPE=ENTRY,TRANSID=BTCQ,PROGRAM=TACOTA KIKPCT TYPE=ENTRY,TRANSID=BTCR,PROGRAM=TACOTR KIKPCT TYPE=ENTRY,TRANSID=BTCS,PROGRAM=TACOTC KIKPCT TYPE=ENTRY,TRANSID=BTCT,PROGRAM=TACOTD * * ACCOUNTS AND CONTRIBUTIONS PPT ENTRIES * * MASTER MENU * KIKPPT TYPE=ENTRY,PROGRAM=TACMENU,PGMLANG=CMDLVL KIKPPT TYPE=ENTRY,PROGRAM=TACMS01,USAGE=MAP * * AUTO REFUND * KIKPPT TYPE=ENTRY,PROGRAM=TACARA,PGMLANG=CMDLVL ADD KIKPPT TYPE=ENTRY,PROGRAM=TACMS02,USAGE=MAP * KIKPPT TYPE=ENTRY,PROGRAM=TACARR,PGMLANG=CMDLVL REVIEW KIKPPT TYPE=ENTRY,PROGRAM=TACMS03,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACARC,PGMLANG=CMDLVL CHANGE KIKPPT TYPE=ENTRY,PROGRAM=TACMS04,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACARD,PGMLANG=CMDLVL DELETE KIKPPT TYPE=ENTRY,PROGRAM=TACMS05,USAGE=MAP * * MANUAL REFUND * KIKPPT TYPE=ENTRY,PROGRAM=TACMRA,PGMLANG=CMDLVL ADD KIKPPT TYPE=ENTRY,PROGRAM=TACMS06,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACMRR,PGMLANG=CMDLVL REVIEW KIKPPT TYPE=ENTRY,PROGRAM=TACMS07,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACMRC,PGMLANG=CMDLVL CHANGE KIKPPT TYPE=ENTRY,PROGRAM=TACMS08,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACMRD,PGMLANG=CMDLVL DELETE KIKPPT TYPE=ENTRY,PROGRAM=TACMS09,USAGE=MAP * * CANCELLATIONS * KIKPPT TYPE=ENTRY,PROGRAM=TACCCA,PGMLANG=CMDLVL ADD KIKPPT TYPE=ENTRY,PROGRAM=TACMS10,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACCCR,PGMLANG=CMDLVL REVIEW KIKPPT TYPE=ENTRY,PROGRAM=TACMS11,USAGE=MAP * **** WILL NEVER EXIST PROGRAM=TACCCC,PGMLANG=CMDLVL CHANGE * **** WILL NEVER EXIST PROGRAM=TACMS12,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACCCD,PGMLANG=CMDLVL DELETE KIKPPT TYPE=ENTRY,PROGRAM=TACMS13,USAGE=MAP * * DISHONORED ITEMS * KIKPPT TYPE=ENTRY,PROGRAM=TACDHA,PGMLANG=CMDLVL ADD KIKPPT TYPE=ENTRY,PROGRAM=TACMS14,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACDHR,PGMLANG=CMDLVL REVIEW KIKPPT TYPE=ENTRY,PROGRAM=TACMS15,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACDHC,PGMLANG=CMDLVL CHANGE KIKPPT TYPE=ENTRY,PROGRAM=TACMS16,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACDHD,PGMLANG=CMDLVL DELETE KIKPPT TYPE=ENTRY,PROGRAM=TACMS17,USAGE=MAP * * DEPOSITS * KIKPPT TYPE=ENTRY,PROGRAM=TACDPA,PGMLANG=CMDLVL ADD KIKPPT TYPE=ENTRY,PROGRAM=TACMS18,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACDPR,PGMLANG=CMDLVL REVIEW KIKPPT TYPE=ENTRY,PROGRAM=TACMS19,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACDPC,PGMLANG=CMDLVL CHANGE KIKPPT TYPE=ENTRY,PROGRAM=TACMS20,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACDPD,PGMLANG=CMDLVL DELETE KIKPPT TYPE=ENTRY,PROGRAM=TACMS21,USAGE=MAP * * REDEEMPTIONS * KIKPPT TYPE=ENTRY,PROGRAM=TACRDA,PGMLANG=CMDLVL ADD KIKPPT TYPE=ENTRY,PROGRAM=TACMS22,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACRDR,PGMLANG=CMDLVL REVIEW KIKPPT TYPE=ENTRY,PROGRAM=TACMS23,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACRDC,PGMLANG=CMDLVL CHANGE KIKPPT TYPE=ENTRY,PROGRAM=TACMS24,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACRDD,PGMLANG=CMDLVL DELETE KIKPPT TYPE=ENTRY,PROGRAM=TACMS25,USAGE=MAP * * OTHER MANUAL PROCESSES * KIKPPT TYPE=ENTRY,PROGRAM=TACOTA,PGMLANG=CMDLVL ADD KIKPPT TYPE=ENTRY,PROGRAM=TACMS26,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACOTR,PGMLANG=CMDLVL REVIEW KIKPPT TYPE=ENTRY,PROGRAM=TACMS27,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACOTC,PGMLANG=CMDLVL CHANGE KIKPPT TYPE=ENTRY,PROGRAM=TACMS28,USAGE=MAP KIKPPT TYPE=ENTRY,PROGRAM=TACOTD,PGMLANG=CMDLVL DELETE KIKPPT TYPE=ENTRY,PROGRAM=TACMS29,USAGE=MAPFinally the KICKS clist allocates the file needed for the application – ie – for the one fct entry there should be an alloc in the clist. The specific statement is:
ALLOC FI(TACDATA) DA('USERID.KICKS.TACDATA') SHR