+(defvar mime/tmp-dir (or (getenv "TM_TMP_DIR") "/tmp/"))
+
+(defvar mime/use-multi-frame
+ (and (>= emacs-major-version 19) window-system))
+
+(defvar mime/find-file-function
+ (if mime/use-multi-frame
+ (function find-file-other-frame)
+ (function find-file)
+ ))
+
+
+;;; @ constants
+;;;
+
+(defconst mime/output-buffer-name "*MIME-out*")
+(defconst mime/temp-buffer-name " *MIME-temp*")
+
+
+;;; @ charset and encoding
+;;;
+
+(defvar mime-charset-type-list
+ '((us-ascii 7 nil)
+ (iso-8859-1 8 "quoted-printable")
+ (iso-8859-2 8 "quoted-printable")
+ (iso-8859-3 8 "quoted-printable")
+ (iso-8859-4 8 "quoted-printable")
+ (iso-8859-5 8 "quoted-printable")
+ (koi8-r 8 "quoted-printable")
+ (iso-8859-7 8 "quoted-printable")
+ (iso-8859-8 8 "quoted-printable")
+ (iso-8859-9 8 "quoted-printable")
+ (iso-2022-jp 7 "base64")
+ (iso-2022-kr 7 "base64")
+ (euc-kr 8 "base64")
+ (big5 8 "base64")
+ (iso-2022-jp-2 7 "base64")
+ (iso-2022-int-1 7 "base64")
+ ))
+
+(defun mime/encoding-name (transfer-level &optional not-omit)
+ (cond ((> transfer-level 8) "binary")
+ ((= transfer-level 8) "8bit")
+ (not-omit "7bit")
+ ))
+
+(defun mime/make-charset-default-encoding-alist (transfer-level)
+ (mapcar (function
+ (lambda (charset-type)
+ (let ((charset (upcase (symbol-name (car charset-type))))
+ (type (nth 1 charset-type))
+ (encoding (nth 2 charset-type))
+ )
+ (if (<= type transfer-level)
+ (cons charset (mime/encoding-name type))
+ (cons charset encoding)
+ ))))
+ mime-charset-type-list))
+
+
+;;; @ coding-system
+;;;
+
+(defvar mime/charset-coding-system-alist
+ (let* (csl
+ (f (if (and running-xemacs-20 (featurep 'mule))
+ (progn
+ (setq csl (coding-system-list))
+ (function
+ (lambda (a cell)
+ (if (memq (cdr cell) csl)
+ (cons cell a)
+ a))))
+ (function
+ (lambda (a cell)
+ (let ((sym (symbol-concat "*" (cdr cell) "*")))
+ (if (boundp sym)
+ (cons (cons (car cell) (symbol-value sym)) a)
+ a))))
+ )))
+ (foldr f nil
+ '(("ISO-2022-JP" . junet)
+ ("ISO-2022-KR" . iso-2022-kr)
+ ("EUC-KR" . euc-kr)
+ ("GB2312" . euc-china)
+ ("ISO-8859-1" . ctext)
+ ("ISO-8859-2" . iso-8859-2)
+ ("ISO-8859-3" . iso-8859-3)
+ ("ISO-8859-4" . iso-8859-4)
+ ("ISO-8859-5" . iso-8859-5)
+ ("KOI8-R" . koi8)
+ ("ISO-8859-7" . iso-8859-7)
+ ("ISO-8859-8" . iso-8859-8)
+ ("ISO-8859-9" . iso-8859-9)
+ ("ISO-2022-JP-2" . iso-2022-ss2-7)
+ ("X-ISO-2022-JP-2" . iso-2022-ss2-7)
+ ("ISO-2022-INT-1" . iso-2022-int-1)
+ ("SHIFT_JIS" . sjis)
+ ("X-SHIFTJIS" . sjis)
+ ("BIG5" . big5)
+ ))))
+
+(defvar mime/default-coding-system *ctext*)
+
+(defun mime-charset-decode-string (str charset)
+ (let ((cs (assoc charset mime/charset-coding-system-alist)))
+ (if cs
+ (character-decode-string str (cdr cs))
+ )))
+
+(defun mime-charset-decode-region (beg end charset &optional encoding)
+ (let ((ct
+ (if (stringp charset)
+ (cdr (assoc (upcase charset) mime/charset-coding-system-alist))
+ mime/default-coding-system)))
+ (if ct
+ (character-decode-region beg end ct)
+ )))