Function: gnus-uu-post-encoded

gnus-uu-post-encoded is a byte-compiled function defined in gnus-uu.el.gz.

Signature

(gnus-uu-post-encoded FILE-NAME &optional THREADED)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-uu.el.gz
;; Posts the article and all of the encoded file.
(defun gnus-uu-post-encoded (file-name &optional threaded)
  (let ((send-buffer-name "*uuencode send buffer*")
	(encoded-buffer-name "*encoded buffer*")
	(top-string "[ cut here %s (%s %d/%d) %s gnus-uu ]")
	(separator (concat mail-header-separator "\n\n"))
	uubuf length parts header i end beg
	beg-line minlen post-buf whole-len beg-binary end-binary)

    (setq post-buf (current-buffer))

    (goto-char (point-min))
    (when (not (re-search-forward
		(if gnus-uu-post-separate-description
		    (concat "^" (regexp-quote gnus-uu-post-binary-separator)
			    "$")
		  (concat "^" (regexp-quote mail-header-separator) "$"))
		nil t))
      (error "Internal error: No binary/header separator"))
    (beginning-of-line)
    (forward-line 1)
    (setq beg-binary (point))
    (setq end-binary (point-max))

    (with-current-buffer
	(setq uubuf (gnus-get-buffer-create encoded-buffer-name))
      (erase-buffer)
      (insert-buffer-substring post-buf beg-binary end-binary)
      (goto-char (point-min))
      (setq length (count-lines (point-min) (point-max)))
      (setq parts (/ length gnus-uu-post-length))
      (unless (< (% length gnus-uu-post-length) 4)
        (incf parts)))

    (when gnus-uu-post-separate-description
      (forward-line -1))
    (delete-region (point) (point-max))

    (goto-char (point-min))
    (re-search-forward
     (concat "^" (regexp-quote mail-header-separator) "$") nil t)
    (setq header (buffer-substring (point-min) (line-beginning-position)))

    (goto-char (point-min))
    (when gnus-uu-post-separate-description
      (when (re-search-forward "^Subject: " nil t)
	(end-of-line)
	(insert (format " (0/%d)" parts)))
      (save-excursion
	(message-send))
      (setq gnus-uu-post-message-id (message-fetch-field "message-id")))

    (save-excursion
      (setq i 1)
      (setq beg 1)
      (while (not (> i parts))
	(set-buffer (gnus-get-buffer-create send-buffer-name))
	(erase-buffer)
	(insert header)
	(when (and threaded gnus-uu-post-message-id)
	  (insert "References: " gnus-uu-post-message-id "\n"))
	(insert separator)
	(setq whole-len
	      (- 62 (length (format top-string "" file-name i parts ""))))
	(when (> 1 (setq minlen (/ whole-len 2)))
	  (setq minlen 1))
	(setq
	 beg-line
	 (format top-string
		 (make-string minlen ?-)
		 file-name i parts
		 (make-string
		  (if (evenp whole-len) (1- minlen) minlen) ?-)))

	(goto-char (point-min))
	(when (re-search-forward "^Subject: " nil t)
	  (end-of-line)
	  (insert (format " (%d/%d)" i parts)))

	(goto-char (point-max))
	(with-current-buffer uubuf
	  (goto-char beg)
	  (if (= i parts)
	      (goto-char (point-max))
	    (forward-line gnus-uu-post-length))
	  (when (and (= (1+ i) parts) (< (count-lines (point) (point-max)) 4))
	    (forward-line -4))
	  (setq end (point)))
	(insert-buffer-substring uubuf beg end)
	(insert beg-line "\n")
	(setq beg end)
        (incf i)
	(goto-char (point-min))
	(re-search-forward
	 (concat "^" (regexp-quote mail-header-separator) "$") nil t)
	(beginning-of-line)
	(forward-line 2)
	(when (re-search-forward
	       (concat "^" (regexp-quote gnus-uu-post-binary-separator) "$")
	       nil t)
	  (replace-match "")
	  (forward-line 1))
	(insert beg-line)
	(insert "\n")
	(let (message-sent-message-via)
	  (save-excursion
	    (message-send))
	  (setq gnus-uu-post-message-id
		(concat (message-fetch-field "references") " "
			(message-fetch-field "message-id"))))))

    (gnus-kill-buffer send-buffer-name)
    (gnus-kill-buffer encoded-buffer-name)

    (when (not gnus-uu-post-separate-description)
      (set-buffer-modified-p nil)
      (bury-buffer))))