'=========================================================================== ' Subject: HASH FUNCTION FOR PBCC/PBDLL Date: 12-11-99 (17:10) ' Author: Don Schullian Code: PBCC, PBDLL ' Origin: d83@DASoftVSS.com Packet: PBDLL.ABC '=========================================================================== $if 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· PowerBASIC v3.50 ÚÄÄ´ DASoft ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ ³ DATE: 1999-12-11 ÇÄ· ³ ³ FILE NAME fHash .BAS º This code released ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄ º º ³ ³ º into Public Domain º º ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ º º ÔÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ º ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ This function is based on the code by Derek Ross. $endif FUNCTION fHash ( BYVAL Text AS STRING, _ BYVAL Bytes AS LONG ) EXPORT AS LONG DIM H_ptr AS STATIC LONG PTR DIM HashCodes AS STATIC STRING * 1024 DIM B_ptr AS LOCAL BYTE PTR DIM Hash AS LOCAL LONG DIM X AS LOCAL LONG IF H_ptr = 0 THEN #IF %DEF(%HashSeed) RANDOMIZE %HashSeed #ELSE RANDOMIZE 1 #ENDIF H_ptr = VARPTR(HashCodes) B_ptr = H_ptr FOR X = 1023 TO 0 STEP -1 @B_ptr[X] = RND(0,255) NEXT END IF B_ptr = STRPTR(Text) FOR X = LEN(Text)-1 TO 0 STEP -1 Hash = ( Hash XOR @H_ptr[@B_ptr[X]] ) NEXT SELECT CASE Bytes CASE 4 : 'nothing to do CASE 1 : Hash = ( Hash AND &h000000FF ) CASE 2 : Hash = ( Hash AND &h0000FFFF ) CASE 3 : Hash = ( Hash AND &h00FFFFFF ) END SELECT FUNCTION = Hash END FUNCTION ' '------------------------------------------------------------------------------- '--------- TEST CODE ----------------------------------------------------------- '------------------------------------------------------------------------------- ' FUNCTION PBmain () DIM Bytes AS LOCAL LONG DIM Temp AS LOCAL STRING DIM X AS LOCAL LONG Temp = "ABCDEFGHIKJKMNOPQRSTUVWXYZ" FOR Bytes = 4 TO 1 STEP -1 X = fHash(Temp,Bytes) PRINT FORMAT$(X,"##,###,###,### ") NEXT WAITKEY$ END FUNCTION