/* Copyright (C) 2011-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk3bmeo.ctr */ /** @file dk3bmeo.c The dk3bmeo module. */ #line 319 "dk3bmeo.ctr" #include "dk3all.h" #include "dk3bmeo.h" #include "dk3bmeps.h" #include "dk3bmj.h" #include "dk3bm.h" #line 329 "dk3bmeo.ctr" /** Keywords used by the module. */ static dkChar const * const dk3bmeo_kw[] = { /* 0 */ dkT("/print/paper-size"), /* 1 */ dkT("1px1pt"), /* 2 */ dkT("chunk"), /* 3 */ dkT("1:1"), /* 4 */ dkT("/print/ps/level"), /* 5 */ dkT("%ld"), NULL #line 361 "dk3bmeo.ctr" }; /** Names for options. */ static dkChar const * const dk3bmeo_option_names[] = { /* 0 */ dkT("level"), /* 1 */ dkT("color"), /* 2 */ dkT("dsc"), /* 3 */ dkT("draft"), /* 4 */ dkT("predictor"), /* 5 */ dkT("duplex"), /* 6 */ dkT("tumble"), /* 7 */ dkT("dct"), /* 8 */ dkT("bg"), /* 9 */ dkT("interpolation"), /* 10 */ dkT("jpeg-interpolation"), /* 11 */ dkT("resolution"), /* 12 */ dkT("paper"), /* 13 */ dkT("make"), /* 14 */ dkT("aspect"), /* 15 */ dkT("bpc"), NULL #line 434 "dk3bmeo.ctr" }; /** Driver names. */ dkChar const * const dk3bmeo_driver_names[] = { /* 0 */ dkT("ps"), /* 1 */ dkT("eps"), /* 2 */ dkT("pdf"), /* 3 */ dkT("bb"), NULL #line 447 "dk3bmeo.ctr" }; /** Mode names */ dkChar const * const dk3bmeo_mode_names[] = { /* 0 */ dkT("i$mage"), /* 1 */ dkT("o$bject"), /* 2 */ dkT("d$ocument"), NULL #line 468 "dk3bmeo.ctr" }; /** Names for flate compression predictors. Order must match DK3_COMPRESSION_PREDICTOR_xxx in dk3const.h, see @ref flatepredictors. */ dkChar const * const dk3bmeo_predictor_names[] = { /* 0 */ dkT("tiff"), /* 1 */ dkT("sub"), /* 2 */ dkT("up"), /* 3 */ dkT("average"), /* 4 */ dkT("paeth"), NULL #line 484 "dk3bmeo.ctr" }; void dk3bmeo_init(dk3_bm_eps_options_t *opt) { #line 493 "dk3bmeo.ctr" if(opt) { (opt->ima).ps.w = 595.0; (opt->ima).ps.h = 842.0; (opt->ima).ps.i = 0.0; (opt->ima).ps.o = 0.0; (opt->ima).ps.t = 0.0; (opt->ima).ps.b = 0.0; opt->resolution = 72.0; opt->app = NULL; opt->mode = DK3_BMEPS_MODE_OBJECT; opt->szmode = DK3_BMEPS_SIZE_1_1; #line 504 "dk3bmeo.ctr" opt->dr = DK3_BMEPS_DRIVER_PDF; opt->pred = 0; opt->io = 0; opt->draft = 0; opt->duplex = 0; opt->tumble = 0; opt->psl = 3; opt->dsc = 0; opt->dct = 1; opt->kar = 1; opt->bgr = 255; opt->bgg = 255; opt->bgb = 255; opt->fbg = 0; opt->ip = 1; opt->jip = 0; opt->make = 0; opt->color = 1; opt->to_stdout = 0; opt->rbpc = 1; } #line 521 "dk3bmeo.ctr" } dk3_bm_eps_options_t * dk3bmeo_new_app(dk3_app_t *app) { dk3_bm_eps_options_t *back = NULL; #line 530 "dk3bmeo.ctr" back = dk3_new_app(dk3_bm_eps_options_t,1,app); if(back) { dk3bmeo_init(back); back->app = app; } #line 535 "dk3bmeo.ctr" return back; } void dk3bmeo_delete(dk3_bm_eps_options_t *opt) { #line 544 "dk3bmeo.ctr" if(opt) { opt->app = NULL; dk3_delete(opt); } #line 548 "dk3bmeo.ctr" } int dk3bmeo_get_mode(dk3_bm_eps_options_t *opt) { int back = DK3_BMEPS_MODE_IMAGE; #line 557 "dk3bmeo.ctr" if(opt) { back = opt->mode; } #line 560 "dk3bmeo.ctr" return back; } /** Set paper size, complain if named size is not found. @param opt Option set to receive size information. @param psn Paper size name. @param cond Flag: Complain (nonzero) or not (0). @return 1 on success, 0 on error. */ static int dk3bmeo_set_paper_size_complain( dk3_bm_eps_options_t *opt, dkChar const *psn, int cond ) { dk3_paper_size_collection_t *psc; /* Paper size collection. */ dk3_paper_size_t const *pap; /* Paper size. */ dkChar const * const *msg; /* Localized message texts. */ int back = 0; #line 582 "dk3bmeo.ctr" msg = dk3app_messages( opt->app, dk3bmep_str_get_string_table_name(), (dkChar const **)dk3bmep_str_get_message_texts() ); if(!(msg)) { msg = dk3bmep_str_get_message_texts(); } if((opt) && (psn)) { #line 591 "dk3bmeo.ctr" if(opt->app) { #line 592 "dk3bmeo.ctr" psc = dk3paper_open_app(opt->app); if(psc) { #line 594 "dk3bmeo.ctr" pap = dk3paper_find(psc, psn); if(pap) { #line 596 "dk3bmeo.ctr" (opt->ima).ps.w = pap->w; (opt->ima).ps.h = pap->h; (opt->ima).ps.i = pap->i; (opt->ima).ps.o = pap->o; (opt->ima).ps.t = pap->t; (opt->ima).ps.b = pap->b; back = 1; } else { #line 604 "dk3bmeo.ctr" /* ERROR: No such paper size. */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,39,40,psn,DK3_BMJ_LOG_BOTH,NULL ); } dk3paper_close(psc); } else { #line 611 "dk3bmeo.ctr" } if(!(opt->mode == DK3_BMEPS_MODE_DOCUMENT)) { #line 613 "dk3bmeo.ctr" /* ERROR: Not a document */ if(cond) { dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,38,DK3_BMJ_LOG_BOTH,NULL); } } } else { #line 619 "dk3bmeo.ctr" /* ERROR: No app! */ } } else { #line 622 "dk3bmeo.ctr" } #line 623 "dk3bmeo.ctr" return back; } void dk3bmeo_apply_preferences(dk3_bm_eps_options_t *opt) { dkChar psn[64]; /* Buffer for paper size name. */ int psl; /* PS level. */ #line 634 "dk3bmeo.ctr" if(opt->app) { if(dk3app_get_pref(opt->app,dk3bmeo_kw[0],psn,DK3_SIZEOF(psn,dkChar))) { (void)dk3bmeo_set_paper_size_complain(opt, psn, 0); } if(dk3app_get_pref(opt->app,dk3bmeo_kw[4],psn,DK3_SIZEOF(psn,dkChar))) { #if VERSION_BEFORE_20140716 if(dk3sf_sscanf3(psn, dk3bmeo_kw[5], &psl) == 1) #else if (0 != dk3ma_i_from_string(&psl, psn, NULL)) #endif { if(psl > 3) { psl = 3; } if(psl < 2) { psl = 2; } opt->psl = psl; } } } #line 654 "dk3bmeo.ctr" } /** Initialize for a given driver and mode. @param opt Option set to complete setup. */ static void dk3bmeo_initialize_for_driver_and_mode(dk3_bm_eps_options_t *opt) { switch(opt->dr) { case DK3_BMEPS_DRIVER_PS: { } break; case DK3_BMEPS_DRIVER_EPS: { } break; case DK3_BMEPS_DRIVER_PDF: { } break; case DK3_BMEPS_DRIVER_BB: { opt->mode = DK3_BMEPS_MODE_OBJECT; } break; } switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: { opt->szmode = DK3_BMEPS_SIZE_CHUNK; #line 679 "dk3bmeo.ctr" } break; case DK3_BMEPS_MODE_OBJECT: { opt->szmode = DK3_BMEPS_SIZE_1_1; #line 682 "dk3bmeo.ctr" } break; case DK3_BMEPS_MODE_DOCUMENT: { #line 684 "dk3bmeo.ctr" opt->szmode = DK3_BMEPS_SIZE_PAPER; if(opt->dr == DK3_BMEPS_DRIVER_PS) { opt->dsc = 1; } } break; } (opt->ima).ps.w = 595.0; (opt->ima).ps.h = 842.0; if(opt->mode == DK3_BMEPS_MODE_DOCUMENT) { /* The option -l ps.document is typically used for fax TIFF files which already have a border. So we do not need an additional border. */ (opt->ima).ps.i = 0.0; (opt->ima).ps.o = 0.0; (opt->ima).ps.t = 0.0; (opt->ima).ps.b = 0.0; opt->szmode = DK3_BMEPS_SIZE_PAPER; #line 702 "dk3bmeo.ctr" } else { (opt->ima).ps.i = 56.0; (opt->ima).ps.o = 28.0; (opt->ima).ps.t = 14.0; (opt->ima).ps.b = 14.0; } dk3bmeo_apply_preferences(opt); } void dk3bmeo_set_driver_and_mode(dk3_bm_eps_options_t *opt, int driver, int mode) { #line 718 "dk3bmeo.ctr" if(opt) { opt->dr = driver; opt->mode = mode; dk3bmeo_initialize_for_driver_and_mode(opt); } #line 723 "dk3bmeo.ctr" } int dk3bmeo_set_paper_size(dk3_bm_eps_options_t *opt, dkChar const *psn) { int back; back = dk3bmeo_set_paper_size_complain(opt, psn, 1); return back; } int dk3bmeo_get_driver(dk3_bm_eps_options_t *opt) { int back = DK3_BMEPS_DRIVER_PS; #line 742 "dk3bmeo.ctr" if(opt) { back = opt->dr; } #line 745 "dk3bmeo.ctr" return back; } void dk3bmeo_set_draft(dk3_bm_eps_options_t *opt, int drflag) { #line 754 "dk3bmeo.ctr" if(opt) { opt->draft = drflag; } #line 757 "dk3bmeo.ctr" } int dk3bmeo_get_draft(dk3_bm_eps_options_t *opt) { int back = 0; #line 766 "dk3bmeo.ctr" if(opt) { back = ((opt->draft) ? 1 : 0); } #line 769 "dk3bmeo.ctr" return back; } void dk3bmeo_set_duplex(dk3_bm_eps_options_t *opt, int duplex) { #line 778 "dk3bmeo.ctr" if(opt) { opt->duplex = duplex; } #line 781 "dk3bmeo.ctr" } int dk3bmeo_get_duplex(dk3_bm_eps_options_t *opt) { int back = 0; #line 790 "dk3bmeo.ctr" if(opt) { back = ((opt->duplex) ? 1 : 0); } #line 793 "dk3bmeo.ctr" return back; } void dk3bmeo_set_predictor(dk3_bm_eps_options_t *opt, int pred) { #line 802 "dk3bmeo.ctr" if(opt) { opt->pred = pred; } #line 805 "dk3bmeo.ctr" } int dk3bmeo_get_predictor(dk3_bm_eps_options_t *opt) { int back = 0; #line 814 "dk3bmeo.ctr" if(opt) { back = opt->pred; } #line 817 "dk3bmeo.ctr" return back; } void dk3bmeo_set_origin(dk3_bm_eps_options_t *opt, int io) { #line 826 "dk3bmeo.ctr" if(opt) { opt->io = io; } #line 829 "dk3bmeo.ctr" } int dk3bmeo_get_origin(dk3_bm_eps_options_t *opt) { int back = 0; #line 838 "dk3bmeo.ctr" if(opt) { back = opt->io; } #line 841 "dk3bmeo.ctr" return back; } void dk3bmeo_set_ps_level(dk3_bm_eps_options_t *opt, int psl) { #line 850 "dk3bmeo.ctr" if(opt) { opt->psl = psl; if(psl < 2) opt->psl = 2; if(psl > 3) opt->psl = 3; } #line 855 "dk3bmeo.ctr" } int dk3bmeo_get_ps_level(dk3_bm_eps_options_t *opt) { int back = 3; #line 864 "dk3bmeo.ctr" if(opt) { back = opt->psl; } #line 867 "dk3bmeo.ctr" return back; } void dk3bmeo_set_dct(dk3_bm_eps_options_t *opt, int dct) { #line 876 "dk3bmeo.ctr" if(opt) { opt->dct = dct; } #line 879 "dk3bmeo.ctr" } int dk3bmeo_get_dct(dk3_bm_eps_options_t *opt) { int back = 1; #line 888 "dk3bmeo.ctr" if(opt) { back = ((opt->dct) ? 1 : 0); } #line 891 "dk3bmeo.ctr" return back; } void dk3bmeo_set_keep_aspect_ratio(dk3_bm_eps_options_t *opt, int kar) { #line 899 "dk3bmeo.ctr" if(opt) { opt->kar = kar; } #line 902 "dk3bmeo.ctr" } int dk3bmeo_get_keep_aspect_ratio(dk3_bm_eps_options_t *opt) { int back = 1; #line 911 "dk3bmeo.ctr" if(opt) { back = ((opt->kar) ? 1 : 0); } #line 914 "dk3bmeo.ctr" return back; } void dk3bmeo_set_background(dk3_bm_eps_options_t *opt, int r, int g, int b, int f) { #line 923 "dk3bmeo.ctr" if(opt) { opt->bgr = r; opt->bgg = g; opt->bgb = b; opt->fbg = f; } #line 926 "dk3bmeo.ctr" } int dk3bmeo_get_background_red(dk3_bm_eps_options_t *opt) { int back = 0; #line 935 "dk3bmeo.ctr" if(opt) { back = opt->bgr; } #line 938 "dk3bmeo.ctr" return back; } int dk3bmeo_get_background_green(dk3_bm_eps_options_t *opt) { int back = 0; #line 949 "dk3bmeo.ctr" if(opt) { back = opt->bgg; } #line 952 "dk3bmeo.ctr" return back; } int dk3bmeo_get_background_blue(dk3_bm_eps_options_t *opt) { int back = 0; #line 962 "dk3bmeo.ctr" if(opt) { back = opt->bgb; } #line 965 "dk3bmeo.ctr" return back; } int dk3bmeo_get_background_force(dk3_bm_eps_options_t *opt) { int back = 0; #line 975 "dk3bmeo.ctr" if(opt) { back = ((opt->fbg) ? 1 : 0); } #line 978 "dk3bmeo.ctr" return back; } void dk3bmeo_set_interpolation(dk3_bm_eps_options_t *opt, int iip) { #line 987 "dk3bmeo.ctr" if(opt) { opt->ip = iip; } #line 990 "dk3bmeo.ctr" } int dk3bmeo_get_interpolation(dk3_bm_eps_options_t *opt) { int back = 1; #line 999 "dk3bmeo.ctr" if(opt) { back = ((opt->ip) ? 1 : 0); } #line 1002 "dk3bmeo.ctr" return back; } void dk3bmeo_set_jpeg_interpolation(dk3_bm_eps_options_t *opt, int iip) { #line 1011 "dk3bmeo.ctr" if(opt) { opt->jip = iip; } #line 1014 "dk3bmeo.ctr" } int dk3bmeo_get_jpeg_interpolation(dk3_bm_eps_options_t *opt) { int back = 0; #line 1023 "dk3bmeo.ctr" if(opt) { back = ((opt->jip) ? 1 : 0); } #line 1026 "dk3bmeo.ctr" return back; } void dk3bmeo_set_szmode(dk3_bm_eps_options_t *opt, int newmode) { #line 1035 "dk3bmeo.ctr" if(opt) { if((newmode >= 0) && (newmode <= 2)) { opt->szmode = newmode; #line 1038 "dk3bmeo.ctr" } } #line 1040 "dk3bmeo.ctr" } void dk3bmeo_set_resolution(dk3_bm_eps_options_t *opt, double dpi) { #line 1048 "dk3bmeo.ctr" if(opt) { opt->resolution = dpi; } #line 1051 "dk3bmeo.ctr" } double dk3bmeo_get_resolution(dk3_bm_eps_options_t *opt) { double back = 72.0; #line 1060 "dk3bmeo.ctr" if(opt) { back = opt->resolution; if(back < 0.0) { back = 0.0; } } #line 1064 "dk3bmeo.ctr" return back; } int dk3bmeo_get_szmode(dk3_bm_eps_options_t *opt) { int back = 0; #line 1074 "dk3bmeo.ctr" if(opt) { back = opt->szmode; } #line 1077 "dk3bmeo.ctr" return back; } /** Set PS level. @param opt Option set to modify. @param val Value for option. @param msg Localized message texts. @return 1 on success, 0 on error. */ static int dk3bmeo_option_pslevel( dk3_bm_eps_options_t *opt, dkChar const *val, dkChar const * const *msg ) { int back = 0; int i; /* Number obtained from val. */ #line 1099 "dk3bmeo.ctr" if(val) { #if VERSION_BEFORE_20140716 if(dk3sf_sscanf3(val, dkT("%d"), &i)) #else if (0 != dk3ma_i_from_string(&i, val, NULL)) #endif { if(i >= 2) { if(i <= 3) { opt->psl = i; back = 1; } else { /* ERROR: Must be 2 or 3! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,26,DK3_BMJ_LOG_BOTH,NULL); } } else { /* ERROR: Must be 2 or 3! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,26,DK3_BMJ_LOG_BOTH,NULL); } } else { /* ERROR: Not a number! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,24,25,val,DK3_BMJ_LOG_BOTH,NULL); } } else { /* ERROR: Missing argument! */ } #line 1124 "dk3bmeo.ctr" return back; } /** Set a boolean value. @param opt Option set, used for diagnostics. @param dest Boolean variable. @param val Text containing the value. @param msg Localized message texts. @return 1 on success, 0 on error. */ static int dk3bmeo_set_boolean( dk3_bm_eps_options_t *opt, int *dest, dkChar const *val, dkChar const * const *msg ) { int back = 0; #line 1148 "dk3bmeo.ctr" if(val) { if(dk3str_is_bool(val)) { back = 1; if(dk3str_is_on(val)) { *dest = 1; } else { *dest = 0; } } else { /* ERROR: Not a boolean! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,27,28,val,DK3_BMJ_LOG_BOTH,NULL); } } else { *dest = 1; back = 1; } #line 1163 "dk3bmeo.ctr" return back; } /** Set flate predictor name. @param opt Option set to modify. @param val Value for option. @param msg Localized message texts. @return 1 on success, 0 on error. */ static int dk3bmeo_option_predictor( dk3_bm_eps_options_t *opt, dkChar const *val, dkChar const * const *msg ) { int back = 0; #line 1184 "dk3bmeo.ctr" if(val) { back = dk3str_array_index(dk3bmeo_predictor_names, val, 0); if(back > -1) { opt->pred = back + 1; back = 1; } else { back = 0; dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,29,30,val,DK3_BMJ_LOG_BOTH,NULL); } } else { opt->pred = DK3_COMPRESSION_PREDICTOR_TIFF; back = 1; } #line 1196 "dk3bmeo.ctr" return back; } /** Set background. @param opt Option set to modify. @param val Value for option. @param msg Localized message texts. @return 1 on success, 0 on error. */ static int dk3bmeo_option_background( dk3_bm_eps_options_t *opt, dkChar const *val, dkChar const * const *msg ) { int back = 0; int i; /* Temporary conversion result. */ dkChar *pc; /* Current word pointer. */ dkChar *pn; /* Next word pointer. */ #line 1220 "dk3bmeo.ctr" if(val) { pc = dk3str_start(val, NULL); if(pc) { pn = dk3str_chr(pc, dkT(':')); if(pn) { *(pn++) = dkT('\0'); #if VERSION_BEFORE_20140716 if(dk3sf_sscanf3(pc, dkT("%d"), &i)) #else if (0 != dk3ma_i_from_string(&i, pc, NULL)) #endif { opt->bgr = DK3_TO_RANGE(i,0,255); pc = pn; pn = dk3str_chr(pc, dkT(':')); if(pn) { *(pn++) = dkT('\0'); #if VERSION_BEFORE_20140716 if(dk3sf_sscanf3(pc, dkT("%d"), &i)) #else if (0 != dk3ma_i_from_string(&i, pc, NULL)) #endif { opt->bgg = DK3_TO_RANGE(i,0,255); pc = pn; pn = dk3str_chr(pc, dkT(':')); if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); } #if VERSION_BEFORE_20140716 if(dk3sf_sscanf3(pc, dkT("%d"), &i)) #else if (0 != dk3ma_i_from_string(&i, pc, NULL)) #endif { opt->bgb = DK3_TO_RANGE(i,0,255); back = 1; if(pn) { back = 0; if(dk3str_is_bool(pn)) { back = 1; opt->fbg = (dk3str_is_on(pn) ? 1 : 0); } else { /* ERROR: Not a boolean! */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,27,28,pn,DK3_BMJ_LOG_BOTH,NULL ); } } } else { /* ERROR: Not a number! */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,24,25,pc,DK3_BMJ_LOG_BOTH,NULL ); } } else { /* ERROR: Not a number! */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,24,25,pc,DK3_BMJ_LOG_BOTH,NULL ); } } else { /* ERROR: Syntax! */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,32,33,pc,DK3_BMJ_LOG_BOTH,NULL ); } } else { /* ERROR: Not a number! */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,24,25,pc,DK3_BMJ_LOG_BOTH,NULL ); } } else { /* ERROR: Syntax! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,32,33,pc,DK3_BMJ_LOG_BOTH,NULL); } } else { /* ERROR: Empty string */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,31,DK3_BMJ_LOG_BOTH,NULL); } } else { opt->bgr = 255; opt->bgg = 255; opt->bgb = 255; opt->fbg = 1; } #line 1302 "dk3bmeo.ctr" return back; } /** Set resolution, numeric or by name. @param opt Option set to modify. @param val Value for option. @param msg Localized message texts. @return 1 on success, 0 on error. */ static int dk3bmeo_option_resolution( dk3_bm_eps_options_t *opt, dkChar const *val, dkChar const * const *msg ) { int back = 0; double d; /* Temporary conversion result. */ #line 1324 "dk3bmeo.ctr" if(val) { if(dk3str_casecmp(dk3bmeo_kw[1], val) == 0) { opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1327 "dk3bmeo.ctr" back = 1; } else { if(dk3str_casecmp(dk3bmeo_kw[2], val) == 0) { opt->szmode = DK3_BMEPS_SIZE_CHUNK; #line 1331 "dk3bmeo.ctr" back = 1; } else { if(dk3str_casecmp(dk3bmeo_kw[3], val) == 0) { opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1335 "dk3bmeo.ctr" back = 1; } else { #if VERSION_BEFORE_20140716 if(dk3sf_sscanf3(val, dkT("%lf"), &d)) #else if (0 != dk3ma_d_from_string(&d, val, NULL)) #endif { opt->szmode = DK3_BMEPS_SIZE_SPECIFIED; #line 1344 "dk3bmeo.ctr" opt->resolution = d; back = 1; } else { /* ERROR: Illegal resolution value */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,35,36,val,DK3_BMJ_LOG_BOTH,NULL ); } } } } } else { /* ERROR: Missing value! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,34,DK3_BMJ_LOG_BOTH,NULL); } #line 1360 "dk3bmeo.ctr" return back; } /** Set paper size. @param opt Option set to modify. @param val Value for option. @param msg Localized message texts. @return 1 on success, 0 on error. */ static int dk3bmeo_option_paper( dk3_bm_eps_options_t *opt, dkChar const *val, dkChar const * const *msg ) { int back = 0; #line 1381 "dk3bmeo.ctr" if(val) { back = dk3bmeo_set_paper_size_complain(opt, val, 1); opt->szmode = DK3_BMEPS_SIZE_PAPER; #line 1384 "dk3bmeo.ctr" } else { /* ERROR: Missing value! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,37,DK3_BMJ_LOG_BOTH,NULL); } #line 1388 "dk3bmeo.ctr" return back; } int dk3bmeo_apply_option( dk3_bm_eps_options_t *opt, dkChar const *str, dkChar const * const *msg ) { dkChar bu[1024]; /* Private copy of str. */ dkChar *p1; /* String start, option value. */ int ind; /* Option name index. */ int back = 0; #line 1405 "dk3bmeo.ctr" if((opt) && (str)) { p1 = dk3str_start(str, NULL); if(p1) { if(dk3str_len(p1) < DK3_SIZEOF(bu,dkChar)) { dk3str_cpy_not_overlapped(bu, p1); p1 = dk3str_chr(bu, dkT('=')); if(p1) { *(p1++) = dkT('\0'); p1 = dk3str_start(p1, NULL); } ind = dk3str_array_index(dk3bmeo_option_names, bu, 0); switch(ind) { case 0: { /* PS level */ back = dk3bmeo_option_pslevel(opt, p1, msg); } break; case 1: { /* Color flag */ back = dk3bmeo_set_boolean(opt, &(opt->color), p1, msg); } break; case 2: { /* DSC flag */ back = dk3bmeo_set_boolean(opt, &(opt->dsc), p1, msg); } break; case 3: { /* Draft flag */ back = dk3bmeo_set_boolean(opt, &(opt->draft), p1, msg); } break; case 4: { /* Flate predictor name */ back = dk3bmeo_option_predictor(opt, p1, msg); } break; case 5: { /* Duplex flag */ back = dk3bmeo_set_boolean(opt, &(opt->duplex), p1, msg); } break; case 6: { /* Tumble for duplex flag */ back = dk3bmeo_set_boolean(opt, &(opt->tumble), p1, msg); } break; case 7: { /* DCT flag */ back = dk3bmeo_set_boolean(opt, &(opt->dct), p1, msg); } break; case 8: { /* Background color and optional force flag */ back = dk3bmeo_option_background(opt, p1, msg); } break; case 9: { /* Interpolation flag */ back = dk3bmeo_set_boolean(opt, &(opt->ip), p1, msg); } break; case 10: { /* JPEG interpolation flag */ back = dk3bmeo_set_boolean(opt, &(opt->jip), p1, msg); } break; case 11: { /* Resolution, dpi number or name */ back = dk3bmeo_option_resolution(opt, p1, msg); } break; case 12: { /* Paper size, name or numeric */ back = dk3bmeo_option_paper(opt, p1, msg); } break; case 13: { /* Make */ back = dk3bmeo_set_boolean(opt, &(opt->make), p1, msg); } break; case 14: { /* Keep aspect ratio. */ back = dk3bmeo_set_boolean(opt, &(opt->kar), p1, msg); } break; case 15: { /* Reduce bits per component if possible. */ #line 1464 "dk3bmeo.ctr" back = dk3bmeo_set_boolean(opt, &(opt->rbpc), p1, msg); } break; default: { /* ERROR: Unknown option name! */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,22,23,bu,DK3_BMJ_LOG_BOTH,NULL ); } break; } } else { #line 1474 "dk3bmeo.ctr" /* ERROR: Configuration string too long! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,20,21,p1,DK3_BMJ_LOG_BOTH,NULL); } } else { #line 1478 "dk3bmeo.ctr" /* ERROR: Empty configuration string! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,19,DK3_BMJ_LOG_BOTH,NULL); } } #line 1482 "dk3bmeo.ctr" return back; } #if 0 int dk3bmeo_set_language( dk3_bm_eps_options_t *opt, dkChar const *str, dk3_app_t *app ) { dkChar bu[1024]; /* Private copy of str. */ dkChar const * const *msg; /* Localized messages. */ dkChar *pn; /* Next part to process. */ dkChar *pc; /* Current part to process. */ dkChar *pt; /* Type. */ int back = 0; int lang = -1; /* Language. */ int mode = -1; /* Mode. */ #line 1502 "dk3bmeo.ctr" msg = dk3app_messages( opt->app, dk3bmep_str_get_string_table_name(), (dkChar const **)dk3bmep_str_get_message_texts() ); if(!(msg)) { msg = dk3bmep_str_get_message_texts(); } if((opt) && (str)) { if(dk3str_len(str) < DK3_SIZEOF(bu,dkChar)) { dk3str_cpy_not_overlapped(bu, str); pn = dk3str_chr(bu, dkT(',')); if(pn) { *(pn++) = dkT('\0'); } pc = dk3str_start(bu, NULL); if(pc) { pt = dk3str_chr(pc, dkT('.')); if(pt) { *(pt++) = dkT('\0'); pt = dk3str_start(pt, NULL); } lang = dk3str_array_index(dk3bmeo_driver_names, pc, 0); switch(lang) { case 0: { lang = DK3_BMEPS_DRIVER_PS; back = 1; } break; case 1: { lang = DK3_BMEPS_DRIVER_EPS; back = 1; } break; case 2: { lang = DK3_BMEPS_DRIVER_PDF; back = 1; } break; case 3: { back = DK3_BMEPS_DRIVER_BB; back = 1; } break; default: { /* ERROR: Unknown language! */ if(app) { dkChar const * const *msg; msg = dk3app_messages( app, dk3bmep_str_get_string_table_name(), (dkChar const **)dk3bmep_str_get_message_texts() ); if(msg) { dk3app_log_3(app, DK3_LL_ERROR, msg, 74, 75, pc); } } } break; } if(back) { mode = DK3_BMEPS_MODE_OBJECT; if(pt) { back = 0; switch(dk3str_array_index(dk3bmeo_mode_names, pt, 0)) { case 0: case 1: { mode = DK3_BMEPS_MODE_IMAGE; back = 1; } break; case 2: case 3: { mode = DK3_BMEPS_MODE_OBJECT; back = 1; } break; case 4: case 5: { mode = DK3_BMEPS_MODE_DOCUMENT; back = 1; } break; } } if(back) { dk3bmeo_set_driver_and_mode(opt, lang, mode); pc = pn; while(pc) { pn = dk3str_chr(pc, dkT(',')); if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); } if(!dk3bmeo_apply_option(opt, pc, msg)) { back = 0; } pc = pn; } } } } else { /* ##### ERROR: Missing language/mode! */ } } else { /* ERROR: String too long! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,12,13,str,DK3_BMJ_LOG_BOTH,job); } } #line 1583 "dk3bmeo.ctr" return back; } #else int dk3bmeo_set_language( dk3_bm_eps_options_t *opt, dkChar const *str, dk3_app_t *app ) { dkChar bu[1024]; /* Private copy of str. */ dkChar const * const *msg; /* Localized messages. */ dkChar *pn; /* Next part to process. */ dkChar *pc; /* Current part to process. */ dkChar *pt; /* Type. */ int back = 0; #line 1600 "dk3bmeo.ctr" msg = dk3app_messages( opt->app, dk3bmep_str_get_string_table_name(), (dkChar const **)dk3bmep_str_get_message_texts() ); if(!(msg)) { msg = dk3bmep_str_get_message_texts(); } if((opt) && (str)) { #line 1609 "dk3bmeo.ctr" dk3bmeo_init(opt); opt->app = app; if(dk3str_len(str) < DK3_SIZEOF(bu,dkChar)) { #line 1612 "dk3bmeo.ctr" dk3str_cpy_not_overlapped(bu, str); pc = dk3str_start(bu, NULL); if(pc) { #line 1615 "dk3bmeo.ctr" pn = dk3str_chr(pc, dkT(',')); if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); } pt = dk3str_chr(pc, dkT('.')); if(pt) { *(pt++) = dkT('\0'); pt = dk3str_start(pt, NULL); } back = 1; #line 1620 "dk3bmeo.ctr" opt->mode = DK3_BMEPS_MODE_OBJECT; opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1622 "dk3bmeo.ctr" switch(dk3str_array_index(dk3bmeo_driver_names, pc, 0)) { case 0: { opt->dr = DK3_BMEPS_DRIVER_PS; #line 1625 "dk3bmeo.ctr" } break; case 1: { opt->dr = DK3_BMEPS_DRIVER_EPS; #line 1628 "dk3bmeo.ctr" } break; case 2: { opt->dr = DK3_BMEPS_DRIVER_PDF; #line 1631 "dk3bmeo.ctr" } break; case 3: { opt->dr = DK3_BMEPS_DRIVER_BB; #line 1634 "dk3bmeo.ctr" opt->mode = DK3_BMEPS_MODE_OBJECT; opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1636 "dk3bmeo.ctr" } break; default: { #line 1638 "dk3bmeo.ctr" back = 0; dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,15,16,pc,DK3_BMJ_LOG_BOTH,NULL ); } break; } if(back) { #line 1645 "dk3bmeo.ctr" if(pt) { #line 1646 "dk3bmeo.ctr" switch(dk3str_array_abbr(dk3bmeo_mode_names, pt, dkT('$'), 0)) { case 0: { #line 1648 "dk3bmeo.ctr" opt->mode = DK3_BMEPS_MODE_IMAGE; opt->szmode = DK3_BMEPS_SIZE_CHUNK; #line 1650 "dk3bmeo.ctr" } break; case 1: { #line 1652 "dk3bmeo.ctr" opt->mode = DK3_BMEPS_MODE_OBJECT; opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1654 "dk3bmeo.ctr" } break; case 2: { opt->mode = DK3_BMEPS_MODE_DOCUMENT; #line 1657 "dk3bmeo.ctr" opt->szmode = DK3_BMEPS_SIZE_PAPER; #line 1658 "dk3bmeo.ctr" } break; default: { #line 1660 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal mode! */ dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,17,18,pt,DK3_BMJ_LOG_BOTH,NULL ); } break; } if(opt->dr == DK3_BMEPS_DRIVER_BB) { #line 1668 "dk3bmeo.ctr" if(opt->mode != DK3_BMEPS_MODE_OBJECT) { #line 1669 "dk3bmeo.ctr" back = 0; /* ERROR: BB driver can only produce objects! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,8,DK3_BMJ_LOG_BOTH,NULL); } } } else { #line 1675 "dk3bmeo.ctr" } dk3bmeo_initialize_for_driver_and_mode(opt); if(back) { #line 1678 "dk3bmeo.ctr" pc = pn; while(pc) { #line 1680 "dk3bmeo.ctr" pn = dk3str_chr(pc, dkT(',')); if(pn) { *(pn++) = dkT('\0'); pn = dk3str_start(pn, NULL); } if(!dk3bmeo_apply_option(opt, pc, msg)) { back = 0; } pc = pn; } } } } else { #line 1688 "dk3bmeo.ctr" /* ERROR: Empty string! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,14,DK3_BMJ_LOG_BOTH,NULL); } } else { #line 1692 "dk3bmeo.ctr" /* ERROR: String too long! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,12,13,str,DK3_BMJ_LOG_BOTH,NULL); } } else { #line 1696 "dk3bmeo.ctr" } #line 1697 "dk3bmeo.ctr" return back; } #endif int dk3bmeo_check( dk3_bm_eps_options_t *opt, int type, dk3_bm_conversion_job_t *job ) { dkChar const * const *msg; /* Localized message texts. */ int back = 1; /* No error found (yet). */ #line 1713 "dk3bmeo.ctr" /* Check driver. */ msg = dk3app_messages( opt->app, dk3bmep_str_get_string_table_name(), (dkChar const **)dk3bmep_str_get_message_texts() ); if(!(msg)) { msg = dk3bmep_str_get_message_texts(); } if(type) { #line 1725 "dk3bmeo.ctr" switch(opt->dr) { case DK3_BMEPS_DRIVER_PS: case DK3_BMEPS_DRIVER_PDF: { #line 1729 "dk3bmeo.ctr" } break; default: { #line 1732 "dk3bmeo.ctr" back = 0; /* ERROR: Placed objects can use the PS or PDF driver only! */ opt->dr = DK3_BMEPS_DRIVER_PS; dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 2, DK3_BMJ_LOG_BOTH, job); } break; } } else { #line 1739 "dk3bmeo.ctr" switch(opt->dr) { case DK3_BMEPS_DRIVER_PS: case DK3_BMEPS_DRIVER_EPS: case DK3_BMEPS_DRIVER_PDF: case DK3_BMEPS_DRIVER_BB: { #line 1745 "dk3bmeo.ctr" } break; default: { #line 1748 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal driver, must be PS, EPS, PDF, BB! */ opt->dr = DK3_BMEPS_DRIVER_PDF; dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 3, DK3_BMJ_LOG_BOTH, job); } break; } } /* Check mode. */ if(type) { #line 1759 "dk3bmeo.ctr" if(opt->mode != DK3_BMEPS_MODE_PLACED_OBJECT) { back = 0; #line 1761 "dk3bmeo.ctr" /* ERROR: Illegal mode, must be placed object! */ opt->mode = DK3_BMEPS_MODE_PLACED_OBJECT; dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 4, DK3_BMJ_LOG_BOTH, job); } } else { #line 1766 "dk3bmeo.ctr" if(opt->mode == DK3_BMEPS_MODE_PLACED_OBJECT) { #line 1767 "dk3bmeo.ctr" dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 5, DK3_BMJ_LOG_BOTH, job); } else { switch(opt->dr) { case DK3_BMEPS_DRIVER_PS: { #line 1771 "dk3bmeo.ctr" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: case DK3_BMEPS_MODE_OBJECT: case DK3_BMEPS_MODE_DOCUMENT: { #line 1776 "dk3bmeo.ctr" } break; default: { #line 1779 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal mode, must be image, object, document! */ opt->mode = DK3_BMEPS_MODE_IMAGE; dk3bmj_log_1(opt->app,DK3_LL_ERROR,msg,6,DK3_BMJ_LOG_BOTH,job); } break; } } break; case DK3_BMEPS_DRIVER_EPS: { #line 1787 "dk3bmeo.ctr" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: case DK3_BMEPS_MODE_OBJECT: { #line 1791 "dk3bmeo.ctr" } break; default: { #line 1794 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal mode, must be image or object! */ opt->mode = DK3_BMEPS_MODE_OBJECT; dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,7,DK3_BMJ_LOG_BOTH,job); } break; } } break; case DK3_BMEPS_DRIVER_PDF: { #line 1802 "dk3bmeo.ctr" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: case DK3_BMEPS_MODE_OBJECT: case DK3_BMEPS_MODE_DOCUMENT: { #line 1807 "dk3bmeo.ctr" } break; default: { #line 1810 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal mode, must be image, object, document! */ opt->mode = DK3_BMEPS_MODE_OBJECT; dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,6,DK3_BMJ_LOG_BOTH,job); } break; } } break; case DK3_BMEPS_DRIVER_BB: { #line 1818 "dk3bmeo.ctr" switch(opt->mode) { case DK3_BMEPS_MODE_OBJECT: { #line 1821 "dk3bmeo.ctr" } break; default: { #line 1824 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal mode, BB requires object! */ opt->mode = DK3_BMEPS_MODE_OBJECT; dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,8,DK3_BMJ_LOG_BOTH,job); } break; } if(opt->draft) { opt->draft = 0; /* ERROR: Draft mode can not be used for bounding box! */ } } break; } } } /* Check size mode. */ if(type) { #line 1842 "dk3bmeo.ctr" } else { #line 1843 "dk3bmeo.ctr" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: { #line 1845 "dk3bmeo.ctr" switch(opt->szmode) { case DK3_BMEPS_SIZE_1_1: { #line 1847 "dk3bmeo.ctr" } break; case DK3_BMEPS_SIZE_CHUNK: { #line 1849 "dk3bmeo.ctr" } break; case DK3_BMEPS_SIZE_SPECIFIED: { #line 1851 "dk3bmeo.ctr" } break; case DK3_BMEPS_SIZE_PAPER: { #line 1853 "dk3bmeo.ctr" } break; default: { #line 1855 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal size mode! */ opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1858 "dk3bmeo.ctr" dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,9,DK3_BMJ_LOG_BOTH,job); } break; } } break; case DK3_BMEPS_MODE_OBJECT: { #line 1863 "dk3bmeo.ctr" switch(opt->szmode) { case DK3_BMEPS_SIZE_1_1: { #line 1865 "dk3bmeo.ctr" } break; default: { #line 1867 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal size mode, must be 1:1! */ opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1870 "dk3bmeo.ctr" dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,10,DK3_BMJ_LOG_BOTH,job); } break; } } break; case DK3_BMEPS_MODE_DOCUMENT: { #line 1875 "dk3bmeo.ctr" if(opt->draft) { opt->draft = 0; /* ERROR: Draft can not be used with documents! */ dk3bmj_log_1(opt->app, DK3_LL_WARNING,msg,11,DK3_BMJ_LOG_BOTH,job); } switch(opt->szmode) { case DK3_BMEPS_SIZE_1_1: { #line 1882 "dk3bmeo.ctr" } break; case DK3_BMEPS_SIZE_CHUNK: { #line 1884 "dk3bmeo.ctr" } break; case DK3_BMEPS_SIZE_SPECIFIED: { #line 1886 "dk3bmeo.ctr" } break; case DK3_BMEPS_SIZE_PAPER: { #line 1888 "dk3bmeo.ctr" } break; default: { #line 1890 "dk3bmeo.ctr" back = 0; /* ERROR: Illegal size mode! */ opt->szmode = DK3_BMEPS_SIZE_1_1; #line 1893 "dk3bmeo.ctr" dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,9,DK3_BMJ_LOG_BOTH,job); } break; } } break; } } #line 1899 "dk3bmeo.ctr" return back; }