1/* Copyright Massachusetts Institute of Technology 1985 */ 2 3#include "copyright.h" 4 5 6#include <X11/Xlib.h> 7#include "X10.h" 8void emacs_remque(); 9struct 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 */ 20XDeleteAssoc(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 emacs_remque((struct qelem *)Entry); 46 free((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 62/* arch-tag: 90981a7e-601c-487a-b364-cdf55d6c475b 63 (do not change this comment) */ 64