Browse Source

--- Merging r19353 into '.':
U rtl/objpas/sysutils/sysansi.inc
U rtl/objpas/sysutils/sysansih.inc

# revisions: 19353
------------------------------------------------------------------------
r19353 | paul | 2011-10-04 06:54:42 +0200 (Tue, 04 Oct 2011) | 1 line
Changed paths:
M /trunk/rtl/objpas/sysutils/sysansi.inc
M /trunk/rtl/objpas/sysutils/sysansih.inc

rtl: add HashName function based on implementation of Hash() from objpas. It uses case case-insensitive hash generation. This function is added for compatibility with delphi (although it generates different hash in delphi and fpc for same strings). It is also needed for codepage search in hash array.
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_6@20047 -

marco 13 years ago
parent
commit
a15938e41c
2 changed files with 22 additions and 1 deletions
  1. 21 0
      rtl/objpas/sysutils/sysansi.inc
  2. 1 1
      rtl/objpas/sysutils/sysansih.inc

+ 21 - 0
rtl/objpas/sysutils/sysansi.inc

@@ -69,3 +69,24 @@ begin
   Result:=StrScan(Str,Chr);
   Result:=StrScan(Str,Chr);
 end;
 end;
 
 
+Function HashName(Name: PAnsiChar): LongWord;
+Var
+  thehash,g,I : LongWord;
+begin
+  thehash:=0;
+  For I:=1 to Length(Name) do { 0 terminated }
+    begin
+      thehash:=thehash shl 4;
+      inc(theHash,Ord(UpCase(Name[i])));
+      g:=thehash and LongWord($f shl 28);
+      if g<>0 then
+        begin
+          thehash:=thehash xor (g shr 24);
+          thehash:=thehash xor g;
+        end;
+    end;
+  If theHash=0 then
+    HashName:=$ffffffff
+  else
+    HashName:=TheHash;
+end;

+ 1 - 1
rtl/objpas/sysutils/sysansih.inc

@@ -25,4 +25,4 @@ function AnsiPos(const substr,s : string) : SizeInt;
 function AnsiStrPos(str,substr : PChar) : PChar;
 function AnsiStrPos(str,substr : PChar) : PChar;
 function AnsiStrRScan(Str : PChar;Chr : Char) : PChar;
 function AnsiStrRScan(Str : PChar;Chr : Char) : PChar;
 function AnsiStrScan(Str : PChar;Chr: Char) : PChar;
 function AnsiStrScan(Str : PChar;Chr: Char) : PChar;
-
+function HashName(Name: PAnsiChar): LongWord;