From 56e4ad989e702cfecc9166812f8a365aca6a2b31 Mon Sep 17 00:00:00 2001 From: guigues Date: Fri, 7 Mar 2008 11:15:15 +0000 Subject: [PATCH] * Fixed problem with 'include *' * Finished 'no global factory' (fixes + box ExecBbiCommand works) --- kernel/src/bbtkExecuter.cxx | 6 +- kernel/src/bbtkInterpreter.cxx | 16 +++-- packages/std/src/bbstdExecBbiCommand.cxx | 74 +++++++++++++++--------- 3 files changed, 62 insertions(+), 34 deletions(-) diff --git a/kernel/src/bbtkExecuter.cxx b/kernel/src/bbtkExecuter.cxx index 241573a..5244a04 100644 --- a/kernel/src/bbtkExecuter.cxx +++ b/kernel/src/bbtkExecuter.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkExecuter.cxx,v $ $ Language: C++ - Date: $Date: 2008/03/07 08:40:14 $ - Version: $Revision: 1.13 $ + Date: $Date: 2008/03/07 11:15:15 $ + Version: $Revision: 1.14 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -107,6 +107,7 @@ namespace bbtk BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); // Create user workspace mRootCBB = new ComplexBlackBoxDescriptor("workspace"); //,f); + mRootCBB->SetFactory(GetFactory()); mRootCBB->AddToAuthor("bbi (internal)"); mRootCBB->AddToDescription("User's workspace"); mOpenDefinition.push_back(CBBDefinition(mRootCBB,"user")); @@ -161,6 +162,7 @@ namespace bbtk <SetFactory(GetFactory()); b->SetScriptFileName(scriptfilename); mOpenDefinition.push_back( CBBDefinition( b, pack ) ); diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index e9bf1e8..c63ec51 100644 --- a/kernel/src/bbtkInterpreter.cxx +++ b/kernel/src/bbtkInterpreter.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkInterpreter.cxx,v $ $ Language: C++ - Date: $Date: 2008/03/07 08:40:14 $ - Version: $Revision: 1.40 $ + Date: $Date: 2008/03/07 11:15:15 $ + Version: $Revision: 1.41 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -795,7 +795,11 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& { if ((*i).substr((*i).size()-4, 4) != ".bbs") continue; // ignore non .bbs files - LoadScript(*i,name); + std::string command("include "); + command += *i; + // LoadScript(*i,name); + bool tmp; + InterpretLine(command,tmp); nbBssFiles++; } if (nbBssFiles==0) @@ -846,7 +850,11 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& { if ((*i).substr((*i).size()-4, 4) != ".bbs") continue; // ignore non .bbs files - LoadScript(*i,name); + std::string command("include "); + command += *i; + bool tmp; + InterpretLine(command,tmp); + // LoadScript(*i,name); nbBssFiles++; } if (nbBssFiles==0) diff --git a/packages/std/src/bbstdExecBbiCommand.cxx b/packages/std/src/bbstdExecBbiCommand.cxx index 0310c09..feb9588 100755 --- a/packages/std/src/bbstdExecBbiCommand.cxx +++ b/packages/std/src/bbstdExecBbiCommand.cxx @@ -16,38 +16,56 @@ namespace bbstd 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; + 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(); + } + + 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 + + + + /* Grrr not works in windows char * pch; pch = strtok (bbGetInputIn(),";"); while (pch != NULL) -- 2.45.1