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 PutHiraganaChar(TCHAR *lpszDst, const WORD wCode);
54 static const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode);
55 static const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode);
56 static const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode);
58 static void ProcessEscapeSeq(const BYTE byCode);
60 static void LockingShiftGL(const BYTE byIndexG);
61 static void LockingShiftGR(const BYTE byIndexG);
62 static void SingleShiftGL(const BYTE byIndexG);
64 static const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode);
65 static const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode);
67 static WORD convertjis(DWORD);
69 static const bool abCharSizeTable[] =
71 false, // CODE_UNKNOWN ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È(ÈóÂбþ)
72 true, // CODE_KANJI Kanji
73 false, // CODE_ALPHANUMERIC Alphanumeric
74 false, // CODE_HIRAGANA Hiragana
75 false, // CODE_KATAKANA Katakana
76 false, // CODE_MOSAIC_A Mosaic A
77 false, // CODE_MOSAIC_B Mosaic B
78 false, // CODE_MOSAIC_C Mosaic C
79 false, // CODE_MOSAIC_D Mosaic D
80 false, // CODE_PROP_ALPHANUMERIC Proportional Alphanumeric
81 false, // CODE_PROP_HIRAGANA Proportional Hiragana
82 false, // CODE_PROP_KATAKANA Proportional Katakana
83 false, // CODE_JIS_X0201_KATAKANA JIS X 0201 Katakana
84 true, // CODE_JIS_KANJI_PLANE_1 JIS compatible Kanji Plane 1
85 true, // CODE_JIS_KANJI_PLANE_2 JIS compatible Kanji Plane 2
86 true // CODE_ADDITIONAL_SYMBOLS Additional symbols
94 return AribToStringInternal(lpszDst, pSrcData, dwSrcLen);
98 const DWORD AribToStringInternal(TCHAR *lpszDst,
99 const BYTE *pSrcData, const DWORD dwSrcLen)
101 if(!pSrcData || !dwSrcLen || !lpszDst)return 0UL;
103 DWORD dwSrcPos = 0UL;
104 DWORD dwDstLen = 0UL;
108 m_byEscSeqCount = 0U;
111 m_CodeG[0] = CODE_KANJI;
112 m_CodeG[1] = CODE_ALPHANUMERIC;
113 m_CodeG[2] = CODE_HIRAGANA;
114 m_CodeG[3] = CODE_KATAKANA;
116 m_pLockingGL = &m_CodeG[0];
117 m_pLockingGR = &m_CodeG[2];
119 while(dwSrcPos < dwSrcLen){
120 dwSrcData = pSrcData[dwSrcPos] & 0xFF;
122 if(!m_byEscSeqCount){
125 if((dwSrcData >= 0x21U) && (dwSrcData <= 0x7EU)){
127 const CODE_SET CurCodeSet = (m_pSingleGL)? *m_pSingleGL : *m_pLockingGL;
130 if(abCharSizeTable[CurCodeSet]){
132 if((dwSrcLen - dwSrcPos) < 2UL)break;
134 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)pSrcData[dwSrcPos + 0] << 8) | (WORD)pSrcData[dwSrcPos + 1], CurCodeSet);
139 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)dwSrcData, CurCodeSet);
142 else if((dwSrcData >= 0xA1U) && (dwSrcData <= 0xFEU)){
144 const CODE_SET CurCodeSet = *m_pLockingGR;
146 if(abCharSizeTable[CurCodeSet]){
148 if((dwSrcLen - dwSrcPos) < 2UL)break;
150 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)(pSrcData[dwSrcPos + 0] & 0x7FU) << 8) | (WORD)(pSrcData[dwSrcPos + 1] & 0x7FU), CurCodeSet);
155 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)(dwSrcData & 0x7FU), CurCodeSet);
161 case 0x0FU : LockingShiftGL(0U); break; // LS0
162 case 0x0EU : LockingShiftGL(1U); break; // LS1
163 case 0x19U : SingleShiftGL(2U); break; // SS2
164 case 0x1DU : SingleShiftGL(3U); break; // SS3
165 case 0x1BU : m_byEscSeqCount = 1U; break; // ESC
167 case 0xA0U : lpszDst[dwDstLen++] = TEXT(' '); break; // SP
168 default : break; // ÈóÂбþ
173 // ¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹½èÍý
174 ProcessEscapeSeq(dwSrcData);
181 lpszDst[dwDstLen] = TEXT('\0');
186 const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET CodeSet)
190 case CODE_JIS_KANJI_PLANE_1 :
191 case CODE_JIS_KANJI_PLANE_2 :
193 return PutKanjiChar(lpszDst, wCode);
195 case CODE_ALPHANUMERIC :
196 case CODE_PROP_ALPHANUMERIC :
198 return PutAlphanumericChar(lpszDst, wCode);
201 case CODE_PROP_HIRAGANA :
202 // ¤Ò¤é¤¬¤Ê¥³¡¼¥É½ÐÎÏ
203 return PutHiraganaChar(lpszDst, wCode);
205 case CODE_PROP_KATAKANA :
207 // ¥«¥¿¥«¥Ê¥³¡¼¥É½ÐÎÏ
208 return PutKatakanaChar(lpszDst, wCode);
210 case CODE_JIS_X0201_KATAKANA :
211 // JIS¥«¥¿¥«¥Ê¥³¡¼¥É½ÐÎÏ
212 return PutJisKatakanaChar(lpszDst, wCode);
214 case CODE_ADDITIONAL_SYMBOLS :
215 // Äɲå·¥ó¥Ü¥ë¥³¡¼¥É½ÐÎÏ
216 return PutSymbolsChar(lpszDst, wCode);
223 const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode)
225 // JIS¢ªShift-JIS´Á»ú¥³¡¼¥ÉÊÑ´¹
226 const WORD wShiftJIS = convertjis(wCode);
229 // Shift-JIS ¢ª UNICODE
230 const char szShiftJIS[3] = {(char)(wShiftJIS >> 8), (char)(wShiftJIS & 0x00FFU), '\0'};
231 ::MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, szShiftJIS, 2, lpszDst, 2);
235 // Shift-JIS ¢ª Shift-JIS
236 lpszDst[0] = (wShiftJIS >> 8) & 0xFF;
237 lpszDst[1] = (char)(wShiftJIS & 0x00FFU);
243 const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode)
245 // ±Ñ¿ô»úʸ»ú¥³¡¼¥ÉÊÑ´¹
246 static const TCHAR *acAlphanumericTable =
247 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
248 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
249 TEXT("¡¡¡ª¡É¡ô¡ð¡ó¡õ¡Ç¡Ê¡Ë¡ö¡Ü¡¤¡Ý¡¥¡¿")
250 TEXT("£°£±£²£³£´£µ£¶£·£¸£¹¡§¡¨¡ã¡á¡ä¡©")
251 TEXT("¡÷£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï")
252 TEXT("£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú¡Î¡ï¡Ï¡°¡²")
253 TEXT("¡¡£á£â£ã£ä£å£æ£ç£è£é£ì£ë£ì£í£î£ï")
254 TEXT("£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú¡Ð¡Ã¡Ñ¡±¡¡");
257 lpszDst[0] = acAlphanumericTable[wCode];
261 lpszDst[0] = acAlphanumericTable[wCode * 2U + 0U];
262 lpszDst[1] = acAlphanumericTable[wCode * 2U + 1U];
268 const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode)
270 // ¤Ò¤é¤¬¤Êʸ»ú¥³¡¼¥ÉÊÑ´¹
271 static const TCHAR *acHiraganaTable =
272 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
273 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
274 TEXT("¡¡¤¡¤¢¤£¤¤¤¥¤¦¤§¤¨¤©¤ª¤«¤¬¤¤®¤¯")
275 TEXT("¤°¤±¤²¤³¤´¤µ¤¶¤·¤¸¤¹¤º¤»¤¼¤½¤¾¤¿")
276 TEXT("¤À¤Á¤Â¤Ã¤Ä¤Å¤Æ¤Ç¤È¤É¤Ê¤Ë¤Ì¤Í¤Î¤Ï")
277 TEXT("¤Ð¤Ñ¤Ò¤Ó¤Ô¤Õ¤Ö¤×¤Ø¤Ù¤Ú¤Û¤Ü¤Ý¤Þ¤ß")
278 TEXT("¤à¤á¤â¤ã¤ä¤å¤æ¤ç¤è¤é¤ê¤ë¤ì¤í¤î¤ï")
279 TEXT("¤ð¤ñ¤ò¤ó¡¡¡¡¡¡¡µ¡¶¡¼¡£¡Ö¡×¡¢¡¦¡¡");
282 lpszDst[0] = acHiraganaTable[wCode];
286 lpszDst[0] = acHiraganaTable[wCode * 2U + 0U];
287 lpszDst[1] = acHiraganaTable[wCode * 2U + 1U];
293 const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode)
295 // ¥«¥¿¥«¥Ê±Ñ¿ô»úʸ»ú¥³¡¼¥ÉÊÑ´¹
296 static const TCHAR *acKatakanaTable =
297 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
298 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
299 TEXT("¡¡¥¡¥¢¥£¥¤¥¥¥¦¥§¥¨¥©¥ª¥«¥¬¥¥®¥¯")
300 TEXT("¥°¥±¥²¥³¥´¥µ¥¶¥·¥¸¥¹¥º¥»¥¼¥½¥¾¥¿")
301 TEXT("¥À¥Á¥Â¥Ã¥Ä¥Å¥Æ¥Ç¥È¥É¥Ê¥Ë¥Ì¥Í¥Î¥Ï")
302 TEXT("¥Ð¥Ñ¥Ò¥Ó¥Ô¥Õ¥Ö¥×¥Ø¥Ù¥Ú¥Û¥Ü¥Ý¥Þ¥ß")
303 TEXT("¥à¥á¥â¥ã¥ä¥å¥æ¥ç¥è¥é¥ê¥ë¥ì¥í¥î¥ï")
304 TEXT("¥ð¥ñ¥ò¥ó¥ô¥õ¥ö¡³¡´¡¼¡£¡Ö¡×¡¢¡¦¡¡");
307 lpszDst[0] = acKatakanaTable[wCode];
311 lpszDst[0] = acKatakanaTable[wCode * 2U + 0U];
312 lpszDst[1] = acKatakanaTable[wCode * 2U + 1U];
318 const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode)
320 // JIS¥«¥¿¥«¥Êʸ»ú¥³¡¼¥ÉÊÑ´¹
321 static const TCHAR *acJisKatakanaTable =
322 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
323 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
324 TEXT("¡¡¡£¡Ö¡×¡¢¡¦¥ò¥¡¥£¥¥¥§¥©¥ã¥å¥ç¥Ã")
325 TEXT("¡¼¥¢¥¤¥¦¥¨¥ª¥«¥¥¯¥±¥³¥µ¥·¥¹¥»¥½")
326 TEXT("¥¿¥Á¥Ä¥Æ¥È¥Ê¥Ë¥Ì¥Í¥Î¥Ï¥Ò¥Õ¥Ø¥Û¥Þ")
327 TEXT("¥ß¥à¥á¥â¥ä¥æ¥è¥é¥ê¥ë¥ì¥í¥ï¥ó¡«¡¬")
328 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡")
329 TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡");
332 lpszDst[0] = acJisKatakanaTable[wCode];
336 lpszDst[0] = acJisKatakanaTable[wCode * 2U + 0U];
337 lpszDst[1] = acJisKatakanaTable[wCode * 2U + 1U];
343 const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode)
345 // Äɲå·¥ó¥Ü¥ëʸ»ú¥³¡¼¥ÉÊÑ´¹(¤È¤ê¤¢¤¨¤ºÉ¬Íפ½¤¦¤Ê¤â¤Î¤À¤±)
346 static const TCHAR *aszSymbolsTable1[] =
348 _T("[HV]"), _T("[SD]"), _T("[£Ð]"), _T("[£×]"), _T("[MV]"), _T("[¼ê]"), _T("[»ú]"), _T("[ÁÐ]"), // 0x7A50 - 0x7A57 90/48 - 90/55
349 _T("[¥Ç]"), _T("[£Ó]"), _T("[Æó]"), _T("[¿]"), _T("[²ò]"), _T("[SS]"), _T("[£Â]"), _T("[£Î]"), // 0x7A58 - 0x7A5F 90/56 - 90/63
350 _T("¢£"), _T("¡ü"), _T("[Å·]"), _T("[¸ò]"), _T("[±Ç]"), _T("[̵]"), _T("[ÎÁ]"), _T("[ǯÎðÀ©¸Â]"), // 0x7A60 - 0x7A67 90/64 - 90/71
351 _T("[Á°]"), _T("[¸å]"), _T("[ºÆ]"), _T("[¿·]"), _T("[½é]"), _T("[½ª]"), _T("[À¸]"), _T("[ÈÎ]"), // 0x7A68 - 0x7A6F 90/72 - 90/79
352 _T("[À¼]"), _T("[¿á]"), _T("[PPV]"), _T("(Èë)"), _T("¤Û¤«") // 0x7A70 - 0x7A74 90/80 - 90/84
355 static const TCHAR *aszSymbolsTable2[] =
357 _T("¢ª"), _T("¢«"), _T("¢¬"), _T("¢"), _T("¡ü"), _T("¡û"), _T("ǯ"), _T("·î"), // 0x7C21 - 0x7C28 92/01 - 92/08
358 _T("Æü"), _T("±ß"), _T("Ö"), _T("ΩÊý£í"), _T("Ñ"), _T("Ê¿ÊýÑ"), _T("ΩÊýÑ"), _T("£°."), // 0x7C29 - 0x7C30 92/09 - 92/16
359 _T("£±."), _T("£²."), _T("£³."), _T("£´."), _T("£µ."), _T("£¶."), _T("£·."), _T("£¸."), // 0x7C31 - 0x7C38 92/17 - 92/24
360 _T("£¹."), _T("»á"), _T("Éû"), _T("¸µ"), _T("¸Î"), _T("Á°"), _T("¿·"), _T("£°,"), // 0x7C39 - 0x7C40 92/25 - 92/32
361 _T("£±,"), _T("£²,"), _T("£³,"), _T("£´,"), _T("£µ,"), _T("£¶,"), _T("£·,"), _T("£¸,"), // 0x7C41 - 0x7C48 92/33 - 92/40
362 _T("£¹,"), _T("(¼Ò)"), _T("(ºâ)"), _T("(Í)"), _T("(³ô)"), _T("(Âå)"), _T("(Ìä)"), _T("¡ä"), // 0x7C49 - 0x7C50 92/41 - 92/48
363 _T("¡ã"), _T("¡Ú"), _T("¡Û"), _T("¡þ"), _T("^2"), _T("^3"), _T("(CD)"), _T("(vn)"), // 0x7C51 - 0x7C58 92/49 - 92/56
364 _T("(ob)"), _T("(cb)"), _T("(ce"), _T("mb)"), _T("(hp)"), _T("(br)"), _T("(p)"), _T("(s)"), // 0x7C59 - 0x7C60 92/57 - 92/64
365 _T("(ms)"), _T("(t)"), _T("(bs)"), _T("(b)"), _T("(tb)"), _T("(tp)"), _T("(ds)"), _T("(ag)"), // 0x7C61 - 0x7C68 92/65 - 92/72
366 _T("(eg)"), _T("(vo)"), _T("(fl)"), _T("(ke"), _T("y)"), _T("(sa"), _T("x)"), _T("(sy"), // 0x7C69 - 0x7C70 92/73 - 92/80
367 _T("n)"), _T("(or"), _T("g)"), _T("(pe"), _T("r)"), _T("(R)"), _T("(C)"), _T("(ä·)"), // 0x7C71 - 0x7C78 92/81 - 92/88
368 _T("DJ"), _T("[±é]"), _T("Fax") // 0x7C79 - 0x7C7B 92/89 - 92/91
371 static const TCHAR *aszSymbolsTable3[] =
373 _T("(·î)"), _T("(²Ð)"), _T("(¿å)"), _T("(ÌÚ)"), _T("(¶â)"), _T("(ÅÚ)"), _T("(Æü)"), _T("(½Ë)"), // 0x7D21 - 0x7D28 93/01 - 93/08
374 _T("í"), _T("î"), _T("ï"), _T("ß"), _T("â"), _T("ä"), _T("(¢©)"), _T("¡û"), // 0x7D29 - 0x7D30 93/09 - 93/16
375 _T("¡ÌËÜ¡Í"), _T("¡Ì»°¡Í"), _T("¡ÌÆó¡Í"), _T("¡Ì°Â¡Í"), _T("¡ÌÅÀ¡Í"), _T("¡ÌÂÇ¡Í"), _T("¡ÌÅð¡Í"), _T("¡Ì¾¡¡Í"), // 0x7D31 - 0x7D38 93/17 - 93/24
376 _T("¡ÌÇÔ¡Í"), _T("¡Ì£Ó¡Í"), _T("¡ÎÅê¡Ï"), _T("¡ÎÊá¡Ï"), _T("¡Î°ì¡Ï"), _T("¡ÎÆó¡Ï"), _T("¡Î»°¡Ï"), _T("¡ÎÍ·¡Ï"), // 0x7D39 - 0x7D40 93/25 - 93/32
377 _T("¡Îº¸¡Ï"), _T("¡ÎÃæ¡Ï"), _T("¡Î±¦¡Ï"), _T("¡Î»Ø¡Ï"), _T("¡ÎÁö¡Ï"), _T("¡ÎÂÇ¡Ï"), _T("È"), _T("Ô"), // 0x7D41 - 0x7D48 93/33 - 93/40
378 _T("Hz"), _T("ha"), _T("km"), _T("Ê¿Êýkm"), _T("hPa"), _T("¡¦"), _T("¡¦"), _T("1/2"), // 0x7D49 - 0x7D50 93/41 - 93/48
379 _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
380 _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
381 _T("ÆÞ¤ê"), _T("±«"), _T("Àã"), _T("¢¤"), _T("¢¥"), _T("¢¦"), _T("¢§"), _T("¢¡"), // 0x7D61 - 0x7D68 93/65 - 93/72
382 _T("¡¦"), _T("¡¦"), _T("¡¦"), _T("¡þ"), _T("¡ý"), _T("!!"), _T("!?"), _T("ÆÞ/À²"), // 0x7D69 - 0x7D70 93/73 - 93/80
383 _T("±«"), _T("±«"), _T("Àã"), _T("ÂçÀã"), _T("Íë"), _T("Í뱫"), _T("¡¡"), _T("¡¦"), // 0x7D71 - 0x7D78 93/81 - 93/88
384 _T("¡¦"), _T("¢ö"), _T("ä") // 0x7D79 - 0x7D7B 93/89 - 93/91
387 static const TCHAR *aszSymbolsTable4[] =
389 _T("µ"), _T("¶"), _T("·"), _T("¸"), _T("¹"), _T("º"), _T("»"), _T("¼"), // 0x7E21 - 0x7E28 94/01 - 94/08
390 _T("½"), _T("¾"), _T("XI"), _T("X¶"), _T("±"), _T("²"), _T("³"), _T("´"), // 0x7E29 - 0x7E30 94/09 - 94/16
391 _T("(1)"), _T("(2)"), _T("(3)"), _T("(4)"), _T("(5)"), _T("(6)"), _T("(7)"), _T("(8)"), // 0x7E31 - 0x7E38 94/17 - 94/24
392 _T("(9)"), _T("(10)"), _T("(11)"), _T("(12)"), _T("(21)"), _T("(22)"), _T("(23)"), _T("(24)"), // 0x7E39 - 0x7E40 94/25 - 94/32
393 _T("(A)"), _T("(B)"), _T("(C)"), _T("(D)"), _T("(E)"), _T("(F)"), _T("(G)"), _T("(H)"), // 0x7E41 - 0x7E48 94/33 - 94/40
394 _T("(I)"), _T("(J)"), _T("(K)"), _T("(L)"), _T("(M)"), _T("(N)"), _T("(O)"), _T("(P)"), // 0x7E49 - 0x7E50 94/41 - 94/48
395 _T("(Q)"), _T("(R)"), _T("(S)"), _T("(T)"), _T("(U)"), _T("(V)"), _T("(W)"), _T("(X)"), // 0x7E51 - 0x7E58 94/49 - 94/56
396 _T("(Y)"), _T("(Z)"), _T("(25)"), _T("(26)"), _T("(27)"), _T("(28)"), _T("(29)"), _T("(30)"), // 0x7E59 - 0x7E60 94/57 - 94/64
397 _T("¡"), _T("¢"), _T("£"), _T("¤"), _T("¥"), _T("¦"), _T("§"), _T("¨"), // 0x7E61 - 0x7E68 94/65 - 94/72
398 _T("©"), _T("ª"), _T("«"), _T("¬"), _T(""), _T("®"), _T("¯"), _T("°"), // 0x7E69 - 0x7E70 94/73 - 94/80
399 _T("¡"), _T("¢"), _T("£"), _T("¤"), _T("¥"), _T("¦"), _T("§"), _T("¨"), // 0x7E71 - 0x7E78 94/81 - 94/88
400 _T("©"), _T("ª"), _T("«"), _T("¬"), _T("(31)") // 0x7E79 - 0x7E7D 94/89 - 94/93
403 // ¥·¥ó¥Ü¥ë¤òÊÑ´¹¤¹¤ë
404 if((wCode >= 0x7A50U) && (wCode <= 0x7A74U)){
405 strcpy(lpszDst, aszSymbolsTable1[wCode - 0x7A50U]);
407 else if((wCode >= 0x7C21U) && (wCode <= 0x7C7BU)){
408 strcpy(lpszDst, aszSymbolsTable2[wCode - 0x7C21U]);
410 else if((wCode >= 0x7D21U) && (wCode <= 0x7D7BU)){
411 strcpy(lpszDst, aszSymbolsTable3[wCode - 0x7D21U]);
413 else if((wCode >= 0x7E21U) && (wCode <= 0x7E7DU)){
414 strcpy(lpszDst, aszSymbolsTable4[wCode - 0x7E21U]);
417 strcpy(lpszDst, TEXT("¡¦"));
420 return strlen(lpszDst);
423 void ProcessEscapeSeq(const BYTE byCode)
425 // ¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹½èÍý
426 switch(m_byEscSeqCount){
430 // Invocation of code elements
431 case 0x6EU : LockingShiftGL(2U); m_byEscSeqCount = 0U; return; // LS2
432 case 0x6FU : LockingShiftGL(3U); m_byEscSeqCount = 0U; return; // LS3
433 case 0x7EU : LockingShiftGR(1U); m_byEscSeqCount = 0U; return; // LS1R
434 case 0x7DU : LockingShiftGR(2U); m_byEscSeqCount = 0U; return; // LS2R
435 case 0x7CU : LockingShiftGR(3U); m_byEscSeqCount = 0U; return; // LS3R
437 // Designation of graphic sets
439 case 0x28U : m_byEscSeqIndex = 0U; break;
440 case 0x29U : m_byEscSeqIndex = 1U; break;
441 case 0x2AU : m_byEscSeqIndex = 2U; break;
442 case 0x2BU : m_byEscSeqIndex = 3U; break;
443 default : m_byEscSeqCount = 0U; return; // ¥¨¥é¡¼
449 if(DesignationGSET(m_byEscSeqIndex, byCode)){
450 m_byEscSeqCount = 0U;
455 case 0x20 : m_bIsEscSeqDrcs = true; break;
456 case 0x28 : m_bIsEscSeqDrcs = true; m_byEscSeqIndex = 0U; break;
457 case 0x29 : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 1U; break;
458 case 0x2A : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 2U; break;
459 case 0x2B : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 3U; break;
460 default : m_byEscSeqCount = 0U; return; // ¥¨¥é¡¼
466 if(!m_bIsEscSeqDrcs){
467 if(DesignationGSET(m_byEscSeqIndex, byCode)){
468 m_byEscSeqCount = 0U;
473 if(DesignationDRCS(m_byEscSeqIndex, byCode)){
474 m_byEscSeqCount = 0U;
480 m_bIsEscSeqDrcs = true;
484 m_byEscSeqCount = 0U;
491 DesignationDRCS(m_byEscSeqIndex, byCode);
492 m_byEscSeqCount = 0U;
499 void LockingShiftGL(const BYTE byIndexG)
502 m_pLockingGL = &m_CodeG[byIndexG];
505 void LockingShiftGR(const BYTE byIndexG)
508 m_pLockingGR = &m_CodeG[byIndexG];
511 void SingleShiftGL(const BYTE byIndexG)
514 m_pSingleGL = &m_CodeG[byIndexG];
517 const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode)
519 // G¤Î¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È¤ò³ä¤êÅö¤Æ¤ë
521 case 0x42U : m_CodeG[byIndexG] = CODE_KANJI; return true; // Kanji
522 case 0x4AU : m_CodeG[byIndexG] = CODE_ALPHANUMERIC; return true; // Alphanumeric
523 case 0x30U : m_CodeG[byIndexG] = CODE_HIRAGANA; return true; // Hiragana
524 case 0x31U : m_CodeG[byIndexG] = CODE_KATAKANA; return true; // Katakana
525 case 0x32U : m_CodeG[byIndexG] = CODE_MOSAIC_A; return true; // Mosaic A
526 case 0x33U : m_CodeG[byIndexG] = CODE_MOSAIC_B; return true; // Mosaic B
527 case 0x34U : m_CodeG[byIndexG] = CODE_MOSAIC_C; return true; // Mosaic C
528 case 0x35U : m_CodeG[byIndexG] = CODE_MOSAIC_D; return true; // Mosaic D
529 case 0x36U : m_CodeG[byIndexG] = CODE_PROP_ALPHANUMERIC; return true; // Proportional Alphanumeric
530 case 0x37U : m_CodeG[byIndexG] = CODE_PROP_HIRAGANA; return true; // Proportional Hiragana
531 case 0x38U : m_CodeG[byIndexG] = CODE_PROP_KATAKANA; return true; // Proportional Katakana
532 case 0x49U : m_CodeG[byIndexG] = CODE_JIS_X0201_KATAKANA; return true; // JIS X 0201 Katakana
533 case 0x39U : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_1; return true; // JIS compatible Kanji Plane 1
534 case 0x3AU : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_2; return true; // JIS compatible Kanji Plane 2
535 case 0x3BU : m_CodeG[byIndexG] = CODE_ADDITIONAL_SYMBOLS; return true; // Additional symbols
536 default : return false; // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È
540 const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode)
542 // DRCS¤Î¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È¤ò³ä¤êÅö¤Æ¤ë
544 case 0x40U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-0
545 case 0x41U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-1
546 case 0x42U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-2
547 case 0x43U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-3
548 case 0x44U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-4
549 case 0x45U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-5
550 case 0x46U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-6
551 case 0x47U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-7
552 case 0x48U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-8
553 case 0x49U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-9
554 case 0x4AU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-10
555 case 0x4BU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-11
556 case 0x4CU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-12
557 case 0x4DU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-13
558 case 0x4EU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-14
559 case 0x4FU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-15
560 case 0x70U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // Macro
561 default : return false; // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È
565 WORD convertjis(DWORD jiscode) {
578 code[0] = jiscode >> 8;
579 code[1] = jiscode & 0xFF;
583 cd = iconv_open("ISO-2022-JP","UTF-8");
587 iconv(cd, &fptr, &inbyte, &tptr, &outbyte);
592 xcode[0] = code[0] | 0x80;
593 xcode[1] = code[1] | 0x80;
595 rtn = ((xcode[0] << 8) & 0xFF00) | (xcode[1] & 0xFF);