/*
 *	Taken from zephyr-2.0.4/server/common.c
 *
 *	Copyright (c) 1987 by the Massachusetts Institute of Technology.
 *	For copying and distribution information, see the file
 *	"mit-copyright.h".
 */

/* The "& 0x5f" providing case-insensitivity for ASCII changed to "& 0x7f". */

unsigned long
hash(string)
     const char *string;
{
  unsigned long hval = 0;
  char cp;

  while (1) {
    cp = *string++;
    if (!cp)
      break;
    hval += cp & 0x7f;

    cp = *string++;
    if (!cp)
      break;
    hval += (cp & 0x7f) * (3 + (1 << 16));

    cp = *string++;
    if (!cp)
      break;
    hval += (cp & 0x7f) * (1 + (1 << 8));

    cp = *string++;
    if (!cp)
      break;
    hval += (cp & 0x7f) * (1 + (1 << 12));

    cp = *string++;
    if (!cp)
      break;
    hval += (cp & 0x7f) * (1 + (1 << 4));

    hval += ((long) hval) >> 18;
  }

  hval &= 0x7fffffff;
  return hval;
}
