strings.lisp - clic - Clic is an command line interactive client for gopher written in Common LISP
 (HTM) git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
       strings.lisp (4082B)
       ---
            1 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
            2 ;;; $Header: /usr/local/cvsrep/flexi-streams/strings.lisp,v 1.34 2008/05/26 10:55:08 edi Exp $
            3 
            4 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
            5 
            6 ;;; Redistribution and use in source and binary forms, with or without
            7 ;;; modification, are permitted provided that the following conditions
            8 ;;; are met:
            9 
           10 ;;;   * Redistributions of source code must retain the above copyright
           11 ;;;     notice, this list of conditions and the following disclaimer.
           12 
           13 ;;;   * Redistributions in binary form must reproduce the above
           14 ;;;     copyright notice, this list of conditions and the following
           15 ;;;     disclaimer in the documentation and/or other materials
           16 ;;;     provided with the distribution.
           17 
           18 ;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
           19 ;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
           20 ;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
           21 ;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
           22 ;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
           23 ;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
           24 ;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
           25 ;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
           26 ;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
           27 ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
           28 ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
           29 
           30 (in-package :flexi-streams)
           31 
           32 (defun string-to-octets (string &key
           33                                 (external-format :latin1)
           34                                 (start 0) (end (length string)))
           35   "Converts the Lisp string STRING from START to END to an array of
           36 octets corresponding to the external format designated by
           37 EXTERNAL-FORMAT.
           38 
           39 In spite of the name, STRING can be any sequence of characters, but
           40 the function is optimized for strings."
           41   (declare #.*standard-optimize-settings*)
           42   (setq external-format (maybe-convert-external-format external-format))
           43   ;; the external format knows how to do it...
           44   (string-to-octets* external-format string start end))
           45 
           46 (defun octets-to-string (sequence &key
           47                                   (external-format :latin1)
           48                                   (start 0) (end (length sequence)))
           49   "Converts the Lisp sequence SEQUENCE of octets from START to END to
           50 a string using the external format designated by EXTERNAL-FORMAT.
           51 
           52 This function is optimized for the case of SEQUENCE being a vector.
           53 Don't use lists if you're in a hurry."
           54   (declare #.*standard-optimize-settings*)
           55   (declare (fixnum start end))
           56   (setq external-format (maybe-convert-external-format external-format))
           57   ;; the external format knows how to do it...
           58   (octets-to-string* external-format sequence start end))
           59 
           60 (defun octet-length (string &key (external-format :latin1) (start 0) (end (length string)))
           61   "Returns the length of the substring of STRING from START to END in
           62 octets if encoded using the external format EXTERNAL-FORMAT.
           63 
           64 In spite of the name, STRING can be any sequence of characters, but
           65 the function is optimized for strings."
           66   (declare #.*standard-optimize-settings*)
           67   (declare (fixnum start end))
           68   (setq external-format (maybe-convert-external-format external-format))
           69   (compute-number-of-octets external-format string start end))
           70 
           71 (defun char-length (sequence &key (external-format :latin1) (start 0) (end (length sequence)))
           72   "Kind of the inverse of OCTET-LENGTH.  Returns the length of the
           73 subsequence \(of octets) of SEQUENCE from START to END in characters
           74 if decoded using the external format EXTERNAL-FORMAT.  Note that this
           75 function doesn't check for the validity of the data in SEQUENCE.
           76 
           77 This function is optimized for the case of SEQUENCE being a vector.
           78 Don't use lists if you're in a hurry."
           79   (declare #.*standard-optimize-settings*)
           80   (declare (fixnum start end))
           81   (setq external-format (maybe-convert-external-format external-format))
           82   (compute-number-of-chars external-format sequence start end))