Function: yenc-decode-region
yenc-decode-region is an autoloaded, interactive and byte-compiled
function defined in yenc.el.gz.
Signature
(yenc-decode-region START END)
Documentation
Yenc decode region between START and END using an internal decoder.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/mail/yenc.el.gz
;;;###autoload
(defun yenc-decode-region (start end)
"Yenc decode region between START and END using an internal decoder."
(interactive "r")
(let (work-buffer)
(unwind-protect
(save-excursion
(goto-char start)
(when (re-search-forward yenc-begin-line end t)
(let ((first (match-end 0))
(header-alist (yenc-parse-line (match-string 0)))
bytes last footer-alist char)
(when (re-search-forward "^=ypart.*$" end t)
(setq first (match-end 0)))
(when (re-search-forward "^=yend.*$" end t)
(setq last (match-beginning 0))
(setq footer-alist (yenc-parse-line (match-string 0)))
(setq work-buffer (generate-new-buffer " *yenc-work*"))
(with-current-buffer work-buffer
(set-buffer-multibyte nil))
(while (< first last)
(setq char (char-after first))
(cond ((or (eq char ?\r)
(eq char ?\n)))
((eq char ?=)
(setq char (char-after (incf first)))
(with-current-buffer work-buffer
(insert-char (mod (- char 106) 256) 1)))
(t
(with-current-buffer work-buffer
;;(insert-char (mod (- char 42) 256) 1)
(insert-char (aref yenc-decoding-vector char) 1))))
(incf first))
(setq bytes (buffer-size work-buffer))
(unless (and (= (cdr (assq 'size header-alist)) bytes)
(= (cdr (assq 'size footer-alist)) bytes))
(message "Warning: Size mismatch while decoding."))
(goto-char start)
(delete-region start end)
(insert-buffer-substring work-buffer)))))
(and work-buffer (kill-buffer work-buffer)))))