2
UNZIPSFX(1L) UNZIPSFX(1L)
5
unzipsfx - self-extracting stub for prepending to ZIP
9
<name of unzipsfx+archive combo> [-cfptuz[ajnoqsCLV$]]
10
[file(s) ... [-x xfile(s) ...]]
13
unzipsfx is a modified version of unzip(1L) designed to be
14
prepended to existing ZIP archives in order to form self-
15
extracting archives. Instead of taking its first non-flag
16
argument to be the zipfile(s) to be extracted, unzipsfx
17
seeks itself under the name by which it was invoked and
18
tests or extracts the contents of the appended archive.
19
Because the executable stub adds bulk to the archive (the
20
whole purpose of which is to be as small as possible), a
21
number of the less-vital capabilities in regular unzip
22
have been removed. Among these are the usage (or help)
23
screen, the listing and diagnostic functions (-l and -v),
24
the ability to decompress older compression formats (the
25
``reduce,'' ``shrink'' and ``implode'' methods). The
26
ability to extract to a directory other than the current
27
one can be selected as a compile-time option, which is now
28
enabled by default since UnZipSFX version 5.5. Similary,
29
decryption is supported as a compile-time option but
30
should be avoided unless the attached archive contains
31
encrypted files. Starting with release 5.5, another com-
32
pile-time option adds a simple ``run command after extrac-
33
tion'' feature. This feature is currently incompatible
34
with the ``extract to different directory'' feature and
35
remains disabled by default.
37
Note that self-extracting archives made with unzipsfx are
38
no more (or less) portable across different operating sys-
39
tems than is the unzip executable itself. In general a
40
self-extracting archive made on a particular Unix system,
41
for example, will only self-extract under the same flavor
42
of Unix. Regular unzip may still be used to extract the
43
embedded archive as with any normal zipfile, although it
44
will generate a harmless warning about extra bytes at the
45
beginning of the zipfile. Despite this, however, the
46
self-extracting archive is technically not a valid ZIP
47
archive, and PKUNZIP may be unable to test or extract it.
48
This limitation is due to the simplistic manner in which
49
the archive is created; the internal directory structure
50
is not updated to reflect the extra bytes prepended to the
55
An optional list of archive members to be pro-
56
cessed. Regular expressions (wildcards) similar to
57
those in Unix egrep(1) may be used to match
59
Info-ZIP 17 February 2002 (v5.5) 1
61
UNZIPSFX(1L) UNZIPSFX(1L)
63
multiple members. These wildcards may contain:
65
* matches a sequence of 0 or more characters
67
? matches exactly 1 character
69
[...] matches any single character found inside
70
the brackets; ranges are specified by a
71
beginning character, a hyphen, and an ending
72
character. If an exclamation point or a
73
caret (`!' or `^') follows the left bracket,
74
then the range of characters within the
75
brackets is complemented (that is, anything
76
except the characters inside the brackets is
79
(Be sure to quote any character that might other-
80
wise be interpreted or modified by the operating
81
system, particularly under Unix and VMS.)
84
An optional list of archive members to be excluded
85
from processing. Since wildcard characters match
86
directory separators (`/'), this option may be used
87
to exclude any files that are in subdirectories.
88
For example, ``foosfx *.[ch] -x */*'' would extract
89
all C source files in the main directory, but none
90
in any subdirectories. Without the -x option, all
91
C source files in all directories within the zip-
92
file would be extracted.
94
If unzipsfx is compiled with SFX_EXDIR defined, the fol-
95
lowing option is also enabled:
98
An optional directory to which to extract files.
99
By default, all files and subdirectories are recre-
100
ated in the current directory; the -d option allows
101
extraction in an arbitrary directory (always assum-
102
ing one has permission to write to the directory).
103
The option and directory may be concatenated with-
104
out any white space between them, but note that
105
this may cause normal shell behavior to be sup-
106
pressed. In particular, ``-d ~'' (tilde) is
107
expanded by Unix C shells into the name of the
108
user's home directory, but ``-d~'' is treated as a
109
literal subdirectory ``~'' of the current direc-
113
unzipsfx supports the following unzip(1L) options: -c and
114
-p (extract to standard output/screen), -f and -u (freshen
115
and update existing files upon extraction), -t (test
116
archive) and -z (print archive comment). All normal
118
Info-ZIP 17 February 2002 (v5.5) 2
120
UNZIPSFX(1L) UNZIPSFX(1L)
122
listing options (-l, -v and -Z) have been removed, but the
123
testing option (-t) may be used as a ``poor man's'' list-
124
ing. Alternatively, those creating self-extracting
125
archives may wish to include a short listing in the zip-
128
See unzip(1L) for a more complete description of these
132
unzipsfx currently supports all unzip(1L) modifiers: -a
133
(convert text files), -n (never overwrite), -o (overwrite
134
without prompting), -q (operate quietly), -C (match names
135
case-insensitively), -L (convert uppercase-OS names to
136
lowercase), -j (junk paths) and -V (retain version num-
137
bers); plus the following operating-system specific
138
options: -X (restore VMS owner/protection info), -s (con-
139
vert spaces in filenames to underscores [DOS, OS/2, NT])
140
and -$ (restore volume label [DOS, OS/2, NT, Amiga]).
142
(Support for regular ASCII text-conversion may be removed
143
in future versions, since it is simple enough for the
144
archive's creator to ensure that text files have the
145
appropriate format for the local OS. EBCDIC conversion
146
will of course continue to be supported since the zipfile
147
format implies ASCII storage of text files.)
149
See unzip(1L) for a more complete description of these
153
unzipsfx uses the same environment variables as unzip(1L)
154
does, although this is likely to be an issue only for the
155
person creating and testing the self-extracting archive.
156
See unzip(1L) for details.
159
Decryption is supported exactly as in unzip(1L); that is,
160
interactively with a non-echoing prompt for the pass-
161
word(s). See unzip(1L) for details. Once again, note
162
that if the archive has no encrypted files there is no
163
reason to use a version of unzipsfx with decryption sup-
164
port; that only adds to the size of the archive.
167
When unzipsfx was compiled with CHEAP_SFX_AUTORUN defined,
168
a simple ``command autorun'' feature is supported. You may
169
enter a command into the Zip archive comment, using the
172
$AUTORUN$>[command line string]
174
When unzipsfxP recognizes the ``$AUTORUN$>'' token at the
175
beginning of the Zip archive comment, the remainder of the
177
Info-ZIP 17 February 2002 (v5.5) 3
179
UNZIPSFX(1L) UNZIPSFX(1L)
181
first line of the comment (until the first newline charac-
182
ter) is passed as a shell command to the operating system
183
using the C rtl ``system'' function. Before executing the
184
command, unzipsfxP displays the command on the console and
185
prompts the user for confirmation. When the user has
186
switched off prompting by specifying the -q option,
187
autorun commands are never executed.
189
In case the archive comment contains additonal lines of
190
text, the remainder of the archive comment following the
191
first line is displayed normally, unless quiet operation
192
was requested by supplying a -q option.
195
To create a self-extracting archive letters from a regular
196
zipfile letters.zip and change the new archive's permis-
197
sions to be world-executable under Unix:
199
cat unzipsfx letters.zip > letters
203
To create the same archive under MS-DOS, OS/2 or NT (note
204
the use of the /b [binary] option to the copy command):
206
copy /b unzipsfx.exe+letters.zip letters.exe
211
copy unzipsfx.exe,letters.zip letters.exe
212
letters == "$currentdisk:[currentdir]letters.exe"
215
(The VMS append command may also be used. The second com-
216
mand installs the new program as a ``foreign command''
217
capable of taking arguments. The third line assumes that
218
Zip is already installed as a foreign command.) Under
221
MakeSFX letters letters.zip UnZipSFX
223
(MakeSFX is included with the UnZip source distribution
224
and with Amiga binary distributions. ``zip -A'' doesn't
225
work on Amiga self-extracting archives.) To test (or
226
list) the newly created self-extracting archive:
230
To test letters quietly, printing only a summary message
231
indicating whether the archive is OK or not:
235
Info-ZIP 17 February 2002 (v5.5) 4
237
UNZIPSFX(1L) UNZIPSFX(1L)
239
To extract the complete contents into the current direc-
240
tory, recreating all files and subdirectories as neces-
245
To extract all *.txt files (in Unix quote the `*'):
249
To extract everything except the *.txt files:
253
To extract only the README file to standard output (the
258
To print only the zipfile comment:
263
The principle and fundamental limitation of unzipsfx is
264
that it is not portable across architectures or operating
265
systems, and therefore neither are the resulting archives.
266
For some architectures there is limited portability, how-
267
ever (e.g., between some flavors of Intel-based Unix).
269
Another problem with the current implementation is that
270
any archive with ``junk'' prepended to the beginning tech-
271
nically is no longer a zipfile (unless zip(1) is used to
272
adjust the zipfile offsets appropriately, as noted above).
273
unzip(1) takes note of the prepended bytes and ignores
274
them since some file-transfer protocols, notably MacBi-
275
nary, are also known to prepend junk. But PKWARE's
276
archiver suite may not be able to deal with the modified
277
archive unless its offsets have been adjusted.
279
unzipsfx has no knowledge of the user's PATH, so in gen-
280
eral an archive must either be in the current directory
281
when it is invoked, or else a full or relative path must
282
be given. If a user attempts to extract the archive from
283
a directory in the PATH other than the current one,
284
unzipsfx will print a warning to the effect, ``can't find
285
myself.'' This is always true under Unix and may be true
286
in some cases under MS-DOS, depending on the compiler used
287
(Microsoft C fully qualifies the program name, but other
288
compilers may not). Under OS/2 and NT there are operat-
289
ing-system calls available that provide the full path
290
name, so the archive may be invoked from anywhere in the
291
user's path. The situation is not known for AmigaDOS,
292
Atari TOS, MacOS, etc.
294
Info-ZIP 17 February 2002 (v5.5) 5
296
UNZIPSFX(1L) UNZIPSFX(1L)
298
As noted above, a number of the normal unzip(1L) functions
299
have been removed in order to make unzipsfx smaller:
300
usage and diagnostic info, listing functions and extrac-
301
tion to other directories. Also, only stored and deflated
302
files are supported. The latter limitation is mainly rel-
303
evant to those who create SFX archives, however.
305
VMS users must know how to set up self-extracting archives
306
as foreign commands in order to use any of unzipsfx's
307
options. This is not necessary for simple extraction, but
308
the command to do so then becomes, e.g., ``run letters''
309
(to continue the examples given above).
311
unzipsfx on the Amiga requires the use of a special pro-
312
gram, MakeSFX, in order to create working self-extracting
313
archives; simple concatenation does not work. (For tech-
314
nically oriented users, the attached archive is defined as
315
a ``debug hunk.'') There may be compatibility problems
316
between the ROM levels of older Amigas and newer ones.
318
All current bugs in unzip(1L) exist in unzipsfx as well.
321
unzipsfx's exit status (error level) is identical to that
322
of unzip(1L); see the corresponding man page.
325
funzip(1L), unzip(1L), zip(1L), zipcloak(1L), zipgrep(1L),
326
zipinfo(1L), zipnote(1L), zipsplit(1L)
329
The Info-ZIP home page is currently at
330
http://www.info-zip.org/pub/infozip/
332
ftp://ftp.info-zip.org/pub/infozip/ .
335
Greg Roelofs was responsible for the basic modifications
336
to UnZip necessary to create UnZipSFX. See unzip(1L) for
337
the current list of Zip-Bugs authors, or the file CONTRIBS
338
in the UnZip source distribution for the full list of
339
Info-ZIP contributors.
341
Info-ZIP 17 February 2002 (v5.5) 6