PLplot  5.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
plplotP.h
Go to the documentation of this file.
1 // Internal (private) macros and prototypes for the PLplot package. This
2 // header file must be included before all others, including system header
3 // files. This file is typically needed when including driver specific
4 // header files (e.g. pltkd.h).
5 //
6 // Copyright (C) 1993, 1994, 1995 by
7 // Maurice J. LeBrun, Geoff Furnish, Tony Richardson.
8 //
9 // Copyright (C) 2004 Rafael Laboissiere
10 // Copyright (C) 2004 Joao Cardoso
11 // Copyright (C) 2004 Andrew Roach
12 // Copyright (C) 2006 Andrew Ross
13 // Copyright (C) 2006 Hazen Babcock
14 // Copyright (C) 2001-2015 Alan W. Irwin
15 //
16 //
17 // This file is part of PLplot.
18 //
19 // PLplot is free software; you can redistribute it and/or modify
20 // it under the terms of the GNU Library General Public License as published
21 // by the Free Software Foundation; either version 2 of the License, or
22 // (at your option) any later version.
23 //
24 // PLplot is distributed in the hope that it will be useful,
25 // but WITHOUT ANY WARRANTY; without even the implied warranty of
26 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 // GNU Library General Public License for more details.
28 //
29 // You should have received a copy of the GNU Library General Public License
30 // along with PLplot; if not, write to the Free Software
31 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
32 //
33 //
34 //
35 
36 #ifndef __PLPLOTP_H__
37 #define __PLPLOTP_H__
38 
39 //--------------------------------------------------------------------------
40 // Select environment. Must be done before anything else.
41 //
42 // Basically we want the widest range of system services that are available.
43 // Fortunately on many systems, that is the default. To get "everything",
44 // one of the following must be defined, as appropriate:
45 //
46 // _GNU_SOURCE on Linux (default)
47 // _OSF_SOURCE on OSF1 (default)
48 // _HPUX_SOURCE on HP (not default)
49 // _ALL_SOURCE on AIX (no idea)
50 //
51 // To see where these are set, do the following:
52 //
53 // cd /usr/include; grep SOURCE *.h | fgrep 'define '
54 //
55 // and the file containing lots of these is the one you want (features.h on
56 // Linux, standards.h on OSF1, etc). Follow the logic to see what needs to be
57 // defined to get "everything", i.e. POSIX.*, XOPEN, etc.
58 //
59 // Note that for specific functionality, we test using autoconf. Still it's
60 // best to stick to ANSI C, POSIX.1, and POSIX.2, in that order, for maximum
61 // portability.
62 //--------------------------------------------------------------------------
63 
64 // HPUX - if this is no longer needed, please remove it
65 #ifdef _HPUX
66 #define _HPUX_SOURCE
67 #endif
68 
69 // A/IX - if this is no longer needed, please remove it
70 #ifdef _AIX
71 #define _ALL_SOURCE
72 #endif
73 
74 // Add others here as needed.
75 
76 //--------------------------------------------------------------------------
77 // Configuration settings
78 //
79 // Some of the macros set during configuration are described here.
80 //
81 // If HAVE_TERMIOS_H is set, we employ POSIX.1 tty terminal I/O.
82 //
83 // If STDC_HEADERS is defined, the system's libc is ANSI-compliant.
84 // ANSI libc calls are used for: (a) setting up handlers to be called
85 // before program exit (via the "atexit" call), and (b) for seek
86 // operations. Again, the code is usable without these. An ANSI libc
87 // should be available, given the requirement of an ANSI compiler. Some
88 // reasons why not: (a) the vendor didn't supply a complete ANSI
89 // environment, or (b) the ANSI libc calls are buggy, or (c) you ported
90 // gcc to your system but not glibc (for whatever reason). Note: without
91 // an ANSI C lib, if you ^C out of a program using one of the PLplot tek
92 // drivers, your terminal may be left in a strange state.
93 //--------------------------------------------------------------------------
94 
95 #include "plConfig.h"
96 #ifdef caddr_t
97 #undef caddr_t
98 #ifndef __USE_BSD
99 typedef char * caddr_t;
100 #endif
101 #endif
102 
103 // System headers
104 
105 #include <ctype.h>
106 #include <math.h>
107 #include <string.h>
108 #include <limits.h>
109 #include <float.h>
110 #ifdef PL_HAVE_UNISTD_H
111 #include <unistd.h>
112 #endif
113 
114 #include <locale.h>
115 
116 // (AM) Define M_PI if the platform does not include it
117 // (MSVC for instance)
118 #if !defined ( M_PI )
119 #define M_PI 3.14159265358979323846
120 #endif
121 
122 //
123 // Macros for file positioning. I tried switching to f[sg]etpos() because I
124 // like the semantics better, but ran into the problem that fpos_t is not
125 // always a base type (it may be a struct). This is a problem because the
126 // metafile driver needs to write relative offsets into the file itself. So
127 // instead we use f{seek,tell} at a low level but keep the f[sg]etpos
128 // semantics using these macros.
129 //
130 
131 #ifdef STDC_FPOS_T
132 #undef STDC_FPOS_T
133 #endif
134 
135 #ifdef STDC_FPOS_T
136 #define FPOS_T fpos_t
137 #define pl_fsetpos( a, b ) fsetpos( a, b )
138 #define pl_fgetpos( a, b ) fgetpos( a, b )
139 
140 #else
141 #define FPOS_T long
142 #define pl_fsetpos( a, b ) fseek( a, *b, 0 )
143 #define pl_fgetpos( a, b ) ( -1L == ( *b = ftell( a ) ) )
144 #endif
145 
146 #include "pldll.h"
147 
148 // Include all externally-visible definitions and prototypes
149 // plplot.h also includes some handy system header files
150 
151 #include "plplot.h"
152 
153 // plstream definition
154 
155 #include "plstrm.h"
156 
157 // If not including this file from inside of plcore.h, declare plsc
158 
159 #ifndef __PLCORE_H__
160 #ifdef __cplusplus
161 extern "C" {
162 #endif
163 // extern PLStream PLDLLIMPORT *plsc;
164 extern PLDLLIMPEXP_DATA( PLStream * ) plsc;
165 #ifdef __cplusplus
166 }
167 #endif
168 #include "pldebug.h"
169 #endif
170 
171 //--------------------------------------------------------------------------
172 // Utility macros
173 //--------------------------------------------------------------------------
174 
175 #ifndef TRUE
176 #define TRUE 1
177 #define FALSE 0
178 #endif
179 
180 // Used to help ensure everything malloc'ed gets freed
181 
182 #define free_mem( a ) \
183  if ( a != NULL ) { free( (void *) a ); a = NULL; }
184 
185 // Allows multi-argument setup calls to not affect selected arguments
186 
187 #define plsetvar( a, b ) \
188  if ( b != PL_NOTSET ) a = b;
189 
190 // Lots of cool math macros
191 
192 #ifndef MAX
193 #define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
194 #endif
195 #ifndef MIN
196 #define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
197 #endif
198 #ifndef ABS
199 #define ABS( a ) ( ( a ) < 0 ? -( a ) : ( a ) )
200 #endif
201 #ifndef ROUND
202 #define ROUND( a ) (PLINT) ( ( a ) < 0. ? ( ( a ) - .5 ) : ( ( a ) + .5 ) )
203 #endif
204 #ifndef BETW
205 #define BETW( ix, ia, ib ) ( ( ( ix ) <= ( ia ) && ( ix ) >= ( ib ) ) || ( ( ix ) >= ( ia ) && ( ix ) <= ( ib ) ) )
206 #endif
207 #ifndef SSQR
208 #define SSQR( a, b ) sqrt( ( a ) * ( a ) + ( b ) * ( b ) )
209 #endif
210 #ifndef SIGN
211 #define SIGN( a ) ( ( a ) < 0 ? -1 : 1 )
212 #endif
213 #ifndef TRANSFORM
214 #define TRANSFORM( x, y, xnew, ynew ) if ( plsc->coordinate_transform ) { plsc->coordinate_transform( ( x ), ( y ), ( xnew ), ( ynew ), plsc->coordinate_transform_data ); } else { *xnew = x; *ynew = y; }
215 #endif
216 
217 // A coordinate value that should never occur
218 
219 #define PL_UNDEFINED -9999999
220 
221 // Declarations for save string functions
222 
223 #ifdef PL_HAVE_SNPRINTF
224 // In case only _snprintf is declared (as for Visual C++ and
225 // Borland compiler toolset) we redefine the function names
226  #ifdef _PL_HAVE_SNPRINTF
227  #define snprintf _snprintf
228  #define snscanf _snscanf
229  #endif // _PL_HAVE_SNPRINTF
230 #else // !PL_HAVE_SNPRINTF
231 // declare dummy functions which just call the unsafe
232 // functions ignoring the size of the string
233 int plsnprintf( char *buffer, int n, PLCHAR_VECTOR format, ... );
234 int plsnscanf( PLCHAR_VECTOR buffer, int n, PLCHAR_VECTOR format, ... );
235  #define snprintf plsnprintf
236  #define snscanf plsnscanf
237 #endif // PL_HAVE_SNPRINTF
238 
239 //--------------------------------------------------------------------------
240 // Add in missing isnan / isinf functions on some platforms
241 //--------------------------------------------------------------------------
242 
243 #if defined ( PL__HAVE_ISNAN )
244 # define isnan _isnan
245 # if defined ( _MSC_VER )
246 # include <float.h>
247 # endif
248 #endif
249 #if defined ( PL__HAVE_ISINF )
250 # define isinf _isinf
251 #endif
252 #if defined ( PL_HAVE_FINITE )
253 # define isfinite finite
254 #endif
255 #if defined ( PL__HAVE_FINITE )
256 # define isfinite _finite
257 #endif
258 
259 // Note these replacements follow the old BSD convention and not
260 // C99. In particular isinf does not distinguish +/- inf.
261 #if !defined ( PL_HAVE_ISNAN )
262 # define isnan( x ) ( ( x ) != ( x ) )
263 #endif
264 #if !defined ( PL_HAVE_ISINF )
265 # define isinf( x ) ( !isnan( x ) && isnan( x - x ) )
266 #endif
267 #if !defined ( PL_HAVE_ISFINITE )
268 # define isfinite( x ) ( !isnan( x - x ) )
269 #endif
270 
271 // Check if C99 HUGE_VAL macro is available - if not then
272 // define a replacement
273 #ifndef HUGE_VAL
274 #define HUGE_VAL ( 1.0 / 0.0 )
275 #endif
276 
277 //--------------------------------------------------------------------------
278 // PLPLOT control macros
279 //--------------------------------------------------------------------------
280 
281 // Some constants
282 
283 #define PL_MAXPOLY 256 // Max segments in polyline or polygon
284 #define PL_NSTREAMS 100 // Max number of concurrent streams.
285 #define PL_RGB_COLOR -1 // A hack
286 
287 #define TEXT_MODE 0
288 #define GRAPHICS_MODE 1
289 #ifndef PI
290 #define PI 3.1415926535897932384
291 #endif
292 
293 // These define the virtual coordinate system used by the metafile driver.
294 // Others are free to use it, or some variation, or define their own.
295 
296 // Note desktop monitors of reasonable quality typically have 0.25 mm spacing
297 // between dots which corresponds to 4.0 dots per mm. The parameters here
298 // roughly correspond to a 14" monitor at 1024x768 resolution, which should
299 // work fine at other sizes/resolutions. The number of virtual dots per mm is
300 // scaled by a factor of 32, with pixels scaled accordingly. The customary
301 // x/y ratio of 4:3 is used.
302 //
303 
304 #define PIXELS_X 32768 // Number of virtual pixels in x
305 #define PIXELS_Y 24576 // Number of virtual pixels in x
306 #define DPMM 4. // dots per mm
307 #define VDPMM ( DPMM * 32 ) // virtual dots per mm
308 #define LPAGE_X ( PIXELS_X / VDPMM ) // virtual page length in x in mm (256)
309 #define LPAGE_Y ( PIXELS_Y / VDPMM ) // virtual page length in y in mm (192)
310 
311 // Constants that help to define ideal plspage arguments for devices
312 
313 #define PLPLOT_MM_PER_INCH 25.4
314 #define PLPLOT_POINTS_PER_INCH 72.
315 #define PLPLOT_WIDTH_A4_MM 297.
316 #define PLPLOT_HEIGHT_A4_MM 210.
317 #define PLPLOT_WIDTH_A5_MM 210.
318 #define PLPLOT_HEIGHT_A5_MM 148.
319 
320 // Devices with pixel units for sizes.
321 
322 // Adopt this default value as reasonable approximation for typical
323 // LCD monitors, but note that the user can replace this default by
324 // setting plsc->[xy]dpi values (e.g., by using the -dpi command-line
325 // option or by calling plspage with non-zero first two arguments).
326 #define PLPLOT_DEFAULT_PIXELS_PER_INCH 90.
327 // These default pixel dimensions correspond to A5 size if actual
328 // pixels per inch is PLPLOT_DEFAULT_PIXELS_PER_INCH
329 #define PLPLOT_DEFAULT_WIDTH_PIXELS ( (int) ( PLPLOT_WIDTH_A5_MM * PLPLOT_DEFAULT_PIXELS_PER_INCH / PLPLOT_MM_PER_INCH ) )
330 #define PLPLOT_DEFAULT_HEIGHT_PIXELS ( (int) ( PLPLOT_HEIGHT_A5_MM * PLPLOT_DEFAULT_PIXELS_PER_INCH / PLPLOT_MM_PER_INCH ) )
331 
332 // Devices with real world units for sizes.
333 
334 // N.B. these devices normally use fixed values of units per inch,
335 // i.e., they ignore any attempt by users to set plsc->[xy]dpi values
336 // (e.g., by using the -dpi command-line option or by calling plspage
337 // with non-zero first two arguments).
338 
339 // 1. Devices with mm units for sizes.
340 // These default mm dimensions correspond to A4 size.
341 #define PLPLOT_DEFAULT_WIDTH_MM ( (int) ( PLPLOT_WIDTH_A4_MM )
342 #define PLPLOT_DEFAULT_HEIGHT_MM ( (int) ( PLPLOT_HEIGHT_A4_MM )
343 
344 // 2. Devices with points (= 1/72 inch) units for sizes.
345 // These default points dimensions correspond to A4 size.
346 #define PLPLOT_DEFAULT_WIDTH_POINTS ( (int) ( PLPLOT_WIDTH_A4_MM * PLPLOT_POINTS_PER_INCH / PLPLOT_MM_PER_INCH ) )
347 #define PLPLOT_DEFAULT_HEIGHT_POINTS ( (int) ( PLPLOT_HEIGHT_A4_MM * PLPLOT_POINTS_PER_INCH / PLPLOT_MM_PER_INCH ) )
348 
349 // This defines the first argument of the plRotPhy invocation that is made
350 // in a number of device drivers (e.g., found in ps.c
351 // and pstex.c) to rotate them "permanently" from portrait mode to non-
352 // portrait mode. ORIENTATION of 1 corresponds to seascape mode (90 deg
353 // clockwise rotation from portrait). This is the traditional value
354 // effectively used in all older versions of PLplot. ORIENTATION of 3
355 // corresponds to landscape mode (90 deg *counter*-clockwise rotation from
356 // portrait) which is the new default non-portrait orientation.
357 
358 #define ORIENTATION 3
359 
360 // Switches for state function call.
361 
362 #define PLSTATE_WIDTH 1 // pen width
363 #define PLSTATE_COLOR0 2 // change to color in cmap 0
364 #define PLSTATE_COLOR1 3 // change to color in cmap 1
365 #define PLSTATE_FILL 4 // set area fill to a standard pattern
366 #define PLSTATE_CMAP0 5 // change to cmap 0
367 #define PLSTATE_CMAP1 6 // change to cmap 1
368 #define PLSTATE_CHR 7 // change character height
369 #define PLSTATE_SYM 8 // change symbol size
370 
371 
372 // Bit switches used in the driver interface
373 
374 #define PLDI_MAP 0x01
375 #define PLDI_ORI 0x02
376 #define PLDI_PLT 0x04
377 #define PLDI_DEV 0x08
378 
379 // Default size for family files, in KB.
380 
381 #ifndef PL_FILESIZE_KB
382 #define PL_FILESIZE_KB 1000
383 #endif
384 
385 // Font file names.
386 
387 #define PLPLOT5_FONTS
388 
389 #ifdef PLPLOT5_FONTS
390 #define PL_XFONT "plxtnd5.fnt"
391 #define PL_SFONT "plstnd5.fnt"
392 #else
393 #define PL_XFONT "plxtnd4.fnt"
394 #define PL_SFONT "plstnd4.fnt"
395 #endif
396 
397 //--------------------------------------------------------------------------
398 // The following environment variables are defined:
399 //
400 // PLPLOT_BIN # where to find executables
401 // PLPLOT_LIB # where to find library files (fonts, maps, etc)
402 // PLPLOT_TCL # where to find tcl scripts
403 //
404 // PLPLOT_HOME # basename of plplot hierarchy
405 //
406 // search order:
407 // 1) the most specific possible locators, one of
408 // $(PLPLOT_BIN)
409 // $(PLPLOT_LIB)
410 // $(PLPLOT_TCL)
411 // as appropriate
412 //
413 // 2) the current directory
414 //
415 // 3) one of $(PLPLOT_HOME)/bin
416 // $(PLPLOT_HOME)/lib
417 // $(PLPLOT_HOME)/tcl
418 // as appropriate
419 //
420 // 4) as appropriate, the compile-time (Makefile)
421 // BIN_DIR, LIB_DIR, TCL_DIR
422 //
423 // 8 Jun 1994 mj olesen (olesen@weber.me.queensu.ca)
424 //
425 // Other notes:
426 //
427 // In addition to the directories above, the following are also used:
428 //
429 // Lib file search path: PLLIBDEV (see plctrl.c). This is checked last,
430 // and is a system-dependent hardwired location.
431 //
432 // Tcl search path: $HOME/tcl is searched before the install location,
433 // TCL_DIR.
434 //--------------------------------------------------------------------------
435 
436 #define PLPLOT_BIN_ENV "PLPLOT_BIN"
437 #define PLPLOT_LIB_ENV "PLPLOT_LIB"
438 #define PLPLOT_TCL_ENV "PLPLOT_TCL"
439 #define PLPLOT_HOME_ENV "PLPLOT_HOME"
440 
441 // Maximum size for path strings in the plplot code
442 #define PLPLOT_MAX_PATH 1024
443 
444 //
445 // Some stuff that is included (and compiled into) plsym.h
446 // Other modules might want this, so we will "extern" it
447 //
448 //
449 
450 #ifndef __PLSYM_H__
451 
452 typedef struct
453 {
454  unsigned int Hershey;
456  char Font;
458 
461 
462 
463 #endif
464 
465 // Greek character translation array (defined in plcore.c)
466 extern const char plP_greek_mnemonic[];
467 
468 //--------------------------------------------------------------------------
469 // Function Prototypes
470 //
471 // These typically should not be called directly by the user.
472 //--------------------------------------------------------------------------
473 
474 #ifdef __cplusplus
475 extern "C" {
476 #endif
477 
478 // Number of elements in the affine vector representation of the affine
479 // transformation matrix.
480 #define NAFFINE 6
481 
482 // Returns affine identity matrix
483 
484 PLDLLIMPEXP void
485 plP_affine_identity( PLFLT *affine_vector );
486 
487 // Translate new coordinate system axes relative to the old.
488 
489 PLDLLIMPEXP void
490 plP_affine_translate( PLFLT *affine_vector, PLFLT xtranslate, PLFLT ytranslate );
491 
492 // Scale new coordinate system axes relative to the old.
493 
494 PLDLLIMPEXP void
495 plP_affine_scale( PLFLT *affine_vector, PLFLT xscale, PLFLT yscale );
496 
497 // Rotate new coordinate system axes relative to the old.
498 // angle is in degrees.
499 
500 PLDLLIMPEXP void
501 plP_affine_rotate( PLFLT *affine_vector, PLFLT angle );
502 
503 // Skew new X coordinate axis relative to the old.
504 // angle is in degrees.
505 
506 PLDLLIMPEXP void
507 plP_affine_xskew( PLFLT *affine_vector, PLFLT angle );
508 
509 // Skew new Y coordinate axis relative to the old.
510 // angle is in degrees.
511 
512 PLDLLIMPEXP void
513 plP_affine_yskew( PLFLT *affine_vector, PLFLT angle );
514 
515 // Multiply two affine transformation matrices to form a third.
516 //
517 // A = B * C
518 //
519 //
520 
521 PLDLLIMPEXP void
523  PLFLT *affine_vectorA,
524  PLFLT_VECTOR affine_vectorB,
525  PLFLT_VECTOR affine_vectorC );
526 
527 // Determines interval between numeric labels
528 
529 void
530 pldtik( PLFLT vmin, PLFLT vmax, PLFLT *tick, PLINT *nsubt, PLBOOL ld );
531 
532 // Writes numeric labels on side(s) of box in custom locations
533 
534 void
535 label_box_custom( PLCHAR_VECTOR xopt, PLINT n_xticks, PLFLT_VECTOR xticks, PLCHAR_VECTOR yopt, PLINT n_yticks, PLFLT_VECTOR yticks );
536 
537 // Determine factor to convert date / time in seconds to more natural
538 // units
539 
540 void
541 pldtfac( PLFLT vmin, PLFLT vmax, PLFLT *factor, PLFLT *tstart );
542 
543 // Determines precision of box labels
544 
545 void
546 pldprec( PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT lf,
547  PLINT *mode, PLINT *prec, PLINT digmax, PLINT *scale );
548 
549 // Draws a polyline within the clip limits.
550 
551 void
552 plP_pllclp( PLINT *x, PLINT *y, PLINT npts,
553  PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax,
554  void ( *draw )( short *, short *, PLINT ) );
555 
556 // Fills a polygon within the clip limits.
557 
558 void
559 plP_plfclp( PLINT *x, PLINT *y, PLINT npts,
560  PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax,
561  void ( *draw )( short *, short *, PLINT ) );
562 
563 // Clip a polygon to the 3d bounding plane
564 int
565 plP_clip_poly( int Ni, PLFLT *Vi[3], int axis, PLFLT dir, PLFLT offset );
566 
567 // Get clipped endpoints
568 
569 int
570 plP_clipline( PLINT *p_x1, PLINT *p_y1, PLINT *p_x2, PLINT *p_y2,
571  PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax );
572 
573 // Stores hex digit value into FCI (font characterization integer).
574 void
575 plP_hex2fci( unsigned char hexdigit, unsigned char hexpower, PLUNICODE *pfci );
576 
577 // Retrieves hex digit value from FCI (font characterization integer).
578 PLDLLIMPEXP void
579 plP_fci2hex( PLUNICODE fci, unsigned char *phexdigit, unsigned char hexpower );
580 
581 // Pattern fills in software the polygon bounded by the input points.
582 
583 PLDLLIMPEXP void
584 plfill_soft( short *x, short *y, PLINT npts );
585 
586 // In case of an abort this routine is called. It just prints out an
587 // error message and tries to clean up as much as possible.
588 
589 PLDLLIMPEXP void
590 plexit( PLCHAR_VECTOR errormsg );
591 
592 // Just a front-end to exit().
593 
594 void
595 pl_exit( void );
596 
597 // A handy way to issue warnings, if need be.
598 
599 PLDLLIMPEXP void
600 plwarn( PLCHAR_VECTOR errormsg );
601 
602 // Same as plwarn(), but appends ", aborting plot" to the error message
603 
604 PLDLLIMPEXP void
605 plabort( PLCHAR_VECTOR errormsg );
606 
607 // Loads either the standard or extended font.
608 
609 void
610 plfntld( PLINT fnt );
611 
612 // Release memory for fonts.
613 
614 void
615 plfontrel( void );
616 
617 // A replacement for strdup(), which isn't portable.
618 
619 PLDLLIMPEXP char *
620 plstrdup( PLCHAR_VECTOR src );
621 
622 // Bin up cmap 1 space and assign colors to make inverse mapping easy.
623 
624 PLDLLIMPEXP void
625 plcmap1_calc( void );
626 
627 // Draws a slanting tick at position (mx,my) (measured in mm) of
628 // vector length (dx,dy).
629 
630 void
631 plstik( PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy );
632 
633 // Prints out a "string" at reference position with physical coordinates
634 // (refx,refy).
635 
636 void
637 plstr( PLINT base, PLFLT *xform, PLINT refx, PLINT refy, PLCHAR_VECTOR string );
638 
639 // Draws a tick parallel to x.
640 
641 void
642 plxtik( PLINT x, PLINT y, PLINT below, PLINT above );
643 
644 // Draws a tick parallel to y.
645 
646 void
647 plytik( PLINT x, PLINT y, PLINT left, PLINT right );
648 
649 // Driver interface filter --
650 // passes all coordinates through a variety of filters.
651 
652 PLDLLIMPEXP void
653 difilt( PLINT *, PLINT *, PLINT,
654  PLINT *, PLINT *, PLINT *, PLINT * );
655 
656 // Transforms the clipping region coordinates as necessary
657 // based on the current plot orientation, etc.
658 
659 PLDLLIMPEXP void
660 difilt_clip( PLINT *, PLINT * );
661 
662 // Calculate scale of font size and scale of magnitude of vertical
663 // offset associated with superscripts and subscripts.
664 
665 PLDLLIMPEXP void
666 plP_script_scale( PLBOOL ifupper, PLINT *level,
667  PLFLT *old_scale, PLFLT *scale,
668  PLFLT *old_offset, PLFLT *offset );
669 
670 // Driver draws text
671 
672 void
673 plP_text( PLINT base, PLFLT just, PLFLT *xform, PLINT x, PLINT y,
674  PLINT refx, PLINT refy, PLCHAR_VECTOR string );
675 
676 // Save LC_NUMERIC locale string, then set "C" locale to protect
677 // parts of PLplot which absolutely demand the LC_NUMERIC "C" locale.
678 
679 PLDLLIMPEXP char *
680 plsave_set_locale( void );
681 
682 // Restore LC_NUMERIC locale that was determined by plsave_set_locale.
683 
684 PLDLLIMPEXP void
685 plrestore_locale( char * save_lc_numeric_locale );
686 
687 // Writes the Hershey symbol "ch" centred at the physical coordinate (x,y).
688 void
689 plhrsh( PLINT ch, PLINT x, PLINT y );
690 
691 // where should structure definitions that must be seen by drivers and core source files, be?
692 
693 // structure to be used by plcore.c and anydriver.c, related to plP_text()
694 
695 typedef struct
696 {
697  // Indicates the type of text stored in the structure. This flag
698  // is used by the plot metafiles to correctly store and then render
699  // the contents.
700  enum { PL_STRING_TEXT, PL_STRING_SYMBOL } text_type;
701 
702  // Positioning settings
703  PLINT base; // ref point at base(1) or center(0) of text. Currently plplot only use 0
704  PLFLT just; // continuos justification, 0 left, 0.5 center, 1 right
705  PLFLT *xform; // transformation (rotation) matrix
706 
707  // raw reference point--after any transformation
710 
711  // processed ref. point--after justification, displacement, etc, processing
714 
715  // font face OPTIONALLY used for rendering hershey codes
716  char font_face;
717 
718  // The following 3 fields are used by the alternative text handling pathway.
719  // The alternative text handling pathway allows the driver to process
720  // each character individually for unicode font handling
721  // See drivers/cairo.h for details about how this works.
722  PLUNICODE n_fci; // font storage
723  PLUNICODE n_char; // character storage
724  PLINT n_ctrl_char; // control character
725 
726  // Used by plsym to store a unicode character for use by plfreetype
727  PLUNICODE unicode_char; // an int to hold either a Hershey, ASC-II, or Unicode value for plsym calls
728 
729  // Used to store a processed unicode string. Used by plsym and
730  // text rendering by the driver
731  PLUNICODE *unicode_array; // a pointer to an array of ints holding either a Hershey, ASC-II, or Unicode value for cached plsym
732  unsigned short unicode_array_len;
733 
734  // Non-unicode strings and unprocessed string in the unicode case
735  const char *string; // text to draw
736  PLINT symbol; // plot symbol to draw
737 }EscText;
738 
739 //
740 // structure that contains driver specific information, to be used by
741 // plargs.c and anydriver.c, related to plParseDrvOpts() and plHelpDrvOpts()
742 //
743 
744 typedef struct
745 {
746  PLCHAR_VECTOR opt; // a string with the name of the option
747  PLINT type; // the type of the variable to be set, see bellow the available types
748  void *var_ptr; // a pointer to the variable to be set
749  PLCHAR_VECTOR hlp_msg; // help message of the option
750 } DrvOpt;
751 
752 // the available variable types, DrvOpt.type, for driver specific options
753 
755 
756 // parse driver specific options, as in -drvopt <option[=value]>*
757 
758 PLDLLIMPEXP int
760 
761 // give help on driver specific options
762 
763 void
764 plHelpDrvOpts( DrvOpt * );
765 
766 //
767 // structures to store contour lines
768 //
769 
770 #define LINE_ITEMS 20
771 
772 typedef struct cont_line
773 {
777  struct cont_line *next;
778 } CONT_LINE;
779 
780 typedef struct cont_level
781 {
782  // INDENT-OFF (stop infinite recursion)
783  PLFLT level; // contour level
784  struct cont_line *line; // contour line struct
785  struct cont_level *next; // contour level struct
786  // INDENT-ON
787 } CONT_LEVEL;
788 
789 void
791  PLINT kx, PLINT lx, PLINT ky, PLINT ly,
792  PLFLT_VECTOR clevel, PLINT nlevel,
793  void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ),
794  PLPointer pltr_data,
795  CONT_LEVEL **contour );
796 
797 void
799 
800 // Get the viewport boundaries in world coordinates, expanded slightly
801 
802 void
803 plP_xgvpw( PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax );
804 
805 // Get x-y domain in world coordinates for 3d plots
806 
807 void
808 plP_gdom( PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax );
809 
810 // Get vertical (z) scale parameters for 3-d plot
811 
812 void
813 plP_grange( PLFLT *p_zscl, PLFLT *p_zmin, PLFLT *p_zmax );
814 
815 // Get parameters used in 3d plots
816 
817 void
818 plP_gw3wc( PLFLT *p_dxx, PLFLT *p_dxy, PLFLT *p_dyx, PLFLT *p_dyy,
819  PLFLT *p_dyz );
820 
821 // Get clip boundaries in physical coordinates
822 
823 void
824 plP_gclp( PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax );
825 
826 // Set clip boundaries in physical coordinates
827 
828 void
829 plP_sclp( PLINT ixmin, PLINT ixmax, PLINT iymin, PLINT iymax );
830 
831 // Get physical device limits in physical coordinates
832 
833 PLDLLIMPEXP void
834 plP_gphy( PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax );
835 
836 // Get number of subpages on physical device and current subpage
837 
838 PLDLLIMPEXP void
839 plP_gsub( PLINT *p_nx, PLINT *p_ny, PLINT *p_cs );
840 
841 // Set number of subpages on physical device and current subpage
842 
843 PLDLLIMPEXP void
844 plP_ssub( PLINT nx, PLINT ny, PLINT cs );
845 
846 // Set up plot parameters according to the number of subpages.
847 
848 void
849 plP_subpInit( void );
850 
851 // Get number of pixels to a millimeter
852 
853 PLDLLIMPEXP void
854 plP_gpixmm( PLFLT *p_x, PLFLT *p_y );
855 
856 // All the drivers call this to set physical pixels/mm.
857 
858 PLDLLIMPEXP void
859 plP_setpxl( PLFLT xpmm0, PLFLT ypmm0 );
860 
861 // Get background parameters (including line width) for 3d plot.
862 
863 void
864 plP_gzback( PLINT **zbf, PLINT **zbc, PLFLT **zbt, PLFLT **zbw );
865 
866 // Move to physical coordinates (x,y).
867 
868 void
869 plP_movphy( PLINT x, PLINT y );
870 
871 // Draw to physical coordinates (x,y).
872 
873 void
874 plP_draphy( PLINT x, PLINT y );
875 
876 // Move to world coordinates (x,y).
877 
878 void
879 plP_movwor( PLFLT x, PLFLT y );
880 
881 // Draw to world coordinates (x,y).
882 
883 void
884 plP_drawor( PLFLT x, PLFLT y );
885 
886 // Draw polyline in physical coordinates.
887 
888 void
889 plP_draphy_poly( PLINT *x, PLINT *y, PLINT n );
890 
891 // Draw polyline in world coordinates.
892 
893 void
895 
896 // Sets up physical limits of plotting device.
897 
898 PLDLLIMPEXP void
899 plP_setphy( PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax );
900 
901 // Set up the subpage boundaries according to the current subpage selected
902 
903 PLDLLIMPEXP void
904 plP_setsub( void );
905 
906 // Get the floating point precision (in number of places) in numeric labels.
907 
908 void
909 plP_gprec( PLINT *p_setp, PLINT *p_prec );
910 
911 // Get the date / time format for numeric labels
912 
913 const char *
914 plP_gtimefmt( void );
915 
916 // Computes the length of a string in mm, including escape sequences.
917 
918 PLFLT
919 plstrl( PLCHAR_VECTOR string );
920 
921 // Similar to strpos, but searches for occurence of string str2.
922 
923 PLINT
925 
926 // Searches string str for first occurence of character chr.
927 
929 plP_strpos( PLCHAR_VECTOR str, int chr );
930 
931 // Searches string str for character chr (case insensitive).
932 
933 PLBOOL
934 plP_stsearch( PLCHAR_VECTOR str, int chr );
935 
936 // Conversion functions
937 
938 // device coords to physical coords (x)
939 
940 PLINT
941 plP_dcpcx( PLFLT x );
942 
943 // device coords to physical coords (y)
944 
945 PLINT
946 plP_dcpcy( PLFLT y );
947 
948 // millimeters from bottom left-hand corner to physical coords (x)
949 
950 PLINT
951 plP_mmpcx( PLFLT x );
952 
953 // millimeters from bottom left-hand corner to physical coords (y)
954 
955 PLINT
956 plP_mmpcy( PLFLT y );
957 
958 // world coords to physical coords (x)
959 
960 PLINT
961 plP_wcpcx( PLFLT x );
962 
963 // world coords to physical coords (y)
964 
965 PLINT
966 plP_wcpcy( PLFLT y );
967 
968 // physical coords to device coords (x)
969 
970 PLFLT
971 plP_pcdcx( PLINT x );
972 
973 // physical coords to device coords (y)
974 
975 PLFLT
976 plP_pcdcy( PLINT y );
977 
978 // millimeters from bottom left corner to device coords (x)
979 
980 PLFLT
981 plP_mmdcx( PLFLT x );
982 
983 // millimeters from bottom left corner to device coords (y)
984 
985 PLFLT
986 plP_mmdcy( PLFLT y );
987 
988 // world coords into device coords (x)
989 
990 PLFLT
991 plP_wcdcx( PLFLT x );
992 
993 // world coords into device coords (y)
994 
995 PLFLT
996 plP_wcdcy( PLFLT y );
997 
998 // subpage coords to device coords (x)
999 
1000 PLFLT
1001 plP_scdcx( PLFLT x );
1002 
1003 // subpage coords to device coords (y)
1004 
1005 PLFLT
1006 plP_scdcy( PLFLT y );
1007 
1008 // device coords to millimeters from bottom left-hand corner (x)
1009 
1010 PLFLT
1011 plP_dcmmx( PLFLT x );
1012 
1013 // device coords to millimeters from bottom left-hand corner (y)
1014 
1015 PLFLT
1016 plP_dcmmy( PLFLT y );
1017 
1018 // world coords into millimeters (x)
1019 
1020 PLFLT
1021 plP_wcmmx( PLFLT x );
1022 
1023 // world coords into millimeters (y)
1024 
1025 PLFLT
1026 plP_wcmmy( PLFLT y );
1027 
1028 // device coords to subpage coords (x)
1029 
1030 PLFLT
1031 plP_dcscx( PLFLT x );
1032 
1033 // device coords to subpage coords (y)
1034 
1035 PLFLT
1036 plP_dcscy( PLFLT y );
1037 
1038 // 3-d coords to 2-d projection (x)
1039 
1040 PLFLT
1041 plP_w3wcx( PLFLT x, PLFLT y, PLFLT z );
1042 
1043 // 3-d coords to 2-d projection (y)
1044 
1045 PLFLT
1046 plP_w3wcy( PLFLT x, PLFLT y, PLFLT z );
1047 
1048 // 3-d coords to 2-d projection (z)
1049 
1050 PLFLT
1051 plP_w3wcz( PLFLT x, PLFLT y, PLFLT z );
1052 
1053 // Returns the rotation and shear angle and stride from a plplot transformation matrix
1054 
1055 PLDLLIMPEXP void
1056 plRotationShear( PLFLT *xFormMatrix, PLFLT *rotation, PLFLT *shear, PLFLT *stride );
1057 
1058 // Test whether a point is in a polygon.
1059 int
1061  PLFLT xp, PLFLT yp );
1062 
1063 // Driver calls
1064 
1065 // Initialize device.
1066 
1067 void
1068 plP_init( void );
1069 
1070 // Draw line between two points
1071 
1072 void
1073 plP_line( short *x, short *y );
1074 
1075 // Draw polyline
1076 
1077 void
1078 plP_polyline( short *x, short *y, PLINT npts );
1079 
1080 // Fill polygon
1081 
1082 PLDLLIMPEXP void
1083 plP_fill( short *x, short *y, PLINT npts );
1084 
1085 // Render gradient
1086 
1087 void
1088 plP_gradient( short *x, short *y, PLINT npts );
1089 
1090 // draw image
1091 
1092 void
1093 plP_image( PLFLT *z, PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy,
1094  void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ), PLPointer pltr_data );
1095 
1096 // Structure for holding arc data
1097 typedef struct
1098 {
1107 } arc_struct;
1108 
1109 // End of page
1110 
1111 PLDLLIMPEXP void
1112 plP_eop( void );
1113 
1114 // End of page
1115 
1116 PLDLLIMPEXP void
1117 plP_bop( void );
1118 
1119 // Tidy up device (flush buffers, close file, etc.)
1120 
1121 void
1122 plP_tidy( void );
1123 
1124 // Change state.
1125 
1126 PLDLLIMPEXP void
1127 plP_state( PLINT op );
1128 
1129 // Escape function, for driver-specific commands.
1130 
1131 PLDLLIMPEXP void
1132 plP_esc( PLINT op, void *ptr );
1133 
1134 // Set up plot window parameters.
1135 
1136 void
1137 plP_swin( PLWindow *plwin );
1138 
1139 // Wait for user input
1140 
1141 PLDLLIMPEXP void
1142 plP_wait( void );
1143 
1144 // Return file pointer to lib file.
1145 
1146 FILE *
1147 plLibOpen( PLCHAR_VECTOR fn );
1148 
1149 // Does required startup initialization of library.
1150 
1151 PLDLLIMPEXP void
1152 pllib_init( void );
1153 
1154 // Does preliminary setup of device driver.
1155 
1156 PLDLLIMPEXP void
1157 pllib_devinit( void );
1158 
1159 // Utility to copy one PLColor to another.
1160 
1161 PLDLLIMPEXP void
1162 pl_cpcolor( PLColor *to, PLColor *from );
1163 
1164 // Does required startup initialization of a stream.
1165 
1166 void
1167 plstrm_init( void );
1168 
1169 // Builds a list of the active devices/streams by device name
1170 
1171 void
1172 PLDLLIMPEXP plP_getinitdriverlist( char *names );
1173 
1174 // Checks a give list of device names against active streams and returns the number of matches
1175 
1176 PLINT
1177 plP_checkdriverinit( char *names );
1178 
1179 // disable writing to plot buffer and pixmap
1180 void
1181 NoBufferNoPixmap( void );
1182 
1183 // restart writing to plot buffer and pixmap
1184 void
1186 
1187 void
1188 grimage( short *x, short *y, unsigned short *z, PLINT nx, PLINT ny );
1189 
1190 PLDLLIMPEXP int
1191 plInBuildTree( void );
1192 
1193 void
1194 plimageslow( PLFLT *idata, PLINT nx, PLINT ny,
1195  PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy,
1196  void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ),
1197  PLPointer pltr_data );
1198 
1199 typedef struct
1200 {
1201  PLFLT xmin, ymin, dx, dy;
1202 } IMG_DT;
1203 
1204 //
1205 // void plfvect()
1206 //
1207 // Internal routine to plot a vector array with arbitrary coordinate
1208 // and vector transformations.
1209 // This is not currently intended to be called direct by the user
1210 //
1211 PLDLLIMPEXP void
1213  PLPointer f2evalv_data, PLPointer f2evalc_data,
1214  PLINT nx, PLINT ny, PLFLT scale,
1215  void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ),
1216  PLPointer pltr_data );
1217 
1218 //
1219 // Internal function to get an index to the hershey table
1220 //
1221 int
1222 plhershey2unicode( int in );
1223 
1224 // struct used for FCI to FontName lookups.
1225 typedef struct
1226 {
1228  const unsigned char *pfont;
1230 
1231 // Internal function to obtain a pointer to a valid font name.
1232 PLDLLIMPEXP const char *
1234  const FCI_to_FontName_Table lookup[], const int nlookup );
1235 
1236 
1237 // Internal function to free memory from driver options
1238 void
1239 plP_FreeDrvOpts( void );
1240 
1241 // Convert a ucs4 unichar to utf8 char string
1242 PLDLLIMPEXP int
1243 ucs4_to_utf8( PLUNICODE unichar, char *ptr );
1244 
1245 //
1246 // Wrapper functions for the system IO routines fread, fwrite
1247 //
1248 
1249 // wraps fwrite
1250 
1251 void
1252 plio_fwrite( void *, size_t, size_t, FILE * );
1253 
1254 // wraps fread
1255 
1256 void
1257 plio_fread( void *, size_t, size_t, FILE * );
1258 
1259 // wraps fgets
1260 
1261 void
1262 plio_fgets( char *, int, FILE * );
1263 
1264 // Draws a tick parallel to x, using world coordinates
1265 void
1266 plwxtik( PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert );
1267 
1268 // Draws a tick parallel to y, using world coordinates
1269 void
1270 plwytik( PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert );
1271 
1272 // get drivers directory
1273 
1274 #ifdef ENABLE_DYNDRIVERS
1275 PLDLLIMPEXP const char*
1276 plGetDrvDir( void );
1277 #endif
1278 
1279 #ifdef PL_HAVE_FREETYPE
1280 PLDLLIMPEXP void
1281 plD_FreeType_init( PLStream * );
1282 
1283 PLDLLIMPEXP void
1284 plD_render_freetype_text( PLStream *, EscText * );
1285 
1286 PLDLLIMPEXP void
1287 plD_FreeType_Destroy( PLStream * );
1288 
1289 PLDLLIMPEXP void
1290 pl_set_extended_cmap0( PLStream *, int, int );
1291 
1292 #endif
1293 
1294 // Create a temporary file securely
1295 PLDLLIMPEXP FILE *
1296 pl_create_tempfile( char **fname );
1297 
1298 // Create a temporary fifo securely
1299 PLDLLIMPEXP char *
1300 pl_create_tempfifo( const char **p_fifoname, const char **p_dirname );
1301 
1302 // Read a meta file
1303 PLDLLIMPEXP void
1304 plreadmetafile( char *infile );
1305 
1306 #ifdef __cplusplus
1307 }
1308 #endif
1309 
1310 #endif // __PLPLOTP_H__
PLDLLIMPEXP void plP_esc(PLINT op, void *ptr)
Definition: plcore.c:265
PLDLLIMPEXP_DATA(PLStream *) plsc
PLINT plP_checkdriverinit(char *names)
Definition: plcore.c:4311
PLFLT plP_mmdcx(PLFLT x)
Definition: plcvt.c:103
PLDLLIMPEXP void difilt_clip(PLINT *, PLINT *)
Definition: plcore.c:1579
PLDLLIMPEXP PLINT plP_strpos(PLCHAR_VECTOR str, int chr)
Definition: plsym.c:1198
void NoBufferNoPixmap(void)
Definition: plimage.c:41
PLFLT plP_dcmmy(PLFLT y)
Definition: plcvt.c:163
PLFLT plP_scdcy(PLFLT y)
Definition: plcvt.c:143
void plP_hex2fci(unsigned char hexdigit, unsigned char hexpower, PLUNICODE *pfci)
Definition: plcore.c:3924
PLFLT just
Definition: plplotP.h:704
PLDLLIMPEXP void plwarn(PLCHAR_VECTOR errormsg)
Definition: plctrl.c:1853
void plstrm_init(void)
Definition: plcore.c:2690
PLFLT plf2eval(PLINT ix, PLINT iy, PLPointer plf2eval_data)
Definition: plcont.c:447
PLFLT plP_wcmmx(PLFLT x)
Definition: plcvt.c:171
PLDLLIMPEXP void plcmap1_calc(void)
Definition: plctrl.c:804
PLDLLIMPEXP void plP_affine_rotate(PLFLT *affine_vector, PLFLT angle)
Definition: plaffine.c:123
PLFLT plP_pcdcy(PLINT y)
Definition: plcvt.c:95
void plio_fwrite(void *, size_t, size_t, FILE *)
Definition: plstdio.c:68
PLUINT PLUNICODE
Definition: plplot.h:194
PLFLT plP_dcscy(PLFLT y)
Definition: plcvt.c:199
const PLFLT *const * PLFLT_MATRIX
Definition: plplot.h:255
void plP_drawor_poly(PLFLT_VECTOR x, PLFLT_VECTOR y, PLINT n)
Definition: plline.c:554
PLFLT plP_wcmmy(PLFLT y)
Definition: plcvt.c:179
PLDLLIMPEXP void difilt(PLINT *, PLINT *, PLINT, PLINT *, PLINT *, PLINT *, PLINT *)
Definition: plcore.c:1436
PLDLLIMPEXP void plP_setsub(void)
Definition: plpage.c:189
PLDLLIMPEXP void pllib_devinit(void)
Definition: plcore.c:2853
int plsnscanf(PLCHAR_VECTOR buffer, int n, PLCHAR_VECTOR format,...)
Definition: plctrl.c:3035
PLFLT plP_pcdcx(PLINT x)
Definition: plcvt.c:87
const char * PLCHAR_VECTOR
Definition: plplot.h:245
void plP_movphy(PLINT x, PLINT y)
Definition: plline.c:459
PLFLT plP_w3wcy(PLFLT x, PLFLT y, PLFLT z)
Definition: plcvt.c:222
void plP_line(short *x, short *y)
Definition: plcore.c:380
void plwxtik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
Definition: pltick.c:30
struct cont_line * next
Definition: plplotP.h:777
PLINT plP_mmpcx(PLFLT x)
Definition: plcvt.c:47
struct cont_line * line
Definition: plplotP.h:784
PLCHAR_VECTOR opt
Definition: plplotP.h:746
void * var_ptr
Definition: plplotP.h:748
unsigned int Hershey
Definition: plplotP.h:454
void plio_fgets(char *, int, FILE *)
Definition: plstdio.c:142
void pldtfac(PLFLT vmin, PLFLT vmax, PLFLT *factor, PLFLT *tstart)
Definition: pldtik.c:122
void plP_polyline(short *x, short *y, PLINT npts)
Definition: plcore.c:409
PLFLT plstrl(PLCHAR_VECTOR string)
Definition: plsym.c:958
void * PLPointer
Definition: plplot.h:202
PLFLT plP_dcmmx(PLFLT x)
Definition: plcvt.c:155
void RestoreWrite2BufferPixmap(void)
Definition: plimage.c:51
const char plP_greek_mnemonic[]
Definition: plcore.c:134
PLDLLIMPEXP void plP_affine_xskew(PLFLT *affine_vector, PLFLT angle)
Definition: plaffine.c:143
PLBOOL fill
Definition: plplotP.h:1106
const char * plP_gtimefmt(void)
Definition: plcore.c:3855
PLDLLIMPEXP void plP_affine_multiply(PLFLT *affine_vectorA, PLFLT_VECTOR affine_vectorB, PLFLT_VECTOR affine_vectorC)
Definition: plaffine.c:184
PLDLLIMPEXP void plexit(PLCHAR_VECTOR errormsg)
Definition: plctrl.c:1948
PLFLT plP_w3wcz(PLFLT x, PLFLT y, PLFLT z)
Definition: plcvt.c:233
PLINT n_ctrl_char
Definition: plplotP.h:724
PLDLLIMPEXP const char * plP_FCI2FontName(PLUNICODE fci, const FCI_to_FontName_Table lookup[], const int nlookup)
Definition: plsym.c:1530
PLDLLIMPEXP void plreadmetafile(char *infile)
Definition: plmetafile.c:1122
PLDLLIMPEXP void plrestore_locale(char *save_lc_numeric_locale)
Definition: plctrl.c:3135
int PLINT
Definition: plplot.h:174
PLFLT ymin
Definition: plplotP.h:1201
PLINT PLBOOL
Definition: plplot.h:197
PLDLLIMPEXP void plfill_soft(short *x, short *y, PLINT npts)
Definition: plfill.c:307
PLINT npts
Definition: plplotP.h:776
int plP_clipline(PLINT *p_x1, PLINT *p_y1, PLINT *p_x2, PLINT *p_y2, PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax)
Definition: plline.c:697
void plP_tidy(void)
Definition: plcore.c:223
PLUNICODE n_fci
Definition: plplotP.h:722
PLBOOL plP_stsearch(PLCHAR_VECTOR str, int chr)
Definition: plsym.c:1238
PLINT refy
Definition: plplotP.h:713
const unsigned char * pfont
Definition: plplotP.h:1228
void plwytik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
Definition: pltick.c:66
PLFLT plP_wcdcx(PLFLT x)
Definition: plcvt.c:119
PLDLLIMPEXP void plP_eop(void)
Definition: plcore.c:156
PLDLLIMPEXP void plP_setpxl(PLFLT xpmm0, PLFLT ypmm0)
Definition: plcore.c:4217
PLFLT * x
Definition: plplotP.h:774
PLDLLIMPEXP void plP_gpixmm(PLFLT *p_x, PLFLT *p_y)
Definition: plcore.c:4208
void cont_store(PLFLT_MATRIX f, PLINT nx, PLINT ny, PLINT kx, PLINT lx, PLINT ky, PLINT ly, PLFLT_VECTOR clevel, PLINT nlevel, void(*pltr)(PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data, CONT_LEVEL **contour)
PLFLT b
Definition: plplotP.h:1102
PLCHAR_VECTOR hlp_msg
Definition: plplotP.h:749
void PLDLLIMPEXP plP_getinitdriverlist(char *names)
Definition: plcore.c:4281
PLDLLIMPEXP void pl_cpcolor(PLColor *to, PLColor *from)
Definition: plcore.c:2717
PLDLLIMPEXP void plP_wait(void)
Definition: plcore.c:357
void grimage(short *x, short *y, unsigned short *z, PLINT nx, PLINT ny)
Definition: plimage.c:150
PLDLLIMPEXP void plP_affine_identity(PLFLT *affine_vector)
Definition: plaffine.c:56
void plP_gradient(short *x, short *y, PLINT npts)
Definition: plcore.c:508
PLINT plP_dcpcx(PLFLT x)
Definition: plcvt.c:31
void cont_clean_store(CONT_LEVEL *ct)
Definition: plcont.c:173
void plP_subpInit(void)
Definition: plpage.c:134
PLINT plP_wcpcx(PLFLT x)
Definition: plcvt.c:63
static PLINT * buffer
Definition: plfill.c:74
void plHelpDrvOpts(DrvOpt *)
Definition: plargs.c:1540
void plP_gzback(PLINT **zbf, PLINT **zbc, PLFLT **zbt, PLFLT **zbw)
Definition: plot3d.c:1551
void xform(PLFLT x, PLFLT y, PLFLT *tx, PLFLT *ty, PLPointer pltr_data)
PLFLT rotate
Definition: plplotP.h:1105
void pl_exit(void)
void plP_plfclp(PLINT *x, PLINT *y, PLINT npts, PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax, void(*draw)(short *, short *, PLINT))
Definition: plfill.c:538
Hershey_to_Unicode_table hershey_to_unicode_lookup_table[]
PLFLT * y
Definition: plplotP.h:775
PLDLLIMPEXP void plP_affine_scale(PLFLT *affine_vector, PLFLT xscale, PLFLT yscale)
Definition: plaffine.c:93
void pldtik(PLFLT vmin, PLFLT vmax, PLFLT *tick, PLINT *nsubt, PLBOOL ld)
Definition: pldtik.c:36
PLDLLIMPEXP FILE * pl_create_tempfile(char **fname)
Definition: plstdio.c:240
PLDLLIMPEXP void plP_setphy(PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax)
Definition: plcore.c:4228
int plsnprintf(char *buffer, int n, PLCHAR_VECTOR format,...)
Definition: plctrl.c:3003
PLFLT plP_mmdcy(PLFLT y)
Definition: plcvt.c:111
struct cont_level CONT_LEVEL
PLFLT x
Definition: plplotP.h:1099
PLDLLIMPEXP void plP_fci2hex(PLUNICODE fci, unsigned char *phexdigit, unsigned char hexpower)
Definition: plcore.c:3937
PLFLT angle2
Definition: plplotP.h:1104
void plP_FreeDrvOpts(void)
Definition: plargs.c:1560
void plhrsh(PLINT ch, PLINT x, PLINT y)
Definition: plsym.c:349
void plP_init(void)
Definition: plcore.c:137
int plP_clip_poly(int Ni, PLFLT *Vi[3], int axis, PLFLT dir, PLFLT offset)
Definition: plot3d.c:166
PLINT plP_wcpcy(PLFLT y)
Definition: plcvt.c:73
PLDLLIMPEXP void plRotationShear(PLFLT *xFormMatrix, PLFLT *rotation, PLFLT *shear, PLFLT *stride)
Definition: plot3d.c:2767
void plstik(PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy)
Definition: pltick.c:130
void plP_sclp(PLINT ixmin, PLINT ixmax, PLINT iymin, PLINT iymax)
Definition: plcore.c:4164
void plP_drawor(PLFLT x, PLFLT y)
Definition: plline.c:505
void plP_text(PLINT base, PLFLT just, PLFLT *xform, PLINT x, PLINT y, PLINT refx, PLINT refy, PLCHAR_VECTOR string)
Definition: plcore.c:1162
PLFLT plP_scdcx(PLFLT x)
Definition: plcvt.c:135
PLDLLIMPEXP int plParseDrvOpts(DrvOpt *)
Definition: plargs.c:1461
struct cont_line CONT_LINE
PLFLT a
Definition: plplotP.h:1101
PLDLLIMPEXP void plP_affine_translate(PLFLT *affine_vector, PLFLT xtranslate, PLFLT ytranslate)
Definition: plaffine.c:73
unsigned short unicode_array_len
Definition: plplotP.h:732
void plytik(PLINT x, PLINT y, PLINT left, PLINT right)
Definition: pltick.c:116
FILE * plLibOpen(PLCHAR_VECTOR fn)
Definition: plctrl.c:2219
void plio_fread(void *, size_t, size_t, FILE *)
Definition: plstdio.c:98
void plP_gw3wc(PLFLT *p_dxx, PLFLT *p_dxy, PLFLT *p_dyx, PLFLT *p_dyy, PLFLT *p_dyz)
Definition: plcore.c:4141
PLDLLIMPEXP char * pl_create_tempfifo(const char **p_fifoname, const char **p_dirname)
Definition: plstdio.c:344
PLINT refx
Definition: plplotP.h:712
void plP_draphy(PLINT x, PLINT y)
Definition: plline.c:472
PLDLLIMPEXP void plabort(PLCHAR_VECTOR errormsg)
Definition: plctrl.c:1884
float PLFLT
Definition: plplot.h:157
void plP_movwor(PLFLT x, PLFLT y)
Definition: plline.c:489
PLFLT y
Definition: plplotP.h:1100
PLINT type
Definition: plplotP.h:747
PLINT symbol
Definition: plplotP.h:736
PLDLLIMPEXP void plfvect(PLFLT(*plf2eval)(PLINT, PLINT, PLPointer), PLPointer f2evalv_data, PLPointer f2evalc_data, PLINT nx, PLINT ny, PLFLT scale, void(*pltr)(PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data)
PLDLLIMPEXP void plP_ssub(PLINT nx, PLINT ny, PLINT cs)
Definition: plcore.c:4198
void plP_image(PLFLT *z, PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, void(*pltr)(PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data)
Definition: plcore.c:4354
void plP_gclp(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
Definition: plcore.c:4153
void plxtik(PLINT x, PLINT y, PLINT below, PLINT above)
Definition: pltick.c:103
void plP_gdom(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
Definition: plcore.c:4120
void plP_gprec(PLINT *p_setp, PLINT *p_prec)
Definition: plcore.c:3848
void plP_grange(PLFLT *p_zscl, PLFLT *p_zmin, PLFLT *p_zmax)
Definition: plcore.c:4131
PLDLLIMPEXP void plP_fill(short *x, short *y, PLINT npts)
Definition: plcore.c:443
PLDLLIMPEXP void plP_bop(void)
Definition: plcore.c:190
PLINT y
Definition: plplotP.h:709
PLFLT plP_w3wcx(PLFLT x, PLFLT y, PLFLT z)
void plimageslow(PLFLT *idata, PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, void(*pltr)(PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data)
int plhershey2unicode(int in)
Definition: plsym.c:1472
void pldprec(PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT lf, PLINT *mode, PLINT *prec, PLINT digmax, PLINT *scale)
Definition: pldtik.c:251
PLDLLIMPEXP int ucs4_to_utf8(PLUNICODE unichar, char *ptr)
Definition: plcore.c:1305
PLDLLIMPEXP void plP_gphy(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
Definition: plcore.c:4177
PLINT plP_stindex(PLCHAR_VECTOR str1, PLCHAR_VECTOR str2)
Definition: plsym.c:1215
PLINT plP_mmpcy(PLFLT y)
Definition: plcvt.c:55
PLDLLIMPEXP void pllib_init(void)
Definition: plcore.c:2238
PLINT plP_dcpcy(PLFLT y)
Definition: plcvt.c:39
PLDLLIMPEXP char * plsave_set_locale(void)
Definition: plctrl.c:3091
void plP_xgvpw(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
Definition: plcore.c:4097
#define PLDLLIMPEXP
Definition: pldll.h:49
void plfntld(PLINT fnt)
Definition: plsym.c:1376
void label_box_custom(PLCHAR_VECTOR xopt, PLINT n_xticks, PLFLT_VECTOR xticks, PLCHAR_VECTOR yopt, PLINT n_yticks, PLFLT_VECTOR yticks)
Definition: plbox.c:1925
const char * string
Definition: plplotP.h:735
PLFLT plP_wcdcy(PLFLT y)
Definition: plcvt.c:127
void plP_draphy_poly(PLINT *x, PLINT *y, PLINT n)
Definition: plline.c:527
int number_of_entries_in_hershey_to_unicode_table
PLFLT plP_dcscx(PLFLT x)
Definition: plcvt.c:191
int plP_pointinpolygon(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR y, PLFLT xp, PLFLT yp)
Definition: plfill.c:1212
PLFLT level
Definition: plplotP.h:783
const PLFLT * PLFLT_VECTOR
Definition: plplot.h:246
PLINT x
Definition: plplotP.h:708
PLUNICODE unicode_char
Definition: plplotP.h:727
PLDLLIMPEXP void plP_script_scale(PLBOOL ifupper, PLINT *level, PLFLT *old_scale, PLFLT *scale, PLFLT *old_offset, PLFLT *offset)
Definition: plsym.c:1284
PLUNICODE n_char
Definition: plplotP.h:723
PLDLLIMPEXP void plP_gsub(PLINT *p_nx, PLINT *p_ny, PLINT *p_cs)
Definition: plcore.c:4188
PLDLLIMPEXP void plP_state(PLINT op)
Definition: plcore.c:248
void plP_swin(PLWindow *plwin)
Definition: plcore.c:300
PLUNICODE * unicode_array
Definition: plplotP.h:731
void plfontrel(void)
Definition: plsym.c:1445
PLFLT angle1
Definition: plplotP.h:1103
char font_face
Definition: plplotP.h:716
PLDLLIMPEXP char * plstrdup(PLCHAR_VECTOR src)
Definition: plctrl.c:2975
struct cont_level * next
Definition: plplotP.h:785
void plstr(PLINT base, PLFLT *xform, PLINT refx, PLINT refy, PLCHAR_VECTOR string)
Definition: plsym.c:792
PLFLT * xform
Definition: plplotP.h:705
PLDLLIMPEXP int plInBuildTree(void)
Definition: plcore.c:2867
void plP_pllclp(PLINT *x, PLINT *y, PLINT npts, PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax, void(*draw)(short *, short *, PLINT))
Definition: plline.c:599
PLINT base
Definition: plplotP.h:703
PLDLLIMPEXP void plP_affine_yskew(PLFLT *affine_vector, PLFLT angle)
Definition: plaffine.c:162