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