anchor.diff:    lvBuf, lvFreeBuf: PMemoryBlock;
   begin
     if FRead = nil then exit;
  -  lvBuf := FRead.PrevEx;
  +    lvBuf := FRead.PrevEx;
     while lvBuf <> nil do
     begin
       lvFreeBuf :=lvBuf;
  
positive.code:     Integer;
  var
    lvBufBlock: PMemoryBlock;
  
    lvPRes:Pointer;
  
    l, x, lvPosition:Cardinal;
  begin
    Result := -1;
    l := 0;
  
    lvBufBlock := FRead;
    lvPosition := FReadPosition;
  
    if lvBufBlock = nil then
    begin   // ͷʼ
      lvBufBlock := FHead;
      lvPosition := 0;
    end;
  
    if lvBufBlock <> nil then
    begin
      while lvBufBlock <> nil do
      begin
        lvPRes := SearchPointer(lvBufBlock.Memory, lvBufBlock.DataLen, lvPosition, subBuf, subBufLen);
        if lvPRes <> nil then
        begin
          x := PAnsiChar(lvPRes) - PAnsiChar(lvBufBlock.Memory) - lvPosition;
          Result := l + x;
          Break;
        end else
        begin
          l := l + lvBufBlock.DataLen - lvPosition;
  
          // һ
          lvBufBlock := lvBufBlock.NextEx;
          lvPosition := 0;
        end;
      end;
    end;
  end;
  
negative.code:   begin
      Result := nil;
      j := pvStartIndex;
      lvTempP := PAnsiChar(pvSource);
      Inc(lvTempP, pvStartIndex);
  
      lvTempPSub := PAnsiChar(pvSub);
      while j<pvSourceLen do
      begin
        if lvTempP^ = lvTempPSub^ then
  