boinc/zip/unzip/unzipsfx.txt

343 lines
15 KiB
Plaintext

UNZIPSFX(1L) UNZIPSFX(1L)
NAME
unzipsfx - self-extracting stub for prepending to ZIP
archives
SYNOPSIS
<name of unzipsfx+archive combo> [-cfptuz[ajnoqsCLV$]]
[file(s) ... [-x xfile(s) ...]]
DESCRIPTION
unzipsfx is a modified version of unzip(1L) designed to be
prepended to existing ZIP archives in order to form self-
extracting archives. Instead of taking its first non-flag
argument to be the zipfile(s) to be extracted, unzipsfx
seeks itself under the name by which it was invoked and
tests or extracts the contents of the appended archive.
Because the executable stub adds bulk to the archive (the
whole purpose of which is to be as small as possible), a
number of the less-vital capabilities in regular unzip
have been removed. Among these are the usage (or help)
screen, the listing and diagnostic functions (-l and -v),
the ability to decompress older compression formats (the
``reduce,'' ``shrink'' and ``implode'' methods). The
ability to extract to a directory other than the current
one can be selected as a compile-time option, which is now
enabled by default since UnZipSFX version 5.5. Similary,
decryption is supported as a compile-time option but
should be avoided unless the attached archive contains
encrypted files. Starting with release 5.5, another com-
pile-time option adds a simple ``run command after extrac-
tion'' feature. This feature is currently incompatible
with the ``extract to different directory'' feature and
remains disabled by default.
Note that self-extracting archives made with unzipsfx are
no more (or less) portable across different operating sys-
tems than is the unzip executable itself. In general a
self-extracting archive made on a particular Unix system,
for example, will only self-extract under the same flavor
of Unix. Regular unzip may still be used to extract the
embedded archive as with any normal zipfile, although it
will generate a harmless warning about extra bytes at the
beginning of the zipfile. Despite this, however, the
self-extracting archive is technically not a valid ZIP
archive, and PKUNZIP may be unable to test or extract it.
This limitation is due to the simplistic manner in which
the archive is created; the internal directory structure
is not updated to reflect the extra bytes prepended to the
original zipfile.
ARGUMENTS
[file(s)]
An optional list of archive members to be pro-
cessed. Regular expressions (wildcards) similar to
those in Unix egrep(1) may be used to match
Info-ZIP 17 February 2002 (v5.5) 1
UNZIPSFX(1L) UNZIPSFX(1L)
multiple members. These wildcards may contain:
* matches a sequence of 0 or more characters
? matches exactly 1 character
[...] matches any single character found inside
the brackets; ranges are specified by a
beginning character, a hyphen, and an ending
character. If an exclamation point or a
caret (`!' or `^') follows the left bracket,
then the range of characters within the
brackets is complemented (that is, anything
except the characters inside the brackets is
considered a match).
(Be sure to quote any character that might other-
wise be interpreted or modified by the operating
system, particularly under Unix and VMS.)
[-x xfile(s)]
An optional list of archive members to be excluded
from processing. Since wildcard characters match
directory separators (`/'), this option may be used
to exclude any files that are in subdirectories.
For example, ``foosfx *.[ch] -x */*'' would extract
all C source files in the main directory, but none
in any subdirectories. Without the -x option, all
C source files in all directories within the zip-
file would be extracted.
If unzipsfx is compiled with SFX_EXDIR defined, the fol-
lowing option is also enabled:
[-d exdir]
An optional directory to which to extract files.
By default, all files and subdirectories are recre-
ated in the current directory; the -d option allows
extraction in an arbitrary directory (always assum-
ing one has permission to write to the directory).
The option and directory may be concatenated with-
out any white space between them, but note that
this may cause normal shell behavior to be sup-
pressed. In particular, ``-d ~'' (tilde) is
expanded by Unix C shells into the name of the
user's home directory, but ``-d~'' is treated as a
literal subdirectory ``~'' of the current direc-
tory.
OPTIONS
unzipsfx supports the following unzip(1L) options: -c and
-p (extract to standard output/screen), -f and -u (freshen
and update existing files upon extraction), -t (test
archive) and -z (print archive comment). All normal
Info-ZIP 17 February 2002 (v5.5) 2
UNZIPSFX(1L) UNZIPSFX(1L)
listing options (-l, -v and -Z) have been removed, but the
testing option (-t) may be used as a ``poor man's'' list-
ing. Alternatively, those creating self-extracting
archives may wish to include a short listing in the zip-
file comment.
See unzip(1L) for a more complete description of these
options.
MODIFIERS
unzipsfx currently supports all unzip(1L) modifiers: -a
(convert text files), -n (never overwrite), -o (overwrite
without prompting), -q (operate quietly), -C (match names
case-insensitively), -L (convert uppercase-OS names to
lowercase), -j (junk paths) and -V (retain version num-
bers); plus the following operating-system specific
options: -X (restore VMS owner/protection info), -s (con-
vert spaces in filenames to underscores [DOS, OS/2, NT])
and -$ (restore volume label [DOS, OS/2, NT, Amiga]).
(Support for regular ASCII text-conversion may be removed
in future versions, since it is simple enough for the
archive's creator to ensure that text files have the
appropriate format for the local OS. EBCDIC conversion
will of course continue to be supported since the zipfile
format implies ASCII storage of text files.)
See unzip(1L) for a more complete description of these
modifiers.
ENVIRONMENT OPTIONS
unzipsfx uses the same environment variables as unzip(1L)
does, although this is likely to be an issue only for the
person creating and testing the self-extracting archive.
See unzip(1L) for details.
DECRYPTION
Decryption is supported exactly as in unzip(1L); that is,
interactively with a non-echoing prompt for the pass-
word(s). See unzip(1L) for details. Once again, note
that if the archive has no encrypted files there is no
reason to use a version of unzipsfx with decryption sup-
port; that only adds to the size of the archive.
AUTORUN COMMAND
When unzipsfx was compiled with CHEAP_SFX_AUTORUN defined,
a simple ``command autorun'' feature is supported. You may
enter a command into the Zip archive comment, using the
following format:
$AUTORUN$>[command line string]
When unzipsfxP recognizes the ``$AUTORUN$>'' token at the
beginning of the Zip archive comment, the remainder of the
Info-ZIP 17 February 2002 (v5.5) 3
UNZIPSFX(1L) UNZIPSFX(1L)
first line of the comment (until the first newline charac-
ter) is passed as a shell command to the operating system
using the C rtl ``system'' function. Before executing the
command, unzipsfxP displays the command on the console and
prompts the user for confirmation. When the user has
switched off prompting by specifying the -q option,
autorun commands are never executed.
In case the archive comment contains additonal lines of
text, the remainder of the archive comment following the
first line is displayed normally, unless quiet operation
was requested by supplying a -q option.
EXAMPLES
To create a self-extracting archive letters from a regular
zipfile letters.zip and change the new archive's permis-
sions to be world-executable under Unix:
cat unzipsfx letters.zip > letters
chmod 755 letters
zip -A letters
To create the same archive under MS-DOS, OS/2 or NT (note
the use of the /b [binary] option to the copy command):
copy /b unzipsfx.exe+letters.zip letters.exe
zip -A letters.exe
Under VMS:
copy unzipsfx.exe,letters.zip letters.exe
letters == "$currentdisk:[currentdir]letters.exe"
zip -A letters.exe
(The VMS append command may also be used. The second com-
mand installs the new program as a ``foreign command''
capable of taking arguments. The third line assumes that
Zip is already installed as a foreign command.) Under
AmigaDOS:
MakeSFX letters letters.zip UnZipSFX
(MakeSFX is included with the UnZip source distribution
and with Amiga binary distributions. ``zip -A'' doesn't
work on Amiga self-extracting archives.) To test (or
list) the newly created self-extracting archive:
letters -t
To test letters quietly, printing only a summary message
indicating whether the archive is OK or not:
letters -tqq
Info-ZIP 17 February 2002 (v5.5) 4
UNZIPSFX(1L) UNZIPSFX(1L)
To extract the complete contents into the current direc-
tory, recreating all files and subdirectories as neces-
sary:
letters
To extract all *.txt files (in Unix quote the `*'):
letters *.txt
To extract everything except the *.txt files:
letters -x *.txt
To extract only the README file to standard output (the
screen):
letters -c README
To print only the zipfile comment:
letters -z
LIMITATIONS
The principle and fundamental limitation of unzipsfx is
that it is not portable across architectures or operating
systems, and therefore neither are the resulting archives.
For some architectures there is limited portability, how-
ever (e.g., between some flavors of Intel-based Unix).
Another problem with the current implementation is that
any archive with ``junk'' prepended to the beginning tech-
nically is no longer a zipfile (unless zip(1) is used to
adjust the zipfile offsets appropriately, as noted above).
unzip(1) takes note of the prepended bytes and ignores
them since some file-transfer protocols, notably MacBi-
nary, are also known to prepend junk. But PKWARE's
archiver suite may not be able to deal with the modified
archive unless its offsets have been adjusted.
unzipsfx has no knowledge of the user's PATH, so in gen-
eral an archive must either be in the current directory
when it is invoked, or else a full or relative path must
be given. If a user attempts to extract the archive from
a directory in the PATH other than the current one,
unzipsfx will print a warning to the effect, ``can't find
myself.'' This is always true under Unix and may be true
in some cases under MS-DOS, depending on the compiler used
(Microsoft C fully qualifies the program name, but other
compilers may not). Under OS/2 and NT there are operat-
ing-system calls available that provide the full path
name, so the archive may be invoked from anywhere in the
user's path. The situation is not known for AmigaDOS,
Atari TOS, MacOS, etc.
Info-ZIP 17 February 2002 (v5.5) 5
UNZIPSFX(1L) UNZIPSFX(1L)
As noted above, a number of the normal unzip(1L) functions
have been removed in order to make unzipsfx smaller:
usage and diagnostic info, listing functions and extrac-
tion to other directories. Also, only stored and deflated
files are supported. The latter limitation is mainly rel-
evant to those who create SFX archives, however.
VMS users must know how to set up self-extracting archives
as foreign commands in order to use any of unzipsfx's
options. This is not necessary for simple extraction, but
the command to do so then becomes, e.g., ``run letters''
(to continue the examples given above).
unzipsfx on the Amiga requires the use of a special pro-
gram, MakeSFX, in order to create working self-extracting
archives; simple concatenation does not work. (For tech-
nically oriented users, the attached archive is defined as
a ``debug hunk.'') There may be compatibility problems
between the ROM levels of older Amigas and newer ones.
All current bugs in unzip(1L) exist in unzipsfx as well.
DIAGNOSTICS
unzipsfx's exit status (error level) is identical to that
of unzip(1L); see the corresponding man page.
SEE ALSO
funzip(1L), unzip(1L), zip(1L), zipcloak(1L), zipgrep(1L),
zipinfo(1L), zipnote(1L), zipsplit(1L)
URL
The Info-ZIP home page is currently at
http://www.info-zip.org/pub/infozip/
or
ftp://ftp.info-zip.org/pub/infozip/ .
AUTHORS
Greg Roelofs was responsible for the basic modifications
to UnZip necessary to create UnZipSFX. See unzip(1L) for
the current list of Zip-Bugs authors, or the file CONTRIBS
in the UnZip source distribution for the full list of
Info-ZIP contributors.
Info-ZIP 17 February 2002 (v5.5) 6