X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fuudecode.el;h=d4bf89ffaa162d6a538a5fdb4f3fb61f36a91e6a;hb=d84b26f66f1975b52a15ca2caf5f10da5103e42e;hp=53ed51d803e1a689e26c5a4e20e083438f75b325;hpb=75880493a6a9dad9607a4002d4c6ab2895b110ca;p=gnus diff --git a/lisp/uudecode.el b/lisp/uudecode.el index 53ed51d80..d4bf89ffa 100644 --- a/lisp/uudecode.el +++ b/lisp/uudecode.el @@ -1,17 +1,16 @@ ;;; uudecode.el -- elisp native uudecode -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1998-2012 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: uudecode news ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; 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 -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,9 +18,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -35,23 +32,28 @@ 'char-int 'identity))) +(defgroup uudecode nil + "Decoding of uuencoded data." + :group 'mail + :group 'news) + (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." :type 'string - :group 'gnus-extract) + :group 'uudecode) (defcustom uudecode-decoder-switches nil "*List of command line flags passed to `uudecode-decoder-program'." - :group 'gnus-extract + :group 'uudecode :type '(repeat string)) (defcustom uudecode-use-external (executable-find uudecode-decoder-program) "*Use external uudecode program." :version "22.1" - :group 'gnus-extract + :group 'uudecode :type 'boolean) (defconst uudecode-alphabet "\040-\140") @@ -98,7 +100,11 @@ used is specified by `uudecode-decoder-program'." (make-temp-name "uu") uudecode-temporary-file-directory)))) (let ((cdir default-directory) - default-process-coding-system) + (default-process-coding-system + (if (featurep 'xemacs) + ;; In XEmacs, `nil' is not a valid coding system. + '(binary . binary) + nil))) (unwind-protect (with-temp-buffer (insert "begin 600 " (file-name-nondirectory tempfile) "\n") @@ -122,6 +128,20 @@ used is specified by `uudecode-decoder-program'." (message "Can not uudecode"))) (ignore-errors (or file-name (delete-file tempfile)))))) +(eval-and-compile + (defalias 'uudecode-string-to-multibyte + (cond + ((featurep 'xemacs) + 'identity) + ((fboundp 'string-to-multibyte) + 'string-to-multibyte) + (t + (lambda (string) + "Return a multibyte string with the same individual chars as string." + (mapconcat + (lambda (ch) (string-as-multibyte (char-to-string ch))) + string "")))))) + ;;;###autoload (defun uudecode-decode-region-internal (start end &optional file-name) "Uudecode region between START and END without using an external program. @@ -177,10 +197,10 @@ If FILE-NAME is non-nil, save the result to FILE-NAME." (cond (done) ((> 0 remain) - (error "uucode line ends unexpectly") + (error "uucode line ends unexpectedly") (setq done t)) ((and (= (point) end) (not done)) - ;;(error "uucode ends unexpectly") + ;;(error "uucode ends unexpectedly") (setq done t)) ((= counter 3) (setq result (cons @@ -194,12 +214,15 @@ If FILE-NAME is non-nil, save the result to FILE-NAME." result)))) (skip-chars-forward non-data-chars end)) (if file-name - (let (default-enable-multibyte-characters) - (with-temp-file file-name - (insert (apply 'concat (nreverse result))))) + (with-temp-file file-name + (unless (featurep 'xemacs) (set-buffer-multibyte nil)) + (insert (apply 'concat (nreverse result)))) (or (markerp end) (setq end (set-marker (make-marker) end))) (goto-char start) - (insert (apply 'concat (nreverse result))) + (if enable-multibyte-characters + (dolist (x (nreverse result)) + (insert (uudecode-string-to-multibyte x))) + (insert (apply 'concat (nreverse result)))) (delete-region (point) end)))))) ;;;###autoload @@ -212,5 +235,4 @@ If FILE-NAME is non-nil, save the result to FILE-NAME." (provide 'uudecode) -;;; arch-tag: e1f09ed5-62b4-4677-9f13-4e81c4fe8ce3 ;;; uudecode.el ends here