;;; 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.4 $
-;; 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
;;; Code:
(if (not (fboundp 'char-int))
- (fset 'char-int 'identity))
+ (defalias 'char-int 'identity))
-(defvar uudecode-decoder-program "uudecode"
+(defcustom uudecode-decoder-program "uudecode"
"*Non-nil value should be a string that names a uu decoder.
The program should expect to read uu data on its standard
-input and write the converted data to its standard output.")
+input and write the converted data to its standard output."
+ :type 'string
+ :group 'gnus-extract)
-(defvar uudecode-decoder-switches nil
- "*List of command line flags passed to the command named by uudecode-decoder-program.")
+(defcustom uudecode-decoder-switches nil
+ "*List of command line flags passed to `uudecode-decoder-program'."
+ :group 'gnus-extract
+ :type '(repeat string))
(defconst uudecode-alphabet "\040-\140")
(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)
- "uudecode region between START and END with external decoder.
+ "Uudecode region between START and END with external decoder.
If FILE-NAME is non-nil, save the result to FILE-NAME."
(interactive "r\nP")
(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
(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)
+(if (featurep 'xemacs)
(defalias 'uudecode-insert-char 'insert-char)
(defun uudecode-insert-char (char &optional count ignored buffer)
(if (or (null buffer) (eq buffer (current-buffer)))
;;;###autoload
(defun uudecode-decode-region (start end &optional file-name)
- "uudecode region between START and END.
+ "Uudecode region between START and END.
If FILE-NAME is non-nil, save the result to FILE-NAME."
(interactive "r\nP")
(let ((work-buffer nil)
(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