extendr_ffi/
graphics.rs

1//! Graphics Engine support
2use super::*;
3
4#[cfg(use_r_ge_version_17)]
5pub const R_GE_version: u32 = 17;
6
7#[cfg(all(use_r_ge_version_16, not(use_r_ge_version_17)))]
8pub const R_GE_version: u32 = 16;
9
10#[cfg(all(not(use_r_ge_version_16), not(use_r_ge_version_17)))]
11pub const R_GE_version: u32 = 15;
12// Types
13pub type DevDesc = _DevDesc;
14pub type pDevDesc = *mut DevDesc;
15pub type pGEcontext = *mut R_GE_gcontext;
16pub type pGEDevDesc = *mut GEDevDesc;
17
18// Constants
19pub const LTY_BLANK: i32 = -1;
20pub const LTY_SOLID: u32 = 0;
21pub const LTY_DASHED: u32 = 68;
22pub const LTY_DOTTED: u32 = 49;
23pub const LTY_DOTDASH: u32 = 13361;
24pub const LTY_LONGDASH: u32 = 55;
25pub const LTY_TWODASH: u32 = 9762;
26pub const R_GE_definitions: u32 = 13;
27
28// Enums
29#[repr(u32)]
30#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
31pub enum GEUnit {
32    GE_DEVICE = 0,
33    GE_NDC = 1,
34    GE_INCHES = 2,
35    GE_CM = 3,
36}
37
38#[repr(u32)]
39#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
40pub enum R_GE_lineend {
41    GE_ROUND_CAP = 1,
42    GE_BUTT_CAP = 2,
43    GE_SQUARE_CAP = 3,
44}
45
46#[repr(u32)]
47#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
48pub enum R_GE_linejoin {
49    GE_ROUND_JOIN = 1,
50    GE_MITRE_JOIN = 2,
51    GE_BEVEL_JOIN = 3,
52}
53
54// Structs
55#[repr(C)]
56#[derive(Debug, Copy, Clone)]
57pub struct R_GE_gcontext {
58    pub col: ::std::os::raw::c_int,
59    pub fill: ::std::os::raw::c_int,
60    pub gamma: f64,
61    pub lwd: f64,
62    pub lty: ::std::os::raw::c_int,
63    pub lend: R_GE_lineend,
64    pub ljoin: R_GE_linejoin,
65    pub lmitre: f64,
66    pub cex: f64,
67    pub ps: f64,
68    pub lineheight: f64,
69    pub fontface: ::std::os::raw::c_int,
70    pub fontfamily: [::std::os::raw::c_char; 201usize],
71    pub patternFill: SEXP,
72}
73
74#[repr(C)]
75#[derive(Debug, Copy, Clone)]
76pub struct _DevDesc {
77    #[doc = "left raster coordinate"]
78    pub left: f64,
79    #[doc = "right raster coordinate"]
80    pub right: f64,
81    #[doc = "bottom raster coordinate"]
82    pub bottom: f64,
83    #[doc = "top raster coordinate"]
84    pub top: f64,
85    #[doc = "R only has the notion of a rectangular clipping region"]
86    pub clipLeft: f64,
87    pub clipRight: f64,
88    pub clipBottom: f64,
89    pub clipTop: f64,
90    #[doc = "x character addressing offset - unused"]
91    pub xCharOffset: f64,
92    #[doc = "y character addressing offset"]
93    pub yCharOffset: f64,
94    #[doc = "1/2 interline space as frac of line height"]
95    pub yLineBias: f64,
96    #[doc = "Inches per raster; \\[0\\]=x, \\[1\\]=y"]
97    pub ipr: [f64; 2usize],
98    #[doc = "Character size in rasters; \\[0\\]=x, \\[1\\]=y"]
99    pub cra: [f64; 2usize],
100    #[doc = "(initial) Device Gamma Correction"]
101    pub gamma: f64,
102    #[doc = "Device-level clipping"]
103    pub canClip: Rboolean,
104    #[doc = "can the gamma factor be modified?"]
105    pub canChangeGamma: Rboolean,
106    #[doc = "Can do at least some horiz adjust of text\n0 = none, 1 = {0,0.5,1}, 2 = \\[0,1\\]"]
107    pub canHAdj: ::std::os::raw::c_int,
108    #[doc = "Device initial settings\n/\n/* These are things that the device must set up when it is created.\n The graphics system can modify them and track current values,"]
109    pub startps: f64,
110    #[doc = "sets par(\"fg\"), par(\"col\") and gpar(\"col\")"]
111    pub startcol: ::std::os::raw::c_int,
112    #[doc = "sets par(\"bg\") and gpar(\"fill\")"]
113    pub startfill: ::std::os::raw::c_int,
114    pub startlty: ::std::os::raw::c_int,
115    pub startfont: ::std::os::raw::c_int,
116    pub startgamma: f64,
117    #[doc = "pointer to device specific parameters"]
118    pub deviceSpecific: *mut ::std::os::raw::c_void,
119    #[doc = "toggle for initial display list status"]
120    pub displayListOn: Rboolean,
121    #[doc = "can the device generate mousedown events"]
122    pub canGenMouseDown: Rboolean,
123    #[doc = "can the device generate mousemove events"]
124    pub canGenMouseMove: Rboolean,
125    #[doc = "can the device generate mouseup events"]
126    pub canGenMouseUp: Rboolean,
127    #[doc = "can the device generate keyboard events"]
128    pub canGenKeybd: Rboolean,
129    #[doc = "can the device generate idle events"]
130    pub canGenIdle: Rboolean,
131    #[doc = "This is set while getGraphicsEvent\nis actively looking for events"]
132    pub gettingEvent: Rboolean,
133    pub activate: ::std::option::Option<unsafe extern "C" fn(arg1: pDevDesc)>,
134    pub circle: ::std::option::Option<
135        unsafe extern "C" fn(x: f64, y: f64, r: f64, gc: pGEcontext, dd: pDevDesc),
136    >,
137    pub clip: ::std::option::Option<
138        unsafe extern "C" fn(x0: f64, x1: f64, y0: f64, y1: f64, dd: pDevDesc),
139    >,
140    pub close: ::std::option::Option<unsafe extern "C" fn(dd: pDevDesc)>,
141    pub deactivate: ::std::option::Option<unsafe extern "C" fn(arg1: pDevDesc)>,
142    pub locator: ::std::option::Option<
143        unsafe extern "C" fn(x: *mut f64, y: *mut f64, dd: pDevDesc) -> Rboolean,
144    >,
145    pub line: ::std::option::Option<
146        unsafe extern "C" fn(x1: f64, y1: f64, x2: f64, y2: f64, gc: pGEcontext, dd: pDevDesc),
147    >,
148    pub metricInfo: ::std::option::Option<
149        unsafe extern "C" fn(
150            c: ::std::os::raw::c_int,
151            gc: pGEcontext,
152            ascent: *mut f64,
153            descent: *mut f64,
154            width: *mut f64,
155            dd: pDevDesc,
156        ),
157    >,
158    pub mode:
159        ::std::option::Option<unsafe extern "C" fn(mode: ::std::os::raw::c_int, dd: pDevDesc)>,
160    pub newPage: ::std::option::Option<unsafe extern "C" fn(gc: pGEcontext, dd: pDevDesc)>,
161    pub polygon: ::std::option::Option<
162        unsafe extern "C" fn(
163            n: ::std::os::raw::c_int,
164            x: *mut f64,
165            y: *mut f64,
166            gc: pGEcontext,
167            dd: pDevDesc,
168        ),
169    >,
170    pub polyline: ::std::option::Option<
171        unsafe extern "C" fn(
172            n: ::std::os::raw::c_int,
173            x: *mut f64,
174            y: *mut f64,
175            gc: pGEcontext,
176            dd: pDevDesc,
177        ),
178    >,
179    pub rect: ::std::option::Option<
180        unsafe extern "C" fn(x0: f64, y0: f64, x1: f64, y1: f64, gc: pGEcontext, dd: pDevDesc),
181    >,
182    pub path: ::std::option::Option<
183        unsafe extern "C" fn(
184            x: *mut f64,
185            y: *mut f64,
186            npoly: ::std::os::raw::c_int,
187            nper: *mut ::std::os::raw::c_int,
188            winding: Rboolean,
189            gc: pGEcontext,
190            dd: pDevDesc,
191        ),
192    >,
193    pub raster: ::std::option::Option<
194        unsafe extern "C" fn(
195            raster: *mut ::std::os::raw::c_uint,
196            w: ::std::os::raw::c_int,
197            h: ::std::os::raw::c_int,
198            x: f64,
199            y: f64,
200            width: f64,
201            height: f64,
202            rot: f64,
203            interpolate: Rboolean,
204            gc: pGEcontext,
205            dd: pDevDesc,
206        ),
207    >,
208    pub cap: ::std::option::Option<unsafe extern "C" fn(dd: pDevDesc) -> SEXP>,
209    pub size: ::std::option::Option<
210        unsafe extern "C" fn(
211            left: *mut f64,
212            right: *mut f64,
213            bottom: *mut f64,
214            top: *mut f64,
215            dd: pDevDesc,
216        ),
217    >,
218    pub strWidth: ::std::option::Option<
219        unsafe extern "C" fn(
220            str_: *const ::std::os::raw::c_char,
221            gc: pGEcontext,
222            dd: pDevDesc,
223        ) -> f64,
224    >,
225    pub text: ::std::option::Option<
226        unsafe extern "C" fn(
227            x: f64,
228            y: f64,
229            str_: *const ::std::os::raw::c_char,
230            rot: f64,
231            hadj: f64,
232            gc: pGEcontext,
233            dd: pDevDesc,
234        ),
235    >,
236    pub onExit: ::std::option::Option<unsafe extern "C" fn(dd: pDevDesc)>,
237    #[doc = "device_getEvent is no longer used, but the slot is kept for back\n compatibility of the structure."]
238    pub getEvent: ::std::option::Option<
239        unsafe extern "C" fn(arg1: SEXP, arg2: *const ::std::os::raw::c_char) -> SEXP,
240    >,
241    pub newFrameConfirm: ::std::option::Option<unsafe extern "C" fn(dd: pDevDesc) -> Rboolean>,
242    #[doc = "and strWidthUTF8"]
243    pub hasTextUTF8: Rboolean,
244    pub textUTF8: ::std::option::Option<
245        unsafe extern "C" fn(
246            x: f64,
247            y: f64,
248            str_: *const ::std::os::raw::c_char,
249            rot: f64,
250            hadj: f64,
251            gc: pGEcontext,
252            dd: pDevDesc,
253        ),
254    >,
255    pub strWidthUTF8: ::std::option::Option<
256        unsafe extern "C" fn(
257            str_: *const ::std::os::raw::c_char,
258            gc: pGEcontext,
259            dd: pDevDesc,
260        ) -> f64,
261    >,
262    pub wantSymbolUTF8: Rboolean,
263    #[doc = "Is rotated text good enough to be preferable to Hershey in\ncontour labels?  Old default was FALSE."]
264    pub useRotatedTextInContour: Rboolean,
265    #[doc = "This is an environment holding event handlers."]
266    pub eventEnv: SEXP,
267    pub eventHelper:
268        ::std::option::Option<unsafe extern "C" fn(dd: pDevDesc, code: ::std::os::raw::c_int)>,
269    pub holdflush: ::std::option::Option<
270        unsafe extern "C" fn(dd: pDevDesc, level: ::std::os::raw::c_int) -> ::std::os::raw::c_int,
271    >,
272    #[doc = "1 = no, 2 = yes"]
273    pub haveTransparency: ::std::os::raw::c_int,
274    #[doc = "1 = no, 2 = fully, 3 = semi"]
275    pub haveTransparentBg: ::std::os::raw::c_int,
276    #[doc = "1 = no, 2 = yes, 3 = except for missing values"]
277    pub haveRaster: ::std::os::raw::c_int,
278    #[doc = "1 = no, 2 = yes"]
279    pub haveCapture: ::std::os::raw::c_int,
280    #[doc = "1 = no, 2 = yes"]
281    pub haveLocator: ::std::os::raw::c_int,
282    pub setPattern:
283        ::std::option::Option<unsafe extern "C" fn(pattern: SEXP, dd: pDevDesc) -> SEXP>,
284    pub releasePattern: ::std::option::Option<unsafe extern "C" fn(ref_: SEXP, dd: pDevDesc)>,
285    pub setClipPath:
286        ::std::option::Option<unsafe extern "C" fn(path: SEXP, ref_: SEXP, dd: pDevDesc) -> SEXP>,
287    pub releaseClipPath: ::std::option::Option<unsafe extern "C" fn(ref_: SEXP, dd: pDevDesc)>,
288    pub setMask:
289        ::std::option::Option<unsafe extern "C" fn(path: SEXP, ref_: SEXP, dd: pDevDesc) -> SEXP>,
290    pub releaseMask: ::std::option::Option<unsafe extern "C" fn(ref_: SEXP, dd: pDevDesc)>,
291    #[doc = "This should match R_GE_version,\n BUT it does not have to.\n It give the graphics engine a chance to work with\n graphics device packages BEFORE they update to\n changes in R_GE_version."]
292    pub deviceVersion: ::std::os::raw::c_int,
293    #[doc = "This can be used to OVERRIDE canClip so that graphics engine\n leaves ALL clipping to the graphics device"]
294    pub deviceClip: Rboolean,
295    pub defineGroup: ::std::option::Option<
296        unsafe extern "C" fn(
297            source: SEXP,
298            op: ::std::os::raw::c_int,
299            destination: SEXP,
300            dd: pDevDesc,
301        ) -> SEXP,
302    >,
303    pub useGroup:
304        ::std::option::Option<unsafe extern "C" fn(ref_: SEXP, trans: SEXP, dd: pDevDesc)>,
305    pub releaseGroup: ::std::option::Option<unsafe extern "C" fn(ref_: SEXP, dd: pDevDesc)>,
306    pub stroke:
307        ::std::option::Option<unsafe extern "C" fn(path: SEXP, gc: pGEcontext, dd: pDevDesc)>,
308    pub fill: ::std::option::Option<
309        unsafe extern "C" fn(path: SEXP, rule: ::std::os::raw::c_int, gc: pGEcontext, dd: pDevDesc),
310    >,
311    pub fillStroke: ::std::option::Option<
312        unsafe extern "C" fn(path: SEXP, rule: ::std::os::raw::c_int, gc: pGEcontext, dd: pDevDesc),
313    >,
314    pub capabilities: ::std::option::Option<unsafe extern "C" fn(cap: SEXP) -> SEXP>,
315    pub glyph: ::std::option::Option<
316        unsafe extern "C" fn(
317            n: ::std::os::raw::c_int,
318            glyphs: *mut ::std::os::raw::c_int,
319            x: *mut f64,
320            y: *mut f64,
321            font: SEXP,
322            size: f64,
323            colour: ::std::os::raw::c_int,
324            rot: f64,
325            dd: pDevDesc,
326        ),
327    >,
328    #[doc = "Area for future expansion.\nBy zeroing this, devices are more likely to work if loaded\ninto a later version of R than that they were compiled under."]
329    pub reserved: [::std::os::raw::c_char; 64usize],
330}
331
332#[repr(C)]
333#[derive(Debug, Copy, Clone)]
334pub struct _GEDevDesc {
335    #[doc = "Stuff that the devices can see (and modify).\n All detailed in GraphicsDevice.h"]
336    pub dev: pDevDesc,
337    #[doc = "toggle for display list status"]
338    pub displayListOn: Rboolean,
339    #[doc = "display list"]
340    pub displayList: SEXP,
341    #[doc = "A pointer to the end of the display list\nto avoid traversing pairlists"]
342    pub DLlastElt: SEXP,
343    #[doc = "The last element of the display list\n just prior to when the display list\n was last initialised"]
344    pub savedSnapshot: SEXP,
345    #[doc = "Has the device received any output?"]
346    pub dirty: Rboolean,
347    #[doc = "Should a graphics call be stored\n on the display list?\n Set to FALSE by do_recordGraphics,\n do_dotcallgr, and do_Externalgr\n so that nested calls are not\n recorded on the display list"]
348    pub recordGraphics: Rboolean,
349    #[doc = "Stuff about the device that only graphics systems see.\n The graphics engine has no idea what is in here.\n Used by graphics systems to store system state per device."]
350    pub gesd: [*mut GESystemDesc; 24usize],
351    #[doc = "per-device setting for 'ask' (use NewFrameConfirm)"]
352    pub ask: Rboolean,
353    #[doc = "Is a device appending a path ?"]
354    pub appending: Rboolean,
355}
356
357pub type GEcallback = ::std::option::Option<
358    unsafe extern "C" fn(arg1: GEevent, arg2: *mut GEDevDesc, arg3: SEXP) -> SEXP,
359>;
360
361#[repr(u32)]
362#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
363pub enum GEevent {
364    #[doc = "In response to this event, the registered graphics system\n should allocate and initialise the systemSpecific structure\n\n Should return R_NilValue on failure so that engine\n can tidy up memory allocation"]
365    GE_InitState = 0,
366    #[doc = "This event gives the registered system a chance to undo\n anything done in the initialisation."]
367    GE_FinaliseState = 1,
368    #[doc = "This is sent by the graphics engine prior to initialising\n the display list.  It give the graphics system the chance\n to squirrel away information it will need for redrawing the\n the display list"]
369    GE_SaveState = 2,
370    #[doc = "This is sent by the graphics engine prior to replaying the\n display list.  It gives the graphics system the chance to\n restore any information it saved on the GE_SaveState event"]
371    GE_RestoreState = 6,
372    #[doc = "Copy system state information to the current device.\n This is used when copying graphics from one device to another\n so all the graphics system needs to do is to copy across\n the bits required for the display list to draw faithfully\n on the new device."]
373    GE_CopyState = 3,
374    #[doc = "Create a snapshot of the system state that is sufficient\n for the current \"image\" to be reproduced"]
375    GE_SaveSnapshotState = 4,
376    #[doc = "Restore the system state that is saved by GE_SaveSnapshotState"]
377    GE_RestoreSnapshotState = 5,
378    #[doc = "When replaying the display list, the graphics engine\n checks, after each replayed action, that the action\n produced valid output.  This is the graphics system's\n chance to say that the output is crap (in which case the\n graphics engine will abort the display list replay)."]
379    GE_CheckPlot = 7,
380    #[doc = "The device wants to scale the current pointsize\n (for scaling an image)\n This is not a nice general solution, but a quick fix for\n the Windows device."]
381    GE_ScalePS = 8,
382}
383
384pub type GEDevDesc = _GEDevDesc;
385
386#[repr(C)]
387#[derive(Debug, Copy, Clone)]
388pub struct GESystemDesc {
389    #[doc = "An array of information about each graphics system that\n has registered with the graphics engine.\n This is used to store graphics state for each graphics\n system on each device."]
390    pub systemSpecific: *mut ::std::os::raw::c_void,
391    #[doc = "An array of function pointers, one per graphics system that\n has registered with the graphics engine.\n\n system_Callback is called when the graphics engine wants\n to give a graphics system the chance to play with its\n device-specific information (stored in systemSpecific)\n There are two parameters:  an \"event\" to tell the graphics\n system why the graphics engine has called this function,\n and the systemSpecific pointer.  The graphics engine\n has to pass the systemSpecific pointer because only\n the graphics engine will know what array index to use."]
392    pub callback: GEcallback,
393}
394
395extern "C" {
396
397    // Functions
398    pub fn GEaddDevice2(arg1: pGEDevDesc, arg2: *const ::std::os::raw::c_char);
399    pub fn GECap(dd: pGEDevDesc) -> SEXP;
400    pub fn GECircle(x: f64, y: f64, radius: f64, gc: pGEcontext, dd: pGEDevDesc);
401    #[cfg(use_r_ge_version_17)]
402    pub fn GEcreateDD() -> pDevDesc;
403    pub fn GEcreateDevDesc(dev: pDevDesc) -> pGEDevDesc;
404    #[cfg(use_r_ge_version_17)]
405    pub fn GEfreeDD(dd: pDevDesc);
406    pub fn GEcurrentDevice() -> pGEDevDesc;
407    pub fn GEdeviceNumber(arg1: pGEDevDesc) -> ::std::os::raw::c_int;
408    pub fn GEExpressionHeight(expr: SEXP, gc: pGEcontext, dd: pGEDevDesc) -> f64;
409    pub fn GEExpressionMetric(
410        expr: SEXP,
411        gc: pGEcontext,
412        ascent: *mut f64,
413        descent: *mut f64,
414        width: *mut f64,
415        dd: pGEDevDesc,
416    );
417    pub fn GEExpressionWidth(expr: SEXP, gc: pGEcontext, dd: pGEDevDesc) -> f64;
418    pub fn GEfromDeviceHeight(value: f64, to: GEUnit, dd: pGEDevDesc) -> f64;
419    pub fn GEfromDeviceWidth(value: f64, to: GEUnit, dd: pGEDevDesc) -> f64;
420    pub fn GEfromDeviceX(value: f64, to: GEUnit, dd: pGEDevDesc) -> f64;
421    pub fn GEfromDeviceY(value: f64, to: GEUnit, dd: pGEDevDesc) -> f64;
422    pub fn GEgetDevice(arg1: ::std::os::raw::c_int) -> pGEDevDesc;
423    pub fn GEinitDisplayList(dd: pGEDevDesc);
424    pub fn GELine(x1: f64, y1: f64, x2: f64, y2: f64, gc: pGEcontext, dd: pGEDevDesc);
425    pub fn GEMathText(
426        x: f64,
427        y: f64,
428        expr: SEXP,
429        xc: f64,
430        yc: f64,
431        rot: f64,
432        gc: pGEcontext,
433        dd: pGEDevDesc,
434    );
435    pub fn GEMetricInfo(
436        c: ::std::os::raw::c_int,
437        gc: pGEcontext,
438        ascent: *mut f64,
439        descent: *mut f64,
440        width: *mut f64,
441        dd: pGEDevDesc,
442    );
443    pub fn GEMode(mode: ::std::os::raw::c_int, dd: pGEDevDesc);
444    pub fn GENewPage(gc: pGEcontext, dd: pGEDevDesc);
445    pub fn GEPath(
446        x: *mut f64,
447        y: *mut f64,
448        npoly: ::std::os::raw::c_int,
449        nper: *mut ::std::os::raw::c_int,
450        winding: Rboolean,
451        gc: pGEcontext,
452        dd: pGEDevDesc,
453    );
454    pub fn GEPolygon(
455        n: ::std::os::raw::c_int,
456        x: *mut f64,
457        y: *mut f64,
458        gc: pGEcontext,
459        dd: pGEDevDesc,
460    );
461    pub fn GEPolyline(
462        n: ::std::os::raw::c_int,
463        x: *mut f64,
464        y: *mut f64,
465        gc: pGEcontext,
466        dd: pGEDevDesc,
467    );
468    pub fn GERaster(
469        raster: *mut ::std::os::raw::c_uint,
470        w: ::std::os::raw::c_int,
471        h: ::std::os::raw::c_int,
472        x: f64,
473        y: f64,
474        width: f64,
475        height: f64,
476        rot: f64,
477        interpolate: Rboolean,
478        gc: pGEcontext,
479        dd: pGEDevDesc,
480    );
481    pub fn GERect(x0: f64, y0: f64, x1: f64, y1: f64, gc: pGEcontext, dd: pGEDevDesc);
482    pub fn GESetClip(x1: f64, y1: f64, x2: f64, y2: f64, dd: pGEDevDesc);
483    pub fn GEStrHeight(
484        str_: *const ::std::os::raw::c_char,
485        enc: cetype_t,
486        gc: pGEcontext,
487        dd: pGEDevDesc,
488    ) -> f64;
489    pub fn GEStrMetric(
490        str_: *const ::std::os::raw::c_char,
491        enc: cetype_t,
492        gc: pGEcontext,
493        ascent: *mut f64,
494        descent: *mut f64,
495        width: *mut f64,
496        dd: pGEDevDesc,
497    );
498    pub fn GEStrWidth(
499        str_: *const ::std::os::raw::c_char,
500        enc: cetype_t,
501        gc: pGEcontext,
502        dd: pGEDevDesc,
503    ) -> f64;
504    pub fn GESymbol(
505        x: f64,
506        y: f64,
507        pch: ::std::os::raw::c_int,
508        size: f64,
509        gc: pGEcontext,
510        dd: pGEDevDesc,
511    );
512    pub fn GEText(
513        x: f64,
514        y: f64,
515        str_: *const ::std::os::raw::c_char,
516        enc: cetype_t,
517        xc: f64,
518        yc: f64,
519        rot: f64,
520        gc: pGEcontext,
521        dd: pGEDevDesc,
522    );
523    pub fn GEtoDeviceHeight(value: f64, from: GEUnit, dd: pGEDevDesc) -> f64;
524    pub fn GEtoDeviceWidth(value: f64, from: GEUnit, dd: pGEDevDesc) -> f64;
525    pub fn GEtoDeviceX(value: f64, from: GEUnit, dd: pGEDevDesc) -> f64;
526    pub fn GEtoDeviceY(value: f64, from: GEUnit, dd: pGEDevDesc) -> f64;
527    pub fn R_CheckDeviceAvailable();
528    pub fn R_GE_checkVersionOrDie(version: ::std::os::raw::c_int);
529}