annotate lisp/w3/base64.el @ 80:1ce6082ce73f r20-0b90

Import from CVS: tag r20-0b90
author cvs
date Mon, 13 Aug 2007 09:06:37 +0200
parents 9ee227acff29
children 0293115a14e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1 ;;; base64.el,v --- Base64 encoding functions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2 ;; Author: wmperry
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
3 ;; Created: 1996/04/22 15:08:08
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
4 ;; Version: 1.7
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
5 ;; Keywords: extensions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
6
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
7 ;;; LCD Archive Entry:
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
8 ;;; base64.el|William M. Perry|wmperry@cs.indiana.edu|
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
9 ;;; Package for encoding/decoding base64 data (MIME)|
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
10 ;;; 1996/04/22 15:08:08|1.7|Location Undetermined
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
11 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
12
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
13 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
14 ;;; Copyright (c) 1996 Free Software Foundation, Inc.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
15 ;;; Copyright (c) 1995, 1996 by William M. Perry (wmperry@cs.indiana.edu)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
16 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
17 ;;; This file is not part of GNU Emacs, but the same permissions apply.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
18 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
19 ;;; GNU Emacs is free software; you can redistribute it and/or modify
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
20 ;;; it under the terms of the GNU General Public License as published by
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
21 ;;; the Free Software Foundation; either version 2, or (at your option)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
22 ;;; any later version.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
23 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
24 ;;; GNU Emacs is distributed in the hope that it will be useful,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
25 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
26 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
27 ;;; GNU General Public License for more details.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
28 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
29 ;;; You should have received a copy of the GNU General Public License
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
30 ;;; along with GNU Emacs; see the file COPYING. If not, write to the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
31 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
32 ;;; Boston, MA 02111-1307, USA.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
33 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
34
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
35 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
36 ;;; Base 64 encoding functions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
37 ;;; This code was converted to lisp code by me from the C code in
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
38 ;;; ftp://cs.utk.edu/pub/MIME/b64encode.c
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
40
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
41 (defvar base64-code-string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
42 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
43 "Character set used for base64 decoding")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
44
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
45 (defvar base64-decode-vector
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
46 (let ((vec (make-vector 256 nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
47 (i 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
48 (case-fold-search nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
49 (while (< i 256)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
50 (aset vec i (string-match (regexp-quote (char-to-string i))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
51 base64-code-string))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
52 (setq i (1+ i)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
53 vec))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
54
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
55 (defvar base64-max-line-length 64)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
56
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
57 ;(defun b0 (x) (aref base64-code-string (logand (lsh x -18) 63)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
58 ;(defun b1 (x) (aref base64-code-string (logand (lsh x -12) 63)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
59 ;(defun b2 (x) (aref base64-code-string (logand (lsh x -6) 63)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
60 ;(defun b3 (x) (aref base64-code-string (logand x 63)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
61
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
62 (defmacro b0 (x) (` (aref base64-code-string (logand (lsh (, x) -18) 63))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
63 (defmacro b1 (x) (` (aref base64-code-string (logand (lsh (, x) -12) 63))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
64 (defmacro b2 (x) (` (aref base64-code-string (logand (lsh (, x) -6) 63))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
65 (defmacro b3 (x) (` (aref base64-code-string (logand (, x) 63))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
66
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
67 (defun base64-encode (str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
68 "Do base64 encoding on string STR and return the encoded string.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
69 This code was converted to lisp code by me from the C code in
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
70 ftp://cs.utk.edu/pub/MIME/b64encode.c. Returns a string that is
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
71 broken into `base64-max-line-length' byte lines."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
72 (or str (setq str (buffer-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
73 (let ((x (base64-encode-internal str))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
74 (y ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
75 (while (> (length x) base64-max-line-length)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
76 (setq y (concat y (substring x 0 base64-max-line-length) "\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
77 x (substring x base64-max-line-length nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
78 (setq y (concat y x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
79 y))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
80
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
81 (defun base64-encode-internal (str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
82 "Do base64 encoding on string STR and return the encoded string.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
83 This code was converted to lisp code by me from the C code in
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
84 ftp://cs.utk.edu/pub/MIME/b64encode.c. Returns the entire string,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
85 not broken up into `base64-max-line-length' byte lines."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
86 (let (
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
87 (word 0) ; The word to translate
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
88 w1 w2 w3
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
89 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
90 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
91 ((> (length str) 3)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
92 (concat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
93 (base64-encode-internal (substring str 0 3))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
94 (base64-encode-internal (substring str 3 nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
95 ((= (length str) 3)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
96 (setq w1 (aref str 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
97 w2 (aref str 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
98 w3 (aref str 2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
99 word (logior
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
100 (lsh (logand w1 255) 16)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
101 (lsh (logand w2 255) 8)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
102 (logand w3 255)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
103 (format "%c%c%c%c" (b0 word) (b1 word) (b2 word) (b3 word)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
104 ((= (length str) 2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
105 (setq w1 (aref str 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
106 w2 (aref str 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
107 word (logior
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
108 (lsh (logand w1 255) 16)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
109 (lsh (logand w2 255) 8)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
110 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
111 (format "%c%c%c=" (b0 word) (b1 word) (b2 word)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
112 ((= (length str) 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
113 (setq w1 (aref str 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
114 word (logior
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
115 (lsh (logand w1 255) 16)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
116 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
117 (format "%c%c==" (b0 word) (b1 word)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
118 (t ""))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
119
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
120 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
121 ;;; Base64 decoding functions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
122 ;;; Most of the decoding code is courtesy Francesco Potorti`
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
123 ;;; <F.Potorti@cnuce.cnr.it>
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
124 ;;; this is much faster than my original code - thanks!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
125 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
126 (defun base64-decode-region (beg end)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
127 (interactive "r")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
128 (barf-if-buffer-read-only)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
129 (let
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
130 ((exchange (= (point) beg))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
131 (endchars 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
132 (list) (code))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
133 (goto-char beg)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
134 (while (< (point) end)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
135 (setq list (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
136 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
137 (lambda (c)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
138 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
139 ((aref base64-decode-vector c))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
140 ((char-equal c ?=)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
141 (setq endchars (1+ endchars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
142 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
143 (nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
144 (error
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
145 "Character %c does not match Mime base64 coding" c)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
146 (buffer-substring (point) (+ (point) 4))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
147 (setq code (+ (nth 3 list) (lsh (nth 2 list) 6)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
148 (lsh (nth 1 list) 12) (lsh (car list) 18)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
149 (delete-char 4)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
150 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
151 ((zerop endchars)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
152 (insert (% (lsh code -16) 256) (% (lsh code -8) 256) (% code 256)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
153 ((= endchars 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
154 (insert (% (lsh code -16) 256) (% (lsh code -8) 256))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
155 (setq end (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
156 ((= endchars 2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
157 (insert (% (lsh code -16) 256))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
158 (setq end (point))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
159 (if (char-equal (following-char) ?\n)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
160 (progn (delete-char 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
161 (setq end (- end 2)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
162 (setq end (1- end))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
163 ))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
164 ; (if exchange
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
165 ; (exchange-point-and-mark))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
166
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
167 (defun base64-decode (st &optional nd)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
168 "Do base64 decoding on string STR and return the original string.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
169 If given buffer positions, destructively decodes that area of the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
170 current buffer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
171 (let ((replace-p nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
172 (retval nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
173 (if (stringp st)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
174 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
175 (setq st (prog1
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
176 (buffer-substring st (or nd (point-max)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
177 (delete-region st (or nd (point-max))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
178 replace-p t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
179 (setq retval
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
180 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
181 (set-buffer (get-buffer-create " *b64decode*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
182 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
183 (insert st)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
184 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
185 (while (re-search-forward "\r*\n" nil t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
186 (replace-match ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
187 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
188 (base64-decode-region (point-min) (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
189 (buffer-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
190 (if replace-p (insert retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
191 retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
192
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
193 (provide 'base64)