which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5403 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			600 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			600 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
Info-ZIP Programs
 | 
						|
=================
 | 
						|
 | 
						|
Zip		
 | 
						|
UnZip		
 | 
						|
UnZipSFX	
 | 
						|
fUnZip		
 | 
						|
 | 
						|
Introduction
 | 
						|
------------
 | 
						|
 | 
						|
This archive is a result of frustrations with contemporary (August 95)
 | 
						|
versions of zip and unzip. While they use the same compression
 | 
						|
algorithms as the Info-ZIP programs, there the compatibility ends. If
 | 
						|
you just use zip/unzip only on SMS/QDOS, then perhaps this is not a
 | 
						|
problem (but I know for some users it still is); if you use zip/unzip
 | 
						|
to transport source code and data between diverse systems, then the
 | 
						|
disregard for Info-ZIP standards is inconvenient, particularly the
 | 
						|
fact that directories are not supported and files are always stored
 | 
						|
underscored.
 | 
						|
 | 
						|
This release of zip/unzip offers:
 | 
						|
 | 
						|
    o	zip file/directory compatibility with all other supported
 | 
						|
        platforms
 | 
						|
 | 
						|
    o   SMS/QDOS compatibility and back-compatible with earlier
 | 
						|
        versions.
 | 
						|
 | 
						|
    o   Improved performance (zip is typically 50% faster)
 | 
						|
 | 
						|
    o	Command line compatibility with Info-ZIP
 | 
						|
 | 
						|
    o	Self-extracting archives (but not very elegantly)
 | 
						|
 | 
						|
    o   Archives are marked as 'created by SMS/QDOS'.
 | 
						|
 | 
						|
    o	Optional recursion into directories
 | 
						|
 | 
						|
    o	Directory structure restored on unzip of Info-ZIP/PKZIP
 | 
						|
	compatible archives.
 | 
						|
 | 
						|
    o	Config'urable for listing and unpack formats (Info-ZIP (.) or
 | 
						|
        SMS/QDOS (_) and 'Press any key' timeouts. Override options
 | 
						|
	from command line.
 | 
						|
 | 
						|
Info-ZIP Standards
 | 
						|
------------------
 | 
						|
 | 
						|
This (rather long-winded and waffling) section discusses the
 | 
						|
conventions and standards used by Info-ZIP compatible archivers and how
 | 
						|
"Info-ZIP for SMS/QDOS" achieves compatibility.
 | 
						|
 | 
						|
Info-ZIP/Unzip on all supported platforms (Unix, DOS, OS/2, NT,
 | 
						|
VAX/VMS, Amiga etc etc), works in a specific way. (Until now SMS/QDOS
 | 
						|
was neither 'supported' nor Info-ZIP compliant).
 | 
						|
 | 
						|
    a. The zipfile directory is in (/.) (unix) format.
 | 
						|
 | 
						|
    b. When zips are listed, it is in 'zip-file' (unix) format.
 | 
						|
 | 
						|
    c. When files are added, they are defined in native format.
 | 
						|
 | 
						|
    d. When files are added, this is shown in 'zip-file' format.
 | 
						|
 | 
						|
    e. When files are unpacked, this is done to native format, but
 | 
						|
       selection is done in 'zip-file' format.
 | 
						|
 | 
						|
Basically, the listing and stored format of a file is that of the
 | 
						|
destination.
 | 
						|
 | 
						|
So, given a file structure at some arbitrary 'root' level.
 | 
						|
 | 
						|
    Makefile
 | 
						|
    src (Dir)
 | 
						|
	afile.c
 | 
						|
	bfile.c
 | 
						|
	docs (Dir)
 | 
						|
	     prog.txt
 | 
						|
    hdr (Dir)
 | 
						|
	cfile.h
 | 
						|
	dfile.h
 | 
						|
 | 
						|
Then these would be in Unix (and Amiga) as
 | 
						|
 | 
						|
     Makefile
 | 
						|
     src/afile.c
 | 
						|
     src/bfile.c
 | 
						|
     src/docs/prog.txt
 | 
						|
     hdr/cfile.h
 | 
						|
     hdr/dfile.h
 | 
						|
 | 
						|
This is also how the ZIP file directory appears.
 | 
						|
 | 
						|
And in DOS/OS2/NT
 | 
						|
 | 
						|
    Makefile
 | 
						|
    src\afile.c
 | 
						|
    src\docs\prog.txt
 | 
						|
    hdr\cfile.h		.. etc
 | 
						|
 | 
						|
And in VMS	(we SHOUT in VMS and have a silly file system)
 | 
						|
		
 | 
						|
    MAKEFILE
 | 
						|
    [SRC]AFILE.C
 | 
						|
    [SRC.DOC]PROG.TXT
 | 
						|
    [HDR]CFILE.H	.. etc
 | 
						|
			(OK VMS purist, [.SRC] etc. Only an example)
 | 
						|
			
 | 
						|
And in SMS/QDOS (quiet again, but slightly ludicrous !)
 | 
						|
 | 
						|
    Makefile
 | 
						|
    src_afile_c
 | 
						|
    src_doc_prog_txt
 | 
						|
    hdr_cfile_h		.. etc
 | 
						|
 | 
						|
The main problem regarding SMS/QDOS is not that of extensions - (after
 | 
						|
all, only VMS and DOS _really_ have extensions; Unix, AmigaDOS, NT and
 | 
						|
OS/2 (and Win95) allow multiple '.' in.long.file.names.
 | 
						|
 | 
						|
The SMS/QDOS problem is that '_' is both a legal file name character
 | 
						|
and a directory separator. This creates the difficulties, as
 | 
						|
directories and files are somewhat different objects.
 | 
						|
 | 
						|
It is the intention that these versions of SMS/QDOS zip/unzip will
 | 
						|
follow the Info-ZIP rules, thus providing compatibility with the other
 | 
						|
platforms. It is possible to ZIP the file structure described above on
 | 
						|
SMS/QDOS and unpack it on VMS and get the VMS structure as shown in the
 | 
						|
example (and vice-versa). [We only choose the most obtuse file
 | 
						|
systems for the examples].
 | 
						|
 | 
						|
In order to achieve this, SMS/QDOS names are mapped into Unix style
 | 
						|
ones when the ZIP is created and un-mapped when it is unpacked. There
 | 
						|
is a option to unpack in 'zip-file' format (i.e. with '.' rather than
 | 
						|
'_'), but there will be no option to pack to all '_'. That would
 | 
						|
contravene the standard.However a file.
 | 
						|
 | 
						|
	src_split_name_c	(which is src->split_name_c !)
 | 
						|
				          src/split_name.c)
 | 
						|
 | 
						|
where src is a hard directory, would be stored in the zip directory as
 | 
						|
 | 
						|
      src/split_name.c
 | 
						|
 | 
						|
It does handle '_' with a little intelligence.
 | 
						|
 | 
						|
The default unzip option will be to translate '.' to '_'; this is
 | 
						|
because there are still many QDOS/Minerva users that cannot handle '.'
 | 
						|
without quotes, which is immensely inconvenient. For many SMS users
 | 
						|
'_' is also the most natural and convenient option. It also means that
 | 
						|
SMS/QDOS <-> SMS/QDOS zip - unzip sequences are transparent.
 | 
						|
 | 
						|
There will however be two ways around this in unzip.
 | 
						|
 | 
						|
      1. It is possible to Config the unzip default to be '.'
 | 
						|
         translations (or not).
 | 
						|
 | 
						|
      2.  The Unzip -Q1 option will toggle the default (Config'ed)
 | 
						|
          state.
 | 
						|
 | 
						|
Examples:
 | 
						|
 | 
						|
Given that we want/have
 | 
						|
 | 
						|
     Makefile			(Makefile)
 | 
						|
     src/afile.c		(src_afile_c)
 | 
						|
     src/bfile.c		(src_bfile_c)
 | 
						|
     src/docs/prog.txt		(src_docs_prog_txt)
 | 
						|
     hdr/cfile.h		(hdr_cfile_h)
 | 
						|
     hdr/dfile.h		(hdr_dfile_h)
 | 
						|
 | 
						|
Then on SMS/QDOS we might have added the *.c files as
 | 
						|
 | 
						|
     ex zip;'-r test *_c'
 | 
						|
 | 
						|
(or VMS, just to do something different)
 | 
						|
 | 
						|
    zip -r test [.src]*.c
 | 
						|
 | 
						|
In both cases the file lists as above (left).
 | 
						|
 | 
						|
To unpack on SMS/QDOS (just the _c/.c files)
 | 
						|
 | 
						|
   ex unzip;'test src/*.c'
 | 
						|
 | 
						|
   (and VMS, unzip test src/*.c)
 | 
						|
 | 
						|
i.e. in both cases using the 'zip-file' format. As a concession to
 | 
						|
SMS/QDOS, you could also have:
 | 
						|
 | 
						|
   ex unzip;'test src_*_c'
 | 
						|
 | 
						|
	but not unzip test [.src]*.c on VMS !!!!! Sorry dinosaurs.
 | 
						|
 | 
						|
Both SMS/QDOS commands unpack to
 | 
						|
 | 
						|
     src_afile_c etc, where src_ is a hard sub-directory.
 | 
						|
 | 
						|
(and the VMS example would unpack to [.src]afile.c, (or to src\afile.c on
 | 
						|
DOS/NT/OS2 etc).
 | 
						|
 | 
						|
Options & SMS/QDOS Features
 | 
						|
---------------------------
 | 
						|
 | 
						|
The options supported by zip/unzip are basically those documented in
 | 
						|
the Info-ZIP documents and shown in on-line 'usage'. In particular, -r,
 | 
						|
and -j work as God intended.
 | 
						|
 | 
						|
PLEASE NOTE: Previous SMS/QDOS zip/unzips have NOT followed these
 | 
						|
conventions, for example -r was not implemented and -j was reversed.
 | 
						|
 | 
						|
A number of -Q (SMS/QDOS specific) options (not yet in the current
 | 
						|
documents or usage screens) are implemented.
 | 
						|
 | 
						|
The Zip 2.0.1 (and later) default is to add SMS/QDOS headers where
 | 
						|
file type = 1 (exe) or 2 (rel) or (type > 0 && != 255 and (filesize %
 | 
						|
64) != 0). Directories are included anyway, unless you zip -D.
 | 
						|
 | 
						|
Where a header is added for an 'exe' file a '*' is displayed after the
 | 
						|
name in the zip display  (and '#' for 'rel' files).
 | 
						|
 | 
						|
The -Q options for ZIP are:
 | 
						|
 | 
						|
    -Q1	 Don't add headers for ANY files
 | 
						|
    -Q2  Add headers for all files
 | 
						|
    -Q4  Don't wait for interactive key press
 | 
						|
 | 
						|
    (additive, so -Q5 => no headers, no wait, -Q6 all headers,
 | 
						|
     no wait etc)
 | 
						|
 | 
						|
    (the default is exec/rel headers, 5 sec wait)
 | 
						|
 | 
						|
zip has rationalised the file header storage in ZIP files. The
 | 
						|
previous zip used to store a QDOS header for each file. This was very
 | 
						|
wasteful, for example compressing a SMS/QDOS release of PGP in this
 | 
						|
way came to 730Kb, too large for a DD disk. Changing the zip program
 | 
						|
just to add a header record for the single PGP exe and the zip file
 | 
						|
size went down to around 690Kb.
 | 
						|
 | 
						|
And for unzip
 | 
						|
 | 
						|
    -Q1 Toggle unpack format status ('.' <-> '_')
 | 
						|
    -Q2 Toggle listing format
 | 
						|
    -Q4 Don't wait for key press
 | 
						|
 | 
						|
Files Types
 | 
						|
-----------
 | 
						|
 | 
						|
The history of QDOS suffers from incompatible feature
 | 
						|
implementations. For example, Thor directories have file type 3, CST
 | 
						|
have type 4 and Level 2 have type 255. Some software writers (both
 | 
						|
amateur and otherwise) have used type 3 or 4 for other purposes
 | 
						|
(backward compatibility ?? who cares ??).
 | 
						|
 | 
						|
In order to bypass problems cause by incompatible (inconsiderate ?)
 | 
						|
usage of file types, the file type denoting a directory is a
 | 
						|
Config'urable item. The default is set to -1 (65535 in Config terms),
 | 
						|
which means "determine directory type from the file header of the root
 | 
						|
directory". If this is appears unsuccessful on your system, the value
 | 
						|
can be Config'ed in the range 3-255.
 | 
						|
 | 
						|
ZIP assumes a file is a directory if:
 | 
						|
 | 
						|
	((type == CONFIGed_type) && (file_size % 64) == 0)
 | 
						|
 | 
						|
If you are unfortunate enough have files of that pass this test but
 | 
						|
are not directories, then ZIP will loop endless, as SMS/QDOS opens the
 | 
						|
root directory again !!! (recursion: see recursion etc).
 | 
						|
 | 
						|
I suggest you refrain from ZIPping such files and contact the software
 | 
						|
supplier and point out the error of their ways.
 | 
						|
 | 
						|
File Naming Issues
 | 
						|
------------------
 | 
						|
 | 
						|
ZIP will append a '_zip' suffix to the archive filename when the
 | 
						|
supplied name (i.e. excluding device/directory parts) does not
 | 
						|
contain a '_' or a '.'. This is broadly compatible with Info-ZIP,
 | 
						|
taking into account the '_' aberation.
 | 
						|
 | 
						|
So
 | 
						|
	ex zip;'ram2_test ...'		>> ram2_test_zip
 | 
						|
 | 
						|
	ex zip;'ram2_test.zip ...'	>> ram2_test.zip
 | 
						|
 | 
						|
	ex zip;'ram2_test_rep ... '	>> ram2_test_rep
 | 
						|
 | 
						|
	ex zip;'ram2_fdbbs.rep ... '	>> ram2_fdbbs.rep
 | 
						|
 | 
						|
	ex zip;'ram2_test_rep.zip ...'  >> ram2_test_rep.zip
 | 
						|
 | 
						|
This implies that if a file ram2_test.zip exists, and you do:
 | 
						|
 | 
						|
	ex zip;'ram2_test ...'
 | 
						|
 | 
						|
Then a new file (test_zip) is created, rather than 'test.zip' being
 | 
						|
updated.
 | 
						|
 | 
						|
ZIP supports extensive recursive wild-carding, again the fact that '_'
 | 
						|
can be a directory separator as well as part of a file name makes this
 | 
						|
a bit tricky, but given the example.
 | 
						|
 | 
						|
     test1_bas
 | 
						|
     test2_bas
 | 
						|
     dir1->demo1_bas		where -> indicates a sub dir
 | 
						|
     dir2->demo2_bas	
 | 
						|
 | 
						|
     ex zip;'ram2_test *_bas'
 | 
						|
     just finds test1_bas, test2_bas
 | 
						|
 | 
						|
     ex zip;'-r ram2_test *_bas'
 | 
						|
     recurses and finds all the files
 | 
						|
 | 
						|
You might thing that
 | 
						|
 | 
						|
    ex zip;'-r ram2_test *_*_bas'
 | 
						|
 | 
						|
would just find the files in the sub directories, well yes, but it will
 | 
						|
also find very other sub-dir'ed _bas file on the disk too. This is
 | 
						|
a feature.
 | 
						|
 | 
						|
The pattern matching supports Unix style 'regex' so you could:
 | 
						|
 | 
						|
	ex zip;'ram2_test dir?_*_bas'
 | 
						|
	or
 | 
						|
	ex zip;'ram2_test dir[12]_*_bas
 | 
						|
 | 
						|
 | 
						|
unzip has now got a fixed -d option. This is used to specify the
 | 
						|
directory to unpack the zip file into, it must follow immediately
 | 
						|
after the zip name.
 | 
						|
 | 
						|
	ex unzip;'ram2_test_zip -d ram3_ *_txt'
 | 
						|
 | 
						|
would unpack all *_txt files to ram3_ .
 | 
						|
 | 
						|
It is not necessary to set the default directory to pack files, zip
 | 
						|
will remove any device names (and store any hard directory names,
 | 
						|
unless you zip -j).
 | 
						|
 | 
						|
	ex zip;'ram1_test flp1_*'
 | 
						|
 | 
						|
		----->
 | 
						|
			adding: file.dat (deflated 50%)
 | 
						|
			adding: menu.rext # (deflated xx%)
 | 
						|
			adding: zip * (deflated yy%)
 | 
						|
			adding: hard_one (stored 0%)
 | 
						|
			adding: hard_one/stuff.bas (deflated ...)
 | 
						|
 | 
						|
Due to the way the file mapping is implemented, it is not supported
 | 
						|
over the nX_ type network device.
 | 
						|
 | 
						|
Config Options
 | 
						|
--------------
 | 
						|
 | 
						|
A limited number of SMS/QDOS specific functions can be set using the
 | 
						|
QJump Config program.
 | 
						|
 | 
						|
      For zip:
 | 
						|
 | 
						|
      Timeout for interactive 'Press any key' prompt
 | 
						|
 | 
						|
       65535		      Wait forever	(aka -1)
 | 
						|
       0		      No wait
 | 
						|
       n (1-32767)	      Wait for 'n' clocks (1/50 sec)
 | 
						|
 | 
						|
       Other values are unsupported. Note Config works on 'unsigned'
 | 
						|
       integer values (at least according to my manual).
 | 
						|
 | 
						|
       Directory file type key.
 | 
						|
 | 
						|
       Config will accept any value in the range 3-255, known useful
 | 
						|
       values are 3 (Thor), 4 (CST) and 255 (Level 2 devices). A value
 | 
						|
       of 65535 (aka -1) means "determine from device info".
 | 
						|
 | 
						|
       For unzip:
 | 
						|
 | 
						|
       Timeout as above
 | 
						|
 | 
						|
       Unpack mode (SMS/QOS ('_') or Info-ZIP ('.')
 | 
						|
 | 
						|
       List format (Info-ZIP ('.') or SMS/QDOS ('_')
 | 
						|
 | 
						|
 | 
						|
When the 'Press a key' text is displayed, if you press ESC, then it
 | 
						|
waits until you press any other key, infinite timeout. This may be
 | 
						|
useful if you want (much) more time to study a listing etc.
 | 
						|
 | 
						|
Defaults for timeout and directory type are 250 and -1 respectively.
 | 
						|
 | 
						|
More Goodies
 | 
						|
------------
 | 
						|
 | 
						|
Part of the zip compression code is now in assembler; it runs
 | 
						|
noticably faster than the previous version. Compressing some arbitrary
 | 
						|
files with the previous zip it took 251 seconds, with zip 2.0.1 it
 | 
						|
took (a mere) 170 seconds (68008 QL).
 | 
						|
 | 
						|
More good news is that SMS/QDOS is just another system option on top
 | 
						|
of standard Info-ZIP, unlike the previous ports that were much more
 | 
						|
SMS/QDOS specific. For example, compiling the standard source with c68
 | 
						|
(i.e. #define QDOS), then you get an SMS/QDOS version.
 | 
						|
 | 
						|
Compile with Linux/gcc and get the standard Linux version. Now, here's
 | 
						|
the cool bit; compile with Linux/gcc and "-DQL_ZIP", and get a
 | 
						|
standard Linux ZIP with SMS/QDOS (header) extensions.
 | 
						|
 | 
						|
so, on Linux:
 | 
						|
 | 
						|
	    zip -Q stuff.zip qtpi zip unzip
 | 
						|
 | 
						|
the -Q tells zip to look for XTc68/Lux68 cross-compiler data size
 | 
						|
blocks and produce a ZIP file with SMS/QDOS headers in it (for exec
 | 
						|
type programs). This works for exec files produced by the XTc68/Lux68
 | 
						|
cross compilers and ANY SMS/QDOS files copied to a Unix or MS-DOS disk
 | 
						|
from an SMS/QDOS floppy using 'qltools v2.2' (or later).
 | 
						|
 | 
						|
Self Extracting Archives
 | 
						|
------------------------
 | 
						|
 | 
						|
Info-ZIP self-extracting archives (_sfx) are created in a rather
 | 
						|
'brute-force' way. The 'unzipsfx' program is prepended to a zip file.
 | 
						|
 | 
						|
i.e.	      file_sfx = unzipsfx + file_zip
 | 
						|
	      ex file_sfx
 | 
						|
 | 
						|
Although the unzipsfx program is a cut down unzip, it is still around
 | 
						|
30Kb - 50Kb, depending on platform.
 | 
						|
 | 
						|
The success of this approach depends on how the operating system
 | 
						|
loader loads executable files. On most systems where the loader only
 | 
						|
loads the actual program part (Unix, VMS, DOS et al), the this is
 | 
						|
quite efficient; if you make, say, a 4Mb zip file and prepend a 30Kb
 | 
						|
unzipsfx image, then the system only loads the 30Kb program and the
 | 
						|
process is efficient as the zipped data part is still unpacked from
 | 
						|
disk. These systems also supply the running unzipsfx program stub with
 | 
						|
the path name of the file it was loaded from, so the program knows
 | 
						|
what it has to unpack (so on Linux, for example):
 | 
						|
 | 
						|
     cat /usr/bin/unzipsfx test.zip > test.sfx  # concatenate the files
 | 
						|
     chmod 755 test.sfx				# make executable
 | 
						|
     test.sfx					# to extract, it
 | 
						|
						# 'knows' it is "test.sfx"
 | 
						|
 | 
						|
Unfortunately, the more simplistic nature of SMS/QDOS makes this much
 | 
						|
more difficult and rather less efficient as: (see note 1)
 | 
						|
 | 
						|
     a. The SMS/QDOS 'loader' loads the whole file into memory.
 | 
						|
 | 
						|
     b. The SMS/DOS 'loader'/c68 run-time system does not return the
 | 
						|
	name of the file from which it was loaded.
 | 
						|
 | 
						|
     c. You cannot so easily create a image file by concatenating two
 | 
						|
        files, it is also necessary to ensure the executable file
 | 
						|
	header is set correctly.
 | 
						|
 | 
						|
In the case of the 4Mb zip, with the SMS/QDOS 50Kb unzipsfx image
 | 
						|
prepended, then the whole 4.05 Mb is loaded (if possible !!) into
 | 
						|
memory, then the zip data part is still processed from disk !!
 | 
						|
 | 
						|
If anyone is still interested, then the following support for unzipsfx
 | 
						|
is provided.
 | 
						|
 | 
						|
1. A program 'makesfx' will combine the unzipsfx image and a ZIP file
 | 
						|
   to produce a sfx (self-extracting zip) file.
 | 
						|
 | 
						|
2. The unzipsfx program supports a SMS/QDOS specific option to tell
 | 
						|
   itself where the image file was loaded from.
 | 
						|
 | 
						|
The makesfx program concatenates the supplied files to standard
 | 
						|
output.
 | 
						|
 | 
						|
So, to create a sfx of all the _c files in the default directory.
 | 
						|
 | 
						|
    # 1st create a zip file of the required files
 | 
						|
 | 
						|
    ex zip;'ram1_test_zip *_c'
 | 
						|
 | 
						|
    # Now create the sfx file (ram2_test_sfx)
 | 
						|
    # our unzipsfx images is in 'win1_bin'
 | 
						|
    # the '>' is the standard Unix/'C' convention for redirection
 | 
						|
    # of standard output.
 | 
						|
 | 
						|
    ex makesfx;'>ram2_test_sfx win1_bin_unzipsfx ram1_test_zip'
 | 
						|
 | 
						|
You can now unpack the _sfx file on any SMS/QDOS compatible
 | 
						|
system. The files in the archive are unpacked to the current
 | 
						|
directory. It is necessary to tell the sfx where it came from (sfx
 | 
						|
files are _very_ philosophical); but it knows where it's going to.
 | 
						|
 | 
						|
      data_use win1_stuff
 | 
						|
      ex ram2_test_sfx;'-Xram2_test_sfx'
 | 
						|
 | 
						|
	 -----> win1_stuff_*_c
 | 
						|
 | 
						|
If you fail to give the -Xfile_name option (no space after the 'X'),
 | 
						|
then you will get the message:
 | 
						|
 | 
						|
unzipsfx: can't find myself! [unzip]
 | 
						|
 | 
						|
This is not indicative of failure to compress using the 'shrink'
 | 
						|
algorithm !! Enough of the silly comments .....
 | 
						|
 | 
						|
ZipInfo
 | 
						|
-------
 | 
						|
 | 
						|
Given the above note concerning SMS/QDOS programs not knowing the name
 | 
						|
by which the program was invoked, then the usual symbolic link of
 | 
						|
unzip to zipinfo trick is unavailable (presupposing there is some some
 | 
						|
SMS/QDOS trick to emulate symbolic links).
 | 
						|
 | 
						|
ZipInfo functionality is only available via 'unzip -Z'. There is no
 | 
						|
ZipInfo program.
 | 
						|
 | 
						|
Caveat ATP Users
 | 
						|
----------------
 | 
						|
 | 
						|
ATP for SMS/QDOS users should pay particular attention to the
 | 
						|
zip/unzip options in their atprc and compare with Info-ZIP/unzip
 | 
						|
usage. Older versions of zip/unzip screwed up -j.
 | 
						|
 | 
						|
 | 
						|
	zip -jk
 | 
						|
	unzip -jo
 | 
						|
 | 
						|
Distribution & Copyright
 | 
						|
------------------------
 | 
						|
 | 
						|
This software is written by and largely copyrighted by the 'Info-ZIP'
 | 
						|
group whose members are noted in the accompanying documentation. This
 | 
						|
particular SMS/QDOS port plus 'makesfx' was written by, but is not
 | 
						|
copyrighted by, Jonathan R Hudson. The SMS/QDOS code in this release
 | 
						|
is written from scratch and is not dependent on previous SMS/QDOS
 | 
						|
releases, but is (largely) compatible.
 | 
						|
 | 
						|
As a courtesy to the authors of this package, please ensure that the
 | 
						|
documentation is supplied when it is re-distributed.
 | 
						|
 | 
						|
In particular, if this archive is split into zip and unzip components,
 | 
						|
ensure that this documents "InfoZIP_SMSQDOS_ReadMe" is supplied in
 | 
						|
each component.
 | 
						|
 | 
						|
SMS/QDOS version by:
 | 
						|
Jonathan R Hudson (Jonathan.Hudson@jrhudson.demon.co.uk)
 | 
						|
 | 
						|
I am grateful to Graham Goodwin for finding some most imaginative
 | 
						|
means of breaking the beta code.
 | 
						|
 | 
						|
I'd also like to thank Thierry Godefroy for providing the 2.1/5.2
 | 
						|
source code and making the initial contact with the InfoZip group.
 | 
						|
 | 
						|
And of course, many, many thanks to the Info-ZIP workers for making
 | 
						|
this code freely available.
 | 
						|
 | 
						|
Note 1
 | 
						|
------
 | 
						|
 | 
						|
The 'C' language FAQ ('frequently asked questions' [comp.lang.c])
 | 
						|
notes on the matter of obtaining the load file name of a 'C' program:
 | 
						|
 | 
						|
16.5:	How can my program discover the complete pathname to the
 | 
						|
	executable file from which it was invoked?
 | 
						|
 | 
						|
A:	argv[0] may contain all or part of the pathname, or it may
 | 
						|
	contain nothing.  You may be able to duplicate the command
 | 
						|
	language interpreter's search path logic to locate the
 | 
						|
	executable if the name in argv[0] is present but incomplete.
 | 
						|
	However, there is no guaranteed or portable solution.
 | 
						|
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
Note 2
 | 
						|
------
 | 
						|
 | 
						|
NUL files for SMS2. There appears to be a conflict between SMS2/LBASIC
 | 
						|
compiled programs and c68 programs using nul as stdin.
 | 
						|
 | 
						|
	EW zip,nul;'ram1_test *_bas'	# will not work
 | 
						|
 | 
						|
					# This does work !
 | 
						|
	EW zip,#FOP_IN('nul');'ram2_test *_bas' : CLOSE
 | 
						|
 | 
						|
Note 3
 | 
						|
------
 | 
						|
 | 
						|
version number incremented to 2.0.1a and 5.12a to accomodate Erling
 | 
						|
Jacobsen's exit message requirements
 | 
						|
 | 
						|
version number incremented to zip 2.0.1b to fix bug on zipping files
 | 
						|
starting with leading underscore.
 | 
						|
 | 
						|
version number incremented to unzip 5.12b to fix unzip problem on
 | 
						|
files zipped with leading './', and linked with revised (fixed) c68
 | 
						|
'utime' function (could corrupt level 1 files). (source code _only_ as
 | 
						|
IZQ004.zip).
 | 
						|
 | 
						|
Ported zip 2.1 and unzip 5.2 (july 1996). Released as INZIP005.zip
 | 
						|
 | 
						|
All later versions --- see Info-ZIP release notes and documentation.
 | 
						|
 |