info_zip windll.txt 的翻译

自己用的,有人用的着也是好事一件:

 

  1. There are now several entry points to the dll.
  2. There is a single "unzipping" entry point of:
  3. int WINAPI Wiz_SingleEntryUnzip(int ifnc, char **ifnv, int xfnc, char **xfnv,
  4.                                 LPDCL lpDCL, LPUSERFUNCTIONS lpUserFunc)
  5. where the arguments are:
  6. ifnc       = number of file names being passed. If all files are to be
  7.              extracted, then this can be zero.
  8.              //正被解压的文件名个数,如果需解压所有文件,可设这个参数为0。
  9. ifnv       = file names to be unarchived. Wildcard patterns are recognized
  10.              and expanded. If all files are to be extracted, then this can
  11.              be NULL.
  12.              //解压的文件名,可使用通配符。如果需解压所有文件,可设这个参数为NULL。
  13. xfnc       = number of "file names to be excluded from processing" being
  14.              passed. If all files are to be extracted, set this to zero.
  15.              //“没有被处理的文件名”个数。如果需解压所有文件,可设这个参数为0。
  16. xfnv       = file names to be excluded from the unarchiving process. Wildcard
  17.              characters are allowed and expanded. If all files are to be
  18.              extracted, set this argument to NULL.
  19.              //不被解压处理的文件名,可使用通配符。如果需解压所有文件,可设这个参数为NULL。
  20. lpDCL      = pointer to a structure with the flags for setting the
  21.              various options, as well as the zip file name.
  22.              //一个结构体的指针,通过它可以设置许多选项。比如文件名等。
  23. lpUserFunc = pointer to a structure that contains pointers to functions
  24.              in the calling application, as well as sizes passed back to
  25.              the calling application etc. See below for a detailed description
  26.              of all the parameters.
  27.                          //指向包含一个函数指针的结构体,这个被函数放在调用应用程序中。下面详细
  28.                          //说明各个参数的用法。
  29. The DCL structure is shown below:
  30. typedef struct {
  31. int ExtractOnlyNewer    = true for "update" without interaction
  32.                           (extract only newer/new files, without queries)
  33.                           //不需交互的“升级”(解压新文件,不询问用户)
  34. int SpaceToUnderscore   = true if convert space to underscore
  35.                                                     //将空格转换为下划线。
  36. int PromptToOverwrite   = true if prompt to overwrite is wanted
  37.                                                     //覆盖将被禁止。
  38. int fQuiet              = quiet flag:
  39.                            0 = all messages, 1 = few messages, 2 = no messages
  40.                          // 安静模式:0 = 所有信息, 1 = 很少信息, 2 = 没有信息
  41. int ncflag              = write to stdout if true //写入标准控制台
  42. int ntflag              = test zip file //测试zip文件
  43. int nvflag              = verbose listing //冗长的监听
  44. int nfflag              = "freshen" (replace existing files by newer versions)
  45.                                                     //“更新的”(用新的代替旧的文件)
  46. int nzflag              = display zip file comment显示zip文件注释
  47. int ndflag              = controls (sub)directory recreation during extraction
  48.                           0 = junk paths from filenames
  49.                           1 = "safe" usage of paths in filenames (skip "../")
  50.                           2 = allow also unsafe path components (dir traversal)
  51.                           //控制解压过程中(子)路径的重新创建
  52.                           //0 = 从文件名中忽略路径
  53.                           //1 = 文件名中的有效路径 (跳过 "../")
  54.                           //2 = 允许非安全路径 (目录遍历)
  55. int noflag              = true if you are to always overwrite existing files
  56.                                                     //总是覆盖已存在文件
  57. int naflag              = do end-of-line translation //进行行尾标识符转换
  58. int nZIflag             = get ZipInfo if TRUE  //获取ZipInfo
  59. int C_flag              = be case insensitive if TRUE  //区分大小写
  60. int fPrivilege          = 1 => restore ACLs in user mode, //在用户模式下恢复ACLs
  61.                           2 => try to use privileges for restoring ACLs
  62.                                //尝试使用的特权,恢复ACL
  63. LPSTR lpszZipFN         = zip file name //zip文件名
  64. LPSTR lpszExtractDir    = directory to extract to. This should be NULL if you
  65.                           are extracting to the current directory.
  66.                           //解压路径,如果您是提取到当前目录,就设为NUll。
  67. } DCL, far * LPDCL;
  68. REMARKS:
  69. The four extract-mode flags ExtractOnlyNewer, nfflag, PromptToOverwrite, and
  70. noflag control which of the selected archive entries are actually processed.
  71. They are mapped to UnZip's command line qualifiers "-u""-f""-o""-n"
  72. according to the following decision matrix:
  73. //ExtractOnlyNewer, nfflag, PromptToOverwrite, noflag 四个标志控制文档的实际处理
  74. //过程,和UnZip命令行的对应关系见下面的决策矩阵:
  75.  _____________________________________________________________________
  76.  | UnZip 1)|| Extract-  | nfflag | noflag | PrompTo-  | lpUserFunc   |
  77.  | options || OnlyNewer |        |        | Overwrite | ->replape()  |
  78.  =====================================================================
  79.  | none 2) ||   false   |  false |  false |   true    |queryfunc() 5)|
  80.  | -o      ||   false   |  false |  true  |   false   |     N/A      |
  81.  | -n      ||   false   |  false |  false |   false   |     N/A      |
  82.  |---------||-----------|--------|--------|-----------|--------------|
  83.  | -u      ||   true    |  false |  false |   true    |queryfunc() 5)|
  84.  | -uo     ||   true    |  false |  true  |   false   |     N/A      |
  85.  | -un  3) ||   true    |  false |  false |   false   |     N/A      |
  86.  |---------||-----------|--------|--------|-----------|--------------|
  87.  | -f      ||    N/A    |  true  |  false |   true    |queryfunc() 5)|
  88.  | -fo     ||    N/A    |  true  |  true  |   false   |     N/A      |
  89.  | -fn  4) ||    N/A    |  true  |  false |   false   |     N/A      |
  90.  ---------------------------------------------------------------------
  91.  Legend: true:  integer number <> 0
  92.          false: integer number 0
  93.      N/A:   not applicable, could be set to any value
  94.                     //不可用,可设为任意值
  95.  NOTES:
  96.  1) The UnZip options are explained in the generic UnZip manual, see
  97.     "unzip.txt" or "man/unzip.1".
  98.  2) no options from the set "ufno" are specified.
  99.  3) -un is functionally equivalent to -n
  100.  4) -fn is functionally equivalent to "do nothing", so this combination
  101.     does not make sense.
  102.  5) queryfunc() is a callback function provided by the caller of the
  103.     unzip dll that may return one of the following result keys:
  104.     //queryfunc()是由unzip dll的调用者提供的回调函数,它可能返回下面的值:
  105.      IDM_REPLACE_NO, IDM_REPLACE_YES,
  106.      IDM_REPLACE_ALL, IDM_REPLACE_NONE,
  107.      IDM_REPLACE_RENAME
  108.      (IDM_REPLACE_TEXT, IDM_REPLACE_HELP are defined but not used)
  109.     UnZip's internal code treats a "NULL" lpUserFunc->replace() function
  110.     pointer as "{return IDM_REPLACE_NONE}". However, currently, the windll
  111.     interface checks for this function pointer to be not NULL and signals
  112.     a fatal error if this condition is not fulfilled.
  113. The typedef's for the function pointers in the structure USERFUNCTIONS
  114. are shown immediately below.
  115. //在USERFUNCTIONS中的函数指针的宏定义如下:
  116. typedef unsigned short ush;
  117. typedef int (WINAPI DLLPRNT) (LPSTR, unsigned long);
  118. typedef int (WINAPI DLLPASSWORD) (LPSTR, int, LPCSTR, LPCSTR);
  119. typedef int (WINAPI DLLSERVICE) (LPSTR, unsigned long);
  120. typedef void (WINAPI DLLSND) (void);
  121. typedef int (WINAPI DLLREPLACE)(LPSTR);
  122. typedef void (WINAPI DLLMESSAGE)(unsigned long, unsigned long, unsigned,
  123.    unsigned, unsigned, unsigned, unsigned, unsigned,
  124.    char, LPSTR, LPSTR, unsigned longchar);
  125. Structure USERFUNCTIONS
  126. typedef struct {
  127. DLLPRNT *print;         = a pointer to the application's print routine.
  128.                                                     //指向打印的应用程序的例行函数
  129. DLLSND *sound;          = a pointer to the application's sound routine. This
  130.                           can be NULL if your application doesn't use
  131.                           sound.
  132.                           //指向声音的应用程序的例行函数。如果应用程序不使用声音,
  133.                           //可以设为NULL。
  134. DLLREPLACE *replace     = a pointer to the application's replace routine.
  135.                                                     指向替换的函数指针。
  136. DLLPASSWORD *password   = a pointer to the application's password routine.
  137.                                                     //指向密码的函数指针。
  138. DLLMESSAGE *SendApplicationMessage = a pointer to the application's routine
  139.                           for displaying information about specific files
  140.                           in the archive. Used for listing the contents of
  141.                           an archive.
  142.                           //显示信息的应用程序函数指针,这些信息是关于文档中文件
  143.                           //的详细说明。用于监听一个文档的内容。
  144. DLLSERVICE *ServCallBk  = Callback function designed to be used for
  145.                           allowing the application to process Windows messages,
  146.                           or canceling the operation, as well as giving the
  147.                           option of a progress indicator. If this function
  148.                           returns a non-zero value, then it will terminate
  149.                           what it is doing. It provides the application with
  150.                           the name of the name of the archive member it has
  151.                           just processed, as well as it's original size.
  152.                           //这个回调函数设计的目的是为了处理或者撤消处理给
  153.                           //定标识的Windows消息,如果这个函数返回的是个非0值,
  154.                           //那么它会终止它所做的事情,它提供程序已经处理的文档名称
  155.                           //以及它的原始大小。
  156.                           
  157. NOTE: The values below are filled in only when listing the contents of an
  158.       archive.
  159. //注意:下面的值只有在监听文档内容的时候才被填充。
  160. unsigned long TotalSizeComp = value to be filled in by the dll for the
  161.                           compressed total size of the archive. Note this
  162.                           value does not include the size of the archive
  163.                           header and central directory list.
  164.                           //dll将填充这个值,这个值代表压缩后的文档总大小。注意,
  165.                           //这个值不包括文档头和里面目录的大小。
  166. unsigned long TotalSize = value to be filled in by the dll for the total
  167.                           size of all files in the archive.
  168.                           //dll将填充这个值,这个值代表整个文档的大小。
  169. unsigned long CompFactor = value to be filled in by the dll for the overall
  170.                           compression factor. This could actually be computed
  171.                           from the other values, but it is available.
  172.                           //dll将填充这个值,这个值代表压缩比。实际上它可以从其它
  173.                           //值计算出来,但这个是可信的。
  174. unsigned long NumMembers = total number of files in the archive.
  175.                                                         //文档中的文件总数。
  176. WORD cchComment;        = flag to be set if archive has a comment
  177.                                                     //如果文档包含注释,这个标志将被设置。
  178. } USERFUNCTIONS, far * LPUSERFUNCTIONS;
  179. Wiz_SingleEntryUnzip() returns a PKWARE compatible error code (0 if no
  180. error or warning). For an explanation of the supported error codes see
  181. the UnZip user documentation (the UnZip man page).
  182. //Wiz_SingleEntryUnzip() 返回一个与PKWARE兼容的错误代码(如果没有错误或警告它将是0)
  183. For examples of how the actual calls to the dll are set up in WiZ, look in
  184. the files action.c and wizmain.c in the WiZ source directory. For a trival
  185. example of how to load and call the dll, look in uzexampl.c and uzexampl.h.
  186. //关于怎样调用和设置WIZ的实际过程,请参考WiZ源目录下的 action.c 和 wizmain.c ,
  187. //一个简单的例子关于怎样加载和调用这个DLL,请参见uzexampl.c 和 uzexampl.h。 
  188. For examples of how the actual loading and unloading of the dll's themselves
  189. was done, look in wizmain.c in the WiZ source directory. Note that WiZ looks
  190. specifically for a particular version number of the dll, and also expects to
  191. find the company name to be Info-ZIP. This is to protect from getting
  192. different versions of the dll loaded, with resulting unknown behavior.
  193. Additional entry points:
  194.     void WINAPI UzpVersion2(UzpVer far *);
  195. where UzpVer is defined as:
  196. typedef struct _UzpVer {
  197.     ulg structlen;          /* length of the struct being passed */
  198.     ulg flag;               /* bit 0: is_beta   bit 1: uses_zlib */
  199.     LPSTR betalevel;        /* e.g., "g BETA" or "" */
  200.     LPSTR date;             /* e.g., "4 Sep 95" (beta) or "4 September 1995" */
  201.     LPSTR zlib_version;     /* e.g., "1.0.5" or NULL */
  202.     _version_type unzip;
  203.     _version_type zipinfo;
  204.     _version_type os2dll;
  205.     _version_type windll;
  206. } UzpVer;
  207. and _version_type is defined as:
  208. typedef struct _ver {
  209.     uch major;              /* e.g., integer 5 */
  210.     uch minor;              /* e.g., 2 */
  211.     uch patchlevel;         /* e.g., 0 */
  212.     uch not_used;
  213. } _version_type;
  214.    See api.c for exactly what UzpVersion2 does, but the short version of
  215.    what it does is fill in the version information in the UzpVer structure.
  216. void WINAPI Wiz_NoPrinting(int flag)
  217.    This entry point simply turns off all messages to the calling application if
  218.    flag is true, and turns them on if flag is false.
  219. int WINAPI Wiz_Validate(LPSTR archive, int AllCodes)
  220.    If AllCodes is FALSE, then Unz_Validate returns TRUE if archive points to a
  221.    valid archive, and FALSE otherwise. If AllCodes is TRUE, then Unz_Validate
  222.    returns whatever error code process_zipfiles returns, without evaluating it.
  223. int WINAPI Wiz_UnzipToMemory(LPSTR zip, LPSTR file, LPUSERFUNCTIONS lpUserFunc,
  224.                              UzpBuffer *retstr)
  225.    Where UzpBuffer is defined as:
  226.    typedef struct _UzpBuffer {
  227.       ulg strlength; /* length of string */
  228.       char * strptr; /* pointer to string */
  229.    } UzpBuffer
  230.    Pass the name of the zip file in zip and the name of the file you wish to
  231.    extract in file. UzpUnzipToMemory will create a buffer and return it in
  232.    *retstr. 0 on return indicates failure.
  233.    
  234.    //传入压缩文件名和你希望解压的文件。Wiz_UnzipToMemory将创建一个缓存并通过*retstr返回。
  235.    //如果失败将返回0。
  236. void WINAPI UzpFreeMemBuffer(UzpBuffer *retstr)
  237.    Use this routine to release the return data space allocated by the function
  238.    Wiz_UnzipToMemory().
  239.    //释放 Wiz_UnzipToMemory() 创建的缓存。
  240.    
  241. int WINAPI Wiz_Grep(LPSTR archive, LPSTR file, LPSTR pattern, int cmd,
  242.                     int SkipBin, LPUSERFUNCTIONS lpUserFunc)
  243.    Pass the name of the zip file in "zip", the name of the zip entry you wish
  244.    to perform the "grep" on in "file", and the string you wish to look for in
  245.    "pattern". There are four possible options for code:
  246.   //传入zip文件中的文档名,待搜索的zip名,查找的字符串和下面的四个选项:
  247.    0 => case insensitive search
  248.    1 => case sensitive search
  249.    2 => case insensitive search, whole words only
  250.    3 => case sensitive search, whole words only
  251.    If SkipBin is TRUE, then any binary (loosely interpreted) files will be
  252.    ignored.
  253.    lpUserFunc is a pointer to a USERFUNCTION structure as shown above.
  254.    UzpGrep returns:
  255.    -1 => error such as unable to allocate memory, unable to find file, etc.
  256.     0 => match not found, based on the search criteria
  257.     1 => match found, based on the search criteria
  258. There is an additional function call that does not specifically deal with
  259. "unzipping", but is a quite useful function that is currently used in Wiz
  260. itself in several places. This call is currently only available in the
  261. static library, not in the DLL.
  262. //这里有一个额外的函数,它不用于处理“解压”工作。但是却相当的有用,它在Wiz中的
  263. //许多地方被用到。它只能在静态库中有用。
  264. Match the pattern (wildcard) against the string (fixed):
  265.   match(string, pattern, ignore_case);
  266.   returns TRUE if string matches pattern, FALSE otherwise.  In the pattern:
  267.      `*' matches any sequence of characters (zero or more)
  268.      `?' matches any single character
  269.      [SET] matches any character in the specified set,
  270.      [!SET] or [^SET] matches any character not in the specified set.
  271.   A set is composed of characters or ranges; a range looks like ``character
  272.   hyphen character'' (as in 0-9 or A-Z).  [0-9a-zA-Z_] is the minimal set of
  273.   characters allowed in the [..] pattern construct.  Other characters are
  274.   allowed (i.e., 8-bit characters) if your system will support them.
  275.   To suppress the special syntactic significance of any of ``[]*?!^-/''in-
  276.   side or outside a [..] construct, and match the character exactly, precede
  277.   it with a ``/'' (backslash).
  278. The remaining functions are linked together. Their use would be as
  279. follows (explanations for each function are shown further below):
  280. //剩下的函数是联系在一起的。它们将像下面展示的这样被使用
  281.     #include "windll.h"
  282.     #include "structs.h"
  283.     MyApiCallingRoutine()
  284.     {
  285.         CREATEGLOBALS();
  286.         .
  287.         .
  288.         .
  289.         Wiz_Init(pG, lpUserFunctions); /* Set up user functions */
  290.         /* zvoid *pG, LPUSERFUNCTIONS lpUserFunctions */
  291.         .
  292.         .
  293.         do {
  294.           .
  295.           .
  296.           Wiz_SetOpts(pG, lpDCL); /* Set up unzipping options */
  297.           /* zvoid *pG, LPDCL lpDCL */
  298.           .
  299.           .
  300.           Wiz_Unzip(pG, ifnc, ifnv, xfnc, xfnv); /* Unzip files */
  301.           .
  302.           .
  303.         } while (!finished_condition)
  304.         .
  305.         .
  306.         DESTROYGLOBALS();
  307.     }
  308. Each entry point is as defined below:
  309.     BOOL WINAPI Wiz_Init(zvoid *, LPUSERFUNCTIONS);
  310.     BOOL WINAPI Wiz_SetOpts(zvoid *, LPDCL);
  311.     int WINAPI Wiz_Unzip(zvoid *, intchar **, intchar **);
  312. Note that you should use either Wiz_SingleEntryUnzip OR the series of calls
  313. described above. Using both, depending on how you do it, could cause
  314. problems. The series of "lower level" gives you more freedom to add additional
  315. functionalities, whereas the single-entry api is easier to use. When using
  316. the "series" of calls, make sure that Wiz_SetOpts and Wiz_Unzip are always
  317. used together! When successfully called, Wiz_SetOpts has allocated some
  318. internal structures which are in turn free'd by Wiz_Unzip.
  319. //注意,你应该使用Wiz_SingleEntryUnzip或上面描述的一系列函数。同时使用
  320. //(看你怎么用),可能会引发问题。较低级别的函数给你更大的自由,你可以添加额外的
  321. //函数。与此相比single-entry api更加容易使用。当你使用上面的一系列函数时,注意要
  322. //让Wiz_SetOpts 和 Wiz_Unzip一起使用!当调用成功,Wiz_Unzip将释放Wiz_SetOpts已经
  323. //分配的内部结构。
  324. Last revised February 27, 2005.
  325. Mike White, Christian Spieler

你可能感兴趣的:(windows,null,Integer,文档,dll,wildcard)