X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=epgdump%2Faribstr.c;h=44c62bfbf17244e0206f4691ae26c5c016a309e6;hb=ebc039ea3003a5704829590dfaa87d8e1aee43e6;hp=1e736ea754bf5eca47116c4dff54a833cd52c63c;hpb=37b22a3601d2e00d0b676c7cd909d395c0526a44;p=rec10%2Frec10-git.git diff --git a/epgdump/aribstr.c b/epgdump/aribstr.c index 1e736ea..44c62bf 100755 --- a/epgdump/aribstr.c +++ b/epgdump/aribstr.c @@ -6,7 +6,7 @@ #include "aribstr.h" -#define CODE_UNKNOWN 0 // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È(ÈóÂбþ) +#define CODE_UNKNOWN 0 // 不明なグラフィックセット(非対応) #define CODE_KANJI 1 // Kanji #define CODE_ALPHANUMERIC 2 // Alphanumeric #define CODE_HIRAGANA 3 // Hiragana @@ -50,6 +50,7 @@ static const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_ static const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode); static const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode); +//static const DWORD PutAlphanumericHankakuChar(TCHAR *lpszDst, const WORD wCode); static const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode); static const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode); static const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode); @@ -64,11 +65,9 @@ static void SingleShiftGL(const BYTE byIndexG); static const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode); static const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode); -static WORD convertjis(DWORD); - static const bool abCharSizeTable[] = { - false, // CODE_UNKNOWN ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È(ÈóÂбþ) + false, // CODE_UNKNOWN 不明なグラフィックセット(非対応) true, // CODE_KANJI Kanji false, // CODE_ALPHANUMERIC Alphanumeric false, // CODE_HIRAGANA Hiragana @@ -86,6 +85,57 @@ static const bool abCharSizeTable[] = true // CODE_ADDITIONAL_SYMBOLS Additional symbols }; +typedef enum{ + STR_SMALL = 0, //SSZ + STR_MEDIUM, //MSZ + STR_NORMAL, //NSZ + STR_MICRO, //SZX 0x60 + STR_HIGH_W, //SZX 0x41 + STR_WIDTH_W, //SZX 0x44 + STR_W, //SZX 0x45 + STR_SPECIAL_1, //SZX 0x6B + STR_SPECIAL_2, //SZX 0x64 +} STRING_SIZE; + +STRING_SIZE m_emStrSize; + +bool IsSmallCharMode(void) +{ + bool bRet = false; + switch(m_emStrSize){ + case STR_SMALL: + bRet = true; + break; + case STR_MEDIUM: + bRet = true; + break; + case STR_NORMAL: + bRet = false; + break; + case STR_MICRO: + bRet = true; + break; + case STR_HIGH_W: + bRet = false; + break; + case STR_WIDTH_W: + bRet = false; + break; + case STR_W: + bRet = false; + break; + case STR_SPECIAL_1: + bRet = false; + break; + case STR_SPECIAL_2: + bRet = false; + break; + default: + break; + } + return bRet; +} + int AribToString( char *lpszDst, const char *pSrcData, @@ -104,7 +154,7 @@ const DWORD AribToStringInternal(TCHAR *lpszDst, DWORD dwDstLen = 0UL; int dwSrcData; - // ¾õÂÖ½é´üÀßÄê + // 状態初期設定 m_byEscSeqCount = 0U; m_pSingleGL = NULL; @@ -116,70 +166,82 @@ const DWORD AribToStringInternal(TCHAR *lpszDst, m_pLockingGL = &m_CodeG[0]; m_pLockingGR = &m_CodeG[2]; + m_emStrSize = STR_NORMAL; while(dwSrcPos < dwSrcLen){ dwSrcData = pSrcData[dwSrcPos] & 0xFF; + //printf("Arib:pos%d:%d:%s\n",dwSrcPos,dwSrcData,lpszDst); if(!m_byEscSeqCount){ - // GL/GRÎΰè + // GL/GR領域 if((dwSrcData >= 0x21U) && (dwSrcData <= 0x7EU)){ - // GLÎΰè + // GL領域 const CODE_SET CurCodeSet = (m_pSingleGL)? *m_pSingleGL : *m_pLockingGL; m_pSingleGL = NULL; if(abCharSizeTable[CurCodeSet]){ - // 2¥Ð¥¤¥È¥³¡¼¥É + // 2バイトコード if((dwSrcLen - dwSrcPos) < 2UL)break; dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)pSrcData[dwSrcPos + 0] << 8) | (WORD)pSrcData[dwSrcPos + 1], CurCodeSet); dwSrcPos++; } else{ - // 1¥Ð¥¤¥È¥³¡¼¥É + // 1バイトコード dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)dwSrcData, CurCodeSet); } } else if((dwSrcData >= 0xA1U) && (dwSrcData <= 0xFEU)){ - // GRÎΰè + // GR領域 const CODE_SET CurCodeSet = *m_pLockingGR; if(abCharSizeTable[CurCodeSet]){ - // 2¥Ð¥¤¥È¥³¡¼¥É + // 2バイトコード if((dwSrcLen - dwSrcPos) < 2UL)break; dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)(pSrcData[dwSrcPos + 0] & 0x7FU) << 8) | (WORD)(pSrcData[dwSrcPos + 1] & 0x7FU), CurCodeSet); dwSrcPos++; } else{ - // 1¥Ð¥¤¥È¥³¡¼¥É + // 1バイトコード dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)(dwSrcData & 0x7FU), CurCodeSet); } } else{ - // À©¸æ¥³¡¼¥É + // 制御コード switch(dwSrcData){ case 0x0FU : LockingShiftGL(0U); break; // LS0 case 0x0EU : LockingShiftGL(1U); break; // LS1 case 0x19U : SingleShiftGL(2U); break; // SS2 case 0x1DU : SingleShiftGL(3U); break; // SS3 case 0x1BU : m_byEscSeqCount = 1U; break; // ESC + case 0x89U : m_emStrSize = STR_MEDIUM; break; // MSZ + case 0x8AU : m_emStrSize = STR_NORMAL; break; // NSZ case 0x20U : - case 0xA0U : lpszDst[dwDstLen++] = TEXT(' '); break; // SP - default : break; // ÈóÂбþ + case 0xA0U : + //SP 空白 + //空白は文字サイズの影響あり + if( IsSmallCharMode() == false ){ + strcpy(&lpszDst[dwDstLen], " "); + dwDstLen += 3U; + } else { + lpszDst[dwDstLen++] = TEXT(' '); + } + break; + default : break; // 非対応 } } } else{ - // ¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹½èÍý + // エスケープシーケンス処理 ProcessEscapeSeq(dwSrcData); } dwSrcPos++; } - // ½ªÃ¼Ê¸»ú + // 終端文字 lpszDst[dwDstLen] = TEXT('\0'); - return dwDstLen; } @@ -189,32 +251,39 @@ const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET Cod case CODE_KANJI : case CODE_JIS_KANJI_PLANE_1 : case CODE_JIS_KANJI_PLANE_2 : - // ´Á»ú¥³¡¼¥É½ÐÎÏ + // 漢字コード出力 return PutKanjiChar(lpszDst, wCode); case CODE_ALPHANUMERIC : case CODE_PROP_ALPHANUMERIC : - // ±Ñ¿ô»ú¥³¡¼¥É½ÐÎÏ + // 英数字コード出力 + if( IsSmallCharMode() == false ){ + //全角テーブルコード取得 return PutAlphanumericChar(lpszDst, wCode); + } else { + //半角はそのまま出力 + lpszDst[0] = wCode; + return 1UL; + } case CODE_HIRAGANA : case CODE_PROP_HIRAGANA : - // ¤Ò¤é¤¬¤Ê¥³¡¼¥É½ÐÎÏ + // ひらがなコード出力 return PutHiraganaChar(lpszDst, wCode); case CODE_PROP_KATAKANA : case CODE_KATAKANA : - // ¥«¥¿¥«¥Ê¥³¡¼¥É½ÐÎÏ + // カタカナコード出力 return PutKatakanaChar(lpszDst, wCode); case CODE_JIS_X0201_KATAKANA : - // JIS¥«¥¿¥«¥Ê¥³¡¼¥É½ÐÎÏ + // JISカタカナコード出力 return PutJisKatakanaChar(lpszDst, wCode); -#if 1 + case CODE_ADDITIONAL_SYMBOLS : - // Äɲå·¥ó¥Ü¥ë¥³¡¼¥É½ÐÎÏ + // 追加シンボルコード出力 return PutSymbolsChar(lpszDst, wCode); -#endif + default : return 0UL; } @@ -222,185 +291,232 @@ const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET Cod const DWORD PutKanjiChar(TCHAR *lpszDst, const WORD wCode) { - // JIS¢ªShift-JIS´Á»ú¥³¡¼¥ÉÊÑ´¹ - const WORD wShiftJIS = convertjis(wCode); + char code[9]; + char xcode[5]; + iconv_t cd; -#ifdef _UNICODE - // Shift-JIS ¢ª UNICODE - const char szShiftJIS[3] = {(char)(wShiftJIS >> 8), (char)(wShiftJIS & 0x00FFU), '\0'}; - ::MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, szShiftJIS, 2, lpszDst, 2); + size_t inbyte = 8; + size_t outbyte = sizeof(xcode); - return 1UL; -#else - // Shift-JIS ¢ª Shift-JIS - lpszDst[0] = (wShiftJIS >> 8) & 0xFF; - lpszDst[1] = (char)(wShiftJIS & 0x00FFU); + memset(xcode, '\0', sizeof(xcode)); - return 2UL; -#endif + const char *fptr; + char *tptr; + + code[0] = 0x1BU; + code[1] = 0x24U; + code[2] = 0x40U; + code[3] = wCode >> 8; + code[4] = wCode & 0xFF; + code[5] = 0x1BU; + code[6] = 0x28U; + code[7] = 0x4AU; + code[8] = '\0'; + + cd = iconv_open("UTF-8","ISO-2022-JP"); + + fptr = code; + tptr = xcode; + iconv(cd, &fptr, &inbyte, &tptr, &outbyte); + + iconv_close(cd); + + strncpy(lpszDst, xcode, strlen(xcode)); + + return strlen(lpszDst); } const DWORD PutAlphanumericChar(TCHAR *lpszDst, const WORD wCode) { - // ±Ñ¿ô»úʸ»ú¥³¡¼¥ÉÊÑ´¹ + // 英数字全角文字コード変換 static const TCHAR *acAlphanumericTable = - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¡ª¡É¡ô¡ð¡ó¡õ¡Ç¡Ê¡Ë¡ö¡Ü¡¤¡Ý¡¥¡¿") - TEXT("£°£±£²£³£´£µ£¶£·£¸£¹¡§¡¨¡ã¡á¡ä¡©") - TEXT("¡÷£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï") - TEXT("£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú¡Î¡ï¡Ï¡°¡²") - TEXT("¡¡£á£â£ã£ä£å£æ£ç£è£é£ì£ë£ì£í£î£ï") - TEXT("£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú¡Ð¡Ã¡Ñ¡±¡¡"); + TEXT("                ") + TEXT("                ") + TEXT(" !”#$%&’()*+,-./") + TEXT("0123456789:;<=>?") + TEXT("@ABCDEFGHIJKLMNO") + TEXT("PQRSTUVWXYZ[¥]^_") + TEXT(" abcdefghijklmno") + TEXT("pqrstuvwxyz{|} ̄ "); #ifdef _UNICODE - lpszDst[0] = acAlphanumericTable[wCode]; + lpszDst[0] = acAlphanumericTableZenkaku[wCode]; return 1UL; #else - lpszDst[0] = acAlphanumericTable[wCode * 2U + 0U]; - lpszDst[1] = acAlphanumericTable[wCode * 2U + 1U]; + lpszDst[0] = acAlphanumericTable[wCode * 3U + 0U]; + lpszDst[1] = acAlphanumericTable[wCode * 3U + 1U]; + lpszDst[2] = acAlphanumericTable[wCode * 3U + 2U]; - return 2UL; + return 3UL; #endif } const DWORD PutHiraganaChar(TCHAR *lpszDst, const WORD wCode) { - // ¤Ò¤é¤¬¤Êʸ»ú¥³¡¼¥ÉÊÑ´¹ + // ひらがな文字コード変換 static const TCHAR *acHiraganaTable = - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¤¡¤¢¤£¤¤¤¥¤¦¤§¤¨¤©¤ª¤«¤¬¤­¤®¤¯") - TEXT("¤°¤±¤²¤³¤´¤µ¤¶¤·¤¸¤¹¤º¤»¤¼¤½¤¾¤¿") - TEXT("¤À¤Á¤Â¤Ã¤Ä¤Å¤Æ¤Ç¤È¤É¤Ê¤Ë¤Ì¤Í¤Î¤Ï") - TEXT("¤Ð¤Ñ¤Ò¤Ó¤Ô¤Õ¤Ö¤×¤Ø¤Ù¤Ú¤Û¤Ü¤Ý¤Þ¤ß") - TEXT("¤à¤á¤â¤ã¤ä¤å¤æ¤ç¤è¤é¤ê¤ë¤ì¤í¤î¤ï") - TEXT("¤ð¤ñ¤ò¤ó¡¡¡¡¡¡¡µ¡¶¡¼¡£¡Ö¡×¡¢¡¦¡¡"); + TEXT("                ") + TEXT("                ") + TEXT(" ぁあぃいぅうぇえぉおかがきぎく") + TEXT("ぐけげこごさざしじすずせぜそぞた") + TEXT("だちぢっつづてでとどなにぬねのは") + TEXT("ばぱひびぴふぶぷへべぺほぼぽまみ") + TEXT("むめもゃやゅゆょよらりるれろゎわ") + TEXT("ゐゑをん   ゝゞー。「」、・ "); #ifdef _UNICODE lpszDst[0] = acHiraganaTable[wCode]; return 1UL; #else - lpszDst[0] = acHiraganaTable[wCode * 2U + 0U]; - lpszDst[1] = acHiraganaTable[wCode * 2U + 1U]; + lpszDst[0] = acHiraganaTable[wCode * 3U + 0U]; + lpszDst[1] = acHiraganaTable[wCode * 3U + 1U]; + lpszDst[2] = acHiraganaTable[wCode * 3U + 2U]; - return 2UL; + return 3UL; #endif } const DWORD PutKatakanaChar(TCHAR *lpszDst, const WORD wCode) { - // ¥«¥¿¥«¥Ê±Ñ¿ô»úʸ»ú¥³¡¼¥ÉÊÑ´¹ + // カタカナ英数字文字コード変換 static const TCHAR *acKatakanaTable = - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¥¡¥¢¥£¥¤¥¥¥¦¥§¥¨¥©¥ª¥«¥¬¥­¥®¥¯") - TEXT("¥°¥±¥²¥³¥´¥µ¥¶¥·¥¸¥¹¥º¥»¥¼¥½¥¾¥¿") - TEXT("¥À¥Á¥Â¥Ã¥Ä¥Å¥Æ¥Ç¥È¥É¥Ê¥Ë¥Ì¥Í¥Î¥Ï") - TEXT("¥Ð¥Ñ¥Ò¥Ó¥Ô¥Õ¥Ö¥×¥Ø¥Ù¥Ú¥Û¥Ü¥Ý¥Þ¥ß") - TEXT("¥à¥á¥â¥ã¥ä¥å¥æ¥ç¥è¥é¥ê¥ë¥ì¥í¥î¥ï") - TEXT("¥ð¥ñ¥ò¥ó¥ô¥õ¥ö¡³¡´¡¼¡£¡Ö¡×¡¢¡¦¡¡"); + TEXT("                ") + TEXT("                ") + TEXT(" ァアィイゥウェエォオカガキギク") + TEXT("グケゲコゴサザシジスズセゼソゾタ") + TEXT("ダチヂッツヅテデトドナニヌネノハ") + TEXT("バパヒビピフブプヘベペホボポマミ") + TEXT("ムメモャヤュユョヨラリルレロヮワ") + TEXT("ヰヱヲンヴヵヶヽヾー。「」、・ "); #ifdef _UNICODE lpszDst[0] = acKatakanaTable[wCode]; return 1UL; #else - lpszDst[0] = acKatakanaTable[wCode * 2U + 0U]; - lpszDst[1] = acKatakanaTable[wCode * 2U + 1U]; + lpszDst[0] = acKatakanaTable[wCode * 3U + 0U]; + lpszDst[1] = acKatakanaTable[wCode * 3U + 1U]; + lpszDst[2] = acKatakanaTable[wCode * 3U + 2U]; - return 2UL; + return 3UL; #endif } const DWORD PutJisKatakanaChar(TCHAR *lpszDst, const WORD wCode) { - // JIS¥«¥¿¥«¥Êʸ»ú¥³¡¼¥ÉÊÑ´¹ + // JISカタカナ文字コード変換 static const TCHAR *acJisKatakanaTable = - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¡£¡Ö¡×¡¢¡¦¥ò¥¡¥£¥¥¥§¥©¥ã¥å¥ç¥Ã") - TEXT("¡¼¥¢¥¤¥¦¥¨¥ª¥«¥­¥¯¥±¥³¥µ¥·¥¹¥»¥½") - TEXT("¥¿¥Á¥Ä¥Æ¥È¥Ê¥Ë¥Ì¥Í¥Î¥Ï¥Ò¥Õ¥Ø¥Û¥Þ") - TEXT("¥ß¥à¥á¥â¥ä¥æ¥è¥é¥ê¥ë¥ì¥í¥ï¥ó¡«¡¬") - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡") - TEXT("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡"); + TEXT("                ") + TEXT("                ") + TEXT(" 。「」、・ヲァィゥェォャュョッ") + TEXT("ーアイウエオカキクケコサシスセソ") + TEXT("タチツテトナニヌネノハヒフヘホマ") + TEXT("ミムメモヤユヨラリルレロワン゛゜") + TEXT("                ") + TEXT("                "); #ifdef _UNICODE lpszDst[0] = acJisKatakanaTable[wCode]; return 1UL; #else - lpszDst[0] = acJisKatakanaTable[wCode * 2U + 0U]; - lpszDst[1] = acJisKatakanaTable[wCode * 2U + 1U]; + lpszDst[0] = acJisKatakanaTable[wCode * 3U + 0U]; + lpszDst[1] = acJisKatakanaTable[wCode * 3U + 1U]; + lpszDst[2] = acJisKatakanaTable[wCode * 3U + 2U]; - return 2UL; + return 3UL; #endif } const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode) { - // Äɲå·¥ó¥Ü¥ëʸ»ú¥³¡¼¥ÉÊÑ´¹(¤È¤ê¤¢¤¨¤ºÉ¬Íפ½¤¦¤Ê¤â¤Î¤À¤±) + // 追加シンボル文字コード変換(とりあえず必要そうなものだけ) static const TCHAR *aszSymbolsTable1[] = { - _T("[HV]"), _T("[SD]"), _T("[£Ð]"), _T("[£×]"), _T("[MV]"), _T("[¼ê]"), _T("[»ú]"), _T("[ÁÐ]"), // 0x7A50 - 0x7A57 90/48 - 90/55 - _T("[¥Ç]"), _T("[£Ó]"), _T("[Æó]"), _T("[¿]"), _T("[²ò]"), _T("[SS]"), _T("[£Â]"), _T("[£Î]"), // 0x7A58 - 0x7A5F 90/56 - 90/63 - _T("¢£"), _T("¡ü"), _T("[Å·]"), _T("[¸ò]"), _T("[±Ç]"), _T("[̵]"), _T("[ÎÁ]"), _T("[ǯÎðÀ©¸Â]"), // 0x7A60 - 0x7A67 90/64 - 90/71 - _T("[Á°]"), _T("[¸å]"), _T("[ºÆ]"), _T("[¿·]"), _T("[½é]"), _T("[½ª]"), _T("[À¸]"), _T("[ÈÎ]"), // 0x7A68 - 0x7A6F 90/72 - 90/79 - _T("[À¼]"), _T("[¿á]"), _T("[PPV]"), _T("(Èë)"), _T("¤Û¤«") // 0x7A70 - 0x7A74 90/80 - 90/84 + _T("[HV]"), _T("[SD]"), _T("[ï¼°]"), _T("[ï¼·]"), _T("[MV]"), _T("[手]"), _T("[字]"), _T("[双]"), // 0x7A50 - 0x7A57 90/48 - 90/55 + _T("[デ]"), _T("[ï¼³]"), _T("[二]"), _T("[多]"), _T("[解]"), _T("[SS]"), _T("[ï¼¢]"), _T("[ï¼®]"), // 0x7A58 - 0x7A5F 90/56 - 90/63 + _T("■"), _T("●"), _T("[天]"), _T("[交]"), _T("[映]"), _T("[無]"), _T("[料]"), _T("[年齢制限]"), // 0x7A60 - 0x7A67 90/64 - 90/71 + _T("[前]"), _T("[後]"), _T("[再]"), _T("[新]"), _T("[初]"), _T("[終]"), _T("[生]"), _T("[販]"), // 0x7A68 - 0x7A6F 90/72 - 90/79 + _T("[声]"), _T("[吹]"), _T("[PPV]"), _T("(秘)"), _T("ほか") // 0x7A70 - 0x7A74 90/80 - 90/84 }; static const TCHAR *aszSymbolsTable2[] = { - _T("¢ª"), _T("¢«"), _T("¢¬"), _T("¢­"), _T("¡ü"), _T("¡û"), _T("ǯ"), _T("·î"), // 0x7C21 - 0x7C28 92/01 - 92/08 - _T("Æü"), _T("±ß"), _T("­Ö"), _T("ΩÊý£í"), _T("­Ñ"), _T("Ê¿Êý­Ñ"), _T("ΩÊý­Ñ"), _T("£°."), // 0x7C29 - 0x7C30 92/09 - 92/16 - _T("£±."), _T("£²."), _T("£³."), _T("£´."), _T("£µ."), _T("£¶."), _T("£·."), _T("£¸."), // 0x7C31 - 0x7C38 92/17 - 92/24 - _T("£¹."), _T("»á"), _T("Éû"), _T("¸µ"), _T("¸Î"), _T("Á°"), _T("¿·"), _T("£°,"), // 0x7C39 - 0x7C40 92/25 - 92/32 - _T("£±,"), _T("£²,"), _T("£³,"), _T("£´,"), _T("£µ,"), _T("£¶,"), _T("£·,"), _T("£¸,"), // 0x7C41 - 0x7C48 92/33 - 92/40 - _T("£¹,"), _T("(¼Ò)"), _T("(ºâ)"), _T("(Í­)"), _T("(³ô)"), _T("(Âå)"), _T("(Ìä)"), _T("¡ä"), // 0x7C49 - 0x7C50 92/41 - 92/48 - _T("¡ã"), _T("¡Ú"), _T("¡Û"), _T("¡þ"), _T("^2"), _T("^3"), _T("(CD)"), _T("(vn)"), // 0x7C51 - 0x7C58 92/49 - 92/56 + _T("→"), _T("←"), _T("↑"), _T("↓"), _T("●"), _T("○"), _T("å¹´"), _T("月"), // 0x7C21 - 0x7C28 92/01 - 92/08 + _T("日"), _T("円"), _T("㎡"), _T("㎥"), _T("㎝"), _T("㎠"), _T("㎤"), _T("0."), // 0x7C29 - 0x7C30 92/09 - 92/16 + _T("1."), _T("2."), _T("3."), _T("4."), _T("5."), _T("6."), _T("7."), _T("8."), // 0x7C31 - 0x7C38 92/17 - 92/24 + _T("9."), _T("氏"), _T("副"), _T("元"), _T("故"), _T("前"), _T("新"), _T("0,"), // 0x7C39 - 0x7C40 92/25 - 92/32 + _T("1,"), _T("2,"), _T("3,"), _T("4,"), _T("5,"), _T("6,"), _T("7,"), _T("8,"), // 0x7C41 - 0x7C48 92/33 - 92/40 + _T("9,"), _T("(社)"), _T("(財)"), _T("(有)"), _T("(æ ª)"), _T("(代)"), _T("(問)"), _T("▶"), // 0x7C49 - 0x7C50 92/41 - 92/48 + _T("◀"), _T("〖"), _T("〗"), _T("⟐"), _T("^2"), _T("^3"), _T("(CD)"), _T("(vn)"), // 0x7C51 - 0x7C58 92/49 - 92/56 _T("(ob)"), _T("(cb)"), _T("(ce"), _T("mb)"), _T("(hp)"), _T("(br)"), _T("(p)"), _T("(s)"), // 0x7C59 - 0x7C60 92/57 - 92/64 _T("(ms)"), _T("(t)"), _T("(bs)"), _T("(b)"), _T("(tb)"), _T("(tp)"), _T("(ds)"), _T("(ag)"), // 0x7C61 - 0x7C68 92/65 - 92/72 _T("(eg)"), _T("(vo)"), _T("(fl)"), _T("(ke"), _T("y)"), _T("(sa"), _T("x)"), _T("(sy"), // 0x7C69 - 0x7C70 92/73 - 92/80 - _T("n)"), _T("(or"), _T("g)"), _T("(pe"), _T("r)"), _T("(R)"), _T("(C)"), _T("(ä·)"), // 0x7C71 - 0x7C78 92/81 - 92/88 - _T("DJ"), _T("[±é]"), _T("Fax") // 0x7C79 - 0x7C7B 92/89 - 92/91 + _T("n)"), _T("(or"), _T("g)"), _T("(pe"), _T("r)"), _T("(R)"), _T("(C)"), _T("(箏)"), // 0x7C71 - 0x7C78 92/81 - 92/88 + _T("DJ"), _T("[演]"), _T("Fax") // 0x7C79 - 0x7C7B 92/89 - 92/91 }; static const TCHAR *aszSymbolsTable3[] = { - _T("(·î)"), _T("(²Ð)"), _T("(¿å)"), _T("(ÌÚ)"), _T("(¶â)"), _T("(ÅÚ)"), _T("(Æü)"), _T("(½Ë)"), // 0x7D21 - 0x7D28 93/01 - 93/08 - _T("­í"), _T("­î"), _T("­ï"), _T("­ß"), _T("­â"), _T("­ä"), _T("(¢©)"), _T("¡û"), // 0x7D29 - 0x7D30 93/09 - 93/16 - _T("¡ÌËÜ¡Í"), _T("¡Ì»°¡Í"), _T("¡ÌÆó¡Í"), _T("¡Ì°Â¡Í"), _T("¡ÌÅÀ¡Í"), _T("¡ÌÂÇ¡Í"), _T("¡ÌÅð¡Í"), _T("¡Ì¾¡¡Í"), // 0x7D31 - 0x7D38 93/17 - 93/24 - _T("¡ÌÇÔ¡Í"), _T("¡Ì£Ó¡Í"), _T("¡ÎÅê¡Ï"), _T("¡ÎÊá¡Ï"), _T("¡Î°ì¡Ï"), _T("¡ÎÆó¡Ï"), _T("¡Î»°¡Ï"), _T("¡ÎÍ·¡Ï"), // 0x7D39 - 0x7D40 93/25 - 93/32 - _T("¡Îº¸¡Ï"), _T("¡ÎÃæ¡Ï"), _T("¡Î±¦¡Ï"), _T("¡Î»Ø¡Ï"), _T("¡ÎÁö¡Ï"), _T("¡ÎÂÇ¡Ï"), _T("­È"), _T("­Ô"), // 0x7D41 - 0x7D48 93/33 - 93/40 - _T("Hz"), _T("ha"), _T("km"), _T("Ê¿Êýkm"), _T("hPa"), _T("¡¦"), _T("¡¦"), _T("1/2"), // 0x7D49 - 0x7D50 93/41 - 93/48 + _T("㈪"), _T("㈫"), _T("㈬"), _T("㈭"), _T("㈮"), _T("㈯"), _T("㈰"), _T("㈷"), // 0x7D21 - 0x7D28 93/01 - 93/08 + _T("㍾"), _T("㍽"), _T("㍼"), _T("㍻"), _T("№"), _T("℡"), _T("〶"), _T("○"), // 0x7D29 - 0x7D30 93/09 - 93/16 + _T("〔本〕"), _T("〔三〕"), _T("〔二〕"), _T("〔安〕"), _T("〔点〕"), _T("〔打〕"), _T("〔盗〕"), _T("〔勝〕"), // 0x7D31 - 0x7D38 93/17 - 93/24 + _T("〔敗〕"), _T("〔S〕"), _T("[投]"), _T("[捕]"), _T("[一]"), _T("[二]"), _T("[三]"), _T("[遊]"), // 0x7D39 - 0x7D40 93/25 - 93/32 + _T("[左]"), _T("[中]"), _T("[右]"), _T("[指]"), _T("[走]"), _T("[打]"), _T("㍑"), _T("㎏"), // 0x7D41 - 0x7D48 93/33 - 93/40 + _T("㎐"), _T("ha"), _T("㎞"), _T("㎢"), _T("㍱"), _T("・"), _T("・"), _T("1/2"), // 0x7D49 - 0x7D50 93/41 - 93/48 _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 - _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 - _T("ÆÞ¤ê"), _T("±«"), _T("Àã"), _T("¢¤"), _T("¢¥"), _T("¢¦"), _T("¢§"), _T("¢¡"), // 0x7D61 - 0x7D68 93/65 - 93/72 - _T("¡¦"), _T("¡¦"), _T("¡¦"), _T("¡þ"), _T("¡ý"), _T("!!"), _T("!?"), _T("ÆÞ/À²"), // 0x7D69 - 0x7D70 93/73 - 93/80 - _T("±«"), _T("±«"), _T("Àã"), _T("ÂçÀã"), _T("Íë"), _T("Í뱫"), _T("¡¡"), _T("¡¦"), // 0x7D71 - 0x7D78 93/81 - 93/88 - _T("¡¦"), _T("¢ö"), _T("­ä") // 0x7D79 - 0x7D7B 93/89 - 93/91 + _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 + _T("☁"), _T("☂"), _T("☃"), _T("☖"), _T("☗"), _T("▽"), _T("▼"), _T("♦"), // 0x7D61 - 0x7D68 93/65 - 93/72 + _T("♥"), _T("♣"), _T("♠"), _T("⌺"), _T("⦿"), _T("‼"), _T("⁉"), _T("(曇/晴)"), // 0x7D69 - 0x7D70 93/73 - 93/80 + _T("☔"), _T("(雨)"), _T("(雪)"), _T("(大雪)"), _T("⚡"), _T("(雷雨)"), _T(" "), _T("・"), // 0x7D71 - 0x7D78 93/81 - 93/88 + _T("・"), _T("♬"), _T("☎") // 0x7D79 - 0x7D7B 93/89 - 93/91 }; static const TCHAR *aszSymbolsTable4[] = { - _T("­µ"), _T("­¶"), _T("­·"), _T("­¸"), _T("­¹"), _T("­º"), _T("­»"), _T("­¼"), // 0x7E21 - 0x7E28 94/01 - 94/08 - _T("­½"), _T("­¾"), _T("XI"), _T("X­¶"), _T("­±"), _T("­²"), _T("­³"), _T("­´"), // 0x7E29 - 0x7E30 94/09 - 94/16 - _T("(1)"), _T("(2)"), _T("(3)"), _T("(4)"), _T("(5)"), _T("(6)"), _T("(7)"), _T("(8)"), // 0x7E31 - 0x7E38 94/17 - 94/24 - _T("(9)"), _T("(10)"), _T("(11)"), _T("(12)"), _T("(21)"), _T("(22)"), _T("(23)"), _T("(24)"), // 0x7E39 - 0x7E40 94/25 - 94/32 + _T("Ⅰ"), _T("Ⅱ"), _T("Ⅲ"), _T("Ⅳ"), _T("Ⅴ"), _T("Ⅵ"), _T("Ⅶ"), _T("Ⅷ"), // 0x7E21 - 0x7E28 94/01 - 94/08 + _T("Ⅸ"), _T("Ⅹ"), _T("Ⅺ"), _T("Ⅻ"), _T("⑰"), _T("⑱"), _T("⑲"), _T("⑳"), // 0x7E29 - 0x7E30 94/09 - 94/16 + _T("⑴"), _T("⑵"), _T("⑶"), _T("⑷"), _T("⑸"), _T("⑹"), _T("⑺"), _T("⑻"), // 0x7E31 - 0x7E38 94/17 - 94/24 + _T("⑼"), _T("⑽"), _T("⑾"), _T("⑿"), _T("㉑"), _T("㉒"), _T("㉓"), _T("㉔"), // 0x7E39 - 0x7E40 94/25 - 94/32 _T("(A)"), _T("(B)"), _T("(C)"), _T("(D)"), _T("(E)"), _T("(F)"), _T("(G)"), _T("(H)"), // 0x7E41 - 0x7E48 94/33 - 94/40 _T("(I)"), _T("(J)"), _T("(K)"), _T("(L)"), _T("(M)"), _T("(N)"), _T("(O)"), _T("(P)"), // 0x7E49 - 0x7E50 94/41 - 94/48 _T("(Q)"), _T("(R)"), _T("(S)"), _T("(T)"), _T("(U)"), _T("(V)"), _T("(W)"), _T("(X)"), // 0x7E51 - 0x7E58 94/49 - 94/56 - _T("(Y)"), _T("(Z)"), _T("(25)"), _T("(26)"), _T("(27)"), _T("(28)"), _T("(29)"), _T("(30)"), // 0x7E59 - 0x7E60 94/57 - 94/64 - _T("­¡"), _T("­¢"), _T("­£"), _T("­¤"), _T("­¥"), _T("­¦"), _T("­§"), _T("­¨"), // 0x7E61 - 0x7E68 94/65 - 94/72 - _T("­©"), _T("­ª"), _T("­«"), _T("­¬"), _T("­­"), _T("­®"), _T("­¯"), _T("­°"), // 0x7E69 - 0x7E70 94/73 - 94/80 - _T("­¡"), _T("­¢"), _T("­£"), _T("­¤"), _T("­¥"), _T("­¦"), _T("­§"), _T("­¨"), // 0x7E71 - 0x7E78 94/81 - 94/88 - _T("­©"), _T("­ª"), _T("­«"), _T("­¬"), _T("(31)") // 0x7E79 - 0x7E7D 94/89 - 94/93 + _T("(Y)"), _T("(Z)"), _T("㉕"), _T("㉖"), _T("㉗"), _T("㉘"), _T("㉙"), _T("㉚"), // 0x7E59 - 0x7E60 94/57 - 94/64 + _T("①"), _T("②"), _T("③"), _T("④"), _T("⑤"), _T("⑥"), _T("⑦"), _T("⑧"), // 0x7E61 - 0x7E68 94/65 - 94/72 + _T("⑨"), _T("⑩"), _T("⑪"), _T("⑫"), _T("⑬"), _T("⑭"), _T("⑮"), _T("⑯"), // 0x7E69 - 0x7E70 94/73 - 94/80 + _T("❶"), _T("❷"), _T("❸"), _T("❹"), _T("❺"), _T("❻"), _T("❼"), _T("❽"), // 0x7E71 - 0x7E78 94/81 - 94/88 + _T("❾"), _T("❿"), _T("⓫"), _T("⓬"), _T("㉛") // 0x7E79 - 0x7E7D 94/89 - 94/93 }; - // ¥·¥ó¥Ü¥ë¤òÊÑ´¹¤¹¤ë + static const TCHAR *aszSymbolsTable5[] = + { + _T("㐂"), _T("亭"), _T("份"), _T("仿"), _T("侚"), _T("俉"), _T("傜"), _T("儞"), // 0x7521 - 0x7528 85/01 - 85/08 + _T("冼"), _T("㔟"), _T("匇"), _T("卡"), _T("卬"), _T("詹"), _T("吉"), _T("呍"), // 0x7529 - 0x7530 85/09 - 85/16 + _T("咖"), _T("咜"), _T("咩"), _T("唎"), _T("啊"), _T("噲"), _T("囤"), _T("圳"), // 0x7531 - 0x7538 85/17 - 85/24 + _T("圴"), _T("塚"), _T("墀"), _T("姤"), _T("娣"), _T("婕"), _T("寬"), _T("﨑"), // 0x7539 - 0x7540 85/25 - 85/32 + _T("㟢"), _T("庬"), _T("å¼´"), _T("彅"), _T("å¾·"), _T("怗"), _T("恵"), _T("愰"), // 0x7541 - 0x7548 85/33 - 85/40 + _T("昤"), _T("曈"), _T("曙"), _T("曺"), _T("曻"), _T("桒"), _T("・"), _T("椑"), // 0x7549 - 0x7550 85/41 - 85/48 + _T("椻"), _T("橅"), _T("檑"), _T("櫛"), _T("・"), _T("・"), _T("・"), _T("毱"), // 0x7551 - 0x7558 85/49 - 85/56 + _T("æ³ "), _T("æ´®"), _T("海"), _T("涿"), _T("淊"), _T("æ·¸"), _T("渚"), _T("潞"), // 0x7559 - 0x7560 85/57 - 85/64 + _T("濹"), _T("灤"), _T("・"), _T("・"), _T("煇"), _T("燁"), _T("爀"), _T("玟"), // 0x7561 - 0x7568 85/65 - 85/72 + _T("・"), _T("珉"), _T("珖"), _T("琛"), _T("琡"), _T("琢"), _T("琦"), _T("琪"), // 0x7569 - 0x7570 85/73 - 85/80 + _T("琬"), _T("琹"), _T("瑋"), _T("㻚"), _T("畵"), _T("疁"), _T("睲"), _T("䂓"), // 0x7571 - 0x7578 85/81 - 85/88 + _T("磈"), _T("磠"), _T("祇"), _T("禮"), _T("・"), _T("・") // 0x7579 - 0x757E 85/89 - 85/94 + }; + + static const TCHAR *aszSymbolsTable6[] = + { + _T("・"), _T("秚"), _T("稞"), _T("ç­¿"), _T("ç°±"), _T("䉤"), _T("綋"), _T("羡"), // 0x7621 - 0x7628 86/01 - 86/08 + _T("脘"), _T("脺"), _T("・"), _T("芮"), _T("葛"), _T("蓜"), _T("蓬"), _T("蕙"), // 0x7629 - 0x7630 86/09 - 86/16 + _T("藎"), _T("蝕"), _T("蟬"), _T("蠋"), _T("裵"), _T("角"), _T("諶"), _T("跎"), // 0x7631 - 0x7638 86/17 - 86/24 + _T("è¾»"), _T("迶"), _T("郝"), _T("鄧"), _T("鄭"), _T("醲"), _T("鈳"), _T("銈"), // 0x7639 - 0x7640 86/25 - 86/32 + _T("錡"), _T("鍈"), _T("閒"), _T("雞"), _T("餃"), _T("饀"), _T("髙"), _T("鯖"), // 0x7641 - 0x7648 86/33 - 86/40 + _T("鷗"), _T("麴"), _T("麵") // 0x7649 - 0x764B 86/41 - 86/43 + }; + + // シンボルを変換する if((wCode >= 0x7A50U) && (wCode <= 0x7A74U)){ strcpy(lpszDst, aszSymbolsTable1[wCode - 0x7A50U]); } @@ -413,8 +529,14 @@ const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode) else if((wCode >= 0x7E21U) && (wCode <= 0x7E7DU)){ strcpy(lpszDst, aszSymbolsTable4[wCode - 0x7E21U]); } + else if((wCode >= 0x7521U) && (wCode <= 0x757EU)){ + strcpy(lpszDst, aszSymbolsTable5[wCode - 0x7521U]); + } + else if((wCode >= 0x7621U) && (wCode <= 0x764BU)){ + strcpy(lpszDst, aszSymbolsTable6[wCode - 0x7621U]); + } else{ - strcpy(lpszDst, TEXT("¡¦")); + strcpy(lpszDst, TEXT("・")); } return strlen(lpszDst); @@ -422,9 +544,9 @@ const DWORD PutSymbolsChar(TCHAR *lpszDst, const WORD wCode) void ProcessEscapeSeq(const BYTE byCode) { - // ¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹½èÍý + // エスケープシーケンス処理 switch(m_byEscSeqCount){ - // 1¥Ð¥¤¥ÈÌÜ + // 1バイト目 case 1U : switch(byCode){ // Invocation of code elements @@ -440,11 +562,11 @@ void ProcessEscapeSeq(const BYTE byCode) case 0x29U : m_byEscSeqIndex = 1U; break; case 0x2AU : m_byEscSeqIndex = 2U; break; case 0x2BU : m_byEscSeqIndex = 3U; break; - default : m_byEscSeqCount = 0U; return; // ¥¨¥é¡¼ + default : m_byEscSeqCount = 0U; return; // エラー } break; - // 2¥Ð¥¤¥ÈÌÜ + // 2バイト目 case 2U : if(DesignationGSET(m_byEscSeqIndex, byCode)){ m_byEscSeqCount = 0U; @@ -457,11 +579,11 @@ void ProcessEscapeSeq(const BYTE byCode) case 0x29 : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 1U; break; case 0x2A : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 2U; break; case 0x2B : m_bIsEscSeqDrcs = false; m_byEscSeqIndex = 3U; break; - default : m_byEscSeqCount = 0U; return; // ¥¨¥é¡¼ + default : m_byEscSeqCount = 0U; return; // エラー } break; - // 3¥Ð¥¤¥ÈÌÜ + // 3バイト目 case 3U : if(!m_bIsEscSeqDrcs){ if(DesignationGSET(m_byEscSeqIndex, byCode)){ @@ -480,13 +602,13 @@ void ProcessEscapeSeq(const BYTE byCode) m_bIsEscSeqDrcs = true; } else{ - // ¥¨¥é¡¼ + // エラー m_byEscSeqCount = 0U; return; } break; - // 4¥Ð¥¤¥ÈÌÜ + // 4バイト目 case 4U : DesignationDRCS(m_byEscSeqIndex, byCode); m_byEscSeqCount = 0U; @@ -516,7 +638,7 @@ void SingleShiftGL(const BYTE byIndexG) const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode) { - // G¤Î¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È¤ò³ä¤êÅö¤Æ¤ë + // Gのグラフィックセットを割り当てる switch(byCode){ case 0x42U : m_CodeG[byIndexG] = CODE_KANJI; return true; // Kanji case 0x4AU : m_CodeG[byIndexG] = CODE_ALPHANUMERIC; return true; // Alphanumeric @@ -533,13 +655,13 @@ const bool DesignationGSET(const BYTE byIndexG, const BYTE byCode) case 0x39U : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_1; return true; // JIS compatible Kanji Plane 1 case 0x3AU : m_CodeG[byIndexG] = CODE_JIS_KANJI_PLANE_2; return true; // JIS compatible Kanji Plane 2 case 0x3BU : m_CodeG[byIndexG] = CODE_ADDITIONAL_SYMBOLS; return true; // Additional symbols - default : return false; // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È + default : return false; // 不明なグラフィックセット } } const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode) { - // DRCS¤Î¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È¤ò³ä¤êÅö¤Æ¤ë + // DRCSのグラフィックセットを割り当てる switch(byCode){ case 0x40U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-0 case 0x41U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-1 @@ -558,42 +680,6 @@ const bool DesignationDRCS(const BYTE byIndexG, const BYTE byCode) case 0x4EU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-14 case 0x4FU : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // DRCS-15 case 0x70U : m_CodeG[byIndexG] = CODE_UNKNOWN; return true; // Macro - default : return false; // ÉÔÌÀ¤Ê¥°¥é¥Õ¥£¥Ã¥¯¥»¥Ã¥È - } + default : return false; // 不明なグラフィックセット } - -WORD convertjis(DWORD jiscode) { - char code[3]; - char xcode[4]; - iconv_t cd; - - size_t inbyte = 2; - size_t outbyte = 4; - - const char *fptr; - char *tptr; - - WORD rtn; - - code[0] = jiscode >> 8; - code[1] = jiscode & 0xFF; - code[3] = '\0'; - - /* - cd = iconv_open("ISO-2022-JP","UTF-8"); - - fptr = code; - tptr = xcode; - iconv(cd, &fptr, &inbyte, &tptr, &outbyte); - - iconv_close(cd); - */ - - xcode[0] = code[0] | 0x80; - xcode[1] = code[1] | 0x80; - - rtn = ((xcode[0] << 8) & 0xFF00) | (xcode[1] & 0xFF); - - return rtn; - }