;;_ZipPlugin.au3
;functions for _Au3ZipPlugin
#Include-Once
;;supress au3check errors
#compiler_plugin_funcs=_ZipCreate,_ZipAdd,_ZipAddDir,_ZipAddFolder,_ZipGetCount,_ZipGetItemInfo
#compiler_plugin_funcs=_ZipUnZip, _ZipUnZipItem,_ZipClose,_ZipAddFileToZip,_ZipDeleteFile,_ZipFormatMessage,_ZipPluginAbout
;==============================================================================
; AutoIt Version: 3.2.2.0
; Language: English
; Author: Stephen Podhajecki
; Description: First Incarnation of a Zip plugin for AutoIt V3.
;
;This plugin adds the following commands:
;
; _ZipCreate($NewZipFile) returns a handle to the zip.
; _ZipAdd($hFile,$SourceFile,$FileNameInsideZip) Needs handle from _ZipCreate.
; _ZipAddDir($hFile,$DirToAdd,$Recursive) Needs handle from _ZipCreate 1 use recursion 0 don't.
; _ZipAddFolder($hFile,$FolderName) Creates an empty folder in the zip Needs handle from _ZipCreate.
; _ZipFormatMessage($ErrorCode) Returns the message that corresponds with the $ErrorCode.
; _ZipClose($hFile) Closes the Zip archive. Needs handle from _ZipCreate.
;
; _ZipUnZip($ZipFile,$Dest) UnZips the archive to the specified folder.
; _ZipUnZipItem(($ZipFile,$FileNameInsideZip,$Dest) UnZip a single file.
; _ZipGetCount($ZipFile) Retrieves the number of items in the zip
; _ZipGetItemInfo($ZipFile,$iIndex) Returns a ptr to info about a zip item.
; _ZipAddFileToZip($ZipFile,$FileToAdd,$FileNameInsideZip) adds a file to an already existing zip.
; _ZipDeleteFile($ZipFile,$FileNameInsideToDelete) Deletes a file inside the archive.
; _ZipPluginAbout() Returns "About" message string.
;
; No. there is not rar or 7zip support. Just plain old zip.
; No. there is not rar or 7zip support. Just plain old zip.
; No. there is not rar or 7zip support. Just plain old zip.
; No. there is not rar or 7zip support. Just plain old zip.
; No. there is not rar or 7zip support. Just plain old zip.
;==============================================================================
;This UDF provides the following functions to assist with the Zip Plugin functions
; _ZipItemInfo2Array($ZipFile,$Index) Returns a 1 dim array of info for a specific item.
; _ZipList2Array($ZipFile) Retrieves all item file info from zip into a 2 dim array
Global Const $ZIP_INDEX = 0
Global Const $ZIP_NAME = 1
Global Const $ZIP_ATTR = 2
Global Const $ZIP_ATIME = 3
Global Const $ZIP_CTIME = 4
Global Const $ZIP_MTIME = 5
Global Const $ZIP_CSIZE = 6
Global Const $ZIP_USIZE = 7
Global Const $ZIP_INFO_ALL = 255
Global $ZR_RECENT = 1;
ConsoleWrite($ZR_RECENT & @LF)
Local $___DBUG = 1
Local $z_v_ret, $z_x
;===============================================================================
; Function Name : _ZipItemInfo2Array
; Description : Returns and array of zip item info.
; Parameter(s) : $szZipFile The zip file to get the item info from
; $index The index of the item to get.
;
; Requirement(s) : Au3Zip.dll Autoit v3.2.2.0
; Return Value(s) : An Single dim Array contain the item info, error 1 and empty on fail.
; User CallTip :
; Author(s) : Stephen Podhajecki
; Note(s) : This function is called by _ZipList2Array()
;===============================================================================
Func _ZipItemInfo2Array($szZipFile, $index)
Local $z_v_ret, $strList, $zipTemp, $zipItems[8]
If FileExists($szZipFile) Then
If $index >= 0 Then
If $index <= _ZipGetCount ($szZipFile) Then
$z_v_ret = _ZipGetItemInfo ($szZipFile, $index)
If $z_v_ret <> 0 Then
Return _ZipGetInfoFromPtr($z_v_ret)
EndIf
EndIf
EndIf
EndIf
Return SetError(1, 0, 0)
EndFunc ;==>_ZipItemInfo2Array
;===============================================================================
; Function Name : _ZipGetInfoFromPtr
; Description :
; Parameter(s) : $zPtr Pointer to the zip entry struct.
;
; Requirement(s) : Au3Zip.dll AutoIt v3.2.20
; Return Value(s) : Array of zip item info, @error =1 and 0 on fail
; User CallTip :
; Author(s) : Stephen Podhajecki
; Note(s) : Called by other fuctions.
;===============================================================================
Func _ZipGetInfoFromPtr($zPtr)
;==============================================================================
;~ typedef struct
;~ { int index; // index of this file within the zip
;~ TCHAR name[MAX_PATH]; // filename within the zip
;~ DWORD attr; // attributes, as in GetFileAttributes.
;~ FILETIME atime,ctime,mtime;// access, create, modify filetimes
;~ long comp_size; // sizes of item, compressed and uncompressed. These
;~ long unc_size; // may be -1 if not yet known (e.g. being streamed in)
;~ } ZIPENTRY;
;==============================================================================
If $zPtr <> 0 Then
Local $zipItems[8]
$strList = DllStructCreate("int;char[260];dword;int64;int64;int64;long;long", $zPtr)
For $z = 1 To 8
Local $zipTemp = DllStructGetData($strList, $z)
If $z > 3 And $z < 7 Then
$zipItems[$z - 1] = _FileTime2SystemTimeZ($zipTemp)
Else
$zipItems[$z - 1] = $zipTemp
EndIf
Next
$strList = 0
Return $zipItems
EndIf
EndFunc
;===============================================================================
; Function Name : _ZipList2Array
; Description : Retrieves and formats the Item Info for all items in the zip
; into a 2 dimensional array.
; Parameter(s) : $szZipFile The ZipFile to retrieve the item info from.
;
; Requirement(s) : Au3Zip.dll Autoit v3.2.2.0 or >
; Return Value(s) : 2 dimensional array on success for empty string and @error =1
; User CallTip :
; Author(s) : Stephen Podhajecki
; Note(s) :
;===============================================================================
Func _ZipList2Array($szZipFile)
Local $zCount, $zipItems[1][8]
If FileExists($szZipFile) Then
$zCount = _ZipGetCount ($szZipFile)
If $zCount Then
ReDim $zipItems[$zCount][8]
For $z_x = 0 To $zCount - 1
Local $zipTemp = _ZipItemInfo2Array($szZipFile, $z_x)
If Not (@error) Then
For $z = 0 To 7
$zipItems[$z_x][$z] = $zipTemp[$z]
Next
EndIf
Next
EndIf
Return $zipItems
EndIf
Return SetError(1, 0, "")
EndFunc ;==>_ZipList2Array
;===============================================================================
; Function Name: _FileTime2SystemTimeZ
; Description: Converts and formats Filetime to Systemtime.
; Parameter(s): $file_t 64 bit filetime returned from zip archive.
; Requirement(s):
; Return Value(s): Hopefully a nice formatted string mm/dd/yyyy hr:mim:sec[A/P]m
; User CallTip:
; Author(s): Stephen Podhajecki
; Note(s): 99% sure this is correct.
;===============================================================================
Func _FileTime2SystemTimeZ($file_t)
Local $td, $st, $ft, $vret, $syst, $zone, $hr
$td = "%s/%s/%s %s:%s:%s%s" ;date and time format
If $file_t = "" Then Return
$st = DllStructCreate("short;short;short;short;short;short;short;short")
$ft = DllStructCreate("dword;dword")
DllStructSetData($ft, 1, _Lo_dWordZ($file_t))
DllStructSetData($ft, 2, _Hi_dWordZ($file_t))
$vret = DllCall("kernel32.dll", "int", "FileTimeToSystemTime", "ptr", DllStructGetPtr($ft), "ptr", DllStructGetPtr($st))
If IsArray($vret) Then
$zone = "AM"
$hr = DllStructGetData($st, 5)
If $hr > 11 Then $zone = "PM"
If $hr > 12 Then $hr -= 12
$syst = StringFormat($td, _ZipPZ(DllStructGetData($st, 2)), _
_ZipPZ(DllStructGetData($st, 4)), _
DllStructGetData($st, 1), _
_ZipPZ($hr), _
_ZipPZ(DllStructGetData($st, 6)), _
_ZipPZ(DllStructGetData($st, 7)), _
$zone)
;ConsoleWrite($syst&@LF)
EndIf
$st = 0
$ft = 0
Return $syst
EndFunc ;==>_FileTime2SystemTimeZ
;===============================================================================
; Function Name: _Hi_dWordZ
; Description: Get Hi order 32 bits from 64 bit number
; Parameter(s): $file_t filetime
; Requirement(s):
; Return Value(s): Return Hi order 32 bits from 64 bit number
; User CallTip:
; Author(s): Stephen Podhajecki
; Note(s): used to convert filetime to systemtime.
;===============================================================================
Func _Hi_dWordZ($file_t)
;ConsoleWrite("Hi :"&$file_t/(2^32)&@LF)
Return $file_t/ (2 ^ 32)
EndFunc ;==>_Hi_dWordZ
;===============================================================================
; Function Name: _Lo_dWordZ
; Description: Gets low order 32 bits of 64 bit number.
; Parameter(s): $file_t Filetime
; Requirement(s):
; Return Value(s): Lo order 32 bits of 64 bit number.
; User CallTip:
; Author(s): Stephen Podhajecki
; Note(s):
;===============================================================================
Func _Lo_dWordZ($file_t)
;ConsoleWrite("Lo:"&abs($file_t - ((2^32) * ($file_t/(2^32))))&@LF)
Return Abs($file_t - ((2 ^ 32) * ($file_t/ (2 ^ 32))))
EndFunc ;==>_Lo_dWordZ
;===============================================================================
; Function Name: _ZipPZ
; Description: adds a"0" prefix to numbers >=0 and <10
; Parameter(s): $Value
; Requirement(s):
; Return Value(s): Modified value.
; User CallTip:
; Author(s): Stephen Podhajecki
; Note(s):
;===============================================================================
Func _ZipPZ($Value)
Select
Case $Value < 0
Return "00"
Case $Value < 10
Return "0" & $Value
EndSelect
Return $Value
EndFunc ;==>_ZipPZ
Func _ZipGetRatio($iVal1, $iVal2)
if $iVal2 = 0 Then Return 0
Return Int(100-(($iVal1/$iVal2)*100))
EndFunc