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	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  <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.
--- /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
+## <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	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  <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	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\