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];
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" );
PDFstrm * pdf_finit(FILE *file)
void(* plD_line_fp)(struct PLStream_struct *, short, short, short, short)
int pdf_wr_4bytes(PDFstrm *pdfs, U_LONG s)
void(* plD_eop_fp)(struct PLStream_struct *)
void(* plD_state_fp)(struct PLStream_struct *, PLINT)
void(* plD_tidy_fp)(struct PLStream_struct *)
void plOpenFile(PLStream *pls)
int pdf_wr_2bytes(PDFstrm *pdfs, U_SHORT s)
int pdf_wr_2nbytes(PDFstrm *pdfs, U_SHORT *s, PLINT n)
void plGetFam(PLStream *pls)
void plFamInit(PLStream *pls)
void(* plD_polyline_fp)(struct PLStream_struct *, short *, short *, PLINT)
void(* plD_esc_fp)(struct PLStream_struct *, PLINT, void *)
void(* plD_bop_fp)(struct PLStream_struct *)
int pdf_wr_header(PDFstrm *pdfs, const char *header)
void plP_setpxl(PLFLT xpmm, PLFLT ypmm)
#define PLDLLIMPEXP_DRIVER
void plP_setphy(PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax)
int pdf_wr_ieeef(PDFstrm *pdfs, float f)
int pdf_close(PDFstrm *pdfs)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_plm(PLDispatchTable *pdt)
int pdf_rd_4bytes(PDFstrm *pdfs, U_LONG *ps)
plD_polyline_fp pl_polyline
int pdf_wr_1byte(PDFstrm *pdfs, U_CHAR s)
void(* plD_init_fp)(struct PLStream_struct *)
void plexit(const char *errormsg)