anchor.diff:  // Removes spaces around the separator in the given string
   Procedure RemoveSeparatorSpaces( var S: string; const Separator:string );
   
  -{$ifdef os2}
  -// ------------ Ansi String utilities ------------------------
  -
  -// Right & left trim that works with AnsiStrings.
  -Function AnsiTrim( const S: AnsiString ): AnsiString;
  -
  -Procedure AnsiParseConfigLine( const S: Ansistring;
  -                               var keyName: Ansistring;
  -                               var keyValue: Ansistring );
  -
  -Function AnsiExtractNextValue( var CSVString: AnsiString;
  -                               const Separator: AnsiString ): AnsiString;
  -
  -{$endif}
   
   // ------------- Lists of strings, and strings as lists -----------
   
  
positive.code:     Result:= StartString + '1';
  end;
  
  {$ifdef OS2}
  
  Function AnsiTrim( const S: AnsiString ): AnsiString;
  Var
    i: longint;
  Begin
    i:= 1;
    while i<length( S) do
    begin
      if S[ i ]<>' ' then
        break;
      inc( i );
    end;
    Result:= S;
    if i>1 then
      AnsiDelete( Result, 1, i-1 );
    i:= length( Result );
    while i>=1 do
    begin
      if S[ i ]<>' ' then
        break;
      dec( i );
    end;
    AnsiSetLength( Result, i );
  End;
  
  Procedure AnsiParseConfigLine( const S: Ansistring;
                                 var keyName: Ansistring;
                                 var keyValue: Ansistring );
  Var
    line: AnsiString;
    EqualsPos: longint;
  Begin
    KeyName:= '';
    KeyValue:= '';
  
    line:= AnsiTrim( S );
    EqualsPos:= AnsiPos( '=', line );
  
    if ( EqualsPos>0 ) then
    begin
      KeyName:= AnsiCopy( line, 1, EqualsPos-1 );
      KeyName:= AnsiTrim( KeyName );
  
      KeyValue:= AnsiCopy( line, EqualsPos+1, length( line )-EqualsPos );
      KeyValue:= AnsiTrim( KeyValue );
    end;
  end;
  
  Function AnsiExtractNextValue( var CSVString: AnsiString;
                                 const Separator: AnsiString ): AnsiString;
  Var
    SeparatorPos: integer;
  Begin
    SeparatorPos:= AnsiPos( Separator, CSVString );
    if SeparatorPos>0 then
    begin
      Result:= AnsiCopy( CSVString, 1, SeparatorPos-1 );
      AnsiDelete( CSVString, 1, SeparatorPos + length( Separator ) - 1 );
    end
    else
    begin
      Result:= CSVString;
      CSVString:= '';
    end;
    Result:= AnsiTrim( Result );
    // Remove qyotes if present
    if ( Result[1] = chr(34) )
       and ( Result[ length(Result) ] = chr(34) ) then
    begin
      AnsiDelete( Result, 1, 1 );
      AnsiDelete( Result, length( Result ), 1 );
      Result:= AnsiTrim( Result );
    end;
  end;
  {$Endif}
  
  Procedure ReverseList( TheList:TStrings );
  Var
    TempList: TStringList;
  
negative.code:   end;
    result := true;
  end;
  
  Function StrLeft0Pad( const n: integer; const width: integer ): string;
  Begin
  