|
|
1.1 ! root 1: /* $XConsortium: XLookAssoc.c,v 10.16 91/01/06 12:09:24 rws Exp $ */ ! 2: /* Copyright Massachusetts Institute of Technology 1985 */ ! 3: ! 4: /* ! 5: Permission to use, copy, modify, distribute, and sell this software and its ! 6: documentation for any purpose is hereby granted without fee, provided that ! 7: the above copyright notice appear in all copies and that both that ! 8: copyright notice and this permission notice appear in supporting ! 9: documentation, and that the name of M.I.T. not be used in advertising or ! 10: publicity pertaining to distribution of the software without specific, ! 11: written prior permission. M.I.T. makes no representations about the ! 12: suitability of this software for any purpose. It is provided "as is" ! 13: without express or implied warranty. ! 14: */ ! 15: ! 16: #include "X11/Xlib.h" ! 17: #include "X10.h" ! 18: ! 19: #ifndef NULL ! 20: #define NULL 0 ! 21: #endif ! 22: ! 23: /* ! 24: * XLookUpAssoc - Retrieve the data stored in an XAssocTable by its XId. ! 25: * If an appropriately matching XId can be found in the table the routine will ! 26: * return apointer to the data associated with it. If the XId can not be found ! 27: * in the table the routine will return a NULL pointer. All XId's are relative ! 28: * to the currently active Display. ! 29: */ ! 30: caddr_t XLookUpAssoc(dpy, table, x_id) ! 31: register Display *dpy; ! 32: register XAssocTable *table; /* XAssocTable to search in. */ ! 33: register XID x_id; /* XId to search for. */ ! 34: { ! 35: int hash; ! 36: register XAssoc *bucket; ! 37: register XAssoc *Entry; ! 38: ! 39: /* Hash the XId to get the bucket number. */ ! 40: hash = x_id & (table->size - 1); ! 41: /* Look up the bucket to get the entries in that bucket. */ ! 42: bucket = &table->buckets[hash]; ! 43: /* Get the first entry in the bucket. */ ! 44: Entry = bucket->next; ! 45: ! 46: /* Scan through the entries in the bucket for the right XId. */ ! 47: for (; Entry != bucket; Entry = Entry->next) { ! 48: if (Entry->x_id == x_id) { ! 49: /* We have the right XId. */ ! 50: if (Entry->display == dpy) { ! 51: /* We have the right display. */ ! 52: /* We have the right entry! */ ! 53: return(Entry->data); ! 54: } ! 55: /* Oops, identical XId's on different displays! */ ! 56: continue; ! 57: } ! 58: if (Entry->x_id > x_id) { ! 59: /* We have gone past where it should be. */ ! 60: /* It is apparently not in the table. */ ! 61: return(NULL); ! 62: } ! 63: } ! 64: /* It is apparently not in the table. */ ! 65: return(NULL); ! 66: } ! 67:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.