9 #define CODE_UNKNOWN 0 // 不明なグラフィックセット(非対応)
10 #define CODE_KANJI 1 // Kanji
11 #define CODE_ALPHANUMERIC 2 // Alphanumeric
12 #define CODE_HIRAGANA 3 // Hiragana
13 #define CODE_KATAKANA 4 // Katakana
14 #define CODE_MOSAIC_A 5 // Mosaic A
15 #define CODE_MOSAIC_B 6 // Mosaic B
16 #define CODE_MOSAIC_C 7 // Mosaic C
17 #define CODE_MOSAIC_D 8 // Mosaic D
18 #define CODE_PROP_ALPHANUMERIC 9 // Proportional Alphanumeric
19 #define CODE_PROP_HIRAGANA 10 // Proportional Hiragana
20 #define CODE_PROP_KATAKANA 11 // Proportional Katakana
21 #define CODE_JIS_X0201_KATAKANA 12 // JIS X 0201 Katakana
22 #define CODE_JIS_KANJI_PLANE_1 13 // JIS compatible Kanji Plane 1
23 #define CODE_JIS_KANJI_PLANE_2 14 // JIS compatible Kanji Plane 2
24 #define CODE_ADDITIONAL_SYMBOLS 15 // Additional symbols
38 static int m_CodeG[4];
39 static int *m_pLockingGL;
40 static int *m_pLockingGR;
41 static int *m_pSingleGL;
43 static BYTE m_byEscSeqCount;
44 static BYTE m_byEscSeqIndex;
45 static bool m_bIsEscSeqDrcs;
48 static const DWORD AribToStringInternal(TCHAR *lpszDst, const BYTE *pSrcData, const DWORD dwSrcLen);
49 static const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET CodeSet);
51 static const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode);
52 static const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode);
53 //static const DWORD PutAlphanumericHankakuChar(TCHAR *lpszDst, const WORD wCode);
54 static const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode);
55 static const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode);
56 static const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode);
57 static const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode);
59 static void ProcessEscapeSeq(const BYTE byCode);
61 static void LockingShiftGL(const BYTE byIndexG);
62 static void LockingShiftGR(const BYTE byIndexG);
63 static void SingleShiftGL(const BYTE byIndexG);
65 static const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode);
66 static const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode);
68 static const bool abCharSizeTable[] =
70 false, // CODE_UNKNOWN 不明なグラフィックセット(非対応)
71 true, // CODE_KANJI Kanji
72 false, // CODE_ALPHANUMERIC Alphanumeric
73 false, // CODE_HIRAGANA Hiragana
74 false, // CODE_KATAKANA Katakana
75 false, // CODE_MOSAIC_A Mosaic A
76 false, // CODE_MOSAIC_B Mosaic B
77 false, // CODE_MOSAIC_C Mosaic C
78 false, // CODE_MOSAIC_D Mosaic D
79 false, // CODE_PROP_ALPHANUMERIC Proportional Alphanumeric
80 false, // CODE_PROP_HIRAGANA Proportional Hiragana
81 false, // CODE_PROP_KATAKANA Proportional Katakana
82 false, // CODE_JIS_X0201_KATAKANA JIS X 0201 Katakana
83 true, // CODE_JIS_KANJI_PLANE_1 JIS compatible Kanji Plane 1
84 true, // CODE_JIS_KANJI_PLANE_2 JIS compatible Kanji Plane 2
85 true // CODE_ADDITIONAL_SYMBOLS Additional symbols
93 STR_HIGH_W, //SZX 0x41
94 STR_WIDTH_W, //SZX 0x44
96 STR_SPECIAL_1, //SZX 0x6B
97 STR_SPECIAL_2, //SZX 0x64
100 STRING_SIZE m_emStrSize;
102 bool IsSmallCharMode(void)
141 const char *pSrcData,
142 const int dwSrcLen) {
144 return AribToStringInternal(lpszDst, pSrcData, dwSrcLen);
148 const DWORD AribToStringInternal(TCHAR *lpszDst,
149 const BYTE *pSrcData, const DWORD dwSrcLen)
151 if(!pSrcData || !dwSrcLen || !lpszDst)return 0UL;
153 DWORD dwSrcPos = 0UL;
154 DWORD dwDstLen = 0UL;
158 m_byEscSeqCount = 0U;
161 m_CodeG[0] = CODE_KANJI;
162 m_CodeG[1] = CODE_ALPHANUMERIC;
163 m_CodeG[2] = CODE_HIRAGANA;
164 m_CodeG[3] = CODE_KATAKANA;
166 m_pLockingGL = &m_CodeG[0];
167 m_pLockingGR = &m_CodeG[2];
169 m_emStrSize = STR_NORMAL;
170 while(dwSrcPos < dwSrcLen){
171 dwSrcData = pSrcData[dwSrcPos] & 0xFF;
173 //printf("Arib:pos%d:%d:%s\n",dwSrcPos,dwSrcData,lpszDst);
174 if(!m_byEscSeqCount){
177 if((dwSrcData >= 0x21U) && (dwSrcData <= 0x7EU)){
179 const CODE_SET CurCodeSet = (m_pSingleGL)? *m_pSingleGL : *m_pLockingGL;
182 if(abCharSizeTable[CurCodeSet]){
184 if((dwSrcLen - dwSrcPos) < 2UL)break;
186 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)pSrcData[dwSrcPos + 0] << 8) | (WORD)pSrcData[dwSrcPos + 1], CurCodeSet);
191 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)dwSrcData, CurCodeSet);
194 else if((dwSrcData >= 0xA1U) && (dwSrcData <= 0xFEU)){
196 const CODE_SET CurCodeSet = *m_pLockingGR;
198 if(abCharSizeTable[CurCodeSet]){
200 if((dwSrcLen - dwSrcPos) < 2UL)break;
202 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)(pSrcData[dwSrcPos + 0] & 0x7FU) << 8) | (WORD)(pSrcData[dwSrcPos + 1] & 0x7FU), CurCodeSet);
207 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)(dwSrcData & 0x7FU), CurCodeSet);
213 case 0x0FU : LockingShiftGL(0U); break; // LS0
214 case 0x0EU : LockingShiftGL(1U); break; // LS1
215 case 0x19U : SingleShiftGL(2U); break; // SS2
216 case 0x1DU : SingleShiftGL(3U); break; // SS3
217 case 0x1BU : m_byEscSeqCount = 1U; break; // ESC
218 case 0x89U : m_emStrSize = STR_MEDIUM; break; // MSZ
219 case 0x8AU : m_emStrSize = STR_NORMAL; break; // NSZ
224 if( IsSmallCharMode() == false ){
225 strcpy(&lpszDst[dwDstLen], " ");
228 lpszDst[dwDstLen++] = TEXT(' ');
231 default : break; // 非対応
237 ProcessEscapeSeq(dwSrcData);
244 lpszDst[dwDstLen] = TEXT('\0');
248 const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET CodeSet)
252 case CODE_JIS_KANJI_PLANE_1 :
253 case CODE_JIS_KANJI_PLANE_2 :
255 return PutKanjiChar(lpszDst, wCode);
257 case CODE_ALPHANUMERIC :
258 case CODE_PROP_ALPHANUMERIC :
260 if( IsSmallCharMode() == false ){
262 return PutAlphanumericChar(lpszDst, wCode);
270 case CODE_PROP_HIRAGANA :
272 return PutHiraganaChar(lpszDst, wCode);
274 case CODE_PROP_KATAKANA :
277 return PutKatakanaChar(lpszDst, wCode);
279 case CODE_JIS_X0201_KATAKANA :
281 return PutJisKatakanaChar(lpszDst, wCode);
283 case CODE_ADDITIONAL_SYMBOLS :
285 return PutSymbolsChar(lpszDst, wCode);
292 const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode)
299 size_t outbyte = sizeof(xcode);
301 memset(xcode, '\0', sizeof(xcode));
309 code[3] = wCode >> 8;
310 code[4] = wCode & 0xFF;
316 cd = iconv_open("UTF-8","ISO-2022-JP");
320 iconv(cd, &fptr, &inbyte, &tptr, &outbyte);
324 strncpy(lpszDst, xcode, strlen(xcode));
326 return strlen(lpszDst);
329 const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode)
332 static const TCHAR *acAlphanumericTable =
335 TEXT(" !”#$%&’()*+,-./")
336 TEXT("0123456789:;<=>?")
337 TEXT("@ABCDEFGHIJKLMNO")
338 TEXT("PQRSTUVWXYZ[¥]^_")
339 TEXT(" abcdefghijklmno")
340 TEXT("pqrstuvwxyz{|} ̄ ");
343 lpszDst[0] = acAlphanumericTableZenkaku[wCode];
347 lpszDst[0] = acAlphanumericTable[wCode * 3U + 0U];
348 lpszDst[1] = acAlphanumericTable[wCode * 3U + 1U];
349 lpszDst[2] = acAlphanumericTable[wCode * 3U + 2U];
355 const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode)
358 static const TCHAR *acHiraganaTable =
361 TEXT(" ぁあぃいぅうぇえぉおかがきぎく")
362 TEXT("ぐけげこごさざしじすずせぜそぞた")
363 TEXT("だちぢっつづてでとどなにぬねのは")
364 TEXT("ばぱひびぴふぶぷへべぺほぼぽまみ")
365 TEXT("むめもゃやゅゆょよらりるれろゎわ")
366 TEXT("ゐゑをん ゝゞー。「」、・ ");
369 lpszDst[0] = acHiraganaTable[wCode];
373 lpszDst[0] = acHiraganaTable[wCode * 3U + 0U];
374 lpszDst[1] = acHiraganaTable[wCode * 3U + 1U];
375 lpszDst[2] = acHiraganaTable[wCode * 3U + 2U];
381 const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode)
384 static const TCHAR *acKatakanaTable =
387 TEXT(" ァアィイゥウェエォオカガキギク")
388 TEXT("グケゲコゴサザシジスズセゼソゾタ")
389 TEXT("ダチヂッツヅテデトドナニヌネノハ")
390 TEXT("バパヒビピフブプヘベペホボポマミ")
391 TEXT("ムメモャヤュユョヨラリルレロヮワ")
392 TEXT("ヰヱヲンヴヵヶヽヾー。「」、・ ");
395 lpszDst[0] = acKatakanaTable[wCode];
399 lpszDst[0] = acKatakanaTable[wCode * 3U + 0U];
400 lpszDst[1] = acKatakanaTable[wCode * 3U + 1U];
401 lpszDst[2] = acKatakanaTable[wCode * 3U + 2U];
407 const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode)
410 static const TCHAR *acJisKatakanaTable =
413 TEXT(" 。「」、・ヲァィゥェォャュョッ")
414 TEXT("ーアイウエオカキクケコサシスセソ")
415 TEXT("タチツテトナニヌネノハヒフヘホマ")
416 TEXT("ミムメモヤユヨラリルレロワン゛゜")
421 lpszDst[0] = acJisKatakanaTable[wCode];
425 lpszDst[0] = acJisKatakanaTable[wCode * 3U + 0U];
426 lpszDst[1] = acJisKatakanaTable[wCode * 3U + 1U];
427 lpszDst[2] = acJisKatakanaTable[wCode * 3U + 2U];
433 const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode)
435 // 追加シンボル文字コード変換(とりあえず必要そうなものだけ)
436 static const TCHAR *aszSymbolsTable1[] =
438 _T("[HV]"), _T("[SD]"), _T("[P]"), _T("[W]"), _T("[MV]"), _T("[手]"), _T("[字]"), _T("[双]"), // 0x7A50 - 0x7A57 90/48 - 90/55
439 _T("[デ]"), _T("[S]"), _T("[二]"), _T("[多]"), _T("[解]"), _T("[SS]"), _T("[B]"), _T("[N]"), // 0x7A58 - 0x7A5F 90/56 - 90/63
440 _T("■"), _T("●"), _T("[天]"), _T("[交]"), _T("[映]"), _T("[無]"), _T("[料]"), _T("[年齢制限]"), // 0x7A60 - 0x7A67 90/64 - 90/71
441 _T("[前]"), _T("[後]"), _T("[再]"), _T("[新]"), _T("[初]"), _T("[終]"), _T("[生]"), _T("[販]"), // 0x7A68 - 0x7A6F 90/72 - 90/79
442 _T("[声]"), _T("[吹]"), _T("[PPV]"), _T("(秘)"), _T("ほか") // 0x7A70 - 0x7A74 90/80 - 90/84
445 static const TCHAR *aszSymbolsTable2[] =
447 _T("→"), _T("←"), _T("↑"), _T("↓"), _T("●"), _T("○"), _T("年"), _T("月"), // 0x7C21 - 0x7C28 92/01 - 92/08
448 _T("日"), _T("円"), _T("㎡"), _T("㎥"), _T("㎝"), _T("㎠"), _T("㎤"), _T("0."), // 0x7C29 - 0x7C30 92/09 - 92/16
449 _T("1."), _T("2."), _T("3."), _T("4."), _T("5."), _T("6."), _T("7."), _T("8."), // 0x7C31 - 0x7C38 92/17 - 92/24
450 _T("9."), _T("氏"), _T("副"), _T("元"), _T("故"), _T("前"), _T("新"), _T("0,"), // 0x7C39 - 0x7C40 92/25 - 92/32
451 _T("1,"), _T("2,"), _T("3,"), _T("4,"), _T("5,"), _T("6,"), _T("7,"), _T("8,"), // 0x7C41 - 0x7C48 92/33 - 92/40
452 _T("9,"), _T("(社)"), _T("(財)"), _T("(有)"), _T("(株)"), _T("(代)"), _T("(問)"), _T("▶"), // 0x7C49 - 0x7C50 92/41 - 92/48
453 _T("◀"), _T("〖"), _T("〗"), _T("⟐"), _T("^2"), _T("^3"), _T("(CD)"), _T("(vn)"), // 0x7C51 - 0x7C58 92/49 - 92/56
454 _T("(ob)"), _T("(cb)"), _T("(ce"), _T("mb)"), _T("(hp)"), _T("(br)"), _T("(p)"), _T("(s)"), // 0x7C59 - 0x7C60 92/57 - 92/64
455 _T("(ms)"), _T("(t)"), _T("(bs)"), _T("(b)"), _T("(tb)"), _T("(tp)"), _T("(ds)"), _T("(ag)"), // 0x7C61 - 0x7C68 92/65 - 92/72
456 _T("(eg)"), _T("(vo)"), _T("(fl)"), _T("(ke"), _T("y)"), _T("(sa"), _T("x)"), _T("(sy"), // 0x7C69 - 0x7C70 92/73 - 92/80
457 _T("n)"), _T("(or"), _T("g)"), _T("(pe"), _T("r)"), _T("(R)"), _T("(C)"), _T("(箏)"), // 0x7C71 - 0x7C78 92/81 - 92/88
458 _T("DJ"), _T("[演]"), _T("Fax") // 0x7C79 - 0x7C7B 92/89 - 92/91
461 static const TCHAR *aszSymbolsTable3[] =
463 _T("㈪"), _T("㈫"), _T("㈬"), _T("㈭"), _T("㈮"), _T("㈯"), _T("㈰"), _T("㈷"), // 0x7D21 - 0x7D28 93/01 - 93/08
464 _T("㍾"), _T("㍽"), _T("㍼"), _T("㍻"), _T("№"), _T("℡"), _T("〶"), _T("○"), // 0x7D29 - 0x7D30 93/09 - 93/16
465 _T("〔本〕"), _T("〔三〕"), _T("〔二〕"), _T("〔安〕"), _T("〔点〕"), _T("〔打〕"), _T("〔盗〕"), _T("〔勝〕"), // 0x7D31 - 0x7D38 93/17 - 93/24
466 _T("〔敗〕"), _T("〔S〕"), _T("[投]"), _T("[捕]"), _T("[一]"), _T("[二]"), _T("[三]"), _T("[遊]"), // 0x7D39 - 0x7D40 93/25 - 93/32
467 _T("[左]"), _T("[中]"), _T("[右]"), _T("[指]"), _T("[走]"), _T("[打]"), _T("㍑"), _T("㎏"), // 0x7D41 - 0x7D48 93/33 - 93/40
468 _T("㎐"), _T("ha"), _T("㎞"), _T("㎢"), _T("㍱"), _T("・"), _T("・"), _T("1/2"), // 0x7D49 - 0x7D50 93/41 - 93/48
469 _T("0/3"), _T("1/3"), _T("2/3"), _T("1/4"), _T("3/4"), _T("1/5"), _T("2/5"), _T("3/5"), // 0x7D51 - 0x7D58 93/49 - 93/56
470 _T("4/5"), _T("1/6"), _T("5/6"), _T("1/7"), _T("1/8"), _T("1/9"), _T("1/10"), _T("☀"), // 0x7D59 - 0x7D60 93/57 - 93/64
471 _T("☁"), _T("☂"), _T("☃"), _T("☖"), _T("☗"), _T("▽"), _T("▼"), _T("♦"), // 0x7D61 - 0x7D68 93/65 - 93/72
472 _T("♥"), _T("♣"), _T("♠"), _T("⌺"), _T("⦿"), _T("‼"), _T("⁉"), _T("(曇/晴)"), // 0x7D69 - 0x7D70 93/73 - 93/80
473 _T("☔"), _T("(雨)"), _T("(雪)"), _T("(大雪)"), _T("⚡"), _T("(雷雨)"), _T(" "), _T("・"), // 0x7D71 - 0x7D78 93/81 - 93/88
474 _T("・"), _T("♬"), _T("☎") // 0x7D79 - 0x7D7B 93/89 - 93/91
477 static const TCHAR *aszSymbolsTable4[] =
479 _T("Ⅰ"), _T("Ⅱ"), _T("Ⅲ"), _T("Ⅳ"), _T("Ⅴ"), _T("Ⅵ"), _T("Ⅶ"), _T("Ⅷ"), // 0x7E21 - 0x7E28 94/01 - 94/08
480 _T("Ⅸ"), _T("Ⅹ"), _T("Ⅺ"), _T("Ⅻ"), _T("⑰"), _T("⑱"), _T("⑲"), _T("⑳"), // 0x7E29 - 0x7E30 94/09 - 94/16
481 _T("⑴"), _T("⑵"), _T("⑶"), _T("⑷"), _T("⑸"), _T("⑹"), _T("⑺"), _T("⑻"), // 0x7E31 - 0x7E38 94/17 - 94/24
482 _T("⑼"), _T("⑽"), _T("⑾"), _T("⑿"), _T("㉑"), _T("㉒"), _T("㉓"), _T("㉔"), // 0x7E39 - 0x7E40 94/25 - 94/32
483 _T("(A)"), _T("(B)"), _T("(C)"), _T("(D)"), _T("(E)"), _T("(F)"), _T("(G)"), _T("(H)"), // 0x7E41 - 0x7E48 94/33 - 94/40
484 _T("(I)"), _T("(J)"), _T("(K)"), _T("(L)"), _T("(M)"), _T("(N)"), _T("(O)"), _T("(P)"), // 0x7E49 - 0x7E50 94/41 - 94/48
485 _T("(Q)"), _T("(R)"), _T("(S)"), _T("(T)"), _T("(U)"), _T("(V)"), _T("(W)"), _T("(X)"), // 0x7E51 - 0x7E58 94/49 - 94/56
486 _T("(Y)"), _T("(Z)"), _T("㉕"), _T("㉖"), _T("㉗"), _T("㉘"), _T("㉙"), _T("㉚"), // 0x7E59 - 0x7E60 94/57 - 94/64
487 _T("①"), _T("②"), _T("③"), _T("④"), _T("⑤"), _T("⑥"), _T("⑦"), _T("⑧"), // 0x7E61 - 0x7E68 94/65 - 94/72
488 _T("⑨"), _T("⑩"), _T("⑪"), _T("⑫"), _T("⑬"), _T("⑭"), _T("⑮"), _T("⑯"), // 0x7E69 - 0x7E70 94/73 - 94/80
489 _T("❶"), _T("❷"), _T("❸"), _T("❹"), _T("❺"), _T("❻"), _T("❼"), _T("❽"), // 0x7E71 - 0x7E78 94/81 - 94/88
490 _T("❾"), _T("❿"), _T("⓫"), _T("⓬"), _T("㉛") // 0x7E79 - 0x7E7D 94/89 - 94/93
493 static const TCHAR *aszSymbolsTable5[] =
495 _T("㐂"), _T("亭"), _T("份"), _T("仿"), _T("侚"), _T("俉"), _T("傜"), _T("儞"), // 0x7521 - 0x7528 85/01 - 85/08
496 _T("冼"), _T("㔟"), _T("匇"), _T("卡"), _T("卬"), _T("詹"), _T("吉"), _T("呍"), // 0x7529 - 0x7530 85/09 - 85/16
497 _T("咖"), _T("咜"), _T("咩"), _T("唎"), _T("啊"), _T("噲"), _T("囤"), _T("圳"), // 0x7531 - 0x7538 85/17 - 85/24
498 _T("圴"), _T("塚"), _T("墀"), _T("姤"), _T("娣"), _T("婕"), _T("寬"), _T("﨑"), // 0x7539 - 0x7540 85/25 - 85/32
499 _T("㟢"), _T("庬"), _T("弴"), _T("彅"), _T("德"), _T("怗"), _T("恵"), _T("愰"), // 0x7541 - 0x7548 85/33 - 85/40
500 _T("昤"), _T("曈"), _T("曙"), _T("曺"), _T("曻"), _T("桒"), _T("・"), _T("椑"), // 0x7549 - 0x7550 85/41 - 85/48
501 _T("椻"), _T("橅"), _T("檑"), _T("櫛"), _T("・"), _T("・"), _T("・"), _T("毱"), // 0x7551 - 0x7558 85/49 - 85/56
502 _T("泠"), _T("洮"), _T("海"), _T("涿"), _T("淊"), _T("淸"), _T("渚"), _T("潞"), // 0x7559 - 0x7560 85/57 - 85/64
503 _T("濹"), _T("灤"), _T("・"), _T("・"), _T("煇"), _T("燁"), _T("爀"), _T("玟"), // 0x7561 - 0x7568 85/65 - 85/72
504 _T("・"), _T("珉"), _T("珖"), _T("琛"), _T("琡"), _T("琢"), _T("琦"), _T("琪"), // 0x7569 - 0x7570 85/73 - 85/80
505 _T("琬"), _T("琹"), _T("瑋"), _T("㻚"), _T("畵"), _T("疁"), _T("睲"), _T("䂓"), // 0x7571 - 0x7578 85/81 - 85/88
506 _T("磈"), _T("磠"), _T("祇"), _T("禮"), _T("・"), _T("・") // 0x7579 - 0x757E 85/89 - 85/94
509 static const TCHAR *aszSymbolsTable6[] =
511 _T("・"), _T("秚"), _T("稞"), _T("筿"), _T("簱"), _T("䉤"), _T("綋"), _T("羡"), // 0x7621 - 0x7628 86/01 - 86/08
512 _T("脘"), _T("脺"), _T("・"), _T("芮"), _T("葛"), _T("蓜"), _T("蓬"), _T("蕙"), // 0x7629 - 0x7630 86/09 - 86/16
513 _T("藎"), _T("蝕"), _T("蟬"), _T("蠋"), _T("裵"), _T("角"), _T("諶"), _T("跎"), // 0x7631 - 0x7638 86/17 - 86/24
514 _T("辻"), _T("迶"), _T("郝"), _T("鄧"), _T("鄭"), _T("醲"), _T("鈳"), _T("銈"), // 0x7639 - 0x7640 86/25 - 86/32
515 _T("錡"), _T("鍈"), _T("閒"), _T("雞"), _T("餃"), _T("饀"), _T("髙"), _T("鯖"), // 0x7641 - 0x7648 86/33 - 86/40
516 _T("鷗"), _T("麴"), _T("麵") // 0x7649 - 0x764B 86/41 - 86/43
520 if((wCode >= 0x7A50U) && (wCode <= 0x7A74U)){
521 strcpy(lpszDst, aszSymbolsTable1[wCode - 0x7A50U]);
523 else if((wCode >= 0x7C21U) && (wCode <= 0x7C7BU)){
524 strcpy(lpszDst, aszSymbolsTable2[wCode - 0x7C21U]);
526 else if((wCode >= 0x7D21U) && (wCode <= 0x7D7BU)){
527 strcpy(lpszDst, aszSymbolsTable3[wCode - 0x7D21U]);
529 else if((wCode >= 0x7E21U) && (wCode <= 0x7E7DU)){
530 strcpy(lpszDst, aszSymbolsTable4[wCode - 0x7E21U]);
532 else if((wCode >= 0x7521U) && (wCode <= 0x757EU)){
533 strcpy(lpszDst, aszSymbolsTable5[wCode - 0x7521U]);
535 else if((wCode >= 0x7621U) && (wCode <= 0x764BU)){
536 strcpy(lpszDst, aszSymbolsTable6[wCode - 0x7621U]);
539 strcpy(lpszDst, TEXT("・"));
542 return strlen(lpszDst);
545 void ProcessEscapeSeq(const BYTE byCode)
548 switch(m_byEscSeqCount){
552 // Invocation of code elements
553 case 0x6EU : LockingShiftGL(2U); m_byEscSeqCount = 0U; return; // LS2
554 case 0x6FU : LockingShiftGL(3U); m_byEscSeqCount = 0U; return; // LS3
555 case 0x7EU : LockingShiftGR(1U); m_byEscSeqCount = 0U; return; // LS1R
556 case 0x7DU : LockingShiftGR(2U); m_byEscSeqCount = 0U; return; // LS2R
557 case 0x7CU : LockingShiftGR(3U); m_byEscSeqCount = 0U; return; // LS3R
559 // Designation of graphic sets
561 case 0x28U : m_byEscSeqIndex = 0U; break;
562 case 0x29U : m_byEscSeqIndex = 1U; break;
563 case 0x2AU : m_byEscSeqIndex = 2U; break;
564 case 0x2BU : m_byEscSeqIndex = 3U; break;
565 default : m_byEscSeqCount = 0U; return; // エラー
571 if(DesignationGSET(m_byEscSeqIndex, byCode)){
572 m_byEscSeqCount = 0U;
577 case 0x20 : m_bIsEscSeqDrcs = true; break;
578 case 0x28 : m_bIsEscSeqDrcs = true; m_byEscSeqIndex = 0U; break;
579 case 0x29 : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 1U; break;
580 case 0x2A : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 2U; break;
581 case 0x2B : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 3U; break;
582 default : m_byEscSeqCount = 0U; return; // エラー
588 if(!m_bIsEscSeqDrcs){
589 if(DesignationGSET(m_byEscSeqIndex, byCode)){
590 m_byEscSeqCount = 0U;
595 if(DesignationDRCS(m_byEscSeqIndex, byCode)){
596 m_byEscSeqCount = 0U;
602 m_bIsEscSeqDrcs = true;
606 m_byEscSeqCount = 0U;
613 DesignationDRCS(m_byEscSeqIndex, byCode);
614 m_byEscSeqCount = 0U;
621 void LockingShiftGL(const BYTE byIndexG)
624 m_pLockingGL = &m_CodeG[byIndexG];
627 void LockingShiftGR(const BYTE byIndexG)
630 m_pLockingGR = &m_CodeG[byIndexG];
633 void SingleShiftGL(const BYTE byIndexG)
636 m_pSingleGL = &m_CodeG[byIndexG];
639 const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode)
643 case 0x42U : m_CodeG[byIndexG] = CODE_KANJI; return true; // Kanji
644 case 0x4AU : m_CodeG[byIndexG] = CODE_ALPHANUMERIC; return true; // Alphanumeric
645 case 0x30U : m_CodeG[byIndexG] = CODE_HIRAGANA; return true; // Hiragana
646 case 0x31U : m_CodeG[byIndexG] = CODE_KATAKANA; return true; // Katakana
647 case 0x32U : m_CodeG[byIndexG] = CODE_MOSAIC_A; return true; // Mosaic A
648 case 0x33U : m_CodeG[byIndexG] = CODE_MOSAIC_B; return true; // Mosaic B
649 case 0x34U : m_CodeG[byIndexG] = CODE_MOSAIC_C; return true; // Mosaic C
650 case 0x35U : m_CodeG[byIndexG] = CODE_MOSAIC_D; return true; // Mosaic D
651 case 0x36U : m_CodeG[byIndexG] = CODE_PROP_ALPHANUMERIC; return true; // Proportional Alphanumeric
652 case 0x37U : m_CodeG[byIndexG] = CODE_PROP_HIRAGANA; return true; // Proportional Hiragana
653 case 0x38U : m_CodeG[byIndexG] = CODE_PROP_KATAKANA; return true; // Proportional Katakana
654 case 0x49U : m_CodeG[byIndexG] = CODE_JIS_X0201_KATAKANA; return true; // JIS X 0201 Katakana
655 case 0x39U : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_1; return true; // JIS compatible Kanji Plane 1
656 case 0x3AU : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_2; return true; // JIS compatible Kanji Plane 2
657 case 0x3BU : m_CodeG[byIndexG] = CODE_ADDITIONAL_SYMBOLS; return true; // Additional symbols
658 default : return false; // 不明なグラフィックセット
662 const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode)
664 // DRCSのグラフィックセットを割り当てる
666 case 0x40U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-0
667 case 0x41U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-1
668 case 0x42U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-2
669 case 0x43U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-3
670 case 0x44U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-4
671 case 0x45U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-5
672 case 0x46U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-6
673 case 0x47U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-7
674 case 0x48U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-8
675 case 0x49U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-9
676 case 0x4AU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-10
677 case 0x4BU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-11
678 case 0x4CU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-12
679 case 0x4DU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-13
680 case 0x4EU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-14
681 case 0x4FU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-15
682 case 0x70U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // Macro
683 default : return false; // 不明なグラフィックセット