BOOL CARIB8CharDecode::GR( const BYTE* pbSrc, DWORD* pdwReadSize ) { if( pbSrc == NULL || pdwReadSize == NULL ){ return FALSE; } DWORD dwReadSize = 0; if( m_GR->iMode == MF_MODE_G ){ //文字コード switch( m_GR->iMF ){ case MF_ASCII: case MF_PROP_ASCII: { if( IsSmallCharMode() == FALSE ){ //全角なのでテーブルからSJISコード取得 m_strDecode += AsciiTable[(pbSrc[0]&0x7F)-0x21]; }else{ //半角なのでそのまま入れる m_strDecode += pbSrc[0]&0x7F; } dwReadSize = 1; } break; case MF_HIRA: case MF_PROP_HIRA: { //半角ひらがな //テーブルからSJISコード取得 m_strDecode += HiraTable[(pbSrc[0]&0x7F)-0x21]; dwReadSize = 1; } break; case MF_JISX_KANA: //JIX X0201の0x80以降は半角カナ case MF_KANA: case MF_PROP_KANA: { //半角カタカナ //テーブルからSJISコード取得 m_strDecode += KanaTable[(pbSrc[0]&0x7F)-0x21]; dwReadSize = 1; } break; case MF_MACRO: { DWORD dwTemp=0; //マクロ //PSI/SIでは未サポート switch(pbSrc[0]){ case 0x60: Analyze(DefaultMacro0, sizeof(DefaultMacro0),&dwTemp); break; case 0x61: Analyze(DefaultMacro1, sizeof(DefaultMacro1),&dwTemp); break; case 0x62: Analyze(DefaultMacro2, sizeof(DefaultMacro2),&dwTemp); break; case 0x63: Analyze(DefaultMacro3, sizeof(DefaultMacro3),&dwTemp); break; case 0x64: Analyze(DefaultMacro4, sizeof(DefaultMacro4),&dwTemp); break; case 0x65: Analyze(DefaultMacro5, sizeof(DefaultMacro5),&dwTemp); break; case 0x66: Analyze(DefaultMacro6, sizeof(DefaultMacro6),&dwTemp); break; case 0x67: Analyze(DefaultMacro7, sizeof(DefaultMacro7),&dwTemp); break; case 0x68: Analyze(DefaultMacro8, sizeof(DefaultMacro8),&dwTemp); break; case 0x69: Analyze(DefaultMacro9, sizeof(DefaultMacro9),&dwTemp); break; case 0x6A: Analyze(DefaultMacroA, sizeof(DefaultMacroA),&dwTemp); break; case 0x6B: Analyze(DefaultMacroB, sizeof(DefaultMacroB),&dwTemp); break; case 0x6C: Analyze(DefaultMacroC, sizeof(DefaultMacroC),&dwTemp); break; case 0x6D: Analyze(DefaultMacroD, sizeof(DefaultMacroD),&dwTemp); break; case 0x6E: Analyze(DefaultMacroE, sizeof(DefaultMacroE),&dwTemp); break; case 0x6F: Analyze(DefaultMacroF, sizeof(DefaultMacroF),&dwTemp); break; default: break; } dwReadSize = 1; } break; case MF_KANJI: case MF_JIS_KANJI1: case MF_JIS_KANJI2: case MF_KIGOU: { //漢字 if( ToSJIS( (pbSrc[0]&0x7F), (pbSrc[1]&0x7F) ) == FALSE ){ ToCustomFont( (pbSrc[0]&0x7F), (pbSrc[1]&0x7F) ); } dwReadSize = 2; } break; default: dwReadSize = m_GR->iByte; break; } }else{ if( m_GR->iMF == MF_MACRO ){ DWORD dwTemp=0; //マクロ //PSI/SIでは未サポート switch(pbSrc[0]){ case 0x60: Analyze(DefaultMacro0, sizeof(DefaultMacro0),&dwTemp); break; case 0x61: Analyze(DefaultMacro1, sizeof(DefaultMacro1),&dwTemp); break; case 0x62: Analyze(DefaultMacro2, sizeof(DefaultMacro2),&dwTemp); break; case 0x63: Analyze(DefaultMacro3, sizeof(DefaultMacro3),&dwTemp); break; case 0x64: Analyze(DefaultMacro4, sizeof(DefaultMacro4),&dwTemp); break; case 0x65: Analyze(DefaultMacro5, sizeof(DefaultMacro5),&dwTemp); break; case 0x66: Analyze(DefaultMacro6, sizeof(DefaultMacro6),&dwTemp); break; case 0x67: Analyze(DefaultMacro7, sizeof(DefaultMacro7),&dwTemp); break; case 0x68: Analyze(DefaultMacro8, sizeof(DefaultMacro8),&dwTemp); break; case 0x69: Analyze(DefaultMacro9, sizeof(DefaultMacro9),&dwTemp); break; case 0x6A: Analyze(DefaultMacroA, sizeof(DefaultMacroA),&dwTemp); break; case 0x6B: Analyze(DefaultMacroB, sizeof(DefaultMacroB),&dwTemp); break; case 0x6C: Analyze(DefaultMacroC, sizeof(DefaultMacroC),&dwTemp); break; case 0x6D: Analyze(DefaultMacroD, sizeof(DefaultMacroD),&dwTemp); break; case 0x6E: Analyze(DefaultMacroE, sizeof(DefaultMacroE),&dwTemp); break; case 0x6F: Analyze(DefaultMacroF, sizeof(DefaultMacroF),&dwTemp); break; default: break; } dwReadSize = 1; }else{ dwReadSize = m_GR->iByte; } } *pdwReadSize = dwReadSize; return TRUE; }
BOOL CARIB8CharDecode::GL_GR( const BYTE* pbSrc, DWORD dwSrcSize, DWORD* pdwReadSize, const MF_MODE* mode ) { if( dwSrcSize == 0 || (pbSrc[0]&0x7F) <= 0x20 || 0x7F <= (pbSrc[0]&0x7F) ){ return FALSE; } if( mode->iMode == MF_MODE_G ){ //文字コード m_bSpacing = TRUE; switch( mode->iMF ){ case MF_JISX_KANA: { //JIS X0201片仮名 m_strDecode += JisXKanaTable[(pbSrc[0]&0x7F)-0x21]; ActivePositionForward(1); } break; case MF_ASCII: case MF_PROP_ASCII: { //全角なのでテーブルからコード取得 m_strDecode += AsciiTable[(pbSrc[0]&0x7F)-0x21]; ActivePositionForward(1); } break; case MF_HIRA: case MF_PROP_HIRA: { //Gセットのひらがな系集合 m_strDecode += HiraTable[(pbSrc[0]&0x7F)-0x21]; ActivePositionForward(1); } break; case MF_KANA: case MF_PROP_KANA: { //Gセットのカタカナ系集合 m_strDecode += KanaTable[(pbSrc[0]&0x7F)-0x21]; ActivePositionForward(1); } break; case MF_MACRO: { ASSERT(FALSE); goto IGNORE_EXIT; } case MF_KANJI: case MF_JIS_KANJI1: case MF_JIS_KANJI2: case MF_KIGOU: { //漢字 if( dwSrcSize < 2 ){ return FALSE; } unsigned char ucFirst = pbSrc[0]&0x7F; unsigned char ucSecond = pbSrc[1]&0x7F; if( ToSJIS(&ucFirst, &ucSecond) == FALSE ){ AddGaijiToString(pbSrc[0]&0x7F, pbSrc[1]&0x7F); }else{ AddSJISToString(ucFirst, ucSecond); } } break; default: //モザイク等 goto IGNORE_EXIT; } }else if( mode->iMode == MF_MODE_DRCS ){ if( MF_DRCS_0 <= mode->iMF && mode->iMF <= MF_DRCS_15 ){ //DRCS WORD cc; if( mode->iMF == MF_DRCS_0 ){ if( dwSrcSize < 2 ){ return FALSE; } cc = (pbSrc[0]&0x7F)<<8 | (pbSrc[1]&0x7F); }else{ //1バイトDRCSは0x01xxから0x0Fxxに符号シフト cc = (BYTE)(mode->iMF-MF_DRCS_0)<<8 | (pbSrc[0]&0x7F); } m_strDecode += m_pDRCMap->MapUCS(cc); ActivePositionForward(1); m_bSpacing = TRUE; }else if( mode->iMF == MF_MACRO ){ DWORD dwTemp=0; //マクロ if( 0x60 <= (pbSrc[0]&0x7F) && (pbSrc[0]&0x7F) <= 0x6F ){ if( Analyze(DefaultMacro[pbSrc[0]&0x0F], sizeof(DefaultMacro[0]), &dwTemp) == FALSE ){ return FALSE; } m_bSpacing = FALSE; }else{ ASSERT(FALSE); goto IGNORE_EXIT; } }else{ ASSERT(FALSE); goto IGNORE_EXIT; } }else{ ASSERT(FALSE); goto IGNORE_EXIT; } *pdwReadSize = mode->iByte; return TRUE; IGNORE_EXIT: if( (int)dwSrcSize < mode->iByte ) return FALSE; m_bSpacing = FALSE; *pdwReadSize = mode->iByte; return TRUE; }