0,0 → 1,569 |
A free Macintosh Port of Info-ZIP's |
Zip and UnZip |
By Dirk Haase, d_haase@sitec.net |
Home page: www.sitec.net/maczip |
Mirror page: |
www.haase-online.de/dirk/maczip |
================================ |
|
|
|
Abstract: |
--------- |
MacZip is a cross-platform compatible tool that includes |
both Zip (for compression) and UnZip (for extraction). |
|
Zip is a compression and file packaging utility for Unix, |
VMS, MSDOS, OS/2, Windows 9x, Windows NT, Atari, Macintosh, |
Amiga, Acorn RISC OS, and other systems. |
|
UnZip unpacks zip archives. The Zip and UnZip programs can |
process archives produced by PKZIP, and PKZIP and PKUNZIP |
can work with archives produced by zip. Zip version 2.2 is |
compatible with PKZIP 2.04. |
|
If you are new to MacZip please read first the file |
"ReadMe.1st". |
|
|
|
License: |
-------- |
Copyright (c) 1990-2001 Info-ZIP. All rights reserved. |
|
See the accompanying file LICENSE, version 2000-Apr-09 or later |
(the contents of which are also included in unzip.h) for terms of use. |
If, for some reason, all these files are missing, the Info-ZIP license |
also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html |
|
|
|
Requirements |
------------ |
MacZip requires at least System 7 and a Macintosh with a |
minimum of a Motorola 68020 or PowerPC 601 processor. Other |
configurations may work but it is not tested at all. |
|
The application is distributed as a fat binary with both |
regular 68K and native PowerPC versions included. |
|
|
|
Installation |
------------ |
Move the executable(s) somewhere--for example, drag it (or |
them) to your Applications folder. For easy access, make an |
alias in the Launcher Control Panel or directly on your |
desktop. The GUI is very simple. It was not my intention to |
make a full-blown GUI, however I think it is comfortable |
enough to use it as regular tool. |
|
This port supports also Apple-event. So you can install it |
in your WWW-Browser as a helper app. |
|
For more Info about the contents of this package, take a |
look into the "macos/Contents" (or :macos:Contents) file. |
Some notes on how to rebuild the Macintosh applications can |
be found in INSTALL. |
|
|
|
Usage: |
------ |
|
Basically there are four ways to start MacZip: |
|
a) Drag'n Drop |
b) using the Dialog box (Menu: File -> Zip/Unzip): |
|
Please read the file "ReadMe.1st" |
for the description of the items a and b. |
|
c) Using the Command line (Menu: File->Command Line): |
The Zip & UnZip tools are command line tools. So the |
behavior is exactly the same like the Zip & UnZip tools on |
Unix or Windows/DOS. This means, if you want to zip some |
files, you have to write a command line like this: "zip |
[switches] path_to_zip_archive path_to_files_folders" |
|
- Go to "File", select "Command Line" and the |
"MacZip Entry box" Dialog Box appears. |
|
An example: |
|
a: your zip may be created at |
Macintosh HD:applications:archive.zip |
|
b: your files may be found at |
Macintosh HD:somewhere:my_folder_to_archive:* |
|
Note: At the end of the path there must be a filename or |
a wildcard ! |
(see Footnotes: 1 wildcard, 2 Mac path names) |
|
So the command line should look like (one line!): |
|
zip "Macintosh HD:applications:archive.zip" "Macintosh HD:somewhere:my_folder_to_archive:*" |
|
- Click on "Enter" to start the task. |
|
Since you can not set a default folder you have to enter |
always a full qualified path names. Full-qualified path |
names are path names including the Volume name ! (see |
Footnote: 2 Mac path names) |
|
|
|
d) Using Applescript: |
|
There is only one additional event defined: "do_cmd". You |
can enter every valid command line. The first word must be |
"zip" or "unzip" to select the action (compress or |
extraction). |
|
See sample Applescript: |
|
tell application "MacZip (PPC)" |
activate |
with timeout of 90000 seconds |
do_cmd "zip -rjjN Volume:archive \"My Volume:*\" " |
end timeout |
end tell |
|
This script opens MacZip, brings it to the foreground on the |
Mac, starts the zip action with the command line: zip -rjjN |
Volume:archive "My Volume:*" . |
|
|
A short introduction is also available online: |
http://www.sitec.net/maczip/How-To-Do/ |
|
It's possible to stop the run of Zip/Unzip with the well |
known shortcut [Command] + [.]. |
|
|
--------------------------------------------------------------------------- |
|
There are some Mac-specific switches available. |
Zip Module: |
-df [MacOS] Include only data-fork of files zipped into |
the archive. Good for exporting files to foreign |
operating-systems. Resource-forks will be ignored |
at all. |
|
-jj [MacOS] record Fullpath (+ Volname). The complete |
path including volume will be stored. By default |
the relative path will be stored. |
|
-S [MSDOS, OS/2, WIN32 and ATARI] Include system and |
hidden files. |
[MacOS] Includes finder invisible files, which are |
ignored otherwise. |
|
Unzip Module: |
-E [MacOS only] display contents of MacOS extra field |
during restore operation. |
|
-i [MacOS only] ignore filenames stored in MacOS extra |
fields. Instead, the most compatible filename |
stored in the generic part of the entry's header is |
used. |
|
-J [MacOS only] ignore MacOS extra fields. All Macin- |
tosh specific info is skipped. Data-fork and |
resource-fork are restored as separate files. |
|
|
Select [File]->[Get Help on Zip/Unzip] for a complete list |
of switches. |
|
|
|
Limitations / Problems: |
----------------------- |
|
- Aliases are not supported. I tried, but I got broken |
aliases. This port will silently ignore all aliases. |
It's on my to-do list for future releases. |
|
- Zip needs much memory to compress many files: You may need |
to increase the 'Preferred Size' in 'Get Info'. Values of 12 |
Megabytes or more are possible |
|
- Unzip needs about 500 Kbytes of memory to unzip no matter |
how many files were compressed and expanded. |
|
- and finally one big macintosh-related problem: |
This port has one weak point: It's based on path names. |
As you may be already know: Path names are not unique on a Mac ! |
The main reason is that an attempt to implement support exact |
saving of the MacOS specific internal file structures would |
require a throughout rewrite of major parts of shared code, |
probably sacrifying compatibility with other systems. I have |
no solution at the moment. The port will just warn you if you |
try zip from / to a volume which has a duplicate name. |
MacZip has problems to find the archive or the files. My |
(Big) recommendation: Name all your volumes with a unique |
name and MacZip will run without any problem. |
|
|
Known Bugs: |
|
- crypted files in a zip archive are sometimes corrupt: |
I get an error message: invalid compressed data to inflate. |
Appearance of this error is purely be chance: I did a small |
test: Unzipping an archive containing 3589 files 56 files |
fails to unzip, so about 1.5%. Root cause is completely |
unclear to me :( |
|
I strongly recommend to test your archive (e.g. unzip -t archive). |
|
|
|
|
|
Zip Programs / Macintosh Extra-Data: |
----------------------------------------- |
A brief overview: |
Currently, as far as I know, there are 6 Zip programs |
available for the Macintosh platform. These programs build |
(of course) different variants of Zip files: |
|
- Info-ZIP's first Port of Zip. Ported by Johnny Lee |
This port is rather outdated and no longer supported (since 1992). |
68K only. Only minimal Mac-info is stored |
(Creator/Type, Finder attributes). Creator/Type: '????' / '????' |
Until year 1998, only UnZip 5.32 survived. |
|
- ZipIt by Tom Brown. This is Shareware and still supported I think. |
ZipIt has a nice GUI, but I found it can't handle large Zip files |
quite well. ZipIt compresses Macintosh files using the Mac Binary |
format. So, transferring files to other platforms is not so easy. |
Only minimal Mac-info is stored (Creator/Type, Finder attributes). |
Mac filenames are changed to a most compatible filename. |
Creator/Type: 'ZIP ' / 'ZIP ' |
|
- PKZIP/mac v2.03/210d. This is Shareware. |
This Zip implementation for the Mac can be found on ASI's web site |
(http://www.asizip.com/products/products.htm). The name of this |
program is misleading, it is NOT a product from PKWARE. ASI's last |
release version is v2.03, and they also offer a newer beta version |
PKZIP/mac 210d. But even the Beta version is rather outdated (1995). |
Only minimal Mac-info is stored (Creator/Type, Finder attributes). |
The Zipfile format looks like incompatible to other platforms. |
(More details about the compatibility issue can be found in |
proginfo/3rdparty.bug!). Type: 'PKz1' |
Mac filenames are restored without any change. |
|
- Aladdin DropZip 1999, This is Shareware. Aladdin chose |
the format of ZipIt. Therefore, it has the some drawbacks |
like ZipIt. |
Creator/Type: 'SITx' / 'ZIP ' |
|
- SmartZip 1.0 1999 - by Marco Bambini Vampire Software. |
This is Shareware. SmartZip compresses Macintosh files using the |
Mac Binary. Therefore, it has the same drawbacks like ZipIt. |
Creator/Type: 'dZIP' / 'ZIP ' |
|
and finally: |
- Info-ZIP's latest Port of Zip. MacZip 1.0. Ported by me :-) |
It is supported (of course) and up to date. Full set of macintosh |
info is stored: Creator/Type, Finder attributes, Finder comments, |
MacOS 8.0 Folder settings, Icon/Folder Positions ... |
Mac filenames are restored without any change. |
Creator/Type: 'IZip' / 'ZIP ' |
|
|
Compatibility of my port; Extraction: |
- Archives from Info-ZIP's first port (by Johnny Lee) are |
still compatible. |
- Extraction of ZipIt archives is supported. This support |
is not complete: Filenames are correct but Directory names |
are sometimes mangled to a DOS compatible form. Segmented |
archives are not supported. |
- PKZiP/mac archive files are extracted without resource-forks |
and without any Finder info. I have no information about |
that zip format. |
|
Compatibility of my port; Compression: |
- My port supports only the new Info-ZIP format (introduced |
with this port). Therefore archives created by MacZip 1.0 |
(March 1999) must be extracted with this version or later |
releases of Info-ZIP's UnZip to restore the complete set of |
Macintosh attributes. |
|
Note: This port is complete unrelated to the shareware ZipIt. |
Even more, handling of special Macintosh attributes is |
incompatible with ZipIt. This port (MacZip) may be used to |
extract archives created by ZipIt, but make sure that you |
get the result as you expected. |
|
|
|
Macintosh Files; File Forks: |
---------------------------- |
|
All Macintosh files comprise two forks, known as the data |
fork and the resource fork. Unlike the bytes stored in the |
resource fork, the bytes in the data fork do not have to |
exhibit any particular internal structure. The application |
is responsible for interpreting the bytes in the data fork |
in whatever manner is appropriate. The bytes in the resource |
fork usually have a defined internal structure and contain |
data object like menus, dialog boxes, icons and pictures. |
Although all Macintosh files contain both a data fork and a |
resource fork, one or both of these forks may be empty. |
|
MacZip stores data-forks and resource-forks separately. The |
Zipfile format does not allow to store two archive entries |
using exactly the same name. My solution is to modify the |
Path name of the resource-fork. All resource-fork names are |
prepended with a leading special directory named |
"XtraStuf.mac". So, when extracting on a Mac, you should |
never see this directory "XtraStuf.mac" on your *disk*. |
|
On all foreign systems that support directories in filenames |
(e.g.: OS/2, Unix, DOS/Windows, VMS) you will get a |
directory "XtraStuf.mac" when extracting MacZip archives. |
You can delete the complete directory "XtraStuf.mac" since |
Mac resources do not make much sense outside the MacOS |
world. |
|
|
|
Text encoding; Charsets of the Filenames: |
----------------------------------------- |
|
The following information is only important if you plan to |
transfer archives across different platforms/language systems: |
|
A typical Zip archive does not support different charsets. |
All filenames stored in the public area (= accessible by |
foreign systems other than MacOS) must be coded in the |
charset ISO-8859-1 (CP1252 in the Microsoft Windows world) |
or CP850 (DOSLatin1). The latter should only be used by Zip |
programs that mark the archive entries as "created under |
DOS". Apart from Macs, the commonly used platforms either |
support ISO-8859-1 directly, or are compatible with it. To |
achieve maximum compatibility, MacZip convert filenames from |
the Mac OS Roman character set to ISO-8859-1 and vice versa. |
But not every char of the charset MacRoman has their |
equivalent in ISO-8859-1. To make the mapping in most cases |
possible, I chose most similar chars or at least the MIDDLE |
DOT. |
|
Mac OS Roman character set is used for at least the |
following Mac OS localizations: U.S., British, Canadian |
French, French, Swiss French, German, Swiss German, Italian, |
Swiss Italian, Dutch, Swedish, Norwegian, Danish, Finnish, |
Spanish, Catalan, Portuguese, Brazilian, and the default |
International system. |
|
In all Mac OS encodings, character codes 0x00-0x7F are |
identical to ASCII, except that |
- in Mac OS Japanese, yen sign replaces reverse solidus |
- in Mac OS Arabic, Farsi, and Hebrew, some of the |
punctuation in this range is treated as having strong |
left-right directionality, although the corresponding |
Unicode characters have neutral directionality |
So, for best compatibility, confine filenames to the standard |
7-bit ASCII character set. |
|
If you generate a filename list of your archive (unzip -l), |
you will see the converted filenames. Your can also extract |
the archive with the switch '-i' (= ignore mac filenames), |
and test your result. |
|
This MacZip port uses its own filename stored in the |
archive. At the moment, the filename will be not converted. |
However, I'm planning to add support for Unicode. |
|
Currently, the following Mac OS encodings are NOT supported: |
Japanese, ChineseTrad, Korean, Arabic, Hebrew, Greek, |
Cyrillic, Devanagari, Gurmukhi, Gujarati, Oriya, Bengali, |
Tamil, Telugu Kannada, Malayalam, Sinhalese, Burmese, Khmer, |
Thai, Laotian, Georgian, Armenian, ChineseSimp, Tibetan, |
Mongolian, Ethiopic, Vietnamese, ExtArabic and finally: |
Symbol - this is the encoding for the font named "Symbol". |
Dingbats - this is the encoding for the font named "Zapf Dingbats". |
If you extract an archive coded with one of these |
charsets you will probably get filenames with funny |
characters. |
|
These problems apply only to filenames and NOT to the file |
content. |
of course: The content of the files will NEVER be converted !! |
|
|
|
File-/Creator Type: |
------------- |
|
This port uses the creator type 'IZip' and it is registered |
at Apple (since 08. March 1998). File types can not be |
registered any more. This port uses 'ZIP ' for Zip archive |
files. The creator 'IZip' type should be used for all future |
versions of MacZip. |
|
|
|
Hints for proper restoration of file-time stamps: |
------------------------------------------------- |
|
UnZip requires the host computer to have proper time zone |
information in order to handle certain tasks correctly (see |
unzip.txt). To set the time zone on the Macintosh, go to |
the Map Control Panel and enter the correct number of hours |
(and, in a few locales, minutes) offset from Universal |
Time/Greenwich Mean Time. For example, the US Pacific time |
zone is -8 hours from UTC/GMT during standard (winter) time |
and -7 hours from UTC/GMT during Daylight Savings Time. The |
US Eastern time zone is -5 hours during the winter and -4 |
hours during the summer. |
|
Discussion of Daylight Savings Time |
----------------------------------- |
The setting in the Date & Time control panel for Daylight |
Savings time is a universal setting. That is, it assumes |
everybody in the world is observing Daylight Savings time |
when its check box is selected. |
|
If other areas of the world are not observing Daylight |
Savings time when the check box is selected in the Date & |
Time control panel, then the Map control panel will be off |
by an hour for all areas that are not recognizing Daylight |
Savings time. |
|
Conversely, if you set the Map control panel to an area that |
does not observe Daylight Savings time and deselect/uncheck |
the check box for Daylight Savings time in the Date & Time |
control panel, then time in all areas celebrating Daylight |
Savings time will be off by an hour in the Map control |
panel. |
|
Example: |
In the case of Hawaiians, sometimes they are three hours |
behind Pacific Standard Time (PST) and sometimes two hours |
behind Pacific Daylight Time (PDT). The Map control panel |
can only calculate differences between time zones relative |
to Greenwich Mean Time (GMT). Hawaii will always show up as |
three hours past the Pacific time zone and five hours past |
the Central time zone. |
|
When Hawaiians are not observing Daylight Savings time, but |
the rest of the country is, there is no combination of |
settings in Map and Date & Time control panels which will |
enable you to display Hawaiian local time correctly AND |
concurrently display the correct time in other places that |
do observe Daylight Savings time. |
|
The knowledge about which countries observe Daylight Savings |
time and which do not is not built into the Map control |
panel, so it does not allow for such a complex calculation. |
|
This same situation also occurs in other parts of the world |
besides Hawaii. Phoenix, Arizona is an example of an area of |
the U.S. which also does not observe Daylight Savings time. |
|
Conclusion: |
MacZip only knows the GMT and DST offsets of the |
current time, not for the time in question. |
|
|
Projects & Packages: |
-------------------- |
|
A Note to version numbers: Version of MacZip is currently |
1.06 and is based on the zip code version 2.3 and unzip code |
version 5.42. See About Box for current version and compiler |
build date. |
|
Because of the amount of sources I splitted this port into |
several projects. See http://www.sitec.net/maczip for |
updates. |
|
- core source parts: |
unzxxx.zip |
zipxxx.zip |
These archives contains the main parts of the port. You can |
build libraries and a standalone App with Metrowerks |
standard console SIOUX. They contain only sources, no |
executables. These archives are exact copies of the standard |
Info-ZIP source distributions; they were only repackaged |
under MacOS using MacZip, with one minor addition: For those |
files that are stored in BinHex'ed format in the Info-ZIP |
reference source archives, unpacked version that are ready |
for use have been added. |
|
- additional source part: |
MacZipxxx.zip: contains all the GUI stuff and the project |
files to build the main-app. Only sources of the GUI, no |
zip or unzip code. To build MacZip successfully you will |
need to also download the zip and unzip packages. |
|
- executables: |
MacZipxxxnc.hqx: contains only executables and 'README.TXT', |
This version is without en-/decryption support ! |
MacZipxxxc.hqx: contains only executables and 'README.TXT', |
This version supports en-/decryption ! |
|
- encryption sources: |
zcryptxx.zip: To build crypt versions of MacZip. |
download from ftp://ftp.icce.rug.nl/infozip/ (and subdirectories) |
|
- documentation: |
MacZipDocu.zip: contains some further docus about the algorithm, |
limits, Info-ZIP's appnote and a How-to-do Webpage. |
|
|
Credits: |
-------- |
|
Macstuff.c and recurse.c: All the functions are from More Files. |
More Files fixes many of the broken or underfunctional parts of |
the file system. Thanks to Jim Luther. (see morefiles.doc) |
|
|
|
|
--------------------------------------------------------------------------- |
Footnotes: |
|
1. wildcard: |
The '*' is a wildcard and means 'all files' |
Just in case you don't know wildcards: |
'*' is a place holder for any character. |
e.g.: |
"this*" matches with "this_file" or "this_textfile" but it |
doesn't match with "only_this_file" or "first_this_textfile" |
"*this*" matches with "this_file" or "this_textfile" AND |
matches with "only_this_file" or "first_this_textfile" |
|
|
2. Mac pathnames: |
The following characteristics of Macintosh pathnames should |
be noted: |
|
A full pathname never begins with a colon, but must contain |
at least one colon. |
A partial pathname always begins with a colon separator except |
in the case where the file partial pathname is a simple file or |
directory name. |
Single trailing separator colons in full or partial pathnames |
are ignored except in the case of full pathnames to volumes. |
In full pathnames to volumes, the trailing separator colon is |
required. |
Consecutive separator colons can be used to ascend a level |
from a directory to its parent directory. Two consecutive |
separator colons will ascend one level, three consecutive |
separator colons will ascend two levels, and so on. Ascending |
can only occur from a directory; not a file. |
|
|
|
|
|
--------------------------------------------------------------------------- |
|
Dirk Haase |
========== |