mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-12 17:27:56 +00:00
85 lines
3.7 KiB
Text
85 lines
3.7 KiB
Text
|
|
OS/390 is IBM's follow-on to MVS and includes a POSIX, XOPEN,
|
|
XPG4, build environment, a Unix-style filesystem (called HFS), and
|
|
a POSIX (Born) shell. This port uses this environment and is a fairly
|
|
straight-forward port of ZIP's Unix port - but uses the existing EBCDIC
|
|
code. This port does not work with non-HFS (traditional MVS)
|
|
filesystems.
|
|
|
|
I believe all my changes are isolated with #ifdef's.
|
|
|
|
Here's some text which might be useful for an OS390 README or
|
|
the manual.
|
|
|
|
ZIP for OS390 HFS datasets
|
|
--------------------------
|
|
Allows you to create ZIP archives from the OS/390 OpenEdition
|
|
command prompt. This port uses standard Unix-style I/O routines
|
|
and only works with HFS files.
|
|
|
|
Usage
|
|
-----
|
|
By default, ZIP does not perform character-set translation, but has
|
|
options to make it easy to convert text files to be compatible with
|
|
other systems
|
|
zip zipfile list # add the files in 'list' to archive 'zipfile'
|
|
zip -a zipfile list # same as above, but translate files to ASCII
|
|
zip -al zipfile list # same as above, translate linefeeds to DOS style
|
|
zip -all zipfile list # same as '-a', translate linefeeds to UNIX style
|
|
|
|
Build process
|
|
-------------
|
|
Assuming GNU make is available in your path and is called "gmake" (See
|
|
the notes on Makefile changes below) and a C compiler is available as
|
|
"cc", then type
|
|
gmake -f unix/Makefile MAKE=gmake os390
|
|
|
|
If GNU make is not available, the existing makefile can create zip, but will
|
|
error on the other executable (zipsplit, zipcloak, zipnote) if you type
|
|
make -f unix/Makefile os390
|
|
|
|
Overview of Changes
|
|
-------------------
|
|
The OS/390 port is treated as a variant of the Unix port. EBCDIC support
|
|
was already implemented for CMS/MVS-batch ports. The specific changes I
|
|
made are summarized below.
|
|
|
|
unix/Makefile - zip uses a unusual _.o target which IBM's make can't handle.
|
|
Since the Makefile has a macro called MAKE that is used for a recursive
|
|
call to make, I changed the MACRO to call "gmake" - GNU's make - which
|
|
can handle the _.o target. If you don't have GNU make, you can
|
|
workaround by manually applying symlinks from whatever.c to whatever_.c.
|
|
Alternatively, the whatever_.o files could be explicitely added for os390.
|
|
|
|
I added an os390 target with appropriate defines.
|
|
|
|
zipup.c - added code (#ifdef OS390) to convert test to ASCII if -a flag
|
|
was set.
|
|
|
|
zip.c - changed logic which always used DOS-style newlines when -a was
|
|
set to be consistent with other port (DOS newlines if -l option)
|
|
|
|
zipfile.c - miscellaneous changes to force storing file names and
|
|
descriptions in ASCII in the zip directory. This makes zip files
|
|
portable across all platforms. This in turn meant names did not
|
|
need to be translated when displaying messages.
|
|
|
|
zip.h - strtoasc was missing a closing parenthesis.
|
|
|
|
ebcdic.h - changed translation table to be consistent with current IBM
|
|
recommendations - exact same changes to ebcdic.h as in my unzip port.
|
|
|
|
tailor.h - define huge/far/near to be empty
|
|
|
|
unix/unix.c - substantial changes to deal with mode flags. Under
|
|
the current XOPEN standards, some of the traditional unix file mode
|
|
bits need not be in fixed locations, but standard access macros must be
|
|
available to access the values. The old unix.c code just picked up these
|
|
values and saved them as-is where unzip interpreted them. Existing
|
|
Unix system provided the macros for XOPEN compliance, but left the flags
|
|
in their traditional locations. OS/390 has a brand new filesystem which
|
|
is XOPEN compliant without revealing the positions of these flags.
|
|
To create the bitmask in the same format unzip expects, the macros are
|
|
tested one-by-one to set the appropriate bits. This same logic should
|
|
work on any XOPEN system, but takes more instructions (I did test this
|
|
logic on Linux).
|