mel of MEL 3.2.
[elisp/flim.git] / mel-u.el
1 ;;;
2 ;;; $Id: mel-u.el,v 2.1 1995/11/01 06:03:14 morioka Exp $
3 ;;;
4
5 ;;; @ variables
6 ;;;
7
8 (defvar mime/tmp-dir (or (getenv "TM_TMP_DIR") "/tmp/"))
9
10 (defvar uuencode-external-encoder '("uuencode" "-")
11   "*list of uuencode encoder program name and its arguments.")
12
13 (defvar uuencode-external-decoder
14   (list "sh" "-c" (format "(cd %s; uudecode)" mime/tmp-dir))
15   "*list of uuencode decoder program name and its arguments.")
16
17
18 ;;; @ external encoder
19 ;;;
20
21 (cond ((boundp 'MULE)
22        (define-program-coding-system
23          nil (car uuencode-external-encoder) *noconv*)
24        (define-program-coding-system
25          nil (car uuencode-external-decoder) *noconv*)
26        )
27       ((boundp 'NEMACS)
28        (define-program-kanji-code
29          nil (car uuencode-external-encoder) 0)
30        (define-program-kanji-code
31          nil (car uuencode-external-decoder) 0)
32        ))
33
34 (defun uuencode-external-encode-region (beg end)
35   (interactive "*r")
36   (save-excursion
37     (let ((selective-display nil) ;Disable ^M to nl translation.
38           (mc-flag nil)      ;Mule
39           (kanji-flag nil))  ;NEmacs
40       (apply (function call-process-region)
41              beg end (car uuencode-external-encoder)
42              t t nil (cdr uuencode-external-encoder))
43       )))
44
45 (defun uuencode-external-decode-region (beg end)
46   (interactive "*r")
47   (save-excursion
48     (let ((selective-display nil) ;Disable ^M to nl translation.
49           (mc-flag nil)         ;Mule
50           (kanji-flag nil)      ;NEmacs
51           (filename (save-excursion
52                       (save-restriction
53                         (narrow-to-region beg end)
54                         (goto-char beg)
55                         (if (re-search-forward "^begin [0-9]+ " nil t)
56                             (if (looking-at ".+$")
57                                 (buffer-substring (match-beginning 0)
58                                                   (match-end 0)
59                                                   )
60                               )))))
61           )
62       (if filename
63           (progn
64             (apply (function call-process-region)
65                    beg end (car uuencode-external-decoder)
66                    t t nil (cdr uuencode-external-decoder))
67             (setq filename (expand-file-name filename mime/tmp-dir))
68             (let ((file-coding-system-for-read
69                    (if (boundp 'MULE) *noconv*))        ; Mule
70                   kanji-fileio-code)                    ; NEmacs
71               (insert-file-contents filename)
72               )
73             (delete-file filename)
74             ))
75       )))
76
77 (defalias 'uuencode-encode-region 'uuencode-external-encode-region)
78 (defalias 'uuencode-decode-region 'uuencode-external-decode-region)
79
80
81 ;;; @ end
82 ;;;
83
84 (provide 'mel-u)