annotate lisp/=nntp.el @ 1631:9c52fcf232bf

Fri Nov 20 05:24:16 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu) * config.sub: Added machines and operating systems for Emacs ports, since Emacs now uses config.sub for its configuration. New manufacturers recognized not to be operating systems: High Level Hardware (highlevel, defaults to using BSD), Gould (gould, defaults to System V), Commodore (cbm, defaults to amigados), National Semiconductor (ns, defaults to Genix), and Masscomp (masscomp, defaults to RTU). Recognize the NS1600 (ns16k) and the Clipper (clipper) as processors. Recognize these processors with default manufacturers: the Cydra (cydra) from Cydrome (cydrome), the XPS100 (xps100) from Honeywell (honeywell), and the Orion (orion) and Orion 1/05 (orion105) from High Level Hardware (highlevel). If the ISC operating system is given with a version number, don't kill it and set it to 2.2; just have it default to 2.2 if omitted. Make Irix SGI's default operating system, not SYSV. Make BSD Encore's default, so it applies for all Encore machines, not just the umax and mmax abbreviations. All of Encore's machines use BSD, not just the ns32k-based ones. Make it the manufacturer's default. Make it possible to specify an operating system for a Gould machine. Make sysv the manufacturer's default, so it applies when we specify the manufacturer as well as when we omit it. Add Uniplus (uniplus), Iris (iris), Xenix (xenix), and RTU (rtu) as recognized operating system names.
author Jim Blandy <jimb@redhat.com>
date Fri, 20 Nov 1992 17:14:50 +0000
parents bff32d8ecc5e
children cd90d49526ae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; nntp.el --- NNTP (RFC977) Interface for GNU Emacs
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
882
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
3 ;; Copyright (C) 1987, 1988, 1989, 1990, 1992 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
4
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
5 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
814
38b2499cb3e9 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 790
diff changeset
6 ;; Keywords: news
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
7
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
9
882
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
13 ;; any later version.
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
14
882
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
18 ;; GNU General Public License for more details.
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
19
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
20 ;; You should have received a copy of the GNU General Public License
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
22 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
23
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
24
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
25 ;;; Commentary:
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
26
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
27 ;; This implementation is tested on both 1.2a and 1.5 version of the
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
28 ;; NNTP package.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
29
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
30 ;; Troubleshooting of NNTP
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
31 ;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
32 ;; (1) Select routine may signal an error or fall into infinite loop
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
33 ;; while waiting for the server response. In this case, you'd better
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
34 ;; not use byte-compiled codes but original source. If you still have
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
35 ;; a problems with it, set the variable `nntp-buggy-select' to T.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
36 ;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
37 ;; (2) Emacs may hang up while retrieving headers since too many
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
38 ;; requests have been sent to the NNTP server without reading their
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
39 ;; replies. In this case, reduce the number of the requests sent to
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
40 ;; the server at one time by setting the variable
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
41 ;; `nntp-maximum-request' to a lower value.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
42 ;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
43 ;; (3) If the TCP/IP stream (open-network-stream) is not supported by
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
44 ;; emacs, compile and install `tcp.el' and `tcp.c' which is an
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
45 ;; emulation program of the stream. If you modified `tcp.c' for your
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
46 ;; system, please send me the diffs. I'll include some of them in the
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
47 ;; future releases.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
48
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
49 ;;; Code:
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
50
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
51 (defvar nntp-server-hook nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
52 "*Hooks for the NNTP server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
53 If the kanji code of the NNTP server is different from the local kanji
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
54 code, the correct kanji code of the buffer associated with the NNTP
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
55 server must be specified as follows:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
56
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
57 (setq nntp-server-hook
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
58 '(lambda ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
59 ;; Server's Kanji code is EUC (NEmacs hack).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
60 (make-local-variable 'kanji-fileio-code)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
61 (setq kanji-fileio-code 0)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
62
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
63 If you'd like to change something depending on the server in this
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
64 hook, use the variable `nntp-server-name'.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
65
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
66 (defvar nntp-buggy-select (memq system-type '(usg-unix-v fujitsu-uts))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
67 "*T if your select routine is buggy.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
68 If the select routine signals error or fall into infinite loop while
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
69 waiting for the server response, the variable must be set to t. In
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
70 case of Fujitsu UTS, it is set to T since `accept-process-output'
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
71 doesn't work properly.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
72
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
73 (defvar nntp-maximum-request 400
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
74 "*The maximum number of the requests sent to the NNTP server at one time.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
75 If Emacs hangs up while retrieving headers, set the variable to a
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
76 lower value.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
77
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
78 (defvar nntp-large-newsgroup 50
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
79 "*The number of the articles which indicates a large newsgroup.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
80 If the number of the articles is greater than the value, verbose
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
81 messages will be shown to indicate the current status.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
82
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
83
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
84 (defconst nntp-version "NNTP 3.10"
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
85 "Version numbers of this version of NNTP.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
86
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
87 (defvar nntp-server-name nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
88 "The name of the host running NNTP server.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
89
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
90 (defvar nntp-server-buffer nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
91 "Buffer associated with NNTP server process.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
92
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
93 (defvar nntp-server-process nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
94 "The NNTP server process.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
95 You'd better not use this variable in NNTP front-end program but
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
96 instead use `nntp-server-buffer'.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
97
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
98 (defvar nntp-status-message-string nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
99 "Save the server response message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
100 You'd better not use this variable in NNTP front-end program but
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
101 instead call function `nntp-status-message' to get status message.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
102
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
103 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
104 ;;; Extended Command for retrieving many headers.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
105 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
106 ;; Retrieving lots of headers by sending command asynchronously.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
107 ;; Access functions to headers are defined as macro.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
108
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
109 (defmacro nntp-header-number (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
110 "Return article number in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
111 (` (aref (, header) 0)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
112
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
113 (defmacro nntp-set-header-number (header number)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
114 "Set article number of HEADER to NUMBER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
115 (` (aset (, header) 0 (, number))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
116
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
117 (defmacro nntp-header-subject (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
118 "Return subject string in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
119 (` (aref (, header) 1)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
120
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
121 (defmacro nntp-set-header-subject (header subject)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
122 "Set article subject of HEADER to SUBJECT."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
123 (` (aset (, header) 1 (, subject))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
124
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
125 (defmacro nntp-header-from (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
126 "Return author string in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
127 (` (aref (, header) 2)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
128
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
129 (defmacro nntp-set-header-from (header from)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
130 "Set article author of HEADER to FROM."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
131 (` (aset (, header) 2 (, from))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
132
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
133 (defmacro nntp-header-xref (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
134 "Return xref string in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
135 (` (aref (, header) 3)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
136
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
137 (defmacro nntp-set-header-xref (header xref)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
138 "Set article xref of HEADER to xref."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
139 (` (aset (, header) 3 (, xref))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
140
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
141 (defmacro nntp-header-lines (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
142 "Return lines in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
143 (` (aref (, header) 4)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
144
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
145 (defmacro nntp-set-header-lines (header lines)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
146 "Set article lines of HEADER to LINES."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
147 (` (aset (, header) 4 (, lines))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
148
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
149 (defmacro nntp-header-date (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
150 "Return date in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
151 (` (aref (, header) 5)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
152
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
153 (defmacro nntp-set-header-date (header date)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
154 "Set article date of HEADER to DATE."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
155 (` (aset (, header) 5 (, date))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
156
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
157 (defmacro nntp-header-id (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
158 "Return Id in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
159 (` (aref (, header) 6)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
160
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
161 (defmacro nntp-set-header-id (header id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
162 "Set article Id of HEADER to ID."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
163 (` (aset (, header) 6 (, id))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
164
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
165 (defmacro nntp-header-references (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
166 "Return references in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
167 (` (aref (, header) 7)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
168
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
169 (defmacro nntp-set-header-references (header ref)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
170 "Set article references of HEADER to REF."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
171 (` (aset (, header) 7 (, ref))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
172
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
173 (defun nntp-retrieve-headers (sequence)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
174 "Return list of article headers specified by SEQUENCE of article id.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
175 The format of list is
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
176 `([NUMBER SUBJECT FROM XREF LINES DATE MESSAGE-ID REFERENCES] ...)'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
177 Reader macros for the vector are defined as `nntp-header-FIELD'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
178 Writer macros for the vector are defined as `nntp-set-header-FIELD'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
179 News group must be selected before calling me."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
180 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
181 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
182 (erase-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
183 (let ((number (length sequence))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
184 (last-point (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
185 (received 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
186 (count 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
187 (headers nil) ;Result list.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
188 (article 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
189 (subject nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
190 (message-id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
191 (from nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
192 (xref nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
193 (lines 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
194 (date nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
195 (references nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
196 ;; Send HEAD command.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
197 (while sequence
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
198 (nntp-send-strings-to-server "HEAD" (car sequence))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
199 (setq sequence (cdr sequence))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
200 (setq count (1+ count))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
201 ;; Every 400 header requests we have to read stream in order
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
202 ;; to avoid deadlock.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
203 (if (or (null sequence) ;All requests have been sent.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
204 (zerop (% count nntp-maximum-request)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
205 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
206 (accept-process-output)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
207 (while (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
208 (goto-char last-point)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
209 ;; Count replies.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
210 (while (re-search-forward "^[0-9]" nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
211 (setq received (1+ received)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
212 (setq last-point (point))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
213 (< received count))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
214 ;; If number of headers is greater than 100, give
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
215 ;; informative messages.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
216 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
217 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
218 (zerop (% received 20))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
219 (message "NNTP: %d%% of headers received."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
220 (/ (* received 100) number)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
221 (nntp-accept-response))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
222 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
223 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
224 ;; Wait for text of last command.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
225 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
226 (re-search-backward "^[0-9]" nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
227 (if (looking-at "^[23]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
228 (while (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
229 (goto-char (- (point-max) 3))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
230 (not (looking-at "^\\.\r$")))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
231 (nntp-accept-response)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
232 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
233 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
234 (message "NNTP: 100%% of headers received."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
235 ;; Now all of replies are received.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
236 (setq received number)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
237 ;; First, fold continuation lines.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
238 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
239 (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
240 (replace-match " " t t))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
241 ;;(delete-non-matching-lines
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
242 ;; "^Subject:\\|^Xref:\\|^From:\\|^Lines:\\|^Date:\\|^References:\\|^[23]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
243 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
244 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
245 (message "NNTP: Parsing headers..."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
246 ;; Then examines replies.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
247 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
248 (while (not (eobp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
249 (cond ((looking-at "^[23][0-9][0-9][ \t]+\\([0-9]+\\)[ \t]+\\(<[^>]+>\\)")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
250 (setq article
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
251 (string-to-int
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
252 (buffer-substring (match-beginning 1) (match-end 1))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
253 (setq message-id
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
254 (buffer-substring (match-beginning 2) (match-end 2)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
255 (forward-line 1)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
256 ;; Set default value.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
257 (setq subject nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
258 (setq xref nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
259 (setq from nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
260 (setq lines 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
261 (setq date nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
262 (setq references nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
263 ;; Thanks go to mly@AI.MIT.EDU (Richard Mlynarik)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
264 (while (and (not (eobp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
265 (not (memq (following-char) '(?2 ?3))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
266 (if (looking-at "\\(From\\|Subject\\|Date\\|Lines\\|Xref\\|References\\):[ \t]+\\([^ \t\n]+.*\\)\r$")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
267 (let ((s (buffer-substring
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
268 (match-beginning 2) (match-end 2)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
269 (c (char-after (match-beginning 0))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
270 ;; We don't have to worry about letter case.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
271 (cond ((char-equal c ?F) ;From:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
272 (setq from s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
273 ((char-equal c ?S) ;Subject:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
274 (setq subject s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
275 ((char-equal c ?D) ;Date:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
276 (setq date s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
277 ((char-equal c ?L) ;Lines:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
278 (setq lines (string-to-int s)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
279 ((char-equal c ?X) ;Xref:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
280 (setq xref s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
281 ((char-equal c ?R) ;References:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
282 (setq references s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
283 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
284 (forward-line 1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
285 ;; Finished to parse one header.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
286 (if (null subject)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
287 (setq subject "(None)"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
288 (if (null from)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
289 (setq from "(Unknown User)"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
290 (setq headers
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
291 (cons (vector article subject from
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
292 xref lines date
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
293 message-id references) headers))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
294 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
295 (t (forward-line 1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
296 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
297 (setq received (1- received))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
298 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
299 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
300 (zerop (% received 20))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
301 (message "NNTP: Parsing headers... %d%%"
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
302 (/ (* received 100) number)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
303 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
304 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
305 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
306 (message "NNTP: Parsing headers... done"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
307 (nreverse headers)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
308 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
309
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
310
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
311 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
312 ;;; Raw Interface to Network News Transfer Protocol (RFC977).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
313 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
314
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
315 (defun nntp-open-server (host &optional service)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
316 "Open news server on HOST.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
317 If HOST is nil, use value of environment variable `NNTPSERVER'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
318 If optional argument SERVICE is non-nil, open by the service name."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
319 (let ((host (or host (getenv "NNTPSERVER")))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
320 (status nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
321 (setq nntp-status-message-string "")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
322 (cond ((and host (nntp-open-server-internal host service))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
323 (setq status (nntp-wait-for-response "^[23].*\r$"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
324 ;; Do check unexpected close of connection.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
325 ;; Suggested by feldmark@hanako.stars.flab.fujitsu.junet.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
326 (if status
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
327 (set-process-sentinel nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
328 'nntp-default-sentinel)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
329 ;; We have to close connection here, since function
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
330 ;; `nntp-server-opened' may return incorrect status.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
331 (nntp-close-server-internal)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
332 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
333 ((null host)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
334 (setq nntp-status-message-string "NNTP server is not specified."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
335 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
336 status
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
337 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
338
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
339 (defun nntp-close-server ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
340 "Close news server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
341 (unwind-protect
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
342 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
343 ;; Un-set default sentinel function before closing connection.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
344 (and nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
345 (eq 'nntp-default-sentinel
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
346 (process-sentinel nntp-server-process))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
347 (set-process-sentinel nntp-server-process nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
348 ;; We cannot send QUIT command unless the process is running.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
349 (if (nntp-server-opened)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
350 (nntp-send-command nil "QUIT"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
351 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
352 (nntp-close-server-internal)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
353 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
354
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
355 (fset 'nntp-request-quit (symbol-function 'nntp-close-server))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
356
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
357 (defun nntp-server-opened ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
358 "Return server process status, T or NIL.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
359 If the stream is opened, return T, otherwise return NIL."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
360 (and nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
361 (memq (process-status nntp-server-process) '(open run))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
362
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
363 (defun nntp-status-message ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
364 "Return server status response as string."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
365 (if (and nntp-status-message-string
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
366 ;; NNN MESSAGE
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
367 (string-match "[0-9][0-9][0-9][ \t]+\\([^\r]*\\).*$"
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
368 nntp-status-message-string))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
369 (substring nntp-status-message-string (match-beginning 1) (match-end 1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
370 ;; Empty message if nothing.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
371 ""
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
372 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
373
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
374 (defun nntp-request-article (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
375 "Select article by message ID (or number)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
376 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
377 ;; If NEmacs, end of message may look like: "\256\215" (".^M")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
378 (nntp-send-command "^\\.\r$" "ARTICLE" id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
379 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
380 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
381
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
382 (defun nntp-request-body (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
383 "Select article body by message ID (or number)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
384 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
385 ;; If NEmacs, end of message may look like: "\256\215" (".^M")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
386 (nntp-send-command "^\\.\r$" "BODY" id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
387 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
388 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
389
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
390 (defun nntp-request-head (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
391 "Select article head by message ID (or number)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
392 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
393 (nntp-send-command "^\\.\r$" "HEAD" id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
394 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
395 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
396
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
397 (defun nntp-request-stat (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
398 "Select article by message ID (or number)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
399 (nntp-send-command "^[23].*\r$" "STAT" id))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
400
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
401 (defun nntp-request-group (group)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
402 "Select news GROUP."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
403 ;; 1.2a NNTP's group command is buggy. "^M" (\r) is not appended to
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
404 ;; end of the status message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
405 (nntp-send-command "^[23].*$" "GROUP" group))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
406
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
407 (defun nntp-request-list ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
408 "List valid newsgoups."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
409 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
410 (nntp-send-command "^\\.\r$" "LIST")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
411 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
412 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
413
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
414 (defun nntp-request-last ()
232
c0bd9c7f9c42 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 87
diff changeset
415 "Set current article pointer to the previous article in the current news group."
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
416 (nntp-send-command "^[23].*\r$" "LAST"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
417
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
418 (defun nntp-request-next ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
419 "Advance current article pointer."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
420 (nntp-send-command "^[23].*\r$" "NEXT"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
421
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
422 (defun nntp-request-post ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
423 "Post a new news in current buffer."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
424 (if (nntp-send-command "^[23].*\r$" "POST")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
425 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
426 (nntp-encode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
427 (nntp-send-region-to-server (point-min) (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
428 ;; 1.2a NNTP's post command is buggy. "^M" (\r) is not
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
429 ;; appended to end of the status message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
430 (nntp-wait-for-response "^[23].*$")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
431 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
432
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
433 (defun nntp-default-sentinel (proc status)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
434 "Default sentinel function for NNTP server process."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
435 (if (and nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
436 (not (nntp-server-opened)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
437 (error "NNTP: Connection closed.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
438 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
439
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
440 ;; Encoding and decoding of NNTP text.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
441
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
442 (defun nntp-decode-text ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
443 "Decode text transmitted by NNTP.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
444 0. Delete status line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
445 1. Delete `^M' at end of line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
446 2. Delete `.' at end of buffer (end of text mark).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
447 3. Delete `.' at beginning of line."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
448 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
449 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
450 ;; Insert newline at end of buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
451 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
452 (if (not (bolp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
453 (insert "\n"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
454 ;; Delete status line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
455 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
456 (delete-region (point) (progn (forward-line 1) (point)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
457 ;; Delete `^M' at end of line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
458 ;; (replace-regexp "\r$" "")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
459 (while (not (eobp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
460 (end-of-line)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
461 (if (= (preceding-char) ?\r)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
462 (delete-char -1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
463 (forward-line 1)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
464 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
465 ;; Delete `.' at end of buffer (end of text mark).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
466 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
467 (forward-line -1) ;(beginning-of-line)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
468 (if (looking-at "^\\.$")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
469 (delete-region (point) (progn (forward-line 1) (point))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
470 ;; Replace `..' at beginning of line with `.'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
471 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
472 ;; (replace-regexp "^\\.\\." ".")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
473 (while (search-forward "\n.." nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
474 (delete-char -1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
475 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
476
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
477 (defun nntp-encode-text ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
478 "Encode text in current buffer for NNTP transmission.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
479 1. Insert `.' at beginning of line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
480 2. Insert `.' at end of buffer (end of text mark)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
481 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
482 ;; Insert newline at end of buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
483 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
484 (if (not (bolp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
485 (insert "\n"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
486 ;; Replace `.' at beginning of line with `..'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
487 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
488 ;; (replace-regexp "^\\." "..")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
489 (while (search-forward "\n." nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
490 (insert "."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
491 ;; Insert `.' at end of buffer (end of text mark).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
492 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
493 (insert ".\n")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
494 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
495
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
496
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
497 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
498 ;;; Synchronous Communication with NNTP Server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
499 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
500
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
501 (defun nntp-send-command (response cmd &rest args)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
502 "Wait for server RESPONSE after sending CMD and optional ARGS to server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
503 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
504 ;; Clear communication buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
505 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
506 (erase-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
507 (apply 'nntp-send-strings-to-server cmd args)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
508 (if response
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
509 (nntp-wait-for-response response)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
510 t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
511 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
512
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
513 (defun nntp-wait-for-response (regexp)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
514 "Wait for server response which matches REGEXP."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
515 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
516 (let ((status t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
517 (wait t))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
518 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
519 ;; Wait for status response (RFC977).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
520 ;; 1xx - Informative message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
521 ;; 2xx - Command ok.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
522 ;; 3xx - Command ok so far, send the rest of it.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
523 ;; 4xx - Command was correct, but couldn't be performed for some
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
524 ;; reason.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
525 ;; 5xx - Command unimplemented, or incorrect, or a serious
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
526 ;; program error occurred.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
527 (nntp-accept-response)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
528 (while wait
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
529 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
530 (cond ((looking-at "[23]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
531 (setq wait nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
532 ((looking-at "[45]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
533 (setq status nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
534 (setq wait nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
535 (t (nntp-accept-response))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
536 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
537 ;; Save status message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
538 (end-of-line)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
539 (setq nntp-status-message-string
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
540 (buffer-substring (point-min) (point)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
541 (if status
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
542 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
543 (setq wait t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
544 (while wait
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
545 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
546 (forward-line -1) ;(beginning-of-line)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
547 ;;(message (buffer-substring
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
548 ;; (point)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
549 ;; (save-excursion (end-of-line) (point))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
550 (if (looking-at regexp)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
551 (setq wait nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
552 (message "NNTP: Reading...")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
553 (nntp-accept-response)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
554 (message "")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
555 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
556 ;; Successfully received server response.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
557 t
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
558 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
559 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
560
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
561
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
562 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
563 ;;; Low-Level Interface to NNTP Server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
564 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
565
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
566 (defun nntp-send-strings-to-server (&rest strings)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
567 "Send list of STRINGS to news server as command and its arguments."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
568 (let ((cmd (car strings))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
569 (strings (cdr strings)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
570 ;; Command and each argument must be separeted by one or more spaces.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
571 (while strings
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
572 (setq cmd (concat cmd " " (car strings)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
573 (setq strings (cdr strings)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
574 ;; Command line must be terminated by a CR-LF.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
575 (process-send-string nntp-server-process (concat cmd "\n"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
576 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
577
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
578 (defun nntp-send-region-to-server (begin end)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
579 "Send current buffer region (from BEGIN to END) to news server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
580 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
581 ;; We have to work in the buffer associated with NNTP server
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
582 ;; process because of NEmacs hack.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
583 (copy-to-buffer nntp-server-buffer begin end)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
584 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
585 (setq begin (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
586 (setq end (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
587 ;; `process-send-region' does not work if text to be sent is very
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
588 ;; large. I don't know maximum size of text sent correctly.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
589 (let ((last nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
590 (size 100)) ;Size of text sent at once.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
591 (save-restriction
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
592 (narrow-to-region begin end)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
593 (goto-char begin)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
594 (while (not (eobp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
595 ;;(setq last (min end (+ (point) size)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
596 ;; NEmacs gets confused if character at `last' is Kanji.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
597 (setq last (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
598 (goto-char (min end (+ (point) size)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
599 (or (eobp) (forward-char 1)) ;Adjust point
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
600 (point)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
601 (process-send-region nntp-server-process (point) last)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
602 ;; I don't know whether the next codes solve the known
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
603 ;; problem of communication error of GNU Emacs.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
604 (accept-process-output)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
605 ;;(sit-for 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
606 (goto-char last)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
607 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
608 ;; We cannot erase buffer, because reply may be received.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
609 (delete-region begin end)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
610 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
611
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
612 (defun nntp-open-server-internal (host &optional service)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
613 "Open connection to news server on HOST by SERVICE (default is nntp)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
614 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
615 ;; Use TCP/IP stream emulation package if needed.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
616 (or (fboundp 'open-network-stream)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
617 (require 'tcp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
618 ;; Initialize communication buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
619 (setq nntp-server-buffer (get-buffer-create " *nntpd*"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
620 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
621 (buffer-flush-undo (current-buffer))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
622 (erase-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
623 (kill-all-local-variables)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
624 (setq case-fold-search t) ;Should ignore case.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
625 (setq nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
626 (open-network-stream "nntpd" (current-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
627 host (or service "nntp")))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
628 (setq nntp-server-name host)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
629 ;; It is possible to change kanji-fileio-code in this hook.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
630 (run-hooks 'nntp-server-hook)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
631 ;; Return the server process.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
632 nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
633 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
634
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
635 (defun nntp-close-server-internal ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
636 "Close connection to news server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
637 (if nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
638 (delete-process nntp-server-process))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
639 (if nntp-server-buffer
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
640 (kill-buffer nntp-server-buffer))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
641 (setq nntp-server-buffer nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
642 (setq nntp-server-process nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
643
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
644 (defun nntp-accept-response ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
645 "Read response of server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
646 It is well-known that the communication speed will be much improved by
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
647 defining this function as macro."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
648 ;; To deal with server process exiting before
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
649 ;; accept-process-output is called.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
650 ;; Suggested by Jason Venner <jason@violet.berkeley.edu>.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
651 ;; This is a copy of `nntp-default-sentinel'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
652 (or (memq (process-status nntp-server-process) '(open run))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
653 (error "NNTP: Connection closed."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
654 (if nntp-buggy-select
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
655 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
656 ;; We cannot use `accept-process-output'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
657 ;; Fujitsu UTS requires messages during sleep-for. I don't know why.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
658 (message "NNTP: Reading...")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
659 (sleep-for 1)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
660 (message ""))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
661 (condition-case errorcode
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
662 (accept-process-output nntp-server-process)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
663 (error
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
664 (cond ((string-equal "select error: Invalid argument" (nth 1 errorcode))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
665 ;; Ignore select error.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
666 nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
667 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
668 (t
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
669 (signal (car errorcode) (cdr errorcode))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
670 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
671 ))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 232
diff changeset
672
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 232
diff changeset
673 (provide 'nntp)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 232
diff changeset
674
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
675 ;;; nntp.el ends here