#############################################################################
#                                                                           #
#                                Info-ZIP Note                              #
#                                =============                              #
#                                                                           #
#  This file, first created in September 1999, has now been expanded into   #
#  two parts:                                                               #
#                                                                           #
#    (1) notes about the differences between the three known NetWare ports  #
#        of Info-ZIP's UnZip [new]                                          #
#    (2) notes about the most recent port, version 5.40, which is also now  #
#        bundled with NetWare 5.1                                           #
#                                                                           #
#  Both sets of notes were written by Vance Baarda of Novell, who also was  #
#  responsible for the 5.40 port.                                           #
#                                                                           #
#############################################################################


+----------+
|  PART 1  |
+----------+

These are the three NetWare ports of UnZip that I know of:

  5.0:    ftp://ftp.info-zip.org/pub/infozip/NOVELL/beta/unzip.nlm
          (September 1993)
  5.12e:  ftp://ftp.rz.fh-hannover.de/pandora/util/nlm/zipnlm.exe
          (May 1995)
  5.40:   ftp://ftp.info-zip.org/pub/infozip/NOVELL/unz540xNLM.zip
          (September 1999)

I imagine the folks at Info-ZIP can answer any questions you have
regarding generic differences among 5.0 and 5.12e and 5.40.

  [Info-ZIP note:  see the appropriate History.* files within
   ftp://ftp.info-zip.org/pub/infozip/doc/UnzpHist.zip, and note
   that the embedded version info in zipnlm.exe's unzip.nlm
   identifies it as being based on the stock version 5.12, not
   the older beta version 5.12e.  We do not know who did this
   port or whether source code is available, but it is now also
   available in ftp://ftp.info-zip.org/pub/infozip/NOVELL/beta2/ ]

As far as the NetWare ports, the main differences I know of are as follows:

  5.0:    auto-destroys screen with -S option,
          does not extract files with long names

  5.12e:  auto-destroys screen with -$ option,
          does not extract files with long names

  5.40:   does not auto-destroy screen (but see below),
          extracts and creates files with long names,
          maintains case-sensitivity of file names (like FiLeNaMe),
          supports command-line stdin and stdout redirection (like
            unzip -o sys:/test.zip > sys:/output)

When I ported UnZip 5.40 to NetWare, I decided to handle screen issues
differently from the earlier ports.  Because I wanted to use unzip.nlm
during NetWare installation, I didn't want it to create a screen at all.
But I also wanted it to behave "naturally" when invoked manually at the
console.

The unzip.nlm version 5.40 creates its own non-auto-destruct screen if
and only if the current screen (at the time UnZip is loaded) is the
System Console. The way we handle this at Novell, if we want UnZip not
to create its own screen, is to call it from an install.nlm/nwconfig.nlm
script. (Install.nlm for NetWare 4.x, nwconfig.nlm for NetWare 5.x).
Here's an example of such a script:

  command icmd
  activate
  nlmexec 1, 'unzip -o sys:/test1.zip'
  activate
  nlmexec 1, 'unzip -o sys:/test2.zip'
  activate
  nlmexec 1, 'unzip -o sys:/test3.zip'

This script could be invoked on NW4.x like this:

  load install -b=sys:/script.bat -d=c:\nwserver

This script could be invoked on NW5.x like this:

  nwconfig -b=sys:/script.bat

Notes:

1) Important!! If you use a script like the above, you *must* use the -o
  option of UnZip. If you do not, and UnZip tries to ask the user whether
  to replace an existing file, the server will abend (at least NetWare
  4.11 will). The reason is that no thread is allowed to try to read
  keystrokes from the System Console.

2) You cannot do something like this in an ncf file:

     load unzip -o sys:/test1.zip
     load unzip -o sys:/test2.zip
     load unzip -o sys:/test3.zip

  The reason is that the thread that parses the ncf file does not wait for
  UnZip to unload before executing the next line. It executes all three
  lines immediately, which means that only the first line will work (since
  unzip.nlm is not re-entrant). The nlmexec command, however (when called
  with the block flag set to 1 as in the example above), waits for UnZip
  to unload before executing the next command.

3) Note that on 4.x, the load line is shown as "load install
  -b=sys:/script.bat -d=c:\nwserver" Some versions of install.nlm need to
  know what the NetWare boot directory is, even though the script above
  does not touch the boot directory. Anyway, that's the purpose of the
  "-d=c:\nwserver"

4) You need to call "activate" before every invocation of unzip.nlm.
  That's the only way to guarantee that the active screen at the time
  unzip.nlm loads is not the system console.

Vance Baarda
Senior Software Engineer
1800 South Novell Place
Provo, UT 84606
www.novell.com
[20 September 2000]



+----------+
|  PART 2  |
+----------+

1) I used the Watcom version 11 compiler and the Novell NetWare SDK
  from October 1998.  You can get the latest NetWare SDK (free).  Go to
  http://developer.novell.com/ndk/netware.htm#C/C++ and look for "NLM and
  NetWare Libraries for C (including CLIB and XPlat)"

2) The unzip.nlm runs in the same address space as the NetWare OS.
  In other words, if unzip.nlm crashes, the server will most likely crash.
  Therefore, I recommend you do not load unzip.nlm on a server that your
  company depends on for business until it's been thoroughly tested on a
  test server.

3) I've designed this unzip.nlm port to load on any version of NetWare
  starting with NetWare 3.12.  However, I've tested it only on NetWare 5.0.
  If unzip.nlm does not load or run correctly, try the following in
  this order:

       a) Load clibaux.nlm version 1.21a or later before loading
          unzip.nlm.  The clibaux.nlm is part of the NetWare SDK package
          mentioned above.  It's also part of the 3.x C library package
          mentioned below.

       b) On NetWare 3.x, install the latest 3.x C library modules.
          Go to http://support.novell.com/misc/patlst.htm#nw and look for
          "NetWare 3.12/3.2 CLIB".

       c) On NetWare 4.10, install the latest 4.10 C library modules.
          Go to http://support.novell.com/misc/patlst.htm#nw and look for
          "Updated modular CLIB and DSAPI".

       d) On NetWare 4.11 and 4.2, install the latest support pack.
          Go to http://support.novell.com/misc/patlst.htm#nw and look for
          "NetWare 4 Support Pack".

4) This unzip.nlm assumes that support for the long name space (also
  known as the OS/2 name space) has already been added to the current
  working volume.  If it has not, and the zip archive contains files with
  long names, then the fopen() for such files will just fail.  The code
  does not attempt to rename the file to fit in a DOS-style name.  The same
  problem would occur with long directory names.

5) If unzip.nlm works correctly on NetWare 3.x (which it should,
  but I've not tried it), it will create all files and directories with
  all-uppercase names. The reason is that the NetWare 3.x C library does
  not support creating mixed-case or lowercase file names, even in the long
  (OS/2) name space.

6) To change the current working volume and current working directory
  in which unzip.nlm loads and runs, load unzip.nlm like this:

       load unzip <unzip options> (CLIB_OPT)/P<volume>:<directory>

  For example:

       load unzip archive.zip (CLIB_OPT)/Pvol1:\usr\home

  For more information on CLIB_OPT, go to http://developer.novell.com/search/
  and enter "CLIB_OPT" in the "Novell Developer Kit Search" box.

7) To find out more about clibaux.nlm, go to
  http://developer.novell.com/search/ and enter "clibaux" in the "Novell
  Developer Kit Search" box.


Vance Baarda
NetWare Server Install
Novell, Inc.
[26 September 1999]