File: plplot_core.idl

package info (click to toggle)
plplot 5.15.0%2Bdfsg-19
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 31,312 kB
  • sloc: ansic: 79,707; xml: 28,583; cpp: 20,033; ada: 19,456; tcl: 12,081; f90: 11,431; ml: 7,276; java: 6,863; python: 6,792; sh: 3,274; perl: 828; lisp: 75; makefile: 50; sed: 34; fortran: 5
file content (373 lines) | stat: -rw-r--r-- 13,673 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
// Copyright 2007, 2008, 2009, 2010, 2011 Hezekiah M. Carty
// Copyright 2018 Alan W. Irwin

// This file is part of ocaml-plplot.

// ocaml-plplot is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.

// ocaml-plplot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.

// You should have received a copy of the GNU Lesser General Public License
// along with ocaml-plplot.  If not, see <http://www.gnu.org/licenses/>.


// Taken from the plplot.h 3D plot style definitions
enum plplot3d_style_enum {
    PL_DIFFUSE = 0,
    PL_DRAW_LINEX = 1,
    PL_DRAW_LINEY = 2,
    PL_DRAW_LINEXY = 3,
    PL_MAG_COLOR = 4,
    PL_BASE_CONT = 8,
    PL_TOP_CONT = 16,
    PL_SURF_CONT = 32,
    PL_DRAW_SIDES = 64,
    PL_FACETED = 128,
    PL_MESH = 256
};
typedef [set] enum plplot3d_style_enum plplot3d_style;

enum plplot_bin_enum {
    PL_BIN_DEFAULT = 0,
    PL_BIN_CENTRED = 1,
    PL_BIN_NOEXPAND = 2,
    PL_BIN_NOEMPTY = 4,
};
typedef [set] enum plplot_bin_enum plplot_bin_style;

enum plplot_hist_enum {
    PL_HIST_DEFAULT = 0,
    PL_HIST_NOSCALING = 1,
    PL_HIST_IGNORE_OUTLIERS = 2,
    PL_HIST_NOEXPAND = 8,
    PL_HIST_NOEMPTY = 16,
};
typedef [set] enum plplot_hist_enum plplot_hist_style;

enum plplot_run_level_enum {
    PL_UNINITIALIZED = 0,
    PL_INITIALIZED = 1,
    PL_VIEWPORT_DEFINED = 2,
    PL_WORLD_COORDINATES_DEFINED = 3,
};
typedef enum plplot_run_level_enum plplot_run_level;

enum plplot_position_enum {
    PL_POSITION_NULL = 0x0,
    PL_POSITION_LEFT = 0x1,
    PL_POSITION_RIGHT = 0x2,
    PL_POSITION_TOP = 0x4,
    PL_POSITION_BOTTOM = 0x8,
    PL_POSITION_INSIDE = 0x10,
    PL_POSITION_OUTSIDE = 0x20,
    PL_POSITION_VIEWPORT = 0x40,
    PL_POSITION_SUBPAGE = 0x80,
};
typedef [set] enum plplot_position_enum plplot_position_opt;

enum plplot_legend_enum {
    PL_LEGEND_NULL = 0x0,
    PL_LEGEND_NONE = 0x1,
    PL_LEGEND_COLOR_BOX = 0x2,
    PL_LEGEND_LINE = 0x4,
    PL_LEGEND_SYMBOL = 0x8,
    PL_LEGEND_TEXT_LEFT = 0x10,
    PL_LEGEND_BACKGROUND = 0x20,
    PL_LEGEND_BOUNDING_BOX = 0x40,
    PL_LEGEND_ROW_MAJOR = 0x80,
};
typedef [set] enum plplot_legend_enum plplot_legend_opt;

enum plplot_colorbar_enum {
    PL_COLORBAR_NULL = 0x0,
    PL_COLORBAR_LABEL_LEFT = 0x1,
    PL_COLORBAR_LABEL_RIGHT = 0x2,
    PL_COLORBAR_LABEL_TOP = 0x4,
    PL_COLORBAR_LABEL_BOTTOM = 0x8,
    PL_COLORBAR_IMAGE = 0x10,
    PL_COLORBAR_SHADE = 0x20,
    PL_COLORBAR_GRADIENT = 0x40,
    PL_COLORBAR_CAP_NONE = 0x80,
    PL_COLORBAR_CAP_LOW = 0x100,
    PL_COLORBAR_CAP_HIGH = 0x200,
    PL_COLORBAR_SHADE_LABEL = 0x400,
    PL_COLORBAR_ORIENT_RIGHT = 0x800,
    PL_COLORBAR_ORIENT_TOP = 0x1000,
    PL_COLORBAR_ORIENT_LEFT = 0x2000,
    PL_COLORBAR_ORIENT_BOTTOM = 0x4000,
    PL_COLORBAR_BACKGROUND = 0x8000,
    PL_COLORBAR_BOUNDING_BOX = 0x10000,
};
typedef [set] enum plplot_colorbar_enum plplot_colorbar_opt;

enum plplot_fci_family_enum {
    // = These are legal values for font family attribute
    PL_FCI_FAMILY_UNCHANGED = -1,
    PL_FCI_SANS = 0x0,
    PL_FCI_SERIF = 0x1,
    PL_FCI_MONO = 0x2,
    PL_FCI_SCRIPT = 0x3,
    PL_FCI_SYMBOL = 0x4
};
enum plplot_fci_style_enum {
    // = These are legal values for font style attribute
    PL_FCI_STYLE_UNCHANGED = -1,
    PL_FCI_UPRIGHT = 0x0,
    PL_FCI_ITALIC = 0x1,
    PL_FCI_OBLIQUE = 0x2
};
enum plplot_fci_weight_enum {
    // = These are legal values for font weight attribute
    PL_FCI_WEIGHT_UNCHANGED = -1,
    PL_FCI_MEDIUM = 0x0,
    PL_FCI_BOLD = 0x1
};

enum plplot_draw_mode_enum {
    // Flags for drawing mode
    PL_DRAWMODE_UNKNOWN = 0x0,
    PL_DRAWMODE_DEFAULT = 0x1,
    PL_DRAWMODE_REPLACE = 0x2,
    PL_DRAWMODE_XOR = 0x4
};

// Any function which has a nonzero_error_int return type will raise
// an Invalid_argument error if the return value is <> 0.
typedef [errorcheck(plplot_check_nonzero_result), errorcode] int nonzero_error_int;

// Include the prototype for this to avoid implicit declaration warnings
quote(h, "void plplot_check_nonzero_result(int result);");

// This is a simplified and modified version of the plplot.h file.
#include "plplot_h.inc"

// MAINTENANCE 2017-10: These argument #defines are copied from plplot_h.
// Not all of them are used below.
#define PLFLT double
#define PLUNICODE long long
#define PLINT int
#define PLBOOL boolean
#define PLCHAR_VECTOR const char *
#define PLCHAR_NC_VECTOR char *
#define PLFLT_NC_SCALAR double *
#define PLFLT_VECTOR double *
#define PLFLT_MATRIX double **
#define PLUNICODE_NC_SCALAR long long *
#define PLINT_NC_SCALAR int *
#define PLINT_VECTOR int *
#define PLDLLIMPEXP
#define PLBOOL_NC_SCALAR boolean *
#define PLBOOL_VECTOR boolean *


// These functions require(d) some manual assistance to get them to work
// properly

[mlname(plcont)] void ml_plcont(
    [size_is(nx,ny)] PLFLT_MATRIX f, PLINT nx, PLINT ny,
    PLINT kx, PLINT lx, PLINT ky, PLINT ly,
    [size_is(nlevel)] PLFLT_VECTOR clevel, PLINT nlevel);

[mlname(plshade)] void ml_plshade(
    [size_is(nx,ny)] PLFLT_MATRIX a, PLINT nx, PLINT ny,
    PLFLT left, PLFLT right, PLFLT bottom, PLFLT top,
    PLFLT shade_min, PLFLT shade_max,
    PLINT sh_cmap, PLFLT sh_color, PLFLT sh_width,
    PLINT min_color, PLFLT min_width,
    PLINT max_color, PLFLT max_width,
    PLBOOL rectangular);

[mlname(plshades)] void ml_plshades(
    [size_is(nx,ny)] PLFLT_MATRIX a, PLINT nx, PLINT ny,
    PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax,
    [size_is(nlevel)] PLFLT_VECTOR clevel, PLINT nlevel, PLFLT fill_width,
    PLINT cont_color, PLFLT cont_width,
    PLBOOL rectangular);

[mlname(plimagefr)] void ml_plimagefr(
    [size_is(nx, ny)] PLFLT_MATRIX idata, PLINT nx, PLINT ny,
    PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax,
    PLFLT zmin, PLFLT zmax,
    PLFLT valuemin, PLFLT valuemax);

[mlname(plvect)] void ml_plvect(
    [size_is(nx,ny)] PLFLT_MATRIX u, [size_is(nx,ny)] PLFLT_MATRIX v,
    PLINT nx, PLINT ny, PLFLT scale);

[mlname(plmap)] void ml_plmap(
    [string] PLCHAR_VECTOR name,
    PLFLT minx, PLFLT maxx, PLFLT miny, PLFLT maxy);

[mlname(plmapline)] void ml_plmapline(
    [string] PLCHAR_VECTOR name,
    PLFLT minx, PLFLT maxx, PLFLT miny, PLFLT maxy,
    [size_is(nplotentries)] PLINT_VECTOR plotentries, PLINT nplotentries);

[mlname(plmapstring)] void ml_plmapstring(
    [string] PLCHAR_VECTOR name,  [string] PLCHAR_VECTOR string,
    PLFLT minx, PLFLT maxx, PLFLT miny, PLFLT maxy,
    [size_is(nplotentries)] PLINT_VECTOR plotentries, PLINT nplotentries);

[mlname(plmaptex)] void ml_plmaptex(
    [string] PLCHAR_VECTOR name, PLFLT dx, PLFLT dy, PLFLT just, [string] PLCHAR_VECTOR text,
    PLFLT minx, PLFLT maxx, PLFLT miny, PLFLT maxy,
    PLINT plotentry);

[mlname(plmapfill)] void ml_plmapfill(
    [string] PLCHAR_VECTOR name,
    PLFLT minx, PLFLT maxx, PLFLT miny, PLFLT maxy,
    [size_is(nplotentries)] PLINT_VECTOR plotentries, PLINT nplotentries);

[mlname(plmeridians)] void ml_plmeridians(
    PLFLT dlong, PLFLT dlat,
    PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat);

[mlname(plpoly3)] void ml_plpoly3(
    PLINT n, [size_is(n)] PLFLT_VECTOR x, [size_is(n)] PLFLT_VECTOR y, [size_is(n)] PLFLT_VECTOR z,
    PLINT ndraw, [size_is(ndraw)] PLBOOL_VECTOR draw, PLBOOL ifcc);

// The following are for the pltr functions
[mlname(pltr0)] void ml_pltr0(
    PLFLT x, PLFLT y, [out] PLFLT_VECTOR tx, [out] PLFLT_VECTOR ty);

// XXX The following are non-standard functions
[mlname(plsvect_reset)] void ml_plsvect_reset(void);
int plg_current_col0(void);
PLFLT plg_current_col1(void);
PLFLT plgwidth(void);
PLFLT plgchrht(void);

#define QUOTEME(x) #x
#define RAW_ML(x) quote(mlmli, QUOTEME(x));

// plstripc function
quote(mlmli,
    "external plstripc : string -> string -> float -> float -> float -> float -> \
                         float -> float -> float -> bool -> bool -> int -> int -> \
                         int array -> int array -> string array -> string -> \
                         string -> string -> int = \"ml_plstripc_byte\" \"ml_plstripc\"");

// pltr callback functions, hand-wrapped
quote(mlmli,
    "external pltr1 : float array -> float array -> float -> float -> float * float \
    = \"ml_pltr1\"");
quote(mlmli,
    "external pltr2 : float array array -> float array array -> float -> float -> float * float \
    = \"ml_pltr2\"");

// Setting the translation function for the contouring and plotting functions
quote(ml,
    "let plset_pltr (f : float -> float -> (float * float)) =\
     Callback.register \"caml_plplot_plotter\" f");
quote(mli, "val plset_pltr : (float -> float -> (float * float)) -> unit");
quote(ml, "let plunset_pltr () = Callback.register \"caml_plplot_plotter\" 0");
quote(mli, "val plunset_pltr : unit -> unit");

// Setting the translation function for the map drawing functions
quote(ml,
    "let plset_mapform (f : float -> float -> (float * float)) =\
     Callback.register \"caml_plplot_mapform\" f");
quote(mli, "val plset_mapform : (float -> float -> (float * float)) -> unit");
quote(ml,
    "let plunset_mapform () = Callback.register \"caml_plplot_mapform\" 0");
quote(mli, "val plunset_mapform : unit -> unit");

// Setting the "defined" function for the shading functions
quote(ml,
"let plset_defined (f : float -> float -> int) =\
  Callback.register \"caml_plplot_defined\" f");
quote(mli, "val plset_defined : (float -> float -> int) -> unit");
quote(ml,
    "let plunset_defined () = Callback.register \"caml_plplot_defined\" 0");
quote(mli, "val plunset_defined : unit -> unit");

// Setting the translation function for the global coordinate transform
quote(ml, "external ml_plstransform : unit -> unit = \"ml_plstransform\"");
quote(ml,
    "let plstransform (f : float -> float -> (float * float)) =\
     Callback.register \"caml_plplot_transform\" f;\
     ml_plstransform ()");
quote(mli, "val plstransform : (float -> float -> (float * float)) -> unit");
quote(ml,
    "let plunset_transform () =\
    Callback.register \"caml_plplot_transform\" 0;\
    ml_plstransform ()");
quote(mli, "val plunset_transform : unit -> unit");

// Hand-translated PL_GRID_* flags for use with plgriddata
quote(mlmli, "type plplot_grid_method_type = \
                PL_GRID_CSA | \
                PL_GRID_DTLI | \
                PL_GRID_NNI | \
                PL_GRID_NNIDW | \
                PL_GRID_NNLI | \
                PL_GRID_NNAIDW");

// Hand-translated PL_PARSE_* flags for use with plparseopts
quote(mlmli, "type plplot_parse_method_type = \
                PL_PARSE_PARTIAL | \
                PL_PARSE_FULL | \
                PL_PARSE_QUIET | \
                PL_PARSE_NODELETE | \
                PL_PARSE_SHOWALL | \
                PL_PARSE_OVERRIDE | \
                PL_PARSE_NOPROGRAM | \
                PL_PARSE_NODASH | \
                PL_PARSE_SKIP");

// Data type to reference axes
quote(mlmli, "type plplot_axis_type = \
                PL_X_AXIS | \
                PL_Y_AXIS | \
                PL_Z_AXIS");

// Custom axis labeling
quote(ml, "external ml_plslabelfunc : unit -> unit = \"ml_plslabelfunc\"");
quote(ml,
"let plslabelfunc (f : plplot_axis_type -> float -> string) =\
  Callback.register \"caml_plplot_customlabel\" f;\
  ml_plslabelfunc ()");
quote(mli, "val plslabelfunc : (plplot_axis_type -> float -> string) -> unit");
quote(ml,
"let plunset_labelfunc () =\
  Callback.register \"caml_plplot_customlabel\" 0;\
  ml_plslabelfunc ()");
quote(mli, "val plunset_labelfunc : unit -> unit");

// Custom plabort handling
quote(ml, "external ml_plsabort : unit -> unit = \"ml_plsabort\"");
quote(ml,
"let plsabort (f : string -> unit) =\
  Callback.register \"caml_plplot_abort\" f;\
  ml_plsabort ()");
quote(mli, "val plsabort : (string -> unit) -> unit");
quote(ml,
"let plunset_abort () =\
  Callback.register \"caml_plplot_abort\" 0;\
  ml_plsabort ()");
quote(mli, "val plunset_abort : unit -> unit");

// Custom plexit handling
quote(ml, "external ml_plsexit : unit -> unit = \"ml_plsexit\"");
quote(ml,
"let plsexit (f : string -> int) =\
  Callback.register \"caml_plplot_exit\" f;\
  ml_plsexit ()");
quote(mli, "val plsexit : (string -> int) -> unit");
quote(ml,
"let plunset_exit () =\
  Callback.register \"caml_plplot_exit\" 0;\
  ml_plsexit ()");
quote(mli, "val plunset_exit : unit -> unit");

RAW_ML(external plgriddata : float array -> float array -> float array -> float array -> float array -> plplot_grid_method_type -> float -> float array array = "ml_plgriddata_bytecode" "ml_plgriddata")
RAW_ML(external plparseopts : string array -> plplot_parse_method_type list -> unit = "ml_plparseopts")
RAW_ML(external pllegend : plplot_legend_opt -> plplot_position_opt -> float -> float -> float -> int -> int -> int -> int -> int -> plplot_legend_opt array -> float -> float -> float -> float -> int array -> string array -> int array -> int array -> float array -> float array -> int array -> int array -> float array -> int array -> float array -> int array -> string array -> float * float = "ml_pllegend_byte" "ml_pllegend")
RAW_ML(external plcolorbar : plplot_colorbar_opt -> plplot_position_opt -> float -> float -> float -> float -> int -> int -> int -> float -> float -> int -> float -> plplot_colorbar_opt array -> string array -> string array -> float array -> int array -> float array array -> float * float = "ml_plcolorbar_byte" "ml_plcolorbar")