Паскалевский эквивалент StrTok

Решение 1
function NextToken(P: PChar; Divider: PChar): PChar;
const
  next: PChar = nil ;
begin
  if P = nil then P := next;
  if P <> nil then begin
    next := StrPos(P, Divider);
    if next <> nil then begin
      next^ := #0;
      next := @next[StrLen(Divider)];
    end;
  end;
  NextToken := P;
end;
[News Group]

Решение 2
function StrTok(Phrase: PChar; Delimeter: PChar): PChar;
const
  tokenPtr: PChar = nil;
  workPtr: PChar = nil;
var
  delimPtr: PChar;
begin
  if (Phrase <> nil) then workPtr := Phrase
  else workPtr := tokenPtr;
  if workPtr = nil then begin
    Result := nil;
    Exit;
  end;
  delimPtr := StrPos(workPtr, Delimeter);
  if (delimPtr <> nil) then begin
    delimPtr^ := Chr(0);
    tokenPtr := delimPtr + 1
  end

  else
    tokenPtr := nil;
  Result := workPtr;
end;
[News Group]