21 #include <caml/alloc.h>
22 #include <caml/callback.h>
23 #include <caml/fail.h>
24 #include <caml/memory.h>
25 #include <caml/misc.h>
26 #include <caml/mlvalues.h>
27 #include <caml/bigarray.h>
36 #define MAX_EXCEPTION_MESSAGE_LENGTH 1000
37 #define CAML_PLPLOT_PLOTTER_FUNC_NAME "caml_plplot_plotter"
38 #define CAML_PLPLOT_MAPFORM_FUNC_NAME "caml_plplot_mapform"
39 #define CAML_PLPLOT_DEFINED_FUNC_NAME "caml_plplot_defined"
40 #define CAML_PLPLOT_LABEL_FUNC_NAME "caml_plplot_customlabel"
41 #define CAML_PLPLOT_ABORT_FUNC_NAME "caml_plplot_abort"
42 #define CAML_PLPLOT_EXIT_FUNC_NAME "caml_plplot_exit"
43 #define CAML_PLPLOT_TRANSFORM_FUNC_NAME "caml_plplot_transform"
66 static value * pltr = NULL;
73 caml_callback2( *pltr, caml_copy_double( x ), caml_copy_double( y ) );
75 new_x = Double_val( Field( result, 0 ) );
76 new_y = Double_val( Field( result, 1 ) );
98 static value * defined = NULL;
99 if ( defined == NULL )
105 caml_callback2( *defined, caml_copy_double( x ), caml_copy_double( y ) );
106 is_it_defined = Int_val( result );
108 CAMLreturn( is_it_defined );
117 CAMLlocal1( result );
121 if ( mapform == NULL )
127 for ( i = 0; i < n; i++ )
130 caml_callback2( *mapform,
131 caml_copy_double( x[i] ), caml_copy_double( y[i] ) );
134 new_x = Double_val( Field( result, 0 ) );
135 new_y = Double_val( Field( result, 1 ) );
149 CAMLlocal1( result );
152 static value * callback = NULL;
153 if ( callback == NULL )
159 caml_callback2( *callback, Val_int( axis - 1 ), caml_copy_double( n ) );
162 snprintf( label, length,
"%s", String_val( result ) );
171 CAMLlocal1( result );
174 static value * handler = NULL;
175 if ( handler == NULL )
181 caml_callback( *handler, caml_copy_string( message ) );
190 CAMLlocal1( result );
193 static value * handler = NULL;
194 if ( handler == NULL )
200 caml_callback( *handler, caml_copy_string( message ) );
202 CAMLreturn( Int_val( result ) );
211 CAMLlocal1( result );
214 static value * transform = NULL;
215 if ( transform == NULL )
221 caml_callback2( *transform, caml_copy_double( x ), caml_copy_double( y ) );
223 *xt = Double_val( Field( result, 0 ) );
224 *yt = Double_val( Field( result, 1 ) );
233 static value * pltr = NULL;
237 if ( pltr == NULL || Val_int( 0 ) == *pltr )
250 static value * defined = NULL;
251 if ( defined == NULL )
254 if ( defined == NULL || Val_int( 0 ) == *defined )
268 if ( mapform == NULL )
271 if ( mapform == NULL || Val_int( 0 ) == *mapform )
287 static value * label = NULL;
291 if ( label == NULL || Val_int( 0 ) == *label )
302 CAMLreturn( Val_unit );
309 static value * handler = NULL;
310 if ( handler == NULL )
313 if ( handler == NULL || Val_int( 0 ) == *handler )
323 CAMLreturn( Val_unit );
328 static value * handler = NULL;
329 if ( handler == NULL )
332 if ( handler == NULL || Val_int( 0 ) == *handler )
342 CAMLreturn( Val_unit );
349 static value * handler = NULL;
350 if ( handler == NULL )
353 if ( handler == NULL || Val_int( 0 ) == *handler )
363 CAMLreturn( Val_unit );
388 caml_invalid_argument(
"A custom plotter must be defined \
389 before calling plcont" );
393 c_plcont( f, nx, ny, kx, lx, ky, ly, clevel, nlevel,
420 left, right, bottom, top,
421 shade_min, shade_max,
422 sh_cmap, sh_color, sh_width, min_color, min_width,
423 max_color, max_width,
plfill, rectangular,
458 xmin, xmax, ymin, ymax,
459 clevel, nlevel, fill_width,
460 cont_color, cont_width,
480 xmin, xmax, ymin, ymax,
517 type, minlong, maxlong, minlat, maxlat );
530 dlong, dlat, minlong, maxlong, minlat, maxlat );
546 CAMLparam5( x, y, z, xg, yg );
547 CAMLxparam2( type, data );
552 CAMLlocal2( zg, y_ml_array );
556 int npts, nptsx, nptsy;
560 npts = Wosize_val( x ) / Double_wosize;
561 if ( ( Wosize_val( y ) / Double_wosize != Wosize_val( z ) / Double_wosize ) ||
562 ( Wosize_val( y ) / Double_wosize != npts ) ||
563 ( Wosize_val( z ) / Double_wosize != npts )
566 caml_failwith(
"ml_plgriddata: x, y, z must all have the same dimensions" );
569 nptsx = Wosize_val( xg ) / Double_wosize;
570 nptsy = Wosize_val( yg ) / Double_wosize;
577 c_plgriddata( (
double *) x, (
double *) y, (
double *) z, npts, (
double *) xg, nptsx,
578 (
double *) yg, nptsy, zg_local, Int_val( type ) + 1,
579 Double_val( data ) );
582 zg = caml_alloc( nptsx, 0 );
584 for ( i = 0; i < nptsx; i++ )
587 y_ml_array = caml_alloc( nptsy * Double_wosize, Double_array_tag );
588 for ( j = 0; j < nptsy; j++ )
590 Store_double_field( y_ml_array, j, zg_local[i][j] );
592 caml_modify( &Field( zg, i ), y_ml_array );
603 return ml_plgriddata( argv[0], argv[1], argv[2], argv[3], argv[4],
615 plpoly3( n, x, y, z, draw, ifcc );
624 sprintf( exception_message,
"Error, return code %d", result );
625 caml_invalid_argument( exception_message );
634 int translated_option;
635 switch ( parse_option )
646 default: translated_option = -1;
648 return translated_option;
652 #define INIT_STRING_ARRAY( o ) \
654 o ## _length = Wosize_val( o ); \
655 const char *c_ ## o[o ## _length]; \
656 for ( i = 0; i < o ## _length; i++ ) { c_ ## o[i] = String_val( Field( o, i ) ); }
659 #define INIT_NC_STRING_ARRAY( o ) \
661 o ## _length = Wosize_val( o ); \
662 char *c_ ## o[o ## _length]; \
663 for ( i = 0; i < o ## _length; i++ ) { c_ ## o[i] = String_val( Field( o, i ) ); }
666 #define INIT_INT_ARRAY( o ) \
668 o ## _length = Wosize_val( o ); \
669 int c_ ## o[o ## _length]; \
670 for ( i = 0; i < ( o ## _length ); i++ ) { ( c_ ## o )[i] = Int_val( Field( ( o ), i ) ); }
673 #define INIT_INT_ARRAYS( o ) \
674 int o ## _length, o ## _inner; \
675 o ## _length = Wosize_val( o ); \
676 int *c_ ## o[o ## _length]; \
677 for ( i = 0; i < ( o ## _length ); i++ ) { \
678 INIT_INT_ARRAY( o ## _subarray ); \
679 ( c_ ## o )[i] = c_ ## o ## _subarray; \
688 while ( list != Val_emptylist )
691 result = result | variant_f( Int_val( Field( list, 0 ) ) );
693 list = Field( list, 1 );
696 CAMLreturn( result );
701 CAMLparam2( argv, parse_method );
704 int combined_parse_method;
711 result =
plparseopts( &argv_length, c_argv, combined_parse_method );
715 sprintf( exception_message,
"Invalid arguments in plparseopts, error %d", result );
716 caml_invalid_argument( exception_message );
718 CAMLreturn( Val_unit );
727 CAMLparam5( xspec, yspec, xmin, xmax, xjump );
728 CAMLxparam5( ymin, ymax, xlpos, ylpos, y_ascl );
729 CAMLxparam5( acc, colbox, collab, colline, styline );
730 CAMLxparam4( legline, labx, laby, labtop );
734 const char* legend_copy[4];
736 for ( i = 0; i < 4; i++ )
738 colline_copy[i] = Int_val( Field( colline, i ) );
739 styline_copy[i] = Int_val( Field( styline, i ) );
740 legend_copy[i] = String_val( Field( legline, i ) );
744 plstripc( &
id, String_val( xspec ), String_val( yspec ),
745 Double_val( xmin ), Double_val( xmax ),
746 Double_val( xjump ), Double_val( ymin ), Double_val( ymax ),
747 Double_val( xlpos ), Double_val( ylpos ), Bool_val( y_ascl ),
748 Bool_val( acc ), Int_val( colbox ), Int_val( collab ),
749 colline_copy, styline_copy, legend_copy,
750 String_val( labx ), String_val( laby ), String_val( labtop ) );
752 CAMLreturn( Val_int(
id ) );
757 return ml_plstripc( argv[0], argv[1], argv[2], argv[3], argv[4],
758 argv[5], argv[6], argv[7], argv[8], argv[9],
759 argv[10], argv[11], argv[12], argv[13], argv[14],
760 argv[15], argv[16], argv[17], argv[18] );
765 int translated_option;
766 switch ( legend_option )
776 default: translated_option = -1;
778 return translated_option;
783 int translated_option;
784 switch ( colorbar_option )
803 default: translated_option = -1;
805 return translated_option;
810 int translated_option;
811 switch ( position_option )
821 default: translated_option = -1;
823 return translated_option;
834 value box_line_widths,
839 CAMLparam5( position, opt, x, y, plot_width );
840 CAMLxparam5( bg_color, bb_color, bb_style, nrow, ncolumn );
841 CAMLxparam5( opt_array, text_offset, text_scale, text_spacing, text_justification );
842 CAMLxparam5( text_colors, text, box_colors, box_patterns, box_scales );
843 CAMLxparam5( box_line_widths, line_colors, line_styles, line_widths, symbol_colors );
844 CAMLxparam3( symbol_scales, symbol_numbers, symbols );
845 CAMLlocal1( result );
846 result = caml_alloc( 2, 0 );
851 int c_position, c_opt;
854 n_legend = Wosize_val( opt_array );
856 int c_opt_array[n_legend];
876 for ( i = 0; i < n_legend; i++ )
885 pllegend( &width, &height, c_opt, c_position, Double_val( x ), Double_val( y ),
886 Double_val( plot_width ), Int_val( bg_color ),
887 Int_val( bb_color ), Int_val( bb_style ),
888 Int_val( nrow ), Int_val( ncolumn ),
889 n_legend, c_opt_array,
890 Double_val( text_offset ), Double_val( text_scale ),
891 Double_val( text_spacing ),
892 Double_val( text_justification ),
893 c_text_colors, c_text,
894 c_box_colors, c_box_patterns, (
double *) box_scales,
895 (
double *) box_line_widths,
896 c_line_colors, c_line_styles, (
double *) line_widths,
897 c_symbol_colors, (
double *) symbol_scales, c_symbol_numbers,
901 Store_field( result, 0, caml_copy_double( width ) );
902 Store_field( result, 1, caml_copy_double( height ) );
904 CAMLreturn( result );
909 return ml_pllegend( argv[0], argv[1], argv[2], argv[3], argv[4],
910 argv[5], argv[6], argv[7], argv[8], argv[9],
911 argv[10], argv[11], argv[12], argv[13], argv[14],
912 argv[15], argv[16], argv[17], argv[18], argv[19],
913 argv[20], argv[21], argv[22], argv[23], argv[24],
914 argv[25], argv[26], argv[27] );
927 CAMLparam5( opt, position, x, y, x_length );
928 CAMLxparam5( y_length, bg_color, bb_color, bb_style, low_cap_color );
929 CAMLxparam5( high_cap_color, cont_color, cont_width, label_opts, label );
930 CAMLxparam4( axis_opts, ticks, sub_ticks, values );
931 CAMLlocal1( result );
932 result = caml_alloc( 2, 0 );
937 int c_opt, c_position;
940 n_labels = Wosize_val( label_opts );
943 n_axes = Wosize_val( axis_opts );
958 int c_label_opts[ n_labels ];
959 for ( i = 0; i < n_labels; i++ )
966 int n_values[ n_axes ];
967 c_values = malloc( n_axes *
sizeof (
double * ) );
969 for ( i = 0; i < n_axes; i++ )
971 c_values[i] = (
double *) Field( values, i );
972 n_values[i] = Wosize_val( Field( values, i ) ) / Double_wosize;
979 c_opt, c_position, Double_val( x ), Double_val( y ),
980 Double_val( x_length ), Double_val( y_length ),
981 Int_val( bg_color ), Int_val( bb_color ), Int_val( bb_style ),
982 Double_val( low_cap_color ), Double_val( high_cap_color ),
983 Int_val( cont_color ), Double_val( cont_width ),
984 n_labels, c_label_opts, c_label,
986 (
double *) ticks, c_sub_ticks,
987 n_values, (
const PLFLT *
const *) c_values );
990 Store_field( result, 0, caml_copy_double( width ) );
991 Store_field( result, 1, caml_copy_double( height ) );
993 CAMLreturn( result );
998 return ml_plcolorbar( argv[0], argv[1], argv[2], argv[3], argv[4],
999 argv[5], argv[6], argv[7], argv[8], argv[9],
1000 argv[10], argv[11], argv[12], argv[13], argv[14],
1001 argv[15], argv[16], argv[17], argv[18] );
1005 void ml_pltr0(
double x,
double y,
double* tx,
double* ty )
1007 pltr0( x, y, tx, ty, NULL );
1012 CAMLparam4( xg, yg, x, y );
1013 CAMLlocal1( tx_ty );
1014 tx_ty = caml_alloc( 2, 0 );
1018 grid.
xg = (
double *) xg;
1019 grid.
yg = (
double *) yg;
1020 grid.
nx = Wosize_val( xg ) / Double_wosize;
1021 grid.
ny = Wosize_val( yg ) / Double_wosize;
1022 pltr1( Double_val( x ), Double_val( y ), &tx, &ty, (
PLPointer ) & grid );
1025 Store_field( tx_ty, 0, caml_copy_double( tx ) );
1026 Store_field( tx_ty, 1, caml_copy_double( ty ) );
1027 CAMLreturn( tx_ty );
1032 CAMLparam4( xg, yg, x, y );
1033 CAMLlocal1( tx_ty );
1034 tx_ty = caml_alloc( 2, 0 );
1048 length1 = Wosize_val( xg );
1050 length2 = Wosize_val( Field( xg, 0 ) ) / Double_wosize;
1051 c_xg = malloc( length1 *
sizeof (
double* ) );
1052 for ( i = 0; i < length1; i++ )
1054 c_xg[i] = (
double *) Field( xg, i );
1056 c_yg = malloc( length1 *
sizeof (
double* ) );
1057 for ( i = 0; i < length1; i++ )
1059 c_yg[i] = (
double *) Field( yg, i );
1066 pltr2( Double_val( x ), Double_val( y ), &tx, &ty, (
PLPointer ) & grid );
1073 Store_field( tx_ty, 0, caml_copy_double( tx ) );
1074 Store_field( tx_ty, 1, caml_copy_double( ty ) );
1075 CAMLreturn( tx_ty );
void ml_pltr0(double x, double y, double *tx, double *ty)
value ml_plcolorbar_byte(value *argv, int argn)
#define PL_PARSE_NOPROGRAM
void ml_plshade(const PLFLT **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)
void ml_mapform(PLINT n, PLFLT *x, PLFLT *y)
void(* ML_LABEL_FUNC)(PLINT, PLFLT, char *, PLINT, PLPointer)
value ml_plstripc(value xspec, value yspec, value xmin, value xmax, value xjump, value ymin, value ymax, value xlpos, value ylpos, value y_ascl, value acc, value colbox, value collab, value colline, value styline, value legline, value labx, value laby, value labtop)
#define PL_COLORBAR_LABEL_TOP
PLINT ml_defined(PLFLT x, PLFLT y)
void c_plsvect(PLFLT_VECTOR arrowx, PLFLT_VECTOR arrowy, PLINT npts, PLBOOL fill)
PLDLLIMPEXP void c_plmap(PLMAPFORM_callback mapform, PLCHAR_VECTOR name, PLFLT minx, PLFLT maxx, PLFLT miny, PLFLT maxy)
#define CAML_PLPLOT_TRANSFORM_FUNC_NAME
#define CAML_PLPLOT_LABEL_FUNC_NAME
void mapform(PLINT n, PLFLT *x, PLFLT *y)
void ml_plshades(const PLFLT **a, PLINT nx, PLINT ny, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT *clevel, PLINT nlevel, PLFLT fill_width, PLINT cont_color, PLFLT cont_width, PLBOOL rectangular)
#define CAML_PLPLOT_DEFINED_FUNC_NAME
value ml_plstransform(value unit)
void ml_plvect(const PLFLT **u, const PLFLT **v, PLINT nx, PLINT ny, PLFLT scale)
#define PL_POSITION_BOTTOM
#define PL_LEGEND_BACKGROUND
PLDLLIMPEXP void c_plmeridians(PLMAPFORM_callback mapform, PLFLT dlong, PLFLT dlat, PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat)
int lor_ml_list(value list, ML_VARIANT_FUNC variant_f)
value ml_pllegend_byte(value *argv, int argn)
#define PL_COLORBAR_ORIENT_TOP
ML_MAPFORM_FUNC get_ml_mapform_func()
#define PL_COLORBAR_BACKGROUND
#define PL_PARSE_NODELETE
void(* ML_PLOTTER_FUNC)(PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer)
#define PL_COLORBAR_SHADE
#define CAML_PLPLOT_MAPFORM_FUNC_NAME
void plsabort(void(*handler)(PLCHAR_VECTOR))
#define PL_LEGEND_BOUNDING_BOX
ML_PLOTTER_FUNC get_ml_plotter_func()
value ml_plsexit(value unit)
PLFLT plg_current_col1(void)
value ml_plgriddata(value x, value y, value z, value xg, value yg, value type, value data)
value ml_pltr2(value xg, value yg, value x, value y)
#define MAX_EXCEPTION_MESSAGE_LENGTH
#define PL_POSITION_OUTSIDE
ML_DEFINED_FUNC get_ml_defined_func()
#define PL_POSITION_RIGHT
int ml_exit(const char *message)
#define PL_COLORBAR_LABEL_LEFT
#define PL_LEGEND_ROW_MAJOR
#define INIT_INT_ARRAY(o)
void c_plcont(PLFLT_MATRIX f, PLINT nx, PLINT ny, PLINT kx, PLINT lx, PLINT ky, PLINT ly, PLFLT_VECTOR clevel, PLINT nlevel, PLTRANSFORM_callback pltr, PLPointer pltr_data)
void ml_plmeridians(PLFLT dlong, PLFLT dlat, PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat)
#define PL_COLORBAR_SHADE_LABEL
value ml_plgriddata_bytecode(value *argv, int argn)
#define PL_COLORBAR_ORIENT_BOTTOM
#define PL_POSITION_VIEWPORT
#define INIT_NC_STRING_ARRAY(o)
#define PL_COLORBAR_GRADIENT
void plFree2dGrid(PLFLT **f, PLINT nx, PLINT PL_UNUSED(ny))
void ml_plcont(const PLFLT **f, PLINT nx, PLINT ny, PLINT kx, PLINT lx, PLINT ky, PLINT ly, PLFLT *clevel, PLINT nlevel)
void c_plimagefr(PLFLT_MATRIX idata, PLINT nx, PLINT ny, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, PLFLT valuemin, PLFLT valuemax, PLTRANSFORM_callback pltr, PLPointer pltr_data)
void c_plgriddata(PLFLT_VECTOR x, PLFLT_VECTOR y, PLFLT_VECTOR z, PLINT npts, PLFLT_VECTOR xg, PLINT nptsx, PLFLT_VECTOR yg, PLINT nptsy, PLFLT **zg, PLINT type, PLFLT data)
#define PL_POSITION_SUBPAGE
#define PL_COLORBAR_CAP_NONE
value ml_pltr1(value xg, value yg, value x, value y)
#define INIT_STRING_ARRAY(o)
#define PL_COLORBAR_ORIENT_LEFT
value ml_plcolorbar(value opt, value position, value x, value y, value x_length, value y_length, value bg_color, value bb_color, value bb_style, value low_cap_color, value high_cap_color, value cont_color, value cont_width, value label_opts, value label, value axis_opts, value ticks, value sub_ticks, value values)
#define CAML_PLPLOT_PLOTTER_FUNC_NAME
void ml_plmap(const char *type, PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat)
void plsexit(int(*handler)(PLCHAR_VECTOR))
#define PL_POSITION_INSIDE
void c_plshades(PLFLT_MATRIX a, PLINT nx, PLINT ny, PLDEFINED_callback defined, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT_VECTOR clevel, PLINT nlevel, PLFLT fill_width, PLINT cont_color, PLFLT cont_width, PLFILL_callback fill, PLINT rectangular, PLTRANSFORM_callback pltr, PLPointer pltr_data)
static PLFLT value(double n1, double n2, double hue)
int translate_legend_option(int legend_option)
#define PL_COLORBAR_CAP_HIGH
#define CAML_PLPLOT_EXIT_FUNC_NAME
#define PL_COLORBAR_ORIENT_RIGHT
PLINT(* ML_VARIANT_FUNC)(PLINT)
value ml_plparseopts(value argv, value parse_method)
#define PL_LEGEND_TEXT_LEFT
void plplot_check_nonzero_result(int result)
void plAlloc2dGrid(PLFLT ***f, PLINT nx, PLINT ny)
int plg_current_col0(void)
#define PL_COLORBAR_CAP_LOW
void ml_transform(PLFLT x, PLFLT y, PLFLT *xt, PLFLT *yt, PLPointer data)
value ml_pllegend(value opt, value position, value x, value y, value plot_width, value bg_color, value bb_color, value bb_style, value nrow, value ncolumn, value opt_array, value text_offset, value text_scale, value text_spacing, value text_justification, value text_colors, value text, value box_colors, value box_patterns, value box_scales, value box_line_widths, value line_colors, value line_styles, value line_widths, value symbol_colors, value symbol_scales, value symbol_numbers, value symbols)
void ml_plpoly3(PLINT n, PLFLT *x, PLFLT *y, PLFLT *z, PLINT ndraw, PLBOOL *draw, PLBOOL ifcc)
void c_plvect(PLFLT_MATRIX u, PLFLT_MATRIX v, PLINT nx, PLINT ny, PLFLT scale, PLTRANSFORM_callback pltr, PLPointer pltr_data)
void ml_abort(const char *message)
void c_plshade(PLFLT_MATRIX a, PLINT nx, PLINT ny, PLDEFINED_callback defined, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, 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, PLFILL_callback fill, PLINT rectangular, PLTRANSFORM_callback pltr, PLPointer pltr_data)
int translate_parse_option(int parse_option)
value ml_plstripc_byte(value *argv, int argn)
#define PL_LEGEND_COLOR_BOX
#define PL_COLORBAR_LABEL_BOTTOM
void ml_plimagefr(const PLFLT **idata, PLINT nx, PLINT ny, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, PLFLT valuemin, PLFLT valuemax)
#define PL_PARSE_OVERRIDE
void ml_labelfunc(PLINT axis, PLFLT n, char *label, PLINT length, PLPointer d)
#define CAML_PLPLOT_ABORT_FUNC_NAME
int translate_colorbar_option(int colorbar_option)
#define PL_COLORBAR_BOUNDING_BOX
#define PL_COLORBAR_IMAGE
PLINT(* ML_DEFINED_FUNC)(PLFLT, PLFLT)
#define PL_COLORBAR_LABEL_RIGHT
value ml_plslabelfunc(value unit)
void(* ML_MAPFORM_FUNC)(PLINT, PLFLT *, PLFLT *)
void ml_plotter(PLFLT x, PLFLT y, PLFLT *tx, PLFLT *ty, PLPointer pltr_data)
int translate_position_option(int position_option)
value ml_plsabort(value unit)