00001 00002 // -*- C++ -*- 00003 00004 // RunCommand.cc 00005 // 00006 // Copyright (C) 2003 Pascal Vincent 00007 // 00008 // Redistribution and use in source and binary forms, with or without 00009 // modification, are permitted provided that the following conditions are met: 00010 // 00011 // 1. Redistributions of source code must retain the above copyright 00012 // notice, this list of conditions and the following disclaimer. 00013 // 00014 // 2. Redistributions in binary form must reproduce the above copyright 00015 // notice, this list of conditions and the following disclaimer in the 00016 // documentation and/or other materials provided with the distribution. 00017 // 00018 // 3. The name of the authors may not be used to endorse or promote 00019 // products derived from this software without specific prior written 00020 // permission. 00021 // 00022 // THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 00023 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00024 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 00025 // NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00026 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 00027 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00028 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00029 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00030 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00031 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00032 // 00033 // This file is part of the PLearn library. For more information on the PLearn 00034 // library, go to the PLearn Web site at www.plearn.org 00035 00036 /* ******************************************************* 00037 * $Id: RunCommand.cc,v 1.7 2004/07/21 16:30:49 chrish42 Exp $ 00038 ******************************************************* */ 00039 00041 #include "RunCommand.h" 00042 #include <plearn/base/general.h> 00043 #include <plearn/io/fileutils.h> 00044 #include <plearn/base/plerror.h> 00045 #include <plearn/base/stringutils.h> 00046 #include <plearn/base/Object.h> 00047 00048 namespace PLearn { 00049 using namespace std; 00050 00052 PLearnCommandRegistry RunCommand::reg_(new RunCommand); 00053 00055 void RunCommand::run(const vector<string>& args) 00056 { 00057 string scriptfile = args[0]; 00058 if(!file_exists(scriptfile)) 00059 PLERROR("Non existant script file: %s\n",scriptfile.c_str()); 00060 00061 map<string, string> vars; 00062 // populate vars with the arguments passed on the command line 00063 for(unsigned int i=1; i<args.size(); i++) 00064 { 00065 string option = args[i]; 00066 pair<string,string> name_val = split_on_first(option, "="); 00067 vars[name_val.first] = name_val.second; 00068 } 00069 PStream pout(&cout); 00070 // pout << vars << endl; 00071 00072 string script = readFileAndMacroProcess(scriptfile, vars); 00073 // cerr << script << endl; 00074 00075 PIStringStream in(script); 00076 00077 while(in) 00078 { 00079 PP<Object> o = readObject(in); 00080 o->run(); 00081 in.skipBlanksAndCommentsAndSeparators(); 00082 // cerr << bool(in) << endl; 00083 // cerr << in.peek() << endl; 00084 } 00085 } 00086 00087 } // end of namespace PLearn 00088