//動作位置前進する void CARIB8CharDecode::ActivePositionForward( int nCount ) { m_bPosInit = TRUE; WORD wPosX = m_wPosX; WORD wPosY = m_wPosY; while( --nCount >= 0 ){ wPosX += GetCharDirSize(); if( wPosX >= m_wClientX + m_wClientW ){ //"表示領域の端を越えることとなる場合、動作位置を表示領域の逆の端へ移動" wPosX = m_wClientX; wPosY += GetLineDirSize(); if( wPosY >= m_wClientY + m_wClientH ){ wPosY = m_wClientY + GetLineDirSize() - 1; } } } if( wPosY != m_wPosY ){ //改行を伴うときはこれまでの本文をリストに移す CheckModify(); //行末まで文字繰り返しのときは繰り返しを終了する if( m_bRPC && m_wRPC >= 0x40 ){ m_wRPC = 1; } m_wPosStartX = wPosX; } m_wPosX = wPosX; m_wPosY = wPosY; #ifdef DDEBUG_OUT TCHAR debug[256]; wsprintf(debug, TEXT(__FUNCTION__) TEXT("(): (px,py)=(%d,%d)\n"), m_wPosX, m_wPosY); DEBUG_OUT(debug); #endif }
BOOL CARIB8CharDecode::Caption( const BYTE* pbSrc, DWORD dwSrcSize, vector<CAPTION_DATA>* pCaptionList ) { if( pbSrc == NULL || dwSrcSize == 0 || pCaptionList == NULL){ return FALSE; } InitCaption(); m_pCaptionList = pCaptionList; BOOL bRet = TRUE; DWORD dwReadCount = 0; while(dwReadCount<dwSrcSize){ DWORD dwReadSize = 0; BOOL bRet = Analyze(pbSrc+dwReadCount, dwSrcSize-dwReadCount, &dwReadSize ); if( bRet == TRUE ){ if( m_strDecode.size() > 0 ){ CheckModify(); } }else{ pCaptionList->clear(); break; } m_strDecode = ""; dwReadCount+=dwReadSize; } return bRet; }
void __fastcall TMDIChild::actSaveFileExecute(TObject *Sender) { if(m_ActiveFileStruct == NULL) return; m_ActiveFileStruct->GetMemory()->Clear(); m_HexEditor->SaveToStream(m_ActiveFileStruct->GetMemory()); String fileName = m_WorkSpace->GetFileName(); if(fileName == "") { if(InputQuery("输入文件名(不要加后缀)", "输入保存的文件名(不要加后缀)", fileName)) { if(fileName.Pos(".")) fileName = LeftString(fileName, "."); fileName += ".eggxp"; m_WorkSpace->SetFileName(fileName); } else return; } //保存工作区 // if(m_WorkSpace->GetPath() == "") // { if(NeedSaveReq) NeedSaveReq(); // } if(m_WorkSpace->GetComment() == "" && m_HexEditor->DataSize >= 2) { //自动生成注释 if(m_WorkSpace->GetComment() == "") { char *pointer = m_HexEditor->GetFastPointer(0, m_HexEditor->DataSize); String comment = BinToStr(pointer, 2); m_WorkSpace->SetComment(comment); if(RefreshWorkSpaceReq) RefreshWorkSpaceReq(); } } if(m_WorkSpace->IsNewFile()) { if(m_WorkSpace->GetPath() == "") return; m_WorkSpace->SaveToFile(fileName); } else { m_WorkSpace->SaveToFile(); } DoSetTabCaption(); m_HexEditor->Modified = false; m_bTreeModify = false; CheckModify(); }
void __fastcall TMDIChild::actDoXorExecute(TObject *Sender) { //异或 String key; if(InputQuery("输入Key", "输入Key", key) == false) return; int keyInt = key.ToIntDef(0); for(int i=0; i<m_HexEditor->DataSize; i++) { m_HexEditor->Data[i] = m_HexEditor->Data[i] ^ keyInt; } CheckModify(); ParseData(); }
//戻り値がFALSEのときpCaptionListは中途半端に更新されているので、可能ならすべてを破棄する BOOL CARIB8CharDecode::Caption( const BYTE* pbSrc, DWORD dwSrcSize, vector<CAPTION_DATA>* pCaptionList, CDRCMap* pDRCMap, WORD wInitSWFMode ) { if( pbSrc == NULL || dwSrcSize == 0 || pCaptionList == NULL || pDRCMap == NULL ){ return FALSE; } m_bSpacing = FALSE; m_pCaptionList = pCaptionList; m_pDRCMap = pDRCMap; m_wSWFMode = m_wInitSWFMode = wInitSWFMode; InitCaption(); DWORD dwReadSize = 0; BOOL bRet = Analyze( pbSrc, dwSrcSize, &dwReadSize ); if( bRet == TRUE ){ CheckModify(); } return bRet; }
//--------------------------------------------------------------------- void TMDIChild::LoadCurWork() { if(m_ActiveFileStruct) { m_ActiveFileStruct->GetMemory()->Clear(); m_HexEditor->SaveToStream(m_ActiveFileStruct->GetMemory()); } m_ActiveFileStruct = m_WorkSpace->GetFileManager()->GetFileData(lvWorkSpace->ItemIndex); if(m_ActiveFileStruct == NULL) return; SetFileDescribe(m_ActiveFileStruct); m_HexEditor->LoadFromStream(m_ActiveFileStruct->GetMemory()); m_HexEditor->Modified = false; RefreshStateBar(); CheckModify(); RefreshAllClassView(); char *pointer = m_HexEditor->GetFastPointer(0, m_HexEditor->DataSize); m_ParseTree->SetParseData(pointer, m_HexEditor->DataSize); }
BOOL CARIB8CharDecode::C1( const BYTE* pbSrc, DWORD* pdwReadSize ) { if( pbSrc == NULL || pdwReadSize == NULL ){ return FALSE; } DWORD dwReadSize = 0; DWORD dwReadBuff = 0; BOOL bRet = TRUE; CheckModify(); switch(pbSrc[0]){ case 0x89: //MSZ 半角指定 m_emStrSize = STR_MEDIUM; dwReadSize = 1; break; case 0x8A: //NSZ 全角指定 m_emStrSize = STR_NORMAL; dwReadSize = 1; break; case 0x80: //BKF 文字黒 m_bCharColorIndex = (m_bDefPalette<<4) | 0x00; dwReadSize = 1; break; case 0x81: //RDF 文字赤 m_bCharColorIndex = (m_bDefPalette<<4) | 0x01; dwReadSize = 1; break; case 0x82: //GRF 文字緑 m_bCharColorIndex = (m_bDefPalette<<4) | 0x02; dwReadSize = 1; break; case 0x83: //YLF 文字黄 m_bCharColorIndex = (m_bDefPalette<<4) | 0x03; dwReadSize = 1; break; case 0x84: //BLF 文字青 m_bCharColorIndex = (m_bDefPalette<<4) | 0x04; dwReadSize = 1; break; case 0x85: //MGF 文字マゼンタ m_bCharColorIndex = (m_bDefPalette<<4) | 0x05; dwReadSize = 1; break; case 0x86: //CNF 文字シアン m_bCharColorIndex = (m_bDefPalette<<4) | 0x06; dwReadSize = 1; break; case 0x87: //WHF 文字白 m_bCharColorIndex = (m_bDefPalette<<4) | 0x07; dwReadSize = 1; break; case 0x88: //SSZ 小型サイズ m_emStrSize = STR_SMALL; dwReadSize = 1; break; case 0x8B: //SZX 指定サイズ if( pbSrc[1] == 0x60 ){ m_emStrSize = STR_MICRO; }else if( pbSrc[1] == 0x41 ){ m_emStrSize = STR_HIGH_W; }else if( pbSrc[1] == 0x44 ){ m_emStrSize = STR_WIDTH_W; }else if( pbSrc[1] == 0x45 ){ m_emStrSize = STR_W; }else if( pbSrc[1] == 0x6B ){ m_emStrSize = STR_SPECIAL_1; }else if( pbSrc[1] == 0x64 ){ m_emStrSize = STR_SPECIAL_2; } dwReadSize = 2; break; case 0x90: //COL 色指定 if( pbSrc[1] == 0x20 ){ dwReadSize = 3; m_bDefPalette = pbSrc[2]&0x0F; }else{ switch(pbSrc[1]&0xF0){ case 0x40: m_bCharColorIndex = pbSrc[1]&0x0F; break; case 0x50: m_bBackColorIndex = pbSrc[1]&0x0F; break; case 0x60: //未サポート break; case 0x70: //未サポート break; default: break; } dwReadSize = 2; } break; case 0x91: //FLC フラッシング制御 if( pbSrc[1] == 0x40 ){ m_bFlushMode = 1; }else if( pbSrc[1] == 0x47 ){ m_bFlushMode = 2; }else if( pbSrc[1] == 0x4F ){ m_bFlushMode = 0; } dwReadSize = 2; break; case 0x93: //POL パターン極性 //未サポート dwReadSize = 2; break; case 0x94: //WMM 書き込みモード変更 //未サポート dwReadSize = 2; break; case 0x95: //MACRO マクロ定義 //未サポート { DWORD dwCount = 0; do{ dwCount++; }while( pbSrc[dwCount] != 0x4F ); dwReadSize = dwCount; } break; case 0x97: //HLC 囲み制御 //未サポート dwReadSize = 2; break; case 0x98: //RPC 文字繰り返し //未サポート dwReadSize = 2; break; case 0x99: //SPL アンダーライン モザイクの終了 m_bBold = FALSE; bRet = 2; dwReadSize = 1; break; case 0x9A: //STL アンダーライン モザイクの開始 m_bBold = TRUE; dwReadSize = 1; break; case 0x9D: //TIME 時間制御 CheckModify(); if( pbSrc[1] == 0x20 ){ m_dwWaitTime = pbSrc[2]-0x40; dwReadSize = 3; }else{ DWORD dwCount = 0; do{ dwCount++; }while( pbSrc[dwCount] != 0x43 && pbSrc[dwCount] != 0x40 && pbSrc[dwCount] != 0x41 && pbSrc[dwCount] != 0x42 ); dwReadSize = dwCount; } break; case 0x9B: //CSI コントロールシーケンス if( CSI( pbSrc, &dwReadBuff ) == FALSE ){ return FALSE; } dwReadSize = dwReadBuff; break; default: //未サポートの制御コード dwReadSize = 1; break; } *pdwReadSize = dwReadSize; return bRet; }
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; }
void __fastcall TMDIChild::m_HexEditorChange(TObject *Sender) { m_HexEditor->Modified = true; CheckModify(); }
void TMDIChild::SetModify() { m_bTreeModify = true; CheckModify(); }
BOOL CARIB8CharDecode::C1( const BYTE* pbSrc, DWORD dwSrcSize, DWORD* pdwReadSize ) { if( dwSrcSize == 0 ){ return FALSE; } DWORD dwReadSize = 0; DWORD dwReadBuff = 0; m_bSpacing = FALSE; if( pbSrc[0] != 0x7F ){ //基本的に文字修飾に変更を伴うので本文をリストに移しておく CheckModify(); } switch(pbSrc[0]){ case 0x7F: //DEL 前景色空白 m_strDecode += L'■'; ActivePositionForward(1); m_bSpacing = TRUE; dwReadSize = 1; break; case 0x89: //MSZ 半角指定 m_emStrSize = CP_STR_MEDIUM; dwReadSize = 1; break; case 0x8A: //NSZ 全角指定 m_emStrSize = CP_STR_NORMAL; dwReadSize = 1; break; case 0x80: //BKF 文字黒 m_bCharColorIndex = (m_bDefPalette<<4) | 0x00; dwReadSize = 1; break; case 0x81: //RDF 文字赤 m_bCharColorIndex = (m_bDefPalette<<4) | 0x01; dwReadSize = 1; break; case 0x82: //GRF 文字緑 m_bCharColorIndex = (m_bDefPalette<<4) | 0x02; dwReadSize = 1; break; case 0x83: //YLF 文字黄 m_bCharColorIndex = (m_bDefPalette<<4) | 0x03; dwReadSize = 1; break; case 0x84: //BLF 文字青 m_bCharColorIndex = (m_bDefPalette<<4) | 0x04; dwReadSize = 1; break; case 0x85: //MGF 文字マゼンタ m_bCharColorIndex = (m_bDefPalette<<4) | 0x05; dwReadSize = 1; break; case 0x86: //CNF 文字シアン m_bCharColorIndex = (m_bDefPalette<<4) | 0x06; dwReadSize = 1; break; case 0x87: //WHF 文字白 m_bCharColorIndex = (m_bDefPalette<<4) | 0x07; dwReadSize = 1; break; case 0x88: //SSZ 小型サイズ m_emStrSize = CP_STR_SMALL; dwReadSize = 1; break; case 0x8B: //SZX 指定サイズ if( dwSrcSize < 2 ) return FALSE; if( pbSrc[1] == 0x60 ){ m_emStrSize = CP_STR_MICRO; }else if( pbSrc[1] == 0x41 ){ m_emStrSize = CP_STR_HIGH_W; }else if( pbSrc[1] == 0x44 ){ m_emStrSize = CP_STR_WIDTH_W; }else if( pbSrc[1] == 0x45 ){ m_emStrSize = CP_STR_W; }else if( pbSrc[1] == 0x6B ){ m_emStrSize = CP_STR_SPECIAL_1; }else if( pbSrc[1] == 0x64 ){ m_emStrSize = CP_STR_SPECIAL_2; } dwReadSize = 2; break; case 0x90: //COL 色指定 if( dwSrcSize < 2 ) return FALSE; if( pbSrc[1] == 0x20 ){ if( dwSrcSize < 3 ) return FALSE; dwReadSize = 3; //規定によりパレットは0から127まで使われる m_bDefPalette = pbSrc[2]&0x07; }else{ switch(pbSrc[1]&0xF0){ case 0x40: m_bCharColorIndex = (m_bDefPalette<<4) | (pbSrc[1]&0x0F); break; case 0x50: m_bBackColorIndex = (m_bDefPalette<<4) | (pbSrc[1]&0x0F); break; case 0x60: //未サポート break; case 0x70: //未サポート break; default: break; } dwReadSize = 2; } break; case 0x91: //FLC フラッシング制御 if( dwSrcSize < 2 ) return FALSE; if( pbSrc[1] == 0x40 ){ m_bFlushMode = 1; }else if( pbSrc[1] == 0x47 ){ m_bFlushMode = 2; }else if( pbSrc[1] == 0x4F ){ m_bFlushMode = 0; } dwReadSize = 2; break; case 0x93: //POL パターン極性 //未サポート if( dwSrcSize < 2 ) return FALSE; dwReadSize = 2; break; case 0x94: //WMM 書き込みモード変更 //未サポート if( dwSrcSize < 2 ) return FALSE; dwReadSize = 2; break; case 0x95: //MACRO マクロ定義 //未サポート(MACRO 0x4Fまで送る) dwReadSize = 2; do{ if( ++dwReadSize > dwSrcSize ){ return FALSE; } }while( pbSrc[dwReadSize-2] != 0x95 || pbSrc[dwReadSize-1] != 0x4F ); break; case 0x97: //HLC 囲み制御 if( dwSrcSize < 2 ) return FALSE; m_bHLC = pbSrc[1]&0x0F; dwReadSize = 2; break; case 0x98: //RPC 文字繰り返し if( dwSrcSize < 2 || m_bRPC ) return FALSE; m_bRPC = TRUE; m_wRPC = pbSrc[1]-0x40 == 0 ? 0xFF : pbSrc[1]-0x40; dwReadSize = 2; break; case 0x99: //SPL アンダーライン モザイクの終了 m_bBold = FALSE; dwReadSize = 1; break; case 0x9A: //STL アンダーライン モザイクの開始 m_bBold = TRUE; dwReadSize = 1; break; case 0x9D: //TIME 時間制御 if( dwSrcSize < 3 ) return FALSE; if( pbSrc[1] == 0x20 ){ m_dwWaitTime += (pbSrc[2]-0x40) * 100; dwReadSize = 3; }else{ //未サポート dwReadSize = 1; do{ if( ++dwReadSize > dwSrcSize ){ return FALSE; } }while( pbSrc[dwReadSize-1] < 0x40 || 0x43 < pbSrc[dwReadSize-1] ); } break; case 0x9B: //CSI コントロールシーケンス if( CSI( pbSrc+1, dwSrcSize-1, &dwReadBuff ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; default: //未サポートの制御コード dwReadSize = 1; break; } *pdwReadSize = dwReadSize; return TRUE; }
BOOL CARIB8CharDecode::C0( const BYTE* pbSrc, DWORD dwSrcSize, DWORD* pdwReadSize ) { if( dwSrcSize == 0 ){ return FALSE; } DWORD dwReadSize = 0; DWORD dwReadBuff = 0; m_bSpacing = FALSE; switch(pbSrc[0]){ case 0x20: //SP 背景色空白 m_strDecode += L' '; ActivePositionForward(1); m_bSpacing = TRUE; dwReadSize = 1; break; case 0x0D: //APR 改行 CheckModify(); m_bPosInit = TRUE; m_wPosX = m_wClientX; m_wPosY += GetLineDirSize(); if( m_wPosY >= m_wClientY + m_wClientH ){ m_wPosY = m_wClientY + GetLineDirSize() - 1; } m_wPosStartX = m_wPosX; 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 シングルシフト //G2で呼ぶ(マクロ展開を考慮してGLは入れ替えない) if( GL_GR( pbSrc+1, dwSrcSize-1, &dwReadBuff, &m_G2 ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x1D: //SS3 シングルシフト //G3で呼ぶ(マクロ展開を考慮してGLは入れ替えない) if( GL_GR( pbSrc+1, dwSrcSize-1, &dwReadBuff, &m_G3 ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x1B: //ESC エスケープシーケンス if( ESC( pbSrc+1, dwSrcSize-1, &dwReadBuff ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x08: //APB 動作位置後退 { CheckModify(); m_bPosInit = TRUE; WORD wDirX = GetCharDirSize(); if( m_wPosX < m_wClientX + wDirX ){ WORD wDirY = GetLineDirSize(); m_wPosX = m_wClientX + m_wClientW / wDirX * wDirX; if( m_wPosY < m_wClientY + wDirY*2-1 ){ m_wPosY = m_wClientY + (m_wClientH/wDirY+1) * wDirY - 1; } m_wPosY -= wDirY; } m_wPosX -= wDirX; m_wPosStartX = m_wPosX; dwReadSize = 1; } break; case 0x09: //APF 動作位置前進 CheckModify(); ActivePositionForward(1); //文字出力がないのでm_wPosStartXを更新しないと進行に矛盾がおこる m_wPosStartX = m_wPosX; dwReadSize = 1; break; case 0x0A: //APD 動作行前進 CheckModify(); m_bPosInit = TRUE; m_wPosY += GetLineDirSize(); if( m_wPosY >= m_wClientY + m_wClientH ){ m_wPosY = m_wClientY + GetLineDirSize() - 1; } m_wPosStartX = m_wPosX; dwReadSize = 1; break; case 0x0B: //APU 動作行後退 { CheckModify(); m_bPosInit = TRUE; WORD wDirY = GetLineDirSize(); if( m_wPosY < m_wClientY + wDirY*2-1 ){ m_wPosY = m_wClientY + (m_wClientH/wDirY+1) * wDirY - 1; } m_wPosY -= wDirY; m_wPosStartX = m_wPosX; dwReadSize = 1; } break; case 0x16: //PAPF 指定動作位置前進 if( dwSrcSize < 2 ){ return FALSE; } CheckModify(); ActivePositionForward(pbSrc[1] - 0x40); m_wPosStartX = m_wPosX; dwReadSize = 2; break; case 0x1C: //APS 動作位置指定 if( dwSrcSize < 3 ){ return FALSE; } CheckModify(); m_bPosInit = TRUE; //動作位置基準点は左下なので1行前進しておく(参考:mark10als) m_wPosY = m_wClientY + GetLineDirSize() * (pbSrc[1] - 0x40 + 1) - 1; m_wPosX = m_wClientX + GetCharDirSize() * (pbSrc[2] - 0x40); m_wPosStartX = m_wPosX; dwReadSize = 3; break; case 0x0C: //CS { dwReadSize = 1; CheckModify(); CAPTION_DATA Item; Item.bClear = TRUE; Item.dwWaitTime = m_dwWaitTime; m_pCaptionList->push_back(Item); m_wSWFMode = m_wInitSWFMode; InitCaption(); } break; default: dwReadSize = 1; break; } *pdwReadSize = dwReadSize; //DEBUG_OUT(pbSrc[0]==0x0E ? TEXT(__FUNCTION__) TEXT("(): GL<-G1\n") : // pbSrc[0]==0x0F ? TEXT(__FUNCTION__) TEXT("(): GL<-G0\n") : NULL); return TRUE; }
BOOL CARIB8CharDecode::CSI( const BYTE* pbSrc, DWORD dwSrcSize, DWORD* pdwReadSize ) { DWORD dwReadSize = 0; //中間文字0x20まで移動 WORD wP1 = 0; WORD wP2 = 0; int nParam = 0; for( ; dwReadSize+1<dwSrcSize; dwReadSize++ ){ if( pbSrc[dwReadSize] == 0x20 ){ if( nParam==0 ){ wP1 = wP2; } nParam++; break; }else if( pbSrc[dwReadSize] == 0x3B ){ if( nParam==0 ){ wP1 = wP2; wP2 = 0; } nParam++; }else if( 0x30<=pbSrc[dwReadSize] && pbSrc[dwReadSize]<=0x39 ){ if( nParam<=1 ){ wP2 = wP2*10+(pbSrc[dwReadSize]&0x0F); } } } //終端文字に移動 if( ++dwReadSize >= dwSrcSize ){ return FALSE; } switch(pbSrc[dwReadSize]){ case 0x53: //SWF if( nParam==1 ){ m_wSWFMode = wP1; }else{ //未サポート } if( InitCaption() == FALSE ){ return FALSE; } break; case 0x6E: //RCS m_bRasterColorIndex = (BYTE)(wP1&0x7F); break; case 0x61: //ACPS m_wPosStartX = m_wPosX = wP1; if( nParam>=2 ){ m_wPosY = wP2; } break; case 0x56: //SDF m_wClientW = wP1; if( nParam>=2 ){ m_wClientH = wP2; } break; case 0x5F: //SDP m_wClientX = wP1; if( nParam>=2 ){ m_wClientY = wP2; } if( m_bPosInit == FALSE ){ m_wPosStartX = m_wPosX = m_wClientX; m_wPosY = m_wClientY + GetLineDirSize() - 1; } break; case 0x57: //SSM m_wCharW = wP1; if( nParam>=2 ){ m_wCharH = wP2; } if( m_bPosInit == FALSE ){ m_wPosY = m_wClientY + GetLineDirSize() - 1; } break; case 0x58: //SHS m_wCharHInterval = wP1; break; case 0x59: //SVS m_wCharVInterval = wP1; break; case 0x42: //GSM //未サポート break; case 0x5D: //GAA //未サポート break; case 0x5E: //SRC //未サポート break; case 0x62: //TCC //未サポート break; case 0x65: //CFS //未サポート break; case 0x63: //ORN if( wP1 == 0x02 ){ m_bShadow = TRUE; } break; case 0x64: //MDF if( wP1 == 0 ){ m_bBold = FALSE; m_bItalic = FALSE; }else if( wP1 == 1 ){ m_bBold = TRUE; }else if( wP1 == 2 ){ m_bItalic = TRUE; }else if( wP1 == 3 ){ m_bBold = TRUE; m_bItalic = TRUE; } break; case 0x66: //XCS //未サポート break; case 0x68: //PRA m_bPRA = (BYTE)(wP1 + 1); CheckModify(TRUE); m_bPRA = 0; break; case 0x54: //CCC //未サポート break; case 0x67: //SCR //未サポート break; default: break; } dwReadSize++; *pdwReadSize = dwReadSize; return TRUE; }