|
|
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.