1
Using ZIP and UNZIP on VM/CMS
2
=============================
8
The following CMS MODULEs are available:
15
In addition to these, each MODULE file also has an EXEC with the same
16
name. These EXECs are front-ends to the MODULES that will attempt to
17
set up the required runtime libraries before running the MODULE.
18
All the EXECs are identical. Only their names are different.
19
They are stored as plain text files.
21
The CMS MODULE files have been packed using the COPYFILE command to
22
allow their file format to be properly restored, since variable length
23
binary files will not currently unzip properly (see below for details).
24
The MODULEs are shipped with a filetype or extension of CMO (for CMS
25
MODULE). Their names may vary on the distribution disk to indicate
28
To restore them to executable MODULEs on CMS, do the following:
29
1. Upload them to CMS with a Fixed record length with LRECL 1024.
30
Example, from a DOS or OS/2 window, type this:
31
SEND unzip.cmo A:unzip module a (RECFM F LRECL 1024
33
Example, using FTP from CMS, type this:
35
GET unzip.cmo unzip.module.a
37
Note: Replace "unzip.cmo" with the actual name.
39
2. Use COPYFILE to unpack the file.
40
Example, in CMS type this:
41
COPYFILE UNZIP MODULE A (UNPACK REPLACE OLDDATE
43
3. Repeat steps 1-2 for each of the programs.
45
4. Build the ZIPINFO module by typing this:
46
COPYFILE UNZIP MODULE A ZIPINFO MODULE A (OLDDATE
48
5. Upload the EXECs to CMS as text files (with ASCII-to-EBCDIC
50
Example, from a DOS or OS/2 window, type this:
51
SEND unzip.exc A:unzip exec a (CRLF
53
Example, using FTP from CMS, type this:
54
GET unzip.exc unzip.exec.a
56
6. Repeat steps 4 for each of the EXECs.
59
Preparing the environment
60
-------------------------
62
The executables provided were compiled with IBM C 3.1.0 and
63
require the the Language Environment (LE) runtime libraries.
65
To provide access to the runtime libraries:
66
1. Link to the disk containing the Language Environment files,
69
2. Use the command "GLOBAL LOADLIB SCEERUN"
71
These commands can be placed in your PROFILE EXEC.
73
Note: EXECs have been provided called ZIP, UNZIP, etc. that
74
issue the GLOBAL LOADLIB statement. This was done to alleviate
75
frustration of users that don't have the GLOBAL LOADLIB statement
76
in their PROFILE EXEC. These EXECs may require changing for
79
Unfortunately, there is no way, using IBM C, to produce a MODULE
80
that doesn't require a runtime library.
86
To test the MODULEs, just type ZIP or UNZIP. They should
87
show help information on using the commands.
89
If you see something like this:
90
DMSLIO201W The following names are undefined:
92
DMSABE155T User abend 4093 called from 00DCD298 reason code 000003EB
94
Then you don't have access to the proper runtime libraries, as
97
Here is additional information on the ZIP and UNZIP programs that
98
may assist support personnel:
99
- Compiled with IBM C V3R1M0 on VM/ESA 2.2.0 with
100
CMS level 13 Service Level 702.
102
- Require the SCEERUN LOADLIB runtime library. This is
103
part of the Language Environment (LE).
105
- Linked with options RMODE ANY AMODE ANY RLDSAVE.
107
If you continue to have trouble, report the problem to Zip-Bugs
108
(see the bottom of this document).
112
Compiling the source on VM/CMS
113
------------------------------
115
The source has been successfully compiled previously using
116
C/370 2.1 and 2.2. The source has been recently compiled using
117
IBM C 3.1.0 on VM/ESA 2.2.0 with CMS level 13. I don't have
118
access to an MVS system so the code hasn't been tested there
121
1. Unzip the source files required for CMS. The root-level files
122
inside the ZIP file and the files in the CMSMVS subdirectory are
123
needed. Example (use both commands):
124
unzip -aj zip23.zip -x */* -dc
125
unzip -aj zip23.zip cmsmvs/* -dc
127
This example unzips the files to the C-disk, while translating
128
character data and ignoring paths.
130
If you don't already have a working UNZIP MODULE on CMS you will
131
have to unzip the files on another system and transport them
132
to CMS. All the required files are plain text so they can
133
be transferred with ASCII-to-EBCDIC translations.
135
2. Repeat step 1 with the zip file containing the UNZIP code.
136
Unzip the files to a different disk than the disk used for the ZIP
139
3. To compile the ZIP code, run the supplied CCZIP EXEC.
140
To compile the UNZIP code, run the supplied CCUNZIP EXEC.
143
Some of the ZIP and UNZIP source files have the same name. It is
144
recommended that you keep the source from each on separate disks and
145
move the disk you are building from ahead of the other in the search
148
For example, you may have a 192 disk with the ZIP source code and
149
a 193 disk with the UNZIP source code. To compile ZIP, access
150
the 192 disk as B, then run CCZIP. This will create the following
151
modules: ZIP, ZIPNOTE, ZIPSPLIT, ZIPCLOAK.
153
To compile UNZIP, access 193 as B, then run CCUNZIP. This will create
154
the following modules: UNZIP, ZIPINFO (a copy of UNZIP).
157
=========================================================================
163
Documentation for the commands is in MANUAL NONAME (for ZIP) and in
164
UNZIP DOC UNZIP. INFOZIP DOC describes the use of the -Z option of
167
The rest of this section explains special notes concerning the VM/CMS
168
version of ZIP and UNZIP.
171
Filenames and directories
172
-------------------------
174
1. Specifying filenames
176
a. When specifying CMS files, use filename.filetype.filemode format
177
(separate the three parts of the name with a period and use no
178
spaces). Example: profile.exec.a
180
Unfortunately, this prevents you from using ZIP from
181
FILELIST. To unzip a zip file, however, you can type something
182
like this next to it in FILELIST:
185
This will unzip the contents of the current file to a C-disk.
187
b. It is possible to use DD names with ZIP and UNZIP on CMS, though
188
it can be cumbersome. Example:
189
filedef out disk myzip zip a
190
zip dd:out file1.txt file2.txt
192
While you can also use a DD name for the input files, ZIP
193
currently does not correctly resolve the filename and will
194
store something like "dd:in" inside the ZIP file. A file stored
195
in this manor cannot easily be unzipped, as "dd:in" is an invalid
198
c. In places where a directory name would be used on a PC, such as
199
for the ZIP -b (work path) option or the UNZIP -d (destination
200
path) options, use a filemode letter for CMS. For example,
201
to unzip files onto a C-disk, you might type something like this:
204
Currently, ZIP uses the A-disk for work files. When zipping
205
large files, you may want to specify a larger disk for work files.
206
This example will use a C-disk for work files.
207
zip -b C myzip.zip.c test.dat.a
210
2. Filename conversions
212
a. Filemode letters are never stored into the zip file or take from
213
a zip file. Only the filename and filetype are used.
214
ZIP removes the filemode when storing the filename into the
215
zip file. UNZIP assumes "A" for the filemode unless the -d
218
b. When unzipping, any path names are removed from the fileid
219
and the last two period-separated words are used as the
220
filename and filetype. These are truncated to a maximum of
221
eight characters, if necessary. If the filetype (extension)
222
is missing, then UNZIP uses "NONAME" for the filetype.
223
Any '(' or ')' characters are removed from the fileid.
225
c. All files are created in upper-case. Files in mixed-case
226
cannot currently be stored into a ZIP file.
228
d. Shared File System (SFS) directories are not supported.
229
Files are always accessed by fn.ft.fm. To use an SFS disk,
230
Assign it a filemode, then it can be used.
233
3. Wildcards in file names
235
a. Wildcards are not supported in the zip filename. The full
236
filename of the zip file must be given (but the .zip is not
237
necessary). So, you can't do this:
240
b. Wildcards CAN be used with UNZIP to select (or exclude) files
241
inside a zip file. Examples:
242
unzip myzip *.c - Unzip all .c files.
243
unzip myzip *.c -x z*.c - Unzip all .c files but those
246
c. Wildcards cannot currently be used to select files with ZIP.
247
So, you can't do this:
250
I expect to fix this for CMS in the future.
255
a. The dates and times of files being zipped or unzipped are not
256
currently read or set. When a file is zipped, the timestamp
257
inside the zip file will always be the current system date and
258
time. Likewise, when unzipping, the date and time of files
259
being unzipped will always be the current system date/time.
261
b. Existing files are assumed to be newer than files inside a zip
262
file when using the -f freshen option of UNZIP. This will prevent
263
overwriting files that may be newer than the files inside the
264
zip file, but also effectively prevents the -f option from working.
267
5. ASCII, EBCDIC, and binary data
271
Most systems create data files as just a stream of bytes. Record
272
breaks happen when certain characters (new line and/or carriage
273
return characters) are encountered in the data. How to interpret
274
the data in a file is up to the user. The system must be told
275
to either notice new line characters in the data or to assume
276
that the data in the file is binary data and should be read or
279
CMS and MVS are record-based systems. All files are composed
280
of data records. These can be stored in fixed-length files or
281
in variable length files. With fixed-length files, each record
282
is the same length. The record breaks are implied by the
283
LRECL (logical record length) attribute associated with the file.
284
With variable-length files, each record contains the length of
285
that record. The separation of records are not part of the
286
data, but part of the file structure.
288
This means you can store any type of data in either type of file
289
structure without having to worry about the data being interpreted
290
as a record break. Fixed-length files may have padding at the
291
end of the file to make up a full record. Variable-length files
292
have no padding, but require extra record length data be stored
295
Storing fixed-length files into a zip file is simple, because all
296
the data can just be dumped into the zip file and the record
297
format (RECFM) and logical record length (LRECL) can be stored
298
in the extra data area of the zip file so they can be restored
301
Storing variable-length data is harder. There is no place to put
302
the record length data needed for each record of the file. This
303
data could be written to the zip file as the first two bytes of
304
each record and interpreted that way by UNZIP. That would make
305
the data unusable on systems other than CMS and MVS, though.
307
Currently, there isn't a solution to this problem. Each record is
308
written to the zip file and the record length information is
309
discarded. Binary data stored in variable-length files can't be put
310
into a zip file then later unzipped back into the proper records.
311
This is fine for binary data that will be read as a stream of bytes
312
but not OK where the records matter, such as with CMS MODULEs.
314
If the data is text (character data), there is a solution.
315
This data can be converted into ASCII when it's stored into
316
a zip file. The end of each record is now marked in the file
317
by new line characters. Another advantage of this method is
318
that the data is now accessible to non-EBCDIC systems. When
319
the data is unzipped on CMS or MVS, it is converted back into
320
EBCDIC and the records are recreated into a variable-length file.
323
So, here's what we have...
325
a. To store readable text data into a zip file that can be used
326
on other platforms, use the -a option with ZIP to convert the
327
data to ASCII. These files will unzip into variable-length
328
files on CMS and should not contain binary data or corruption
331
b. Files that were zipped on an ASCII-based system will be
332
automatically translated to EBCDIC when unzipped. To prevent
333
this (to unzip binary data on CMS that was sent from an
334
ASCII-based system), use the -B option with UNZIP to force Binary
335
mode. To zip binary files on CMS, use the -B option with ZIP to
336
force Binary mode. This will prevent any data conversions from
339
c. When using the ZIP program without specifying the "-a" or "-B"
340
option, ZIP defaults to "native" (EBCDIC) mode and tries to
341
preserve the file information (RECFM, LRECL, and BLKSIZE). So
342
when you unzip a file zipped with ZIP under CMS or MVS, UNZIP
343
restores the file info. The output will be fixed-length if the
344
original was fixed and variable-length if the original was
347
If UNZIP gives a "write error (disk full?)" message, you may be
348
trying to unzip a binary file that was zipped as a text file
349
(without using the -B option)
354
Here's how to ZIP the different types of files.
357
Use the -a option with ZIP to convert to ASCII for use with other
358
platforms or no options for use on EBCDIC systems only.
361
Use the -a option with ZIP to convert to ASCII for use with other
362
platforms or no options for use on EBCDIC systems only.
366
Use the -B option with ZIP (upper-case "B").
369
Use the -B option with ZIP. Can be zipped OK but the record
370
structure is destroyed when unzipped. This is OK for data files
371
read as binary streams but not OK for files such as CMS MODULEs.
376
If you are used to running UNZIP on systems like UNIX, DOS, OS/2 or
377
Windows, you will may have some problems with differences in the
380
There are a number of different EBCDIC code pages, like there are a
381
number of different ASCII code pages. For example, there is a US
382
EBCDIC, a German EBCDIC, and a Swedish EBCDIC. As long as you are
383
working with other people who use the same EBCDIC code page, you
384
will have no trouble. If you work with people who use ASCII, or who
385
use a different EBCDIC code page, you may need to do some
388
UNZIP translates ASCII text files to and from Open Systems EBCDIC
389
(IBM-1047), which may not be the EBCDIC that you are using. For
390
example, US EBCDIC (IBM-037) uses different character codes for
391
square brackets. In such cases, you can use the ICONV utility
392
(supplied with IBM C) to translate between your EBCDIC character set
395
If your installation does not use IBM-1047 EBCDIC, messages from
396
UNZIP may look a little odd. For example, in a US EBCDIC
397
installation, an opening square bracket will become an i-acute and a
398
closing square bracket will become a u-grave.
400
The supplied ZIP and UNZIP EXECs attempt to correct this by setting
401
CMS INPUT and OUTPUT translations to adjust the display of left and
402
right brackets. You may need to change this if brackets don't
403
display correctly on your system.
406
7. You can unzip using VM/CMS PIPELINES so unzip can be used as
407
a pipeline filter. Example:
408
'PIPE COMMAND UNZIP -p test.zip george.test | Count Lines | Cons'
413
Please report all bugs and problems to:
414
Zip-Bugs@lists.wku.edu
417
-----------------------------------------------------------------------
418
Original CMS/MVS port by George Petrov.
419
e-mail: c888090@nlevdpsb.snads.philips.nl
426
-----------------------------------------------------------------------
427
Additional fixes and README re-write (4/98) by Greg Hartwig.
428
e-mail: ghartwig@ix.netcom.com
429
ghartwig@vnet.ibm.com
431
-----------------------------------------------------------------------
432
Additional notes from Ian E. Gorman.
433
e-mail: ian@iosphere.net