Mike Walter
Mike has been developing VM tools to make his job easier and him more productive since 1978. Perhaps some of his tools can make your job easier and you more productive, too. Or, perhaps some might serve as kernels which you can grow into your own tools -- which, of course, you would share with the VM Community, too!
Navigation to Mike's utilities
SFDATTIM: Display timestamps for a spool fileTIMEDIFF: Calculate the difference between two dates and/or times
FINDFILE: Search for files on minidisks or SFS directories
LOSTDISK: Locate files on lost minidisk(s)
QOWNER: Display linked minidisks
ONELINE: Compress EXECs into one line
REXXBACK: Provide names of all calling REXX programs
HUNGUSER: Documention on how to debug a virtual machine stuck in LOGOFF/FORCE Pending
DYNIODF: Dynamic I/O Cheatsheet
WAKEUP: Tailorable Wakeup sample EXEC
Downloads: Downloads for the described utilities
SFDATTIM (v1.4.1)
SFDATTIMe is used to display the full mm/dd/yy and hh:mm:ss Open, Close, (or both) date and time of a specified SPOOL file. Local timezone offset,and UTC and TOD support is included. +----*-----+ >--SFDATTIM--SpoolFileID--+--userid--+--+---------------------+----->< +-(-+-----------------+ +- |Options |-+---+ +-)-+ or as a REXX function call:' +----*----+ >--crdate=sfdattim(SpoolFileID-+-userid--+-+------------+-)--------->< +- |Options|-+ Where: SpoolFileID is the 1-4 digit SPOOL file number of which the full mm/dd/yy and hh:mm:ss creation date/time is to be returned. userid is the userid which "owns" the SPOOL file. If you have CP privclass "C" or "E" it may be an ID other than your own. DEFAULT=* (your own userid). Options: OPEN requests return of the "mm/dd/yy hh:mm:ss" when the SPOOL file was opened. Default=OPEN CLOSe requests return of the "mm/dd/yy hh:mm:ss" when the SPOOL file was closed. If the SPOOL file is still open, "00/00/00 00:00:00" is returned. This option is available only to those with system privclass of "C" or "E".' BOTH requests return of both Open and Close date and time. Synonymous with entry of "OPEN" -and- "CLOSE" options. TIMEzone +n/-n Where "n" is the number of hours the system is running east or west of UTC (Coordinated Universal Time in Greenwich, England). "n" must be in the range 0-23. The open AND close date/time of SPOOL files are stored as UTC. This option permits displaying the date and time of the file would be shown in response to a "CP Query Reader ALL" command. CP automatically offsets the SPOOL file date/time by the number of hours the system is east or west of UTC. In the United States, one would want to subtract a number of hours from the UTC on SPOOL to derive the local time, as the time in in Greenwich, England is some number of hours ahead of U.S. times. The specified number of hours is added to or subtracted from the SPOOL file dates/times before display. Default=the active offset as displayed in response to a "CP Query TIMEZONE" command. When TIMEZONE is specified, the response is returned as: date1 time1 date2 time2 Where: date1 = OpenDate (or CloseDate if only CLOSe was specified) time1 = OpenTime (or CloseTime if only CLOSe was specified) date2 = ClosDate (only when CLOSe was specified) time2 = ClosTime (only when CLOSe was specified) This option is available only to those with system privclass of "C" or "E". UTC synonym for: TIMEzone +0. This option is available only to those with system privclass of "C" or "E". TOD Return the 8-byte hexidecimal TOD clock values as requested for the OPEN and/or CLOSe times. If the SPOOL file is still open, the right 4 bytes of the TOD will be returned as '00000000'x. This option is available only to those with system privclass of "C" or "E". Usage notes. If OPEN and CLOSe are both requested, OPEN date/time will always be returned as the first tokens, followed by CLOSe date/time.
TIMEDIFF EXEC (v2.2.1)
TIMEDIFF provides the number of hours, minutes and seconds (and optionally, days) between two pairs of dates and times. The command format is: >>-TIMEDIFF-+-date1------+-+-time1----+----+-date2------+-+-time2----+-> +-yyyy-mm-dd-+ +-hh:mm:ss-+ +-yyyy-mm-dd-+ +-hh:mm:ss-+ +-yyyy/mm/dd-+ +-hhmmss---+ +-yyyy/mm/dd-+ +-hhmmss---+ +-yyyymmdd---+ +-*--------+ +-yyyymmdd---+ +-*--------+ +-yyyyddd----+ +-TOD_ABS--+(1) +-yyyyddd----+ +-=--------+ +-yyddd------+ +-POSIX----+(1) +-yyddd------+ +-mm/dd/yy---+ +-mm/dd/yy---+ +-*----------+ +-*----------+ +-xxxxxxxxxxxxxxxx-+(1) +-=----------+ >-----------+-------------------------------+------------------------->< +--(----| Options |---+-----+---+ +--)--+ (1) TOD_ABS and POSIX are entered as 'time1' to indicate that 'date1' is a string of 16 hexadecimal characters representing the specified date/time. Options: +-TERM--+ |--+------+--+-------+-------------------------------------------------| +-DAYS-+ +-FIFO--+ +-MET--+ +-STACK-+ +-LIFO--+ Dates are supported between 01 Jan 0001 AD and 31 Dec 9999 AD. The dates may be entered as any of the following date formats: Format Format type ---------- ------------------------------------------------------ * - Current date yyyy-mm-dd - ISOdate yyyy/mm/dd - DateTimeSubtract CSL yyyymmdd - Standard date; rexx date(S) yyyyddd - Julian date; (long) yyddd - Julian date; rexx date(J) mm/dd/yy - Gregorian Date; rexx date(U) xxxxxxxxxxxxxxxx - When "time1" is entered as "TOD_ABS", an unsigned doubleword indicating # of TOD clock units that have elapsed since January 1, 1900, 00:00:00 UTC E.g. CBDAE6439DA00000 xxxxxxxxxxxxxxxx - When "time1" is entered as "POSIX", an unsigned doubleword indicating # of seconds since January 1, 1900, 00:00:00 UTC, E.g. DC0106C052564574 = - For 'date2' only; equal to 'date1' The times may be entered as any of the following time formats: Format Format type ---------- ---------------------------------- * - Current time hh:mm:ss - Specific time hhmmss - Specific time TOD_ABS - A 16 hex character string is entered as "date1", representing a z/VM Time of Day clock value. POSIX - A 16 hex character string is entered as "date1", as the number of seconds since Jan 1, 1900, 00:00:00 UTC = - For 'time2' only, equal to 'time1' Options: DAYS - Display the number of days between the dates For a 'TERM' display as: Time difference is: n days, n hours, n minutes, n seconds. For a function call as: days hh:mm:ss For LIFO, FIFO, or STACK: * n n n n MET - Display the days in "Mission Elapsed Time" format. For a 'TERM' display as: Time difference is: n days/ n hours, n minutes, n seconds. For a function call as: days/hh:mm:ss For LIFO, FIFO, or STACK: * days/hh:mm:ss TERM - Display results at console (DEFAULT) FIFO - Queue results in Program Stack STACK - Queue results in Program Stack LIFO - Push results in Program Stack Usage notes: 1) Options for a rexx function call are entered after a comma, as in: diff=timediff(date1 time1 date2 time2,options) 2) Any date entered as a 2-digit year (Gregorian or Julian) will be converted to a 4-digit year using a 50 year sliding window from the the current date. The sliding window range of years is computed as: current year -50, through current year +49. The century is taken from the matching year in that range. Examples: 2-digit Resulting Current year; Window begin; Window end; year 4-digit year ------------- ------------ ---------- ------- ------------ 2000 2000-50=1950 2000+49=2049 00 2000 49 2049 50 1950 99 1999 2005 2005-50=1955 2005+49=2054 00 2000 49 1949 50 2050 99 1999 Examples from within a REXX program: runtime=timediff('20001231 01:00:00 20001231 02:00:00') diff=timediff('20001231 01:00:00 20001231 02:00:00','MET') say timediff('01/11/00 01:00:00 2000-01-11 02:00:00') say timediff('05/11/50 14:00:00 2000/05/11 14:00:00','DAYS') 'EXEC TIMEDIFF 12/05/84 08:30:00 1999/12/05 = (DAYS'
FINDFILE EXEC (v1.2.1)
FINDFILE is used to search the issuing userid, for files on all virtual DASD (even those not accessed), and accessed SFS directories. Each virtual DASD address is ACCESSed using a free filemode, LISTFILE issued, and matching files and their virtual address reported. If the 'ACCESSM0 MODULE' is available, ACCESSM0 is SET ON so that filemode 0 (zero) files on R/O disks are searched as well. LISTFILE is issued against accessed SFS Directories, with matching files and their directory name reported. Syntax: +-*-------------+ >--FINDFILE--+-fname_pattern-+--+-ftype_pattern-+----------------------> >------------+------------------+--------------------| options |------>< +-pipe PICK stage -+ pipe PICK stage CMS Pipelines arguments as entered for the Pipe PICK stage. E.g. FINDFILE * * PICK ANYcase W1 == /DIRECTORY/ or FINDFILE * * PICK PAD BLANK ANYcase 1.5 == /USER/ Note: PICK PAD BLANK ANY 1.5 == /USER/ is not equal to: PICK PAD BLANK ANY W1 == /USER/ For details, enter: HELP PIPE PICK Depending on the number of LINKed minidisks, and file on each, this 'pipe PICK stage' operand can run quite long, and produce a lot of output. Options: Options are passed directly to LISTFILE. Some will not make sense to use from this command. TOCYL a non-LISTFILE option (removed before calling LISTFILE) which displays the "TO cylinder" instead of the mdisk cylinder size. E.g. without TOCYL, an mdisk might be displayed as from/size cylinders: 01810 00011 while with TOCYL, the same mdisk would be displayed as from/to cylinders: 01810 01820 VERBOSE a non-LISTFILE option (removed before calling LISTFILE) which displays each mdisk and directory just before searching, providing confidence-building PUF (Positive User Feedback).
LOSTDISK EXEC (v1.1.1)
LOSTDISK is used from a userid with the PrivClass for 'CP DEFINE MDISK' to locate minidisks, and optionally files, on a full-pack volume. It is handy if you no longer have a DIRECTORY mapping that volume. Syntax: >--LOSTDISK--+-volser-+--+---------------------------------+-|options|->< +--fnamepattern--+----------------+ +--ftypepattern--+ |-Options-| FILEList FL Enter FILELIST on the files with patching filename (and optionally filetype) patterns from the found mdisk(s). LFoptions Mutually exclusive with "FILELIST" or "FL". Issues LISTFILE for the specified "fnamepattern ftypepattern" with the "LFoptions" arguments as LISTFILE's options. For example: lostdisk vmres1 lostdisk vmpk01 *some* file* lostdisk vmpk02 *some* cata* (filel lostdisk vmu087 *some* *x* (fl lostdisk 520res user direct (fl
QOWNER EXEC (v1.1.2)
QOWNER is used to display each LINKed disk, showing commonly needed information for all accessed and un-accessed disks. A period is displayed as a place-holder for missing values (un-accessed minidisks). Any accessed SFS directories will also be displayed. If the 'DEVTYPE MODULE' from the CMS Utilties Feature is available, added detail is displayed: unaccessed mindisk labels, and the minidisk label type (CMS1, VOL1, None). The format of the output would appear as: Label Vdev M Stat Cylinders Used Files Ownerid Addr Rdev Volser LblType labelx vdev x/x r/w nnnnn CYL nnn% nnnnnnnn = owneridx nnnn rdev volser CMS1 - DIR x r/o nnnnn CYL nnn% . = filepool:filespaceid. labely vdev . r/o nnnnn CYL nnn% . = owneridx nnnn rdev volser VOL1 . vdev . r/o nnnnn CYL nnn% . = owneridx nnnn rdev volser None Note: the 'Cylinder' value for SFS directories is a calculated value, provided for consistency and comparison to minidisks. Syntax: +-----------+ V | >--QOWNER---+---------++-------------------+-------------------+---->< +-accmode-+ +-(-| Options |-+---+ +-vdev----+ +-)-+ +-DIR-----+ Options: |--+------------------+--+------+--+----------+--| +-OWNedby-+-userid-+ +-vdev-+ +-ACCESsed-+ +-OWNerid-+ Where: accmode is the access mode or extension of an accessed minidisk. userid is the userid's disks to be displayed. "userid" may also be entered as "*" to indicate the userid from which the command is issued. The following forms of the "NOT" symbol may prefixed to the "userid" to indicate mdisks of a given userid which should NOT be displayed: "\", "<>", "^", as in "\userid" or "<>*". vdev minidisk address (will be left-padded with zeros before comparison). DIR Specifies accessed SFS directories. This is used as a pattern match. Options: OWNedby userid or OWNerid userid display of only minidisks owned by the specified userid. vdev display of only the specified minidisk owned by the specified ownerid. ACCESsed display of only ACCESSED minidisks or directories. is the access mode or extension of an accessed minidisk. Examples: (with the same disks/directories accessed, just showing different options) QOWNER Label Vdev M Stat Cylinders Used Files Ownerid Addr Rdev Volser LblType M2W191 0191 A R/W 150 CYL 76% 2552 = M2WALTER 0191 0F19 VMPP09 CMS1 ADM199 0199 B/A R/O 600 CYL 53% 2931 = HEWADMN 0199 0E15 VMPP05 CMS1 ADM399 0399 C/B R/O 15 CYL 75% 328 = HEWADMN 0399 0F12 VMPP02 CMS1 - DIR Q R/O 12222 CYL 63% 19 = PPS01:SYSPROG.PIPELINES.FIELDTEST. 12000A MNT190 0190 S R/O 107 CYL 85% 703 = MAINT 0190 0E10 VMR54I CMS1 - DIR T/T R/O 998 CYL 37% 538 = AUD01:MAINT.TDISK - DIR X R/W 12222 CYL 63% 77 = PPS01:SYSPROG.TOOLS.CA - DIR Y/S R/O 998 CYL 37% 3847 = AUD01:MAINT.YDISK - DIR Z R/W 12222 CYL 63% 3648 = PPS01:SYSPROG.TOOLS RSTCKD 0050 . R/W 50 CYL . . = M2WALTER 0050 0F6E VMU334 CMS1 M2W107 0107 . R/W 20 CYL . . = M2WALTER 0107 0F7C VMU357 CMS1 HATOOL 019C . R/O 20 CYL . . = MAINT 019C 0E11 VMR54H CMS1 54Z19D 019D . R/O 200 CYL . . = MAINT 019D 0E11 VMR54H CMS1 54Z19E 019E . R/O 500 CYL . . = MAINT 019E 0E11 VMR54H CMS1 M2W1B0 01B0 . R/W 10 CYL . . = M2WALTER 01B0 0F79 VMU348 CMS1 TRKV54 0540 . R/W 25 CYL . . = M2WALTER 0540 0F13 VMPP03 CMS1 BADDSK 0BAD . R/W 1 CYL . . = M2WALTER 0BAD 0F11 VMPP01 CMS1 M2W101 1993 . R/W 100 CYL . . = M2WALTER 1993 0F79 VMU348 CMS1 NEWSTE 6191 . R/W 100 CYL . . = M2WALTER 6191 0F7C VMU357 CMS1 M2DEAD DEAD . R/W 800 CYL . . = M2WALTER DEAD 0F6E VMU334 CMS1 qowner (accessed Label Vdev M Stat Cylinders Used Files Ownerid Addr Rdev Volser LblType M2W191 0191 A R/W 150 CYL 76% 2552 = M2WALTER 0191 0F19 VMPP09 CMS1 ADM199 0199 B/A R/O 600 CYL 53% 2931 = HEWADMN 0199 0E15 VMPP05 CMS1 ADM399 0399 C/B R/O 15 CYL 75% 328 = HEWADMN 0399 0F12 VMPP02 CMS1 - DIR Q R/O 12222 CYL 63% 19 = PPS01:SYSPROG.PIPELINES.FIELDTEST. 12000A MNT190 0190 S R/O 107 CYL 85% 703 = MAINT 0190 0E10 VMR54I CMS1 - DIR T/T R/O 998 CYL 37% 538 = AUD01:MAINT.TDISK - DIR X R/W 12222 CYL 63% 77 = PPS01:SYSPROG.TOOLS.CA - DIR Y/S R/O 998 CYL 37% 3847 = AUD01:MAINT.YDISK - DIR Z R/W 12222 CYL 63% 3648 = PPS01:SYSPROG.TOOLS qowner (ownedby m2walter Label Vdev M Stat Cylinders Used Files Ownerid Addr Rdev Volser LblType M2W191 0191 A R/W 150 CYL 76% 2552 = M2WALTER 0191 0F19 VMPP09 CMS1 RSTCKD 0050 . R/W 50 CYL . . = M2WALTER 0050 0F6E VMU334 CMS1 M2W107 0107 . R/W 20 CYL . . = M2WALTER 0107 0F7C VMU357 CMS1 M2W1B0 01B0 . R/W 10 CYL . . = M2WALTER 01B0 0F79 VMU348 CMS1 TRKV54 0540 . R/W 25 CYL . . = M2WALTER 0540 0F13 VMPP03 CMS1 BADDSK 0BAD . R/W 1 CYL . . = M2WALTER 0BAD 0F11 VMPP01 CMS1 M2W101 1993 . R/W 100 CYL . . = M2WALTER 1993 0F79 VMU348 CMS1 NEWSTE 6191 . R/W 100 CYL . . = M2WALTER 6191 0F7C VMU357 CMS1 M2DEAD DEAD . R/W 800 CYL . . = M2WALTER DEAD 0F6E VMU334 CMS1 Label Vdev M Stat Cylinders Used Files Ownerid Addr Rdev Volser LblType ADM199 0199 B/A R/O 600 CYL 53% 2931 = HEWADMN 0199 0E15 VMPP05 CMS1 ADM399 0399 C/B R/O 15 CYL 75% 328 = HEWADMN 0399 0F12 VMPP02 CMS1 - DIR Q R/O 12222 CYL 63% 19 = PPS01:SYSPROG.PIPELINES.FIELDTEST. 12000A MNT190 0190 S R/O 107 CYL 85% 703 = MAINT 0190 0E10 VMR54I CMS1 - DIR T/T R/O 998 CYL 37% 538 = AUD01:MAINT.TDISK - DIR X R/W 12222 CYL 63% 77 = PPS01:SYSPROG.TOOLS.CA - DIR Y/S R/O 998 CYL 37% 3847 = AUD01:MAINT.YDISK - DIR Z R/W 12222 CYL 63% 3648 = PPS01:SYSPROG.TOOLS HATOOL 019C . R/O 20 CYL . . = MAINT 019C 0E11 VMR54H CMS1 54Z19D 019D . R/O 200 CYL . . = MAINT 019D 0E11 VMR54H CMS1 54Z19E 019E . R/O 500 CYL . . = MAINT 019E 0E11 VMR54H CMS1
ONELINE EXEC
The ONELINE EXEC is used to compress other EXECs into one long line.
This is done by using PIPEs FPLCMPRX if, available, or by using EXECUPDT logic to delete all comments (except those in EXECUPDT-type format where comments begin in column 1 with: /*! ), all blank lines and all leading and trailing blanks on each record. The resultant records are packed together on one line with REXX's instruction separator ";" between them. Lines continued with a "," are handled properly. If the resultant line exceeds 65,535 bytes, it is broken at suitable points into additional long records. Syntax: +-1$EXEC--+ +-1$XEDIT-+ +-EXEC-+ +-*---+ +-ONELINE-+ +-A---+ ONELINE--+-ifn-+--+-ift--+--+-ifm-+--+-ofn-+--+-oft-----+--+-ofm-+-----> +- = -+ >--+--------------------------------+--------------------------<> +-(-+---------+--+---------+-+---+ +-REPlace-+ +-NEWDate-+ +-)-+ Usage notes: IBM's "FPLCMPRX REXX" does a far better job of compressing the input rexx file than the 'hard way' compression routine within this exec: Filename Filetype Fm Format Lrecl Records Blocks ISPDTLC 1$EXEC A1 F 345723 1 85 <- FPLCMPRX ISPDTLC 1$EXEC A1 V 65527 6 91 <- internal
REXXBACK EXEC
REXXBACK provides the names (and optionally minidisk owner and address) of all the calling rexx programs, back to the beginning of the calling chain of REXX EXECs. The command format is: +-*-----+ >>-REXXBACK-+-------+---------------+-------------------------------+--> +-n-----+ +--(----| Options |---+-----+---+ +-Init--+ +--(----| Options |---+-----+---+ +--)--+ Options: |--+-------+-----------------------------------------------------------| +-OWNER-+ Where: Init Displays only the first calling EXEC in the chain. n limits the number of calling execs to search back. For example '0' would display only the current exec running REXXBACK, '1' would display the current exec and go back only 1 level. Default: '*' - meaning to go back to the beginning of the chain. OWNER includes the userid and minidisk address within parenthesis the first time each filemode is encountered in the chain. Usage note: The displayed rexx exec chain is for REXX execs only. And imbedded EXEC or EXEC2 execs will not be displayed.
say rexxback() *= E EXEC A1, D EXEC A1, C EXEC A1, B EXEC A1, A EXEC A1 say rexxback(0,OWNER) 0= E EXEC A1(JQPUBLIC 0191) say rexxback(1,OWNER) 1= E EXEC A1(JMDOE 0191), D EXEC A1 say rexxback(4,OWNER) 4= E EXEC A1(DWJONES 0191), D EXEC A1, C EXEC A1, B EXEC A1, A EXEC A1 EXEC REXXBACK 4 (OWNER REXXback 4="E EXEC A1(ABSMITH 0191), D EXEC A1, C EXEC A1, B EXEC D1(ONMOORE 02 00), A EXEC A1". EXEC REXXBACK (OWNER REXXback *="E EXEC A1(LSONE 0191), D EXEC A1, C EXEC C1(YKNOT 0192), B EXEC A1, A EXEC A1". EXEC REXXBACK REXXback *="E EXEC A1, D EXEC A1, C EXEC A1, B EXEC A1, A EXEC A1".
HUNGUSER
Abstract: The contents of the HUNGUSER HELPME file can be placed on a disk or in an SFS file directory accessible to z/VM Systems Programmers, and when accessed, easily displayed by entering: HELP ME HUNGUSER. Similar subject HELPME files can be easily created by you to help you with other seldom needed commands. :HELPME HUNGUSER When a userid becomes hung in a LOGOFF/FORCE PENDING state, the following alternatives may be tried -- some require more than class "G" privs: - If you have the time, simply waiting 15 minutes for CP to perform housecleaning chores might free the userid, completing the LOGOFF or FORCE. - Use the public domain utility "TRACK" to determine if the userid is awaiting completion of an I/O to a particular unresponsive device. Use the commands: TRACK hungid DEV CLASS * IO PENDing TRACK hungid DEV CLASS * IO ACTIVE Nota bene: As of 23 Feb 2006 TRACK can be obtained from: http://vm.marist.edu/track/code.html - Before attempting anything that actually changes the hung userid, if you can (consider communication time-outs which may occur that could affect other users) before muddying the waters, get a current system dump for IBM to diagnose later. From a privclass "A' user: CP QUERY DUMP (then ensure that it is going to disk) Then: CP WNG ALL This system may be non-responsive for a few minutes while diagnostic information is obtained. Then: CP SNAPDUMP - Sometimes a simple message frees up the "hungid" without further ado. From a privclass A, B, or C userid, issue: CP WNG hungid Hello - If the ID was awaiting I/O to a terminal, simply connecting from a working terminal may free the ID. From a free terminal, issue: CP LOGON hungid HERE - For users logged on via TELNET terminals, issue: NETSTAT TELNET Find the matching tn3270 connection, and issue: NETSTAT DROP conn_num - "CPHX" is reported to cancel pending CP commands: ATTACH, LOCATE, LOCATEVM, and VARY ONLINE|OFFLINE (see HELP for more detail). From a privclass "A" userid, issue: CP CPHX hungid - If TRACK (above) showed an active I/O which cannot be remedied (e.g. by making a tape drive "Ready"), the I/O may be able to be cancelled. From a privclass "A" userid, issue: CP HALT rdev Due to queued I/Os or recalcitrant devices, HALT may need to be issued repeatedly until the following message is received: Halt was not initiated to tape nnnn because the device as not active - If nothing freed the hung user, open a Problem Management Report (PMR) with IBM, and provide the SNAPDUMP for analysis. .cm Last updated 2007/01/04 mrw
Dynamic I/O Cheatsheet
A step-by-step guide to implementing z/VM's "Dynamic IO", importing IODF files built by z/OS, and placing them into production without a POR or IPL. The link to the document is in the Downloads section.
Tailorable Wakeup sample EXEC
A sample EXEC to implement the CMS WAKEUP function. The file is CMS packed, make sure to upload to the mainframe in binary F 1024 format. Then copy the file to itself with the unpack option.
Attachments:
CPSYNTAX.VMARC
SFDATTIM.VMARC
TIMEDIFF.VMARC
FINDFILE.VMARC
LOSTDISK.VMARC
QOWNER.VMARC
ONELINE.VMARC
REXXBACK.VMARC
DYNIODF.SHTML
WAKEUP.EXECSAMP