103 lines
2.1 KiB
Text
103 lines
2.1 KiB
Text
|
' Gambas class file
|
||
|
|
||
|
Static Public Name As String
|
||
|
Static Public Parent As String
|
||
|
Static Public HasFast As Boolean
|
||
|
|
||
|
Static Private $iSectionSize As Integer
|
||
|
Static Private $iSectionPos As Integer
|
||
|
|
||
|
Static Private Sub GotoNextSection(hFile As File)
|
||
|
|
||
|
$iSectionPos += $iSectionSize
|
||
|
Seek #hFile, $iSectionPos
|
||
|
$iSectionSize = Read #hFile As Integer
|
||
|
$iSectionPos += 4
|
||
|
|
||
|
End
|
||
|
|
||
|
Static Private Sub ReadZeroString(hFile As File) As String
|
||
|
|
||
|
Dim sStr As String
|
||
|
Dim iPos As Integer
|
||
|
|
||
|
Do
|
||
|
sStr &= Read #hFile, Min(16, Lof(hFile) - Seek(hFile))
|
||
|
iPos = InStr(sStr, Chr$(0))
|
||
|
If iPos Then Return Left(sStr, iPos - 1)
|
||
|
Loop
|
||
|
|
||
|
End
|
||
|
|
||
|
|
||
|
|
||
|
Static Public Sub Stat(sDir As String, sName As String)
|
||
|
|
||
|
Dim sPath As String
|
||
|
Dim hFile As File
|
||
|
Dim iVal As Integer
|
||
|
Dim iParent As Integer
|
||
|
Dim iFlag As Short
|
||
|
Dim bDebug As Boolean
|
||
|
Dim iStringPos As Integer
|
||
|
|
||
|
sPath = sDir &/ ".gambas" &/ UCase(sName)
|
||
|
If Not Exist(sPath) Then Error.Raise("Class not found: " & sPath)
|
||
|
|
||
|
$iSectionPos = 0
|
||
|
$iSectionSize = 0
|
||
|
|
||
|
hFile = Open sPath
|
||
|
|
||
|
Seek #hFile, 8
|
||
|
iVal = Read #hFile As Integer
|
||
|
If iVal <> &H12345678 Then hFile.ByteOrder = 1 - hFile.ByteOrder
|
||
|
Seek #hFile, 12
|
||
|
iVal = Read #hFile As Integer
|
||
|
bDebug = iVal And 1
|
||
|
|
||
|
$iSectionSize = 16
|
||
|
|
||
|
GotoNextSection(hFile) ' info
|
||
|
Seek #hFile, $iSectionPos
|
||
|
iParent = Read #hFile As Short
|
||
|
iFlag = Read #hFile As Short
|
||
|
|
||
|
'hStat.Exported = BTst(iFlag, 0)
|
||
|
'hStat.AutoCreate = BTst(iFlag, 1)
|
||
|
'hStat.Optional = BTst(iFlag, 2)
|
||
|
'hStat.NoCreate = BTst(iFlag, 3)
|
||
|
HasFast = BTst(iFlag, 4)
|
||
|
|
||
|
GotoNextSection(hFile) ' description
|
||
|
GotoNextSection(hFile) ' constant
|
||
|
GotoNextSection(hFile) ' reference
|
||
|
|
||
|
If iParent <> -1 Then
|
||
|
|
||
|
Seek #hFile, $iSectionPos + iParent * 4
|
||
|
iParent = Read #hFile As Integer
|
||
|
iParent = Abs(iParent)
|
||
|
|
||
|
Endif
|
||
|
|
||
|
Do
|
||
|
iStringPos = $iSectionPos
|
||
|
Try GotoNextSection(hFile)
|
||
|
If Error Then Break
|
||
|
Loop
|
||
|
|
||
|
Seek #hFile, iStringPos
|
||
|
Name = ReadZeroString(hFile)
|
||
|
|
||
|
If iParent > 0 Then
|
||
|
|
||
|
Seek #hFile, iStringPos + iParent
|
||
|
Parent = ReadZeroString(hFile)
|
||
|
|
||
|
Endif
|
||
|
|
||
|
Close hFile
|
||
|
|
||
|
End
|