PLplot 5.15.0
Loading...
Searching...
No Matches
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
99typedef 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
161extern "C" {
162#endif
163// extern PLStream PLDLLIMPORT *plsc;
164extern 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
233int plsnprintf( char *buffer, int n, PLCHAR_VECTOR format, ... );
234int 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#define PLSTATE_EOFILL 9 // change to even odd fill rule
371
372// Enum for flagging the render status of PLplot
374
375
376// Bit switches used in the driver interface
377
378#define PLDI_MAP 0x01
379#define PLDI_ORI 0x02
380#define PLDI_PLT 0x04
381#define PLDI_DEV 0x08
382
383// Default size for family files, in KB.
384
385#ifndef PL_FILESIZE_KB
386#define PL_FILESIZE_KB 1000
387#endif
388
389// Font file names.
390
391#define PLPLOT5_FONTS
392
393#ifdef PLPLOT5_FONTS
394#define PL_XFONT "plxtnd5.fnt"
395#define PL_SFONT "plstnd5.fnt"
396#else
397#define PL_XFONT "plxtnd4.fnt"
398#define PL_SFONT "plstnd4.fnt"
399#endif
400
401//--------------------------------------------------------------------------
402// The following environment variables are defined:
403//
404// PLPLOT_BIN # where to find executables
405// PLPLOT_LIB # where to find library files (fonts, maps, etc)
406// PLPLOT_TCL # where to find tcl scripts
407//
408// PLPLOT_HOME # basename of plplot hierarchy
409//
410// search order:
411// 1) the most specific possible locators, one of
412// $(PLPLOT_BIN)
413// $(PLPLOT_LIB)
414// $(PLPLOT_TCL)
415// as appropriate
416//
417// 2) the current directory
418//
419// 3) one of $(PLPLOT_HOME)/bin
420// $(PLPLOT_HOME)/lib
421// $(PLPLOT_HOME)/tcl
422// as appropriate
423//
424// 4) as appropriate, the compile-time (Makefile)
425// BIN_DIR, LIB_DIR, TCL_DIR
426//
427// 8 Jun 1994 mj olesen (olesen@weber.me.queensu.ca)
428//
429// Other notes:
430//
431// In addition to the directories above, the following are also used:
432//
433// Lib file search path: PLLIBDEV (see plctrl.c). This is checked last,
434// and is a system-dependent hardwired location.
435//
436// Tcl search path: $HOME/tcl is searched before the install location,
437// TCL_DIR.
438//--------------------------------------------------------------------------
439
440#define PLPLOT_BIN_ENV "PLPLOT_BIN"
441#define PLPLOT_LIB_ENV "PLPLOT_LIB"
442#define PLPLOT_TCL_ENV "PLPLOT_TCL"
443#define PLPLOT_HOME_ENV "PLPLOT_HOME"
444
445// Maximum size for path strings in the plplot code
446#define PLPLOT_MAX_PATH 1024
447
448//
449// Some stuff that is included (and compiled into) plsym.h
450// Other modules might want this, so we will "extern" it
451//
452//
453
454#ifndef __PLSYM_H__
455
456typedef struct
457{
458 unsigned int Hershey;
460 char Font;
462
465
466
467#endif
468
469// Greek character translation array (defined in plcore.c)
470extern const char plP_greek_mnemonic[];
471
472//--------------------------------------------------------------------------
473// Function Prototypes
474//
475// These typically should not be called directly by the user.
476//--------------------------------------------------------------------------
477
478#ifdef __cplusplus
479extern "C" {
480#endif
481
482// Number of elements in the affine vector representation of the affine
483// transformation matrix.
484#define NAFFINE 6
485
486// Returns affine identity matrix
487
488PLDLLIMPEXP void
489plP_affine_identity( PLFLT *affine_vector );
490
491// Translate new coordinate system axes relative to the old.
492
493PLDLLIMPEXP void
494plP_affine_translate( PLFLT *affine_vector, PLFLT xtranslate, PLFLT ytranslate );
495
496// Scale new coordinate system axes relative to the old.
497
498PLDLLIMPEXP void
499plP_affine_scale( PLFLT *affine_vector, PLFLT xscale, PLFLT yscale );
500
501// Rotate new coordinate system axes relative to the old.
502// angle is in degrees.
503
504PLDLLIMPEXP void
505plP_affine_rotate( PLFLT *affine_vector, PLFLT angle );
506
507// Skew new X coordinate axis relative to the old.
508// angle is in degrees.
509
510PLDLLIMPEXP void
511plP_affine_xskew( PLFLT *affine_vector, PLFLT angle );
512
513// Skew new Y coordinate axis relative to the old.
514// angle is in degrees.
515
516PLDLLIMPEXP void
517plP_affine_yskew( PLFLT *affine_vector, PLFLT angle );
518
519// Multiply two affine transformation matrices to form a third.
520//
521// A = B * C
522//
523//
524
525PLDLLIMPEXP void
527 PLFLT *affine_vectorA,
528 PLFLT_VECTOR affine_vectorB,
529 PLFLT_VECTOR affine_vectorC );
530
531// Determines interval between numeric labels
532
533void
534pldtik( PLFLT vmin, PLFLT vmax, PLFLT *tick, PLINT *nsubt, PLBOOL ld );
535
536// Writes numeric labels on side(s) of box in custom locations
537
538void
539label_box_custom( PLCHAR_VECTOR xopt, PLINT n_xticks, PLFLT_VECTOR xticks, PLCHAR_VECTOR yopt, PLINT n_yticks, PLFLT_VECTOR yticks );
540
541// Determine factor to convert date / time in seconds to more natural
542// units
543
544void
545pldtfac( PLFLT vmin, PLFLT vmax, PLFLT *factor, PLFLT *tstart );
546
547// Determines precision of box labels
548
549void
550pldprec( PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT lf,
551 PLINT *mode, PLINT *prec, PLINT digmax, PLINT *scale );
552
553// Draws a polyline within the clip limits.
554
555void
556plP_pllclp( PLINT *x, PLINT *y, PLINT npts,
557 PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax,
558 void ( *draw )( short *, short *, PLINT ) );
559
560// Fills a polygon within the clip limits.
561
562void
563plP_plfclp( PLINT *x, PLINT *y, PLINT npts,
564 PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax,
565 void ( *draw )( short *, short *, PLINT ) );
566
567// Clip a polygon to the 3d bounding plane
568int
569plP_clip_poly( int Ni, PLFLT *Vi[3], int axis, PLFLT dir, PLFLT offset );
570
571// Get clipped endpoints
572
573int
574plP_clipline( PLINT *p_x1, PLINT *p_y1, PLINT *p_x2, PLINT *p_y2,
575 PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax );
576
577// Stores hex digit value into FCI (font characterization integer).
578void
579plP_hex2fci( unsigned char hexdigit, unsigned char hexpower, PLUNICODE *pfci );
580
581// Retrieves hex digit value from FCI (font characterization integer).
582PLDLLIMPEXP void
583plP_fci2hex( PLUNICODE fci, unsigned char *phexdigit, unsigned char hexpower );
584
585// Pattern fills in software the polygon bounded by the input points.
586
587PLDLLIMPEXP void
588plfill_soft( short *x, short *y, PLINT npts );
589
590// In case of an abort this routine is called. It just prints out an
591// error message and tries to clean up as much as possible.
592
593PLDLLIMPEXP void
594plexit( PLCHAR_VECTOR errormsg );
595
596// Just a front-end to exit().
597
598void
599pl_exit( void );
600
601// A handy way to issue warnings, if need be.
602
603PLDLLIMPEXP void
604plwarn( PLCHAR_VECTOR errormsg );
605
606// Same as plwarn(), but appends ", aborting plot" to the error message
607
608PLDLLIMPEXP void
609plabort( PLCHAR_VECTOR errormsg );
610
611// Loads either the standard or extended font.
612
613void
614plfntld( PLINT fnt );
615
616// Release memory for fonts.
617
618void
619plfontrel( void );
620
621// A replacement for strdup(), which isn't portable.
622
623PLDLLIMPEXP char *
625
626// Bin up cmap 1 space and assign colors to make inverse mapping easy.
627
628PLDLLIMPEXP void
629plcmap1_calc( void );
630
631// Draws a slanting tick at position (mx,my) (measured in mm) of
632// vector length (dx,dy).
633
634void
635plstik( PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy );
636
637// Prints out a "string" at reference position with physical coordinates
638// (refx,refy).
639
640void
641plstr( PLINT base, PLFLT *xform, PLINT refx, PLINT refy, PLCHAR_VECTOR string );
642
643// Draws a tick parallel to x.
644
645void
646plxtik( PLINT x, PLINT y, PLINT below, PLINT above );
647
648// Draws a tick parallel to y.
649
650void
651plytik( PLINT x, PLINT y, PLINT left, PLINT right );
652
653// Driver interface filter --
654// passes all coordinates through a variety of filters.
655
656PLDLLIMPEXP void
657difilt( PLINT *, PLINT *, PLINT,
658 PLINT *, PLINT *, PLINT *, PLINT * );
659
660// Transforms the clipping region coordinates as necessary
661// based on the current plot orientation, etc.
662
663PLDLLIMPEXP void
664difilt_clip( PLINT *, PLINT * );
665
666// Calculate scale of font size and scale of magnitude of vertical
667// offset associated with superscripts and subscripts.
668
669PLDLLIMPEXP void
670plP_script_scale( PLBOOL ifupper, PLINT *level,
671 PLFLT *old_scale, PLFLT *scale,
672 PLFLT *old_offset, PLFLT *offset );
673
674// Driver draws text
675
676void
677plP_text( PLINT base, PLFLT just, PLFLT *xform, PLINT x, PLINT y,
678 PLINT refx, PLINT refy, PLCHAR_VECTOR string );
679
680// Save LC_NUMERIC locale string, then set "C" locale to protect
681// parts of PLplot which absolutely demand the LC_NUMERIC "C" locale.
682
683PLDLLIMPEXP char *
684plsave_set_locale( void );
685
686// Restore LC_NUMERIC locale that was determined by plsave_set_locale.
687
688PLDLLIMPEXP void
689plrestore_locale( char * save_lc_numeric_locale );
690
691// Writes the Hershey symbol "ch" centred at the physical coordinate (x,y).
692void
693plhrsh( PLINT ch, PLINT x, PLINT y );
694
695// where should structure definitions that must be seen by drivers and core source files, be?
696
697// structure to be used by plcore.c and anydriver.c, related to plP_text()
698
699typedef struct
700{
701 // Indicates the type of text stored in the structure. This flag
702 // is used by the plot metafiles to correctly store and then render
703 // the contents.
704 enum { PL_STRING_TEXT, PL_STRING_SYMBOL } text_type;
705
706 // Positioning settings
707 PLINT base; // ref point at base(1) or center(0) of text. Currently plplot only use 0
708 PLFLT just; // continuos justification, 0 left, 0.5 center, 1 right
709 PLFLT *xform; // transformation (rotation) matrix
710
711 // raw reference point--after any transformation
714
715 // processed ref. point--after justification, displacement, etc, processing
718
719 // font face OPTIONALLY used for rendering hershey codes
721
722 // The following 3 fields are used by the alternative text handling pathway.
723 // The alternative text handling pathway allows the driver to process
724 // each character individually for unicode font handling
725 // See drivers/cairo.h for details about how this works.
726 PLUNICODE n_fci; // font storage
727 PLUNICODE n_char; // character storage
728 PLINT n_ctrl_char; // control character
729
730 // Used by plsym to store a unicode character for use by plfreetype
731 PLUNICODE unicode_char; // an int to hold either a Hershey, ASC-II, or Unicode value for plsym calls
732
733 // Used to store a processed unicode string. Used by plsym and
734 // text rendering by the driver
735 PLUNICODE *unicode_array; // a pointer to an array of ints holding either a Hershey, ASC-II, or Unicode value for cached plsym
736 unsigned short unicode_array_len;
737
738 // Non-unicode strings and unprocessed string in the unicode case
739 const char *string; // text to draw
740 PLINT symbol; // plot symbol to draw
741}EscText;
742
743//
744// structure that contains driver specific information, to be used by
745// plargs.c and anydriver.c, related to plParseDrvOpts() and plHelpDrvOpts()
746//
747
748typedef struct
749{
750 PLCHAR_VECTOR opt; // a string with the name of the option
751 PLINT type; // the type of the variable to be set, see bellow the available types
752 void *var_ptr; // a pointer to the variable to be set
753 PLCHAR_VECTOR hlp_msg; // help message of the option
754} DrvOpt;
755
756// the available variable types, DrvOpt.type, for driver specific options
757
759
760// parse driver specific options, as in -drvopt <option[=value]>*
761
762PLDLLIMPEXP int
764
765// give help on driver specific options
766
767void
769
770//
771// structures to store contour lines
772//
773
774#define LINE_ITEMS 20
775
776typedef struct cont_line
777{
783
784typedef struct cont_level
785{
786 // INDENT-OFF (stop infinite recursion)
787 PLFLT level; // contour level
788 struct cont_line *line; // contour line struct
789 struct cont_level *next; // contour level struct
790 // INDENT-ON
792
793void
795 PLINT kx, PLINT lx, PLINT ky, PLINT ly,
796 PLFLT_VECTOR clevel, PLINT nlevel,
797 void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ),
798 PLPointer pltr_data,
799 CONT_LEVEL **contour );
800
801void
803
804// Get the viewport boundaries in world coordinates, expanded slightly
805
806void
807plP_xgvpw( PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax );
808
809// Get x-y domain in world coordinates for 3d plots
810
811void
812plP_gdom( PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax );
813
814// Get vertical (z) scale parameters for 3-d plot
815
816void
817plP_grange( PLFLT *p_zscl, PLFLT *p_zmin, PLFLT *p_zmax );
818
819// Get parameters used in 3d plots
820
821void
822plP_gw3wc( PLFLT *p_dxx, PLFLT *p_dxy, PLFLT *p_dyx, PLFLT *p_dyy,
823 PLFLT *p_dyz );
824
825// Get clip boundaries in physical coordinates
826
827void
828plP_gclp( PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax );
829
830// Set clip boundaries in physical coordinates
831
832void
833plP_sclp( PLINT ixmin, PLINT ixmax, PLINT iymin, PLINT iymax );
834
835// Get physical device limits in physical coordinates
836
837PLDLLIMPEXP void
838plP_gphy( PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax );
839
840// Get number of subpages on physical device and current subpage
841
842PLDLLIMPEXP void
843plP_gsub( PLINT *p_nx, PLINT *p_ny, PLINT *p_cs );
844
845// Set number of subpages on physical device and current subpage
846
847PLDLLIMPEXP void
848plP_ssub( PLINT nx, PLINT ny, PLINT cs );
849
850// Set up plot parameters according to the number of subpages.
851
852void
853plP_subpInit( void );
854
855// Get number of pixels to a millimeter
856
857PLDLLIMPEXP void
858plP_gpixmm( PLFLT *p_x, PLFLT *p_y );
859
860// All the drivers call this to set physical pixels/mm.
861
862PLDLLIMPEXP void
863plP_setpxl( PLFLT xpmm0, PLFLT ypmm0 );
864
865// Get background parameters (including line width) for 3d plot.
866
867void
868plP_gzback( PLINT **zbf, PLINT **zbc, PLFLT **zbt, PLFLT **zbw );
869
870// Move to physical coordinates (x,y).
871
872void
873plP_movphy( PLINT x, PLINT y );
874
875// Draw to physical coordinates (x,y).
876
877void
878plP_draphy( PLINT x, PLINT y );
879
880// Move to world coordinates (x,y).
881
882void
883plP_movwor( PLFLT x, PLFLT y );
884
885// Draw to world coordinates (x,y).
886
887void
888plP_drawor( PLFLT x, PLFLT y );
889
890// Draw polyline in physical coordinates.
891
892void
893plP_draphy_poly( PLINT *x, PLINT *y, PLINT n );
894
895// Draw polyline in world coordinates.
896
897void
899
900// Sets up physical limits of plotting device.
901
902PLDLLIMPEXP void
903plP_setphy( PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax );
904
905// Set up the subpage boundaries according to the current subpage selected
906
907PLDLLIMPEXP void
908plP_setsub( void );
909
910// Get the floating point precision (in number of places) in numeric labels.
911
912void
913plP_gprec( PLINT *p_setp, PLINT *p_prec );
914
915// Get the date / time format for numeric labels
916
917const char *
918plP_gtimefmt( void );
919
920// Computes the length of a string in mm, including escape sequences.
921
922PLFLT
923plstrl( PLCHAR_VECTOR string );
924
925// Similar to strpos, but searches for occurence of string str2.
926
927PLINT
929
930// Searches string str for first occurence of character chr.
931
933plP_strpos( PLCHAR_VECTOR str, int chr );
934
935// Searches string str for character chr (case insensitive).
936
937PLBOOL
938plP_stsearch( PLCHAR_VECTOR str, int chr );
939
940// Conversion functions
941
942// device coords to physical coords (x)
943
944PLINT
945plP_dcpcx( PLFLT x );
946
947// device coords to physical coords (y)
948
949PLINT
950plP_dcpcy( PLFLT y );
951
952// millimeters from bottom left-hand corner to physical coords (x)
953
954PLINT
955plP_mmpcx( PLFLT x );
956
957// millimeters from bottom left-hand corner to physical coords (y)
958
959PLINT
960plP_mmpcy( PLFLT y );
961
962// world coords to physical coords (x)
963
964PLINT
965plP_wcpcx( PLFLT x );
966
967// world coords to physical coords (y)
968
969PLINT
970plP_wcpcy( PLFLT y );
971
972// physical coords to device coords (x)
973
974PLFLT
975plP_pcdcx( PLINT x );
976
977// physical coords to device coords (y)
978
979PLFLT
980plP_pcdcy( PLINT y );
981
982// millimeters from bottom left corner to device coords (x)
983
984PLFLT
985plP_mmdcx( PLFLT x );
986
987// millimeters from bottom left corner to device coords (y)
988
989PLFLT
990plP_mmdcy( PLFLT y );
991
992// world coords into device coords (x)
993
994PLFLT
995plP_wcdcx( PLFLT x );
996
997// world coords into device coords (y)
998
999PLFLT
1000plP_wcdcy( PLFLT y );
1001
1002// subpage coords to device coords (x)
1003
1004PLFLT
1005plP_scdcx( PLFLT x );
1006
1007// subpage coords to device coords (y)
1008
1009PLFLT
1010plP_scdcy( PLFLT y );
1011
1012// device coords to millimeters from bottom left-hand corner (x)
1013
1014PLFLT
1015plP_dcmmx( PLFLT x );
1016
1017// device coords to millimeters from bottom left-hand corner (y)
1018
1019PLFLT
1020plP_dcmmy( PLFLT y );
1021
1022// world coords into millimeters (x)
1023
1024PLFLT
1025plP_wcmmx( PLFLT x );
1026
1027// world coords into millimeters (y)
1028
1029PLFLT
1030plP_wcmmy( PLFLT y );
1031
1032// device coords to subpage coords (x)
1033
1034PLFLT
1035plP_dcscx( PLFLT x );
1036
1037// device coords to subpage coords (y)
1038
1039PLFLT
1040plP_dcscy( PLFLT y );
1041
1042// 3-d coords to 2-d projection (x)
1043
1044PLFLT
1046
1047// 3-d coords to 2-d projection (y)
1048
1049PLFLT
1050plP_w3wcy( PLFLT x, PLFLT y, PLFLT z );
1051
1052// 3-d coords to 2-d projection (z)
1053
1054PLFLT
1055plP_w3wcz( PLFLT x, PLFLT y, PLFLT z );
1056
1057// Returns the rotation and shear angle and stride from a plplot transformation matrix
1058
1059PLDLLIMPEXP void
1060plRotationShear( PLFLT *xFormMatrix, PLFLT *rotation, PLFLT *shear, PLFLT *stride );
1061
1062// Test whether a point is in a polygon.
1063int
1065 PLFLT xp, PLFLT yp );
1066
1067// Driver calls
1068
1069// Initialize device.
1070
1071void
1072plP_init( void );
1073
1074// Draw line between two points
1075
1076void
1077plP_line( short *x, short *y );
1078
1079// Draw polyline
1080
1081void
1082plP_polyline( short *x, short *y, PLINT npts );
1083
1084// Fill polygon
1085
1086PLDLLIMPEXP void
1087plP_fill( short *x, short *y, PLINT npts );
1088
1089// Render gradient
1090
1091void
1092plP_gradient( short *x, short *y, PLINT npts );
1093
1094// draw image
1095
1096void
1097plP_image( PLFLT *z, PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy,
1098 void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ), PLPointer pltr_data );
1099
1100// Structure for holding arc data
1101typedef struct
1102{
1111} arc_struct;
1112
1113// End of page
1114
1115PLDLLIMPEXP void
1116plP_eop( void );
1117
1118// End of page
1119
1120PLDLLIMPEXP void
1121plP_bop( void );
1122
1123// Tidy up device (flush buffers, close file, etc.)
1124
1125void
1126plP_tidy( void );
1127
1128// Change state.
1129
1130PLDLLIMPEXP void
1131plP_state( PLINT op );
1132
1133// Escape function, for driver-specific commands.
1134
1135PLDLLIMPEXP void
1136plP_esc( PLINT op, void *ptr );
1137
1138// Set up plot window parameters.
1139
1140void
1141plP_swin( PLWindow *plwin );
1142
1143// Wait for user input
1144
1145PLDLLIMPEXP void
1146plP_wait( void );
1147
1148// Return file pointer to lib file.
1149
1150FILE *
1152
1153// Does required startup initialization of library.
1154
1155PLDLLIMPEXP void
1156pllib_init( void );
1157
1158// Does preliminary setup of device driver.
1159
1160PLDLLIMPEXP void
1161pllib_devinit( void );
1162
1163// Utility to copy one PLColor to another.
1164
1165PLDLLIMPEXP void
1166pl_cpcolor( PLColor *to, PLColor *from );
1167
1168// Does required startup initialization of a stream.
1169
1170void
1171plstrm_init( void );
1172
1173// Builds a list of the active devices/streams by device name
1174
1175void
1176PLDLLIMPEXP plP_getinitdriverlist( char *names );
1177
1178// Checks a give list of device names against active streams and returns the number of matches
1179
1180PLINT
1181plP_checkdriverinit( char *names );
1182
1183// disable writing to plot buffer and pixmap
1184void
1185NoBufferNoPixmap( void );
1186
1187// restart writing to plot buffer and pixmap
1188void
1190
1191void
1192grimage( short *x, short *y, unsigned short *z, PLINT nx, PLINT ny );
1193
1194PLDLLIMPEXP int
1195plInBuildTree( void );
1196
1197void
1199 PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy,
1200 void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ),
1201 PLPointer pltr_data );
1202
1203typedef struct
1204{
1205 PLFLT xmin, ymin, dx, dy;
1206} IMG_DT;
1207
1208//
1209// void plfvect()
1210//
1211// Internal routine to plot a vector array with arbitrary coordinate
1212// and vector transformations.
1213// This is not currently intended to be called direct by the user
1214//
1215PLDLLIMPEXP void
1217 PLPointer f2evalv_data, PLPointer f2evalc_data,
1218 PLINT nx, PLINT ny, PLFLT scale,
1219 void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ),
1220 PLPointer pltr_data );
1221
1222//
1223// Internal function to get an index to the hershey table
1224//
1225int
1226plhershey2unicode( int in );
1227
1228// struct used for FCI to FontName lookups.
1229typedef struct
1230{
1232 const unsigned char *pfont;
1234
1235// Internal function to obtain a pointer to a valid font name.
1236PLDLLIMPEXP const char *
1238 const FCI_to_FontName_Table lookup[], const int nlookup );
1239
1240
1241// Internal function to free memory from driver options
1242void
1243plP_FreeDrvOpts( void );
1244
1245// Convert a ucs4 unichar to utf8 char string
1246PLDLLIMPEXP int
1247ucs4_to_utf8( PLUNICODE unichar, char *ptr );
1248
1249//
1250// Wrapper functions for the system IO routines fread, fwrite
1251//
1252
1253// wraps fwrite
1254
1255void
1256plio_fwrite( void *, size_t, size_t, FILE * );
1257
1258// wraps fread
1259
1260void
1261plio_fread( void *, size_t, size_t, FILE * );
1262
1263// wraps fgets
1264
1265void
1266plio_fgets( char *, int, FILE * );
1267
1268// Draws a tick parallel to x, using world coordinates
1269void
1270plwxtik( PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert );
1271
1272// Draws a tick parallel to y, using world coordinates
1273void
1274plwytik( PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert );
1275
1276// get drivers directory
1277
1278#ifdef ENABLE_DYNDRIVERS
1279PLDLLIMPEXP const char*
1280plGetDrvDir( void );
1281#endif
1282
1283#ifdef PL_HAVE_FREETYPE
1284PLDLLIMPEXP void
1285plD_FreeType_init( PLStream * );
1286
1287PLDLLIMPEXP void
1288plD_render_freetype_text( PLStream *, EscText * );
1289
1290PLDLLIMPEXP void
1291plD_FreeType_Destroy( PLStream * );
1292
1293PLDLLIMPEXP void
1294pl_set_extended_cmap0( PLStream *, int, int );
1295
1296#endif
1297
1298// Create a temporary file securely
1299PLDLLIMPEXP FILE *
1300pl_create_tempfile( char **fname );
1301
1302// Create a temporary fifo securely
1303PLDLLIMPEXP char *
1304pl_create_tempfifo( const char **p_fifoname, const char **p_dirname );
1305
1306// Read a meta file
1307PLDLLIMPEXP void
1308plreadmetafile( char *infile );
1309
1310#ifdef __cplusplus
1311}
1312#endif
1313
1314#endif // __PLPLOTP_H__
PLFLT plf2eval(PLINT ix, PLINT iy, PLPointer plf2eval_data)
Definition: plcont.c:447
#define PLDLLIMPEXP_DATA(type)
Definition: pldll.h:50
#define PLDLLIMPEXP
Definition: pldll.h:49
static PLINT * buffer
Definition: plfill.c:74
Hershey_to_Unicode_table hershey_to_unicode_lookup_table[]
void pldtik(PLFLT vmin, PLFLT vmax, PLFLT *tick, PLINT *nsubt, PLBOOL ld)
Definition: pldtik.c:36
PLDLLIMPEXP void plreadmetafile(char *infile)
Definition: plmetafile.c:1122
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
void plP_gzback(PLINT **zbf, PLINT **zbc, PLFLT **zbt, PLFLT **zbw)
Definition: plot3d.c:1551
FILE * plLibOpen(PLCHAR_VECTOR fn)
Definition: plctrl.c:2229
PLDLLIMPEXP void plP_affine_yskew(PLFLT *affine_vector, PLFLT angle)
Definition: plaffine.c:162
void plio_fgets(char *, int, FILE *)
Definition: plstdio.c:142
PLDLLIMPEXP void plP_setsub(void)
Definition: plpage.c:189
PLDLLIMPEXP void difilt_clip(PLINT *, PLINT *)
Definition: plcore.c:1603
void cont_clean_store(CONT_LEVEL *ct)
Definition: plcont.c:173
void plP_xgvpw(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
Definition: plcore.c:4118
void plP_polyline(short *x, short *y, PLINT npts)
Definition: plcore.c:417
PLINT plP_dcpcx(PLFLT x)
Definition: plcvt.c:31
void plP_init(void)
Definition: plcore.c:145
void plstr(PLINT base, PLFLT *xform, PLINT refx, PLINT refy, PLCHAR_VECTOR string)
Definition: plsym.c:810
void plP_drawor(PLFLT x, PLFLT y)
Definition: plline.c:505
PLDLLIMPEXP void plP_ssub(PLINT nx, PLINT ny, PLINT cs)
Definition: plcore.c:4219
void plio_fwrite(void *, size_t, size_t, FILE *)
Definition: plstdio.c:68
PLFLT plP_wcdcx(PLFLT x)
Definition: plcvt.c:119
void plfntld(PLINT fnt)
Definition: plsym.c:1394
PLFLT plP_scdcx(PLFLT x)
Definition: plcvt.c:135
PLDLLIMPEXP void plP_gsub(PLINT *p_nx, PLINT *p_ny, PLINT *p_cs)
Definition: plcore.c:4209
void plP_text(PLINT base, PLFLT just, PLFLT *xform, PLINT x, PLINT y, PLINT refx, PLINT refy, PLCHAR_VECTOR string)
Definition: plcore.c:1186
PLFLT plP_wcdcy(PLFLT y)
Definition: plcvt.c:127
void pl_exit(void)
void plP_FreeDrvOpts(void)
Definition: plargs.c:1560
PLDLLIMPEXP int ucs4_to_utf8(PLUNICODE unichar, char *ptr)
Definition: plcore.c:1329
PLDLLIMPEXP void plabort(PLCHAR_VECTOR errormsg)
Definition: plctrl.c:1894
PLDLLIMPEXP FILE * pl_create_tempfile(char **fname)
Definition: plstdio.c:240
void plP_movwor(PLFLT x, PLFLT y)
Definition: plline.c:489
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)
void grimage(short *x, short *y, unsigned short *z, PLINT nx, PLINT ny)
Definition: plimage.c:150
void plwytik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
Definition: pltick.c:66
int plsnprintf(char *buffer, int n, PLCHAR_VECTOR format,...)
Definition: plctrl.c:3013
PLINT plP_stindex(PLCHAR_VECTOR str1, PLCHAR_VECTOR str2)
Definition: plsym.c:1233
void RestoreWrite2BufferPixmap(void)
Definition: plimage.c:51
PLINT plP_wcpcy(PLFLT y)
Definition: plcvt.c:73
void plxtik(PLINT x, PLINT y, PLINT below, PLINT above)
Definition: pltick.c:103
PLDLLIMPEXP void plP_bop(void)
Definition: plcore.c:198
PLDLLIMPEXP void plP_affine_multiply(PLFLT *affine_vectorA, PLFLT_VECTOR affine_vectorB, PLFLT_VECTOR affine_vectorC)
Definition: plaffine.c:184
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:4375
PLDLLIMPEXP void plP_affine_xskew(PLFLT *affine_vector, PLFLT angle)
Definition: plaffine.c:143
PLDLLIMPEXP void plP_script_scale(PLBOOL ifupper, PLINT *level, PLFLT *old_scale, PLFLT *scale, PLFLT *old_offset, PLFLT *offset)
Definition: plsym.c:1302
int plhershey2unicode(int in)
Definition: plsym.c:1490
const char plP_greek_mnemonic[]
Definition: plcore.c:142
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
void plP_line(short *x, short *y)
Definition: plcore.c:388
PLDLLIMPEXP int plParseDrvOpts(DrvOpt *)
Definition: plargs.c:1461
PLDLLIMPEXP void pllib_init(void)
Definition: plcore.c:2262
void plP_drawor_poly(PLFLT_VECTOR x, PLFLT_VECTOR y, PLINT n)
Definition: plline.c:554
PLDLLIMPEXP char * pl_create_tempfifo(const char **p_fifoname, const char **p_dirname)
Definition: plstdio.c:344
PLDLLIMPEXP void plP_setphy(PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax)
Definition: plcore.c:4249
int number_of_entries_in_hershey_to_unicode_table
PLFLT plP_mmdcy(PLFLT y)
Definition: plcvt.c:111
void plP_tidy(void)
Definition: plcore.c:231
struct cont_line CONT_LINE
PLDLLIMPEXP void pl_cpcolor(PLColor *to, PLColor *from)
Definition: plcore.c:2738
void plP_subpInit(void)
Definition: plpage.c:134
void pldprec(PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT lf, PLINT *mode, PLINT *prec, PLINT digmax, PLINT *scale)
Definition: pldtik.c:251
void plstrm_init(void)
Definition: plcore.c:2711
PLDLLIMPEXP void plP_affine_rotate(PLFLT *affine_vector, PLFLT angle)
Definition: plaffine.c:123
void plHelpDrvOpts(DrvOpt *)
Definition: plargs.c:1540
PLDLLIMPEXP void plP_gphy(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
Definition: plcore.c:4198
PLFLT plP_mmdcx(PLFLT x)
Definition: plcvt.c:103
void plio_fread(void *, size_t, size_t, FILE *)
Definition: plstdio.c:98
void plhrsh(PLINT ch, PLINT x, PLINT y)
Definition: plsym.c:359
void plP_gw3wc(PLFLT *p_dxx, PLFLT *p_dxy, PLFLT *p_dyx, PLFLT *p_dyy, PLFLT *p_dyz)
Definition: plcore.c:4162
void plP_movphy(PLINT x, PLINT y)
Definition: plline.c:459
PLDLLIMPEXP void plrestore_locale(char *save_lc_numeric_locale)
Definition: plctrl.c:3145
PLDLLIMPEXP void pllib_devinit(void)
Definition: plcore.c:2874
void plP_gradient(short *x, short *y, PLINT npts)
Definition: plcore.c:516
PLDLLIMPEXP void plwarn(PLCHAR_VECTOR errormsg)
Definition: plctrl.c:1863
PLFLT plP_w3wcx(PLFLT x, PLFLT y, PLFLT z)
PLFLT plP_pcdcy(PLINT y)
Definition: plcvt.c:95
PLFLT plstrl(PLCHAR_VECTOR string)
Definition: plsym.c:976
PLFLT plP_dcscx(PLFLT x)
Definition: plcvt.c:191
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
int plsnscanf(PLCHAR_VECTOR buffer, int n, PLCHAR_VECTOR format,...)
Definition: plctrl.c:3045
void plytik(PLINT x, PLINT y, PLINT left, PLINT right)
Definition: pltick.c:116
void plfontrel(void)
Definition: plsym.c:1463
PLFLT plP_dcscy(PLFLT y)
Definition: plcvt.c:199
PLFLT plP_scdcy(PLFLT y)
Definition: plcvt.c:143
PLFLT plP_wcmmy(PLFLT y)
Definition: plcvt.c:179
void plP_gdom(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
Definition: plcore.c:4141
void plP_swin(PLWindow *plwin)
Definition: plcore.c:308
PLFLT plP_w3wcz(PLFLT x, PLFLT y, PLFLT z)
Definition: plcvt.c:233
PLDLLIMPEXP char * plstrdup(PLCHAR_VECTOR src)
Definition: plctrl.c:2985
void plP_hex2fci(unsigned char hexdigit, unsigned char hexpower, PLUNICODE *pfci)
Definition: plcore.c:3945
void NoBufferNoPixmap(void)
Definition: plimage.c:41
PLFLT plP_pcdcx(PLINT x)
Definition: plcvt.c:87
void plP_grange(PLFLT *p_zscl, PLFLT *p_zmin, PLFLT *p_zmax)
Definition: plcore.c:4152
PLINT plP_mmpcx(PLFLT x)
Definition: plcvt.c:47
PLDLLIMPEXP int plInBuildTree(void)
Definition: plcore.c:2888
PLDLLIMPEXP void plP_affine_identity(PLFLT *affine_vector)
Definition: plaffine.c:56
PLDLLIMPEXP void plRotationShear(PLFLT *xFormMatrix, PLFLT *rotation, PLFLT *shear, PLFLT *stride)
Definition: plot3d.c:2767
PLDLLIMPEXP void plP_eop(void)
Definition: plcore.c:164
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)
void pldtfac(PLFLT vmin, PLFLT vmax, PLFLT *factor, PLFLT *tstart)
Definition: pldtik.c:122
PLDLLIMPEXP void plP_affine_scale(PLFLT *affine_vector, PLFLT xscale, PLFLT yscale)
Definition: plaffine.c:93
PLBOOL plP_stsearch(PLCHAR_VECTOR str, int chr)
Definition: plsym.c:1256
void plP_gclp(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
Definition: plcore.c:4174
PLINT plP_dcpcy(PLFLT y)
Definition: plcvt.c:39
@ AT_EOP
Definition: plplotP.h:373
@ DRAWING
Definition: plplotP.h:373
@ AT_BOP
Definition: plplotP.h:373
PLDLLIMPEXP void plP_fci2hex(PLUNICODE fci, unsigned char *phexdigit, unsigned char hexpower)
Definition: plcore.c:3958
void PLDLLIMPEXP plP_getinitdriverlist(char *names)
Definition: plcore.c:4302
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
PLDLLIMPEXP const char * plP_FCI2FontName(PLUNICODE fci, const FCI_to_FontName_Table lookup[], const int nlookup)
Definition: plsym.c:1548
void plwxtik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
Definition: pltick.c:30
void plP_sclp(PLINT ixmin, PLINT ixmax, PLINT iymin, PLINT iymax)
Definition: plcore.c:4185
PLDLLIMPEXP void plexit(PLCHAR_VECTOR errormsg)
Definition: plctrl.c:1958
PLDLLIMPEXP void plP_affine_translate(PLFLT *affine_vector, PLFLT xtranslate, PLFLT ytranslate)
Definition: plaffine.c:73
PLINT plP_checkdriverinit(char *names)
Definition: plcore.c:4332
void plstik(PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy)
Definition: pltick.c:130
PLFLT plP_wcmmx(PLFLT x)
Definition: plcvt.c:171
PLDLLIMPEXP void plP_esc(PLINT op, void *ptr)
Definition: plcore.c:273
PLINT plP_wcpcx(PLFLT x)
Definition: plcvt.c:63
void plP_draphy_poly(PLINT *x, PLINT *y, PLINT n)
Definition: plline.c:527
PLFLT plP_w3wcy(PLFLT x, PLFLT y, PLFLT z)
Definition: plcvt.c:222
PLDLLIMPEXP void plP_fill(short *x, short *y, PLINT npts)
Definition: plcore.c:451
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)
PLINT plP_mmpcy(PLFLT y)
Definition: plcvt.c:55
@ DRV_FLT
Definition: plplotP.h:758
@ DRV_INT
Definition: plplotP.h:758
@ DRV_STR
Definition: plplotP.h:758
PLFLT plP_dcmmy(PLFLT y)
Definition: plcvt.c:163
struct cont_level CONT_LEVEL
PLDLLIMPEXP void plP_setpxl(PLFLT xpmm0, PLFLT ypmm0)
Definition: plcore.c:4238
PLDLLIMPEXP void plfill_soft(short *x, short *y, PLINT npts)
Definition: plfill.c:307
int plP_pointinpolygon(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR y, PLFLT xp, PLFLT yp)
Definition: plfill.c:1212
PLDLLIMPEXP PLINT plP_strpos(PLCHAR_VECTOR str, int chr)
Definition: plsym.c:1216
PLDLLIMPEXP void plcmap1_calc(void)
Bin up cmap 1 space and assign colors to make inverse mapping easy.
Definition: plctrl.c:764
void plP_gprec(PLINT *p_setp, PLINT *p_prec)
Definition: plcore.c:3869
PLDLLIMPEXP void difilt(PLINT *, PLINT *, PLINT, PLINT *, PLINT *, PLINT *, PLINT *)
Definition: plcore.c:1460
PLDLLIMPEXP char * plsave_set_locale(void)
Definition: plctrl.c:3101
PLDLLIMPEXP void plP_wait(void)
Definition: plcore.c:365
PLDLLIMPEXP void plP_gpixmm(PLFLT *p_x, PLFLT *p_y)
Definition: plcore.c:4229
PLDLLIMPEXP void plP_state(PLINT op)
Definition: plcore.c:256
const char * plP_gtimefmt(void)
Definition: plcore.c:3876
int plP_clip_poly(int Ni, PLFLT *Vi[3], int axis, PLFLT dir, PLFLT offset)
Definition: plot3d.c:166
PLFLT plP_dcmmx(PLFLT x)
Definition: plcvt.c:155
void plP_draphy(PLINT x, PLINT y)
Definition: plline.c:472
PLUINT PLUNICODE
Definition: plplot.h:201
float PLFLT
Definition: plplot.h:163
const char * PLCHAR_VECTOR
Definition: plplot.h:243
const PLFLT * PLFLT_VECTOR
Definition: plplot.h:244
const PLFLT *const * PLFLT_MATRIX
Definition: plplot.h:253
int PLINT
Definition: plplot.h:181
void * PLPointer
Definition: plplot.h:209
PLINT PLBOOL
Definition: plplot.h:204
void xform(PLFLT x, PLFLT y, PLFLT *tx, PLFLT *ty, PLPointer pltr_data)
PLCHAR_VECTOR opt
Definition: plplotP.h:750
PLINT type
Definition: plplotP.h:751
PLCHAR_VECTOR hlp_msg
Definition: plplotP.h:753
void * var_ptr
Definition: plplotP.h:752
unsigned short unicode_array_len
Definition: plplotP.h:736
PLINT refy
Definition: plplotP.h:717
PLUNICODE n_fci
Definition: plplotP.h:726
PLINT base
Definition: plplotP.h:707
PLINT refx
Definition: plplotP.h:716
PLUNICODE n_char
Definition: plplotP.h:727
PLINT n_ctrl_char
Definition: plplotP.h:728
PLFLT just
Definition: plplotP.h:708
PLINT x
Definition: plplotP.h:712
const char * string
Definition: plplotP.h:739
PLINT symbol
Definition: plplotP.h:740
PLUNICODE unicode_char
Definition: plplotP.h:731
PLUNICODE * unicode_array
Definition: plplotP.h:735
PLINT y
Definition: plplotP.h:713
char font_face
Definition: plplotP.h:720
PLFLT * xform
Definition: plplotP.h:709
const unsigned char * pfont
Definition: plplotP.h:1232
unsigned int Hershey
Definition: plplotP.h:458
PLFLT dx
Definition: plplotP.h:1205
PLFLT x
Definition: plplotP.h:1103
PLFLT b
Definition: plplotP.h:1106
PLFLT angle2
Definition: plplotP.h:1108
PLFLT y
Definition: plplotP.h:1104
PLFLT rotate
Definition: plplotP.h:1109
PLFLT a
Definition: plplotP.h:1105
PLFLT angle1
Definition: plplotP.h:1107
PLBOOL fill
Definition: plplotP.h:1110
PLFLT level
Definition: plplotP.h:787
struct cont_level * next
Definition: plplotP.h:789
struct cont_line * line
Definition: plplotP.h:788
PLINT npts
Definition: plplotP.h:780
PLFLT * x
Definition: plplotP.h:778
PLFLT * y
Definition: plplotP.h:779
struct cont_line * next
Definition: plplotP.h:781