|
|
1.1 ! root 1: #include "copyright.h" ! 2: ! 3: /* $Header: XDelAssoc.c,v 10.17 87/09/11 07:56:34 toddb Exp $ */ ! 4: /* Copyright Massachusetts Institute of Technology 1985 */ ! 5: ! 6: #include "Xlibint.h" ! 7: #include "X10.h" ! 8: void remque(); ! 9: struct qelem { ! 10: struct qelem *q_forw; ! 11: struct qelem *q_back; ! 12: char q_data[1]; ! 13: }; ! 14: ! 15: /* ! 16: * XDeleteAssoc - Delete an association in an XAssocTable keyed on ! 17: * an XId. An association may be removed only once. Redundant ! 18: * deletes are meaningless (but cause no problems). ! 19: */ ! 20: XDeleteAssoc(dpy, table, x_id) ! 21: register Display *dpy; ! 22: register XAssocTable *table; ! 23: register XID x_id; ! 24: { ! 25: int hash; ! 26: register XAssoc *bucket; ! 27: register XAssoc *Entry; ! 28: ! 29: /* Hash the XId to get the bucket number. */ ! 30: hash = x_id & (table->size - 1); ! 31: /* Look up the bucket to get the entries in that bucket. */ ! 32: bucket = &table->buckets[hash]; ! 33: /* Get the first entry in the bucket. */ ! 34: Entry = bucket->next; ! 35: ! 36: /* Scan through the entries in the bucket for the right XId. */ ! 37: for (; Entry != bucket; Entry = Entry->next) { ! 38: if (Entry->x_id == x_id) { ! 39: /* We have the right XId. */ ! 40: if (Entry->display == dpy) { ! 41: /* We have the right display. */ ! 42: /* We have the right entry! */ ! 43: /* Remove it from the queue and */ ! 44: /* free the entry. */ ! 45: remque((struct qelem *)Entry); ! 46: Xfree((char *)Entry); ! 47: return; ! 48: } ! 49: /* Oops, identical XId's on different displays! */ ! 50: continue; ! 51: } ! 52: if (Entry->x_id > x_id) { ! 53: /* We have gone past where it should be. */ ! 54: /* It is apparently not in the table. */ ! 55: return; ! 56: } ! 57: } ! 58: /* It is apparently not in the table. */ ! 59: return; ! 60: } ! 61:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.