Coverage report: /home/ellis/.stash/quicklisp/dists/ultralisp/software/cl-babel-babel-20240610131823/src/enc-ebcdic.lisp
Kind | Covered | All | % |
expression | 0 | 102 | 0.0 |
branch | 0 | 0 | nil |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;;; -*- Mode: lisp; indent-tabs-mode: nil -*-
3
;;; enc-ebcdic.lisp --- Localized EBCDIC variant encodings.
5
;;; Copyright (C) 2007, Luis Oliveira <loliveira@common-lisp.net>
6
;;; Copyright (C) 2020, Timo Myyrä <timo.myyra@bittivirhe.fi>
8
;;; Permission is hereby granted, free of charge, to any person
9
;;; obtaining a copy of this software and associated documentation
10
;;; files (the "Software"), to deal in the Software without
11
;;; restriction, including without limitation the rights to use, copy,
12
;;; modify, merge, publish, distribute, sublicense, and/or sell copies
13
;;; of the Software, and to permit persons to whom the Software is
14
;;; furnished to do so, subject to the following conditions:
16
;;; The above copyright notice and this permission notice shall be
17
;;; included in all copies or substantial portions of the Software.
19
;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
;;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
;;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
;;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23
;;; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24
;;; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26
;;; DEALINGS IN THE SOFTWARE.
28
(in-package #:babel-encodings)
30
(define-character-encoding :ebcdic-us
31
"An alleged character set used on IBM dinosaurs."
34
(define-character-encoding :ebcdic-us-euro
35
"An alleged character set used on IBM dinosaurs using Euro sign."
36
:aliases '(:ibm-1140))
38
(define-character-encoding :ebcdic-fi
39
"A character set used on IBM mainframes in Finland/Sweden."
42
(define-character-encoding :ebcdic-fi-euro
43
"A character set used on IBM mainframes in Finland/Sweden using Euro sign."
44
:aliases '(:ibm-1143))
46
(define-constant +ebcdic-decode-table+
48
256 :element-type 'ub8 :initial-contents
49
'(#x00 #x01 #x02 #x03 #x9c #x09 #x86 #x7f #x97 #x8d #x8e #x0b #x0c #x0d
50
#x0e #x0f #x10 #x11 #x12 #x13 #x9d #x85 #x08 #x87 #x18 #x19 #x92 #x8f
51
#x1c #x1d #x1e #x1f #x80 #x81 #x82 #x83 #x84 #x0a #x17 #x1b #x88 #x89
52
#x8a #x8b #x8c #x05 #x06 #x07 #x90 #x91 #x16 #x93 #x94 #x95 #x96 #x04
53
#x98 #x99 #x9a #x9b #x14 #x15 #x9e #x1a #x20 #xa0 #xe2 #xe4 #xe0 #xe1
54
#xe3 #xe5 #xe7 #xf1 #xa2 #x2e #x3c #x28 #x2b #x7c #x26 #xe9 #xea #xeb
55
#xe8 #xed #xee #xef #xec #xdf #x21 #x24 #x2a #x29 #x3b #xac #x2d #x2f
56
#xc2 #xc4 #xc0 #xc1 #xc3 #xc5 #xc7 #xd1 #xa6 #x2c #x25 #x5f #x3e #x3f
57
#xf8 #xc9 #xca #xcb #xc8 #xcd #xce #xcf #xcc #x60 #x3a #x23 #x40 #x27
58
#x3d #x22 #xd8 #x61 #x62 #x63 #x64 #x65 #x66 #x67 #x68 #x69 #xab #xbb
59
#xf0 #xfd #xfe #xb1 #xb0 #x6a #x6b #x6c #x6d #x6e #x6f #x70 #x71 #x72
60
#xaa #xba #xe6 #xb8 #xc6 #xa4 #xb5 #x7e #x73 #x74 #x75 #x76 #x77 #x78
61
#x79 #x7a #xa1 #xbf #xd0 #xdd #xde #xae #x5e #xa3 #xa5 #xb7 #xa9 #xa7
62
#xb6 #xbc #xbd #xbe #x5b #x5d #xaf #xa8 #xb4 #xd7 #x7b #x41 #x42 #x43
63
#x44 #x45 #x46 #x47 #x48 #x49 #xad #xf4 #xf6 #xf2 #xf3 #xf5 #x7d #x4a
64
#x4b #x4c #x4d #x4e #x4f #x50 #x51 #x52 #xb9 #xfb #xfc #xf9 #xfa #xff
65
#x5c #xf7 #x53 #x54 #x55 #x56 #x57 #x58 #x59 #x5a #xb2 #xd4 #xd6 #xd2
66
#xd3 #xd5 #x30 #x31 #x32 #x33 #x34 #x35 #x36 #x37 #x38 #x39 #xb3 #xdb
70
(define-constant +ebcdic-encode-table+
71
(loop with rt = (make-array 256 :element-type 'ub8 :initial-element 0)
72
for code across +ebcdic-decode-table+ for i from 0 do
73
(assert (= 0 (aref rt code)))
74
(setf (aref rt code) i)
78
(define-unibyte-encoder :ebcdic-us (code)
81
(aref +ebcdic-encode-table+ code)))
83
(define-unibyte-decoder :ebcdic-us (octet)
84
(aref +ebcdic-decode-table+ octet))
86
(define-unibyte-encoder :ebcdic-us-euro (code)
91
(aref +ebcdic-encode-table+ code))))
93
(define-unibyte-decoder :ebcdic-us-euro (octet)
96
(aref +ebcdic-decode-table+ octet)))
98
(defun ebcdic-fi-encoder (code)
127
(aref +ebcdic-encode-table+ code)))
129
(defun ebcdic-fi-decoder (octet)
158
(aref +ebcdic-decode-table+ octet)))
160
(define-unibyte-encoder :ebcdic-fi (code)
163
(ebcdic-fi-encoder code)))
165
(define-unibyte-decoder :ebcdic-fi (octet)
166
(ebcdic-fi-decoder octet))
168
(define-unibyte-encoder :ebcdic-fi-euro (code)
173
(ebcdic-fi-encoder code))))
175
(define-unibyte-decoder :ebcdic-fi-euro (octet)
178
(ebcdic-fi-decoder octet)))