annotate oldXMenu/XMakeAssoc.c @ 36150:46e59561af4c

Display Vars node renamed Display Custom. Include info there about customizing cursor appearance. Clean up aggressive scrolling. Clarify horizontal scrolling discussion. Fix index entries for line number mode.
author Richard M. Stallman <rms@gnu.org>
date Sat, 17 Feb 2001 16:45:37 +0000
parents bbce331da1be
children 23a1cea22d13
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
1 /* $XConsortium: XMakeAssoc.c,v 10.18 91/01/06 12:09:28 rws Exp $ */
Dave Love <fx@gnu.org>
parents:
diff changeset
2 /* Copyright Massachusetts Institute of Technology 1985 */
Dave Love <fx@gnu.org>
parents:
diff changeset
3
Dave Love <fx@gnu.org>
parents:
diff changeset
4 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
5 Permission to use, copy, modify, distribute, and sell this software and its
Dave Love <fx@gnu.org>
parents:
diff changeset
6 documentation for any purpose is hereby granted without fee, provided that
Dave Love <fx@gnu.org>
parents:
diff changeset
7 the above copyright notice appear in all copies and that both that
Dave Love <fx@gnu.org>
parents:
diff changeset
8 copyright notice and this permission notice appear in supporting
Dave Love <fx@gnu.org>
parents:
diff changeset
9 documentation, and that the name of M.I.T. not be used in advertising or
Dave Love <fx@gnu.org>
parents:
diff changeset
10 publicity pertaining to distribution of the software without specific,
Dave Love <fx@gnu.org>
parents:
diff changeset
11 written prior permission. M.I.T. makes no representations about the
Dave Love <fx@gnu.org>
parents:
diff changeset
12 suitability of this software for any purpose. It is provided "as is"
Dave Love <fx@gnu.org>
parents:
diff changeset
13 without express or implied warranty.
Dave Love <fx@gnu.org>
parents:
diff changeset
14 */
Dave Love <fx@gnu.org>
parents:
diff changeset
15
Dave Love <fx@gnu.org>
parents:
diff changeset
16 #include <config.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
17 #include <X11/Xlib.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
18 #include <X11/Xresource.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
19 #include "X10.h"
Dave Love <fx@gnu.org>
parents:
diff changeset
20 #include <errno.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
21
Dave Love <fx@gnu.org>
parents:
diff changeset
22 #ifndef NULL
Dave Love <fx@gnu.org>
parents:
diff changeset
23 #define NULL 0
Dave Love <fx@gnu.org>
parents:
diff changeset
24 #endif
Dave Love <fx@gnu.org>
parents:
diff changeset
25
Dave Love <fx@gnu.org>
parents:
diff changeset
26 extern int errno;
Dave Love <fx@gnu.org>
parents:
diff changeset
27
Dave Love <fx@gnu.org>
parents:
diff changeset
28 void emacs_insque();
Dave Love <fx@gnu.org>
parents:
diff changeset
29 struct qelem {
Dave Love <fx@gnu.org>
parents:
diff changeset
30 struct qelem *q_forw;
Dave Love <fx@gnu.org>
parents:
diff changeset
31 struct qelem *q_back;
Dave Love <fx@gnu.org>
parents:
diff changeset
32 char q_data[1];
Dave Love <fx@gnu.org>
parents:
diff changeset
33 };
Dave Love <fx@gnu.org>
parents:
diff changeset
34 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
35 * XMakeAssoc - Insert data into an XAssocTable keyed on an XId.
Dave Love <fx@gnu.org>
parents:
diff changeset
36 * Data is inserted into the table only once. Redundant inserts are
Dave Love <fx@gnu.org>
parents:
diff changeset
37 * meaningless (but cause no problems). The queue in each association
Dave Love <fx@gnu.org>
parents:
diff changeset
38 * bucket is sorted (lowest XId to highest XId).
Dave Love <fx@gnu.org>
parents:
diff changeset
39 */
Dave Love <fx@gnu.org>
parents:
diff changeset
40 XMakeAssoc(dpy, table, x_id, data)
Dave Love <fx@gnu.org>
parents:
diff changeset
41 register Display *dpy;
Dave Love <fx@gnu.org>
parents:
diff changeset
42 register XAssocTable *table;
Dave Love <fx@gnu.org>
parents:
diff changeset
43 register XID x_id;
Dave Love <fx@gnu.org>
parents:
diff changeset
44 register caddr_t data;
Dave Love <fx@gnu.org>
parents:
diff changeset
45 {
Dave Love <fx@gnu.org>
parents:
diff changeset
46 int hash;
Dave Love <fx@gnu.org>
parents:
diff changeset
47 register XAssoc *bucket;
Dave Love <fx@gnu.org>
parents:
diff changeset
48 register XAssoc *Entry;
Dave Love <fx@gnu.org>
parents:
diff changeset
49 register XAssoc *new_entry;
Dave Love <fx@gnu.org>
parents:
diff changeset
50
Dave Love <fx@gnu.org>
parents:
diff changeset
51 /* Hash the XId to get the bucket number. */
Dave Love <fx@gnu.org>
parents:
diff changeset
52 hash = x_id & (table->size - 1);
Dave Love <fx@gnu.org>
parents:
diff changeset
53 /* Look up the bucket to get the entries in that bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
54 bucket = &table->buckets[hash];
Dave Love <fx@gnu.org>
parents:
diff changeset
55 /* Get the first entry in the bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
56 Entry = bucket->next;
Dave Love <fx@gnu.org>
parents:
diff changeset
57
Dave Love <fx@gnu.org>
parents:
diff changeset
58 /* If (Entry != bucket), the bucket is empty so make */
Dave Love <fx@gnu.org>
parents:
diff changeset
59 /* the new entry the first entry in the bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
60 /* if (Entry == bucket), the we have to search the */
Dave Love <fx@gnu.org>
parents:
diff changeset
61 /* bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
62 if (Entry != bucket) {
Dave Love <fx@gnu.org>
parents:
diff changeset
63 /* The bucket isn't empty, begin searching. */
Dave Love <fx@gnu.org>
parents:
diff changeset
64 /* If we leave the for loop then we have either passed */
Dave Love <fx@gnu.org>
parents:
diff changeset
65 /* where the entry should be or hit the end of the bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
66 /* In either case we should then insert the new entry */
Dave Love <fx@gnu.org>
parents:
diff changeset
67 /* before the current value of "Entry". */
Dave Love <fx@gnu.org>
parents:
diff changeset
68 for (; Entry != bucket; Entry = Entry->next) {
Dave Love <fx@gnu.org>
parents:
diff changeset
69 if (Entry->x_id == x_id) {
Dave Love <fx@gnu.org>
parents:
diff changeset
70 /* Entry has the same XId... */
Dave Love <fx@gnu.org>
parents:
diff changeset
71 if (Entry->display == dpy) {
Dave Love <fx@gnu.org>
parents:
diff changeset
72 /* Entry has the same Display... */
Dave Love <fx@gnu.org>
parents:
diff changeset
73 /* Therefore there is already an */
Dave Love <fx@gnu.org>
parents:
diff changeset
74 /* entry with this XId and Display, */
Dave Love <fx@gnu.org>
parents:
diff changeset
75 /* reset its data value and return. */
Dave Love <fx@gnu.org>
parents:
diff changeset
76 Entry->data = data;
Dave Love <fx@gnu.org>
parents:
diff changeset
77 return;
Dave Love <fx@gnu.org>
parents:
diff changeset
78 }
Dave Love <fx@gnu.org>
parents:
diff changeset
79 /* We found an association with the right */
Dave Love <fx@gnu.org>
parents:
diff changeset
80 /* id but the wrong display! */
Dave Love <fx@gnu.org>
parents:
diff changeset
81 continue;
Dave Love <fx@gnu.org>
parents:
diff changeset
82 }
Dave Love <fx@gnu.org>
parents:
diff changeset
83 /* If the current entry's XId is greater than the */
Dave Love <fx@gnu.org>
parents:
diff changeset
84 /* XId of the entry to be inserted then we have */
Dave Love <fx@gnu.org>
parents:
diff changeset
85 /* passed the location where the new XId should */
Dave Love <fx@gnu.org>
parents:
diff changeset
86 /* be inserted. */
Dave Love <fx@gnu.org>
parents:
diff changeset
87 if (Entry->x_id > x_id) break;
Dave Love <fx@gnu.org>
parents:
diff changeset
88 }
Dave Love <fx@gnu.org>
parents:
diff changeset
89 }
Dave Love <fx@gnu.org>
parents:
diff changeset
90
Dave Love <fx@gnu.org>
parents:
diff changeset
91 /* If we are here then the new entry should be inserted just */
Dave Love <fx@gnu.org>
parents:
diff changeset
92 /* before the current value of "Entry". */
Dave Love <fx@gnu.org>
parents:
diff changeset
93 /* Create a new XAssoc and load it with new provided data. */
Dave Love <fx@gnu.org>
parents:
diff changeset
94 new_entry = (XAssoc *) xmalloc(sizeof(XAssoc));
Dave Love <fx@gnu.org>
parents:
diff changeset
95 new_entry->display = dpy;
Dave Love <fx@gnu.org>
parents:
diff changeset
96 new_entry->x_id = x_id;
Dave Love <fx@gnu.org>
parents:
diff changeset
97 new_entry->data = data;
Dave Love <fx@gnu.org>
parents:
diff changeset
98
Dave Love <fx@gnu.org>
parents:
diff changeset
99 /* Insert the new entry. */
Dave Love <fx@gnu.org>
parents:
diff changeset
100 emacs_insque((struct qelem *)new_entry, (struct qelem *)Entry->prev);
Dave Love <fx@gnu.org>
parents:
diff changeset
101 }
Dave Love <fx@gnu.org>
parents:
diff changeset
102