unzipsfx - extraction (SFX) program. Append a ZIP archive to it to make a self-extracting archive bundle.
name_of_unzipsfx+archive_bundle [ unzip_options ] [ member ... ]
UNZIPSFX(1) General Commands Manual UNZIPSFX(1) NAME unzipsfx - self-extraction (SFX) program. Append a ZIP archive to it to make a self-extracting archive bundle. SYNOPSIS name_of_unzipsfx+archive_bundle [ unzip_options ] [ member ... ] DESCRIPTION UnZipSFX is a special edition of UnZip which is designed to be attached to the beginning of an existing, ordinary ZIP archive to form a self- extracting (SFX) archive. Unlike the normal UnZip program, which works on an archive specified on its command line, UnZipSFX works on an ar- chive which has been appended to itself. Minimizing the size of a self-extracting archive, means minimizing the size of the UnZipSFX program itself. Thus UnZipSFX is normally built without some of the less important features found in the normal UnZip program. Among these are the help/usage displays (-h, -hh), the list- ing and diagnostic functions (-l, -v), the ability to process some older compression methods ("Implode", "Reduce", "Shrink"), and, by default, some newer compression methods (bzip2, LZMA, PPMd) and any encryption methods. Starting with UnZipSFX version 5.50, the ability to extract to a direc- tory other than the current one (-d dest_dir) has been enabled by default. Some or all of the optional compression and/or encryption methods can be enabled at build time, at the cost of increasing the size of the resulting UnZipSFX program. Starting with UnZip version 5.50, another build-time option adds a sim- ple "run command after extraction" feature. This feature is currently incompatible with the "extract to different directory" (-d dest_dir) feature, and remains disabled by default. All the build-time options controlling UnZipSFX features should be explained in the UnZip installation instructions (INSTALL). Note that the features (such as optional encryption or compression methods) which are available in an UnZipSFX executable are determined when the UnZipSFX executable is built. However, the features which are needed are determined when the ZIP archive is created. The user must decide which optional features to include in or exclude from the UnZipSFX exe- cutable, and then use only the available UnZipSFX features when creat- ing an archive for use as a self-extracting archive. Enabling optional features in UnZipSFX makes the executable bigger (and hence SFX ar- chives made with it). Of course, the greater efficiency of some optional compression method might save enough space to compensate for the bigger UnZipSFX executable which would be needed to deal with it. And, if encryption is desired, then the UnZipSFX executable must be able to deal with that. Users with complex requirements may find it useful to build multiiple UnZipSFX executables with different feature sets for different pur- poses. The user is responsible for managing multiple UnZipSFX executa- bles. The UnZip builders offer no tools to help, and, without a "-v" report, determining the capabilities of an UnZipSFX executable is not very easy. The user is also responsible for testing a self-extracting archive on the target system, to ensure that the UnZipSFX executable used has all the features it needs to process the attached archive. Note that the UnZipSFX executable in a self-extracting archive is a real executable program, and so is not generally portable from one operating system or hardware architecture to another. The ZIP archive within a self-extracting archive can be pro- cessed anywhere using a normal UnZip program. (At worst, UnZip will emit a warning like "nnnn extra bytes at beginning or within zipfile", but using "zip -A" on an SFX bundle will pre- vent even that annoyance.) ARGUMENTS member ... An optional list of archive members to be processed, separated by spaces. If no member list is specified, then all archive members are processed. Wildcard patterns may be used to match multiple members. These wildcard expressions are similar to those supported (for "globbing") in commonly used Unix shells (csh, ksh, sh, and so on) and 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 ("^") 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. To specify a literal left bracket, use the three-character sequence "[[]". Be sure to escape or quote any character(s) that might otherwise be interpreted or modified by the operating system, particularly Unix shells. OPTIONS (Primary Mode) Options in this group (-c -f -p -t -u -z) specify the primary mode of operation of UnZipSFX. Only one of these primary mode options may be specified. -c --to-stdout Primary Mode. Extract files to stdout/screen. This option is similar to the -p option except that the name of each file is displayed as it is extracted, and the -a option is allowed, which can provide automatic ASCII-EBCDIC conversion, where appropriate. -f --freshen Primary Mode. Freshen existing files. That is, extract only those files that already exist on disk and that are newer than the disk copies. By default, UnZipSFX queries before overwrit- ing, but the -o option may be used to suppress the queries. Note that on many operating systems, the TZ (timezone) environ- ment variable must be set correctly in order for -f and -u to work properly. (On Unix the variable is usually set automati- cally.) The reasons for this are somewhat subtle but have to do with the differences between DOS-format file times (always local time) and Unix-format times (always UTC) and the necessity to compare the two. A typical TZ value is "PST8PDT" (US Pacific time with automatic adjustment for Daylight Saving Time). -p --pipe-to-stdout Primary Mode. Extract files to stdout (pipe). Only the actual file data for the members are sent to stdout (no file names, or other information, as would be displayed with -c), and the files are always extracted in binary format, just as they are stored (no line-ending or ASCII-EBCDIC conversions). -t --test Primary Mode. Test archive members. Testing means that each archive member is extracted in memory (expanding and decrypting, as needed), but not written to a file. The resulting CRC (cyclic redundancy check, an enhanced checksum) of the extracted data is then compared with the original file's stored CRC value, and an error message is emitted if a CRC mismatch is detected. -u --update Primary mode. Update existing files and create new ones if needed. This mode performs the same function as the Freshen (-f) mode, extracting (with query) files that are newer than those with the same name on disk, but it also extracts those files that do not already exist on disk. See -f, above, for information on setting the timezone properly. -z --zipfile-comment Primary mode. Display only the archive comment. OPTIONS (Ordinary) -2 --force-ods2 [VMS] Convert extracted file names to ODS2-compatible names, even on an ODS5 file system. By default, if the destination file system is ODS5, case is preserved, and extended file name characters are caret-escaped as needed, while if the destination file system is ODS2, ODS2-invalid characters are replaced by underscores. -a --ascii Convert text files. Ordinarily, all files are extracted exactly as they are stored, byte-for-byte. With -a, line endings in a text file are adjusted to the local standard as the file is extracted. When appropriate, ASCII<-->EBCDIC conversion is also done. Zip (or a similar archiving program) identifies files as "binary" or "text" when they are archived. (A short-format Zip- Info report denotes a binary file with a "b", and a text file with a "t".) Zip's identification of text files may not be per- fect, so UnZipSFX prints "[text]" or "[binary]" as a visual check for each file it extracts with -a. The -aa option forces all files to be extracted (and converted) as text, regardless of the supposed file type. [VMS] On VMS, for archives with VMS attribute information (made with "zip -V" or "ZIP /VMS"), files are always created with their original record formats. For archives without VMS attribute information (not made with "zip -V" or "ZIP /VMS"), all files are normally created with Stream_LF record format. With -a, text files are normally created with variable-length record format, but adding -S gives them Stream_LF record format. With -aa, all files are treated as text files. See also -b and -S. Support for line-ending conversion for text files may be removed in some future UnZipSFX version, because the creator of a self- ectracting archive should easily be able to ensure that text files have the appropriate characteristics for the SFX target system (and expecting the SFX user to specify the appropriate option is unreliable). ASCII-EBCDIC conversion must continue to be supported, because the ZIP archive format implies ASCII stor- age of text files. -b --binary [Tandem, VMS] Selects the file record format used when extract- ing binary files. -b may conflict or interact with -a in dif- ferent ways on different system types. -b is ignored on systems other than Tandem and VMS. Zip (or a similar archiving program) identifies files as "binary" or "text" when they are archived. (A short-format Zip- Info report denotes a binary file with a "b", and a text file with a "t".) [Tandem] Force the creation files with filecode type 180 ('C') when extracting archive members marked as "text". (On Tandem, -a is enabled by default, see above). [VMS] On VMS, for archives with VMS attribute information (made with "zip -V" or "ZIP /VMS"), files are always created with their original record formats. For archives without VMS attribute information (not made with "zip -V" or "ZIP /VMS"), files are normally created with Stream_LF record format. With -b, binary files are created with fixed-length, 512-byte record format. With -bb, all files are treated as binary files. When extracting to standard output (-c or -p option in effect), the default conversion of text record delimiters is disabled for binary files (with -b), or for all files (with -bb). -C --ignore-case ([CMS, MVS] --CMS-MVS-lower) Use case-insensitive name matching for file names in the file list and the -x excluded-file list on the command line. By default, case-sensitive matching is done. For example, specify- ing "makefile" on the command line will match only "makefile" in the archive, not "Makefile" or "MAKEFILE". On many systems, the local file system is case-insensitive, so case-insensitive name matching would be more natural. With -C, "makefile" would match "makefile", "Makefile", or "MAKEFILE". -C does not affect the matching of archive members to existing files on the extraction path. So, on a case-sensitive file sys- tem, UnZipSFX will never try to overwrite a file "FOO" when extracting a member named "foo"! -c --to-stdout Primary Mode. Extract files to stdout/screen. For details, see Primary Mode options. -D --dir-timestamps Control timestamps on extracted files and directories. By default, UnZipSFX restores timestamps for extracted files, but not for directories it creates. Specifying -D tells UnZipSFX not to restore any timestamps. Specifying -D- tells UnZipSFX to restore timestamps for directories as well as other items. -D- works only on systems that support setting timestamps for direc- tories (currently ATheOS, BeOS, MacOS, OS/2, Unix, VMS, Win32). On other systems, -D- has no effect. [Non-VMS] Timestamp restoration behavior changed between UnZip versions 6.00 and 6.1. The following table shows the effects of various -D options for both versions. UnZip version | 6.00 | 6.1 | Restore timestamps on: -----------+-----------+------------------------ -DD | -D | Nothing. -D | (default) | Files, not directories. (default) | -D- | Files and directories. [VMS] The old behavior on VMS was the same as the new behavior on all systems. (The old negated --D option is now -D-, because of changes to the command-line parser.) -d dest_dir --extract-dir dest_dir Specifies a destination directory for extracted files. By default, files are extracted (and subdirectories created) in the current directory. With -d dest_dir, extraction is done into the specified directory, instead. The option and directory may be concatenated without any white space between them, but this may cause normal shell behavior to be suppressed. For example, "-d ~" (tilde) is expanded by Unix shells into the name of the user's home directory, but "-d~" is treated as a literal "~" subdirectory of the current directory. [VMS] On VMS, only a VMS-style device:[directory] specification is permitted. This option may be disabled at build time in UnZipSFX. -F --keep-nfs [Acorn] Suppress removal of NFS filetype extension from stored filenames. [non-Acorn systems supporting long filenames with embedded com- mas, and only if compiled with ACORN_FTYPE_NFS defined] Trans- late filetype information from ACORN RISC OS extra field blocks into a NFS filetype extension and append it to the names of the extracted files. (When the stored filename appears already to have an appended NFS filetype extension, it is replaced by the info from the extra field.) -f --freshen Primary Mode. Freshen existing files. For details, see Primary Mode options. -I char_set --iso-char-set char_set [Unix] Select ISO character set char_set. -J --junk-attrs [BeOS] Junk file attributes. The file's BeOS file attributes are not restored, only the file's data. [MacOS] Ignore MacOS extra fields. All Macintosh-specific info is skipped. AppleDouble files are restored as separate files. -j[=depth] --junk-dirs[=depth] Junk directories. With -j, all directory information is stripped from an archive member name, so all files are extracted into the destination directory. (See also -d.) If a depth (=depth, where depth is a positive integer) is speci- fied, then that number of directory levels will be stripped from an archive member name. For example, an archive member like "a/b/c/d/ee.txt" would normally be extracted as "a/b/c/d/ee.txt". With -j, it would be extracted as "ee.txt". With -j=2, the first two directory levels would be stripped, so it would be extracted as "c/d/ee.txt". --jar Treat archive(s) as Java JAR. Over-simplification in Java JAR archives can cause UnZipSFX to transform UTF-8 file names according to inappro- priate (MS-DOS) rules, yielding corrupt names on extracted files (typi- cally those with character codes 128-255). Archives containing a Java "CAFE" extra field should be detected automatically, and handled cor- rectly, but not all JAR archives include that extra field. Specifying --jar tells UnZipSFX to expect UTF-8 file names, regardless of whether the archive contains a "CAFE" extra field. -k --keep-permissions [AtheOS, BeOS, Unix, VMS] Control how archived permissions or protections are restored on extracted files and directories. By default, archived permissions are restored with some limita- tions. On AtheOS, BeOS, and Unix, the current umask value is applied (to the normal user/group/other permissions). On VMS, the current default protection is applied to the UIC-based (SOGW) protections. With -k, the archived permissions are restored without regard to the Unix umask or VMS default protection. (This was the default behavior in UnZip versions before 6.1.) With -k-, the archived permissions are ignored, so only the Unix umask or VMS default protection is effective. (On VMS, directo- ries are always created without any Delete access.) On AtheOS, BeOS, and Unix, the SUID/SGID/Tacky permission bits are controlled by the -K/--keep-s-attrs option, regardless of the -k/--keep-permissions setting. -ka --keep-acl [VMS] Restore ACLs on extracted files and directories. -L --lowercase-names Convert to lowercase any filename originating on an uppercase- only operating system or file system. (This was UnZipSFX's default behavior in versions before 5.11. The current default behavior is the same as the old behavior with the -U option. -U is now used for another purpose.) Depending on the archiver, files archived from single-case file systems (old MS-DOS FAT, VMS ODS2, and so on) may be stored as all-uppercase names; this can be ugly or inconvenient when extracting to a case-preserving file system such as OS/2 HPFS or a case-sensitive one such as on Unix. By default, UnZipSFX lists and extracts such filenames exactly as they're stored (excepting truncation, conversion of unsupported characters, an so on). With -L, the names of all files from certain systems will be converted to lowercase. With -LL, all file names will be down-cased, regardless of the originating file system. -M [CMS,MVS] Or: -m) --more Pipe all output through an internal pager similar to the Unix more(1) command. At the end of a screenful of output, UnZipSFX pauses with a "--More--" prompt; the next screenful may be viewed by pressing the Enter/Return key or the space bar. UnZipSFX can be terminated by pressing the "Q" key and, on some systems, the Enter/Return key. Unlike Unix more(1), there is no forward-searching or editing capability. Also, UnZipSFX doesn't notice if long lines wrap at the edge of the screen, effectively resulting in the printing of two or more lines and the likeli- hood that some text will scroll off the top of the screen before being viewed. If the actual number of lines on the screen can not be determined, 24 lines will be assumed. -n --never-overwrite When extracting, never overwrite existing files. If a file already exists, then skip the extraction of that file without asking. See also -o (--overwrite). By default, UnZipSFX queries the user before extracting any file that already exists. The user may choose to overwrite only the current file, overwrite all files, skip extraction of the cur- rent file, skip extraction of all existing files, or rename the current file (choose a new name for the extracted file). [VMS] On VMS, the usual query choices are to create a new ver- sion of an existing file, to skip extraction, or to rename the current file. In the case where an archive member name includes a version number, and -V ("retain VMS file version numbers") is in effect, then an additional query choice is offered: to over- write the existing file. -O char_set --oem-char-set char_set [Unix] Select OEM character set char_set. -o --overwrite When extracting, always overwrite existing files without prompt- ing. This is a dangerous option, so use it with care. (It is often used with -f, however, and is the only way to overwrite directory EAs on OS/2.) See also -n (--never-overwrite). By default, UnZipSFX queries the user before extracting any file that already exists. [Non-VMS] On non-VMS systems, the user may choose to overwrite only the current file, overwrite all files, skip extraction of the current file, skip extraction of all existing files, or rename the current file (choose a new name for the extracted file). [VMS] On VMS, the usual query choices are to create a new ver- sion of an existing file, to skip extraction, or to rename the current file. In the case where an archive member name includes a version number, and -V ("retain VMS file version numbers") is in effect, then an additional query choice is offered: to over- write the existing file. In this case, -o selects the "new ver- sion" choice, and -oo (or: -o -o) selects the "overwrite" choice. -P password --password password [CRYPT_AES_WG, CRYPT_TRAD] -P ("--password") is valid only if encryption support was enabled at build-time for the UnZipSFX program. Use password to decrypt encrypted archive members (if any). THIS IS INSECURE! Many multi-user operating systems provide ways for any user to see the current command line of any other user. Even on stand-alone systems, there is always the threat of over-the-shoulder peeking. Storing the plaintext password as part of a command line in an automated script can be even less secure, Whenever possible, use the non-echoing, interactive prompt to enter passwords. Where security is truly important, use a strong encryption method, such as AES, instead of the rel- atively weak encryption provided by Traditional ZIP encryption. Or, use an external encryption program, such as GnuPG, before archiving the file. (Note that Zip will probably not be able to do significant compression on a file which has already been encrypted.) -p --pipe-to-stdout Primary Mode. Extract files to stdout (pipe). For details, see Primary Mode options. -q --quiet Perform operations quietly. (-qq: even more quietly). By default, UnZipSFX prints the names of the files it's extracting or testing, the extraction methods, any member or archive com- ments that may be stored in the archive, and possibly a summary when finished with each archive. The -q[q] options suppress the printing of some or all of these messages. -r --remove-exts [Tandem] Remove file extensions. -S --stream_lf [VMS] Use Stream_LF record format when converting extracted text files (-a, -aa), instead of the text-file default, variable- length record format. [VMS] On VMS, for archives with VMS attribute information (made with "zip -V"), files are always created with their original record formats. For archives without VMS attribute information (not made with "zip -V"), all files are normally created with Stream_LF record format. With -a, text files are normally cre- ated with variable-length record format, but adding -S gives them Stream_LF record format. With -aa, all files are treated as text files. See also -a and -b. -s --space_to_uscore Convert spaces in filenames to underscores. Normally, on a sys- tem which allows spaces in filenames, UnZipSFX extracts file- names with spaces intact (for example, "EA DATA. SF"). Working with such file names can be awkward, however, so -s can be used to replace spaces with underscores. -t --test Primary Mode. Test archive members. For details, see Primary Mode options. -U --unicode [UNICODE_SUPPORT] Control UTF-8 handling. When UNICODE_SUPPORT is available, -U forces UnZipSFX to escape all non-ASCII charac- ters from UTF-8 coded filenames as "#Uxxxx' (for UCS-2 charac- ters, or "#Lxxxxxx" for Unicode codepoints needing 3 octets). This option is provided mainly for debugging, when the fairly new UTF-8 support is suspected of mangling extracted filenames. -UU disables the recognition of UTF-8 encoded filenames. The handling of filename codings within UnZipSFX falls back to the behavior of pre-Unicode versions. [old, obsolete usage] Leave filenames uppercase if created on MS-DOS, VMS, and so on. See -L. -u --update Primary mode. Update existing files and create new ones if needed. For details, see Primary Mode options. -V --keep-versions [Non-CMS-MVS] Retain VMS file version numbers. VMS files can be stored with a version number, in the format file.type;##, where "##" is a positive decimal number. By default, the ";##" version numbers are stripped, but this option allows them to be retained. (On file systems that limit filenames to particularly short lengths, the version numbers may be truncated or stripped regardless of this option.) [Non-VMS] Note that before UnZip version 6.1, on a non-VMS sys- tem, a file with a name like "fred;123" would, by default, be extracted as "fred", even if the file did not originate on a VMS system (so that ";123" was probably not really a VMS version number). Beginning with UnZip version 6.1, the default behavior is to strip VMS version numbers only from files which were archived on a VMS system. To restore the old behavior, and always strip apparent VMS version numbers, explicitly negate the option: -V-. [VMS] Note that on VMS, -V affects only version numbers, and is not needed to restore VMS file attributes. Zip's -V (/VMS) option is required to store VMS attributes in an archive. If that was done when an archive was created, then UnZipSFX will always restore those attributes when a file is extracted. -W --wild-no-span [WILD_STOP_AT_DIR] (Valid when the program was built with the C macro WILD_STOP_AT_DIR defined.) By default, the wildcard char- acters "?" (single-character wildcard) and "*" (multi-character wildcard) match any character in a member path/name. "-W" modi- fies the pattern-matching behavior for archive members so that both "?" (single-character wildcard) and "*" (multi-character wildcard) do not match the directory separator character "/". (The two-character sequence "**" acts as a multi-character wild- card that includes the directory separator in its matched char- acters.) For example, with "-W": "*.c" matches "foo.c" but not "mydir/foo.c" "**.c" matches both "foo.c" and "mydir/foo.c" "*/*.c" matches "bar/foo.c" but not "baz/bar/foo.c" "??*/*" matches "ab/foo" and "abc/foo" but not "a/foo" or "a/b/foo" This modified behavior is equivalent to the pattern matching style used by the shells of some of UnZipSFX's supported target OSs (one example is Acorn RISC OS). This option may not be available on systems where the Zip archive's internal directory separator character "/" is allowed as regular character in native operating system filenames. [non-VMS] Currently, UnZipSFX uses the same pattern matching rules for both wildcard archive file name specifications and ar- chive member selection patterns on most system types. For sys- tems allowing "/" as regular filename character, the -W option would not work as expected on a wildcard file name specifica- tion. -X --restore-info [VMS, Unix, OS/2, NT, Tandem] Restore owner info (UIC on VMS, or user and group info (UID/GID) on Unix, or access control lists (ACLs) on certain network-enabled versions of OS/2 (Warp Server with IBM LAN Server/Requester 3.0 to 5.0; Warp Connect with IBM Peer 1.0), or security ACLs on Windows NT.) In most cases this will require special system privileges, and doubling the option (-XX) on NT instructs UnZipSFX to use privileges for extraction; but on Unix, for example, a user who belongs to several groups can restore files owned by any of those groups, so long as the user IDs match the user's own. Note that ordinary file attributes are always restored. This option applies only to optional, extra ownership info available on some operating sys- tems. (NT's access control lists do not appear to be especially compatible with OS/2's, so no attempt is made at cross-platform portability of access privileges. It is not clear under which conditions this would ever be useful anyway.) -x member ... --exclude member ... An optional list of archive members to be excluded from process- ing. Because wildcard characters normally match "/" directory separators (for exceptions, see the option -W), this option may be used to exclude any files that are in subdirectories. For example, "unzip foo *.[ch] -x */*" would extract all C source files (*.c, *.h) in the main directory, but none in any subdi- rectories. Without the -x option, all C source files in all directories in the archive would be extracted. When the program sees -x (--exclude) on a command line, it stops scanning for options, and treats every succeeding item as an ar- chive member name. To avoid any confusion between member names and command options, it's simplest to specify -x (--exclude mem- ber) and its member list as the last items on a command line. Alternatively, the special name "@" can be used to terminate the member list (and cause the program to resume scanning for options). That is, for example, the following two commands are equivalent: example_sfx -b -x file1 file2 file3 example_sfx -x file1 file2 file3 @ -b -Y --dot-version [VMS] Treat archive member name endings of ".nnn" (where "nnn" is a decimal number) as if they were VMS version numbers (";nnn"). (The default is to treat them as file types.) For example: "a.b.3" -> "a.b;3" -z --zipfile-comment Primary mode. Display only the archive comment. For details, see Primary Mode options. -$ --volume-labels [MS-DOS, NT, OS/2, VMS] Restore the volume label if the extrac- tion medium is removable (for example, a diskette). Doubling the option (-$$) allows fixed media (hard disks) to be labeled as well. By default, volume labels are ignored. [VMS] On VMS, a volume must be allocated, not shared, for a vol- ume label to be set. -/ --extensions [Acorn] Overrides the extension list supplied by the Unzip$Ext environment variable. During extraction, filename extensions that match one of the items in this extension list are swapped in front of the base name of the extracted file. -: --do-double-dots [all but Acorn, VM/CMS, MVS, Tandem] Allows UnZipSFX to extract archive members into locations outside of the current extraction destination directory (and its subdirectories). For security reasons, UnZipSFX normally removes "parent direc- tory" path components ("../") from the path names of archive members as they are extracted. This safety feature (new for version 5.50) prevents UnZipSFX from accidentally writing files to directories outside the current destination directory tree. The -: option sets UnZipSFX back to its previous, more liberal behavior, allowing exact extraction of archives that use "../" path components to create multiple directory trees at or above the level of the destination directory. This option does not enable writing explicitly to the root directory ("/"). To achieve this, it is necessary to set the extraction target folder to "/" (by using an option like "-d /"). However, when the -: option is specified, it is still possible implicitly to write to the root directory if member paths specifying enough "../" path components. Use this option with extreme caution. -^ --control-in-name [Unix] Allow control characters in file names of extracted ZIP archive members. On Unix, a file name may contain any (8-bit) character code with the two exceptions of "/" (the directory delimiter) and NUL (0x00, the C string-termination character), unless the specific file system has more restrictive conven- tions. Generally, this allows embedding ASCII control charac- ters or escape sequences in file names. However, this feature allows the use of malicious file names which can cause various kinds of bad trouble when displayed on a user's terminal/emula- tor. (Even a file name with unprintable but otherwise harmless characters can cause problems for users.) For these reasons, by default, UnZipSFX applies a filter that removes potentially dangerous control characters from the extracted file names. The -^ option overrides this filter in the rare case that embedded filename dangerous control charac- ters are to be intentionally restored. ENVIRONMENT OPTIONS UnZipSFX uses the same environment variables as UnZip does, although this is more likely to affect the person creating and testing a self- extracting archive than it is the SFX user. For details, see the unzip manual page. ENCRYPTION/DECRYPTION UnZipSFX supports the same encryption methods as UnZip, but encryption support in UnZipSFX must be explicitly enabled at build time. For details, see the UnZip installation instructions (INSTALL). AUTORUN COMMAND When UnZipSFX is built with CHEAP_SFX_AUTORUN defined, a simple "com- mand autorun" feature is enabled. The command to be run is placed at the beginning of the Zip archive comment, using the following format: $AUTORUN$>command-to-be-run When UnZipSFX recognizes the token "$AUTORUN$>" 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. For safety, when the user has switched off prompting by specifying the -q option, an autorun command is not exe- cuted. If the archive comment contains additional lines of text, then those additional comment lines are displayed normally, unless quiet operation was requested using a -q option. EXAMPLES On Unix, the following commands create a self-extracting archive (exam- ple_sfx) from an ordinary archive (example.zip), adjust the offsets in the resulting SFX archive, and change the permissions on the new SFX archive's to allow execution by everyone: cat /usr/local/bin/unzipsfx example.zip > example_sfx zip -A example_sfx chmod 755 example_sfx We assume that the desired UnZipSFX executable is found at "/usr/local/bin/unzipsfx", but any path to the desired UnZipSFX exe- cutable is ok. On MS-DOS, OS/2, or Windows, the following commands create a similar SFX archive. (Note the use of the /b (binary) option in the COPY com- mand.): copy /b unzipsfx.exe+example.zip example_sfx.exe zip -A example_sfx.exe If the desired UnZipSFX executable is not in the current directory, then an appropriate path should be specified for it. On VMS the basic commands look like these: copy unzipsfx.exe, example.zip example_sfx.exe zip -A example_sfx.exe If the desired UnZipSFX executable is not in the current default direc- tory, then an appropriate path should be specified for it. (The VMS APPEND command could be used instead of COPY.) A slightly more elaborate DCL script to do this job is included in the UnZip source kit: [.vms]makesfx.com. It uses a DCL symbol to find the UnZipSFX executable. Comments in the script explain its usage. @ makesfx.com example.zip example_sfx.exe As usual on VMS, if a program like an UnZipSFX bundle is to be executed without options or arguments, then the RUN command may be used. For example: run example_sfx.exe More work is needed when options or arguments are desired. For exam- ple: mcr sys$disk:[]example_sfx.exe -t -x fred.txt Or, define a foreign-command DCL symbol, and use that: example_sfx = "$ ''f$environment( "default")'example_sfx.exe" example_sfx -t -x fred.txt On AmigaDOS: MakeSFX example example.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, use -t: example_sfx -t To test "example_sfx" quietly, printing only a summary message indicat- ing whether the archive is OK or not, use -tqq: example_sfx -tqq To extract the complete contents into the current directory, recreating all files and subdirectories as necessary: example_sfx To extract all *.txt files: example_sfx *.txt On Unix, quote the "*": example_sfx '*.txt' To extract everything except the *.txt files: example_sfx -x *.txt or: example_sfx -x '*.txt' To extract only the README file to standard output (the screen): example_sfx -c README To print only the archive comment: example_sfx -z LIMITATIONS The principal and fundamental limitation of UnZipSFX is that it is not generally portable from one operating system or hardware architecture to another. Therefore, neither are the resulting SFX archives, as self-extracting archives. The ZIP archive within a self-extracting ar- chive bundle can always be processed anywhere using a normal UnZip pro- gram, even where the UnZipSFX program in the bundle can't do the job. At worst, UnZip will emit a warning like "nnnn extra bytes at beginning or within zipfile", but using "zip -A" on an SFX bundle will prevent even that annoyance. (UnZipSFX itself does not emit the "extra bytes" warning, even if the "zip -A" adjustment is not done.) Strictly speaking, until "zip -A" is used to adjust the offsets within the UnZipSFX+archive bundle, that bundle is not a valid ZIP archive, because the offsets in it are wrong. Info-ZIP UnZip can still work with it (emitting that "extra bytes" warning mentioned above), but some other unzipping program might have more trouble with it. After the "zip -A" offset adjustment has been done, any unzipping program should be able to work with the resulting SFX bundle. To do its work, the UnZipSFx program in a self-extracting archive must open and read the self-extracting archive file itself. (It's not enough that the shell can find it. It must be able to find itself.) UnZipSFX has no knowledge of the user's PATH, so, in general, a self- extracting archive must either be in the current directory when it is invoked (and "." must be on the user's PATH), or else some explicit (absolute or relative) path must be specified. For example: # example_sfx -t # Fails if "." is not on PATH. bash: example_sfx: command not found # ./example_sfx -t # Works. or: mkdir sandbox cd sandbox ../example_sfx If a user runs a self-extracting archive which is found in a directory on the PATH other than the current one ("."), then UnZipSFX may fail with a fatal error: "cannot find myself!". This is always true on Unix, and may be true in some cases under MS-DOS, depending on the com- piler used. (Microsoft C may fully qualify the program name, but other compilers may not.) Under OS/2 and NT there are operating-system func- tions available that provide the full path name, so the archive may be invoked from anywhere in the user's path. On VMS, this problem never arises, because the program always sees an absolute path to itself, even when DCL$PATH is used. (The situation is unknown for more obscure operating systems: AmigaDOS, Atari TOS, and so on. Reports are wel- come.) As explained above, some normal UnZip features are omitted from UnZipSFX to make it smaller. The diagnostic (-v) and listing (-l) fea- tures are always omitted. Optional compression methods (bzip2, LZMA, PPMd) and any encryption methods (Traditional, AES_WG) are omitted by default, but may be enabled when UnZipSFX is built. For details, see the installation instructions (INSTALL). UnZipSFX on the Amiga requires the use of a special program, MakeSFX, 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. EXIT STATUS The possible exit status values from UnZipSFX are the same as those for UnZipSFX. See the unzip manual page for details. ATTRIBUTES See attributes(7) for descriptions of the following attributes: +---------------+------------------+ |ATTRIBUTE TYPE | ATTRIBUTE VALUE | +---------------+------------------+ |Availability | compress/unzip | +---------------+------------------+ |Stability | Volatile | +---------------+------------------+ SEE ALSO funzip(1L), unzip(1L), zip(1L), zipcloak(1L), zipgrep(1L), zipinfo(1L), zipnote(1L), zipsplit(1L) URL The Info-ZIP main Web page is: http://www.info-zip.org/ FTP access is available, too: ftp://ftp.info-zip.org/pub/infozip/ AUTHORS Greg Roelofs was responsible for the basic modifications to UnZip nec- essary to create UnZipSFX. See unzip(1L) for the current list of Info- ZIP authors. NOTES Source code for open source software components in Oracle Solaris can be found at https://www.oracle.com/downloads/opensource/solaris-source- code-downloads.html. This software was built from source available at https://github.com/oracle/solaris-userland. The original community source was downloaded from http://antinode.info/ftp/info- zip/unzip610c25.zip. Further information about this software can be found on the open source community website at http://www.info-zip.org/UnZip.html. Info-ZIP 15 Apr 2015 (v6.1) UNZIPSFX(1)