@@ -21,6 +21,7 @@ DefObj A-Z
2121Private Const ERR_MISSING_ARCHIVE As String = "Missing archive"
2222Private Const ERR_NO_FILES As String = "No files specified"
2323Private Const ERR_INVALID_LEVEL As String = "Invalid compression level. Use 0 to 9"
24+ Private Const ERR_INVALID_STRENGTH As String = "Invalid encryption method/strength. Use 0 to 3"
2425Private Const STR_LIST_HDR As String = "Date Time Attr Size Compressed Name"
2526Private Const STR_LIST_SEP As String = "------------------- ----- ---------- ---------- -------------------"
2627
@@ -56,7 +57,6 @@ Public Function Init(vArgs As Variant) As Boolean
5657 Dim lTotalSize As Long
5758 Dim lTotalCompressed As Long
5859 Dim lCount As Long
59- Dim lLevel As Long
6060
6161 On Error GoTo EH
6262 Set m_oArchive = New cZipArchive
@@ -78,16 +78,13 @@ Public Function Init(vArgs As Variant) As Boolean
7878 ConsolePrint ERR_NO_FILES & vbCrLf
7979 GoTo QH
8080 End If
81- If IsEmpty(.Item("-m" )) Then
82- lLevel = 6
83- ElseIf .Item("-m" ) = "0" Then
84- lLevel = 0
85- Else
86- lLevel = Val(.Item("-m" ))
87- If lLevel < 1 Or lLevel > 9 Then
88- ConsolePrint ERR_INVALID_LEVEL & vbCrLf
89- GoTo QH
90- End If
81+ If Not pvLimitNumericOption("-m" , 6 , 0 , 9 ) Then
82+ ConsolePrint ERR_INVALID_LEVEL & vbCrLf
83+ GoTo QH
84+ End If
85+ If Not pvLimitNumericOption("-mem" , 0 , 0 , 4 ) Then
86+ ConsolePrint ERR_INVALID_STRENGTH & vbCrLf
87+ GoTo QH
9188 End If
9289 For lIdx = 1 To .Item("numfiles" )
9390 sFile = .Item("file" & lIdx)
@@ -98,20 +95,20 @@ Public Function Init(vArgs As Variant) As Boolean
9895 .Item("-e" ) = True
9996 End If
10097 m_oArchive.AddFromFolder sFile, Recursive:=.Item("-r" ), _
101- IncludeEmptyFolders:=.Item("-e" ), Password:=.Item("-p" )
98+ IncludeEmptyFolders:=.Item("-e" ), Password:=.Item("-p" ), EncrStrength:=.Item( "-mem" )
10299 ElseIf (FileAttr(sFile) And vbDirectory) <> 0 Then
103100 If .Item("-r" ) Then
104101 sMask = Mid$(sFile, InStrRev(sFile, "\" ) + 1 )
105102 .Item("-e" ) = True
106103 End If
107- m_oArchive.AddFromFolder PathCombine(sFile, "*.*" ), Recursive:=.Item("-r" ), _
108- IncludeEmptyFolders:=.Item("-e" ), TargetFolder:=sMask, Password :=.Item("-p " )
104+ m_oArchive.AddFromFolder PathCombine(sFile, "*.*" ), Recursive:=.Item("-r" ), TargetFolder:=sMask, _
105+ IncludeEmptyFolders:=.Item("-e" ), Password:=.Item( "-p" ), EncrStrength :=.Item("-mem " )
109106 Else
110- m_oArchive.AddFile sFile, Password:=.Item("-p" )
107+ m_oArchive.AddFile sFile, Password:=.Item("-p" ), EncrStrength:=.Item( "-mem" )
111108 End If
112109 Next
113110 m_sAction = "Compressing "
114- If Not m_oArchive.CompressArchive(.Item("zip" ), Level:=lLevel ) Then
111+ If Not m_oArchive.CompressArchive(.Item("zip" ), Level:=.Item( "-m" ) ) Then
115112 GoTo QH
116113 End If
117114 Case "l"
216213 ConsolePrint "unhandled error: " & Err.Description & vbCrLf
217214End Function
218215
216+ Private Function pvLimitNumericOption (sOpt As String , dblDefault As Double , dblMin As Double , dblMax As Double ) As Boolean
217+ Dim dblTemp As Double
218+
219+ With m_oOpt
220+ If IsEmpty(.Item(sOpt)) Then
221+ .Item(sOpt) = dblDefault
222+ ElseIf .Item(sOpt) = "0" Then
223+ .Item(sOpt) = 0 #
224+ Else
225+ dblTemp = Val(.Item(sOpt))
226+ If dblTemp = 0 Or dblTemp < dblMin Or dblTemp > dblMax Then
227+ GoTo QH
228+ End If
229+ End If
230+ End With
231+ pvLimitNumericOption = True
232+ QH:
233+ End Function
234+
219235Private Function FormatAttr (ByVal eAttr As VbFileAttribute , ByVal lFlags As Long ) As String
220236 If eAttr = vbDirectory Then
221237 FormatAttr = "[DIR]"
@@ -241,20 +257,30 @@ Private Function ParseOpt(vArgs As Variant) As Object
241257 For lIdx = 0 To UBound(vArgs)
242258 Select Case Left$(vArgs(lIdx), 1 + bNoMoreOpt)
243259 Case "-" , "/"
244- Select Case Mid$(vArgs(lIdx), 2 , 1 )
245- Case "o" , "m" , "p "
246- If Len(vArgs(lIdx)) > 2 Then
247- .Item("-" & Mid$(vArgs(lIdx), 2 , 1 )) = Mid$(vArgs(lIdx), 3 )
260+ Select Case Mid$(vArgs(lIdx), 2 , 3 )
261+ Case "mem "
262+ If Len(vArgs(lIdx)) > 4 Then
263+ .Item("-" & Mid$(vArgs(lIdx), 2 , 3 )) = Mid$(vArgs(lIdx), 5 )
248264 ElseIf LenB(vArgs(lIdx + 1 )) <> 0 Then
249- .Item("-" & Mid$(vArgs(lIdx), 2 , 1 )) = vArgs(lIdx + 1 )
265+ .Item("-" & Mid$(vArgs(lIdx), 2 , 3 )) = vArgs(lIdx + 1 )
250266 lIdx = lIdx + 1
251267 End If
252- Case "-"
253- If Len(vArgs(lIdx)) = 2 Then
254- bNoMoreOpt = True
255- End If
256268 Case Else
257- .Item("-" & Mid$(vArgs(lIdx), 2 )) = True
269+ Select Case Mid$(vArgs(lIdx), 2 , 1 )
270+ Case "o" , "m" , "p"
271+ If Len(vArgs(lIdx)) > 2 Then
272+ .Item("-" & Mid$(vArgs(lIdx), 2 , 1 )) = Mid$(vArgs(lIdx), 3 )
273+ ElseIf LenB(vArgs(lIdx + 1 )) <> 0 Then
274+ .Item("-" & Mid$(vArgs(lIdx), 2 , 1 )) = vArgs(lIdx + 1 )
275+ lIdx = lIdx + 1
276+ End If
277+ Case "-"
278+ If Len(vArgs(lIdx)) = 2 Then
279+ bNoMoreOpt = True
280+ End If
281+ Case Else
282+ .Item("-" & Mid$(vArgs(lIdx), 2 )) = True
283+ End Select
258284 End Select
259285 Case Else
260286 If LenB(.Item("command" )) = 0 Then
0 commit comments