;;; uudecode.el -- elisp native uudecode
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Copyright (c) 1998,99 Free Software Foundation, Inc.
;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; $Revision: 5.3 $
-;; Keywords: uudecode
+;; Keywords: uudecode news
-;; This file is not part of GNU Emacs, but the same permissions
-;; apply.
+;; This file is a part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
(defvar uudecode-temporary-file-directory
(cond ((fboundp 'temp-directory) (temp-directory))
((boundp 'temporary-file-directory) temporary-file-directory)
- ("/tmp/")))
+ ("/tmp")))
;;;###autoload
(defun uudecode-decode-region-external (start end &optional file-name)
If FILE-NAME is non-nil, save the result to FILE-NAME."
(interactive "r\nP")
- (let ((cbuf (current-buffer)) tempfile firstline work-buffer status)
+ (let ((cbuf (current-buffer)) tempfile firstline work-buffer status)
(save-excursion
(goto-char start)
(when (re-search-forward uudecode-begin-line nil t)
(setq firstline (point))
(cond ((null file-name))
((stringp file-name))
- (t
- (setq file-name (read-file-name "File to Name:"
- nil nil nil
+ (t
+ (setq file-name (read-file-name "File to Name:"
+ nil nil nil
(match-string 1)))))
- (setq tempfile (expand-file-name
- (or file-name (concat uudecode-temporary-file-directory
- (make-temp-name "uu")))))
+ (setq tempfile (if file-name
+ (expand-file-name file-name)
+ (make-temp-name
+ ;; /tmp/uu...
+ (expand-file-name
+ "uu" uudecode-temporary-file-directory))))
(let ((cdir default-directory) default-process-coding-system)
(unwind-protect
(progn
- (set-buffer (setq work-buffer
+ (set-buffer (setq work-buffer
(generate-new-buffer " *uudecode-work*")))
(buffer-disable-undo work-buffer)
(insert "begin 600 " (file-name-nondirectory tempfile) "\n")
(apply 'call-process-region
(point-min)
(point-max)
- uudecode-decoder-program
+ uudecode-decoder-program
nil
nil
nil
(insert-file-contents-literally tempfile)))
(message "Can not uudecode")))
(and work-buffer (kill-buffer work-buffer))
- (condition-case ()
- (or file-name (delete-file tempfile))
- (error))
- )))
+ (ignore-errors (or file-name (delete-file tempfile))))))
(if (string-match "XEmacs" emacs-version)
(defalias 'uudecode-insert-char 'insert-char)
(when (re-search-forward uudecode-begin-line nil t)
(cond ((null file-name))
((stringp file-name))
- (t
- (setq file-name (expand-file-name
- (read-file-name "File to Name:"
- nil nil nil
+ (t
+ (setq file-name (expand-file-name
+ (read-file-name "File to Name:"
+ nil nil nil
(match-string 1))))))
(setq work-buffer (generate-new-buffer " *uudecode-work*"))
(buffer-disable-undo work-buffer)
(cond
((> (skip-chars-forward uudecode-alphabet end) 0)
(setq lim (point))
- (setq remain
+ (setq remain
(logand (- (char-int (char-after inputpos)) 32) 63))
(setq inputpos (1+ inputpos))
(if (= remain 0) (setq done t))
(while (and (< inputpos lim) (> remain 0))
- (setq bits (+ bits
- (logand
- (-
+ (setq bits (+ bits
+ (logand
+ (-
(char-int (char-after inputpos)) 32) 63)))
(if (/= counter 0) (setq remain (1- remain)))
(setq counter (1+ counter)
inputpos (1+ inputpos))
(cond ((= counter 4)
- (uudecode-insert-char
+ (uudecode-insert-char
(lsh bits -16) 1 nil work-buffer)
- (uudecode-insert-char
+ (uudecode-insert-char
(logand (lsh bits -8) 255) 1 nil work-buffer)
(uudecode-insert-char (logand bits 255) 1 nil
- work-buffer)
+ work-buffer)
(setq bits 0 counter 0))
(t (setq bits (lsh bits 6)))))))
(cond
- (done)
- ((> 0 remain)
- (error "uucode line ends unexpectly")
- (setq done t))
- ((and (= (point) end) (not done))
- ;(error "uucode ends unexpectly")
- (setq done t))
- ((= counter 3)
- (uudecode-insert-char (logand (lsh bits -16) 255) 1 nil
- work-buffer)
- (uudecode-insert-char (logand (lsh bits -8) 255) 1 nil
- work-buffer))
- ((= counter 2)
- (uudecode-insert-char (logand (lsh bits -10) 255) 1 nil
- work-buffer)))
+ (done)
+ ((> 0 remain)
+ (error "uucode line ends unexpectly")
+ (setq done t))
+ ((and (= (point) end) (not done))
+ ;;(error "uucode ends unexpectly")
+ (setq done t))
+ ((= counter 3)
+ (uudecode-insert-char (logand (lsh bits -16) 255) 1 nil
+ work-buffer)
+ (uudecode-insert-char (logand (lsh bits -8) 255) 1 nil
+ work-buffer))
+ ((= counter 2)
+ (uudecode-insert-char (logand (lsh bits -10) 255) 1 nil
+ work-buffer)))
(skip-chars-forward non-data-chars end))
(if file-name
(save-excursion