which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5403 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			209 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
The code set out below is not intended to be compiled, but is only intended
 | 
						|
as a very simplistic pointer to how to load and call the dll. You will have
 | 
						|
to look in the files referenced below for actual, working code.
 | 
						|
 | 
						|
There are now five entry points to the dll.
 | 
						|
 | 
						|
There is a single "unzipping" entry point of:
 | 
						|
 | 
						|
windll_unzip(int argc, char **argv, DCL far*lpDCL,
 | 
						|
     USERFUNCTIONS far *lpUserFunc)
 | 
						|
 | 
						|
where the arguments are:
 | 
						|
 | 
						|
argc       = number of file names being passed. If all files are to be
 | 
						|
             extracted, then this can be zero.
 | 
						|
argv       = file names to be unarchived. If all files are to be extracted,
 | 
						|
             then this can be null.
 | 
						|
lpDCL      = pointer to a structure with the flags for setting the
 | 
						|
             various options, as well as the zip file name.
 | 
						|
lpUserFunc = pointer to a structure that contains pointers to functions
 | 
						|
             in the calling application, as well as sizes passed back to
 | 
						|
             the calling application etc. See below for a detailed description
 | 
						|
             of all the parameters
 | 
						|
 | 
						|
The DCL structure is shown below:
 | 
						|
 | 
						|
typedef struct {
 | 
						|
int ExtractOnlyNewer;   = true if you are to extract only newer
 | 
						|
int Overwrite;          = true if always overwrite files
 | 
						|
int SpaceToUnderscore;  = true if convert space to underscore
 | 
						|
int PromptToOverwrite;  = true if prompt to overwrite is wanted
 | 
						|
int ncflag              = write to stdout if true
 | 
						|
int ntflag              = test zip file
 | 
						|
int nvflag              = verbose listing
 | 
						|
int nUflag              = "update" (extract only newer/new files
 | 
						|
int nzflag              = display zip file comment
 | 
						|
int ndflag              = all args are files/dir to be extracted
 | 
						|
int noflag              = true if you are to over-write files, false if not
 | 
						|
int naflag              = do ASCII-EBCDIC and/or end of line translation
 | 
						|
int fPrivilege          = 1 => restore Acl's, 2 => Use privileges
 | 
						|
LPSTR lpszZipFN         = zip file name
 | 
						|
} DCL, _far *LPDCL;
 | 
						|
 | 
						|
The typedef's for the function pointers in the structure USERFUNCTIONS
 | 
						|
are shown immediately below.
 | 
						|
 | 
						|
typedef unsigned short ush;
 | 
						|
typedef int (WINAPI DLLPRNT) (char * far, unsigned long);
 | 
						|
typedef int (WINAPI DLLPASSWORD) (char *, int, const char *, const char *);
 | 
						|
typedef void (WINAPI DLLSND) (void);
 | 
						|
typedef int (WINAPI DLLREPLACE)(char *);
 | 
						|
typedef void (WINAPI DLLMESSAGE)(unsigned long, unsigned long,
 | 
						|
   ush, ush, ush, ush, ush, ush, char, char *, char *, unsigned long, char);
 | 
						|
 | 
						|
Structure USERFUNCTIONS
 | 
						|
 | 
						|
typedef struct {
 | 
						|
DLLPRNT *print;         = a pointer to the application's print routine.
 | 
						|
DLLSND *sound;          = a pointer to the application's sound routine. This
 | 
						|
                          can be NULL if your application doesn't use
 | 
						|
                          sound.
 | 
						|
DLLREPLACE *replace     = a pointer to the application's replace routine.
 | 
						|
DLLPASSWORD *password   = a pointer to the application's password routine.
 | 
						|
DLLMESSAGE *SendApplicationMessage = a pointer to the application's routine
 | 
						|
                          for displaying information about specific files
 | 
						|
                          in the archive. Used for listing the contents of
 | 
						|
                          an archive.
 | 
						|
WORD cchComment;        = flag to be set if archive has a comment
 | 
						|
unsigned long TotalSizeComp = value to be filled in by the dll for the
 | 
						|
                          compressed total size of the archive. Note this
 | 
						|
                          value does not include the size of the archive
 | 
						|
                          header and central directory list.
 | 
						|
unsigned long TotalSize = value to be filled in by the dll for the total
 | 
						|
                          size of all files in the archive.
 | 
						|
int CompFactor          = value to be filled in by the dll for the overall
 | 
						|
                          compression factor. This could actually be computed
 | 
						|
                          from the other values, but it is available.
 | 
						|
unsigned int NumMembers = total number of files in the archive.
 | 
						|
} USERFUNCTIONS, far * LPUSERFUNCTIONS;
 | 
						|
 | 
						|
For examples of how the actual calls to the dll are set up in WiZ, look in
 | 
						|
the files action.c and wizmain.c in the WiZ source directory. For a trival
 | 
						|
example of how to load and call the dll, look in example.c and example.h.
 | 
						|
 | 
						|
For examples of how the actual loading and unloading of the dll's themselves
 | 
						|
was done, look in wizmain.c in the WiZ source directory. Note that WiZ looks
 | 
						|
specifically for a particular version number of the dll, and also expects to
 | 
						|
find the company name to be Info-ZIP. This is to protect from getting
 | 
						|
different versions of the dll loaded, with resulting unknown behavior.
 | 
						|
 | 
						|
There is also a second "single" entry point that was designed for use with
 | 
						|
Visual Basic (and can possibly be used with Delphi also.) NOTE THAT THIS
 | 
						|
ENTRY POINT HAS NOT BEEN ACTUALLY TESTED WITH VISUAL BASIC. It has been
 | 
						|
tested with 'C', and works, but I do not have access to Visual Basic, and
 | 
						|
am not a Visual Basic programmer. If you are trying to use this entry point
 | 
						|
with Visual Basic, you are on your own. I have no idea how to call this
 | 
						|
from Visual Basic.
 | 
						|
 | 
						|
int WINAPI unzipVB(int argc, char **argv, DCL far *lpDCL,
 | 
						|
   VBUSERFUNCTIONS far *lpUF)
 | 
						|
 | 
						|
where the arguments are:
 | 
						|
 | 
						|
argc       = number of file names being passed
 | 
						|
argv       = file names to be unarchived
 | 
						|
lpDCL      = pointer to a structure with the flags for setting the
 | 
						|
             various options, as well as the zip file name.
 | 
						|
lpUF       = pointer to a structure that contains pointers to functions
 | 
						|
             in the calling application.
 | 
						|
 | 
						|
The DCL structure is shown above.
 | 
						|
 | 
						|
The VBUSERFUNCTION structure is as shown below:
 | 
						|
 | 
						|
typedef struct {
 | 
						|
HINSTANCE hInstance;    = The instance of the calling application.
 | 
						|
char print[80];         = A string containing the name of the calling
 | 
						|
                          application's print routine.
 | 
						|
char sound[80];         = A string containing the name of the calling
 | 
						|
                          application's sound routine.
 | 
						|
char replace[80];       = A string containing the name of the calling
 | 
						|
                          application's rename/replace routine.
 | 
						|
char password[80];      = A string containing the name of the calling
 | 
						|
                          application's password routine.
 | 
						|
char SendApplicationMessage[80]; = A string containing the name of the calling
 | 
						|
                          application's routine for displaying information
 | 
						|
                          about specific files in the archive. Used for
 | 
						|
                          listing the contents of an archive.
 | 
						|
WORD cchComment;        = flag to be set if archive has a comment
 | 
						|
unsigned long TotalSizeComp = value to be filled in by the dll for the
 | 
						|
                          compressed total size of the archive. Note this
 | 
						|
                          value does not include the size of the archive
 | 
						|
                          header and central directory list.
 | 
						|
unsigned long TotalSize = value to be filled in by the dll for the total
 | 
						|
                          size of all files in the archive.
 | 
						|
int CompFactor          = value to be filled in by the dll for the overall
 | 
						|
                          compression factor. This could actually be computed
 | 
						|
                          from the other values, but it is available.
 | 
						|
unsigned int NumMembers = total number of files in the archive.
 | 
						|
} VBUSERFUNCTIONS, far * LPVBUSERFUNCTIONS;
 | 
						|
 | 
						|
NOTE: The calling application must export (make available to the dll) the
 | 
						|
      routines for print, sound, replace and SendApplicationMessage.
 | 
						|
 | 
						|
There are four additional entry points:
 | 
						|
 | 
						|
    UzpVersion:
 | 
						|
 | 
						|
    UzpVer * UzpVersion(void);
 | 
						|
 | 
						|
where UzpVer is defined as:
 | 
						|
 | 
						|
typedef struct _UzpVer {
 | 
						|
    ulg structlen;          /* length of the struct being passed */
 | 
						|
    ulg flag;               /* bit 0: is_beta   bit 1: uses_zlib */
 | 
						|
    char *betalevel;        /* e.g., "g BETA" or "" */
 | 
						|
    char *date;             /* e.g., "4 Sep 95" (beta) or "4 September 1995" */
 | 
						|
    char *zlib_version;     /* e.g., "1.0.5" or NULL */
 | 
						|
    _version_type unzip;
 | 
						|
    _version_type zipinfo;
 | 
						|
    _version_type os2dll;
 | 
						|
    _version_type windll;
 | 
						|
} UzpVer;
 | 
						|
 | 
						|
See api.c for exactly what UzpVersion does, but the short version of
 | 
						|
what it does is return the unzip and dll versions in the UzpVer structure.
 | 
						|
 | 
						|
The remaining five functions are linked together. Their use would be as
 | 
						|
follows (explanations of each function is shown further below):
 | 
						|
 | 
						|
    #include "windll.h"
 | 
						|
    MyApiCallingRoutine()
 | 
						|
    {
 | 
						|
        CREATEGLOBALS();
 | 
						|
        .
 | 
						|
        .
 | 
						|
        .
 | 
						|
        Unz_Init(UzpGlobals, lpUserFunctions); /* Set up user functions */
 | 
						|
        .
 | 
						|
        .
 | 
						|
        .
 | 
						|
        Unz_SetOpts(UzpGlobals, lpDCL); /* Set up unzipping options */
 | 
						|
        .
 | 
						|
        .
 | 
						|
        .
 | 
						|
        Unz_Unzip(UzpGlobals, argc, argv); /* Unzip files */
 | 
						|
        .
 | 
						|
        .
 | 
						|
        .
 | 
						|
        DESTROYGLOBALS();
 | 
						|
    }
 | 
						|
 | 
						|
Each entry point is as defined below:
 | 
						|
 | 
						|
    BOOL WINAPI Unz_Init(zvoid *, USERFUNCTIONS far *);
 | 
						|
 | 
						|
    BOOL WINAPI Unz_SetOpts(zvoid *, LPDCL);
 | 
						|
 | 
						|
    int WINAPI Unz_Unzip(zvoid *, int, char **);
 | 
						|
 | 
						|
Note that you should use either windll_unzip OR the series of calls
 | 
						|
described above. Using both, depending on how you do it, could cause
 | 
						|
problems.
 | 
						|
 | 
						|
Last revised May 30, 1997.
 | 
						|
 | 
						|
Mike White
 | 
						|
 |