Package COM.INFORMATIMAGO.COMMON-LISP.CESARUM.ASCII


Some ASCII code utilities, to process sequences of ASCII code bytes as
easily as strings.

Examples:

    (bytes= buffer #.(ascii-bytes "HELO ") :end1 (min 5 (length buffer)))
    (bytes= (read-ascii-line) #"HELO "     :end1 (min 5 (length buffer)))

License:

    AGPL3

    Copyright Pascal J. Bourguignon 2006 - 2015

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.
    If not, see <http://www.gnu.org/licenses/>
*ascii-characters*
variable
A string containing all the ASCII characters in lexical order.
Initial value: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
*hexadecimal-digits*
variable
A string contaiing the hexadecimal digits (lower case letters) in order.
Initial value: 0123456789abcdef
*newline*
variable
(OR (MEMBER :CRLF :CR :LF)
     (CONS (MEMBER :CRLF :CR :LF) (MEMBER :CRLF :CR :LF :ANY))
The encoding used for #newline for output and for input.
If it's a keyword, it's used for both output and input.
If it's a CONS cell, the CAR specifies the newline encoding for output
and the CDR specifies the newline encoding for input (it may be :ANY to
accept any of CR-LF, CR or LF; LF-CR would read as two newlines).
Initial value: CRLF
(ack)
function
ACKNOWLEDGE

    ACK is transmitted by a receiver as an affirmative response
    to the sender. The use of ACK is defined in ISO 1745.
ack
constant
ACKNOWLEDGE
Initial value: 6
(ascii-bytes string &key newline start end)
function
RETURN:   A byte vector containing the ASCII codes of the characters in
          the string.
          Only printable character and #newline are accepted in the string.
          #newline is translated to either CR+LF, CR, or LF according to the
          NEWLINE parameter.
NEWLINE:  (member :crlf :cr :lf) ; the default is *NEWLINE*.
(ascii-code ch)
function
RETURN:  The ASCII code of the character ch, or raise an error if the character
         has no ascii code.
         Only printable characters are accepted. No control code.
(ascii-control-code-p code)
function
RETURN:  Whether CODE is an ASCII control code.
(ascii-dispatch-macro stream sub-char argument)
function
DO:       Read a string and converts it to an ASCII byte sequence.
ARGUMENT: If NIL, #newline are encoded according to *NEWLINE*.
          If 0, #newline are encoded to CR-LF.
          If 1, #newline are encoded to LF.
          If 2, #newline are encoded to CR.
          Otherwise an error is issued.
SUB-CHAR: If it is #" then it's considered the start of the string,
          otherwise we expect to read a full string next.
          This allow to set dispatch macro characters for: #"abc" or #Y"abc"
EXAMPLES:
  (set-dispatch-macro-character ## #Y (function ascii-dispatch-macro) *readtable*)
  (set-dispatch-macro-character ## #" (function ascii-dispatch-macro) *readtable*)
(ascii-format destination ctrl-string &rest arguments)
function

DO:             Format the CTRL-STRING and the ARGUMENTS with FORMAT,
                convert the resulting string to a vector of ASCII
                bytes and send it to the DESTINATION.

RETURN:         NIL if DESTINATION is not NIL, a byte vector otherwise.

DESTINATION:    T      -> *STANDARD-OUTPUT*
                NIL    -> A vector of bytes is returned.
                STREAM -> An output binary stream to which the bytes are written.

CTRL-STRING:    A FORMAT control string (contaiing only characters in
                the ASCII character set).

ARGUMENTS:      Arguments to be formated with FORMAT.

SEE ALSO:       FORMAT
(ascii-printable-code-p code)
function
RETURN:  Whether CODE is the code of an ASCII printable character.
(ascii-string bytes &key newline start end)
function
DO:       Converts the ASCII bytes to a string. If there are control codes,
          an error is signaled.
RETURN:   A string containing the characters encoded in the ASCII bytes.
NEWLINE:  (member :crlf :cr :lf :any) ; the default is *NEWLINE*.
          If lone CR or LF are present, then an error is signaled.
START:    index of the first byte to be converted.
END:      index beyond the last byte to be converted.
(bel)
function
BELL

    BEL is used when there is a need to call for attention; it
    may control alarm or attention devices.
bel
constant
BELL
Initial value: 7
(bs)
function
BACKSPACE

    BS causes the active data position to be moved one character
    position in the data component in the direction opposite to that of
    the implicit movement. The direction of the implicit movement depends
    on the parameter value of SELECT IMPLICIT MOVEMENT DIRECTION (SIMD).
bs
constant
BACKSPACE
Initial value: 8
(bytes/= v1 v2 &key start1 start2 end1 end2)
function
like string/=, but for byte vectors.
(bytes< v1 v2 &key start1 start2 end1 end2)
function
like string<, but for byte vectors.
(bytes<= v1 v2 &key start1 start2 end1 end2)
function
like string<=, but for byte vectors.
(bytes= v1 v2 &key start1 start2 end1 end2)
function
like string=, but for byte vectors.
(bytes> v1 v2 &key start1 start2 end1 end2)
function
like string<, but for byte vectors.
(bytes>= v1 v2 &key start1 start2 end1 end2)
function
like string>=, but for byte vectors.
(can)
function
CANCEL

    CAN is used to indicate that the data preceding it in the
    data stream is in error. As a result, this data shall be ignored. The
    specific meaning of this control function shall be defined for each
    application and/or between sender and recipient.
can
constant
CANCEL
Initial value: 24
(code-ascii code)
function
RETURN:  The character corresponding to the given ASCII code.
         Only codes for printable characters are accepted,
         and both CR and LF are mapped to #newline.
(code-ascii-digit-p code)
function
RETURN:  The decimal digit value of the character encoded by the ASCII CODE,
         or NIL if CODE is not the ASCII code of a digit character.
(cr)
function
CARRIAGE RETURN

    The effect of CR depends on the setting of the DEVICE
    COMPONENT SELECT MODE (DCSM) and on the parameter value of SELECT
    IMPLICIT MOVEMENT DIRECTION (SIMD). If the DEVICE COMPONENT SELECT
    MODE (DCSM) is set to PRESENTATION and with the parameter value of
    SIMD equal to 0, CR causes the active presentation position to be
    moved to the line home position of the same line in the presentation
    component. The line home position is established by the parameter
    value of SET LINE HOME (SLH). With a parameter value of SIMD equal to
    1, CR causes the active presentation position to be moved to the line
    limit position of the same line in the presentation component. The
    line limit position is established by the parameter value of SET LINE
    LIMIT (SLL). If the DEVICE COMPONENT SELECT MODE (DCSM) is set to DATA
    and with a parameter value of SIMD equal to 0, CR causes the active
    data position to be moved to the line home position of the same line
    in the data component. The line home position is established by the
    parameter value of SET LINE HOME (SLH). With a parameter value of SIMD
    equal to 1, CR causes the active data position to be moved to the line
    limit position of the same line in the data component. The line limit
    position is established by the parameter value of SET LINE LIMIT
    (SLL).
cr
constant
CARRIAGE RETURN
Initial value: 13
(dc1)
function
DEVICE CONTROL ONE

    DC1 is primarily intended for turning on or starting an
    ancillary device. If it is not required for this purpose, it may be
    used to restore a device to the basic mode of operation (see also DC2
    and DC3), or any other device control function not provided by other
    DCs.
dc1
constant
DEVICE CONTROL ONE
Initial value: 17
(dc2)
function
DEVICE CONTROL TWO

    DC2 is primarily intended for turning on or starting an
    ancillary device. If it is not required for this purpose, it may be
    used to set a device to a special mode of operation (in which case DC1
    is used to restore the device to the basic mode), or for any other
    device control function not provided by other DCs.
dc2
constant
DEVICE CONTROL TWO
Initial value: 18
(dc3)
function
DEVICE CONTROL THREE

    DC3 is primarily intended for turning off or stopping an
    ancillary device. This function may be a secondary level stop, for
    example wait, pause, stand-by or halt (in which case DC1 is used to
    restore normal operation). If it is not required for this purpose, it
    may be used for any other device control function not provided by
    other DCs.
dc3
constant
DEVICE CONTROL THREE
Initial value: 19
(dc4)
function
DEVICE CONTROL FOUR

    DC4 is primarily intended for turning off, stopping or
    interrupting an ancillary device. If it is not required for this
    purpose, it may be used for any other device control function not
    provided by other DCs.
dc4
constant
DEVICE CONTROL FOUR
Initial value: 20
decoding-error
condition
The condition denoting a decoding error.
Class precedence list: DECODING-ERROR ERROR SERIOUS-CONDITION CONDITION STANDARD-OBJECT T
Class init args: CODE CODING-SYSTEM MESSAGE
(decoding-error-code x)
generic-function
The code that corresponds to no character.
(decoding-error-coding-system x)
generic-function
A keyword denoting the coding system which cannot decode the code.
(decoding-error-message x)
generic-function
The error message.
del
constant
 -- delete
Initial value: 127
(dle)
function
DATA LINK ESCAPE

    DLE is used exclusively to provide supplementary transmission
    control functions. The use of DLE is defined in ISO 1745.
dle
constant
DATA LINK ESCAPE
Initial value: 16
(em)
function
END OF MEDIUM

    EM is used to identify the physical end of a medium, or the
    end of the used portion of a medium, or the end of the wanted portion
    of data recorded on a medium.
em
constant
END OF MEDIUM
Initial value: 25
encoding-error
condition
The condition denoting an encoding error.
Class precedence list: ENCODING-ERROR ERROR SERIOUS-CONDITION CONDITION STANDARD-OBJECT T
Class init args: CHARACTER CODING-SYSTEM MESSAGE
(encoding-error-character x)
generic-function
The character that cannot be encoded.
(encoding-error-coding-system x)
generic-function
A keyword denoting the coding system which cannot encode the character.
(encoding-error-message x)
generic-function
The error message.
(enq)
function
ENQUIRY

    ENQ is transmitted by a sender as a request for a response
    from a receiver. The use of ENQ is defined in ISO 1745.
enq
constant
ENQUIRY
Initial value: 5
(eot)
function
END OF TRANSMISSION

    EOT is used to indicate the conclusion of the transmission of
    one or more texts. The use of EOT is defined in ISO 1745.
eot
constant
END OF TRANSMISSION
Initial value: 4
(esc)
function
ESCAPE

    ESC is used for code extension purposes. It causes the
    meanings of a limited number of bit combinations following it in the
    data stream to be changed. The use of ESC is defined in Standard
    ECMA-35.
esc
constant
ESCAPE
Initial value: 27
(etb)
function
END OF TRANSMISSION BLOCK

    ETB is used to indicate the end of a block of data where the
    data are divided into such blocks for transmission purposes. The use
    of ETB is defined in ISO 1745.
etb
constant
END OF TRANSMISSION BLOCK
Initial value: 23
(etx)
function
END OF TEXT

    ETX is used to indicate the end of a text. The use of ETX is
    defined in ISO 1745.
etx
constant
END OF TEXT
Initial value: 3
(ff)
function
FORM FEED

    FF causes the active presentation position to be moved to the
    corresponding character position of the line at the page home position
    of the next form or page in the presentation component. The page home
    position is established by the parameter value of SET PAGE HOME
    (SPH).
ff
constant
FORM FEED
Initial value: 12
fs
constant
IS4 -- file separator
Initial value: 28
gs
constant
IS3 -- group separator
Initial value: 29
(ht)
function
CHARACTER TABULATION

    HT causes the active presentation position to be moved to the
    following character tabulation stop in the presentation component. In
    addition, if that following character tabulation stop has been set by
    TABULATION ALIGN CENTRE (TAC), TABULATION ALIGN LEADING EDGE (TALE),
    TABULATION ALIGN TRAILING EDGE (TATE) or TABULATION CENTRED ON
    CHARACTER (TCC), HT indicates the beginning of a string of text which
    is to be positioned within a line according to the properties of that
    tabulation stop. The end of the string is indicated by the next
    occurrence of HT or CARRIAGE RETURN (CR) or NEXT LINE (NEL) in the
    data stream.
ht
constant
CHARACTER TABULATION
Initial value: 9
(lf)
function
LINE FEED

    If the DEVICE COMPONENT SELECT MODE (DCSM) is set to
    PRESENTATION, LF causes the active presentation position to be moved
    to the corresponding character position of the following line in the
    presentation component. If the DEVICE COMPONENT SELECT MODE (DCSM) is
    set to DATA, LF causes the active data position to be moved to the
    corresponding character position of the following line in the data
    component.
lf
constant
LINE FEED
Initial value: 10
(nak)
function
NEGATIVE ACKNOWLEDGE

    NAK is transmitted by a receiver as a negative response to
    the sender. The use of NAK is defined in ISO 1745.
nak
constant
NEGATIVE ACKNOWLEDGE
Initial value: 21
(nul)
function
NULL

    NUL is used for media-fill or time-fill. NUL characters may
    be inserted into, or removed from, a data stream without affecting the
    information content of that stream, but such action may affect the
    information layout and/or the control of equipment.
nul
constant
NULL
Initial value: 0
(read-ascii-line stream &optional eof-error eof-value newline)
function
newline:  (member :crlf :cr :lf) ; the defaultl is :CRLF since that's what's
          used in internet binary protocols using ascii.
rs
constant
IS2 -- record separator
Initial value: 30
(si)
function
SHIFT-IN

    SI is used for code extension purposes. It causes the
    meanings of the bit combinations following it in the data stream to be
    changed. The use of SI is defined in Standard ECMA-35.
si
constant
SHIFT-IN
Initial value: 15
(so)
function
SHIFT-OUT

    SO is used for code extension purposes. It causes the
    meanings of the bit combinations following it in the data stream to be
    changed. The use of SO is defined in Standard ECMA-35.
so
constant
SHIFT-OUT
Initial value: 14
(soh)
function
START OF HEADING

    SOH is used to indicate the beginning of a heading. The use
    of SOH is defined in ISO 1745.
soh
constant
START OF HEADING
Initial value: 1
sp
constant
     Code of ASCII Character SPACE
Initial value: 32
(stx)
function
START OF TEXT

    STX is used to indicate the beginning of a text and the end of a
    heading. The use of STX is defined in ISO 1745.
stx
constant
START OF TEXT
Initial value: 2
(sub)
function
SUBSTITUTE

    SUB is used in the place of a character that has been found to be
    invalid or in error. SUB is intended to be introduced by automatic
    means.
sub
constant
SUBSTITUTE
Initial value: 26
(syn)
function
SYNCHRONOUS IDLE

    SYN is used by a synchronous transmission system in the absence of
    any other character (idle condition) to provide a signal from which
    synchronism may be achieved or retained between data terminal
    equipment. The use of SYN is defined in ISO 1745.
syn
constant
SYNCHRONOUS IDLE
Initial value: 22
us
constant
IS1 -- unit separator
Initial value: 31
(vt)
function
LINE TABULATION

    VT causes the active presentation position to be moved in the
    presentation component to the corresponding character position on the
    line at which the following line tabulation stop is set.
vt
constant
LINE TABULATION
Initial value: 11