IEFACTRT Exits

I know that I am not alone in my fascination with the so-called "Flower Box" that is produced by the IEFACTRT SMF exit, because I have seen references to collections in other web pages over the years.  (The one that comes to mind is at: PlanetMVS.)  So, as soon as I got MVS 3.8 running smoothly, I started looking at versions of IEFACTRT that would run under MVS 3.8 and provided the information that I wanted to see in my own "Flower Box".

If you decide to install one of the exits that I have included here, you will need to have run the prerequisite jobs from Volker Bandke's instructions which set up the SMP datasets and procedures.  The specific jobs that must be run are:  MVS0040 (Build SMP libraries), MVS0050 (Add Stage 1 output to SMP datasets), and MVS0060 (Build SMP procedures).  If you have followed my instructions for building MVS 3.8, I include a single jobstream which combines all three of these jobs - sysgen03.jcl - in the installmvs.rar archive.

Update July 29, 2020: I had not updated this page in quite a while.  When I first created it I had great ambitions of having a selection of various IEFACTRT exits that could be used with MVS 3.8j, but quickly found that most of the exits in the various files at CBT are from much later editions of MVS (and OS/390 or beyond) and will not assemble on MVS 3.8j.  So I have largely left this page without updates.  But I have recently been updating many of the sections of my web site and I guess it was time to get around to this one.  I have been thinking about writing my own IEFACTRT exit, but even making minor changes to a functioning exit caused me to several times reach for the backups to rebuild my system that would no longer IPL after installing the changed IEFACTRT exit.  I was aware of a jobstream provided in SYS1.SAMPLIB for testing new or modified IEFACTRT exits, so I decided to look into that.

The material in SYS1.SAMPLIB consists of the assembler source for a driver program (TESTEXIT) and a couple of jobstreams.  The first jobstream builds data for IEBDG to use in constructing parameter blocks to test the various exits that may be written for MVS 3.8j.  The second jobstream executes the TESTEXIT driver program, which calls one or more of the exit routines and passes realistic 'dummy' information to the exit routine to see how the routine would function if it were actually installed.  In the actual testing, IEBDG is called by TESTEXIT to generate just the data blocks for the exit being tested.  The input to IEBDG is read from a Partitioned Dataset, where each member specifies the IEBDG parameters for a single exit routine. 

My first big trial was that the IEBDG specs for the IEFACTRT exit are not exactly correct, which can be proven by executing IEBDG the usual way, from a jobstream, and letting it attempt to use the data from the PDS member to build the records into an output dataset.  The actual error is that the fields defined are larger than the output record LRECL, although the error message IEBDG issues does not state it that succinctly.  I thought this might have been something that would have been corrected, so I located a copy of the SYS1.SAMPLIB(TESTEXIT) member from an OS/390 system and, well, they were identical.  I believe that there may be some specific field definitions that may not match exactly the SMF record types 4 and 5 which are processed by the IEFACTRT exit.  But, when I increased the LRECL for the output from 180 to 182, IEBDG (and the driver program) complete, so any errors in specific fields are not significant enough to matter, at least not with anything I have attempted to this point.

If you are interested in writing, or modifying an existing, IEFACTRT exit (or any of the other seven exits), you probably should look into the IBM supplied TESTEXIT facility.  You will need to extract the source program and jobstreams from SYS1.SAMPLIB and modify the JCL to be appropriate for your system.  If you are interested in IEFACTRT, I will make the effort a bit simpler for you by supplying what has worked for me:

  1. Create a Partitioned Dataset to hold the source for the TESTEXIT program and the IEFACTRT exit you wish to test,

  2. Copy the assembler source from SYS1.SAMPLIB to the PDS created above - just the assembler source, which is located following the first SYSIN DD card in the SYS1.SAMPLIB(TESTEXIT) member,

  3. Add the assembler source for the IEFACTRT exit to the PDS created above,

  4. Download the jobstream ../downloads/iefactrt.testexit.jcl and make these modifications:

    1. On the ASSEMBLE PROC statement, change the EXIT= to specify the PDS (created above) and member where the IEFACTRT source is to be read from,
    2. Change the TEST= to specify the PDS (created above) and member where the TESTEXIT source is to be read from,
    3. The LOAD= specifies the PDS where the load module is to be placed; if you change this from SYS2.LINKLIB to a load library that is not in your Link List concatenation, you will need to specify a STEPLIB DD card in the TESTEXIT PROC step to point to the same load library.
  5. Submit the jobstream to assemble the two programs, create the IEBDG input dataset, and execute the TESTEXIT program. 

The jobstream I have supplied has stripped out all functionality other than that required to test the IEFACTRT exit.  You will see warnings on the Link Edit step because the TESTEXIT program is coded to call all eight user supplied exit routines, but you may safely ignore these warnings.  If you want to test the other exits, you will instead need to use the jobstreams supplied in the SYS1.SAMPLIB(TESTEXIT) member, but my goal was only to work on the IEFACTRT exit, so that is what my jobstream focuses on.


Author Source Details/Installation Instructions
Brian Westerman CBT v437 File #088 IEFACTRT-01
Kaiser Foundation CBT v249 File #042 IEFACTRT-02
Memorex CBT Overflow v428 File #038 IEFACTRT-03
Jay Moseley Jay Moseley IEFACTRT-04

I hope that you have found my instructions useful.  If you have questions that I can answer to help expand upon my explanations and examples shown here, please don't hesitate to send them to me:


Return to Site Home Page 


This page was last updated on August 20, 2020.