9 #define CODE_UNKNOWN 0 // 不明なグラフィックセット(非対応)
\r
10 #define CODE_KANJI 1 // Kanji
\r
11 #define CODE_ALPHANUMERIC 2 // Alphanumeric
\r
12 #define CODE_HIRAGANA 3 // Hiragana
\r
13 #define CODE_KATAKANA 4 // Katakana
\r
14 #define CODE_MOSAIC_A 5 // Mosaic A
\r
15 #define CODE_MOSAIC_B 6 // Mosaic B
\r
16 #define CODE_MOSAIC_C 7 // Mosaic C
\r
17 #define CODE_MOSAIC_D 8 // Mosaic D
\r
18 #define CODE_PROP_ALPHANUMERIC 9 // Proportional Alphanumeric
\r
19 #define CODE_PROP_HIRAGANA 10 // Proportional Hiragana
\r
20 #define CODE_PROP_KATAKANA 11 // Proportional Katakana
\r
21 #define CODE_JIS_X0201_KATAKANA 12 // JIS X 0201 Katakana
\r
22 #define CODE_JIS_KANJI_PLANE_1 13 // JIS compatible Kanji Plane 1
\r
23 #define CODE_JIS_KANJI_PLANE_2 14 // JIS compatible Kanji Plane 2
\r
24 #define CODE_ADDITIONAL_SYMBOLS 15 // Additional symbols
\r
36 #define CODE_SET int
\r
38 static int m_CodeG[4];
\r
39 static int *m_pLockingGL;
\r
40 static int *m_pLockingGR;
\r
41 static int *m_pSingleGL;
\r
43 static BYTE m_byEscSeqCount;
\r
44 static BYTE m_byEscSeqIndex;
\r
45 static bool m_bIsEscSeqDrcs;
\r
48 static const DWORD AribToStringInternal(TCHAR *lpszDst, const BYTE *pSrcData, const DWORD dwSrcLen);
\r
49 static const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET CodeSet);
\r
51 static const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode);
\r
52 static const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode);
\r
53 static const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode);
\r
54 static const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode);
\r
55 static const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode);
\r
56 static const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode);
\r
58 static void ProcessEscapeSeq(const BYTE byCode);
\r
60 static void LockingShiftGL(const BYTE byIndexG);
\r
61 static void LockingShiftGR(const BYTE byIndexG);
\r
62 static void SingleShiftGL(const BYTE byIndexG);
\r
64 static const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode);
\r
65 static const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode);
\r
67 static WORD convertjis(DWORD);
\r
69 static const bool abCharSizeTable[] =
\r
71 false, // CODE_UNKNOWN 不明なグラフィックセット(非対応)
\r
72 true, // CODE_KANJI Kanji
\r
73 false, // CODE_ALPHANUMERIC Alphanumeric
\r
74 false, // CODE_HIRAGANA Hiragana
\r
75 false, // CODE_KATAKANA Katakana
\r
76 false, // CODE_MOSAIC_A Mosaic A
\r
77 false, // CODE_MOSAIC_B Mosaic B
\r
78 false, // CODE_MOSAIC_C Mosaic C
\r
79 false, // CODE_MOSAIC_D Mosaic D
\r
80 false, // CODE_PROP_ALPHANUMERIC Proportional Alphanumeric
\r
81 false, // CODE_PROP_HIRAGANA Proportional Hiragana
\r
82 false, // CODE_PROP_KATAKANA Proportional Katakana
\r
83 false, // CODE_JIS_X0201_KATAKANA JIS X 0201 Katakana
\r
84 true, // CODE_JIS_KANJI_PLANE_1 JIS compatible Kanji Plane 1
\r
85 true, // CODE_JIS_KANJI_PLANE_2 JIS compatible Kanji Plane 2
\r
86 true // CODE_ADDITIONAL_SYMBOLS Additional symbols
\r
91 const char *pSrcData,
\r
92 const int dwSrcLen) {
\r
94 return AribToStringInternal(lpszDst, pSrcData, dwSrcLen);
\r
97 const DWORD AribToStringInternal(TCHAR *lpszDst,
\r
98 const BYTE *pSrcData, const DWORD dwSrcLen)
\r
100 if(!pSrcData || !dwSrcLen || !lpszDst)return 0UL;
\r
102 DWORD dwSrcPos = 0UL;
\r
103 DWORD dwDstLen = 0UL;
\r
107 m_byEscSeqCount = 0U;
\r
108 m_pSingleGL = NULL;
\r
110 m_CodeG[0] = CODE_KANJI;
\r
111 m_CodeG[1] = CODE_ALPHANUMERIC;
\r
112 m_CodeG[2] = CODE_HIRAGANA;
\r
113 m_CodeG[3] = CODE_KATAKANA;
\r
115 m_pLockingGL = &m_CodeG[0];
\r
116 m_pLockingGR = &m_CodeG[2];
\r
118 while(dwSrcPos < dwSrcLen){
\r
119 dwSrcData = pSrcData[dwSrcPos] & 0xFF;
\r
121 if(!m_byEscSeqCount){
\r
124 if((dwSrcData >= 0x21U) && (dwSrcData <= 0x7EU)){
\r
126 const CODE_SET CurCodeSet = (m_pSingleGL)? *m_pSingleGL : *m_pLockingGL;
\r
127 m_pSingleGL = NULL;
\r
129 if(abCharSizeTable[CurCodeSet]){
\r
131 if((dwSrcLen - dwSrcPos) < 2UL)break;
\r
133 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)pSrcData[dwSrcPos + 0] << 8) | (WORD)pSrcData[dwSrcPos + 1], CurCodeSet);
\r
138 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)dwSrcData, CurCodeSet);
\r
141 else if((dwSrcData >= 0xA1U) && (dwSrcData <= 0xFEU)){
\r
143 const CODE_SET CurCodeSet = *m_pLockingGR;
\r
145 if(abCharSizeTable[CurCodeSet]){
\r
147 if((dwSrcLen - dwSrcPos) < 2UL)break;
\r
149 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)(pSrcData[dwSrcPos + 0] & 0x7FU) << 8) | (WORD)(pSrcData[dwSrcPos + 1] & 0x7FU), CurCodeSet);
\r
154 dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)(dwSrcData & 0x7FU), CurCodeSet);
\r
160 case 0x0FU : LockingShiftGL(0U); break; // LS0
\r
161 case 0x0EU : LockingShiftGL(1U); break; // LS1
\r
162 case 0x19U : SingleShiftGL(2U); break; // SS2
\r
163 case 0x1DU : SingleShiftGL(3U); break; // SS3
\r
164 case 0x1BU : m_byEscSeqCount = 1U; break; // ESC
\r
166 case 0xA0U : lpszDst[dwDstLen++] = TEXT(' '); break; // SP
\r
167 default : break; // 非対応
\r
173 ProcessEscapeSeq(dwSrcData);
\r
180 lpszDst[dwDstLen] = TEXT('\0');
\r
185 const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET CodeSet)
\r
189 case CODE_JIS_KANJI_PLANE_1 :
\r
190 case CODE_JIS_KANJI_PLANE_2 :
\r
192 return PutKanjiChar(lpszDst, wCode);
\r
194 case CODE_ALPHANUMERIC :
\r
195 case CODE_PROP_ALPHANUMERIC :
\r
197 return PutAlphanumericChar(lpszDst, wCode);
\r
199 case CODE_HIRAGANA :
\r
200 case CODE_PROP_HIRAGANA :
\r
202 return PutHiraganaChar(lpszDst, wCode);
\r
204 case CODE_PROP_KATAKANA :
\r
205 case CODE_KATAKANA :
\r
207 return PutKatakanaChar(lpszDst, wCode);
\r
209 case CODE_JIS_X0201_KATAKANA :
\r
211 return PutJisKatakanaChar(lpszDst, wCode);
\r
213 case CODE_ADDITIONAL_SYMBOLS :
\r
215 return PutSymbolsChar(lpszDst, wCode);
\r
222 const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode)
\r
224 // JIS→Shift-JIS漢字コード変換
\r
225 const WORD wShiftJIS = convertjis(wCode);
\r
228 // Shift-JIS → UNICODE
\r
229 const char szShiftJIS[3] = {(char)(wShiftJIS >> 8), (char)(wShiftJIS & 0x00FFU), '\0'};
\r
230 ::MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, szShiftJIS, 2, lpszDst, 2);
\r
234 // Shift-JIS → Shift-JIS
\r
235 lpszDst[0] = (wShiftJIS >> 8) & 0xFF;
\r
236 lpszDst[1] = (char)(wShiftJIS & 0x00FFU);
\r
242 const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode)
\r
245 static const TCHAR *acAlphanumericTable =
\r
248 TEXT(" !”#$%&’()*+,-./")
\r
249 TEXT("0123456789:;<=>?")
\r
250 TEXT("@ABCDEFGHIJKLMNO")
\r
251 TEXT("PQRSTUVWXYZ[¥]^_")
\r
252 TEXT(" abcdefghilklmno")
\r
253 TEXT("pqrstuvwxyz{|} ̄ ");
\r
256 lpszDst[0] = acAlphanumericTable[wCode];
\r
260 lpszDst[0] = acAlphanumericTable[wCode * 2U + 0U];
\r
261 lpszDst[1] = acAlphanumericTable[wCode * 2U + 1U];
\r
267 const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode)
\r
270 static const TCHAR *acHiraganaTable =
\r
273 TEXT(" ぁあぃいぅうぇえぉおかがきぎく")
\r
274 TEXT("ぐけげこごさざしじすずせぜそぞた")
\r
275 TEXT("だちぢっつづてでとどなにぬねのは")
\r
276 TEXT("ばぱひびぴふぶぷへべぺほぼぽまみ")
\r
277 TEXT("むめもゃやゅゆょよらりるれろゎわ")
\r
278 TEXT("ゐゑをん ゝゞー。「」、・ ");
\r
281 lpszDst[0] = acHiraganaTable[wCode];
\r
285 lpszDst[0] = acHiraganaTable[wCode * 2U + 0U];
\r
286 lpszDst[1] = acHiraganaTable[wCode * 2U + 1U];
\r
292 const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode)
\r
295 static const TCHAR *acKatakanaTable =
\r
298 TEXT(" ァアィイゥウェエォオカガキギク")
\r
299 TEXT("グケゲコゴサザシジスズセゼソゾタ")
\r
300 TEXT("ダチヂッツヅテデトドナニヌネノハ")
\r
301 TEXT("バパヒビピフブプヘベペホボポマミ")
\r
302 TEXT("ムメモャヤュユョヨラリルレロヮワ")
\r
303 TEXT("ヰヱヲンヴヵヶヽヾー。「」、・ ");
\r
306 lpszDst[0] = acKatakanaTable[wCode];
\r
310 lpszDst[0] = acKatakanaTable[wCode * 2U + 0U];
\r
311 lpszDst[1] = acKatakanaTable[wCode * 2U + 1U];
\r
317 const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode)
\r
320 static const TCHAR *acJisKatakanaTable =
\r
323 TEXT(" 。「」、・ヲァィゥェォャュョッ")
\r
324 TEXT("ーアイウエオカキクケコサシスセソ")
\r
325 TEXT("タチツテトナニヌネノハヒフヘホマ")
\r
326 TEXT("ミムメモヤユヨラリルレロワン゛゜")
\r
331 lpszDst[0] = acJisKatakanaTable[wCode];
\r
335 lpszDst[0] = acJisKatakanaTable[wCode * 2U + 0U];
\r
336 lpszDst[1] = acJisKatakanaTable[wCode * 2U + 1U];
\r
342 const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode)
\r
344 // 追加シンボル文字コード変換(とりあえず必要そうなものだけ)
\r
345 static const TCHAR *aszSymbolsTable1[] =
\r
347 _T("[HV]"), _T("[SD]"), _T("[P]"), _T("[W]"), _T("[MV]"), _T("[手]"), _T("[字]"), _T("[双]"), // 0x7A50 - 0x7A57 90/48 - 90/55
\r
348 _T("[デ]"), _T("[S]"), _T("[二]"), _T("[多]"), _T("[解]"), _T("[SS]"), _T("[B]"), _T("[N]"), // 0x7A58 - 0x7A5F 90/56 - 90/63
\r
349 _T("■"), _T("●"), _T("[天]"), _T("[交]"), _T("[映]"), _T("[無]"), _T("[料]"), _T("[年齢制限]"), // 0x7A60 - 0x7A67 90/64 - 90/71
\r
350 _T("[前]"), _T("[後]"), _T("[再]"), _T("[新]"), _T("[初]"), _T("[終]"), _T("[生]"), _T("[販]"), // 0x7A68 - 0x7A6F 90/72 - 90/79
\r
351 _T("[声]"), _T("[吹]"), _T("[PPV]"), _T("(秘)"), _T("ほか") // 0x7A70 - 0x7A74 90/80 - 90/84
\r
354 static const TCHAR *aszSymbolsTable2[] =
\r
356 _T("→"), _T("←"), _T("↑"), _T("↓"), _T("●"), _T("○"), _T("年"), _T("月"), // 0x7C21 - 0x7C28 92/01 - 92/08
\r
357 _T("日"), _T("円"), _T("㎡"), _T("立方m"), _T("㎝"), _T("平方cm"), _T("立方㎝"), _T("0."), // 0x7C29 - 0x7C30 92/09 - 92/16
\r
358 _T("1."), _T("2."), _T("3."), _T("4."), _T("5."), _T("6."), _T("7."), _T("8."), // 0x7C31 - 0x7C38 92/17 - 92/24
\r
359 _T("9."), _T("氏"), _T("副"), _T("元"), _T("故"), _T("前"), _T("新"), _T("0,"), // 0x7C39 - 0x7C40 92/25 - 92/32
\r
360 _T("1,"), _T("2,"), _T("3,"), _T("4,"), _T("5,"), _T("6,"), _T("7,"), _T("8,"), // 0x7C41 - 0x7C48 92/33 - 92/40
\r
361 _T("9,"), _T("(社)"), _T("(財)"), _T("(有)"), _T("(株)"), _T("(代)"), _T("(問)"), _T(">"), // 0x7C49 - 0x7C50 92/41 - 92/48
\r
362 _T("<"), _T("【"), _T("】"), _T("◇"), _T("^2"), _T("^3"), _T("(CD)"), _T("(vn)"), // 0x7C51 - 0x7C58 92/49 - 92/56
\r
363 _T("(ob)"), _T("(cb)"), _T("(ce"), _T("mb)"), _T("(hp)"), _T("(br)"), _T("(p)"), _T("(s)"), // 0x7C59 - 0x7C60 92/57 - 92/64
\r
364 _T("(ms)"), _T("(t)"), _T("(bs)"), _T("(b)"), _T("(tb)"), _T("(tp)"), _T("(ds)"), _T("(ag)"), // 0x7C61 - 0x7C68 92/65 - 92/72
\r
365 _T("(eg)"), _T("(vo)"), _T("(fl)"), _T("(ke"), _T("y)"), _T("(sa"), _T("x)"), _T("(sy"), // 0x7C69 - 0x7C70 92/73 - 92/80
\r
366 _T("n)"), _T("(or"), _T("g)"), _T("(pe"), _T("r)"), _T("(R)"), _T("(C)"), _T("(箏)"), // 0x7C71 - 0x7C78 92/81 - 92/88
\r
367 _T("DJ"), _T("[演]"), _T("Fax") // 0x7C79 - 0x7C7B 92/89 - 92/91
\r
370 static const TCHAR *aszSymbolsTable3[] =
\r
372 _T("(月)"), _T("(火)"), _T("(水)"), _T("(木)"), _T("(金)"), _T("(土)"), _T("(日)"), _T("(祝)"), // 0x7D21 - 0x7D28 93/01 - 93/08
\r
373 _T("㍾"), _T("㍽"), _T("㍼"), _T("㍻"), _T("№"), _T("℡"), _T("(〒)"), _T("○"), // 0x7D29 - 0x7D30 93/09 - 93/16
\r
374 _T("〔本〕"), _T("〔三〕"), _T("〔二〕"), _T("〔安〕"), _T("〔点〕"), _T("〔打〕"), _T("〔盗〕"), _T("〔勝〕"), // 0x7D31 - 0x7D38 93/17 - 93/24
\r
375 _T("〔敗〕"), _T("〔S〕"), _T("[投]"), _T("[捕]"), _T("[一]"), _T("[二]"), _T("[三]"), _T("[遊]"), // 0x7D39 - 0x7D40 93/25 - 93/32
\r
376 _T("[左]"), _T("[中]"), _T("[右]"), _T("[指]"), _T("[走]"), _T("[打]"), _T("㍑"), _T("㎏"), // 0x7D41 - 0x7D48 93/33 - 93/40
\r
377 _T("Hz"), _T("ha"), _T("km"), _T("平方km"), _T("hPa"), _T("・"), _T("・"), _T("1/2"), // 0x7D49 - 0x7D50 93/41 - 93/48
\r
378 _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
\r
379 _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
\r
380 _T("曇り"), _T("雨"), _T("雪"), _T("△"), _T("▲"), _T("▽"), _T("▼"), _T("◆"), // 0x7D61 - 0x7D68 93/65 - 93/72
\r
381 _T("・"), _T("・"), _T("・"), _T("◇"), _T("◎"), _T("!!"), _T("!?"), _T("曇/晴"), // 0x7D69 - 0x7D70 93/73 - 93/80
\r
382 _T("雨"), _T("雨"), _T("雪"), _T("大雪"), _T("雷"), _T("雷雨"), _T(" "), _T("・"), // 0x7D71 - 0x7D78 93/81 - 93/88
\r
383 _T("・"), _T("♪"), _T("℡") // 0x7D79 - 0x7D7B 93/89 - 93/91
\r
386 static const TCHAR *aszSymbolsTable4[] =
\r
388 _T("Ⅰ"), _T("Ⅱ"), _T("Ⅲ"), _T("Ⅳ"), _T("Ⅴ"), _T("Ⅵ"), _T("Ⅶ"), _T("Ⅷ"), // 0x7E21 - 0x7E28 94/01 - 94/08
\r
389 _T("Ⅸ"), _T("Ⅹ"), _T("XI"), _T("XⅡ"), _T("⑰"), _T("⑱"), _T("⑲"), _T("⑳"), // 0x7E29 - 0x7E30 94/09 - 94/16
\r
390 _T("(1)"), _T("(2)"), _T("(3)"), _T("(4)"), _T("(5)"), _T("(6)"), _T("(7)"), _T("(8)"), // 0x7E31 - 0x7E38 94/17 - 94/24
\r
391 _T("(9)"), _T("(10)"), _T("(11)"), _T("(12)"), _T("(21)"), _T("(22)"), _T("(23)"), _T("(24)"), // 0x7E39 - 0x7E40 94/25 - 94/32
\r
392 _T("(A)"), _T("(B)"), _T("(C)"), _T("(D)"), _T("(E)"), _T("(F)"), _T("(G)"), _T("(H)"), // 0x7E41 - 0x7E48 94/33 - 94/40
\r
393 _T("(I)"), _T("(J)"), _T("(K)"), _T("(L)"), _T("(M)"), _T("(N)"), _T("(O)"), _T("(P)"), // 0x7E49 - 0x7E50 94/41 - 94/48
\r
394 _T("(Q)"), _T("(R)"), _T("(S)"), _T("(T)"), _T("(U)"), _T("(V)"), _T("(W)"), _T("(X)"), // 0x7E51 - 0x7E58 94/49 - 94/56
\r
395 _T("(Y)"), _T("(Z)"), _T("(25)"), _T("(26)"), _T("(27)"), _T("(28)"), _T("(29)"), _T("(30)"), // 0x7E59 - 0x7E60 94/57 - 94/64
\r
396 _T("①"), _T("②"), _T("③"), _T("④"), _T("⑤"), _T("⑥"), _T("⑦"), _T("⑧"), // 0x7E61 - 0x7E68 94/65 - 94/72
\r
397 _T("⑨"), _T("⑩"), _T("⑪"), _T("⑫"), _T("⑬"), _T("⑭"), _T("⑮"), _T("⑯"), // 0x7E69 - 0x7E70 94/73 - 94/80
\r
398 _T("①"), _T("②"), _T("③"), _T("④"), _T("⑤"), _T("⑥"), _T("⑦"), _T("⑧"), // 0x7E71 - 0x7E78 94/81 - 94/88
\r
399 _T("⑨"), _T("⑩"), _T("⑪"), _T("⑫"), _T("(31)") // 0x7E79 - 0x7E7D 94/89 - 94/93
\r
403 if((wCode >= 0x7A50U) && (wCode <= 0x7A74U)){
\r
404 strcpy(lpszDst, aszSymbolsTable1[wCode - 0x7A50U]);
\r
406 else if((wCode >= 0x7C21U) && (wCode <= 0x7C7BU)){
\r
407 strcpy(lpszDst, aszSymbolsTable2[wCode - 0x7C21U]);
\r
409 else if((wCode >= 0x7D21U) && (wCode <= 0x7D7BU)){
\r
410 strcpy(lpszDst, aszSymbolsTable3[wCode - 0x7D21U]);
\r
412 else if((wCode >= 0x7E21U) && (wCode <= 0x7E7DU)){
\r
413 strcpy(lpszDst, aszSymbolsTable4[wCode - 0x7E21U]);
\r
416 strcpy(lpszDst, TEXT("・"));
\r
419 return strlen(lpszDst);
\r
422 void ProcessEscapeSeq(const BYTE byCode)
\r
425 switch(m_byEscSeqCount){
\r
429 // Invocation of code elements
\r
430 case 0x6EU : LockingShiftGL(2U); m_byEscSeqCount = 0U; return; // LS2
\r
431 case 0x6FU : LockingShiftGL(3U); m_byEscSeqCount = 0U; return; // LS3
\r
432 case 0x7EU : LockingShiftGR(1U); m_byEscSeqCount = 0U; return; // LS1R
\r
433 case 0x7DU : LockingShiftGR(2U); m_byEscSeqCount = 0U; return; // LS2R
\r
434 case 0x7CU : LockingShiftGR(3U); m_byEscSeqCount = 0U; return; // LS3R
\r
436 // Designation of graphic sets
\r
438 case 0x28U : m_byEscSeqIndex = 0U; break;
\r
439 case 0x29U : m_byEscSeqIndex = 1U; break;
\r
440 case 0x2AU : m_byEscSeqIndex = 2U; break;
\r
441 case 0x2BU : m_byEscSeqIndex = 3U; break;
\r
442 default : m_byEscSeqCount = 0U; return; // エラー
\r
448 if(DesignationGSET(m_byEscSeqIndex, byCode)){
\r
449 m_byEscSeqCount = 0U;
\r
454 case 0x20 : m_bIsEscSeqDrcs = true; break;
\r
455 case 0x28 : m_bIsEscSeqDrcs = true; m_byEscSeqIndex = 0U; break;
\r
456 case 0x29 : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 1U; break;
\r
457 case 0x2A : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 2U; break;
\r
458 case 0x2B : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 3U; break;
\r
459 default : m_byEscSeqCount = 0U; return; // エラー
\r
465 if(!m_bIsEscSeqDrcs){
\r
466 if(DesignationGSET(m_byEscSeqIndex, byCode)){
\r
467 m_byEscSeqCount = 0U;
\r
472 if(DesignationDRCS(m_byEscSeqIndex, byCode)){
\r
473 m_byEscSeqCount = 0U;
\r
478 if(byCode == 0x20U){
\r
479 m_bIsEscSeqDrcs = true;
\r
483 m_byEscSeqCount = 0U;
\r
490 DesignationDRCS(m_byEscSeqIndex, byCode);
\r
491 m_byEscSeqCount = 0U;
\r
498 void LockingShiftGL(const BYTE byIndexG)
\r
501 m_pLockingGL = &m_CodeG[byIndexG];
\r
504 void LockingShiftGR(const BYTE byIndexG)
\r
507 m_pLockingGR = &m_CodeG[byIndexG];
\r
510 void SingleShiftGL(const BYTE byIndexG)
\r
513 m_pSingleGL = &m_CodeG[byIndexG];
\r
516 const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode)
\r
518 // Gのグラフィックセットを割り当てる
\r
520 case 0x42U : m_CodeG[byIndexG] = CODE_KANJI; return true; // Kanji
\r
521 case 0x4AU : m_CodeG[byIndexG] = CODE_ALPHANUMERIC; return true; // Alphanumeric
\r
522 case 0x30U : m_CodeG[byIndexG] = CODE_HIRAGANA; return true; // Hiragana
\r
523 case 0x31U : m_CodeG[byIndexG] = CODE_KATAKANA; return true; // Katakana
\r
524 case 0x32U : m_CodeG[byIndexG] = CODE_MOSAIC_A; return true; // Mosaic A
\r
525 case 0x33U : m_CodeG[byIndexG] = CODE_MOSAIC_B; return true; // Mosaic B
\r
526 case 0x34U : m_CodeG[byIndexG] = CODE_MOSAIC_C; return true; // Mosaic C
\r
527 case 0x35U : m_CodeG[byIndexG] = CODE_MOSAIC_D; return true; // Mosaic D
\r
528 case 0x36U : m_CodeG[byIndexG] = CODE_PROP_ALPHANUMERIC; return true; // Proportional Alphanumeric
\r
529 case 0x37U : m_CodeG[byIndexG] = CODE_PROP_HIRAGANA; return true; // Proportional Hiragana
\r
530 case 0x38U : m_CodeG[byIndexG] = CODE_PROP_KATAKANA; return true; // Proportional Katakana
\r
531 case 0x49U : m_CodeG[byIndexG] = CODE_JIS_X0201_KATAKANA; return true; // JIS X 0201 Katakana
\r
532 case 0x39U : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_1; return true; // JIS compatible Kanji Plane 1
\r
533 case 0x3AU : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_2; return true; // JIS compatible Kanji Plane 2
\r
534 case 0x3BU : m_CodeG[byIndexG] = CODE_ADDITIONAL_SYMBOLS; return true; // Additional symbols
\r
535 default : return false; // 不明なグラフィックセット
\r
539 const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode)
\r
541 // DRCSのグラフィックセットを割り当てる
\r
543 case 0x40U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-0
\r
544 case 0x41U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-1
\r
545 case 0x42U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-2
\r
546 case 0x43U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-3
\r
547 case 0x44U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-4
\r
548 case 0x45U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-5
\r
549 case 0x46U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-6
\r
550 case 0x47U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-7
\r
551 case 0x48U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-8
\r
552 case 0x49U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-9
\r
553 case 0x4AU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-10
\r
554 case 0x4BU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-11
\r
555 case 0x4CU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-12
\r
556 case 0x4DU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-13
\r
557 case 0x4EU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-14
\r
558 case 0x4FU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-15
\r
559 case 0x70U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // Macro
\r
560 default : return false; // 不明なグラフィックセット
\r
564 WORD convertjis(DWORD jiscode) {
\r
566 int hi = (jiscode >> 8) & 0xFF;
\r
567 int lo = (jiscode >> 0) & 0xFF;
\r
575 if ( 0x7F <= lo && lo <= 0x9D )
\r
579 hi >>= 1; // 上位7ビットを取り出す
\r
585 return ((hi&0xFF) << 8) | (lo & 0xFF);
\r