X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=strings.lisp;h=35a177e9715371cc38eea292eddb09c05d380518;hb=6007424292e8d78977bc90bcc29a20d4451cfa41;hp=88ebbdfbabb2fdf4dc692ad60523654de0adece2;hpb=e408a6bd2a959f734733cd26a8c8098051fc46f6;p=kmrcl.git diff --git a/strings.lisp b/strings.lisp index 88ebbdf..35a177e 100644 --- a/strings.lisp +++ b/strings.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: strings.lisp,v 1.4 2002/12/26 11:57:07 kevin Exp $ +;;;; $Id: strings.lisp,v 1.7 2003/02/07 14:21:55 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -66,12 +66,10 @@ #-excl (defun list-to-delimited-string (list &optional (separator #\space)) - (let ((output (when list (format nil "~A" (car list))))) - (dolist (obj (rest list)) - (setq output (concatenate 'string output - (format nil "~A" separator) - (format nil "~A" obj)))) - output)) + (if (consp list) + (let ((fmt (format nil "~~A~~{~A~~A~~}" separator))) + (format nil fmt (first list) (rest list))) + "")) (defun string-invert (str) "Invert case of a string" @@ -188,7 +186,7 @@ list of characters and replacement strings." (declare (fixnum oldpos)) (if (char= repl-char (schar string oldpos)) (dotimes (repl-pos repl-length) - (declare (fixnumm repl-pos)) + (declare (fixnum repl-pos)) (setf (schar new-string newpos) (schar repl-str repl-pos)) (incf newpos)) (progn @@ -197,3 +195,31 @@ list of characters and replacement strings." new-string))))) + +(defun make-usb8-array (len) + (make-array len :adjustable nil + :fill-pointer nil + :element-type '(unsigned-byte 8))) + +(defun usb8-array-to-string (vec) + (let* ((len (length vec)) + (str (make-string len))) + (declare (fixnum len) + (simple-string str) + (optimize (speed 3))) + (dotimes (i len) + (declare (fixnum i)) + (setf (schar str i) (code-char (aref vec i)))) + str)) + +(defun string-to-usb8-array (str) + (let* ((len (length str)) + (vec (make-usb8-array len))) + (declare (fixnum len) + (type (array fixnum (*)) vec) + (optimize (speed 3))) + (dotimes (i len) + (declare (fixnum i)) + (setf (aref vec i) (char-code (schar str i)))) + vec)) +