3 (define-unibyte-mapper cp437->code-mapper code->cp437-mapper
4 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
5 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
6 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
7 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
8 (#x84 #x00E4) ; LATIN SMALL LETTER A WITH DIAERESIS
9 (#x85 #x00E0) ; LATIN SMALL LETTER A WITH GRAVE
10 (#x86 #x00E5) ; LATIN SMALL LETTER A WITH RING ABOVE
11 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
12 (#x88 #x00EA) ; LATIN SMALL LETTER E WITH CIRCUMFLEX
13 (#x89 #x00EB) ; LATIN SMALL LETTER E WITH DIAERESIS
14 (#x8A #x00E8) ; LATIN SMALL LETTER E WITH GRAVE
15 (#x8B #x00EF) ; LATIN SMALL LETTER I WITH DIAERESIS
16 (#x8C #x00EE) ; LATIN SMALL LETTER I WITH CIRCUMFLEX
17 (#x8D #x00EC) ; LATIN SMALL LETTER I WITH GRAVE
18 (#x8E #x00C4) ; LATIN CAPITAL LETTER A WITH DIAERESIS
19 (#x8F #x00C5) ; LATIN CAPITAL LETTER A WITH RING ABOVE
20 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
21 (#x91 #x00E6) ; LATIN SMALL LIGATURE AE
22 (#x92 #x00C6) ; LATIN CAPITAL LIGATURE AE
23 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
24 (#x94 #x00F6) ; LATIN SMALL LETTER O WITH DIAERESIS
25 (#x95 #x00F2) ; LATIN SMALL LETTER O WITH GRAVE
26 (#x96 #x00FB) ; LATIN SMALL LETTER U WITH CIRCUMFLEX
27 (#x97 #x00F9) ; LATIN SMALL LETTER U WITH GRAVE
28 (#x98 #x00FF) ; LATIN SMALL LETTER Y WITH DIAERESIS
29 (#x99 #x00D6) ; LATIN CAPITAL LETTER O WITH DIAERESIS
30 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
31 (#x9B #x00A2) ; CENT SIGN
32 (#x9C #x00A3) ; POUND SIGN
33 (#x9D #x00A5) ; YEN SIGN
34 (#x9E #x20A7) ; PESETA SIGN
35 (#x9F #x0192) ; LATIN SMALL LETTER F WITH HOOK
36 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
37 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
38 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
39 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
40 (#xA4 #x00F1) ; LATIN SMALL LETTER N WITH TILDE
41 (#xA5 #x00D1) ; LATIN CAPITAL LETTER N WITH TILDE
42 (#xA6 #x00AA) ; FEMININE ORDINAL INDICATOR
43 (#xA7 #x00BA) ; MASCULINE ORDINAL INDICATOR
44 (#xA8 #x00BF) ; INVERTED QUESTION MARK
45 (#xA9 #x2310) ; REVERSED NOT SIGN
46 (#xAA #x00AC) ; NOT SIGN
47 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
48 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
49 (#xAD #x00A1) ; INVERTED EXCLAMATION MARK
50 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
51 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
52 (#xB0 #x2591) ; LIGHT SHADE
53 (#xB1 #x2592) ; MEDIUM SHADE
54 (#xB2 #x2593) ; DARK SHADE
55 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
56 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
57 (#xB5 #x2561) ; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
58 (#xB6 #x2562) ; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
59 (#xB7 #x2556) ; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
60 (#xB8 #x2555) ; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
61 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
62 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
63 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
64 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
65 (#xBD #x255C) ; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
66 (#xBE #x255B) ; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
67 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
68 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
69 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
70 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
71 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
72 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
73 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
74 (#xC6 #x255E) ; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
75 (#xC7 #x255F) ; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
76 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
77 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
78 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
79 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
80 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
81 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
82 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
83 (#xCF #x2567) ; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
84 (#xD0 #x2568) ; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
85 (#xD1 #x2564) ; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
86 (#xD2 #x2565) ; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
87 (#xD3 #x2559) ; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
88 (#xD4 #x2558) ; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
89 (#xD5 #x2552) ; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
90 (#xD6 #x2553) ; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
91 (#xD7 #x256B) ; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
92 (#xD8 #x256A) ; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
93 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
94 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
95 (#xDB #x2588) ; FULL BLOCK
96 (#xDC #x2584) ; LOWER HALF BLOCK
97 (#xDD #x258C) ; LEFT HALF BLOCK
98 (#xDE #x2590) ; RIGHT HALF BLOCK
99 (#xDF #x2580) ; UPPER HALF BLOCK
100 (#xE0 #x03B1) ; GREEK SMALL LETTER ALPHA
101 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
102 (#xE2 #x0393) ; GREEK CAPITAL LETTER GAMMA
103 (#xE3 #x03C0) ; GREEK SMALL LETTER PI
104 (#xE4 #x03A3) ; GREEK CAPITAL LETTER SIGMA
105 (#xE5 #x03C3) ; GREEK SMALL LETTER SIGMA
106 (#xE6 #x00B5) ; MICRO SIGN
107 (#xE7 #x03C4) ; GREEK SMALL LETTER TAU
108 (#xE8 #x03A6) ; GREEK CAPITAL LETTER PHI
109 (#xE9 #x0398) ; GREEK CAPITAL LETTER THETA
110 (#xEA #x03A9) ; GREEK CAPITAL LETTER OMEGA
111 (#xEB #x03B4) ; GREEK SMALL LETTER DELTA
112 (#xEC #x221E) ; INFINITY
113 (#xED #x03C6) ; GREEK SMALL LETTER PHI
114 (#xEE #x03B5) ; GREEK SMALL LETTER EPSILON
115 (#xEF #x2229) ; INTERSECTION
116 (#xF0 #x2261) ; IDENTICAL TO
117 (#xF1 #x00B1) ; PLUS-MINUS SIGN
118 (#xF2 #x2265) ; GREATER-THAN OR EQUAL TO
119 (#xF3 #x2264) ; LESS-THAN OR EQUAL TO
120 (#xF4 #x2320) ; TOP HALF INTEGRAL
121 (#xF5 #x2321) ; BOTTOM HALF INTEGRAL
122 (#xF6 #x00F7) ; DIVISION SIGN
123 (#xF7 #x2248) ; ALMOST EQUAL TO
124 (#xF8 #x00B0) ; DEGREE SIGN
125 (#xF9 #x2219) ; BULLET OPERATOR
126 (#xFA #x00B7) ; MIDDLE DOT
127 (#xFB #x221A) ; SQUARE ROOT
128 (#xFC #x207F) ; SUPERSCRIPT LATIN SMALL LETTER N
129 (#xFD #x00B2) ; SUPERSCRIPT TWO
130 (#xFE #x25A0) ; BLACK SQUARE
131 (#xFF #x00A0) ; NO-BREAK SPACE
134 (declaim (inline get-cp437-bytes))
135 (defun get-cp437-bytes (string pos)
136 (declare (optimize speed (safety 0))
137 (type simple-string string)
138 (type array-range pos))
139 (get-latin-bytes #'code->cp437-mapper :cp437 string pos))
141 (defun string->cp437 (string sstart send null-padding)
142 (declare (optimize speed (safety 0))
143 (type simple-string string)
144 (type array-range sstart send))
145 (values (string->latin% string sstart send #'get-cp437-bytes null-padding)))
147 (defmacro define-cp437->string* (accessor type)
148 (declare (ignore type))
149 (let ((name (make-od-name 'cp437->string* accessor)))
151 (defun ,name (string sstart send array astart aend)
152 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp437->code-mapper)))))
154 (instantiate-octets-definition define-cp437->string*)
156 (defmacro define-cp437->string (accessor type)
157 (declare (ignore type))
158 `(defun ,(make-od-name 'cp437->string accessor) (array astart aend)
159 (,(make-od-name 'latin->string accessor) array astart aend #'cp437->code-mapper)))
161 (instantiate-octets-definition define-cp437->string)
163 (add-external-format-funs '(:cp437 :|cp437|)
164 '(cp437->string-aref string->cp437))
166 (define-external-format (:cp437 :|cp437|)
168 (let ((cp437-byte (code->cp437-mapper bits)))
170 (setf (sap-ref-8 sap tail) cp437-byte)
171 (external-format-encoding-error stream bits)))
172 (let ((code (cp437->code-mapper byte)))
175 (external-format-decoding-error stream byte)))) ;; TODO -- error check
177 (define-unibyte-mapper cp850->code-mapper code->cp850-mapper
178 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
179 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
180 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
181 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
182 (#x84 #x00E4) ; LATIN SMALL LETTER A WITH DIAERESIS
183 (#x85 #x00E0) ; LATIN SMALL LETTER A WITH GRAVE
184 (#x86 #x00E5) ; LATIN SMALL LETTER A WITH RING ABOVE
185 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
186 (#x88 #x00EA) ; LATIN SMALL LETTER E WITH CIRCUMFLEX
187 (#x89 #x00EB) ; LATIN SMALL LETTER E WITH DIAERESIS
188 (#x8A #x00E8) ; LATIN SMALL LETTER E WITH GRAVE
189 (#x8B #x00EF) ; LATIN SMALL LETTER I WITH DIAERESIS
190 (#x8C #x00EE) ; LATIN SMALL LETTER I WITH CIRCUMFLEX
191 (#x8D #x00EC) ; LATIN SMALL LETTER I WITH GRAVE
192 (#x8E #x00C4) ; LATIN CAPITAL LETTER A WITH DIAERESIS
193 (#x8F #x00C5) ; LATIN CAPITAL LETTER A WITH RING ABOVE
194 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
195 (#x91 #x00E6) ; LATIN SMALL LIGATURE AE
196 (#x92 #x00C6) ; LATIN CAPITAL LIGATURE AE
197 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
198 (#x94 #x00F6) ; LATIN SMALL LETTER O WITH DIAERESIS
199 (#x95 #x00F2) ; LATIN SMALL LETTER O WITH GRAVE
200 (#x96 #x00FB) ; LATIN SMALL LETTER U WITH CIRCUMFLEX
201 (#x97 #x00F9) ; LATIN SMALL LETTER U WITH GRAVE
202 (#x98 #x00FF) ; LATIN SMALL LETTER Y WITH DIAERESIS
203 (#x99 #x00D6) ; LATIN CAPITAL LETTER O WITH DIAERESIS
204 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
205 (#x9B #x00F8) ; LATIN SMALL LETTER O WITH STROKE
206 (#x9C #x00A3) ; POUND SIGN
207 (#x9D #x00D8) ; LATIN CAPITAL LETTER O WITH STROKE
208 (#x9E #x00D7) ; MULTIPLICATION SIGN
209 (#x9F #x0192) ; LATIN SMALL LETTER F WITH HOOK
210 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
211 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
212 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
213 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
214 (#xA4 #x00F1) ; LATIN SMALL LETTER N WITH TILDE
215 (#xA5 #x00D1) ; LATIN CAPITAL LETTER N WITH TILDE
216 (#xA6 #x00AA) ; FEMININE ORDINAL INDICATOR
217 (#xA7 #x00BA) ; MASCULINE ORDINAL INDICATOR
218 (#xA8 #x00BF) ; INVERTED QUESTION MARK
219 (#xA9 #x00AE) ; REGISTERED SIGN
220 (#xAA #x00AC) ; NOT SIGN
221 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
222 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
223 (#xAD #x00A1) ; INVERTED EXCLAMATION MARK
224 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
225 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
226 (#xB0 #x2591) ; LIGHT SHADE
227 (#xB1 #x2592) ; MEDIUM SHADE
228 (#xB2 #x2593) ; DARK SHADE
229 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
230 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
231 (#xB5 #x00C1) ; LATIN CAPITAL LETTER A WITH ACUTE
232 (#xB6 #x00C2) ; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
233 (#xB7 #x00C0) ; LATIN CAPITAL LETTER A WITH GRAVE
234 (#xB8 #x00A9) ; COPYRIGHT SIGN
235 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
236 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
237 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
238 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
239 (#xBD #x00A2) ; CENT SIGN
240 (#xBE #x00A5) ; YEN SIGN
241 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
242 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
243 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
244 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
245 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
246 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
247 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
248 (#xC6 #x00E3) ; LATIN SMALL LETTER A WITH TILDE
249 (#xC7 #x00C3) ; LATIN CAPITAL LETTER A WITH TILDE
250 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
251 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
252 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
253 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
254 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
255 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
256 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
257 (#xCF #x00A4) ; CURRENCY SIGN
258 (#xD0 #x00F0) ; LATIN SMALL LETTER ETH
259 (#xD1 #x00D0) ; LATIN CAPITAL LETTER ETH
260 (#xD2 #x00CA) ; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
261 (#xD3 #x00CB) ; LATIN CAPITAL LETTER E WITH DIAERESIS
262 (#xD4 #x00C8) ; LATIN CAPITAL LETTER E WITH GRAVE
263 (#xD5 #x0131) ; LATIN SMALL LETTER DOTLESS I
264 (#xD6 #x00CD) ; LATIN CAPITAL LETTER I WITH ACUTE
265 (#xD7 #x00CE) ; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
266 (#xD8 #x00CF) ; LATIN CAPITAL LETTER I WITH DIAERESIS
267 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
268 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
269 (#xDB #x2588) ; FULL BLOCK
270 (#xDC #x2584) ; LOWER HALF BLOCK
271 (#xDD #x00A6) ; BROKEN BAR
272 (#xDE #x00CC) ; LATIN CAPITAL LETTER I WITH GRAVE
273 (#xDF #x2580) ; UPPER HALF BLOCK
274 (#xE0 #x00D3) ; LATIN CAPITAL LETTER O WITH ACUTE
275 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
276 (#xE2 #x00D4) ; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
277 (#xE3 #x00D2) ; LATIN CAPITAL LETTER O WITH GRAVE
278 (#xE4 #x00F5) ; LATIN SMALL LETTER O WITH TILDE
279 (#xE5 #x00D5) ; LATIN CAPITAL LETTER O WITH TILDE
280 (#xE6 #x00B5) ; MICRO SIGN
281 (#xE7 #x00FE) ; LATIN SMALL LETTER THORN
282 (#xE8 #x00DE) ; LATIN CAPITAL LETTER THORN
283 (#xE9 #x00DA) ; LATIN CAPITAL LETTER U WITH ACUTE
284 (#xEA #x00DB) ; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
285 (#xEB #x00D9) ; LATIN CAPITAL LETTER U WITH GRAVE
286 (#xEC #x00FD) ; LATIN SMALL LETTER Y WITH ACUTE
287 (#xED #x00DD) ; LATIN CAPITAL LETTER Y WITH ACUTE
288 (#xEE #x00AF) ; MACRON
289 (#xEF #x00B4) ; ACUTE ACCENT
290 (#xF0 #x00AD) ; SOFT HYPHEN
291 (#xF1 #x00B1) ; PLUS-MINUS SIGN
292 (#xF2 #x2017) ; DOUBLE LOW LINE
293 (#xF3 #x00BE) ; VULGAR FRACTION THREE QUARTERS
294 (#xF4 #x00B6) ; PILCROW SIGN
295 (#xF5 #x00A7) ; SECTION SIGN
296 (#xF6 #x00F7) ; DIVISION SIGN
297 (#xF7 #x00B8) ; CEDILLA
298 (#xF8 #x00B0) ; DEGREE SIGN
299 (#xF9 #x00A8) ; DIAERESIS
300 (#xFA #x00B7) ; MIDDLE DOT
301 (#xFB #x00B9) ; SUPERSCRIPT ONE
302 (#xFC #x00B3) ; SUPERSCRIPT THREE
303 (#xFD #x00B2) ; SUPERSCRIPT TWO
304 (#xFE #x25A0) ; BLACK SQUARE
305 (#xFF #x00A0) ; NO-BREAK SPACE
308 (declaim (inline get-cp850-bytes))
309 (defun get-cp850-bytes (string pos)
310 (declare (optimize speed (safety 0))
311 (type simple-string string)
312 (type array-range pos))
313 (get-latin-bytes #'code->cp850-mapper :cp850 string pos))
315 (defun string->cp850 (string sstart send null-padding)
316 (declare (optimize speed (safety 0))
317 (type simple-string string)
318 (type array-range sstart send))
319 (values (string->latin% string sstart send #'get-cp850-bytes null-padding)))
321 (defmacro define-cp850->string* (accessor type)
322 (declare (ignore type))
323 (let ((name (make-od-name 'cp850->string* accessor)))
325 (defun ,name (string sstart send array astart aend)
326 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp850->code-mapper)))))
328 (instantiate-octets-definition define-cp850->string*)
330 (defmacro define-cp850->string (accessor type)
331 (declare (ignore type))
332 `(defun ,(make-od-name 'cp850->string accessor) (array astart aend)
333 (,(make-od-name 'latin->string accessor) array astart aend #'cp850->code-mapper)))
335 (instantiate-octets-definition define-cp850->string)
337 (add-external-format-funs '(:cp850 :|cp850|)
338 '(cp850->string-aref string->cp850))
340 (define-external-format (:cp850 :|cp850|)
342 (let ((cp850-byte (code->cp850-mapper bits)))
344 (setf (sap-ref-8 sap tail) cp850-byte)
345 (external-format-encoding-error stream bits)))
346 (let ((code (cp850->code-mapper byte)))
349 (external-format-decoding-error stream byte)))) ;; TODO -- error check
351 (define-unibyte-mapper cp852->code-mapper code->cp852-mapper
352 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
353 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
354 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
355 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
356 (#x84 #x00E4) ; LATIN SMALL LETTER A WITH DIAERESIS
357 (#x85 #x016F) ; LATIN SMALL LETTER U WITH RING ABOVE
358 (#x86 #x0107) ; LATIN SMALL LETTER C WITH ACUTE
359 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
360 (#x88 #x0142) ; LATIN SMALL LETTER L WITH STROKE
361 (#x89 #x00EB) ; LATIN SMALL LETTER E WITH DIAERESIS
362 (#x8A #x0150) ; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
363 (#x8B #x0151) ; LATIN SMALL LETTER O WITH DOUBLE ACUTE
364 (#x8C #x00EE) ; LATIN SMALL LETTER I WITH CIRCUMFLEX
365 (#x8D #x0179) ; LATIN CAPITAL LETTER Z WITH ACUTE
366 (#x8E #x00C4) ; LATIN CAPITAL LETTER A WITH DIAERESIS
367 (#x8F #x0106) ; LATIN CAPITAL LETTER C WITH ACUTE
368 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
369 (#x91 #x0139) ; LATIN CAPITAL LETTER L WITH ACUTE
370 (#x92 #x013A) ; LATIN SMALL LETTER L WITH ACUTE
371 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
372 (#x94 #x00F6) ; LATIN SMALL LETTER O WITH DIAERESIS
373 (#x95 #x013D) ; LATIN CAPITAL LETTER L WITH CARON
374 (#x96 #x013E) ; LATIN SMALL LETTER L WITH CARON
375 (#x97 #x015A) ; LATIN CAPITAL LETTER S WITH ACUTE
376 (#x98 #x015B) ; LATIN SMALL LETTER S WITH ACUTE
377 (#x99 #x00D6) ; LATIN CAPITAL LETTER O WITH DIAERESIS
378 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
379 (#x9B #x0164) ; LATIN CAPITAL LETTER T WITH CARON
380 (#x9C #x0165) ; LATIN SMALL LETTER T WITH CARON
381 (#x9D #x0141) ; LATIN CAPITAL LETTER L WITH STROKE
382 (#x9E #x00D7) ; MULTIPLICATION SIGN
383 (#x9F #x010D) ; LATIN SMALL LETTER C WITH CARON
384 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
385 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
386 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
387 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
388 (#xA4 #x0104) ; LATIN CAPITAL LETTER A WITH OGONEK
389 (#xA5 #x0105) ; LATIN SMALL LETTER A WITH OGONEK
390 (#xA6 #x017D) ; LATIN CAPITAL LETTER Z WITH CARON
391 (#xA7 #x017E) ; LATIN SMALL LETTER Z WITH CARON
392 (#xA8 #x0118) ; LATIN CAPITAL LETTER E WITH OGONEK
393 (#xA9 #x0119) ; LATIN SMALL LETTER E WITH OGONEK
394 (#xAA #x00AC) ; NOT SIGN
395 (#xAB #x017A) ; LATIN SMALL LETTER Z WITH ACUTE
396 (#xAC #x010C) ; LATIN CAPITAL LETTER C WITH CARON
397 (#xAD #x015F) ; LATIN SMALL LETTER S WITH CEDILLA
398 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
399 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
400 (#xB0 #x2591) ; LIGHT SHADE
401 (#xB1 #x2592) ; MEDIUM SHADE
402 (#xB2 #x2593) ; DARK SHADE
403 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
404 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
405 (#xB5 #x00C1) ; LATIN CAPITAL LETTER A WITH ACUTE
406 (#xB6 #x00C2) ; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
407 (#xB7 #x011A) ; LATIN CAPITAL LETTER E WITH CARON
408 (#xB8 #x015E) ; LATIN CAPITAL LETTER S WITH CEDILLA
409 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
410 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
411 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
412 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
413 (#xBD #x017B) ; LATIN CAPITAL LETTER Z WITH DOT ABOVE
414 (#xBE #x017C) ; LATIN SMALL LETTER Z WITH DOT ABOVE
415 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
416 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
417 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
418 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
419 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
420 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
421 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
422 (#xC6 #x0102) ; LATIN CAPITAL LETTER A WITH BREVE
423 (#xC7 #x0103) ; LATIN SMALL LETTER A WITH BREVE
424 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
425 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
426 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
427 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
428 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
429 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
430 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
431 (#xCF #x00A4) ; CURRENCY SIGN
432 (#xD0 #x0111) ; LATIN SMALL LETTER D WITH STROKE
433 (#xD1 #x0110) ; LATIN CAPITAL LETTER D WITH STROKE
434 (#xD2 #x010E) ; LATIN CAPITAL LETTER D WITH CARON
435 (#xD3 #x00CB) ; LATIN CAPITAL LETTER E WITH DIAERESIS
436 (#xD4 #x010F) ; LATIN SMALL LETTER D WITH CARON
437 (#xD5 #x0147) ; LATIN CAPITAL LETTER N WITH CARON
438 (#xD6 #x00CD) ; LATIN CAPITAL LETTER I WITH ACUTE
439 (#xD7 #x00CE) ; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
440 (#xD8 #x011B) ; LATIN SMALL LETTER E WITH CARON
441 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
442 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
443 (#xDB #x2588) ; FULL BLOCK
444 (#xDC #x2584) ; LOWER HALF BLOCK
445 (#xDD #x0162) ; LATIN CAPITAL LETTER T WITH CEDILLA
446 (#xDE #x016E) ; LATIN CAPITAL LETTER U WITH RING ABOVE
447 (#xDF #x2580) ; UPPER HALF BLOCK
448 (#xE0 #x00D3) ; LATIN CAPITAL LETTER O WITH ACUTE
449 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
450 (#xE2 #x00D4) ; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
451 (#xE3 #x0143) ; LATIN CAPITAL LETTER N WITH ACUTE
452 (#xE4 #x0144) ; LATIN SMALL LETTER N WITH ACUTE
453 (#xE5 #x0148) ; LATIN SMALL LETTER N WITH CARON
454 (#xE6 #x0160) ; LATIN CAPITAL LETTER S WITH CARON
455 (#xE7 #x0161) ; LATIN SMALL LETTER S WITH CARON
456 (#xE8 #x0154) ; LATIN CAPITAL LETTER R WITH ACUTE
457 (#xE9 #x00DA) ; LATIN CAPITAL LETTER U WITH ACUTE
458 (#xEA #x0155) ; LATIN SMALL LETTER R WITH ACUTE
459 (#xEB #x0170) ; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
460 (#xEC #x00FD) ; LATIN SMALL LETTER Y WITH ACUTE
461 (#xED #x00DD) ; LATIN CAPITAL LETTER Y WITH ACUTE
462 (#xEE #x0163) ; LATIN SMALL LETTER T WITH CEDILLA
463 (#xEF #x00B4) ; ACUTE ACCENT
464 (#xF0 #x00AD) ; SOFT HYPHEN
465 (#xF1 #x02DD) ; DOUBLE ACUTE ACCENT
466 (#xF2 #x02DB) ; OGONEK
467 (#xF3 #x02C7) ; CARON
468 (#xF4 #x02D8) ; BREVE
469 (#xF5 #x00A7) ; SECTION SIGN
470 (#xF6 #x00F7) ; DIVISION SIGN
471 (#xF7 #x00B8) ; CEDILLA
472 (#xF8 #x00B0) ; DEGREE SIGN
473 (#xF9 #x00A8) ; DIAERESIS
474 (#xFA #x02D9) ; DOT ABOVE
475 (#xFB #x0171) ; LATIN SMALL LETTER U WITH DOUBLE ACUTE
476 (#xFC #x0158) ; LATIN CAPITAL LETTER R WITH CARON
477 (#xFD #x0159) ; LATIN SMALL LETTER R WITH CARON
478 (#xFE #x25A0) ; BLACK SQUARE
479 (#xFF #x00A0) ; NO-BREAK SPACE
482 (declaim (inline get-cp852-bytes))
483 (defun get-cp852-bytes (string pos)
484 (declare (optimize speed (safety 0))
485 (type simple-string string)
486 (type array-range pos))
487 (get-latin-bytes #'code->cp852-mapper :cp852 string pos))
489 (defun string->cp852 (string sstart send null-padding)
490 (declare (optimize speed (safety 0))
491 (type simple-string string)
492 (type array-range sstart send))
493 (values (string->latin% string sstart send #'get-cp852-bytes null-padding)))
495 (defmacro define-cp852->string* (accessor type)
496 (declare (ignore type))
497 (let ((name (make-od-name 'cp852->string* accessor)))
499 (defun ,name (string sstart send array astart aend)
500 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp852->code-mapper)))))
502 (instantiate-octets-definition define-cp852->string*)
504 (defmacro define-cp852->string (accessor type)
505 (declare (ignore type))
506 `(defun ,(make-od-name 'cp852->string accessor) (array astart aend)
507 (,(make-od-name 'latin->string accessor) array astart aend #'cp852->code-mapper)))
509 (instantiate-octets-definition define-cp852->string)
511 (add-external-format-funs '(:cp852 :|cp852|)
512 '(cp852->string-aref string->cp852))
514 (define-external-format (:cp852 :|cp852|)
516 (let ((cp852-byte (code->cp852-mapper bits)))
518 (setf (sap-ref-8 sap tail) cp852-byte)
519 (external-format-encoding-error stream bits)))
520 (let ((code (cp852->code-mapper byte)))
523 (external-format-decoding-error stream byte)))) ;; TODO -- error check
525 (define-unibyte-mapper cp855->code-mapper code->cp855-mapper
526 (#x80 #x0452) ; CYRILLIC SMALL LETTER DJE
527 (#x81 #x0402) ; CYRILLIC CAPITAL LETTER DJE
528 (#x82 #x0453) ; CYRILLIC SMALL LETTER GJE
529 (#x83 #x0403) ; CYRILLIC CAPITAL LETTER GJE
530 (#x84 #x0451) ; CYRILLIC SMALL LETTER IO
531 (#x85 #x0401) ; CYRILLIC CAPITAL LETTER IO
532 (#x86 #x0454) ; CYRILLIC SMALL LETTER UKRAINIAN IE
533 (#x87 #x0404) ; CYRILLIC CAPITAL LETTER UKRAINIAN IE
534 (#x88 #x0455) ; CYRILLIC SMALL LETTER DZE
535 (#x89 #x0405) ; CYRILLIC CAPITAL LETTER DZE
536 (#x8A #x0456) ; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
537 (#x8B #x0406) ; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
538 (#x8C #x0457) ; CYRILLIC SMALL LETTER YI
539 (#x8D #x0407) ; CYRILLIC CAPITAL LETTER YI
540 (#x8E #x0458) ; CYRILLIC SMALL LETTER JE
541 (#x8F #x0408) ; CYRILLIC CAPITAL LETTER JE
542 (#x90 #x0459) ; CYRILLIC SMALL LETTER LJE
543 (#x91 #x0409) ; CYRILLIC CAPITAL LETTER LJE
544 (#x92 #x045A) ; CYRILLIC SMALL LETTER NJE
545 (#x93 #x040A) ; CYRILLIC CAPITAL LETTER NJE
546 (#x94 #x045B) ; CYRILLIC SMALL LETTER TSHE
547 (#x95 #x040B) ; CYRILLIC CAPITAL LETTER TSHE
548 (#x96 #x045C) ; CYRILLIC SMALL LETTER KJE
549 (#x97 #x040C) ; CYRILLIC CAPITAL LETTER KJE
550 (#x98 #x045E) ; CYRILLIC SMALL LETTER SHORT U
551 (#x99 #x040E) ; CYRILLIC CAPITAL LETTER SHORT U
552 (#x9A #x045F) ; CYRILLIC SMALL LETTER DZHE
553 (#x9B #x040F) ; CYRILLIC CAPITAL LETTER DZHE
554 (#x9C #x044E) ; CYRILLIC SMALL LETTER YU
555 (#x9D #x042E) ; CYRILLIC CAPITAL LETTER YU
556 (#x9E #x044A) ; CYRILLIC SMALL LETTER HARD SIGN
557 (#x9F #x042A) ; CYRILLIC CAPITAL LETTER HARD SIGN
558 (#xA0 #x0430) ; CYRILLIC SMALL LETTER A
559 (#xA1 #x0410) ; CYRILLIC CAPITAL LETTER A
560 (#xA2 #x0431) ; CYRILLIC SMALL LETTER BE
561 (#xA3 #x0411) ; CYRILLIC CAPITAL LETTER BE
562 (#xA4 #x0446) ; CYRILLIC SMALL LETTER TSE
563 (#xA5 #x0426) ; CYRILLIC CAPITAL LETTER TSE
564 (#xA6 #x0434) ; CYRILLIC SMALL LETTER DE
565 (#xA7 #x0414) ; CYRILLIC CAPITAL LETTER DE
566 (#xA8 #x0435) ; CYRILLIC SMALL LETTER IE
567 (#xA9 #x0415) ; CYRILLIC CAPITAL LETTER IE
568 (#xAA #x0444) ; CYRILLIC SMALL LETTER EF
569 (#xAB #x0424) ; CYRILLIC CAPITAL LETTER EF
570 (#xAC #x0433) ; CYRILLIC SMALL LETTER GHE
571 (#xAD #x0413) ; CYRILLIC CAPITAL LETTER GHE
572 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
573 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
574 (#xB0 #x2591) ; LIGHT SHADE
575 (#xB1 #x2592) ; MEDIUM SHADE
576 (#xB2 #x2593) ; DARK SHADE
577 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
578 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
579 (#xB5 #x0445) ; CYRILLIC SMALL LETTER HA
580 (#xB6 #x0425) ; CYRILLIC CAPITAL LETTER HA
581 (#xB7 #x0438) ; CYRILLIC SMALL LETTER I
582 (#xB8 #x0418) ; CYRILLIC CAPITAL LETTER I
583 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
584 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
585 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
586 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
587 (#xBD #x0439) ; CYRILLIC SMALL LETTER SHORT I
588 (#xBE #x0419) ; CYRILLIC CAPITAL LETTER SHORT I
589 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
590 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
591 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
592 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
593 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
594 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
595 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
596 (#xC6 #x043A) ; CYRILLIC SMALL LETTER KA
597 (#xC7 #x041A) ; CYRILLIC CAPITAL LETTER KA
598 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
599 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
600 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
601 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
602 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
603 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
604 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
605 (#xCF #x00A4) ; CURRENCY SIGN
606 (#xD0 #x043B) ; CYRILLIC SMALL LETTER EL
607 (#xD1 #x041B) ; CYRILLIC CAPITAL LETTER EL
608 (#xD2 #x043C) ; CYRILLIC SMALL LETTER EM
609 (#xD3 #x041C) ; CYRILLIC CAPITAL LETTER EM
610 (#xD4 #x043D) ; CYRILLIC SMALL LETTER EN
611 (#xD5 #x041D) ; CYRILLIC CAPITAL LETTER EN
612 (#xD6 #x043E) ; CYRILLIC SMALL LETTER O
613 (#xD7 #x041E) ; CYRILLIC CAPITAL LETTER O
614 (#xD8 #x043F) ; CYRILLIC SMALL LETTER PE
615 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
616 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
617 (#xDB #x2588) ; FULL BLOCK
618 (#xDC #x2584) ; LOWER HALF BLOCK
619 (#xDD #x041F) ; CYRILLIC CAPITAL LETTER PE
620 (#xDE #x044F) ; CYRILLIC SMALL LETTER YA
621 (#xDF #x2580) ; UPPER HALF BLOCK
622 (#xE0 #x042F) ; CYRILLIC CAPITAL LETTER YA
623 (#xE1 #x0440) ; CYRILLIC SMALL LETTER ER
624 (#xE2 #x0420) ; CYRILLIC CAPITAL LETTER ER
625 (#xE3 #x0441) ; CYRILLIC SMALL LETTER ES
626 (#xE4 #x0421) ; CYRILLIC CAPITAL LETTER ES
627 (#xE5 #x0442) ; CYRILLIC SMALL LETTER TE
628 (#xE6 #x0422) ; CYRILLIC CAPITAL LETTER TE
629 (#xE7 #x0443) ; CYRILLIC SMALL LETTER U
630 (#xE8 #x0423) ; CYRILLIC CAPITAL LETTER U
631 (#xE9 #x0436) ; CYRILLIC SMALL LETTER ZHE
632 (#xEA #x0416) ; CYRILLIC CAPITAL LETTER ZHE
633 (#xEB #x0432) ; CYRILLIC SMALL LETTER VE
634 (#xEC #x0412) ; CYRILLIC CAPITAL LETTER VE
635 (#xED #x044C) ; CYRILLIC SMALL LETTER SOFT SIGN
636 (#xEE #x042C) ; CYRILLIC CAPITAL LETTER SOFT SIGN
637 (#xEF #x2116) ; NUMERO SIGN
638 (#xF0 #x00AD) ; SOFT HYPHEN
639 (#xF1 #x044B) ; CYRILLIC SMALL LETTER YERU
640 (#xF2 #x042B) ; CYRILLIC CAPITAL LETTER YERU
641 (#xF3 #x0437) ; CYRILLIC SMALL LETTER ZE
642 (#xF4 #x0417) ; CYRILLIC CAPITAL LETTER ZE
643 (#xF5 #x0448) ; CYRILLIC SMALL LETTER SHA
644 (#xF6 #x0428) ; CYRILLIC CAPITAL LETTER SHA
645 (#xF7 #x044D) ; CYRILLIC SMALL LETTER E
646 (#xF8 #x042D) ; CYRILLIC CAPITAL LETTER E
647 (#xF9 #x0449) ; CYRILLIC SMALL LETTER SHCHA
648 (#xFA #x0429) ; CYRILLIC CAPITAL LETTER SHCHA
649 (#xFB #x0447) ; CYRILLIC SMALL LETTER CHE
650 (#xFC #x0427) ; CYRILLIC CAPITAL LETTER CHE
651 (#xFD #x00A7) ; SECTION SIGN
652 (#xFE #x25A0) ; BLACK SQUARE
653 (#xFF #x00A0) ; NO-BREAK SPACE
656 (declaim (inline get-cp855-bytes))
657 (defun get-cp855-bytes (string pos)
658 (declare (optimize speed (safety 0))
659 (type simple-string string)
660 (type array-range pos))
661 (get-latin-bytes #'code->cp855-mapper :cp855 string pos))
663 (defun string->cp855 (string sstart send null-padding)
664 (declare (optimize speed (safety 0))
665 (type simple-string string)
666 (type array-range sstart send))
667 (values (string->latin% string sstart send #'get-cp855-bytes null-padding)))
669 (defmacro define-cp855->string* (accessor type)
670 (declare (ignore type))
671 (let ((name (make-od-name 'cp855->string* accessor)))
673 (defun ,name (string sstart send array astart aend)
674 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp855->code-mapper)))))
676 (instantiate-octets-definition define-cp855->string*)
678 (defmacro define-cp855->string (accessor type)
679 (declare (ignore type))
680 `(defun ,(make-od-name 'cp855->string accessor) (array astart aend)
681 (,(make-od-name 'latin->string accessor) array astart aend #'cp855->code-mapper)))
683 (instantiate-octets-definition define-cp855->string)
685 (add-external-format-funs '(:cp855 :|cp855|)
686 '(cp855->string-aref string->cp855))
688 (define-external-format (:cp855 :|cp855|)
690 (let ((cp855-byte (code->cp855-mapper bits)))
692 (setf (sap-ref-8 sap tail) cp855-byte)
693 (external-format-encoding-error stream bits)))
694 (let ((code (cp855->code-mapper byte)))
697 (external-format-decoding-error stream byte)))) ;; TODO -- error check
699 (define-unibyte-mapper cp857->code-mapper code->cp857-mapper
700 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
701 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
702 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
703 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
704 (#x84 #x00E4) ; LATIN SMALL LETTER A WITH DIAERESIS
705 (#x85 #x00E0) ; LATIN SMALL LETTER A WITH GRAVE
706 (#x86 #x00E5) ; LATIN SMALL LETTER A WITH RING ABOVE
707 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
708 (#x88 #x00EA) ; LATIN SMALL LETTER E WITH CIRCUMFLEX
709 (#x89 #x00EB) ; LATIN SMALL LETTER E WITH DIAERESIS
710 (#x8A #x00E8) ; LATIN SMALL LETTER E WITH GRAVE
711 (#x8B #x00EF) ; LATIN SMALL LETTER I WITH DIAERESIS
712 (#x8C #x00EE) ; LATIN SMALL LETTER I WITH CIRCUMFLEX
713 (#x8D #x0131) ; LATIN SMALL LETTER DOTLESS I
714 (#x8E #x00C4) ; LATIN CAPITAL LETTER A WITH DIAERESIS
715 (#x8F #x00C5) ; LATIN CAPITAL LETTER A WITH RING ABOVE
716 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
717 (#x91 #x00E6) ; LATIN SMALL LIGATURE AE
718 (#x92 #x00C6) ; LATIN CAPITAL LIGATURE AE
719 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
720 (#x94 #x00F6) ; LATIN SMALL LETTER O WITH DIAERESIS
721 (#x95 #x00F2) ; LATIN SMALL LETTER O WITH GRAVE
722 (#x96 #x00FB) ; LATIN SMALL LETTER U WITH CIRCUMFLEX
723 (#x97 #x00F9) ; LATIN SMALL LETTER U WITH GRAVE
724 (#x98 #x0130) ; LATIN CAPITAL LETTER I WITH DOT ABOVE
725 (#x99 #x00D6) ; LATIN CAPITAL LETTER O WITH DIAERESIS
726 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
727 (#x9B #x00F8) ; LATIN SMALL LETTER O WITH STROKE
728 (#x9C #x00A3) ; POUND SIGN
729 (#x9D #x00D8) ; LATIN CAPITAL LETTER O WITH STROKE
730 (#x9E #x015E) ; LATIN CAPITAL LETTER S WITH CEDILLA
731 (#x9F #x015F) ; LATIN SMALL LETTER S WITH CEDILLA
732 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
733 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
734 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
735 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
736 (#xA4 #x00F1) ; LATIN SMALL LETTER N WITH TILDE
737 (#xA5 #x00D1) ; LATIN CAPITAL LETTER N WITH TILDE
738 (#xA6 #x011E) ; LATIN CAPITAL LETTER G WITH BREVE
739 (#xA7 #x011F) ; LATIN SMALL LETTER G WITH BREVE
740 (#xA8 #x00BF) ; INVERTED QUESTION MARK
741 (#xA9 #x00AE) ; REGISTERED SIGN
742 (#xAA #x00AC) ; NOT SIGN
743 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
744 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
745 (#xAD #x00A1) ; INVERTED EXCLAMATION MARK
746 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
747 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
748 (#xB0 #x2591) ; LIGHT SHADE
749 (#xB1 #x2592) ; MEDIUM SHADE
750 (#xB2 #x2593) ; DARK SHADE
751 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
752 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
753 (#xB5 #x00C1) ; LATIN CAPITAL LETTER A WITH ACUTE
754 (#xB6 #x00C2) ; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
755 (#xB7 #x00C0) ; LATIN CAPITAL LETTER A WITH GRAVE
756 (#xB8 #x00A9) ; COPYRIGHT SIGN
757 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
758 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
759 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
760 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
761 (#xBD #x00A2) ; CENT SIGN
762 (#xBE #x00A5) ; YEN SIGN
763 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
764 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
765 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
766 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
767 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
768 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
769 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
770 (#xC6 #x00E3) ; LATIN SMALL LETTER A WITH TILDE
771 (#xC7 #x00C3) ; LATIN CAPITAL LETTER A WITH TILDE
772 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
773 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
774 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
775 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
776 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
777 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
778 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
779 (#xCF #x00A4) ; CURRENCY SIGN
780 (#xD0 #x00BA) ; MASCULINE ORDINAL INDICATOR
781 (#xD1 #x00AA) ; FEMININE ORDINAL INDICATOR
782 (#xD2 #x00CA) ; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
783 (#xD3 #x00CB) ; LATIN CAPITAL LETTER E WITH DIAERESIS
784 (#xD4 #x00C8) ; LATIN CAPITAL LETTER E WITH GRAVE
786 (#xD6 #x00CD) ; LATIN CAPITAL LETTER I WITH ACUTE
787 (#xD7 #x00CE) ; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
788 (#xD8 #x00CF) ; LATIN CAPITAL LETTER I WITH DIAERESIS
789 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
790 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
791 (#xDB #x2588) ; FULL BLOCK
792 (#xDC #x2584) ; LOWER HALF BLOCK
793 (#xDD #x00A6) ; BROKEN BAR
794 (#xDE #x00CC) ; LATIN CAPITAL LETTER I WITH GRAVE
795 (#xDF #x2580) ; UPPER HALF BLOCK
796 (#xE0 #x00D3) ; LATIN CAPITAL LETTER O WITH ACUTE
797 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
798 (#xE2 #x00D4) ; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
799 (#xE3 #x00D2) ; LATIN CAPITAL LETTER O WITH GRAVE
800 (#xE4 #x00F5) ; LATIN SMALL LETTER O WITH TILDE
801 (#xE5 #x00D5) ; LATIN CAPITAL LETTER O WITH TILDE
802 (#xE6 #x00B5) ; MICRO SIGN
804 (#xE8 #x00D7) ; MULTIPLICATION SIGN
805 (#xE9 #x00DA) ; LATIN CAPITAL LETTER U WITH ACUTE
806 (#xEA #x00DB) ; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
807 (#xEB #x00D9) ; LATIN CAPITAL LETTER U WITH GRAVE
808 (#xED #x00FF) ; LATIN SMALL LETTER Y WITH DIAERESIS
809 (#xEE #x00AF) ; MACRON
810 (#xEF #x00B4) ; ACUTE ACCENT
811 (#xF0 #x00AD) ; SOFT HYPHEN
812 (#xF1 #x00B1) ; PLUS-MINUS SIGN
814 (#xF3 #x00BE) ; VULGAR FRACTION THREE QUARTERS
815 (#xF4 #x00B6) ; PILCROW SIGN
816 (#xF5 #x00A7) ; SECTION SIGN
817 (#xF6 #x00F7) ; DIVISION SIGN
818 (#xF7 #x00B8) ; CEDILLA
819 (#xF8 #x00B0) ; DEGREE SIGN
820 (#xF9 #x00A8) ; DIAERESIS
821 (#xFA #x00B7) ; MIDDLE DOT
822 (#xFB #x00B9) ; SUPERSCRIPT ONE
823 (#xFC #x00B3) ; SUPERSCRIPT THREE
824 (#xFD #x00B2) ; SUPERSCRIPT TWO
825 (#xFE #x25A0) ; BLACK SQUARE
826 (#xFF #x00A0) ; NO-BREAK SPACE
829 (declaim (inline get-cp857-bytes))
830 (defun get-cp857-bytes (string pos)
831 (declare (optimize speed (safety 0))
832 (type simple-string string)
833 (type array-range pos))
834 (get-latin-bytes #'code->cp857-mapper :cp857 string pos))
836 (defun string->cp857 (string sstart send null-padding)
837 (declare (optimize speed (safety 0))
838 (type simple-string string)
839 (type array-range sstart send))
840 (values (string->latin% string sstart send #'get-cp857-bytes null-padding)))
842 (defmacro define-cp857->string* (accessor type)
843 (declare (ignore type))
844 (let ((name (make-od-name 'cp857->string* accessor)))
846 (defun ,name (string sstart send array astart aend)
847 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp857->code-mapper)))))
849 (instantiate-octets-definition define-cp857->string*)
851 (defmacro define-cp857->string (accessor type)
852 (declare (ignore type))
853 `(defun ,(make-od-name 'cp857->string accessor) (array astart aend)
854 (,(make-od-name 'latin->string accessor) array astart aend #'cp857->code-mapper)))
856 (instantiate-octets-definition define-cp857->string)
858 (add-external-format-funs '(:cp857 :|cp857|)
859 '(cp857->string-aref string->cp857))
861 (define-external-format (:cp857 :|cp857|)
863 (let ((cp857-byte (code->cp857-mapper bits)))
865 (setf (sap-ref-8 sap tail) cp857-byte)
866 (external-format-encoding-error stream bits)))
867 (let ((code (cp857->code-mapper byte)))
870 (external-format-decoding-error stream byte)))) ;; TODO -- error check
872 (define-unibyte-mapper cp860->code-mapper code->cp860-mapper
873 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
874 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
875 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
876 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
877 (#x84 #x00E3) ; LATIN SMALL LETTER A WITH TILDE
878 (#x85 #x00E0) ; LATIN SMALL LETTER A WITH GRAVE
879 (#x86 #x00C1) ; LATIN CAPITAL LETTER A WITH ACUTE
880 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
881 (#x88 #x00EA) ; LATIN SMALL LETTER E WITH CIRCUMFLEX
882 (#x89 #x00CA) ; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
883 (#x8A #x00E8) ; LATIN SMALL LETTER E WITH GRAVE
884 (#x8B #x00CD) ; LATIN CAPITAL LETTER I WITH ACUTE
885 (#x8C #x00D4) ; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
886 (#x8D #x00EC) ; LATIN SMALL LETTER I WITH GRAVE
887 (#x8E #x00C3) ; LATIN CAPITAL LETTER A WITH TILDE
888 (#x8F #x00C2) ; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
889 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
890 (#x91 #x00C0) ; LATIN CAPITAL LETTER A WITH GRAVE
891 (#x92 #x00C8) ; LATIN CAPITAL LETTER E WITH GRAVE
892 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
893 (#x94 #x00F5) ; LATIN SMALL LETTER O WITH TILDE
894 (#x95 #x00F2) ; LATIN SMALL LETTER O WITH GRAVE
895 (#x96 #x00DA) ; LATIN CAPITAL LETTER U WITH ACUTE
896 (#x97 #x00F9) ; LATIN SMALL LETTER U WITH GRAVE
897 (#x98 #x00CC) ; LATIN CAPITAL LETTER I WITH GRAVE
898 (#x99 #x00D5) ; LATIN CAPITAL LETTER O WITH TILDE
899 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
900 (#x9B #x00A2) ; CENT SIGN
901 (#x9C #x00A3) ; POUND SIGN
902 (#x9D #x00D9) ; LATIN CAPITAL LETTER U WITH GRAVE
903 (#x9E #x20A7) ; PESETA SIGN
904 (#x9F #x00D3) ; LATIN CAPITAL LETTER O WITH ACUTE
905 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
906 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
907 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
908 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
909 (#xA4 #x00F1) ; LATIN SMALL LETTER N WITH TILDE
910 (#xA5 #x00D1) ; LATIN CAPITAL LETTER N WITH TILDE
911 (#xA6 #x00AA) ; FEMININE ORDINAL INDICATOR
912 (#xA7 #x00BA) ; MASCULINE ORDINAL INDICATOR
913 (#xA8 #x00BF) ; INVERTED QUESTION MARK
914 (#xA9 #x00D2) ; LATIN CAPITAL LETTER O WITH GRAVE
915 (#xAA #x00AC) ; NOT SIGN
916 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
917 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
918 (#xAD #x00A1) ; INVERTED EXCLAMATION MARK
919 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
920 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
921 (#xB0 #x2591) ; LIGHT SHADE
922 (#xB1 #x2592) ; MEDIUM SHADE
923 (#xB2 #x2593) ; DARK SHADE
924 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
925 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
926 (#xB5 #x2561) ; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
927 (#xB6 #x2562) ; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
928 (#xB7 #x2556) ; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
929 (#xB8 #x2555) ; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
930 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
931 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
932 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
933 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
934 (#xBD #x255C) ; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
935 (#xBE #x255B) ; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
936 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
937 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
938 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
939 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
940 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
941 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
942 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
943 (#xC6 #x255E) ; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
944 (#xC7 #x255F) ; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
945 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
946 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
947 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
948 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
949 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
950 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
951 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
952 (#xCF #x2567) ; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
953 (#xD0 #x2568) ; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
954 (#xD1 #x2564) ; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
955 (#xD2 #x2565) ; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
956 (#xD3 #x2559) ; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
957 (#xD4 #x2558) ; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
958 (#xD5 #x2552) ; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
959 (#xD6 #x2553) ; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
960 (#xD7 #x256B) ; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
961 (#xD8 #x256A) ; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
962 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
963 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
964 (#xDB #x2588) ; FULL BLOCK
965 (#xDC #x2584) ; LOWER HALF BLOCK
966 (#xDD #x258C) ; LEFT HALF BLOCK
967 (#xDE #x2590) ; RIGHT HALF BLOCK
968 (#xDF #x2580) ; UPPER HALF BLOCK
969 (#xE0 #x03B1) ; GREEK SMALL LETTER ALPHA
970 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
971 (#xE2 #x0393) ; GREEK CAPITAL LETTER GAMMA
972 (#xE3 #x03C0) ; GREEK SMALL LETTER PI
973 (#xE4 #x03A3) ; GREEK CAPITAL LETTER SIGMA
974 (#xE5 #x03C3) ; GREEK SMALL LETTER SIGMA
975 (#xE6 #x00B5) ; MICRO SIGN
976 (#xE7 #x03C4) ; GREEK SMALL LETTER TAU
977 (#xE8 #x03A6) ; GREEK CAPITAL LETTER PHI
978 (#xE9 #x0398) ; GREEK CAPITAL LETTER THETA
979 (#xEA #x03A9) ; GREEK CAPITAL LETTER OMEGA
980 (#xEB #x03B4) ; GREEK SMALL LETTER DELTA
981 (#xEC #x221E) ; INFINITY
982 (#xED #x03C6) ; GREEK SMALL LETTER PHI
983 (#xEE #x03B5) ; GREEK SMALL LETTER EPSILON
984 (#xEF #x2229) ; INTERSECTION
985 (#xF0 #x2261) ; IDENTICAL TO
986 (#xF1 #x00B1) ; PLUS-MINUS SIGN
987 (#xF2 #x2265) ; GREATER-THAN OR EQUAL TO
988 (#xF3 #x2264) ; LESS-THAN OR EQUAL TO
989 (#xF4 #x2320) ; TOP HALF INTEGRAL
990 (#xF5 #x2321) ; BOTTOM HALF INTEGRAL
991 (#xF6 #x00F7) ; DIVISION SIGN
992 (#xF7 #x2248) ; ALMOST EQUAL TO
993 (#xF8 #x00B0) ; DEGREE SIGN
994 (#xF9 #x2219) ; BULLET OPERATOR
995 (#xFA #x00B7) ; MIDDLE DOT
996 (#xFB #x221A) ; SQUARE ROOT
997 (#xFC #x207F) ; SUPERSCRIPT LATIN SMALL LETTER N
998 (#xFD #x00B2) ; SUPERSCRIPT TWO
999 (#xFE #x25A0) ; BLACK SQUARE
1000 (#xFF #x00A0) ; NO-BREAK SPACE
1003 (declaim (inline get-cp860-bytes))
1004 (defun get-cp860-bytes (string pos)
1005 (declare (optimize speed (safety 0))
1006 (type simple-string string)
1007 (type array-range pos))
1008 (get-latin-bytes #'code->cp860-mapper :cp860 string pos))
1010 (defun string->cp860 (string sstart send null-padding)
1011 (declare (optimize speed (safety 0))
1012 (type simple-string string)
1013 (type array-range sstart send))
1014 (values (string->latin% string sstart send #'get-cp860-bytes null-padding)))
1016 (defmacro define-cp860->string* (accessor type)
1017 (declare (ignore type))
1018 (let ((name (make-od-name 'cp860->string* accessor)))
1020 (defun ,name (string sstart send array astart aend)
1021 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp860->code-mapper)))))
1023 (instantiate-octets-definition define-cp860->string*)
1025 (defmacro define-cp860->string (accessor type)
1026 (declare (ignore type))
1027 `(defun ,(make-od-name 'cp860->string accessor) (array astart aend)
1028 (,(make-od-name 'latin->string accessor) array astart aend #'cp860->code-mapper)))
1030 (instantiate-octets-definition define-cp860->string)
1032 (add-external-format-funs '(:cp860 :|cp860|)
1033 '(cp860->string-aref string->cp860))
1035 (define-external-format (:cp860 :|cp860|)
1037 (let ((cp860-byte (code->cp860-mapper bits)))
1039 (setf (sap-ref-8 sap tail) cp860-byte)
1040 (external-format-encoding-error stream bits)))
1041 (let ((code (cp860->code-mapper byte)))
1044 (external-format-decoding-error stream byte)))) ;; TODO -- error check
1046 (define-unibyte-mapper cp861->code-mapper code->cp861-mapper
1047 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
1048 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
1049 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
1050 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
1051 (#x84 #x00E4) ; LATIN SMALL LETTER A WITH DIAERESIS
1052 (#x85 #x00E0) ; LATIN SMALL LETTER A WITH GRAVE
1053 (#x86 #x00E5) ; LATIN SMALL LETTER A WITH RING ABOVE
1054 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
1055 (#x88 #x00EA) ; LATIN SMALL LETTER E WITH CIRCUMFLEX
1056 (#x89 #x00EB) ; LATIN SMALL LETTER E WITH DIAERESIS
1057 (#x8A #x00E8) ; LATIN SMALL LETTER E WITH GRAVE
1058 (#x8B #x00D0) ; LATIN CAPITAL LETTER ETH
1059 (#x8C #x00F0) ; LATIN SMALL LETTER ETH
1060 (#x8D #x00DE) ; LATIN CAPITAL LETTER THORN
1061 (#x8E #x00C4) ; LATIN CAPITAL LETTER A WITH DIAERESIS
1062 (#x8F #x00C5) ; LATIN CAPITAL LETTER A WITH RING ABOVE
1063 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
1064 (#x91 #x00E6) ; LATIN SMALL LIGATURE AE
1065 (#x92 #x00C6) ; LATIN CAPITAL LIGATURE AE
1066 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
1067 (#x94 #x00F6) ; LATIN SMALL LETTER O WITH DIAERESIS
1068 (#x95 #x00FE) ; LATIN SMALL LETTER THORN
1069 (#x96 #x00FB) ; LATIN SMALL LETTER U WITH CIRCUMFLEX
1070 (#x97 #x00DD) ; LATIN CAPITAL LETTER Y WITH ACUTE
1071 (#x98 #x00FD) ; LATIN SMALL LETTER Y WITH ACUTE
1072 (#x99 #x00D6) ; LATIN CAPITAL LETTER O WITH DIAERESIS
1073 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
1074 (#x9B #x00F8) ; LATIN SMALL LETTER O WITH STROKE
1075 (#x9C #x00A3) ; POUND SIGN
1076 (#x9D #x00D8) ; LATIN CAPITAL LETTER O WITH STROKE
1077 (#x9E #x20A7) ; PESETA SIGN
1078 (#x9F #x0192) ; LATIN SMALL LETTER F WITH HOOK
1079 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
1080 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
1081 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
1082 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
1083 (#xA4 #x00C1) ; LATIN CAPITAL LETTER A WITH ACUTE
1084 (#xA5 #x00CD) ; LATIN CAPITAL LETTER I WITH ACUTE
1085 (#xA6 #x00D3) ; LATIN CAPITAL LETTER O WITH ACUTE
1086 (#xA7 #x00DA) ; LATIN CAPITAL LETTER U WITH ACUTE
1087 (#xA8 #x00BF) ; INVERTED QUESTION MARK
1088 (#xA9 #x2310) ; REVERSED NOT SIGN
1089 (#xAA #x00AC) ; NOT SIGN
1090 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
1091 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
1092 (#xAD #x00A1) ; INVERTED EXCLAMATION MARK
1093 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
1094 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
1095 (#xB0 #x2591) ; LIGHT SHADE
1096 (#xB1 #x2592) ; MEDIUM SHADE
1097 (#xB2 #x2593) ; DARK SHADE
1098 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
1099 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
1100 (#xB5 #x2561) ; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
1101 (#xB6 #x2562) ; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
1102 (#xB7 #x2556) ; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
1103 (#xB8 #x2555) ; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
1104 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
1105 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
1106 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
1107 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
1108 (#xBD #x255C) ; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
1109 (#xBE #x255B) ; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
1110 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
1111 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
1112 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
1113 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
1114 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
1115 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
1116 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
1117 (#xC6 #x255E) ; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
1118 (#xC7 #x255F) ; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
1119 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
1120 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
1121 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
1122 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
1123 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
1124 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
1125 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
1126 (#xCF #x2567) ; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
1127 (#xD0 #x2568) ; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
1128 (#xD1 #x2564) ; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
1129 (#xD2 #x2565) ; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
1130 (#xD3 #x2559) ; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
1131 (#xD4 #x2558) ; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
1132 (#xD5 #x2552) ; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
1133 (#xD6 #x2553) ; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
1134 (#xD7 #x256B) ; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
1135 (#xD8 #x256A) ; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
1136 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
1137 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
1138 (#xDB #x2588) ; FULL BLOCK
1139 (#xDC #x2584) ; LOWER HALF BLOCK
1140 (#xDD #x258C) ; LEFT HALF BLOCK
1141 (#xDE #x2590) ; RIGHT HALF BLOCK
1142 (#xDF #x2580) ; UPPER HALF BLOCK
1143 (#xE0 #x03B1) ; GREEK SMALL LETTER ALPHA
1144 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
1145 (#xE2 #x0393) ; GREEK CAPITAL LETTER GAMMA
1146 (#xE3 #x03C0) ; GREEK SMALL LETTER PI
1147 (#xE4 #x03A3) ; GREEK CAPITAL LETTER SIGMA
1148 (#xE5 #x03C3) ; GREEK SMALL LETTER SIGMA
1149 (#xE6 #x00B5) ; MICRO SIGN
1150 (#xE7 #x03C4) ; GREEK SMALL LETTER TAU
1151 (#xE8 #x03A6) ; GREEK CAPITAL LETTER PHI
1152 (#xE9 #x0398) ; GREEK CAPITAL LETTER THETA
1153 (#xEA #x03A9) ; GREEK CAPITAL LETTER OMEGA
1154 (#xEB #x03B4) ; GREEK SMALL LETTER DELTA
1155 (#xEC #x221E) ; INFINITY
1156 (#xED #x03C6) ; GREEK SMALL LETTER PHI
1157 (#xEE #x03B5) ; GREEK SMALL LETTER EPSILON
1158 (#xEF #x2229) ; INTERSECTION
1159 (#xF0 #x2261) ; IDENTICAL TO
1160 (#xF1 #x00B1) ; PLUS-MINUS SIGN
1161 (#xF2 #x2265) ; GREATER-THAN OR EQUAL TO
1162 (#xF3 #x2264) ; LESS-THAN OR EQUAL TO
1163 (#xF4 #x2320) ; TOP HALF INTEGRAL
1164 (#xF5 #x2321) ; BOTTOM HALF INTEGRAL
1165 (#xF6 #x00F7) ; DIVISION SIGN
1166 (#xF7 #x2248) ; ALMOST EQUAL TO
1167 (#xF8 #x00B0) ; DEGREE SIGN
1168 (#xF9 #x2219) ; BULLET OPERATOR
1169 (#xFA #x00B7) ; MIDDLE DOT
1170 (#xFB #x221A) ; SQUARE ROOT
1171 (#xFC #x207F) ; SUPERSCRIPT LATIN SMALL LETTER N
1172 (#xFD #x00B2) ; SUPERSCRIPT TWO
1173 (#xFE #x25A0) ; BLACK SQUARE
1174 (#xFF #x00A0) ; NO-BREAK SPACE
1177 (declaim (inline get-cp861-bytes))
1178 (defun get-cp861-bytes (string pos)
1179 (declare (optimize speed (safety 0))
1180 (type simple-string string)
1181 (type array-range pos))
1182 (get-latin-bytes #'code->cp861-mapper :cp861 string pos))
1184 (defun string->cp861 (string sstart send null-padding)
1185 (declare (optimize speed (safety 0))
1186 (type simple-string string)
1187 (type array-range sstart send))
1188 (values (string->latin% string sstart send #'get-cp861-bytes null-padding)))
1190 (defmacro define-cp861->string* (accessor type)
1191 (declare (ignore type))
1192 (let ((name (make-od-name 'cp861->string* accessor)))
1194 (defun ,name (string sstart send array astart aend)
1195 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp861->code-mapper)))))
1197 (instantiate-octets-definition define-cp861->string*)
1199 (defmacro define-cp861->string (accessor type)
1200 (declare (ignore type))
1201 `(defun ,(make-od-name 'cp861->string accessor) (array astart aend)
1202 (,(make-od-name 'latin->string accessor) array astart aend #'cp861->code-mapper)))
1204 (instantiate-octets-definition define-cp861->string)
1206 (add-external-format-funs '(:cp861 :|cp861|)
1207 '(cp861->string-aref string->cp861))
1209 (define-external-format (:cp861 :|cp861|)
1211 (let ((cp861-byte (code->cp861-mapper bits)))
1213 (setf (sap-ref-8 sap tail) cp861-byte)
1214 (external-format-encoding-error stream bits)))
1215 (let ((code (cp861->code-mapper byte)))
1218 (external-format-decoding-error stream byte)))) ;; TODO -- error check
1220 (define-unibyte-mapper cp862->code-mapper code->cp862-mapper
1221 (#x80 #x05D0) ; HEBREW LETTER ALEF
1222 (#x81 #x05D1) ; HEBREW LETTER BET
1223 (#x82 #x05D2) ; HEBREW LETTER GIMEL
1224 (#x83 #x05D3) ; HEBREW LETTER DALET
1225 (#x84 #x05D4) ; HEBREW LETTER HE
1226 (#x85 #x05D5) ; HEBREW LETTER VAV
1227 (#x86 #x05D6) ; HEBREW LETTER ZAYIN
1228 (#x87 #x05D7) ; HEBREW LETTER HET
1229 (#x88 #x05D8) ; HEBREW LETTER TET
1230 (#x89 #x05D9) ; HEBREW LETTER YOD
1231 (#x8A #x05DA) ; HEBREW LETTER FINAL KAF
1232 (#x8B #x05DB) ; HEBREW LETTER KAF
1233 (#x8C #x05DC) ; HEBREW LETTER LAMED
1234 (#x8D #x05DD) ; HEBREW LETTER FINAL MEM
1235 (#x8E #x05DE) ; HEBREW LETTER MEM
1236 (#x8F #x05DF) ; HEBREW LETTER FINAL NUN
1237 (#x90 #x05E0) ; HEBREW LETTER NUN
1238 (#x91 #x05E1) ; HEBREW LETTER SAMEKH
1239 (#x92 #x05E2) ; HEBREW LETTER AYIN
1240 (#x93 #x05E3) ; HEBREW LETTER FINAL PE
1241 (#x94 #x05E4) ; HEBREW LETTER PE
1242 (#x95 #x05E5) ; HEBREW LETTER FINAL TSADI
1243 (#x96 #x05E6) ; HEBREW LETTER TSADI
1244 (#x97 #x05E7) ; HEBREW LETTER QOF
1245 (#x98 #x05E8) ; HEBREW LETTER RESH
1246 (#x99 #x05E9) ; HEBREW LETTER SHIN
1247 (#x9A #x05EA) ; HEBREW LETTER TAV
1248 (#x9B #x00A2) ; CENT SIGN
1249 (#x9C #x00A3) ; POUND SIGN
1250 (#x9D #x00A5) ; YEN SIGN
1251 (#x9E #x20A7) ; PESETA SIGN
1252 (#x9F #x0192) ; LATIN SMALL LETTER F WITH HOOK
1253 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
1254 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
1255 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
1256 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
1257 (#xA4 #x00F1) ; LATIN SMALL LETTER N WITH TILDE
1258 (#xA5 #x00D1) ; LATIN CAPITAL LETTER N WITH TILDE
1259 (#xA6 #x00AA) ; FEMININE ORDINAL INDICATOR
1260 (#xA7 #x00BA) ; MASCULINE ORDINAL INDICATOR
1261 (#xA8 #x00BF) ; INVERTED QUESTION MARK
1262 (#xA9 #x2310) ; REVERSED NOT SIGN
1263 (#xAA #x00AC) ; NOT SIGN
1264 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
1265 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
1266 (#xAD #x00A1) ; INVERTED EXCLAMATION MARK
1267 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
1268 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
1269 (#xB0 #x2591) ; LIGHT SHADE
1270 (#xB1 #x2592) ; MEDIUM SHADE
1271 (#xB2 #x2593) ; DARK SHADE
1272 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
1273 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
1274 (#xB5 #x2561) ; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
1275 (#xB6 #x2562) ; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
1276 (#xB7 #x2556) ; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
1277 (#xB8 #x2555) ; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
1278 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
1279 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
1280 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
1281 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
1282 (#xBD #x255C) ; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
1283 (#xBE #x255B) ; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
1284 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
1285 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
1286 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
1287 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
1288 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
1289 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
1290 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
1291 (#xC6 #x255E) ; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
1292 (#xC7 #x255F) ; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
1293 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
1294 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
1295 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
1296 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
1297 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
1298 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
1299 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
1300 (#xCF #x2567) ; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
1301 (#xD0 #x2568) ; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
1302 (#xD1 #x2564) ; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
1303 (#xD2 #x2565) ; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
1304 (#xD3 #x2559) ; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
1305 (#xD4 #x2558) ; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
1306 (#xD5 #x2552) ; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
1307 (#xD6 #x2553) ; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
1308 (#xD7 #x256B) ; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
1309 (#xD8 #x256A) ; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
1310 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
1311 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
1312 (#xDB #x2588) ; FULL BLOCK
1313 (#xDC #x2584) ; LOWER HALF BLOCK
1314 (#xDD #x258C) ; LEFT HALF BLOCK
1315 (#xDE #x2590) ; RIGHT HALF BLOCK
1316 (#xDF #x2580) ; UPPER HALF BLOCK
1317 (#xE0 #x03B1) ; GREEK SMALL LETTER ALPHA
1318 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S (GERMAN)
1319 (#xE2 #x0393) ; GREEK CAPITAL LETTER GAMMA
1320 (#xE3 #x03C0) ; GREEK SMALL LETTER PI
1321 (#xE4 #x03A3) ; GREEK CAPITAL LETTER SIGMA
1322 (#xE5 #x03C3) ; GREEK SMALL LETTER SIGMA
1323 (#xE6 #x00B5) ; MICRO SIGN
1324 (#xE7 #x03C4) ; GREEK SMALL LETTER TAU
1325 (#xE8 #x03A6) ; GREEK CAPITAL LETTER PHI
1326 (#xE9 #x0398) ; GREEK CAPITAL LETTER THETA
1327 (#xEA #x03A9) ; GREEK CAPITAL LETTER OMEGA
1328 (#xEB #x03B4) ; GREEK SMALL LETTER DELTA
1329 (#xEC #x221E) ; INFINITY
1330 (#xED #x03C6) ; GREEK SMALL LETTER PHI
1331 (#xEE #x03B5) ; GREEK SMALL LETTER EPSILON
1332 (#xEF #x2229) ; INTERSECTION
1333 (#xF0 #x2261) ; IDENTICAL TO
1334 (#xF1 #x00B1) ; PLUS-MINUS SIGN
1335 (#xF2 #x2265) ; GREATER-THAN OR EQUAL TO
1336 (#xF3 #x2264) ; LESS-THAN OR EQUAL TO
1337 (#xF4 #x2320) ; TOP HALF INTEGRAL
1338 (#xF5 #x2321) ; BOTTOM HALF INTEGRAL
1339 (#xF6 #x00F7) ; DIVISION SIGN
1340 (#xF7 #x2248) ; ALMOST EQUAL TO
1341 (#xF8 #x00B0) ; DEGREE SIGN
1342 (#xF9 #x2219) ; BULLET OPERATOR
1343 (#xFA #x00B7) ; MIDDLE DOT
1344 (#xFB #x221A) ; SQUARE ROOT
1345 (#xFC #x207F) ; SUPERSCRIPT LATIN SMALL LETTER N
1346 (#xFD #x00B2) ; SUPERSCRIPT TWO
1347 (#xFE #x25A0) ; BLACK SQUARE
1348 (#xFF #x00A0) ; NO-BREAK SPACE
1351 (declaim (inline get-cp862-bytes))
1352 (defun get-cp862-bytes (string pos)
1353 (declare (optimize speed (safety 0))
1354 (type simple-string string)
1355 (type array-range pos))
1356 (get-latin-bytes #'code->cp862-mapper :cp862 string pos))
1358 (defun string->cp862 (string sstart send null-padding)
1359 (declare (optimize speed (safety 0))
1360 (type simple-string string)
1361 (type array-range sstart send))
1362 (values (string->latin% string sstart send #'get-cp862-bytes null-padding)))
1364 (defmacro define-cp862->string* (accessor type)
1365 (declare (ignore type))
1366 (let ((name (make-od-name 'cp862->string* accessor)))
1368 (defun ,name (string sstart send array astart aend)
1369 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp862->code-mapper)))))
1371 (instantiate-octets-definition define-cp862->string*)
1373 (defmacro define-cp862->string (accessor type)
1374 (declare (ignore type))
1375 `(defun ,(make-od-name 'cp862->string accessor) (array astart aend)
1376 (,(make-od-name 'latin->string accessor) array astart aend #'cp862->code-mapper)))
1378 (instantiate-octets-definition define-cp862->string)
1380 (add-external-format-funs '(:cp862 :|cp862|)
1381 '(cp862->string-aref string->cp862))
1383 (define-external-format (:cp862 :|cp862|)
1385 (let ((cp862-byte (code->cp862-mapper bits)))
1387 (setf (sap-ref-8 sap tail) cp862-byte)
1388 (external-format-encoding-error stream bits)))
1389 (let ((code (cp862->code-mapper byte)))
1392 (external-format-decoding-error stream byte)))) ;; TODO -- error check
1394 (define-unibyte-mapper cp863->code-mapper code->cp863-mapper
1395 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
1396 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
1397 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
1398 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
1399 (#x84 #x00C2) ; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
1400 (#x85 #x00E0) ; LATIN SMALL LETTER A WITH GRAVE
1401 (#x86 #x00B6) ; PILCROW SIGN
1402 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
1403 (#x88 #x00EA) ; LATIN SMALL LETTER E WITH CIRCUMFLEX
1404 (#x89 #x00EB) ; LATIN SMALL LETTER E WITH DIAERESIS
1405 (#x8A #x00E8) ; LATIN SMALL LETTER E WITH GRAVE
1406 (#x8B #x00EF) ; LATIN SMALL LETTER I WITH DIAERESIS
1407 (#x8C #x00EE) ; LATIN SMALL LETTER I WITH CIRCUMFLEX
1408 (#x8D #x2017) ; DOUBLE LOW LINE
1409 (#x8E #x00C0) ; LATIN CAPITAL LETTER A WITH GRAVE
1410 (#x8F #x00A7) ; SECTION SIGN
1411 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
1412 (#x91 #x00C8) ; LATIN CAPITAL LETTER E WITH GRAVE
1413 (#x92 #x00CA) ; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1414 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
1415 (#x94 #x00CB) ; LATIN CAPITAL LETTER E WITH DIAERESIS
1416 (#x95 #x00CF) ; LATIN CAPITAL LETTER I WITH DIAERESIS
1417 (#x96 #x00FB) ; LATIN SMALL LETTER U WITH CIRCUMFLEX
1418 (#x97 #x00F9) ; LATIN SMALL LETTER U WITH GRAVE
1419 (#x98 #x00A4) ; CURRENCY SIGN
1420 (#x99 #x00D4) ; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1421 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
1422 (#x9B #x00A2) ; CENT SIGN
1423 (#x9C #x00A3) ; POUND SIGN
1424 (#x9D #x00D9) ; LATIN CAPITAL LETTER U WITH GRAVE
1425 (#x9E #x00DB) ; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
1426 (#x9F #x0192) ; LATIN SMALL LETTER F WITH HOOK
1427 (#xA0 #x00A6) ; BROKEN BAR
1428 (#xA1 #x00B4) ; ACUTE ACCENT
1429 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
1430 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
1431 (#xA4 #x00A8) ; DIAERESIS
1432 (#xA5 #x00B8) ; CEDILLA
1433 (#xA6 #x00B3) ; SUPERSCRIPT THREE
1434 (#xA7 #x00AF) ; MACRON
1435 (#xA8 #x00CE) ; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
1436 (#xA9 #x2310) ; REVERSED NOT SIGN
1437 (#xAA #x00AC) ; NOT SIGN
1438 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
1439 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
1440 (#xAD #x00BE) ; VULGAR FRACTION THREE QUARTERS
1441 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
1442 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
1443 (#xB0 #x2591) ; LIGHT SHADE
1444 (#xB1 #x2592) ; MEDIUM SHADE
1445 (#xB2 #x2593) ; DARK SHADE
1446 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
1447 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
1448 (#xB5 #x2561) ; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
1449 (#xB6 #x2562) ; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
1450 (#xB7 #x2556) ; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
1451 (#xB8 #x2555) ; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
1452 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
1453 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
1454 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
1455 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
1456 (#xBD #x255C) ; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
1457 (#xBE #x255B) ; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
1458 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
1459 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
1460 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
1461 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
1462 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
1463 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
1464 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
1465 (#xC6 #x255E) ; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
1466 (#xC7 #x255F) ; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
1467 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
1468 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
1469 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
1470 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
1471 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
1472 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
1473 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
1474 (#xCF #x2567) ; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
1475 (#xD0 #x2568) ; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
1476 (#xD1 #x2564) ; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
1477 (#xD2 #x2565) ; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
1478 (#xD3 #x2559) ; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
1479 (#xD4 #x2558) ; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
1480 (#xD5 #x2552) ; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
1481 (#xD6 #x2553) ; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
1482 (#xD7 #x256B) ; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
1483 (#xD8 #x256A) ; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
1484 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
1485 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
1486 (#xDB #x2588) ; FULL BLOCK
1487 (#xDC #x2584) ; LOWER HALF BLOCK
1488 (#xDD #x258C) ; LEFT HALF BLOCK
1489 (#xDE #x2590) ; RIGHT HALF BLOCK
1490 (#xDF #x2580) ; UPPER HALF BLOCK
1491 (#xE0 #x03B1) ; GREEK SMALL LETTER ALPHA
1492 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
1493 (#xE2 #x0393) ; GREEK CAPITAL LETTER GAMMA
1494 (#xE3 #x03C0) ; GREEK SMALL LETTER PI
1495 (#xE4 #x03A3) ; GREEK CAPITAL LETTER SIGMA
1496 (#xE5 #x03C3) ; GREEK SMALL LETTER SIGMA
1497 (#xE6 #x00B5) ; MICRO SIGN
1498 (#xE7 #x03C4) ; GREEK SMALL LETTER TAU
1499 (#xE8 #x03A6) ; GREEK CAPITAL LETTER PHI
1500 (#xE9 #x0398) ; GREEK CAPITAL LETTER THETA
1501 (#xEA #x03A9) ; GREEK CAPITAL LETTER OMEGA
1502 (#xEB #x03B4) ; GREEK SMALL LETTER DELTA
1503 (#xEC #x221E) ; INFINITY
1504 (#xED #x03C6) ; GREEK SMALL LETTER PHI
1505 (#xEE #x03B5) ; GREEK SMALL LETTER EPSILON
1506 (#xEF #x2229) ; INTERSECTION
1507 (#xF0 #x2261) ; IDENTICAL TO
1508 (#xF1 #x00B1) ; PLUS-MINUS SIGN
1509 (#xF2 #x2265) ; GREATER-THAN OR EQUAL TO
1510 (#xF3 #x2264) ; LESS-THAN OR EQUAL TO
1511 (#xF4 #x2320) ; TOP HALF INTEGRAL
1512 (#xF5 #x2321) ; BOTTOM HALF INTEGRAL
1513 (#xF6 #x00F7) ; DIVISION SIGN
1514 (#xF7 #x2248) ; ALMOST EQUAL TO
1515 (#xF8 #x00B0) ; DEGREE SIGN
1516 (#xF9 #x2219) ; BULLET OPERATOR
1517 (#xFA #x00B7) ; MIDDLE DOT
1518 (#xFB #x221A) ; SQUARE ROOT
1519 (#xFC #x207F) ; SUPERSCRIPT LATIN SMALL LETTER N
1520 (#xFD #x00B2) ; SUPERSCRIPT TWO
1521 (#xFE #x25A0) ; BLACK SQUARE
1522 (#xFF #x00A0) ; NO-BREAK SPACE
1525 (declaim (inline get-cp863-bytes))
1526 (defun get-cp863-bytes (string pos)
1527 (declare (optimize speed (safety 0))
1528 (type simple-string string)
1529 (type array-range pos))
1530 (get-latin-bytes #'code->cp863-mapper :cp863 string pos))
1532 (defun string->cp863 (string sstart send null-padding)
1533 (declare (optimize speed (safety 0))
1534 (type simple-string string)
1535 (type array-range sstart send))
1536 (values (string->latin% string sstart send #'get-cp863-bytes null-padding)))
1538 (defmacro define-cp863->string* (accessor type)
1539 (declare (ignore type))
1540 (let ((name (make-od-name 'cp863->string* accessor)))
1542 (defun ,name (string sstart send array astart aend)
1543 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp863->code-mapper)))))
1545 (instantiate-octets-definition define-cp863->string*)
1547 (defmacro define-cp863->string (accessor type)
1548 (declare (ignore type))
1549 `(defun ,(make-od-name 'cp863->string accessor) (array astart aend)
1550 (,(make-od-name 'latin->string accessor) array astart aend #'cp863->code-mapper)))
1552 (instantiate-octets-definition define-cp863->string)
1554 (add-external-format-funs '(:cp863 :|cp863|)
1555 '(cp863->string-aref string->cp863))
1557 (define-external-format (:cp863 :|cp863|)
1559 (let ((cp863-byte (code->cp863-mapper bits)))
1561 (setf (sap-ref-8 sap tail) cp863-byte)
1562 (external-format-encoding-error stream bits)))
1563 (let ((code (cp863->code-mapper byte)))
1566 (external-format-decoding-error stream byte)))) ;; TODO -- error check
1568 (define-unibyte-mapper cp864->code-mapper code->cp864-mapper
1569 (#x80 #x00B0) ; DEGREE SIGN
1570 (#x81 #x00B7) ; MIDDLE DOT
1571 (#x82 #x2219) ; BULLET OPERATOR
1572 (#x83 #x221A) ; SQUARE ROOT
1573 (#x84 #x2592) ; MEDIUM SHADE
1574 (#x85 #x2500) ; FORMS LIGHT HORIZONTAL
1575 (#x86 #x2502) ; FORMS LIGHT VERTICAL
1576 (#x87 #x253C) ; FORMS LIGHT VERTICAL AND HORIZONTAL
1577 (#x88 #x2524) ; FORMS LIGHT VERTICAL AND LEFT
1578 (#x89 #x252C) ; FORMS LIGHT DOWN AND HORIZONTAL
1579 (#x8A #x251C) ; FORMS LIGHT VERTICAL AND RIGHT
1580 (#x8B #x2534) ; FORMS LIGHT UP AND HORIZONTAL
1581 (#x8C #x2510) ; FORMS LIGHT DOWN AND LEFT
1582 (#x8D #x250C) ; FORMS LIGHT DOWN AND RIGHT
1583 (#x8E #x2514) ; FORMS LIGHT UP AND RIGHT
1584 (#x8F #x2518) ; FORMS LIGHT UP AND LEFT
1585 (#x90 #x03B2) ; GREEK SMALL BETA
1586 (#x91 #x221E) ; INFINITY
1587 (#x92 #x03C6) ; GREEK SMALL PHI
1588 (#x93 #x00B1) ; PLUS-OR-MINUS SIGN
1589 (#x94 #x00BD) ; FRACTION 1/2
1590 (#x95 #x00BC) ; FRACTION 1/4
1591 (#x96 #x2248) ; ALMOST EQUAL TO
1592 (#x97 #x00AB) ; LEFT POINTING GUILLEMET
1593 (#x98 #x00BB) ; RIGHT POINTING GUILLEMET
1594 (#x99 #xFEF7) ; ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
1595 (#x9A #xFEF8) ; ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
1598 (#x9D #xFEFB) ; ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
1599 (#x9E #xFEFC) ; ARABIC LIGATURE LAM WITH ALEF FINAL FORM
1601 (#xA1 #x00AD) ; SOFT HYPHEN
1602 (#xA2 #xFE82) ; ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
1603 (#xA5 #xFE84) ; ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
1606 (#xA8 #xFE8E) ; ARABIC LETTER ALEF FINAL FORM
1607 (#xA9 #xFE8F) ; ARABIC LETTER BEH ISOLATED FORM
1608 (#xAA #xFE95) ; ARABIC LETTER TEH ISOLATED FORM
1609 (#xAB #xFE99) ; ARABIC LETTER THEH ISOLATED FORM
1610 (#xAC #x060C) ; ARABIC COMMA
1611 (#xAD #xFE9D) ; ARABIC LETTER JEEM ISOLATED FORM
1612 (#xAE #xFEA1) ; ARABIC LETTER HAH ISOLATED FORM
1613 (#xAF #xFEA5) ; ARABIC LETTER KHAH ISOLATED FORM
1614 (#xB0 #x0660) ; ARABIC-INDIC DIGIT ZERO
1615 (#xB1 #x0661) ; ARABIC-INDIC DIGIT ONE
1616 (#xB2 #x0662) ; ARABIC-INDIC DIGIT TWO
1617 (#xB3 #x0663) ; ARABIC-INDIC DIGIT THREE
1618 (#xB4 #x0664) ; ARABIC-INDIC DIGIT FOUR
1619 (#xB5 #x0665) ; ARABIC-INDIC DIGIT FIVE
1620 (#xB6 #x0666) ; ARABIC-INDIC DIGIT SIX
1621 (#xB7 #x0667) ; ARABIC-INDIC DIGIT SEVEN
1622 (#xB8 #x0668) ; ARABIC-INDIC DIGIT EIGHT
1623 (#xB9 #x0669) ; ARABIC-INDIC DIGIT NINE
1624 (#xBA #xFED1) ; ARABIC LETTER FEH ISOLATED FORM
1625 (#xBB #x061B) ; ARABIC SEMICOLON
1626 (#xBC #xFEB1) ; ARABIC LETTER SEEN ISOLATED FORM
1627 (#xBD #xFEB5) ; ARABIC LETTER SHEEN ISOLATED FORM
1628 (#xBE #xFEB9) ; ARABIC LETTER SAD ISOLATED FORM
1629 (#xBF #x061F) ; ARABIC QUESTION MARK
1630 (#xC0 #x00A2) ; CENT SIGN
1631 (#xC1 #xFE80) ; ARABIC LETTER HAMZA ISOLATED FORM
1632 (#xC2 #xFE81) ; ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
1633 (#xC3 #xFE83) ; ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
1634 (#xC4 #xFE85) ; ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
1635 (#xC5 #xFECA) ; ARABIC LETTER AIN FINAL FORM
1636 (#xC6 #xFE8B) ; ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
1637 (#xC7 #xFE8D) ; ARABIC LETTER ALEF ISOLATED FORM
1638 (#xC8 #xFE91) ; ARABIC LETTER BEH INITIAL FORM
1639 (#xC9 #xFE93) ; ARABIC LETTER TEH MARBUTA ISOLATED FORM
1640 (#xCA #xFE97) ; ARABIC LETTER TEH INITIAL FORM
1641 (#xCB #xFE9B) ; ARABIC LETTER THEH INITIAL FORM
1642 (#xCC #xFE9F) ; ARABIC LETTER JEEM INITIAL FORM
1643 (#xCD #xFEA3) ; ARABIC LETTER HAH INITIAL FORM
1644 (#xCE #xFEA7) ; ARABIC LETTER KHAH INITIAL FORM
1645 (#xCF #xFEA9) ; ARABIC LETTER DAL ISOLATED FORM
1646 (#xD0 #xFEAB) ; ARABIC LETTER THAL ISOLATED FORM
1647 (#xD1 #xFEAD) ; ARABIC LETTER REH ISOLATED FORM
1648 (#xD2 #xFEAF) ; ARABIC LETTER ZAIN ISOLATED FORM
1649 (#xD3 #xFEB3) ; ARABIC LETTER SEEN INITIAL FORM
1650 (#xD4 #xFEB7) ; ARABIC LETTER SHEEN INITIAL FORM
1651 (#xD5 #xFEBB) ; ARABIC LETTER SAD INITIAL FORM
1652 (#xD6 #xFEBF) ; ARABIC LETTER DAD INITIAL FORM
1653 (#xD7 #xFEC1) ; ARABIC LETTER TAH ISOLATED FORM
1654 (#xD8 #xFEC5) ; ARABIC LETTER ZAH ISOLATED FORM
1655 (#xD9 #xFECB) ; ARABIC LETTER AIN INITIAL FORM
1656 (#xDA #xFECF) ; ARABIC LETTER GHAIN INITIAL FORM
1657 (#xDB #x00A6) ; BROKEN VERTICAL BAR
1658 (#xDC #x00AC) ; NOT SIGN
1659 (#xDD #x00F7) ; DIVISION SIGN
1660 (#xDE #x00D7) ; MULTIPLICATION SIGN
1661 (#xDF #xFEC9) ; ARABIC LETTER AIN ISOLATED FORM
1662 (#xE0 #x0640) ; ARABIC TATWEEL
1663 (#xE1 #xFED3) ; ARABIC LETTER FEH INITIAL FORM
1664 (#xE2 #xFED7) ; ARABIC LETTER QAF INITIAL FORM
1665 (#xE3 #xFEDB) ; ARABIC LETTER KAF INITIAL FORM
1666 (#xE4 #xFEDF) ; ARABIC LETTER LAM INITIAL FORM
1667 (#xE5 #xFEE3) ; ARABIC LETTER MEEM INITIAL FORM
1668 (#xE6 #xFEE7) ; ARABIC LETTER NOON INITIAL FORM
1669 (#xE7 #xFEEB) ; ARABIC LETTER HEH INITIAL FORM
1670 (#xE8 #xFEED) ; ARABIC LETTER WAW ISOLATED FORM
1671 (#xE9 #xFEEF) ; ARABIC LETTER ALEF MAKSURA ISOLATED FORM
1672 (#xEA #xFEF3) ; ARABIC LETTER YEH INITIAL FORM
1673 (#xEB #xFEBD) ; ARABIC LETTER DAD ISOLATED FORM
1674 (#xEC #xFECC) ; ARABIC LETTER AIN MEDIAL FORM
1675 (#xED #xFECE) ; ARABIC LETTER GHAIN FINAL FORM
1676 (#xEE #xFECD) ; ARABIC LETTER GHAIN ISOLATED FORM
1677 (#xEF #xFEE1) ; ARABIC LETTER MEEM ISOLATED FORM
1678 (#xF0 #xFE7D) ; ARABIC SHADDA MEDIAL FORM
1679 (#xF1 #x0651) ; ARABIC SHADDAH
1680 (#xF2 #xFEE5) ; ARABIC LETTER NOON ISOLATED FORM
1681 (#xF3 #xFEE9) ; ARABIC LETTER HEH ISOLATED FORM
1682 (#xF4 #xFEEC) ; ARABIC LETTER HEH MEDIAL FORM
1683 (#xF5 #xFEF0) ; ARABIC LETTER ALEF MAKSURA FINAL FORM
1684 (#xF6 #xFEF2) ; ARABIC LETTER YEH FINAL FORM
1685 (#xF7 #xFED0) ; ARABIC LETTER GHAIN MEDIAL FORM
1686 (#xF8 #xFED5) ; ARABIC LETTER QAF ISOLATED FORM
1687 (#xF9 #xFEF5) ; ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
1688 (#xFA #xFEF6) ; ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
1689 (#xFB #xFEDD) ; ARABIC LETTER LAM ISOLATED FORM
1690 (#xFC #xFED9) ; ARABIC LETTER KAF ISOLATED FORM
1691 (#xFD #xFEF1) ; ARABIC LETTER YEH ISOLATED FORM
1692 (#xFE #x25A0) ; BLACK SQUARE
1696 (declaim (inline get-cp864-bytes))
1697 (defun get-cp864-bytes (string pos)
1698 (declare (optimize speed (safety 0))
1699 (type simple-string string)
1700 (type array-range pos))
1701 (get-latin-bytes #'code->cp864-mapper :cp864 string pos))
1703 (defun string->cp864 (string sstart send null-padding)
1704 (declare (optimize speed (safety 0))
1705 (type simple-string string)
1706 (type array-range sstart send))
1707 (values (string->latin% string sstart send #'get-cp864-bytes null-padding)))
1709 (defmacro define-cp864->string* (accessor type)
1710 (declare (ignore type))
1711 (let ((name (make-od-name 'cp864->string* accessor)))
1713 (defun ,name (string sstart send array astart aend)
1714 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp864->code-mapper)))))
1716 (instantiate-octets-definition define-cp864->string*)
1718 (defmacro define-cp864->string (accessor type)
1719 (declare (ignore type))
1720 `(defun ,(make-od-name 'cp864->string accessor) (array astart aend)
1721 (,(make-od-name 'latin->string accessor) array astart aend #'cp864->code-mapper)))
1723 (instantiate-octets-definition define-cp864->string)
1725 (add-external-format-funs '(:cp864 :|cp864|)
1726 '(cp864->string-aref string->cp864))
1728 (define-external-format (:cp864 :|cp864|)
1730 (let ((cp864-byte (code->cp864-mapper bits)))
1732 (setf (sap-ref-8 sap tail) cp864-byte)
1733 (external-format-encoding-error stream bits)))
1734 (let ((code (cp864->code-mapper byte)))
1737 (external-format-decoding-error stream byte)))) ;; TODO -- error check
1739 (define-unibyte-mapper cp865->code-mapper code->cp865-mapper
1740 (#x80 #x00C7) ; LATIN CAPITAL LETTER C WITH CEDILLA
1741 (#x81 #x00FC) ; LATIN SMALL LETTER U WITH DIAERESIS
1742 (#x82 #x00E9) ; LATIN SMALL LETTER E WITH ACUTE
1743 (#x83 #x00E2) ; LATIN SMALL LETTER A WITH CIRCUMFLEX
1744 (#x84 #x00E4) ; LATIN SMALL LETTER A WITH DIAERESIS
1745 (#x85 #x00E0) ; LATIN SMALL LETTER A WITH GRAVE
1746 (#x86 #x00E5) ; LATIN SMALL LETTER A WITH RING ABOVE
1747 (#x87 #x00E7) ; LATIN SMALL LETTER C WITH CEDILLA
1748 (#x88 #x00EA) ; LATIN SMALL LETTER E WITH CIRCUMFLEX
1749 (#x89 #x00EB) ; LATIN SMALL LETTER E WITH DIAERESIS
1750 (#x8A #x00E8) ; LATIN SMALL LETTER E WITH GRAVE
1751 (#x8B #x00EF) ; LATIN SMALL LETTER I WITH DIAERESIS
1752 (#x8C #x00EE) ; LATIN SMALL LETTER I WITH CIRCUMFLEX
1753 (#x8D #x00EC) ; LATIN SMALL LETTER I WITH GRAVE
1754 (#x8E #x00C4) ; LATIN CAPITAL LETTER A WITH DIAERESIS
1755 (#x8F #x00C5) ; LATIN CAPITAL LETTER A WITH RING ABOVE
1756 (#x90 #x00C9) ; LATIN CAPITAL LETTER E WITH ACUTE
1757 (#x91 #x00E6) ; LATIN SMALL LIGATURE AE
1758 (#x92 #x00C6) ; LATIN CAPITAL LIGATURE AE
1759 (#x93 #x00F4) ; LATIN SMALL LETTER O WITH CIRCUMFLEX
1760 (#x94 #x00F6) ; LATIN SMALL LETTER O WITH DIAERESIS
1761 (#x95 #x00F2) ; LATIN SMALL LETTER O WITH GRAVE
1762 (#x96 #x00FB) ; LATIN SMALL LETTER U WITH CIRCUMFLEX
1763 (#x97 #x00F9) ; LATIN SMALL LETTER U WITH GRAVE
1764 (#x98 #x00FF) ; LATIN SMALL LETTER Y WITH DIAERESIS
1765 (#x99 #x00D6) ; LATIN CAPITAL LETTER O WITH DIAERESIS
1766 (#x9A #x00DC) ; LATIN CAPITAL LETTER U WITH DIAERESIS
1767 (#x9B #x00F8) ; LATIN SMALL LETTER O WITH STROKE
1768 (#x9C #x00A3) ; POUND SIGN
1769 (#x9D #x00D8) ; LATIN CAPITAL LETTER O WITH STROKE
1770 (#x9E #x20A7) ; PESETA SIGN
1771 (#x9F #x0192) ; LATIN SMALL LETTER F WITH HOOK
1772 (#xA0 #x00E1) ; LATIN SMALL LETTER A WITH ACUTE
1773 (#xA1 #x00ED) ; LATIN SMALL LETTER I WITH ACUTE
1774 (#xA2 #x00F3) ; LATIN SMALL LETTER O WITH ACUTE
1775 (#xA3 #x00FA) ; LATIN SMALL LETTER U WITH ACUTE
1776 (#xA4 #x00F1) ; LATIN SMALL LETTER N WITH TILDE
1777 (#xA5 #x00D1) ; LATIN CAPITAL LETTER N WITH TILDE
1778 (#xA6 #x00AA) ; FEMININE ORDINAL INDICATOR
1779 (#xA7 #x00BA) ; MASCULINE ORDINAL INDICATOR
1780 (#xA8 #x00BF) ; INVERTED QUESTION MARK
1781 (#xA9 #x2310) ; REVERSED NOT SIGN
1782 (#xAA #x00AC) ; NOT SIGN
1783 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
1784 (#xAC #x00BC) ; VULGAR FRACTION ONE QUARTER
1785 (#xAD #x00A1) ; INVERTED EXCLAMATION MARK
1786 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
1787 (#xAF #x00A4) ; CURRENCY SIGN
1788 (#xB0 #x2591) ; LIGHT SHADE
1789 (#xB1 #x2592) ; MEDIUM SHADE
1790 (#xB2 #x2593) ; DARK SHADE
1791 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
1792 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
1793 (#xB5 #x2561) ; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
1794 (#xB6 #x2562) ; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
1795 (#xB7 #x2556) ; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
1796 (#xB8 #x2555) ; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
1797 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
1798 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
1799 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
1800 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
1801 (#xBD #x255C) ; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
1802 (#xBE #x255B) ; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
1803 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
1804 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
1805 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
1806 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
1807 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
1808 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
1809 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
1810 (#xC6 #x255E) ; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
1811 (#xC7 #x255F) ; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
1812 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
1813 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
1814 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
1815 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
1816 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
1817 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
1818 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
1819 (#xCF #x2567) ; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
1820 (#xD0 #x2568) ; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
1821 (#xD1 #x2564) ; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
1822 (#xD2 #x2565) ; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
1823 (#xD3 #x2559) ; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
1824 (#xD4 #x2558) ; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
1825 (#xD5 #x2552) ; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
1826 (#xD6 #x2553) ; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
1827 (#xD7 #x256B) ; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
1828 (#xD8 #x256A) ; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
1829 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
1830 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
1831 (#xDB #x2588) ; FULL BLOCK
1832 (#xDC #x2584) ; LOWER HALF BLOCK
1833 (#xDD #x258C) ; LEFT HALF BLOCK
1834 (#xDE #x2590) ; RIGHT HALF BLOCK
1835 (#xDF #x2580) ; UPPER HALF BLOCK
1836 (#xE0 #x03B1) ; GREEK SMALL LETTER ALPHA
1837 (#xE1 #x00DF) ; LATIN SMALL LETTER SHARP S
1838 (#xE2 #x0393) ; GREEK CAPITAL LETTER GAMMA
1839 (#xE3 #x03C0) ; GREEK SMALL LETTER PI
1840 (#xE4 #x03A3) ; GREEK CAPITAL LETTER SIGMA
1841 (#xE5 #x03C3) ; GREEK SMALL LETTER SIGMA
1842 (#xE6 #x00B5) ; MICRO SIGN
1843 (#xE7 #x03C4) ; GREEK SMALL LETTER TAU
1844 (#xE8 #x03A6) ; GREEK CAPITAL LETTER PHI
1845 (#xE9 #x0398) ; GREEK CAPITAL LETTER THETA
1846 (#xEA #x03A9) ; GREEK CAPITAL LETTER OMEGA
1847 (#xEB #x03B4) ; GREEK SMALL LETTER DELTA
1848 (#xEC #x221E) ; INFINITY
1849 (#xED #x03C6) ; GREEK SMALL LETTER PHI
1850 (#xEE #x03B5) ; GREEK SMALL LETTER EPSILON
1851 (#xEF #x2229) ; INTERSECTION
1852 (#xF0 #x2261) ; IDENTICAL TO
1853 (#xF1 #x00B1) ; PLUS-MINUS SIGN
1854 (#xF2 #x2265) ; GREATER-THAN OR EQUAL TO
1855 (#xF3 #x2264) ; LESS-THAN OR EQUAL TO
1856 (#xF4 #x2320) ; TOP HALF INTEGRAL
1857 (#xF5 #x2321) ; BOTTOM HALF INTEGRAL
1858 (#xF6 #x00F7) ; DIVISION SIGN
1859 (#xF7 #x2248) ; ALMOST EQUAL TO
1860 (#xF8 #x00B0) ; DEGREE SIGN
1861 (#xF9 #x2219) ; BULLET OPERATOR
1862 (#xFA #x00B7) ; MIDDLE DOT
1863 (#xFB #x221A) ; SQUARE ROOT
1864 (#xFC #x207F) ; SUPERSCRIPT LATIN SMALL LETTER N
1865 (#xFD #x00B2) ; SUPERSCRIPT TWO
1866 (#xFE #x25A0) ; BLACK SQUARE
1867 (#xFF #x00A0) ; NO-BREAK SPACE
1870 (declaim (inline get-cp865-bytes))
1871 (defun get-cp865-bytes (string pos)
1872 (declare (optimize speed (safety 0))
1873 (type simple-string string)
1874 (type array-range pos))
1875 (get-latin-bytes #'code->cp865-mapper :cp865 string pos))
1877 (defun string->cp865 (string sstart send null-padding)
1878 (declare (optimize speed (safety 0))
1879 (type simple-string string)
1880 (type array-range sstart send))
1881 (values (string->latin% string sstart send #'get-cp865-bytes null-padding)))
1883 (defmacro define-cp865->string* (accessor type)
1884 (declare (ignore type))
1885 (let ((name (make-od-name 'cp865->string* accessor)))
1887 (defun ,name (string sstart send array astart aend)
1888 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp865->code-mapper)))))
1890 (instantiate-octets-definition define-cp865->string*)
1892 (defmacro define-cp865->string (accessor type)
1893 (declare (ignore type))
1894 `(defun ,(make-od-name 'cp865->string accessor) (array astart aend)
1895 (,(make-od-name 'latin->string accessor) array astart aend #'cp865->code-mapper)))
1897 (instantiate-octets-definition define-cp865->string)
1899 (add-external-format-funs '(:cp865 :|cp865|)
1900 '(cp865->string-aref string->cp865))
1902 (define-external-format (:cp865 :|cp865|)
1904 (let ((cp865-byte (code->cp865-mapper bits)))
1906 (setf (sap-ref-8 sap tail) cp865-byte)
1907 (external-format-encoding-error stream bits)))
1908 (let ((code (cp865->code-mapper byte)))
1911 (external-format-decoding-error stream byte)))) ;; TODO -- error check
1913 (define-unibyte-mapper cp866->code-mapper code->cp866-mapper
1914 (#x80 #x0410) ; CYRILLIC CAPITAL LETTER A
1915 (#x81 #x0411) ; CYRILLIC CAPITAL LETTER BE
1916 (#x82 #x0412) ; CYRILLIC CAPITAL LETTER VE
1917 (#x83 #x0413) ; CYRILLIC CAPITAL LETTER GHE
1918 (#x84 #x0414) ; CYRILLIC CAPITAL LETTER DE
1919 (#x85 #x0415) ; CYRILLIC CAPITAL LETTER IE
1920 (#x86 #x0416) ; CYRILLIC CAPITAL LETTER ZHE
1921 (#x87 #x0417) ; CYRILLIC CAPITAL LETTER ZE
1922 (#x88 #x0418) ; CYRILLIC CAPITAL LETTER I
1923 (#x89 #x0419) ; CYRILLIC CAPITAL LETTER SHORT I
1924 (#x8A #x041A) ; CYRILLIC CAPITAL LETTER KA
1925 (#x8B #x041B) ; CYRILLIC CAPITAL LETTER EL
1926 (#x8C #x041C) ; CYRILLIC CAPITAL LETTER EM
1927 (#x8D #x041D) ; CYRILLIC CAPITAL LETTER EN
1928 (#x8E #x041E) ; CYRILLIC CAPITAL LETTER O
1929 (#x8F #x041F) ; CYRILLIC CAPITAL LETTER PE
1930 (#x90 #x0420) ; CYRILLIC CAPITAL LETTER ER
1931 (#x91 #x0421) ; CYRILLIC CAPITAL LETTER ES
1932 (#x92 #x0422) ; CYRILLIC CAPITAL LETTER TE
1933 (#x93 #x0423) ; CYRILLIC CAPITAL LETTER U
1934 (#x94 #x0424) ; CYRILLIC CAPITAL LETTER EF
1935 (#x95 #x0425) ; CYRILLIC CAPITAL LETTER HA
1936 (#x96 #x0426) ; CYRILLIC CAPITAL LETTER TSE
1937 (#x97 #x0427) ; CYRILLIC CAPITAL LETTER CHE
1938 (#x98 #x0428) ; CYRILLIC CAPITAL LETTER SHA
1939 (#x99 #x0429) ; CYRILLIC CAPITAL LETTER SHCHA
1940 (#x9A #x042A) ; CYRILLIC CAPITAL LETTER HARD SIGN
1941 (#x9B #x042B) ; CYRILLIC CAPITAL LETTER YERU
1942 (#x9C #x042C) ; CYRILLIC CAPITAL LETTER SOFT SIGN
1943 (#x9D #x042D) ; CYRILLIC CAPITAL LETTER E
1944 (#x9E #x042E) ; CYRILLIC CAPITAL LETTER YU
1945 (#x9F #x042F) ; CYRILLIC CAPITAL LETTER YA
1946 (#xA0 #x0430) ; CYRILLIC SMALL LETTER A
1947 (#xA1 #x0431) ; CYRILLIC SMALL LETTER BE
1948 (#xA2 #x0432) ; CYRILLIC SMALL LETTER VE
1949 (#xA3 #x0433) ; CYRILLIC SMALL LETTER GHE
1950 (#xA4 #x0434) ; CYRILLIC SMALL LETTER DE
1951 (#xA5 #x0435) ; CYRILLIC SMALL LETTER IE
1952 (#xA6 #x0436) ; CYRILLIC SMALL LETTER ZHE
1953 (#xA7 #x0437) ; CYRILLIC SMALL LETTER ZE
1954 (#xA8 #x0438) ; CYRILLIC SMALL LETTER I
1955 (#xA9 #x0439) ; CYRILLIC SMALL LETTER SHORT I
1956 (#xAA #x043A) ; CYRILLIC SMALL LETTER KA
1957 (#xAB #x043B) ; CYRILLIC SMALL LETTER EL
1958 (#xAC #x043C) ; CYRILLIC SMALL LETTER EM
1959 (#xAD #x043D) ; CYRILLIC SMALL LETTER EN
1960 (#xAE #x043E) ; CYRILLIC SMALL LETTER O
1961 (#xAF #x043F) ; CYRILLIC SMALL LETTER PE
1962 (#xB0 #x2591) ; LIGHT SHADE
1963 (#xB1 #x2592) ; MEDIUM SHADE
1964 (#xB2 #x2593) ; DARK SHADE
1965 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
1966 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
1967 (#xB5 #x2561) ; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
1968 (#xB6 #x2562) ; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
1969 (#xB7 #x2556) ; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
1970 (#xB8 #x2555) ; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
1971 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
1972 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
1973 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
1974 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
1975 (#xBD #x255C) ; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
1976 (#xBE #x255B) ; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
1977 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
1978 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
1979 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
1980 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
1981 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
1982 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
1983 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
1984 (#xC6 #x255E) ; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
1985 (#xC7 #x255F) ; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
1986 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
1987 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
1988 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
1989 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
1990 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
1991 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
1992 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
1993 (#xCF #x2567) ; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
1994 (#xD0 #x2568) ; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
1995 (#xD1 #x2564) ; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
1996 (#xD2 #x2565) ; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
1997 (#xD3 #x2559) ; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
1998 (#xD4 #x2558) ; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
1999 (#xD5 #x2552) ; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
2000 (#xD6 #x2553) ; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
2001 (#xD7 #x256B) ; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
2002 (#xD8 #x256A) ; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
2003 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
2004 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
2005 (#xDB #x2588) ; FULL BLOCK
2006 (#xDC #x2584) ; LOWER HALF BLOCK
2007 (#xDD #x258C) ; LEFT HALF BLOCK
2008 (#xDE #x2590) ; RIGHT HALF BLOCK
2009 (#xDF #x2580) ; UPPER HALF BLOCK
2010 (#xE0 #x0440) ; CYRILLIC SMALL LETTER ER
2011 (#xE1 #x0441) ; CYRILLIC SMALL LETTER ES
2012 (#xE2 #x0442) ; CYRILLIC SMALL LETTER TE
2013 (#xE3 #x0443) ; CYRILLIC SMALL LETTER U
2014 (#xE4 #x0444) ; CYRILLIC SMALL LETTER EF
2015 (#xE5 #x0445) ; CYRILLIC SMALL LETTER HA
2016 (#xE6 #x0446) ; CYRILLIC SMALL LETTER TSE
2017 (#xE7 #x0447) ; CYRILLIC SMALL LETTER CHE
2018 (#xE8 #x0448) ; CYRILLIC SMALL LETTER SHA
2019 (#xE9 #x0449) ; CYRILLIC SMALL LETTER SHCHA
2020 (#xEA #x044A) ; CYRILLIC SMALL LETTER HARD SIGN
2021 (#xEB #x044B) ; CYRILLIC SMALL LETTER YERU
2022 (#xEC #x044C) ; CYRILLIC SMALL LETTER SOFT SIGN
2023 (#xED #x044D) ; CYRILLIC SMALL LETTER E
2024 (#xEE #x044E) ; CYRILLIC SMALL LETTER YU
2025 (#xEF #x044F) ; CYRILLIC SMALL LETTER YA
2026 (#xF0 #x0401) ; CYRILLIC CAPITAL LETTER IO
2027 (#xF1 #x0451) ; CYRILLIC SMALL LETTER IO
2028 (#xF2 #x0404) ; CYRILLIC CAPITAL LETTER UKRAINIAN IE
2029 (#xF3 #x0454) ; CYRILLIC SMALL LETTER UKRAINIAN IE
2030 (#xF4 #x0407) ; CYRILLIC CAPITAL LETTER YI
2031 (#xF5 #x0457) ; CYRILLIC SMALL LETTER YI
2032 (#xF6 #x040E) ; CYRILLIC CAPITAL LETTER SHORT U
2033 (#xF7 #x045E) ; CYRILLIC SMALL LETTER SHORT U
2034 (#xF8 #x00B0) ; DEGREE SIGN
2035 (#xF9 #x2219) ; BULLET OPERATOR
2036 (#xFA #x00B7) ; MIDDLE DOT
2037 (#xFB #x221A) ; SQUARE ROOT
2038 (#xFC #x2116) ; NUMERO SIGN
2039 (#xFD #x00A4) ; CURRENCY SIGN
2040 (#xFE #x25A0) ; BLACK SQUARE
2041 (#xFF #x00A0) ; NO-BREAK SPACE
2044 (declaim (inline get-cp866-bytes))
2045 (defun get-cp866-bytes (string pos)
2046 (declare (optimize speed (safety 0))
2047 (type simple-string string)
2048 (type array-range pos))
2049 (get-latin-bytes #'code->cp866-mapper :cp866 string pos))
2051 (defun string->cp866 (string sstart send null-padding)
2052 (declare (optimize speed (safety 0))
2053 (type simple-string string)
2054 (type array-range sstart send))
2055 (values (string->latin% string sstart send #'get-cp866-bytes null-padding)))
2057 (defmacro define-cp866->string* (accessor type)
2058 (declare (ignore type))
2059 (let ((name (make-od-name 'cp866->string* accessor)))
2061 (defun ,name (string sstart send array astart aend)
2062 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp866->code-mapper)))))
2064 (instantiate-octets-definition define-cp866->string*)
2066 (defmacro define-cp866->string (accessor type)
2067 (declare (ignore type))
2068 `(defun ,(make-od-name 'cp866->string accessor) (array astart aend)
2069 (,(make-od-name 'latin->string accessor) array astart aend #'cp866->code-mapper)))
2071 (instantiate-octets-definition define-cp866->string)
2073 (add-external-format-funs '(:cp866 :|cp866|)
2074 '(cp866->string-aref string->cp866))
2076 (define-external-format (:cp866 :|cp866|)
2078 (let ((cp866-byte (code->cp866-mapper bits)))
2080 (setf (sap-ref-8 sap tail) cp866-byte)
2081 (external-format-encoding-error stream bits)))
2082 (let ((code (cp866->code-mapper byte)))
2085 (external-format-decoding-error stream byte)))) ;; TODO -- error check
2087 (define-unibyte-mapper cp869->code-mapper code->cp869-mapper
2094 (#x86 #x0386) ; GREEK CAPITAL LETTER ALPHA WITH TONOS
2096 (#x88 #x00B7) ; MIDDLE DOT
2097 (#x89 #x00AC) ; NOT SIGN
2098 (#x8A #x00A6) ; BROKEN BAR
2099 (#x8B #x2018) ; LEFT SINGLE QUOTATION MARK
2100 (#x8C #x2019) ; RIGHT SINGLE QUOTATION MARK
2101 (#x8D #x0388) ; GREEK CAPITAL LETTER EPSILON WITH TONOS
2102 (#x8E #x2015) ; HORIZONTAL BAR
2103 (#x8F #x0389) ; GREEK CAPITAL LETTER ETA WITH TONOS
2104 (#x90 #x038A) ; GREEK CAPITAL LETTER IOTA WITH TONOS
2105 (#x91 #x03AA) ; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
2106 (#x92 #x038C) ; GREEK CAPITAL LETTER OMICRON WITH TONOS
2109 (#x95 #x038E) ; GREEK CAPITAL LETTER UPSILON WITH TONOS
2110 (#x96 #x03AB) ; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
2111 (#x97 #x00A9) ; COPYRIGHT SIGN
2112 (#x98 #x038F) ; GREEK CAPITAL LETTER OMEGA WITH TONOS
2113 (#x99 #x00B2) ; SUPERSCRIPT TWO
2114 (#x9A #x00B3) ; SUPERSCRIPT THREE
2115 (#x9B #x03AC) ; GREEK SMALL LETTER ALPHA WITH TONOS
2116 (#x9C #x00A3) ; POUND SIGN
2117 (#x9D #x03AD) ; GREEK SMALL LETTER EPSILON WITH TONOS
2118 (#x9E #x03AE) ; GREEK SMALL LETTER ETA WITH TONOS
2119 (#x9F #x03AF) ; GREEK SMALL LETTER IOTA WITH TONOS
2120 (#xA0 #x03CA) ; GREEK SMALL LETTER IOTA WITH DIALYTIKA
2121 (#xA1 #x0390) ; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
2122 (#xA2 #x03CC) ; GREEK SMALL LETTER OMICRON WITH TONOS
2123 (#xA3 #x03CD) ; GREEK SMALL LETTER UPSILON WITH TONOS
2124 (#xA4 #x0391) ; GREEK CAPITAL LETTER ALPHA
2125 (#xA5 #x0392) ; GREEK CAPITAL LETTER BETA
2126 (#xA6 #x0393) ; GREEK CAPITAL LETTER GAMMA
2127 (#xA7 #x0394) ; GREEK CAPITAL LETTER DELTA
2128 (#xA8 #x0395) ; GREEK CAPITAL LETTER EPSILON
2129 (#xA9 #x0396) ; GREEK CAPITAL LETTER ZETA
2130 (#xAA #x0397) ; GREEK CAPITAL LETTER ETA
2131 (#xAB #x00BD) ; VULGAR FRACTION ONE HALF
2132 (#xAC #x0398) ; GREEK CAPITAL LETTER THETA
2133 (#xAD #x0399) ; GREEK CAPITAL LETTER IOTA
2134 (#xAE #x00AB) ; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
2135 (#xAF #x00BB) ; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
2136 (#xB0 #x2591) ; LIGHT SHADE
2137 (#xB1 #x2592) ; MEDIUM SHADE
2138 (#xB2 #x2593) ; DARK SHADE
2139 (#xB3 #x2502) ; BOX DRAWINGS LIGHT VERTICAL
2140 (#xB4 #x2524) ; BOX DRAWINGS LIGHT VERTICAL AND LEFT
2141 (#xB5 #x039A) ; GREEK CAPITAL LETTER KAPPA
2142 (#xB6 #x039B) ; GREEK CAPITAL LETTER LAMDA
2143 (#xB7 #x039C) ; GREEK CAPITAL LETTER MU
2144 (#xB8 #x039D) ; GREEK CAPITAL LETTER NU
2145 (#xB9 #x2563) ; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
2146 (#xBA #x2551) ; BOX DRAWINGS DOUBLE VERTICAL
2147 (#xBB #x2557) ; BOX DRAWINGS DOUBLE DOWN AND LEFT
2148 (#xBC #x255D) ; BOX DRAWINGS DOUBLE UP AND LEFT
2149 (#xBD #x039E) ; GREEK CAPITAL LETTER XI
2150 (#xBE #x039F) ; GREEK CAPITAL LETTER OMICRON
2151 (#xBF #x2510) ; BOX DRAWINGS LIGHT DOWN AND LEFT
2152 (#xC0 #x2514) ; BOX DRAWINGS LIGHT UP AND RIGHT
2153 (#xC1 #x2534) ; BOX DRAWINGS LIGHT UP AND HORIZONTAL
2154 (#xC2 #x252C) ; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
2155 (#xC3 #x251C) ; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
2156 (#xC4 #x2500) ; BOX DRAWINGS LIGHT HORIZONTAL
2157 (#xC5 #x253C) ; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
2158 (#xC6 #x03A0) ; GREEK CAPITAL LETTER PI
2159 (#xC7 #x03A1) ; GREEK CAPITAL LETTER RHO
2160 (#xC8 #x255A) ; BOX DRAWINGS DOUBLE UP AND RIGHT
2161 (#xC9 #x2554) ; BOX DRAWINGS DOUBLE DOWN AND RIGHT
2162 (#xCA #x2569) ; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
2163 (#xCB #x2566) ; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
2164 (#xCC #x2560) ; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
2165 (#xCD #x2550) ; BOX DRAWINGS DOUBLE HORIZONTAL
2166 (#xCE #x256C) ; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
2167 (#xCF #x03A3) ; GREEK CAPITAL LETTER SIGMA
2168 (#xD0 #x03A4) ; GREEK CAPITAL LETTER TAU
2169 (#xD1 #x03A5) ; GREEK CAPITAL LETTER UPSILON
2170 (#xD2 #x03A6) ; GREEK CAPITAL LETTER PHI
2171 (#xD3 #x03A7) ; GREEK CAPITAL LETTER CHI
2172 (#xD4 #x03A8) ; GREEK CAPITAL LETTER PSI
2173 (#xD5 #x03A9) ; GREEK CAPITAL LETTER OMEGA
2174 (#xD6 #x03B1) ; GREEK SMALL LETTER ALPHA
2175 (#xD7 #x03B2) ; GREEK SMALL LETTER BETA
2176 (#xD8 #x03B3) ; GREEK SMALL LETTER GAMMA
2177 (#xD9 #x2518) ; BOX DRAWINGS LIGHT UP AND LEFT
2178 (#xDA #x250C) ; BOX DRAWINGS LIGHT DOWN AND RIGHT
2179 (#xDB #x2588) ; FULL BLOCK
2180 (#xDC #x2584) ; LOWER HALF BLOCK
2181 (#xDD #x03B4) ; GREEK SMALL LETTER DELTA
2182 (#xDE #x03B5) ; GREEK SMALL LETTER EPSILON
2183 (#xDF #x2580) ; UPPER HALF BLOCK
2184 (#xE0 #x03B6) ; GREEK SMALL LETTER ZETA
2185 (#xE1 #x03B7) ; GREEK SMALL LETTER ETA
2186 (#xE2 #x03B8) ; GREEK SMALL LETTER THETA
2187 (#xE3 #x03B9) ; GREEK SMALL LETTER IOTA
2188 (#xE4 #x03BA) ; GREEK SMALL LETTER KAPPA
2189 (#xE5 #x03BB) ; GREEK SMALL LETTER LAMDA
2190 (#xE6 #x03BC) ; GREEK SMALL LETTER MU
2191 (#xE7 #x03BD) ; GREEK SMALL LETTER NU
2192 (#xE8 #x03BE) ; GREEK SMALL LETTER XI
2193 (#xE9 #x03BF) ; GREEK SMALL LETTER OMICRON
2194 (#xEA #x03C0) ; GREEK SMALL LETTER PI
2195 (#xEB #x03C1) ; GREEK SMALL LETTER RHO
2196 (#xEC #x03C3) ; GREEK SMALL LETTER SIGMA
2197 (#xED #x03C2) ; GREEK SMALL LETTER FINAL SIGMA
2198 (#xEE #x03C4) ; GREEK SMALL LETTER TAU
2199 (#xEF #x0384) ; GREEK TONOS
2200 (#xF0 #x00AD) ; SOFT HYPHEN
2201 (#xF1 #x00B1) ; PLUS-MINUS SIGN
2202 (#xF2 #x03C5) ; GREEK SMALL LETTER UPSILON
2203 (#xF3 #x03C6) ; GREEK SMALL LETTER PHI
2204 (#xF4 #x03C7) ; GREEK SMALL LETTER CHI
2205 (#xF5 #x00A7) ; SECTION SIGN
2206 (#xF6 #x03C8) ; GREEK SMALL LETTER PSI
2207 (#xF7 #x0385) ; GREEK DIALYTIKA TONOS
2208 (#xF8 #x00B0) ; DEGREE SIGN
2209 (#xF9 #x00A8) ; DIAERESIS
2210 (#xFA #x03C9) ; GREEK SMALL LETTER OMEGA
2211 (#xFB #x03CB) ; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
2212 (#xFC #x03B0) ; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
2213 (#xFD #x03CE) ; GREEK SMALL LETTER OMEGA WITH TONOS
2214 (#xFE #x25A0) ; BLACK SQUARE
2215 (#xFF #x00A0) ; NO-BREAK SPACE
2218 (declaim (inline get-cp869-bytes))
2219 (defun get-cp869-bytes (string pos)
2220 (declare (optimize speed (safety 0))
2221 (type simple-string string)
2222 (type array-range pos))
2223 (get-latin-bytes #'code->cp869-mapper :cp869 string pos))
2225 (defun string->cp869 (string sstart send null-padding)
2226 (declare (optimize speed (safety 0))
2227 (type simple-string string)
2228 (type array-range sstart send))
2229 (values (string->latin% string sstart send #'get-cp869-bytes null-padding)))
2231 (defmacro define-cp869->string* (accessor type)
2232 (declare (ignore type))
2233 (let ((name (make-od-name 'cp869->string* accessor)))
2235 (defun ,name (string sstart send array astart aend)
2236 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp869->code-mapper)))))
2238 (instantiate-octets-definition define-cp869->string*)
2240 (defmacro define-cp869->string (accessor type)
2241 (declare (ignore type))
2242 `(defun ,(make-od-name 'cp869->string accessor) (array astart aend)
2243 (,(make-od-name 'latin->string accessor) array astart aend #'cp869->code-mapper)))
2245 (instantiate-octets-definition define-cp869->string)
2247 (add-external-format-funs '(:cp869 :|cp869|)
2248 '(cp869->string-aref string->cp869))
2250 (define-external-format (:cp869 :|cp869|)
2252 (let ((cp869-byte (code->cp869-mapper bits)))
2254 (setf (sap-ref-8 sap tail) cp869-byte)
2255 (external-format-encoding-error stream bits)))
2256 (let ((code (cp869->code-mapper byte)))
2259 (external-format-decoding-error stream byte)))) ;; TODO -- error check
2261 (define-unibyte-mapper cp874->code-mapper code->cp874-mapper
2262 (#x80 #x20AC) ; EURO SIGN
2267 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
2279 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
2280 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
2281 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
2282 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
2283 (#x95 #x2022) ; BULLET
2284 (#x96 #x2013) ; EN DASH
2285 (#x97 #x2014) ; EM DASH
2294 (#xA1 #x0E01) ; THAI CHARACTER KO KAI
2295 (#xA2 #x0E02) ; THAI CHARACTER KHO KHAI
2296 (#xA3 #x0E03) ; THAI CHARACTER KHO KHUAT
2297 (#xA4 #x0E04) ; THAI CHARACTER KHO KHWAI
2298 (#xA5 #x0E05) ; THAI CHARACTER KHO KHON
2299 (#xA6 #x0E06) ; THAI CHARACTER KHO RAKHANG
2300 (#xA7 #x0E07) ; THAI CHARACTER NGO NGU
2301 (#xA8 #x0E08) ; THAI CHARACTER CHO CHAN
2302 (#xA9 #x0E09) ; THAI CHARACTER CHO CHING
2303 (#xAA #x0E0A) ; THAI CHARACTER CHO CHANG
2304 (#xAB #x0E0B) ; THAI CHARACTER SO SO
2305 (#xAC #x0E0C) ; THAI CHARACTER CHO CHOE
2306 (#xAD #x0E0D) ; THAI CHARACTER YO YING
2307 (#xAE #x0E0E) ; THAI CHARACTER DO CHADA
2308 (#xAF #x0E0F) ; THAI CHARACTER TO PATAK
2309 (#xB0 #x0E10) ; THAI CHARACTER THO THAN
2310 (#xB1 #x0E11) ; THAI CHARACTER THO NANGMONTHO
2311 (#xB2 #x0E12) ; THAI CHARACTER THO PHUTHAO
2312 (#xB3 #x0E13) ; THAI CHARACTER NO NEN
2313 (#xB4 #x0E14) ; THAI CHARACTER DO DEK
2314 (#xB5 #x0E15) ; THAI CHARACTER TO TAO
2315 (#xB6 #x0E16) ; THAI CHARACTER THO THUNG
2316 (#xB7 #x0E17) ; THAI CHARACTER THO THAHAN
2317 (#xB8 #x0E18) ; THAI CHARACTER THO THONG
2318 (#xB9 #x0E19) ; THAI CHARACTER NO NU
2319 (#xBA #x0E1A) ; THAI CHARACTER BO BAIMAI
2320 (#xBB #x0E1B) ; THAI CHARACTER PO PLA
2321 (#xBC #x0E1C) ; THAI CHARACTER PHO PHUNG
2322 (#xBD #x0E1D) ; THAI CHARACTER FO FA
2323 (#xBE #x0E1E) ; THAI CHARACTER PHO PHAN
2324 (#xBF #x0E1F) ; THAI CHARACTER FO FAN
2325 (#xC0 #x0E20) ; THAI CHARACTER PHO SAMPHAO
2326 (#xC1 #x0E21) ; THAI CHARACTER MO MA
2327 (#xC2 #x0E22) ; THAI CHARACTER YO YAK
2328 (#xC3 #x0E23) ; THAI CHARACTER RO RUA
2329 (#xC4 #x0E24) ; THAI CHARACTER RU
2330 (#xC5 #x0E25) ; THAI CHARACTER LO LING
2331 (#xC6 #x0E26) ; THAI CHARACTER LU
2332 (#xC7 #x0E27) ; THAI CHARACTER WO WAEN
2333 (#xC8 #x0E28) ; THAI CHARACTER SO SALA
2334 (#xC9 #x0E29) ; THAI CHARACTER SO RUSI
2335 (#xCA #x0E2A) ; THAI CHARACTER SO SUA
2336 (#xCB #x0E2B) ; THAI CHARACTER HO HIP
2337 (#xCC #x0E2C) ; THAI CHARACTER LO CHULA
2338 (#xCD #x0E2D) ; THAI CHARACTER O ANG
2339 (#xCE #x0E2E) ; THAI CHARACTER HO NOKHUK
2340 (#xCF #x0E2F) ; THAI CHARACTER PAIYANNOI
2341 (#xD0 #x0E30) ; THAI CHARACTER SARA A
2342 (#xD1 #x0E31) ; THAI CHARACTER MAI HAN-AKAT
2343 (#xD2 #x0E32) ; THAI CHARACTER SARA AA
2344 (#xD3 #x0E33) ; THAI CHARACTER SARA AM
2345 (#xD4 #x0E34) ; THAI CHARACTER SARA I
2346 (#xD5 #x0E35) ; THAI CHARACTER SARA II
2347 (#xD6 #x0E36) ; THAI CHARACTER SARA UE
2348 (#xD7 #x0E37) ; THAI CHARACTER SARA UEE
2349 (#xD8 #x0E38) ; THAI CHARACTER SARA U
2350 (#xD9 #x0E39) ; THAI CHARACTER SARA UU
2351 (#xDA #x0E3A) ; THAI CHARACTER PHINTHU
2356 (#xDF #x0E3F) ; THAI CURRENCY SYMBOL BAHT
2357 (#xE0 #x0E40) ; THAI CHARACTER SARA E
2358 (#xE1 #x0E41) ; THAI CHARACTER SARA AE
2359 (#xE2 #x0E42) ; THAI CHARACTER SARA O
2360 (#xE3 #x0E43) ; THAI CHARACTER SARA AI MAIMUAN
2361 (#xE4 #x0E44) ; THAI CHARACTER SARA AI MAIMALAI
2362 (#xE5 #x0E45) ; THAI CHARACTER LAKKHANGYAO
2363 (#xE6 #x0E46) ; THAI CHARACTER MAIYAMOK
2364 (#xE7 #x0E47) ; THAI CHARACTER MAITAIKHU
2365 (#xE8 #x0E48) ; THAI CHARACTER MAI EK
2366 (#xE9 #x0E49) ; THAI CHARACTER MAI THO
2367 (#xEA #x0E4A) ; THAI CHARACTER MAI TRI
2368 (#xEB #x0E4B) ; THAI CHARACTER MAI CHATTAWA
2369 (#xEC #x0E4C) ; THAI CHARACTER THANTHAKHAT
2370 (#xED #x0E4D) ; THAI CHARACTER NIKHAHIT
2371 (#xEE #x0E4E) ; THAI CHARACTER YAMAKKAN
2372 (#xEF #x0E4F) ; THAI CHARACTER FONGMAN
2373 (#xF0 #x0E50) ; THAI DIGIT ZERO
2374 (#xF1 #x0E51) ; THAI DIGIT ONE
2375 (#xF2 #x0E52) ; THAI DIGIT TWO
2376 (#xF3 #x0E53) ; THAI DIGIT THREE
2377 (#xF4 #x0E54) ; THAI DIGIT FOUR
2378 (#xF5 #x0E55) ; THAI DIGIT FIVE
2379 (#xF6 #x0E56) ; THAI DIGIT SIX
2380 (#xF7 #x0E57) ; THAI DIGIT SEVEN
2381 (#xF8 #x0E58) ; THAI DIGIT EIGHT
2382 (#xF9 #x0E59) ; THAI DIGIT NINE
2383 (#xFA #x0E5A) ; THAI CHARACTER ANGKHANKHU
2384 (#xFB #x0E5B) ; THAI CHARACTER KHOMUT
2391 (declaim (inline get-cp874-bytes))
2392 (defun get-cp874-bytes (string pos)
2393 (declare (optimize speed (safety 0))
2394 (type simple-string string)
2395 (type array-range pos))
2396 (get-latin-bytes #'code->cp874-mapper :cp874 string pos))
2398 (defun string->cp874 (string sstart send null-padding)
2399 (declare (optimize speed (safety 0))
2400 (type simple-string string)
2401 (type array-range sstart send))
2402 (values (string->latin% string sstart send #'get-cp874-bytes null-padding)))
2404 (defmacro define-cp874->string* (accessor type)
2405 (declare (ignore type))
2406 (let ((name (make-od-name 'cp874->string* accessor)))
2408 (defun ,name (string sstart send array astart aend)
2409 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp874->code-mapper)))))
2411 (instantiate-octets-definition define-cp874->string*)
2413 (defmacro define-cp874->string (accessor type)
2414 (declare (ignore type))
2415 `(defun ,(make-od-name 'cp874->string accessor) (array astart aend)
2416 (,(make-od-name 'latin->string accessor) array astart aend #'cp874->code-mapper)))
2418 (instantiate-octets-definition define-cp874->string)
2420 (add-external-format-funs '(:cp874 :|cp874|)
2421 '(cp874->string-aref string->cp874))
2423 (define-external-format (:cp874 :|cp874|)
2425 (let ((cp874-byte (code->cp874-mapper bits)))
2427 (setf (sap-ref-8 sap tail) cp874-byte)
2428 (external-format-encoding-error stream bits)))
2429 (let ((code (cp874->code-mapper byte)))
2432 (external-format-decoding-error stream byte)))) ;; TODO -- error check