PDSEGEN User’s Guide

Or how to effectively use PDSE Version 2 Libraries with Member Generations.

Author: Lionel B. Dyck

Table of Contents

Changes

Overview

What are member generations?

Why use member generations?

Cautions

Notes

PDSE Version 2 Member Generation Basics

PDSEGEN

Getting Started

PDSEGEN Initial Prompt

Member Filtering

Primary Commands

Backup

Browse

C

Compare

Copy

Edit

Filter

Find

Genonly

Hide

HIGen

ID and MINE

Info

Locate

Model

Options

Output

Prune

REFList

REFresh

Restore

Set

Setmacro (SM)

Sort

Submit

Validate

View

Line Selection Options

Block and Count Selection Commands

Attribute or A

Browse or B

Edit or E

COMpare or Z

COPy or C

Delete or D

EXecute or X

Hide or H

Info or I

Klone, Clone, or K

Mail or M

Promote or P

RECover or G

REName or R

RENSwap or Q

SUbmit or J

Tryit or T

User or U

View or V

/ and O

=

References

Appendix A – Notes about PDSEGEN

Appendix B – Issues with PDSE Version 2 Member Generations

Appendix C – Vendor Issues

Appendix D – Vendor Products and Open-Source (GPL) Applications that Support PDSE Member Generations

Appendix E – Sample Backup/Restore JCL

Appendix F – Sample Copy JCL

Appendix G: IBM APARs

Appendix H – Acknowledgements

Changes

5.6.4

- Add support to define an initial Edit Macro (SETMacro or SM)

5.6.1

- Add panel for AGE display

5.5.7

- Support Find in a non-member generation PDS/PDSE

- Support Filter of xx:yy (from:to)

- Support Filter (m1 m2 m3) with masking

5.5.6

- Allow OPTIONS to be abbreviated a O as well as previous OP.

5.5.4

- Add REFList command to select a data set to change to from the ISPF Reference List

- Change the SET options for displaying the Change History

- Clean up change history to retain only version 5.x.x

5.5.1

- Update to add new TRYIT line command option.

5.4.5

- Update the OPTion panel display to include MINE and ID

5.4.4

- Add new ID and MINE commands to filter member display by userid.

5.4.0

- Add 4 new member display panels for those who need a larger relative generation field (> 99) accessed by using Left and Right scrolling.

5.3.0

- Find alias is now just F instead of FIN

- Find will find the string in both the member name and member data

- SORT USER now changed to SORT ID

- Column header changed from USER to ID

5.2.2

- Addition of new Rename Swap line command. RENSWAP or Q.

5.1.0

- Added new change command option of C > to change to the PDS/PDSE that was the target for the recent COPY command

- Added new Options command to display a prompting panel for all available PDSEGEN commands

- The Title on all panels changed to be more readable and consistent

- Update to the SET dialog with an option to disable/enable viewing the change history tutorial panel when the version or release (v.r.m) changes

- Enhance the command to allow a member filter as a member name when calling PDSEGEN

- Allow a dataset-name(filter) in the dataset list

Overview

With the introduction by IBM with z/OS 2.1 of PDSE Version 2 member generations there has been a need for tools to enable the average user to easily exploit this capability. Unfortunately neither IBM, nor other vendors, has fully implemented support for member generations leaving the average user without the ability to use member generations unless they purchase a product with that support.

What are member generations?

A member generation is similar to a generation data set (GDS). With a GDS when a new generation data set is created using dsname(+1), it is then subsequently referenced as dsname(0) and the prior generations as dsname(-1), dsname(-2), etc. The same is true for member generations. When the current member is updated and saved it pushes the prior generation 0, or base, member to -1 and older generations are pushed to -2, -3, etc. As with generation datasets, member generations have absolute generation numbers which can be used in some applications.

Another way of looking at generations is that each generation is a previous version of the current generation.

When a generation is added that causes the number of generations to exceed the defined maximum limit defined for the dataset then the oldest generation ‘rolls off’ and is removed.

Be aware that using member generations will increase the space required for your PDSE.

Why use member generations?

The question has been asked why use member generations and what value do they provide?

Many users of the traditional PDS have learned that until a PDS is compressed that they can, using the right tool, recover the prior ‘versions’, and deleted members, from the gas in the PDS. This wasn’t a complete solution as the member name was unknown and the ISPF statistics were lost. The PDS command is an example of a tool that provided this capability.

Generations are a way to save prior versions of a member so that they could easily be accessed (when using the right product). There are many source code versioning products that have supported versioning, which is effectively the same as generations, for years. Those are formal products which enforce versioning as a way to track changes.

The less formal approach to member versioning is to use member generations. Each time a member is saved, the contents of that member prior to the update are saved in a new generation, up to the limit defined for the PDSE. This makes it much easier to recover a working version of source code than trying to recover the ‘gas’ member in a PDS when using a supported product. Access to a generation is also extremely helpful to find out what was changed that broke something in the base member.

Cautions

One major issue with generations is that they CANNOT be referenced or accessed using either JCL or dynamic allocation. The generations are ONLY accessible using a product that has been member generation enabled such as PDSEGEN and to a more limited extent IBM’s ISPF.

Before rolling out member generations a review was made of the available tools which were found lacking. Among the deficiencies are:

1. IEBCOPY ignores generations

2. ISPF has a very cumbersome, non-intuitive, interface to member generations

1. Many ISPF services have no awareness of generations

3. And more – see the Appendix C and Appendix D for a more comprehensive list of member generation issues.

PDSEGEN was developed to address this gap, with the hope that IBM will step up and address all of the issues in the next release of z/OS (2.4 at this point in time). The more installations that raise the issue with both IBM, and other vendors, the sooner there will be full support for member generations.

Notes

This User’s Guide attempts to document all of the features and functions available with PDSEGEN, however the definitive source for up to date information is the ISPF Tutorial that is distributed with the PDSEGEN release.

All screen captures were done using the Techsmith SnagIt from Microfocus Reflections 3270 sessions using the Ice theme.

PDSE Version 2 Member Generation Basics

Member generations must be enabled in SYS1.PARMLIB member IGDSMSxx using the MAXGENS_LIMIT(0-2000000000) statement and are only allowed in PDSE Version 2 libraries.

When a member in a generation enabled PDSE is saved or replaced, the prior version of the member is saved as a generation. The generation is stored with a generation number and can be referenced in ISPF Browse/Edit, and some other products, using either the relative generation number (e.g. -1 to -2000000000) or the absolute generation number (1 to 2000000000).

If you do not have access to read SYS1.PARMLIB for the current IGDSMSxx member to find the MAXGENS_LIMIT member then you can use this short REXX exec to find it:

/* REXX */

Numeric Digits 10

CVT      = C2D(Storage(10,4))

CVTDFA   = C2D(Storage(D2X(CVT + 1216),4))   /* cvt + 4c0 */

DFAMGEN  = C2D(Storage(D2X(cvtdfa + 76),4))  /* dfa + 4c */

Say ‘System MAXGEN Limit is:’ DFAMGEN

To allocate a PDSE Version 2 with generations enabled use JCL:

//ALLOC EXEC PGM=IEFBR14

//DD1 DD DSN=hlq.user.pdse,

// DSNTYPE=(LIBRARY,2),MAXGENS=5,

// DCB=(RECFM=FB,LRECL=80,BLKSIZE=32720),

// UNIT=SYSALLDA,SPACE=(CYL,(1,1,1)),

// DISP=(NEW,CATLG,DELETE)

Or use ISPF 3.2:

If the MAXGEN specified is greater than the system limit then the allocation will fail.

When in ISPF Edit on a member, using SAVE will save the current member and push the prior version of the member to generation -1. To explicitly save a new generation use SAVE NEWGEN and to avoid creating a new generation use SAVE NOGEN. This is also true if a member in a generation enabled PDSE is updated using any tool, including if the member is updated as part of a batch JOB with the member referenced in a DD statement.

PDSEGEN

PDSEGEN is an ISPF application that provides the user with a, hopefully, easy to use interface to work with PDSE member generations. It provides the following capabilities which will be elaborated upon later in this document:

- Backup and Restore

- The ability to backup a PDSE with member generations, so that the generations are not lost by creating a PDS with all of the members and generations in a format that can then be copied, archived, transported, etc. by any utility that processes PDS datasets. Then the ability to fully restore the backup file into a full PDSE with all members and generations.

- Browse and View

- The ability to use ISPF Browse and View on all members and generations.

- Edit

- The ability to use ISPF Edit on just the base member.

- An attempt to Edit a generation will have the Edit converted to View. This behavior is unique to PDSEGEN.

- Compare

- The ability to compare a generation to its base member.

- The ability to compare 2 generations of a member.

- Copy

- The ability to copy a PDSE, entirely or using a member mask, to another PDSE where all generations are copied with their respective members.

- Find

- To find a string in all the members and generations in the member list display. Will also find the string within the member name.

- Genonly

- To hide and unhide base members from the member list display.

- Hide

- To hide and unhide member generations from the member list display.

- HIGen

- To display the ‘dummy’ members which show the highest absolute generation used for the member.

- Klone

- To make a clone (copy) of the member (used K as C was already in use for Compare).

- Mail

- This option will invoke the XMITIP application to allow the user to e-mail the member, or generation (if this option has been enabled).

- Model

- This option will present a panel with allocation information to allocate a new dataset based on the characteristics of the existing dataset.

- Promote

- The ability to ‘promote’ a generation to its base member.

- Prune

- The ability to remove obsolete generations from the PDSE library.

- Recover

- The ability to ‘recover’ a generation to a new, unique, member.

- Rename

- The ability to rename a member and all related generations.

- The ability to swap member names, and generations, of two members.

- Execute (X)

- The ability to directly execute a CLIST or REXX member.

- Set

- Change default colors, table display preference for last referenced member, and default select (S and /) action.

- Setmacro

- Define an ISPF Edit Initial Macro for use based upon the dataset suffix.

- Submit

- The ability to directly submit a member for batch processing.

There is also a reasonably complete ISPF Tutorial for the application which will have up to date information on the features and functions of PDSEGEN.

Getting Started

To use PDSEGEN enter TSO %PDSEGEN, with or without a dataset name and optional filter, on any ISPF command line or enter %PDSEGEN next to any dataset name in an ISPF 3.4 or DSLIST display.

Syntax:

PDSEGEN dataset-name filter SET=x

or

%PDSEGEN *

Or

%PDSEGEN dataset-name(filter)

Using an * for the dataset name will display the last 15 referenced datasets from which to select.

The filter can be any valid filter and/or date filter. If both filters are used the date filter must be last.

If SET=x is used then x must be a valid SET option (B, E, V, or /)

PDSEGEN Initial Prompt

This prompting panel will display if you do not provide a dataset name.

You will need to enter the dataset name of a PDSE that was defined as a version 2 library and with generations enabled.

The default option is used when a member is selected using the S selection. It may be Browse, Edit, View, or /. This can also be changed using the SET command when using the application. The / will bring up a prompting popup to select the desired option.

The filter is any valid member, mask, or date filter.

On this panel will be the dataset name being processed and the maximum number of generations defined for it. The maximum number of generations may be less than what is allowed by the installation.

The use of the Left (PF10, or Right (PF11), keys will change to the alternate member list display which removes the Init column and uses four digit years:

- Continue using the Left (PF10) or Right (PF11) keys and the display will cycle to the expanded line command displays. There is an expanded display with 2 digit years and 4 digit years. These displays remove additional information which is still available using the I, or Info, line selection command.

If a dataset name of * is used on the PDSEGEN prompting panel then this panel will be displayed:

On the dataset selection panel will be the last 25 datasets accessed using PDSEGEN. The entries can be removed (R), moved (M) to the top, sorted, or the entire list cleared. All underlined fields are point and shoot with the exception of the Command line.

Member Filtering

The member filter will limit the members that will be displayed. The filtering rules are:

- ABC* will only select those members that start with ABC

- ABC: is the same as ABC*

- *ABC will select only those members that end with ABC

- ABC/ and /ABC will select only those members with ABC anywhere in the member name

- ABC will only select member ABC

- A%C will check for a single character (may use % multiple times)

- A*E will check for multiple characters (may use * multiple times)

- A:Z will display members starting with A thru members starting with Z

- (mem1 mem2 mem3) will display members based on member name or member-mask

The above filters will also work on the Browse, Edit, SUBmit, and View commands.

Date filtering, which is only available in the ISPF dialog and is not supported in the Copy operations, can be very helpful as well. The date filtering options are:

TODAY                  Only members/generations updated today

WEEK                  Only members/generations updated in the last 7 days

MONTH            Only members/generations updated in the last 30 days

YEAR                  Only members/generations updated this year

SINCE yy/mm/dd      Only members/generations updated since the date

SINCE –nn            Only members/generations updated since the prior nn days

The date filter options can be entered with, or without, the FILTER command.

The Filter can be very useful to limit the members in the display. Filtering is also used for Copy and Prune operations.

The ? symbol can also be used in place of the % symbol for single character masking.

Primary Commands

Backup

The Backup command will bring up a prompting panel.

Note: See Restore for the updated Restore dialog. This Backup dialog will still perform a Restore however the new Restore dialog has more capabilities.

The target PDSE is the name of a new, currently must not exist, dataset name. It will be created based upon the allocation information of the input PDSE but without member generations enabled.

The operation should be B for Backup or R for Restore. The operation will be verified against the Input dataset name. If the Input has generations enabled then Restore will not be allowed, and vice versa.

The Backup process will backup the members using the oldest generation first so that the restoration process can begin with the oldest and end with the newest. The backup members will retain the ISPF statistics of the original member so that they can be reapplied during the restore.

A progress popup will show as the backup progresses:

For Backup processing the application will create the target dataset and then copy all members and generations to it into special member names. There are three special members that will be in the target backup dataset:

- $ALLOC

- This member will contain the generation count enabled for the input PDSE

- Only change this if you want to change the MAXGEN value for the PDSE that will be created during the restore process.

- $BACKUP

- This member will be a copy of the backup report.

- $INDEX

- This member is an index of the original member and generation along with the name in the backup PDSE.

The backup dataset:

You should NEVER change any member within the backup PDSE.

This backup dataset can now be processed by IEBCOPY, TSO TRANSMIT, FTP, ISPF 3.3 (Copy), or any other utility that can process a normal PDS.

The Restore process is the reverse of Backup. The input PDSE must be a backup dataset and the target PDSE dataset name must not exist as it will be allocated using the information in the $ALLOC member of the backup PDSE and the current allocation characteristics of the backup PDSE.

If you want to change the MAXGEN limit on the restored PDSE, edit the $ALLOC member to change the value before processing the restore.

Be aware that during the restore process the MAXGEN value will be compared to the system MAXGENS_LIMIT and if MAXGEN is greater, then the MAXGENS_LIMIT will be used. This could result in the loss of older generations.

The restoration process will copy the members from the backup PDSE to the newly created PDSE in sequence so that the oldest generation is copied first and finally the generation 0, or base member, is copied last. This will cause all the generations to retain their relative generation sequence although the absolute generation number will be lost.

PDSEGEN will work on the backup PDS. Use ISPF Edit (or View) on any of the backup members (names starting with @) and use the ISPF Edit command GNAME to find out which real member the backup member maps to:

The MSG line displays the real member name along with the absolute generation and the relative generation.

Browse

Browse, or just B, may be used to browse a member from the command line.

Syntax:            B member-name generation

The member-name may be a member name or *. If the member name is an * then all members in the ISPF table will be browsed one at a time.

The member name may also be a valid filter mask, such as A%C*F.

Use the H (hide) line selection command, along with filtering, to limit the number of members browsed when using a member-name of *.

The generation is any relative generation number (e.g. -51) providing it exists for that member.

C

C will change to another PDSE. If used without a dataset name then the entry panel will be displayed. If used with a dataset name, and that dataset exists, then that dataset will be opened. If the dataset does not exist then the entry panel will be displayed.

Syntax:            C dataset-name filter

If the dataset name specified is * then the previous dataset will be opened, providing it was open during the invocation of PDSEGEN.

If filter is specified then it will over-ride any existing filter. If filter is not specified then any existing filter will be used.

If the dataset name is ? then a selection panel will be presented with the previous 15 most recent datasets available to select by number or point and shoot.

If the dataset name is a number then that will be used to select the dataset with that number in the list. If the number has no dataset then the normal prompting panel will be displayed.

If the dataset name is > then the dataset that was the target of a recent COPY command, or line selection, will become the new active dataset.

Both the number and the dataset name are point and shoot enabled, or the number may be entered in the command field.

If the desired dataset is not in the list then the top row is available to enter a dataset name.

Use Rnn or R nn to remove a specific dataset or Mnn or M nn to move a selected dataset to the top of the list. To empty the list, use the CLEAR command. Use SORT, or SORTD, to sort the datasets.

Compare

The Compare command is more flexible as it can compare two non-0 generations. If the command is entered without parameters a popup appears:

Or the command may be entered:  compare ispf -2 -1

Here PDSEGEN places the user in ISPF View and compares the -2 generation to the -1 generation.

If the user wants to make changes and then save the update they will have to use the ISPF Edit Create or Replace commands.

Compare within Edit/View

The ISPF Edit and View COMPARE command has been extended to allow the comparison to other member generations along with all the standard COMPARE capabilities for the base, generation 0, member. The syntax within Edit or View is:

Compare member generation

This will compare the current member to the specified member generation.

Or      Compare generation

This will compare the current member to another generation of the same member.

Copy

The Copy command will display a popup prompting panel:

The From PDSE is already known and pre-filled in just like for Backup and Restore.

The To PDSE can already exist or can be created.

The Copy process accepts the member mask using the same criteria as the PDSEGEN Filter (see Member Filtering above).

The Progress option defaults to a popup progress meter. If N is entered, then the COPY information report will be displayed in ISPF Browse after the copy completes.

If the To PDSE does not exist, then specify Y for the Create To PDSE prompt. If Y is specified, then the space allocation, space units, and the MAXGEN limit can be changed.

If you want to replace the members during the copy that currently exist in the To PDSE specify Y, otherwise specify N.

Sample:

The Copy operation displays a progress popup:

Once the Copy is complete the To PDSE can be opened in PDSEGEN – use the C > to switch to it.

Edit

Edit, or just E, may be used to edit a member from the command line.

Syntax:            E member-name generation

The member-name may be a member name or *. If the member name is an * then all members in the ISPF table will be browsed one at a time. If the filter is not a mask and if the member does not exist then Edit * will open the new member in ISPF Edit.

The member name may also be a valid filter mask, such as A%C*F.

Use the H (hide) line selection command, along with filtering, to limit the number of members edited when using a member-name of *.

The generation is any relative generation number (e.g. -51) providing it exists for that member.

Notes:       1. If the member name does not exist then it will be created.

2. If the member is a non-0 generation then View will be substituted for Edit.

Filter

The Filter command can be used to filter the member and generations displayed. See Member Filtering above. Using this command will also refresh the member and generation list using the new Filter.

To turn off Filter enter:  Filter Off

If Filter is entered with no parameters then a popup is displayed to assist:

For users of the terrific PDS command the use of MEMList and ML are supported aliases of Filter.

Find

The Find command will search all the members and generations in the member display for the string.  Only those members, or generations, that have a hit will remain in the member display list.

Find will also search for the provided string within the member name.

To speed up the Find consider using the Filter command to limit the set of members to be searched.

When Find is used in a PDSEGEN Backup dataset then the IBM SuperC utility is used and the report is modified to report on the real member name and generation that maps to the backup member.

Syntax:            Find xxx

If Find is entered without a value then a popup will prompt for the information:

Genonly

The Genonly command is a toggle command that will first hide and then unhide the base members in the member list display.  The REFRESH command will also unhide the base members. When Genonly is active the Delete, Prune, and reName line selection options will not be available.

Hide

The HIDE command is a toggle command that will first hide and then unhide the member generations in the member list display. The REFRESH command will also unhide the member generations. When HIDE is active the Delete, Prune, and reName line selection options will not be available.

HIGen

The HIGen command is a toggle command that will first add to the member list and then remove from the member list entries that display the highest absolute generation number used for a member. IBM calls these ‘dummy’ members and they only exist when (a) all generations for a member are deleted or (b) when the member and all generations are deleted. These members cannot be processed by any commands and thus are informational.

ID and MINE

The ID command will filter the member list for those members with a userid that has the characters specified in the ID command:

ID xxxx

The MINE command will filter the member list for those members with a userid matching the active userid.

MINE

These commands act as a toggle.

Entering ID followed by a blank will disable member ID filtering and refresh the member list.

MINE – filter by active userid

MINE      disables member ID filtering and refresh the member list.

Info

The INFO command will display a summary of the PDSE dataset:

The information is acquired from the ISPF DSINFO service and from analyzing the PDSE members and generations.

The Member Distribution report indicates for each level of generation how many members have that number of generations. When reading this note that a generation number of 10 indicates that each member noted represents 11 members in the member list (one base and 10 generations).

Locate

The Locate command will locate the requested string in the most recently sorted column. By default the NAME column is the most recently sorted column.

Syntax:            L xxx

Model

The Model command is used to create a new dataset based on the allocation characteristics of the active dataset. The Dataset name must be changed and the other information can be changed, then press Enter to do the allocation, or F3 to cancel the allocation.

Options

The Options command, abbreviated as O, or OP, will bring up a prompting panel with all the available PDSEGEN primary commands:

The commands may be selected using (a) the command number, (b) clicking on the underlined command, or entering the command in the command field on the panel. Some commands require parameters and those are entered in the Parms field.

Output

The Output command will generate a report with all the members in the active member list:

Prune

The Prune command will prune, aka remove, older generations that are no longer required. The command works against all members and generations within the PDSE library that are in the member display. Generation 0, the base member, is not touched by this process. The Prune operation can be limited by using the Filter command.

Prune can also be used to delete ALL members and their generations by specifying RESET. This can be for the entire library or can be limited by the use of the Filter command the same as a generation prune operation.

The number of generations to retain can be entered on the popup panel or provided on the command. If provided on the command then it will pre-fill in the popup panel field.

As a reminder the current FILTER is displayed on the popup panel. It cannot be changed on this panel, however it is a good reminder.

The popup prompt requests the number of generations to retain:

If RESET is requested then it must be entered in UPPER case only at which point another popup will appear to confirm that you really want to do a RESET:

A Backup prior to using Prune is recommended – good CYA practice.

Usage notes:

- A prune value of 0 will remove all generations leaving only the base (generation 0) member

- A prune value of 2 will leave generations 0, 1 and 2 and remove all other generations.

REFList

REFList is a simple way to bring up a list of the 30 most recently used data sets that ISPF is aware of (see the ISPF REFLISTD command). Just select a data set and PDSEGEN will change to it.

File  View  Options  Help

------------------------------------------------------------------------------

Personal Data Set List

Command ===>

Enter a list action to perform or select a data set entry to retrieve.

Action: S=Save A=Save As D=Delete this list E=Extended Edit L=DSLIST U=UDLIST

Action  Name      Description                   Created      Referenced

REFLIST   Last 30 referenced data sets               19/06/07 14:17

More:     +

Select Data Set, DSLIST Level or z/OS UNIX file                 Volume  WS

.  JCL.CNTL

.  LIONEL.EXEC

.  LIONEL.PANELS

.  'SYS1.PARMLIB'

.  'SYS1.PROCLIB’

.  'TEST.SAMPLE.PDSE’

REFresh

The Refresh command will rebuild the member and generations displayed resetting all active Filters, or optionally use a new filter.

Syntax:            Refresh filter

If filter is specified, then it will be the new filter after the refresh.

Restore

The Restore command will display the Restore prompting panel:

This dialog allows the user to selectively restore members using a member name mask and a generation number (either absolute or relative). The member name mask can be * to restore all members.

The target PDSE can be an existing PDSE or can be dynamically allocated using the space and DCB of the backup PDS/PDSE and using the MAXGEN from the original PDSE (found in the $ALLOC member in the backup PDS/PDSE).

Set

The Set command will display a popup to allow the user to change the default action for the line selection option S, the default positioning for the last selected member, and the panel colors. The ENTER key must be used to register all changed and PF3 can be used to cancel any changes. The changes will be in effect immediately.

The underscored fields (B E V /) are point and shoot fields.

The SET command may also be entered with the desired option selection default to bypass the panel:

Syntax:             SET option

The Display Product Version Changes option will force the Change tutorial panel to be displayed when the PDSEGEN application is updated to a new version, new version and release, or new version, release and modification level. This setting allows the individual user to over-ride the site configuration default to either enable or disable this display.

Setmacro (SM)

The Setmacro, or SM, command supports defining an ISPF Edit Initial Macro for use based upon the dataset suffix.

This is the table of defined macros. The dataset suffix is the key to determine if the macro will be used. In this example, there are three dataset suffixes defined – ASM, EXEC, and PDS. Each have the same initial macro define, SAVELAB, and a parm for the macro of IMAC.

When inserting, or changing, an initial macro the following popup is used.

Shameless plug: The SAVELAB ISPF Edit Macro is used to save, restore, and manage the ISPF Edit labels that are defined during an Edit session so that they may be used across sessions. Edit labels have been transitory up to now and thus not that helpful. With SAVELAB the labels can persist and thus can be very useful. SAVELAB provides a popup list of active labels from which the user can jump to any label directly without having to (a) remember the label, or (b) having to scroll to it. It can be found at www.lbdsoftware.com and in file 313 of the CBTTape at www.cbttape.org.

Sort

The Sort command will sort the displayed members and generations based on the specified field name and the sort order:

Syntax:            Sort field-name order

The field names allowed, and their abbreviations, are:

Name

N

Create

CR

Changed

CH

ID

ID

Size

S

Init

I

Mod

M

Order may be A for Ascending or D for Descending. If neither then the order will be ignored.

If the order is blank then the first time a sort is invoked it will be ascending and the next time descending.

After the sort, the column that was just sorted will have a different color to highlight which column was sorted recently.

Entering SORT with no option will bring up this popup:

On this popup panel the A and D are point and shoot fields to set the sort order. The other under-scored fields are point and shoot to set the sort column. If the sort column is selected using point and shoot before the sort order is selected then the sort order will default as described above.

The column fields that can be sorted are also enabled for point-and-shoot and operate the same. First sort is ascending and the next is descending.

Submit

The Submit command, or just SUB, will submit a member to the internal reader. The syntax is:

SUBmit member

SUBmit member generation

SUBmit *

The member-name may be a member name or *. If the member name is an * then all members in the ISPF table will be viewed one at a time

The member name may also be a valid filter mask, such as A%C*F.

Use the H (hide) line selection command, along with filtering, to limit the number of members viewed when using a member-name of *.

The generation is any relative generation number (e.g. -51) providing it exists for that member.

Validate

The Validate command will invoke IBM’s IEBPDSE utility which will perform a validation on the PDSE. The report will then be displayed using Browse.

View

View, or just V, may be used to view a member from the command line.

Syntax:            V member-name generation

The member-name may be a member name or *. If the member name is an * then all members in the ISPF table will be viewed one at a time.

The member name may also be a valid filter mask, such as A%C*F.

Use the H (hide) line selection command, along with filtering, to limit the number of members viewed when using a member-name of *.

The generation is any relative generation number (e.g. -51) providing it exists for that member.

Line Selection Options

Block and Count Selection Commands

There are numerous line selection options. All of these may be used in individual or block form providing an expanded member display panel is in use (scroll Left using PF10 or Right using PF11) to find the desired 2 or 4 digit year expanded panel.

The valid block formats are (using B as an example):

Or

If using D (delete) in a block command, then be aware that it will be processed from the bottom of the table up to the top. Thus, the delete confirmation prompts will be in reverse order. This is an artifact of the way the code works (it was easier to do this way). There can be multiple block pairs, but pairs cannot be nested.

Note that when using block format line commands, the short and long messages that are generated will only reflect the last action.

When using the expanded line commands (e.g. Browse) double the 1st character to make it a block command:  BBrowse/BBrowse. The Expanded commands do not support the count option.

Attribute or A

ISPF Popup Panel to prompt to change the ISPF statistic information for the members Version, Modification Level, and Userid. This only works with base (generation 0) members.

Browse or B

ISPF Browse works the way it does for any other PDS and will place the user in ISPF Browse. This works for both the generation 0, also known as the base, member and for any non-0 generation.

Edit or E

ISPF Edit works only for the base member. If invoked for a non-0 generation then the request will be converted to View.

This is because of a limitation where it is impossible to reference a non-0 generation using either JCL or dynamic allocation. While, ISPF and other ISPF based products will allow editing non-0 generations, the design of PDSEGEN is to prevent this for the reason that changing a non-0 generation may imply to the user that it can be accessed outside of PDSEGEN.

Compare within Edit/View

The ISPF Edit and View COMPARE command has been extended to allow the comparison to other member generations along with all the standard COMPARE capabilities for the base, generation 0, member. The syntax within Edit or View is:

Compare member generation

This will compare the current member to the specified member generation.

Or      Compare generation

This will compare the current member to another generation of the same member.

COMpare or Z

Compare is designed to compare a non-0 generation to the base member:

In this example the Compare line selection was made for the -2 generation which opened the base member in ISPF Edit and performed a Compare to the non-0 generation.

COPy or C

The COPy, or C, line selection will copy the selected base member to another dataset.

All generations associated with the base member will also be copied.

This command does not support copying a generation.

Delete or D

The Delete line selection will delete the selected member or generation, and if generation 0 is selected then all generations will be deleted along with the base member.

A popup panel will be presented to confirm the deletion. If multiple members/generations will be deleted then the confirmation may be turned off for just this set of deletes.

There are two versions of delete prompting.  For base members:

When deleting a base member the default is to delete the base member and ALL generations. Using the 2nd option just the base member will be deleted and all generations promoted up so that the -1 generation becomes the new base member.

For generations the prompting is:

EXecute or X

The Execute line selection is option x. This option will execute the selected member. This only works if the member, or generation, is a CLIST or REXX member.

Prior to execution the user will be prompted with a popup to enter any parameters that the command may require, or none, before the TSO Execute command is invoked.

Or if executing a generation:

Note that when executing a generation that the generation member is copied into a temporary dataset before the TSO Execute command is invoked.

Hide or H

The Hide line selection is useful to hide a member row from the table. These members will then be excluded from the Browse/Edit/View * commands. Hiding does not exclude the row (member) from Backup, Copy, or Restore processing.

Info or I

The Info line selection will display a panel with information about the member.

Klone, Clone, or K

Klone (aka clone) will make a copy of the member to a new name retaining the ISPF statistics. Any member generations associated with the member will NOT be copied and only base, generation 0, members may be kloned.

Mail or M

The Mail line selection will, if enabled, pass the member or generation to the XMITIP application so that it can be e-mailed. For non-0 generations a temporary work dataset will be created so that the XMITIP application can reference it for processing.

Promote or P

The Promote line selection is only applicable to non-0 generations and will replace the base member with the selected non-0 generation. During that process, the base member will become the -1 generation and the other generations will be pushed down the generation path.

RECover or G

The Recover line selection only works for non-0 generations and will copy that non-0 generation to a new member name.

The target name must be a new, unique, name in the existing PDSE for this operation to be successful.

REName or R

The Rename line selection will rename the member and all generations to a new, unique name. The new name will be pre-filled in with the original name to facilitate a simple name change.

RENSwap or Q

The Rename Swap line selection will swap two member names, and their generations. For example, it can rename member A to B, while renaming member B to A.

SUbmit or J

The Submit line selection is option J. This option will submit the selected member, or generation, to the internal reader for processing as a batch job.

Tryit or T

The TRYIT line selection invokes ISPF Edit, or View if the generation is not 0, with the TRYIT Edit macro.  TRYIT is included with PDSEGEN to provide the capability to easily experiment and validate. The tutorial for TRYIT can be displayed by entering on any ISPF Edit, or View, command line TRYIT ?.

TRYIT is an ISPF Edit command that is designed to be used to test an Assembler program, CLIST, REXX Exec, JCL, ISPF Panel or ISPF Skeleton while it is being edited. The way this works is such that the JCL, CLIST, REXX Exec, ISPF Panel, or ISPF Skeleton does *not* have to be in a library in the existing SYSPROC, SYSEXEC, ISPPLIB, or ISPSLIB allocations thus allowing the development and testing in other, less critical, data sets.

User or U

The User command option is used to enter any TSO Command, CLIST, or REXX EXEC to process the selected dataset(member). The user command is entered with a / to indicate where in the command to place the fully qualified (in quotes) dataset name.

For a generation 0 member:

And for a non-0 generation:

As can be seen by the Selected DSN, when a non-0 generation is selected the member is copied into a temporary dataset for processing. This is because dynamic allocation cannot reference a non-0 generation. The temporary dataset will be deleted upon completion of the command.

Some useful examples of using this option are:

1. TSO Transmit the member to another user:

xmit node.userid ds(/)

2. Invoke the PDSE command from the CBTTape on the member:

pds /

pds / e *

View or V

ISPF View works the way it does for any other PDS and will place the user in ISPF View. This works for both the generation 0, also known as the base, member and for any non-0 generation.

This demonstrates ISPF View which was converted from Edit as it was requested on a non-0 generation.

/ and O

If either / or O are entered as a line selection then this popup prompting panel will appear to help the user select a line option depending on the members generation:

For base members, generation 0, or non-generation members:

And for non-0 generations:

=

The equal will repeat the last used line selection command.

References

PDSE Member Generations Overview

http://www-01.ibm.com/support/docview.wss?uid=tss1wp102465&aid=1

APAR OA42247 ISPF PDSE Member Generation SPE overview:

ftp://public.dhe.ibm.com/software/websphere/awdtools/ispf/OA42247.pdf

SHARE: The Future of PDSE: The Version 2 Format

https://share.confex.com/share/122/webprogram/Session15083.html

SHARE: PDSE Version 2 Member Generations: Practical User Applications

https://share.confex.com/share/124/webprogram/Session16957.html

SHARE: PDSE Member Generations: Implementation and ISPF Exploitation

https://share.confex.com/share/125/webprogram/Session17831.html

Appendix A – Notes about PDSEGEN

1. Browse works the way you expect it to.

2. Edit and View are the full ISPF Edit and View.

3. Edit is not supported on non-0 generations as a protection against an accidental update (this is a PDSEGEN restriction and not an ISPF restriction).

4. It shouldn't have to be stated but generations are only supported for PDSE Version 2 datasets where generations have been enabled.

5. The Compare command only accepts relative generation numbers.

6. Aliases are NOT supported by the PDSEGENI Rexx Function, so this application does not support aliases (at this time).

7. Rename will rename the base member and all generations by doing a copy of the generations so they are retained. During the rename process the absolute generation numbers will be lost but the relative generation numbers will be retained.

8. Find can be speeded up if the FILTER command is used first to limit the members/generations that must be checked.

9. Prune can, and probably should, be limited by using the FILTER command before issuing Prune.

10. PDSEGEN supports extended ISPF Statistics but they must be enabled using the ISPF Edit command STATS EXT.

11. Dummy members, an IBM term, may be displayed using the HIGen command. These members exist only when a member has been completely deleted, or a member’s generations have been deleted. If a member has never had any generations then there is no dummy member.

12. Block commands only work with one of the expanded member display panels (scroll Left or Right to use them).

Appendix B – Issues with PDSE Version 2 Member Generations

1. The MAXGENS option defines the number of generations plus 1 for the base or generation 0 members. Thus, a MAXGENS of 10 yields 11 members.

2. A TSO or ISPF Rename of a member leaves the generations under the original name. This will result in this application not seeing the generations for the renamed member unless a new member with the same name is created.

* this application has a work around for this so you can rename

3. You can delete an individual generation and that will leave a gap in the absolute generations. This is not critical but is curious. To do this you must write your own code using the STOW macro as there currently are no tools (other than PDSEGEN) to delete an individual generation.

4. Use of TSO DELETE will delete the base member BUT will NOT Delete any generations. The ISPF LMMDEL service will delete the base member and ALL generations. This application does not use the LMMDEL service but uses the PDSEGDEL REXX function. If you delete a member and all generations and then create a new member with the same name, then all generations for the new member will start with the previous members’ generation next high generation number. Some ISPF applications do not use LMMDEL to delete members but use the equivalent of the TSO DELETE, with the same results.

5. The use of ISPF copy services, including 3.3, will NOT copy any generations. Nor will IEBCOPY. The only tool to copy generations is DFDSS (a full dataset dump/restore/copy). This application does not support copying at this time.

6. If you Edit a generation other than 0 and save it then no new generation is generated. That only happens when editing generation 0. This application does not allow editing non-0 generations for this reason.

7. You CANNOT access any non-0 generations using JCL or dynamic allocation.

8. You can force a new generation, when editing generation 0, by using the Edit command SAVE NEWGEN.

9. You can prevent the creation of a new generation by using the Edit command SAVE NOGEN.

10. A partitioned data set that is listed in the master scheduler JCL, either in SYS1.PARMLIB(MSTJCLxx), and therefore used during IPL must be a PDS. Examples of such data sets are:

– SYS1.LPALIB

– SYS1.NUCLEUS

– SYS1.SVCLIB

– SYS1.PARMLIB

– Initial LNKLST data set

SYS1.PROCLIB must be a PDS although other procedure libraries can be PDSEs.

Page 69: - http://www.redbooks.ibm.com/redbooks/pdfs/sg246106.pdf

Appendix C – Vendor Issues

The following is information on vendor products concerning supporting PDSE V2 Member Versions, as of August 13, 2019.

1. CA-Alloc

1. The CA Allocate developer mentions PDSE member generations will be supported in the future, but there is no time frame as to when it will be available.   As far as LARGE, EXTREQ and EXTPREF type datasets, it does not currently recognize them.

2. CA-DISK (DMS)

1. Information on notification RI91078:

Subject: CA PML SOLUTION NOTIFICATION - RI91078

Title: POSSIBLE GENERATION LOSS FOR PDSE VERSION 2 DATA SETS

Product: DISKOS

Release: 12.5

Opsys: OS

Solution #: 310

https://support.ca.com/irj/portal/SolutionCDNResults?aparNo=RI91078&actionID=4

Description: ***** PRODUCT ALERT *****

PRODUCT DESCRIPTION:

PDSE Version 2 support has not been announced for CA Disk r12.5. Current CA Disk processing in all functions handles all PDSEs as Version 1, since the version and maxgen attributes are not used. The backup and archive data are just the primary members as none of the version information or member generations are kept. The same applies to Move and Copy.

SYMPTOMS:

Member generations are no longer found when viewing/editing/processing a PDSE Version 2 data set that has been backed up or archived and then restored with CA Disk. The PDSE attribute display will show a Version 1 with with no MAXGEN attribute.

IMPACT:

The PDSE Version 2 data sets are converted back to Version 1 format and any member versions other than the most recent are lost. MAXGEN attribute is lost.

CIRCUMVENTION:

None. Since CA Disk support for PDSE Version 2 has not yet been announced, clients should be careful to ensure that CA Disk is not used to process PDSE

Version 2 data sets.

The CA Disk team is currently working on providing support for PDSE Version 2 data sets. Any clients interested in working with CA Technologies to test this maintenance are asked to contact CA Support using normal procedures

3. CA-Disk (Copy and Move)

1. Thank you for inquiring about PDSE Version 2 support in Move and Copy.  We have no plans to expand the PDSE V2 support beyond Archive and Restore as the DFDSS data mover support is only available there.   The only option available in Move and Copy would be to bypass the PDSE V2s.  If that option is of interest, please open an IDEA request via the Communities website.

Customer Validation of Release 14 with full PDSE V2 support is expected sometime in Q2 of 2017.

4. Compuware Topaz

1. PDSE datasets are supported but only to the extent that they are similar to a PDS. This means that:

1. Long member names (greater than 8 bytes) are not supported.

2. Any user data fields that may be present in the directory entry for a PDSE member are supported, but again only to the extent that they are supported for a PDS. Extended directory user data beyond standard PDS limitations is not supported.

3. Adding or replacing members of a program library PDSE (e.g., a LOADLIB) is not supported. This is an IBM limitation imposed by the STOW macro. (See also #2, below).

2. Moving or copying load module members from a standard PDS into a program library PDSE is not supported. Moving or copying load module members from a program library PDSE back to a standard PDS is supported, but the resulting load module members may not be executable.

3. Results from a dataset properties display will not contain utilization results for internal PDSE pages used because this information is IBM proprietary.

4. Member names containing special characters are not supported. Host Explorer only supports member names that conform to the same characters supported by ISPF for specifying member names.

5. The maximum number of members supported for any PDS or PDSE dataset when used with Host Explorer is 32767.

6. PDSE V2 dataset capabilities (e.g., member generations and other features) are not specifically supported; Host Explorer will operate against a PDSE V2 dataset as if it were PDSE V1.

5. IBM Connect:Direct (NDM)

1. At this time there is no support for PDSE V2.   A Request For Enhancement (RFE) has been submitted by another customer and is being worked.   There currently is not an ETA for this enhancement.

6. IBM DF/SMS ACS Routines

1. The PDSE Version and MAXGEN information are not exposed so the ACS routines are unable to check for them.

7. IBM FTP

1. FTP at this time does not recognize member generations.

8. IBM IEBCOPY

1. Currently ignores member generations.

9. IBM ISPF

1. ISPF does not fully support Member Generations:

Browse/Edit/View support generations if you know the correct (hidden) commands

LMCOPY ignores generations

Rename will not rename generations but will rename the base (generation 0)

Orphans the generations

Delete will not delete generations but will delete the base (generation 0)

Orphans the generations

SUPERC/SRCHFOR ignores generations

Library Services ignores generations

Appendix D – Vendor Products and Open-Source (GPL) Applications that Support PDSE Member Generations

There are a few products that we know of that support member generations:

1. IBM

- DF/DSS

- Data Set Commander

2. CA-Disk (Archive/Restore)

- Fix RO92126

3. CA PDSMAN/Ezyedit/FastCopy

PTF RO86993 and RO91085 provides support and exploitation of PDSE Member Generations:

- For more information see below document

https://support.ca.com/phpdocs/0/8319/CARS1602/PDSM77.pdf

4. Innovation Data Processing

- FDR

- FDRDSF

- FDRABR

5. MacKinney

- SimpList

6. Open Source

- John Kalinich’s PGLITE, a lite version of PDSEGEN, can be found in CBT Tape File 182 along with the famous PDS command.

- Bill Godfrey’s/Greg Price’s REVIEW by command – CBT Tape File 134

- http://www.cbttape.org

Appendix E – Sample Backup/Restore JCL

This is an example of how to perform a Backup or Restore in batch.

//USERIDT JOB XXXXXXXX,USERID,

//          NOTIFY=USERID,MSGCLASS=A

//OUT       OUTPUT DEFAULT=YES,JESDS=ALL,OUTDISP=(HOLD,HOLD)

//* ------------------------------------------------------ *

//* THIS IS A SAMPLE BATCH JOB TO DEMONSTRATE HOW TO RUN   *

//* THE PDSEGBAK ROUTINE TO BACKUP AND THEN RESTORE A      *

//* PDSE WITH MEMBER GENERATIONS.                          *

//*                                                        *

//* THE PDSEBAK SYNTAX IS:                                 *

//*                                                        *

//* %PDSEGBAK  INPUT TARGET OPTION                         *

//*                                                        *

//* WHERE INPUT IS THE SOURCE PDSE                         *

//*       TARGET IS THE TARGET PDSE                        *

//*       OPTION IS EITHER BACKUP OR RESTORE               *

//* ------------------------------------------------------ *

//ALLOC    EXEC PGM=IKJEFT01,DYNAMNBR=50

//SYSTSPRT DD   SYSOUT=*

//SYSTSIN  DD   *

PROFILE PREFIX(HLQ)

DELETE TEST.N.BACKUP

DELETE TEST.N.PDSE

/*

//PDSEGBAK EXEC PGM=IKJEFT01,DYNAMNBR=50

//SYSEXEC  DD  DISP=SHR,DSN=HLQ.PDSEGEN.EXEC

//STEPLIB  DD  DISP=SHR,DSN=HLQ.PDSEGEN.LOAD

//ISPTLIB DD  DISP=SHR,DSN=SYS1.SISPTENU

//ISPPROF DD  DISP=(,DELETE),SPACE=(TRK,(1,1,1)),UNIT=SYSDA,

//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

//ISPPLIB DD  DISP=(,DELETE),SPACE=(TRK,(1,1,1)),UNIT=SYSDA,

//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

//ISPSLIB DD  DISP=(,DELETE),SPACE=(TRK,(1,1,1)),UNIT=SYSDA,

//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

//ISPMLIB  DD DISP=SHR,DSN=SYS1.SISPMENU

//SYSTSPRT DD   SYSOUT=*

//SYSTSIN  DD   *

PROFILE PREFIX(HLQ)

ISPSTART CMD(%PDSEGBAK TEST.PDSE TEST.N.BACKUP BACKUP)

ISPSTART CMD(%PDSEGBAK TEST.N.BACKUP TEST.N.PDSE RESTORE)

/*

Appendix F – Sample Copy JCL

This is a sample JCL to perform a Copy in batch.

//USERIDT JOB XXXXXXXX,USERID,

//          NOTIFY=USERID,MSGCLASS=A

//OUT       OUTPUT DEFAULT=YES,JESDS=ALL,OUTDISP=(HOLD,HOLD)

//* ------------------------------------------------------ *

//* THIS IS A SAMPLE BATCH JOB TO DEMONSTRATE HOW TO RUN   *

//* THE PDSEGENC ROUTINE TO COPY A PDSE TO ANOTHER PDSE.   *

//*                                                        *

//* THE PDSEGENC SYNTAX IS:                                *

//*                                                        *

//* %PDSEGENC  FROMPDSE TOPDSE MEMBER ( OPTIONS            *

//*                                                        *

//* WHERE FROMPDSE IS THE SOURCE PDSE                      *

//*       TOPDSE IS THE TARGET PDSE                        *

//*       MEMBER-FILTER IS * FOR ALL                       *

//*                 * TO FILTER ON MULTIPLE CHARACTERS     *

//*                 % TO FILTER ON A SINGLE CHARACTERS     *

//*                 SPECIFIC MEMBER NAME                   *

//*                 MEM/ TO COPY ALL MEMBERS WITH MEM      *

//*                     ANYWHERE IN THE NAME               *

//*       ( REQUIRED IF ANY OPTION IS SPECIFIED            *

//*                                                        *

//* OPTIONS MAY BE:                                        *

//*                                                        *

//*       BATCH TO BYPASS THE ISPF PROGRESS POPUP          *

//*       NEW TO CREATE THE TARGET PDSE USING ALLOC INFO   *

//*           FROM THE FROM PDSE                           *

//*       REPLACE TO REPLACE SAME MEMBER (AND GENERATIONS) *

//* ------------------------------------------------------ *

//ALLOC    EXEC PGM=IKJEFT1B,DYNAMNBR=50

//SYSTSPRT DD   SYSOUT=*

//SYSTSIN  DD   *

PROFILE PREFIX(HLQ)

DELETE TEST.N.PDSE

ALLOC DS(TEST.N.PDSE) NEW SPA(30,30) DSNTYPE(LIBRARY,2) +

MAXGEN(10) LIKE(TEST.PDSE)

FREE DS(TEST.N.PDSE)

/*

//COPY     EXEC PGM=IKJEFT1B,DYNAMNBR=50

//SYSEXEC  DD  DISP=SHR,DSN=USERID.PDSEGEN.EXEC

//STEPLIB  DD  DISP=SHR,DSN=USERID.PDSEGEN.LOAD

//ISPTLIB DD  DISP=SHR,DSN=SYS1.SISPTENU

//ISPPROF DD  DISP=(,DELETE),SPACE=(TRK,(1,1,1)),UNIT=SYSDA,

//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

//ISPPLIB DD  DISP=(,DELETE),SPACE=(TRK,(1,1,1)),UNIT=SYSDA,

//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

//ISPSLIB DD  DISP=(,DELETE),SPACE=(TRK,(1,1,1)),UNIT=SYSDA,

//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

//ISPMLIB  DD DISP=SHR,DSN=SYS1.SISPMENU

//SYSTSPRT DD   SYSOUT=*

//SYSTSIN  DD   *

PROFILE PREFIX(HLQ)

ISPF CMD(%PDSEGENC TEST.PDSE TEST.N.PDSE *)

/*

Appendix G: IBM APARs

(as of 04/11/2017)

OA47755  Enhanced IEBPDSE

** PTF Available(UA77654 UA77655)

OA47799  Enhanced IEBPDSE

** PTF Available(UA77654 UA77655)

OA50214  IEBPDSE PerformPendingDelete issue

** PTF Available (UA81735 UA81736)

OA50699  Help for TSO ALLOC does not document Library type 2

** PTF Available (UA82552 UA82553)

OA50904  Rename member in member list and get message member not found in error

** PTF Available (UA82415)

OA50962  LMMDEL of a member with nogens then create same member gets a gen -1

** PTF Available (UA82715)

OA51009  Save NEWGEN or NOGEN in a non-member enabled d/s gives no warning

** PTF UA83739  (z/OS 2.2)

** see OA51816 - MSG ISRE679 may occur on a Edit END for non-PDSE after OS51009

OA51014  LMMREN leaves generations orphaned

** PTF UA83479

OA51027  Browse scroll, or max, to end of member in PDSE V2 results in 002 abend

** PTF Available(UA82619 UA82620)

OA51029  Edit then save on non-0 gen gives no warning that a newgen is

not created (which cannot be accessed via jcl or dynalloc

** PTF UA83739

OA51150  View a non-0 generation and the message indicates Edit

** PTF UA83577

OA51579  PDSE Corruption with Message IEC911I. Various causes.

OA51816  Message ISRE679 may occur on an EDIT END for non-PDSE after installation of fix for OA51009.

OA51579  PDSE Corruption with Message IEC911I. Various causes.

** PTF UA91068 UA91069

OA51816  Message ISRE679 may occur on an EDIT END for non-PDSE after

installation of fix for OA51009.

** PTF UA91166

OA57897 PDSE with member generations with a member with > 100  generations may have issues accessing older generations.

Appendix H – Acknowledgements

This tool would not have been completed without the assistance of the following individuals in both design and testing:

John Kalinich

Bruce Koss

Thomas Conley

Greg Price

Bill Smith