annotate src/defun.h @ 3557:2e5d35d7f60c

[project @ 2000-02-03 04:41:08 by jwe]
author jwe
date Thu, 03 Feb 2000 04:41:08 +0000
parents b80bbb43a1a9
children b65077dfa1b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
1 /*
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
2
2847
8b262e771614 [project @ 1997-03-27 16:18:26 by jwe]
jwe
parents: 2432
diff changeset
3 Copyright (C) 1996, 1997 John W. Eaton
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
4
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
6
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
10 later version.
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
11
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
15 for more details.
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
16
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1009
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
20
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
21 */
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
22
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
23 #if !defined (octave_defun_h)
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
24 #define octave_defun_h 1
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
25
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
26 #if defined (octave_defun_dld_h)
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
27 #error defun.h and defun-dld.h both included in same file!
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
28 #endif
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
29
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
30 #include "defun-int.h"
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
31
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
32 // Define a builtin variable.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
33 //
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
34 // name is the name of the variable, unquoted.
1340
02145fb69a5b [project @ 1995-08-31 22:09:37 by jwe]
jwe
parents: 1315
diff changeset
35 //
02145fb69a5b [project @ 1995-08-31 22:09:37 by jwe]
jwe
parents: 1315
diff changeset
36 // defn is the initial value for the variable.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
37 //
1340
02145fb69a5b [project @ 1995-08-31 22:09:37 by jwe]
jwe
parents: 1315
diff changeset
38 // protect is a flag that says whether it should be possible to give
02145fb69a5b [project @ 1995-08-31 22:09:37 by jwe]
jwe
parents: 1315
diff changeset
39 // the variable a new value.
02145fb69a5b [project @ 1995-08-31 22:09:37 by jwe]
jwe
parents: 1315
diff changeset
40 //
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
41 // eternal is a flag that says whether it should be possible to
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
42 // clear the variable. Most builtin variables are eternal, and
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
43 // cannot be cleared.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
44 //
3005
fd2080b2800e [project @ 1997-05-24 17:37:39 by jwe]
jwe
parents: 2968
diff changeset
45 // chg_fcn is a pointer to a function that should be called whenever
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
46 // this variable is given a new value. It can be 0 if there is no
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
47 // function to call. See also the code in user-prefs.cc.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
48 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
49 // doc is the simple help text for this variable.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
50
3258
4964d5391acc [project @ 1999-07-21 21:51:33 by jwe]
jwe
parents: 3249
diff changeset
51 #define DEFVAR(name, defn, chg_fcn, doc) \
4964d5391acc [project @ 1999-07-21 21:51:33 by jwe]
jwe
parents: 3249
diff changeset
52 DEFVAR_INTERNAL (#name, SBV_ ## name, defn, false, chg_fcn, doc)
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
53
3258
4964d5391acc [project @ 1999-07-21 21:51:33 by jwe]
jwe
parents: 3249
diff changeset
54 // Define a builtin constant `name' (which may be redefined, but will
4964d5391acc [project @ 1999-07-21 21:51:33 by jwe]
jwe
parents: 3249
diff changeset
55 // retain its original value when cleared) and also an alias to it
4964d5391acc [project @ 1999-07-21 21:51:33 by jwe]
jwe
parents: 3249
diff changeset
56 // called `__name__' (which may not be redefined).
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
57
3141
292ff0bf484b [project @ 1998-02-03 08:11:07 by jwe]
jwe
parents: 3005
diff changeset
58 #define DEFCONST(name, defn, doc) \
3321
6923abb04e16 [project @ 1999-10-26 18:15:30 by jwe]
jwe
parents: 3258
diff changeset
59 DEFCONST_INTERNAL (name, defn, doc)
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
60
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
61 // This one can be used when `name' cannot be used directly (if it is
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
62 // already defined as a macro). In that case, name is already a
3523
b80bbb43a1a9 [project @ 2000-02-02 10:25:52 by jwe]
jwe
parents: 3321
diff changeset
63 // quoted std::string, and the name of the structure has to be passed too.
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
64
3141
292ff0bf484b [project @ 1998-02-03 08:11:07 by jwe]
jwe
parents: 3005
diff changeset
65 #define DEFCONSTX(name, sname, defn, doc) \
3321
6923abb04e16 [project @ 1999-10-26 18:15:30 by jwe]
jwe
parents: 3258
diff changeset
66 DEFCONSTX_INTERNAL (name, sname, defn, doc)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
67
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
68 // Define a builtin function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
69 //
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
70 // name is the name of the function, unqouted.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
71 //
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
72 // args_name is the name of the octave_value_list variable used to pass
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
73 // the argument list to this function.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
74 //
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
75 // nargout_name is the name of the int variable used to pass the
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
76 // number of output arguments this function is expected to produce.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
77 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
78 // doc is the simple help text for the function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
79
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
80 #define DEFUN(name, args_name, nargout_name, doc) \
2890
42901f9a9266 [project @ 1997-04-28 01:44:22 by jwe]
jwe
parents: 2847
diff changeset
81 DEFUN_INTERNAL (name, args_name, nargout_name, false, doc)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
82
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
83 // Define a builtin text-style function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
84 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
85 // This is like DEFUN, except that it defines a function that can be
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
86 // called from the Octave language without using parenthesis to
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
87 // surround the arguments).
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
88
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
89 #define DEFUN_TEXT(name, args_name, nargout_name, doc) \
2890
42901f9a9266 [project @ 1997-04-28 01:44:22 by jwe]
jwe
parents: 2847
diff changeset
90 DEFUN_INTERNAL (name, args_name, nargout_name, true, doc)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
91
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
92 // Define a mapper function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
93 //
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
94 // name is the name of the function, unquoqted.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
95 //
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
96 // ch_map is a pointer to a function that should be called for
3249
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
97 // integer arguments that are expected to create integer results.
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
98 // (It's a kluge to handle character mappers like isalpha.)
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
99 //
3249
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
100 // d_b_map is a pointer to a function that should be called for real
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
101 // arguments that are expected to create bool results.
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
102 //
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
103 // c_b_map is a pointer to a function that should be called for
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
104 // complex arguments that are expected to create bool results.
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
105 //
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
106 // d_d_map is a pointer to a function that should be called for real
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
107 // arguments that are expected to create real results.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
108 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
109 // d_c_map is a pointer to a function that should be called for real
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
110 // arguments that are expected to create complex results.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
111 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
112 // c_c_map is a pointer to a function that should be called for
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
113 // complex arguments that are expected to create complex results.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
114 //
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
115 // lo is the lower bound of the range for which real arguments can
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
116 // become complex. (e.g., lo == -Inf for sqrt).
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
117 //
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
118 // hi is the upper bound of the range for which real arguments can
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
119 // become complex. (e.g., hi == 0 for sqrt).
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
120 //
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
121 // can_ret_cmplx_for_real is a flag that says whether this function
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
122 // can create a complex number given a real-valued argument
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
123 // (e.g., sqrt (-1)).
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
124 //
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
125 // doc is the simple help text for the function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
126
3249
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
127 #define DEFUN_MAPPER(name, ch_map, d_b_map, c_b_map, d_d_map, d_c_map, \
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
128 c_c_map, lo, hi, can_ret_cmplx_for_real, doc) \
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
129 DEFUN_MAPPER_INTERNAL(name, ch_map, d_b_map, c_b_map, d_d_map, d_c_map, \
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
130 c_c_map, lo, hi, can_ret_cmplx_for_real, doc)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
131
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
132 // Make alias another name for the existing function name. This macro
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
133 // must be used in the same file where name is defined, after the
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
134 // definition for name.
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
135
2374
67a18ae969d4 [project @ 1996-10-12 00:27:01 by jwe]
jwe
parents: 2089
diff changeset
136 #define DEFALIAS(name, alias) \
67a18ae969d4 [project @ 1996-10-12 00:27:01 by jwe]
jwe
parents: 2089
diff changeset
137 DEFALIAS_INTERNAL (name, alias)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
138
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
139 #endif
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
140
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
141 /*
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
142 ;;; Local Variables: ***
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
143 ;;; mode: C++ ***
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
144 ;;; End: ***
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
145 */