GETTING MORE FROM MPE
by Eugene and Vladimir Volokh, VESOFT
(1135 S. Beverly Dr.,LA,CA,90035,USA)
Presented at 1981 HPIUG Conference, Orlando, FL, USA
Published in "Thoughts & Discourses on HP3000 Software", 1st-4rd ed.
THE BIRTH OF MPEX
In 1980, we were working as application programmers at an HP3000 site
in Los Angeles; the application system we were developing was an
Accounts Payable system in FORTRAN, but for the purposes of our
discussion, it could just as well have been any application system in
any language.
The system was an average-sized one, starting with about 20 programs,
growing to 25, 30, and finally stabilizing at about 35. And, while
working on it, I discovered a rather disconcerting fact about the HP
3000:
THE HP3000 IS NOT MADE FOR APPLICATION SYSTEMS DEVELOPMENT.
After all, consider this: on the HP, you can compile a single
program, list a single program, edit a single program, purge it, copy
it, rename it, release it; but, when it comes to working on entire
application systems, the HP just can't cut the mustard.
For instance, let us say one changes the COPYLIB of a COBOL system;
to put these changes into effect, it is necessary to recompile the
entire application system. The only way to do this in MPE is to
recompile the system program by program, a very time-consuming and
error-prone task. What you really want to do is to execute a command
such as
%COBOL GL@.SOURCE, GL@.PUB
i.e. 'compile via COBOL all the files that start with GL in the
SOURCE group into files with the same name in PUB'. Similarly, you
may sometimes want to list to the line printer all of your
application sources. Instead of doing a /TEXT and /LIST ALL, OFFLINE
of every source file in your application system, you would like to
type a command like
%EDIT GL@.SOURCE, LIST ALL,OFFLINE
Other things that you ought to be able to do (but are not permitted
to by MPE) on entire application systems spring to mind:
%EDIT GL@.SOURCE, WHILE; FINDQ "QTY-SOLD"; LIST
to find all the places where a given variable is mentioned in your
application system, or
%FCOPY GL@.SOURCE,GL@.ARCHIVE,NEW
to do an online backup of your application sources.
This is how VESOFT's MPEX/3000 was born -- out of a need to perform
certain operations not just on single files, but on ENTIRE FILESETS,
like GL@.SOURCE.
THE MPEX FILESET
As was discussed above, the MPEX fileset is the heart and soul of
MPEX. Note that I say "MPEX fileset," not just "fileset." This is
because MPEX filesets go far beyond the filesets available in MPE.
In addition to ordinary MPE filesets like
GL@.SOURCE
K#######.@.@
@.@.@
MPEX filesets can also be "arithmetic expressions" of MPE filesets,
where operators may be + (union) and - (exclusion):
AP@+GL@.SOURCE <<all the files in either fileset>>
AP@+GL@.SOURCE-@COPY.@ <<except those that end with COPY>>
Thus, an MPEX command like
%PURGE K#######.@.@+LOG####.PUB.SYS
will purge all EDITOR/TDP K-files and all system log files (% is
MPEX's prompt, and will be used to indicate MPEX commands).
All the filesets that have been mentioned so far select files on the
basis of their names ONLY. But, it is often desirable to select
attributes other than file names; for instance, you may wish to find
all the files in the system that are bigger than, say, 10,000 sectors.
This can be accomplished by a command such as
%LISTF @.@.@(DISCSPACE>10000),2
The part of the fileset that is enclosed in parentheses is the
selection criterion, on the basis of which files are selected from
the main fileset. There are many such selection criteria, and they
may be ANDed together, as in this command:
%LISTF @.@.@(DISCSPACE>10000 and ACCDATE<1/1/83),2
which finds all the files in the system (@.@.@) that use more than
10,000 sectors of disc space and haven't been accessed since January
1, 1983. Other selection criteria available are CODE (file code),
CREATOR (file creator), CREDATE (creation date), DEVICE (logical
device on which file resides), MODDATE (last modify date), OUTPRI
(SPOOL file output priority), PMCAP (program file privileged mode
capability), RSTDATE (last restore date), SAVABLE (amount of disc
space savable), and SECURITY (file released vs. secured). Thus, an
extreme example of an MPEX fileset may be found in a command like:
%EDIT GL@.SOURCE+AP@-@COPY.@(CODE="EDTCT"), LIST ALL,OFFLINE
which lists to the line printer all files in GL@.SOURCE and AP@ that
have file code EDTCT except those that end with "COPY."
Thus, the MPEX fileset is a very powerful tool that can select files
based on a number of different relevant criteria.
FROM PROGRAMMER'S TOOL TO SYSTEM MANAGEMENT TOOL
The first few MPEX commands that were talked about (COBOL, EDIT, and
FCOPY) are mostly programmer and project leader tools, that can
greatly enhance the program development process. However, MPEX and
MPEX filesets offer quite a bit for the account and system manager,
too. One command that has already been mentioned, PURGE, is often a
handy command for the system manager. With a command like
%PURGE K#######.@.@+LOG####.PUB.SYS
which purges all EDITOR/TDP K-files and system log files, the system
manager can save quite a bit of space occupied by these files, which
are usually useless. Or, the system manager can do a
:STORE @.@.@;*TAPE;DATE<1/1/83
:RUN MPEX.PUB.VESOFT
%PURGE @.@.@(ACCDATE<1/1/83)
to archive to tape all the files that haven't been accessed since
January 1, 1983 and then purge them. Other uses for the PURGE
command include
%PURGE @.@.ACCOUNT
to clear out all the files in the specified account without removing
the accounting structure. This command can often be used instead of
:PURGEACCT ACCOUNT, which destroys the accounting structure, and thus
makes files from that account difficult to restore.
Another feature of the PURGE command, useful for system operators, is
based on the fact that MPEX allows spool-file filesets as well as
permanent file filesets. Thus a command like
%PURGE $STDLIST.@.@-@.@.PROD(SPOOL.OUTPRI=1)
will purge all the $STDLISTs in the system that have output priority
1 except those in the PROD account (the :SPOOL at the end of the
fileset indicates that this is a spool-file fileset).
In addition to the PURGE command, other MPE commands that have been
extended to allow filesets include RELEASE, SECURE, RENAME, and
ALTSEC. However, not only do these commands accommodate filesets, but
they also make the account or system manager's life easier by waiving
HP's restriction that these commands may be performed by the
creator of the file only. After all, if a user has read and write
access to a file, he can copy it and purge the original -- he
should certainly be allowed to RENAME it. Thus, by replacing HP's
rather illogical creator-only restriction by one that permits anyone
who has read, write, and execute access to RELEASE, SECURE,
RENAME, and ALTSEC a file, MPEX makes life easier for its
users without compromising system security.
MORE FOR THE SYSTEM MANAGER -- THE LISTF COMMAND
MPE's :LISTF command already permits filesets; however, MPEX's
extended %LISTF command permits MPEX's extended filesets, with +
filesets, - filesets, and selection criteria. Thus, as was shown
above, you can use the %LISTF command on a fileset with selection
criteria to find all files that use more than a certain amount of
disc space, or all files that haven't been accessed since a given
date, etc. This ability to list all files by disc space used, last
access date, etc. makes MPEX a very powerful system manager tool,
especially in the area of saving disc space -- one of our customers
reported that he saved 50 megabytes of disc space by using the %LISTF
command alone!
But, there is more to the %LISTF command than just the ability to
list MPEX filesets. Say you use the last access date as a selection
criterion; it is only reasonable that you should be able to list the
last access date in addition to selecting on it. With a command like
%LISTF @.@.@(ACCDATE<1/1/83),3
you can! New modes, mode 3 to list creator id, last access date,
last modify date, creation date, and last restore date; mode 4 to
list various disc space utilization information (including device
class, extent map, suggested blocking factor, etc.); and mode 5 to
list program file information (capabilities, maxdata, stack size,
group/account that last ran this program, etc.) have been added,
letting the MPEX user list much file information that is otherwise
unavailable.
Thus, the %LISTF command, with the ability to specify MPEX filesets
and its new modes, is a very powerful system manager tool.
ALTERING FILE ATTRIBUTES WITH MPEX
To complement the ability to select on many file attributes and list
those attributes via the new modes of the %LISTF command, MPEX also
allows its users to alter vital file attributes.
For instance, let us say that one wants to move a database set
(called GLDB05) to device 2 to minimize head contention. With MPEX,
you can do this very easily:
%ALTFILE GLDB05, DEV=2
Of course, this command, like all MPEX commands, can be applied to
filesets as well as single files.
Or, let us say that the file DATAFILE, which has room for 10,000
records, is currently at 9987, and is in danger of imminent overflow.
With MPEX, you can expand the file with one command:
%ALTFILE DATAFILE, FLIMIT=15000
Alternatively, if the file has room for 15,000 records, but contains
only 600 records, much of the room allocated for this file is wasted.
With MPEX, one can do a
%ALTFILE DATAFILE, FLIMIT=1000
to decrease the file limit, a
%ALTFILE DATAFILE, SQUEEZE
to set the file limit to the end of file (saving as much space as
possible), or a
%ALTFILE DATAFILE, EXTENTS=32
to increase the number of extents of the file, thus decreasing the
size of each individual extent and thus minimizing the amount of
space wasted by the file without decreasing the file's file limit.
The EXTENTS keyword is especially applicable to V/3000 forms files,
which are built with file limits of 4000, 8000, or 16,000 and only 8
extents; thus, a small V/3000 forms file can waste from 500 to 2,000
sectors of disc space! A command of the form
%ALTFILE @.@.@(CODE=VFORM), EXTENTS=32
will change all the V/3000 forms files in the system to have 32
extents, thus potentially saving a lot of disc space. These keywords
(FLIMIT, SQUEEZE, and EXTENTS) in addition to the BLKFACT keyword,
which changes a file's blocking factor, and BLKFACT=BEST, which
automatically sets the file's blocking factor to the one yielding the
most disc space savings, are also very powerful disc space saving
options; one MPEX user reported that by using the %LISTF and %ALTFILE
commands they saved 150 megabytes of disc space!
In addition to the attributes mentioned above, other file attributes
can be changed; for instance, let us say that your trusted programmer,
John, leaves your shop. Naturally, being a
security-conscious system manager, you immediately remove the user
JOHN from the system, only to find that he has created many files and
several databases. What you want is to change the creator id of all
files created by JOHN to MGR. With MPEX, this is easy:
%ALTFILE @.@(CREATOR="JOHN"), CREATOR=MGR
Other file attributes, such as file code, lockword, and various
program file attributes, can also be changed with this command, one
of the most powerful in the MPEX arsenal.
ACCESSING MPEX FROM WITHIN EDITOR
One major problem with HP's EDITOR is that one cannot compile,
prepare, or execute programs from within it. Thus, to make a simple
program modification, the programmer has to enter EDITOR, /TEXT the
file, make the modification, /KEEP the file, /EXIT EDITOR, compile
it, find a compilation error, re-enter EDITOR, re-/TEXT the file, and
so on. What would be really desirable is the ability to compile the
file from EDITOR without /EXITing and having to re-text the source
file when one re-enters EDITOR.
MPEX, however, permits its users to compile, :PREP, :RUN, and even
execute UDCs from within it. And, VESOFT also provides a method of
executing MPEX commands from within EDITOR (by prefixing them with a
%). Thus, a programmer may "live" in EDITOR, doing all his
compilation and testing from within EDITOR via MPEX. An example
programmer session would thus be:
:RUN EDITOR.PUB.VESOFT;LIB=P <<special version of EDITOR>>
/TEXT SRCFILE
<< make modifications >>
/KEEP
/%COBOL SRCFILE,PRGFILE <<MPEX command, includes :PREP>>
<< compile fails, workfile still contains SRCFILE,
make more modifications without re-/TEXTing the file >>
/KEEP
/%COBOL SRCFILE,PRGFILE << compile now succeeds >>
/%RUN PRGFILE
Thus, the programmer saves the overhead of entering EDITOR, /EXITing
EDITOR, and re-/TEXTing the file every time he needs to do a compile.
Thus, even if one does not use any of the fileset-handling features
of MPEX (which are also available from within EDITOR via the same %
interface), one can still derive great benefit from MPEX.
SUMMARY
Thus, MPEX provides the user with many desirable and needed features,
including the ability to
* Compile, EDIT, FCOPY, RENAME, PURGE, RELEASE filesets.
* Select on the basis of various file attributes.
* List various file attributes.
* Change various file attributes.
* Waive certain annoying and unneeded security provisions in the
RENAME, RELEASE, SECURE, and ALTSEC commands.
* PURGE filesets of spool files.
* Execute MPEX commands, compiles, :PREPs, :RUNs, and UDCs from
within the EDITOR.
* Save a lot of disc space.
* And much, much more.
MPEX thus proves itself to be an exceptionally powerful and useful
tool for the program developer and the system manager.
Go to Adager's index of technical papers