Function: binhex-decode-region-external

binhex-decode-region-external is an autoloaded, interactive and byte-compiled function defined in binhex.el.gz.

Signature

(binhex-decode-region-external START END)

Documentation

Binhex decode region between START and END using external decoder.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/mail/binhex.el.gz
;;;###autoload
(defun binhex-decode-region-external (start end)
  "Binhex decode region between START and END using external decoder."
  (interactive "r")
  (let ((cbuf (current-buffer))
	work-buffer ;; firstline
	(file-name (expand-file-name
		    (concat (binhex-decode-region-internal start end t)
			    ".data")
		    temporary-file-directory)))
    (save-excursion
      (goto-char start)
      (when (re-search-forward binhex-begin-line nil t)
	(let ((cdir default-directory) default-process-coding-system)
	  (unwind-protect
	      (progn
		(set-buffer (setq work-buffer
				  (generate-new-buffer " *binhex-work*")))
		(buffer-disable-undo work-buffer)
		(insert-buffer-substring cbuf nil end) ;; firstline
		(cd temporary-file-directory)
		(apply #'call-process-region
		       (point-min)
		       (point-max)
		       binhex-decoder-program
		       nil
		       nil
		       nil
		       binhex-decoder-switches))
	    (cd cdir) (set-buffer cbuf)))
	(if (and file-name (file-exists-p file-name))
	    (progn
	      (goto-char start)
	      (delete-region start end)
	      (let (format-alist)
		(insert-file-contents-literally file-name)))
	  (error "Can not binhex")))
      (and work-buffer (kill-buffer work-buffer))
      (ignore-errors
	(if file-name (delete-file file-name))))))