|
- /*
- Copyright (c) 1990-2009 Info-ZIP. All rights reserved.
-
- See the accompanying file LICENSE, version 2009-Jan-02 or later
- (the contents of which are also included in unzip.h) for terms of use.
- If, for some reason, all these files are missing, the Info-ZIP license
- also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
- */
- /*---------------------------------------------------------------------------
-
- unzip.c
-
- UnZip - a zipfile extraction utility. See below for make instructions, or
- read the comments in Makefile and the various Contents files for more de-
- tailed explanations. To report a bug, submit a *complete* description via
- //www.info-zip.org/zip-bug.html; include machine type, operating system and
- version, compiler and version, and reasonably detailed error messages or
- problem report. To join Info-ZIP, see the instructions in README.
-
- UnZip 5.x is a greatly expanded and partially rewritten successor to 4.x,
- which in turn was almost a complete rewrite of version 3.x. For a detailed
- revision history, see UnzpHist.zip at quest.jpl.nasa.gov. For a list of
- the many (near infinite) contributors, see "CONTRIBS" in the UnZip source
- distribution.
-
- UnZip 6.0 adds support for archives larger than 4 GiB using the Zip64
- extensions as well as support for Unicode information embedded per the
- latest zip standard additions.
-
- ---------------------------------------------------------------------------
-
- [from original zipinfo.c]
-
- This program reads great gobs of totally nifty information, including the
- central directory stuff, from ZIP archives ("zipfiles" for short). It
- started as just a testbed for fooling with zipfiles, but at this point it
- is actually a useful utility. It also became the basis for the rewrite of
- UnZip (3.16 -> 4.0), using the central directory for processing rather than
- the individual (local) file headers.
-
- As of ZipInfo v2.0 and UnZip v5.1, the two programs are combined into one.
- If the executable is named "unzip" (or "unzip.exe", depending), it behaves
- like UnZip by default; if it is named "zipinfo" or "ii", it behaves like
- ZipInfo. The ZipInfo behavior may also be triggered by use of unzip's -Z
- option; for example, "unzip -Z [zipinfo_options] archive.zip".
-
- Another dandy product from your buddies at Newtware!
-
- Author: Greg Roelofs, newt@pobox.com, http://pobox.com/~newt/
- 23 August 1990 -> April 1997
-
- ---------------------------------------------------------------------------
-
- Version: unzip5??.{tar.Z | tar.gz | zip} for Unix, VMS, OS/2, MS-DOS, Amiga,
- Atari, Windows 3.x/95/NT/CE, Macintosh, Human68K, Acorn RISC OS,
- AtheOS, BeOS, SMS/QDOS, VM/CMS, MVS, AOS/VS, Tandem NSK, Theos
- and TOPS-20.
-
- Copyrights: see accompanying file "LICENSE" in UnZip source distribution.
- (This software is free but NOT IN THE PUBLIC DOMAIN.)
-
- ---------------------------------------------------------------------------*/
-
-
-
- #define __UNZIP_C /* identifies this source module */
- #define UNZIP_INTERNAL
- #include "unzip.h" /* includes, typedefs, macros, prototypes, etc. */
- #include "crypt.h"
- #include "unzvers.h"
-
- #include "unzipfx/appDetails.h"
-
- #ifndef WINDLL /* The WINDLL port uses windll/windll.c instead... */
-
- /***************************/
- /* Local type declarations */
- /***************************/
-
- #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
- typedef struct _sign_info
- {
- struct _sign_info *previous;
- void (*sighandler)(int);
- int sigtype;
- } savsigs_info;
- #endif
-
- /*******************/
- /* Local Functions */
- /*******************/
-
- #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
- static int setsignalhandler OF((__GPRO__ savsigs_info **p_savedhandler_chain,
- int signal_type, void (*newhandler)(int)));
- #endif
- #ifndef SFX
- static void help_extended OF((__GPRO));
- static void show_version_info OF((__GPRO));
- #endif
-
-
- /*************/
- /* Constants */
- /*************/
-
- #include "consts.h" /* all constant global variables are in here */
- /* (non-constant globals were moved to globals.c) */
-
- /* constant local variables: */
-
- #ifndef SFX
- #ifndef _WIN32_WCE /* Win CE does not support environment variables */
- static ZCONST char Far EnvUnZip[] = ENV_UNZIP;
- static ZCONST char Far EnvUnZip2[] = ENV_UNZIP2;
- static ZCONST char Far EnvZipInfo[] = ENV_ZIPINFO;
- static ZCONST char Far EnvZipInfo2[] = ENV_ZIPINFO2;
- #ifdef RISCOS
- static ZCONST char Far EnvUnZipExts[] = ENV_UNZIPEXTS;
- #endif /* RISCOS */
- static ZCONST char Far NoMemEnvArguments[] =
- "envargs: cannot get memory for arguments";
- #endif /* !_WIN32_WCE */
- static ZCONST char Far CmdLineParamTooLong[] =
- "error: command line parameter #%d exceeds internal size limit\n";
- #endif /* !SFX */
-
- #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
- static ZCONST char Far CantSaveSigHandler[] =
- "error: cannot save signal handler settings\n";
- #endif
-
- #if (!defined(SFX) || defined(SFX_EXDIR))
- static ZCONST char Far NotExtracting[] =
- "caution: not extracting; -d ignored\n";
- static ZCONST char Far MustGiveExdir[] =
- "error: must specify directory to which to extract with -d option\n";
- static ZCONST char Far OnlyOneExdir[] =
- "error: -d option used more than once (only one exdir allowed)\n";
- #endif
- #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR))
- static ZCONST char Far UTF8EscapeUnSupp[] =
- "warning: -U \"escape all non-ASCII UTF-8 chars\" is not supported\n";
- #endif
-
- #if CRYPT
- static ZCONST char Far MustGivePasswd[] =
- "error: must give decryption password with -P option\n";
- #endif
-
- #ifndef SFX
- static ZCONST char Far Zfirst[] =
- "error: -Z must be first option for ZipInfo mode (check UNZIP variable?)\n";
- #endif
- static ZCONST char Far InvalidOptionsMsg[] = "error:\
- -fn or any combination of -c, -l, -p, -t, -u and -v options invalid\n";
- static ZCONST char Far IgnoreOOptionMsg[] =
- "caution: both -n and -o specified; ignoring -o\n";
-
- /* usage() strings */
- #ifndef SFX
- #ifdef VMS
- static ZCONST char Far Example3[] = "vms.c";
- static ZCONST char Far Example2[] = " unzip \"-V\" foo \"Bar\"\
- (Quote names to preserve case, unless SET PROC/PARS=EXT)\n";
- #else /* !VMS */
- static ZCONST char Far Example3[] = "ReadMe";
- #ifdef RISCOS
- static ZCONST char Far Example2[] =
- " unzip foo -d RAM:$ => extract all files from foo into RAMDisc\n";
- #else /* !RISCOS */
- #if (defined(OS2) || (defined(DOS_FLX_OS2_W32) && defined(MORE)))
- static ZCONST char Far Example2[] =
- ""; /* no room: too many local3[] items */
- #else /* !OS2 */
- #ifdef MACOS
- static ZCONST char Far Example2[] = ""; /* not needed */
- #else /* !MACOS */
- static ZCONST char Far Example2[] = " \
- unzip -p foo | more => send contents of foo.zip via pipe into program more\n";
- #endif /* ?MACOS */
- #endif /* ?OS2 */
- #endif /* ?RISCOS */
- #endif /* ?VMS */
-
- /* local1[]: command options */
- #if defined(TIMESTAMP)
- static ZCONST char Far local1[] =
- " -T timestamp archive to latest";
- #else /* !TIMESTAMP */
- static ZCONST char Far local1[] = "";
- #endif /* ?TIMESTAMP */
-
- /* local2[] and local3[]: modifier options */
- #ifdef DOS_FLX_H68_OS2_W32
- #ifdef FLEXOS
- static ZCONST char Far local2[] = "";
- #else
- static ZCONST char Far local2[] =
- " -$ label removables (-$$ => fixed disks)";
- #endif
- #ifdef OS2
- #ifdef MORE
- static ZCONST char Far local3[] = "\
- -X restore ACLs if supported -s spaces in filenames => '_'\n\
- -M pipe through \"more\" pager\n";
- #else
- static ZCONST char Far local3[] = " \
- -X restore ACLs if supported -s spaces in filenames => '_'\n\n";
- #endif /* ?MORE */
- #else /* !OS2 */
- #ifdef WIN32
- #ifdef NTSD_EAS
- #ifdef MORE
- static ZCONST char Far local3[] = "\
- -X restore ACLs (-XX => use privileges) -s spaces in filenames => '_'\n\
- -M pipe through \"more\" pager\n";
- #else
- static ZCONST char Far local3[] = " \
- -X restore ACLs (-XX => use privileges) -s spaces in filenames => '_'\n\n";
- #endif /* ?MORE */
- #else /* !NTSD_EAS */
- #ifdef MORE
- static ZCONST char Far local3[] = "\
- -M pipe through \"more\" pager \
- -s spaces in filenames => '_'\n\n";
- #else
- static ZCONST char Far local3[] = " \
- -s spaces in filenames => '_'\n\n";
- #endif /* ?MORE */
- #endif /* ?NTSD_EAS */
- #else /* !WIN32 */
- #ifdef MORE
- static ZCONST char Far local3[] = " -\
- M pipe through \"more\" pager -s spaces in filenames => '_'\n\n";
- #else
- static ZCONST char Far local3[] = "\
- -s spaces in filenames => '_'\n";
- #endif
- #endif /* ?WIN32 */
- #endif /* ?OS2 || ?WIN32 */
- #else /* !DOS_FLX_OS2_W32 */
- #ifdef VMS
- static ZCONST char Far local2[] = " -X restore owner/ACL protection info";
- #ifdef MORE
- static ZCONST char Far local3[] = "\
- -Y treat \".nnn\" as \";nnn\" version -2 force ODS2 names\n\
- --D restore dir (-D: no) timestamps -M pipe through \"more\" pager\n\
- (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\
- \n\n";
- #else
- static ZCONST char Far local3[] = "\n\
- -Y treat \".nnn\" as \";nnn\" version -2 force ODS2 names\n\
- --D restore dir (-D: no) timestamps\n\
- (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\
- \n\n";
- #endif
- #else /* !VMS */
- #ifdef ATH_BEO_UNX
- static ZCONST char Far local2[] = " -X restore UID/GID info";
- #ifdef MORE
- static ZCONST char Far local3[] = "\
- -K keep setuid/setgid/tacky permissions -M pipe through \"more\" pager\n";
- #else
- static ZCONST char Far local3[] = "\
- -K keep setuid/setgid/tacky permissions\n";
- #endif
- #else /* !ATH_BEO_UNX */
- #ifdef TANDEM
- static ZCONST char Far local2[] = "\
- -X restore Tandem User ID -r remove file extensions\n\
- -b create 'C' (180) text files ";
- #ifdef MORE
- static ZCONST char Far local3[] = " \
- -M pipe through \"more\" pager\n";
- #else
- static ZCONST char Far local3[] = "\n";
- #endif
- #else /* !TANDEM */
- #ifdef AMIGA
- static ZCONST char Far local2[] = " -N restore comments as filenotes";
- #ifdef MORE
- static ZCONST char Far local3[] = " \
- -M pipe through \"more\" pager\n";
- #else
- static ZCONST char Far local3[] = "\n";
- #endif
- #else /* !AMIGA */
- #ifdef MACOS
- static ZCONST char Far local2[] = " -E show Mac info during extraction";
- static ZCONST char Far local3[] = " \
- -i ignore filenames in mac extra info -J junk (ignore) Mac extra info\n\
- \n";
- #else /* !MACOS */
- #ifdef MORE
- static ZCONST char Far local2[] = " -M pipe through \"more\" pager";
- static ZCONST char Far local3[] = "\n";
- #else
- static ZCONST char Far local2[] = ""; /* Atari, Mac, CMS/MVS etc. */
- static ZCONST char Far local3[] = "";
- #endif
- #endif /* ?MACOS */
- #endif /* ?AMIGA */
- #endif /* ?TANDEM */
- #endif /* ?ATH_BEO_UNX */
- #endif /* ?VMS */
- #endif /* ?DOS_FLX_OS2_W32 */
- #endif /* !SFX */
-
- #ifndef NO_ZIPINFO
- #ifdef VMS
- static ZCONST char Far ZipInfoExample[] = "* or % (e.g., \"*font-%.zip\")";
- #else
- static ZCONST char Far ZipInfoExample[] = "*, ?, [] (e.g., \"[a-j]*.zip\")";
- #endif
-
- static ZCONST char Far ZipInfoUsageLine1[] = "\
- ZipInfo %d.%d%d%s of %s, by Greg Roelofs and the Info-ZIP group.\n\
- \n\
- List name, date/time, attribute, size, compression method, etc., about files\n\
- in list (excluding those in xlist) contained in the specified .zip archive(s).\
- \n\"file[.zip]\" may be a wildcard name containing %s.\n\n\
- usage: zipinfo [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n\
- or: unzip %s-Z%s [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n";
-
- static ZCONST char Far ZipInfoUsageLine2[] = "\nmain\
- listing-format options: -s short Unix \"ls -l\" format (def.)\n\
- -1 filenames ONLY, one per line -m medium Unix \"ls -l\" format\n\
- -2 just filenames but allow -h/-t/-z -l long Unix \"ls -l\" format\n\
- -v verbose, multi-page format\n";
-
- static ZCONST char Far ZipInfoUsageLine3[] = "miscellaneous options:\n\
- -h print header line -t print totals for listed files or for all\n\
- -z print zipfile comment -T print file times in sortable decimal format\
- \n -C be case-insensitive %s\
- -x exclude filenames that follow from listing\n";
- #ifdef MORE
- static ZCONST char Far ZipInfoUsageLine4[] =
- " -M page output through built-in \"more\"\n";
- #else /* !MORE */
- static ZCONST char Far ZipInfoUsageLine4[] = "";
- #endif /* ?MORE */
- #endif /* !NO_ZIPINFO */
-
- #ifdef BETA
- # ifdef VMSCLI
- /* BetaVersion[] is also used in vms/cmdline.c: do not make it static */
- ZCONST char Far BetaVersion[] = "%s\
- THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n";
- # else
- static ZCONST char Far BetaVersion[] = "%s\
- THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n";
- # endif
- #endif
-
- #ifdef SFX
- # ifdef VMSCLI
- /* UnzipSFXBanner[] is also used in vms/cmdline.c: do not make it static */
- ZCONST char Far UnzipSFXBanner[] =
- # else
- static ZCONST char Far UnzipSFXBanner[] =
- # endif
- SFX_APP_BANNER "\n";
- # ifdef SFX_EXDIR
- static ZCONST char Far UnzipSFXOpts[] =
- "Valid options are -tfupcz and -d <exdir>; modifiers are -abjnoqCL%sV%s.\n";
- # else
- static ZCONST char Far UnzipSFXOpts[] =
- "Valid options are -tfupcz; modifiers are -abjnoqCL%sV%s.\n";
- # endif
- #else /* !SFX */
- static ZCONST char Far CompileOptions[] =
- "UnZip special compilation options:\n";
- static ZCONST char Far CompileOptFormat[] = " %s\n";
- #ifndef _WIN32_WCE /* Win CE does not support environment variables */
- static ZCONST char Far EnvOptions[] =
- "\nUnZip and ZipInfo environment options:\n";
- static ZCONST char Far EnvOptFormat[] = "%16s: %.1024s\n";
- #endif
- static ZCONST char Far None[] = "[none]";
- # ifdef ACORN_FTYPE_NFS
- static ZCONST char Far AcornFtypeNFS[] = "ACORN_FTYPE_NFS";
- # endif
- # ifdef ASM_CRC
- static ZCONST char Far AsmCRC[] = "ASM_CRC";
- # endif
- # ifdef ASM_INFLATECODES
- static ZCONST char Far AsmInflateCodes[] = "ASM_INFLATECODES";
- # endif
- # ifdef CHECK_VERSIONS
- static ZCONST char Far Check_Versions[] = "CHECK_VERSIONS";
- # endif
- # ifdef COPYRIGHT_CLEAN
- static ZCONST char Far Copyright_Clean[] =
- "COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)";
- # endif
- # ifdef DEBUG
- static ZCONST char Far UDebug[] = "DEBUG";
- # endif
- # ifdef DEBUG_TIME
- static ZCONST char Far DebugTime[] = "DEBUG_TIME";
- # endif
- # ifdef DLL
- static ZCONST char Far Dll[] = "DLL";
- # endif
- # ifdef DOSWILD
- static ZCONST char Far DosWild[] = "DOSWILD";
- # endif
- # ifdef LZW_CLEAN
- static ZCONST char Far LZW_Clean[] =
- "LZW_CLEAN (PKZIP/Zip 1.x unshrinking method not supported)";
- # endif
- # ifndef MORE
- static ZCONST char Far No_More[] = "NO_MORE";
- # endif
- # ifdef NO_ZIPINFO
- static ZCONST char Far No_ZipInfo[] = "NO_ZIPINFO";
- # endif
- # ifdef NTSD_EAS
- static ZCONST char Far NTSDExtAttrib[] = "NTSD_EAS";
- # endif
- # if defined(WIN32) && defined(NO_W32TIMES_IZFIX)
- static ZCONST char Far W32NoIZTimeFix[] = "NO_W32TIMES_IZFIX";
- # endif
- # ifdef OLD_THEOS_EXTRA
- static ZCONST char Far OldTheosExtra[] =
- "OLD_THEOS_EXTRA (handle also old Theos port extra field)";
- # endif
- # ifdef OS2_EAS
- static ZCONST char Far OS2ExtAttrib[] = "OS2_EAS";
- # endif
- # ifdef QLZIP
- static ZCONST char Far SMSExFldOnUnix[] = "QLZIP";
- # endif
- # ifdef REENTRANT
- static ZCONST char Far Reentrant[] = "REENTRANT";
- # endif
- # ifdef REGARGS
- static ZCONST char Far RegArgs[] = "REGARGS";
- # endif
- # ifdef RETURN_CODES
- static ZCONST char Far Return_Codes[] = "RETURN_CODES";
- # endif
- # ifdef SET_DIR_ATTRIB
- static ZCONST char Far SetDirAttrib[] = "SET_DIR_ATTRIB";
- # endif
- # ifdef SYMLINKS
- static ZCONST char Far SymLinkSupport[] =
- "SYMLINKS (symbolic links supported, if RTL and file system permit)";
- # endif
- # ifdef TIMESTAMP
- static ZCONST char Far TimeStamp[] = "TIMESTAMP";
- # endif
- # ifdef UNIXBACKUP
- static ZCONST char Far UnixBackup[] = "UNIXBACKUP";
- # endif
- # ifdef USE_EF_UT_TIME
- static ZCONST char Far Use_EF_UT_time[] = "USE_EF_UT_TIME";
- # endif
- # ifndef LZW_CLEAN
- static ZCONST char Far Use_Unshrink[] =
- "USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)";
- # endif
- # ifndef COPYRIGHT_CLEAN
- static ZCONST char Far Use_Smith_Code[] =
- "USE_SMITH_CODE (PKZIP 0.9x unreducing method supported)";
- # endif
- # ifdef USE_DEFLATE64
- static ZCONST char Far Use_Deflate64[] =
- "USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)";
- # endif
- # ifdef UNICODE_SUPPORT
- # ifdef UTF8_MAYBE_NATIVE
- # ifdef UNICODE_WCHAR
- /* direct native UTF-8 check AND charset transform via wchar_t */
- static ZCONST char Far Use_Unicode[] =
- "UNICODE_SUPPORT [wide-chars, char coding: %s] (handle UTF-8 paths)";
- # else
- /* direct native UTF-8 check, only */
- static ZCONST char Far Use_Unicode[] =
- "UNICODE_SUPPORT [char coding: %s] (handle UTF-8 paths)";
- # endif
- static ZCONST char Far SysChUTF8[] = "UTF-8";
- static ZCONST char Far SysChOther[] = "other";
- # else /* !UTF8_MAYBE_NATIVE */
- /* charset transform via wchar_t, no native UTF-8 support */
- static ZCONST char Far Use_Unicode[] =
- "UNICODE_SUPPORT [wide-chars] (handle UTF-8 paths)";
- # endif /* ?UTF8_MAYBE_NATIVE */
- # endif /* UNICODE_SUPPORT */
- # ifdef _MBCS
- static ZCONST char Far Have_MBCS_Support[] =
- "MBCS-support (multibyte character support, MB_CUR_MAX = %u)";
- # endif
- # ifdef MULT_VOLUME
- static ZCONST char Far Use_MultiVol[] =
- "MULT_VOLUME (multi-volume archives supported)";
- # endif
- # ifdef LARGE_FILE_SUPPORT
- static ZCONST char Far Use_LFS[] =
- "LARGE_FILE_SUPPORT (large files over 2 GiB supported)";
- # endif
- # ifdef ZIP64_SUPPORT
- static ZCONST char Far Use_Zip64[] =
- "ZIP64_SUPPORT (archives using Zip64 for large files supported)";
- # endif
- # if (defined(__DJGPP__) && (__DJGPP__ >= 2))
- # ifdef USE_DJGPP_ENV
- static ZCONST char Far Use_DJGPP_Env[] = "USE_DJGPP_ENV";
- # endif
- # ifdef USE_DJGPP_GLOB
- static ZCONST char Far Use_DJGPP_Glob[] = "USE_DJGPP_GLOB";
- # endif
- # endif /* __DJGPP__ && (__DJGPP__ >= 2) */
- # ifdef USE_VFAT
- static ZCONST char Far Use_VFAT_support[] = "USE_VFAT";
- # endif
- # ifdef USE_ZLIB
- static ZCONST char Far UseZlib[] =
- "USE_ZLIB (compiled with version %s; using version %s)";
- # endif
- # ifdef USE_BZIP2
- static ZCONST char Far UseBZip2[] =
- "USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version %s)";
- # endif
- # ifdef VMS_TEXT_CONV
- static ZCONST char Far VmsTextConv[] = "VMS_TEXT_CONV";
- # endif
- # ifdef VMSCLI
- static ZCONST char Far VmsCLI[] = "VMSCLI";
- # endif
- # ifdef VMSWILD
- static ZCONST char Far VmsWild[] = "VMSWILD";
- # endif
- # ifdef WILD_STOP_AT_DIR
- static ZCONST char Far WildStopAtDir[] = "WILD_STOP_AT_DIR";
- # endif
- # if CRYPT
- # ifdef PASSWD_FROM_STDIN
- static ZCONST char Far PasswdStdin[] = "PASSWD_FROM_STDIN";
- # endif
- static ZCONST char Far Decryption[] =
- " [decryption, version %d.%d%s of %s]\n";
- static ZCONST char Far CryptDate[] = CR_VERSION_DATE;
- # endif
- # ifndef __RSXNT__
- # ifdef __EMX__
- static ZCONST char Far EnvEMX[] = "EMX";
- static ZCONST char Far EnvEMXOPT[] = "EMXOPT";
- # endif
- # if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2)))
- static ZCONST char Far EnvGO32[] = "GO32";
- static ZCONST char Far EnvGO32TMP[] = "GO32TMP";
- # endif
- # endif /* !__RSXNT__ */
-
- #ifdef VMS
- /* UnzipUsageLine1[] is also used in vms/cmdline.c: do not make it static */
- ZCONST char Far UnzipUsageLine1[] = "\
- UnZip %d.%d%d%s of %s, by Info-ZIP. For more details see: unzip -v.\n\n";
- # ifdef COPYRIGHT_CLEAN
- static ZCONST char Far UnzipUsageLine1v[] = "\
- UnZip %d.%d%d%s of %s, by Info-ZIP. Maintained by C. Spieler. Send\n\
- bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\
- \n\n";
- # else
- static ZCONST char Far UnzipUsageLine1v[] = "\
- UnZip %d.%d%d%s of %s, by Info-ZIP. UnReduce (c) 1989 by S. H. Smith.\n\
- Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\
- \n\n";
- # endif /* ?COPYRIGHT_CLEAN */
- #else /* !VMS */
- # ifdef COPYRIGHT_CLEAN
- static ZCONST char Far UnzipUsageLine1[] = "\
- UnZip %d.%d%d%s of %s, by Info-ZIP. Maintained by C. Spieler. Send\n\
- bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\
- \n\n";
- # else
- static ZCONST char Far UnzipUsageLine1[] = "\
- UnZip %d.%d%d%s of %s, by Info-ZIP. UnReduce (c) 1989 by S. H. Smith.\n\
- Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\
- \n\n";
- # endif /* ?COPYRIGHT_CLEAN */
- # define UnzipUsageLine1v UnzipUsageLine1
- #endif /* ?VMS */
-
- static ZCONST char Far UnzipUsageLine2v[] = "\
- Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;\
- \nsee ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.\
- \n\n";
-
- #ifdef MACOS
- static ZCONST char Far UnzipUsageLine2[] = "\
- Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-d exdir]\n \
- Default action is to extract files in list, to exdir;\n\
- file[.zip] may be a wildcard. %s\n";
- #else /* !MACOS */
- #ifdef VM_CMS
- static ZCONST char Far UnzipUsageLine2[] = "\
- Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d fm]\n \
- Default action is to extract files in list, except those in xlist, to disk fm;\
- \n file[.zip] may be a wildcard. %s\n";
- #else /* !VM_CMS */
- static ZCONST char Far UnzipUsageLine2[] = "\
- Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]\n \
- Default action is to extract files in list, except those in xlist, to exdir;\n\
- file[.zip] may be a wildcard. %s\n";
- #endif /* ?VM_CMS */
- #endif /* ?MACOS */
-
- #ifdef NO_ZIPINFO
- # define ZIPINFO_MODE_OPTION ""
- static ZCONST char Far ZipInfoMode[] =
- "(ZipInfo mode is disabled in this version.)";
- #else
- # define ZIPINFO_MODE_OPTION "[-Z] "
- static ZCONST char Far ZipInfoMode[] =
- "-Z => ZipInfo mode (\"unzip -Z\" for usage).";
- #endif /* ?NO_ZIPINFO */
-
- #ifdef VMS
- static ZCONST char Far VMSusageLine2b[] = "\
- => define foreign command symbol in LOGIN.COM: $ unzip :== $dev:[dir]unzip.exe\
- \n";
- #endif
-
- #ifdef MACOS
- static ZCONST char Far UnzipUsageLine3[] = "\n\
- -d extract files into exdir -l list files (short format)\n\
- -f freshen existing files, create none -t test compressed archive data\n\
- -u update files, create if necessary -z display archive comment only\n\
- -v list verbosely/show version info %s\n";
- #else /* !MACOS */
- #ifdef VM_CMS
- static ZCONST char Far UnzipUsageLine3[] = "\n\
- -p extract files to pipe, no messages -l list files (short format)\n\
- -f freshen existing files, create none -t test compressed archive data\n\
- -u update files, create if necessary -z display archive comment only\n\
- -v list verbosely/show version info %s\n\
- -x exclude files that follow (in xlist) -d extract files onto disk fm\n";
- #else /* !VM_CMS */
- static ZCONST char Far UnzipUsageLine3[] = "\n\
- -p extract files to pipe, no messages -l list files (short format)\n\
- -f freshen existing files, create none -t test compressed archive data\n\
- -u update files, create if necessary -z display archive comment only\n\
- -v list verbosely/show version info %s\n\
- -x exclude files that follow (in xlist) -d extract files into exdir\n";
- #endif /* ?VM_CMS */
- #endif /* ?MACOS */
-
- /* There is not enough space on a standard 80x25 Windows console screen for
- * the additional line advertising the UTF-8 debugging options. This may
- * eventually also be the case for other ports. Probably, the -U option need
- * not be shown on the introductory screen at all. [Chr. Spieler, 2008-02-09]
- *
- * Likely, other advanced options should be moved to an extended help page and
- * the option to list that page put here. [E. Gordon, 2008-3-16]
- */
- #if (defined(UNICODE_SUPPORT) && !defined(WIN32))
- #ifdef VMS
- static ZCONST char Far UnzipUsageLine4[] = "\
- modifiers:\n\
- -n never overwrite or make a new version of an existing file\n\
- -o always make a new version (-oo: overwrite original) of an existing file\n\
- -q quiet mode (-qq => quieter) -a auto-convert any text files\n\
- -j junk paths (do not make directories) -aa treat ALL files as text\n\
- -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields\n\
- -C match filenames case-insensitively -L make (some) names \
- lowercase\n %-42s -V retain VMS version numbers\n%s";
- #else /* !VMS */
- static ZCONST char Far UnzipUsageLine4[] = "\
- modifiers:\n\
- -n never overwrite existing files -q quiet mode (-qq => quieter)\n\
- -o overwrite files WITHOUT prompting -a auto-convert any text files\n\
- -j junk paths (do not make directories) -aa treat ALL files as text\n\
- -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields\n\
- -C match filenames case-insensitively -L make (some) names \
- lowercase\n %-42s -V retain VMS version numbers\n%s";
- #endif /* ?VMS */
- #else /* !UNICODE_SUPPORT */
- #ifdef VMS
- static ZCONST char Far UnzipUsageLine4[] = "\
- modifiers:\n\
- -n never overwrite or make a new version of an existing file\n\
- -o always make a new version (-oo: overwrite original) of an existing file\n\
- -q quiet mode (-qq => quieter) -a auto-convert any text files\n\
- -j junk paths (do not make directories) -aa treat ALL files as text\n\
- -C match filenames case-insensitively -L make (some) names \
- lowercase\n %-42s -V retain VMS version numbers\n%s";
- #else /* !VMS */
- static ZCONST char Far UnzipUsageLine4[] = "\
- modifiers:\n\
- -n never overwrite existing files -q quiet mode (-qq => quieter)\n\
- -o overwrite files WITHOUT prompting -a auto-convert any text files\n\
- -j junk paths (do not make directories) -aa treat ALL files as text\n\
- -C match filenames case-insensitively -L make (some) names \
- lowercase\n %-42s -V retain VMS version numbers\n%s";
- #endif /* ?VMS */
- #endif /* ?UNICODE_SUPPORT */
-
- static ZCONST char Far UnzipUsageLine5[] = "\
- See \"unzip -hh\" or unzip.txt for more help. Examples:\n\
- unzip data1 -x joe => extract all files except joe from zipfile data1.zip\n\
- %s\
- unzip -fo foo %-6s => quietly replace existing %s if archive file newer\n";
- #endif /* ?SFX */
-
-
-
-
-
- /*****************************/
- /* main() / UzpMain() stub */
- /*****************************/
-
- int MAIN(argc, argv) /* return PK-type error code (except under VMS) */
- int argc;
- char *argv[];
- {
- int r;
-
- CONSTRUCTGLOBALS();
- r = unzip(__G__ argc, argv);
- DESTROYGLOBALS();
- RETURN(r);
- }
-
-
-
-
- /*******************************/
- /* Primary UnZip entry point */
- /*******************************/
-
- int unzip(__G__ argc, argv)
- __GDEF
- int argc;
- char *argv[];
- {
- #ifndef NO_ZIPINFO
- char *p;
- #endif
- #if (defined(DOS_FLX_H68_NLM_OS2_W32) || !defined(SFX))
- int i;
- #endif
- int retcode, error=FALSE;
- #ifndef NO_EXCEPT_SIGNALS
- #ifdef REENTRANT
- savsigs_info *oldsighandlers = NULL;
- # define SET_SIGHANDLER(sigtype, newsighandler) \
- if ((retcode = setsignalhandler(__G__ &oldsighandlers, (sigtype), \
- (newsighandler))) > PK_WARN) \
- goto cleanup_and_exit
- #else
- # define SET_SIGHANDLER(sigtype, newsighandler) \
- signal((sigtype), (newsighandler))
- #endif
- #endif /* NO_EXCEPT_SIGNALS */
-
- /* initialize international char support to the current environment */
- SETLOCALE(LC_CTYPE, "");
-
- #ifdef UNICODE_SUPPORT
- /* see if can use UTF-8 Unicode locale */
- # ifdef UTF8_MAYBE_NATIVE
- {
- char *codeset;
- # if !(defined(NO_NL_LANGINFO) || defined(NO_LANGINFO_H))
- /* get the codeset (character set encoding) currently used */
- # include <langinfo.h>
-
- codeset = nl_langinfo(CODESET);
- # else /* NO_NL_LANGINFO || NO_LANGINFO_H */
- /* query the current locale setting for character classification */
- codeset = setlocale(LC_CTYPE, NULL);
- if (codeset != NULL) {
- /* extract the codeset portion of the locale name */
- codeset = strchr(codeset, '.');
- if (codeset != NULL) ++codeset;
- }
- # endif /* ?(NO_NL_LANGINFO || NO_LANGINFO_H) */
- /* is the current codeset UTF-8 ? */
- if ((codeset != NULL) && (strcmp(codeset, "UTF-8") == 0)) {
- /* successfully found UTF-8 char coding */
- G.native_is_utf8 = TRUE;
- } else {
- /* Current codeset is not UTF-8 or cannot be determined. */
- G.native_is_utf8 = FALSE;
- }
- /* Note: At least for UnZip, trying to change the process codeset to
- * UTF-8 does not work. For the example Linux setup of the
- * UnZip maintainer, a successful switch to "en-US.UTF-8"
- * resulted in garbage display of all non-basic ASCII characters.
- */
- }
- # endif /* UTF8_MAYBE_NATIVE */
-
- /* initialize Unicode */
- G.unicode_escape_all = 0;
- G.unicode_mismatch = 0;
-
- G.unipath_version = 0;
- G.unipath_checksum = 0;
- G.unipath_filename = NULL;
- #endif /* UNICODE_SUPPORT */
-
-
- #if (defined(__IBMC__) && defined(__DEBUG_ALLOC__))
- extern void DebugMalloc(void);
-
- atexit(DebugMalloc);
- #endif
-
- #ifdef MALLOC_WORK
- /* The following (rather complex) expression determines the allocation
- size of the decompression work area. It simulates what the
- combined "union" and "struct" declaration of the "static" work
- area reservation achieves automatically at compile time.
- Any decent compiler should evaluate this expression completely at
- compile time and provide constants to the zcalloc() call.
- (For better readability, some subexpressions are encapsulated
- in temporarly defined macros.)
- */
- # define UZ_SLIDE_CHUNK (sizeof(shrint)+sizeof(uch)+sizeof(uch))
- # define UZ_NUMOF_CHUNKS \
- (unsigned)(((WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK > HSIZE) ? \
- (WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK : HSIZE)
- G.area.Slide = (uch *)zcalloc(UZ_NUMOF_CHUNKS, UZ_SLIDE_CHUNK);
- # undef UZ_SLIDE_CHUNK
- # undef UZ_NUMOF_CHUNKS
- G.area.shrink.Parent = (shrint *)G.area.Slide;
- G.area.shrink.value = G.area.Slide + (sizeof(shrint)*(HSIZE));
- G.area.shrink.Stack = G.area.Slide +
- (sizeof(shrint) + sizeof(uch))*(HSIZE);
- #endif
-
- /*---------------------------------------------------------------------------
- Set signal handler for restoring echo, warn of zipfile corruption, etc.
- ---------------------------------------------------------------------------*/
- #ifndef NO_EXCEPT_SIGNALS
- #ifdef SIGINT
- SET_SIGHANDLER(SIGINT, handler);
- #endif
- #ifdef SIGTERM /* some systems really have no SIGTERM */
- SET_SIGHANDLER(SIGTERM, handler);
- #endif
- #if defined(SIGABRT) && !(defined(AMIGA) && defined(__SASC))
- SET_SIGHANDLER(SIGABRT, handler);
- #endif
- #ifdef SIGBREAK
- SET_SIGHANDLER(SIGBREAK, handler);
- #endif
- #ifdef SIGBUS
- SET_SIGHANDLER(SIGBUS, handler);
- #endif
- #ifdef SIGILL
- SET_SIGHANDLER(SIGILL, handler);
- #endif
- #ifdef SIGSEGV
- SET_SIGHANDLER(SIGSEGV, handler);
- #endif
- #endif /* NO_EXCEPT_SIGNALS */
-
- #if (defined(WIN32) && defined(__RSXNT__))
- for (i = 0 ; i < argc; i++) {
- _ISO_INTERN(argv[i]);
- }
- #endif
-
- /*---------------------------------------------------------------------------
- Macintosh initialization code.
- ---------------------------------------------------------------------------*/
-
- #ifdef MACOS
- {
- int a;
-
- for (a = 0; a < 4; ++a)
- G.rghCursor[a] = GetCursor(a+128);
- G.giCursor = 0;
- }
- #endif
-
- /*---------------------------------------------------------------------------
- NetWare initialization code.
- ---------------------------------------------------------------------------*/
-
- #ifdef NLM
- InitUnZipConsole();
- #endif
-
- /*---------------------------------------------------------------------------
- Acorn RISC OS initialization code.
- ---------------------------------------------------------------------------*/
-
- #ifdef RISCOS
- set_prefix();
- #endif
-
- /*---------------------------------------------------------------------------
- Theos initialization code.
- ---------------------------------------------------------------------------*/
-
- #ifdef THEOS
- /* The easiest way found to force creation of libraries when selected
- * members are to be unzipped. Explicitly add libraries names to the
- * arguments list before the first member of the library.
- */
- if (! _setargv(&argc, &argv)) {
- Info(slide, 0x401, ((char *)slide, "cannot process argv\n"));
- retcode = PK_MEM;
- goto cleanup_and_exit;
- }
- #endif
-
- /*---------------------------------------------------------------------------
- Sanity checks. Commentary by Otis B. Driftwood and Fiorello:
-
- D: It's all right. That's in every contract. That's what they
- call a sanity clause.
-
- F: Ha-ha-ha-ha-ha. You can't fool me. There ain't no Sanity
- Claus.
- ---------------------------------------------------------------------------*/
-
- #ifdef DEBUG
- # ifdef LARGE_FILE_SUPPORT
- /* test if we can support large files - 10/6/04 EG */
- if (sizeof(zoff_t) < 8) {
- Info(slide, 0x401, ((char *)slide, "LARGE_FILE_SUPPORT set but not supported\n"));
- retcode = PK_BADERR;
- goto cleanup_and_exit;
- }
- /* test if we can show 64-bit values */
- {
- zoff_t z = ~(zoff_t)0; /* z should be all 1s now */
- char *sz;
-
- sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X");
- if ((sz[0] != 'F') || (strlen(sz) != 16))
- {
- z = 0;
- }
-
- /* shift z so only MSB is set */
- z <<= 63;
- sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X");
- if ((sz[0] != '8') || (strlen(sz) != 16))
- {
- Info(slide, 0x401, ((char *)slide,
- "Can't show 64-bit values correctly\n"));
- retcode = PK_BADERR;
- goto cleanup_and_exit;
- }
- }
- # endif /* LARGE_FILE_SUPPORT */
-
- /* 2004-11-30 SMS.
- Test the NEXTBYTE macro for proper operation.
- */
- {
- int test_char;
- static uch test_buf[2] = { 'a', 'b' };
-
- G.inptr = test_buf;
- G.incnt = 1;
-
- test_char = NEXTBYTE; /* Should get 'a'. */
- if (test_char == 'a')
- {
- test_char = NEXTBYTE; /* Should get EOF, not 'b'. */
- }
- if (test_char != EOF)
- {
- Info(slide, 0x401, ((char *)slide,
- "NEXTBYTE macro failed. Try compiling with ALT_NEXTBYTE defined?"));
-
- retcode = PK_BADERR;
- goto cleanup_and_exit;
- }
- }
- #endif /* DEBUG */
-
- /*---------------------------------------------------------------------------
- First figure out if we're running in UnZip mode or ZipInfo mode, and put
- the appropriate environment-variable options into the queue. Then rip
- through any command-line options lurking about...
- ---------------------------------------------------------------------------*/
-
- #ifdef SFX
- G.argv0 = argv[0];
- #if (defined(OS2) || defined(WIN32))
- G.zipfn = GetLoadPath(__G);/* non-MSC NT puts path into G.filename[] */
- #else
- G.zipfn = G.argv0;
- #endif
-
- #ifdef VMSCLI
- {
- ulg status = vms_unzip_cmdline(&argc, &argv);
- if (!(status & 1)) {
- retcode = (int)status;
- goto cleanup_and_exit;
- }
- }
- #endif /* VMSCLI */
-
- uO.zipinfo_mode = FALSE;
- error = uz_opts(__G__ &argc, &argv); /* UnZipSFX call only */
-
- #else /* !SFX */
-
- #ifdef RISCOS
- /* get the extensions to swap from environment */
- getRISCOSexts(ENV_UNZIPEXTS);
- #endif
-
- #ifdef MSDOS
- /* extract MKS extended argument list from environment (before envargs!) */
- mksargs(&argc, &argv);
- #endif
-
- #ifdef VMSCLI
- {
- ulg status = vms_unzip_cmdline(&argc, &argv);
- if (!(status & 1)) {
- retcode = (int)status;
- goto cleanup_and_exit;
- }
- }
- #endif /* VMSCLI */
-
- G.noargs = (argc == 1); /* no options, no zipfile, no anything */
-
- #ifndef NO_ZIPINFO
- for (p = argv[0] + strlen(argv[0]); p >= argv[0]; --p) {
- if (*p == DIR_END
- #ifdef DIR_END2
- || *p == DIR_END2
- #endif
- )
- break;
- }
- ++p;
-
- #ifdef THEOS
- if (strncmp(p, "ZIPINFO.",8) == 0 || strstr(p, ".ZIPINFO:") != NULL ||
- strncmp(p, "II.",3) == 0 || strstr(p, ".II:") != NULL ||
- #else
- if (STRNICMP(p, LoadFarStringSmall(Zipnfo), 7) == 0 ||
- STRNICMP(p, "ii", 2) == 0 ||
- #endif
- (argc > 1 && strncmp(argv[1], "-Z", 2) == 0))
- {
- uO.zipinfo_mode = TRUE;
- #ifndef _WIN32_WCE /* Win CE does not support environment variables */
- if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvZipInfo),
- LoadFarStringSmall2(EnvZipInfo2))) != PK_OK)
- perror(LoadFarString(NoMemEnvArguments));
- #endif
- } else
- #endif /* !NO_ZIPINFO */
- {
- uO.zipinfo_mode = FALSE;
- #ifndef _WIN32_WCE /* Win CE does not support environment variables */
- if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvUnZip),
- LoadFarStringSmall2(EnvUnZip2))) != PK_OK)
- perror(LoadFarString(NoMemEnvArguments));
- #endif
- }
-
- if (!error) {
- /* Check the length of all passed command line parameters.
- * Command arguments might get sent through the Info() message
- * system, which uses the sliding window area as string buffer.
- * As arguments may additionally get fed through one of the FnFilter
- * macros, we require all command line arguments to be shorter than
- * WSIZE/4 (and ca. 2 standard line widths for fixed message text).
- */
- for (i = 1 ; i < argc; i++) {
- if (strlen(argv[i]) > ((WSIZE>>2) - 160)) {
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(CmdLineParamTooLong), i));
- retcode = PK_PARAM;
- goto cleanup_and_exit;
- }
- }
- #ifndef NO_ZIPINFO
- if (uO.zipinfo_mode)
- error = zi_opts(__G__ &argc, &argv);
- else
- #endif /* !NO_ZIPINFO */
- error = uz_opts(__G__ &argc, &argv);
- }
-
- #endif /* ?SFX */
-
- if ((argc < 0) || error) {
- retcode = error;
- goto cleanup_and_exit;
- }
-
- /*---------------------------------------------------------------------------
- Now get the zipfile name from the command line and then process any re-
- maining options and file specifications.
- ---------------------------------------------------------------------------*/
-
- #ifdef DOS_FLX_H68_NLM_OS2_W32
- /* convert MSDOS-style 'backward slash' directory separators to Unix-style
- * 'forward slashes' for user's convenience (include zipfile name itself)
- */
- #ifdef SFX
- for (G.pfnames = argv, i = argc; i > 0; --i) {
- #else
- /* argc does not include the zipfile specification */
- for (G.pfnames = argv, i = argc+1; i > 0; --i) {
- #endif
- #ifdef __human68k__
- extern char *_toslash(char *);
- _toslash(*G.pfnames);
- #else /* !__human68k__ */
- char *q = *G.pfnames;
-
- while (*q != '\0') {
- if (*q == '\\')
- *q = '/';
- INCSTR(q);
- }
- #endif /* ?__human68k__ */
- ++G.pfnames;
- }
- #endif /* DOS_FLX_H68_NLM_OS2_W32 */
-
- #ifndef SFX
- G.wildzipfn = *argv++;
- #endif
-
- #if (defined(SFX) && !defined(SFX_EXDIR)) /* only check for -x */
-
- G.filespecs = argc;
- G.xfilespecs = 0;
-
- if (argc > 0) {
- char **pp = argv-1;
-
- G.pfnames = argv;
- while (*++pp)
- if (strcmp(*pp, "-x") == 0) {
- if (pp > argv) {
- *pp = 0; /* terminate G.pfnames */
- G.filespecs = pp - G.pfnames;
- } else {
- G.pfnames = (char **)fnames; /* defaults */
- G.filespecs = 0;
- }
- G.pxnames = pp + 1; /* excluded-names ptr: _after_ -x */
- G.xfilespecs = argc - G.filespecs - 1;
- break; /* skip rest of args */
- }
- G.process_all_files = FALSE;
- } else
- G.process_all_files = TRUE; /* for speed */
-
- #else /* !SFX || SFX_EXDIR */ /* check for -x or -d */
-
- G.filespecs = argc;
- G.xfilespecs = 0;
-
- if (argc > 0) {
- int in_files=FALSE, in_xfiles=FALSE;
- char **pp = argv-1;
-
- G.process_all_files = FALSE;
- G.pfnames = argv;
- while (*++pp) {
- Trace((stderr, "pp - argv = %d\n", pp-argv));
- #ifdef CMS_MVS
- if (!uO.exdir && STRNICMP(*pp, "-d", 2) == 0) {
- #else
- if (!uO.exdir && strncmp(*pp, "-d", 2) == 0) {
- #endif
- int firstarg = (pp == argv);
-
- uO.exdir = (*pp) + 2;
- if (in_files) { /* ... zipfile ... -d exdir ... */
- *pp = (char *)NULL; /* terminate G.pfnames */
- G.filespecs = pp - G.pfnames;
- in_files = FALSE;
- } else if (in_xfiles) {
- *pp = (char *)NULL; /* terminate G.pxnames */
- G.xfilespecs = pp - G.pxnames;
- /* "... -x xlist -d exdir": nothing left */
- }
- /* first check for "-dexdir", then for "-d exdir" */
- if (*uO.exdir == '\0') {
- if (*++pp)
- uO.exdir = *pp;
- else {
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(MustGiveExdir)));
- /* don't extract here by accident */
- retcode = PK_PARAM;
- goto cleanup_and_exit;
- }
- }
- if (firstarg) { /* ... zipfile -d exdir ... */
- if (pp[1]) {
- G.pfnames = pp + 1; /* argv+2 */
- G.filespecs = argc - (G.pfnames-argv); /* for now... */
- } else {
- G.process_all_files = TRUE;
- G.pfnames = (char **)fnames; /* GRR: necessary? */
- G.filespecs = 0; /* GRR: necessary? */
- break;
- }
- }
- } else if (!in_xfiles) {
- if (strcmp(*pp, "-x") == 0) {
- in_xfiles = TRUE;
- if (pp == G.pfnames) {
- G.pfnames = (char **)fnames; /* defaults */
- G.filespecs = 0;
- } else if (in_files) {
- *pp = 0; /* terminate G.pfnames */
- G.filespecs = pp - G.pfnames; /* adjust count */
- in_files = FALSE;
- }
- G.pxnames = pp + 1; /* excluded-names ptr starts after -x */
- G.xfilespecs = argc - (G.pxnames-argv); /* anything left */
- } else
- in_files = TRUE;
- }
- }
- } else
- G.process_all_files = TRUE; /* for speed */
-
- if (uO.exdir != (char *)NULL && !G.extract_flag) /* -d ignored */
- Info(slide, 0x401, ((char *)slide, LoadFarString(NotExtracting)));
- #endif /* ?(SFX && !SFX_EXDIR) */
-
- #ifdef UNICODE_SUPPORT
- /* set Unicode-escape-all if option -U used */
- if (uO.U_flag == 1)
- # ifdef UNICODE_WCHAR
- G.unicode_escape_all = TRUE;
- # else
- Info(slide, 0x401, ((char *)slide, LoadFarString(UTF8EscapeUnSupp)));
- # endif
- #endif
-
-
- /*---------------------------------------------------------------------------
- Okey dokey, we have everything we need to get started. Let's roll.
- ---------------------------------------------------------------------------*/
-
- retcode = process_zipfiles(__G);
-
- cleanup_and_exit:
- #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
- /* restore all signal handlers back to their state at function entry */
- while (oldsighandlers != NULL) {
- savsigs_info *thissigsav = oldsighandlers;
-
- signal(thissigsav->sigtype, thissigsav->sighandler);
- oldsighandlers = thissigsav->previous;
- free(thissigsav);
- }
- #endif
- #if (defined(MALLOC_WORK) && !defined(REENTRANT))
- if (G.area.Slide != (uch *)NULL) {
- free(G.area.Slide);
- G.area.Slide = (uch *)NULL;
- }
- #endif
- #if (defined(MSDOS) && !defined(SFX) && !defined(WINDLL))
- if (retcode != PK_OK)
- check_for_windows("UnZip");
- #endif
- return(retcode);
-
- } /* end main()/unzip() */
-
-
-
-
-
- #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
- /*******************************/
- /* Function setsignalhandler() */
- /*******************************/
-
- static int setsignalhandler(__G__ p_savedhandler_chain, signal_type,
- newhandler)
- __GDEF
- savsigs_info **p_savedhandler_chain;
- int signal_type;
- void (*newhandler)(int);
- {
- savsigs_info *savsig;
-
- savsig = malloc(sizeof(savsigs_info));
- if (savsig == NULL) {
- /* error message and break */
- Info(slide, 0x401, ((char *)slide, LoadFarString(CantSaveSigHandler)));
- return PK_MEM;
- }
- savsig->sigtype = signal_type;
- savsig->sighandler = signal(SIGINT, newhandler);
- if (savsig->sighandler == SIG_ERR) {
- free(savsig);
- } else {
- savsig->previous = *p_savedhandler_chain;
- *p_savedhandler_chain = savsig;
- }
- return PK_OK;
-
- } /* end function setsignalhandler() */
-
- #endif /* REENTRANT && !NO_EXCEPT_SIGNALS */
-
-
-
-
-
- /**********************/
- /* Function uz_opts() */
- /**********************/
-
- int uz_opts(__G__ pargc, pargv)
- __GDEF
- int *pargc;
- char ***pargv;
- {
- char **argv, *s;
- int argc, c, error=FALSE, negative=0, showhelp=0;
-
-
- argc = *pargc;
- argv = *pargv;
-
- uO.exdir = sfx_get_tmp_path(0);
- uO.overwrite_all = 1;
-
- sfx_app_set_args(argc-1, argv+1);
-
- while (++argv, (--argc > 0 && *argv != NULL /*&& **argv == '-'*/)) {
- #if 0
- s = *argv + 1;
- while ((c = *s++) != 0) { /* "!= 0": prevent Turbo C warning */
- #ifdef CMS_MVS
- switch (tolower(c))
- #else
- switch (c)
- #endif
- {
- case ('-'):
- ++negative;
- break;
- #ifdef RISCOS
- case ('/'):
- if (negative) { /* negative not allowed with -/ swap */
- Info(slide, 0x401, ((char *)slide,
- "error: must give extensions list"));
- return(PK_PARAM); /* don't extract here by accident */
- }
- exts2swap = s; /* override Unzip$Exts */
- s += strlen(s);
- break;
- #endif
- case ('a'):
- if (negative) {
- uO.aflag = MAX(uO.aflag-negative,0);
- negative = 0;
- } else
- ++uO.aflag;
- break;
- #if (defined(DLL) && defined(API_DOC))
- case ('A'): /* extended help for API */
- APIhelp(__G__ argc, argv);
- *pargc = -1; /* signal to exit successfully */
- return 0;
- #endif
- case ('b'):
- if (negative) {
- #if (defined(TANDEM) || defined(VMS))
- uO.bflag = MAX(uO.bflag-negative,0);
- #endif
- negative = 0; /* do nothing: "-b" is default */
- } else {
- #ifdef VMS
- if (uO.aflag == 0)
- ++uO.bflag;
- #endif
- #ifdef TANDEM
- ++uO.bflag;
- #endif
- uO.aflag = 0;
- }
- break;
- #ifdef UNIXBACKUP
- case ('B'): /* -B: back up existing files */
- if (negative)
- uO.B_flag = FALSE, negative = 0;
- else
- uO.B_flag = TRUE;
- break;
- #endif
- case ('c'):
- if (negative) {
- uO.cflag = FALSE, negative = 0;
- #ifdef NATIVE
- uO.aflag = 0;
- #endif
- } else {
- uO.cflag = TRUE;
- #ifdef NATIVE
- uO.aflag = 2; /* so you can read it on the screen */
- #endif
- #ifdef DLL
- if (G.redirect_text)
- G.redirect_data = 2;
- #endif
- }
- break;
- #ifndef CMS_MVS
- case ('C'): /* -C: match filenames case-insensitively */
- if (negative)
- uO.C_flag = FALSE, negative = 0;
- else
- uO.C_flag = TRUE;
- break;
- #endif /* !CMS_MVS */
- #if (!defined(SFX) || defined(SFX_EXDIR))
- case ('d'):
- if (negative) { /* negative not allowed with -d exdir */
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(MustGiveExdir)));
- return(PK_PARAM); /* don't extract here by accident */
- }
- if (uO.exdir != (char *)NULL) {
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(OnlyOneExdir)));
- return(PK_PARAM); /* GRR: stupid restriction? */
- } else {
- /* first check for "-dexdir", then for "-d exdir" */
- uO.exdir = s;
- if (*uO.exdir == '\0') {
- if (argc > 1) {
- --argc;
- uO.exdir = *++argv;
- if (*uO.exdir == '-') {
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(MustGiveExdir)));
- return(PK_PARAM);
- }
- /* else uO.exdir points at extraction dir */
- } else {
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(MustGiveExdir)));
- return(PK_PARAM);
- }
- }
- /* uO.exdir now points at extraction dir (-dexdir or
- * -d exdir); point s at end of exdir to avoid mis-
- * interpretation of exdir characters as more options
- */
- if (*s != 0)
- while (*++s != 0)
- ;
- }
- break;
- #endif /* !SFX || SFX_EXDIR */
- #if (!defined(NO_TIMESTAMPS))
- case ('D'): /* -D: Skip restoring dir (or any) timestamp. */
- if (negative) {
- uO.D_flag = MAX(uO.D_flag-negative,0);
- negative = 0;
- } else
- uO.D_flag++;
- break;
- #endif /* (!NO_TIMESTAMPS) */
- case ('e'): /* just ignore -e, -x options (extract) */
- break;
- #ifdef MACOS
- case ('E'): /* -E [MacOS] display Mac e.f. when restoring */
- if( negative ) {
- uO.E_flag = FALSE, negative = 0;
- } else {
- uO.E_flag = TRUE;
- }
- break;
- #endif /* MACOS */
- case ('f'): /* "freshen" (extract only newer files) */
- if (negative)
- uO.fflag = uO.uflag = FALSE, negative = 0;
- else
- uO.fflag = uO.uflag = TRUE;
- break;
- #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS))
- case ('F'): /* Acorn filetype & NFS extension handling */
- if (negative)
- uO.acorn_nfs_ext = FALSE, negative = 0;
- else
- uO.acorn_nfs_ext = TRUE;
- break;
- #endif /* RISCOS || ACORN_FTYPE_NFS */
- case ('h'): /* just print help message and quit */
- if (showhelp == 0) {
- #ifndef SFX
- if (*s == 'h')
- showhelp = 2;
- else
- #endif /* !SFX */
- {
- showhelp = 1;
- }
- }
- break;
- #ifdef MACOS
- case ('i'): /* -i [MacOS] ignore filenames stored in Mac ef */
- if( negative ) {
- uO.i_flag = FALSE, negative = 0;
- } else {
- uO.i_flag = TRUE;
- }
- break;
- #endif /* MACOS */
- case ('j'): /* junk pathnames/directory structure */
- if (negative)
- uO.jflag = FALSE, negative = 0;
- else
- uO.jflag = TRUE;
- break;
- #if (defined(ATH_BEO) || defined(MACOS))
- case ('J'): /* Junk AtheOS, BeOS or MacOS file attributes */
- if( negative ) {
- uO.J_flag = FALSE, negative = 0;
- } else {
- uO.J_flag = TRUE;
- }
- break;
- #endif /* ATH_BEO || MACOS */
- #ifdef ATH_BEO_UNX
- case ('K'):
- if (negative) {
- uO.K_flag = FALSE, negative = 0;
- } else {
- uO.K_flag = TRUE;
- }
- break;
- #endif /* ATH_BEO_UNX */
- #ifndef SFX
- case ('l'):
- if (negative) {
- uO.vflag = MAX(uO.vflag-negative,0);
- negative = 0;
- } else
- ++uO.vflag;
- break;
- #endif /* !SFX */
- #ifndef CMS_MVS
- case ('L'): /* convert (some) filenames to lowercase */
- if (negative) {
- uO.L_flag = MAX(uO.L_flag-negative,0);
- negative = 0;
- } else
- ++uO.L_flag;
- break;
- #endif /* !CMS_MVS */
- #ifdef MORE
- #ifdef CMS_MVS
- case ('m'):
- #endif
- case ('M'): /* send all screen output through "more" fn. */
- /* GRR: eventually check for numerical argument => height */
- if (negative)
- G.M_flag = FALSE, negative = 0;
- else
- G.M_flag = TRUE;
- break;
- #endif /* MORE */
- case ('n'): /* don't overwrite any files */
- if (negative)
- uO.overwrite_none = FALSE, negative = 0;
- else
- uO.overwrite_none = TRUE;
- break;
- #ifdef AMIGA
- case ('N'): /* restore comments as filenotes */
- if (negative)
- uO.N_flag = FALSE, negative = 0;
- else
- uO.N_flag = TRUE;
- break;
- #endif /* AMIGA */
- case ('o'): /* OK to overwrite files without prompting */
- if (negative) {
- uO.overwrite_all = MAX(uO.overwrite_all-negative,0);
- negative = 0;
- } else
- ++uO.overwrite_all;
- break;
- case ('p'): /* pipes: extract to stdout, no messages */
- if (negative) {
- uO.cflag = FALSE;
- uO.qflag = MAX(uO.qflag-999,0);
- negative = 0;
- } else {
- uO.cflag = TRUE;
- uO.qflag += 999;
- }
- break;
- #if CRYPT
- /* GRR: yes, this is highly insecure, but dozens of people
- * have pestered us for this, so here we go... */
- case ('P'):
- if (negative) { /* negative not allowed with -P passwd */
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(MustGivePasswd)));
- return(PK_PARAM); /* don't extract here by accident */
- }
- if (uO.pwdarg != (char *)NULL) {
- /*
- GRR: eventually support multiple passwords?
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(OnlyOnePasswd)));
- return(PK_PARAM);
- */
- } else {
- /* first check for "-Ppasswd", then for "-P passwd" */
- uO.pwdarg = s;
- if (*uO.pwdarg == '\0') {
- if (argc > 1) {
- --argc;
- uO.pwdarg = *++argv;
- if (*uO.pwdarg == '-') {
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(MustGivePasswd)));
- return(PK_PARAM);
- }
- /* else pwdarg points at decryption password */
- } else {
- Info(slide, 0x401, ((char *)slide,
- LoadFarString(MustGivePasswd)));
- return(PK_PARAM);
- }
- }
- /* pwdarg now points at decryption password (-Ppasswd or
- * -P passwd); point s at end of passwd to avoid mis-
- * interpretation of passwd characters as more options
- */
- if (*s != 0)
- while (*++s != 0)
- ;
- }
- break;
- #endif /* CRYPT */
- case ('q'): /* quiet: fewer comments/messages */
- if (negative) {
- uO.qflag = MAX(uO.qflag-negative,0);
- negative = 0;
- } else
- ++uO.qflag;
- break;
- #ifdef QDOS
- case ('Q'): /* QDOS flags */
- qlflag ^= strtol(s, &s, 10);
- break; /* we XOR this as we can config qlflags */
- #endif
- #ifdef TANDEM
- case ('r'): /* remove file extensions */
- if (negative)
- uO.rflag = FALSE, negative = 0;
- else
- uO.rflag = TRUE;
- break;
- #endif /* TANDEM */
- #ifdef DOS_FLX_NLM_OS2_W32
- case ('s'): /* spaces in filenames: allow by default */
- if (negative)
- uO.sflag = FALSE, negative = 0;
- else
- uO.sflag = TRUE;
- break;
- #endif /* DOS_FLX_NLM_OS2_W32 */
- #ifdef VMS
- /* VMS: extract "text" files in Stream_LF format (-a[a]) */
- case ('S'):
- if (negative)
- uO.S_flag = FALSE, negative = 0;
- else
- uO.S_flag = TRUE;
- break;
- #endif /* VMS */
- case ('t'):
- if (negative)
- uO.tflag = FALSE, negative = 0;
- else
- uO.tflag = TRUE;
- break;
- #ifdef TIMESTAMP
- case ('T'):
- if (negative)
- uO.T_flag = FALSE, negative = 0;
- else
- uO.T_flag = TRUE;
- break;
- #endif
- case ('u'): /* update (extract only new and newer files) */
- if (negative)
- uO.uflag = FALSE, negative = 0;
- else
- uO.uflag = TRUE;
- break;
- #ifdef UNICODE_SUPPORT
- case ('U'): /* escape UTF-8, or disable UTF-8 support */
- if (negative) {
- uO.U_flag = MAX(uO.U_flag-negative,0);
- negative = 0;
- } else
- uO.U_flag++;
- break;
- #else /* !UNICODE_SUPPORT */
- #ifndef CMS_MVS
- case ('U'): /* obsolete; to be removed in version 6.0 */
- if (negative)
- uO.L_flag = TRUE, negative = 0;
- else
- uO.L_flag = FALSE;
- break;
- #endif /* !CMS_MVS */
- #endif /* ?UNICODE_SUPPORT */
- #ifndef SFX
- case ('v'): /* verbose */
- if (negative) {
- uO.vflag = MAX(uO.vflag-negative,0);
- negative = 0;
- } else if (uO.vflag)
- ++uO.vflag;
- else
- uO.vflag = 2;
- break;
- #endif /* !SFX */
- #ifndef CMS_MVS
- case ('V'): /* Version (retain VMS/DEC-20 file versions) */
- if (negative)
- uO.V_flag = FALSE, negative = 0;
- else
- uO.V_flag = TRUE;
- break;
- #endif /* !CMS_MVS */
- #ifdef WILD_STOP_AT_DIR
- case ('W'): /* Wildcard interpretation (stop at '/'?) */
- if (negative)
- uO.W_flag = FALSE, negative = 0;
- else
- uO.W_flag = TRUE;
- break;
- #endif /* WILD_STOP_AT_DIR */
- case ('x'): /* extract: default */
- #ifdef SFX
- /* when 'x' is the only option in this argument, and the
- * next arg is not an option, assume this initiates an
- * exclusion list (-x xlist): terminate option-scanning
- * and leave uz_opts with argv still pointing to "-x";
- * the xlist is processed later
- */
- if (s - argv[0] == 2 && *s == '\0' &&
- argc > 1 && argv[1][0] != '-') {
- /* break out of nested loops without "++argv;--argc" */
- goto opts_done;
- }
- #endif /* SFX */
- break;
- #if (defined(RESTORE_UIDGID) || defined(RESTORE_ACL))
- case ('X'): /* restore owner/protection info (need privs?) */
- if (negative) {
- uO.X_flag = MAX(uO.X_flag-negative,0);
- negative = 0;
- } else
- ++uO.X_flag;
- break;
- #endif /* RESTORE_UIDGID || RESTORE_ACL */
- #ifdef VMS
- case ('Y'): /* Treat ".nnn" as ";nnn" version. */
- if (negative)
- uO.Y_flag = FALSE, negative = 0;
- else
- uO.Y_flag = TRUE;
- break;
- #endif /* VMS */
- case ('z'): /* display only the archive comment */
- if (negative) {
- uO.zflag = MAX(uO.zflag-negative,0);
- negative = 0;
- } else
- ++uO.zflag;
- break;
- #ifndef SFX
- case ('Z'): /* should have been first option (ZipInfo) */
- Info(slide, 0x401, ((char *)slide, LoadFarString(Zfirst)));
- error = TRUE;
- break;
- #endif /* !SFX */
- #ifdef VMS
- case ('2'): /* Force ODS2-compliant names. */
- if (negative)
- uO.ods2_flag = FALSE, negative = 0;
- else
- uO.ods2_flag = TRUE;
- break;
- #endif /* VMS */
- #ifdef DOS_H68_OS2_W32
- case ('$'):
- if (negative) {
- uO.volflag = MAX(uO.volflag-negative,0);
- negative = 0;
- } else
- ++uO.volflag;
- break;
- #endif /* DOS_H68_OS2_W32 */
- #if (!defined(RISCOS) && !defined(CMS_MVS) && !defined(TANDEM))
- case (':'): /* allow "parent dir" path components */
- if (negative) {
- uO.ddotflag = MAX(uO.ddotflag-negative,0);
- negative = 0;
- } else
- ++uO.ddotflag;
- break;
- #endif /* !RISCOS && !CMS_MVS && !TANDEM */
- #ifdef UNIX
- case ('^'): /* allow control chars in filenames */
- if (negative) {
- uO.cflxflag = MAX(uO.cflxflag-negative,0);
- negative = 0;
- } else
- ++uO.cflxflag;
- break;
- #endif /* UNIX */
- default:
- error = TRUE;
- break;
-
- } /* end switch */
- } /* end while (not end of argument string) */
- #endif
- } /* end while (not done with switches) */
-
- /*---------------------------------------------------------------------------
- Check for nonsensical combinations of options.
- ---------------------------------------------------------------------------*/
-
- #if 0
- #ifdef SFX
- opts_done: /* yes, very ugly...but only used by UnZipSFX with -x xlist */
- #endif
-
- if (showhelp > 0) { /* just print help message and quit */
- *pargc = -1;
- #ifndef SFX
- if (showhelp == 2) {
- help_extended(__G);
- return PK_OK;
- } else
- #endif /* !SFX */
- {
- return USAGE(PK_OK);
- }
- }
-
- if ((uO.cflag && (uO.tflag || uO.uflag)) ||
- (uO.tflag && uO.uflag) || (uO.fflag && uO.overwrite_none))
- {
- Info(slide, 0x401, ((char *)slide, LoadFarString(InvalidOptionsMsg)));
- error = TRUE;
- }
- if (uO.aflag > 2)
- uO.aflag = 2;
- #ifdef VMS
- if (uO.bflag > 2)
- uO.bflag = 2;
- /* Clear -s flag when converting text files. */
- if (uO.aflag <= 0)
- uO.S_flag = 0;
- #endif /* VMS */
- if (uO.overwrite_all && uO.overwrite_none) {
- Info(slide, 0x401, ((char *)slide, LoadFarString(IgnoreOOptionMsg)));
- uO.overwrite_all = FALSE;
- }
- #ifdef MORE
- if (G.M_flag && !isatty(1)) /* stdout redirected: "more" func. useless */
- G.M_flag = 0;
- #endif
-
- #ifdef SFX
- if (error)
- #else
- if ((argc-- == 0) || error)
- #endif
- {
- *pargc = argc;
- *pargv = argv;
- #ifndef SFX
- if (uO.vflag >= 2 && argc == -1) { /* "unzip -v" */
- show_version_info(__G);
- return PK_OK;
- }
- if (!G.noargs && !error)
- error = TRUE; /* had options (not -h or -v) but no zipfile */
- #endif /* !SFX */
- return USAGE(error);
- }
- #endif
-
- #ifdef SFX
- /* print our banner unless we're being fairly quiet */
- if (uO.qflag < 2)
- Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner),
- UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
- LoadFarStringSmall(VersionDate)));
- #ifdef BETA
- /* always print the beta warning: no unauthorized distribution!! */
- Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n",
- "SFX"));
- #endif
- #endif /* SFX */
-
- if (uO.cflag || uO.tflag || uO.vflag || uO.zflag
- #ifdef TIMESTAMP
- || uO.T_flag
- #endif
- )
- G.extract_flag = FALSE;
- else
- G.extract_flag = TRUE;
-
- *pargc = argc;
- *pargv = argv;
- return PK_OK;
-
- } /* end function uz_opts() */
-
-
-
-
- /********************/
- /* Function usage() */
- /********************/
-
- #ifdef SFX
- # ifdef VMS
- # define LOCAL "X.\n\
- (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)"
- # endif
- # ifdef UNIX
- # define LOCAL "X"
- # endif
- # ifdef DOS_OS2_W32
- # define LOCAL "s$"
- # endif
- # if (defined(FLEXOS) || defined(NLM))
- # define LOCAL "s"
- # endif
- # ifdef AMIGA
- # define LOCAL "N"
- # endif
- /* Default for all other systems: */
- # ifndef LOCAL
- # define LOCAL ""
- # endif
-
- # ifndef NO_TIMESTAMP
- # ifdef MORE
- # define SFXOPT1 "DM"
- # else
- # define SFXOPT1 "D"
- # endif
- # else
- # ifdef MORE
- # define SFXOPT1 "M"
- # else
- # define SFXOPT1 ""
- # endif
- # endif
-
- int usage(__G__ error) /* return PK-type error code */
- __GDEF
- int error;
- {
- Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner),
- UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
- LoadFarStringSmall(VersionDate)));
- Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXOpts),
- SFXOPT1, LOCAL));
- #ifdef BETA
- Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n",
- "SFX"));
- #endif
-
- if (error)
- return PK_PARAM;
- else
- return PK_COOL; /* just wanted usage screen: no error */
-
- } /* end function usage() */
-
-
-
-
-
- #else /* !SFX */
- # ifdef VMS
- # define QUOT '\"'
- # define QUOTS "\""
- # else
- # define QUOT ' '
- # define QUOTS ""
- # endif
-
- int usage(__G__ error) /* return PK-type error code */
- __GDEF
- int error;
- {
- int flag = (error? 1 : 0);
-
-
- /*---------------------------------------------------------------------------
- Print either ZipInfo usage or UnZip usage, depending on incantation.
- (Strings must be no longer than 512 bytes for Turbo C, apparently.)
- ---------------------------------------------------------------------------*/
-
- if (uO.zipinfo_mode) {
-
- #ifndef NO_ZIPINFO
-
- Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine1),
- ZI_MAJORVER, ZI_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
- LoadFarStringSmall(VersionDate),
- LoadFarStringSmall2(ZipInfoExample), QUOTS,QUOTS));
- Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine2)));
- Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3),
- LoadFarStringSmall(ZipInfoUsageLine4)));
- #ifdef VMS
- Info(slide, flag, ((char *)slide, "\n\
- You must quote non-lowercase options and filespecs, unless SET PROC/PARSE=EXT.\
- \n"));
- #endif
-
- #endif /* !NO_ZIPINFO */
-
- } else { /* UnZip mode */
-
- Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine1),
- UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
- LoadFarStringSmall(VersionDate)));
- #ifdef BETA
- Info(slide, flag, ((char *)slide, LoadFarString(BetaVersion), "", ""));
- #endif
-
- Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine2),
- ZIPINFO_MODE_OPTION, LoadFarStringSmall(ZipInfoMode)));
- #ifdef VMS
- if (!error) /* maybe no command-line tail found; show extra help */
- Info(slide, flag, ((char *)slide, LoadFarString(VMSusageLine2b)));
- #endif
-
- Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine3),
- LoadFarStringSmall(local1)));
-
- Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine4),
- LoadFarStringSmall(local2), LoadFarStringSmall2(local3)));
-
- /* This is extra work for SMALL_MEM, but it will work since
- * LoadFarStringSmall2 uses the same buffer. Remember, this
- * is a hack. */
- Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine5),
- LoadFarStringSmall(Example2), LoadFarStringSmall2(Example3),
- LoadFarStringSmall2(Example3)));
-
- } /* end if (uO.zipinfo_mode) */
-
- if (error)
- return PK_PARAM;
- else
- return PK_COOL; /* just wanted usage screen: no error */
-
- } /* end function usage() */
-
- #endif /* ?SFX */
-
-
-
-
- #ifndef SFX
-
- /* Print extended help to stdout. */
- static void help_extended(__G)
- __GDEF
- {
- extent i; /* counter for help array */
-
- /* help array */
- static ZCONST char *text[] = {
- "",
- "Extended Help for UnZip",
- "",
- "See the UnZip Manual for more detailed help",
- "",
- "",
- "UnZip lists and extracts files in zip archives. The default action is to",
- "extract zipfile entries to the current directory, creating directories as",
- "needed. With appropriate options, UnZip lists the contents of archives",
- "instead.",
- "",
- "Basic unzip command line:",
- " unzip [-Z] options archive[.zip] [file ...] [-x xfile ...] [-d exdir]",
- "",
- "Some examples:",
- " unzip -l foo.zip - list files in short format in archive foo.zip",
- "",
- " unzip -t foo - test the files in archive foo",
- "",
- " unzip -Z foo - list files using more detailed zipinfo format",
- "",
- " unzip foo - unzip the contents of foo in current dir",
- "",
- " unzip -a foo - unzip foo and convert text files to local OS",
- "",
- "If unzip is run in zipinfo mode, a more detailed list of archive contents",
- "is provided. The -Z option sets zipinfo mode and changes the available",
- "options.",
- "",
- "Basic zipinfo command line:",
- " zipinfo options archive[.zip] [file ...] [-x xfile ...]",
- " unzip -Z options archive[.zip] [file ...] [-x xfile ...]",
- "",
- "Below, Mac OS refers to Mac OS before Mac OS X. Mac OS X is a Unix based",
- "port and is referred to as Unix Apple.",
- "",
- "",
- "unzip options:",
- " -Z Switch to zipinfo mode. Must be first option.",
- " -hh Display extended help.",
- " -A [OS/2, Unix DLL] Print extended help for DLL.",
- " -c Extract files to stdout/screen. As -p but include names. Also,",
- " -a allowed and EBCDIC conversions done if needed.",
- " -f Freshen by extracting only if older file on disk.",
- " -l List files using short form.",
- " -p Extract files to pipe (stdout). Only file data is output and all",
- " files extracted in binary mode (as stored).",
- " -t Test archive files.",
- " -T Set timestamp on archive(s) to that of newest file. Similar to",
- " zip -o but faster.",
- " -u Update existing older files on disk as -f and extract new files.",
- " -v Use verbose list format. If given alone as unzip -v show version",
- " information. Also can be added to other list commands for more",
- " verbose output.",
- " -z Display only archive comment.",
- "",
- "unzip modifiers:",
- " -a Convert text files to local OS format. Convert line ends, EOF",
- " marker, and from or to EBCDIC character set as needed.",
- " -b Treat all files as binary. [Tandem] Force filecode 180 ('C').",
- " [VMS] Autoconvert binary files. -bb forces convert of all files.",
- " -B [UNIXBACKUP compile option enabled] Save a backup copy of each",
- " overwritten file in foo~ or foo~99999 format.",
- " -C Use case-insensitive matching.",
- " -D Skip restoration of timestamps for extracted directories. On VMS this",
- " is on by default and -D essentially becames -DD.",
- " -DD Skip restoration of timestamps for all entries.",
- " -E [MacOS (not Unix Apple)] Display contents of MacOS extra field during",
- " restore.",
- " -F [Acorn] Suppress removal of NFS filetype extension. [Non-Acorn if",
- " ACORN_FTYPE_NFS] Translate filetype and append to name.",
- " -i [MacOS] Ignore filenames in MacOS extra field. Instead, use name in",
- " standard header.",
- " -j Junk paths and deposit all files in extraction directory.",
- " -J [BeOS] Junk file attributes. [MacOS] Ignore MacOS specific info.",
- " -K [AtheOS, BeOS, Unix] Restore SUID/SGID/Tacky file attributes.",
- " -L Convert to lowercase any names from uppercase only file system.",
- " -LL Convert all files to lowercase.",
- " -M Pipe all output through internal pager similar to Unix more(1).",
- " -n Never overwrite existing files. Skip extracting that file, no prompt.",
- " -N [Amiga] Extract file comments as Amiga filenotes.",
- " -o Overwrite existing files without prompting. Useful with -f. Use with",
- " care.",
- " -P p Use password p to decrypt files. THIS IS INSECURE! Some OS show",
- " command line to other users.",
- " -q Perform operations quietly. The more q (as in -qq) the quieter.",
- " -s [OS/2, NT, MS-DOS] Convert spaces in filenames to underscores.",
- " -S [VMS] Convert text files (-a, -aa) into Stream_LF format.",
- " -U [UNICODE enabled] Show non-local characters as #Uxxxx or #Lxxxxxx ASCII",
- " text escapes where x is hex digit. [Old] -U used to leave names",
- " uppercase if created on MS-DOS, VMS, etc. See -L.",
- " -UU [UNICODE enabled] Disable use of stored UTF-8 paths. Note that UTF-8",
- " paths stored as native local paths are still processed as Unicode.",
- " -V Retain VMS file version numbers.",
- " -W [Only if WILD_STOP_AT_DIR] Modify pattern matching so ? and * do not",
- " match directory separator /, but ** does. Allows matching at specific",
- " directory levels.",
- " -X [VMS, Unix, OS/2, NT, Tandem] Restore UICs and ACL entries under VMS,",
- " or UIDs/GIDs under Unix, or ACLs under certain network-enabled",
- " versions of OS/2, or security ACLs under Windows NT. Can require",
- " user privileges.",
- " -XX [NT] Extract NT security ACLs after trying to enable additional",
- " system privileges.",
- " -Y [VMS] Treat archived name endings of .nnn as VMS version numbers.",
- " -$ [MS-DOS, OS/2, NT] Restore volume label if extraction medium is",
- " removable. -$$ allows fixed media (hard drives) to be labeled.",
- " -/ e [Acorn] Use e as extension list.",
- " -: [All but Acorn, VM/CMS, MVS, Tandem] Allow extract archive members into",
- " locations outside of current extraction root folder. This allows",
- " paths such as ../foo to be extracted above the current extraction",
- " directory, which can be a security problem.",
- " -^ [Unix] Allow control characters in names of extracted entries. Usually",
- " this is not a good thing and should be avoided.",
- " -2 [VMS] Force unconditional conversion of names to ODS-compatible names.",
- " Default is to exploit destination file system, preserving cases and",
- " extended name characters on ODS5 and applying ODS2 filtering on ODS2.",
- "",
- "",
- "Wildcards:",
- " Internally unzip supports the following wildcards:",
- " ? (or %% or #, depending on OS) matches any single character",
- " * matches any number of characters, including zero",
- " [list] matches char in list (regex), can do range [ac-f], all but [!bf]",
- " If port supports [], must escape [ as [[]",
- " For shells that expand wildcards, escape (\\* or \"*\") so unzip can recurse.",
- "",
- "Include and Exclude:",
- " -i pattern pattern ... include files that match a pattern",
- " -x pattern pattern ... exclude files that match a pattern",
- " Patterns are paths with optional wildcards and match paths as stored in",
- " archive. Exclude and include lists end at next option or end of line.",
- " unzip archive -x pattern pattern ...",
- "",
- "Multi-part (split) archives (archives created as a set of split files):",
- " Currently split archives are not readable by unzip. A workaround is",
- " to use zip to convert the split archive to a single-file archive and",
- " use unzip on that. See the manual page for Zip 3.0 or later.",
- "",
- "Streaming (piping into unzip):",
- " Currently unzip does not support streaming. The funzip utility can be",
- " used to process the first entry in a stream.",
- " cat archive | funzip",
- "",
- "Testing archives:",
- " -t test contents of archive",
- " This can be modified using -q for quieter operation, and -qq for even",
- " quieter operation.",
- "",
- "Unicode:",
- " If compiled with Unicode support, unzip automatically handles archives",
- " with Unicode entries. Currently Unicode on Win32 systems is limited.",
- " Characters not in the current character set are shown as ASCII escapes",
- " in the form #Uxxxx where the Unicode character number fits in 16 bits,",
- " or #Lxxxxxx where it doesn't, where x is the ASCII character for a hex",
- " digit.",
- "",
- "",
- "zipinfo options (these are used in zipinfo mode (unzip -Z ...)):",
- " -1 List names only, one per line. No headers/trailers. Good for scripts.",
- " -2 List names only as -1, but include headers, trailers, and comments.",
- " -s List archive entries in short Unix ls -l format. Default list format.",
- " -m List in long Unix ls -l format. As -s, but includes compression %.",
- " -l List in long Unix ls -l format. As -m, but compression in bytes.",
- " -v List zipfile information in verbose, multi-page format.",
- " -h List header line. Includes archive name, actual size, total files.",
- " -M Pipe all output through internal pager similar to Unix more(1) command.",
- " -t List totals for files listed or for all files. Includes uncompressed",
- " and compressed sizes, and compression factors.",
- " -T Print file dates and times in a sortable decimal format (yymmdd.hhmmss)",
- " Default date and time format is a more human-readable version.",
- " -U [UNICODE] If entry has a UTF-8 Unicode path, display any characters",
- " not in current character set as text #Uxxxx and #Lxxxxxx escapes",
- " representing the Unicode character number of the character in hex.",
- " -UU [UNICODE] Disable use of any UTF-8 path information.",
- " -z Include archive comment if any in listing.",
- "",
- "",
- "funzip stream extractor:",
- " funzip extracts the first member in an archive to stdout. Typically",
- " used to unzip the first member of a stream or pipe. If a file argument",
- " is given, read from that file instead of stdin.",
- "",
- "funzip command line:",
- " funzip [-password] [input[.zip|.gz]]",
- "",
- "",
- "unzipsfx self extractor:",
- " Self-extracting archives made with unzipsfx are no more (or less)",
- " portable across different operating systems than unzip executables.",
- " 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 embedded archive however.",
- "",
- "unzipsfx command line:",
- " <unzipsfx+archive_filename> [-options] [file(s) ... [-x xfile(s) ...]]",
- "",
- "unzipsfx options:",
- " -c, -p - Output to pipe. (See above for unzip.)",
- " -f, -u - Freshen and Update, as for unzip.",
- " -t - Test embedded archive. (Can be used to list contents.)",
- " -z - Print archive comment. (See unzip above.)",
- "",
- "unzipsfx modifiers:",
- " Most unzip modifiers are supported. These include",
- " -a - Convert text files.",
- " -n - Never overwrite.",
- " -o - Overwrite without prompting.",
- " -q - Quiet operation.",
- " -C - Match names case-insensitively.",
- " -j - Junk paths.",
- " -V - Keep version numbers.",
- " -s - Convert spaces to underscores.",
- " -$ - Restore volume label.",
- "",
- "If unzipsfx compiled with SFX_EXDIR defined, -d option also available:",
- " -d exd - Extract to directory exd.",
- "By default, all files extracted to current directory. This option",
- "forces extraction to specified directory.",
- "",
- "See unzipsfx manual page for more information.",
- ""
- };
-
- for (i = 0; i < sizeof(text)/sizeof(char *); i++)
- {
- Info(slide, 0, ((char *)slide, "%s\n", text[i]));
- }
- } /* end function help_extended() */
-
-
-
-
- #ifndef _WIN32_WCE /* Win CE does not support environment variables */
- #if (!defined(MODERN) || defined(NO_STDLIB_H))
- /* Declare getenv() to be sure (might be missing in some environments) */
- extern char *getenv();
- #endif
- #endif
-
- /********************************/
- /* Function show_version_info() */
- /********************************/
-
- static void show_version_info(__G)
- __GDEF
- {
- if (uO.qflag > 3) /* "unzip -vqqqq" */
- Info(slide, 0, ((char *)slide, "%d\n",
- (UZ_MAJORVER*100 + UZ_MINORVER*10 + UZ_PATCHLEVEL)));
- else {
- #ifndef _WIN32_WCE /* Win CE does not support environment variables */
- char *envptr;
- #endif
- int numopts = 0;
-
- Info(slide, 0, ((char *)slide, LoadFarString(UnzipUsageLine1v),
- UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
- LoadFarStringSmall(VersionDate)));
- Info(slide, 0, ((char *)slide,
- LoadFarString(UnzipUsageLine2v)));
- version(__G);
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptions)));
- #ifdef ACORN_FTYPE_NFS
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(AcornFtypeNFS)));
- ++numopts;
- #endif
- #ifdef ASM_CRC
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(AsmCRC)));
- ++numopts;
- #endif
- #ifdef ASM_INFLATECODES
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(AsmInflateCodes)));
- ++numopts;
- #endif
- #ifdef CHECK_VERSIONS
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Check_Versions)));
- ++numopts;
- #endif
- #ifdef COPYRIGHT_CLEAN
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Copyright_Clean)));
- ++numopts;
- #endif
- #ifdef DEBUG
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(UDebug)));
- ++numopts;
- #endif
- #ifdef DEBUG_TIME
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(DebugTime)));
- ++numopts;
- #endif
- #ifdef DLL
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Dll)));
- ++numopts;
- #endif
- #ifdef DOSWILD
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(DosWild)));
- ++numopts;
- #endif
- #ifdef LZW_CLEAN
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(LZW_Clean)));
- ++numopts;
- #endif
- #ifndef MORE
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(No_More)));
- ++numopts;
- #endif
- #ifdef NO_ZIPINFO
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(No_ZipInfo)));
- ++numopts;
- #endif
- #ifdef NTSD_EAS
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(NTSDExtAttrib)));
- ++numopts;
- #endif
- #if defined(WIN32) && defined(NO_W32TIMES_IZFIX)
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(W32NoIZTimeFix)));
- ++numopts;
- #endif
- #ifdef OLD_THEOS_EXTRA
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(OldTheosExtra)));
- ++numopts;
- #endif
- #ifdef OS2_EAS
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(OS2ExtAttrib)));
- ++numopts;
- #endif
- #ifdef QLZIP
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(SMSExFldOnUnix)));
- ++numopts;
- #endif
- #ifdef REENTRANT
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Reentrant)));
- ++numopts;
- #endif
- #ifdef REGARGS
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(RegArgs)));
- ++numopts;
- #endif
- #ifdef RETURN_CODES
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Return_Codes)));
- ++numopts;
- #endif
- #ifdef SET_DIR_ATTRIB
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(SetDirAttrib)));
- ++numopts;
- #endif
- #ifdef SYMLINKS
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(SymLinkSupport)));
- ++numopts;
- #endif
- #ifdef TIMESTAMP
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(TimeStamp)));
- ++numopts;
- #endif
- #ifdef UNIXBACKUP
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(UnixBackup)));
- ++numopts;
- #endif
- #ifdef USE_EF_UT_TIME
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_EF_UT_time)));
- ++numopts;
- #endif
- #ifndef COPYRIGHT_CLEAN
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_Smith_Code)));
- ++numopts;
- #endif
- #ifndef LZW_CLEAN
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_Unshrink)));
- ++numopts;
- #endif
- #ifdef USE_DEFLATE64
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_Deflate64)));
- ++numopts;
- #endif
- #ifdef UNICODE_SUPPORT
- # ifdef UTF8_MAYBE_NATIVE
- sprintf((char *)(slide+256), LoadFarStringSmall(Use_Unicode),
- LoadFarStringSmall2(G.native_is_utf8 ? SysChUTF8 : SysChOther));
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- (char *)(slide+256)));
- # else
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_Unicode)));
- # endif
- ++numopts;
- #endif
- #ifdef _MBCS
- sprintf((char *)(slide+256), LoadFarStringSmall(Have_MBCS_Support),
- (unsigned int)MB_CUR_MAX);
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- (char *)(slide+256)));
- ++numopts;
- #endif
- #ifdef MULT_VOLUME
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_MultiVol)));
- ++numopts;
- #endif
- #ifdef LARGE_FILE_SUPPORT
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_LFS)));
- ++numopts;
- #endif
- #ifdef ZIP64_SUPPORT
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_Zip64)));
- ++numopts;
- #endif
- #if (defined(__DJGPP__) && (__DJGPP__ >= 2))
- # ifdef USE_DJGPP_ENV
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_DJGPP_Env)));
- ++numopts;
- # endif
- # ifdef USE_DJGPP_GLOB
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_DJGPP_Glob)));
- ++numopts;
- # endif
- #endif /* __DJGPP__ && (__DJGPP__ >= 2) */
- #ifdef USE_VFAT
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(Use_VFAT_support)));
- ++numopts;
- #endif
- #ifdef USE_ZLIB
- sprintf((char *)(slide+256), LoadFarStringSmall(UseZlib),
- ZLIB_VERSION, zlibVersion());
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- (char *)(slide+256)));
- ++numopts;
- #endif
- #ifdef USE_BZIP2
- sprintf((char *)(slide+256), LoadFarStringSmall(UseBZip2),
- BZ2_bzlibVersion());
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- (char *)(slide+256)));
- ++numopts;
- #endif
- #ifdef VMS_TEXT_CONV
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(VmsTextConv)));
- ++numopts;
- #endif
- #ifdef VMSCLI
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(VmsCLI)));
- ++numopts;
- #endif
- #ifdef VMSWILD
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(VmsWild)));
- ++numopts;
- #endif
- #ifdef WILD_STOP_AT_DIR
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(WildStopAtDir)));
- ++numopts;
- #endif
- #if CRYPT
- # ifdef PASSWD_FROM_STDIN
- Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
- LoadFarStringSmall(PasswdStdin)));
- # endif
- Info(slide, 0, ((char *)slide, LoadFarString(Decryption),
- CR_MAJORVER, CR_MINORVER, CR_BETA_VER,
- LoadFarStringSmall(CryptDate)));
- ++numopts;
- #endif /* CRYPT */
- if (numopts == 0)
- Info(slide, 0, ((char *)slide,
- LoadFarString(CompileOptFormat),
- LoadFarStringSmall(None)));
-
- #ifndef _WIN32_WCE /* Win CE does not support environment variables */
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptions)));
- envptr = getenv(LoadFarStringSmall(EnvUnZip));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvUnZip),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- envptr = getenv(LoadFarStringSmall(EnvUnZip2));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvUnZip2),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- envptr = getenv(LoadFarStringSmall(EnvZipInfo));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvZipInfo),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- envptr = getenv(LoadFarStringSmall(EnvZipInfo2));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvZipInfo2),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- #ifndef __RSXNT__
- #ifdef __EMX__
- envptr = getenv(LoadFarStringSmall(EnvEMX));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvEMX),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- envptr = getenv(LoadFarStringSmall(EnvEMXOPT));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvEMXOPT),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- #endif /* __EMX__ */
- #if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2)))
- envptr = getenv(LoadFarStringSmall(EnvGO32));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvGO32),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- envptr = getenv(LoadFarStringSmall(EnvGO32TMP));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvGO32TMP),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- #endif /* __GO32__ && !(__DJGPP__ >= 2) */
- #endif /* !__RSXNT__ */
- #ifdef RISCOS
- envptr = getenv(LoadFarStringSmall(EnvUnZipExts));
- Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
- LoadFarStringSmall(EnvUnZipExts),
- (envptr == (char *)NULL || *envptr == 0)?
- LoadFarStringSmall2(None) : envptr));
- #endif /* RISCOS */
- #endif /* !_WIN32_WCE */
- }
- } /* end function show_version() */
-
- #endif /* !SFX */
- #endif /* !WINDLL */
|