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.
 | |
| 
 |