summaryrefslogtreecommitdiff
path: root/vms/NOTES.TXT
diff options
context:
space:
mode:
Diffstat (limited to 'vms/NOTES.TXT')
-rw-r--r--vms/NOTES.TXT382
1 files changed, 382 insertions, 0 deletions
diff --git a/vms/NOTES.TXT b/vms/NOTES.TXT
new file mode 100644
index 0000000..4f94ec3
--- /dev/null
+++ b/vms/NOTES.TXT
@@ -0,0 +1,382 @@
+ VMS Notes for Info-ZIP Zip 3.0 and UnZip 6.0
+ ============================================
+
+ This document describes some VMS-specific behavior and implementation
+details of the Info-ZIP Zip and UnZip programs.
+
+ Last modified: 2008-04-10.
+
+
+ Command-line Case
+ -----------------
+
+ Zip and UnZip now include code which can preserve the case of
+command-line parameters and options, which obviates quoting upper-case
+options like "-V" or "-Z". This works on non-VAX systems with a
+sufficiently recent C RTL, and SET PROCESS /PARSE_STYLE = EXTENDED.
+(Sufficiently recent here means __CRTL_VER >= 70301000, which includes
+VMS V7.3-1 with a C Run Time Library ECO, or V7.3-2 or newer.) This
+code uses the decc$feature_set_value() function to enable the
+DECC$ARGV_PARSE_STYLE feature. There is a small range of C RTL versions
+where this function is unavailable, but where manually setting the
+logical name DECC$ARGV_PARSE_STYLE to "ENABLE" will work. HELP CRTL
+leads to some additional information on these features.
+
+
+ File Name Case (ODS5)
+ ---------------------
+
+ In general, Zip 3.0 and UnZip 6.0 should handle file name case (and
+extended file names) in reasonable ways on ODS5 disks.
+
+ Zip offers a variety of "-C" (/PRESERVE_CASE) options to control how
+case is handled when adding files to an archive. The default settings
+("-C2-", /PRESERVE_CASE = NOODS2, down-case ODS2 file names; "-C5",
+/PRESERVE_CASE = ODS5, preserve case of ODS5 file names) should be
+consistent with previous Zip versions for files on ODS2 disks, and
+reasonable for files on ODS5 disks.
+
+ UnZip should preserve case when it extracts to an ODS5 destination
+disk (unless "-2" (/ODS2) is specified). (Note that previous UnZip
+versions, including version 5.52, did not properly preserve case for
+directories, which were always up-cased.)
+
+ The Zip and UnZip builders should work properly on ODS2 and ODS5
+disks, with old (pre-ODS5) and new (case-conscious) versions of MMS (or
+MMK). All testing was done with SET PROCESS /CASE_LOOKUP = BLIND.
+Various problems may be expected with /CASE_LOOKUP = SENSITIVE.
+
+ For consistency, the builders should always create product files
+(.OBJ, .EXE, .HLB, and so on) with upper-case names, whether the build
+is done on an ODS2 or ODS5 disk. Note, however, that in a world with
+both ODS2 and ODS5 disks, and old and new Zip and UnZip versions, it's
+possible to encounter lower-case product file names. For example, a VMS
+binary kit could be created on an ODS2 disk, and a Zip archive created
+from that (using Zip 2.x, or Zip 3.x with default settings). Such a Zip
+archive would contain down-cased names for those product files, and
+those lower-case names would then normally be preserved when UnZip was
+used to extract that archive onto an ODS5 destination. Normally, things
+will work regardless of such case changes, but there may be some
+untested combinations of unexpected name cases and quirky MMS (or MMK)
+behavior, where something goes wrong. Complaints are always welcome,
+but it may not be possible to get everything to work as expected with
+every version of VMS, MMS (or MMK), Zip, and UnZip, on every file
+system.
+
+ It might help matters if _all_ VMS binary kits were produced on ODS5
+disks, and packaged using (case-preserving) Zip version 3.x, but this
+would certainly be different from the way things have been done before,
+and maintaining control over this process is essentially impossible.
+
+
+ Symbolic Links (ODS5)
+ ---------------------
+
+ VMS V8.3 offers support for symbolic links (symlinks) on ODS5 disks.
+In previous Zip and UnZip versions, the generic code for symlinks was
+disabled, and there was no VMS-specific code for symlinks. Now, by
+default, Zip and UnZip attempt to support symlinks wherever the C
+headers and C run-time library include the functions needed for symlink
+support. This means non-VAX systems with __CRTL_VER >= 70301000, so
+this includes VMS V7.3-1 and up, and thus symlink-capable Zip and UnZip
+programs may be built on systems which do not themselves offer symlink
+support. (Various run-time failures may be expected if symlinks are
+encountered on pre-V8.3 systems, either in a file system or in a Zip
+archive.)
+
+ Symlink support can be disabled at build-time, if desired, by
+defining the C macro NO_SYMLINKS. (See comments in the builder
+regarding LOCAL_UNZIP or LOCAL_ZIP, as appropriate.) For example, using
+MMS to build UnZip:
+
+ MMS /DESCRIP = [.VMS] /MACRO = ("LOCAL_UNZIP=NO_SYMLINKS=1")
+
+or, using the command procedure to build Zip:
+
+ LOCAL_ZIP == "NO_SYMLINKS=1"
+ @ [.VMS]BUILD_ZIP.COM
+ DELETE /SYMBOL /GLOBAL LOCAL_ZIP
+
+ The Zip "-v" (/VERBOSE) report should include SYMLINK_SUPPORT in its
+list of "Zip special compilation options" if Zip was built with symlink
+support. Currently, UnZip is less convenient, but searching the UnZip
+executable (or EXTRACT.OBJ) for "symlink" should fail if symlink support
+is missing (or succeed if it's present):
+
+ $ SEARCH /NOOUTPUT UNZIP.EXE SYMLINK ! No symlink support.
+ %SEARCH-I-NOMATCHES, no strings matched
+or:
+ $ SEARCH /NOOUTPUT EXTRACT.OBJ SYMLINK ! Symlink support.
+ $ SHOW SYMBOL $STATUS
+ $STATUS == "%X00000001"
+
+
+ File I/O Performance
+ --------------------
+
+ When compiled using DEC/Compaq/HP C (not GNU C or VAX C), the Zip and
+UnZip file I/O code now includes access callback functions which are
+used to try to set some RMS parameters to non-default values, with the
+intention of improving file I/O speed. This affects reading an archive
+file in UnZip and writing one in Zip. (Reading and writing the
+individual data files are handled in more exotic ways, making these
+parameters less important for them.)
+
+ Currently, the built-in default parameters enable read-ahead and
+write-behind, using a multi-buffer count of 2, and a multi-block count
+of 127 (the maximum). For writing the archive, the default extend
+quantity is 16384 blocks (8MB), with truncation enabled. This
+combination is believed to be, at worst, fairly harmless for most
+situations, and, in most cases, to provide a substantial speed
+improvement, especially with large archives.
+
+ This code allows SET RMS_DEFAULT parameters to override the built-in
+default values. On some old VMS versions, sys$getjpi() can not provide
+the SET RMS_DEFAULT values, and in this situation, the callback function
+will not try to use its improved parameter values. Users on such old
+VMS versions who seek improved I/O speed may wish to bypass this check,
+which requires changing the code in the get_rms_defaults() function in
+[.VMS]VMS.C. The "-vv" (/VERBOSE = MORE) option on both programs
+enables diagnostic messages which show the operation of the callback
+function. A message showing a failure status from sys$getjpi()
+indicates this problem.
+
+ Sample results (UnZip shown, Zip similar):
+
+ VMS VAX V5.4, VAX C. Callback code disabled, no messages:
+ WIMP $ unzip -tvv TESTMAKE.ZIP
+ Archive: SYS$SYSDEVICE:[UTILITY.SOURCE.ZIP.UNZIP60C]TESTMAKE.ZIP;1
+ [...]
+
+ VMS VAX V5.5-2, DEC C. SYS$GETJPI() fails (%SYSTEM-F-BADPARAM):
+ WEAK $ unzip -tvv TESTMAKE.ZIP
+ Get RMS defaults. getjpi sts = %x00000014.
+ Archive: DUA1:[UTILITY.SOURCE.ZIP.UNZIP60C]TESTMAKE.ZIP;1
+ [...]
+
+ VMS VAX V7.3, DEC/Compaq C. Callback code works:
+ WUSS $ unzip -tvv TESTMAKE.ZIP
+ Get RMS defaults. getjpi sts = %x00000001.
+ Default: deq = 0, mbc = 0, mbf = 0.
+ Open callback. ID = 1, deq = 16384, mbc = 127, mbf = 2.
+ Archive: ALP$DKA0:[UTILITY.SOURCE.ZIP.UNZIP60C]TESTMAKE.ZIP;1
+ [...]
+
+ VMSV5.5-2 is too old. V7.3 is new enough. Anyone with more precise
+information is invited to contribute it.
+
+ Users who find other parameter sets more beneficial, or who find
+particular problems with this set are welcome to comment.
+
+ In this version, as in previous versions, when UnZip expands a -V
+archive, it allocates the entire extent of a data file before writing
+any of its data. In some previous versions, this could cause the
+destination disk to be locked for a considerable time (minutes), if
+highwater marking was enabled on that disk. Now, the FAB SQO
+("sequential access only") flag (or equivalent) is set, which prevents
+this troublesome disk locking.
+
+ In some previous versions, when UnZip expanded a non-V archive, it
+did no pre-allocation, and used the default extension quantity. This
+could slow file creation significantly for large files. Now, space for
+extracted files is pre-allocated, and the same SQO ("sequential access
+only") flag is set, as with a -V archive.
+
+
+ Changes to the "-V" (/VMS) Option
+ ---------------------------------
+
+ The intent of the "-V" (/VMS) option was to store VMS file attributes
+in a Zip archive, allowing UnZip to extract an exact copy of a file on a
+VMS system, including all its VMS attributes.
+
+ In Zip before version 2.31, using the "-V" (/VMS) option created an
+archive which usually contained data from beyond the EOF (End-of-File)
+marker in a data file, but generally not all the disk blocks allocated
+for the file. When extracted on a VMS system, the result was usually
+acceptable (because the data from beyond the EOF marker were usually
+ignored). However, when extracted on a non-VMS system, the resulting
+file was usually corrupted by being NUL-padded to the next larger 16KB
+multiple in size.
+
+ Now (Zip 2.31 and later), with "-V" (/VMS), Zip truncates a data file
+at EOF, and portable-format files (Stream_LF, fixed-512) should be
+extracted properly on a non-VMS system. On a VMS system, well-formed
+files (that is, those with no valid data beyond EOF) should also be
+restored correctly.
+
+ With the new "-VV" (/VMS = ALL) option, the archive includes all
+allocated blocks for the file (including those beyond EOF). When
+extracted on a VMS system, the original file should be reproduced with
+as much fidelity as possible, but on a non-VMS system, most files will
+be seen as corrupt because of the data from beyond EOF.
+
+
+ Changes to Program Exit Status Values
+ -------------------------------------
+
+ Zip and UnZip exit with 32-bit VMS status values which are formed
+from their internal OS-independent status values. In previous program
+versions, this was done by converting the internal success code (0) into
+%x00000001 (SS$_NORMAL), and converting the other internal warning and
+error codes using an artificial control/facility code, 0x7FFF (which
+includes some reserved bits), and a severity value which was determined
+according to rules specified in the VMS-specific exit function.
+Curiously, the internal status codes were left-shifted by 4 bits instead
+of 3, so all the resulting VMS message codes (bits 13:3) were even.
+
+ Zip and UnZip now have facility names and codes assigned by HP
+(UnZip: IZ_UNZIP, 1954; Zip: IZ_ZIP, 1955). Now, by default, the
+programs exit with standard 32-bit VMS status values which differ from
+the old ones in several ways: The official facility code is used, and
+the facility-specific bit is set. (For compatibility with older
+versions, the internal status codes are still left-shifted by 4 bits.
+This also makes it easier to extract the internal status code from a
+hexadecimal representation of the VMS status code.) The builders also
+create non-executable message files (UNZIP_MSG.EXE and ZIP_MSG.EXE) so
+that, after a suitable SET MESSAGE command, the program messages will be
+available from DCL. For example:
+
+ $ SET MESSAGE dev:[dir]ZIP_MSG.EXE
+ $ ZIP FRED.ZIP no_such_file
+ zip warning: name not matched: no_such_file
+
+ zip error: Nothing to do!
+ (dev:[dir]FRED.ZIP;)
+
+ ALP $ WRITE SYS$OUTPUT F$MESSAGE( $STATUS)
+ %IZ_ZIP-W-NONE, Nothing to do
+
+The message files may be copied into SYS$MESSAGE to make them generally
+available, although this could cause some confusion if multiple versions
+of the programs are used on the system, and their error message source
+files differ. Each different destination directory will get its own
+UNZIP_MSG.EXE or ZIP_MSG.EXE ([.ALPHA], [.ALPHAL], [.VAX], and so on),
+but all of the same-architecture files are equivalent to each other.
+That is, on an Alpha system, any of the [.ALPHA*]ZIP_MSG.EXE files could
+be used; on an IA64 system, any of the [.IA64*]ZIP_MSG.EXE files could
+be used; and on a VAX system, any of the [.VAX*]ZIP_MSG.EXE files could
+be used. (Similar for UNZIP_MSG.EXE, of course.)
+
+ If desired, the programs may be built to use the old exit status values
+by defining a C macro with the old facility value:
+"CTL_FAC_IZ_UNZIP=0x7FFF" (UnZip) or "CTL_FAC_IZ_ZIP=0x7FFF" (Zip).
+(See comments in the builder regarding LOCAL_UNZIP or LOCAL_ZIP, as
+appropriate.) This will maintain compatibility with older program
+versions, but will make the programs incompatible with the new error
+message files.
+
+
+ VMS File Attribute Schemes
+ --------------------------
+
+ Zip's "-V" (/VMS) option causes VMS file attributes to be stored in
+an archive. Since Zip version 2.2 (released in 1996), Zip has, by
+default, stored VMS file attributes using a scheme ("PK") which is
+compatible with the one used by PKWARE in their PKZIP product. Before
+that, a different scheme ("IM") was used. UnZip versions before 5.2
+support only the older IM scheme, but since UnZip version 5.2, both
+schemes have been supported by UnZip.
+
+ The IM scheme has not been well tested recently, but it is still
+available. Some problems were seen when the IM scheme was used with
+symbolic links on VMS V8.3. Details on how build Zip to use the IM
+scheme instead of the PK scheme are included in comments in the main
+builder files. Look for VMS_IM_EXTRA in [.VMS]BUILD_ZIP.COM or IM in
+[.VMS]DESCRIP.MMS.
+
+ The "special compilation options" section of a "zip -v" ("zip
+/verbose") report should show either VMS_PK_EXTRA or VMS_IM_EXTRA,
+according to how Zip was built.
+
+
+ UTC Date-Times
+ --------------
+
+ Zip archives traditionally include local (MS-DOS compatible)
+date-time information for files. Since Zip version 2.1, it has also
+been possible to store UTC date-time information in the archive, and
+since UnZip version 5.2, UnZip has been able to use this UTC date-time
+information when extracting files.
+
+ On VMS, support in the C run-time environment for UTC became
+available with VMS V7.0. UTC support in Zip and UnZip is automatically
+enabled at compile time, if it is available on the system where the code
+is compiled (__CRTL_VER >= 70000000). It may be disabled at compile
+time by defining the C macro NO_EF_UT_TIME. Details on how build Zip
+and UnZip with additional C macros defined are included in comments in
+the main builder files. Look for LOCAL_[UN]ZIP in
+[.VMS]BUILD_[UN]ZIP.COM or in [.VMS]DESCRIP.MMS. For example, using MMS
+to build UnZip:
+
+ MMS /DESCRIP = [.VMS] /MACRO = ("LOCAL_UNZIP=NO_EF_UT_TIME=1")
+
+or, using the command procedure to build Zip:
+
+ LOCAL_ZIP == "NO_EF_UT_TIME=1"
+ @ [.VMS]BUILD_ZIP.COM
+ DELETE /SYMBOL /GLOBAL LOCAL_ZIP
+
+ The "special compilation options" section of a "zip -v" ("zip
+/verbose") or "unzip -v" ("unzip /verbose") report should show
+USE_EF_UT_TIME if the program was built with UTC support.
+
+
+ Building with the LIST option using MMK or MMS
+ ----------------------------------------------
+
+ Currently, building with MMK or MMS using the LIST option (as in
+"/MACRO = LIST=1") may cause a failure for some old versions of the DEC
+C compiler. The LIST option currently adds "/show = (all, nomessages)"
+to the CC command line, and some old DEC C compilers do not support the
+"nomessages" keyword. When VAX C is used, this keyword is omitted, but
+the builder does not distinguish between the various DEC/Compaq/HP C
+versions. The work-arounds are to use BUILD_[UN]ZIP.COM, or edit
+[.VMS]DESCRIP_SRC.MMS to remove the troublesome keyword.
+
+
+ GNU C
+ -----
+
+ Zip and UnZip have been built using GNU C (VAX) version 2.3, mostly
+for fun, but serious users are encouraged to report any interest in
+continuing this activity. The GNU C 2.3 header files were missing some
+things, including definitions of SEEK_CUR, SEEK_END, and SEEK_SET. The
+VMS-specific code now expects to find unixio.h and unixlib.h, which were
+absent from the GNU C 2.3 distribution.
+
+ To work around these difficulties, the Zip and UnZip kits include
+some emergency replacement unixio.h and unixlib.h files which appear to
+work for these programs, at least. To install them, use commands like
+the following:
+
+ COPY [.VMS]UNIXIO_GCC.H GNU_CC_INCLUDE:[000000]UNIXIO.H
+ COPY [.VMS]UNIXLIB_GCC.H GNU_CC_INCLUDE:[000000]UNIXLIB.H
+ SET PROTECTION W:RE GNU_CC_INCLUDE:[000000]UNIXIO.H, UNIXLIB.H
+
+ There may be an error in the GNU C header file ATRDEF.H which can
+cause Zip to fail, when making a "-V" archive, with a spurious "could
+not open for reading" error message, followed by more bad behavior. It
+probably also causes trouble of some kind in UnZip. To check the
+questionable macro definition, use a command like the following:
+
+ SEARCH GNU_CC_INCLUDE:[000000]ATRDEF.H ATR$S_JOURNAL
+
+This should show something equivalent to this:
+
+ #define ATR$S_JOURNAL 0x001
+
+If you see "0x002" (or equivalent) instead of "0x001" (or equivalent),
+then this value must be corrected in the file before building Zip or
+UnZip.
+
+ You may also see several warnings from the compiler caused by other
+defects in the GNU C header files, such as:
+
+<various>: warning: passing arg 4 of `qsort' from incompatible pointer type
+
+[...]rab.h:134: warning: unnamed struct/union that defines no instances
+[...]rab.h:143: warning: unnamed struct/union that defines no instances
+
+These warnings appear to be harmless.
+