Ejemplo n.º 1
0
const DWORD ProcessCharCode(TCHAR *lpszDst, const WORD wCode, const CODE_SET CodeSet)
{
	switch(CodeSet){
	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カタカナコード出力
		return PutJisKatakanaChar(lpszDst, wCode);

	case CODE_ADDITIONAL_SYMBOLS :
		// 追加シンボルコード出力
		return PutSymbolsChar(lpszDst, wCode);

	default :
		return 0UL;
	}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
BOOL CARIB8CharDecode::C0( const BYTE* pbSrc, DWORD* pdwReadSize )
{
	if( pbSrc == NULL || pdwReadSize == NULL ){
		return FALSE;
	}

	DWORD dwReadSize = 0;
	DWORD dwReadBuff = 0;

	BOOL bRet = TRUE;

	switch(pbSrc[0]){
	case 0x20:
		//SP 空白
		//空白は文字サイズの影響あり
		if( IsSmallCharMode() == FALSE ){
			m_strDecode += " ";
		}else{
			m_strDecode += ' ';
		}
		dwReadSize = 1;
		break;
	case 0x0D:
		//APR 改行
		m_strDecode += "\r\n";
		dwReadSize = 1;
		break;
	case 0x0E:
		//LS1 GLにG1セット
		m_GL = &m_G1;
		dwReadSize = 1;
		break;
	case 0x0F:
		//LS0 GLにG0セット
		m_GL = &m_G0;
		dwReadSize = 1;
		break;
	case 0x19:
		//SS2 シングルシフト
		if( SS2( pbSrc+1, &dwReadBuff ) == FALSE ){
			return FALSE;
		}
		dwReadSize = 1+dwReadBuff;
		break;
	case 0x1D:
		//SS3 シングルシフト
		if( SS3( pbSrc+1, &dwReadBuff ) == FALSE ){
			return FALSE;
		}
		dwReadSize = 1+dwReadBuff;
		break;
	case 0x1B:
		//ESC エスケープシーケンス
		if( ESC( pbSrc+1, &dwReadBuff ) == FALSE ){
			return FALSE;
		}
		dwReadSize = 1+dwReadBuff;
		break;
	default:
		//未サポートの制御コード
		if( pbSrc[0] == 0x16 ){
			//PAPF
			dwReadSize = 2;
		}else if( pbSrc[0] == 0x1C ){
			//APS
			CheckModify();
			m_wPosY=m_wCharH*(pbSrc[1]-0x40);
			m_wPosX=m_wCharW*(pbSrc[2]-0x40);
			if( m_emStrSize == STR_SMALL || m_emStrSize == STR_MEDIUM ){
				m_wPosX=m_wPosX/2;
			}
			dwReadSize = 3;
		}else if( pbSrc[0] == 0x0C ){
			//CS
			dwReadSize = 1;
			CAPTION_DATA Item;
			Item.bClear = TRUE;
			Item.dwWaitTime = m_dwWaitTime*100;
			if( m_pCaptionList != NULL ){
				m_pCaptionList->push_back(Item);
			}
			bRet = 2;
			m_dwWaitTime = 0;
		}else{
			//APB、APF、APD、APU
			dwReadSize = 1;
		}
		break;
	}

	*pdwReadSize = dwReadSize;

	return bRet;
}
Ejemplo n.º 4
0
const DWORD AribToStringInternal(TCHAR *lpszDst, 
								 const BYTE *pSrcData, const DWORD dwSrcLen)
{
	if(!pSrcData || !dwSrcLen || !lpszDst)return 0UL;
  
	DWORD dwSrcPos = 0UL;
	DWORD dwDstLen = 0UL;
	int   dwSrcData;
  
	// 状態初期設定
	m_byEscSeqCount = 0U;
	m_pSingleGL = NULL;

	m_CodeG[0] = CODE_KANJI;
	m_CodeG[1] = CODE_ALPHANUMERIC;
	m_CodeG[2] = CODE_HIRAGANA;
	m_CodeG[3] = CODE_KATAKANA;

	m_pLockingGL = &m_CodeG[0];
	m_pLockingGR = &m_CodeG[2];

	m_emStrSize = STR_NORMAL;

	while(dwSrcPos < dwSrcLen){
		dwSrcData = pSrcData[dwSrcPos] & 0xFF;

		if(!m_byEscSeqCount){
      
			// GL/GR領域
			if((dwSrcData >= 0x21U) && (dwSrcData <= 0x7EU)){
				// GL領域
				const CODE_SET CurCodeSet = (m_pSingleGL)? *m_pSingleGL : *m_pLockingGL;
				m_pSingleGL = NULL;
				
				if(abCharSizeTable[CurCodeSet]){
					// 2バイトコード
					if((dwSrcLen - dwSrcPos) < 2UL)break;
					
					dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], ((WORD)pSrcData[dwSrcPos + 0] << 8) | (WORD)pSrcData[dwSrcPos + 1], CurCodeSet);
					dwSrcPos++;
				}
				else{
					// 1バイトコード
					dwDstLen += ProcessCharCode(&lpszDst[dwDstLen], (WORD)dwSrcData, CurCodeSet);
				}
			}
			else if((dwSrcData >= 0xA1U) && (dwSrcData <= 0xFEU)){
				// GR領域
				const CODE_SET CurCodeSet = *m_pLockingGR;
				
				if(abCharSizeTable[CurCodeSet]){
					// 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バイトコード
					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	:
					//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;
}