mel of MEL 3.1.
[elisp/flim.git] / mel-u.el
diff --git a/mel-u.el b/mel-u.el
new file mode 100644 (file)
index 0000000..d91c797
--- /dev/null
+++ b/mel-u.el
@@ -0,0 +1,90 @@
+;;;
+;;; $Id: mel-u.el,v 2.0 1995/10/30 06:01:29 morioka Exp $
+;;;
+
+;;; @ variables
+;;;
+
+(defvar uuencode-external-encoder '("uuencode" "-")
+  "*list of uuencode encoder program name and its arguments.")
+
+(defvar uuencode-external-decoder '("uudecode")
+  "*list of uuencode decoder program name and its arguments.")
+(list "sh" "-c" (format "(cd %s; uudecode)" mime/tmp-dir))
+
+(defvar mime/tmp-dir (or (getenv "TM_TMP_DIR") "/tmp/"))
+
+
+;;; @ external encoder
+;;;
+
+(cond ((boundp 'MULE)
+       (define-program-coding-system
+        nil (car uuencode-external-encoder) *noconv*)
+       (define-program-coding-system
+        nil (car uuencode-external-decoder) *noconv*)
+       )
+      ((boundp 'NEMACS)
+       (define-program-kanji-code
+        nil (car uuencode-external-encoder) 0)
+       (define-program-kanji-code
+        nil (car uuencode-external-decoder) 0)
+       ))
+
+(defun uuencode-external-encode-region (beg end)
+  (interactive "*r")
+  (save-excursion
+    (let ((selective-display nil) ;Disable ^M to nl translation.
+         (mc-flag nil)      ;Mule
+         (kanji-flag nil))  ;NEmacs
+      (apply (function call-process-region)
+            beg end (car uuencode-external-encoder)
+            t t nil (cdr uuencode-external-encoder))
+      )))
+
+(defun uuencode-external-decode-region (beg end)
+  (interactive "*r")
+  (save-excursion
+    (let ((selective-display nil) ;Disable ^M to nl translation.
+         (mc-flag nil)         ;Mule
+         (kanji-flag nil)      ;NEmacs
+         (filename (save-excursion
+                     (save-restriction
+                       (narrow-to-region beg end)
+                       (goto-char beg)
+                       (if (re-search-forward "^begin [0-9]+ " nil t)
+                           (if (looking-at ".+$")
+                               (buffer-substring (match-beginning 0)
+                                                 (match-end 0)
+                                                 )
+                             )))))
+         )
+      (if filename
+         (progn
+           (funcall (function call-process-region)
+                    beg end "sh"
+                    t t nil
+                    "-c" (format "(cd %s; %s)"
+                                 mime/tmp-dir
+                                 (mapconcat (function identity)
+                                            uuencode-external-decoder
+                                            " ")
+                                 ))
+           (setq filename (expand-file-name filename mime/tmp-dir))
+           (let ((file-coding-system-for-read
+                  (if (boundp 'MULE) *noconv*))        ; Mule
+                 kanji-fileio-code)                    ; NEmacs
+             (insert-file-contents filename)
+             )
+           (delete-file filename)
+           ))
+      )))
+
+(defalias 'uuencode-encode-region 'uuencode-external-encode-region)
+(defalias 'uuencode-decode-region 'uuencode-external-decode-region)
+
+
+;;; @ end
+;;;
+
+(provide 'mel-u)