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))