r3731: *** empty log message ***
[cl-base64.git] / src.lisp
index 017783b..48cde5b 100644 (file)
--- a/src.lisp
+++ b/src.lisp
@@ -14,7 +14,7 @@
 ;;;; Copyright 2002-2003 Kevin M. Rosenberg
 ;;;; Permission to use with BSD-style license included in the COPYING file
 ;;;;
-;;;; $Id: src.lisp,v 1.4 2003/01/04 08:27:41 kevin Exp $
+;;;; $Id: src.lisp,v 1.6 2003/01/04 13:43:27 kevin Exp $
 
 (defpackage #:base64
   (:use #:cl)
@@ -98,8 +98,7 @@ with a #\Newline."
     (let* ((string-length (length string))
           (complete-group-count (truncate string-length 3))
           (remainder (nth-value 1 (truncate string-length 3)))
-          (padded-length (+ remainder
-                            (* 4 complete-group-count)))
+          (padded-length (* 4 (truncate (+ string-length 2) 3)))
           (num-lines (if (plusp columns)
                          (truncate (+ padded-length (1- columns)) columns)
                          0))
@@ -148,51 +147,46 @@ with a #\Newline."
                           (the fixnum
                             (logand #x3f
                                     (the fixnum (ash svalue -6))))))
-                  (output-char pad))
+                (output-char pad))
               (if (> chars 3)
                   (output-char
                    (schar encode-table
                           (the fixnum
                             (logand #x3f svalue))))
-                  (output-char pad))))
+                (output-char pad))))
        (do ((igroup 0 (1+ igroup))
-            (isource 0 (+ isource 3))
-            (svalue 0))
+            (isource 0 (+ isource 3)))
            ((= igroup complete-group-count)
-            (case remainder
-              (2
-               (setq svalue
-                     (the fixnum
-                       (+
-                        (the fixnum
-                          (ash (char-code (the character
-                                            (char string isource))) 16))
-                        (the fixnum
-                          (ash (char-code (the character
-                                            (char string (1+ isource)))) 8)))))
-               (output-group svalue 3))
-              (1
-               (setq svalue
-                     (the fixnum
-                       (char-code (the character
-                                    (char string isource)))))
-               (output-group svalue 2)))
+            (cond
+              ((= remainder 2)
+               (output-group
+                (the fixnum
+                  (+
+                   (the fixnum
+                     (ash (char-code (the character
+                                       (char string isource))) 16))
+                   (the fixnum
+                     (ash (char-code (the character
+                                       (char string (1+ isource)))) 8))))
+                3))
+              ((= remainder 1)
+               (output-group
+                (the fixnum
+                  (ash (char-code (the character (char string isource))) 16))
+                2)))
             result)
-         (declare (fixnum igroup isource svalue))
-         (setq svalue
-               (the fixnum
-                 (+
-                  (the fixnum
-                    (ash (char-code (the character
-                                      (char string isource))) 16))
-                  (the fixnum
-                    (ash (char-code (the character
-                                      (char string (1+ isource)))) 8))
-                  (the fixnum
-                    (char-code (the character
-                                 (char string (+ 2 isource))))))))
-         (output-group svalue 4))))))
-  
+         (declare (fixnum igroup isource))
+         (output-group 
+          (the fixnum
+            (+
+             (the fixnum
+               (ash (char-code (the character
+                                 (char string isource))) 16))
+             (the fixnum
+               (ash (char-code (the character (char string (1+ isource)))) 8))
+             (the fixnum
+               (char-code (the character (char string (+ 2 isource)))))))
+          4))))))
   
 (defun integer-to-base64 (input &key (uri nil) (columns 0) (stream nil))
   (if stream