annotate scripts/path/__extractpath__.m @ 12007:dc56a38b5a64 release-3-2-x

var.m: fix typos (thinkos?) in previous change
author John W. Eaton <jwe@octave.org>
date Tue, 23 Jun 2009 12:57:57 +0200
parents eb63fbe60fab
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8920
eb63fbe60fab update copyright notices
John W. Eaton <jwe@octave.org>
parents: 8812
diff changeset
1 ## Copyright (C) 2005, 2006, 2007, 2008, 2009 Bill Denney
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
2 ## Copyright (C) 2007 Ben Abbott
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
3 ##
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
4 ## This file is part of Octave.
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
5 ##
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
6 ## Octave is free software; you can redistribute it and/or modify it
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
7 ## under the terms of the GNU General Public License as published by
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
8 ## the Free Software Foundation; either version 3 of the License, or (at
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
9 ## your option) any later version.
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
10 ##
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
11 ## Octave is distributed in the hope that it will be useful, but
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
14 ## General Public License for more details.
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
15 ##
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
16 ## You should have received a copy of the GNU General Public License
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
17 ## along with Octave; see the file COPYING. If not, see
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
18 ## <http://www.gnu.org/licenses/>.
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
19
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
20 ## -*- texinfo -*-
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
21 ## @deftypefn {Function File} {@var{val} =} __extractpath__ (@var{file})
8812
7d48766c21a5 use consistent format for doc strings of internal functions
John W. Eaton <jwe@octave.org>
parents: 7540
diff changeset
22 ## Undocumented internal function.
7d48766c21a5 use consistent format for doc strings of internal functions
John W. Eaton <jwe@octave.org>
parents: 7540
diff changeset
23 ## @end deftypefn
7d48766c21a5 use consistent format for doc strings of internal functions
John W. Eaton <jwe@octave.org>
parents: 7540
diff changeset
24
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
25 ## Extact the path information from the script/function @var{file},
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
26 ## created by @file{savepath.m}. If @var{file} is omitted,
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
27 ## @file{~/.octaverc} is used. If successful, @code{__extractpath__}
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
28 ## returns the path specified in @var{file}.
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
29
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
30 ## Author: Ben Abbott <bpabbott@mac.com>
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
31
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
32 function specifiedpath = __extractpath__ (savefile)
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
33
7392
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
34 ## The majority of this code was borrowed from savepath.m.
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
35 ## FIXME -- is there some way to share the common parts instead of
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
36 ## duplicating?
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
37
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
38 beginstring = "## Begin savepath auto-created section, do not edit";
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
39 endstring = "## End savepath auto-created section";
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
40
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
41 if (nargin == 0)
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
42 savefile = tilde_expand ("~/.octaverc");
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
43 endif
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
44
7392
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
45 ## Parse the file if it exists to see if we should replace a section
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
46 ## or create a section.
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
47 startline = 0;
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
48 endline = 0;
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
49 filelines = {};
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
50 if (exist (savefile) == 2)
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
51 ## read in all lines of the file
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
52 [fid, msg] = fopen (savefile, "rt");
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
53 if (fid < 0)
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
54 error ("__extractpath__: could not open savefile, %s: %s", savefile, msg);
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
55 endif
7392
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
56 unwind_protect
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
57 linenum = 0;
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
58 while (linenum >= 0)
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
59 result = fgetl (fid);
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
60 if (isnumeric (result))
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
61 ## End at the end of file.
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
62 linenum = -1;
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
63 else
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
64 linenum++;
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
65 filelines{linenum} = result;
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
66 ## Find the first and last lines if they exist in the file.
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
67 if (strcmp (result, beginstring))
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
68 startline = linenum + 1;
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
69 elseif (strcmp (result, endstring))
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
70 endline = linenum - 1;
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
71 endif
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
72 endif
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
73 endwhile
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
74 unwind_protect_cleanup
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
75 closeread = fclose (fid);
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
76 if (closeread < 0)
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
77 error ("savepath: could not close savefile after reading, %s",
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
78 savefile);
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
79 endif
7392
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
80 end_unwind_protect
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
81 endif
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
82
7392
17f2cdb5232e [project @ 2008-01-17 08:14:32 by jwe]
jwe
parents: 7391
diff changeset
83 ## Extract the path specifiation.
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
84 if (startline > endline || (startline > 0 && endline == 0))
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
85 error ("savepath: unable to parse file, %s", savefile);
7393
a2e8cfe2fd17 [project @ 2008-01-17 08:46:54 by jwe]
jwe
parents: 7392
diff changeset
86 elseif (startline > 0)
a2e8cfe2fd17 [project @ 2008-01-17 08:46:54 by jwe]
jwe
parents: 7392
diff changeset
87 ## Undo doubling of single quote characters performed by savepath.
7540
3422f39573b1 strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents: 7393
diff changeset
88 specifiedpath = strrep (regexprep (cstrcat (filelines(startline:endline){:}),
7393
a2e8cfe2fd17 [project @ 2008-01-17 08:46:54 by jwe]
jwe
parents: 7392
diff changeset
89 " *path *\\('(.*)'\\); *", "$1"),
a2e8cfe2fd17 [project @ 2008-01-17 08:46:54 by jwe]
jwe
parents: 7392
diff changeset
90 "''", "'");
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
91 else
7393
a2e8cfe2fd17 [project @ 2008-01-17 08:46:54 by jwe]
jwe
parents: 7392
diff changeset
92 specifiedpath = "";
7388
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
93 endif
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
94
0e1ccfe1bf91 [project @ 2008-01-16 06:31:23 by jwe]
jwe
parents:
diff changeset
95 endfunction