root/trunk/oldXMenu/XDelAssoc.c

Revision 4196, 1.6 kB (checked in by miyoshi, 2 years ago)

Sync up with Emacs CVS HEAD.

  • Property svn:eol-style set to native
Line 
1 /* Copyright    Massachusetts Institute of Technology    1985   */
2
3 #include "copyright.h"
4
5
6 #include <X11/Xlib.h>
7 #include "X10.h"
8 void emacs_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                                 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) */
Note: See TracBrowser for help on using the browser.