# HG changeset patch # User John W. Eaton # Date 1224178123 14400 # Node ID 1bf51192fa1d8116fbe5e6dbe20fbbdeaad2dbf7 # Parent 53dbbd3314980e7ba472995c0e09722707518b4e imported patch rundemos diff -r 53dbbd331498 -r 1bf51192fa1d scripts/ChangeLog --- a/scripts/ChangeLog Thu Oct 16 14:49:08 2008 +0100 +++ b/scripts/ChangeLog Thu Oct 16 13:28:43 2008 -0400 @@ -1,3 +1,7 @@ +2008-10-16 John W. Eaton + + * testfun/rundemos.m: New function. + 2008-10-16 Ben Abbott * plot/contourf.m: Correct order of patch object handles. diff -r 53dbbd331498 -r 1bf51192fa1d scripts/testfun/rundemos.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/testfun/rundemos.m Thu Oct 16 13:28:43 2008 -0400 @@ -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 +## . + +## -*- 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 diff -r 53dbbd331498 -r 1bf51192fa1d src/ChangeLog --- a/src/ChangeLog Thu Oct 16 14:49:08 2008 +0100 +++ b/src/ChangeLog Thu Oct 16 13:28:43 2008 -0400 @@ -1,3 +1,8 @@ +2008-10-16 John W. Eaton + + * utils.cc (Fis_absolute_filename, Fis_rooted_relative_filename, + Fmake_absolute_filename, Ffind_dir_in_path): New functions. + 2008-10-16 David Bateman * graphics.cc (void axes::properties::set_defaults diff -r 53dbbd331498 -r 1bf51192fa1d src/utils.cc --- a/src/utils.cc Thu Oct 16 14:49:08 2008 +0100 +++ b/src/utils.cc Thu Oct 16 13:28:43 2008 -0400 @@ -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\