This chapter presents the formal definition of what is considered to be in the PLplot library API. It is assumed that major new releases of PLplot will have substantial backwards incompatible changes in the API, but the PLplot developers commit to introducing as few as possible of such incompatibilities between minor releases such that stability across those minor releases is practically guaranteed. In all cases where backwards incompatible changes have been introduced, then the library soname will be changed (for operating systems such as Linux that support versioned shared libraries).
The information in this chapter regards version 5.9.6 of PLplot, released on 2010-06-05.
The formal definition of the PLplot C API is everything that is defined in the include file plplot.h. This includes all the function prototypes, the defined structures and the semantics of the constants. The list of symbols currently exported by the shared library libplplot.h that are declared in plplot.h is the following:
plAlloc2dGrid plgDevs plscmap0n plClearOpts plgFileDevs plscmap1 plFindCommand plgchr plscmap1a plFindName plgcol0 plscmap1l plFree2dGrid plgcol0a plscmap1la plGetCursor plgcolbg plscmap1n plGetFlt plgcolbga plscol0 plGetInt plgcompression plscol0a plGetName plgdev plscolbg plHLS_RGB plgdidev plscolbga plMergeOpts plgdiori plscolor plMinMax2dGrid plgdiplt plscompression plOptUsage plgesc plsdev plParseOpts plget plsdidev plRGB_HLS plgfam plsdimap plResetOpts plgfci plsdiori plSetOpt plgfile plsdiplt plSetUsage plgfnam plsdiplz plTranslateCursor plgfont plseed pl_cmd plglevel plseopH pl_setcontlabelformat plgpage plsesc pl_setcontlabelparam plgra plset pladv plgradient plsetopt plarc plgriddata plsexit plarrows plgspa plsfam plaxes plgstrm plsfci plbin plgver plsfile plbop plgvpd plsfnam plbox plgvpw plsfont plbox3 plgxax plshade plbtime plgyax plshade1 plcalc_world plgzax plshades plclear plhist plslabelfunc plcol0 plhls plsmaj plcol1 plhlsrgb plsmem plconfigtime plimage plsmin plcont plimagefr plsori plcpstrm plinit plspage plctime pljoin plspal0 pldid2pc pllab plspal1 pldip2dc pllightsource plspause plend plline plsstrm plend1 plline3 plssub plenv pllsty plssym plenv0 plmap plstar pleop plmeridians plstart plerrx plmesh plstr plerry plmeshc plstransform plf2eval plmkstrm plstripa plf2eval1 plmtex plstripc plf2eval2 plmtex3 plstripd plf2evalr plot3d plstyl plf2ops_c plot3dc plsurf3d plf2ops_grid_c plot3dcl plsurf3dl plf2ops_grid_col_major plparseopts plsvect plf2ops_grid_row_major plpat plsvpa plfamadv plpath plsxax plfcont plpoin plsxwin plfgriddata plpoin3 plsyax plfill plpoly3 plsym plfill3 plprec plszax plfimage plpsty pltext plfimagefr plptex pltimefmt plflush plptex3 pltr0 plfmesh plrandd pltr1 plfmeshc plreplot pltr2 plfont plrgb pltr2f plfontld plrgb1 pltr2p plfplot3d plrgbhls plvasp plfplot3dc plsButtonEH plvect plfplot3dcl plsError plvpas plfshade plsKeyEH plvpor plfshade1 plsabort plvsta plfshades plsbopH plw3d plfsurf3d plschr plwid plfsurf3dl plscmap0 plwind plfvect plscmap0a plxormod |
Another important aspect of compatibility regard the Application Binary Interface (ABI). Backwards compatibility can be broken by changes in the C structures made public through plplot.h. Currently, they are:
typedef struct { const char *opt; int ( *handler )( const char *, const char *, void * ); void *client_data; void *var; long mode; const char *syntax; const char *desc; } PLOptionTable; typedef struct { int type; /* of event (CURRENTLY UNUSED) */ unsigned int state; /* key or button mask */ unsigned int keysym; /* key selected */ unsigned int button; /* mouse button selected */ PLINT subwindow; /* subwindow (alias subpage, alias subplot) number */ char string[PL_MAXKEY]; /* translated string */ int pX, pY; /* absolute device coordinates of pointer */ PLFLT dX, dY; /* relative device coordinates of pointer */ PLFLT wX, wY; /* world coordinates of pointer */ } PLGraphicsIn; typedef struct { PLFLT dxmi, dxma, dymi, dyma; /* min, max window rel dev coords */ PLFLT wxmi, wxma, wymi, wyma; /* min, max window world coords */ } PLWindow; typedef struct { unsigned int x, y; /* upper left hand corner */ unsigned int width, height; /* window dimensions */ } PLDisplay; typedef struct { PLFLT *f; PLINT nx, ny, nz; } PLfGrid; typedef struct { PLFLT **f; PLINT nx, ny; } PLfGrid2; typedef struct { PLFLT *xg, *yg, *zg; PLINT nx, ny, nz; } PLcGrid; typedef struct { PLFLT **xg, **yg, **zg; PLINT nx, ny; } PLcGrid2; typedef struct { unsigned char r; /* red */ unsigned char g; /* green */ unsigned char b; /* blue */ PLFLT a; /* alpha (or transparency) */ const char *name; } PLColor; typedef struct { PLFLT h; /* hue */ PLFLT l; /* lightness */ PLFLT s; /* saturation */ PLFLT p; /* position */ PLFLT a; /* alpha (or transparency) */ int rev; /* if set, interpolate through h=0 */ } PLControlPt; typedef struct { PLINT cmd; PLINT result; } PLBufferingCB; typedef struct { PLFLT exp_label_disp; PLFLT exp_label_pos; PLFLT exp_label_just; } PLLabelDefaults; typedef struct { PLINT attributeType; PLINT intValue; PLINT *intValues; PLFLT fltValue; PLFLT *fltValues; PLColor colorValue; PLColor *colorValues; PLINT nValues; } PLAttribute; typedef struct { PLFLT ( *get )( PLPointer p, PLINT ix, PLINT iy ); PLFLT ( *set )( PLPointer p, PLINT ix, PLINT iy, PLFLT z ); PLFLT ( *add )( PLPointer p, PLINT ix, PLINT iy, PLFLT z ); PLFLT ( *sub )( PLPointer p, PLINT ix, PLINT iy, PLFLT z ); PLFLT ( *mul )( PLPointer p, PLINT ix, PLINT iy, PLFLT z ); PLFLT ( *div )( PLPointer p, PLINT ix, PLINT iy, PLFLT z ); PLINT ( *is_nan )( PLPointer p, PLINT ix, PLINT iy ); void ( *minmax )( PLPointer p, PLINT nx, PLINT ny, PLFLT *zmim, PLFLT *zmax ); /* * f2eval is backwards compatible signature for "f2eval" functions that * existed before plf2ops "operator function families" were used. */ PLFLT ( *f2eval )( PLINT ix, PLINT iy, PLPointer p ); } plf2ops_t; |