#include "../common.h" extern unsigned char T[256]; char *idhash(char *p, short *hashp) { unsigned char c; unsigned long shreg; unsigned char lo, hi; shreg = *p; while (isalunum(c = *++p)) { #ifndef BRAINDEAD_COMPILER /* rotate 5 bit - at least gcc 2.5.8 recognizes it */ shreg = shreg << 5 | shreg >> 27; #else shreg <<= 1; #endif shreg ^= c; } lo = shreg; shreg >>= 8; hi = shreg; hi = (T+1)[hi]; hi ^= lo; hi = T[hi]; lo = T[lo]; lo ^= shreg; lo = T[lo]; shreg >>= 8; lo ^= shreg; lo = T[lo]; shreg >>= 8; lo ^= shreg; lo = T[lo]; *hashp = lo | hi << 8; return p; }