1 /*
2 Copyright (C) 2018-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5 
6 /*
7 	WARNING: This file was generated by the dkct program (see
8 	http://dktools.sourceforge.net/ for details).
9 	Changes you make here will be lost if dkct is run again!
10 	You should modify the original source and run dkct on it.
11 	Original source: dk4graa.ctr
12 */
13 
14 /**	@file dk4graa.c The dk4graa module.
15 */
16 
17 
18 #include "dk4conf.h"
19 
20 #if	DK4_HAVE_FCNTL_H
21 #ifndef	FCNTL_H_INCLUDED
22 #include <fcntl.h>
23 #define	FCNTL_H_INCLUDED 1
24 #endif
25 #endif
26 
27 #if	DK4_HAVE_IO_H
28 #ifndef	IO_H_INCLUDED
29 #include <io.h>
30 #define	IO_H_INCLUDED 1
31 #endif
32 #endif
33 
34 #ifndef	DK4GRAA_H_INCLUDED
35 #include <libdk4graa/dk4graa.h>
36 #endif
37 
38 #ifndef	DK4GRALO_H_INCLUDED
39 #include <libdk4graa/dk4gralo.h>
40 #endif
41 
42 #ifndef	DK4BIF_H_INCLUDED
43 #include <libdk4bif/dk4bif.h>
44 #endif
45 
46 #ifndef	DK4BIFAP_H_INCLUDED
47 #include <libdk4bifa/dk4bifap.h>
48 #endif
49 
50 #ifndef	DK4FOPDA_H_INCLUDED
51 #include <libdk4app/dk4fopda.h>
52 #endif
53 
54 #ifndef	DK4ISADM_H_INCLUDED
55 #include <libdk4c/dk4isadm.h>
56 #endif
57 
58 #ifndef DK4_UNUSED_H_INCLUDED
59 #include <libdk4base/dk4unused.h>
60 #endif
61 
62 
63 
64 
65 
66 
67 
68 /**	Error codes in error counting to avoid repeated error messages.
69 */
70 enum {
71 					/**	Failed to add graphics contents.
72 					*/
73 	E_ADD_CONTENTS	= 1 ,
74 
75 					/**	Failed to change graphics setup.
76 					*/
77 	E_CHANGE_SETUP ,
78 
79 					/**	Failed to write graphics contents to file.
80 					*/
81 	E_WRITE_FILE ,
82 
83 					/**	Image type not supported for PGF output.
84 					*/
85 	E_PGF_IMAGE_TYPE ,
86 };
87 
88 
89 /**	Show error message.
90 	@param	app	Application structure.
91 	@param	fn	Name of file to print with error message.
92 	@param	erp	Error report, used for details.
93 	@param	si	Index of primary message text in dk4gra_app_kw array.
94 */
95 static
96 void
dk4gra_app_error(dk4_app_t * app,dkChar const * fn,dk4_er_t const * erp,size_t si)97 dk4gra_app_error(
98 	dk4_app_t			*app,
99 	dkChar		const	*fn,
100 	dk4_er_t	const	*erp,
101 	size_t				 si
102 )
103 {
104 	const dkChar *	const	*msg			=	NULL;
105 	dkChar			const	*oldsourcefile	=	NULL;
106 	dk4_um_t				 oldsourceline	=	0UL;
107 	size_t					 szmsg			=	0;
108 
109 	/*
110 		Find localized message texts
111 	*/
112 	szmsg	= dk4gralog_sz_localized_texts();
113 	msg		= dk4gralog_localized_texts(app);
114 	/*
115 		Save source file and line
116 	*/
117 	oldsourcefile = dk4app_get_log_source_file(app);
118 	oldsourceline = dk4app_get_log_source_line(app);
119 	/*
120 		Set source file and line
121 	*/
122 	dk4app_set_log_source_file(app, fn);
123 	dk4app_set_log_source_line(app, (dk4_um_t)0UL);
124 	/*
125 		Show error message, provide details if possible
126 	*/
127 	dk4app_log_1(app, msg, szmsg, DK4_LL_ERROR, si);
128 	switch (erp->ec) {
129 		case DK4_E_INVALID_ARGUMENTS : {
130 			dk4app_log_1(app, msg, szmsg, DK4_LL_ERROR, 1);
131 		} break;
132 		case DK4_E_MATH_OVERFLOW : {
133 			dk4app_log_1(app, msg, szmsg, DK4_LL_ERROR, 2);
134 		} break;
135 		case DK4_E_MEMORY_ALLOCATION_FAILED : {
136 			dk4app_log_base1(app, DK4_LL_ERROR, 90);
137 		} break;
138 		case DK4_E_WRITE_FAILED : {
139 			dk4app_log_1(app, msg, szmsg, DK4_LL_ERROR, 3);
140 		} break;
141 		case DK4_E_FLUSH_FAILED : {
142 			dk4app_log_1(app, msg, szmsg, DK4_LL_ERROR, 4);
143 		} break;
144 		case DK4_E_CLOSE_FAILED : {
145 			dk4app_log_1(app, msg, szmsg, DK4_LL_ERROR, 4);
146 		} break;
147 	}
148 	/*	Restore old source file and line
149 	*/
150 	dk4app_set_log_source_file(app, oldsourcefile);
151 	dk4app_set_log_source_line(app, oldsourceline);
152 
153 }
154 
155 
156 
157 /**	Check whether or not to print current error message.
158 	We want to avoid repeating the same message again and again.
159 */
160 static
161 int
dk4gra_app_check_error(dk4_gra_t * gra,int ce,int ec)162 dk4gra_app_check_error(
163 	dk4_gra_t		*gra,
164 	int				 ce,
165 	int				 ec
166 )
167 {
168 	int		 back	= 0;
169 
170 	if (NULL != gra) {
171 		if ((gra->le == ce) && (gra->lec == ec)) {
172 			if (4 > gra->len) {
173 				back = 1;
174 				gra->len += 1;
175 			}
176 		}
177 		else {
178 			back = 1;
179 			gra->le = ce;
180 			gra->lec = ec;
181 			gra->len = 0;
182 		}
183 	}
184 	else {
185 		back = 1;
186 	}
187 
188 	return back;
189 }
190 
191 
192 
193 dk4_gra_t *
dk4gra_app_open_pdf(const dkChar * fn,size_t w,size_t h,int docfl,dk4_app_t * app)194 dk4gra_app_open_pdf(
195 	const dkChar	*fn,
196 	size_t			 w,
197 	size_t			 h,
198 	int				 docfl,
199 	dk4_app_t		*app
200 )
201 {
202 	dk4_er_t			 er;
203 	dk4_gra_t			*back	= NULL;
204 
205 	dk4error_init(&er);
206 	back = dk4gra_open_pdf(fn, w, h, docfl, &er);
207 	if ((NULL == back) && (NULL != app)) {
208 		dk4gra_app_error(app, fn, &er, 52);
209 	}
210 
211 	return back;
212 }
213 
214 
215 dk4_gra_t *
dk4gra_app_open_ps(const dkChar * fn,size_t w,size_t h,int docfl,dk4_app_t * app)216 dk4gra_app_open_ps(
217 	const dkChar	*fn,
218 	size_t			 w,
219 	size_t			 h,
220 	int				 docfl,
221 	dk4_app_t		*app
222 )
223 {
224 	dk4_er_t			 er;
225 	dk4_gra_t			*back	= NULL;
226 
227 	dk4error_init(&er);
228 	back = dk4gra_open_ps(fn, w, h, docfl, &er);
229 	if ((NULL == back) && (NULL != app)) {
230 		dk4gra_app_error(app, fn, &er, 52);
231 	}
232 
233 	return back;
234 }
235 
236 
237 
238 dk4_gra_t *
dk4gra_app_open_pgf(const dkChar * fn,size_t w,size_t h,int docfl,int sa,dk4_app_t * app)239 dk4gra_app_open_pgf(
240 	const dkChar	*fn,
241 	size_t			 w,
242 	size_t			 h,
243 	int				 docfl,
244 	int				 sa,
245 	dk4_app_t		*app
246 )
247 {
248 	dk4_er_t			 er;
249 	dk4_gra_t			*back	= NULL;
250 
251 	dk4error_init(&er);
252 	back = dk4gra_open_pgf(fn, w, h, docfl, sa, &er);
253 	if ((NULL == back) && (NULL != app)) {
254 		dk4gra_app_error(app, fn, &er, 52);
255 	}
256 
257 	return back;
258 }
259 
260 
261 
262 void
dk4gra_app_write_file_and_close(FILE * fout,dk4_gra_t * gra,int * backptr,dk4_app_t * DK4_ARG_UNUSED (app))263 dk4gra_app_write_file_and_close(
264 	FILE			*fout,
265 	dk4_gra_t		*gra,
266 	int				*backptr,
267 	dk4_app_t		* DK4_ARG_UNUSED(app)
268 )
269 {
270 	dk4_er_t	 er;
271 #if	0
272 	dkChar		*fn		= NULL;
273 #endif
274 	int		 	 back	= 1;
275 	DK4_UNUSED_ARG(app)
276 
277 	dk4error_init(&er);
278 	dk4gra_write_file_and_close(fout, gra, &back, &er);
279 	gra = NULL;
280 	if (0 == back) {
281 		if (NULL != backptr) { *backptr = 0; }
282 #if	0
283 		if (NULL != app) {
284 			if (0 != dk4gra_app_check_error(gra, E_WRITE_FILE, er.ec)) {
285 				if (NULL != gra) { fn = gra->fn; }
286 				dk4gra_app_error(app, fn, &er, 59);
287 			}
288 		}
289 #endif
290 	}
291 
292 }
293 
294 
295 
296 void
dk4gra_app_write_and_close(dk4_gra_t * gra,int * backptr,dk4_app_t * app)297 dk4gra_app_write_and_close(
298 	dk4_gra_t		*gra,
299 	int				*backptr,
300 	dk4_app_t		*app
301 )
302 {
303 	dk4_er_t	 er;
304 	FILE		*fout	=	NULL;
305 	int			 tests	=	DK4_FOPEN_SC_USER;
306 	int			 back	=	0;
307 	int			 invala	=	0;
308 #if	DK4_ON_WINDOWS
309 	int			 oldm	=	_O_TEXT;
310 #endif
311 
312 
313 	if (NULL != gra) {
314 		if ((NULL != gra->s_pages) && (NULL != gra->i_pages)) {
315 			if ((0 != gra->pages) && (NULL != gra->curpg)) {
316 				if (NULL != gra->fn) {
317 					if (0 != dk4isadmin()) { tests = DK4_FOPEN_SC_PRIVILEGED; }
318 					fout = dk4fopen_app(gra->fn, dkT("wb"), tests, app);
319 					if (NULL != fout) {
320 						back = 1;
321 						dk4gra_app_write_file_and_close(fout, gra, &back, app);
322 						gra = NULL;
323 						dk4error_init(&er);
324 						if (0 != fclose(fout)) {
325 							dk4error_set_simple_error_code(
326 								&er, DK4_E_CLOSE_FAILED
327 							);
328 							back = 0;
329 #if	0
330 							/*	2019-03-06
331 								Graphics is closed, we can not access
332 								components.
333 							*/
334 							if (NULL != app) {
335 								if (
336 									0 != dk4gra_app_check_error(
337 										gra, E_WRITE_FILE, er.ec
338 									)
339 								)
340 								{
341 									dk4gra_app_error(app, gra->fn, &er, 59);
342 								}
343 							}
344 #endif
345 						}
346 					}
347 					else {
348 						dk4gra_close(gra);
349 						gra = NULL;
350 					}
351 				}
352 				else {
353 					back = 1;
354 #if	DK4_ON_WINDOWS
355 					oldm = _setmode(_fileno(stdout), _O_BINARY);
356 #endif
357 					dk4gra_app_write_file_and_close(stdout, gra, &back, app);
358 					gra = NULL;
359 #if	DK4_ON_WINDOWS
360 					_setmode(_fileno(stdout), oldm);
361 #endif
362 				}
363 			}
364 			else {
365 				/* ERROR: Invalid arguments */
366 				invala = 1;
367 				dk4gra_close(gra);
368 				gra = NULL;
369 			}
370 		}
371 		else {
372 			/* ERROR: Invalid arguments */
373 			invala = 1;
374 			dk4gra_close(gra);
375 			gra = NULL;
376 		}
377 	}
378 	else {
379 		/* ERROR: Invalid arguments */
380 		invala = 1;
381 	}
382 	if (0 != invala) {
383 		/* ERROR: Invalid arguments */
384 		dk4error_init(&er);
385 		dk4error_set_simple_error_code(&er, DK4_E_INVALID_ARGUMENTS);
386 		if (NULL != app) {
387 #if	0
388 			/*	2019-03-06
389 				Graphics is closed, we can no longer access components.
390 			*/
391 			if (0 != dk4gra_app_check_error(gra, E_WRITE_FILE, er.ec)) {
392 				dk4gra_app_error(app, gra->fn, &er, 59);
393 			}
394 #endif
395 		}
396 	}
397 
398 	if ((NULL != backptr) && (0 == back)) { *backptr = 0; }
399 }
400 
401 
402 
403 void
dk4gra_app_set_color_conversion(dk4_gra_t * gra,dk4_cs_conv_ctx_t const * ctx,int * backptr,dk4_app_t * app)404 dk4gra_app_set_color_conversion(
405 	dk4_gra_t				*gra,
406 	dk4_cs_conv_ctx_t const	*ctx,
407 	int						*backptr,
408 	dk4_app_t				*app
409 )
410 {
411 	dk4_er_t	 er;
412 	dkChar		*fn		= NULL;
413 	int		 	 back	= 1;
414 
415 	dk4error_init(&er);
416 	dk4gra_set_color_conversion(gra, ctx, &back, &er);
417 	if (0 == back) {
418 		if (NULL != backptr) { *backptr = 0; }
419 		if (NULL != app) {
420 			if (0 != dk4gra_app_check_error(gra, E_CHANGE_SETUP, er.ec)) {
421 				if (NULL != gra) { fn = gra->fn; }
422 				dk4gra_app_error(app, fn, &er, 58);
423 			}
424 		}
425 	}
426 
427 }
428 
429 
430 
431 void
dk4gra_app_page(dk4_gra_t * gra,int * backptr,dk4_app_t * app)432 dk4gra_app_page(
433 	dk4_gra_t		*gra,
434 	int				*backptr,
435 	dk4_app_t		*app
436 )
437 {
438 	dk4_er_t	 er;
439 	dkChar		*fn		= NULL;
440 	int		 	 back	= 1;
441 
442 	dk4error_init(&er);
443 	dk4gra_page(gra, &back, &er);
444 	if (0 == back) {
445 		if (NULL != backptr) { *backptr = 0; }
446 		if (NULL != app) {
447 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
448 				if (NULL != gra) { fn = gra->fn; }
449 				dk4gra_app_error(app, fn, &er, 57);
450 			}
451 		}
452 	}
453 
454 }
455 
456 
457 
458 void
dk4gra_app_page_with_flags(dk4_gra_t * gra,int flags,int * backptr,dk4_app_t * app)459 dk4gra_app_page_with_flags(
460 	dk4_gra_t		*gra,
461 	int				 flags,
462 	int				*backptr,
463 	dk4_app_t		*app
464 )
465 {
466 	dk4_er_t	 er;
467 	dkChar		*fn		= NULL;
468 	int		 	 back	= 1;
469 
470 	dk4error_init(&er);
471 	dk4gra_page_with_flags(gra, flags, &back, &er);
472 	if (0 == back) {
473 		if (NULL != backptr) { *backptr = 0; }
474 		if (NULL != app) {
475 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
476 				if (NULL != gra) { fn = gra->fn; }
477 				dk4gra_app_error(app, fn, &er, 57);
478 			}
479 		}
480 	}
481 
482 }
483 
484 
485 
486 void
dk4gra_app_set_gs_for_pattern_only(dk4_gra_t * gra,int val,dk4_app_t * app)487 dk4gra_app_set_gs_for_pattern_only(
488 	dk4_gra_t		*gra,
489 	int				 val,
490 	dk4_app_t		*app
491 )
492 {
493 	dk4_er_t	 er;
494 	dkChar		*fn		= NULL;
495 
496 	dk4error_init(&er);
497 	dk4gra_set_gs_for_pattern_only(gra, val, &er);
498 	if (0 != er.ec) {
499 		if (NULL != app) {
500 			if (0 != dk4gra_app_check_error(gra, E_CHANGE_SETUP, er.ec)) {
501 				if (NULL != gra) { fn = gra->fn; }
502 				dk4gra_app_error(app, fn, &er, 58);
503 			}
504 		}
505 	}
506 
507 }
508 
509 
510 
511 void
dk4gra_app_gsave(dk4_gra_t * gra,int * backptr,dk4_app_t * app)512 dk4gra_app_gsave(
513 	dk4_gra_t		*gra,
514 	int				*backptr,
515 	dk4_app_t		*app
516 )
517 {
518 	dk4_er_t	 er;
519 	dkChar		*fn		= NULL;
520 	int		 	 back	= 1;
521 
522 	dk4error_init(&er);
523 	dk4gra_gsave(gra, &back, &er);
524 	if (0 == back) {
525 		if (NULL != backptr) { *backptr = 0; }
526 		if (NULL != app) {
527 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
528 				if (NULL != gra) { fn = gra->fn; }
529 				dk4gra_app_error(app, fn, &er, 57);
530 			}
531 		}
532 	}
533 
534 }
535 
536 
537 
538 void
dk4gra_app_grestore(dk4_gra_t * gra,int * backptr,dk4_app_t * app)539 dk4gra_app_grestore(
540 	dk4_gra_t		*gra,
541 	int				*backptr,
542 	dk4_app_t		*app
543 )
544 {
545 	dk4_er_t	 er;
546 	dkChar		*fn		= NULL;
547 	int		 	 back	= 1;
548 
549 	dk4error_init(&er);
550 	dk4gra_grestore(gra, &back, &er);
551 	if (0 == back) {
552 		if (NULL != backptr) { *backptr = 0; }
553 		if (NULL != app) {
554 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
555 				if (NULL != gra) { fn = gra->fn; }
556 				dk4gra_app_error(app, fn, &er, 57);
557 			}
558 		}
559 	}
560 
561 }
562 
563 
564 
565 void
dk4gra_app_set_line_width(dk4_gra_t * gra,double lw,int * backptr,dk4_app_t * app)566 dk4gra_app_set_line_width(
567 	dk4_gra_t		*gra,
568 	double			 lw,
569 	int				*backptr,
570 	dk4_app_t		*app
571 )
572 {
573 	dk4_er_t	 er;
574 	dkChar		*fn		= NULL;
575 	int		 	 back	= 1;
576 
577 	dk4error_init(&er);
578 	dk4gra_set_line_width(gra, lw, &back, &er);
579 	if (0 == back) {
580 		if (NULL != backptr) { *backptr = 0; }
581 		if (NULL != app) {
582 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
583 				if (NULL != gra) { fn = gra->fn; }
584 				dk4gra_app_error(app, fn, &er, 57);
585 			}
586 		}
587 	}
588 
589 }
590 
591 
592 
593 void
dk4gra_app_set_line_style(dk4_gra_t * gra,dk4_gra_ls_t ls,double sv,int * backptr,dk4_app_t * app)594 dk4gra_app_set_line_style(
595 	dk4_gra_t		*gra,
596 	dk4_gra_ls_t	 ls,
597 	double			 sv,
598 	int				*backptr,
599 	dk4_app_t		*app
600 )
601 {
602 	dk4_er_t	 er;
603 	dkChar		*fn		= NULL;
604 	int		 	 back	= 1;
605 
606 	dk4error_init(&er);
607 	dk4gra_set_line_style(gra, ls, sv, &back, &er);
608 	if (0 == back) {
609 		if (NULL != backptr) { *backptr = 0; }
610 		if (NULL != app) {
611 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
612 				if (NULL != gra) { fn = gra->fn; }
613 				dk4gra_app_error(app, fn, &er, 57);
614 			}
615 		}
616 	}
617 
618 }
619 
620 
621 
622 void
dk4gra_app_set_line_cap(dk4_gra_t * gra,dk4_gra_lc_t lc,int * backptr,dk4_app_t * app)623 dk4gra_app_set_line_cap(
624 	dk4_gra_t		*gra,
625 	dk4_gra_lc_t	 lc,
626 	int				*backptr,
627 	dk4_app_t		*app
628 )
629 {
630 	dk4_er_t	 er;
631 	dkChar		*fn		= NULL;
632 	int		 	 back	= 1;
633 
634 	dk4error_init(&er);
635 	dk4gra_set_line_cap(gra, lc, &back, &er);
636 	if (0 == back) {
637 		if (NULL != backptr) { *backptr = 0; }
638 		if (NULL != app) {
639 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
640 				if (NULL != gra) { fn = gra->fn; }
641 				dk4gra_app_error(app, fn, &er, 57);
642 			}
643 		}
644 	}
645 
646 }
647 
648 
649 
650 void
dk4gra_app_set_line_join(dk4_gra_t * gra,dk4_gra_lj_t lj,double ml,int * backptr,dk4_app_t * app)651 dk4gra_app_set_line_join(
652 	dk4_gra_t		*gra,
653 	dk4_gra_lj_t	 lj,
654 	double			 ml,
655 	int				*backptr,
656 	dk4_app_t		*app
657 )
658 {
659 	dk4_er_t	 er;
660 	dkChar		*fn		= NULL;
661 	int		 	 back	= 1;
662 
663 	dk4error_init(&er);
664 	dk4gra_set_line_join(gra, lj, ml, &back, &er);
665 	if (0 == back) {
666 		if (NULL != backptr) { *backptr = 0; }
667 		if (NULL != app) {
668 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
669 				if (NULL != gra) { fn = gra->fn; }
670 				dk4gra_app_error(app, fn, &er, 57);
671 			}
672 		}
673 	}
674 
675 }
676 
677 
678 
679 void
dk4gra_app_set_fill_gray(dk4_gra_t * gra,double g,int * backptr,dk4_app_t * app)680 dk4gra_app_set_fill_gray(
681 	dk4_gra_t		*gra,
682 	double			 g,
683 	int				*backptr,
684 	dk4_app_t		*app
685 )
686 {
687 	dk4_er_t	 er;
688 	dkChar		*fn		= NULL;
689 	int		 	 back	= 1;
690 
691 	dk4error_init(&er);
692 	dk4gra_set_fill_gray(gra, g, &back, &er);
693 	if (0 == back) {
694 		if (NULL != backptr) { *backptr = 0; }
695 		if (NULL != app) {
696 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
697 				if (NULL != gra) { fn = gra->fn; }
698 				dk4gra_app_error(app, fn, &er, 57);
699 			}
700 		}
701 	}
702 
703 }
704 
705 
706 
707 void
dk4gra_app_set_fill_rgb(dk4_gra_t * gra,double r,double g,double b,int * backptr,dk4_app_t * app)708 dk4gra_app_set_fill_rgb(
709 	dk4_gra_t		*gra,
710 	double			 r,
711 	double			 g,
712 	double			 b,
713 	int				*backptr,
714 	dk4_app_t		*app
715 )
716 {
717 	dk4_er_t	 er;
718 	dkChar		*fn		= NULL;
719 	int		 	 back	= 1;
720 
721 	dk4error_init(&er);
722 	dk4gra_set_fill_rgb(gra, r, g, b, &back, &er);
723 	if (0 == back) {
724 		if (NULL != backptr) { *backptr = 0; }
725 		if (NULL != app) {
726 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
727 				if (NULL != gra) { fn = gra->fn; }
728 				dk4gra_app_error(app, fn, &er, 57);
729 			}
730 		}
731 	}
732 
733 }
734 
735 
736 
737 void
dk4gra_app_set_fill_cmyk(dk4_gra_t * gra,double c,double m,double y,double k,int * backptr,dk4_app_t * app)738 dk4gra_app_set_fill_cmyk(
739 	dk4_gra_t		*gra,
740 	double			 c,
741 	double			 m,
742 	double			 y,
743 	double			 k,
744 	int				*backptr,
745 	dk4_app_t		*app
746 )
747 {
748 	dk4_er_t	 er;
749 	dkChar		*fn		= NULL;
750 	int		 	 back	= 1;
751 
752 	dk4error_init(&er);
753 	dk4gra_set_fill_cmyk(gra, c, m, y, k, &back, &er);
754 	if (0 == back) {
755 		if (NULL != backptr) { *backptr = 0; }
756 		if (NULL != app) {
757 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
758 				if (NULL != gra) { fn = gra->fn; }
759 				dk4gra_app_error(app, fn, &er, 57);
760 			}
761 		}
762 	}
763 
764 }
765 
766 
767 
768 void
dk4gra_app_set_stroke_gray(dk4_gra_t * gra,double g,int * backptr,dk4_app_t * app)769 dk4gra_app_set_stroke_gray(
770 	dk4_gra_t		*gra,
771 	double			 g,
772 	int				*backptr,
773 	dk4_app_t		*app
774 )
775 {
776 	dk4_er_t	 er;
777 	dkChar		*fn		= NULL;
778 	int		 	 back	= 1;
779 
780 	dk4error_init(&er);
781 	dk4gra_set_stroke_gray(gra, g, &back, &er);
782 	if (0 == back) {
783 		if (NULL != backptr) { *backptr = 0; }
784 		if (NULL != app) {
785 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
786 				if (NULL != gra) { fn = gra->fn; }
787 				dk4gra_app_error(app, fn, &er, 57);
788 			}
789 		}
790 	}
791 
792 }
793 
794 
795 
796 void
dk4gra_app_set_stroke_rgb(dk4_gra_t * gra,double r,double g,double b,int * backptr,dk4_app_t * app)797 dk4gra_app_set_stroke_rgb(
798 	dk4_gra_t		*gra,
799 	double			 r,
800 	double			 g,
801 	double			 b,
802 	int				*backptr,
803 	dk4_app_t		*app
804 )
805 {
806 	dk4_er_t	 er;
807 	dkChar		*fn		= NULL;
808 	int		 	 back	= 1;
809 
810 	dk4error_init(&er);
811 	dk4gra_set_stroke_rgb(gra, r, g, b, &back, &er);
812 	if (0 == back) {
813 		if (NULL != backptr) { *backptr = 0; }
814 		if (NULL != app) {
815 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
816 				if (NULL != gra) { fn = gra->fn; }
817 				dk4gra_app_error(app, fn, &er, 57);
818 			}
819 		}
820 	}
821 
822 }
823 
824 
825 
826 void
dk4gra_app_set_stroke_cmyk(dk4_gra_t * gra,double c,double m,double y,double k,int * backptr,dk4_app_t * app)827 dk4gra_app_set_stroke_cmyk(
828 	dk4_gra_t		*gra,
829 	double			 c,
830 	double			 m,
831 	double			 y,
832 	double			 k,
833 	int				*backptr,
834 	dk4_app_t		*app
835 )
836 {
837 	dk4_er_t	 er;
838 	dkChar		*fn		= NULL;
839 	int		 	 back	= 1;
840 
841 	dk4error_init(&er);
842 	dk4gra_set_stroke_cmyk(gra, c, m, y, k, &back, &er);
843 	if (0 == back) {
844 		if (NULL != backptr) { *backptr = 0; }
845 		if (NULL != app) {
846 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
847 				if (NULL != gra) { fn = gra->fn; }
848 				dk4gra_app_error(app, fn, &er, 57);
849 			}
850 		}
851 	}
852 
853 }
854 
855 
856 
857 
858 void
dk4gra_app_prepare_fill(dk4_gra_t * gra,int * backptr,dk4_app_t * app)859 dk4gra_app_prepare_fill(
860 	dk4_gra_t	*gra,
861 	int			*backptr,
862 	dk4_app_t	*app
863 )
864 {
865 	dk4_er_t	 er;
866 	dkChar		*fn		= NULL;
867 	int		 	 back	= 1;
868 
869 	dk4error_init(&er);
870 	dk4gra_prepare_fill(gra, &back, &er);
871 	if (0 == back) {
872 		if (NULL != backptr) { *backptr = 0; }
873 		if (NULL != app) {
874 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
875 				if (NULL != gra) { fn = gra->fn; }
876 				dk4gra_app_error(app, fn, &er, 57);
877 			}
878 		}
879 	}
880 
881 }
882 
883 
884 
885 void
dk4gra_app_prepare_stroke(dk4_gra_t * gra,int * backptr,dk4_app_t * app)886 dk4gra_app_prepare_stroke(
887 	dk4_gra_t	*gra,
888 	int			*backptr,
889 	dk4_app_t	*app
890 )
891 {
892 	dk4_er_t	 er;
893 	dkChar		*fn		= NULL;
894 	int		 	 back	= 1;
895 
896 	dk4error_init(&er);
897 	dk4gra_prepare_stroke(gra, &back, &er);
898 	if (0 == back) {
899 		if (NULL != backptr) { *backptr = 0; }
900 		if (NULL != app) {
901 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
902 				if (NULL != gra) { fn = gra->fn; }
903 				dk4gra_app_error(app, fn, &er, 57);
904 			}
905 		}
906 	}
907 
908 }
909 
910 
911 
912 void
dk4gra_app_prepare_fill_and_stroke(dk4_gra_t * gra,int * backptr,dk4_app_t * app)913 dk4gra_app_prepare_fill_and_stroke(
914 	dk4_gra_t	*gra,
915 	int			*backptr,
916 	dk4_app_t	*app
917 )
918 {
919 	dk4_er_t	 er;
920 	dkChar		*fn		= NULL;
921 	int		 	 back	= 1;
922 
923 	dk4error_init(&er);
924 	dk4gra_prepare_fill_and_stroke(gra, &back, &er);
925 	if (0 == back) {
926 		if (NULL != backptr) { *backptr = 0; }
927 		if (NULL != app) {
928 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
929 				if (NULL != gra) { fn = gra->fn; }
930 				dk4gra_app_error(app, fn, &er, 57);
931 			}
932 		}
933 	}
934 
935 }
936 
937 
938 
939 
940 void
dk4gra_app_fill(dk4_gra_t * gra,int * backptr,dk4_app_t * app)941 dk4gra_app_fill(
942 	dk4_gra_t		*gra,
943 	int				*backptr,
944 	dk4_app_t		*app
945 )
946 {
947 	dk4_er_t	 er;
948 	dkChar		*fn		= NULL;
949 	int		 	 back	= 1;
950 
951 	dk4error_init(&er);
952 	dk4gra_fill(gra, &back, &er);
953 	if (0 == back) {
954 		if (NULL != backptr) { *backptr = 0; }
955 		if (NULL != app) {
956 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
957 				if (NULL != gra) { fn = gra->fn; }
958 				dk4gra_app_error(app, fn, &er, 57);
959 			}
960 		}
961 	}
962 
963 }
964 
965 
966 
967 void
dk4gra_app_stroke(dk4_gra_t * gra,int * backptr,dk4_app_t * app)968 dk4gra_app_stroke(
969 	dk4_gra_t		*gra,
970 	int				*backptr,
971 	dk4_app_t		*app
972 )
973 {
974 	dk4_er_t	 er;
975 	dkChar		*fn		= NULL;
976 	int		 	 back	= 1;
977 
978 	dk4error_init(&er);
979 	dk4gra_stroke(gra, &back, &er);
980 	if (0 == back) {
981 		if (NULL != backptr) { *backptr = 0; }
982 		if (NULL != app) {
983 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
984 				if (NULL != gra) { fn = gra->fn; }
985 				dk4gra_app_error(app, fn, &er, 57);
986 			}
987 		}
988 	}
989 
990 }
991 
992 
993 
994 void
dk4gra_app_fill_and_stroke(dk4_gra_t * gra,int * backptr,dk4_app_t * app)995 dk4gra_app_fill_and_stroke(
996 	dk4_gra_t		*gra,
997 	int				*backptr,
998 	dk4_app_t		*app
999 )
1000 {
1001 	dk4_er_t	 er;
1002 	dkChar		*fn		= NULL;
1003 	int		 	 back	= 1;
1004 
1005 	dk4error_init(&er);
1006 	dk4gra_fill_and_stroke(gra, &back, &er);
1007 	if (0 == back) {
1008 		if (NULL != backptr) { *backptr = 0; }
1009 		if (NULL != app) {
1010 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1011 				if (NULL != gra) { fn = gra->fn; }
1012 				dk4gra_app_error(app, fn, &er, 57);
1013 			}
1014 		}
1015 	}
1016 
1017 }
1018 
1019 
1020 
1021 void
dk4gra_app_clip(dk4_gra_t * gra,int * backptr,dk4_app_t * app)1022 dk4gra_app_clip(
1023 	dk4_gra_t		*gra,
1024 	int				*backptr,
1025 	dk4_app_t		*app
1026 )
1027 {
1028 	dk4_er_t	 er;
1029 	dkChar		*fn		= NULL;
1030 	int		 	 back	= 1;
1031 
1032 	dk4error_init(&er);
1033 	dk4gra_clip(gra, &back, &er);
1034 	if (0 == back) {
1035 		if (NULL != backptr) { *backptr = 0; }
1036 		if (NULL != app) {
1037 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1038 				if (NULL != gra) { fn = gra->fn; }
1039 				dk4gra_app_error(app, fn, &er, 57);
1040 			}
1041 		}
1042 	}
1043 
1044 }
1045 
1046 
1047 
1048 void
dk4gra_app_pattern(dk4_gra_t * gra,double xl,double xr,double yb,double yt,dk4_gra_pattern_t pn,int * backptr,dk4_app_t * app)1049 dk4gra_app_pattern(
1050 	dk4_gra_t			*gra,
1051 	double				 xl,
1052 	double				 xr,
1053 	double				 yb,
1054 	double				 yt,
1055 	dk4_gra_pattern_t	 pn,
1056 	int					*backptr,
1057 	dk4_app_t			*app
1058 )
1059 {
1060 	dk4_er_t	 er;
1061 	dkChar		*fn		= NULL;
1062 	int		 	 back	= 1;
1063 
1064 	dk4error_init(&er);
1065 	dk4gra_pattern(gra, xl, xr, yb, yt, pn, &back, &er);
1066 	if (0 == back) {
1067 		if (NULL != backptr) { *backptr = 0; }
1068 		if (NULL != app) {
1069 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1070 				if (NULL != gra) { fn = gra->fn; }
1071 				dk4gra_app_error(app, fn, &er, 57);
1072 			}
1073 		}
1074 	}
1075 
1076 }
1077 
1078 
1079 
1080 
1081 void
dk4gra_app_newpath_moveto(dk4_gra_t * gra,double x,double y,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1082 dk4gra_app_newpath_moveto(
1083 	dk4_gra_t		*gra,
1084 	double			 x,
1085 	double			 y,
1086 	dk4_bb_t		*bbptr,
1087 	int				*backptr,
1088 	dk4_app_t		*app
1089 )
1090 {
1091 	dk4_er_t	 er;
1092 	dkChar		*fn		= NULL;
1093 	int		 	 back	= 1;
1094 
1095 	dk4error_init(&er);
1096 	dk4gra_newpath_moveto(gra, x, y, bbptr, &back, &er);
1097 	if (0 == back) {
1098 		if (NULL != backptr) { *backptr = 0; }
1099 		if (NULL != app) {
1100 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1101 				if (NULL != gra) { fn = gra->fn; }
1102 				dk4gra_app_error(app, fn, &er, 57);
1103 			}
1104 		}
1105 	}
1106 
1107 }
1108 
1109 
1110 
1111 void
dk4gra_app_lineto(dk4_gra_t * gra,double x,double y,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1112 dk4gra_app_lineto(
1113 	dk4_gra_t		*gra,
1114 	double			 x,
1115 	double			 y,
1116 	dk4_bb_t		*bbptr,
1117 	int				*backptr,
1118 	dk4_app_t		*app
1119 )
1120 {
1121 	dk4_er_t	 er;
1122 	dkChar		*fn		= NULL;
1123 	int		 	 back	= 1;
1124 
1125 	dk4error_init(&er);
1126 	dk4gra_lineto(gra, x, y, bbptr, &back, &er);
1127 	if (0 == back) {
1128 		if (NULL != backptr) { *backptr = 0; }
1129 		if (NULL != app) {
1130 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1131 				if (NULL != gra) { fn = gra->fn; }
1132 				dk4gra_app_error(app, fn, &er, 57);
1133 			}
1134 		}
1135 	}
1136 
1137 }
1138 
1139 
1140 
1141 void
dk4gra_app_curveto(dk4_gra_t * gra,double xc1,double yc1,double xc2,double yc2,double x,double y,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1142 dk4gra_app_curveto(
1143 	dk4_gra_t		*gra,
1144 	double			 xc1,
1145 	double			 yc1,
1146 	double			 xc2,
1147 	double			 yc2,
1148 	double			 x,
1149 	double			 y,
1150 	dk4_bb_t		*bbptr,
1151 	int				*backptr,
1152 	dk4_app_t		*app
1153 )
1154 {
1155 	dk4_er_t	 er;
1156 	dkChar		*fn		= NULL;
1157 	int		 	 back	= 1;
1158 
1159 	dk4error_init(&er);
1160 	dk4gra_curveto(gra, xc1, yc1, xc2, yc2, x, y, bbptr, &back, &er);
1161 	if (0 == back) {
1162 		if (NULL != backptr) { *backptr = 0; }
1163 		if (NULL != app) {
1164 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1165 				if (NULL != gra) { fn = gra->fn; }
1166 				dk4gra_app_error(app, fn, &er, 57);
1167 			}
1168 		}
1169 	}
1170 
1171 }
1172 
1173 
1174 
1175 void
dk4gra_app_closepath(dk4_gra_t * gra,int * backptr,dk4_app_t * app)1176 dk4gra_app_closepath(
1177 	dk4_gra_t		*gra,
1178 	int				*backptr,
1179 	dk4_app_t		*app
1180 )
1181 {
1182 	dk4_er_t	 er;
1183 	dkChar		*fn		= NULL;
1184 	int		 	 back	= 1;
1185 
1186 	dk4error_init(&er);
1187 	dk4gra_closepath(gra, &back, &er);
1188 	if (0 == back) {
1189 		if (NULL != backptr) { *backptr = 0; }
1190 		if (NULL != app) {
1191 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1192 				if (NULL != gra) { fn = gra->fn; }
1193 				dk4gra_app_error(app, fn, &er, 57);
1194 			}
1195 		}
1196 	}
1197 
1198 }
1199 
1200 
1201 
1202 void
dk4gra_app_circle(dk4_gra_t * gra,double xc,double yc,double r,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1203 dk4gra_app_circle(
1204 	dk4_gra_t		*gra,
1205 	double			 xc,
1206 	double			 yc,
1207 	double			 r,
1208 	dk4_bb_t		*bbptr,
1209 	int				*backptr,
1210 	dk4_app_t		*app
1211 )
1212 {
1213 	dk4_er_t	 er;
1214 	dkChar		*fn		= NULL;
1215 	int		 	 back	= 1;
1216 
1217 	dk4error_init(&er);
1218 	dk4gra_circle(gra, xc, yc, r, bbptr, &back, &er);
1219 	if (0 == back) {
1220 		if (NULL != backptr) { *backptr = 0; }
1221 		if (NULL != app) {
1222 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1223 				if (NULL != gra) { fn = gra->fn; }
1224 				dk4gra_app_error(app, fn, &er, 57);
1225 			}
1226 		}
1227 	}
1228 
1229 }
1230 
1231 
1232 
1233 void
dk4gra_app_rectangle(dk4_gra_t * gra,double xl,double xr,double yb,double yt,double r,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1234 dk4gra_app_rectangle(
1235 	dk4_gra_t		*gra,
1236 	double			 xl,
1237 	double			 xr,
1238 	double			 yb,
1239 	double			 yt,
1240 	double			 r,
1241 	dk4_bb_t		*bbptr,
1242 	int				*backptr,
1243 	dk4_app_t		*app
1244 )
1245 {
1246 	dk4_er_t	 er;
1247 	dkChar		*fn		= NULL;
1248 	int		 	 back	= 1;
1249 
1250 	dk4error_init(&er);
1251 	dk4gra_rectangle(gra, xl, xr, yb, yt, r, bbptr, &back, &er);
1252 	if (0 == back) {
1253 		if (NULL != backptr) { *backptr = 0; }
1254 		if (NULL != app) {
1255 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1256 				if (NULL != gra) { fn = gra->fn; }
1257 				dk4gra_app_error(app, fn, &er, 57);
1258 			}
1259 		}
1260 	}
1261 
1262 }
1263 
1264 
1265 
1266 void
dk4gra_app_arc(dk4_gra_t * gra,double xc,double yc,double ra,double start,double end,int cl,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1267 dk4gra_app_arc(
1268 	dk4_gra_t		*gra,
1269 	double			 xc,
1270 	double			 yc,
1271 	double			 ra,
1272 	double			 start,
1273 	double			 end,
1274 	int				 cl,
1275 	dk4_bb_t		*bbptr,
1276 	int				*backptr,
1277 	dk4_app_t		*app
1278 )
1279 {
1280 	dk4_er_t	 er;
1281 	dkChar		*fn		= NULL;
1282 	int		 	 back	= 1;
1283 
1284 	dk4error_init(&er);
1285 	dk4gra_arc(gra, xc, yc, ra, start, end, cl, bbptr, &back, &er);
1286 	if (0 == back) {
1287 		if (NULL != backptr) { *backptr = 0; }
1288 		if (NULL != app) {
1289 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1290 				if (NULL != gra) { fn = gra->fn; }
1291 				dk4gra_app_error(app, fn, &er, 57);
1292 			}
1293 		}
1294 	}
1295 
1296 }
1297 
1298 
1299 
1300 void
dk4gra_app_ellipse(dk4_gra_t * gra,double xc,double yc,double rx,double ry,double rot,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1301 dk4gra_app_ellipse(
1302 	dk4_gra_t		*gra,
1303 	double			 xc,
1304 	double			 yc,
1305 	double			 rx,
1306 	double			 ry,
1307 	double			 rot,
1308 	dk4_bb_t		*bbptr,
1309 	int				*backptr,
1310 	dk4_app_t		*app
1311 )
1312 {
1313 	dk4_er_t	 er;
1314 	dkChar		*fn		= NULL;
1315 	int		 	 back	= 1;
1316 
1317 	dk4error_init(&er);
1318 	dk4gra_ellipse(gra, xc, yc, rx, ry, rot, bbptr, &back, &er);
1319 	if (0 == back) {
1320 		if (NULL != backptr) { *backptr = 0; }
1321 		if (NULL != app) {
1322 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1323 				if (NULL != gra) { fn = gra->fn; }
1324 				dk4gra_app_error(app, fn, &er, 57);
1325 			}
1326 		}
1327 	}
1328 
1329 }
1330 
1331 
1332 
1333 void
dk4gra_app_pgf_simple_text(dk4_gra_t * gra,double x,double y,double rot,const dkChar * txt,const char * colspec,int ie,dk4_text_align_h_t ha,dk4_text_align_v_t va,int fno,double fsz,dk4_gra_tf_t fex,dk4_uc2l_t * uc2l,int flags,int * backptr,dk4_app_t * app)1334 dk4gra_app_pgf_simple_text(
1335 	dk4_gra_t			*gra,
1336 	double				 x,
1337 	double				 y,
1338 	double				 rot,
1339 	const dkChar		*txt,
1340 	const char			*colspec,
1341 	int					 ie,
1342 	dk4_text_align_h_t	 ha,
1343 	dk4_text_align_v_t	 va,
1344 	int					 fno,
1345 	double				 fsz,
1346 	dk4_gra_tf_t		 fex,
1347 	dk4_uc2l_t			*uc2l,
1348 	int					 flags,
1349 	int					*backptr,
1350 	dk4_app_t			*app
1351 )
1352 {
1353 	dk4_er_t	 er;
1354 	dkChar		*fn		= NULL;
1355 	int		 	 back	= 1;
1356 
1357 	dk4error_init(&er);
1358 	dk4gra_pgf_simple_text(
1359 		gra, x, y, rot, txt, colspec, ie, ha, va, fno, fsz, fex, uc2l,
1360 		flags, &back, &er
1361 	);
1362 	if (0 == back) {
1363 		if (NULL != backptr) { *backptr = 0; }
1364 		if (NULL != app) {
1365 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1366 				if (NULL != gra) { fn = gra->fn; }
1367 				dk4gra_app_error(app, fn, &er, 57);
1368 			}
1369 		}
1370 	}
1371 
1372 }
1373 
1374 
1375 
1376 void
dk4gra_app_pgf_special_text(dk4_gra_t * gra,double x,double y,double rot,const char * txt,const char * colspec,dk4_text_align_h_t ha,dk4_text_align_v_t va,int fno,double fsz,dk4_gra_tf_t fex,int flags,int * backptr,dk4_app_t * app)1377 dk4gra_app_pgf_special_text(
1378 	dk4_gra_t			*gra,
1379 	double				 x,
1380 	double				 y,
1381 	double				 rot,
1382 	const char			*txt,
1383 	const char			*colspec,
1384 	dk4_text_align_h_t	 ha,
1385 	dk4_text_align_v_t	 va,
1386 	int					 fno,
1387 	double				 fsz,
1388 	dk4_gra_tf_t		 fex,
1389 	int					 flags,
1390 	int					*backptr,
1391 	dk4_app_t			*app
1392 )
1393 {
1394 	dk4_er_t	 er;
1395 	dkChar		*fn		= NULL;
1396 	int		 	 back	= 1;
1397 
1398 	dk4error_init(&er);
1399 	dk4gra_pgf_special_text(
1400 		gra, x, y, rot, txt, colspec, ha, va, fno, fsz, fex, flags, &back, &er
1401 	);
1402 	if (0 == back) {
1403 		if (NULL != backptr) { *backptr = 0; }
1404 		if (NULL != app) {
1405 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1406 				if (NULL != gra) { fn = gra->fn; }
1407 				dk4gra_app_error(app, fn, &er, 57);
1408 			}
1409 		}
1410 	}
1411 
1412 }
1413 
1414 
1415 /**	Check whether the graphics driver supports the image type.
1416 	@param	gra	Graphics output structure.
1417 	@param	bif	Bitmap image file.
1418 	@return	1 if image type is supported, 0 otherwise.
1419 */
1420 static
1421 int
dk4gra_app_check_driver_and_image_type(dk4_gra_t const * gra,dk4_bif_t const * bif)1422 dk4gra_app_check_driver_and_image_type(
1423 	dk4_gra_t const		*gra,
1424 	dk4_bif_t const		*bif
1425 )
1426 {
1427 	int		 back	= 0;
1428 
1429 	if ((NULL != gra) && (NULL != bif)) {
1430 		back = 1;
1431 		switch (gra->dr) {
1432 			case DK4_GRA_DRIVER_PGF : {
1433 				switch (dk4bif_get_image_type(bif)) {
1434 					case DK4_BIF_TYPE_NETPBM : case DK4_BIF_TYPE_TIFF : {
1435 						back = 0;
1436 					} break;
1437 				}
1438 			} break;
1439 		}
1440 	}
1441 
1442 	return back;
1443 }
1444 
1445 
1446 
1447 void
dk4gra_app_bif_cotra_image(dk4_gra_t * gra,double * cotra,dk4_bif_t * bif,const dkChar * fn,size_t fno,int ifl,int * backptr,dk4_app_t * app)1448 dk4gra_app_bif_cotra_image(
1449 	dk4_gra_t			*gra,
1450 	double				*cotra,
1451 	dk4_bif_t			*bif,
1452 	const dkChar		*fn,
1453 	size_t				 fno,
1454 	int					 ifl,
1455 	int					*backptr,
1456 	dk4_app_t			*app
1457 )
1458 {
1459 	dk4_er_t	 er;
1460 	int		 	 back	= 1;
1461 
1462 	dk4error_init(&er);
1463 	if (0 != dk4gra_app_check_driver_and_image_type(gra, bif)) {
1464 		dk4gra_bif_cotra_image(
1465 			gra, cotra, bif, fn, fno,
1466 			ifl, &back, &er
1467 		);
1468 		if (0 == back) {
1469 			if (NULL != backptr) { *backptr = 0; }
1470 			if (NULL != app) {
1471 				if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1472 					if (NULL != gra) { fn = gra->fn; }
1473 					dk4gra_app_error(app, fn, &er, 57);
1474 				}
1475 			}
1476 		}
1477 
1478 	}
1479 	else {
1480 		if (NULL != backptr) { *backptr = 0; }
1481 		if (NULL != app) {
1482 			if (0 != dk4gra_app_check_error(gra, E_PGF_IMAGE_TYPE, 0)) {
1483 				if (NULL != bif) { fn = bif->filename; }
1484 				dk4gra_app_error(app, fn, &er, 60);
1485 			}
1486 		}
1487 	}
1488 
1489 }
1490 
1491 
1492 
1493 void
dk4gra_app_bif_fig_image(dk4_gra_t * gra,double xl,double xr,double yb,double yt,dk4_bif_t * bif,const dkChar * fn,size_t fno,int pos,int ifl,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1494 dk4gra_app_bif_fig_image(
1495 	dk4_gra_t			*gra,
1496 	double				 xl,
1497 	double				 xr,
1498 	double				 yb,
1499 	double				 yt,
1500 	dk4_bif_t			*bif,
1501 	const dkChar		*fn,
1502 	size_t				 fno,
1503 	int					 pos,
1504 	int					 ifl,
1505 	dk4_bb_t			*bbptr,
1506 	int					*backptr,
1507 	dk4_app_t			*app
1508 )
1509 {
1510 	dk4_er_t	 er;
1511 	int		 	 back	= 1;
1512 
1513 	dk4error_init(&er);
1514 	if (0 != dk4gra_app_check_driver_and_image_type(gra, bif)) {
1515 		dk4gra_bif_fig_image(
1516 			gra, xl, xr, yb, yt, bif, fn, fno,
1517 			pos, ifl, bbptr, &back, &er
1518 		);
1519 		if (0 == back) {
1520 			if (NULL != backptr) { *backptr = 0; }
1521 			if (NULL != app) {
1522 				if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1523 
1524 					if (NULL != gra) { fn = gra->fn; }
1525 					dk4gra_app_error(app, fn, &er, 57);
1526 				}
1527 			}
1528 		}
1529 	}
1530 	else {
1531 		if (NULL != backptr) { *backptr = 0; }
1532 		if (NULL != app) {
1533 			if (0 != dk4gra_app_check_error(gra, E_PGF_IMAGE_TYPE, 0)) {
1534 
1535 				if (NULL != bif) { fn = bif->filename; }
1536 				dk4gra_app_error(app, fn, &er, 60);
1537 			}
1538 		}
1539 	}
1540 
1541 }
1542 
1543 
1544 
1545 void
dk4gra_app_bif_image(dk4_gra_t * gra,double xl,double xr,double yb,double yt,dk4_bif_t * bif,const dkChar * fn,size_t fno,int ifl,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1546 dk4gra_app_bif_image(
1547 	dk4_gra_t			*gra,
1548 	double				 xl,
1549 	double				 xr,
1550 	double				 yb,
1551 	double				 yt,
1552 	dk4_bif_t			*bif,
1553 	const dkChar		*fn,
1554 	size_t				 fno,
1555 	int					 ifl,
1556 	dk4_bb_t			*bbptr,
1557 	int					*backptr,
1558 	dk4_app_t			*app
1559 )
1560 {
1561 	dk4_er_t	 er;
1562 	int		 	 back	= 1;
1563 
1564 	dk4error_init(&er);
1565 	if (0 != dk4gra_app_check_driver_and_image_type(gra, bif)) {
1566 		dk4gra_bif_image(
1567 			gra, xl, xr, yb, yt, bif, fn, fno,
1568 			ifl, bbptr, &back, &er
1569 		);
1570 		if (0 == back) {
1571 			if (NULL != backptr) { *backptr = 0; }
1572 			if (NULL != app) {
1573 				if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1574 
1575 					if (NULL != gra) { fn = gra->fn; }
1576 					dk4gra_app_error(app, fn, &er, 57);
1577 				}
1578 			}
1579 		}
1580 	}
1581 	else {
1582 		if (NULL != backptr) { *backptr = 0; }
1583 		if (NULL != app) {
1584 			if (0 != dk4gra_app_check_error(gra, E_PGF_IMAGE_TYPE, 0)) {
1585 
1586 				if (NULL != bif) { fn = bif->filename; }
1587 				dk4gra_app_error(app, fn, &er, 60);
1588 			}
1589 		}
1590 	}
1591 
1592 }
1593 
1594 
1595 
1596 void
dk4gra_app_image(dk4_gra_t * gra,double xl,double xr,double yb,double yt,const dkChar * fn,size_t fno,dk4_cs_conv_ctx_t * ctx,int ifl,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1597 dk4gra_app_image(
1598 	dk4_gra_t			*gra,
1599 	double				 xl,
1600 	double				 xr,
1601 	double				 yb,
1602 	double				 yt,
1603 	const dkChar		*fn,
1604 	size_t				 fno,
1605 	dk4_cs_conv_ctx_t	*ctx,
1606 	int					 ifl,
1607 	dk4_bb_t			*bbptr,
1608 	int					*backptr,
1609 	dk4_app_t			*app
1610 )
1611 {
1612 	dk4_er_t	 er;
1613 	dk4_bif_t	*bifptr	= NULL;		/* Bitmap image */
1614 	int			 back	= 0;		/* Function result */
1615 	int			 ho		= 0;		/* Flag: Read image header only */
1616 
1617 
1618 
1619 
1620 
1621 
1622 
1623 
1624 
1625 
1626 
1627 
1628 
1629 
1630 
1631 
1632 
1633 
1634 
1635 
1636 
1637 
1638 	if ((NULL != gra) && (NULL != fn) && (xr > xl) && (yt > yb)) {
1639 		/*
1640 			Register coordinates in bounding box
1641 		*/
1642 		if (NULL != bbptr) {
1643 			dk4bb_add_x(bbptr, xl); dk4bb_add_x(bbptr, xr);
1644 			dk4bb_add_y(bbptr, yb); dk4bb_add_y(bbptr, yt);
1645 		}
1646 		/*	Set header-only flag for opening BIF
1647 		*/
1648 		if (DK4_GRA_DRIVER_PGF == gra->dr) {
1649 			ho = 1;
1650 		}
1651 		if (
1652 			(0 != (DK4_GRA_IMG_FLAG_DCT & ifl))
1653 			&& (DK4_BIF_TYPE_JPEG == dk4bif_type_for_suffix(fn))
1654 		) {
1655 			if (0 != (DK4_GRA_IMG_FLAG_COLOR & ifl)) {
1656 				ho = 1;
1657 			}
1658 		}
1659 		/*	Open bitmap image file
1660 		*/
1661 		bifptr = dk4bif_open_app(fn, ho, ctx, app);
1662 		if (NULL != bifptr) {
1663 			back = 1;
1664 			dk4gra_app_bif_image(
1665 				gra, xl, xr, yb, yt, bifptr, fn, fno,
1666 				ifl, bbptr, &back, app
1667 			);
1668 
1669 			dk4bif_close(bifptr);
1670 		}
1671 	}
1672 	else {
1673 		/* ERROR: Invalid arguments */
1674 		dk4error_init(&er);
1675 		dk4error_set_simple_error_code(&er, DK4_E_INVALID_ARGUMENTS);
1676 		if (NULL != app) {
1677 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1678 				dk4gra_app_error(app, fn, &er, 57);
1679 			}
1680 		}
1681 	}
1682 	if ((0 == back) && (NULL != backptr)) { *backptr = 0; }
1683 
1684 }
1685 
1686 
1687 
1688 void
dk4gra_app_fig_image(dk4_gra_t * gra,double xl,double xr,double yb,double yt,const dkChar * fn,size_t fno,dk4_cs_conv_ctx_t * ctx,int pos,int ifl,dk4_bb_t * bbptr,int * backptr,dk4_app_t * app)1689 dk4gra_app_fig_image(
1690 	dk4_gra_t			*gra,
1691 	double				 xl,
1692 	double				 xr,
1693 	double				 yb,
1694 	double				 yt,
1695 	const dkChar		*fn,
1696 	size_t				 fno,
1697 	dk4_cs_conv_ctx_t	*ctx,
1698 	int					 pos,
1699 	int					 ifl,
1700 	dk4_bb_t			*bbptr,
1701 	int					*backptr,
1702 	dk4_app_t			*app
1703 )
1704 {
1705 	dk4_er_t	 er;
1706 	dk4_bif_t	*bifptr	= NULL;
1707 	int			 ho		= 0;
1708 	int			 back	= 0;
1709 
1710 
1711 
1712 
1713 
1714 
1715 
1716 
1717 
1718 
1719 
1720 
1721 
1722 
1723 
1724 
1725 
1726 
1727 
1728 
1729 
1730 
1731 	if ((NULL != gra) && (NULL != fn) && (xr > xl) && (yt > yb)) {
1732 		if (NULL != bbptr) {
1733 			dk4bb_add_x(bbptr, xl); dk4bb_add_x(bbptr, xr);
1734 			dk4bb_add_y(bbptr, yb); dk4bb_add_y(bbptr, yt);
1735 		}
1736 		if (DK4_GRA_DRIVER_PGF == gra->dr) {
1737 			ho = 1;
1738 		}
1739 		if (
1740 			(0 != (DK4_GRA_IMG_FLAG_DCT & ifl))
1741 			&& (DK4_BIF_TYPE_JPEG == dk4bif_type_for_suffix(fn))
1742 		) {
1743 			if (0 != (DK4_GRA_IMG_FLAG_COLOR & ifl)) {
1744 				ho = 1;
1745 			}
1746 		}
1747 		bifptr = dk4bif_open_app(fn, ho, ctx, app);
1748 		if (NULL != bifptr) {
1749 			back = 1;
1750 			dk4gra_app_bif_fig_image(
1751 				gra, xl, xr, yb, yt, bifptr, fn, fno,
1752 				pos, ifl, bbptr, &back, app
1753 			);
1754 
1755 			dk4bif_close(bifptr);
1756 		}
1757 	}
1758 	else {
1759 		/* ERROR: Invalid arguments */
1760 		dk4error_init(&er);
1761 		dk4error_set_simple_error_code(&er, DK4_E_INVALID_ARGUMENTS);
1762 		if (NULL != app) {
1763 			if (0 != dk4gra_app_check_error(gra, E_ADD_CONTENTS, er.ec)) {
1764 				dk4gra_app_error(app, fn, &er, 57);
1765 			}
1766 		}
1767 	}
1768 
1769 	if ((NULL != backptr) && (0 == back)) { *backptr = 0; }
1770 }
1771 
1772 
1773 void
dk4gra_app_pgf_doc_font_size(dk4_gra_t * gra,double fs,int * backptr,dk4_app_t * app)1774 dk4gra_app_pgf_doc_font_size(
1775 	dk4_gra_t			*gra,
1776 	double				 fs,
1777 	int					*backptr,
1778 	dk4_app_t			*app
1779 )
1780 {
1781 	dk4_er_t	 er;
1782 	dkChar		*fn		= NULL;
1783 	int		 	 back	= 1;
1784 
1785 	dk4error_init(&er);
1786 	dk4gra_pgf_doc_font_size(gra, fs, &back, &er);
1787 	if (0 == back) {
1788 		if (NULL != backptr) { *backptr = 0; }
1789 		if (NULL != app) {
1790 			if (0 != dk4gra_app_check_error(gra, E_CHANGE_SETUP, er.ec)) {
1791 				if (NULL != gra) { fn = gra->fn; }
1792 				dk4gra_app_error(app, fn, &er, 58);
1793 			}
1794 		}
1795 	}
1796 
1797 }
1798 
1799 
1800 
1801 void
dk4gra_app_pgf_doc_preamble_line(dk4_gra_t * gra,const char * line,int tp,int * backptr,dk4_app_t * app)1802 dk4gra_app_pgf_doc_preamble_line(
1803 	dk4_gra_t	*gra,
1804 	const char	*line,
1805 	int			 tp,
1806 	int			*backptr,
1807 	dk4_app_t	*app
1808 )
1809 {
1810 	dk4_er_t	 er;
1811 	dkChar		*fn		= NULL;
1812 	int		 	 back	= 1;
1813 
1814 	dk4error_init(&er);
1815 	dk4gra_pgf_doc_preamble_line(gra, line, tp, &back, &er);
1816 	if (0 == back) {
1817 		if (NULL != backptr) { *backptr = 0; }
1818 		if (NULL != app) {
1819 			if (0 != dk4gra_app_check_error(gra, E_CHANGE_SETUP, er.ec)) {
1820 				if (NULL != gra) { fn = gra->fn; }
1821 				dk4gra_app_error(app, fn, &er, 58);
1822 			}
1823 		}
1824 	}
1825 
1826 }
1827 
1828 
1829 
1830 
1831 /* vim: set ai sw=4 ts=4 : */
1832