From 5c3df528ab5cd074d3e500131bc2b6731b99f8af Mon Sep 17 00:00:00 2001 From: michael Date: Tue, 24 Aug 1999 22:42:56 +0000 Subject: [PATCH] * changed resourcestrings to new mechanism --- rtl/objpas/objpas.pp | 91 ++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/rtl/objpas/objpas.pp b/rtl/objpas/objpas.pp index a55f8fbca1..4a7aebe3a1 100644 --- a/rtl/objpas/objpas.pp +++ b/rtl/objpas/objpas.pp @@ -56,10 +56,11 @@ unit objpas; {$ifdef HasResourceStrings} - { Resourcestring support } - Function GetResourceString(Hash : Longint;Const Name : ShortString) : AnsiString; - Procedure ResetResourceTables; - Function SetResourceString(Hash : Longint;Const Name : Shortstring; Const Value : AnsiString) : Boolean; +Type + TResourceIterator = Function (Name,Value : AnsiString; Hash : Longint) : AnsiString; + + Procedure ResetResourceTables; + Procedure SetResourceStrings (SetFunction : TResourceIterator); {$endif} @@ -230,16 +231,24 @@ Type DefaultValue, CurrentValue : AnsiString; HashValue : longint; - Name : ShortString; + Name : AnsiString; end; TResourceStringTable = Packed Record Count : longint; Resrec : Array[Word] of TResourceStringRecord; end; + PResourceStringTable = ^TResourceStringTable; + + TResourceTableList = Packed Record + Count : longint; + Tables : Array[Word] of PResourceStringTable; + end; + + Var - ResourceStringTable : TResourceStringTable; External Name 'FPC_RESOURCESTRINGTABLES'; + ResourceStringTable : TResourceTablelist; External Name 'FPC_RESOURCESTRINGTABLES'; function CalcStringHashValue(Const N : ShortString) : longint; @@ -264,45 +273,16 @@ begin CalcStringHashValue:=Hash; end; -Function FindIndex (Hash : longint;Const Value : Shortstring) : Longint; - -Var - I : longint; - -begin - // Linear search, later we can implement binary search. - Result:=-1; - With ResourceStringTable do - For I:=0 to Count-1 do - If Hash=Resrec[I].HashValue then - begin - Result:=I; - Break; - end; - If Result<>-1 then - begin - With ResourceStringTable do - While (Result<=Count) do - If Value=ResRec[Result].Name then - exit - else - Inc(Result); - Result:=-1; - end; -end; - - -Function GetResourceString(Hash : longint;Const Name : ShortString) : AnsiString;[Public,Alias : 'FPC_GETRESOURCESTRING']; +Function GetResourceString(Const TheTable: TResourceStringTable;Index : longint) : AnsiString;[Public,Alias : 'FPC_GETRESOURCESTRING']; begin - Hash:=FindIndex(Hash,Name); - If Hash<>-1 then - Result:=ResourceStringTable.ResRec[Hash].CurrentValue + If (Index>0) and (Index