changeset 6820:65d0fa83261a

[project @ 2007-08-23 16:14:51 by jwe]
author jwe
date Thu, 23 Aug 2007 16:16:28 +0000
parents 3350e816e2a4
children b5d4d61d6bad
files scripts/ChangeLog scripts/pkg/pkg.m scripts/plot/plot.m
diffstat 3 files changed, 87 insertions(+), 60 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Wed Aug 22 08:53:34 2007 +0000
+++ b/scripts/ChangeLog	Thu Aug 23 16:16:28 2007 +0000
@@ -1,3 +1,12 @@
+2007-08-23  John W. Eaton  <jwe@octave.org>
+
+	* pkg/pkg.m: Avoid using installed_packages for both function and
+	variable name.
+
+2007-08-23  David Bateman  <dbateman@free.fr>
+
+	* plot/plot.m: Allow first arg to be axes handle.
+
 2007-08-22  David Bateman  <dbateman@free.fr>
 
 	* control/base/nichols.m: Correct for misnamed variable, and ensure
--- a/scripts/pkg/pkg.m	Wed Aug 22 08:53:34 2007 +0000
+++ b/scripts/pkg/pkg.m	Thu Aug 23 16:16:28 2007 +0000
@@ -480,7 +480,7 @@
   [local_packages, global_packages] = installed_packages (local_list, 
 							  global_list);
 
-  installed_packages = {local_packages{:}, global_packages{:}};        
+  installed_pkgs_lst = {local_packages{:}, global_packages{:}};        
 
   if (global_install)
     packages = global_packages;
@@ -698,12 +698,12 @@
       idx = complement (packages_to_uninstall, 1:length(global_packages));
       global_packages = save_order ({global_packages{idx}, descriptions{:}});
       save (global_list, "global_packages");
-      installed_packages = {local_packages{:}, global_packages{:}};
+      installed_pkgs_lst = {local_packages{:}, global_packages{:}};
     else
       idx = complement (packages_to_uninstall, 1:length(local_packages));
       local_packages = save_order ({local_packages{idx}, descriptions{:}});
       save (local_list, "local_packages");
-      installed_packages = {local_packages{:}, global_packages{:}};
+      installed_pkgs_lst = {local_packages{:}, global_packages{:}};
     endif
   catch
     ## Something went wrong, delete tmpdirs
@@ -738,7 +738,7 @@
 	idx (end + 1) = i;
       endif
     endfor
-    load_packages_and_dependencies (idx, handle_deps, installed_packages);
+    load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst);
   endif
 endfunction
 
@@ -748,15 +748,15 @@
   [local_packages, global_packages] = installed_packages(local_list, 
 							 global_list);
   if (global_install)
-    installed_packages = {local_packages{:}, global_packages{:}};
+    installed_pkgs_lst = {local_packages{:}, global_packages{:}};
   else
-    installed_packages = local_packages;
+    installed_pkgs_lst = local_packages;
   endif
 
-  num_packages = length (installed_packages);
+  num_packages = length (installed_pkgs_lst);
   delete_idx = [];
   for i = 1:num_packages
-    cur_name = installed_packages{i}.name;
+    cur_name = installed_pkgs_lst{i}.name;
     if (any (strcmp (cur_name, pkgnames)))
       delete_idx(end+1) = i;
     endif
@@ -766,12 +766,12 @@
   if (length (delete_idx) != length (pkgnames))
     if (global_install)
       ## Try again for a locally installed package
-      installed_packages = local_packages;
+      installed_pkgs_lst = local_packages;
 
-      num_packages = length (installed_packages);
+      num_packages = length (installed_pkgs_lst);
       delete_idx = [];
       for i = 1:num_packages
-	cur_name = installed_packages{i}.name;
+	cur_name = installed_pkgs_lst{i}.name;
 	if (any (strcmp (cur_name, pkgnames)))
 	  delete_idx(end+1) = i;
 	endif
@@ -788,7 +788,7 @@
 
   ## Compute the packages that will remain installed
   idx = complement (delete_idx, 1:num_packages);
-  remaining_packages = {installed_packages{idx}};
+  remaining_packages = {installed_pkgs_lst{idx}};
 
   ## Check dependencies
   if (handle_deps)
@@ -815,7 +815,7 @@
 
   ## Delete the directories containing the packages
   for i = delete_idx
-    desc = installed_packages{i};
+    desc = installed_pkgs_lst{i};
     ## If an 'on_uninstall.m' exist, call it!
     if (exist (fullfile (desc.dir, "packinfo", "on_uninstall.m"), "file"))
       wd = pwd ();
@@ -1519,7 +1519,7 @@
   fclose (fid);
 endfunction
 
-function bad_deps = get_unsatisfied_deps (desc, installed_packages)
+function bad_deps = get_unsatisfied_deps (desc, installed_pkgs_lst)
   bad_deps = {};
 
   ## For each dependency
@@ -1534,9 +1534,9 @@
     ## Is the current dependency not Octave?
     else
       ok = false;
-      for i = 1:length (installed_packages)
-	cur_name = installed_packages{i}.name;
-	cur_version = installed_packages{i}.version;
+      for i = 1:length (installed_pkgs_lst)
+	cur_name = installed_pkgs_lst{i}.name;
+	cur_version = installed_pkgs_lst{i}.version;
 	if (strcmp (dep.package, cur_name)
 	    && compare_versions (cur_version, dep.version, dep.operator))
 	  ok = true;
@@ -1562,35 +1562,35 @@
   catch
     global_packages = {};
   end_try_catch
-  installed_packages = {local_packages{:}, global_packages{:}};
+  installed_pkgs_lst = {local_packages{:}, global_packages{:}};
 
   ## Eliminate duplicates in the installed package list.
   ## Locally installed packages take precedence
   dup = [];
-  for i = 1:length (installed_packages)
+  for i = 1:length (installed_pkgs_lst)
     if (find (dup, i))
       continue;
     endif
-    for j = (i+1):length (installed_packages)
+    for j = (i+1):length (installed_pkgs_lst)
       if (find (dup, j))
 	continue;
       endif
-      if (strcmp (installed_packages{i}.name, installed_packages{j}.name))
+      if (strcmp (installed_pkgs_lst{i}.name, installed_pkgs_lst{j}.name))
 	dup = [dup, j];
       endif
     endfor
   endfor
   if (! isempty(dup))
-    installed_packages(dup) = [];
+    installed_pkgs_lst(dup) = [];
   endif  
 
   ## Now check if the package is loaded
   tmppath = strrep (path(), "\\", "/");
-  for i = 1:length (installed_packages)
-    if (findstr (tmppath, strrep (installed_packages{i}.dir, "\\", "/")))
-      installed_packages{i}.loaded = true;
+  for i = 1:length (installed_pkgs_lst)
+    if (findstr (tmppath, strrep (installed_pkgs_lst{i}.dir, "\\", "/")))
+      installed_pkgs_lst{i}.loaded = true;
     else
-      installed_packages{i}.loaded = false;
+      installed_pkgs_lst{i}.loaded = false;
     endif
   endfor
   for i = 1:length (local_packages)
@@ -1614,12 +1614,12 @@
     out2 = global_packages;
     return;
   elseif (nargout == 1)
-    out1 = installed_packages;
+    out1 = installed_pkgs_lst;
     return;
   endif
 
   ## We shouldn't return something, so we'll print something
-  num_packages = length (installed_packages);
+  num_packages = length (installed_pkgs_lst);
   if (num_packages == 0)
     printf ("no packages installed.\n");
     return;
@@ -1634,10 +1634,10 @@
   names = cell (num_packages, 1); 
   for i = 1:num_packages
     max_name_length = max (max_name_length,
-			   length (installed_packages{i}.name));
+			   length (installed_pkgs_lst{i}.name));
     max_version_length = max (max_version_length,
-			      length (installed_packages{i}.version));
-    names{i} = installed_packages{i}.name;
+			      length (installed_pkgs_lst{i}.version));
+    names{i} = installed_pkgs_lst{i}.name;
   endfor
   max_dir_length = terminal_size()(2) - max_name_length - ...
 					     max_version_length - 7;
@@ -1661,9 +1661,9 @@
 		    max_version_length);
   [dummy, idx] = sort (names);
   for i = 1:num_packages
-    cur_name = installed_packages{idx(i)}.name;
-    cur_version = installed_packages{idx(i)}.version;
-    cur_dir = installed_packages{idx(i)}.dir;
+    cur_name = installed_pkgs_lst{idx(i)}.name;
+    cur_version = installed_pkgs_lst{idx(i)}.version;
+    cur_dir = installed_pkgs_lst{idx(i)}.dir;
     if (length (cur_dir) > max_dir_length)
       first_char = length (cur_dir) - max_dir_length + 4;
       first_filesep = strfind (cur_dir(first_char:end), filesep());
@@ -1674,7 +1674,7 @@
         cur_dir = strcat ("...", cur_dir(first_char:end));
       endif
     endif
-    if (installed_packages{idx(i)}.loaded)
+    if (installed_pkgs_lst{idx(i)}.loaded)
       cur_loaded = "*";
     else
       cur_loaded = " ";
@@ -1684,23 +1684,23 @@
 endfunction
 
 function load_packages (files, handle_deps, local_list, global_list)
-  installed_packages = installed_packages (local_list, global_list);
-  num_packages = length (installed_packages);
+  installed_pkgs_lst = installed_packages (local_list, global_list);
+  num_packages = length (installed_pkgs_lst);
 
   ## Read package names and installdirs into a more convenient format
   pnames = pdirs = cell (1, num_packages);
   for i = 1:num_packages
-    pnames{i} = installed_packages{i}.name;
-    pdirs{i} = installed_packages{i}.dir;
+    pnames{i} = installed_pkgs_lst{i}.name;
+    pdirs{i} = installed_pkgs_lst{i}.dir;
   endfor
 
   ## load all
   if (length (files) == 1 && strcmp (files{1}, "all"))
-    idx = [1:length(installed_packages)];
+    idx = [1:length(installed_pkgs_lst)];
   ## load auto
   elseif (length (files) == 1 && strcmp (files{1}, "auto")) 
     idx = [];
-    for i = 1:length (installed_packages)
+    for i = 1:length (installed_pkgs_lst)
       if (exist (fullfile (pdirs{i}, "packinfo", ".autoload"), "file"))
 	idx (end + 1) = i;
       endif
@@ -1718,19 +1718,19 @@
   endif
 
   ## Load the packages, but take care of the ordering of dependencies
-  load_packages_and_dependencies (idx, handle_deps, installed_packages);
+  load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst);
 endfunction
 
 function unload_packages (files, handle_deps, local_list, global_list)
-  installed_packages = installed_packages (local_list, global_list);
-  num_packages = length (installed_packages);
+  installed_pkgs_lst = installed_packages (local_list, global_list);
+  num_packages = length (installed_pkgs_lst);
 
   ## Read package names and installdirs into a more convenient format
   pnames = pdirs = cell (1, num_packages);
   for i = 1:num_packages
-    pnames{i} = installed_packages{i}.name;
-    pdirs{i} = installed_packages{i}.dir;
-    pdeps{i} = installed_packages{i}.depends;
+    pnames{i} = installed_pkgs_lst{i}.name;
+    pdirs{i} = installed_pkgs_lst{i}.dir;
+    pdeps{i} = installed_pkgs_lst{i}.depends;
   endfor
 
   ## Get the current octave path
@@ -1879,13 +1879,13 @@
   newdesc(idx) = [];
 endfunction
 
-function load_packages_and_dependencies (idx, handle_deps, installed_packages)
-  idx = load_package_dirs (idx, [], handle_deps, installed_packages);
+function load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst)
+  idx = load_package_dirs (idx, [], handle_deps, installed_pkgs_lst);
   arch = getarch ();
   dirs = {};
   execpath = EXEC_PATH ();
   for i = idx;
-    ndir = installed_packages{i}.dir;
+    ndir = installed_pkgs_lst{i}.dir;
     dirs {end + 1} = ndir;
     if (exist (fullfile (dirs{end}, "bin"), "dir"))
       execpath = strcat (fullfile(dirs{end}, "bin"), ":", execpath);
@@ -1907,27 +1907,27 @@
   endif
 endfunction
 
-function idx = load_package_dirs (lidx, idx, handle_deps, installed_packages)
+function idx = load_package_dirs (lidx, idx, handle_deps, installed_pkgs_lst)
   for i = lidx
-    if (isfield (installed_packages{i}, "loaded") &&
-	installed_packages{i}.loaded)
+    if (isfield (installed_pkgs_lst{i}, "loaded") &&
+	installed_pkgs_lst{i}.loaded)
       continue;
     else
       if (handle_deps)
-        deps = installed_packages{i}.depends;
+        deps = installed_pkgs_lst{i}.depends;
         if ((length (deps) > 1) || (length (deps) == 1 && 
 	  		  ! strcmp(deps{1}.package, "octave")))
           tmplidx = [];
           for k = 1 : length (deps)
-            for j = 1 : length (installed_packages)
-              if (strcmp (installed_packages{j}.name, deps{k}.package))
+            for j = 1 : length (installed_pkgs_lst)
+              if (strcmp (installed_pkgs_lst{j}.name, deps{k}.package))
                 tmplidx (end + 1) = j;
 	        break;
               endif
             endfor
           endfor
           idx = load_package_dirs (tmplidx, idx, handle_deps, 
-				 installed_packages);
+				 installed_pkgs_lst);
         endif
       endif
       if (isempty (find(idx == i)))
--- a/scripts/plot/plot.m	Wed Aug 22 08:53:34 2007 +0000
+++ b/scripts/plot/plot.m	Thu Aug 23 16:16:28 2007 +0000
@@ -169,6 +169,9 @@
 ##
 ## This will plot the cosine and sine functions and label them accordingly
 ## in the key.
+##
+## If the first argument is an axis handle, then plot into these axes, 
+## rather than the current axis handle returned by @code{gca}. 
 ## @seealso{semilogx, semilogy, loglog, polar, mesh, contour, __pltopt__
 ## bar, stairs, errorbar, xlabel, ylabel, title, print}
 ## @end deftypefn
@@ -177,9 +180,24 @@
 
 function retval = plot (varargin)
 
-  newplot ();
-
-  tmp = __plt__ ("plot", gca (), varargin{:});
+  if (isscalar (varargin{1}) && ishandle (varargin{1}))
+    h = varargin {1};
+    obj = get (h);
+    if (! strcmp (obj.type, "axes"))
+      error ("plot: expecting first argument to be an axes object");
+    endif
+    oldh = gca ();
+    unwind_protect
+      axes (h);
+      newplot ();
+      tmp = __plt__ ("plot", h, varargin{2:end});
+    unwind_protect_cleanup
+      axes (oldh);
+    end_unwind_protect
+  else
+    newplot ();
+    tmp = __plt__ ("plot", gca (), varargin{:});
+  endif
 
   if (nargout > 0)
     retval = tmp;