;;; Boston, MA 02111-1307, USA.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(require 'poe)
+
;; For non-MULE
(if (not (fboundp 'char-int))
(fset 'char-int 'identity))
(defun base64-run-command-on-region (start end output-buffer command
&rest arg-list)
- (let ((tempfile nil) status errstring)
+ (let ((tempfile nil) status errstring default-process-coding-system)
(unwind-protect
(progn
(setq tempfile (make-temp-name "base64"))
(setq errstring (buffer-string))
(kill-buffer nil)
(cons status errstring)))))
- (condition-case ()
- (delete-file tempfile)
- (error nil)))))
-
-(defun base64-insert-char (char &optional count ignored buffer)
- (condition-case nil
- (progn
- (insert-char char count ignored buffer)
- (fset 'base64-insert-char 'insert-char))
- (wrong-number-of-arguments
- (fset 'base64-insert-char 'base64-xemacs-insert-char)
- (base64-insert-char char count ignored buffer))))
+ (ignore-errors
+ (delete-file tempfile)))))
-(defun base64-xemacs-insert-char (char &optional count ignored buffer)
- (if (and buffer (eq buffer (current-buffer)))
- (insert-char char count)
- (save-excursion
- (set-buffer buffer)
- (insert-char char count))))
+(if (string-match "XEmacs" emacs-version)
+ (defalias 'base64-insert-char 'insert-char)
+ (defun base64-insert-char (char &optional count ignored buffer)
+ (if (or (null buffer) (eq buffer (current-buffer)))
+ (insert-char char count)
+ (with-current-buffer buffer
+ (insert-char char count)))))
-(defun base64-decode-region (start end)
+(defun-maybe base64-decode-region (start end)
(interactive "r")
- (message "Decoding base64...")
+ ;;(message "Decoding base64...")
(let ((work-buffer nil)
(done nil)
(counter 0)
((> (skip-chars-forward base64-alphabet end) 0)
(setq lim (point))
(while (< inputpos lim)
- (setq bits (+ bits
+ (setq bits (+ bits
(aref base64-alphabet-decoding-vector
(char-int (char-after inputpos)))))
(setq counter (1+ counter)
(error "at least %d bits missing at end of base64 encoding"
(* (- 4 counter) 6)))
(setq done t))
- ((= (char-after (point)) ?=)
+ ((eq (char-after (point)) ?=)
(setq done t)
(cond ((= counter 1)
(error "at least 2 bits missing at end of base64 encoding"))
(insert-buffer-substring work-buffer)
(delete-region (point) end))
(and work-buffer (kill-buffer work-buffer))))
- (message "Decoding base64... done"))
+ ;;(message "Decoding base64... done")
+ )
-(defun base64-encode-region (start end)
+(defun-maybe base64-encode-region (start end &optional no-line-break)
(interactive "r")
(message "Encoding base64...")
(let ((work-buffer nil)
(aref alphabet (logand bits 63))
1 nil work-buffer)
(setq cols (+ cols 4))
- (cond ((= cols 72)
+ (cond ((and (= cols 72)
+ (not no-line-break))
(base64-insert-char ?\n 1 nil work-buffer)
(setq cols 0)))
(setq bits 0 counter 0))
(base64-insert-char (aref alphabet (logand (lsh bits -6) 63))
1 nil work-buffer)
(base64-insert-char ?= 1 nil work-buffer)))
- (if (> cols 0)
- (base64-insert-char ?\n 1 nil work-buffer)))
+ (if (and (> cols 0)
+ (not no-line-break))
+ (base64-insert-char ?\n 1 nil work-buffer)))
(or (markerp end) (setq end (set-marker (make-marker) end)))
(goto-char start)
(insert-buffer-substring work-buffer)
(delete-region (point-max) (point))
(prog1
(buffer-string)
- (kill-buffer (current-buffer)))))
+ (kill-buffer (current-buffer)))))
+
+(fset 'base64-decode-string 'base64-decode)
(provide 'base64)