📄 matlabconsole.c
字号:
m_reCntrl.GetSel(nStart,m_PromptPosition); //Record the position of latest prompt
///END Soapy 9/19/03 NO_DELETE_PROMPT
return TRUE;
}
private:
void add_str(LPCSTR lpcszText, BOOL bAddNewLine=TRUE)
{
m_reCntrl.SetSel(-1,-1);
m_reCntrl.ReplaceSel(lpcszText);
m_reCntrl.SetSel(-1,-1);
if(bAddNewLine)
{
m_reCntrl.ReplaceSel("\r\n");
m_reCntrl.SetSel(-1,-1);
}
}
bool is_sys_cmd_key(UINT nKey)
{
if(nKey == VK_RETURN || nKey == VK_LEFT || nKey == VK_BACK || nKey == VK_UP ||
nKey == VK_DOWN || nKey == VK_DELETE || nKey == VK_RIGHT) ///Soapy 9/19/03 NO_DELETE_PROMPT
return true;
return false;
}
bool is_Origin_command(LPCSTR lpcszCmd, string& strResult)
{
string strCmdstr = lpcszCmd;
strCmdstr.TrimLeft(); //Soapy 10/22/03 DELETE_SPACE_BEFORE_COMMAND
//----- CPY 1/10/03
// GetTokens has a bug, if str has ', will generate runtime error
//int nArgs = strCmdstr.GetTokens(strCmdArgs);
//if(nArgs < 1)
// return false;
//string strCmd = strCmdArgs[0];
int nSpace = strCmdstr.Find(' ');
if(strCmdstr.IsEmpty() || nSpace == 0)
return false;
string strCmd = strCmdstr;
if(nSpace > 0)
strCmd = strCmdstr.Left(nSpace);
//-----
for(int nCmdID = 0; nCmdID < CMDID_COUNT; nCmdID++)
{
if(strCmd.CompareNoCase(s_asCmdList[nCmdID]) == 0)
{
//----- CPY 1/10/03
StringArray strCmdArgs;
int nArgs = strCmdstr.GetTokens(strCmdArgs);
if(nArgs < 1)
return false;
//-----
do_Origin_commad(nCmdID, strCmdArgs, strResult);
return true;
}
}
return false;
}
// reutrn true if matrix does not exist and has to be created
bool get_Origin_matrix(string strMatName, MatrixLayer& mLayer)
{
MatrixLayer mltemp(strMatName);
if(!mltemp)
{
mltemp.Create();
mltemp.GetPage().Rename(strMatName);
mLayer = mltemp;
return true;
}
mLayer = mltemp;
return false;
}
void do_Origin_commad(int nCmdID, StringArray& asArgs, string& strResult)
{
uint nArgSize = asArgs.GetSize();
if(nArgSize < 2 && nCmdID <= CMDID_GET_COMPLEX) // no argument
{
strResult = "Usage:" + asArgs[0];
strResult += " matName1 matName2 ...";
return;
}
/// DVT 7/1/03 QA70-4753 v7.0614 MATLAB_CONSOLE_PUT_COMPLEX
if(nArgSize < 3 && nCmdID == CMDID_PUT_COMPLEX) // not enough arguments
{
strResult = "Usage:" + asArgs[0];
strResult += " matNameReal matNameImag [matlNameResult (= matNameReal)]";
return;
}
/// end MATLAB_CONSOLE_PUT_COMPLEX
if(NULL == m_pMATLABObj)
{
strResult = STR_NO_MATLAB;
return;
}
strResult.Empty();
int ii;
bool bSuccess;
switch(nCmdID)
{
case CMDID_PUT_REAL:
for(ii = 1; ii < nArgSize; ii++)
{
MatrixLayer mlay(asArgs[ii]);
if(!mlay)
{
strResult = "???\r\n " + asArgs[ii];
strResult += " is not an Origin matrix.\r\n";
return;
}
Matrix<double> mm(mlay);
m_pMATLABObj->PutMatrix(mm.GetName(), &mm);
}
break;
/// DVT 7/1/03 QA70-4753 v7.0614 MATLAB_CONSOLE_PUT_COMPLEX
case CMDID_PUT_COMPLEX:
{
MatrixLayer mlayReal(asArgs[1]);
if(!mlayReal)
{
strResult = "???\r\n " + asArgs[1];
strResult += " is not an Origin matrix.\r\n";
return;
}
Matrix<double> mmR(mlayReal);
MatrixLayer mlayImag(asArgs[2]);
if(!mlayImag)
{
strResult = "???\r\n " + asArgs[2];
strResult += " is not an Origin matrix.\r\n";
return;
}
Matrix<double> mmI(mlayImag);
///Soapy 9/19/03 CHECK_MATRIX_SIZE_BEFORE_PUT_MATRIX
if(mmI.GetNumRows()!=mmR.GetNumRows() || mmI.GetNumCols()!=mmR.GetNumCols())
{
strResult = "\r\nInconsistent Matrix Size.\r\n ";
return;
}
///END CHECK_MATRIX_SIZE_BEFORE_PUT_MATRIX
m_pMATLABObj->PutMatrix( nArgSize >= 4 ? asArgs[3] : mmR.GetName(), &mmR, &mmI );
break;
}
/// end MATLAB_CONSOLE_PUT_COMPLEX
case CMDID_GET_REAL:
for(ii = 1; ii < nArgSize; ii++)
{
///Soapy 9/26/03 REMOVE_DUPLICATED_CODE
/*
bool bNew=false;
MatrixLayer mlay(asArgs[ii]);
if(!mlay)
{
mlay.Create();
mlay.GetPage().Rename(asArgs[ii]);
bNew = true;
}*/
MatrixLayer mlay;
bool bNew = get_Origin_matrix(asArgs[ii], mlay);
///END REMOVE_DUPLICATED_CODE
Matrix<double> mm(mlay);
///Soapy 11/12/03 GET_REAL_MATRIX_BY_VARIABLE_NAME
//bSuccess = m_pMATLABObj->GetMatrix(mm.GetName(), &mm);
bSuccess = m_pMATLABObj->GetMatrix(asArgs[ii], &mm);
///END GET_REAL_MATRIX_BY_VARIABLE_NAME
if(!bSuccess )
{
if(bNew)
mlay.Destroy();
strResult += asArgs[ii] + " ";
}
}
if(!strResult.IsEmpty())
strResult += ": matrices not found in Matlab!\r\n";
break;
case CMDID_GET_COMPLEX:
// may need to see how to share code with CMDID_GET_REAL
for(ii = 1; ii < nArgSize; ii++)
{
MatrixLayer mlay_r, mlay_i;
bool bNewR= get_Origin_matrix(asArgs[ii]+"r", mlay_r);
bool bNewI= get_Origin_matrix(asArgs[ii]+"i", mlay_i);
Matrix<double> mr(mlay_r), mi(mlay_i);
bSuccess = m_pMATLABObj->GetMatrix(asArgs[ii], &mr, &mi);
if(!bSuccess)
{
if(bNewR)
mlay_r.Destroy();
if(bNewI)
mlay_i.Destroy();
strResult += asArgs[ii] + " ";
}
}
if(!strResult.IsEmpty())
strResult += ": matrices not found in Matlab!";
break;
case CMDID_EXIT:
case CMDID_QUIT:
m_pMATLABObj->Detach();
GetWindow().SendMessage(WM_CLOSE);
break;
case CMDID_CLC: // clear screen display
m_reCntrl.Text="";
//add_str_to_richEdit(cCmdWindow, STR_PROMPT, FALSE);
break;
}
return;
}
int checkAndReturnSelectionRange(int& nStart, int& nEnd)
{
m_reCntrl.GetSel(nStart, nEnd);
if(nEnd<m_PromptPosition)
return UNEDITABLE ;
else if(nStart < m_PromptPosition)
return PARTEDITABLE;
else
return EDITABLE;
}
// Check if '[',']' and '{','}' match
bool isBracketMatch(string str, char char1, char char2)
{
int nLength = str.GetLength();
int nL, nR;
str.Remove(char1);
nL = nLength - str.GetLength();
str.Remove(char2);
nR = nLength - nL - str.GetLength();
return (nR>=nL); ///Soapy 11/4/03 FIX_BUG_ON_BRACKET
}
private:
int m_nTimerID;
RichEdit m_reCntrl;
Matlab* m_pMATLABObj;
LONG m_PromptPosition; ///Soapy 9/19/03 NO_DELETE_PROMPT
};
static MATLABConsoleDlg MyDlg;
////////////////////////////////////////////////////////////////////////////////////
// opens the MatlabConsole
BOOL MatlabConsole(BOOL bClose=FALSE)
{
if(MyDlg.GetWindow())
{
if(!bClose)
{
out_str("Matlab Console already open");
return FALSE; //already open
}
//we will need to close it
return TRUE;
}
return MyDlg.Create();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -