1 /*
2 Copyright (C) 2011-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: dk3bmeo.ctr
12 */
13
14 /** @file dk3bmeo.c The dk3bmeo module.
15 */
16
17
18
19 #include <libdk3c/dk3all.h>
20 #include <libdk3bmeps/dk3bmeo.h>
21 #include <libdk3bmeps/dk3bmeps.h>
22 #include <libdk3bmeps/dk3bmj.h>
23 #include <libdk3bmeps/dk3bm.h>
24 #include <libdk3bmeps/dk3range.h>
25 #include <libdk3bmeps/dk3paper.h>
26
27
28
29
30
31
32 /** Keywords used by the module.
33 */
34 static dkChar const * const dk3bmeo_kw[] = {
35 /* 0 */
36 dkT("/print/paper-size"),
37
38 /* 1 */
39 dkT("1px1pt"),
40
41 /* 2 */
42 dkT("chunk"),
43
44 /* 3 */
45 dkT("1:1"),
46
47 /* 4 */
48 dkT("/print/ps/level"),
49
50 /* 5 */
51 dkT("%ld"),
52
53 NULL
54
55 };
56
57
58
59 /** Names for options.
60 */
61 static dkChar const * const dk3bmeo_option_names[] = {
62 /* 0 */
63 dkT("level"),
64
65 /* 1 */
66 dkT("color"),
67
68 /* 2 */
69 dkT("dsc"),
70
71 /* 3 */
72 dkT("draft"),
73
74 /* 4 */
75 dkT("predictor"),
76
77 /* 5 */
78 dkT("duplex"),
79
80 /* 6 */
81 dkT("tumble"),
82
83 /* 7 */
84 dkT("dct"),
85
86 /* 8 */
87 dkT("bg"),
88
89 /* 9 */
90 dkT("interpolation"),
91
92 /* 10 */
93 dkT("jpeg-interpolation"),
94
95 /* 11 */
96 dkT("resolution"),
97
98 /* 12 */
99 dkT("paper"),
100
101 /* 13 */
102 dkT("make"),
103
104 /* 14 */
105 dkT("aspect"),
106
107 /* 15 */
108 dkT("bpc"),
109
110 NULL
111
112 };
113
114
115
116 /** Driver names.
117 */
118 dkChar const * const dk3bmeo_driver_names[] = {
119 /* 0 */
120 dkT("ps"),
121
122 /* 1 */
123 dkT("eps"),
124
125 /* 2 */
126 dkT("pdf"),
127
128 /* 3 */
129 dkT("bb"),
130
131 NULL
132
133 };
134
135
136
137 /** Mode names
138 */
139 dkChar const * const dk3bmeo_mode_names[] = {
140 /* 0 */
141 dkT("i$mage"),
142
143 /* 1 */
144 dkT("o$bject"),
145
146 /* 2 */
147 dkT("d$ocument"),
148
149 NULL
150
151 };
152
153
154
155 /** Names for flate compression predictors.
156 Order must match DK3_COMPRESSION_PREDICTOR_xxx
157 in dk3const.h, see @ref flatepredictors.
158 */
159 dkChar const * const dk3bmeo_predictor_names[] = {
160 /* 0 */
161 dkT("tiff"),
162
163 /* 1 */
164 dkT("sub"),
165
166 /* 2 */
167 dkT("up"),
168
169 /* 3 */
170 dkT("average"),
171
172 /* 4 */
173 dkT("paeth"),
174
175 NULL
176
177 };
178
179
180
181
182 void
dk3bmeo_init(dk3_bm_eps_options_t * opt)183 dk3bmeo_init(dk3_bm_eps_options_t *opt)
184 {
185
186 if(opt) {
187 (opt->ima).ps.w = 595.0;
188 (opt->ima).ps.h = 842.0;
189 (opt->ima).ps.i = 0.0;
190 (opt->ima).ps.o = 0.0;
191 (opt->ima).ps.t = 0.0;
192 (opt->ima).ps.b = 0.0;
193 opt->resolution = 72.0;
194 opt->app = NULL;
195 opt->mode = DK3_BMEPS_MODE_OBJECT;
196 opt->szmode = DK3_BMEPS_SIZE_1_1;
197 opt->dr = DK3_BMEPS_DRIVER_PDF;
198 opt->pred = 0;
199 opt->io = 0;
200 opt->draft = 0;
201 opt->duplex = 0;
202 opt->tumble = 0;
203 opt->psl = 3;
204 opt->dsc = 0;
205 opt->dct = 1;
206 opt->kar = 1;
207 opt->bgr = 255; opt->bgg = 255; opt->bgb = 255; opt->fbg = 0;
208 opt->ip = 1; opt->jip = 0;
209 opt->make = 0;
210 opt->color = 1;
211 opt->to_stdout = 0;
212 opt->rbpc = 1;
213 }
214 }
215
216
217
218 dk3_bm_eps_options_t *
dk3bmeo_new_app(dk3_app_t * app)219 dk3bmeo_new_app(dk3_app_t *app)
220 {
221 dk3_bm_eps_options_t *back = NULL;
222
223 back = dk3_new_app(dk3_bm_eps_options_t,1,app);
224 if(back) {
225 dk3bmeo_init(back);
226 back->app = app;
227 }
228 return back;
229 }
230
231
232
233 void
dk3bmeo_delete(dk3_bm_eps_options_t * opt)234 dk3bmeo_delete(dk3_bm_eps_options_t *opt)
235 {
236
237 if(opt) {
238 opt->app = NULL;
239 dk3_delete(opt);
240 }
241 }
242
243
244
245 int
dk3bmeo_get_mode(dk3_bm_eps_options_t * opt)246 dk3bmeo_get_mode(dk3_bm_eps_options_t *opt)
247 {
248 int back = DK3_BMEPS_MODE_IMAGE;
249
250 if(opt) {
251 back = opt->mode;
252 }
253 return back;
254 }
255
256
257
258 /** Set paper size, complain if named size is not found.
259 @param opt Option set to receive size information.
260 @param psn Paper size name.
261 @param cond Flag: Complain (nonzero) or not (0).
262 @return 1 on success, 0 on error.
263 */
264 static
265 int
dk3bmeo_set_paper_size_complain(dk3_bm_eps_options_t * opt,dkChar const * psn,int cond)266 dk3bmeo_set_paper_size_complain(
267 dk3_bm_eps_options_t *opt, dkChar const *psn, int cond
268 )
269 {
270 dk3_paper_size_collection_t *psc; /* Paper size collection. */
271 dk3_paper_size_t const *pap; /* Paper size. */
272 dkChar const * const *msg; /* Localized message texts. */
273 int back = 0;
274
275 msg = dk3app_messages(
276 opt->app,
277 dk3bmep_str_get_string_table_name(),
278 (dkChar const **)dk3bmep_str_get_message_texts()
279 );
280 if(!(msg)) {
281 msg = dk3bmep_str_get_message_texts();
282 }
283 if((opt) && (psn)) {
284 if(opt->app) {
285 psc = dk3paper_open_app(opt->app);
286 if(psc) {
287 pap = dk3paper_find(psc, psn);
288 if(pap) {
289 (opt->ima).ps.w = pap->w;
290 (opt->ima).ps.h = pap->h;
291 (opt->ima).ps.i = pap->i;
292 (opt->ima).ps.o = pap->o;
293 (opt->ima).ps.t = pap->t;
294 (opt->ima).ps.b = pap->b;
295 back = 1;
296 } else {
297 /* ERROR: No such paper size. */
298 dk3bmj_log_3(
299 opt->app, DK3_LL_ERROR,msg,39,40,psn,DK3_BMJ_LOG_BOTH,NULL
300 );
301 }
302 dk3paper_close(psc);
303 } else {
304 }
305 if(!(opt->mode == DK3_BMEPS_MODE_DOCUMENT)) {
306 /* ERROR: Not a document */
307 if(cond) {
308 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,38,DK3_BMJ_LOG_BOTH,NULL);
309 }
310 }
311 } else {
312 /* ERROR: No app! */
313 }
314 } else {
315 }
316 return back;
317 }
318
319
320
321 void
dk3bmeo_apply_preferences(dk3_bm_eps_options_t * opt)322 dk3bmeo_apply_preferences(dk3_bm_eps_options_t *opt)
323 {
324 dkChar psn[64]; /* Buffer for paper size name. */
325 int psl; /* PS level. */
326
327 if(opt->app) {
328 if(dk3app_get_pref(opt->app,dk3bmeo_kw[0],psn,DK3_SIZEOF(psn,dkChar)))
329 {
330 (void)dk3bmeo_set_paper_size_complain(opt, psn, 0);
331 }
332 if(dk3app_get_pref(opt->app,dk3bmeo_kw[4],psn,DK3_SIZEOF(psn,dkChar)))
333 {
334 #if VERSION_BEFORE_20140716
335 if(dk3sf_sscanf3(psn, dk3bmeo_kw[5], &psl) == 1)
336 #else
337 if (0 != dk3ma_i_from_string(&psl, psn, NULL))
338 #endif
339 {
340 if(psl > 3) { psl = 3; }
341 if(psl < 2) { psl = 2; }
342 opt->psl = psl;
343 }
344 }
345 }
346
347 }
348
349
350
351 /** Initialize for a given driver and mode.
352 @param opt Option set to complete setup.
353 */
354 static
355 void
dk3bmeo_initialize_for_driver_and_mode(dk3_bm_eps_options_t * opt)356 dk3bmeo_initialize_for_driver_and_mode(dk3_bm_eps_options_t *opt)
357 {
358 switch(opt->dr) {
359 case DK3_BMEPS_DRIVER_PS: {
360 } break;
361 case DK3_BMEPS_DRIVER_EPS: {
362 } break;
363 case DK3_BMEPS_DRIVER_PDF: {
364 } break;
365 case DK3_BMEPS_DRIVER_BB: {
366 opt->mode = DK3_BMEPS_MODE_OBJECT;
367 } break;
368 }
369 switch(opt->mode) {
370 case DK3_BMEPS_MODE_IMAGE: {
371 opt->szmode = DK3_BMEPS_SIZE_CHUNK;
372 } break;
373 case DK3_BMEPS_MODE_OBJECT: {
374 opt->szmode = DK3_BMEPS_SIZE_1_1;
375 } break;
376 case DK3_BMEPS_MODE_DOCUMENT: {
377 opt->szmode = DK3_BMEPS_SIZE_PAPER;
378 if(opt->dr == DK3_BMEPS_DRIVER_PS) {
379 opt->dsc = 1;
380 }
381 } break;
382 }
383 (opt->ima).ps.w = 595.0;
384 (opt->ima).ps.h = 842.0;
385 if(opt->mode == DK3_BMEPS_MODE_DOCUMENT) {
386 /*
387 The option -l ps.document is typically used for fax TIFF files
388 which already have a border. So we do not need an additional border.
389 */
390 (opt->ima).ps.i = 0.0;
391 (opt->ima).ps.o = 0.0;
392 (opt->ima).ps.t = 0.0;
393 (opt->ima).ps.b = 0.0;
394 opt->szmode = DK3_BMEPS_SIZE_PAPER;
395 } else {
396 (opt->ima).ps.i = 56.0;
397 (opt->ima).ps.o = 28.0;
398 (opt->ima).ps.t = 14.0;
399 (opt->ima).ps.b = 14.0;
400 }
401 dk3bmeo_apply_preferences(opt);
402 }
403
404
405
406
407 void
dk3bmeo_set_driver_and_mode(dk3_bm_eps_options_t * opt,int driver,int mode)408 dk3bmeo_set_driver_and_mode(dk3_bm_eps_options_t *opt, int driver, int mode)
409 {
410
411 if(opt) {
412 opt->dr = driver;
413 opt->mode = mode;
414 dk3bmeo_initialize_for_driver_and_mode(opt);
415 }
416 }
417
418
419
420 int
dk3bmeo_set_paper_size(dk3_bm_eps_options_t * opt,dkChar const * psn)421 dk3bmeo_set_paper_size(dk3_bm_eps_options_t *opt, dkChar const *psn)
422 {
423 int back;
424 back = dk3bmeo_set_paper_size_complain(opt, psn, 1);
425 return back;
426 }
427
428
429
430 int
dk3bmeo_get_driver(dk3_bm_eps_options_t * opt)431 dk3bmeo_get_driver(dk3_bm_eps_options_t *opt)
432 {
433 int back = DK3_BMEPS_DRIVER_PS;
434
435 if(opt) {
436 back = opt->dr;
437 }
438 return back;
439 }
440
441
442
443 void
dk3bmeo_set_draft(dk3_bm_eps_options_t * opt,int drflag)444 dk3bmeo_set_draft(dk3_bm_eps_options_t *opt, int drflag)
445 {
446
447 if(opt) {
448 opt->draft = drflag;
449 }
450 }
451
452
453
454 int
dk3bmeo_get_draft(dk3_bm_eps_options_t * opt)455 dk3bmeo_get_draft(dk3_bm_eps_options_t *opt)
456 {
457 int back = 0;
458
459 if(opt) {
460 back = ((opt->draft) ? 1 : 0);
461 }
462 return back;
463 }
464
465
466
467 void
dk3bmeo_set_duplex(dk3_bm_eps_options_t * opt,int duplex)468 dk3bmeo_set_duplex(dk3_bm_eps_options_t *opt, int duplex)
469 {
470
471 if(opt) {
472 opt->duplex = duplex;
473 }
474 }
475
476
477
478 int
dk3bmeo_get_duplex(dk3_bm_eps_options_t * opt)479 dk3bmeo_get_duplex(dk3_bm_eps_options_t *opt)
480 {
481 int back = 0;
482
483 if(opt) {
484 back = ((opt->duplex) ? 1 : 0);
485 }
486 return back;
487 }
488
489
490
491 void
dk3bmeo_set_predictor(dk3_bm_eps_options_t * opt,int pred)492 dk3bmeo_set_predictor(dk3_bm_eps_options_t *opt, int pred)
493 {
494
495 if(opt) {
496 opt->pred = pred;
497 }
498 }
499
500
501
502 int
dk3bmeo_get_predictor(dk3_bm_eps_options_t * opt)503 dk3bmeo_get_predictor(dk3_bm_eps_options_t *opt)
504 {
505 int back = 0;
506
507 if(opt) {
508 back = opt->pred;
509 }
510 return back;
511 }
512
513
514
515 void
dk3bmeo_set_origin(dk3_bm_eps_options_t * opt,int io)516 dk3bmeo_set_origin(dk3_bm_eps_options_t *opt, int io)
517 {
518
519 if(opt) {
520 opt->io = io;
521 }
522 }
523
524
525
526 int
dk3bmeo_get_origin(dk3_bm_eps_options_t * opt)527 dk3bmeo_get_origin(dk3_bm_eps_options_t *opt)
528 {
529 int back = 0;
530
531 if(opt) {
532 back = opt->io;
533 }
534 return back;
535 }
536
537
538
539 void
dk3bmeo_set_ps_level(dk3_bm_eps_options_t * opt,int psl)540 dk3bmeo_set_ps_level(dk3_bm_eps_options_t *opt, int psl)
541 {
542
543 if(opt) {
544 opt->psl = psl;
545 if(psl < 2) opt->psl = 2;
546 if(psl > 3) opt->psl = 3;
547 }
548 }
549
550
551
552 int
dk3bmeo_get_ps_level(dk3_bm_eps_options_t * opt)553 dk3bmeo_get_ps_level(dk3_bm_eps_options_t *opt)
554 {
555 int back = 3;
556
557 if(opt) {
558 back = opt->psl;
559 }
560 return back;
561 }
562
563
564
565 void
dk3bmeo_set_dct(dk3_bm_eps_options_t * opt,int dct)566 dk3bmeo_set_dct(dk3_bm_eps_options_t *opt, int dct)
567 {
568
569 if(opt) {
570 opt->dct = dct;
571 }
572 }
573
574
575
576 int
dk3bmeo_get_dct(dk3_bm_eps_options_t * opt)577 dk3bmeo_get_dct(dk3_bm_eps_options_t *opt)
578 {
579 int back = 1;
580
581 if(opt) {
582 back = ((opt->dct) ? 1 : 0);
583 }
584 return back;
585 }
586
587
588 void
dk3bmeo_set_keep_aspect_ratio(dk3_bm_eps_options_t * opt,int kar)589 dk3bmeo_set_keep_aspect_ratio(dk3_bm_eps_options_t *opt, int kar)
590 {
591
592 if(opt) {
593 opt->kar = kar;
594 }
595 }
596
597
598
599 int
dk3bmeo_get_keep_aspect_ratio(dk3_bm_eps_options_t * opt)600 dk3bmeo_get_keep_aspect_ratio(dk3_bm_eps_options_t *opt)
601 {
602 int back = 1;
603
604 if(opt) {
605 back = ((opt->kar) ? 1 : 0);
606 }
607 return back;
608 }
609
610
611
612 void
dk3bmeo_set_background(dk3_bm_eps_options_t * opt,int r,int g,int b,int f)613 dk3bmeo_set_background(dk3_bm_eps_options_t *opt, int r, int g, int b, int f)
614 {
615
616 if(opt) {
617 opt->bgr = r; opt->bgg = g; opt->bgb = b; opt->fbg = f;
618 }
619 }
620
621
622
623 int
dk3bmeo_get_background_red(dk3_bm_eps_options_t * opt)624 dk3bmeo_get_background_red(dk3_bm_eps_options_t *opt)
625 {
626 int back = 0;
627
628 if(opt) {
629 back = opt->bgr;
630 }
631 return back;
632 }
633
634
635
636
637 int
dk3bmeo_get_background_green(dk3_bm_eps_options_t * opt)638 dk3bmeo_get_background_green(dk3_bm_eps_options_t *opt)
639 {
640 int back = 0;
641
642 if(opt) {
643 back = opt->bgg;
644 }
645 return back;
646 }
647
648
649
650 int
dk3bmeo_get_background_blue(dk3_bm_eps_options_t * opt)651 dk3bmeo_get_background_blue(dk3_bm_eps_options_t *opt)
652 {
653 int back = 0;
654
655 if(opt) {
656 back = opt->bgb;
657 }
658 return back;
659 }
660
661
662
663 int
dk3bmeo_get_background_force(dk3_bm_eps_options_t * opt)664 dk3bmeo_get_background_force(dk3_bm_eps_options_t *opt)
665 {
666 int back = 0;
667
668 if(opt) {
669 back = ((opt->fbg) ? 1 : 0);
670 }
671 return back;
672 }
673
674
675
676 void
dk3bmeo_set_interpolation(dk3_bm_eps_options_t * opt,int iip)677 dk3bmeo_set_interpolation(dk3_bm_eps_options_t *opt, int iip)
678 {
679
680 if(opt) {
681 opt->ip = iip;
682 }
683 }
684
685
686
687 int
dk3bmeo_get_interpolation(dk3_bm_eps_options_t * opt)688 dk3bmeo_get_interpolation(dk3_bm_eps_options_t *opt)
689 {
690 int back = 1;
691
692 if(opt) {
693 back = ((opt->ip) ? 1 : 0);
694 }
695 return back;
696 }
697
698
699
700 void
dk3bmeo_set_jpeg_interpolation(dk3_bm_eps_options_t * opt,int iip)701 dk3bmeo_set_jpeg_interpolation(dk3_bm_eps_options_t *opt, int iip)
702 {
703
704 if(opt) {
705 opt->jip = iip;
706 }
707 }
708
709
710
711 int
dk3bmeo_get_jpeg_interpolation(dk3_bm_eps_options_t * opt)712 dk3bmeo_get_jpeg_interpolation(dk3_bm_eps_options_t *opt)
713 {
714 int back = 0;
715
716 if(opt) {
717 back = ((opt->jip) ? 1 : 0);
718 }
719 return back;
720 }
721
722
723
724 void
dk3bmeo_set_szmode(dk3_bm_eps_options_t * opt,int newmode)725 dk3bmeo_set_szmode(dk3_bm_eps_options_t *opt, int newmode)
726 {
727
728 if(opt) {
729 if((newmode >= 0) && (newmode <= 2)) {
730 opt->szmode = newmode;
731 }
732 }
733 }
734
735
736
737 void
dk3bmeo_set_resolution(dk3_bm_eps_options_t * opt,double dpi)738 dk3bmeo_set_resolution(dk3_bm_eps_options_t *opt, double dpi)
739 {
740
741 if(opt) {
742 opt->resolution = dpi;
743 }
744 }
745
746
747
748 double
dk3bmeo_get_resolution(dk3_bm_eps_options_t * opt)749 dk3bmeo_get_resolution(dk3_bm_eps_options_t *opt)
750 {
751 double back = 72.0;
752
753 if(opt) {
754 back = opt->resolution;
755 if(back < 0.0) { back = 0.0; }
756 }
757 return back;
758 }
759
760
761
762 int
dk3bmeo_get_szmode(dk3_bm_eps_options_t * opt)763 dk3bmeo_get_szmode(dk3_bm_eps_options_t *opt)
764 {
765 int back = 0;
766
767 if(opt) {
768 back = opt->szmode;
769 }
770 return back;
771 }
772
773
774
775 /** Set PS level.
776 @param opt Option set to modify.
777 @param val Value for option.
778 @param msg Localized message texts.
779 @return 1 on success, 0 on error.
780 */
781 static
782 int
dk3bmeo_option_pslevel(dk3_bm_eps_options_t * opt,dkChar const * val,dkChar const * const * msg)783 dk3bmeo_option_pslevel(
784 dk3_bm_eps_options_t *opt,
785 dkChar const *val,
786 dkChar const * const *msg
787 )
788 {
789 int back = 0;
790 int i; /* Number obtained from val. */
791
792 if(val) {
793 #if VERSION_BEFORE_20140716
794 if(dk3sf_sscanf3(val, dkT("%d"), &i))
795 #else
796 if (0 != dk3ma_i_from_string(&i, val, NULL))
797 #endif
798 {
799 if(i >= 2) {
800 if(i <= 3) {
801 opt->psl = i; back = 1;
802 } else {
803 /* ERROR: Must be 2 or 3! */
804 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,26,DK3_BMJ_LOG_BOTH,NULL);
805 }
806 } else {
807 /* ERROR: Must be 2 or 3! */
808 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,26,DK3_BMJ_LOG_BOTH,NULL);
809 }
810 } else {
811 /* ERROR: Not a number! */
812 dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,24,25,val,DK3_BMJ_LOG_BOTH,NULL);
813 }
814 } else {
815 /* ERROR: Missing argument! */
816 }
817 return back;
818 }
819
820
821
822
823 /** Set a boolean value.
824 @param opt Option set, used for diagnostics.
825 @param dest Boolean variable.
826 @param val Text containing the value.
827 @param msg Localized message texts.
828 @return 1 on success, 0 on error.
829 */
830 static
831 int
dk3bmeo_set_boolean(dk3_bm_eps_options_t * opt,int * dest,dkChar const * val,dkChar const * const * msg)832 dk3bmeo_set_boolean(
833 dk3_bm_eps_options_t *opt,
834 int *dest,
835 dkChar const *val,
836 dkChar const * const *msg
837 )
838 {
839 int back = 0;
840
841 if(val) {
842 if(dk3str_is_bool(val)) {
843 back = 1;
844 if(dk3str_is_on(val)) {
845 *dest = 1;
846 } else {
847 *dest = 0;
848 }
849 } else {
850 /* ERROR: Not a boolean! */
851 dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,27,28,val,DK3_BMJ_LOG_BOTH,NULL);
852 }
853 } else {
854 *dest = 1; back = 1;
855 }
856 return back;
857 }
858
859
860
861 /** Set flate predictor name.
862 @param opt Option set to modify.
863 @param val Value for option.
864 @param msg Localized message texts.
865 @return 1 on success, 0 on error.
866 */
867 static
868 int
dk3bmeo_option_predictor(dk3_bm_eps_options_t * opt,dkChar const * val,dkChar const * const * msg)869 dk3bmeo_option_predictor(
870 dk3_bm_eps_options_t *opt,
871 dkChar const *val,
872 dkChar const * const *msg
873 )
874 {
875 int back = 0;
876
877 if(val) {
878 back = dk3str_array_index(dk3bmeo_predictor_names, val, 0);
879 if(back > -1) {
880 opt->pred = back + 1;
881 back = 1;
882 } else {
883 back = 0;
884 dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,29,30,val,DK3_BMJ_LOG_BOTH,NULL);
885 }
886 } else {
887 opt->pred = DK3_COMPRESSION_PREDICTOR_TIFF; back = 1;
888 }
889 return back;
890 }
891
892
893
894 /** Set background.
895 @param opt Option set to modify.
896 @param val Value for option.
897 @param msg Localized message texts.
898 @return 1 on success, 0 on error.
899 */
900 static
901 int
dk3bmeo_option_background(dk3_bm_eps_options_t * opt,dkChar const * val,dkChar const * const * msg)902 dk3bmeo_option_background(
903 dk3_bm_eps_options_t *opt,
904 dkChar const *val,
905 dkChar const * const *msg
906 )
907 {
908 int back = 0;
909 int i; /* Temporary conversion result. */
910 dkChar *pc; /* Current word pointer. */
911 dkChar *pn; /* Next word pointer. */
912
913 if(val) {
914 pc = dk3str_start(val, NULL);
915 if(pc) {
916 pn = dk3str_chr(pc, dkT(':'));
917 if(pn) {
918 *(pn++) = dkT('\0');
919 #if VERSION_BEFORE_20140716
920 if(dk3sf_sscanf3(pc, dkT("%d"), &i))
921 #else
922 if (0 != dk3ma_i_from_string(&i, pc, NULL))
923 #endif
924 {
925 opt->bgr = DK3_TO_RANGE(i,0,255);
926 pc = pn;
927 pn = dk3str_chr(pc, dkT(':'));
928 if(pn) {
929 *(pn++) = dkT('\0');
930 #if VERSION_BEFORE_20140716
931 if(dk3sf_sscanf3(pc, dkT("%d"), &i))
932 #else
933 if (0 != dk3ma_i_from_string(&i, pc, NULL))
934 #endif
935 {
936 opt->bgg = DK3_TO_RANGE(i,0,255);
937 pc = pn;
938 pn = dk3str_chr(pc, dkT(':'));
939 if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); }
940 #if VERSION_BEFORE_20140716
941 if(dk3sf_sscanf3(pc, dkT("%d"), &i))
942 #else
943 if (0 != dk3ma_i_from_string(&i, pc, NULL))
944 #endif
945 {
946 opt->bgb = DK3_TO_RANGE(i,0,255);
947 back = 1;
948 if(pn) {
949 back = 0;
950 if(dk3str_is_bool(pn)) {
951 back = 1;
952 opt->fbg = (dk3str_is_on(pn) ? 1 : 0);
953 } else {
954 /* ERROR: Not a boolean! */
955 dk3bmj_log_3(
956 opt->app, DK3_LL_ERROR,msg,27,28,pn,DK3_BMJ_LOG_BOTH,NULL
957 );
958 }
959 }
960 } else {
961 /* ERROR: Not a number! */
962 dk3bmj_log_3(
963 opt->app, DK3_LL_ERROR,msg,24,25,pc,DK3_BMJ_LOG_BOTH,NULL
964 );
965 }
966 } else {
967 /* ERROR: Not a number! */
968 dk3bmj_log_3(
969 opt->app, DK3_LL_ERROR,msg,24,25,pc,DK3_BMJ_LOG_BOTH,NULL
970 );
971 }
972 } else {
973 /* ERROR: Syntax! */
974 dk3bmj_log_3(
975 opt->app, DK3_LL_ERROR,msg,32,33,pc,DK3_BMJ_LOG_BOTH,NULL
976 );
977 }
978 } else {
979 /* ERROR: Not a number! */
980 dk3bmj_log_3(
981 opt->app, DK3_LL_ERROR,msg,24,25,pc,DK3_BMJ_LOG_BOTH,NULL
982 );
983 }
984 } else {
985 /* ERROR: Syntax! */
986 dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,32,33,pc,DK3_BMJ_LOG_BOTH,NULL);
987 }
988 } else {
989 /* ERROR: Empty string */
990 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,31,DK3_BMJ_LOG_BOTH,NULL);
991 }
992 } else {
993 opt->bgr = 255; opt->bgg = 255; opt->bgb = 255; opt->fbg = 1;
994 }
995 return back;
996 }
997
998
999
1000 /** Set resolution, numeric or by name.
1001 @param opt Option set to modify.
1002 @param val Value for option.
1003 @param msg Localized message texts.
1004 @return 1 on success, 0 on error.
1005 */
1006 static
1007 int
dk3bmeo_option_resolution(dk3_bm_eps_options_t * opt,dkChar const * val,dkChar const * const * msg)1008 dk3bmeo_option_resolution(
1009 dk3_bm_eps_options_t *opt,
1010 dkChar const *val,
1011 dkChar const * const *msg
1012 )
1013 {
1014 int back = 0;
1015 double d; /* Temporary conversion result. */
1016
1017 if(val) {
1018 if(dk3str_casecmp(dk3bmeo_kw[1], val) == 0) {
1019 opt->szmode = DK3_BMEPS_SIZE_1_1;
1020 back = 1;
1021 } else {
1022 if(dk3str_casecmp(dk3bmeo_kw[2], val) == 0) {
1023 opt->szmode = DK3_BMEPS_SIZE_CHUNK;
1024 back = 1;
1025 } else {
1026 if(dk3str_casecmp(dk3bmeo_kw[3], val) == 0) {
1027 opt->szmode = DK3_BMEPS_SIZE_1_1;
1028 back = 1;
1029 } else {
1030 #if VERSION_BEFORE_20140716
1031 if(dk3sf_sscanf3(val, dkT("%lf"), &d))
1032 #else
1033 if (0 != dk3ma_d_from_string(&d, val, NULL))
1034 #endif
1035 {
1036 opt->szmode = DK3_BMEPS_SIZE_SPECIFIED;
1037 opt->resolution = d;
1038 back = 1;
1039 } else {
1040 /* ERROR: Illegal resolution value */
1041 dk3bmj_log_3(
1042 opt->app, DK3_LL_ERROR,msg,35,36,val,DK3_BMJ_LOG_BOTH,NULL
1043 );
1044 }
1045 }
1046 }
1047 }
1048 } else {
1049 /* ERROR: Missing value! */
1050 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,34,DK3_BMJ_LOG_BOTH,NULL);
1051 }
1052
1053 return back;
1054 }
1055
1056
1057
1058 /** Set paper size.
1059 @param opt Option set to modify.
1060 @param val Value for option.
1061 @param msg Localized message texts.
1062 @return 1 on success, 0 on error.
1063 */
1064 static
1065 int
dk3bmeo_option_paper(dk3_bm_eps_options_t * opt,dkChar const * val,dkChar const * const * msg)1066 dk3bmeo_option_paper(
1067 dk3_bm_eps_options_t *opt,
1068 dkChar const *val,
1069 dkChar const * const *msg
1070 )
1071 {
1072 int back = 0;
1073
1074 if(val) {
1075 back = dk3bmeo_set_paper_size_complain(opt, val, 1);
1076 opt->szmode = DK3_BMEPS_SIZE_PAPER;
1077 } else {
1078 /* ERROR: Missing value! */
1079 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,37,DK3_BMJ_LOG_BOTH,NULL);
1080 }
1081 return back;
1082 }
1083
1084
1085
1086 int
dk3bmeo_apply_option(dk3_bm_eps_options_t * opt,dkChar const * str,dkChar const * const * msg)1087 dk3bmeo_apply_option(
1088 dk3_bm_eps_options_t *opt,
1089 dkChar const *str,
1090 dkChar const * const *msg
1091 )
1092 {
1093 dkChar bu[1024]; /* Private copy of str. */
1094 dkChar *p1; /* String start, option value. */
1095 int ind; /* Option name index. */
1096 int back = 0;
1097
1098 if((opt) && (str)) {
1099 p1 = dk3str_start(str, NULL);
1100 if(p1) {
1101 if(dk3str_len(p1) < DK3_SIZEOF(bu,dkChar)) {
1102 dk3str_cpy_not_overlapped(bu, p1);
1103 p1 = dk3str_chr(bu, dkT('='));
1104 if(p1) {
1105 *(p1++) = dkT('\0');
1106 p1 = dk3str_start(p1, NULL);
1107 }
1108 ind = dk3str_array_index(dk3bmeo_option_names, bu, 0);
1109 switch(ind) {
1110 case 0: { /* PS level */
1111 back = dk3bmeo_option_pslevel(opt, p1, msg);
1112 } break;
1113 case 1: { /* Color flag */
1114 back = dk3bmeo_set_boolean(opt, &(opt->color), p1, msg);
1115 } break;
1116 case 2: { /* DSC flag */
1117 back = dk3bmeo_set_boolean(opt, &(opt->dsc), p1, msg);
1118 } break;
1119 case 3: { /* Draft flag */
1120 back = dk3bmeo_set_boolean(opt, &(opt->draft), p1, msg);
1121 } break;
1122 case 4: { /* Flate predictor name */
1123 back = dk3bmeo_option_predictor(opt, p1, msg);
1124 } break;
1125 case 5: { /* Duplex flag */
1126 back = dk3bmeo_set_boolean(opt, &(opt->duplex), p1, msg);
1127 } break;
1128 case 6: { /* Tumble for duplex flag */
1129 back = dk3bmeo_set_boolean(opt, &(opt->tumble), p1, msg);
1130 } break;
1131 case 7: { /* DCT flag */
1132 back = dk3bmeo_set_boolean(opt, &(opt->dct), p1, msg);
1133 } break;
1134 case 8: { /* Background color and optional force flag */
1135 back = dk3bmeo_option_background(opt, p1, msg);
1136 } break;
1137 case 9: { /* Interpolation flag */
1138 back = dk3bmeo_set_boolean(opt, &(opt->ip), p1, msg);
1139 } break;
1140 case 10: { /* JPEG interpolation flag */
1141 back = dk3bmeo_set_boolean(opt, &(opt->jip), p1, msg);
1142 } break;
1143 case 11: { /* Resolution, dpi number or name */
1144 back = dk3bmeo_option_resolution(opt, p1, msg);
1145 } break;
1146 case 12: { /* Paper size, name or numeric */
1147 back = dk3bmeo_option_paper(opt, p1, msg);
1148 } break;
1149 case 13: { /* Make */
1150 back = dk3bmeo_set_boolean(opt, &(opt->make), p1, msg);
1151 } break;
1152 case 14: { /* Keep aspect ratio. */
1153 back = dk3bmeo_set_boolean(opt, &(opt->kar), p1, msg);
1154 } break;
1155 case 15: { /* Reduce bits per component if possible. */
1156
1157 back = dk3bmeo_set_boolean(opt, &(opt->rbpc), p1, msg);
1158 } break;
1159 default: {
1160 /* ERROR: Unknown option name! */
1161 dk3bmj_log_3(
1162 opt->app, DK3_LL_ERROR,msg,22,23,bu,DK3_BMJ_LOG_BOTH,NULL
1163 );
1164 } break;
1165 }
1166 } else {
1167 /* ERROR: Configuration string too long! */
1168 dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,20,21,p1,DK3_BMJ_LOG_BOTH,NULL);
1169 }
1170 } else {
1171 /* ERROR: Empty configuration string! */
1172 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,19,DK3_BMJ_LOG_BOTH,NULL);
1173 }
1174 }
1175 return back;
1176 }
1177
1178
1179
1180 #if 0
1181 int
1182 dk3bmeo_set_language(
1183 dk3_bm_eps_options_t *opt, dkChar const *str, dk3_app_t *app
1184 )
1185 {
1186 dkChar bu[1024]; /* Private copy of str. */
1187 dkChar const * const *msg; /* Localized messages. */
1188 dkChar *pn; /* Next part to process. */
1189 dkChar *pc; /* Current part to process. */
1190 dkChar *pt; /* Type. */
1191 int back = 0;
1192 int lang = -1; /* Language. */
1193 int mode = -1; /* Mode. */
1194
1195 msg = dk3app_messages(
1196 opt->app,
1197 dk3bmep_str_get_string_table_name(),
1198 (dkChar const **)dk3bmep_str_get_message_texts()
1199 );
1200 if(!(msg)) {
1201 msg = dk3bmep_str_get_message_texts();
1202 }
1203 if((opt) && (str)) {
1204 if(dk3str_len(str) < DK3_SIZEOF(bu,dkChar)) {
1205 dk3str_cpy_not_overlapped(bu, str);
1206 pn = dk3str_chr(bu, dkT(','));
1207 if(pn) { *(pn++) = dkT('\0'); }
1208 pc = dk3str_start(bu, NULL);
1209 if(pc) {
1210 pt = dk3str_chr(pc, dkT('.'));
1211 if(pt) { *(pt++) = dkT('\0'); pt = dk3str_start(pt, NULL); }
1212 lang = dk3str_array_index(dk3bmeo_driver_names, pc, 0);
1213 switch(lang) {
1214 case 0: {
1215 lang = DK3_BMEPS_DRIVER_PS; back = 1;
1216 } break;
1217 case 1: {
1218 lang = DK3_BMEPS_DRIVER_EPS; back = 1;
1219 } break;
1220 case 2: {
1221 lang = DK3_BMEPS_DRIVER_PDF; back = 1;
1222 } break;
1223 case 3: {
1224 back = DK3_BMEPS_DRIVER_BB; back = 1;
1225 } break;
1226 default: {
1227 /* ERROR: Unknown language! */
1228 if(app) {
1229 dkChar const * const *msg;
1230 msg = dk3app_messages(
1231 app,
1232 dk3bmep_str_get_string_table_name(),
1233 (dkChar const **)dk3bmep_str_get_message_texts()
1234 );
1235 if(msg) {
1236 dk3app_log_3(app, DK3_LL_ERROR, msg, 74, 75, pc);
1237 }
1238 }
1239 } break;
1240 }
1241 if(back) {
1242 mode = DK3_BMEPS_MODE_OBJECT;
1243 if(pt) {
1244 back = 0;
1245 switch(dk3str_array_index(dk3bmeo_mode_names, pt, 0)) {
1246 case 0: case 1: {
1247 mode = DK3_BMEPS_MODE_IMAGE; back = 1;
1248 } break;
1249 case 2: case 3: {
1250 mode = DK3_BMEPS_MODE_OBJECT; back = 1;
1251 } break;
1252 case 4: case 5: {
1253 mode = DK3_BMEPS_MODE_DOCUMENT; back = 1;
1254 } break;
1255 }
1256 }
1257 if(back) {
1258 dk3bmeo_set_driver_and_mode(opt, lang, mode);
1259 pc = pn;
1260 while(pc) {
1261 pn = dk3str_chr(pc, dkT(','));
1262 if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); }
1263 if(!dk3bmeo_apply_option(opt, pc, msg)) { back = 0; }
1264 pc = pn;
1265 }
1266 }
1267 }
1268 } else {
1269 /* ##### ERROR: Missing language/mode! */
1270 }
1271 } else {
1272 /* ERROR: String too long! */
1273 dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,12,13,str,DK3_BMJ_LOG_BOTH,job);
1274 }
1275 }
1276 return back;
1277 }
1278 #else
1279 int
dk3bmeo_set_language(dk3_bm_eps_options_t * opt,dkChar const * str,dk3_app_t * app)1280 dk3bmeo_set_language(
1281 dk3_bm_eps_options_t *opt,
1282 dkChar const *str,
1283 dk3_app_t *app
1284 )
1285 {
1286 dkChar bu[1024]; /* Private copy of str. */
1287 dkChar const * const *msg; /* Localized messages. */
1288 dkChar *pn; /* Next part to process. */
1289 dkChar *pc; /* Current part to process. */
1290 dkChar *pt; /* Type. */
1291 int back = 0;
1292
1293 msg = dk3app_messages(
1294 opt->app,
1295 dk3bmep_str_get_string_table_name(),
1296 (dkChar const **)dk3bmep_str_get_message_texts()
1297 );
1298 if(!(msg)) {
1299 msg = dk3bmep_str_get_message_texts();
1300 }
1301 if((opt) && (str)) {
1302 dk3bmeo_init(opt);
1303 opt->app = app;
1304 if(dk3str_len(str) < DK3_SIZEOF(bu,dkChar)) {
1305 dk3str_cpy_not_overlapped(bu, str);
1306 pc = dk3str_start(bu, NULL);
1307 if(pc) {
1308 pn = dk3str_chr(pc, dkT(','));
1309 if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); }
1310 pt = dk3str_chr(pc, dkT('.'));
1311 if(pt) { *(pt++) = dkT('\0'); pt = dk3str_start(pt, NULL); }
1312 back = 1;
1313 opt->mode = DK3_BMEPS_MODE_OBJECT;
1314 opt->szmode = DK3_BMEPS_SIZE_1_1;
1315 switch(dk3str_array_index(dk3bmeo_driver_names, pc, 0)) {
1316 case 0: {
1317 opt->dr = DK3_BMEPS_DRIVER_PS;
1318 } break;
1319 case 1: {
1320 opt->dr = DK3_BMEPS_DRIVER_EPS;
1321 } break;
1322 case 2: {
1323 opt->dr = DK3_BMEPS_DRIVER_PDF;
1324 } break;
1325 case 3: {
1326 opt->dr = DK3_BMEPS_DRIVER_BB;
1327 opt->mode = DK3_BMEPS_MODE_OBJECT;
1328 opt->szmode = DK3_BMEPS_SIZE_1_1;
1329 } break;
1330 default: {
1331 back = 0;
1332 dk3bmj_log_3(
1333 opt->app, DK3_LL_ERROR,msg,15,16,pc,DK3_BMJ_LOG_BOTH,NULL
1334 );
1335 } break;
1336 }
1337 if(back) {
1338 if(pt) {
1339 switch(dk3str_array_abbr(dk3bmeo_mode_names, pt, dkT('$'), 0)) {
1340 case 0: {
1341 opt->mode = DK3_BMEPS_MODE_IMAGE;
1342 opt->szmode = DK3_BMEPS_SIZE_CHUNK;
1343 } break;
1344 case 1: {
1345 opt->mode = DK3_BMEPS_MODE_OBJECT;
1346 opt->szmode = DK3_BMEPS_SIZE_1_1;
1347 } break;
1348 case 2: {
1349 opt->mode = DK3_BMEPS_MODE_DOCUMENT;
1350 opt->szmode = DK3_BMEPS_SIZE_PAPER;
1351 } break;
1352 default: {
1353 back = 0;
1354 /* ERROR: Illegal mode! */
1355 dk3bmj_log_3(
1356 opt->app, DK3_LL_ERROR,msg,17,18,pt,DK3_BMJ_LOG_BOTH,NULL
1357 );
1358 } break;
1359 }
1360 if(opt->dr == DK3_BMEPS_DRIVER_BB) {
1361 if(opt->mode != DK3_BMEPS_MODE_OBJECT) {
1362 back = 0;
1363 /* ERROR: BB driver can only produce objects! */
1364 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,8,DK3_BMJ_LOG_BOTH,NULL);
1365 }
1366 }
1367 } else {
1368 }
1369 dk3bmeo_initialize_for_driver_and_mode(opt);
1370 if(back) {
1371 pc = pn;
1372 while(pc) {
1373 pn = dk3str_chr(pc, dkT(','));
1374 if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); }
1375 if(!dk3bmeo_apply_option(opt, pc, msg)) { back = 0; }
1376 pc = pn;
1377 }
1378 }
1379 }
1380 } else {
1381 /* ERROR: Empty string! */
1382 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,14,DK3_BMJ_LOG_BOTH,NULL);
1383 }
1384 } else {
1385 /* ERROR: String too long! */
1386 dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,12,13,str,DK3_BMJ_LOG_BOTH,NULL);
1387 }
1388 } else {
1389 }
1390 return back;
1391 }
1392 #endif
1393
1394
1395
1396 int
dk3bmeo_check(dk3_bm_eps_options_t * opt,int type,dk3_bm_conversion_job_t * job)1397 dk3bmeo_check(
1398 dk3_bm_eps_options_t *opt,
1399 int type,
1400 dk3_bm_conversion_job_t *job
1401 )
1402 {
1403 dkChar const * const *msg; /* Localized message texts. */
1404 int back = 1; /* No error found (yet). */
1405
1406 /*
1407 Check driver.
1408 */
1409 msg = dk3app_messages(
1410 opt->app,
1411 dk3bmep_str_get_string_table_name(),
1412 (dkChar const **)dk3bmep_str_get_message_texts()
1413 );
1414 if(!(msg)) {
1415 msg = dk3bmep_str_get_message_texts();
1416 }
1417 if(type) {
1418 switch(opt->dr) {
1419 case DK3_BMEPS_DRIVER_PS:
1420 case DK3_BMEPS_DRIVER_PDF:
1421 {
1422 }
1423 break;
1424 default: {
1425 back = 0;
1426 /* ERROR: Placed objects can use the PS or PDF driver only! */
1427 opt->dr = DK3_BMEPS_DRIVER_PS;
1428 dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 2, DK3_BMJ_LOG_BOTH, job);
1429 } break;
1430 }
1431 } else {
1432 switch(opt->dr) {
1433 case DK3_BMEPS_DRIVER_PS:
1434 case DK3_BMEPS_DRIVER_EPS:
1435 case DK3_BMEPS_DRIVER_PDF:
1436 case DK3_BMEPS_DRIVER_BB:
1437 {
1438 }
1439 break;
1440 default: {
1441 back = 0;
1442 /* ERROR: Illegal driver, must be PS, EPS, PDF, BB! */
1443 opt->dr = DK3_BMEPS_DRIVER_PDF;
1444 dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 3, DK3_BMJ_LOG_BOTH, job);
1445 } break;
1446 }
1447 }
1448 /*
1449 Check mode.
1450 */
1451 if(type) {
1452 if(opt->mode != DK3_BMEPS_MODE_PLACED_OBJECT) {
1453 back = 0;
1454 /* ERROR: Illegal mode, must be placed object! */
1455 opt->mode = DK3_BMEPS_MODE_PLACED_OBJECT;
1456 dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 4, DK3_BMJ_LOG_BOTH, job);
1457 }
1458 } else {
1459 if(opt->mode == DK3_BMEPS_MODE_PLACED_OBJECT) {
1460 dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 5, DK3_BMJ_LOG_BOTH, job);
1461 } else {
1462 switch(opt->dr) {
1463 case DK3_BMEPS_DRIVER_PS: {
1464 switch(opt->mode) {
1465 case DK3_BMEPS_MODE_IMAGE:
1466 case DK3_BMEPS_MODE_OBJECT:
1467 case DK3_BMEPS_MODE_DOCUMENT:
1468 {
1469 }
1470 break;
1471 default: {
1472 back = 0;
1473 /* ERROR: Illegal mode, must be image, object, document! */
1474 opt->mode = DK3_BMEPS_MODE_IMAGE;
1475 dk3bmj_log_1(opt->app,DK3_LL_ERROR,msg,6,DK3_BMJ_LOG_BOTH,job);
1476 } break;
1477 }
1478 } break;
1479 case DK3_BMEPS_DRIVER_EPS: {
1480 switch(opt->mode) {
1481 case DK3_BMEPS_MODE_IMAGE:
1482 case DK3_BMEPS_MODE_OBJECT:
1483 {
1484 }
1485 break;
1486 default: {
1487 back = 0;
1488 /* ERROR: Illegal mode, must be image or object! */
1489 opt->mode = DK3_BMEPS_MODE_OBJECT;
1490 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,7,DK3_BMJ_LOG_BOTH,job);
1491 } break;
1492 }
1493 } break;
1494 case DK3_BMEPS_DRIVER_PDF: {
1495 switch(opt->mode) {
1496 case DK3_BMEPS_MODE_IMAGE:
1497 case DK3_BMEPS_MODE_OBJECT:
1498 case DK3_BMEPS_MODE_DOCUMENT:
1499 {
1500 }
1501 break;
1502 default: {
1503 back = 0;
1504 /* ERROR: Illegal mode, must be image, object, document! */
1505 opt->mode = DK3_BMEPS_MODE_OBJECT;
1506 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,6,DK3_BMJ_LOG_BOTH,job);
1507 } break;
1508 }
1509 } break;
1510 case DK3_BMEPS_DRIVER_BB: {
1511 switch(opt->mode) {
1512 case DK3_BMEPS_MODE_OBJECT:
1513 {
1514 }
1515 break;
1516 default: {
1517 back = 0;
1518 /* ERROR: Illegal mode, BB requires object! */
1519 opt->mode = DK3_BMEPS_MODE_OBJECT;
1520 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,8,DK3_BMJ_LOG_BOTH,job);
1521 } break;
1522 }
1523 if(opt->draft) {
1524 opt->draft = 0;
1525 /* ERROR: Draft mode can not be used for bounding box! */
1526 }
1527 } break;
1528 }
1529 }
1530 }
1531 /*
1532 Check size mode.
1533 */
1534 if(type) {
1535 } else {
1536 switch(opt->mode) {
1537 case DK3_BMEPS_MODE_IMAGE: {
1538 switch(opt->szmode) {
1539 case DK3_BMEPS_SIZE_1_1: {
1540 } break;
1541 case DK3_BMEPS_SIZE_CHUNK: {
1542 } break;
1543 case DK3_BMEPS_SIZE_SPECIFIED: {
1544 } break;
1545 case DK3_BMEPS_SIZE_PAPER: {
1546 } break;
1547 default: {
1548 back = 0;
1549 /* ERROR: Illegal size mode! */
1550 opt->szmode = DK3_BMEPS_SIZE_1_1;
1551 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,9,DK3_BMJ_LOG_BOTH,job);
1552 } break;
1553 }
1554 } break;
1555 case DK3_BMEPS_MODE_OBJECT: {
1556 switch(opt->szmode) {
1557 case DK3_BMEPS_SIZE_1_1: {
1558 } break;
1559 default: {
1560 back = 0;
1561 /* ERROR: Illegal size mode, must be 1:1! */
1562 opt->szmode = DK3_BMEPS_SIZE_1_1;
1563 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,10,DK3_BMJ_LOG_BOTH,job);
1564 } break;
1565 }
1566 } break;
1567 case DK3_BMEPS_MODE_DOCUMENT: {
1568 if(opt->draft) {
1569 opt->draft = 0;
1570 /* ERROR: Draft can not be used with documents! */
1571 dk3bmj_log_1(opt->app, DK3_LL_WARNING,msg,11,DK3_BMJ_LOG_BOTH,job);
1572 }
1573 switch(opt->szmode) {
1574 case DK3_BMEPS_SIZE_1_1: {
1575 } break;
1576 case DK3_BMEPS_SIZE_CHUNK: {
1577 } break;
1578 case DK3_BMEPS_SIZE_SPECIFIED: {
1579 } break;
1580 case DK3_BMEPS_SIZE_PAPER: {
1581 } break;
1582 default: {
1583 back = 0;
1584 /* ERROR: Illegal size mode! */
1585 opt->szmode = DK3_BMEPS_SIZE_1_1;
1586 dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,9,DK3_BMJ_LOG_BOTH,job);
1587 } break;
1588 }
1589 } break;
1590 }
1591 }
1592 return back;
1593 }
1594
1595