📄 fileaccess.bas
字号:
Attribute VB_Name = "Module2"
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public Function GetSetting(INISection As String, INIKey As String) As String
Dim MyString As String
'crap = VB.App.EXEName
MyString = " "
RetStat = GetPrivateProfileString(INISection, INIKey, "", MyString, 20, VB.App.Path & "\" & VB.App.EXEName & ".INI") ' "\P1618QP.INI")
GetSetting = Mid(MyString, 1, InStr(1, MyString, Chr(0), vbBinaryCompare) - 1)
End Function
Public Function SetSetting(MySetting As String, INISection As String, INIKey As String) As Long
SetSetting = WritePrivateProfileString(INISection, INIKey, MySetting, VB.App.Path & "\" & VB.App.EXEName & ".INI") ' "\P1618QP.INI")
End Function
Public Function ExportP18HEXFile(OutHEXFile As String) As Integer
Dim Checksum As Long
Dim Address As Long
Dim OldAddress As Long
Dim FileLine As String
Dim OutFileLine As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set OutFile = fs.CreateTextFile(OutHEXFile, True)
Set PMIn = fs.OpenTextFile(VB.App.Path & "\" & PicBootS.ProgMemFile, 1, False, 0)
Set EEIn = fs.OpenTextFile(VB.App.Path & "\" & PicBootS.EEDataFile, 1, False, 0)
Set UIDIn = fs.OpenTextFile(VB.App.Path & "\" & PicBootS.UserIDFile, 1, False, 0)
Set CFGIn = fs.OpenTextFile(VB.App.Path & "\" & PicBootS.ConfigFile, 1, False, 0)
Address = &H7FFFFF
Do While PMIn.AtEndOfStream <> True
FileLine = PMIn.ReadLine
OldAddress = Address
Address = Val("&H1" & Mid(FileLine, 1, 6)) And 16777215
If (Address And 16711680) <> (OldAddress And 16711680) Then
OutFileLine = ":0200000400" & Dec2Hex((Address And 16711680) \ 65536, 2)
Checksum = 0
For i = 0 To 5
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
End If
OutFileLine = ":10" & Dec2Hex(Address And 65535, 4) & "00"
For i = 0 To 15
OutFileLine = OutFileLine & Mid(FileLine, (i * 3) + 8, 2)
Next i
Checksum = 0
For i = 0 To 19
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
Loop
Do While UIDIn.AtEndOfStream <> True
FileLine = UIDIn.ReadLine
OldAddress = Address
Address = Val("&H1" & Mid(FileLine, 1, 6)) And 16777215
If (Address And 16711680) <> (OldAddress And 16711680) Then
OutFileLine = ":0200000400" & Dec2Hex((Address And 16711680) \ 65536, 2)
Checksum = 0
For i = 0 To 5
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
End If
OutFileLine = ":10" & Dec2Hex(Address And 65535, 4) & "00"
For i = 0 To 15
OutFileLine = OutFileLine & Mid(FileLine, (i * 3) + 8, 2)
Next i
Checksum = 0
For i = 0 To 19
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
Loop
Do While CFGIn.AtEndOfStream <> True
FileLine = CFGIn.ReadLine
OldAddress = Address
Address = Val("&H1" & Mid(FileLine, 1, 6)) And 16777215
If (Address And 16711680) <> (OldAddress And 16711680) Then
OutFileLine = ":0200000400" & Dec2Hex((Address And 16711680) \ 65536, 2)
Checksum = 0
For i = 0 To 5
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
End If
OutFileLine = ":10" & Dec2Hex(Address And 65535, 4) & "00"
For i = 0 To 15
OutFileLine = OutFileLine & Mid(FileLine, (i * 3) + 8, 2)
Next i
Checksum = 0
For i = 0 To 19
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
Loop
Do While EEIn.AtEndOfStream <> True
FileLine = EEIn.ReadLine
OldAddress = Address
Address = (Val("&H1" & Mid(FileLine, 1, 6)) And 16777215) + 15728640
If (Address And 16711680) <> (OldAddress And 16711680) Then
OutFileLine = ":0200000400" & Dec2Hex((Address And 16711680) \ 65536, 2)
Checksum = 0
For i = 0 To 5
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
End If
OutFileLine = ":10" & Dec2Hex(Address And 65535, 4) & "00"
For i = 0 To 15
OutFileLine = OutFileLine & Mid(FileLine, (i * 3) + 8, 2)
Next i
Checksum = 0
For i = 0 To 19
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
Loop
OutFile.WriteLine (":00000001FF")
OutFile.Close
PMIn.Close
EEIn.Close
UIDIn.Close
CFGIn.Close
End Function
Public Function ExportP16HEXFile(OutHEXFile As String) As Integer
Dim Checksum As Long
Dim Address As Long
Dim OldAddress As Long
Dim FileLine As String
Dim OutFileLine As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set OutFile = fs.CreateTextFile(OutHEXFile, True)
Set PMIn = fs.OpenTextFile(VB.App.Path & "\" & PicBootS.ProgMemFile, 1, False, 0)
Set EEIn = fs.OpenTextFile(VB.App.Path & "\" & PicBootS.EEDataFile, 1, False, 0)
Do While PMIn.AtEndOfStream <> True
FileLine = PMIn.ReadLine
OldAddress = Address
Address = Val("&H1" & Mid(FileLine, 1, 6)) And 16777215
If (Address And 16711680) <> (OldAddress And 16711680) Then
OutFileLine = ":0200000400" & Dec2Hex((Address And 16711680) \ 65536, 2)
Checksum = 0
For i = 0 To 5
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
End If
OutFileLine = ":10" & Dec2Hex(Address And 65535, 4) & "00"
For i = 0 To 15
OutFileLine = OutFileLine & Mid(FileLine, (i * 3) + 8, 2)
Next i
Checksum = 0
For i = 0 To 19
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
Loop
Do While EEIn.AtEndOfStream <> True
FileLine = EEIn.ReadLine
OldAddress = Address
Address = (Val("&H1" & Mid(FileLine, 1, 6)) And 16777215) + 8448
If (Address And 16711680) <> (OldAddress And 16711680) Then
OutFileLine = ":0200000400" & Dec2Hex((Address And 16711680) \ 65536, 2)
Checksum = 0
For i = 0 To 5
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
End If
OutFileLine = ":10" & Dec2Hex(Address And 65535, 4) & "00"
For i = 0 To 15
OutFileLine = OutFileLine & Mid(FileLine, (i * 3) + 8, 2)
Next i
Checksum = 0
For i = 0 To 19
Checksum = Checksum + Val("&H" & Mid(OutFileLine, (i * 2) + 2, 2))
Next i
OutFileLine = OutFileLine & Dec2Hex((256 - (Checksum And 255)) And 255, 2)
OutFile.WriteLine (OutFileLine)
Loop
OutFile.WriteLine (":00000001FF")
OutFile.Close
PMIn.Close
EEIn.Close
End Function
Public Function ImportP18HEXFile(InHEXFile As String) As Integer
Dim FileLine
Dim InData(256) As Byte
Dim LineData As String
Dim LineDataCount As Byte
Dim LineAddr As Long
Dim LineCode As Byte
Dim DataCount As Byte
Dim OutAddr As Long
Dim LongAddr As Long
Dim Checksum As Long
Dim OutOffset As Long
Dim OutLine As String
Dim LineAddrHigh As Long
'Examine the HEX file for incompatability
ImportP18HEXFile = ValidateHEXFile(InHEXFile)
If ImportP18HEXFile < 0 Then
Exit Function
End If
Set fs = CreateObject("Scripting.FileSystemObject")
Set InFile = fs.OpenTextFile(InHEXFile, 1, False, 0)
Set PMOut = fs.CreateTextFile(VB.App.Path & "\" & PicBootS.ProgMemFile, True)
Set EEOut = fs.CreateTextFile(VB.App.Path & "\" & PicBootS.EEDataFile, True)
Set UIDOut = fs.CreateTextFile(VB.App.Path & "\" & PicBootS.UserIDFile, True)
Set CFGOut = fs.CreateTextFile(VB.App.Path & "\" & PicBootS.ConfigFile, True)
Do While InFile.AtEndOfStream <> True
FileLine = InFile.ReadLine
'Init the array with 0xFF
For i = 0 To 255
InData(i) = 255
Next i
LineCode = 0
If Mid(FileLine, 1, 1) = ":" Then
'Parse the line
LineDataCount = Val("&H" & Mid(FileLine, 2, 2))
LineAddr = Val("&H1" & Mid(FileLine, 4, 4)) And 65535
LineCode = Val("&H" & Mid(FileLine, 8, 2))
LineData = Mid(FileLine, 10, (LineDataCount * 2))
Select Case LineCode
Case 0
'Get and order the data
OutOffset = LineAddr Mod 16
For i = 0 To LineDataCount - 1
InData(i + OutOffset) = Val("&H" & Mid(LineData, (i * 2) + 1, 2))
Next i
Select Case LineAddrHigh
Case 0 To 31 ' regular program memory
'Build one or more formatted lines
OutAddr = (LineAddrHigh * 65536) + (LineAddr And 65520)
DataCount = 0
Do While DataCount < LineDataCount
'Built a formatted line of data
OutLine = Dec2Hex(OutAddr, 6) & " "
For i = DataCount To DataCount + 15
OutLine = OutLine & Dec2Hex(InData(i), 2) & " "
OutAddr = OutAddr + 1
Next i
DataCount = DataCount + 16
PMOut.WriteLine (OutLine)
Loop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -