annotate scripts/miscellaneous/edit.m @ 7325:67aef14de9c2

[project @ 2007-12-19 20:21:11 by jwe]
author jwe
date Wed, 19 Dec 2007 20:21:11 +0000
parents
children 55f35e469c43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7325
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
1 ## Copyright (C) 2001, 2007 Paul Kienzle
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
2 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
4 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
8 ## your option) any later version.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
9 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
14 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
18
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
20 ## @deftypefn {Command} edit @var{name}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
21 ## @deftypefnx {Command} edit @var{field} @var{value}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
22 ## @deftypefnx {Command} @var{value} = edit get @var{field}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
23 ## Edit the named function, or change editor settings.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
24 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
25 ## If @code{edit} is called with the name of a file or function as
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
26 ## its argument it will be opened in a text editor.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
27 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
28 ## @itemize @bullet
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
29 ## @item
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
30 ## If the function @var{name} is available in a file on your path and
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
31 ## that file is modifiable, then it will be edited in place. If it
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
32 ## is a system function, then it will first be copied to the directory
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
33 ## @code{HOME} (see further down) and then edited.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
34 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
35 ## @item
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
36 ## If @var{name} is the name of a function defined in the interpreter but
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
37 ## not in an m-file, then an m-file will be created in @code{HOME}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
38 ## to contain that function along with its current definition.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
39 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
40 ## @item
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
41 ## If @code{name.cc} is specified, then it will search for @code{name.cc}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
42 ## in the path and try to modify it, otherwise it will create a new
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
43 ## @file{.cc} file in @code{HOME}. If @var{name} happens to be an
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
44 ## m-file or interpreter defined function, then the text of that
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
45 ## function will be inserted into the .cc file as a comment.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
46 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
47 ## @item
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
48 ## If @var{name.ext} is on your path then it will be editted, otherwise
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
49 ## the editor will be started with @file{HOME/name.ext} as the
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
50 ## filename. If @file{name.ext} is not modifiable, it will be copied to
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
51 ## @code{HOME} before editing.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
52 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
53 ## @strong{WARNING!} You may need to clear name before the new definition
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
54 ## is available. If you are editing a .cc file, you will need
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
55 ## to mkoctfile @file{name.cc} before the definition will be available.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
56 ## @end itemize
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
57 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
58 ## If @code{edit} is called with @var{field} and @var{value} variables,
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
59 ## the value of the control field @var{field} will be @var{value}.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
60 ## If an output argument is requested and the first argument is @code{get}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
61 ## then @code{edit} will return the value of the control field @var{field}.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
62 ## The following control fields are used:
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
63 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
64 ## @table @samp
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
65 ## @item editor
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
66 ## This is the editor to use to modify the functions. By default it uses
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
67 ## Octave's @code{EDITOR} built-in function, which comes from
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
68 ## @code{getenv("EDITOR")} and defaults to @code{emacs}. Use @code{%s}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
69 ## In place of the function name. For example,
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
70 ## @table @samp
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
71 ## @item [EDITOR, " %s"]
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
72 ## Use the editor which Octave uses for @code{bug_report}.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
73 ## @item "xedit %s &"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
74 ## pop up simple X11 editor in a separate window
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
75 ## @item "gnudoit -q \"(find-file \\\"%s\\\")\""
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
76 ## Send it to current Emacs; must have @code{(gnuserv-start)} in @file{.emacs}.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
77 ## @end table
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
78 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
79 ## On cygwin, you will need to convert the cygwin path to a windows
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
80 ## path if you are using a native Windows editor. For example
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
81 ## @example
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
82 ## '"C:/Program Files/Good Editor/Editor.exe" "$(cygpath -wa %s)"'
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
83 ## @end example
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
84 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
85 ## @item home
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
86 ## This is the location of user local m-files. Be be sure it is in your
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
87 ## path. The default is @file{~/octave}.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
88 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
89 ## @item author
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
90 ## This is the name to put after the "## Author:" field of new functions.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
91 ## By default it guesses from the @code{gecos} field of password database.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
92 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
93 ## @item email
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
94 ## This is the e-mail address to list after the name in the author field.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
95 ## By default it guesses @code{<$LOGNAME@@$HOSTNAME>}, and if @code{$HOSTNAME}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
96 ## is not defined it uses @code{uname -n}. You probably want to override this.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
97 ## Be sure to use @code{<user@@host>} as your format.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
98 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
99 ## @item license
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
100 ## @table @samp
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
101 ## @item gpl
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
102 ## GNU General Public License (default).
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
103 ## @item bsd
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
104 ## BSD-style license without advertising clause.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
105 ## @item pd
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
106 ## Public domain.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
107 ## @item "text"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
108 ## Your own default copyright and license.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
109 ## @end table
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
110 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
111 ## @item mode
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
112 ## This value determines whether the editor should be started in async mode
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
113 ## or sync mode. Set it to "async" to start the editor in async mode. The
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
114 ## default is "sync" (see also "system").
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
115 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
116 ## Unless you specify @samp{pd}, edit will prepend the copyright statement
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
117 ## with "Copyright (C) yyyy Function Author".
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
118 ## @end table
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
119 ## @end deftypefn
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
120
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
121 ## Author: Paul Kienzle <pkienzle@users.sf.net>
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
122
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
123 ## Original version by Paul Kienzle distributed as free software in the
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
124 ## public domain.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
125
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
126 ## PKG_ADD: mark_as_command edit
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
127
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
128 function ret = edit (file, state)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
129
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
130 ## Pick up globals or default them.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
131
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
132 persistent FUNCTION = struct ("EDITOR", strcat (EDITOR (), " %s"),
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
133 "HOME", fullfile (default_home, "octave"),
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
134 "AUTHOR", default_user(1),
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
135 "EMAIL", [],
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
136 "LICENSE", "GPL",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
137 "MODE", "sync");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
138
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
139 mlock; # make sure the state variables survive "clear functions"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
140
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
141 if (nargin == 2)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
142 switch (toupper (file))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
143 case "EDITOR"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
144 FUNCTION.EDITOR = state;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
145 case "HOME"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
146 if (! isempty (state) && state(1) == "~")
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
147 state = [ default_home, state(2:end) ];
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
148 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
149 FUNCTION.HOME = state;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
150 case "AUTHOR"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
151 FUNCTION.AUTHOR = state;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
152 case "EMAIL"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
153 FUNCTION.EMAIL = state;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
154 case "LICENSE"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
155 FUNCTION.LICENSE = state;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
156 case "MODE"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
157 if (strcmp (state, "sync") || strcmp (state, "async"))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
158 FUNCTION.MODE = state;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
159 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
160 error('expected "edit MODE sync|async"');
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
161 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
162 case "GET"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
163 ret = FUNCTION.(toupper (state));
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
164 otherwise
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
165 error ("expected \"edit EDITOR|HOME|AUTHOR|EMAIL|LICENSE|MODE val\"");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
166 endswitch
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
167 return
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
168 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
169
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
170 ## Start the editor without a file if no file is given.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
171 if (nargin < 1)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
172 if (exist (FUNCTION.HOME, "dir") == 7 && (isunix () || ! ispc ()))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
173 system (strcat ("cd \"", FUNCTION.HOME, "\" ; ",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
174 sprintf (FUNCTION.EDITOR, "")),
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
175 [], FUNCTION.MODE);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
176 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
177 system (sprintf (FUNCTION.EDITOR,""), [], FUNCTION.MODE);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
178 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
179 return;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
180 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
181
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
182 ## Check whether the user is trying to edit a builtin of compiled function.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
183 switch (exist (file))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
184 case {3, 5}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
185 error ("unable to edit a built-in or compiled function");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
186 endswitch
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
187
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
188 ## Find file in path.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
189 idx = rindex (file, ".");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
190 if (idx != 0)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
191 ## If file has an extension, use it.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
192 path = file_in_loadpath (file);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
193 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
194 ## Otherwise try file.cc, and if that fails, default to file.m.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
195 path = file_in_loadpath (fullfile (file, ".cc"));
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
196 if (isempty (path))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
197 file = fullfile (file, ".m");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
198 path = file_in_loadpath (file);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
199 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
200 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
201
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
202 ## If the file exists and is modifiable in place then edit it,
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
203 ## otherwise copy it and then edit it.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
204 if (! isempty (path))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
205 fid = fopen (path, "r+t");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
206 if (fid < 0)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
207 from = path;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
208 path = strcat (FUNCTION.HOME, from (rindex (from, filesep):end))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
209 [status, msg] = copyfile (from, path, 1);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
210 if (status == 0)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
211 error (msg);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
212 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
213 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
214 fclose(fid);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
215 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
216 system (sprintf (FUNCTION.EDITOR, strcat ("\"", path, "\"")),
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
217 [], FUNCTION.MODE);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
218 return;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
219 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
220
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
221 ## If editing something other than a m-file or an oct-file, just
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
222 ## edit it.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
223 idx = rindex (file, filesep);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
224 if (idx != 0)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
225 path = file;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
226 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
227 path = fullfile (FUNCTION.HOME, file);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
228 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
229 idx = rindex (file, ".");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
230 name = file(1:idx-1);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
231 ext = file(idx+1:end);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
232 switch (ext)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
233 case { "cc", "m" }
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
234 0;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
235 otherwise
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
236 system (sprintf (FUNCTION.EDITOR, strcat ("\"", path, "\"")),
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
237 [], FUNCTION.MODE);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
238 return;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
239 endswitch
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
240
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
241 ## The file doesn't exist in path so create it, put in the function
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
242 ## template and edit it.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
243
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
244 ## Guess the email name if it was not given.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
245 if (isempty (FUNCTION.EMAIL))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
246 host = getenv("HOSTNAME");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
247 if (isempty (host) && ispc ())
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
248 host = getenv ("COMPUTERNAME");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
249 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
250 if (isempty (host))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
251 [status, host] = system ("uname -n");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
252 ## trim newline from end of hostname
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
253 if (! isempty (host))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
254 host = host(1:end-1);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
255 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
256 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
257 if (isempty (host))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
258 FUNCTION.EMAIL = " ";
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
259 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
260 FUNCTION.EMAIL = strcat ("<", default_user(0), "@", host, ">");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
261 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
262 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
263
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
264 ## Fill in the revision string.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
265 now = localtime (time);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
266 revs = strcat (strftime ("%Y-%m-%d", now), " ", FUNCTION.AUTHOR, " ",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
267 FUNCTION.EMAIL, "\n* Initial revision");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
268
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
269 ## Fill in the copyright string.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
270 copyright = strcat (strftime ("Copyright (C) %Y ", now), FUNCTION.AUTHOR);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
271
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
272 ## Fill in the author tag field.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
273 author = strcat ("Author: ", FUNCTION.AUTHOR, " ", FUNCTION.EMAIL);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
274
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
275 ## Fill in the header.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
276 uclicense = toupper (FUNCTION.LICENSE);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
277 switch (uclicense)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
278 case "GPL"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
279 head = strcat (copyright, "\n\n", "\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
280 This program is free software; you can redistribute it and/or modify\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
281 it under the terms of the GNU General Public License as published by\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
282 the Free Software Foundation; either version 2 of the License, or\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
283 (at your option) any later version.\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
284 \n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
285 This program is distributed in the hope that it will be useful,\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
286 but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
287 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
288 GNU General Public License for more details.\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
289 \n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
290 You should have received a copy of the GNU General Public License\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
291 along with this program; if not, write to the Free Software\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
292 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
293 ");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
294 tail = strcat (author, "\n\n", revs);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
295
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
296 case "BSD"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
297 head = strcat (copyright, "\n\n", "\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
298 This program is free software; redistribution and use in source and\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
299 binary forms, with or without modification, are permitted provided that\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
300 the following conditions are met:\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
301 \n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
302 1.Redistributions of source code must retain the above copyright\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
303 notice, this list of conditions and the following disclaimer.\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
304 2.Redistributions in binary form must reproduce the above copyright\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
305 notice, this list of conditions and the following disclaimer in the\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
306 documentation and/or other materials provided with the distribution.\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
307 \n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
308 THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
309 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
310 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
311 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
312 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
313 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
314 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
315 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
316 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
317 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
318 SUCH DAMAGE.\
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
319 ");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
320 tail = strcat (author, "\n\n", revs);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
321
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
322 case "PD"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
323 head = "";
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
324 tail = strcat (author, "\n\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
325 "This program is granted to the public domain\n\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
326 revs);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
327
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
328 otherwise
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
329 head = "";
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
330 tail = strcat (copyright, "\n\n", FUNCTION.LICENSE, "\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
331 author, "\n\n", revs);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
332 endswitch
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
333
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
334 ## Generate the function template.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
335 exists = exist (name);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
336 switch (ext)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
337 case {"cc", "C", "cpp"}
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
338 if (isempty (head))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
339 comment = strcat ("/*\n", tail, "\n\n*/\n\n");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
340 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
341 comment = strcat ("/*\n", head, "\n\n", tail, "\n\n*/\n\n");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
342 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
343 ## If we are shadowing an m-file, paste the code for the m-file.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
344 if (any (exists == [2, 103]))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
345 code = strcat ("\\ ", strrep (type (name), "\n", "\n// "));
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
346 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
347 code = " ";
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
348 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
349 body = strcat ("#include <octave/oct.h>\n\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
350 "DEFUN_DLD(", name, ",args,nargout,\"\\\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
351 name, "\\n\\\n\")\n{\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
352 " octave_value_list retval;\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
353 " int nargin = args.length();\n\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
354 code, "\n return retval;\n}\n");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
355
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
356 text = strcat (comment, body);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
357 case "m"
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
358 ## If we are editing a function defined on the fly, paste the
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
359 ## code.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
360 if (any (exists == [2, 103]))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
361 body = type (name);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
362 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
363 body = strcat ("function [ ret ] = ", name, " ()\n\nendfunction\n");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
364 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
365 if (isempty (head))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
366 comment = strcat ("## ", name, "\n\n",
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
367 "## ", strrep (tail, "\n", "\n## "), "\n\n");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
368 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
369 comment = strcat ("## ", strrep(head,"\n","\n## "), "\n\n", ...
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
370 "## ", name, "\n\n", ...
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
371 "## ", strrep (tail, "\n", "\n## "), "\n\n");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
372 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
373 text = strcat (comment, body);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
374 endswitch
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
375
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
376 ## Write the initial file (if there is anything to write)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
377 fid = fopen (path, "wt");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
378 if (fid < 0)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
379 error ("edit: could not create %s", path);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
380 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
381 fputs (fid, text);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
382 fclose (fid);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
383
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
384 ## Finally we are ready to edit it!
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
385 system (sprintf (FUNCTION.EDITOR, strcat ("\"", path, "\"")),
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
386 [], FUNCTION.MODE);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
387
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
388 endfunction
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
389
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
390 function ret = default_home ()
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
391
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
392 ret = getenv ("HOME");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
393 if (isempty (ret))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
394 ret = glob ("~");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
395 if (! isempty (ret))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
396 ret = ret{1};
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
397 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
398 ret = "";
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
399 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
400 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
401
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
402 endfunction
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
403
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
404 ## default_user (form)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
405 ## Returns the name associated with the current user ID.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
406 ##
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
407 ## If form==1 return the full name. This will be the
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
408 ## default author. If form==0 return the login name.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
409 ## login@host will be the default email address.
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
410
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
411 function ret = default_user (long_form)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
412
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
413 ent = getpwuid (getuid);
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
414 if (! isstruct (ent))
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
415 ret = getenv ("USER");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
416 if (isempty ())
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
417 ret = getenv ("USERNAME");
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
418 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
419 elseif (long_form)
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
420 ret = ent.gecos;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
421 else
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
422 ret = ent.name;
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
423 endif
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
424
67aef14de9c2 [project @ 2007-12-19 20:21:11 by jwe]
jwe
parents:
diff changeset
425 endfunction