1*9a0e4156SSadaf EbrahimiAttribute VB_Name = "mMisc" 2*9a0e4156SSadaf EbrahimiOption Explicit 3*9a0e4156SSadaf Ebrahimi 4*9a0e4156SSadaf Ebrahimi'These are old library functions 5*9a0e4156SSadaf Ebrahimi 6*9a0e4156SSadaf EbrahimiPrivate Type Bit64Currency 7*9a0e4156SSadaf Ebrahimi value As Currency 8*9a0e4156SSadaf EbrahimiEnd Type 9*9a0e4156SSadaf Ebrahimi 10*9a0e4156SSadaf EbrahimiPrivate Type Bit64Integer 11*9a0e4156SSadaf Ebrahimi LowValue As Long 12*9a0e4156SSadaf Ebrahimi HighValue As Long 13*9a0e4156SSadaf EbrahimiEnd Type 14*9a0e4156SSadaf Ebrahimi 15*9a0e4156SSadaf EbrahimiGlobal Const LANG_US = &H409 16*9a0e4156SSadaf Ebrahimi 17*9a0e4156SSadaf EbrahimiPublic Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long 18*9a0e4156SSadaf EbrahimiPublic Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long 19*9a0e4156SSadaf EbrahimiPublic Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long) 20*9a0e4156SSadaf EbrahimiPublic Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long 21*9a0e4156SSadaf EbrahimiPublic Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long 22*9a0e4156SSadaf EbrahimiPublic Declare Function SetDllDirectory Lib "kernel32" Alias "SetDllDirectoryA" (ByVal lpPathName As String) As Long 23*9a0e4156SSadaf Ebrahimi 24*9a0e4156SSadaf EbrahimiFunction makeCur(high As Long, low As Long) As Currency 25*9a0e4156SSadaf Ebrahimi Dim c As Bit64Currency 26*9a0e4156SSadaf Ebrahimi Dim dl As Bit64Integer 27*9a0e4156SSadaf Ebrahimi dl.LowValue = low 28*9a0e4156SSadaf Ebrahimi dl.HighValue = high 29*9a0e4156SSadaf Ebrahimi LSet c = dl 30*9a0e4156SSadaf Ebrahimi makeCur = c.value 31*9a0e4156SSadaf EbrahimiEnd Function 32*9a0e4156SSadaf Ebrahimi 33*9a0e4156SSadaf EbrahimiFunction lng2Cur(v As Long) As Currency 34*9a0e4156SSadaf Ebrahimi Dim c As Bit64Currency 35*9a0e4156SSadaf Ebrahimi Dim dl As Bit64Integer 36*9a0e4156SSadaf Ebrahimi dl.LowValue = v 37*9a0e4156SSadaf Ebrahimi dl.HighValue = 0 38*9a0e4156SSadaf Ebrahimi LSet c = dl 39*9a0e4156SSadaf Ebrahimi lng2Cur = c.value 40*9a0e4156SSadaf EbrahimiEnd Function 41*9a0e4156SSadaf Ebrahimi 42*9a0e4156SSadaf EbrahimiFunction cur2str(v As Currency) As String 43*9a0e4156SSadaf Ebrahimi Dim c As Bit64Currency 44*9a0e4156SSadaf Ebrahimi Dim dl As Bit64Integer 45*9a0e4156SSadaf Ebrahimi c.value = v 46*9a0e4156SSadaf Ebrahimi LSet dl = c 47*9a0e4156SSadaf Ebrahimi If dl.HighValue = 0 Then 48*9a0e4156SSadaf Ebrahimi cur2str = Right("00000000" & Hex(dl.LowValue), 8) 49*9a0e4156SSadaf Ebrahimi Else 50*9a0e4156SSadaf Ebrahimi cur2str = Right("00000000" & Hex(dl.HighValue), 8) & "`" & Right("00000000" & Hex(dl.LowValue), 8) 51*9a0e4156SSadaf Ebrahimi End If 52*9a0e4156SSadaf EbrahimiEnd Function 53*9a0e4156SSadaf Ebrahimi 54*9a0e4156SSadaf EbrahimiFunction x64StrToCur(ByVal str As String) As Currency 55*9a0e4156SSadaf Ebrahimi 56*9a0e4156SSadaf Ebrahimi str = Replace(Trim(str), "0x", "") 57*9a0e4156SSadaf Ebrahimi str = Replace(str, " ", "") 58*9a0e4156SSadaf Ebrahimi str = Replace(str, "`", "") 59*9a0e4156SSadaf Ebrahimi 60*9a0e4156SSadaf Ebrahimi Dim low As String, high As String 61*9a0e4156SSadaf Ebrahimi Dim c As Bit64Currency 62*9a0e4156SSadaf Ebrahimi Dim dl As Bit64Integer 63*9a0e4156SSadaf Ebrahimi 64*9a0e4156SSadaf Ebrahimi low = VBA.Right(str, 8) 65*9a0e4156SSadaf Ebrahimi dl.LowValue = CLng("&h" & low) 66*9a0e4156SSadaf Ebrahimi 67*9a0e4156SSadaf Ebrahimi If Len(str) > 8 Then 68*9a0e4156SSadaf Ebrahimi high = Mid(str, 1, Len(str) - 8) 69*9a0e4156SSadaf Ebrahimi dl.HighValue = CLng("&h" & high) 70*9a0e4156SSadaf Ebrahimi End If 71*9a0e4156SSadaf Ebrahimi 72*9a0e4156SSadaf Ebrahimi LSet c = dl 73*9a0e4156SSadaf Ebrahimi x64StrToCur = c.value 74*9a0e4156SSadaf Ebrahimi 75*9a0e4156SSadaf EbrahimiEnd Function 76*9a0e4156SSadaf Ebrahimi 77*9a0e4156SSadaf EbrahimiFunction cur2lng(v As Currency) As Long 78*9a0e4156SSadaf Ebrahimi Dim c As Bit64Currency 79*9a0e4156SSadaf Ebrahimi Dim dl As Bit64Integer 80*9a0e4156SSadaf Ebrahimi c.value = v 81*9a0e4156SSadaf Ebrahimi LSet dl = c 82*9a0e4156SSadaf Ebrahimi cur2lng = dl.LowValue 83*9a0e4156SSadaf EbrahimiEnd Function 84*9a0e4156SSadaf Ebrahimi 85*9a0e4156SSadaf EbrahimiFunction readLng(offset As Long) As Long 86*9a0e4156SSadaf Ebrahimi Dim tmp As Long 87*9a0e4156SSadaf Ebrahimi CopyMemory ByVal VarPtr(tmp), ByVal offset, 4 88*9a0e4156SSadaf Ebrahimi readLng = tmp 89*9a0e4156SSadaf EbrahimiEnd Function 90*9a0e4156SSadaf Ebrahimi 91*9a0e4156SSadaf EbrahimiFunction readByte(offset As Long) As Byte 92*9a0e4156SSadaf Ebrahimi Dim tmp As Byte 93*9a0e4156SSadaf Ebrahimi CopyMemory ByVal VarPtr(tmp), ByVal offset, 1 94*9a0e4156SSadaf Ebrahimi readByte = tmp 95*9a0e4156SSadaf EbrahimiEnd Function 96*9a0e4156SSadaf Ebrahimi 97*9a0e4156SSadaf EbrahimiFunction readCur(offset As Long) As Currency 98*9a0e4156SSadaf Ebrahimi Dim tmp As Currency 99*9a0e4156SSadaf Ebrahimi CopyMemory ByVal VarPtr(tmp), ByVal offset, 8 100*9a0e4156SSadaf Ebrahimi readCur = tmp 101*9a0e4156SSadaf EbrahimiEnd Function 102*9a0e4156SSadaf Ebrahimi 103*9a0e4156SSadaf EbrahimiFunction col2Str(c As Collection, Optional emptyVal = "") As String 104*9a0e4156SSadaf Ebrahimi Dim v, tmp As String 105*9a0e4156SSadaf Ebrahimi 106*9a0e4156SSadaf Ebrahimi If c.count = 0 Then 107*9a0e4156SSadaf Ebrahimi col2Str = emptyVal 108*9a0e4156SSadaf Ebrahimi Else 109*9a0e4156SSadaf Ebrahimi For Each v In c 110*9a0e4156SSadaf Ebrahimi col2Str = col2Str & hhex(v) & ", " 111*9a0e4156SSadaf Ebrahimi Next 112*9a0e4156SSadaf Ebrahimi col2Str = Mid(col2Str, 1, Len(col2Str) - 2) 113*9a0e4156SSadaf Ebrahimi End If 114*9a0e4156SSadaf Ebrahimi 115*9a0e4156SSadaf EbrahimiEnd Function 116*9a0e4156SSadaf Ebrahimi 117*9a0e4156SSadaf EbrahimiFunction regCol2Str(hEngine As Long, c As Collection) As String 118*9a0e4156SSadaf Ebrahimi Dim v, tmp As String 119*9a0e4156SSadaf Ebrahimi 120*9a0e4156SSadaf Ebrahimi If c.count = 0 Then Exit Function 121*9a0e4156SSadaf Ebrahimi 122*9a0e4156SSadaf Ebrahimi For Each v In c 123*9a0e4156SSadaf Ebrahimi regCol2Str = regCol2Str & regName(hEngine, CLng(v)) & ", " 124*9a0e4156SSadaf Ebrahimi Next 125*9a0e4156SSadaf Ebrahimi regCol2Str = Mid(regCol2Str, 1, Len(regCol2Str) - 2) 126*9a0e4156SSadaf Ebrahimi 127*9a0e4156SSadaf EbrahimiEnd Function 128*9a0e4156SSadaf Ebrahimi 129*9a0e4156SSadaf Ebrahimi 130*9a0e4156SSadaf Ebrahimi 131*9a0e4156SSadaf EbrahimiFunction b2Str(b() As Byte) As String 132*9a0e4156SSadaf Ebrahimi Dim i As Long 133*9a0e4156SSadaf Ebrahimi 134*9a0e4156SSadaf Ebrahimi If AryIsEmpty(b) Then 135*9a0e4156SSadaf Ebrahimi b2Str = "Empty" 136*9a0e4156SSadaf Ebrahimi Else 137*9a0e4156SSadaf Ebrahimi For i = 0 To UBound(b) 138*9a0e4156SSadaf Ebrahimi b2Str = b2Str & hhex(b(i)) & " " 139*9a0e4156SSadaf Ebrahimi Next 140*9a0e4156SSadaf Ebrahimi b2Str = Trim(b2Str) 141*9a0e4156SSadaf Ebrahimi End If 142*9a0e4156SSadaf Ebrahimi 143*9a0e4156SSadaf EbrahimiEnd Function 144*9a0e4156SSadaf Ebrahimi 145*9a0e4156SSadaf Ebrahimi 146*9a0e4156SSadaf Ebrahimi 147*9a0e4156SSadaf EbrahimiFunction AryIsEmpty(ary) As Boolean 148*9a0e4156SSadaf Ebrahimi Dim i As Long 149*9a0e4156SSadaf Ebrahimi 150*9a0e4156SSadaf Ebrahimi On Error GoTo oops 151*9a0e4156SSadaf Ebrahimi i = UBound(ary) '<- throws error if not initalized 152*9a0e4156SSadaf Ebrahimi AryIsEmpty = False 153*9a0e4156SSadaf Ebrahimi Exit Function 154*9a0e4156SSadaf Ebrahimioops: AryIsEmpty = True 155*9a0e4156SSadaf EbrahimiEnd Function 156*9a0e4156SSadaf Ebrahimi 157*9a0e4156SSadaf EbrahimiPublic Function toBytes(ByVal hexstr, Optional strRet As Boolean = False) 158*9a0e4156SSadaf Ebrahimi 159*9a0e4156SSadaf Ebrahimi'supports: 160*9a0e4156SSadaf Ebrahimi'11 22 33 44 spaced hex chars 161*9a0e4156SSadaf Ebrahimi'11223344 run together hex strings 162*9a0e4156SSadaf Ebrahimi'11,22,33,44 csv hex 163*9a0e4156SSadaf Ebrahimi'\x11,0x22 misc C source rips 164*9a0e4156SSadaf Ebrahimi' 165*9a0e4156SSadaf Ebrahimi'ignores common C source prefixes, operators, delimiters, and whitespace 166*9a0e4156SSadaf Ebrahimi' 167*9a0e4156SSadaf Ebrahimi'not supported 168*9a0e4156SSadaf Ebrahimi'1,2,3,4 all hex chars are must have two chars even if delimited 169*9a0e4156SSadaf Ebrahimi' 170*9a0e4156SSadaf Ebrahimi'a version which supports more formats is here: 171*9a0e4156SSadaf Ebrahimi' https://github.com/dzzie/libs/blob/master/dzrt/globals.cls 172*9a0e4156SSadaf Ebrahimi 173*9a0e4156SSadaf Ebrahimi Dim ret As String, x As String, str As String 174*9a0e4156SSadaf Ebrahimi Dim r() As Byte, b As Byte, b1 As Byte 175*9a0e4156SSadaf Ebrahimi Dim foundDecimal As Boolean, tmp, i, a, a2 176*9a0e4156SSadaf Ebrahimi Dim pos As Long, marker As String 177*9a0e4156SSadaf Ebrahimi 178*9a0e4156SSadaf Ebrahimi On Error GoTo nope 179*9a0e4156SSadaf Ebrahimi 180*9a0e4156SSadaf Ebrahimi str = Replace(hexstr, vbCr, Empty) 181*9a0e4156SSadaf Ebrahimi str = Replace(str, vbLf, Empty) 182*9a0e4156SSadaf Ebrahimi str = Replace(str, vbTab, Empty) 183*9a0e4156SSadaf Ebrahimi str = Replace(str, Chr(0), Empty) 184*9a0e4156SSadaf Ebrahimi str = Replace(str, "{", Empty) 185*9a0e4156SSadaf Ebrahimi str = Replace(str, "}", Empty) 186*9a0e4156SSadaf Ebrahimi str = Replace(str, ";", Empty) 187*9a0e4156SSadaf Ebrahimi str = Replace(str, "+", Empty) 188*9a0e4156SSadaf Ebrahimi str = Replace(str, """""", Empty) 189*9a0e4156SSadaf Ebrahimi str = Replace(str, "'", Empty) 190*9a0e4156SSadaf Ebrahimi str = Replace(str, " ", Empty) 191*9a0e4156SSadaf Ebrahimi str = Replace(str, "0x", Empty) 192*9a0e4156SSadaf Ebrahimi str = Replace(str, "\x", Empty) 193*9a0e4156SSadaf Ebrahimi str = Replace(str, ",", Empty) 194*9a0e4156SSadaf Ebrahimi 195*9a0e4156SSadaf Ebrahimi For i = 1 To Len(str) Step 2 196*9a0e4156SSadaf Ebrahimi x = Mid(str, i, 2) 197*9a0e4156SSadaf Ebrahimi If Not isHexChar(x, b) Then Exit Function 198*9a0e4156SSadaf Ebrahimi bpush r(), b 199*9a0e4156SSadaf Ebrahimi Next 200*9a0e4156SSadaf Ebrahimi 201*9a0e4156SSadaf Ebrahimi If strRet Then 202*9a0e4156SSadaf Ebrahimi toBytes = StrConv(r, vbUnicode, LANG_US) 203*9a0e4156SSadaf Ebrahimi Else 204*9a0e4156SSadaf Ebrahimi toBytes = r 205*9a0e4156SSadaf Ebrahimi End If 206*9a0e4156SSadaf Ebrahimi 207*9a0e4156SSadaf Ebrahiminope: 208*9a0e4156SSadaf EbrahimiEnd Function 209*9a0e4156SSadaf Ebrahimi 210*9a0e4156SSadaf EbrahimiPrivate Sub bpush(bAry() As Byte, b As Byte) 'this modifies parent ary object 211*9a0e4156SSadaf Ebrahimi On Error GoTo init 212*9a0e4156SSadaf Ebrahimi Dim x As Long 213*9a0e4156SSadaf Ebrahimi 214*9a0e4156SSadaf Ebrahimi x = UBound(bAry) '<-throws Error If Not initalized 215*9a0e4156SSadaf Ebrahimi ReDim Preserve bAry(UBound(bAry) + 1) 216*9a0e4156SSadaf Ebrahimi bAry(UBound(bAry)) = b 217*9a0e4156SSadaf Ebrahimi 218*9a0e4156SSadaf Ebrahimi Exit Sub 219*9a0e4156SSadaf Ebrahimi 220*9a0e4156SSadaf Ebrahimiinit: 221*9a0e4156SSadaf Ebrahimi ReDim bAry(0) 222*9a0e4156SSadaf Ebrahimi bAry(0) = b 223*9a0e4156SSadaf Ebrahimi 224*9a0e4156SSadaf EbrahimiEnd Sub 225*9a0e4156SSadaf Ebrahimi 226*9a0e4156SSadaf EbrahimiSub push(ary, value) 'this modifies parent ary object 227*9a0e4156SSadaf Ebrahimi On Error GoTo init 228*9a0e4156SSadaf Ebrahimi Dim x 229*9a0e4156SSadaf Ebrahimi 230*9a0e4156SSadaf Ebrahimi x = UBound(ary) 231*9a0e4156SSadaf Ebrahimi ReDim Preserve ary(x + 1) 232*9a0e4156SSadaf Ebrahimi 233*9a0e4156SSadaf Ebrahimi If IsObject(value) Then 234*9a0e4156SSadaf Ebrahimi Set ary(x + 1) = value 235*9a0e4156SSadaf Ebrahimi Else 236*9a0e4156SSadaf Ebrahimi ary(x + 1) = value 237*9a0e4156SSadaf Ebrahimi End If 238*9a0e4156SSadaf Ebrahimi 239*9a0e4156SSadaf Ebrahimi Exit Sub 240*9a0e4156SSadaf Ebrahimiinit: 241*9a0e4156SSadaf Ebrahimi ReDim ary(0) 242*9a0e4156SSadaf Ebrahimi If IsObject(value) Then 243*9a0e4156SSadaf Ebrahimi Set ary(0) = value 244*9a0e4156SSadaf Ebrahimi Else 245*9a0e4156SSadaf Ebrahimi ary(0) = value 246*9a0e4156SSadaf Ebrahimi End If 247*9a0e4156SSadaf EbrahimiEnd Sub 248*9a0e4156SSadaf Ebrahimi 249*9a0e4156SSadaf Ebrahimi 250*9a0e4156SSadaf EbrahimiPublic Function isHexChar(hexValue As String, Optional b As Byte) As Boolean 251*9a0e4156SSadaf Ebrahimi On Error Resume Next 252*9a0e4156SSadaf Ebrahimi Dim v As Long 253*9a0e4156SSadaf Ebrahimi 254*9a0e4156SSadaf Ebrahimi If Len(hexValue) = 0 Then GoTo nope 255*9a0e4156SSadaf Ebrahimi If Len(hexValue) > 2 Then GoTo nope 'expecting hex char code like FF or 90 256*9a0e4156SSadaf Ebrahimi 257*9a0e4156SSadaf Ebrahimi v = CLng("&h" & hexValue) 258*9a0e4156SSadaf Ebrahimi If Err.Number <> 0 Then GoTo nope 'invalid hex code 259*9a0e4156SSadaf Ebrahimi 260*9a0e4156SSadaf Ebrahimi b = CByte(v) 261*9a0e4156SSadaf Ebrahimi If Err.Number <> 0 Then GoTo nope 'shouldnt happen.. > 255 cant be with len() <=2 ? 262*9a0e4156SSadaf Ebrahimi 263*9a0e4156SSadaf Ebrahimi isHexChar = True 264*9a0e4156SSadaf Ebrahimi 265*9a0e4156SSadaf Ebrahimi Exit Function 266*9a0e4156SSadaf Ebrahiminope: 267*9a0e4156SSadaf Ebrahimi Err.Clear 268*9a0e4156SSadaf Ebrahimi isHexChar = False 269*9a0e4156SSadaf EbrahimiEnd Function 270*9a0e4156SSadaf Ebrahimi 271*9a0e4156SSadaf EbrahimiFunction hhex(b) As String 272*9a0e4156SSadaf Ebrahimi hhex = Right("00" & Hex(b), 2) 273*9a0e4156SSadaf EbrahimiEnd Function 274*9a0e4156SSadaf Ebrahimi 275*9a0e4156SSadaf EbrahimiFunction rpad(x, i, Optional c = " ") 276*9a0e4156SSadaf Ebrahimi rpad = Left(x & String(i, c), i) 277*9a0e4156SSadaf EbrahimiEnd Function 278*9a0e4156SSadaf Ebrahimi 279*9a0e4156SSadaf EbrahimiFunction HexDump(bAryOrStrData, Optional hexOnly = 0, Optional ByVal startAt As Long = 1, Optional ByVal length As Long = -1) As String 280*9a0e4156SSadaf Ebrahimi Dim s() As String, chars As String, tmp As String 281*9a0e4156SSadaf Ebrahimi On Error Resume Next 282*9a0e4156SSadaf Ebrahimi Dim ary() As Byte 283*9a0e4156SSadaf Ebrahimi Dim offset As Long 284*9a0e4156SSadaf Ebrahimi Const LANG_US = &H409 285*9a0e4156SSadaf Ebrahimi Dim i As Long, tt, h, x 286*9a0e4156SSadaf Ebrahimi 287*9a0e4156SSadaf Ebrahimi offset = 0 288*9a0e4156SSadaf Ebrahimi 289*9a0e4156SSadaf Ebrahimi If TypeName(bAryOrStrData) = "Byte()" Then 290*9a0e4156SSadaf Ebrahimi ary() = bAryOrStrData 291*9a0e4156SSadaf Ebrahimi Else 292*9a0e4156SSadaf Ebrahimi ary = StrConv(CStr(bAryOrStrData), vbFromUnicode, LANG_US) 293*9a0e4156SSadaf Ebrahimi End If 294*9a0e4156SSadaf Ebrahimi 295*9a0e4156SSadaf Ebrahimi If startAt < 1 Then startAt = 1 296*9a0e4156SSadaf Ebrahimi If length < 1 Then length = -1 297*9a0e4156SSadaf Ebrahimi 298*9a0e4156SSadaf Ebrahimi While startAt Mod 16 <> 0 299*9a0e4156SSadaf Ebrahimi startAt = startAt - 1 300*9a0e4156SSadaf Ebrahimi Wend 301*9a0e4156SSadaf Ebrahimi 302*9a0e4156SSadaf Ebrahimi startAt = startAt + 1 303*9a0e4156SSadaf Ebrahimi 304*9a0e4156SSadaf Ebrahimi chars = " " 305*9a0e4156SSadaf Ebrahimi For i = startAt To UBound(ary) + 1 306*9a0e4156SSadaf Ebrahimi tt = Hex(ary(i - 1)) 307*9a0e4156SSadaf Ebrahimi If Len(tt) = 1 Then tt = "0" & tt 308*9a0e4156SSadaf Ebrahimi tmp = tmp & tt & " " 309*9a0e4156SSadaf Ebrahimi x = ary(i - 1) 310*9a0e4156SSadaf Ebrahimi 'chars = chars & IIf((x > 32 And x < 127) Or x > 191, Chr(x), ".") 'x > 191 causes \x0 problems on non us systems... asc(chr(x)) = 0 311*9a0e4156SSadaf Ebrahimi chars = chars & IIf((x > 32 And x < 127), Chr(x), ".") 312*9a0e4156SSadaf Ebrahimi If i > 1 And i Mod 16 = 0 Then 313*9a0e4156SSadaf Ebrahimi h = Hex(offset) 314*9a0e4156SSadaf Ebrahimi While Len(h) < 6: h = "0" & h: Wend 315*9a0e4156SSadaf Ebrahimi If hexOnly = 0 Then 316*9a0e4156SSadaf Ebrahimi push s, h & " " & tmp & chars 317*9a0e4156SSadaf Ebrahimi Else 318*9a0e4156SSadaf Ebrahimi push s, tmp 319*9a0e4156SSadaf Ebrahimi End If 320*9a0e4156SSadaf Ebrahimi offset = offset + 16 321*9a0e4156SSadaf Ebrahimi tmp = Empty 322*9a0e4156SSadaf Ebrahimi chars = " " 323*9a0e4156SSadaf Ebrahimi End If 324*9a0e4156SSadaf Ebrahimi If length <> -1 Then 325*9a0e4156SSadaf Ebrahimi length = length - 1 326*9a0e4156SSadaf Ebrahimi If length = 0 Then Exit For 327*9a0e4156SSadaf Ebrahimi End If 328*9a0e4156SSadaf Ebrahimi Next 329*9a0e4156SSadaf Ebrahimi 330*9a0e4156SSadaf Ebrahimi 'if read length was not mod 16=0 then 331*9a0e4156SSadaf Ebrahimi 'we have part of line to account for 332*9a0e4156SSadaf Ebrahimi If tmp <> Empty Then 333*9a0e4156SSadaf Ebrahimi If hexOnly = 0 Then 334*9a0e4156SSadaf Ebrahimi h = Hex(offset) 335*9a0e4156SSadaf Ebrahimi While Len(h) < 6: h = "0" & h: Wend 336*9a0e4156SSadaf Ebrahimi h = h & " " & tmp 337*9a0e4156SSadaf Ebrahimi While Len(h) <= 56: h = h & " ": Wend 338*9a0e4156SSadaf Ebrahimi push s, h & chars 339*9a0e4156SSadaf Ebrahimi Else 340*9a0e4156SSadaf Ebrahimi push s, tmp 341*9a0e4156SSadaf Ebrahimi End If 342*9a0e4156SSadaf Ebrahimi End If 343*9a0e4156SSadaf Ebrahimi 344*9a0e4156SSadaf Ebrahimi HexDump = Join(s, vbCrLf) 345*9a0e4156SSadaf Ebrahimi 346*9a0e4156SSadaf Ebrahimi If hexOnly <> 0 Then 347*9a0e4156SSadaf Ebrahimi HexDump = Replace(HexDump, " ", "") 348*9a0e4156SSadaf Ebrahimi HexDump = Replace(HexDump, vbCrLf, "") 349*9a0e4156SSadaf Ebrahimi End If 350*9a0e4156SSadaf Ebrahimi 351*9a0e4156SSadaf EbrahimiEnd Function 352*9a0e4156SSadaf Ebrahimi 353*9a0e4156SSadaf Ebrahimi 354*9a0e4156SSadaf Ebrahimi 355*9a0e4156SSadaf EbrahimiFunction FileExists(path As String) As Boolean 356*9a0e4156SSadaf Ebrahimi On Error GoTo hell 357*9a0e4156SSadaf Ebrahimi 358*9a0e4156SSadaf Ebrahimi If Len(path) = 0 Then Exit Function 359*9a0e4156SSadaf Ebrahimi If Right(path, 1) = "\" Then Exit Function 360*9a0e4156SSadaf Ebrahimi If Dir(path, vbHidden Or vbNormal Or vbReadOnly Or vbSystem) <> "" Then FileExists = True 361*9a0e4156SSadaf Ebrahimi 362*9a0e4156SSadaf Ebrahimi Exit Function 363*9a0e4156SSadaf Ebrahimihell: FileExists = False 364*9a0e4156SSadaf EbrahimiEnd Function 365*9a0e4156SSadaf Ebrahimi 366*9a0e4156SSadaf EbrahimiSub WriteFile(path, it) 367*9a0e4156SSadaf Ebrahimi Dim f 368*9a0e4156SSadaf Ebrahimi f = FreeFile 369*9a0e4156SSadaf Ebrahimi Open path For Output As #f 370*9a0e4156SSadaf Ebrahimi Print #f, it 371*9a0e4156SSadaf Ebrahimi Close f 372*9a0e4156SSadaf EbrahimiEnd Sub 373*9a0e4156SSadaf Ebrahimi 374*9a0e4156SSadaf EbrahimiFunction GetParentFolder(path) As String 375*9a0e4156SSadaf Ebrahimi Dim tmp() As String, ub As Long 376*9a0e4156SSadaf Ebrahimi On Error Resume Next 377*9a0e4156SSadaf Ebrahimi tmp = Split(path, "\") 378*9a0e4156SSadaf Ebrahimi ub = tmp(UBound(tmp)) 379*9a0e4156SSadaf Ebrahimi If Err.Number = 0 Then 380*9a0e4156SSadaf Ebrahimi GetParentFolder = Replace(Join(tmp, "\"), "\" & ub, "") 381*9a0e4156SSadaf Ebrahimi Else 382*9a0e4156SSadaf Ebrahimi GetParentFolder = path 383*9a0e4156SSadaf Ebrahimi End If 384*9a0e4156SSadaf EbrahimiEnd Function 385*9a0e4156SSadaf Ebrahimi 386