T-gnus 6.14.6; synch up with Gnus v5.8.8.
[elisp/gnus.git-] / lisp / binhex.el
index 200d571..0147921 100644 (file)
@@ -1,8 +1,7 @@
 ;;; binhex.el -- elisp native binhex decode
-;; Copyright (c) 1998 Free Software Foundation, Inc.
+;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Create Date: Oct 1, 1998
 ;; Keywords: binhex news
 
 ;; This file is part of GNU Emacs.
 
 (eval-when-compile (require 'cl))
 
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
+(eval-and-compile
+  (defalias 'binhex-char-int
+    (if (fboundp 'char-int)
+       'char-int
+      'identity)))
 
 (defvar binhex-decoder-program "hexbin"
   "*Non-nil value should be a string that names a uu decoder.
@@ -67,7 +69,7 @@ input and write the converted data to its standard output.")
        ((boundp 'temporary-file-directory) temporary-file-directory)
        ("/tmp/")))
 
-(if (string-match "XEmacs" emacs-version)
+(if (featurep 'xemacs)
     (defalias 'binhex-insert-char 'insert-char)
   (defun binhex-insert-char (char &optional count ignored buffer)
     (if (or (null buffer) (eq buffer (current-buffer)))
@@ -132,14 +134,14 @@ input and write the converted data to its standard output.")
 (defun binhex-string-big-endian (string)
   (let ((ret 0) (i 0) (len (length string)))
     (while (< i len)
-      (setq ret (+ (lsh ret 8) (char-int (aref string i)))
+      (setq ret (+ (lsh ret 8) (binhex-char-int (aref string i)))
            i (1+ i)))
     ret))
 
 (defun binhex-string-little-endian (string)
   (let ((ret 0) (i 0) (shift 0) (len (length string)))
     (while (< i len)
-      (setq ret (+ ret (lsh (char-int (aref string i)) shift))
+      (setq ret (+ ret (lsh (binhex-char-int (aref string i)) shift))
            i (1+ i)
            shift (+ shift 8)))
     ret))
@@ -149,11 +151,11 @@ input and write the converted data to its standard output.")
     (let ((pos (point-min)) len)
       (vector
        (prog1
-          (setq len (char-int (char-after pos)))
+          (setq len (binhex-char-int (char-after pos)))
         (setq pos (1+ pos)))
        (buffer-substring pos (setq pos (+ pos len)))
        (prog1
-          (setq len (char-int (char-after pos)))
+          (setq len (binhex-char-int (char-after pos)))
         (setq pos (1+ pos)))
        (buffer-substring pos (setq pos (+ pos 4)))
        (buffer-substring pos (setq pos (+ pos 4)))
@@ -198,15 +200,8 @@ If HEADER-ONLY is non-nil only decode header and return filename."
        (save-excursion
          (goto-char start)
          (when (re-search-forward binhex-begin-line end t)
-           (if (and (not (string-match "XEmacs\\|Lucid" emacs-version))
-                    (boundp 'enable-multibyte-characters))
-               (let ((multibyte
-                      (default-value 'enable-multibyte-characters)))
-                 (setq-default enable-multibyte-characters nil)
-                 (setq work-buffer (generate-new-buffer " *binhex-work*"))
-                 (setq-default enable-multibyte-characters multibyte))
+           (let (default-enable-multibyte-characters)
              (setq work-buffer (generate-new-buffer " *binhex-work*")))
-           (buffer-disable-undo work-buffer)
            (beginning-of-line)
            (setq bits 0 counter 0)
            (while tmp
@@ -267,9 +262,9 @@ If HEADER-ONLY is non-nil only decode header and return filename."
   "Binhex decode region between START and END using external decoder."
   (interactive "r")
   (let ((cbuf (current-buffer)) firstline work-buffer status
-       (file-name (concat binhex-temporary-file-directory
-                          (binhex-decode-region start end t)
-                          ".data")))
+       (file-name (expand-file-name
+                   (concat (binhex-decode-region start end t) ".data")
+                   binhex-temporary-file-directory)))
     (save-excursion
       (goto-char start)
       (when (re-search-forward binhex-begin-line nil t)