
(provide (quote nnspool))

(require (quote nntp))

(defvar nnspool-inews-program news-inews-program "\
*Program to post news.")

(defvar nnspool-inews-switches (quote ("-h")) "\
*Switches for nnspool-request-post to pass to `inews' for posting news.")

(defvar nnspool-spool-directory news-path "\
*Local news spool directory.")

(defvar nnspool-active-file "/usr/lib/news/active" "\
*Local news active file.")

(defvar nnspool-history-file "/usr/lib/news/history" "\
*Local news history file.")

(defconst nnspool-version "NNSPOOL 1.10" "\
Version numbers of this version of NNSPOOL.")

(defvar nnspool-current-directory nil "\
Current news group directory.")

(defun nnspool-retrieve-headers (sequence) "\
Return list of article headers specified by SEQUENCE of article id.
The format of list is
 `([NUMBER SUBJECT FROM XREF LINES DATE MESSAGE-ID REFERENCES] ...)'.
Reader macros for the vector are defined as `nntp-header-FIELD'.
Writer macros for the vector are defined as `nntp-set-header-FIELD'.
News group must be selected before calling me." (byte-code "ŠqˆÂGÒÂÒÂÂÂÂÒÂÂ
	…›@‰ˆÓ!P‰ˆÔ	!…D Õ	!?…kÖ ˆ×	!ˆebˆØÙÂÚ#ˆÛe`\"ˆebˆÜÝÂÐ#…p ÞßÐÐ#ˆ‚_ ˆebˆàcˆebˆØáÂÐ#ƒ‘ â`Šã ˆ`)\"‰
‚• ä‰
ˆebˆØåÂÐ#ƒ° â`Šã ˆ`)\"‰‚´ æ‰ˆebˆØçÂÐ#ƒÏ â`Šã ˆ`)\"‰	‚Ó Â‰	ˆebˆØèÂÐ#ƒî â`Šã ˆ`)\"‰‚ò Â‰ˆebˆØéÂÐ#ƒêâ`Šã ˆ`)\"!‰‚Ò‰ˆebˆØëÂÐ#ƒ.â`Šã ˆ`)\"‰‚2Â‰ˆebˆØìÂÐ#ƒMâ`Šã ˆ`)\"‰‚QÂ‰ˆí
	&B‰ˆA‰ˆT‰ˆî!…—V…—ïðñ\"!…—òóôõö\"\"\"ˆ‚& ˆî!…­V…­ò÷!ˆø!.)‡" [nntp-server-buffer file nil number sequence count headers article subject message-id from xref lines date references nnspool-current-directory t nntp-large-newsgroup 0 prin1-to-string file-exists-p file-directory-p erase-buffer insert-file-contents search-forward "

" move narrow-to-region re-search-forward "\\(?
[ 	]+\\)+" replace-match " " "
" "
From: " buffer-substring end-of-line "(Unknown User)" "
Subject: " "(None)" "
Message-ID: " "
Date: " "
Lines: " string-to-int "
Xref: " "
References: " vector numberp zerop % 20 message "NNSPOOL: %d%% of headers received." / * 100 "NNSPOOL: 100%% of headers received." nreverse] 42))

(defun nnspool-open-server (host &optional service) "\
Open news server on HOST.
If HOST is nil, use value of environment variable `NNTPSERVER'.
If optional argument SERVICE is non-nil, open by the service name." (byte-code "† ÈÉ!ÂÊ‰ˆË!… Ì!… ÍÎ \"ƒ, Ï\"‰‚N ÍÎ \"ƒ= ÐÑ\"‰‚N ?ƒH Ò‰‚N ÐÓ\"‰ˆ	*‡" [host status nil nntp-status-string nnspool-spool-directory nnspool-active-file service t getenv "NNTPSERVER" "" file-directory-p file-exists-p string-equal system-name nnspool-open-server-internal format "%s has no news spool.  Goodbye." "NNTP server is not specified." "NNSPOOL: cannot talk to %s."] 12))

(defun nnspool-close-server nil "\
Close news server." (byte-code "À ‡" [nnspool-close-server-internal] 2))

(fset (quote nnspool-request-quit) (symbol-function (quote nnspool-close-server)))

(defun nnspool-server-opened nil "\
Return server process status, T or NIL.
If the stream is opened, return T, otherwise return NIL." (byte-code "… Á!‡" [nntp-server-buffer get-buffer] 2))

(defun nnspool-status-message nil "\
Return server status response as string." (byte-code "‡" [nntp-status-string] 1))

(defun nnspool-request-article (id) "\
Select article by message ID (or number)." (byte-code "	;ƒ Ã	!‚ 
Ä	!P;…  Å!…  Æ!?…( ŠÇ!))‡" [file id nnspool-current-directory nnspool-find-article-by-message-id prin1-to-string file-exists-p file-directory-p nnspool-find-file] 6))

(defun nnspool-request-body (id) "\
Select article body by message ID (or number)." (byte-code "Ä!… Š	qˆebˆÅÆÂÃ#… Çe`\"ˆÃ)‡" [id nntp-server-buffer nil t nnspool-request-article search-forward "

" delete-region] 5))

(defun nnspool-request-head (id) "\
Select article head by message ID (or number)." (byte-code "Ä!… Š	qˆebˆÅÆÂÃ#… Ç`Sd\"ˆÃ)‡" [id nntp-server-buffer nil t nnspool-request-article search-forward "

" delete-region] 5))

(defun nnspool-request-stat (id) "\
Select article by message ID (or number)." (byte-code "ÀÁ!‡" [error "NNSPOOL: STAT is not implemented."] 2))

(defun nnspool-request-group (group) "\
Select news GROUP." (byte-code "ÃÄ	ÅÆ#!Ç!… ‰)‡" [pathname group nnspool-current-directory nnspool-article-pathname nnspool-replace-chars-in-string 46 47 file-directory-p] 5))

(defun nnspool-request-list nil "\
List valid newsgoups." (byte-code "ŠÁ!)‡" [nnspool-active-file nnspool-find-file] 2))

(defun nnspool-request-last nil "\
Set current article pointer to the previous article
in the current news group." (byte-code "ÀÁ!‡" [error "NNSPOOL: LAST is not implemented."] 2))

(defun nnspool-request-next nil "\
Advance current article pointer." (byte-code "ÀÁ!‡" [error "NNSPOOL: NEXT is not implemented."] 2))

(defun nnspool-request-post nil "\
Post a new news in current buffer." (byte-code "ŠÆed#ˆqˆÇÈed	ÉÂÃ&ˆÊË !†\" ÌÍÎ \"ÏedÐÑÒ%ˆÎ ‰ˆÓ ˆ)‡" [nntp-server-buffer nnspool-inews-program t nil nnspool-inews-switches nntp-status-string copy-to-buffer apply call-process-region delete zerop buffer-size string-match "spooled" buffer-string subst-char-in-region 10 92 noundo erase-buffer] 13))

(defun nnspool-open-server-internal (host &optional service) "\
Open connection to news server on HOST by SERVICE (default is nntp)." (byte-code "ŠÇÈ \"?… ÉÊ\"ˆËÌ!‰ˆ	qˆÍp!ˆÎ ˆÏ ˆÃ‰ˆÅ‰ˆ‰ˆÐÑ!ˆÃ)‡" [host nntp-server-buffer case-fold-search t nntp-server-process nil nntp-server-name string-equal system-name error "NNSPOOL: cannot talk to %s." get-buffer-create " *nntpd*" buffer-flush-undo erase-buffer kill-all-local-variables run-hooks nntp-server-hook] 9))

(defun nnspool-close-server-internal nil "\
Close connection to news server." (byte-code "Ä!… ÅÄ!!ˆ	… Å	!ˆÂ‰ˆÂ‰‡" [nnspool-history-file nntp-server-buffer nil nntp-server-process get-file-buffer kill-buffer] 6))

(defun nnspool-find-article-by-message-id (id) "\
Return full pathname of an artilce identified by message-ID." (byte-code "ŠÇ	!ƒ q‚ ÈÉ!ˆÊ	!qˆÈË!)ˆdbˆÌÍÎ
!ÏQÃÄ#…J ÐÑÒ!ÓÒ!\"ÐÑÔ!ÓÔ!\"ÕÖ×Ø#!P*)‡" [buffer nnspool-history-file id nil t group number get-file-buffer message "Reading history file..." find-file-noselect "Reading history file... done" re-search-backward "^" regexp-quote "[ 	].*[ 	]\\([^ 	/]+\\)/\\([0-9]+\\)[ 	]*$" buffer-substring match-beginning 1 match-end 2 nnspool-article-pathname nnspool-replace-chars-in-string 46 47] 17))

(defun nnspool-find-file (file) "\
Insert FILE in server buffer safely." (byte-code "qˆÁ ˆÂÃÄ�‡" [nntp-server-buffer erase-buffer nil (byte-code "Â!ˆÁ‡" [file t insert-file-contents] 2) ((file-error (byte-code "À‡" [nil] 1)))] 4))

(defun nnspool-article-pathname (group) "\
Make pathname for GROUP." (byte-code "Â!	ÃQ‡" [nnspool-spool-directory group file-name-as-directory "/"] 4))

(defun nnspool-replace-chars-in-string (string from to) "\
Replace characters in STRING from FROM to TO." (byte-code "ÅÆOGÅ
	W…% 
HU… 
Iˆ
T‰ˆ‚
 ˆ+‡" [string len idx from to 0 nil] 4))
