KICKS

A transaction processing system for CMS & TSO

Examples


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.


The Murach examples

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, INQ2, INQ3, DIN1

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, MNT3

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

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

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

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

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.

CMNT

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.

(Re)installing the Murach examples:

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.

  1. 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

  2. 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'.

  3. 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.

  4. 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
    
  5. 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.

  6. Installation of the DIN1 transaction is detailed in KooKbooK recipe #13.

 

The TAC example

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.

Using the TAC example

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.

(Re)installing the TAC examples:

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=MAP
Finally 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


Copyright © Mike Noel, 2008-2014; last updated 5/13/2015