123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737 |
- Attribute VB_Name = "VBZipBas"
- Option Explicit
- '---------------------------------------------------------------
- '-- Please Do Not Remove These Comments!!!
- '---------------------------------------------------------------
- '-- Sample VB 6 code to drive zip32z64.dll
- '-- Based on the code contributed to the Info-ZIP project
- '-- by Mike Le Voi
- '--
- '-- See the original VB example in a separate directory for
- '-- more information
- '--
- '-- Use this code at your own risk. Nothing implied or warranted
- '-- to work on your machine :-)
- '---------------------------------------------------------------
- '--
- '-- The Source Code Is Freely Available From Info-ZIP At:
- '-- ftp://ftp.info-zip.org/pub/infozip/infozip.html
- '--
- '-- A Very Special Thanks To Mr. Mike Le Voi
- '-- And Mr. Mike White Of The Info-ZIP
- '-- For Letting Me Use And Modify His Orginal
- '-- Visual Basic 5.0 Code! Thank You Mike Le Voi.
- '---------------------------------------------------------------
- '---------------------------------------------------------------
- ' This example is redesigned to work with Zip32z64.dll compiled from
- ' Zip 3.0 with Zip64 enabled. This allows for archives with more
- ' and larger files than allowed in previous versions.
- '
- ' Modified 4/24/2004, 12/4/2007 by Ed Gordon
- '---------------------------------------------------------------
- '---------------------------------------------------------------
- ' Usage notes:
- '
- ' This code uses Zip32z64.dll. You DO NOT need to register the
- ' DLL to use it. You also DO NOT need to reference it in your
- ' VB project. You DO have to copy the DLL to your SYSTEM
- ' directory, your VB project directory, or place it in a directory
- ' on your command PATH.
- '
- ' Note that Zip32z64 is probably not thread safe so you should avoid
- ' using the dll in multiple threads at the same time without first
- ' testing for interaction.
- '
- ' All code provided under the Info-Zip license. If you have
- ' any questions please contact Info-Zip.
- '
- ' April 24 2004 EG
- '
- '---------------------------------------------------------------
- '-- C Style argv
- '-- Holds The Zip Archive Filenames
- '
- ' Max for zFiles just over 8000 as each pointer takes up 4 bytes and
- ' VB only allows 32 kB of local variables and that includes function
- ' parameters. - 3/19/2004 EG
- '
- ' Can put names in strZipFileNames instead of using this array,
- ' which avoids this limit. File names are separated by spaces.
- ' Enclose names in quotes if include spaces.
- Public Type ZIPnames
- zFiles(1 To 100) As String
- End Type
- '-- Call Back "String"
- Public Type ZipCBChar
- ch(4096) As Byte
- End Type
- '-- Version Structure
- Public Type VerType
- Major As Byte
- Minor As Byte
- PatchLevel As Byte
- NotUsed As Byte
- End Type
- Public Type ZipVerType
- structlen As Long ' Length Of The Structure Being Passed
- flag As Long ' Bit 0: is_beta bit 1: uses_zlib
- Beta As String * 10 ' e.g., "g BETA" or ""
- date As String * 20 ' e.g., "4 Sep 95" (beta) or "4 September 1995"
- ZLIB As String * 10 ' e.g., "1.0.5" or NULL
- encryption As Long ' 0 if encryption not available
- ZipVersion As VerType
- os2dllVersion As VerType
- windllVersion As VerType
- End Type
- '-- ZPOPT Is Used To Set The Options In The ZIP32z64.DLL
- Public Type ZpOpt
- date As String ' Date in either US 12/31/98 or 1998-12-31 format
- szRootDir As String ' Root Directory Pathname (Up To 256 Bytes Long)
- szTempDir As String ' Temp Directory Pathname (Up To 256 Bytes Long)
- fTemp As Long ' 1 If Temp dir Wanted, Else 0
- fSuffix As Long ' Include Suffixes (Not Yet Implemented!)
- fEncrypt As Long ' 1 If Encryption Wanted, Else 0
- fSystem As Long ' 1 To Include System/Hidden Files, Else 0
- fVolume As Long ' 1 If Storing Volume Label, Else 0
- fExtra As Long ' 1 If Excluding Extra Attributes, Else 0
- fNoDirEntries As Long ' 1 If Ignoring Directory Entries (end with /), Else 0
- fExcludeDate As Long ' 1 If Excluding Files After Specified Date, Else 0
- fIncludeDate As Long ' 1 If Including Files After Specified Date, Else 0
- fVerbose As Long ' 1 If Full Messages Wanted, Else 0
- fQuiet As Long ' 1 If Minimum Messages Wanted, Else 0
- fCRLF_LF As Long ' 1 If Translate CR/LF To LF, Else 0
- fLF_CRLF As Long ' 1 If Translate LF To CR/LF, Else 0
- fJunkDir As Long ' 1 If Junking Directory Names on entries, Else 0
- fGrow As Long ' 1 If Allow Appending To Zip File, Else 0
- fForce As Long ' 1 If Making Entries Using DOS File Names, Else 0
- fMove As Long ' 1 If Deleting Files Added Or Updated, Else 0
- fDeleteEntries As Long ' 1 If Files Passed Have To Be Deleted, Else 0
- fUpdate As Long ' 1 If Updating Zip File-Overwrite Only If Newer, Else 0
- fFreshen As Long ' 1 If Freshing Zip File-Overwrite Only, Else 0
- fJunkSFX As Long ' 1 If Junking SFX Prefix, Else 0
- fLatestTime As Long ' 1 If Setting Zip File Time To Time Of Latest File In Archive, Else 0
- fComment As Long ' 1 If Putting Comment In Zip File, Else 0
- fOffsets As Long ' 1 If Updating Archive Offsets For SFX Files, Else 0
- fPrivilege As Long ' 1 If Not Saving Privileges, Else 0
- fEncryption As Long ' Read Only Property!!!
- szSplitSize As String ' Size of split if splitting, Else NULL (empty string)
- ' This string contains the size that you want to
- ' split the archive into. i.e. 100 for 100 bytes,
- ' 2K for 2 k bytes, where K is 1024, m for meg
- ' and g for gig.
- szIncludeList As String ' If used, space separated list of Include filename
- ' patterns where match includes file - put quotes
- ' around each filename pattern.
- IncludeListCount As Long ' place filler (not for VB) - (inits to 0) DO NOT USE
- IncludeList As Long ' place filler (not for VB) - (inits to 0) DO NOT USE
- szExcludeList As String ' If used, space separated list of Exclude filename
- ' patterns where match excludes file - put quotes
- ' around each filename pattern.
- ExcludeListCount As Long ' place filler (not for VB) - (inits to 0) DO NOT USE
- ExcludeList As Long ' place filler (not for VB) - (inits to 0) DO NOT USE
- fRecurse As Long ' 1 (-r), 2 (-R) If Recursing Into Sub-Directories, Else 0
- fRepair As Long ' 1 = Fix Archive, 2 = Try Harder To Fix, Else 0
- flevel As Byte ' Compression Level - 0 = Stored 6 = Default 9 = Max
- End Type
- ' Used by SetZipOptions
- Public Enum ZipModeType
- Add = 0
- Delete = 1
- Update = 2
- Freshen = 3
- End Enum
- Public Enum CompressionLevelType
- c0_NoCompression = 0
- c1_Fast = 1
- c2_Fast = 2
- c3_Fast = 3
- c4_Med = 4
- c5_Med = 5
- c6_Default = 6
- c7_Extra = 7
- c8_Extra = 8
- c9_Max = 9
- End Enum
- Public Enum Translate_LF_Type
- No_Line_End_Trans = 0
- LF_To_CRLF = 1
- CRLF_To_LF = 2
- End Enum
- Public Enum RepairType
- NoRepair = 0
- TryFix = 1
- TryFixHarder = 2
- End Enum
- Public Enum VerbosenessType
- Quiet = 0
- Normal = 1
- Verbose = 2
- End Enum
- Public Enum RecurseType
- NoRecurse = 0
- r_RecurseIntoSubdirectories = 1
- R_RecurseUsingPatterns = 2
- End Enum
- '-- This Structure Is Used For The ZIP32z64.DLL Function Callbacks
- ' Assumes Zip32z64.dll with Zip64 enabled
- Public Type ZIPUSERFUNCTIONS
- ZDLLPrnt As Long ' Callback ZIP32z64.DLL Print Function
- ZDLLCOMMENT As Long ' Callback ZIP32z64.DLL Comment Function
- ZDLLPASSWORD As Long ' Callback ZIP32z64.DLL Password Function
- ZDLLSPLIT As Long ' Callback ZIP32z64.DLL Split Select Function
- ' There are 2 versions of SERVICE, we use one does not need 64-bit data type
- ZDLLSERVICE As Long ' Callback ZIP32z64.DLL Service Function
- ZDLLSERVICE_NO_INT64 As Long ' Callback ZIP32z64.DLL Service Function
- End Type
- '-- Default encryption password (used in callback if not empty string)
- Public EncryptionPassword As String
- '-- For setting the archive comment
- Public ArchiveCommentText
- '-- version info
- Public ZipVersion As ZipVerType
- '-- Local Declarations
- Public ZOPT As ZpOpt
- Public ZUSER As ZIPUSERFUNCTIONS
- '-- This Assumes ZIP32z64.DLL Is In Your \windows\system directory
- '-- or a copy is in the program directory or in some other directory
- '-- listed in PATH
- Private Declare Function ZpInit Lib "zip32z64.dll" _
- (ByRef Zipfun As ZIPUSERFUNCTIONS) As Long '-- Set Zip Callbacks
- Private Declare Function ZpArchive Lib "zip32z64.dll" _
- (ByVal argc As Long, ByVal funame As String, _
- ByRef argv As ZIPnames, ByVal strNames As String, ByRef Opts As ZpOpt) As Long '-- Real Zipping Action
- Private Declare Sub ZpVersion Lib "zip32z64.dll" _
- (ByRef ZipVersion As ZipVerType) '-- Version of DLL
- '-------------------------------------------------------
- '-- Public Variables For Setting The ZPOPT Structure...
- '-- (WARNING!!!) You Must Set The Options That You
- '-- Want The ZIP32.DLL To Do!
- '-- Before Calling VBZip32!
- '--
- '-- NOTE: See The Above ZPOPT Structure Or The VBZip32
- '-- Function, For The Meaning Of These Variables
- '-- And How To Use And Set Them!!!
- '-- These Parameters Must Be Set Before The Actual Call
- '-- To The VBZip32 Function!
- '-------------------------------------------------------
- '-- Public Program Variables
- Public zArgc As Integer ' Number Of Files To Zip Up
- Public zZipArchiveName As String ' The Zip File Name ie: Myzip.zip
- Public zZipFileNames As ZIPnames ' File Names To Zip Up
- Public strZipFileNames As String ' String of names to Zip Up
- Public zZipInfo As String ' Holds The Zip File Information
- '-- Public Constants
- '-- For Zip & UnZip Error Codes!
- Public Const ZE_OK = 0 ' Success (No Error)
- Public Const ZE_EOF = 2 ' Unexpected End Of Zip File Error
- Public Const ZE_FORM = 3 ' Zip File Structure Error
- Public Const ZE_MEM = 4 ' Out Of Memory Error
- Public Const ZE_LOGIC = 5 ' Internal Logic Error
- Public Const ZE_BIG = 6 ' Entry Too Large To Split Error
- Public Const ZE_NOTE = 7 ' Invalid Comment Format Error
- Public Const ZE_TEST = 8 ' Zip Test (-T) Failed Or Out Of Memory Error
- Public Const ZE_ABORT = 9 ' User Interrupted Or Termination Error
- Public Const ZE_TEMP = 10 ' Error Using A Temp File
- Public Const ZE_READ = 11 ' Read Or Seek Error
- Public Const ZE_NONE = 12 ' Nothing To Do Error
- Public Const ZE_NAME = 13 ' Missing Or Empty Zip File Error
- Public Const ZE_WRITE = 14 ' Error Writing To A File
- Public Const ZE_CREAT = 15 ' Could't Open To Write Error
- Public Const ZE_PARMS = 16 ' Bad Command Line Argument Error
- Public Const ZE_OPEN = 18 ' Could Not Open A Specified File To Read Error
- '-- These Functions Are For The ZIP32z64.DLL
- '--
- '-- Puts A Function Pointer In A Structure
- '-- For Use With Callbacks...
- Public Function FnPtr(ByVal lp As Long) As Long
-
- FnPtr = lp
- End Function
- '-- Callback For ZIP32z64.DLL - DLL Print Function
- Public Function ZDLLPrnt(ByRef fname As ZipCBChar, ByVal x As Long) As Long
-
- Dim s0 As String
- Dim xx As Long
-
- '-- Always Put This In Callback Routines!
- On Error Resume Next
-
- s0 = ""
-
- '-- Get Zip32.DLL Message For processing
- For xx = 0 To x
- If fname.ch(xx) = 0 Then
- Exit For
- Else
- s0 = s0 + Chr(fname.ch(xx))
- End If
- Next
-
- '----------------------------------------------
- '-- This Is Where The DLL Passes Back Messages
- '-- To You! You Can Change The Message Printing
- '-- Below Here!
- '----------------------------------------------
-
- '-- Display Zip File Information
- '-- zZipInfo = zZipInfo & s0
- Form1.Print s0;
-
- DoEvents
-
- ZDLLPrnt = 0
- End Function
- '-- Callback For ZIP32z64.DLL - DLL Service Function
- Public Function ZDLLServ(ByRef mname As ZipCBChar, _
- ByVal LowSize As Long, _
- ByVal HighSize As Long) As Long
- Dim s0 As String
- Dim xx As Long
- Dim FS As Currency ' for large file sizes
-
- '-- Always Put This In Callback Routines!
- On Error Resume Next
-
- FS = (HighSize * &H10000 * &H10000) + LowSize
- ' Form1.Print "ZDLLServ returned File Size High " & HighSize & _
- ' " Low " & LowSize & " = " & FS & " bytes"
-
- s0 = ""
- '-- Get Zip32.DLL Message For processing
- For xx = 0 To 4096 ' x
- If mname.ch(xx) = 0 Then
- Exit For
- Else
- s0 = s0 + Chr(mname.ch(xx))
- End If
- Next
- ' At this point, s0 contains the message passed from the DLL
- ' It is up to the developer to code something useful here :)
- ZDLLServ = 0 ' Setting this to 1 will abort the zip!
-
- End Function
- '-- Callback For ZIP32z64.DLL - DLL Password Function
- Public Function ZDLLPass(ByRef p As ZipCBChar, _
- ByVal n As Long, ByRef m As ZipCBChar, _
- ByRef Name As ZipCBChar) As Integer
-
- Dim filename As String
- Dim prompt As String
- Dim xx As Integer
- Dim szpassword As String
-
- '-- Always Put This In Callback Routines!
- On Error Resume Next
-
- ZDLLPass = 1
-
- '-- User Entered A Password So Proccess It
-
- '-- Enter or Verify
- For xx = 0 To 255
- If m.ch(xx) = 0 Then
- Exit For
- Else
- prompt = prompt & Chr(m.ch(xx))
- End If
- Next
-
- '-- If There Is A Password Have The User Enter It!
- '-- This Can Be Changed
-
- '-- Now skip asking if default password set
- If EncryptionPassword <> "" Then
- szpassword = EncryptionPassword
- Else
- szpassword = InputBox("Please Enter The Password!", prompt)
- End If
-
- '-- The User Did Not Enter A Password So Exit The Function
- If szpassword = "" Then Exit Function
-
- For xx = 0 To n - 1
- p.ch(xx) = 0
- Next
-
- For xx = 0 To Len(szpassword) - 1
- p.ch(xx) = Asc(Mid(szpassword, xx + 1, 1))
- Next
-
- p.ch(xx) = Chr(0) ' Put Null Terminator For C
-
- ZDLLPass = 0
-
- End Function
- '-- Callback For ZIP32z64.DLL - DLL Comment Function
- Public Function ZDLLComm(ByRef s1 As ZipCBChar) As Integer
-
- Dim comment As String
- Dim xx%, szcomment$
-
- '-- Always Put This In Callback Routines!
- On Error Resume Next
-
- ZDLLComm = 1
- If Not IsEmpty(ArchiveCommentText) Then
- ' use text given to SetZipOptions
- szcomment = ArchiveCommentText
- Else
- For xx = 0 To 4095
- szcomment = szcomment & Chr(s1.ch(xx))
- If s1.ch(xx) = 0 Then
- Exit For
- End If
- Next
- comment = InputBox("Enter or edit the comment", Default:=szcomment)
- If comment = "" Then
- ' either empty comment or Cancel button
- If MsgBox("Remove comment?" & Chr(13) & "Hit No to keep existing comment", vbYesNo) = vbYes Then
- szcomment = comment
- Else
- Exit Function
- End If
- End If
- szcomment = comment
- End If
- 'If szcomment = "" Then Exit Function
- For xx = 0 To Len(szcomment) - 1
- s1.ch(xx) = Asc(Mid$(szcomment, xx + 1, 1))
- Next xx
- s1.ch(xx) = 0 ' Put null terminator for C
- End Function
- ' This function can be used to set options in VB
- Public Function SetZipOptions(ByRef ZipOpts As ZpOpt, _
- Optional ByVal ZipMode As ZipModeType = Add, _
- Optional ByVal RootDirToZipFrom As String = "", _
- Optional ByVal CompressionLevel As CompressionLevelType = c6_Default, _
- Optional ByVal RecurseSubdirectories As RecurseType = NoRecurse, _
- Optional ByVal Verboseness As VerbosenessType = Normal, _
- Optional ByVal i_IncludeFiles As String = "", _
- Optional ByVal x_ExcludeFiles As String = "", _
- Optional ByVal UpdateSFXOffsets As Boolean = False, Optional ByVal JunkDirNames As Boolean = False, _
- Optional ByVal Encrypt As Boolean = False, Optional ByVal Password As String = "", _
- Optional ByVal Repair As RepairType = NoRepair, Optional ByVal NoDirEntries As Boolean = False, _
- Optional ByVal GrowExistingArchive As Boolean = False, _
- Optional ByVal JunkSFXPrefix As Boolean = False, Optional ByVal ForceUseOfDOSNames As Boolean = False, _
- Optional ByVal Translate_LF As Translate_LF_Type = No_Line_End_Trans, _
- Optional ByVal Move_DeleteAfterAddedOrUpdated As Boolean = False, _
- Optional ByVal SetZipTimeToLatestTime As Boolean = False, _
- Optional ByVal IncludeSystemAndHiddenFiles As Boolean = False, _
- Optional ByVal ExcludeEarlierThanDate As String = "", _
- Optional ByVal IncludeEarlierThanDate As String = "", _
- Optional ByVal IncludeVolumeLabel As Boolean = False, _
- Optional ByVal ArchiveComment As Boolean = False, _
- Optional ByVal ArchiveCommentTextString = Empty, _
- Optional ByVal UsePrivileges As Boolean = False, _
- Optional ByVal ExcludeExtraAttributes As Boolean = False, Optional ByVal SplitSize As String = "", _
- Optional ByVal TempDirPath As String = "") As Boolean
- Dim SplitNum As Long
- Dim SplitMultS As String
- Dim SplitMult As Long
-
- ' set some defaults
- ZipOpts.date = vbNullString
- ZipOpts.szRootDir = vbNullString
- ZipOpts.szTempDir = vbNullString
- ZipOpts.fTemp = 0
- ZipOpts.fSuffix = 0
- ZipOpts.fEncrypt = 0
- ZipOpts.fSystem = 0
- ZipOpts.fVolume = 0
- ZipOpts.fExtra = 0
- ZipOpts.fNoDirEntries = 0
- ZipOpts.fExcludeDate = 0
- ZipOpts.fIncludeDate = 0
- ZipOpts.fVerbose = 0
- ZipOpts.fQuiet = 0
- ZipOpts.fCRLF_LF = 0
- ZipOpts.fLF_CRLF = 0
- ZipOpts.fJunkDir = 0
- ZipOpts.fGrow = 0
- ZipOpts.fForce = 0
- ZipOpts.fMove = 0
- ZipOpts.fDeleteEntries = 0
- ZipOpts.fUpdate = 0
- ZipOpts.fFreshen = 0
- ZipOpts.fJunkSFX = 0
- ZipOpts.fLatestTime = 0
- ZipOpts.fComment = 0
- ZipOpts.fOffsets = 0
- ZipOpts.fPrivilege = 0
- ZipOpts.szSplitSize = vbNullString
- ZipOpts.IncludeListCount = 0
- ZipOpts.szIncludeList = vbNullString
- ZipOpts.ExcludeListCount = 0
- ZipOpts.szExcludeList = vbNullString
- ZipOpts.fRecurse = 0
- ZipOpts.fRepair = 0
- ZipOpts.flevel = 0
-
- If RootDirToZipFrom <> "" Then
- ZipOpts.szRootDir = RootDirToZipFrom
- End If
- ZipOpts.flevel = Asc(CompressionLevel)
- If UpdateSFXOffsets Then ZipOpts.fOffsets = 1
-
- If i_IncludeFiles <> "" Then
- ZipOpts.szIncludeList = i_IncludeFiles
- End If
- If x_ExcludeFiles <> "" Then
- ZipOpts.szExcludeList = x_ExcludeFiles
- End If
-
- If ZipMode = Add Then
- ' default
- ElseIf ZipMode = Delete Then
- ZipOpts.fDeleteEntries = 1
- ElseIf ZipMode = Update Then
- ZipOpts.fUpdate = 1
- Else
- ZipOpts.fFreshen = 1
- End If
- ZipOpts.fRepair = Repair
- If GrowExistingArchive Then ZipOpts.fGrow = 1
- If Move_DeleteAfterAddedOrUpdated Then ZipOpts.fMove = 1
-
- If Verboseness = Quiet Then
- ZipOpts.fQuiet = 1
- ElseIf Verboseness = Verbose Then
- ZipOpts.fVerbose = 1
- End If
-
- If ArchiveComment = False And Not IsEmpty(ArchiveCommentTextString) Then
- MsgBox "Must set ArchiveComment = True to set ArchiveCommentTextString"
- Exit Function
- End If
- If IsEmpty(ArchiveCommentTextString) Then
- ArchiveCommentText = Empty
- Else
- ArchiveCommentText = ArchiveCommentTextString
- End If
- If ArchiveComment Then ZipOpts.fComment = 1
-
- If NoDirEntries Then ZipOpts.fNoDirEntries = 1
- If JunkDirNames Then ZipOpts.fJunkDir = 1
- If Encrypt Then ZipOpts.fEncrypt = 1
- EncryptionPassword = Password
- If JunkSFXPrefix Then ZipOpts.fJunkSFX = 1
- If ForceUseOfDOSNames Then ZipOpts.fForce = 1
- If Translate_LF = LF_To_CRLF Then ZipOpts.fLF_CRLF = 1
- If Translate_LF = CRLF_To_LF Then ZipOpts.fCRLF_LF = 1
- ZipOpts.fRecurse = RecurseSubdirectories
- If IncludeSystemAndHiddenFiles Then ZipOpts.fSystem = 1
-
- If SetZipTimeToLatestTime Then ZipOpts.fLatestTime = 1
- If ExcludeEarlierThanDate <> "" And IncludeEarlierThanDate <> "" Then
- MsgBox "Both ExcludeEarlierThanDate and IncludeEarlierThanDate not " & Chr(10) & _
- "supported at same time"
- Exit Function
- End If
- If ExcludeEarlierThanDate <> "" Then
- ZipOpts.fIncludeDate = 1
- ZipOpts.date = ExcludeEarlierThanDate
- End If
- If IncludeEarlierThanDate <> "" Then
- ZipOpts.fExcludeDate = 1
- ZipOpts.date = IncludeEarlierThanDate
- End If
-
- If TempDirPath <> "" Then
- ZipOpts.szTempDir = TempDirPath
- ZipOpts.fTemp = 1
- End If
-
- If SplitSize <> "" Then
- SplitSize = Trim(SplitSize)
- SplitMultS = Right(SplitSize, 1)
- SplitMultS = UCase(SplitMultS)
- If (SplitMultS = "K") Then
- SplitMult = 1024
- SplitNum = Val(Left(SplitSize, Len(SplitSize) - 1))
- ElseIf SplitMultS = "M" Then
- SplitMult = 1024 * 1024&
- SplitNum = Val(Left(SplitSize, Len(SplitSize) - 1))
- ElseIf SplitMultS = "G" Then
- SplitMult = 1024 * 1024 * 1024&
- SplitNum = Val(Left(SplitSize, Len(SplitSize) - 1))
- Else
- SplitMult = 1024 * 1024&
- SplitNum = Val(SplitSize)
- End If
- SplitNum = SplitNum * SplitMult
- If SplitNum = 0 Then
- MsgBox "SplitSize of 0 not supported"
- Exit Function
- ElseIf SplitNum < 64 * 1024& Then
- MsgBox "SplitSize must be at least 64k"
- Exit Function
- End If
- ZipOpts.szSplitSize = SplitSize
- End If
-
- If IncludeVolumeLabel Then ZipOpts.fVolume = 1
- If UsePrivileges Then ZipOpts.fPrivilege = 1
- If ExcludeExtraAttributes Then ZipOpts.fExtra = 1
-
- SetZipOptions = True
-
- End Function
- Function ChopNulls(ByVal Str) As String
- Dim A As Integer
- Dim C As String
-
- For A = 1 To Len(Str)
- If Mid(Str, A, 1) = Chr(0) Then
- ChopNulls = Left(Str, A - 1)
- Exit Function
- End If
- Next
- ChopNulls = Str
-
- End Function
- Sub DisplayVersion()
-
- ' display version of DLL
- Dim Beta As Boolean
- Dim ZLIB As Boolean
- Dim Zip64 As Boolean
- Dim Flags As String
- Dim A As Integer
-
- ZipVersion.structlen = Len(ZipVersion)
- ZpVersion ZipVersion
- ' Check flag
- If ZipVersion.flag And 1 Then
- Flags = Flags & " Beta,"
- Beta = True
- Else
- Flags = Flags & " No Beta,"
- End If
- If ZipVersion.flag And 2 Then
- Flags = Flags & " ZLIB,"
- ZLIB = True
- Else
- Flags = Flags & " No ZLIB,"
- End If
- If ZipVersion.flag And 4 Then
- Flags = Flags & " Zip64, "
- Zip64 = True
- Else
- Flags = Flags & " No Zip64, "
- End If
- If ZipVersion.encryption Then
- Flags = Flags & "Encryption"
- Else
- Flags = Flags & " No encryption"
- End If
-
- Form1.Caption = "Using Zip32z64.DLL Version " & _
- ZipVersion.ZipVersion.Major & "." & ZipVersion.ZipVersion.Minor & " " & _
- ChopNulls(ZipVersion.Beta) & " [" & ChopNulls(ZipVersion.date) & "]" & _
- " - FLAGS: " & Flags
- If Not Zip64 Then
- A = MsgBox("Zip32z64.dll not compiled with Zip64 enabled - continue?", _
- vbOKCancel, _
- "Wrong dll")
- If A = vbCancel Then
- End
- End If
- End If
-
- End Sub
- '-- Main ZIP32.DLL Subroutine.
- '-- This Is Where It All Happens!!!
- '--
- '-- (WARNING!) Do Not Change This Function!!!
- '--
- Public Function VBZip32() As Long
-
- Dim retcode As Long
- Dim FileNotFound As Boolean
-
- ' On Error Resume Next '-- Nothing Will Go Wrong :-)
- On Error GoTo ZipError
-
- retcode = 0
-
- '-- Set Address Of ZIP32.DLL Callback Functions
- '-- (WARNING!) Do Not Change!!! (except as noted below)
- ZUSER.ZDLLPrnt = FnPtr(AddressOf ZDLLPrnt)
- ZUSER.ZDLLPASSWORD = FnPtr(AddressOf ZDLLPass)
- ZUSER.ZDLLCOMMENT = FnPtr(AddressOf ZDLLComm)
- ZUSER.ZDLLSERVICE_NO_INT64 = FnPtr(AddressOf ZDLLServ)
-
- ' If you need to set destination of each split set this
- 'ZUSER.ZDLLSPLIT = FnPtr(AddressOf ZDLLSplitSelect)
- '-- Set ZIP32.DLL Callbacks - return 1 if DLL loaded 0 if not
- retcode = ZpInit(ZUSER)
- If retcode = 0 And FileNotFound Then
- MsgBox "Probably could not find Zip32z64.DLL - have you copied" & Chr(10) & _
- "it to the System directory, your program directory, " & Chr(10) & _
- "or a directory on your command PATH?"
- VBZip32 = retcode
- Exit Function
- End If
-
- DisplayVersion
-
- If strZipFileNames = "" Then
- ' not using string of names to zip (so using array of names)
- strZipFileNames = vbNullString
- End If
-
- '-- Go Zip It Them Up!
- retcode = ZpArchive(zArgc, zZipArchiveName, zZipFileNames, strZipFileNames, ZOPT)
-
- '-- Return The Function Code
- VBZip32 = retcode
- Exit Function
- ZipError:
- MsgBox "Error: " & Err.Description
- If Err = 48 Then
- FileNotFound = True
- End If
- Resume Next
- End Function
|