📄 unzip.h
字号:
#endif /* MACOS */
/*---------------------------------------------------------------------------
And finally, some random extra stuff:
---------------------------------------------------------------------------*/
#ifdef MINIX
# include <stdio.h>
#endif
#ifdef SHORT_NAMES /* Mark Williams C, ...? */
# define extract_or_test_files xtr_or_tst_files
# define extract_or_test_member xtr_or_tst_member
#endif
#ifdef MTS
# include <unix.h> /* Some important non-ANSI routines */
# define mkdir(s,n) (-1) /* No "make directory" capability */
# define EBCDIC /* Set EBCDIC conversion on */
#endif
/*************/
/* Defines */
/*************/
#ifndef WSIZE
# define WSIZE 0x8000 /* window size--must be a power of two, and */
#endif /* !WSIZE */ /* at least 32K for zip's deflate method */
#define DIR_BLKSIZ 64 /* number of directory entries per block
* (should fit in 4096 bytes, usually) */
#ifndef INBUFSIZ
# define INBUFSIZ 2048 /* works for MS-DOS small model */
#endif /* !INBUFSIZ */
/*
* If <limits.h> exists on most systems, should include that, since it may
* define some or all of the following: NAME_MAX, PATH_MAX, _POSIX_NAME_MAX,
* _POSIX_PATH_MAX.
*/
#ifdef DOS_OS2
# include <limits.h>
#endif /* DOS_OS2 */
#ifdef _MAX_PATH
# define FILNAMSIZ (_MAX_PATH)
#else /* !_MAX_PATH */
# define FILNAMSIZ 1025
#endif /* ?_MAX_PATH */
#ifndef PATH_MAX
# ifdef MAXPATHLEN /* defined in <sys/param.h> some systems */
# define PATH_MAX MAXPATHLEN
# else
# if FILENAME_MAX > 255 /* used like PATH_MAX on some systems */
# define PATH_MAX FILENAME_MAX
# else
# define PATH_MAX (FILNAMSIZ - 1)
# endif
# endif /* ?MAXPATHLEN */
#endif /* !PATH_MAX */
#define OUTBUFSIZ INBUFSIZ
#define ZSUFX ".zip"
#define CENTRAL_HDR_SIG "\113\001\002" /* the infamous "PK" signature */
#define LOCAL_HDR_SIG "\113\003\004" /* bytes, sans "P" (so unzip */
#define END_CENTRAL_SIG "\113\005\006" /* executable not mistaken for */
#define EXTD_LOCAL_SIG "\113\007\010" /* zipfile itself) */
#define SKIP 0 /* choice of activities for do_string() */
#define DISPLAY 1
#define FILENAME 2
#define EXTRA_FIELD 3
#define DOES_NOT_EXIST -1 /* return values for check_for_newer() */
#define EXISTS_AND_OLDER 0
#define EXISTS_AND_NEWER 1
#define DOS_OS2_FAT_ 0 /* version_made_by codes (central dir) */
#define AMIGA_ 1
#define VMS_ 2 /* make sure these are not defined on */
#define UNIX_ 3 /* the respective systems!! (like, for */
#define VM_CMS_ 4 /* instance, "VMS", or "UNIX": CFLAGS = */
#define ATARI_ 5 /* -O -DUNIX) */
#define OS2_HPFS_ 6
#define MAC_ 7
#define Z_SYSTEM_ 8
#define CPM_ 9
/* #define TOPS20_ 10? (TOPS20_ is to be defined in PKZIP 2.0...) */
#define NUM_HOSTS 10 /* index of last system + 1 */
#define STORED 0 /* compression methods */
#define SHRUNK 1
#define REDUCED1 2
#define REDUCED2 3
#define REDUCED3 4
#define REDUCED4 5
#define IMPLODED 6
#define TOKENIZED 7
#define DEFLATED 8
#define NUM_METHODS 9 /* index of last method + 1 */
/* don't forget to update list_files() appropriately if NUM_METHODS changes */
#define DF_MDY 0 /* date format 10/26/91 (USA only) */
#define DF_DMY 1 /* date format 26/10/91 (most of the world) */
#define DF_YMD 2 /* date format 91/10/26 (a few countries) */
#define UNZIP_VERSION 20 /* compatible with PKUNZIP 2.0 */
#define VMS_VERSION 42 /* if OS-needed-to-extract is VMS: can do */
/*---------------------------------------------------------------------------
True sizes of the various headers, as defined by PKWare--so it is not
likely that these will ever change. But if they do, make sure both these
defines AND the typedefs below get updated accordingly.
---------------------------------------------------------------------------*/
#define LREC_SIZE 26 /* lengths of local file headers, central */
#define CREC_SIZE 42 /* directory headers, and the end-of- */
#define ECREC_SIZE 18 /* central-dir record, respectively */
#define MAX_BITS 13 /* used in unShrink() */
#define HSIZE (1 << MAX_BITS) /* size of global work area */
#define LF 10 /* '\n' on ASCII machines. Must be 10 due to EBCDIC */
#define CR 13 /* '\r' on ASCII machines. Must be 13 due to EBCDIC */
#define CTRLZ 26 /* DOS & OS/2 EOF marker (used in file_io.c, vms.c) */
#ifdef EBCDIC
# define ascii_to_native(c) ebcdic[(c)]
# define NATIVE "EBCDIC"
#endif
#if MPW
# define FFLUSH putc('\n',stderr);
#else /* !MPW */
# define FFLUSH fflush(stderr);
#endif /* ?MPW */
#ifdef VMS
# define ENV_UNZIP "UNZIP_OPTS" /* name of environment variable */
# define ENV_ZIPINFO "ZIPINFO_OPTS"
#else /* !VMS */
# define ENV_UNZIP "UNZIP"
# define ENV_ZIPINFO "ZIPINFO"
#endif /* ?VMS */
#ifdef CRYPT
# define PWLEN 80
# define DECRYPT(b) (update_keys(t=((b)&0xff)^decrypt_byte()),t)
#endif /* CRYPT */
#ifdef QQ /* Newtware version */
# define QCOND (!quietflg) /* for no file comments with -vq or -vqq */
#else /* (original) Bill Davidsen version */
# define QCOND (which_hdr) /* no way to kill file comments with -v, -l */
#endif
#ifndef TRUE
# define TRUE 1 /* sort of obvious */
#endif
#ifndef FALSE
# define FALSE 0
#endif
#ifndef SEEK_SET /* These should all be declared in stdio.h! But */
# define SEEK_SET 0 /* since they're not (in many cases), do so here. */
# define SEEK_CUR 1
# define SEEK_END 2
#endif
#ifndef S_IRUSR
# define S_IRWXU 00700 /* read, write, execute: owner */
# define S_IRUSR 00400 /* read permission: owner */
# define S_IWUSR 00200 /* write permission: owner */
# define S_IXUSR 00100 /* execute permission: owner */
# define S_IRWXG 00070 /* read, write, execute: group */
# define S_IRGRP 00040 /* read permission: group */
# define S_IWGRP 00020 /* write permission: group */
# define S_IXGRP 00010 /* execute permission: group */
# define S_IRWXO 00007 /* read, write, execute: other */
# define S_IROTH 00004 /* read permission: other */
# define S_IWOTH 00002 /* write permission: other */
# define S_IXOTH 00001 /* execute permission: other */
#endif /* !S_IRUSR */
#ifdef ZIPINFO /* these are individually checked because SysV doesn't */
# ifndef S_IFBLK /* have some of them, Microsoft C others, etc. */
# define S_IFBLK 0060000 /* block special */
# endif
# ifndef S_IFIFO /* in Borland C, not MSC */
# define S_IFIFO 0010000 /* fifo */
# endif
# ifndef S_IFLNK /* in BSD, not SysV */
# define S_IFLNK 0120000 /* symbolic link */
# endif
# ifndef S_IFSOCK /* in BSD, not SysV */
# define S_IFSOCK 0140000 /* socket */
# endif
# ifndef S_ISUID
# define S_ISUID 04000 /* set user id on execution */
# endif
# ifndef S_ISGID
# define S_ISGID 02000 /* set group id on execution */
# endif
# ifndef S_ISVTX
# define S_ISVTX 01000 /* directory permissions control */
# endif
# ifndef S_ENFMT
# define S_ENFMT S_ISGID /* record locking enforcement flag */
# endif
#endif /* ZIPINFO */
/**************/
/* Typedefs */
/**************/
#ifndef _BULL_SOURCE /* Bull has it defined somewhere already */
typedef unsigned char byte; /* code assumes UNSIGNED bytes */
#endif /* !_BULL_SOURCE */
typedef char boolean;
typedef long longint;
typedef unsigned short UWORD;
typedef unsigned long ULONG;
typedef unsigned char uch;
typedef unsigned short ush;
typedef unsigned long ulg;
typedef struct min_info {
unsigned unix_attr;
unsigned dos_attr;
int hostnum;
longint offset;
ULONG compr_size; /* compressed size (needed if extended header) */
ULONG crc; /* crc (needed if extended header) */
unsigned encrypted : 1; /* file encrypted: decrypt before uncompressing */
unsigned ExtLocHdr : 1; /* use time instead of CRC for decrypt check */
unsigned text : 1; /* file is text or binary */
unsigned lcflag : 1; /* convert filename to lowercase */
} min_info;
typedef struct VMStimbuf {
char *revdate; /* (both correspond to Unix modtime/st_mtime) */
char *credate;
} VMStimbuf;
/*---------------------------------------------------------------------------
Zipfile layout declarations. If these headers ever change, make sure the
xxREC_SIZE defines (above) change with them!
---------------------------------------------------------------------------*/
typedef byte local_byte_hdr[ LREC_SIZE ];
# define L_VERSION_NEEDED_TO_EXTRACT_0 0
# define L_VERSION_NEEDED_TO_EXTRACT_1 1
# define L_GENERAL_PURPOSE_BIT_FLAG 2
# define L_COMPRESSION_METHOD 4
# define L_LAST_MOD_FILE_TIME 6
# define L_LAST_MOD_FILE_DATE 8
# define L_CRC32 10
# define L_COMPRESSED_SIZE 14
# define L_UNCOMPRESSED_SIZE 18
# define L_FILENAME_LENGTH 22
# define L_EXTRA_FIELD_LENGTH 24
typedef byte cdir_byte_hdr[ CREC_SIZE ];
# define C_VERSION_MADE_BY_0 0
# define C_VERSION_MADE_BY_1 1
# define C_VERSION_NEEDED_TO_EXTRACT_0 2
# define C_VERSION_NEEDED_TO_EXTRACT_1 3
# define C_GENERAL_PURPOSE_BIT_FLAG 4
# define C_COMPRESSION_METHOD 6
# define C_LAST_MOD_FILE_TIME 8
# define C_LAST_MOD_FILE_DATE 10
# define C_CRC32 12
# define C_COMPRESSED_SIZE 16
# define C_UNCOMPRESSED_SIZE 20
# define C_FILENAME_LENGTH 24
# define C_EXTRA_FIELD_LENGTH 26
# define C_FILE_COMMENT_LENGTH 28
# define C_DISK_NUMBER_START 30
# define C_INTERNAL_FILE_ATTRIBUTES 32
# define C_EXTERNAL_FILE_ATTRIBUTES 34
# define C_RELATIVE_OFFSET_LOCAL_HEADER 38
typedef byte ec_byte_rec[ ECREC_SIZE+4 ];
/* define SIGNATURE 0 space-holder only */
# define NUMBER_THIS_DISK 4
# define NUM_DISK_WITH_START_CENTRAL_DIR 6
# define NUM_ENTRIES_CENTRL_DIR_THS_DISK 8
# define TOTAL_ENTRIES_CENTRAL_DIR 10
# define SIZE_CENTRAL_DIRECTORY 12
# define OFFSET_START_CENTRAL_DIRECTORY 16
# define ZIPFILE_COMMENT_LENGTH 20
typedef struct local_file_header { /* LOCAL */
byte version_needed_to_extract[2];
UWORD general_purpose_bit_flag;
UWORD compression_method;
UWORD last_mod_file_time;
UWORD last_mod_file_date;
ULONG crc32;
ULONG compressed_size;
ULONG uncompressed_size;
UWORD filename_length;
UWORD extra_field_length;
} local_file_hdr;
typedef struct central_directory_file_header { /* CENTRAL */
byte version_made_by[2];
byte version_needed_to_extract[2];
UWORD general_purpose_bit_flag;
UWORD compression_method;
UWORD last_mod_file_time;
UWORD last_mod_file_date;
ULONG crc32;
ULONG compressed_size;
ULONG uncompressed_size;
UWORD filename_length;
UWORD extra_field_length;
UWORD file_comment_length;
UWORD disk_number_start;
UWORD internal_file_attributes;
ULONG external_file_attributes;
ULONG relative_offset_local_header;
} cdir_file_hdr;
typedef struct end_central_dir_record { /* END CENTRAL */
UWORD number_this_disk;
UWORD num_disk_with_start_central_dir;
UWORD num_entries_centrl_dir_ths_disk;
UWORD total_entries_central_dir;
ULONG size_central_directory;
ULONG offset_start_central_directory;
UWORD zipfile_comment_length;
} ecdir_rec;
/*************************/
/* Function Prototypes */
/*************************/
#ifndef __
# define __ OF
#endif
/*---------------------------------------------------------------------------
Functions in unzip.c and/or zipinfo.c:
---------------------------------------------------------------------------*/
int usage __((int error));
int process_zipfile __((void));
int find_end_central_dir __((void));
int process_end_central_dir __((void));
int list_files __((void)); /* unzip.c */
int process_cdir_file_hdr __((void)); /* unzip.c */
int process_local_file_hdr __((void)); /* unzip.c */
int process_central_dir __((void));
int long_info __((void)); /* zipinfo.c */
int short_info __((void)); /* zipinfo.c */
char *zipinfo_time __((UWORD *datez, UWORD *timez));
/*---------------------------------------------------------------------------
Functions in extract.c:
---------------------------------------------------------------------------*/
int extract_or_test_files __((void));
/* static int store_info __((void)); */
/* static int extract_or_test_member __((void)); */
int memextract __((byte *, ULONG, byte *, ULONG));
int FlushMemory __((void));
int ReadMemoryByte __((UWORD *x));
/*---------------------------------------------------------------------------
Decompression functions:
---------------------------------------------------------------------------*/
int explode __((void)); /* explode.c */
int inflate __((void)); /* inflate.c */
void unReduce __((void)); /* unreduce.c */
/* static void LoadFollowers __((void)); * unreduce.c */
void unShrink __((void)); /* unshrink.c */
/* static void partial_clear __((void)); * unshrink.c */
/*---------------------------------------------------------------------------
Functions in file_io.c and crypt.c:
---------------------------------------------------------------------------*/
int open_input_file __((void)); /* file_io.c */
int readbuf __((char *buf, register unsigned len));
int create_output_file __((void)); /* file_io.c, vms.c */
int FillBitBuffer __((void)); /* file_io.c */
int ReadByte __((UWORD *x)); /* file_io.c */
int FlushOutput __((void)); /* file_io.c, vms.c */
/* static int dos2unix __((unsigned char *, int)); * file_io.c */
void set_file_time_and_close __((void)); /* file_io.c */
void handler __((int signal)); /* file_io.c */
int echo __((int opt)); /* file_io.c */
void echoff __((int f)); /* file_io.c */
void echon __((void)); /* file_io.c */
char *getp __((char *, char *, int)); /* file_io.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -