{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (RX)                    }
{                                                       }
{         Copyright (c) 2001,2002 SGB Software          }
{         Copyright (c) 1997, 1998 Fedor Koshevnikov,   }
{                        Igor Pavluk and Serge Korolev  }
{                                                       }
{*******************************************************}

unit Str16;

interface

{$IFNDEF WIN32}

{$I RX.INC}

type
  ShortString = string;
  PShortString = ^ShortString;
  AnsiChar = Char;
  PAnsiChar = ^AnsiChar;

{ System32 unit functions and procedures }
procedure SetLength(var S: string; NewLength: Byte);
procedure SetString(var S: string; Buffer: PChar; Len: Byte);
procedure UniqueString(var S: string);

{ SysUtils32 unit functions and procedures }
function Trim(const S: string): string;
function TrimLeft(const S: string): string;
function TrimRight(const S: string): string;
function QuotedStr(const S: string): string;

{$ENDIF WIN32}

implementation

{$IFNDEF WIN32}

uses SysUtils;

procedure SetLength(var S: string; NewLength: Byte);
begin
  S[0] := Char(NewLength);
end;

procedure SetString(var S: string; Buffer: PChar; Len: Byte);
begin
  S[0] := Char(Len);
  if Buffer <> nil then begin
    if StrLen(Buffer) < Len then Len := StrLen(Buffer);
    Move(Buffer^, S[1], Len);
  end;
end;

procedure UniqueString(var S: string);
begin
end;

function Trim(const S: string): string;
var
  I, L: Byte;
begin
  L := Length(S);
  I := 1;
  while (I <= L) and (S[I] <= ' ') do Inc(I);
  if I > L then Result := ''
  else begin
    while S[L] <= ' ' do Dec(L);
    Result := Copy(S, I, L - I + 1);
  end;
end;

function TrimLeft(const S: string): string;
var
  I, L: Byte;
begin
  L := Length(S);
  I := 1;
  while (I <= L) and (S[I] <= ' ') do Inc(I);
  Result := Copy(S, I, 255);
end;

function TrimRight(const S: string): string;
var
  I: Byte;
begin
  I := Length(S);
  while (I > 0) and (S[I] <= ' ') do Dec(I);
  Result := Copy(S, 1, I);
end;

function QuotedStr(const S: string): string;
var
  I: Byte;
begin
  Result := S;
  for I := Length(Result) downto 1 do
    if Result[I] = '''' then Insert('''', Result, I);
  Result := '''' + Result + '''';
end;

{$ENDIF WIN32}

end.