+(mel-define-method-function (mime-encode-region start end (nil "x-uue"))
+ 'uuencode-external-encode-region)
+(mel-define-method-function (mime-decode-region start end (nil "x-uue"))
+ 'uuencode-external-decode-region)
+
+
+;;; @ encoder/decoder for string
+;;;
+
+(mel-define-method mime-encode-string (string (nil "x-uue"))
+ (with-temp-buffer
+ (insert string)
+ (uuencode-external-encode-region (point-min)(point-max))
+ (buffer-string)))
+
+(mel-define-method mime-decode-string (string (nil "x-uue"))
+ (with-temp-buffer
+ (insert string)
+ (uuencode-external-decode-region (point-min)(point-max))
+ (buffer-string)))
+
+
+;;; @ uuencode encoder/decoder for file
+;;;
+
+(mel-define-method mime-insert-encoded-file (filename (nil "x-uue"))
+ "Insert file encoded by unofficial uuencode format.
+This function uses external uuencode encoder which is specified by
+variable `uuencode-external-encoder'."
+ (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
+ (nil "x-uue"))
+ "Decode and write current region encoded by uuencode into FILENAME.
+START and END are buffer positions."
+ (interactive "*r\nFWrite decoded region to file: ")
+ (save-excursion
+ (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))))