diff options
Diffstat (limited to 'test/cbot/CBot_console/CBotConsole.cpp')
-rw-r--r-- | test/cbot/CBot_console/CBotConsole.cpp | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/test/cbot/CBot_console/CBotConsole.cpp b/test/cbot/CBot_console/CBotConsole.cpp new file mode 100644 index 0000000..e9209d3 --- /dev/null +++ b/test/cbot/CBot_console/CBotConsole.cpp @@ -0,0 +1,175 @@ +/* + * CBotConsole.cpp + * + * Created on: 08-08-2012 + * Author: michal + */ + +#include "CBotConsole.h" +#include "CClass.h" +#include <ctime> +#include <iostream> + +CBotConsole::CBotConsole() { + // TODO Auto-generated constructor stub + m_pProg = NULL; + m_threadinfo.m_bRun = false; + m_code = 0; + +} + +CBotConsole::~CBotConsole() { + // TODO Auto-generated destructor stub +} + +uint ThreadProc(ThreadInfo *info) +{ + time_t t0,t1; + time(&t0); + + int Cpt = 0; + + info->m_pProg->Start("LaCommande"); + while ( !info->m_bStop && !info->m_pProg->Run() ) + { +#if 0 + const char* FunctionName; + const char* FN; + int start, end; + + info->m_pProg->GetRunPos(FunctionName, start, end); + + if ( FunctionName != NULL ) + { + info->m_pEditx->SetSel(start, end); + + char buffer[200]; + sprintf( buffer, "step %s, %d, %d",FunctionName, start, end); + AfxMessageBox( buffer ); + + int level = 0; + do + { + CBotVar* t = info->m_pProg->GetStackVars(FN, level--); + if ( FN != FunctionName ) break; + if ( t != NULL ) + { + CString s ; + while ( t != NULL ) + { + if (s.IsEmpty()) s+= "Stack -> "; + else s+= " , "; + s += t->GetValString(); + t = t->GetNext(); + } + AfxMessageBox(s); + } + } while (TRUE); + } +#endif + Cpt++; + if ( Cpt%50 == 0 ) std::cout << "."; + } + + if ( info->m_bStop ) + { + std::cout << "\nInterrupt\n"; + } + else if (info->m_pProg->GetError() == 0) + { + time(&t1); + double prog_time = difftime(t0,t1); + + char buffer[200]; + sprintf( buffer, "\nExecution terminated in %f seconds.\nInterrupted %d time(s).\n", + prog_time, Cpt); + + std::cout << buffer; + } + +// info->m_pWndMessage->SendMessage(WM_ENDPROG, 0, 0) ; + return 0 ; +} + +long CBotConsole::EndProg() +{ + m_threadinfo.m_bRun = false; + + if (m_pProg->GetError(m_code, m_start, m_end)) + { + CBotString TextError; + TextError = CBotProgram::GetErrorText(m_code); + std::cout << TextError; + return 1; + } + delete m_pProg; + m_pProg = NULL; + + return 0 ; +} + + +void CBotConsole::OnOK() +{ + m_code = 0; + + std::string Commande; + std::cin >> Commande; + + std::string s = "void LaCommande() { " + Commande + " ;}"; + m_pProg = new CBotProgram(); + CBotStringArray liste; + m_pProg->Compile(s.c_str(), liste); + + int err, start, end; + if ( m_pProg->GetError(err, start, end) ) + { + CBotString TextError; + TextError = CBotProgram::GetErrorText(err); + std::cout << TextError; + return; + } + + std::cout << "\n" + Commande + " ->\n"; + +// m_Edit2.SetWindowText(""); +// m_Edit1.SetFocus(); +// m_Edit2.EnableWindow(FALSE); +// m_cOK.EnableWindow(FALSE); + + // lance un processus paralèle pour l'exécution +// m_threadinfo.m_pWndMessage = this ; + +// m_threadinfo.m_pEdit1 = &m_Edit1; +// m_threadinfo.m_pEditx = m_pEditx; + m_threadinfo.m_pProg = m_pProg; + m_threadinfo.m_bStop = false; + m_threadinfo.m_bRun = true; + + ThreadProc(&m_threadinfo); + +// here program starts +// AfxBeginThread((AFX_THREADPROC)ThreadProc, &m_threadinfo) ; +} + +void CBotConsole::OnCancel() +{ + m_threadinfo.m_bStop = true ; +} + +bool CBotConsole::OnInitDialog() +{ +// CDialog::OnInitDialog(); + + std::cout << "Following functions are availible:\n"; + for ( int i = 0; i < m_pListe->GetSize(); i++ ) + { + CBotString x = (*m_pListe)[i] + CBotString("\n"); + std::cout << x; + } + std::cout << "Enter a command:\n"; + + + return true; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} |