update.
[elisp/flim.git] / mel-b.el
index 9a50910..e9a382a 100644 (file)
--- a/mel-b.el
+++ b/mel-b.el
@@ -149,8 +149,7 @@ external decoder is called.")
                            ))
       )))
 
-(defun base64-decode-string (string)
-  "Decode STRING which is encoded in base64, and return the result."
+(defun base64-internal-decode-string (string)
   (let ((len (length string))
        (i 0)
        dest)
@@ -210,7 +209,7 @@ external decoder is called.")
     (let ((str (buffer-substring beg end)))
       (delete-region beg end)
       (goto-char beg)
-      (insert (base64-decode-string str)))))
+      (insert (base64-internal-decode-string str)))))
 
 (defun base64-external-encode-region (beg end)
   (save-excursion
@@ -235,6 +234,17 @@ external decoder is called.")
                              t t nil (cdr base64-external-decoder))
                       )))
 
+(defun base64-external-decode-string (string)
+  (with-temp-buffer
+    (insert string)
+    (as-binary-process (apply (function call-process-region)
+                             (point-min) (point-max)
+                             (car base64-external-decoder)
+                             t t nil (cdr base64-external-decoder))
+                      )
+    (buffer-string)))
+
+
 (defun base64-encode-region (start end)
   "Encode current region by base64.
 START and END are buffer positions.
@@ -265,6 +275,20 @@ metamail or XEmacs package)."
     (base64-internal-decode-region start end)
     ))
 
+(defun base64-decode-string (string)
+  "Decode STRING which is encoded in base64, and return the result.
+This function calls internal base64 decoder if size of STRING is
+smaller than `base64-internal-decoding-limit', otherwise it calls
+external base64 decoder specified by `base64-external-decoder'.  In
+this case, you must install the program (maybe mmencode included in
+metamail or XEmacs package)."
+  (interactive "r")
+  (if (and base64-internal-decoding-limit
+          (> (length string) base64-internal-decoding-limit))
+      (base64-external-decode-string string)
+    (base64-internal-decode-string string)
+    ))
+
 
 ;;; @ base64 encoder/decoder for file
 ;;;