
(provide (quote mhspool))

(require (quote nntp))

(defvar mhspool-list-directory-switches (quote ("-R")) "\
*Switches for nntp-request-list to pass to `ls' for gettting file lists.
One entry should appear on one line. You may need to add `-1' option.")

(defconst mhspool-version "MHSPOOL 1.5" "\
Version numbers of this version of MHSPOOL.")

(defvar mhspool-spool-directory "~/Mail" "\
Private mail directory.")

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

(defun mhspool-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 	!?s 	!eb#e`\"eb#p #_ ebceb# ` `)\"
 
eb# ` `)\" eb# ` `)\"	 	eb# ` `)\" eb#` `)\"!҉eb#.` `)\"2eb#C#U` `)\"Y
	&BAT!V\"!\"\"\"& !V!!.)" [nntp-server-buffer file nil number sequence count headers article subject message-id from xref lines date references mhspool-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: " "
In-Reply-To: " vector numberp zerop % 20 message "MHSPOOL: %d%% of headers received." / * 100 "MHSPOOL: 100%% of headers received." nreverse] 43))

(defun mhspool-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 " !\"+ !!O\"\"! . ҉;H ;H !H  \"T \"v  \"e \"v ?p ؉v \"	*" [host status nil mhspool-spool-directory nntp-status-string service t getenv "NNTPSERVER" string-match ":\\(.+\\)$" file-name-as-directory expand-file-name match-beginning 1 match-end "~/" system-name "" file-directory-p string-equal mhspool-open-server-internal format "No such directory: %s.  Goodbye." "NNTP server is not specified." "MHSPOOL: cannot talk to %s."] 18))

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

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

(defun mhspool-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 mhspool-status-message nil "\
Return server status response as string." (byte-code "" [nntp-status-string] 1))

(defun mhspool-request-article (id) "\
Select article by message ID (or number)." (byte-code "	
!P; ! !? !))" [file mhspool-current-directory id prin1-to-string file-exists-p file-directory-p mhspool-find-file] 5))

(defun mhspool-request-body (id) "\
Select article body by message ID (or number)." (byte-code "! 	qeb# e`\")" [id nntp-server-buffer nil t mhspool-request-article search-forward "

" delete-region] 5))

(defun mhspool-request-head (id) "\
Select article head by message ID (or number)." (byte-code "! 	qeb# `Sd\")" [id nntp-server-buffer nil t mhspool-request-article search-forward "

" delete-region] 5))

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

(defun mhspool-request-group (group) "\
Select news GROUP." (byte-code "!! !% #!!% #!" [group mhspool-current-directory file-directory-p mhspool-article-pathname mhspool-replace-chars-in-string 46 47] 11))

(defun mhspool-request-list nil "\
List valid newsgoups." (byte-code "\"!!Q!q q 	C\"&eb# !!\"#!m?` !? !w !!\"!
B!W 
 K
\"K
\"$\"8 !q -)" [newsgroup nil articles directory mhspool-spool-directory folder-regexp buffer nntp-server-buffer t mhspool-list-directory-switches file-name-as-directory expand-file-name "^" regexp-quote "\\(.+\\):$" get-buffer-create " *GNUS file listing*" erase-buffer apply call-process "ls" append re-search-forward mhspool-replace-chars-in-string buffer-substring match-beginning 1 match-end 47 46 forward-line looking-at "^$" "^[0-9]+$" string-to-int 0 princ format "%s %d %d n
" max min kill-buffer buffer-size] 33))

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

(defun mhspool-request-next nil "\
Advance current article pointer." (byte-code "!" [error "MHSPOOL: NEXT is not implemented."] 2))

(defun mhspool-request-post nil "\
Post a new news in current buffer." (byte-code "" [nntp-status-string nil "MHSPOOL: what do you mean post?"] 2))

(defun mhspool-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 "MHSPOOL: cannot talk to %s." get-buffer-create " *nntpd*" buffer-flush-undo erase-buffer kill-all-local-variables run-hooks nntp-server-hook] 9))

(defun mhspool-close-server-internal nil "\
Close connection to news server." (byte-code " !" [nntp-server-buffer nil nntp-server-process kill-buffer] 3))

(defun mhspool-find-file (file) "\
Insert FILE in server buffer safely." (byte-code "q ď" [nntp-server-buffer erase-buffer nil (byte-code "!eb# `d\"\" !" [file nil t insert-file-contents search-forward "

" string-equal buffer-substring "" delete-char 1] 6) ((file-error (byte-code "" [nil] 1)))] 4))

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

(defun mhspool-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))
