38 PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_plmeta =
"plmeta:PLplot Native Meta-File:0:plmeta:26:plm\n";
44 void plD_line_plm(
PLStream *,
short,
short,
short,
short );
62 FPOS_T lp_offset, index_offset;
69 #define BUFFER_LEN 256
70 static char buffer[BUFFER_LEN];
74 static void WriteFileHeader(
PLStream *pls );
75 static void UpdatePrevPagehdr(
PLStream *pls );
78 static void plm_fill(
PLStream *pls );
79 static void plm_swin(
PLStream *pls );
84 #define DEBUG_PRINT_LOCATION( a ) PrintLocation( pls, a )
86 static void PrintLocation(
PLStream *pls,
char *tag )
95 plexit(
"PrintLocation (plmeta.c): fgetpos call failed" );
97 pldebug( tag,
"at offset %d in file %s\n",
98 (
int) current_offset, pls->
FileName );
102 #define DEBUG_PRINT_LOCATION( a )
107 #ifndef ENABLE_DYNDRIVERS
152 pls->
dev = calloc( 1, (
size_t)
sizeof ( PLmDev ) );
153 if ( pls->
dev == NULL )
154 plexit(
"plD_init_plm: Out of memory." );
156 dev = (PLmDev *) pls->
dev;
170 plP_setphy( dev->xmin, dev->xmax, dev->ymin, dev->ymax );
174 WriteFileHeader( pls );
183 DEBUG_PRINT_LOCATION(
"before init" );
194 plD_line_plm(
PLStream *pls,
short x1,
short y1,
short x2,
short y2 )
196 PLmDev *dev = (PLmDev *) pls->
dev;
205 if ( x1 < dev->
xmin || x1 > dev->xmax ||
206 x2 < dev->
xmin || x2 > dev->xmax ||
207 y1 < dev->
ymin || y1 > dev->ymax ||
208 y2 < dev->
ymin || y2 > dev->ymax )
210 pldebug(
"plD_line_plm",
211 "coordinates out of bounds -- \nActual: (%i,%i), (%i,%i) Bounds: (%i,%i,%i,%i)\n",
212 x1, y1, x2, y2, dev->xmin, dev->xmax, dev->ymin, dev->ymax );
226 if ( x1 == dev->xold && y1 == dev->yold )
257 plD_polyline_plm(
PLStream *pls,
short *xa,
short *ya,
PLINT npts )
259 PLmDev *dev = (PLmDev *) pls->
dev;
271 dev->xold = xa[npts - 1];
272 dev->yold = ya[npts - 1];
308 PLmDev *dev = (PLmDev *) pls->
dev;
310 FPOS_T pp_offset = dev->lp_offset;;
320 UpdatePrevPagehdr( pls );
333 WritePageInfo( pls, pp_offset );
345 PLmDev *dev = (PLmDev *) pls->
dev;
356 plexit(
"WritePageInfo (plmeta.c): fgetpos call failed" );
358 UpdateIndex( pls, cp_offset );
377 dev->lp_offset = cp_offset;
394 PLmDev *dev = (PLmDev *) pls->
dev;
403 plexit(
"plD_bop_plm: fgetpos call failed" );
407 if ( dev->lp_offset > 0 )
411 pldebug(
"UpdatePrevPagehdr 1 (plmeta.c)",
412 "Location: %d, seeking to: %d\n",
413 (
int) cp_offset, (
int) dev->lp_offset );
416 fwbyte_offset = dev->lp_offset + 7;
419 snprintf(
buffer, BUFFER_LEN,
"UpdatePrevPagehdr (plmeta.c): fsetpos to fwbyte_offset (%d) failed",
420 (
int) fwbyte_offset );
428 plexit(
"UpdatePrevPagehdr (plmeta.c): fgetpos call failed" );
430 pldebug(
"UpdatePrevPagehdr 2 (plmeta.c)",
431 "Now at: %d, to write: %d\n",
432 (
int) fwbyte_offset, (
int) cp_offset );
445 snprintf(
buffer, BUFFER_LEN,
"UpdatePrevPagehdr (plmeta.c): fsetpos to fwbyte_offset (%d) failed",
446 (
int) fwbyte_offset );
452 pldebug(
"UpdatePrevPagehdr 3 (plmeta.c)",
453 "Value read as: %d\n", read_offset );
461 snprintf(
buffer, BUFFER_LEN,
"UpdatePrevPagehdr (plmeta.c): fsetpos to cp_offset (%d) failed",
477 PLmDev *dev = (PLmDev *) pls->
dev;
483 if ( dev->index_offset > 0 )
485 pldebug(
"UpdateIndex (plmeta.c)",
486 "Location: %d, seeking to: %d\n",
487 (
int) cp_offset, (
int) dev->lp_offset );
491 snprintf(
buffer, BUFFER_LEN,
"UpdateIndex (plmeta.c): fsetpos to index_offset (%d) failed",
492 (
int) dev->index_offset );
498 pldebug(
"UpdateIndex (plmeta.c)",
499 "Location: %d, seeking to: %d\n",
500 (
int) dev->lp_offset, (
int) cp_offset );
504 snprintf(
buffer, BUFFER_LEN,
"UpdateIndex (plmeta.c): fsetpos to cp_offset (%d) failed",
573 for ( i = 0; i < pls->
ncol0; i++ )
583 for ( i = 0; i < pls->
ncol1; i++ )
637 PLmDev *dev = (PLmDev *) pls->
dev;
673 PLmDev *dev = (PLmDev *) pls->
dev;
677 dbug_enter(
"WriteFileHeader(PLStream *pls" );
688 plexit(
"WriteFileHeader: fgetpos call failed" );