From help-octave-request at bevo dot che dot wisc dot edu Fri Feb 15 09:03:00 2002 Subject: Re: Loading files from within c++ (feval) From: Paul Kienzle To: Douglas Eck Cc: help-octave at bevo dot che dot wisc dot edu Date: Fri, 15 Feb 2002 10:01:58 -0500 Try the following (slightly tidied) version: #include #include #include /* modeled on get_global_value in variables.cc; perhaps this should be there too */ octave_value get_value (const std::string& nm) { octave_value retval; symbol_record *sr = curr_sym_tab->lookup (nm); if (sr) { octave_value sr_def = sr->def (); if (sr_def.is_undefined ()) error ("get_value: undefined symbol `%s'", nm.c_str ()); else retval = sr_def; } else error ("get_value: unknown symbol `%s'", nm.c_str ()); return retval; } void dotest() { octave_value_list args; args(0)="tst.mat"; args(1)="a"; cout << "Loading file " << args(0).string_value() << " ... "; feval("load", args, 0); // no arguments returned cout << "success" << endl; cout << "Fetching variable (" << args(1).string_value() << ") from symbol table... "; octave_value a = get_value("a"); if (!error_state) { cout << "success" << endl; cout << "Displaying value "<< endl; a.print(cout); } } extern DECLARE_FUN(load,args,nargout); int main(int argc, char * argv[]) { initialize_symbol_tables(); install_builtin_function(Fload,"load","foo",0); dotest(); } Paul Kienzle pkienzle at users dot sf dot net On Fri, Feb 15, 2002 at 11:16:37AM +0100, Douglas Eck wrote: > Paul Kienzle wrote: > > > Not having looked at the relevant code, I'm guessing that load is > > attempting to create a variable in the current symbol table but > > failing because you haven't initialized the current symbol table. > > Maybe something like: > > octave_value a; > > curr_sym_tab = new symbol_table(10); > > ... your feval stuff ... > > symbol_record *sr = curr_sym_tab->lookup("a"); > > if (sr && sr->is_defined ()) a = sr->def (); > > > > > > Thanks Paul. That helped. Now all I need to do is populate > the symbol table with the functions I need... namely > "load" and, when that works, "save". I tried to figure out how > install_builtin_function(...) works. I think that's what I need to use. > But for the life of me I can't figure out how to call the constructor. > John uses clever macro stuff > [ builtins.cc: XDEFUN_INTERNAL ( load , args , nargout , true ...] > that Doug doesn't understand. > > Any help? > > Attached is complete code with Makefile. > > Thanks! > Doug > ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------