void ExecBbiCommand::DoProcess()
{
- int i;
-
- bool ok=true;
- int pos1=0,pos2;
- pos2 = bbGetInputIn().find(";",pos1);
- std::string ccommand;
- while (ok==true)
+ // Look for the interpreter
+ bbtk::Interpreter* I = 0;
+ bool delete_inter = false;
+ if (bbGetParent() != 0)
{
- if (pos2==-1)
+ bbtk::Factory* f = ((bbtk::ComplexBlackBoxDescriptor*)bbGetParent()
+ ->bbGetDescriptor())->GetFactory();
+ if ((f != 0)&&
+ (f->GetExecuter()))
+ {
+ I = f->GetExecuter()->GetInterpreter();
+ }
+ }
+ if (I==0)
+ {
+ // bbtkError("ExecBbiCommand::DoProcess() : could not find interpreter");
+ I = new bbtk::Interpreter();
+ delete_inter = true;
+ }
+
+ int i;
+
+ bool ok=true;
+ int pos1=0,pos2;
+ pos2 = bbGetInputIn().find(";",pos1);
+ std::string ccommand;
+ while (ok==true)
+ {
+ if (pos2==-1)
+ {
+ ok=false;
+ ccommand=bbGetInputIn().substr(pos1,bbGetInputIn().length()-pos1 );
+ } else {
+ ccommand=bbGetInputIn().substr(pos1,pos2-pos1);
+ }
+ for ( i=0 ; i < ccommand.length() ; i++)
+ {
+ if (ccommand[i]==39)
{
- ok=false;
- ccommand=bbGetInputIn().substr(pos1,bbGetInputIn().length()-pos1 );
- } else {
- ccommand=bbGetInputIn().substr(pos1,pos2-pos1);
+ ccommand[i]=34;
}
- for ( i=0 ; i < ccommand.length() ; i++)
- {
- if (ccommand[i]==39)
- {
- ccommand[i]=34;
- }
- }
- bool insideComment = false; // for multiline comment
- bbtk::Interpreter::mGlobalInterpreter->InterpretLine( ccommand, insideComment);
- pos1=pos2+1;
- pos2 = bbGetInputIn().find(";",pos2+1);
-
+ }
+ bool insideComment = false; // for multiline comment
+ I->InterpretLine( ccommand, insideComment);
+ pos1=pos2+1;
+ pos2 = bbGetInputIn().find(";",pos2+1);
+
}
-
-
-
-/* Grrr not works in windows
+
+ if (delete_inter) delete I;
+
+ /* Grrr not works in windows
char * pch;
pch = strtok (bbGetInputIn(),";");
while (pch != NULL)