From 6f4610aa98330d52cfccedf4489eaefdd3da5f99 Mon Sep 17 00:00:00 2001 From: Robin Stuart Date: Tue, 11 Apr 2017 10:05:38 +0100 Subject: [PATCH] Add verbose mode to output debug info without recompiling --- backend/aztec.c | 9 ++++----- backend/dmatrix.c | 2 +- backend/dotcode.c | 4 ++-- backend/gridmtx.c | 6 +++--- backend/hanxin.c | 5 ++--- backend/library.c | 1 + backend/pdf417.c | 2 +- backend/qr.c | 12 ++++++------ backend/rss.c | 2 +- backend/zint.h | 1 + frontend/main.c | 4 ++++ 11 files changed, 26 insertions(+), 22 deletions(-) diff --git a/backend/aztec.c b/backend/aztec.c index 6c5903d6..3587a8a9 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -68,9 +68,9 @@ static void insert(char binary_string[], const size_t posn, const char newbit) { /** * Encode input data into a binary string */ -static int aztec_text_process(const unsigned char source[], const unsigned int src_len, char binary_string[], const int gs1, const int eci) { +static int aztec_text_process(const unsigned char source[], const unsigned int src_len, char binary_string[], const int gs1, const int eci, int debug) { int i, j, k, p, bytes; - int curtable, newtable, lasttable, chartype, maplength, blocks, debug; + int curtable, newtable, lasttable, chartype, maplength, blocks; #ifndef _MSC_VER int charmap[src_len * 2], typemap[src_len * 2]; int blockmap[2][src_len]; @@ -83,7 +83,6 @@ static int aztec_text_process(const unsigned char source[], const unsigned int s #endif /* Lookup input string in encoding table */ maplength = 0; - debug = 0; if (gs1) { /* Add FNC1 to beginning of GS1 messages */ @@ -886,7 +885,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length) { unsigned char desc_data[4], desc_ecc[6]; int err_code, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length; int remainder, padbits, count, gs1, adjustment_size; - int debug = 0, reader = 0; + int debug = symbol->debug, reader = 0; int comp_loop = 4; #ifdef _MSC_VER @@ -913,7 +912,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length) { populate_map(); - err_code = aztec_text_process(source, length, binary_string, gs1, symbol->eci); + err_code = aztec_text_process(source, length, binary_string, gs1, symbol->eci, symbol->debug); if (err_code != 0) { strcpy(symbol->errtxt, "Input too long or too many extended ASCII characters (E02)"); diff --git a/backend/dmatrix.c b/backend/dmatrix.c index 9c8856f3..fff417a9 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -536,7 +536,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], int sp, tp, i, gs1; int current_mode, next_mode; int inputlen = *length_p; - int debug = 0; + int debug = symbol->debug; #ifndef _MSC_VER char binary[2 * inputlen]; #else diff --git a/backend/dotcode.c b/backend/dotcode.c index 881a442a..29461dc3 100644 --- a/backend/dotcode.c +++ b/backend/dotcode.c @@ -367,7 +367,7 @@ int dotcode_encode_message(struct zint_symbol *symbol, const unsigned char sourc int input_position, array_length, i; char encoding_mode; int inside_macro, done; - int debug = 0; + int debug = symbol->debug; int binary_buffer_size = 0; int lawrencium[6]; // Reversed radix 103 values @@ -1088,7 +1088,7 @@ int dotcode(struct zint_symbol *symbol, const unsigned char source[], int length #else char* dot_stream; char* dot_array; - unsigned char* masked_codeword_array; + unsigned char* masked_codeword_array; unsigned char* codeword_array = (unsigned char *) _alloca(length * 3 * sizeof (unsigned char)); #endif /* _MSC_VER */ diff --git a/backend/gridmtx.c b/backend/gridmtx.c index 992f259c..9996b251 100644 --- a/backend/gridmtx.c +++ b/backend/gridmtx.c @@ -348,7 +348,7 @@ void add_shift_char(char binary[], int shifty) { } } -int gm_encode(int gbdata[], int length, char binary[], int reader, int eci) { +int gm_encode(int gbdata[], int length, char binary[], int reader, int eci, int debug) { /* Create a binary stream representation of the input data. 7 sets are defined - Chinese characters, Numerals, Lower case letters, Upper case letters, Mixed numerals and latters, Control characters and 8-bit binary data */ @@ -357,7 +357,7 @@ int gm_encode(int gbdata[], int length, char binary[], int reader, int eci) { int p = 0, ppos; int numbuf[3], punt = 0; size_t number_pad_posn, byte_count_posn = 0; - int byte_count = 0, debug = 0; + int byte_count = 0; int shift, i; strcpy(binary, ""); @@ -1098,7 +1098,7 @@ int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], int le if (symbol->output_options & READER_INIT) reader = 1; - error_number = gm_encode(gbdata, length, binary, reader, symbol->eci); + error_number = gm_encode(gbdata, length, binary, reader, symbol->eci, symbol->debug); if (error_number != 0) { strcpy(symbol->errtxt, "Input data too long (E31)"); return error_number; diff --git a/backend/hanxin.c b/backend/hanxin.c index 356b20e5..c636a900 100644 --- a/backend/hanxin.c +++ b/backend/hanxin.c @@ -328,11 +328,10 @@ int lookup_text2(char input) { } /* Convert input data to binary stream */ -void calculate_binary(char binary[], char mode[], int source[], int length, int eci) { +void calculate_binary(char binary[], char mode[], int source[], int length, int eci, int debug) { int block_length; int position = 0; int i, p, count, encoding_value; - int debug = 0; int first_byte, second_byte; int third_byte, fourth_byte; int glyph; @@ -1396,7 +1395,7 @@ int han_xin(struct zint_symbol *symbol, const unsigned char source[], int length ecc_level = 1; } - calculate_binary(binary, mode, gbdata, length, symbol->eci); + calculate_binary(binary, mode, gbdata, length, symbol->eci, symbol->debug); bin_len = strlen(binary); codewords = bin_len / 8; if (bin_len % 8 != 0) { diff --git a/backend/library.c b/backend/library.c index 201dbad5..4619f10c 100644 --- a/backend/library.c +++ b/backend/library.c @@ -72,6 +72,7 @@ struct zint_symbol *ZBarcode_Create() { symbol->bitmap_height = 0; symbol->eci = 3; symbol->dot_size = 4.0 / 5.0; + symbol->debug = 0; return symbol; } diff --git a/backend/pdf417.c b/backend/pdf417.c index 1ead790f..39ac8d6f 100644 --- a/backend/pdf417.c +++ b/backend/pdf417.c @@ -561,7 +561,7 @@ int pdf417(struct zint_symbol *symbol, unsigned char chaine[], int length) { int i, k, j, indexchaine, indexliste, mode, longueur, loop, mccorrection[520], offset; int total, chainemc[2700], mclength, c1, c2, c3, dummy[35], codeerr; char codebarre[140], pattern[580]; - int debug = 0; + int debug = symbol->debug; codeerr = 0; diff --git a/backend/qr.c b/backend/qr.c index a2489c62..fdce6848 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -197,8 +197,8 @@ static void qr_bscan(char *binary, int data, int h) { } /* Convert input data to a binary stream and add padding */ -void qr_binary(int datastream[], int version, int target_binlen, char mode[], int jisdata[], int length, int gs1, int eci, int est_binlen) { - int position = 0, debug = 0; +void qr_binary(int datastream[], int version, int target_binlen, char mode[], int jisdata[], int length, int gs1, int eci, int est_binlen, int debug) { + int position = 0; int short_data_block_length, i, scheme = 1; char data_block, padbits; int current_binlen, current_bytes; @@ -1672,7 +1672,7 @@ int qr_code(struct zint_symbol *symbol, const unsigned char source[], int length fullstream = (int *) _alloca((qr_total_codewords[version - 1] + 1) * sizeof (int)); #endif - qr_binary(datastream, version, target_binlen, mode, jisdata, length, gs1, symbol->eci, est_binlen); + qr_binary(datastream, version, target_binlen, mode, jisdata, length, gs1, symbol->eci, est_binlen, symbol->debug); add_ecc(fullstream, datastream, version, target_binlen, blocks); size = qr_sizes[version - 1]; @@ -1718,10 +1718,10 @@ int qr_code(struct zint_symbol *symbol, const unsigned char source[], int length /* NOTE: From this point forward concerns Micro QR Code only */ -int micro_qr_intermediate(char binary[], int jisdata[], char mode[], int length, int *kanji_used, int *alphanum_used, int *byte_used) { +int micro_qr_intermediate(char binary[], int jisdata[], char mode[], int length, int *kanji_used, int *alphanum_used, int *byte_used, int debug) { /* Convert input data to an "intermediate stage" where data is binary encoded but control information is not */ - int position = 0, debug = 0; + int position = 0; int short_data_block_length, i; char data_block; char buffer[2]; @@ -2707,7 +2707,7 @@ int microqr(struct zint_symbol *symbol, const unsigned char source[], int length } } - error_number = micro_qr_intermediate(binary_stream, jisdata, mode, length, &kanji_used, &alphanum_used, &byte_used); + error_number = micro_qr_intermediate(binary_stream, jisdata, mode, length, &kanji_used, &alphanum_used, &byte_used, symbol->debug); if (error_number != 0) { strcpy(symbol->errtxt, "Input data too long (E64)"); return error_number; diff --git a/backend/rss.c b/backend/rss.c index 75fa75bf..9856641a 100644 --- a/backend/rss.c +++ b/backend/rss.c @@ -1169,7 +1169,7 @@ int general_rules(char field[], char type[]) { /* Handles all data encodation from section 7.2.5 of ISO/IEC 24724 */ int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_string[]) { - int encoding_method, i, mask, j, read_posn, latch, debug = 0, last_mode = ISOIEC; + int encoding_method, i, mask, j, read_posn, latch, debug = symbol->debug, last_mode = ISOIEC; int symbol_characters, characters_per_row; #ifndef _MSC_VER char general_field[strlen(source) + 1], general_field_type[strlen(source) + 1]; diff --git a/backend/zint.h b/backend/zint.h index 57f92160..a16dee9a 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -96,6 +96,7 @@ extern "C" { unsigned int bitmap_byte_length; float dot_size; struct zint_render *rendered; + int debug; }; #define ZINT_VERSION_MAJOR 2 diff --git a/frontend/main.c b/frontend/main.c index 7b4292f4..9d1c94c2 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -493,6 +493,7 @@ int main(int argc, char **argv) { {"dotsize", 1, 0, 0}, {"eci", 1, 0, 0}, {"filetype", 1, 0, 0}, + {"verbose", 0, 0, 0}, // Currently undocumented, output some debug info {0, 0, 0, 0} }; c = getopt_long(argc, argv, "htb:w:d:o:i:rcmpe", long_options, &option_index); @@ -688,6 +689,9 @@ int main(int argc, char **argv) { fflush(stderr); } } + if (!strcmp(long_options[option_index].name, "verbose")) { + my_symbol->debug = 1; + } break; case 'h':