function TmainForm.FastPosNoCase(const aSourceString, aFindString :String; const aSourceLen, aFindLen, StartPos :integer):integer; var SourceLen : integer; begin SourceLen := aSourceLen; SourceLen := SourceLen - aFindLen; if (StartPos-1) > SourceLen then begin Result := 0; Exit; end; SourceLen := SourceLen - StartPos; SourceLen := SourceLen +2; asm push ESI push EDI push EBX mov EDI, aSourceString add EDI, StartPos Dec EDI mov ESI, aFindString mov ECX, SourceLen Mov Al, [ESI] // Make Al lowercase. and Al, $df @ScaSB: Mov Ah, [EDI] // Make Ah lowercase. and Ah, $df cmp Ah,Al jne @NextChar @CompareStrings: mov EBX, aFindLen dec EBX //add by ShengQuanhu Jz @EndOfMatch //add end
@CompareNext: // Make Al and Ah lowercase. and Al, $df and Ah, $df cmp Al, Ah Jz @Matches Mov Al, [ESI] // Make Al lowercase. and Al, $df Jmp @NextChar @Matches: Dec EBX Jnz @CompareNext
//add by Shengquanhu @EndOfMatch: //add end mov EAX, EDI sub EAX, aSourceString inc EAX mov Result, EAX jmp @TheEnd @NextChar: Inc EDI dec ECX jnz @ScaSB mov Result,0 @TheEnd: pop EBX pop EDI pop ESI end; end;
const aSourceLen, aFindLen, StartPos :integer):integer;
var
SourceLen : integer;
begin
SourceLen := aSourceLen;
SourceLen := SourceLen - aFindLen;
if (StartPos-1) > SourceLen then begin
Result := 0;
Exit;
end;
SourceLen := SourceLen - StartPos;
SourceLen := SourceLen +2;
asm
push ESI
push EDI
push EBX
mov EDI, aSourceString
add EDI, StartPos
Dec EDI
mov ESI, aFindString
mov ECX, SourceLen
Mov Al, [ESI]
// Make Al lowercase.
and Al, $df
@ScaSB:
Mov Ah, [EDI]
// Make Ah lowercase.
and Ah, $df
cmp Ah,Al
jne @NextChar
@CompareStrings:
mov EBX, aFindLen
dec EBX //add by ShengQuanhu
Jz @EndOfMatch
//add end
@CompareNext: // Make Al and Ah lowercase.
and Al, $df
and Ah, $df
cmp Al, Ah
Jz @Matches
Mov Al, [ESI]
// Make Al lowercase.
and Al, $df
Jmp @NextChar
@Matches:
Dec EBX
Jnz @CompareNext
//add by Shengquanhu
@EndOfMatch:
//add end mov EAX, EDI
sub EAX, aSourceString
inc EAX
mov Result, EAX
jmp @TheEnd
@NextChar:
Inc EDI
dec ECX
jnz @ScaSB
mov Result,0
@TheEnd:
pop EBX
pop EDI
pop ESI
end;
end;