summaryrefslogtreecommitdiff
path: root/contrib/visual-basic.txt
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/visual-basic.txt')
-rw-r--r--contrib/visual-basic.txt91
1 files changed, 91 insertions, 0 deletions
diff --git a/contrib/visual-basic.txt b/contrib/visual-basic.txt
index 10fb44b..57efe58 100644
--- a/contrib/visual-basic.txt
+++ b/contrib/visual-basic.txt
@@ -67,3 +67,94 @@ Declare Function gzclose Lib "ZLIB32.DLL"
67-Jon Caruana 67-Jon Caruana
68jon-net@usa.net 68jon-net@usa.net
69Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member 69Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
70
71
72Here is another example from Michael <michael_borgsys@hotmail.com> that he
73says conforms to the VB guidelines, and that solves the problem of not
74knowing the uncompressed size by storing it at the end of the file:
75
76'Calling the functions:
77'bracket meaning: <parameter> [optional] {Range of possible values}
78'Call subCompressFile(<path with filename to compress> [, <path with
79filename to write to>, [level of compression {1..9}]])
80'Call subUncompressFile(<path with filename to compress>)
81
82Option Explicit
83Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller'
84Private Const SUCCESS As Long = 0
85Private Const strFilExt As String = ".cpr"
86Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef
87dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long,
88ByVal level As Integer) As Long
89Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef
90dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long)
91As Long
92
93Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal
94strargCprFilPth As String, Optional ByVal intLvl As Integer = 9)
95 Dim strCprPth As String
96 Dim lngOriSiz As Long
97 Dim lngCprSiz As Long
98 Dim bytaryOri() As Byte
99 Dim bytaryCpr() As Byte
100 lngOriSiz = FileLen(strargOriFilPth)
101 ReDim bytaryOri(lngOriSiz - 1)
102 Open strargOriFilPth For Binary Access Read As #1
103 Get #1, , bytaryOri()
104 Close #1
105 strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth)
106'Select file path and name
107 strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) =
108strFilExt, "", strFilExt) 'Add file extension if not exists
109 lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit
110more space then original file size
111 ReDim bytaryCpr(lngCprSiz - 1)
112 If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) =
113SUCCESS Then
114 lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100
115 ReDim Preserve bytaryCpr(lngCprSiz - 1)
116 Open strCprPth For Binary Access Write As #1
117 Put #1, , bytaryCpr()
118 Put #1, , lngOriSiz 'Add the the original size value to the end
119(last 4 bytes)
120 Close #1
121 Else
122 MsgBox "Compression error"
123 End If
124 Erase bytaryCpr
125 Erase bytaryOri
126End Sub
127
128Public Sub subUncompressFile(ByVal strargFilPth As String)
129 Dim bytaryCpr() As Byte
130 Dim bytaryOri() As Byte
131 Dim lngOriSiz As Long
132 Dim lngCprSiz As Long
133 Dim strOriPth As String
134 lngCprSiz = FileLen(strargFilPth)
135 ReDim bytaryCpr(lngCprSiz - 1)
136 Open strargFilPth For Binary Access Read As #1
137 Get #1, , bytaryCpr()
138 Close #1
139 'Read the original file size value:
140 lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _
141 + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _
142 + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _
143 + bytaryCpr(lngCprSiz - 4)
144 ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value
145 ReDim bytaryOri(lngOriSiz - 1)
146 If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS
147Then
148 strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt))
149 Open strOriPth For Binary Access Write As #1
150 Put #1, , bytaryOri()
151 Close #1
152 Else
153 MsgBox "Uncompression error"
154 End If
155 Erase bytaryCpr
156 Erase bytaryOri
157End Sub
158Public Property Get lngPercentSmaller() As Long
159 lngPercentSmaller = lngpvtPcnSml
160End Property