X-Git-Url: http://git.kpe.io/?p=cl-base64.git;a=blobdiff_plain;f=src.lisp;h=48cde5b6d64fadd243644eb0f4ba93d28e255386;hp=017783b47cb4d703c52f749f94090286a6f85076;hb=1b3ea245129cdd7b33b2fc28da5fda8300c31a97;hpb=4b686492f846fd2a66fa336cf02c3c13ba6e2ac3 diff --git a/src.lisp b/src.lisp index 017783b..48cde5b 100644 --- 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