|
@@ -56,10 +56,11 @@ unit objpas;
|
|
|
|
|
|
|
|
|
|
{$ifdef HasResourceStrings}
|
|
{$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}
|
|
{$endif}
|
|
|
|
|
|
|
|
|
|
@@ -230,16 +231,24 @@ Type
|
|
DefaultValue,
|
|
DefaultValue,
|
|
CurrentValue : AnsiString;
|
|
CurrentValue : AnsiString;
|
|
HashValue : longint;
|
|
HashValue : longint;
|
|
- Name : ShortString;
|
|
|
|
|
|
+ Name : AnsiString;
|
|
end;
|
|
end;
|
|
|
|
|
|
TResourceStringTable = Packed Record
|
|
TResourceStringTable = Packed Record
|
|
Count : longint;
|
|
Count : longint;
|
|
Resrec : Array[Word] of TResourceStringRecord;
|
|
Resrec : Array[Word] of TResourceStringRecord;
|
|
end;
|
|
end;
|
|
|
|
+ PResourceStringTable = ^TResourceStringTable;
|
|
|
|
+
|
|
|
|
+ TResourceTableList = Packed Record
|
|
|
|
+ Count : longint;
|
|
|
|
+ Tables : Array[Word] of PResourceStringTable;
|
|
|
|
+ end;
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
Var
|
|
Var
|
|
- ResourceStringTable : TResourceStringTable; External Name 'FPC_RESOURCESTRINGTABLES';
|
|
|
|
|
|
+ ResourceStringTable : TResourceTablelist; External Name 'FPC_RESOURCESTRINGTABLES';
|
|
|
|
|
|
function CalcStringHashValue(Const N : ShortString) : longint;
|
|
function CalcStringHashValue(Const N : ShortString) : longint;
|
|
|
|
|
|
@@ -264,45 +273,16 @@ begin
|
|
CalcStringHashValue:=Hash;
|
|
CalcStringHashValue:=Hash;
|
|
end;
|
|
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
|
|
begin
|
|
- Hash:=FindIndex(Hash,Name);
|
|
|
|
- If Hash<>-1 then
|
|
|
|
- Result:=ResourceStringTable.ResRec[Hash].CurrentValue
|
|
|
|
|
|
+ If (Index>0) and (Index<TheTAble.Count) then
|
|
|
|
+ Result:=TheTable.ResRec[Index].CurrentValue
|
|
else
|
|
else
|
|
Result:='';
|
|
Result:='';
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
|
|
+(*
|
|
Function SetResourceString(Hash : Longint;Const Name : ShortString; Const Value : AnsiString) : Boolean;
|
|
Function SetResourceString(Hash : Longint;Const Name : ShortString; Const Value : AnsiString) : Boolean;
|
|
|
|
|
|
begin
|
|
begin
|
|
@@ -311,24 +291,40 @@ begin
|
|
If Result then
|
|
If Result then
|
|
ResourceStringTable.ResRec[Hash].CurrentValue:=Value;
|
|
ResourceStringTable.ResRec[Hash].CurrentValue:=Value;
|
|
end;
|
|
end;
|
|
|
|
+*)
|
|
|
|
+
|
|
|
|
+Procedure SetResourceStrings (SetFunction : TResourceIterator);
|
|
|
|
+
|
|
|
|
+Var I,J : longint;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ With ResourceStringTable do
|
|
|
|
+ For I:=0 to Count-1 do
|
|
|
|
+ With Tables[I]^ do
|
|
|
|
+ For J:=0 to Count-1 do
|
|
|
|
+ With ResRec[J] do
|
|
|
|
+ CurrentValue:=SetFunction(Name,DefaultValue,HashValue);
|
|
|
|
+end;
|
|
|
|
|
|
|
|
|
|
Procedure ResetResourceTables;
|
|
Procedure ResetResourceTables;
|
|
|
|
|
|
-Var I : longint;
|
|
|
|
|
|
+Var I,J : longint;
|
|
|
|
|
|
begin
|
|
begin
|
|
With ResourceStringTable do
|
|
With ResourceStringTable do
|
|
- For I:=0 to Count-1 do
|
|
|
|
- With ResRec[i] do
|
|
|
|
- CurrentValue:=DefaultValue;
|
|
|
|
|
|
+ For I:=0 to Count-1 do
|
|
|
|
+ With Tables[I]^ do
|
|
|
|
+ For J:=0 to Count-1 do
|
|
|
|
+ With ResRec[J] do
|
|
|
|
+ CurrentValue:=DefaultValue;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
{$endif}
|
|
|
|
|
|
|
|
|
|
Initialization
|
|
Initialization
|
|
{$IFDEF HasResourceStrings}
|
|
{$IFDEF HasResourceStrings}
|
|
-// ResetResourceTables;
|
|
|
|
|
|
+ ResetResourceTables;
|
|
{$endif}
|
|
{$endif}
|
|
InitMemoryManager;
|
|
InitMemoryManager;
|
|
finalization
|
|
finalization
|
|
@@ -337,7 +333,10 @@ end.
|
|
|
|
|
|
{
|
|
{
|
|
$Log$
|
|
$Log$
|
|
- Revision 1.35 1999-08-24 12:02:29 michael
|
|
|
|
|
|
+ Revision 1.36 1999-08-24 22:42:56 michael
|
|
|
|
+ * changed resourcestrings to new mechanism
|
|
|
|
+
|
|
|
|
+ Revision 1.35 1999/08/24 12:02:29 michael
|
|
+ Changed external var for resourcestrings
|
|
+ Changed external var for resourcestrings
|
|
|
|
|
|
Revision 1.34 1999/08/20 10:50:55 michael
|
|
Revision 1.34 1999/08/20 10:50:55 michael
|