Where are the parts of an application stored?
On z/OS, files are generally called data sets. There are many different types of data sets, but the ones that we will focus on are:
- Sequential data set - a file that is read from start to finish
- Partitioned data set (often called PDS or PDSE) - a file that is partitioned into members, each of which acts as a sequential data set. A partitioned data set allows you to group files together. ISPF makes extensive use of partitioned data sets to store application elements. For example, you will have one PDS to store your panels, and a different one to store your messages. These data sets are called ISPF libraries.
On z/OS, library concatenation is a powerful tool. It lets you group several related libraries together, and then search them in order for a given member. This lets you have application fixes in a different library from the production version, for example. A concatenation of data sets is identified by a ddname (Data Definition Name). You associate ISPF libraries to ddnames using the TSO ALLOCATE command.
ISPF uses the following ddnames to find the application elements:
ddname | application element |
---|
ISPPLIB | panels |
ISPMLIB | messages |
ISPTLIB | tables |
ISPTABL | output tables |
ISPPROF | profiles |
ISPLLIB | functions written in a compiled programming language and stored as load modules |
SYSEXEC / SYSPROC | functions written in REXX |
Note that the ISPF-specific ddnames all start with ISP. Prefixes ISP and ISR are reserved for ISPF use, so do not name your application elements with names that start with ISP or ISR. SYSEXEC and SYSPROC are not specific to ISPF, and can be used to hold REXX execs for any application you want to run, not just ISPF.
ISPF itself is an ISPF application. That is, just as ISPF processes functions, panels, messages, and tables in your application, ISPF processes its own functions, panels, messages, and tables. ISPF is shipped as a set of data sets for each of these types of data.
Data Set | application elements |
---|
ISP.SISPCLIB | command procedure functions |
ISP.SISPEXEC | command procedure functions |
ISP.SISPLOAD | load module functions |
ISP.SISPLPA | load module functions stored in the Link Pack Area |
ISP.SISPMACS | macros |
ISP.SISPMENU | messages in English |
ISP.SISPPENU | panels in English |
ISP.SISPSENU | skeletons in English |
ISP.SISPTENU | tables, including profiles and command tables, written in English |
Creating Application Data Sets
You need to create data sets to hold the parts of your application. The easiest way to create the data sets is to use the ISPF Data Set Utility. From the ISPF Primary Options Menu, type 3 in the Options field and press the enter key.
Then, on the Utility Selection Panel, type 2 in the Option field and press enter. (As a shortcut, you can type 3.2 on the Primary Options Menu to go directly to the Data Set List Utility, without displaying the Utilities selection panel first.)
The allocate command creates data sets. Enter A on the command line, and type PANELS in the Name field. This will create a data set with the name of prefix.PANELS to hold your panel definitions. The prefix is your TSO prefix, which is usually your userid, and it is automatically added to the data set name.
You can give further details about the data set on the Allocate New Data Set Panel. The Storage Class, Management Class, and Data Class are site dependent. If there aren't valid values in these fields, you can try leaving them blank. Blank out the volume serial if it has a value, so the volume value takes a system default. You can set the Space units as TRKS (for tracks) and the primary quantity as 10 to initially allocate the data set as having 10 tracks. A secondary quantity of 10 tracks means that if the first 10 tracks get filled up, another 10 are added. A record format of FB means that the data set has fixed blocks, and a record length of 80 means that each record in the data set has 80 bytes. Eighty byte records are frequently used for mainframe data sets, and in many cases 80 byte records are required. A Data Set Name Type of Library means that the data set will be a PDSE, which is useful because the system handles a lot of the housekeeping that you would have to do yourself with a PDS.
Press Enter to complete the allocation. This returns you to the Data Set Utility panel, and a short message is in the upper right corner of the screen. If the allocation was successful, the message says, "Data set allocated." Press the F1 key (which is assigned to the Help command, by default) to see more information in a long message. The long message tells you the name of the data set allocated and the volume it was allocated on.
To allocate a library for the Dialog Tag Language parts which you can use to define the panels, change the name of the data set name to DTL, and use the A command. The values you used to define the PANELS library should still be there, so just press the Enter key. You can do the same for data sets named MSGS for messages, TABLES for tables, and SKELS for file tailoring skeletons if you want to play around with these features.
Program objects (which are sometimes called load modules) are allocated slightly differently. Allocate a data set called LOAD. Program objects have unformatted records. You can use the same defaults for most of the fields as the other libraries, but set Record format to U and Block size to 6144.
You now have the data sets you need to write an ISPF application.