UnXMIT information exchange


The purpose of this page is information sharing about IBM's XMIT file format for use in creating UnXMIT products on other platforms. XMIT files are usually created on the MVS operating system using the XMIT TSO command.

Brief summary of the XMIT command

The XMIT (short for TRANSMIT) command comes with all MVS systems that have TSO/E which is basically all MVS systems since the mid-1980s (including OS/390). I can't explain it better than the IBM HELP (licensed materials of IBM) command:
The TSO/E Interactive Data Transmission Facility TRANSMIT command allows you to send data sets or messages to persons on other MVS systems via Network Job Entry or directly to persons on your own system.

You may transmit sequential and partitioned data sets that have the fixed, variable and undefined record formats.
Here is an example of an XMIT command:

XMIT node.user DA(file.name) OUTDATASET(out.xmi)

This command is used to place a portable copy of a MVS file into a LRECL=80 dataset which is created with the name of the OUTDATASET operand.

For more information either use the HELP XMIT command in TSO or consult the TSO/E Command Reference manual.

For the purposes of this page, we are only concerned with the XMIT command that uses the OUTDATASET(name) operand. This creates a portable version of a MVS dataset. Although the manual states that the OUTFILE and OUTDATASET operands are "primarily intended for system programmer use", these datasets are very handy for all users of TSO.

The XMIT command has a cousin command called RECEIVE which is used to retrieve files transmitted to your userid either through the JES SPOOL or contained in an XMIT file. Here is an example of a RECEIVE command:


This command attempts to obtain the contents of an XMIT file and displays messages contained in it or prompts the user to place embedded files on the user's system.

My Download Instructions page has some more information on downloading XMIT files. Basically, you will always use the binary option (no ASCII or CRLF) when uploading and downloading XMIT files to and from non-MVS platforms.

Getting started writing an UnXMIT program

The first step is to read up on the XMIT file format which is documented in the TSO/E Customization manual in the section called "Format of Transmitted Data".

I've written a Rexx exec called XMITINFO which displays some XMIT file information and dumps internal "logical" records contained in the physical 80 byte records. XMITINFO runs on MVS, VM and PC platforms.

I'd guess you're ready to see what these XMIT files look like.

XMIT containing a sequential file

First I created a sequential LRECL=80 file called A.SEQ that had 3 lines:


I then placed it into an XMIT file using this command:
xmit tonode.touser da(a.seq) outdataset(seq.xmi)
I've run this through my XMITINFO Rexx exec with the dump option as seen in DUMPSEQ.TXT. As you see in the hex dump of the logical records of an XMIT file that has a sequential MVS file, it looks straight forward and down right easy to decode.

XMIT containing a PDS file

I then created a LRECL=80 PDS file called A.PDS that contains a member called "BBBBBBBB" which has the 3 lines above. I then placed this PDS file into an XMIT file using this command:
xmit tonode.touser da(a.pds) outdataset(pds.xmi)
I've run this through my XMITINFO Rexx exec with the dump option as seen in DUMPPDS.TXT. As you look through the logical records of an XMIT file that has a PDS file, it looks a lot more complicated.

PDS format

PDS files that reside in XMIT files are stored in IEBCOPY sequential format. It is not trivial to decode IEBCOPY sequential files because of the TTR information which is S/390 DASD device dependent! I've come across two VM programs that decode IEBCOPY sequential files:

My files

In case you wanted to try out your luck using the XMIT files I used above, here they are: Here is some device information for the PDS file (from FDR):
DEVICE TYPE .................................  3390-3
NO. OF TRACKS ............................... 50085
NO. OF CYLINDERS ............................  3339
NO. OF TRACKS PER CYLINDER ..................    15

Test files Updated!

I only have access to 3390-3 devices and XMIT files which contain partitioned data sets must be handled differently based on the device type. Here are some small XMIT files for each device type that I have currently:

PDS3380.XMI 3380 Thanks to Ray Mullins for sending me this file.
PDS33903.XMI 3390-3  
PDS33909.XMI 3390-9 Thanks to Sam Knutson for sending me this file.
testpds.xmi 3390 This is a LRECL=80 PDS with two members, AAAAAAAA and ZZZZZZZZ. This file is here to compare it with the testpdse.xmi.

Hex Dump of this file
testpdse.xmi 3390 This is a LRECL=80 PDS with two members, AAAAAAAA and ZZZZZZZZ. This file is here to compare it with the testpds.xmi. This file is of a PDSE datasets.

Hex Dump of this file
If you have access to a device type that I don't have, please take a few minutes and follow these instructions. Thanks:

Known non-Mainframe XMIT programs

Here are the non-Mainframe UnXMIT programs that I'm aware of:

Frequently Asked Questions

Why are you guys writing UnXMIT programs? Isn't IEBUPDTE good enough?

We like the concept of a portable version of a MVS partitioned dataset which is preserved completely in a native MVS binary format. We also would like to maintain ISPF statistics on PDS members.

Where is the XMIT file format documented?

See the IBM manual: "TSO/E Customization manual" in the section called "Format of Transmitted Data". At the TSO/E 2.5 level, the manual number is SC28-1872.

Can I put in comments in an XMIT file that displays when UnXMITing (RECEIVE on TSO)?

Yes, although not seen very much, this is very easy. First, create your comments and put in a file (for this example they are in a file called A.MSG). When you create your XMIT file, use the MSGDATASET operand to specify your comment/message file, for example:
xmit tonode.touser da(a.pds) msgdataset(a.msg) outdataset(pds.xmi)

How do I suppress the IEBCOPY messages when I'm using the XMIT command?

Change your 'SYS1.PARMLIB(IKJTSO00)' member and add your JESx trash SYSOUT class, usually SYSOUT(Z), in the TRANSREC section.


The code samples and advice on this page are presented asis and without warranty. Please research any advice given here and ensure that it will work in your environment.

Call for contributions, corrections, etc.

Please send me any contributions, corrections, suggestions, etc. Thanks.

Return to the Planet MVS home page

Last Updated: 2004-03-08
This web page is © 1997-2004+ by David Alcock. All Rights Reserved.