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