A scheme for handling collisions must be provided (unless
this is a perfect hash function)
Atom
MakeAtom(string, len, makeit)
    char *string;
    unsigned len;
    int makeit;
{
    AtomListPtr a;
    int         hash;
    int         h;
    int         r;
    hash = Hash (string, len);
    if (hashTable)
    {
        h = hash & hashMask;
        if (hashTable[h])
        {
            if (hashTable[h]->hash == hash && hashTable[h]->len == len &&
                NameEqual (hashTable[h]->name, string, len))
            {
                return hashTable[h]->atom;
            }
            r = (hash % rehash) | 1;
            for (;;)
            {
                h += r;
                if (h >= hashSize)
                    h -= hashSize;
                if (!hashTable[h])
                    break;
                if (hashTable[h]->hash == hash && hashTable[h]->len == len &&
                    NameEqual (hashTable[h]->name, string, len))
                {
                    return hashTable[h]->atom;
                }
            }
        }
    }