Type
ArrayOfByte =
Array
Of
Byte
;
Function
TForm4
.
PosEx(
Const
MainSub:
Array
Of
ArrayOfByte;
Const
Main: ArrayOfByte;
Var
Finded: ArrayOfByte;
Const
Offset:
Cardinal
=
0
;
Const
IgnoreCase:
Boolean
=
False
):
Integer
;
var
s:
String
;
Index, IndexM, IndexS:
Integer
;
Sub:
Array
Of
ArrayOfByte;
begin
if
Offset > High(Main)
then
Begin
SetLenGth(Finded,
0
);
Result := -
1
;
Exit;
End
;
for
Index := Low(MainSub)
to
High(MainSub)
do
Begin
if
(LenGth(MainSub[Index]) >
0
)
and
(LenGth(MainSub[Index]) <= ((LenGth(Main) - Offset) +
1
))
then
Begin
SetLenGth(Sub, LenGth(Sub)+
1
);
SetLenGth(Sub[High(Sub)], LenGth(MainSub[Index]));
Move(MainSub[Index,Low(MainSub[Index])], Sub[High(Sub),Low(Sub[High(Sub)])], LenGth(Sub[High(Sub)]));
End
;
End
;
if
LenGth(Sub) =
0
then
Begin
SetLenGth(Finded,
0
);
Result := -
1
;
Exit;
End
;
for
IndexM := OffSet
to
High(Main)
do
Begin
for
IndexS := Low(Sub)
to
High(Sub)
do
Begin
for
Index := Low(Sub[IndexS])
to
High(Sub[IndexS])
do
Begin
if
(Sub[IndexS,Index] <> Main[IndexM+Index])
Then
Begin
If
Not
(IgnoreCase)
then
Break
Else
Begin
If
((Sub[IndexS,Index] >=
65
)
and
(Sub[IndexS,Index] <=
90
))
then
Begin
if
(Sub[IndexS,Index] +
32
<> Main[IndexM+Index])
Then
Break;
Continue;
End
;
If
((Sub[IndexS,Index] >=
97
)
and
(Sub[IndexS,Index] <=
122
))
then
Begin
if
(Sub[IndexS,Index] -
32
<> Main[IndexM+Index])
Then
Break;
Continue;
End
;
End
;
End
;
End
;
if
Index > High(Sub[IndexS])
then
Begin
Result := IndexM;
Finded := Sub[IndexS];
Exit;
End
;
End
;
End
;
SetLenGth(Finded,
0
);
Result := -
1
;
End
;