⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tandem.h

📁 给出了 zip 压缩算法的完整实现过程。
💻 H
字号:
/*  Copyright (c) 1990-1999 Info-ZIP.  All rights reserved.  See the accompanying file LICENSE, version 1999-Oct-05 or later  (the contents of which are also included in zip.h) for terms of use.  If, for some reason, both of these files are missing, the Info-ZIP license  also may be found at:  ftp://ftp.cdrom.com/pub/infozip/license.html*/#ifndef __tandem_h   /* prevent multiple inclusions */#define __tandem_h#define TANDEM       /* better than __TANDEM *//* LICENSED define now supplied by compile time option (MAKE) */#define NO_UNISTD_H#define NO_RMDIR#define NO_MKTEMP#ifdef ZIP#  define USE_CASE_MAP#  define USE_EF_UT_TIME#endif /* ZIP *//* Include file for TANDEM */#ifndef NULL#  define NULL 0#endif#include <time.h>               /* the usual non-BSD time functions */#include <stdio.h>#include <sysstat.h>#include <unistd.h>#include <errno.h>#define PASSWD_FROM_STDIN                  /* Kludge until we know how to open a non-echo tty channel */#define NSK_UNSTRUCTURED   0#define NSK_RELATIVE       1#define NSK_ENTRYSEQUENCED 2#define NSK_KEYSEQUENCED   3#define NSK_OBJECTFILECODE 100#define NSK_EDITFILECODE   101#define NSK_ZIPFILECODE    1001#define TANDEM_BLOCKSIZE   4096#define MAX_NORMAL_READ    4096#define MAX_EDIT_READ      255#define MAX_LARGE_READ        57344#define MAX_LARGE_READ_EXPAND 30720#define MAXFILEPARTLEN     8#define MAXPATHLEN         128#define EXTENSION_MAX      3/* FILENAME_MAX is defined in stdio.h */#define EXIT zexit     /*  To stop creation of Abend files */#define RETURN zexit   /*  To stop creation of Abend files */#define fopen zipopen  /*  To allow us to set extent sizes */#define putc zputc     /*  To allow us to auto flush  *//* Prototype function declarations */void zexit (int);FILE *zipopen(const char *,const char *);int zputc(int,FILE *);int zgetch (void);short parsename(  const char *,  char *,  char *);int islicensed (void);time_t gmt_to_time_t (long long *);/* End of prototype function declarations */#define FOPR "rb"#define FOPM "r+"#define FOPW "wb"#define FOPWT "w"#define CBSZ 0x10000  /* Was used for both fcopy and file_read.        */                      /* Created separate define (SBSZ) for file_read  */                      /* fcopy param is type size_t (unsigned long)    */                      /* For Guardian we choose a multiple of 4K       */#define ZBSZ 0x10000  /* This is used in call to setvbuf, 64K seems to work  */                      /* in all memory models. Again it is an unsigned long  */                      /* For Guardian we choose a multiple of 4K             */#ifndef __INT32#define SBSZ 0x0e000  /* Maximum of size unsigned (int). Only used in STORE  */                      /* method.  We can use up to 56K bytes thanks to large */                      /* transfer mode.  Note WSIZE is limited to 32K, which */                      /* limits the DEFLATE read size to same value.         */#else#define SBSZ 0x10000  /* WIDE model so we can use 64K                        */#endif /* __INT32 */#define NAMELEN FILENAME_MAX+1+EXTENSION_MAX   /* allow for space extension */struct dirent {   struct dirent *d_next;   char   d_name[NAMELEN+1];};typedef struct _DIR {   struct  dirent *D_list;   struct  dirent *D_curpos;   char            D_path[NAMELEN+1];} DIR;DIR *          opendir(const char *dirname);struct dirent *readdir(DIR *dirp);void           rewinddir(DIR *dirp);int            closedir(DIR *dirp);char *         readd(DIR *dirp);#define DISK_DEVICE         3/* SETMODE Literals */#define SET_FILE_SECURITY   1#define SET_FILE_OWNER      2#define SET_FILE_BUFFERED   90#define SET_FILE_BUFFERSIZE 93#define SET_LARGE_TRANSFERS 141/* FILE_OPEN_ Literals */#define NSK_RDWR             0#define NSK_RDONLY           1#define NSK_WRONLY           2#define NSK_APPEND           3#define NSK_SHARED           0#define NSK_EXCLUSIVE        1#define NSK_PROCESSEXCLUSIVE 2#define NSK_PROTECTED        3#define NSK_UNSTRUCTUREDACCESS 0x8000#define NSK_NOUPDATEOPENTIME   0x2000#define NSK_NO_DELIMITER        0x0001#define NSK_USE_FF_DELIMITER    0x0002#define NSK_SPACE_FILL          0x0004#define NSK_TRIM_TRAILING_SPACE 0x0008#define NSK_LARGE_READ_EXPAND   0x0100     /* use smaller value for Expand */#define DOS_EXTENSION      '.'#define TANDEM_EXTENSION   ' '#define TANDEM_DELIMITER   '.'#define TANDEM_NODE        '\\'#define INTERNAL_DELIMITER '/'#define INTERNAL_NODE      '//'#define TANDEM_WILD_1      '*'#define TANDEM_WILD_2      '?'#define DOS_EXTENSION_STR      "."#define TANDEM_EXTENSION_STR   " "#define TANDEM_DELIMITER_STR   "."#define TANDEM_NODE_STR        "\\"#define INTERNAL_DELIMITER_STR "/"#define INTERNAL_NODE_STR      "//"/* Use 'spare' area at end of stat structure to hold additional Tandem/NSK   file details. Initially used to hold Creation time, now also holds most   Enscribe details */struct nsk_stat_reserved{  int64_t spare[3];};typedef struct{  unsigned group   : 8;  unsigned user    : 8;} nsk_owner;typedef struct{  unsigned buffered    : 1;  unsigned audited     : 1;  unsigned acompress   : 1;  unsigned icompress   : 1;  unsigned dcompress   : 1;  unsigned oddunstr    : 1;  unsigned verified    : 1;  unsigned serial      : 1;  unsigned refresheof  : 1;  unsigned broken      : 1;  unsigned corrupt     : 1;  unsigned primpart    : 1;  unsigned secpart     : 1;  unsigned crashopen   : 1;  unsigned rollforward : 1;  unsigned clearonpurge: 1;} nsk_file_flags;typedef struct{  unsigned short filecode;  /* 16 */  unsigned short block;     /* 16 */  /* Allow of block > 4096 one day ! */  nsk_file_flags flags;     /* 16 */  nsk_owner owner;          /* 16 */  unsigned short primext;   /* 16 */  unsigned short secext;    /* 16 */  unsigned maxext    : 10;  unsigned read      : 3;  unsigned write     : 3;  unsigned execute   : 3;  unsigned delete    : 3;  unsigned licensed  : 1;  unsigned progid    : 1;  unsigned keylen    : 8;  unsigned           : 5;  unsigned keyoff    : 11;  unsigned           : 1;  unsigned filetype  : 2;  unsigned fileopen  : 1;  unsigned reclen    : 12;} nsk_file_attrs;struct nsk_stat_overlay{  time_t creation_time;  /* 32 */  char   nsk_ef_start;   /* Start of ef region */};typedef union{  struct nsk_stat_reserved reserved;  struct nsk_stat_overlay  ov;} nsk_stat_ov;#endif /* !__tandem_h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -