anchor.diff:    fpg_form
     ,fpg_memo
     ,fpg_main
  +  ,fpg_utils
     ;
   
  +var
  +  LocaleIdentifierChars: set of Char;
  +  ASCIICharTable: array [#0..#255] of Byte;
  +
  +const
  +  EmptyString = '';
  +  GxIdentChars       = ['A'..'Z', 'a'..'z', '0'..'9', '_'];
  +  GxIdentStartChars  = ['A'..'Z', 'a'..'z', '0'..'9'];
  +  GxAlphaChars       = ['A'..'Z', 'a'..'z'];
  +  GxUpperAlphaChars  = ['A'..'Z'];
  +  GxLowerAlphaChars  = ['a'..'z'];
  +  GxSentenceEndChars = ['.', '!', '?'];
  +
  +  SAllAlphaNumericChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
  +
  +
  +type
  +  { once it goes out of scope, it restores the mouse cursor }
  +  TTempHourClassCursor = class(TInterfacedObject, IInterface)
  +  private
  +    FOldCursor: TMouseCursor;
  +    FWidget: TfpgWidget;
  +  public
  +    constructor Create(var AWidget: TfpgWidget);
  +    destructor Destroy; override;
  +  end;
  +  
  +constructor TTempHourClassCursor.Create(var AWidget: TfpgWidget);
  +begin
  +  inherited Create;
  +  FOldCursor := AWidget.MouseCursor;
  +  FWidget := AWidget;
  +  AWidget.MouseCursor := mcHourGlass;
  +end;
  +
  +destructor TTempHourClassCursor.Destroy;
  +begin
  +  FWidget.MouseCursor := FOldCursor;
  +  inherited Destroy;
  +end;
  +  
  +
  +
  +function TempHourGlassCursor(var AWidget: TfpgWidget): IInterface;
  +begin
  +  Result := TTempHourClassCursor.Create(AWidget) as IInterface;
  +end;
   
   function tiNumToken(const AValue, AToken : string): integer;
   var
  
positive.code:   end;
  end;
  
  
  end.
  
  
negative.code:   Classes
    ,SysUtils
    ,fpg_base
    ,fpg_widget
    ;
  
  
  
  // Set the Screen.Cursor to crHourGlass until the interface goes out of scope
  function TempHourGlassCursor(var AWidget: TfpgWidget): IInterface;
  
  
  function tiNumToken(const AValue, AToken: string): integer;
  function tiToken(const AValue, AToken: string; const APos: integer): string;
  procedure ShowString(const AString: TfpgString; const AHeading: TfpgString);
  
  // Extract the file extension from FileName and return it in all UPPERCASE.
  function ExtractUpperFileExt(const FileName: string): string;
  
  // Transforms all consecutive sequences of #10, #13, #32, and #9 in Str
  // into a single space, and strips off whitespace at the beginning and
  // end of the string
  function CompressWhiteSpace(const Str: string): string;
  
  // See if a string begins/ends with a specific substring
  function StrBeginsWith(const SubStr, Str: string; CaseSensitive: Boolean = True): Boolean;
  function StrEndsWith(const SubStr, Str: string; CaseSensitive: Boolean = True): Boolean;
  // See is a string contains another substring
  function StrContains(const SubStr, Str: string; CaseSensitive: Boolean = True): Boolean;
  
  // Find SubString in S; do not consider case;
  // this works exactly the same as the Pos function,
  // except for case-INsensitivity.
  function CaseInsensitivePos(Pat, Text: PChar): Integer; overload;
  function CaseInsensitivePos(const Pat, Text: string): Integer; overload;
  function AnsiCaseInsensitivePos(const SubString, S: string): Integer;
  
  procedure MakeASCIICharTable;
  procedure Initialize;
  
  function IsCharAlpha(ch: Char): Boolean;
  function IsCharUpper(ch: Char): Boolean;
  function IsCharLower(ch: Char): Boolean;
  function IsCharAlphaNumeric(ch: Char): Boolean;
  
  // Emulates the VB $Right function to obtain up to n of the
  // rightmost characters in a string.
  function RightString(const Value: string; NumChars: Integer): string;
  
  function IsPas(const FileName: string): Boolean;
  function IsInc(const FileName: string): Boolean;
  function IsProgram(const FileName: string): Boolean;
  
  
  
  
  implementation
  