/*-------------------------------------------------------------------- --------*/ /* HASH.C */ #include "hash.h" #include #define MAX_CHARS 43L #ifndef _WIN32 #define strlen _fstrlen #endif DWORD PASCAL HashFromSz(LPCSTR szKey) { int ich, cch; DWORD hash = 0; cch = strlen(szKey); for (ich = 0; ich < cch; ++ich) { if (szKey[ich] == '!') hash = (hash * MAX_CHARS) + 11; else if (szKey[ich] == '.') hash = (hash * MAX_CHARS) + 12; else if (szKey[ich] == '_') hash = (hash * MAX_CHARS) + 13; else if (szKey[ich] == '0') hash = (hash * MAX_CHARS) + 10; else if (szKey[ich] <= 'Z') hash = (hash * MAX_CHARS) + (szKey[ich] - '0'); else hash = (hash * MAX_CHARS) + (szKey[ich] - '0' - ('a' - 'A')); } /* * Since the value 0 is reserved as a nil value, if any context * string actually hashes to this value, we just move it. */ return (hash == 0 ? 1 : hash); }