Skip to content

Commit ae2be49

Browse files
committed
[vbzip] Impl input from stdin
1 parent 2b08323 commit ae2be49

File tree

1 file changed

+45
-34
lines changed

1 file changed

+45
-34
lines changed

test/vbzip/cVbZip.cls

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)