1 2UNZIPSFX(1L) UNZIPSFX(1L) 3 4NAME 5 unzipsfx - self-extracting stub for prepending to ZIP 6 archives 7 8SYNOPSIS 9 <name of unzipsfx+archive combo> [-cfptuz[ajnoqsCLV$]] 10 [file(s) ... [-x xfile(s) ...]] 11 12DESCRIPTION 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. 36 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 51 original zipfile. 52 53ARGUMENTS 54 [file(s)] 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 58 59Info-ZIP 17 February 2002 (v5.5) 1 60 61UNZIPSFX(1L) UNZIPSFX(1L) 62 63 multiple members. These wildcards may contain: 64 65 * matches a sequence of 0 or more characters 66 67 ? matches exactly 1 character 68 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 77 considered a match). 78 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.) 82 83 [-x xfile(s)] 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. 93 94 If unzipsfx is compiled with SFX_EXDIR defined, the fol- 95 lowing option is also enabled: 96 97 [-d exdir] 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- 110 tory. 111 112OPTIONS 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 117 118Info-ZIP 17 February 2002 (v5.5) 2 119 120UNZIPSFX(1L) UNZIPSFX(1L) 121 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- 126 file comment. 127 128 See unzip(1L) for a more complete description of these 129 options. 130 131MODIFIERS 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]). 141 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.) 148 149 See unzip(1L) for a more complete description of these 150 modifiers. 151 152ENVIRONMENT OPTIONS 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. 157 158DECRYPTION 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. 165 166AUTORUN COMMAND 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 170 following format: 171 172 $AUTORUN$>[command line string] 173 174 When unzipsfxP recognizes the ``$AUTORUN$>'' token at the 175 beginning of the Zip archive comment, the remainder of the 176 177Info-ZIP 17 February 2002 (v5.5) 3 178 179UNZIPSFX(1L) UNZIPSFX(1L) 180 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. 188 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. 193 194EXAMPLES 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: 198 199 cat unzipsfx letters.zip > letters 200 chmod 755 letters 201 zip -A letters 202 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): 205 206 copy /b unzipsfx.exe+letters.zip letters.exe 207 zip -A letters.exe 208 209 Under VMS: 210 211 copy unzipsfx.exe,letters.zip letters.exe 212 letters == "$currentdisk:[currentdir]letters.exe" 213 zip -A letters.exe 214 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 219 AmigaDOS: 220 221 MakeSFX letters letters.zip UnZipSFX 222 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: 227 228 letters -t 229 230 To test letters quietly, printing only a summary message 231 indicating whether the archive is OK or not: 232 233 letters -tqq 234 235Info-ZIP 17 February 2002 (v5.5) 4 236 237UNZIPSFX(1L) UNZIPSFX(1L) 238 239 To extract the complete contents into the current direc- 240 tory, recreating all files and subdirectories as neces- 241 sary: 242 243 letters 244 245 To extract all *.txt files (in Unix quote the `*'): 246 247 letters *.txt 248 249 To extract everything except the *.txt files: 250 251 letters -x *.txt 252 253 To extract only the README file to standard output (the 254 screen): 255 256 letters -c README 257 258 To print only the zipfile comment: 259 260 letters -z 261 262LIMITATIONS 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). 268 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. 278 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. 293 294Info-ZIP 17 February 2002 (v5.5) 5 295 296UNZIPSFX(1L) UNZIPSFX(1L) 297 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. 304 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). 310 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. 317 318 All current bugs in unzip(1L) exist in unzipsfx as well. 319 320DIAGNOSTICS 321 unzipsfx's exit status (error level) is identical to that 322 of unzip(1L); see the corresponding man page. 323 324SEE ALSO 325 funzip(1L), unzip(1L), zip(1L), zipcloak(1L), zipgrep(1L), 326 zipinfo(1L), zipnote(1L), zipsplit(1L) 327 328URL 329 The Info-ZIP home page is currently at 330 http://www.info-zip.org/pub/infozip/ 331 or 332 ftp://ftp.info-zip.org/pub/infozip/ . 333 334AUTHORS 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. 340 341Info-ZIP 17 February 2002 (v5.5) 6 342 343