Mercurial > hg > octave-lojdl
changeset 8229:1bf51192fa1d
imported patch rundemos
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 16 Oct 2008 13:28:43 -0400 |
parents | 53dbbd331498 |
children | 2ce2aef722c3 |
files | scripts/ChangeLog scripts/testfun/rundemos.m src/ChangeLog src/utils.cc |
diffstat | 4 files changed, 162 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,7 @@ +2008-10-16 John W. Eaton <jwe@octave.org> + + * testfun/rundemos.m: New function. + 2008-10-16 Ben Abbott <bpabbott@mac.com> * plot/contourf.m: Correct order of patch object handles.
new file mode 100644 --- /dev/null +++ b/scripts/testfun/rundemos.m @@ -0,0 +1,69 @@ +## Copyright (C) 2008 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 3 of the License, 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, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} rundemos (@var{directory}) +## @end deftypefn + +## Author: jwe + +function rundemos (directory) + + if (nargin == 0) + dirs = cellstr (split (path (), pathsep ())); + elseif (nargin == 1) + if (is_absolute_filename (directory)) + dirs = {directory}; + else + fullname = find_dir_in_path (directory); + if (! isempty (fullname)) + dirs = {fullname}; + else + error ("rundemos: expecting argument to be a directory name"); + endif + endif + for i = 1:numel (dirs) + d = dirs{i}; + run_all_demos (d); + endfor + else + print_usage (); + endif + +endfunction + +function run_all_demos (directory) + dirinfo = dir (directory); + flist = {dirinfo.name}; + for i = 1:numel (flist) + f = flist{i}; + if (length (f) > 2 && strcmp (f((end-1):end), ".m")) + f = fullfile (directory, f); + if (has_demos (f)) + demo (f); + endif + endif + endfor +endfunction + +function retval = has_demos (f) + fid = fopen (f); + str = fscanf (fid, "%s"); + fclose (fid); + retval = findstr (str, "%!demo"); +endfunction
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2008-10-16 John W. Eaton <jwe@octave.org> + + * utils.cc (Fis_absolute_filename, Fis_rooted_relative_filename, + Fmake_absolute_filename, Ffind_dir_in_path): New functions. + 2008-10-16 David Bateman <dbateman@free.fr> * graphics.cc (void axes::properties::set_defaults
--- a/src/utils.cc +++ b/src/utils.cc @@ -739,6 +739,90 @@ return retval; } +DEFUN (is_absolute_filename, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} is_absolute_filename (@var{file})\n\ +Return true if @var{file} is an absolute filename.\n\ +@end deftypefn") +{ + octave_value retval = false; + + if (args.length () == 1) + retval = (args(0).is_string () + && octave_env::absolute_pathname (args(0).string_value ())); + else + print_usage (); + + return retval; +} + +DEFUN (is_rooted_relative_filename, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} is_rooted_relative_filename (@var{file})\n\ +Return true if @var{file} is a rooted-relative filename.\n\ +@end deftypefn") +{ + octave_value retval = false; + + if (args.length () == 1) + retval = (args(0).is_string () + && octave_env::rooted_relative_pathname (args(0).string_value ())); + else + print_usage (); + + return retval; +} + +DEFUN (make_absolute_filename, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} make_absolute_filename (@var{file})\n\ +Return the full name of @var{file}, relative to the current directory.\n\ +@end deftypefn") +{ + octave_value retval = std::string (); + + if (args.length () == 1) + { + std::string nm = args(0).string_value (); + + if (! error_state) + retval = octave_env::make_absolute (nm, octave_env::getcwd ()); + else + error ("make_absolute_filename: expecting argument to be a file name"); + } + else + print_usage (); + + return retval; +} + +DEFUN (find_dir_in_path, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} find_dir_in_path (@var{dir})\n\ +Return the full name of the path element matching @var{dir}. The\n\ +match is performed at the end of each path element. For example, if\n\ +@var{dir} is @code{\"foo/bar\"}, it matches the path element\n\ +@code{\"/some/dir/foo/bar\"}, but not @code{\"/some/dir/foo/bar/baz\"}\n\ +or @code{\"/some/dir/allfoo/bar.\n\ +@end deftypefn") +{ + octave_value retval = std::string (); + + if (args.length () == 1) + { + std::string dir = args(0).string_value (); + + if (! error_state) + retval = load_path::find_dir (dir); + else + error ("find_dir_in_path: expecting argument to be a directory name"); + } + else + print_usage (); + + return retval; +} + DEFUNX ("errno", Ferrno, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {@var{err} =} errno ()\n\