%% options copyright owner = Dirk Krause copyright year = 2011-2014 license = bsd %% header #ifdef __cplusplus extern "C" { #endif /** Initialize job structure. @param job Structure to initialize. @param app Application structure for diagnostics. */ void dk3bmj_init(dk3_bm_conversion_job_t *job, dk3_app_t *app); /** Write a log message. @param app Application structure. @param ll Log level. @param i Index of message text in internal array. @param dest Destination, combination of DK3_BMJ_LOG_xxx, see @ref bmepslogtargets. @param job Job structure. */ void dk3bmj_log_i1( dk3_app_t *app, int ll, size_t i, int dest, dk3_bm_conversion_job_t *job ); /** Write a log message. @param app Application structure. @param ll Log level. @param i1 Index of first message text in internal array. @param i2 Index of third message text in internal array. @param txt Second message text. @param dest Destination, combination of DK3_BMJ_LOG_xxx, see @ref bmepslogtargets. @param job Job structure. */ void dk3bmj_log_i3( dk3_app_t *app, int ll, size_t i1, size_t i2, dkChar const *txt, int dest, dk3_bm_conversion_job_t *job ); /** Write a log message. @param app Application structure. @param ll Log level. @param i1 Index of first message text in internal array. @param i2 Index of third message text in internal array. @param i3 Index of fifth message text in internal array. @param txt1 Second message text. @param txt2 Fourth message text. @param dest Destination, combination of DK3_BMJ_LOG_xxx, see @ref bmepslogtargets. @param job Job structure. */ void dk3bmj_log_i5( dk3_app_t *app, int ll, size_t i1, size_t i2, size_t i3, dkChar const *txt1, dkChar const *txt2, int dest, dk3_bm_conversion_job_t *job ); /** Write a log message. @param app Application structure. @param ll Log level. @param txta Localized message texts. @param i Index of message text in @a txta. @param dest Destination, combination of DK3_BMJ_LOG_xxx, see @ref bmepslogtargets. @param job Job structure. */ void dk3bmj_log_1( dk3_app_t *app, int ll, dkChar const * const *txta, size_t i, int dest, dk3_bm_conversion_job_t *job ); /** Write a log message. @param app Application structure. @param ll Log level. @param txta Localized message texts. @param i1 Index of first message text in @a txta. @param i2 Index of third message text in @a txta. @param txt Second message text. @param dest Destination, combination of DK3_BMJ_LOG_xxx, see @ref bmepslogtargets. @param job Job structure. */ void dk3bmj_log_3( dk3_app_t *app, int ll, dkChar const * const *txta, size_t i1, size_t i2, dkChar const *txt, int dest, dk3_bm_conversion_job_t *job ); /** Write a log message. @param app Application structure. @param ll Log level. @param txta Localized message texts. @param i1 Index of first message text in @a txta. @param i2 Index of third message text in @a txta. @param i3 Index of fifth message text in @a txta. @param txt1 Second message text. @param txt2 Fourth message text. @param dest Destination, combination of DK3_BMJ_LOG_xxx, see @ref bmepslogtargets. @param job Job structure. */ void dk3bmj_log_5( dk3_app_t *app, int ll, dkChar const * const *txta, size_t i1, size_t i2, size_t i3, dkChar const *txt1, dkChar const *txt2, int dest, dk3_bm_conversion_job_t *job ); /** Set new value for progress bar. @param pc Communicator object pointer. @param val New value (0-1000). */ void dk3bmj_progress(void *pc, int val); /** Show progress for completed image scanlines. @param pc Communicator object. @param min Minimum progress bar value. @param max Maximum progress bar value. @param h Image height (number of lines). @param y Current line completed. */ void dk3bmj_lines_do_progress( void *pc, int min, int max, dk3_bif_coord_t h, dk3_bif_coord_t y ); /** Show progress for completed image scanlines. Calls dk3bmj_lines_do_progress() if DK3_USE_WX is on, does nothing otherwise. @param pc Communicator object. @param min Minimum progress bar value. @param max Maximum progress bar value. @param h Image height (number of lines). @param y Current line completed. */ void dk3bmj_lines_progress( void *pc, int min, int max, dk3_bif_coord_t h, dk3_bif_coord_t y ); /** Show progress for completed image scanlines. @param pc Communicator object. @param min Minimum progress bar value. @param max Maximum progress bar value. @param nObjects Number of objects. @param co Current object number. */ void dk3bmj_objects_do_progress( void *pc, int min, int max, unsigned long nObjects, unsigned long co ); /** Show progress for completed image scanlines. Call dk3bmj_objects_do_progress() if DK3_USE_WX is on, do nothing otherwise. @param pc Communicator object. @param min Minimum progress bar value. @param max Maximum progress bar value. @param nObjects Number of objects. @param co Current object number. */ void dk3bmj_obj_progress( void *pc, int min, int max, unsigned long nObjects, unsigned long co ); #ifdef __cplusplus } #endif /** @defgroup bmepslogtargets Log targets for bmeps3 and wxbmeps . */ /**@{*/ /** Log destination: Application structure. */ #define DK3_BMJ_LOG_APP 1 /** Log destination: Job structure. */ #define DK3_BMJ_LOG_JOB 2 /** Log destination: Application structure and job structure. */ #define DK3_BMJ_LOG_BOTH (DK3_BMJ_LOG_APP | DK3_BMJ_LOG_JOB) /**@}*/ /** @defgroup bmepscompression Compression type used by bmeps. */ /**@{*/ /** Output procedure: Uncompressed RGB. */ #define DK3_BMEPS_RGB_UNCOMPRESSED 0 /** Output procedure: Uncompressed gray. */ #define DK3_BMEPS_GRAY_UNCOMPRESSED 1 /** Output procedure: Run-length compressed RGB, separated color channels. */ #define DK3_BMEPS_RGB_RUNLENGTH 2 /** Output procedure: Run-length compressed gray. */ #define DK3_BMEPS_GRAY_RUNLENGTH 3 /** Output procedure: DCT-compressed RGB. */ #define DK3_BMEPS_RGB_DCT 4 /** Output procedure: DCT-compressed gray. */ #define DK3_BMEPS_GRAY_DCT 5 /** Output procedure: DCT-compressed CMYK. */ #define DK3_BMEPS_CMYK_DCT 6 /** Output procedure: Flate-compressed RGB. */ #define DK3_BMEPS_RGB_FLATE 7 /** Output procedure: Flate-compressed gray. */ #define DK3_BMEPS_GRAY_FLATE 8 /** Output procedure: Flate-compressed RGB with alpha (PDF output only). */ #define DK3_BMEPS_RGB_ALPHA_FLATE 9 /** Output procedure: Flate-compressed gray with alpha (PDF output only). */ #define DK3_BMEPS_GRAY_ALPHA_FLATE 10 /**@}*/ %% module #if DK3_USE_WX #include "wxbmeps.h" #else #include "dk3all.h" #include "dk3bmj.h" #include "dk3bmeps.h" #endif $!trace-include /** Log level required for writing to the log text field in wxbmeps. */ static int const dk3bmj_required_log_level = DK3_LL_PROGRESS; void dk3bmj_init(dk3_bm_conversion_job_t *job, dk3_app_t *app) { $? "+ dk3bmj_init" job->opt = NULL; if(app) { job->msg = dk3app_messages( app, dk3bmep_str_get_string_table_name(), (dkChar const **)dk3bmep_str_get_message_texts() ); if(!(job->msg)) { job->msg = dk3bmep_str_get_message_texts(); } } else { job->msg = dk3bmep_str_get_message_texts(); } job->sfn = NULL; job->dfn = NULL; job->dfile = NULL; job->biftype = 0; job->bif = NULL; job->pComm = NULL; job->minpb = 0; job->maxpb = 0; job->do_translate = 0; job->x_translate = 0.0; job->y_translate = 0.0; job->do_rotate = 0; job->do_float_scale = 0; job->x_scale = 1.0; job->y_scale = 1.0; job->x_size = 0L; job->y_size = 0L; job->x_0 = 0.0; job->x_1 = 0.0; job->y_0 = 0.0; job->y_1 = 0.0; job->do_header_footer = 1; job->procedure = DK3_BMEPS_GRAY_UNCOMPRESSED; job->bpc = 8; job->nPages = 1; job->currentPage = 1; job->pdf = NULL; $? "- dk3bmj_init" } void dk3bmj_progress(void *pc, int val) { $? "+ dk3bmj_progress %d", val #if DK3_USE_WX DkWxCommunicator *pComm; if(pc) { $? ". update progress bar" pComm = (DkWxCommunicator *)pc; pComm->updateGauge(val); } #endif $? "- dk3bmj_progress" } void dk3bmj_lines_do_progress( void *pc, int min, int max, dk3_bif_coord_t h, dk3_bif_coord_t y ) { $? "+ dk3bmj_lines_do_progress %d %d %lu %lu", min, max, (unsigned long)h, (unsigned long)y #if DK3_USE_WX { unsigned long ul; int i; $? ". use wx" if((pc) && (max > min)) { $? ". args ok" ul = (unsigned long)min + (((unsigned long)y + 1UL) * ((unsigned long)(max - min))) /(unsigned long)h; i = (int)ul; if(i < min) i = min; if(i > max) i = max; dk3bmj_progress(pc, i); } else { $? "! args" } } #endif $? "- dk3bmj_lines_do_progress" } void dk3bmj_lines_progress( void *pc, int min, int max, dk3_bif_coord_t h, dk3_bif_coord_t y ) { #if DK3_USE_WX dk3bmj_lines_do_progress(pc, min, max, h, y); #endif } void dk3bmj_objects_do_progress( void *pc, int min, int max, unsigned long nObjects, unsigned long co ) { $? "+ dk3bmj_objects_do_progress %d %d %lu %lu", min, max, nObjects, co #if DK3_USE_WX unsigned long ul; /* Temporary value. */ int i; /* New progress bar value. */ if((pc) && (max > min)) { $? ". args ok" ul = (unsigned long)min + ((co + 1UL) * ((unsigned long)(max - min))) / nObjects; i = (int)ul; if(i < min) i = min; if(i > max) i = max; dk3bmj_progress(pc, i); } else { $? "! args" } #endif $? "- dk3bmj_objects_do_progress" } void dk3bmj_obj_progress( void *pc, int min, int max, unsigned long nObjects, unsigned long co ) { #if DK3_USE_WX dk3bmj_objects_do_progress(pc, min, max, nObjects, co); #endif } void dk3bmj_log_i1( dk3_app_t *app, int ll, size_t i, int dest, dk3_bm_conversion_job_t *job ) { #if DK3_USE_WX dkChar const *p1; /* Log text. */ DkWxCommunicator *pComm; /* Communicator object. */ #endif if(dest & DK3_BMJ_LOG_APP) { if(app) { dk3app_log_i1(app, ll, i); } } #if DK3_USE_WX if((dest & DK3_BMJ_LOG_JOB) && (ll <= dk3bmj_required_log_level)) { if(job) { if(app) { pComm = (DkWxCommunicator *)(job->pComm); if(pComm) { pComm->setLogLevel(ll); p1 = dk3app_localized(app, i); if(p1) { pComm->addDkText(p1); pComm->nl(); } } } } } #endif } void dk3bmj_log_i3( dk3_app_t *app, int ll, size_t i1, size_t i2, dkChar const *txt, int dest, dk3_bm_conversion_job_t *job ) { #if DK3_USE_WX dkChar const *p1; /* First message part. */ dkChar const *p2; /* Last message part. */ DkWxCommunicator *pComm; /* Communicator object. */ #endif if(dest & DK3_BMJ_LOG_APP) { if(app) { dk3app_log_i3(app, ll, i1, i2, txt); } } #if DK3_USE_WX if((dest & DK3_BMJ_LOG_JOB) && (ll <= dk3bmj_required_log_level)) { if(job) { if(app) { pComm = (DkWxCommunicator *)(job->pComm); if(pComm) { pComm->setLogLevel(ll); p1 = dk3app_localized(app, i1); p2 = dk3app_localized(app, i2); if((p1) && (p2)) { pComm->addDkText(p1); if(txt) { pComm->addDkText(txt); } pComm->addDkText(p2); pComm->nl(); } } } } } #endif } void dk3bmj_log_i5( dk3_app_t *app, int ll, size_t i1, size_t i2, size_t i3, dkChar const *txt1, dkChar const *txt2, int dest, dk3_bm_conversion_job_t *job ) { #if DK3_USE_WX dkChar const *p1; /* First message part. */ dkChar const *p2; /* Centered message part. */ dkChar const *p3; /* Last message part. */ DkWxCommunicator *pComm; /* Communicator object. */ #endif if(dest & DK3_BMJ_LOG_APP) { if(app) { dk3app_log_i5(app, ll, i1, i2, i3, txt1, txt2); } } #if DK3_USE_WX if((dest & DK3_BMJ_LOG_JOB) && (ll <= dk3bmj_required_log_level)) { if(job) { if(app) { pComm = (DkWxCommunicator *)(job->pComm); if(pComm) { pComm->setLogLevel(ll); p1 = dk3app_localized(app, i1); p2 = dk3app_localized(app, i2); p3 = dk3app_localized(app, i3); if((p1) && (p2) && (p3)) { pComm->addDkText(p1); if(txt1) { pComm->addDkText(txt1); } pComm->addDkText(p2); if(txt2) { pComm->addDkText(txt2); } pComm->addDkText(p3); pComm->nl(); } } } } } #endif } void dk3bmj_log_1( dk3_app_t *app, int ll, dkChar const * const *txta, size_t i, int dest, dk3_bm_conversion_job_t *job ) { #if DK3_USE_WX dkChar const *p1; /* Message text. */ DkWxCommunicator *pComm; /* Communicator object. */ #endif $? "+ dk3bmj_log_1" if(txta) { $? ". txta" if(dest & DK3_BMJ_LOG_APP) { $? ". write to app" if(app) { $? ". app ok" dk3app_log_1(app, ll, txta, i); } else { $? "! app" } } else { $? ". no need to write to app" } #if DK3_USE_WX if((dest & DK3_BMJ_LOG_JOB) && (ll <= dk3bmj_required_log_level)) { $? ". x" if(job) { $? ". job" if(app) { $? ". app" pComm = (DkWxCommunicator *)(job->pComm); if(pComm) { $? ". pComm" pComm->setLogLevel(ll); p1 = txta[i]; if(p1) { $? ". p1" pComm->addDkText(p1); pComm->nl(); } else { $? "! p1" } } else { $? "! pComm" } } else { $? "! app" } } else { $? "! job" } } else { $? ". no need to write to wx" } #endif } else { $? "! txta" } $? "- dk3bmj_log_1" } void dk3bmj_log_3( dk3_app_t *app, int ll, dkChar const * const *txta, size_t i1, size_t i2, dkChar const *txt, int dest, dk3_bm_conversion_job_t *job ) { #if DK3_USE_WX dkChar const *p1; /* First message part. */ dkChar const *p2; /* Last message part. */ DkWxCommunicator *pComm; /* Communicator object. */ #endif if(txta) { if(dest & DK3_BMJ_LOG_APP) { if(app) { dk3app_log_3(app, ll, txta, i1, i2, txt); } } #if DK3_USE_WX if((dest & DK3_BMJ_LOG_JOB) && (ll <= dk3bmj_required_log_level)) { if(job) { if(app) { pComm = (DkWxCommunicator *)(job->pComm); if(pComm) { pComm->setLogLevel(ll); p1 = txta[i1]; p2 = txta[i2]; if((p1) && (p2)) { pComm->addDkText(p1); if(txt) { pComm->addDkText(txt); } pComm->addDkText(p2); pComm->nl(); } } } } } #endif } } void dk3bmj_log_5( dk3_app_t *app, int ll, dkChar const * const *txta, size_t i1, size_t i2, size_t i3, dkChar const *txt1, dkChar const *txt2, int dest, dk3_bm_conversion_job_t *job ) { #if DK3_USE_WX dkChar const *p1; /* First message part. */ dkChar const *p2; /* Centered message part. */ dkChar const *p3; /* Last message part. */ DkWxCommunicator *pComm; /* Communicator object. */ #endif if(txta) { if(dest & DK3_BMJ_LOG_APP) { if(app) { dk3app_log_5(app, ll, txta, i1, i2, i3, txt1, txt2); } } #if DK3_USE_WX if((dest & DK3_BMJ_LOG_JOB) && (ll <= dk3bmj_required_log_level)) { if(job) { if(app) { pComm = (DkWxCommunicator *)(job->pComm); if(pComm) { pComm->setLogLevel(ll); p1 = txta[i1]; p2 = txta[i2]; p3 = txta[i3]; if((p1) && (p2) && (p3)) { pComm->addDkText(p1); if(txt1) { pComm->addDkText(txt1); } pComm->addDkText(p2); if(txt2) { pComm->addDkText(txt2); } pComm->addDkText(p3); pComm->nl(); } } } } } #endif } }