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. Similarly, 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 compile-
time option adds a simple ``run command after extraction'' 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 systems 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 processed. Regular
expressions (wildcards) similar to those in Unix egrep(1) may
be used to match 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 otherwise 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 zipfile would be
extracted.

If unzipsfx is compiled with SFX_EXDIR defined, the following option
is also enabled:

[-d exdir]
An optional directory to which to extract files. By default,
all files and subdirectories are recreated in the current
directory; the -d option allows extraction in an arbitrary
directory (always assuming one has permission to write to the
directory). The option and directory may be concatenated
without any white space between them, but note that this may
cause normal shell behavior to be suppressed. 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 directory.

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 listing options (-l, -v and -Z) have
been removed, but the testing option (-t) may be used as a ``poor
man's'' listing. Alternatively, those creating self-extracting
archives may wish to include a short listing in the zipfile 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 numbers); plus the following operating-system
specific options: -X (restore VMS owner/protection info), -s
(convert 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 password(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 support; 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 unzipsfx recognizes the ``$AUTORUN$>'' token at the beginning of
the Zip archive comment, the remainder of the first line of the
comment (until the first newline character) is passed as a shell
command to the operating system using the C rtl ``system'' function.
Before executing the command, unzipsfx 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 additional 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 permissions 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 command
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

To extract the complete contents into the current directory,
recreating all files and subdirectories as necessary:

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, however (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 technically 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
MacBinary, 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 general 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 operating-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.

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 extraction to other directories. Also,
only stored and deflated files are supported. The latter limitation
is mainly relevant 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 program, MakeSFX,
in order to create working self-extracting archives; simple
concatenation does not work. (For technically 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 20 April 2009 (v6.0) UNZIPSFX(1L)

tribblix@gmail.com :: GitHub :: Privacy