%% options copyright owner = Dirk Krause copyright year = 2011-2014 license = bsd %% header #ifdef __cplusplus extern "C" { #endif /** Initialize bmeps option set. @param opt Option set to initialize. */ void dk3bmeo_init(dk3_bm_eps_options_t *opt); /** Allocate and initalize new option set. @param app Application structure for diagnostics, may be NULL. @return Pointer to new option set on success, NULL on error. */ dk3_bm_eps_options_t * dk3bmeo_new_app(dk3_app_t *app); /** Get run mode. @param opt Option set. @return Run mode DK3_BMEPS_MODE_xxx, see @ref dkbmmodes. */ int dk3bmeo_get_mode(dk3_bm_eps_options_t *opt); /** Set output driver and mode. @param opt Option set. @param driver Output driver DK3_BMEPS_DRIVER_xxx, see @ref bmepsdrivers. @param mode Output mode DK3_BMEPS_MODE_xxx, see @ref dkbmmodes. */ void dk3bmeo_set_driver_and_mode(dk3_bm_eps_options_t *opt, int driver, int mode); /** Set paper size by name. @param opt Option set. @param psn Paper size name. @return 1 on success, 0 on error. */ int dk3bmeo_set_paper_size(dk3_bm_eps_options_t *opt, dkChar const *psn); /** Get output driver. @param opt Option set. @return Output driver DK3_BMEPS_DRIVER_xxx, see @ref bmepsdrivers. */ int dk3bmeo_get_driver(dk3_bm_eps_options_t *opt); /** Enable/disable draft mode. @param opt Option set. @param drflag 1=draft, 0=normal. */ void dk3bmeo_set_draft(dk3_bm_eps_options_t *opt, int drflag); /** Get draft mode setting. @param opt Option set. @return 1 for draft mode, 0 for normal mode. */ int dk3bmeo_get_draft(dk3_bm_eps_options_t *opt); /** Set duplex printing. @param opt Option set. @param duplex Flag: Enable duplex output. */ void dk3bmeo_set_duplex(dk3_bm_eps_options_t *opt, int duplex); /** Retrieve duplex setting. @param opt Option set. @return 1 for duplex, 0 for simplex output. */ int dk3bmeo_get_duplex(dk3_bm_eps_options_t *opt); /** Set flate predictor. @param opt Option set. @param pred Predictor DK3_COMPRESSION_PREDICTOR_xxx, see @ref flatepredictors. */ void dk3bmeo_set_predictor(dk3_bm_eps_options_t *opt, int pred); /** Get compression predictor. @param opt Option set. @return Predictor DK3_COMPRESSION_PREDICTOR_xxx, see @ref flatepredictors. */ int dk3bmeo_get_predictor(dk3_bm_eps_options_t *opt); /** Set image origin. @param opt Option set. @param io Image origin DK3_IMAGE_ORIGIN_xxx, se @ref imageorigin. */ void dk3bmeo_set_origin(dk3_bm_eps_options_t *opt, int io); /** Get image origin. @param opt Option set. @return Image origin DK3_IMAGE_ORIGIN_xxx, se @ref imageorigin. */ int dk3bmeo_get_origin(dk3_bm_eps_options_t *opt); /** Set PS level. @param opt Option set. @param psl PS level (2 or 3). */ void dk3bmeo_set_ps_level(dk3_bm_eps_options_t *opt, int psl); /** Get PS level. @param opt Option set. @return PS level (2 or 3). */ int dk3bmeo_get_ps_level(dk3_bm_eps_options_t *opt); /** Enable/disable direct transfer of DCT data. @param opt Option set. @param dct 1=enable, 0=disable. */ void dk3bmeo_set_dct(dk3_bm_eps_options_t *opt, int dct); /** Get flag for direct DCT data transfer. @param opt Option set. @return 1=enabled, 0=disabled. */ int dk3bmeo_get_dct(dk3_bm_eps_options_t *opt); /** Set flag to keep aspect ratio. @param opt Option set. @param kar 1=keep aspect ratio, 0=allow different scales for x and y. */ void dk3bmeo_set_keep_aspect_ratio(dk3_bm_eps_options_t *opt, int kar); /** Get flag for keeping aspect ratio. @param opt Option set. @return 1 for keep aspect ratio, 0 for allow different scaling for x and y. */ int dk3bmeo_get_keep_aspect_ratio(dk3_bm_eps_options_t *opt); /** Set background. @param opt Option set. @param r Background red component. @param g Background green component. @param b Background blue component. @param f Flag: Force this background over background chunk from image file. */ void dk3bmeo_set_background(dk3_bm_eps_options_t *opt, int r, int g, int b, int f); /** Get background red component. @param opt Option set. @return Background red component. */ int dk3bmeo_get_background_red(dk3_bm_eps_options_t *opt); /** Get background green component. @param opt Option set. @return Background green component. */ int dk3bmeo_get_background_green(dk3_bm_eps_options_t *opt); /** Get background blue component. @param opt Option set. @return Background blue component. */ int dk3bmeo_get_background_blue(dk3_bm_eps_options_t *opt); /** Get enforce background flag. @param opt Option set. @return 1 for enforce background over background chunk, 0 for use background chunk if available. */ int dk3bmeo_get_background_force(dk3_bm_eps_options_t *opt); /** Enable/disable image interpolation. @param opt Option set. @param iip Flag: Image interpolation allowed. */ void dk3bmeo_set_interpolation(dk3_bm_eps_options_t *opt, int iip); /** Get image interpolation flag. @param opt Option set. @return 1 for image interpolation allowed, 0 for denied. */ int dk3bmeo_get_interpolation(dk3_bm_eps_options_t *opt); /** Enable/disable image interpolation for JPEG files. @param opt Option set. @param iip Flag: Image interpolation for JPEGs allowed or denied. */ void dk3bmeo_set_jpeg_interpolation(dk3_bm_eps_options_t *opt, int iip); /** Get image interpolation flag for JPEGs. @param opt Option set. @return 1 for image interpolation allowed, 0 for denied. */ int dk3bmeo_get_jpeg_interpolation(dk3_bm_eps_options_t *opt); /** Destroy option set, release memory. @param opt Option set to destroy. */ void dk3bmeo_delete(dk3_bm_eps_options_t *opt); /** Apply one text option (argument to -o) to option set. @param opt Option set to modify. @param str Option text. @param msg Message text array containing localized texts. @return 1 on success, 0 on error. */ int dk3bmeo_apply_option( dk3_bm_eps_options_t *opt, dkChar const *str, dkChar const * const *msg ); /** Set language (driver and mode, obtained from -l option). @param opt Option set to modify. @param str String containing configuration data. @param app Application structure for diagnostics, may be NULL. @return 1 on success, 0 on error. */ int dk3bmeo_set_language( dk3_bm_eps_options_t *opt, dkChar const *str, dk3_app_t *app ); /** Check options consistency. On inconsistency, correct the options and return 0 so a second check will return 1. @param opt Option set. @param type Invokation type (0=bmeps/wxbmeps, 1=placed object). @param app Application structure for diagnostics, may be NULL. @param job Conversion job structure. @return 1 on success, 0 on error (corrections applied). */ int dk3bmeo_check( dk3_bm_eps_options_t *opt, int type, dk3_app_t *app, dk3_bm_conversion_job_t *job ); /** Attempt to find PS level and page size from preferences. @param opt Conversion option set, app must be initialized. */ void dk3bmeo_apply_preferences(dk3_bm_eps_options_t *opt); /** Set size mode in option set. @param opt Option set. @param newmode new size mode DK3_BMEPS_SIZE_xxx, see @ref bmepssizehandling. */ void dk3bmeo_set_szmode(dk3_bm_eps_options_t *opt, int newmode); /** Retrieve image size mode. @param opt Option set. @return Size mode. */ int dk3bmeo_get_szmode(dk3_bm_eps_options_t *opt); /** Set image resolution. @param opt Option set. @param dpi Resolution in dpi (dots per inch). */ void dk3bmeo_set_resolution(dk3_bm_eps_options_t *opt, double dpi); /** Retrieve image resolution setting. @param opt Option set. @return Resolution in dpi if set, 72.0 is used as default. */ double dk3bmeo_get_resolution(dk3_bm_eps_options_t *opt); #ifdef __cplusplus } #endif %% module #include "dk3all.h" #include "dk3bmeo.h" #include "dk3bmeps.h" #include "dk3bmj.h" #include "dk3bm.h" $!trace-include /** Keywords used by the module. */ static dkChar const * const dk3bmeo_kw[] = { $!string-table macro=dkT # # 0: Preference name to retrieve default paper size # /print/paper-size # # 1: Resolution: 1 pixel = 1 pt # 1px1pt # # 2: Resolution: Check image resolution chunk # chunk # # 3: Resolution: 1 pixel = 1pt # 1:1 # # 4: PS level supported by printer # /print/ps/level # # 5: Format string to scan PS level # %ld $!end }; /** Names for options. */ static dkChar const * const dk3bmeo_option_names[] = { $!string-table macro=dkT # # 0: PS level # level # # 1: Flag: color allowed # color # # 2: Flag: DSC wanted # dsc # # 3: Flag: Draft # draft # # 4: Predictor name for flate compression # predictor # # 5: Flag: Duplex on # duplex # # 6: Flag: Tumble on for duplex # tumble # # 7: Flag: DCT pass-through allowed # dct # # 8: Background # bg # # 9: Flag: Interpolation on # interpolation # # 10: Flag: Interpolation allowed for JPEGs too # jpeg-interpolation # # 11: Resolution, dpi number or name like 1:1 or chunk # resolution # # 12: Paper size, either name or direct size # paper # # 13: Make mode # make # # 14: Keep aspect ratio # aspect # # 15: Reduce bits per component. # bpc $!end }; /** Driver names. */ dkChar const * const dk3bmeo_driver_names[] = { $!string-table macro=dkT ps eps pdf bb $!end }; /** Mode names */ dkChar const * const dk3bmeo_mode_names[] = { $!string-table macro=dkT # # 0: Image # i$mage # # 1: Object # o$bject # # 2: Document # d$ocument $!end }; /** Names for flate compression predictors. Order must match DK3_COMPRESSION_PREDICTOR_xxx in dk3const.h, see @ref flatepredictors. */ dkChar const * const dk3bmeo_predictor_names[] = { $!string-table macro=dkT tiff sub up average paeth $!end }; void dk3bmeo_init(dk3_bm_eps_options_t *opt) { $? "+ dk3bmeo_init" 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; $? ". szmode = 1:1" 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; } $? "- dk3bmeo_init" } dk3_bm_eps_options_t * dk3bmeo_new_app(dk3_app_t *app) { dk3_bm_eps_options_t *back = NULL; $? "+ dk3bmeo_new_app" back = dk3_new_app(dk3_bm_eps_options_t,1,app); if(back) { dk3bmeo_init(back); back->app = app; } $? "- dk3bmeo_new_app %s", TR_PTR(back) return back; } void dk3bmeo_delete(dk3_bm_eps_options_t *opt) { $? "+ dk3bmeo_delete" if(opt) { opt->app = NULL; dk3_delete(opt); } $? "- dk3bmeo_delete" } int dk3bmeo_get_mode(dk3_bm_eps_options_t *opt) { int back = DK3_BMEPS_MODE_IMAGE; $? "+ dk3bmeo_get_mode" if(opt) { back = opt->mode; } $? "- dk3bmeo_get_mode %d", back 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; $? "+ dk3bmeo_set_paper_size" 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)) { $? ". args ok" if(opt->app) { $? ". app ok" psc = dk3paper_open_app(opt->app); if(psc) { $? ". collection ok" pap = dk3paper_find(psc, psn); if(pap) { $? ". found" (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 { $? "! not found" /* 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 { $? "! collection" } if(!(opt->mode == DK3_BMEPS_MODE_DOCUMENT)) { $? "! mode" /* ERROR: Not a document */ if(cond) { dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,38,DK3_BMJ_LOG_BOTH,NULL); } } } else { $? "! app" /* ERROR: No app! */ } } else { $? "! args" } $? "- dk3bmeo_set_paper_size %d", back return back; } void dk3bmeo_apply_preferences(dk3_bm_eps_options_t *opt) { dkChar psn[64]; /* Buffer for paper size name. */ int psl; /* PS level. */ $? "+ dk3bmeo_apply_preferences" 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; } } } $? "- dk3bmeo_apply_preferences" } /** 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; $? ". szmode = chunk" } break; case DK3_BMEPS_MODE_OBJECT: { opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" } break; case DK3_BMEPS_MODE_DOCUMENT: { $? ". szmode = paper" 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; $? ". szmode = paper" } 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) { $? "+ dk3bmeo_set_driver_and_mode" if(opt) { opt->dr = driver; opt->mode = mode; dk3bmeo_initialize_for_driver_and_mode(opt); } $? "- dk3bmeo_set_driver_and_mode" } 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; $? "+ dk3bmeo_get_driver" if(opt) { back = opt->dr; } $? "- dk3bmeo_get_driver %d", back return back; } void dk3bmeo_set_draft(dk3_bm_eps_options_t *opt, int drflag) { $? "+ dk3bmeo_set_draft" if(opt) { opt->draft = drflag; } $? "- dk3bmeo_set_draft" } int dk3bmeo_get_draft(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_draft" if(opt) { back = ((opt->draft) ? 1 : 0); } $? "- dk3bmeo_get_draft %d", back return back; } void dk3bmeo_set_duplex(dk3_bm_eps_options_t *opt, int duplex) { $? "+ dk3bmeo_set_duplex" if(opt) { opt->duplex = duplex; } $? "- dk3bmeo_set_duplex" } int dk3bmeo_get_duplex(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_duplex" if(opt) { back = ((opt->duplex) ? 1 : 0); } $? "- dk3bmeo_get_duplex %d", back return back; } void dk3bmeo_set_predictor(dk3_bm_eps_options_t *opt, int pred) { $? "+ dk3bmeo_set_predictor" if(opt) { opt->pred = pred; } $? "- dk3bmeo_set_predictor" } int dk3bmeo_get_predictor(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_predictor" if(opt) { back = opt->pred; } $? "- dk3bmeo_get_predictor %d", back return back; } void dk3bmeo_set_origin(dk3_bm_eps_options_t *opt, int io) { $? "+ dk3bmeo_set_origin" if(opt) { opt->io = io; } $? "- dk3bmeo_set_origin" } int dk3bmeo_get_origin(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_origin" if(opt) { back = opt->io; } $? "- dk3bmeo_get_origin %d", back return back; } void dk3bmeo_set_ps_level(dk3_bm_eps_options_t *opt, int psl) { $? "+ dk3bmeo_set_ps_level" if(opt) { opt->psl = psl; if(psl < 2) opt->psl = 2; if(psl > 3) opt->psl = 3; } $? "- dk3bmeo_set_ps_level" } int dk3bmeo_get_ps_level(dk3_bm_eps_options_t *opt) { int back = 3; $? "+ dk3bmeo_get_ps_level" if(opt) { back = opt->psl; } $? "- dk3bmeo_get_ps_level %d", back return back; } void dk3bmeo_set_dct(dk3_bm_eps_options_t *opt, int dct) { $? "+ dk3bmeo_set_dct" if(opt) { opt->dct = dct; } $? "- dk3bmeo_set_dct" } int dk3bmeo_get_dct(dk3_bm_eps_options_t *opt) { int back = 1; $? "+ dk3bmeo_get_dct" if(opt) { back = ((opt->dct) ? 1 : 0); } $? "- dk3bmeo_get_dct %d", back return back; } void dk3bmeo_set_keep_aspect_ratio(dk3_bm_eps_options_t *opt, int kar) { $? "+ dk3bmeo_set_keep_aspect_ratio" if(opt) { opt->kar = kar; } $? "- dk3bmeo_set_keep_aspect_ratio" } int dk3bmeo_get_keep_aspect_ratio(dk3_bm_eps_options_t *opt) { int back = 1; $? "+ dk3bmeo_get_keep_aspect_ratio" if(opt) { back = ((opt->kar) ? 1 : 0); } $? "- dk3bmeo_get_keep_aspect_ratio %d", back return back; } void dk3bmeo_set_background(dk3_bm_eps_options_t *opt, int r, int g, int b, int f) { $? "+ dk3bmeo_set_background" if(opt) { opt->bgr = r; opt->bgg = g; opt->bgb = b; opt->fbg = f; } $? "- dk3bmeo_set_background" } int dk3bmeo_get_background_red(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_background_red" if(opt) { back = opt->bgr; } $? "- dk3bmeo_get_background_red %d", back return back; } int dk3bmeo_get_background_green(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_background_green" if(opt) { back = opt->bgg; } $? "- dk3bmeo_get_background_green %d", back return back; } int dk3bmeo_get_background_blue(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_background_blue" if(opt) { back = opt->bgb; } $? "- dk3bmeo_get_background_blue %d", back return back; } int dk3bmeo_get_background_force(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_background_force" if(opt) { back = ((opt->fbg) ? 1 : 0); } $? "- dk3bmeo_get_background_force %d", back return back; } void dk3bmeo_set_interpolation(dk3_bm_eps_options_t *opt, int iip) { $? "+ dk3bmeo_set_interpolation" if(opt) { opt->ip = iip; } $? "- dk3bmeo_set_interpolation" } int dk3bmeo_get_interpolation(dk3_bm_eps_options_t *opt) { int back = 1; $? "+ dk3bmeo_get_interpolation" if(opt) { back = ((opt->ip) ? 1 : 0); } $? "- dk3bmeo_get_interpolation %d", back return back; } void dk3bmeo_set_jpeg_interpolation(dk3_bm_eps_options_t *opt, int iip) { $? "+ dk3bmeo_set_jpeg_interpolation" if(opt) { opt->jip = iip; } $? "- dk3bmeo_set_jpeg_interpolation" } int dk3bmeo_get_jpeg_interpolation(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_jpeg_interpolation" if(opt) { back = ((opt->jip) ? 1 : 0); } $? "- dk3bmeo_get_jpeg_interpolation %d", back return back; } void dk3bmeo_set_szmode(dk3_bm_eps_options_t *opt, int newmode) { $? "+ dk3bmeo_set_szmode %d", newmode if(opt) { if((newmode >= 0) && (newmode <= 2)) { opt->szmode = newmode; $? ". szmode = %d", newmode } } $? "- dk3bmeo_set_szmode" } void dk3bmeo_set_resolution(dk3_bm_eps_options_t *opt, double dpi) { $? "+ dk3bmeo_set_resolution" if(opt) { opt->resolution = dpi; } $? "- dk3bmeo_set_resolution" } double dk3bmeo_get_resolution(dk3_bm_eps_options_t *opt) { double back = 72.0; $? "+ dk3bmeo_get_resolution" if(opt) { back = opt->resolution; if(back < 0.0) { back = 0.0; } } $? "- dk3bmeo_get_resolution %lg", back return back; } int dk3bmeo_get_szmode(dk3_bm_eps_options_t *opt) { int back = 0; $? "+ dk3bmeo_get_szmode" if(opt) { back = opt->szmode; } $? "- dk3bmeo_get_szmode %d", back 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. */ $? "+ dk3bmeo_option_pslevel" 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! */ } $? "- dk3bmeo_option_pslevel %d", back 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; $? "+ dk3bmeo_set_boolean" 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; } $? "- dk3bmeo_set_boolean %d", back 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; $? "+ dk3bmeo_option_predictor" 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; } $? "- dk3bmeo_option_predictor %d", back 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. */ $? "+ dk3bmeo_option_background" 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; } $? "- dk3bmeo_option_background %d", back 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. */ $? "+ dk3bmeo_option_resolution" if(val) { if(dk3str_casecmp(dk3bmeo_kw[1], val) == 0) { opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" back = 1; } else { if(dk3str_casecmp(dk3bmeo_kw[2], val) == 0) { opt->szmode = DK3_BMEPS_SIZE_CHUNK; $? ". szmode = chunk" back = 1; } else { if(dk3str_casecmp(dk3bmeo_kw[3], val) == 0) { opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" 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; $? ". szmode = spec" 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); } $? "- dk3bmeo_option_resolution %d", back 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; $? "+ dk3bmeo_option_paper" if(val) { back = dk3bmeo_set_paper_size_complain(opt, val, 1); opt->szmode = DK3_BMEPS_SIZE_PAPER; $? ". szmode = paper" } else { /* ERROR: Missing value! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,37,DK3_BMJ_LOG_BOTH,NULL); } $? "- dk3bmeo_option_paper %d", back 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; $? "+ dk3bmeo_apply_option \"%s\"", str 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. */ $? ". reduce bits per component" 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 { $? "! string too long" /* ERROR: Configuration string too long! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,20,21,p1,DK3_BMJ_LOG_BOTH,NULL); } } else { $? "! empty string" /* ERROR: Empty configuration string! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,19,DK3_BMJ_LOG_BOTH,NULL); } } $? "- dk3bmeo_apply_option %d", back 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. */ $? "+ dk3bmeo_set_language \"%s\"", TR_STR(str) 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); } } $? "- dk3bmeo_set_language %d", back 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; $? "+ dk3bmeo_set_language" 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)) { $? ". args ok" dk3bmeo_init(opt); opt->app = app; if(dk3str_len(str) < DK3_SIZEOF(bu,dkChar)) { $? ". length ok" dk3str_cpy_not_overlapped(bu, str); pc = dk3str_start(bu, NULL); if(pc) { $? ". contents found" 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; $? ". ok so far" opt->mode = DK3_BMEPS_MODE_OBJECT; opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" switch(dk3str_array_index(dk3bmeo_driver_names, pc, 0)) { case 0: { opt->dr = DK3_BMEPS_DRIVER_PS; $? ". driver ps" } break; case 1: { opt->dr = DK3_BMEPS_DRIVER_EPS; $? ". driver eps" } break; case 2: { opt->dr = DK3_BMEPS_DRIVER_PDF; $? ". driver pdf" } break; case 3: { opt->dr = DK3_BMEPS_DRIVER_BB; $? ". driver bb" opt->mode = DK3_BMEPS_MODE_OBJECT; opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" } break; default: { $? "! illegal driver" back = 0; dk3bmj_log_3( opt->app, DK3_LL_ERROR,msg,15,16,pc,DK3_BMJ_LOG_BOTH,NULL ); } break; } if(back) { $? ". ok so far" if(pt) { $? ". have mode" switch(dk3str_array_abbr(dk3bmeo_mode_names, pt, dkT('$'), 0)) { case 0: { $? ". mode image" opt->mode = DK3_BMEPS_MODE_IMAGE; opt->szmode = DK3_BMEPS_SIZE_CHUNK; $? ". szmode = chunk" } break; case 1: { $? ". mode object" opt->mode = DK3_BMEPS_MODE_OBJECT; opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" } break; case 2: { opt->mode = DK3_BMEPS_MODE_DOCUMENT; $? ". mode document" opt->szmode = DK3_BMEPS_SIZE_PAPER; $? ". szmode = paper" } break; default: { $? "! illegal mode" 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) { $? ". driver bb" if(opt->mode != DK3_BMEPS_MODE_OBJECT) { $? "! bb req object" 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 { $? ". no mode" } dk3bmeo_initialize_for_driver_and_mode(opt); if(back) { $? ". ok so far" pc = pn; while(pc) { $? ". add option" 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 { $? "! empty string" /* ERROR: Empty string! */ dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,14,DK3_BMJ_LOG_BOTH,NULL); } } else { $? "! string too long" /* ERROR: String too long! */ dk3bmj_log_3(opt->app, DK3_LL_ERROR,msg,12,13,str,DK3_BMJ_LOG_BOTH,NULL); } } else { $? "! args" } $? "- dk3bmeo_set_language %d", back return back; } #endif int dk3bmeo_check( dk3_bm_eps_options_t *opt, int type, dk3_app_t *app, dk3_bm_conversion_job_t *job ) { dkChar const * const *msg; /* Localized message texts. */ int back = 1; /* No error found (yet). */ $? "+ dk3bmeo_check" /* 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) { $? ". placed object" switch(opt->dr) { case DK3_BMEPS_DRIVER_PS: case DK3_BMEPS_DRIVER_PDF: { $? ". PS/PDF" } break; default: { $? "! illegal driver" 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 { $? ". file conversion" switch(opt->dr) { case DK3_BMEPS_DRIVER_PS: case DK3_BMEPS_DRIVER_EPS: case DK3_BMEPS_DRIVER_PDF: case DK3_BMEPS_DRIVER_BB: { $? ". driver ok" } break; default: { $? "! illegal driver" 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) { $? ". placed object" if(opt->mode != DK3_BMEPS_MODE_PLACED_OBJECT) { back = 0; $? "! illegal mode" /* 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 { $? ". file conversion" if(opt->mode == DK3_BMEPS_MODE_PLACED_OBJECT) { $? "! illegal mode" dk3bmj_log_1(opt->app, DK3_LL_ERROR, msg, 5, DK3_BMJ_LOG_BOTH, job); } else { switch(opt->dr) { case DK3_BMEPS_DRIVER_PS: { $? ". driver PS" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: case DK3_BMEPS_MODE_OBJECT: case DK3_BMEPS_MODE_DOCUMENT: { $? ". mode ok" } break; default: { $? "! illegal mode" 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: { $? ". driver PS" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: case DK3_BMEPS_MODE_OBJECT: { $? " . mode ok" } break; default: { $? "! illegal mode" 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: { $? ". driver PDF" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: case DK3_BMEPS_MODE_OBJECT: case DK3_BMEPS_MODE_DOCUMENT: { $? ". mode ok" } break; default: { $? "! illegal mode" 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: { $? ". driver bb" switch(opt->mode) { case DK3_BMEPS_MODE_OBJECT: { $? ". mode ok" } break; default: { $? "! illegal mode" 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) { $? ". placed object" } else { $? ". file conversion" switch(opt->mode) { case DK3_BMEPS_MODE_IMAGE: { $? ". mode image" switch(opt->szmode) { case DK3_BMEPS_SIZE_1_1: { $? ". szmode ok 1:1" } break; case DK3_BMEPS_SIZE_CHUNK: { $? ". szmode ok chunk" } break; case DK3_BMEPS_SIZE_SPECIFIED: { $? ". szmode ok specified" } break; case DK3_BMEPS_SIZE_PAPER: { $? ". szmode ok paper" } break; default: { $? "! illegal szmode" back = 0; /* ERROR: Illegal size mode! */ opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,9,DK3_BMJ_LOG_BOTH,job); } break; } } break; case DK3_BMEPS_MODE_OBJECT: { $? ". mode object" switch(opt->szmode) { case DK3_BMEPS_SIZE_1_1: { $? ". szmode: 1:1" } break; default: { $? "! illegal szmode" back = 0; /* ERROR: Illegal size mode, must be 1:1! */ opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,10,DK3_BMJ_LOG_BOTH,job); } break; } } break; case DK3_BMEPS_MODE_DOCUMENT: { $? ". mode document" 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: { $? ". szmode ok 1:1" } break; case DK3_BMEPS_SIZE_CHUNK: { $? ". szmode ok chunk" } break; case DK3_BMEPS_SIZE_SPECIFIED: { $? ". szmode ok specified" } break; case DK3_BMEPS_SIZE_PAPER: { $? ". szmode ok paper" } break; default: { $? "! illegal szmode" back = 0; /* ERROR: Illegal size mode! */ opt->szmode = DK3_BMEPS_SIZE_1_1; $? ". szmode = 1:1" dk3bmj_log_1(opt->app, DK3_LL_ERROR,msg,9,DK3_BMJ_LOG_BOTH,job); } break; } } break; } } $? "- dk3bmeo_check %d", back return back; }