Partitioned Dataset Utility - PDSUIIL
What is a Partitioned Data Set?
Since its earliest days, the IBM OS/360/370 Operating System
has supported a library file structure known as a Partitioned
Dataset, or PDS. In simple terms, a PDS is a file into which
many other files may be placed and later retrieved as needed.
Under OS/370, a member of a PDS may be used as input to or
output from a program in the same way a normal sequential
file might be. No compression or translation of a file's data
is performed, so access to PDS members is fast, and what you
see is what you get.
Why we need yet another Library Utility.
After I had been using the PC (both at work and at home) for
awhile, and had become familiar with some of the more common
'library' type packages such the LU utilities, and 'ARC', it
occurred to me that something was missing. While LU and ARC
are great for their intended purpose, i.e. archival storage
of data files which are seldom used, they are rather slow and
not something you want to use everyday, at least in my opinion.
But why should I waste megabytes of storage on my hard disk
for 200+ 'C' and Assembler source files, any (or sometimes) all
of which may require update or recompilation on a daily basis,
when the average unused space per file is 2K bytes? What's
missing is the simple PDS type library file of OS/370 and
for this reason, I created PC-DOS PDSUTIL.
How it works.
PDSUTIL works by constructing a file which contains:
. a header portion which identifies the file as a valid PDS
and records the PDS's filename and date/time of creation.
. an internal directory structure for finding members.
. the members (files) themselves.
Files placed into a PDS may be extracted, updated and replaced
easily at will. Delete and Undelete features are also supported.
General Command Syntax.
PDSUTIL uses command line arguments for its input. The general
PDSUTIL [arg1] [arg2] ... [argn]
Commands are single characters preceeded by a '/'. See below.
PDSFILESPEC is the file specification string for the PDS to
be operated upon (or the input PDS for the Compress command).
The drive and path information may be specified if needed.
arg1, arg2, etc. are normally member (file) names or patterns,
but are somewhat command dependent as specified below. For
most commands, drive and path specifiers may not be used in the
/A - Add or replace members in a PDS. The files specified by
[arg...]s are added to the PDS. If a member has the same
name as an arg, it is replaced. Args must be file names
in the current default directory of the logged drive.
Wildcard characters (* and ?) may be used per standard
DOS convention. If PDSFILESPEC does not exist it is
created and a message is displayed to that effect. If no
[arg] fields are specified, all files of the current
directory will be added to the PDS and a message is
displayed to that effect.
PDSUTIL /A SOURCE.PDS *.ASM *.C
Adds all files with extensions of '.ASM' and '.C' in
the current directory to 'SOURCE.PDS' which is also
in the current directory.
PDSUTIL /A C:\DIR1\PROG.XYZ PROG1.BAS PROG2.BAS
Adds files PROG1.BAS and PROG2.BAS to PDS PROG.XYZ
which is located in subdirectory 'DIR1' on drive C:.
PROG1.BAS and PROG2.BAS are in the current directory.
/D - Delete member(s) of a PDS. Marks members specified by
[arg..]s as deleted. Deleted members will not be listed
by the /L command, nor will they be retained when the
PDS is compressed (see /C below).
PDSUTIL /D BAT.LIB COMPILE.BAT
Deletes member COMPILE.BAT from PDS BAT.LIB.
/U - Undelete members. Reactivates members marked for deletion
as long as they are still there. Wildcard characters do
not work with this command.
PDSUTIL /U BAT.LIB COMPILE.BAT
Undeletes member COMPILE.BAT in PDS BAT.LIB.
/L - List member names. List names of active members in the
PDS. [arg] fields are not used.
PDSUTIL /L ZORCH.PDS
Lists names of all active members of ZORCH.PDS.
/E, /X - Extract members. Extracts members named in [arg..]s
from the PDS, creating discrete files. No check is made
for the pre-existence of the named member, so some care
should be used. If no [arg..]s are specified, all members
PDSUTIL /X A:BACKUP.PDS MYPROG.PAS HISPROG.C HERPROG.ASM
Extracts members MYPROG.PAS HISPROG.C and HERPROG.ASM
from BACKUP.PDS on drive A:, creating files in the
PDSUTIL /E \SOURCE.LIB *.BAS
Extracts all members with extension '.BAS' from PDS
SOURCE.LIB in the root directory of the logged drive
creating files in the default directory.
/C, /P - Compress a PDS. Reclaims unused space created by member
deletion and replacement. This is done using a copy tech-
nique which requires both an input and output PDSFILESPEC.
PDSUTIL /P A:SOURCE.PDS C:SOURCE.PDS
Compresses SOURCE.PDS on drive A:, creating new file
on drive C:.
General characteristics and constraints.
Due to techniques used in the PDSUTIL program, files larger
than 64K-1 bytes may not be placed in a PDS. An error message
is generated any time an attempt to place a file larger than
this limit into a PDS is made. Also, the maximum size that a
PDS can attain is 2 megabytes.
There is no limitation on the number of members which can be
placed into a PDS, other than those dictated by PDS size and
disk space limitations.
Members extracted from a PDS will bear the file date/time
stamp they had when they were originally stored, as this data
is recorded in the PDS directory structure and is preserved
when the members are extracted.
Average unused space for PDS members is 16 bytes plus 22
bytes for the directory entry.
Whenever the internal file name of PDS does not match the
name portion of PDSFILESPEC, a warning is issued, and the
user is given the option to continue or terminate processing.
The developer gives no warranties for the performance of the
PDSUTIL program, either express or implied. Use at your own
Comments and suggestions for possible enhancements are
welcome and may be left on this BBS. I hope you may find
the program useful.