PLplot 5.15.0
plcore.h
Go to the documentation of this file.
1// Contains declarations for core plplot data structures. This file
2// should be included only by plcore.c.
3//
4// Copyright (C) 2004 Andrew Roach
5// Copyright (C) 2005 Thomas J. Duck
6//
7// This file is part of PLplot.
8//
9// PLplot is free software; you can redistribute it and/or modify
10// it under the terms of the GNU Library General Public License as published
11// by the Free Software Foundation; either version 2 of the License, or
12// (at your option) any later version.
13//
14// PLplot is distributed in the hope that it will be useful,
15// but WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU Library General Public License for more details.
18//
19// You should have received a copy of the GNU Library General Public License
20// along with PLplot; if not, write to the Free Software
21// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22//
23//
24
25#ifndef __PLCORE_H__
26#define __PLCORE_H__
27
28#include "plplotP.h"
29#include "drivers.h"
30#include "plDevs.h"
31#include "disptab.h"
32
33#ifdef ENABLE_DYNDRIVERS
34 #ifndef LTDL_WIN32
35 #include <ltdl.h>
36 #else
37 #include "ltdl_win32.h"
38 #endif
39typedef lt_ptr ( *PLDispatchInit )( PLDispatchTable *pdt );
40#else
41typedef void ( *PLDispatchInit )( PLDispatchTable *pdt );
42#endif
43
44#ifdef HAVE_LIBUNICODE
45#include <unicode.h>
46#endif
47
48
49// Static function prototypes
50
51static const char *utf8_to_ucs4( const char *ptr, PLUNICODE *unichar );
52static void grline( short *, short *, PLINT );
53static void grpolyline( short *, short *, PLINT );
54static void grfill( short *, short *, PLINT );
55static void grgradient( short *, short *, PLINT );
56static void plSelectDev( void );
57static void pldi_ini( void );
58static void calc_diplt( void );
59static void calc_didev( void );
60static void calc_diori( void );
61static void calc_dimap( void );
62static void plgdevlst( const char **, const char **, int *, int );
63
64static void plInitDispatchTable( void );
65
66static void plLoadDriver( void );
67
68// Static variables
69
71
72static PLINT initfont = 1; // initial font: extended by default
73
75
76//--------------------------------------------------------------------------
77// Allocate a PLStream data structure (defined in plstrm.h).
78//
79// This struct contains a copy of every variable that is stream dependent.
80// Only the first [index=0] stream is statically allocated; the rest
81// are dynamically allocated when you switch streams (yes, it is legal
82// to only initialize the first element of the array of pointers).
83//--------------------------------------------------------------------------
84
85static PLStream pls0; // preallocated stream
86static PLINT ipls; // current stream number
87
88static PLStream *pls[PL_NSTREAMS] = { &pls0 }; // Array of stream pointers
89
90// Current stream pointer. Global, for easier access to state info
91
93
94// Only now can we include this
95
96#include "pldebug.h"
97
98//--------------------------------------------------------------------------
99// Initialize dispatch table.
100//
101// Each device is selected by the appropriate define, passed in from the
102// makefile. When installing plplot you may wish to exclude devices not
103// present on your system in order to reduce screen clutter.
104//
105// If you hit a <CR> in response to the plinit() prompt, you get the FIRST
106// one active below, so arrange them accordingly for your system (i.e. all
107// the system-specific ones should go first, since they won't appear on
108// most systems.)
109//--------------------------------------------------------------------------
110
112static int npldrivers = 0;
113
115// Same order (by source filename and by device) as in drivers.h.
116// ps and psttf are special cases where two devices are handled with
117// one PLD macro.
118// xwin is special case where the macro name is PLD_xwin but the
119// function name in drivers.h is plD_dispatch_init_xw
120
121#if defined ( PLD_aqt ) && !defined ( ENABLE_DYNDRIVERS )
123#endif
124#if defined ( PLD_epscairo ) && !defined ( ENABLE_DYNDRIVERS )
126#endif
127#if defined ( PLD_extcairo ) && !defined ( ENABLE_DYNDRIVERS )
129#endif
130#if defined ( PLD_memcairo ) && !defined ( ENABLE_DYNDRIVERS )
132#endif
133#if defined ( PLD_pdfcairo ) && !defined ( ENABLE_DYNDRIVERS )
135#endif
136#if defined ( PLD_pngcairo ) && !defined ( ENABLE_DYNDRIVERS )
138#endif
139#if defined ( PLD_pscairo ) && !defined ( ENABLE_DYNDRIVERS )
141#endif
142#if defined ( PLD_svgcairo ) && !defined ( ENABLE_DYNDRIVERS )
144#endif
145#if defined ( PLD_wincairo ) && !defined ( ENABLE_DYNDRIVERS )
147#endif
148#if defined ( PLD_xcairo ) && !defined ( ENABLE_DYNDRIVERS )
150#endif
151#if defined ( PLD_cgm ) && !defined ( ENABLE_DYNDRIVERS )
153#endif
154#if defined ( PLD_gif ) && !defined ( ENABLE_DYNDRIVERS )
156#endif
157#if defined ( PLD_jpeg ) && !defined ( ENABLE_DYNDRIVERS )
159#endif
160#if defined ( PLD_png ) && !defined ( ENABLE_DYNDRIVERS )
162#endif
163#if defined ( PLD_mem ) && !defined ( ENABLE_DYNDRIVERS )
165#endif
166#if defined ( PLD_ntk ) && !defined ( ENABLE_DYNDRIVERS )
168#endif
169#if defined ( PLD_null ) && !defined ( ENABLE_DYNDRIVERS )
171#endif
172#if defined ( PLD_pdf ) && !defined ( ENABLE_DYNDRIVERS )
174#endif
175#if defined ( PLD_plm ) && !defined ( ENABLE_DYNDRIVERS )
177#endif
178#if defined ( PLD_ps ) && !defined ( ENABLE_DYNDRIVERS )
180#endif
181#if defined ( PLD_psc ) && !defined ( ENABLE_DYNDRIVERS )
183#endif
184#if defined ( PLD_pstex ) && !defined ( ENABLE_DYNDRIVERS )
186#endif
187#if defined ( PLD_psttf ) && !defined ( ENABLE_DYNDRIVERS )
189#endif
190#if defined ( PLD_psttfc ) && !defined ( ENABLE_DYNDRIVERS )
192#endif
193#if defined ( PLD_bmpqt ) && !defined ( ENABLE_DYNDRIVERS )
195#endif
196#if defined ( PLD_epsqt ) && !defined ( ENABLE_DYNDRIVERS )
198#endif
199#if defined ( PLD_extqt ) && !defined ( ENABLE_DYNDRIVERS )
201#endif
202#if defined ( PLD_jpgqt ) && !defined ( ENABLE_DYNDRIVERS )
204#endif
205#if defined ( PLD_memqt ) && !defined ( ENABLE_DYNDRIVERS )
207#endif
208#if defined ( PLD_pdfqt ) && !defined ( ENABLE_DYNDRIVERS )
210#endif
211#if defined ( PLD_pngqt ) && !defined ( ENABLE_DYNDRIVERS )
213#endif
214#if defined ( PLD_ppmqt ) && !defined ( ENABLE_DYNDRIVERS )
216#endif
217#if defined ( PLD_qtwidget ) && !defined ( ENABLE_DYNDRIVERS )
219#endif
220#if defined ( PLD_svgqt ) && !defined ( ENABLE_DYNDRIVERS )
222#endif
223#if defined ( PLD_tiffqt ) && !defined ( ENABLE_DYNDRIVERS )
225#endif
226#if defined ( PLD_svg ) && !defined ( ENABLE_DYNDRIVERS )
228#endif
229#if defined ( PLD_tk ) && !defined ( ENABLE_DYNDRIVERS )
231#endif
232#if defined ( PLD_tkwin ) && !defined ( ENABLE_DYNDRIVERS )
234#endif
235#if defined ( PLD_wingcc ) && !defined ( ENABLE_DYNDRIVERS )
237#endif
238#if defined ( PLD_wxpng ) && !defined ( ENABLE_DYNDRIVERS )
240#endif
241#if defined ( PLD_wxwidgets ) && !defined ( ENABLE_DYNDRIVERS )
243#endif
244#if defined ( PLD_xfig ) && !defined ( ENABLE_DYNDRIVERS )
246#endif
247#if defined ( PLD_xwin ) && !defined ( ENABLE_DYNDRIVERS )
249#endif
250#if defined ( PLD_wingdi ) && !defined ( ENABLE_DYNDRIVERS )
252#endif
253 NULL
254};
255
257 sizeof ( PLDispatchInit ) ) - 1;
258static int npldynamicdevices = 0;
259
260//--------------------------------------------------------------------------
261// Stuff to support the loadable device drivers.
262//--------------------------------------------------------------------------
263
264#ifdef ENABLE_DYNDRIVERS
265typedef struct
266{
267 char *devnam;
268 char *description;
269 char *drvnam;
270 char *tag;
271 int drvidx;
272} PLLoadableDevice;
273
274typedef struct
275{
276 char *drvnam;
277 lt_dlhandle dlhand;
278} PLLoadableDriver;
279
280static PLLoadableDevice *loadable_device_list;
281static PLLoadableDriver *loadable_driver_list;
282
283static int nloadabledrivers = 0;
284
285#endif
286
287#endif // __PLCORE_H__
void plD_dispatch_init_aqt(PLDispatchTable *pdt)
Definition: aqt.c:208
PLDLLIMPEXP_DRIVER void plD_dispatch_init_xcairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_ppmqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pngqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_svgcairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_wincairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_tk(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pdf(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_wingcc(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_jpgqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_psc(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_wxwidgets(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_memcairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_tkwin(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_bmpqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_wingdi(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_null(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_ntk(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_epscairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pstex(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_gif(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_svgqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_mem(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_psttfc(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_xfig(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_extcairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_wxpng(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pdfqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_epsqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pdfcairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_xw(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_jpeg(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_psttf(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_tiffqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_ps(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_extqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_png(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_qtwidget(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_cgm(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pscairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pngcairo(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_plm(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_memqt(PLDispatchTable *pdt)
void lt_ptr
Definition: ltdl_win32.h:35
static PLINT xscl[PL_MAXPOLY]
Definition: plcore.h:70
static void grline(short *, short *, PLINT)
static const char * utf8_to_ucs4(const char *ptr, PLUNICODE *unichar)
static void calc_didev(void)
static int npldynamicdevices
Definition: plcore.h:258
static PLINT initfont
Definition: plcore.h:72
static int nplstaticdevices
Definition: plcore.h:256
static int npldrivers
Definition: plcore.h:112
void(* PLDispatchInit)(PLDispatchTable *pdt)
Definition: plcore.h:41
static PLINT lib_initialized
Definition: plcore.h:74
static void grgradient(short *, short *, PLINT)
static PLDispatchTable ** dispatch_table
Definition: plcore.h:111
static void plSelectDev(void)
static void pldi_ini(void)
static void plgdevlst(const char **, const char **, int *, int)
static PLStream pls0
Definition: plcore.h:85
static void grfill(short *, short *, PLINT)
static void calc_diori(void)
static void plInitDispatchTable(void)
static PLDispatchInit static_device_initializers[]
Definition: plcore.h:114
PLDLLIMPEXP_DATA(PLStream) *plsc
static PLStream * pls[PL_NSTREAMS]
Definition: plcore.h:88
static void calc_diplt(void)
static PLINT yscl[PL_MAXPOLY]
Definition: plcore.h:70
static void grpolyline(short *, short *, PLINT)
static void calc_dimap(void)
static void plLoadDriver(void)
static PLINT ipls
Definition: plcore.h:86
#define PL_MAXPOLY
Definition: plplotP.h:283
#define PL_NSTREAMS
Definition: plplotP.h:284
PLUINT PLUNICODE
Definition: plplot.h:201
int PLINT
Definition: plplot.h:181
void plD_dispatch_init_svg(PLDispatchTable *pdt)
Definition: svg.c:129