# HG changeset patch # User dbateman # Date 1177687870 0 # Node ID 55586d763de1e8673a3bcf2b379ff2040dd1c967 # Parent 5843c11b40061e32b98b6e7c951e71c58b573c51 [project @ 2007-04-27 15:31:10 by dbateman] diff -r 5843c11b4006 -r 55586d763de1 ChangeLog --- a/ChangeLog Fri Apr 27 15:00:10 2007 +0000 +++ b/ChangeLog Fri Apr 27 15:31:10 2007 +0000 @@ -7,8 +7,8 @@ 2007-04-27 David Bateman - * examples/mycell.c, examples/mypow2.c, examples/mystring.c: New - example mex files. + * examples/mycell.c, examples/mypow2.c, examples/mystring.c, + examples/myprop.c: New example mex files. 2007-04-26 Alex Zvoleff diff -r 5843c11b4006 -r 55586d763de1 doc/ChangeLog --- a/doc/ChangeLog Fri Apr 27 15:00:10 2007 +0000 +++ b/doc/ChangeLog Fri Apr 27 15:31:10 2007 +0000 @@ -1,5 +1,8 @@ 2007-04-27 David Bateman + * Makefile.in (EXAMPLE_FILES_NODIR): Add mycell.c, myfeval.c, + myfunc.c, mypow2.c, mysparse.c, mystring.c, mystruct.c and + paramdemo.cc. * interpreter.txi/dynamic.txi: Complete all but the section on the mex- and oct-file APIs. diff -r 5843c11b4006 -r 55586d763de1 doc/interpreter/Makefile.in --- a/doc/interpreter/Makefile.in Fri Apr 27 15:00:10 2007 +0000 +++ b/doc/interpreter/Makefile.in Fri Apr 27 15:31:10 2007 +0000 @@ -29,6 +29,14 @@ funcdemo.cc \ globaldemo.cc \ helloworld.cc \ + mycell.c \ + myfeval.c \ + myfunc.c \ + mypow2.c \ + mysparse.c \ + mystring.c \ + mystruct.c \ + paramdemo.cc \ stringdemo.cc \ structdemo.cc \ unwinddemo.cc diff -r 5843c11b4006 -r 55586d763de1 examples/Makefile.in --- a/examples/Makefile.in Fri Apr 27 15:00:10 2007 +0000 +++ b/examples/Makefile.in Fri Apr 27 15:31:10 2007 +0000 @@ -41,6 +41,7 @@ myfunc.c \ myhello.c \ mypow2.c \ + myprop.c \ myset.c \ mysparse.c \ mystring.c \ diff -r 5843c11b4006 -r 55586d763de1 examples/myprop.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/myprop.c Fri Apr 27 15:31:10 2007 +0000 @@ -0,0 +1,25 @@ +#include "mex.h" + +void +mexFunction (int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) +{ + double handle; + char property[256]; + + if (nrhs < 2 || nrhs > 3) + mexErrMsgTxt ("incorrect number of arguments"); + if (!mxIsDouble(prhs[0])) + mexErrMsgTxt ("handle expected to be a double scalar"); + if (!mxIsChar (prhs[1])) + mexErrMsgTxt ("expected property to be a string"); + + handle = mxGetScalar (prhs[0]); + mxGetString (prhs[1], property, 256); + plhs[0] = mxDuplicateArray (mexGet (handle, property)); + + if (nrhs == 3) + if (mexSet (handle, property, mxDuplicateArray (prhs[2]))) + mexErrMsgTxt ("failed to set property"); +} + + diff -r 5843c11b4006 -r 55586d763de1 src/ChangeLog --- a/src/ChangeLog Fri Apr 27 15:00:10 2007 +0000 +++ b/src/ChangeLog Fri Apr 27 15:31:10 2007 +0000 @@ -1,3 +1,12 @@ +2007-04-27 David Bateman + + * graphic.cc (get_property_form_handle, set_property_in_handle): + New functions. + * grahics.h: New file. + * mex.cc (mexGet, mexSet): use the above to implement mexGet + and mexSet. + * Makefile.in (INCLUDES): Add graphics.h + 2007-04-26 John W. Eaton * ov-usr-fcn.cc (octave_user_function::do_multi_index_op): diff -r 5843c11b4006 -r 55586d763de1 src/Makefile.in --- a/src/Makefile.in Fri Apr 27 15:00:10 2007 +0000 +++ b/src/Makefile.in Fri Apr 27 15:31:10 2007 +0000 @@ -99,7 +99,7 @@ INCLUDES := Cell.h base-list.h c-file-ptr-stream.h comment-list.h \ defun-dld.h defun-int.h defun.h dirfns.h dynamic-ld.h \ - error.h file-io.h gripes.h help.h input.h \ + error.h file-io.h graphics.h gripes.h help.h input.h \ lex.h load-path.h load-save.h ls-hdf5.h ls-mat-ascii.h ls-mat4.h \ ls-mat5.h ls-oct-ascii.h ls-oct-binary.h ls-utils.h \ mex.h mexproto.h mxarray.h \ diff -r 5843c11b4006 -r 55586d763de1 src/graphics.cc --- a/src/graphics.cc Fri Apr 27 15:00:10 2007 +0000 +++ b/src/graphics.cc Fri Apr 27 15:31:10 2007 +0000 @@ -40,6 +40,8 @@ #include #include +#include "graphics.h" + static void gripe_set_invalid (const std::string& pname) { @@ -3661,6 +3663,44 @@ return octave_value (gh_manager::figure_handle_list ()); } +octave_value +get_property_from_handle (double handle, const std::string &property, + const std::string &func) +{ + graphics_object obj = gh_manager::get_object (handle); + octave_value retval; + + if (obj) + { + property_name p = std::string (property); + retval = obj.get (p); + } + else + error ("%s: invalid handle (= %g)", func.c_str(), handle); + + return retval; +} + +bool +set_property_in_handle (double handle, const std::string &property, + const octave_value &arg, const std::string &func) +{ + graphics_object obj = gh_manager::get_object (handle); + int ret = false; + + if (obj) + { + property_name p = std::string (property); + obj.set (p, arg); + if (!error_state) + ret = true; + } + else + error ("%s: invalid handle (= %g)", func.c_str(), handle); + + return ret; +} + /* ;;; Local Variables: *** ;;; mode: C++ *** diff -r 5843c11b4006 -r 55586d763de1 src/graphics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/graphics.h Fri Apr 27 15:31:10 2007 +0000 @@ -0,0 +1,44 @@ +/* + +Copyright (C) 2007 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, write to the Free +Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. + +*/ + +#if !defined (graphics_h) +#define graphics_h 1 + +#include +#include "ov.h" + +extern bool +set_property_in_handle (double handle, const std::string &property, + const octave_value &arg, + const std::string &func = std::string()); + +extern octave_value +get_property_from_handle (double handle, const std::string &property, + const std::string &func = std::string()); +#endif + +/* +;; Local Variables: *** +;; mode: C++ *** +;; End: *** +*/ diff -r 5843c11b4006 -r 55586d763de1 src/mex.cc --- a/src/mex.cc Fri Apr 27 15:00:10 2007 +0000 +++ b/src/mex.cc Fri Apr 27 15:31:10 2007 +0000 @@ -27,6 +27,7 @@ #include "unwind-prot.h" #include "utils.h" #include "variables.h" +#include "graphics.h" // #define DEBUG 1 @@ -3294,11 +3295,14 @@ } const mxArray * -mexGet (double /*handle*/, const char */*property*/) +mexGet (double handle, const char *property) { - // FIXME - error ("mexGet: not implemented"); - return 0; + mxArray *m = 0; + octave_value ret = get_property_from_handle (handle, property, "mexGet"); + + if (!error_state && ret.is_defined()) + m = ret.as_mxArray (); + return m; } int @@ -3341,11 +3345,12 @@ } int -mexSet (double /*handle*/, const char */*property*/, mxArray */*val*/) +mexSet (double handle, const char *property, mxArray *val) { - // FIXME - error ("mexSet: not implemented"); - return 0; + bool ret = + set_property_in_handle (handle, property, mxArray::as_octave_value (val), + "mexSet"); + return (ret ? 0 : 1); } void