blob: 17f51c5c2538a56bf75f9cd944b7414685807bf4 [file] [log] [blame]
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +00001/*
2 * _cp949.c: the CP949 codec
3 *
4 * Written by Hye-Shik Chang <perky@FreeBSD.org>
5 * $CJKCodecs: _cp949.c,v 1.2 2003/12/31 05:46:55 perky Exp $
6 */
7
8#include "codeccommon.h"
9
10ENCMAP(cp949)
11DECMAP(ksx1001)
12DECMAP(cp949ext)
13
14ENCODER(cp949)
15{
16 while (inleft > 0) {
17 Py_UNICODE c = IN1;
18 DBCHAR code;
19
20 if (c < 0x80) {
Hye-Shik Changd210a5b2004-01-23 14:36:17 +000021 WRITE1((unsigned char)c)
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +000022 NEXT(1, 1)
23 continue;
24 }
25 UCS4INVALID(c)
26
27 RESERVE_OUTBUF(2)
28 TRYMAP_ENC(cp949, code, c);
29 else return 1;
30
31 OUT1((code >> 8) | 0x80)
32 if (code & 0x8000)
33 OUT2(code & 0xFF) /* MSB set: CP949 */
34 else
35 OUT2((code & 0xFF) | 0x80) /* MSB unset: ks x 1001 */
36 NEXT(1, 2)
37 }
38
39 return 0;
40}
41
42DECODER(cp949)
43{
44 while (inleft > 0) {
45 unsigned char c = IN1;
46
47 RESERVE_OUTBUF(1)
48
49 if (c < 0x80) {
50 OUT1(c)
51 NEXT(1, 1)
52 continue;
53 }
54
55 RESERVE_INBUF(2)
56 TRYMAP_DEC(ksx1001, **outbuf, c ^ 0x80, IN2 ^ 0x80);
57 else TRYMAP_DEC(cp949ext, **outbuf, c, IN2);
58 else return 2;
59
60 NEXT(2, 1)
61 }
62
63 return 0;
64}
65
66#include "codecentry.h"
67BEGIN_CODEC_REGISTRY(cp949)
68 MAPOPEN(ko_KR)
69 IMPORTMAP_DEC(ksx1001)
70 IMPORTMAP_DEC(cp949ext)
71 IMPORTMAP_ENC(cp949)
72 MAPCLOSE()
73END_CODEC_REGISTRY(cp949)