Mercurial > hg > xemacs-beta
comparison lisp/vm/vm-message.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 859a2309aef8 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
1 ;;; Macros and functions dealing with accessing VM message struct fields | |
2 ;;; Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995 Kyle E. Jones | |
3 ;;; | |
4 ;;; This program is free software; you can redistribute it and/or modify | |
5 ;;; it under the terms of the GNU General Public License as published by | |
6 ;;; the Free Software Foundation; either version 1, or (at your option) | |
7 ;;; any later version. | |
8 ;;; | |
9 ;;; This program is distributed in the hope that it will be useful, | |
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 ;;; GNU General Public License for more details. | |
13 ;;; | |
14 ;;; You should have received a copy of the GNU General Public License | |
15 ;;; along with this program; if not, write to the Free Software | |
16 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
17 | |
18 (provide 'vm-message) | |
19 | |
20 ;; data that is always shared with virtual folders | |
21 (defmacro vm-location-data-of (message) (list 'aref message 0)) | |
22 ;; where message begins starting at the message separator in the folder | |
23 (defmacro vm-start-of (message) (list 'aref (list 'aref message 0) 0)) | |
24 ;; where headers start (From_ line) | |
25 (defmacro vm-headers-of (message) (list 'aref (list 'aref message 0) 1)) | |
26 ;; where visible headers start | |
27 (defun vm-vheaders-of (message) | |
28 (or (aref (aref message 0) 2) | |
29 (progn (vm-reorder-message-headers message nil nil) | |
30 (aref (aref message 0) 2)))) | |
31 ;; where text section starts | |
32 (defun vm-text-of (message) | |
33 (or (aref (aref message 0) 3) (progn (vm-find-and-set-text-of message) | |
34 (aref (aref message 0) 3)))) | |
35 ;; where text portion of message ends | |
36 (defmacro vm-text-end-of (message) (list 'aref (list 'aref message 0) 4)) | |
37 ;; where message ends | |
38 (defmacro vm-end-of (message) (list 'aref (list 'aref message 0) 5)) | |
39 ;; soft data vector | |
40 (defmacro vm-softdata-of (message) (list 'aref message 1)) | |
41 (defmacro vm-number-of (message) (list 'aref (list 'aref message 1) 0)) | |
42 (defmacro vm-padded-number-of (message) (list 'aref (list 'aref message 1) 1)) | |
43 (defmacro vm-mark-of (message) (list 'aref (list 'aref message 1) 2)) | |
44 ;; start of summary line | |
45 (defmacro vm-su-start-of (message) (list 'aref (list 'aref message 1) 3)) | |
46 ;; end of summary line | |
47 (defmacro vm-su-end-of (message) (list 'aref (list 'aref message 1) 4)) | |
48 ;; symbol whose value is the real message. | |
49 (defmacro vm-real-message-sym-of (message) | |
50 (list 'aref (list 'aref message 1) 5)) | |
51 ;; real message | |
52 (defmacro vm-real-message-of (message) | |
53 (list 'symbol-value (list 'aref (list 'aref message 1) 5))) | |
54 ;; link to previous message in the message list | |
55 (defmacro vm-reverse-link-of (message) | |
56 (list 'symbol-value (list 'aref (list 'aref message 1) 6))) | |
57 ;; message type | |
58 (defmacro vm-message-type-of (message) (list 'aref (list 'aref message 1) 7)) | |
59 ;; number that uniquely identifies each message | |
60 ;; this is for the set handling stuff | |
61 (defmacro vm-message-id-number-of (message) | |
62 (list 'aref (list 'aref message 1) 8)) | |
63 ;; folder buffer of this message | |
64 (defmacro vm-buffer-of (message) | |
65 (list 'aref (list 'aref message 1) 9)) | |
66 ;; cache thread indentation value | |
67 (defmacro vm-thread-indentation-of (message) | |
68 (list 'aref (list 'aref message 1) 10)) | |
69 ;; list of symbols from vm-thread-obarray that give this message's lineage | |
70 (defmacro vm-thread-list-of (message) | |
71 (list 'aref (list 'aref message 1) 11)) | |
72 ;; babyl header frob flag (0 or 1 at beginning of message) | |
73 (defmacro vm-babyl-frob-flag-of (message) | |
74 (list 'aref (list 'aref message 1) 12)) | |
75 ;; saved attributes, if message was switched from unmirrored to mirrored | |
76 (defmacro vm-saved-virtual-attributes-of (message) | |
77 (list 'aref (list 'aref message 1) 13)) | |
78 ;; saved mirror data, if message was switched from unmirrored to mirrored | |
79 (defmacro vm-saved-virtual-mirror-data-of (message) | |
80 (list 'aref (list 'aref message 1) 14)) | |
81 ;; summary for unmirrored virtual message | |
82 (defmacro vm-virtual-summary-of (message) | |
83 (list 'aref (list 'aref message 1) 15)) | |
84 ;; message attribute vector | |
85 (defmacro vm-attributes-of (message) (list 'aref message 2)) | |
86 (defmacro vm-new-flag (message) (list 'aref (list 'aref message 2) 0)) | |
87 (defmacro vm-unread-flag (message) (list 'aref (list 'aref message 2) 1)) | |
88 (defmacro vm-deleted-flag (message) (list 'aref (list 'aref message 2) 2)) | |
89 (defmacro vm-filed-flag (message) (list 'aref (list 'aref message 2) 3)) | |
90 (defmacro vm-replied-flag (message) (list 'aref (list 'aref message 2) 4)) | |
91 (defmacro vm-written-flag (message) (list 'aref (list 'aref message 2) 5)) | |
92 (defmacro vm-forwarded-flag (message) (list 'aref (list 'aref message 2) 6)) | |
93 (defmacro vm-edited-flag (message) (list 'aref (list 'aref message 2) 7)) | |
94 (defmacro vm-redistributed-flag (message) (list 'aref (list 'aref message 2) 8)) | |
95 ;; message cached data | |
96 (defmacro vm-cache-of (message) (list 'aref message 3)) | |
97 ;; message size in bytes (as a string) | |
98 (defmacro vm-byte-count-of (message) (list 'aref (list 'aref message 3) 0)) | |
99 ;; weekday sent | |
100 (defmacro vm-weekday-of (message) (list 'aref (list 'aref message 3) 1)) | |
101 ;; month day | |
102 (defmacro vm-monthday-of (message) (list 'aref (list 'aref message 3) 2)) | |
103 ;; month sent | |
104 (defmacro vm-month-of (message) (list 'aref (list 'aref message 3) 3)) | |
105 ;; year sent | |
106 (defmacro vm-year-of (message) (list 'aref (list 'aref message 3) 4)) | |
107 ;; hour sent | |
108 (defmacro vm-hour-of (message) (list 'aref (list 'aref message 3) 5)) | |
109 ;; timezone | |
110 (defmacro vm-zone-of (message) (list 'aref (list 'aref message 3) 6)) | |
111 ;; message author's full name (Full-Name: or gouged from From:) | |
112 (defmacro vm-full-name-of (message) (list 'aref (list 'aref message 3) 7)) | |
113 ;; message author address (gouged from From:) | |
114 (defmacro vm-from-of (message) (list 'aref (list 'aref message 3) 8)) | |
115 ;; message ID (Message-Id:) | |
116 (defmacro vm-message-id-of (message) (list 'aref (list 'aref message 3) 9)) | |
117 ;; number of lines in message (as a string) | |
118 (defmacro vm-line-count-of (message) (list 'aref (list 'aref message 3) 10)) | |
119 ;; message subject (Subject:) | |
120 (defmacro vm-subject-of (message) (list 'aref (list 'aref message 3) 11)) | |
121 ;; Regexp that can be used to find the start of the already ordered headers. | |
122 (defmacro vm-vheaders-regexp-of (message) | |
123 (list 'aref (list 'aref message 3) 12)) | |
124 ;; Addresses of recipients in a comma separated list | |
125 (defmacro vm-to-of (message) (list 'aref (list 'aref message 3) 13)) | |
126 ;; Full names of recipients in a comma separated list. Addresses if | |
127 ;; full names not available. | |
128 (defmacro vm-to-names-of (message) (list 'aref (list 'aref message 3) 14)) | |
129 ;; numeric month sent | |
130 (defmacro vm-month-number-of (message) (list 'aref (list 'aref message 3) 15)) | |
131 ;; sortable date string (used for easy sorting, naturally) | |
132 (defmacro vm-sortable-datestring-of (message) | |
133 (list 'aref (list 'aref message 3) 16)) | |
134 ;; sortable subject, re: garbage removed | |
135 (defmacro vm-sortable-subject-of (message) | |
136 (list 'aref (list 'aref message 3) 17)) | |
137 (defmacro vm-summary-of (message) | |
138 (list 'aref (list 'aref message 3) 18)) | |
139 (defmacro vm-parent-of (message) | |
140 (list 'aref (list 'aref message 3) 19)) | |
141 ;; extra data shared by virtual messages if vm-virtual-mirror is non-nil | |
142 (defmacro vm-mirror-data-of (message) (list 'aref message 4)) | |
143 ;; if message is being edited, this is the buffer being used. | |
144 (defmacro vm-edit-buffer-of (message) (list 'aref (list 'aref message 4) 0)) | |
145 ;; list of virtual messages mirroring the underlying real message | |
146 (defmacro vm-virtual-messages-of (message) | |
147 (list 'symbol-value (list 'aref (list 'aref message 4) 1))) | |
148 ;; modification flag for this message | |
149 ;; nil if all attribute changes have been stuffed into the folder buffer | |
150 (defmacro vm-modflag-of (message) (list 'aref (list 'aref message 4) 2)) | |
151 ;; list of labels attached to this message | |
152 (defmacro vm-labels-of (message) (list 'aref (list 'aref message 4) 3)) | |
153 ;; comma list of labels | |
154 (defmacro vm-label-string-of (message) (list 'aref (list 'aref message 4) 4)) | |
155 | |
156 (defmacro vm-set-location-data-of (message vdata) (list 'aset message 0 vdata)) | |
157 (defmacro vm-set-start-of (message start) | |
158 (list 'aset (list 'aref message 0) 0 start)) | |
159 (defmacro vm-set-headers-of (message h) | |
160 (list 'aset (list 'aref message 0) 1 h)) | |
161 (defmacro vm-set-vheaders-of (message vh) | |
162 (list 'aset (list 'aref message 0) 2 vh)) | |
163 (defmacro vm-set-text-of (message text) | |
164 (list 'aset (list 'aref message 0) 3 text)) | |
165 (defmacro vm-set-text-end-of (message text) | |
166 (list 'aset (list 'aref message 0) 4 text)) | |
167 (defmacro vm-set-end-of (message end) | |
168 (list 'aset (list 'aref message 0) 5 end)) | |
169 (defmacro vm-set-softdata-of (message data) | |
170 (list 'aset message 1 data)) | |
171 (defmacro vm-set-number-of (message n) | |
172 (list 'aset (list 'aref message 1) 0 n)) | |
173 (defmacro vm-set-padded-number-of (message n) | |
174 (list 'aset (list 'aref message 1) 1 n)) | |
175 (defmacro vm-set-mark-of (message val) | |
176 (list 'aset (list 'aref message 1) 2 val)) | |
177 (defmacro vm-set-su-start-of (message pos) | |
178 (list 'aset (list 'aref message 1) 3 pos)) | |
179 (defmacro vm-set-su-end-of (message pos) | |
180 (list 'aset (list 'aref message 1) 4 pos)) | |
181 (defmacro vm-set-real-message-sym-of (message sym) | |
182 (list 'aset (list 'aref message 1) 5 sym)) | |
183 (defmacro vm-set-reverse-link-of (message link) | |
184 (list 'set (list 'aref (list 'aref message 1) 6) link)) | |
185 (defmacro vm-set-reverse-link-sym-of (message sym) | |
186 (list 'aset (list 'aref message 1) 6 sym)) | |
187 (defmacro vm-set-message-type-of (message type) | |
188 (list 'aset (list 'aref message 1) 7 type)) | |
189 (defmacro vm-set-message-id-number-of (message number) | |
190 (list 'aset (list 'aref message 1) 8 number)) | |
191 (defmacro vm-set-buffer-of (message buffer) | |
192 (list 'aset (list 'aref message 1) 9 buffer)) | |
193 (defmacro vm-set-thread-indentation-of (message val) | |
194 (list 'aset (list 'aref message 1) 10 val)) | |
195 (defmacro vm-set-thread-list-of (message list) | |
196 (list 'aset (list 'aref message 1) 11 list)) | |
197 (defmacro vm-set-babyl-frob-flag-of (message flag) | |
198 (list 'aset (list 'aref message 1) 12 flag)) | |
199 (defmacro vm-set-saved-virtual-attributes-of (message attrs) | |
200 (list 'aset (list 'aref message 1) 13 attrs)) | |
201 (defmacro vm-set-saved-virtual-mirror-data-of (message data) | |
202 (list 'aset (list 'aref message 1) 14 data)) | |
203 (defmacro vm-set-virtual-summary-of (message summ) | |
204 (list 'aset (list 'aref message 1) 15 summ)) | |
205 (defmacro vm-set-attributes-of (message attrs) (list 'aset message 2 attrs)) | |
206 ;; The other routines in attributes group are part of the undo system. | |
207 (defun vm-set-edited-flag-of (message flag) | |
208 (aset (aref message 2) 7 flag) | |
209 (vm-mark-for-summary-update message) | |
210 (if (eq vm-flush-interval t) | |
211 (vm-stuff-virtual-attributes message) | |
212 (vm-set-modflag-of message t)) | |
213 (and (not (buffer-modified-p)) (vm-set-buffer-modified-p t)) | |
214 (vm-clear-modification-flag-undos)) | |
215 (defmacro vm-set-cache-of (message cache) (list 'aset message 3 cache)) | |
216 (defmacro vm-set-byte-count-of (message count) | |
217 (list 'aset (list 'aref message 3) 0 count)) | |
218 (defmacro vm-set-weekday-of (message val) | |
219 (list 'aset (list 'aref message 3) 1 val)) | |
220 (defmacro vm-set-monthday-of (message val) | |
221 (list 'aset (list 'aref message 3) 2 val)) | |
222 (defmacro vm-set-month-of (message val) | |
223 (list 'aset (list 'aref message 3) 3 val)) | |
224 (defmacro vm-set-year-of (message val) | |
225 (list 'aset (list 'aref message 3) 4 val)) | |
226 (defmacro vm-set-hour-of (message val) | |
227 (list 'aset (list 'aref message 3) 5 val)) | |
228 (defmacro vm-set-zone-of (message val) | |
229 (list 'aset (list 'aref message 3) 6 val)) | |
230 (defmacro vm-set-full-name-of (message author) | |
231 (list 'aset (list 'aref message 3) 7 author)) | |
232 (defmacro vm-set-from-of (message author) | |
233 (list 'aset (list 'aref message 3) 8 author)) | |
234 (defmacro vm-set-message-id-of (message id) | |
235 (list 'aset (list 'aref message 3) 9 id)) | |
236 (defmacro vm-set-line-count-of (message count) | |
237 (list 'aset (list 'aref message 3) 10 count)) | |
238 (defmacro vm-set-subject-of (message subject) | |
239 (list 'aset (list 'aref message 3) 11 subject)) | |
240 (defmacro vm-set-vheaders-regexp-of (message regexp) | |
241 (list 'aset (list 'aref message 3) 12 regexp)) | |
242 (defmacro vm-set-to-of (message recips) | |
243 (list 'aset (list 'aref message 3) 13 recips)) | |
244 (defmacro vm-set-to-names-of (message recips) | |
245 (list 'aset (list 'aref message 3) 14 recips)) | |
246 (defmacro vm-set-month-number-of (message val) | |
247 (list 'aset (list 'aref message 3) 15 val)) | |
248 (defmacro vm-set-sortable-datestring-of (message val) | |
249 (list 'aset (list 'aref message 3) 16 val)) | |
250 (defmacro vm-set-sortable-subject-of (message val) | |
251 (list 'aset (list 'aref message 3) 17 val)) | |
252 (defmacro vm-set-summary-of (message val) | |
253 (list 'aset (list 'aref message 3) 18 val)) | |
254 (defmacro vm-set-parent-of (message val) | |
255 (list 'aset (list 'aref message 3) 19 val)) | |
256 (defmacro vm-set-mirror-data-of (message data) | |
257 (list 'aset message 4 data)) | |
258 (defmacro vm-set-edit-buffer-of (message buf) | |
259 (list 'aset (list 'aref message 4) 0 buf)) | |
260 (defmacro vm-set-virtual-messages-of (message list) | |
261 (list 'set (list 'aref (list 'aref message 4) 1) list)) | |
262 (defmacro vm-set-virtual-messages-sym-of (message sym) | |
263 (list 'aset (list 'aref message 4) 1 sym)) | |
264 (defmacro vm-set-modflag-of (message val) | |
265 (list 'aset (list 'aref message 4) 2 val)) | |
266 (defmacro vm-set-labels-of (message labels) | |
267 (list 'aset (list 'aref message 4) 3 labels)) | |
268 (defmacro vm-set-label-string-of (message string) | |
269 (list 'aset (list 'aref message 4) 4 string)) | |
270 | |
271 (defun vm-make-message () | |
272 (let ((v (make-vector 5 nil)) sym) | |
273 (vm-set-softdata-of v (make-vector vm-softdata-vector-length nil)) | |
274 (vm-set-location-data-of | |
275 v (make-vector vm-location-data-vector-length nil)) | |
276 (vm-set-mirror-data-of v (make-vector vm-mirror-data-vector-length nil)) | |
277 (vm-set-message-id-number-of v (int-to-string vm-message-id-number)) | |
278 (vm-increment vm-message-id-number) | |
279 (vm-set-buffer-of v (current-buffer)) | |
280 ;; We use an uninterned symbol here as a level of indirection | |
281 ;; from a purely self-referential structure. This is | |
282 ;; necessary so that Emacs debugger can be used on this | |
283 ;; program. | |
284 (setq sym (make-symbol "<<>>")) | |
285 (set sym v) | |
286 (vm-set-real-message-sym-of v sym) | |
287 ;; Another uninterned symbol for the virtual messages list. | |
288 (setq sym (make-symbol "<v>")) | |
289 (set sym nil) | |
290 (vm-set-virtual-messages-sym-of v sym) | |
291 ;; Another uninterned symbol for the reverse link | |
292 ;; into the message list. | |
293 (setq sym (make-symbol "<--")) | |
294 (vm-set-reverse-link-sym-of v sym) | |
295 v )) | |
296 | |
297 (defun vm-find-and-set-text-of (m) | |
298 (save-excursion | |
299 (set-buffer (vm-buffer-of m)) | |
300 (save-restriction | |
301 (widen) | |
302 (goto-char (vm-headers-of m)) | |
303 (search-forward "\n\n" (vm-text-end-of m) 0) | |
304 (vm-set-text-of m (point-marker))))) | |
305 | |
306 (defun vm-virtual-message-p (m) | |
307 (not (eq m (vm-real-message-of m)))) |