diff scripts/path/pathdef.m @ 9899:9f25290a35e8

more private function and subfunction changes
author John W. Eaton <jwe@octave.org>
date Tue, 01 Dec 2009 22:40:37 -0500
parents 16f53d29049f
children 95c3e38098bf
line wrap: on
line diff
--- a/scripts/path/pathdef.m
+++ b/scripts/path/pathdef.m
@@ -1,4 +1,5 @@
-## Copyright (C) 2008, 2009 Ben Abbott
+## Copyright (C) 2005, 2006, 2007, 2008, 2009 Bill Denney
+## Copyright (C) 2007, 2008, 2009 Ben Abbott
 ##
 ## This file is part of Octave.
 ##
@@ -59,3 +60,75 @@
   endif
 
 endfunction
+
+## Extact the path information from the script/function @var{file},
+## created by @file{savepath.m}.  If @var{file} is omitted, 
+## @file{~/.octaverc} is used.  If successful, @code{__extractpath__}
+## returns the path specified in @var{file}.
+
+## Author: Ben Abbott <bpabbott@mac.com>
+
+function specifiedpath = __extractpath__ (savefile)
+
+  ## The majority of this code was borrowed from savepath.m.
+  ## FIXME -- is there some way to share the common parts instead of
+  ## duplicating?
+
+  beginstring = "## Begin savepath auto-created section, do not edit";
+  endstring   = "## End savepath auto-created section";
+
+  if (nargin == 0)
+    savefile = tilde_expand ("~/.octaverc");
+  endif
+
+  ## Parse the file if it exists to see if we should replace a section
+  ## or create a section.
+  startline = 0;
+  endline = 0;
+  filelines = {};
+  if (exist (savefile) == 2)
+    ## read in all lines of the file
+    [fid, msg] = fopen (savefile, "rt");
+    if (fid < 0)
+      error ("__extractpath__: could not open savefile, %s: %s", savefile, msg);
+    endif
+    unwind_protect
+      linenum = 0;
+      while (linenum >= 0)
+	result = fgetl (fid);
+	if (isnumeric (result))
+	  ## End at the end of file.
+	  linenum = -1;
+	else
+	  linenum++;
+	  filelines{linenum} = result;
+	  ## Find the first and last lines if they exist in the file.
+	  if (strcmp (result, beginstring))
+	    startline = linenum + 1;
+	  elseif (strcmp (result, endstring))
+	    endline = linenum - 1;
+	  endif
+	endif
+      endwhile
+    unwind_protect_cleanup
+      closeread = fclose (fid);
+      if (closeread < 0)
+	error ("savepath: could not close savefile after reading, %s",
+	       savefile);
+      endif
+    end_unwind_protect
+  endif
+
+  ## Extract the path specifiation.
+  if (startline > endline || (startline > 0 && endline == 0))
+    error ("savepath: unable to parse file, %s", savefile);
+  elseif (startline > 0)
+    ## Undo doubling of single quote characters performed by savepath.
+    specifiedpath = strrep (regexprep (cstrcat (filelines(startline:endline){:}),
+				       " *path *\\('(.*)'\\); *", "$1"),
+			    "''", "'");
+  else
+    specifiedpath = "";
+  endif
+
+endfunction