update.
[elisp/flim.git] / mel-u.el
index 5a756aa..c5f3fe1 100644 (file)
--- a/mel-u.el
+++ b/mel-u.el
@@ -1,8 +1,8 @@
-;;; mel-u.el: uuencode encoder/decoder for GNU Emacs
+;;; mel-u.el --- uuencode encoder/decoder.
 
 
-;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
+;; Copyright (C) 1995,1996,1997,1998,1999 Free Software Foundation, Inc.
 
 
-;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Author: MORIOKA Tomohiko <tomo@m17n.org>
 ;; Created: 1995/10/25
 ;; Keywords: uuencode
 
 ;; Created: 1995/10/25
 ;; Keywords: uuencode
 
 ;; General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
 ;; 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Code:
 
 
 ;;; Code:
 
-(require 'emu)
 (require 'mime-def)
 (require 'mime-def)
+(require 'path-util)
 
 
 (mel-define-backend "x-uue")
 
 
 (mel-define-backend "x-uue")
@@ -51,17 +51,17 @@ This function uses external uuencode encoder which is specified by
 variable `uuencode-external-encoder'."
   (interactive "*r")
   (save-excursion
 variable `uuencode-external-encoder'."
   (interactive "*r")
   (save-excursion
-    (as-binary-process (apply (function call-process-region)
-                             start end (car uuencode-external-encoder)
-                             t t nil (cdr uuencode-external-encoder))
-                      )
+    (let ((coding-system-for-read  'binary)
+         (coding-system-for-write 'binary))
+      (apply (function call-process-region)
+            start end (car uuencode-external-encoder)
+            t t nil
+            (cdr uuencode-external-encoder)))
     ;; for OS/2
     ;;   regularize line break code
     (goto-char (point-min))
     (while (re-search-forward "\r$" nil t)
     ;; for OS/2
     ;;   regularize line break code
     (goto-char (point-min))
     (while (re-search-forward "\r$" nil t)
-      (replace-match "")
-      )
-    ))
+      (replace-match ""))))
 
 (defun uuencode-external-decode-region (start end)
   "Decode current region by unofficial uuencode format.
 
 (defun uuencode-external-decode-region (start end)
   "Decode current region by unofficial uuencode format.
@@ -69,32 +69,29 @@ This function uses external uuencode decoder which is specified by
 variable `uuencode-external-decoder'."
   (interactive "*r")
   (save-excursion
 variable `uuencode-external-decoder'."
   (interactive "*r")
   (save-excursion
-    (let ((filename (save-excursion
-                     (save-restriction
-                       (narrow-to-region start end)
-                       (goto-char start)
-                       (if (re-search-forward "^begin [0-9]+ " nil t)
-                           (if (looking-at ".+$")
-                               (buffer-substring (match-beginning 0)
-                                                 (match-end 0))
-                             )))))
-         (default-directory mime-temp-directory))
-      (if filename
-         (as-binary-process
-          (apply (function call-process-region)
-                 start end (car uuencode-external-decoder)
-                 t nil nil (cdr uuencode-external-decoder))
-          (as-binary-input-file (insert-file-contents filename))
-          ;; The previous line causes the buffer to be made read-only, I
-          ;; do not pretend to understand the control flow leading to this
-          ;; but suspect it has something to do with image-mode. -slb
-          ;;   Use `inhibit-read-only' to avoid to force
-          ;;   buffer-read-only nil. - tomo.
-          (let ((inhibit-read-only t))
-            (delete-file filename)
-            )
-          ))
-      )))
+    (let ((filename (make-temp-file "x-uue")))
+      (save-excursion
+       (save-restriction
+         (set-mark end)
+         (narrow-to-region start end)
+         (goto-char start)
+         (when (and (re-search-forward "^begin [0-9]+ " nil t)
+                    (looking-at ".+$"))
+           (replace-match filename)
+           (let ((coding-system-for-read  'binary)
+                 (coding-system-for-write 'binary))
+             (apply (function call-process-region)
+                    start (mark) (car uuencode-external-decoder)
+                    t nil nil
+                    (cdr uuencode-external-decoder)))
+           (insert-file-contents filename)
+           ;; The previous line causes the buffer to be made read-only, I
+           ;; do not pretend to understand the control flow leading to this
+           ;; but suspect it has something to do with image-mode. -slb
+           ;;  Use `inhibit-read-only' to avoid to force
+           ;;  buffer-read-only nil. - tomo.
+           (let ((inhibit-read-only t))
+             (delete-file filename))))))))
 
 (mel-define-method-function (mime-encode-region start end (nil "x-uue"))
                            'uuencode-external-encode-region)
 
 (mel-define-method-function (mime-encode-region start end (nil "x-uue"))
                            'uuencode-external-encode-region)
@@ -125,37 +122,37 @@ variable `uuencode-external-decoder'."
   "Insert file encoded by unofficial uuencode format.
 This function uses external uuencode encoder which is specified by
 variable `uuencode-external-encoder'."
   "Insert file encoded by unofficial uuencode format.
 This function uses external uuencode encoder which is specified by
 variable `uuencode-external-encoder'."
-  (interactive (list (read-file-name "Insert encoded file: ")))
-  (call-process (car uuencode-external-encoder) filename t nil
-               (file-name-nondirectory filename))
-  )
+  (interactive "*fInsert encoded file: ")
+  (call-process (car uuencode-external-encoder)
+               filename t nil
+               (file-name-nondirectory filename)))
 
 (mel-define-method mime-write-decoded-region (start end filename
 
 (mel-define-method mime-write-decoded-region (start end filename
-                                                   (nil "x-gzip64"))
+                                                   (nil "x-uue"))
   "Decode and write current region encoded by uuencode into FILENAME.
 START and END are buffer positions."
   "Decode and write current region encoded by uuencode into FILENAME.
 START and END are buffer positions."
-  (interactive
-   (list (region-beginning) (region-end)
-        (read-file-name "Write decoded region to file: ")))
+  (interactive "*r\nFWrite decoded region to file: ")
   (save-excursion
   (save-excursion
-    (let ((file (save-excursion
-                 (save-restriction
-                   (narrow-to-region start end)
-                   (goto-char start)
-                   (if (re-search-forward "^begin [0-9]+ " nil t)
-                       (if (looking-at ".+$")
-                           (buffer-substring (match-beginning 0)
-                                             (match-end 0))
-                         )))))
-         (default-directory mime-temp-directory))
-      (if file
-         (as-binary-process
-          (apply (function call-process-region)
-                 start end (car uuencode-external-decoder)
-                 nil nil nil (cdr uuencode-external-decoder))
-          (rename-file file filename 'overwrites)
-          )))))
-
+    (let ((clone-buf (clone-buffer " *x-uue*"))
+         (file (make-temp-file "x-uue")))
+      (save-excursion
+       (save-restriction
+         (set-buffer clone-buf)
+         (narrow-to-region start end)
+         (setq buffer-read-only nil)
+         (goto-char start)
+         (when (and (re-search-forward "^begin [0-9]+ " nil t)
+                  (looking-at ".+$"))
+           (replace-match file)
+           (let ((coding-system-for-read  'binary)
+                 (coding-system-for-write 'binary))
+             (apply (function call-process-region)
+                    (point-min) (point-max) (car uuencode-external-decoder)
+                    nil nil nil
+                    (cdr uuencode-external-decoder))
+             (rename-file file filename 'overwrites)
+             (message (concat "Wrote " filename))))))
+      (kill-buffer clone-buf))))
 
 ;;; @ end
 ;;;
 
 ;;; @ end
 ;;;
@@ -164,4 +161,4 @@ START and END are buffer positions."
 
 (mel-define-backend "x-uuencode" ("x-uue"))
 
 
 (mel-define-backend "x-uuencode" ("x-uue"))
 
-;;; mel-u.el ends here
+;;; mel-u.el ends here.