annotate examples/hello.cc @ 4960:ce01dbd7e026 ss-2-1-58

[project @ 2004-09-02 03:47:49 by jwe]
author jwe
date Thu, 02 Sep 2004 03:47:49 +0000
parents 286a3345aa8e
children 4270ded9ddc6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
1 // hello.cc -- example of a dynamically linked function for Octave.
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
2
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
3 // To use this file, your version of Octave must support dynamic
2153
dc829883f13a [project @ 1996-05-13 08:09:05 by jwe]
jwe
parents: 2152
diff changeset
4 // linking. To find out if it does, type the command
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
5 //
4128
919b2f6573ee [project @ 2002-10-25 20:36:14 by jwe]
jwe
parents: 3242
diff changeset
6 // octave_config_info ("ENABLE_DYNAMIC_LINKING")
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
7 //
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
8 // at the Octave prompt. Support for dynamic linking is included if
4128
919b2f6573ee [project @ 2002-10-25 20:36:14 by jwe]
jwe
parents: 3242
diff changeset
9 // this expression returns the string "true".
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
10 //
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
11 // To compile this file, type the command
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
12 //
2137
f9d5d427152d [project @ 1996-05-13 03:48:11 by jwe]
jwe
parents: 2134
diff changeset
13 // mkoctfile hello.cc
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
14 //
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
15 // at the shell prompt. The script mkoctfile should have been
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
16 // installed along with Octave. Running it will create a file called
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
17 // hello.oct that can be loaded by Octave. To test the hello.oct
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
18 // file, start Octave and type the command
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
19 //
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
20 // hello ("easy as", 1, 2, 3)
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
21 //
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
22 // at the Octave prompt. Octave should respond by printing
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
23 //
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
24 // Hello, world!
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
25 // easy as
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
26 // 1
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
27 // 2
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
28 // 3
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
29 // ans = 3
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
30
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
31 // Additional examples are available in the files in the src directory
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
32 // of the Octave distribution that use the macro DEFUN_DLD_BUILTIN.
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
33 // Currently, this includes the files
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
34 //
3045
d2046ca9a380 [project @ 1997-06-06 22:08:11 by jwe]
jwe
parents: 2217
diff changeset
35 // balance.cc fft.cc ifft.cc minmax.cc sort.cc
d2046ca9a380 [project @ 1997-06-06 22:08:11 by jwe]
jwe
parents: 2217
diff changeset
36 // chol.cc fft2.cc ifft2.cc pinv.cc svd.cc
d2046ca9a380 [project @ 1997-06-06 22:08:11 by jwe]
jwe
parents: 2217
diff changeset
37 // colloc.cc filter.cc inv.cc qr.cc syl.cc
d2046ca9a380 [project @ 1997-06-06 22:08:11 by jwe]
jwe
parents: 2217
diff changeset
38 // dassl.cc find.cc log.cc quad.cc
d2046ca9a380 [project @ 1997-06-06 22:08:11 by jwe]
jwe
parents: 2217
diff changeset
39 // det.cc fsolve.cc lsode.cc qzval.cc
d2046ca9a380 [project @ 1997-06-06 22:08:11 by jwe]
jwe
parents: 2217
diff changeset
40 // eig.cc givens.cc lu.cc rand.cc
d2046ca9a380 [project @ 1997-06-06 22:08:11 by jwe]
jwe
parents: 2217
diff changeset
41 // expm.cc hess.cc minmax.cc schur.cc
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
42 //
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
43 // The difference between DEFUN_DLD and DEFUN_DLD_BUILTIN is that
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
44 // DEFUN_DLD_BUILTIN can define a built-in function that is not
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
45 // dynamically loaded if the operating system does not support dynamic
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
46 // linking. To define your own dynamically linked functions you
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
47 // should use DEFUN_DLD.
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
48
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
49 #include <octave/config.h>
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
50
4399
286a3345aa8e [project @ 2003-05-01 03:00:28 by jwe]
jwe
parents: 4128
diff changeset
51 #include <iostream>
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
52
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
53 #include <octave/defun-dld.h>
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
54 #include <octave/error.h>
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
55 #include <octave/oct-obj.h>
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
56 #include <octave/pager.h>
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
57 #include <octave/symtab.h>
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
58 #include <octave/variables.h>
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
59
2152
e9ee6418f62d [project @ 1996-05-13 08:03:26 by jwe]
jwe
parents: 2142
diff changeset
60 // DEFUN_DLD and the macros that it depends on are defined in the
e9ee6418f62d [project @ 1996-05-13 08:03:26 by jwe]
jwe
parents: 2142
diff changeset
61 // files defun-dld.h, defun.h, and defun-int.h.
e9ee6418f62d [project @ 1996-05-13 08:03:26 by jwe]
jwe
parents: 2142
diff changeset
62
e9ee6418f62d [project @ 1996-05-13 08:03:26 by jwe]
jwe
parents: 2142
diff changeset
63 // Note that the third parameter (nargout) is not used, so it is
e9ee6418f62d [project @ 1996-05-13 08:03:26 by jwe]
jwe
parents: 2142
diff changeset
64 // omitted from the list of arguments to DEFUN_DLD in order to avoid
e9ee6418f62d [project @ 1996-05-13 08:03:26 by jwe]
jwe
parents: 2142
diff changeset
65 // the warning from gcc about an unused function parameter.
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
66
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
67 DEFUN_DLD (hello, args, ,
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
68 "[...] = hello (...)\n\
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
69 \n\
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
70 Print greeting followed by the values of all the arguments passed.\n\
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
71 Returns all arguments in reverse order.")
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
72 {
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
73 // The list of values to return. See the declaration in oct-obj.h
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
74
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
75 octave_value_list retval;
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
76
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
77 // This stream is normally connected to the pager.
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
78
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
79 octave_stdout << "Hello, world!\n";
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
80
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
81 // The arguments to this function are available in args.
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
82
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
83 int nargin = args.length ();
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
84
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
85 // The octave_value_list class is a zero-based array of octave_value
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
86 // objects. The declaration for the octave_value class is in the
3242
8c5ad0b49742 [project @ 1999-04-09 00:20:06 by jwe]
jwe
parents: 3045
diff changeset
87 // file ov.h. The print() method will send its output to
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
88 // octave_stdout, so it will also end up going through the pager.
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
89
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
90 for (int i = 0; i < nargin; i++)
2142
3dc97364d58e [project @ 1996-05-13 04:34:11 by jwe]
jwe
parents: 2137
diff changeset
91 {
3dc97364d58e [project @ 1996-05-13 04:34:11 by jwe]
jwe
parents: 2137
diff changeset
92 octave_value tmp = args (i);
3242
8c5ad0b49742 [project @ 1999-04-09 00:20:06 by jwe]
jwe
parents: 3045
diff changeset
93 tmp.print (octave_stdout);
2142
3dc97364d58e [project @ 1996-05-13 04:34:11 by jwe]
jwe
parents: 2137
diff changeset
94 retval (nargin-i-1) = tmp;
3dc97364d58e [project @ 1996-05-13 04:34:11 by jwe]
jwe
parents: 2137
diff changeset
95 }
2134
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
96
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
97 return retval;
f44d96f6ca9f [project @ 1996-05-13 03:23:50 by jwe]
jwe
parents:
diff changeset
98 }