
(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 #_ ebceb# ` `)\"
 
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 "! 	qeb# 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 "! 	qeb# `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#qed	& !\"  \"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 " \"? \"!	qp!  Éŉ!)" [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))
