Public Function SisicM(ByRef pStr As Long, ByRef pFind As Long, ByRef lenStr As Long, ByRef lenFind As Long) As Long
Dim lngA As Long, lngB As Long, lngC As Long
Dim intFind As Integer, intStr As Integer
Dim intFirst As Integer, intLast As Integer, lngCounter As Long, lngFlag As Long
If OldStr <> pStr Then
BufStrHeader(3) = pStr
RtlMoveMemory ByVal VarPtrArray(BufStr), VarPtr(BufStrHeader(0)), 4
OldStr = pStr
End If
If OldFind <> pFind Then
BufFindHeader(3) = pFind
RtlMoveMemory ByVal VarPtrArray(BufFind), VarPtr(BufFindHeader(0)), 4
OldFind = pFind
End If
If lenFind = 1 Then
intFirst = BufFind(0)
For lngA = lenStr - 1 To 0 Step -1
intStr = BufStr(lngA)
If intFirst = intStr Then lngCounter = lngCounter + 1
Next lngA
ElseIf lenFind = 2 Then
lenFind = 1
intFirst = BufFind(0)
intLast = BufFind(lenFind)
For lngA = lenStr - 1 To lenFind Step -1
intStr = BufStr(lngA)
If intLast = intStr Then
intStr = BufStr(lngA - lenFind)
If intFirst = intStr Then lngCounter = lngCounter + 1: lngA = lngA - lenFind
End If
Next lngA
Else
lenFind = lenFind - 1
intFirst = BufFind(0)
intLast = BufFind(lenFind)
For lngA = lenStr - 1 To lenFind Step -1
intStr = BufStr(lngA)
If intLast = intStr Then
intStr = BufStr(lngA - lenFind)
If intFirst = intStr Then
lngC = lngA - 1
For lngB = lenFind - 1 To 1 Step -1
intFind = BufFind(lngB)
intStr = BufStr(lngC)
If Not (intFind = intStr) Then lngFlag = 1: Exit For
lngC = lngC - 1
Next lngB
If lngFlag = 1 Then lngFlag = 0 Else lngCounter = lngCounter + 1: lngA = lngC
End If
End If
Next lngA
End If
SisicM = lngCounter
End Function