|
|
1.1 ! root 1: /********************************************************************* ! 2: * COPYRIGHT NOTICE * ! 3: ********************************************************************** ! 4: * This software is copyright (C) 1982 by Pavel Curtis * ! 5: * * ! 6: * Permission is granted to reproduce and distribute * ! 7: * this file by any means so long as no fee is charged * ! 8: * above a nominal handling fee and so long as this * ! 9: * notice is always included in the copies. * ! 10: * * ! 11: * Other rights are reserved except as explicitly granted * ! 12: * by written permission of the author. * ! 13: * Pavel Curtis * ! 14: * Computer Science Dept. * ! 15: * 405 Upson Hall * ! 16: * Cornell University * ! 17: * Ithaca, NY 14853 * ! 18: * * ! 19: * Ph- (607) 256-4934 * ! 20: * * ! 21: * Pavel.Cornell@Udel-Relay (ARPAnet) * ! 22: * decvax!cornell!pavel (UUCPnet) * ! 23: *********************************************************************/ ! 24: ! 25: /* ! 26: * comp_hash.c --- Routines to deal with the hashtable of capability ! 27: * names. ! 28: * ! 29: * $Log: comp_hash.c,v $ ! 30: * Revision 1.8 93/04/12 14:12:58 bin ! 31: * Udo: third color update ! 32: * ! 33: * Revision 1.2 92/04/13 14:36:14 bin ! 34: * update by vlad ! 35: * ! 36: * Revision 2.1 82/10/25 14:45:34 pavel ! 37: * Added Copyright Notice ! 38: * ! 39: * Revision 2.0 82/10/24 15:16:34 pavel ! 40: * Beta-one Test Release ! 41: * ! 42: * Revision 1.3 82/08/23 22:29:33 pavel ! 43: * The REAL Alpha-one Release Version ! 44: * ! 45: * Revision 1.2 82/08/19 19:09:46 pavel ! 46: * Alpha Test Release One ! 47: * ! 48: * Revision 1.1 82/08/12 18:36:23 pavel ! 49: * Initial revision ! 50: * ! 51: * ! 52: */ ! 53: ! 54: #ifdef RCSHDR ! 55: static char RCSid[] = ! 56: "$Header: /src386/usr/lib/ncurses/RCS/comp_hash.c,v 1.8 93/04/12 14:12:58 bin Exp Locker: bin $"; ! 57: #endif ! 58: ! 59: #include "compiler.h" ! 60: #include "term.h" ! 61: ! 62: ! 63: /* ! 64: * make_hash_table() ! 65: * ! 66: * Takes the entries in cap_table[] and hashes them into cap_hash_table[] ! 67: * by name. There are Captabsize entries in cap_table[] and Hashtabsize ! 68: * slots in cap_hash_table[]. ! 69: * ! 70: */ ! 71: ! 72: make_hash_table() ! 73: { ! 74: int i; ! 75: int hashvalue; ! 76: int collisions = 0; ! 77: ! 78: for (i=0; i < Captabsize; i++) ! 79: { ! 80: hashvalue = hash_function(cap_table[i].nte_name); ! 81: DEBUG(9, "%d\n", hashvalue); ! 82: ! 83: if (cap_hash_table[hashvalue] != (struct name_table_entry *) 0) ! 84: collisions++; ! 85: ! 86: cap_table[i].nte_link = cap_hash_table[hashvalue]; ! 87: cap_hash_table[hashvalue] = &cap_table[i]; ! 88: } ! 89: ! 90: DEBUG(3, "Hash table complete\n%d collisions ", collisions); ! 91: DEBUG(3, "out of %d entries\n", Captabsize); ! 92: } ! 93: ! 94: ! 95: /* ! 96: * int hash_function(string) ! 97: * ! 98: * Computes the hashing function on the given string. ! 99: * ! 100: * The current hash function is the sum of each consectutive pair ! 101: * of characters, taken as two-byte integers, mod Hashtabsize. ! 102: * ! 103: */ ! 104: ! 105: static ! 106: int ! 107: hash_function(string) ! 108: char *string; ! 109: { ! 110: long sum = 0; ! 111: ! 112: while (*string) ! 113: { ! 114: sum += *string + (*(string + 1) << 8); ! 115: string++; ! 116: } ! 117: ! 118: return (sum % Hashtabsize); ! 119: } ! 120: ! 121: ! 122: /* ! 123: * struct name_table_entry * ! 124: * find_entry(string) ! 125: * ! 126: * Finds the entry for the given string in the hash table if present. ! 127: * Returns a pointer to the entry in the table or 0 if not found. ! 128: * ! 129: */ ! 130: ! 131: struct name_table_entry * ! 132: find_entry(string) ! 133: char *string; ! 134: { ! 135: int hashvalue; ! 136: struct name_table_entry *ptr; ! 137: ! 138: hashvalue = hash_function(string); ! 139: ! 140: ptr = cap_hash_table[hashvalue]; ! 141: ! 142: while (ptr != (struct name_table_entry *) 0 && ! 143: strcmp(ptr->nte_name, string) != 0) ! 144: ptr = ptr->nte_link; ! 145: ! 146: return (ptr); ! 147: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.