PLplot  5.11.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
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
39 typedef lt_ptr ( *PLDispatchInit )( PLDispatchTable *pdt );
40 #else
41 typedef void ( *PLDispatchInit )( PLDispatchTable *pdt );
42 #endif
43 
44 #ifdef HAVE_LIBUNICODE
45 #include <unicode.h>
46 #endif
47 
48 
49 // Static function prototypes
50 
51 static const char *utf8_to_ucs4( const char *ptr, PLUNICODE *unichar );
52 static void grline( short *, short *, PLINT );
53 static void grpolyline( short *, short *, PLINT );
54 static void grfill( short *, short *, PLINT );
55 static void grgradient( short *, short *, PLINT );
56 static void plSelectDev( void );
57 static void pldi_ini( void );
58 static void calc_diplt( void );
59 static void calc_didev( void );
60 static void calc_diori( void );
61 static void calc_dimap( void );
62 static void plgdevlst( const char **, const char **, int *, int );
63 
64 static void plInitDispatchTable( void );
65 
66 static void plLoadDriver( void );
67 
68 // Static variables
69 
71 
72 static 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 
85 static PLStream pls0; // preallocated stream
86 static PLINT ipls; // current stream number
87 
88 static PLStream *pls[PL_NSTREAMS] = { &pls0 }; // Array of stream pointers
89 
90 // Current stream pointer. Global, for easier access to state info
91 
92 PLDLLIMPEXP_DATA( PLStream ) * plsc = &pls0;
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 
112 static 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 )
181 #endif
182 #if defined ( PLD_pstex ) && !defined ( ENABLE_DYNDRIVERS )
184 #endif
185 #if defined ( PLD_psttf ) && !defined ( ENABLE_DYNDRIVERS )
188 #endif
189 #if defined ( PLD_bmpqt ) && !defined ( ENABLE_DYNDRIVERS )
191 #endif
192 #if defined ( PLD_epsqt ) && !defined ( ENABLE_DYNDRIVERS )
194 #endif
195 #if defined ( PLD_extqt ) && !defined ( ENABLE_DYNDRIVERS )
197 #endif
198 #if defined ( PLD_jpgqt ) && !defined ( ENABLE_DYNDRIVERS )
200 #endif
201 #if defined ( PLD_memqt ) && !defined ( ENABLE_DYNDRIVERS )
203 #endif
204 #if defined ( PLD_pdfqt ) && !defined ( ENABLE_DYNDRIVERS )
206 #endif
207 #if defined ( PLD_pngqt ) && !defined ( ENABLE_DYNDRIVERS )
209 #endif
210 #if defined ( PLD_ppmqt ) && !defined ( ENABLE_DYNDRIVERS )
212 #endif
213 #if defined ( PLD_qtwidget ) && !defined ( ENABLE_DYNDRIVERS )
215 #endif
216 #if defined ( PLD_svgqt ) && !defined ( ENABLE_DYNDRIVERS )
218 #endif
219 #if defined ( PLD_tiffqt ) && !defined ( ENABLE_DYNDRIVERS )
221 #endif
222 #if defined ( PLD_svg ) && !defined ( ENABLE_DYNDRIVERS )
224 #endif
225 #if defined ( PLD_tk ) && !defined ( ENABLE_DYNDRIVERS )
227 #endif
228 #if defined ( PLD_tkwin ) && !defined ( ENABLE_DYNDRIVERS )
230 #endif
231 #if defined ( PLD_wingcc ) && !defined ( ENABLE_DYNDRIVERS )
233 #endif
234 #if defined ( PLD_wxpng ) && !defined ( ENABLE_DYNDRIVERS )
236 #endif
237 #if defined ( PLD_wxwidgets ) && !defined ( ENABLE_DYNDRIVERS )
239 #endif
240 #if defined ( PLD_xfig ) && !defined ( ENABLE_DYNDRIVERS )
242 #endif
243 #if defined ( PLD_xwin ) && !defined ( ENABLE_DYNDRIVERS )
245 #endif
246  NULL
247 };
248 
249 static int nplstaticdevices = ( sizeof ( static_device_initializers ) /
250  sizeof ( PLDispatchInit ) ) - 1;
251 static int npldynamicdevices = 0;
252 
253 //--------------------------------------------------------------------------
254 // Stuff to support the loadable device drivers.
255 //--------------------------------------------------------------------------
256 
257 #ifdef ENABLE_DYNDRIVERS
258 typedef struct
259 {
260  char *devnam;
261  char *description;
262  char *drvnam;
263  char *tag;
264  int drvidx;
265 } PLLoadableDevice;
266 
267 typedef struct
268 {
269  char *drvnam;
270  lt_dlhandle dlhand;
271 } PLLoadableDriver;
272 
273 static PLLoadableDevice *loadable_device_list;
274 static PLLoadableDriver *loadable_driver_list;
275 
276 static int nloadabledrivers = 0;
277 
278 #endif
279 
280 #endif // __PLCORE_H__