~ubuntu-branches/ubuntu/saucy/libctl/saucy

« back to all changes in this revision

Viewing changes to base/ctl.h.in

  • Committer: Bazaar Package Importer
  • Author(s): Josselin Mouette
  • Date: 2006-05-01 20:25:01 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060501202501-lytbmb3oevyoqzxi
Tags: 3.0.1-1
* New upstream release (closes: #361676).
* Major rework of the debian/ directory. Switch to cdbs.
* Migrate Scheme files to a versioned location to allow several
  versions to be installed at once.
* Write a Makefile to put with the example.
* Update copyright, the library is now GPL.
* Use gfortran for the F77 wrappers.
* Standards-version is 3.7.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* libctl: flexible Guile-based control files for scientific software 
2
 
 * Copyright (C) 1998, 1999, 2000, 2001, 2002, Steven G. Johnson
3
 
 *
4
 
 * This library is free software; you can redistribute it and/or
5
 
 * modify it under the terms of the GNU Lesser General Public
6
 
 * License as published by the Free Software Foundation; either
7
 
 * version 2 of the License, or (at your option) any later version.
8
 
 *
9
 
 * This library is distributed in the hope that it will be useful,
10
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 
 * Lesser General Public License for more details.
13
 
 * 
14
 
 * You should have received a copy of the GNU Lesser General Public
15
 
 * License along with this library; if not, write to the
16
 
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
 
 * Boston, MA  02111-1307, USA.
18
 
 *
19
 
 * Steven G. Johnson can be contacted at stevenj@alum.mit.edu.
20
 
 */
21
 
 
22
 
#ifndef CTL_H
23
 
#define CTL_H
24
 
 
25
 
#include <guile/gh.h>
26
 
 
27
 
#ifdef __cplusplus
28
 
extern "C" {
29
 
#endif                          /* __cplusplus */
30
 
 
31
 
/**************************************************************************/
32
 
/* Configuration options (guessed by configure).
33
 
   We have to put them here, rather than in a private config.h file,
34
 
   because they need to be known by user ctl-io.c and main.c files. */
35
 
 
36
 
/* set to version string */
37
 
#undef LIBCTL_VERSION
38
 
#undef LIBCTL_MAJOR_VERSION
39
 
#undef LIBCTL_MINOR_VERSION
40
 
#undef LIBCTL_BUGFIX_VERSION
41
 
 
42
 
/* Define if you have the following functions */
43
 
#undef HAVE_GH_LOAD
44
 
#undef HAVE_GH_BOOL2SCM
45
 
#undef HAVE_GH_VECTOR_REF
46
 
#undef HAVE_GH_LIST_REF
47
 
#undef HAVE_GH_LENGTH
48
 
#undef HAVE_SCM_FLUSH_ALL_PORTS
49
 
#undef HAVE_SCM_MAKE_COMPLEX
50
 
#undef HAVE_SCM_VARIABLE_SET_X
51
 
#undef HAVE_SCM_C_LOOKUP
52
 
 
53
 
/* Define if you have the HAVE_SCM_COMPLEXP macro. */
54
 
#undef HAVE_SCM_COMPLEXP
55
 
 
56
 
/* Define if gh_lookup is not broken */
57
 
#undef GH_LOOKUP_OK
58
 
 
59
 
/**************************************************************************/
60
 
 
61
 
  /* Basic types: */
62
 
 
63
 
typedef int integer;
64
 
typedef double number;
65
 
typedef struct { number re, im; } cnumber; /* complex numbers! */
66
 
typedef short boolean;
67
 
typedef char *string;
68
 
typedef SCM list;
69
 
typedef SCM function;
70
 
typedef SCM object;
71
 
 
72
 
  /* define vector3 as a structure, not an array, so that it can
73
 
     be a function return value and so that simple assignment works. */
74
 
typedef struct { number x,y,z; } vector3;
75
 
 
76
 
  /* similarly for matrix3x3 */
77
 
typedef struct { vector3 c0, c1, c2; /* the columns */ } matrix3x3;
78
 
 
79
 
/* define complex equivalents: */
80
 
typedef struct { cnumber x,y,z; } cvector3;
81
 
typedef struct { cvector3 c0, c1, c2; /* the columns */ } cmatrix3x3;
82
 
 
83
 
/**************************************************************************/
84
 
 
85
 
#ifndef GH_LOOKUP_OK
86
 
#  define gh_lookup scm_symbol_value0
87
 
#endif
88
 
 
89
 
#ifndef HAVE_GH_LOAD
90
 
#  define gh_load gh_eval_file 
91
 
#endif
92
 
 
93
 
extern void ctl_include(char *filename);
94
 
extern char *ctl_fix_path(const char *path);
95
 
 
96
 
/**************************************************************************/
97
 
 
98
 
  /* vector3 and matrix3x3 utilities: */
99
 
 
100
 
extern number vector3_dot(vector3 v1,vector3 v2);
101
 
extern number vector3_norm(vector3 v);
102
 
extern vector3 vector3_scale(number s, vector3 v);
103
 
extern vector3 unit_vector3(vector3 v);
104
 
extern vector3 vector3_cross(vector3 v1,vector3 v2);
105
 
extern vector3 vector3_plus(vector3 v1,vector3 v2);
106
 
extern vector3 vector3_minus(vector3 v1,vector3 v2);
107
 
 
108
 
extern vector3 matrix3x3_vector3_mult(matrix3x3 m, vector3 v);
109
 
extern matrix3x3 matrix3x3_mult(matrix3x3 m1, matrix3x3 m2);
110
 
extern matrix3x3 matrix3x3_transpose(matrix3x3 m);
111
 
extern number matrix3x3_determinant(matrix3x3 m);
112
 
extern matrix3x3 matrix3x3_inverse(matrix3x3 m);
113
 
 
114
 
/**************************************************************************/
115
 
 
116
 
  /* complex number utilities */
117
 
 
118
 
 
119
 
extern cnumber make_cnumber(number r, number i);
120
 
extern cnumber cnumber_conj(cnumber c);
121
 
#define cnumber_re(c) ((c).re)
122
 
#define cnumber_im(c) ((c).im)
123
 
 
124
 
extern vector3 cvector3_re(cvector3 cv);
125
 
extern vector3 cvector3_im(cvector3 cv);
126
 
extern cvector3 make_cvector3(vector3 vr, vector3 vi);
127
 
 
128
 
extern matrix3x3 cmatrix3x3_re(cmatrix3x3 cm);
129
 
extern matrix3x3 cmatrix3x3_im(cmatrix3x3 cm);
130
 
extern cmatrix3x3 make_cmatrix3x3(matrix3x3 mr, matrix3x3 mi);
131
 
cmatrix3x3 make_hermitian_cmatrix3x3(number m00, number m11, number m22,
132
 
                                     cnumber m01, cnumber m02, cnumber m12);
133
 
 
134
 
/**************************************************************************/
135
 
 
136
 
  /* type conversion */
137
 
 
138
 
#ifndef HAVE_GH_BOOL2SCM
139
 
  /* Guile 1.2 is missing gh_bool2scm for some reason; redefine: */
140
 
extern SCM bool2scm(boolean);
141
 
#define gh_bool2scm bool2scm
142
 
#endif
143
 
 
144
 
extern vector3 scm2vector3(SCM sv);
145
 
extern SCM vector32scm(vector3 v);
146
 
extern matrix3x3 scm2matrix3x3(SCM sm);
147
 
extern SCM matrix3x32scm(matrix3x3 m);
148
 
 
149
 
extern cnumber scm2cnumber(SCM sx);
150
 
extern SCM cnumber2scm(cnumber x);
151
 
extern cvector3 scm2cvector3(SCM sv);
152
 
extern SCM cvector32scm(cvector3 v);
153
 
extern cmatrix3x3 scm2cmatrix3x3(SCM sm);
154
 
extern SCM cmatrix3x32scm(cmatrix3x3 m);
155
 
 
156
 
#define ctl_convert_number_to_scm(x) gh_double2scm(x)
157
 
#define ctl_convert_cnumber_to_scm(x) cnumber2scm(x)
158
 
#define ctl_convert_integer_to_scm(x) gh_int2scm(x)
159
 
#define ctl_convert_string_to_scm(x) gh_str02scm(x)
160
 
#define ctl_convert_boolean_to_scm(x) gh_bool2scm(x)
161
 
#define ctl_convert_vector3_to_scm(x) vector32scm(x)
162
 
#define ctl_convert_matrix3x3_to_scm(x) matrix3x32scm(x)
163
 
#define ctl_convert_cvector3_to_scm(x) cvector32scm(x)
164
 
#define ctl_convert_cmatrix3x3_to_scm(x) cmatrix3x32scm(x)
165
 
#define ctl_convert_SCM_to_scm(x) (x)
166
 
#define ctl_convert_function_to_scm(x) (x)
167
 
#define ctl_convert_object_to_scm(x) (x)
168
 
#define ctl_convert_list_to_scm(x) (x)
169
 
 
170
 
#define ctl_convert_number_to_c(x) gh_scm2double(x)
171
 
#define ctl_convert_cnumber_to_c(x) scm2cnumber(x)
172
 
#define ctl_convert_integer_to_c(x) gh_scm2int(x)
173
 
#define ctl_convert_string_to_c(x) gh_scm2newstr(x, 0)
174
 
#define ctl_convert_boolean_to_c(x) gh_scm2bool(x)
175
 
#define ctl_convert_vector3_to_c(x) scm2vector3(x)
176
 
#define ctl_convert_matrix3x3_to_c(x) scm2matrix3x3(x)
177
 
#define ctl_convert_cvector3_to_c(x) scm2cvector3(x)
178
 
#define ctl_convert_cmatrix3x3_to_c(x) scm2cmatrix3x3(x)
179
 
#define ctl_convert_SCM_to_c(x) (x)
180
 
#define ctl_convert_function_to_c(x) (x)
181
 
#define ctl_convert_object_to_c(x) (x)
182
 
#define ctl_convert_list_to_c(x) (x)
183
 
 
184
 
/**************************************************************************/
185
 
 
186
 
  /* variable get/set functions */
187
 
 
188
 
extern integer ctl_get_integer(char *identifier);
189
 
extern number ctl_get_number(char *identifier);
190
 
extern cnumber ctl_get_cnumber(char *identifier);
191
 
extern boolean ctl_get_boolean(char *identifier);
192
 
extern char* ctl_get_string(char *identifier);
193
 
extern vector3 ctl_get_vector3(char *identifier);
194
 
extern matrix3x3 ctl_get_matrix3x3(char *identifier);
195
 
extern cvector3 ctl_get_cvector3(char *identifier);
196
 
extern cmatrix3x3 ctl_get_cmatrix3x3(char *identifier);
197
 
extern list ctl_get_list(char *identifier);
198
 
extern object ctl_get_object(char *identifier);
199
 
extern function ctl_get_function(char *identifier);
200
 
extern SCM ctl_get_SCM(char *identifier);
201
 
 
202
 
extern void ctl_set_integer(char *identifier, integer value);
203
 
extern void ctl_set_number(char *identifier, number value);
204
 
extern void ctl_set_cnumber(char *identifier, cnumber value);
205
 
extern void ctl_set_boolean(char *identifier, boolean value);
206
 
extern void ctl_set_string(char *identifier, char *value);
207
 
extern void ctl_set_vector3(char *identifier, vector3 value);
208
 
extern void ctl_set_matrix3x3(char *identifier, matrix3x3 value);
209
 
extern void ctl_set_cvector3(char *identifier, cvector3 value);
210
 
extern void ctl_set_cmatrix3x3(char *identifier, cmatrix3x3 value);
211
 
extern void ctl_set_list(char *identifier, list value);
212
 
extern void ctl_set_object(char *identifier, object value);
213
 
extern void ctl_set_function(char *identifier, function value);
214
 
extern void ctl_set_SCM(char *identifier, SCM value);
215
 
 
216
 
/**************************************************************************/
217
 
 
218
 
  /* list traversal */
219
 
 
220
 
extern int list_length(list l);
221
 
extern integer integer_list_ref(list l, int index);
222
 
extern number number_list_ref(list l, int index);
223
 
extern cnumber cnumber_list_ref(list l, int index);
224
 
extern boolean boolean_list_ref(list l, int index);
225
 
extern char* string_list_ref(list l, int index);
226
 
extern vector3 vector3_list_ref(list l, int index);
227
 
extern matrix3x3 matrix3x3_list_ref(list l, int index);
228
 
extern cvector3 cvector3_list_ref(list l, int index);
229
 
extern cmatrix3x3 cmatrix3x3_list_ref(list l, int index);
230
 
extern list list_list_ref(list l, int index);
231
 
extern object object_list_ref(list l, int index);
232
 
extern function function_list_ref(list l, int index);
233
 
extern SCM SCM_list_ref(list l, int index);
234
 
 
235
 
/**************************************************************************/
236
 
 
237
 
  /* list creation */
238
 
 
239
 
extern list make_integer_list(int num_items, integer *items);
240
 
extern list make_number_list(int num_items, number *items);
241
 
extern list make_cnumber_list(int num_items, cnumber *items);
242
 
extern list make_boolean_list(int num_items, boolean *items);
243
 
extern list make_string_list(int num_items, char **items);
244
 
extern list make_vector3_list(int num_items, vector3 *items);
245
 
extern list make_matrix3x3_list(int num_items, matrix3x3 *items);
246
 
extern list make_cvector3_list(int num_items, cvector3 *items);
247
 
extern list make_cmatrix3x3_list(int num_items, cmatrix3x3 *items);
248
 
extern list make_list_list(int num_items, list *items);
249
 
extern list make_object_list(int num_items, object *items);
250
 
extern list make_function_list(int num_items, function *items);
251
 
extern list make_SCM_list(int num_items, function *items);
252
 
 
253
 
/**************************************************************************/
254
 
 
255
 
  /* object properties */
256
 
 
257
 
boolean object_is_member(char *type_name, object o);
258
 
 
259
 
extern integer integer_object_property(object o, char *property_name);
260
 
extern number number_object_property(object o, char *property_name);
261
 
extern cnumber cnumber_object_property(object o, char *property_name);
262
 
extern boolean boolean_object_property(object o, char *property_name);
263
 
extern char* string_object_property(object o, char *property_name);
264
 
extern vector3 vector3_object_property(object o, char *property_name);
265
 
extern matrix3x3 matrix3x3_object_property(object o, char *property_name);
266
 
extern cvector3 cvector3_object_property(object o, char *property_name);
267
 
extern cmatrix3x3 cmatrix3x3_object_property(object o, char *property_name);
268
 
extern list list_object_property(object o, char *property_name);
269
 
extern object object_object_property(object o, char *property_name);
270
 
extern function function_object_property(object o, char *property_name);
271
 
extern SCM SCM_object_property(object o, char *property_name);
272
 
 
273
 
/**************************************************************************/
274
 
 
275
 
/* main() hook functions.  These are prototypes of functions
276
 
   defined by the USER and called just before the program starts
277
 
   and just before it ends, respectively.  If you want to define
278
 
   them, you should also define HAVE_CTL_HOOKS when compiling main.c.
279
 
   
280
 
   Note that due to the behavior of the Guile interactive mode, 
281
 
   ctl_stop_hook will only get called in non-interactive mode.  Sigh. */
282
 
 
283
 
extern void ctl_start_hook(int *argc, char ***argv);
284
 
extern void ctl_stop_hook(void);
285
 
 
286
 
/**************************************************************************/
287
 
 
288
 
  /* subplex multi-dimensional minimization routines: */
289
 
 
290
 
typedef number (*subplex_func) (integer, number *, void *);
291
 
 
292
 
extern number subplex(subplex_func f, number *x, integer n, void *fdata,
293
 
                      number tol, integer maxnfe,       
294
 
                      number fmin, boolean use_fmin,
295
 
                      number *scale,    
296
 
                      integer *nfe, integer *errflag);
297
 
extern SCM subplex_scm(SCM f_scm, SCM x_scm,
298
 
                       SCM tol_scm, SCM maxnfe_scm,
299
 
                       SCM fmin_scm, SCM use_fmin_scm,
300
 
                       SCM scale_scm);
301
 
 
302
 
/**************************************************************************/
303
 
 
304
 
#ifdef __cplusplus
305
 
           }                               /* extern "C" */
306
 
#endif                          /* __cplusplus */
307
 
 
308
 
#endif /* CTL_H */