Hi
Ich hab das jetzt etwas anders gelöst.
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$lib "mmc.lib"
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.7 , Rs = Portc.6
Config Lcd = 16 * 4
Dim Abuffer As String * 512 At $60 ' Hold Sector to and from CF-Card
Dim String1 As String * 254 At $60 Overlay
Dim String2 As String * 254 At $10a Overlay
Dim String3 As String * 171 At $1b4 Overlay
$include "config_mmc.bas"
Dim Berror As Byte
Dim Wsrampointer As Word ' Address-Pointer for write
Dim Lsectornumber As Long ' Sector Number
Dim Ende As Byte
Dim S_position As Word
Dim S_position2 As Byte
Dim S_position3 As Byte
Dim E_position As Word
Dim E_position2 As Byte
Dim E_position3 As Byte
Dim S_sektor As Long
Dim E_sektor As Long
Dim Datenmenge As Word
Dim Temp As Word
Ende = 0
Lsectornumber = 0
Cls
If Gbdriveerror = 0 Then
Cls
Do
Wsrampointer = Varptr(abuffer)
Berror = Drivereadsector(wsrampointer , Lsectornumber)
If S_position = 0 Then
S_position = Instr(1 , String1 , "<START>")
S_position2 = Instr(1 , String2 , "<START>")
S_position3 = Instr(1 , String3 , "<START>")
If S_position2 <> 0 Then
S_position = S_position2 + 170
End If
If S_position3 <> 0 Then
S_position = S_position3 + 340
End If
S_sektor = Lsectornumber
End If
If S_position <> 0 Then
E_position = Instr(1 , String1 , "<ENDE>")
E_position2 = Instr(1 , String2 , "<ENDE>")
E_position3 = Instr(1 , String3 , "<ENDE>")
If E_position2 <> 0 Then
E_position = E_position2 + 170
End If
If E_position3 <> 0 Then
E_position = E_position3 + 340
End If
If E_position <> 0 Then
E_sektor = Lsectornumber
Ende = 1
End If
End If
Incr Lsectornumber
Loop Until Ende = 1
Else
Lcd "Fehler :-("
End If
If S_sektor = E_sektor Then
Datenmenge = S_position + 7
Datenmenge = E_position - Datenmenge
Else
Datenmenge = S_position + 6
Datenmenge = 512 - Datenmenge
Temp = E_sektor - S_sektor
Temp = Temp - 1
Temp = Temp * 512
Datenmenge = Datenmenge + Temp
Datenmenge = Datenmenge + E_position
Datenmenge = Datenmenge - 1
End If
If Gbdriveerror = 0 Then
Cls
Lcd S_sektor ; ":" ; S_position ; "-" ; E_sektor ; ":" ; E_position
'Lcd E_position ; "--" ; E_position2
Locate 2 , 1
Lcd "Menge: " ; Datenmenge ; " Bytes"
Thirdline
Lcd "Text"
End If
End 'end program 'end program
So funktioniert es jetzt einwandfrei. ich hab extra 3 Strings genommen, die sich überschneiden, damit er auch was findet, wenn z.B. "<ENDE>" genau an der Grenze der Strings steht.
Nun muss ich aber noch den Sonderfall einbauen, dass der String "<START>" bzw. "<ENDE>" über eine Sektorgrenze geht. Das wird noch aufwändig
Lesezeichen