@@ -60,13 +60,13 @@ Public Function Init(vArgs As Variant) As Boolean
6060
6161 On Error GoTo EH
6262 Set m_oArchive = New cZipArchive
63- Set m_oOpt = GetOpt(vArgs, "m:o:p:mem" )
63+ Set m_oOpt = GetOpt(vArgs, "m:o:p:mem:si " )
6464 With m_oOpt
6565 .Item("command" ) = .Item("arg1" )
6666 .Item("zip" ) = .Item("arg2" )
6767 .Item("numfiles" ) = .Item("numarg" ) - 2
6868 For lIdx = 1 To .Item("numfiles" )
69- .Item("file" & lIdx) = .Item("arg" & lIdx + 3 )
69+ .Item("file" & lIdx) = .Item("arg" & lIdx + 2 )
7070 Next
7171 If Not .Item("-nologo" ) Then
7272 ConsoleError "VbZip " & m_oArchive.SemVersion & " (c) 2017-2018 by wqweto@gmail.com (" & m_oArchive.ThunkBuildDate & ")" & vbCrLf & vbCrLf
@@ -80,40 +80,47 @@ Public Function Init(vArgs As Variant) As Boolean
8080 ConsoleError ERR_MISSING_ARCHIVE & vbCrLf
8181 GoTo QH
8282 End If
83- If .Item("numfiles" ) <= 0 Then
84- ConsoleError ERR_NO_FILES & vbCrLf
85- GoTo QH
86- End If
87- If Not pvLimitNumericOption("m" , 6 , 0 , 9 ) Then
83+ If Not pvLimitNumericOption("-m" , 6 , 0 , 9 ) Then
8884 ConsoleError ERR_INVALID_LEVEL & vbCrLf
8985 GoTo QH
9086 End If
91- If Not pvLimitNumericOption("mem" , 0 , 0 , 4 ) Then
87+ If Not pvLimitNumericOption("- mem" , 0 , 0 , 4 ) Then
9288 ConsoleError ERR_INVALID_STRENGTH & vbCrLf
9389 GoTo QH
9490 End If
95- For lIdx = 1 To .Item("numfiles" )
96- sFile = .Item("file" & lIdx)
97- If InStr(sFile, "*" ) > 0 Or InStr(sFile, "?" ) > 0 Then
98- '--- for *.* default to include empty folders
99- sMask = Mid$(sFile, InStrRev(sFile, "\" ) + 1 )
100- If sMask = "*" Or sMask = "*.*" Then
101- .Item("-e" ) = True
102- End If
103- m_oArchive.AddFromFolder sFile, Recursive:=.Item("-r" ), _
104- IncludeEmptyFolders:=.Item("-e" ), Password:=.Item("-p" ), EncrStrength:=.Item("-mem" )
105- ElseIf (FileAttr(sFile) And vbDirectory) <> 0 Then
106- If .Item("-r" ) Then
91+ If .Exists("-si" ) Then
92+ m_oArchive.AddFile "stdin:" , CStr(.Item("-si" )), Password:=.Item("-p" ), EncrStrength:=.Item("-mem" )
93+ Else
94+ If .Item("numfiles" ) <= 0 Then
95+ ConsoleError ERR_NO_FILES & vbCrLf
96+ GoTo QH
97+ End If
98+ For lIdx = 1 To .Item("numfiles" )
99+ sFile = .Item("file" & lIdx)
100+ If InStr(sFile, "*" ) > 0 Or InStr(sFile, "?" ) > 0 Then
101+ '--- for *.* default to include empty folders
107102 sMask = Mid$(sFile, InStrRev(sFile, "\" ) + 1 )
108- .Item("-e" ) = True
103+ If sMask = "*" Or sMask = "*.*" Then
104+ .Item("-e" ) = True
105+ End If
106+ m_oArchive.AddFromFolder sFile, Recursive:=.Item("-r" ), _
107+ IncludeEmptyFolders:=.Item("-e" ), Password:=.Item("-p" ), EncrStrength:=.Item("-mem" )
108+ ElseIf (FileAttr(sFile) And vbDirectory) <> 0 Then
109+ If .Item("-r" ) Then
110+ sMask = Mid$(sFile, InStrRev(sFile, "\" ) + 1 )
111+ .Item("-e" ) = True
112+ End If
113+ m_oArchive.AddFromFolder PathCombine(sFile, "*.*" ), Recursive:=.Item("-r" ), TargetFolder:=sMask, _
114+ IncludeEmptyFolders:=.Item("-e" ), Password:=.Item("-p" ), EncrStrength:=.Item("-mem" )
115+ Else
116+ m_oArchive.AddFile sFile, Password:=.Item("-p" ), EncrStrength:=.Item("-mem" )
109117 End If
110- m_oArchive.AddFromFolder PathCombine(sFile, "*.*" ), Recursive:=.Item("-r" ), TargetFolder:=sMask, _
111- IncludeEmptyFolders:=.Item("-e" ), Password:=.Item("-p" ), EncrStrength:=.Item("-mem" )
112- Else
113- m_oArchive.AddFile sFile, Password:=.Item("-p" ), EncrStrength:=.Item("-mem" )
114- End If
115- Next
118+ Next
119+ End If
116120 m_sAction = "Compressing "
121+ If .Item("-so" ) Then
122+ .Item("zip" ) = "stdout:"
123+ End If
117124 If Not m_oArchive.CompressArchive(.Item("zip" ), Level:=.Item("-m" )) Then
118125 GoTo QH
119126 End If
@@ -203,15 +210,14 @@ Public Function Init(vArgs As Variant) As Boolean
203210 " -y assume yes to all questions" & vbCrLf & _
204211 " -p PASSWORD password used to encrypt/decrypt files" & vbCrLf & _
205212 " -mem METHOD encryption method" & vbCrLf & _
206- " -so write data to stdout" & vbCrLf
213+ " -so output to stdout" & vbCrLf & _
214+ " -si NAME input from stdin zip to NAME in archive" & vbCrLf
207215 Else
208216 ConsoleError "Invalid command: " & .Item("command" ) & vbCrLf
209217 End If
210218 End Select
211- If Len(m_sLastRow) <> 0 Then
212- ConsoleError vbCr & Space$(Len(m_sLastRow)) & vbCr
213- ConsoleError "Done" & vbCrLf
214- End If
219+ ConsoleError IIf (LenB(m_sLastRow) <> 0 , vbCr & Space$(Len(m_sLastRow)) & vbCr, vbCrLf)
220+ ConsoleError "Done" & vbCrLf
215221 End With
216222 '--- success
217223 Init = True
@@ -292,13 +298,18 @@ Private Sub m_oArchive_Progress(ByVal FileIdx As Long, ByVal Current As Long, By
292298 Dim sPercent As String
293299 Dim vInfo As Variant
294300
295- If Current < Total Then
301+ vInfo = m_oArchive.FileInfo(FileIdx)
302+ If Total = 0 Then
303+ If Not m_oOpt.Item("-i" ) Then
304+ sPercent = " [" & Format$(At(vInfo, ucsIdxCompressedSize) * 100 / Current, "0.0" ) & "%] "
305+ ConsoleError vbCr & m_sAction & At(m_oArchive.FileInfo(FileIdx), 0 ) & sPercent
306+ End If
307+ ElseIf Current < Total Then
296308 If Not m_oOpt.Item("-i" ) Then
297309 sPercent = " - " & Format$(Current * 100 # / Total, "0.0" ) & "%"
298310 m_sLastRow = ConsoleError(vbCr & m_sAction & At(m_oArchive.FileInfo(FileIdx), 0 ) & sPercent)
299311 End If
300312 Else
301- vInfo = m_oArchive.FileInfo(FileIdx)
302313 If At(vInfo, ucsIdxSize) <> 0 Then
303314 sPercent = " [" & Format$(At(vInfo, ucsIdxCompressedSize) * 100 # / At(vInfo, ucsIdxSize), "0.0" ) & "%] "
304315 End If
0 commit comments