annotate oldXMenu/XMakeAssoc.c @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 5cc91198ffb2
children 132f2dfd549f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
1 /* Copyright Massachusetts Institute of Technology 1985 */
Dave Love <fx@gnu.org>
parents:
diff changeset
2
76133
995b45abe69d Remove license text in favour of including copyright.h, as was done in
Glenn Morris <rgm@gnu.org>
parents: 75348
diff changeset
3 #include "copyright.h"
995b45abe69d Remove license text in favour of including copyright.h, as was done in
Glenn Morris <rgm@gnu.org>
parents: 75348
diff changeset
4
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
5
Dave Love <fx@gnu.org>
parents:
diff changeset
6 #include <config.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
7 #include <X11/Xlib.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
8 #include <X11/Xresource.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
9 #include "X10.h"
Dave Love <fx@gnu.org>
parents:
diff changeset
10 #include <errno.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
11
Dave Love <fx@gnu.org>
parents:
diff changeset
12 #ifndef NULL
Dave Love <fx@gnu.org>
parents:
diff changeset
13 #define NULL 0
Dave Love <fx@gnu.org>
parents:
diff changeset
14 #endif
Dave Love <fx@gnu.org>
parents:
diff changeset
15
Dave Love <fx@gnu.org>
parents:
diff changeset
16 struct qelem {
Dave Love <fx@gnu.org>
parents:
diff changeset
17 struct qelem *q_forw;
Dave Love <fx@gnu.org>
parents:
diff changeset
18 struct qelem *q_back;
Dave Love <fx@gnu.org>
parents:
diff changeset
19 char q_data[1];
Dave Love <fx@gnu.org>
parents:
diff changeset
20 };
109124
5cc91198ffb2 Convert function definitions in oldXMenu to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77837
diff changeset
21 void emacs_insque (struct qelem *elem, struct qelem *prev);
5cc91198ffb2 Convert function definitions in oldXMenu to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77837
diff changeset
22
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
23 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
24 * XMakeAssoc - Insert data into an XAssocTable keyed on an XId.
Dave Love <fx@gnu.org>
parents:
diff changeset
25 * Data is inserted into the table only once. Redundant inserts are
Dave Love <fx@gnu.org>
parents:
diff changeset
26 * meaningless (but cause no problems). The queue in each association
Dave Love <fx@gnu.org>
parents:
diff changeset
27 * bucket is sorted (lowest XId to highest XId).
Dave Love <fx@gnu.org>
parents:
diff changeset
28 */
109124
5cc91198ffb2 Convert function definitions in oldXMenu to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77837
diff changeset
29 XMakeAssoc(register Display *dpy, register XAssocTable *table, register XID x_id, register caddr_t data)
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
30 {
Dave Love <fx@gnu.org>
parents:
diff changeset
31 int hash;
Dave Love <fx@gnu.org>
parents:
diff changeset
32 register XAssoc *bucket;
Dave Love <fx@gnu.org>
parents:
diff changeset
33 register XAssoc *Entry;
Dave Love <fx@gnu.org>
parents:
diff changeset
34 register XAssoc *new_entry;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 25858
diff changeset
35
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
36 /* Hash the XId to get the bucket number. */
Dave Love <fx@gnu.org>
parents:
diff changeset
37 hash = x_id & (table->size - 1);
Dave Love <fx@gnu.org>
parents:
diff changeset
38 /* Look up the bucket to get the entries in that bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
39 bucket = &table->buckets[hash];
Dave Love <fx@gnu.org>
parents:
diff changeset
40 /* Get the first entry in the bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
41 Entry = bucket->next;
Dave Love <fx@gnu.org>
parents:
diff changeset
42
Dave Love <fx@gnu.org>
parents:
diff changeset
43 /* If (Entry != bucket), the bucket is empty so make */
Dave Love <fx@gnu.org>
parents:
diff changeset
44 /* the new entry the first entry in the bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
45 /* if (Entry == bucket), the we have to search the */
Dave Love <fx@gnu.org>
parents:
diff changeset
46 /* bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
47 if (Entry != bucket) {
Dave Love <fx@gnu.org>
parents:
diff changeset
48 /* The bucket isn't empty, begin searching. */
Dave Love <fx@gnu.org>
parents:
diff changeset
49 /* If we leave the for loop then we have either passed */
Dave Love <fx@gnu.org>
parents:
diff changeset
50 /* where the entry should be or hit the end of the bucket. */
Dave Love <fx@gnu.org>
parents:
diff changeset
51 /* In either case we should then insert the new entry */
Dave Love <fx@gnu.org>
parents:
diff changeset
52 /* before the current value of "Entry". */
Dave Love <fx@gnu.org>
parents:
diff changeset
53 for (; Entry != bucket; Entry = Entry->next) {
Dave Love <fx@gnu.org>
parents:
diff changeset
54 if (Entry->x_id == x_id) {
Dave Love <fx@gnu.org>
parents:
diff changeset
55 /* Entry has the same XId... */
Dave Love <fx@gnu.org>
parents:
diff changeset
56 if (Entry->display == dpy) {
Dave Love <fx@gnu.org>
parents:
diff changeset
57 /* Entry has the same Display... */
Dave Love <fx@gnu.org>
parents:
diff changeset
58 /* Therefore there is already an */
Dave Love <fx@gnu.org>
parents:
diff changeset
59 /* entry with this XId and Display, */
Dave Love <fx@gnu.org>
parents:
diff changeset
60 /* reset its data value and return. */
Dave Love <fx@gnu.org>
parents:
diff changeset
61 Entry->data = data;
Dave Love <fx@gnu.org>
parents:
diff changeset
62 return;
Dave Love <fx@gnu.org>
parents:
diff changeset
63 }
Dave Love <fx@gnu.org>
parents:
diff changeset
64 /* We found an association with the right */
Dave Love <fx@gnu.org>
parents:
diff changeset
65 /* id but the wrong display! */
Dave Love <fx@gnu.org>
parents:
diff changeset
66 continue;
Dave Love <fx@gnu.org>
parents:
diff changeset
67 }
Dave Love <fx@gnu.org>
parents:
diff changeset
68 /* If the current entry's XId is greater than the */
Dave Love <fx@gnu.org>
parents:
diff changeset
69 /* XId of the entry to be inserted then we have */
Dave Love <fx@gnu.org>
parents:
diff changeset
70 /* passed the location where the new XId should */
Dave Love <fx@gnu.org>
parents:
diff changeset
71 /* be inserted. */
Dave Love <fx@gnu.org>
parents:
diff changeset
72 if (Entry->x_id > x_id) break;
Dave Love <fx@gnu.org>
parents:
diff changeset
73 }
Dave Love <fx@gnu.org>
parents:
diff changeset
74 }
Dave Love <fx@gnu.org>
parents:
diff changeset
75
Dave Love <fx@gnu.org>
parents:
diff changeset
76 /* If we are here then the new entry should be inserted just */
Dave Love <fx@gnu.org>
parents:
diff changeset
77 /* before the current value of "Entry". */
Dave Love <fx@gnu.org>
parents:
diff changeset
78 /* Create a new XAssoc and load it with new provided data. */
77837
77b2ab19bece Ulrich Mueller <ulm at gentoo.org> (tiny change)
Glenn Morris <rgm@gnu.org>
parents: 76174
diff changeset
79 new_entry = (XAssoc *) malloc(sizeof(XAssoc));
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
80 new_entry->display = dpy;
Dave Love <fx@gnu.org>
parents:
diff changeset
81 new_entry->x_id = x_id;
Dave Love <fx@gnu.org>
parents:
diff changeset
82 new_entry->data = data;
Dave Love <fx@gnu.org>
parents:
diff changeset
83
Dave Love <fx@gnu.org>
parents:
diff changeset
84 /* Insert the new entry. */
Dave Love <fx@gnu.org>
parents:
diff changeset
85 emacs_insque((struct qelem *)new_entry, (struct qelem *)Entry->prev);
Dave Love <fx@gnu.org>
parents:
diff changeset
86 }
Dave Love <fx@gnu.org>
parents:
diff changeset
87
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
88 /* arch-tag: d7e3fb8a-f3b3-4c5d-a307-75ca67ec1b49
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
89 (do not change this comment) */