From e94727f07d374ef705e36ff6ccfa9ca49af56dc0 Mon Sep 17 00:00:00 2001 From: gitlost Date: Mon, 25 Nov 2024 09:22:37 +0000 Subject: [PATCH] MAXICODE: add minimal encoding by Bue Jensen (BWIPP PR #279), around 20% slower than current but much better; numerous other fiddlings reedsol: reverse result in `rs_*encode*()` routines & adjust clients appropriately (may replace later with something faster) test suite: cater for MAXICODE SCM better; add assert & dataset totals BWIPP: update to latest gen_gs1_lint.php: restrict line length to 118 for func calls --- ChangeLog | 7 +- backend/auspost.c | 4 +- backend/aztec.c | 20 +- backend/code1.c | 6 +- backend/common.c | 2 +- backend/common.h | 2 +- backend/dmatrix.c | 21 +- backend/gridmtx.c | 4 +- backend/gs1_lint.h | 3 +- backend/hanxin.c | 14 +- backend/mailmark.c | 11 +- backend/maxicode.c | 964 +++++++++++------------ backend/maxicode.h | 76 +- backend/qr.c | 6 +- backend/reedsol.c | 24 +- backend/tests/test_library.c | 2 +- backend/tests/test_maxicode.c | 957 +++++++++++----------- backend/tests/test_reedsol.c | 80 +- backend/tests/testcommon.c | 263 ++++--- backend/tests/testcommon.h | 14 +- backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 139748 -> 140100 bytes backend/tools/gen_gs1_lint.php | 9 +- 22 files changed, 1317 insertions(+), 1172 deletions(-) diff --git a/ChangeLog b/ChangeLog index 28ad4318..f64680b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -Version 2.13.0.9 (dev) not released yet (2024-11-18) +Version 2.13.0.9 (dev) not released yet (2024-11-23) ==================================================== **Incompatible changes** @@ -14,7 +14,7 @@ Version 2.13.0.9 (dev) not released yet (2024-11-18) - Add-ons for UPC-A and UPC-E now descend to be level with the main symbol guard bars, and the righthand outside digit is now placed 1X less from main symbol to avoid touching any add-on -- GS1_128 now warns if READER_INIT option used +- GS1-128 symbols now warn if READER_INIT option used Changes ------- @@ -41,8 +41,7 @@ Changes return warning if ECC < 5% (due to bit-stuffing when version given) - MAXICODE: zero-pad US postcodes that lack "+4" (Annex B.1.4a), from OkapiBarcode, props Daniel Gredler; - use code set E for padding as well, saves codeword, props Bue Jensen (BWIPP PR - #279) + add minimal encodation algorithm, props Bue Jensen (BWIPP) - GUI: use X11 (xcb) as platform instead of Wayland on Linux to avoid various weird behaviours; in "grpDATF.ui" use "PlainText" rather than "RichText" for tracker ratio diff --git a/backend/auspost.c b/backend/auspost.c index b27a2fd0..b45fc518 100644 --- a/backend/auspost.c +++ b/backend/auspost.c @@ -90,8 +90,8 @@ static char *aus_rs_error(char data_pattern[], char *d) { rs_init_code(&rs, 4, 1); rs_encode(&rs, triple_writer, triple, result); - for (reader = 4; reader > 0; reader--, d += 3) { - memcpy(d, AusBarTable[result[reader - 1]], 3); + for (reader = 0; reader < 4; reader++, d += 3) { + memcpy(d, AusBarTable[result[reader]], 3); } return d; diff --git a/backend/aztec.c b/backend/aztec.c index 38c50329..ce364a9f 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -1159,7 +1159,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int break; } - for (i = (ecc_blocks - 1); i >= 0; i--) { + for (i = 0; i < ecc_blocks; i++) { adjusted_length = bin_append_posn(ecc_part[i], codeword_size, adjusted_string, adjusted_length); } @@ -1214,19 +1214,19 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int rs_init_code(&rs, 5, 1); rs_encode(&rs, 2, desc_data, desc_ecc); for (i = 0; i < 5; i++) { - descriptor[(i * 4) + 8] = (desc_ecc[4 - i] & 0x08) ? '1' : '0'; - descriptor[(i * 4) + 9] = (desc_ecc[4 - i] & 0x04) ? '1' : '0'; - descriptor[(i * 4) + 10] = (desc_ecc[4 - i] & 0x02) ? '1' : '0'; - descriptor[(i * 4) + 11] = (desc_ecc[4 - i] & 0x01) ? '1' : '0'; + descriptor[(i * 4) + 8] = (desc_ecc[i] & 0x08) ? '1' : '0'; + descriptor[(i * 4) + 9] = (desc_ecc[i] & 0x04) ? '1' : '0'; + descriptor[(i * 4) + 10] = (desc_ecc[i] & 0x02) ? '1' : '0'; + descriptor[(i * 4) + 11] = (desc_ecc[i] & 0x01) ? '1' : '0'; } } else { rs_init_code(&rs, 6, 1); rs_encode(&rs, 4, desc_data, desc_ecc); for (i = 0; i < 6; i++) { - descriptor[(i * 4) + 16] = (desc_ecc[5 - i] & 0x08) ? '1' : '0'; - descriptor[(i * 4) + 17] = (desc_ecc[5 - i] & 0x04) ? '1' : '0'; - descriptor[(i * 4) + 18] = (desc_ecc[5 - i] & 0x02) ? '1' : '0'; - descriptor[(i * 4) + 19] = (desc_ecc[5 - i] & 0x01) ? '1' : '0'; + descriptor[(i * 4) + 16] = (desc_ecc[i] & 0x08) ? '1' : '0'; + descriptor[(i * 4) + 17] = (desc_ecc[i] & 0x04) ? '1' : '0'; + descriptor[(i * 4) + 18] = (desc_ecc[i] & 0x02) ? '1' : '0'; + descriptor[(i * 4) + 19] = (desc_ecc[i] & 0x01) ? '1' : '0'; } } @@ -1320,7 +1320,7 @@ INTERNAL int azrune(struct zint_symbol *symbol, unsigned char source[], int leng rs_encode(&rs, 2, data_codewords, ecc_codewords); for (i = 0; i < 5; i++) { - bp = bin_append_posn(ecc_codewords[4 - i], 4, binary_string, bp); + bp = bin_append_posn(ecc_codewords[i], 4, binary_string, bp); } for (i = 0; i < 28; i += 2) { diff --git a/backend/code1.c b/backend/code1.c index 2878cc94..d4b113af 100644 --- a/backend/code1.c +++ b/backend/code1.c @@ -1106,7 +1106,7 @@ INTERNAL int codeone(struct zint_symbol *symbol, struct zint_seg segs[], const i rs_encode_uint(&rs, codewords, target, ecc); for (i = 0; i < codewords; i++) { - target[i + codewords] = ecc[codewords - i - 1]; + target[i + codewords] = ecc[i]; } if (debug_print) { @@ -1195,7 +1195,7 @@ INTERNAL int codeone(struct zint_symbol *symbol, struct zint_seg segs[], const i rs_encode_uint(&rs, data_cw, target, ecc); for (i = 0; i < ecc_cw; i++) { - target[data_cw + i] = ecc[ecc_cw - i - 1]; + target[data_cw + i] = ecc[i]; } if (debug_print) { @@ -1285,7 +1285,7 @@ INTERNAL int codeone(struct zint_symbol *symbol, struct zint_seg segs[], const i } rs_encode_uint(&rs, data_blocks, sub_data, sub_ecc); for (j = 0; j < ecc_blocks; j++) { - target[data_cw + j * blocks + i] = sub_ecc[ecc_blocks - 1 - j]; + target[data_cw + j * blocks + i] = sub_ecc[j]; } } diff --git a/backend/common.c b/backend/common.c index 9f887216..ceb6f560 100644 --- a/backend/common.c +++ b/backend/common.c @@ -154,7 +154,7 @@ INTERNAL int not_sane_lookup(const char test_string[], const int test_length, co return 0; } -/* Returns the position of `data` in `set_string` */ +/* Returns the position of `data` in `set_string`, or -1 if not found */ INTERNAL int posn(const char set_string[], const char data) { const char *s; diff --git a/backend/common.h b/backend/common.h index e419aa73..6017dbb2 100644 --- a/backend/common.h +++ b/backend/common.h @@ -195,7 +195,7 @@ INTERNAL int not_sane(const unsigned int flg, const unsigned char source[], cons INTERNAL int not_sane_lookup(const char test_string[], const int test_length, const unsigned char source[], const int length, int *posns); -/* Returns the position of `data` in `set_string` */ +/* Returns the position of `data` in `set_string`, or -1 if not found */ INTERNAL int posn(const char set_string[], const char data); diff --git a/backend/dmatrix.c b/backend/dmatrix.c index 30e0e7fc..997d24ea 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -179,19 +179,20 @@ static void dm_ecc(unsigned char *binary, const int bytes, const int datablock, for (n = b; n < bytes; n += blocks) buf[p++] = binary[n]; rs_encode(&rs, p, buf, ecc); - p = rsblock - 1; /* comes back reversed */ - for (n = b; n < rsblocks; n += blocks) { - if (skew) { - /* Rotate ecc data to make 144x144 size symbols acceptable */ - /* See http://groups.google.com/group/postscriptbarcode/msg/5ae8fda7757477da - or https://github.com/nu-book/zxing-cpp/issues/259 */ + if (skew) { + /* Rotate ecc data to make 144x144 size symbols acceptable */ + /* See http://groups.google.com/group/postscriptbarcode/msg/5ae8fda7757477da + or https://github.com/nu-book/zxing-cpp/issues/259 */ + for (n = b, p = 0; n < rsblocks; n += blocks, p++) { if (b < 8) { - binary[bytes + n + 2] = ecc[p--]; + binary[bytes + n + 2] = ecc[p]; } else { - binary[bytes + n - 8] = ecc[p--]; + binary[bytes + n - 8] = ecc[p]; } - } else { - binary[bytes + n] = ecc[p--]; + } + } else { + for (n = b, p = 0; n < rsblocks; n += blocks, p++) { + binary[bytes + n] = ecc[p]; } } } diff --git a/backend/gridmtx.c b/backend/gridmtx.c index 7ab4b9b6..fa87d4da 100644 --- a/backend/gridmtx.c +++ b/backend/gridmtx.c @@ -886,12 +886,12 @@ static void gm_add_ecc(const char binary[], const int data_posn, const int layer rs_init_code(&rs, ecc_size, 1); rs_encode(&rs, data_size, data_block, ecc_block); - /* Correct error correction data but in reverse order */ + /* Add error correction data */ for (j = 0; j < data_size; j++) { block[j] = data_block[j]; } for (j = 0; j < ecc_size; j++) { - block[(j + data_size)] = ecc_block[ecc_size - j - 1]; + block[j + data_size] = ecc_block[j]; } for (j = 0; j < n2; j++) { diff --git a/backend/gs1_lint.h b/backend/gs1_lint.h index 1db351eb..1571771a 100644 --- a/backend/gs1_lint.h +++ b/backend/gs1_lint.h @@ -751,7 +751,8 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len, return n3_iso3166(data, data_len, p_err_no, p_err_posn, err_msg); } if (ai == 423 || ai == 425) { - return n3_iso3166__n3__iso3166__n3__iso3166__n3__iso3166__n3__iso3166(data, data_len, p_err_no, p_err_posn, err_msg); + return n3_iso3166__n3__iso3166__n3__iso3166__n3__iso3166__n3__iso3166(data, + data_len, p_err_no, p_err_posn, err_msg); } if (ai == 427) { return x__3(data, data_len, p_err_no, p_err_posn, err_msg); diff --git a/backend/hanxin.c b/backend/hanxin.c index 790504be..c76b507c 100644 --- a/backend/hanxin.c +++ b/backend/hanxin.c @@ -1118,8 +1118,8 @@ static void hx_add_ecc(unsigned char fullstream[], const unsigned char datastrea unsigned char data_block[180]; unsigned char ecc_block[36]; int i, j, block; - int input_position = -1; - int output_position = -1; + int input_position = 0; + int output_position = 0; const int table_d1_pos = ((version - 1) * 36) + ((ecc_level - 1) * 9); rs_t rs; @@ -1134,17 +1134,15 @@ static void hx_add_ecc(unsigned char fullstream[], const unsigned char datastrea for (block = 0; block < batch_size; block++) { for (j = 0; j < data_length; j++) { - input_position++; - output_position++; data_block[j] = input_position < data_codewords ? datastream[input_position] : 0; - fullstream[output_position] = data_block[j]; + fullstream[output_position++] = data_block[j]; + input_position++; } rs_encode(&rs, data_length, data_block, ecc_block); for (j = 0; j < ecc_length; j++) { - output_position++; - fullstream[output_position] = ecc_block[ecc_length - j - 1]; + fullstream[output_position++] = ecc_block[j]; } } } @@ -1177,7 +1175,7 @@ static void hx_set_function_info(unsigned char *grid, const int size, const int rs_init_code(&rs, 4, 1); rs_encode(&rs, 3, fi_cw, fi_ecc); - for (i = 3; i >= 0; i--) { + for (i = 0; i < 4; i++) { bp = bin_append_posn(fi_ecc[i], 4, function_information, bp); } diff --git a/backend/mailmark.c b/backend/mailmark.c index bb7b9ab6..c91263e1 100644 --- a/backend/mailmark.c +++ b/backend/mailmark.c @@ -402,16 +402,15 @@ INTERNAL int mailmark_4s(struct zint_symbol *symbol, unsigned char source[], int /* Generation of Reed-Solomon Check Numbers */ rs_init_gf(&rs, 0x25); rs_init_code(&rs, check_count, 1); - rs_encode(&rs, (data_top + 1), data, check); + data_top++; + rs_encode(&rs, data_top, data, check); /* Append check digits to data */ - for (i = 1; i <= check_count; i++) { - data[data_top + i] = check[check_count - i]; - } + memcpy(data + data_top, check, check_count); if (symbol->debug & ZINT_DEBUG_PRINT) { fputs("Codewords:", stdout); - for (i = 0; i <= data_top + check_count; i++) { + for (i = 0; i < data_top + check_count; i++) { printf(" %d", (int) data[i]); } fputc('\n', stdout); @@ -421,7 +420,7 @@ INTERNAL int mailmark_4s(struct zint_symbol *symbol, unsigned char source[], int for (i = 0; i <= data_step; i++) { data[i] = mailmark_data_symbol_even[data[i]]; } - for (i = data_step + 1; i <= (data_top + check_count); i++) { + for (i = data_step + 1; i < (data_top + check_count); i++) { data[i] = mailmark_data_symbol_odd[data[i]]; } diff --git a/backend/maxicode.c b/backend/maxicode.c index 99cfd6b7..4f18d409 100644 --- a/backend/maxicode.c +++ b/backend/maxicode.c @@ -37,510 +37,498 @@ #include "maxicode.h" #include "reedsol.h" -/* Handles error correction of primary message */ -static void maxi_do_primary_check(unsigned char maxi_codeword[144]) { - unsigned char results[15]; - int j; - int datalen = 10; - int ecclen = 10; - rs_t rs; +/* Code Set states. Those with PAD (i.e. A, B and E) are first pick */ +#define MX_A 0 +#define MX_B 1 +#define MX_E 2 +#define MX_C 3 +#define MX_D 4 +#define MX_STATES 5 - rs_init_gf(&rs, 0x43); - rs_init_code(&rs, ecclen, 1); +/* Prior:A B E C D Later */ +static const char mx_latch_seq[MX_STATES][MX_STATES][2] = { + { { 0 }, {63 }, {58 }, {58 }, {58 } }, /* A */ + { {63 }, { 0 }, {63 }, {63 }, {63 } }, /* B */ + { {62,62}, {62,62}, { 0 }, {62,62}, {62,62} }, /* E */ + { {60,60}, {60,60}, {60,60}, { 0 }, {60,60} }, /* C */ + { {61,61}, {61,61}, {61,61}, {61,61}, { 0 } }, /* D */ - rs_encode(&rs, datalen, maxi_codeword, results); +}; +static const char mx_latch_len[MX_STATES][MX_STATES] = { /* Lengths of above */ + { 0, 1, 1, 1, 1 }, /* A */ + { 1, 0, 1, 1, 1 }, /* B */ + { 2, 2, 0, 2, 2 }, /* E */ + { 2, 2, 2, 0, 2 }, /* C */ + { 2, 2, 2, 2, 0 }, /* D */ +}; - for (j = 0; j < ecclen; j += 1) - maxi_codeword[ datalen + j] = results[ecclen - 1 - j]; -} +/* Op */ +struct mx_op { + unsigned char op; + unsigned char intake; /* `output` calculated from this */ +}; -/* Handles error correction of odd characters in secondary */ -static void maxi_do_secondary_chk_odd(unsigned char maxi_codeword[144], const int ecclen) { - unsigned char data[100]; - unsigned char results[30]; - int j; - int datalen = 68; - rs_t rs; +/* Op table ops */ +#define MX_OP_DGTS 0 +#define MX_OP_SETA 0x01 /* If change these, must change `maxiCodeSet` */ +#define MX_OP_SETB 0x02 +#define MX_OP_SETE 0x04 +#define MX_OP_SETC 0x08 +#define MX_OP_SETD 0x10 +#define MX_OP_SHA (0x20 | MX_OP_SETA) +#define MX_OP_2SHA (0x40 | MX_OP_SETA) +#define MX_OP_3SHA (0x80 | MX_OP_SETA) +#define MX_OP_SHB (0x20 | MX_OP_SETB) +#define MX_OP_SHE (0x20 | MX_OP_SETE) +#define MX_OP_SHC (0x20 | MX_OP_SETC) +#define MX_OP_SHD (0x20 | MX_OP_SETD) - rs_init_gf(&rs, 0x43); - rs_init_code(&rs, ecclen, 1); +/* Op table indexes */ +#define MX_OP_DGTS_IDX 0 +#define MX_OP_SETA_IDX 1 +#define MX_OP_SETB_IDX 2 +#define MX_OP_SETE_IDX 3 +#define MX_OP_SETC_IDX 4 +#define MX_OP_SETD_IDX 5 +#define MX_OP_SHA_IDX 6 +#define MX_OP_2SHA_IDX 7 +#define MX_OP_3SHA_IDX 8 +#define MX_OP_SHB_IDX 9 +#define MX_OP_SHE_IDX 10 +#define MX_OP_SHC_IDX 11 +#define MX_OP_SHD_IDX 12 +#define MX_OP_IDXS 13 - if (ecclen == 20) - datalen = 84; +/* Op table (order must match indexes above) */ +static const struct mx_op mx_op_tab[MX_OP_IDXS] = { + /* op intake */ + { MX_OP_DGTS, 9 }, + { MX_OP_SETA, 1 }, + { MX_OP_SETB, 1 }, + { MX_OP_SETE, 1 }, + { MX_OP_SETC, 1 }, + { MX_OP_SETD, 1 }, + { MX_OP_SHA, 1 }, + { MX_OP_2SHA, 2 }, + { MX_OP_3SHA, 3 }, + { MX_OP_SHB, 1 }, + { MX_OP_SHE, 1 }, + { MX_OP_SHC, 1 }, + { MX_OP_SHD, 1 }, +}; - for (j = 1; j < datalen; j += 2) - data[(j - 1) / 2] = maxi_codeword[j + 20]; +/* Indexes of op sets relevant to each state - MX_OP_DGTS dealt with separately */ +static const signed char mx_code_set_op_idxs[MX_STATES][8] = { + { MX_OP_SETA_IDX, MX_OP_SHB_IDX, MX_OP_SHE_IDX, MX_OP_SHC_IDX, MX_OP_SHD_IDX, -1 }, /* MX_A */ + { MX_OP_SETB_IDX, MX_OP_SHA_IDX, MX_OP_2SHA_IDX, MX_OP_3SHA_IDX, MX_OP_SHE_IDX, MX_OP_SHC_IDX, /* MX_B */ + MX_OP_SHD_IDX, -1 }, + { MX_OP_SETE_IDX, MX_OP_SHC_IDX, MX_OP_SHD_IDX, -1 }, /* MX_E */ + { MX_OP_SETC_IDX, MX_OP_SHE_IDX, MX_OP_SHD_IDX, -1 }, /* MX_C */ + { MX_OP_SETD_IDX, MX_OP_SHE_IDX, MX_OP_SHC_IDX, -1 }, /* MX_D */ +}; - rs_encode(&rs, datalen / 2, data, results); - - for (j = 0; j < (ecclen); j += 1) - maxi_codeword[ datalen + (2 * j) + 1 + 20 ] = results[ecclen - 1 - j]; -} - -/* Handles error correction of even characters in secondary */ -static void maxi_do_secondary_chk_even(unsigned char maxi_codeword[144], const int ecclen) { - unsigned char data[100]; - unsigned char results[30]; - int j; - int datalen = 68; - rs_t rs; - - if (ecclen == 20) - datalen = 84; - - rs_init_gf(&rs, 0x43); - rs_init_code(&rs, ecclen, 1); - - for (j = 0; j < datalen + 1; j += 2) - data[j / 2] = maxi_codeword[j + 20]; - - rs_encode(&rs, datalen / 2, data, results); - - for (j = 0; j < (ecclen); j += 1) - maxi_codeword[ datalen + (2 * j) + 20] = results[ecclen - 1 - j]; -} - -/* Moves everything up so that a shift or latch can be inserted */ -static void maxi_bump(unsigned char set[], unsigned char character[], const int bump_posn, int *p_length) { - - if (bump_posn < 143) { - memmove(set + bump_posn + 1, set + bump_posn, 143 - bump_posn); - memmove(character + bump_posn + 1, character + bump_posn, 143 - bump_posn); +/* Whether can encode character `ch` with `op` - MX_OP_DGTS dealt with separately */ +static int mx_can(const unsigned char op, const unsigned char ch, const int num_a) { + if (op == MX_OP_2SHA || op == MX_OP_3SHA) { + return num_a >= 2 + (op == MX_OP_3SHA); } - (*p_length)++; /* Increment length regardless to make sure too long always triggered */ + return maxiCodeSet[ch] & op; } -/* If the value is present in array, return the value, else return badvalue */ -static int maxi_value_in_array(const unsigned char val, const unsigned char arr[], const int badvalue, - const int arrLength) { - int i; - for (i = 0; i < arrLength; i++) { - if (arr[i] == val) return val; +/* Get the symbol value for `ch` in Code Set of `op`, accounting for chars in multiple Code Sets */ +static int mx_symbol_ch(const unsigned char op, const unsigned char ch) { + if (maxiCodeSet[ch] == (op & 0x1F) || (op & MX_OP_SETA)) { /* Non-multiple or Code Set A */ + return maxiSymbolChar[ch]; } - return badvalue; -} - -/* Choose the best set from previous and next set in the range of the setval array, if no value can be found we - * return setval[0] */ -static int maxi_bestSurroundingSet(const int index, const int length, const unsigned char set[], const int sp, - const unsigned char setval[], const int setLength) { - int badValue = -1; - int option1 = maxi_value_in_array(set[sp + index - 1], setval, badValue, setLength); - if (index + 1 < length) { - /* we have two options to check (previous & next) */ - int option2 = maxi_value_in_array(set[sp + index + 1], setval, badValue, setLength); - if (option2 != badValue && option1 > option2) { - return option2; + if (op & MX_OP_SETB) { + const int p = posn(" ,./:", ch); + if (p >= 0) { + return 47 + p; } } - - if (option1 != badValue) { - return option1; + if (op & MX_OP_SETE) { + if (ch >= 28 && ch <= 30) { /* FS GS RS */ + return ch + 4; + } } - return setval[0]; + return ch == ' ' ? 59 : ch; /* SP CR FS GS RS */ } -/* Format text according to Appendix A */ -static int maxi_text_process(unsigned char set[144], unsigned char character[144], const unsigned char in_source[], - int length, const int eci, const int scm_vv, int *p_sp, int current_set, const int debug_print) { +/* Encode according to operation `op` (note done backwards) */ +static int mx_enc(unsigned char codewords[144], int ci, const unsigned char source[], const int i, + const unsigned char op) { + if (op == MX_OP_DGTS) { + const int value = (source[i] - '0') * 100000000 + (source[i + 1] - '0') * 10000000 + + (source[i + 2] - '0') * 1000000 + (source[i + 3] - '0') * 100000 + + (source[i + 4] - '0') * 10000 + (source[i + 5] - '0') * 1000 + + (source[i + 6] - '0') * 100 + (source[i + 7] - '0') * 10 + source[i + 8] - '0'; + assert(ci >= 6); + codewords[--ci] = (value & 0x3F); + codewords[--ci] = (value & 0xFC0) >> 6; + codewords[--ci] = (value & 0x3F000) >> 12; + codewords[--ci] = (value & 0xFC0000) >> 18; + codewords[--ci] = (value & 0x3F000000) >> 24; + codewords[--ci] = 31; /* NS */ + } else if (op == MX_OP_2SHA) { + assert(ci >= 3); + codewords[--ci] = mx_symbol_ch(op, source[i + 1]); + codewords[--ci] = mx_symbol_ch(op, source[i]); + codewords[--ci] = 56; + } else if (op == MX_OP_3SHA) { + assert(ci >= 4); + codewords[--ci] = mx_symbol_ch(op, source[i + 2]); + codewords[--ci] = mx_symbol_ch(op, source[i + 1]); + codewords[--ci] = mx_symbol_ch(op, source[i]); + codewords[--ci] = 57; + } else { + assert(ci >= 1); + codewords[--ci] = mx_symbol_ch(op, source[i]); - int sp = *p_sp; - int i, count; -#ifndef NDEBUG - int ns_count1 = 0, ns_count2 = 0; -#endif - - static const unsigned char set15[2] = { 1, 5 }; - static const unsigned char set12[2] = { 1, 2 }; - static const unsigned char set12345[5] = { 1, 2, 3, 4, 5 }; - - const unsigned char *source = in_source; - unsigned char *source_buf = (unsigned char *) z_alloca(length + 9); /* For prefixing 9-character SCM sequence */ - - if (sp + length > 144) { - return 0; + if (op & 0x20) { /* Shift */ + assert(ci >= 1); + codewords[--ci] = 59 + 1 * (op == MX_OP_SHC) + 2 * (op == MX_OP_SHD) + 3 * (op == MX_OP_SHE); + } } + return ci; +} - /* Insert ECI at the beginning of message if needed */ - /* Encode ECI assignment numbers according to table 3 */ - if (eci != 0) { - if (sp + 1 + length > 144) return 0; - character[sp++] = 27; /* ECI */ - if (eci <= 31) { - if (sp + 1 + length > 144) return 0; - character[sp++] = eci; - } else if (eci <= 1023) { - if (sp + 2 + length > 144) return 0; - character[sp++] = 0x20 | ((eci >> 6) & 0x0F); - character[sp++] = eci & 0x3F; - } else if (eci <= 32767) { - if (sp + 3 + length > 144) return 0; - character[sp++] = 0x30 | ((eci >> 12) & 0x07); - character[sp++] = (eci >> 6) & 0x3F; - character[sp++] = eci & 0x3F; +/* Encoding length of ECI */ +static int mx_eci_len(const int eci) { + return eci == 0 ? 0 : 2 + (eci > 31) + (eci > 1023) + (eci > 32767); +} + +/* Encode ECI (`eci` non-zero) */ +static int mx_enc_eci(const int eci, unsigned char codewords[144], int ci) { + codewords[--ci] = eci & 0x3F; + if (eci > 31) { + if (eci > 1023) { + codewords[--ci] = (eci & 0xFC0) >> 6; + if (eci > 32767) { + codewords[--ci] = (eci & 0x3F000) >> 12; + codewords[--ci] = 0x38 | ((eci & 0xC0000) >> 18); + } else { + codewords[--ci] = 0x30 | ((eci & 0x7000) >> 12); + } } else { - if (sp + 4 + length > 144) return 0; - character[sp++] = 0x38 | ((eci >> 18) & 0x03); - character[sp++] = (eci >> 12) & 0x3F; - character[sp++] = (eci >> 6) & 0x3F; - character[sp++] = eci & 0x3F; + codewords[--ci] = 0x20 | ((eci & 0x3C0) >> 6); } } + codewords[--ci] = 27; /* ECI */ + + return ci; +} + +/* Get the shortest encoded length for the Code Set (state) and plot the path */ +static int mx_get_best_length(const int state, const int i, const unsigned char ch, const int digits, const int num_a, + const int best_lengths[16][MX_STATES], const char best_origins[16][MX_STATES], + unsigned char *const path_op, char *const prior_code_set) { + const char *const latch_length_s = mx_latch_len[state]; + int min_len = 999999; + int j; + + if (digits >= 9) { /* Nothing can beat digits */ + const int m = (i - 9) & 0x0F; + const int org = best_origins[m][state]; + const int len = best_lengths[m][org] + latch_length_s[org] + 6; + if (len < min_len) { + path_op[state] = MX_OP_DGTS_IDX; + prior_code_set[state] = org; + min_len = len; + } + } else { + const signed char *const op_idx_s = mx_code_set_op_idxs[state]; + for (j = 0; op_idx_s[j] != -1; j++) { + const int op_idx = op_idx_s[j]; + const struct mx_op *const op = &mx_op_tab[op_idx]; + if (mx_can(op->op, ch, num_a)) { + const int m = (i - op->intake) & 0x0F; + const int org = best_origins[m][state]; + const int len = best_lengths[m][org] + latch_length_s[org] + op->intake + (op_idx >= MX_OP_SHA_IDX); + if (len < min_len) { + path_op[state] = op_idx; + prior_code_set[state] = org; + min_len = len; + } + } + } + } + return min_len; +} + +/* Loop to get the best prior Code Set using a row of best encoded lengths */ +static int mx_get_best_origin(const int state, const int *const best_length) { + + const char *const latch_length_s = mx_latch_len[state]; + int orglen = best_length[0] + latch_length_s[0]; + int best_org = 0; + int org; + + for (org = 1; org < MX_STATES; org++) { + const int len = best_length[org] + latch_length_s[org]; + if (len < orglen) { + best_org = org; + orglen = len; + } + } + return best_org; +} + +/* Minimal encoding using backtracking by Bue Jensen, taken from BWIPP - see + https://github.com/bwipp/postscriptbarcode/pull/279 */ +static int mx_text_process_segs(unsigned char codewords[144], const int mode, struct zint_seg segs[], + const int seg_count, const int structapp_cw, const int scm_vv, const int debug_print) { + + /* The encoder needs 10 history rows. The circular history buffers are 16 long for convenience */ + int best_lengths[16][MX_STATES] = {0}; + char best_origins[16][MX_STATES] = {0}; + int *best_length = NULL; /* Suppress clang-tidy-20 warning */ + + int cp = 20 - 9 * (mode > 3); /* Offset the initial codewords index to minimize copying */ + const int max_len = (mode == 5 ? 77 : 93) + 11; /* 11 added to adjust for above offset */ + int ci, ci_top; + + /* Backtracking information */ + const int segs_len = segs_length(segs, seg_count); + char (*prior_code_sets)[MX_STATES] = (char (*)[MX_STATES]) z_alloca(sizeof(*prior_code_sets) * (segs_len + 9)); + unsigned char (*path_ops)[MX_STATES] + = (unsigned char (*)[MX_STATES]) z_alloca(sizeof(*path_ops) * (segs_len + 9)); + + int digits = 0; + int num_a = 0; + + int min_len = 999999; + int min_state = 0; + int state; + + unsigned char *source_scm_vv; /* For SCM prefix `scm_vv` if any */ + int have_eci_scm = 0; /* Set if have ECI and SCM prefix */ + + int seg; + int si = 0; /* Segment offset to `source` position */ + int i, j; if (scm_vv != -1) { /* Add SCM prefix */ - if (sp + length > 135) { - return 0; - } - sprintf((char *) source_buf, "[)>\03601\035%02d", scm_vv); /* [)>\R01\Gvv */ - memcpy(source_buf + 9, in_source, length); - source = source_buf; - length += 9; + source_scm_vv = (unsigned char *) z_alloca(segs[0].length + 9); + sprintf((char *) source_scm_vv, "[)>\03601\035%02d", scm_vv); /* [)>\R01\Gvv */ + memcpy(source_scm_vv + 9, segs[0].source, segs[0].length); + segs[0].source = source_scm_vv; + segs[0].length += 9; + have_eci_scm = segs[0].eci; + } else if (segs[0].length >= 9 && memcmp(segs[0].source, "[)>\03601\035", 7) == 0 + && z_isdigit(segs[0].source[7]) && z_isdigit(segs[0].source[8])) { + have_eci_scm = segs[0].eci; } - for (i = 0; i < length; i++) { - /* Look up characters in table from Appendix A - this gives - value and code set for most characters */ - set[sp + i] = maxiCodeSet[source[i]]; - character[sp + i] = maxiSymbolChar[source[i]]; - } - - /* If a character can be represented in more than one code set, - pick which version to use */ - if (set[sp + 0] == 0) { - if (character[sp + 0] == 13) { - character[sp + 0] = 0; - } - set[sp + 0] = 1; - } - - for (i = 1; i < length; i++) { - if (set[sp + i] == 0) { - /* Special character */ - if (character[sp + i] == 13) { - /* Carriage Return */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set15, 2); - if (set[sp + i] == 5) { - character[sp + i] = 13; - } else { - character[sp + i] = 0; - } - - } else if (character[sp + i] == 28) { - /* FS */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12345, 5); - if (set[sp + i] == 5) { - character[sp + i] = 32; - } - - } else if (character[sp + i] == 29) { - /* GS */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12345, 5); - if (set[sp + i] == 5) { - character[sp + i] = 33; - } - - } else if (character[sp + i] == 30) { - /* RS */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12345, 5); - if (set[sp + i] == 5) { - character[sp + i] = 34; - } - - } else if (character[sp + i] == 32) { - /* Space */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12345, 5); - if (set[sp + i] == 1) { - character[sp + i] = 32; - } else if (set[sp + i] == 2) { - character[sp + i] = 47; - } else { - character[sp + i] = 59; - } - - } else if (character[sp + i] == 44) { - /* Comma */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12, 2); - if (set[sp + i] == 2) { - character[sp + i] = 48; - } - - } else if (character[sp + i] == 46) { - /* Full Stop */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12, 2); - if (set[sp + i] == 2) { - character[sp + i] = 49; - } - - } else if (character[sp + i] == 47) { - /* Slash */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12, 2); - if (set[sp + i] == 2) { - character[sp + i] = 50; - } - - } else if (character[sp + i] == 58) { - /* Colon */ - set[sp + i] = maxi_bestSurroundingSet(i, length, set, sp, set12, 2); - if (set[sp + i] == 2) { - character[sp + i] = 51; - } - } - } - } - - /* Find candidates for number compression */ - /* Note the prohibition on number compression in the primary message in ISO/IEC 16023:2000 B.1 (1) - applies to modes 2 & 3 only */ - count = 0; - for (i = 0; sp + i < 144 && sp + i < length; i++) { - if ((set[sp + i] == 1) && ((character[sp + i] >= 48) && (character[sp + i] <= 57))) { - /* Character is a number */ - count++; - if (count == 9) { - /* Nine digits in a row can be compressed */ - memset(set + sp + i - 8, 6, 9); /* Set set of nine digits to 6 */ - count = 0; -#ifndef NDEBUG - ns_count1++; -#endif - } - } else { - count = 0; - } - } - - /* Add shift and latch characters */ - for (i = 0; sp + i < 144 && set[sp + i] != 255; i++) { - - if ((set[sp + i] != current_set) && (set[sp + i] != 6)) { - switch (set[sp + i]) { - case 1: - if (current_set == 2) { /* Set B */ - if (sp + i + 1 < 144 && set[sp + i + 1] == 1) { - if (sp + i + 2 < 144 && set[sp + i + 2] == 1) { - if (sp + i + 3 < 144 && set[sp + i + 3] == 1) { - /* Latch A */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 63; /* Set B Latch A */ - current_set = 1; - i += 3; /* Next 3 Set A so skip over */ - if (debug_print) fputs("LCHA ", stdout); - } else { - /* 3 Shift A */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 57; /* Set B triple shift A */ - i += 2; /* Next 2 Set A so skip over */ - if (debug_print) fputs("3SHA ", stdout); - } - } else { - /* 2 Shift A */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 56; /* Set B double shift A */ - i++; /* Next Set A so skip over */ - if (debug_print) fputs("2SHA ", stdout); - } - } else { - /* Shift A */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 59; /* Set A Shift B */ - if (debug_print) fputs("SHA ", stdout); - } - } else { /* All sets other than B only have latch */ - /* Latch A */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 58; /* Sets C,D,E Latch A */ - current_set = 1; - if (debug_print) fputs("LCHA ", stdout); - } - break; - case 2: /* Set B */ - /* If not Set A or next Set B */ - if (current_set != 1 || (sp + i + 1 < 144 && set[sp + i + 1] == 2)) { - /* Latch B */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 63; /* Sets A,C,D,E Latch B */ - current_set = 2; - if (debug_print) fputs("LCHB ", stdout); - } else { /* Only available from Set A */ - /* Shift B */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 59; /* Set B Shift A */ - if (debug_print) fputs("SHB ", stdout); - } - break; - case 3: /* Set C */ - case 4: /* Set D */ - case 5: /* Set E */ - /* If first and next 3 same set, or not first and previous and next 2 same set */ - if ((sp + i == 0 && sp + i + 3 < 144 && set[sp + i + 1] == set[sp + i] - && set[sp + i + 2] == set[sp + i] && set[sp + i + 3] == set[sp + i]) - || (sp + i > 0 && set[sp + i - 1] == set[sp + i] && sp + i + 2 < 144 - && set[sp + i + 1] == set[sp + i] && set[sp + i + 2] == set[sp + i])) { - /* Lock in C/D/E */ - if (sp + i == 0) { - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 60 + set[sp + i] - 3; - i++; /* Extra bump */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 60 + set[sp + i] - 3; - i += 3; /* Next 3 same set so skip over */ - } else { - /* Add single Shift to previous Shift */ - maxi_bump(set, character, sp + i - 1, &length); - character[sp + i - 1] = 60 + set[sp + i] - 3; - i += 2; /* Next 2 same set so skip over */ - } - current_set = set[sp + i]; - if (debug_print) printf("LCK%c ", 'C' + set[sp + i] - 3); - } else { - /* Shift C/D/E */ - maxi_bump(set, character, sp + i, &length); - character[sp + i] = 60 + set[sp + i] - 3; - if (debug_print) printf("SH%c ", 'C' + set[sp + i] - 3); - } - break; - } - i++; /* Allow for bump */ - } - } - - /* Number compression has not been forgotten! - It's handled below */ - for (i = 0; sp + i < 144 && sp + i <= length - 9; i++) { - if (set[sp + i] == 6) { - /* Number compression */ - int value = to_int(character + sp + i, 9); - - character[sp + i] = 31; /* NS */ - character[sp + i + 1] = (value & 0x3f000000) >> 24; - character[sp + i + 2] = (value & 0xfc0000) >> 18; - character[sp + i + 3] = (value & 0x3f000) >> 12; - character[sp + i + 4] = (value & 0xfc0) >> 6; - character[sp + i + 5] = (value & 0x3f); - - memmove(set + sp + i + 6, set + sp + i + 9, 144 - (sp + i + 9)); - memmove(character + sp + i + 6, character + sp + i + 9, 144 - (sp + i + 9)); - i += 5; - length -= 3; -#ifndef NDEBUG - ns_count2++; -#endif - } - } - assert(ns_count1 == ns_count2); - - *p_sp = sp + length; - - return current_set; -} - -/* Call `maxi_text_process()` for each segment, dealing with Structured Append beforehand and populating - `maxi_codeword` afterwards */ -static int maxi_text_process_segs(unsigned char maxi_codeword[144], const int mode, const struct zint_seg segs[], - const int seg_count, const int structapp_cw, int scm_vv, const int debug_print) { - unsigned char set[144], character[144] = {0}; - int i; - int sp = 0; - int current_set = 1; /* Initial Code Set A */ - int padding_set = 0, padding_char = 0; /* Suppress clang-tidy-20 warnings */ - const int max_length = mode == 5 ? 77 : mode <= 3 ? 84 : 93; - - memset(set, 255, 144); - /* Insert Structured Append at beginning if needed */ if (structapp_cw) { - character[sp++] = 33; /* PAD */ - character[sp++] = structapp_cw; + codewords[cp++] = 33; /* PAD */ + codewords[cp++] = structapp_cw; } - for (i = 0; i < seg_count; i++) { - current_set = maxi_text_process(set, character, segs[i].source, segs[i].length, segs[i].eci, scm_vv, &sp, - current_set, debug_print); - if (current_set == 0) { - return ZINT_ERROR_TOO_LONG; + /* Make a table of best path options */ + ci = cp; + for (seg = 0; seg < seg_count; seg++) { + /* Suppress NS compaction for SCM prefix if have ECI so can place ECI after it when encoding */ + const int no_eci_scm_check = !have_eci_scm || seg != 0; + const unsigned char *const source = segs[seg].source; + const int length = segs[seg].length; + const int eci_len = mx_eci_len(segs[seg].eci); + if (eci_len) { + ci += eci_len; + if (ci > max_len) { + return ZINT_ERROR_TOO_LONG; + } + digits = 0; } - scm_vv = -1; - } - /* If end in Code Set C or D, switch to A for padding */ - if (sp < max_length && (current_set == 3 || current_set == 4)) { - set[sp] = 1; - character[sp] = 58; /* Sets C,D Latch A */ - sp++; - current_set = 1; - if (debug_print) fputs("LCHA ", stdout); - } + for (i = 0; i < length; i++) { + const unsigned char ch = source[i]; + const int si_i = i + si; - if (debug_print) { - if (sp < max_length) { - printf("\nPads (%d)\n", max_length - sp); - } else { - fputs("\nNo Pads\n", stdout); + /* Get rows of interest */ + unsigned char *const path_op = path_ops[si_i]; + char *const prior_code_set = prior_code_sets[si_i]; + char *const best_origin = best_origins[(si_i) & 0x0F]; + best_length = best_lengths[(si_i) & 0x0F]; + + /* Keep tabs on digits and characters in Code Set A */ + digits = z_isdigit(ch) && (no_eci_scm_check || i >= 9) ? digits + 1 : 0; + num_a = maxiCodeSet[ch] & MX_OP_SETA ? num_a + 1 : 0; + + /* Get best encoded lengths, then best prior Code Sets */ + for (state = 0; state < MX_STATES; state++) { + best_length[state] = mx_get_best_length(state, si_i, ch, digits, num_a, best_lengths, best_origins, + path_op, prior_code_set); + } + for (state = 0; state < MX_STATES; state++) { + best_origin[state] = mx_get_best_origin(state, best_length); + } + } + si += length; + } + assert(best_length == best_lengths[(segs_len + 9 * (scm_vv != -1) - 1) & 0x0F]); /* Set to last char */ + + /* Get the best Code Set to end with */ + for (state = 0; state < MX_STATES; state++) { + const int len = best_length[state]; + if (len < min_len) { + min_state = state; + min_len = len; } } - - if (sp < max_length) { - padding_set = current_set == 5 ? 5 : current_set == 2 ? 2 : 1; - padding_char = current_set == 5 ? 28 : 33; - for (; sp < max_length; sp++) { - /* Add the padding */ - set[sp] = padding_set; - character[sp] = padding_char; - } - } - - if (debug_print) printf("Length: %d\n", sp); - - if (sp > max_length) { + if (ci + min_len > max_len) { return ZINT_ERROR_TOO_LONG; } - /* Copy the encoded text into the codeword array */ - if ((mode == 2) || (mode == 3)) { - for (i = 0; i < 84; i++) { /* secondary only */ - maxi_codeword[i + 20] = character[i]; - } + /* Follow the best path back to the start of the message */ + ci += min_len; + ci_top = ci; + state = min_state; + for (seg = seg_count - 1; seg >= 0; seg--) { + const unsigned char *const source = segs[seg].source; + const int length = segs[seg].length; + const int eci_scm_check = have_eci_scm && seg == 0; - } else if ((mode == 4) || (mode == 6)) { - for (i = 0; i < 9; i++) { /* primary */ - maxi_codeword[i + 1] = character[i]; - } - for (i = 0; i < 84; i++) { /* secondary */ - maxi_codeword[i + 20] = character[i + 9]; - } + si -= length; + assert(si >= 0); - } else { /* Mode 5 */ - for (i = 0; i < 9; i++) { /* primary */ - maxi_codeword[i + 1] = character[i]; + i = length; + while (i > 0) { + const int ch_i = (i + si) - 1; + const int pcs = prior_code_sets[ch_i][state]; + const int op_idx = path_ops[ch_i][state]; + const struct mx_op *const op = &mx_op_tab[op_idx]; + + if (eci_scm_check && i == 9) { /* Place ECI after SCM prefix */ + assert(ci >= cp + mx_eci_len(segs[0].eci)); + ci = mx_enc_eci(segs[0].eci, codewords, ci); + segs[0].eci = 0; + } + + i -= op->intake; + assert(i >= 0); + ci = mx_enc(codewords, ci, source, i, op->op); + + if (state != pcs) { + const int latch_len = mx_latch_len[state][pcs]; + assert(ci >= cp + latch_len); + for (j = 0; j < latch_len; j++) { + codewords[--ci] = mx_latch_seq[state][pcs][j]; + } + state = pcs; + } } - for (i = 0; i < 68; i++) { /* secondary */ - maxi_codeword[i + 20] = character[i + 9]; + if (segs[seg].eci) { + assert(ci >= cp + mx_eci_len(segs[seg].eci)); + ci = mx_enc_eci(segs[seg].eci, codewords, ci); } } + assert(ci == cp); + + cp = ci_top; + + /* If end in Code Set C or D, switch to A for padding */ + if (cp < max_len && (min_state == MX_C || min_state == MX_D)) { + codewords[cp++] = 58; /* Latch A */ + } + + if (debug_print) { + if (cp < max_len) { + printf("Pads: %d\n", max_len - cp); + } else { + fputs("No Pads\n", stdout); + } + } + + if (cp < max_len) { + /* Add the padding */ + memset(codewords + cp, min_state == MX_E ? 28 : 33, max_len - cp); + } + + if (debug_print) printf("Length: %d\n", cp); + + if (cp > max_len) { + return ZINT_ERROR_TOO_LONG; + } + + /* Adjust the codeword array */ + if (mode > 3) { + memcpy(codewords + 1, codewords + 20 - 9, 9); /* Primary */ + } return 0; } +/* Handles error correction of primary message */ +static void mx_do_primary_ecc(unsigned char codewords[144]) { + const int datalen = 10, eclen = 10; + unsigned char ecc[10]; + int j; + rs_t rs; + + rs_init_gf(&rs, 0x43); + rs_init_code(&rs, eclen, 1); + + rs_encode(&rs, datalen, codewords, ecc); + + for (j = 0; j < eclen; j++) { + codewords[datalen + j] = ecc[j]; + } +} + +/* Handles error correction of characters in secondary */ +static void mx_do_secondary_ecc(unsigned char codewords[144], const int datalen, const int eclen) { + unsigned char data[42]; /* Half max `datalen` (84) */ + unsigned char ecc[28]; /* Half max `eclen` (56) */ + int j; + rs_t rs; + + rs_init_gf(&rs, 0x43); + rs_init_code(&rs, eclen, 1); + + /* Even */ + for (j = 0; j < datalen; j += 2) { + data[j >> 1] = codewords[j + 20]; + } + + rs_encode(&rs, datalen >> 1, data, ecc); + + for (j = 0; j < eclen; j++) { + codewords[datalen + (j << 1) + 20] = ecc[j]; + } + + /* Odd */ + for (j = 0; j < datalen; j += 2) { + data[j >> 1] = codewords[j + 1 + 20]; + } + + rs_encode(&rs, datalen >> 1, data, ecc); + + for (j = 0; j < eclen; j++) { + codewords[datalen + (j << 1) + 1 + 20] = ecc[j]; + } +} + /* Format structured primary for Mode 2 */ -static void maxi_do_primary_2(unsigned char maxi_codeword[144], const unsigned char postcode[], +static void mx_do_primary_2(unsigned char codewords[144], const unsigned char postcode[], const int postcode_length, const int country, const int service) { - int postcode_num; - postcode_num = to_int(postcode, postcode_length); + const int postcode_num = to_int(postcode, postcode_length); - maxi_codeword[0] = ((postcode_num & 0x03) << 4) | 2; - maxi_codeword[1] = ((postcode_num & 0xfc) >> 2); - maxi_codeword[2] = ((postcode_num & 0x3f00) >> 8); - maxi_codeword[3] = ((postcode_num & 0xfc000) >> 14); - maxi_codeword[4] = ((postcode_num & 0x3f00000) >> 20); - maxi_codeword[5] = ((postcode_num & 0x3c000000) >> 26) | ((postcode_length & 0x3) << 4); - maxi_codeword[6] = ((postcode_length & 0x3c) >> 2) | ((country & 0x3) << 4); - maxi_codeword[7] = (country & 0xfc) >> 2; - maxi_codeword[8] = ((country & 0x300) >> 8) | ((service & 0xf) << 2); - maxi_codeword[9] = ((service & 0x3f0) >> 4); + codewords[0] = ((postcode_num & 0x03) << 4) | 2; + codewords[1] = ((postcode_num & 0xFC) >> 2); + codewords[2] = ((postcode_num & 0x3F00) >> 8); + codewords[3] = ((postcode_num & 0xFC000) >> 14); + codewords[4] = ((postcode_num & 0x3F00000) >> 20); + codewords[5] = ((postcode_num & 0x3C000000) >> 26) | ((postcode_length & 0x03) << 4); + codewords[6] = ((postcode_length & 0x3C) >> 2) | ((country & 0x03) << 4); + codewords[7] = (country & 0xFC) >> 2; + codewords[8] = ((country & 0x300) >> 8) | ((service & 0x0F) << 2); + codewords[9] = ((service & 0x3F0) >> 4); } /* Format structured primary for Mode 3 */ -static void maxi_do_primary_3(unsigned char maxi_codeword[144], unsigned char postcode[], const int country, +static void mx_do_primary_3(unsigned char codewords[144], unsigned char postcode[], const int country, const int service) { int i; @@ -549,22 +537,22 @@ static void maxi_do_primary_3(unsigned char maxi_codeword[144], unsigned char po postcode[i] = maxiSymbolChar[postcode[i]]; } - maxi_codeword[0] = ((postcode[5] & 0x03) << 4) | 3; - maxi_codeword[1] = ((postcode[4] & 0x03) << 4) | ((postcode[5] & 0x3c) >> 2); - maxi_codeword[2] = ((postcode[3] & 0x03) << 4) | ((postcode[4] & 0x3c) >> 2); - maxi_codeword[3] = ((postcode[2] & 0x03) << 4) | ((postcode[3] & 0x3c) >> 2); - maxi_codeword[4] = ((postcode[1] & 0x03) << 4) | ((postcode[2] & 0x3c) >> 2); - maxi_codeword[5] = ((postcode[0] & 0x03) << 4) | ((postcode[1] & 0x3c) >> 2); - maxi_codeword[6] = ((postcode[0] & 0x3c) >> 2) | ((country & 0x3) << 4); - maxi_codeword[7] = (country & 0xfc) >> 2; - maxi_codeword[8] = ((country & 0x300) >> 8) | ((service & 0xf) << 2); - maxi_codeword[9] = ((service & 0x3f0) >> 4); + codewords[0] = ((postcode[5] & 0x03) << 4) | 3; + codewords[1] = ((postcode[4] & 0x03) << 4) | ((postcode[5] & 0x3C) >> 2); + codewords[2] = ((postcode[3] & 0x03) << 4) | ((postcode[4] & 0x3C) >> 2); + codewords[3] = ((postcode[2] & 0x03) << 4) | ((postcode[3] & 0x3C) >> 2); + codewords[4] = ((postcode[1] & 0x03) << 4) | ((postcode[2] & 0x3C) >> 2); + codewords[5] = ((postcode[0] & 0x03) << 4) | ((postcode[1] & 0x3C) >> 2); + codewords[6] = ((postcode[0] & 0x3C) >> 2) | ((country & 0x03) << 4); + codewords[7] = (country & 0xFC) >> 2; + codewords[8] = ((country & 0x300) >> 8) | ((service & 0x0F) << 2); + codewords[9] = ((service & 0x3F0) >> 4); } INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const int seg_count) { - int i, j, block, shift, mode, lp = 0; - int error_number, eclen; - unsigned char maxi_codeword[144] = {0}; + int i, j, mode, lp = 0; + int error_number; + unsigned char codewords[144]; int scm_vv = -1; int structapp_cw = 0; const int debug_print = symbol->debug & ZINT_DEBUG_PRINT; @@ -589,11 +577,11 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const } } - if ((mode < 2) || (mode > 6)) { /* Only codes 2 to 6 supported */ + if (mode < 2 || mode > 6) { /* Only codes 2 to 6 supported */ return errtxtf(ZINT_ERROR_INVALID_OPTION, symbol, 550, "Mode '%d' out of range (2 to 6)", mode); } - if ((mode == 2) || (mode == 3)) { /* Modes 2 and 3 need data in symbol->primary */ + if (mode <= 3) { /* Modes 2 and 3 need data in symbol->primary */ unsigned char postcode[10]; int countrycode; int service; @@ -613,7 +601,7 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const countrycode = to_int((const unsigned char *) (symbol->primary + postcode_len), 3); service = to_int((const unsigned char *) (symbol->primary + postcode_len + 3), 3); - if (countrycode == -1 || service == -1) { /* check that country code and service are numeric */ + if (countrycode == -1 || service == -1) { /* Check that country code and service are numeric */ return errtxt(ZINT_ERROR_INVALID_DATA, symbol, 552, "Non-numeric country code or service class in Primary Message"); } @@ -627,7 +615,8 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const postcode[i] = '\0'; postcode_len = i; break; - } else if (!z_isdigit(postcode[i])) { + } + if (!z_isdigit(postcode[i])) { return errtxt(ZINT_ERROR_INVALID_DATA, symbol, 555, "Non-numeric postcode in Primary Message"); } } @@ -637,7 +626,7 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const memcpy(postcode + 5, "0000", 5); /* Include NUL char */ postcode_len = 9; } - maxi_do_primary_2(maxi_codeword, postcode, postcode_len, countrycode, service); + mx_do_primary_2(codewords, postcode, postcode_len, countrycode, service); } else { /* Just truncate and space-pad */ postcode[6] = '\0'; @@ -647,13 +636,13 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const /* Upper-case and check for Code Set A characters only */ to_upper(postcode, postcode_len); for (i = 0; i < 6; i++) { - /* Don't allow Code Set A control characters CR, RS, GS and RS */ - if (postcode[i] < ' ' || maxiCodeSet[postcode[i]] > 1) { + /* Don't allow control chars (CR FS GS RS for Code Set A) */ + if (postcode[i] < ' ' || !(maxiCodeSet[postcode[i]] & MX_OP_SETA)) { return errtxt(ZINT_ERROR_INVALID_DATA, symbol, 556, "Invalid character in postcode in Primary Message"); } } - maxi_do_primary_3(maxi_codeword, postcode, countrycode, service); + mx_do_primary_3(codewords, postcode, countrycode, service); } if (symbol->option_2) { /* Check for option_2 = vv + 1, where vv is version of SCM prefix "[)>\R01\Gvv" */ @@ -661,6 +650,10 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const return errtxtf(ZINT_ERROR_INVALID_OPTION, symbol, 557, "SCM prefix version '%d' out of range (1 to 100)", symbol->option_2); } + if (symbol->eci == 25 || (symbol->eci >= 33 && symbol->eci <= 35)) { /* UTF-16/32 */ + return errtxtf(ZINT_ERROR_INVALID_OPTION, symbol, 547, + "SCM prefix can not be used with ECI %d (ECI must be ASCII compatible)", symbol->eci); + } scm_vv = symbol->option_2 - 1; } @@ -668,7 +661,7 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const printf("Postcode: %s, Country Code: %d, Service Class: %d\n", postcode, countrycode, service); } } else { - maxi_codeword[0] = mode; + codewords[0] = mode; } if (debug_print) { @@ -691,42 +684,41 @@ INTERNAL int maxicode(struct zint_symbol *symbol, struct zint_seg segs[], const structapp_cw = (symbol->structapp.count - 1) | ((symbol->structapp.index - 1) << 3); } - error_number = maxi_text_process_segs(maxi_codeword, mode, segs, seg_count, structapp_cw, scm_vv, debug_print); + error_number = mx_text_process_segs(codewords, mode, segs, seg_count, structapp_cw, scm_vv, debug_print); if (error_number == ZINT_ERROR_TOO_LONG) { return errtxt(error_number, symbol, 553, "Input too long, requires too many codewords (maximum 144)"); } /* All the data is sorted - now do error correction */ - maxi_do_primary_check(maxi_codeword); /* always EEC */ + mx_do_primary_ecc(codewords); /* Always Enhanced ECC (EEC) 10 data + 10 error correction */ - if (mode == 5) - eclen = 56; /* 68 data codewords , 56 error corrections */ - else - eclen = 40; /* 84 data codewords, 40 error corrections */ - - maxi_do_secondary_chk_even(maxi_codeword, eclen / 2); /* do error correction of even */ - maxi_do_secondary_chk_odd(maxi_codeword, eclen / 2); /* do error correction of odd */ + if (mode == 5) { + /* Enhanced ECC (EEC) 68 data + 56 error correction */ + mx_do_secondary_ecc(codewords, 68, 28); /* ECC halved for even/odd */ + } else { + /* Standard ECC (SEC) 84 data + 40 error correction */ + mx_do_secondary_ecc(codewords, 84, 20); /* ECC halved for even/odd */ + } if (debug_print) { fputs("Codewords:", stdout); - for (i = 0; i < 144; i++) printf(" %d", maxi_codeword[i]); + for (i = 0; i < 144; i++) printf(" %d", codewords[i]); fputc('\n', stdout); } #ifdef ZINT_TEST if (symbol->debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump(symbol, maxi_codeword, 144); + debug_test_codeword_dump(symbol, codewords, 144); } #endif /* Copy data into symbol grid */ for (i = 0; i < 33; i++) { for (j = 0; j < 30; j++) { - block = (MaxiGrid[(i * 30) + j] + 5) / 6; + const int mod_seq = maxiGrid[(i * 30) + j] + 5; + const int block = mod_seq / 6; if (block != 0) { - shift = 5 - ((MaxiGrid[(i * 30) + j] + 5) % 6); - - if ((maxi_codeword[block - 1] >> shift) & 0x1) { + if ((codewords[block - 1] >> (5 - (mod_seq % 6))) & 1) { set_module(symbol, i, j); } } diff --git a/backend/maxicode.h b/backend/maxicode.h index f280a607..aefa8046 100644 --- a/backend/maxicode.h +++ b/backend/maxicode.h @@ -1,7 +1,7 @@ /* maxicode.h - Handles Maxicode */ /* libzint - the open source barcode library - Copyright (C) 2008-2022 Robin Stuart + Copyright (C) 2008-2024 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -33,9 +33,9 @@ #ifndef Z_MAXICODE_H #define Z_MAXICODE_H -static const unsigned short MaxiGrid[] = { - /* ISO/IEC 16023 Figure 5 - MaxiCode Module Sequence */ /* 30 x 33 data grid */ - 122, 121, 128, 127, 134, 133, 140, 139, 146, 145, 152, 151, 158, 157, 164, 163, 170, 169, 176, 175, 182, 181, 188, 187, 194, 193, 200, 199, 0, 0, +/* ISO/IEC 16023 Figure 5 - MaxiCode Module Sequence */ +static const unsigned short maxiGrid[] = { /* 33 x 30 data grid */ + 122, 121, 128, 127, 134, 133, 140, 139, 146, 145, 152, 151, 158, 157, 164, 163, 170, 169, 176, 175, 182, 181, 188, 187, 194, 193, 200, 199, 0, 0, 124, 123, 130, 129, 136, 135, 142, 141, 148, 147, 154, 153, 160, 159, 166, 165, 172, 171, 178, 177, 184, 183, 190, 189, 196, 195, 202, 201, 817, 0, 126, 125, 132, 131, 138, 137, 144, 143, 150, 149, 156, 155, 162, 161, 168, 167, 174, 173, 180, 179, 186, 185, 192, 191, 198, 197, 204, 203, 819, 818, 284, 283, 278, 277, 272, 271, 266, 265, 260, 259, 254, 253, 248, 247, 242, 241, 236, 235, 230, 229, 224, 223, 218, 217, 212, 211, 206, 205, 820, 0, @@ -70,39 +70,49 @@ static const unsigned short MaxiGrid[] = { 738, 737, 744, 743, 750, 749, 756, 755, 762, 761, 768, 767, 774, 773, 780, 779, 786, 785, 792, 791, 798, 797, 804, 803, 810, 809, 816, 815, 864, 863 }; +/* From Appendix A - ASCII character to Code Set bit flag (MX_OP_SETX): A 0x01; B 0x02; E 0x04; C 0x08; D 0x10 */ +/* Chars that fit in more than one set have flags OR-ed together: A/E "CR"; All "FS GS RS SP"; A/B ",./:" */ static const char maxiCodeSet[256] = { - /* from Appendix A - ASCII character to Code Set (e.g. 2 = Set B) */ - /* set 0 refers to special characters that fit into more than one set (e.g. GS) */ - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 0, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 4, 5, 5, 5, 5, 5, 5, 4, 5, 3, 4, 3, 5, 5, 4, 4, 3, 3, 3, - 4, 3, 5, 4, 4, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 + /* CR */ + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, /* 0- 15 */ + /* FS GS RS */ + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1F, 0x1F, 0x1F, 0x04, /* 16- 31 */ + /*SP , . / */ + 0x1F, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03, 0x03, /* 32- 47 */ + /* : */ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, /* 48- 63 */ + 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, /* 64- 79 */ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, /* 80- 95 */ + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 96-111 */ + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 112-127 */ + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, /* 128-143 */ + 0x10, 0x10, 0x10, 0x10, 0x10, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, /* 144-159 */ + 0x04, 0x10, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x10, 0x04, 0x08, 0x10, 0x08, 0x04, 0x04, 0x10, /* 160-175 */ + 0x10, 0x08, 0x08, 0x08, 0x10, 0x08, 0x04, 0x10, 0x10, 0x08, 0x08, 0x10, 0x08, 0x08, 0x08, 0x10, /* 176-191 */ + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, /* 192-207 */ + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, /* 208-223 */ + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, /* 224-249 */ + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 /* 250-255 */ }; +/* From Appendix A - ASCII character to symbol value. For those in multiple sets, Code A value */ static const char maxiSymbolChar[256] = { - /* from Appendix A - ASCII character to symbol value */ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 30, 28, 29, 30, 35, 32, 53, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 37, - 38, 39, 40, 41, 52, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 42, 43, 44, 45, 46, 0, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 32, 54, 34, 35, 36, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 36, - 37, 37, 38, 39, 40, 41, 42, 43, 38, 44, 37, 39, 38, 45, 46, 40, 41, 39, 40, 41, - 42, 42, 47, 43, 44, 43, 44, 45, 45, 46, 47, 46, 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, - 33, 34, 35, 36, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 14, 15, /* 0- 15 */ + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 28, 29, 30, 35, /* 16- 31 */ + 32, 53, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 32- 47 */ + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 37, 38, 39, 40, 41, /* 48- 63 */ + 52, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 64- 79 */ + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 42, 43, 44, 45, 46, /* 80- 95 */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 96-111 */ + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 54, 34, 35, 36, /* 112-127 */ + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 47, 48, 49, 50, 51, 52, /* 128-143 */ + 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 36, /* 144-159 */ + 37, 37, 38, 39, 40, 41, 42, 43, 38, 44, 37, 39, 38, 45, 46, 40, /* 160-175 */ + 41, 39, 40, 41, 42, 42, 47, 43, 44, 43, 44, 45, 45, 46, 47, 46, /* 176-191 */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 192-207 */ + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36, /* 208-223 */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 224-249 */ + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36 /* 250-255 */ }; /* vim: set ts=4 sw=4 et : */ diff --git a/backend/qr.c b/backend/qr.c index 39425e2b..4671c2b6 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -839,7 +839,7 @@ static void qr_add_ecc(unsigned char fullstream[], const unsigned char datastrea } fputs(" // ", stdout); for (j = 0; j < ecc_block_length; j++) { - printf("%2X ", ecc_block[ecc_block_length - j - 1]); + printf("%2X ", ecc_block[j]); } fputc('\n', stdout); } @@ -855,7 +855,7 @@ static void qr_add_ecc(unsigned char fullstream[], const unsigned char datastrea } for (j = 0; j < ecc_block_length; j++) { - interleaved_ecc[(j * blocks) + i] = ecc_block[ecc_block_length - j - 1]; + interleaved_ecc[(j * blocks) + i] = ecc_block[j]; } in_posn += length_this_block; @@ -1955,7 +1955,7 @@ static int microqr_end(struct zint_symbol *symbol, char binary_data[], int bp, c /* Add Reed-Solomon codewords to binary data */ for (i = 0; i < ecc_codewords; i++) { - bp = bin_append_posn(ecc_blocks[ecc_codewords - i - 1], 8, binary_data, bp); + bp = bin_append_posn(ecc_blocks[i], 8, binary_data, bp); } return bp; diff --git a/backend/reedsol.c b/backend/reedsol.c index 5a0da23d..de8e47df 100644 --- a/backend/reedsol.c +++ b/backend/reedsol.c @@ -132,8 +132,7 @@ INTERNAL void rs_init_code(rs_t *rs, const int nsym, int index) { } } -/* rs_encode(&rs, datalen, data, res) generates nsym Reed-Solomon codes (nsym as given in rs_init_code()) - * and places them in reverse order in res */ +/* rs_encode(&rs, datalen, data, res) generates nsym Reed-Solomon codes (nsym as given in rs_init_code()) */ INTERNAL void rs_encode(const rs_t *rs, const int datalen, const unsigned char *data, unsigned char *res) { int i, k; const unsigned char *const logt = rs->logt; @@ -141,6 +140,7 @@ INTERNAL void rs_encode(const rs_t *rs, const int datalen, const unsigned char * const unsigned char *const rspoly = rs->rspoly; const unsigned char *const log_rspoly = rs->log_rspoly; const int nsym = rs->nsym; + const int nsym_halved = nsym >> 1; memset(res, 0, nsym); if (rs->zero) { /* Poly has a zero coeff so need to check in inner loop */ @@ -175,6 +175,12 @@ INTERNAL void rs_encode(const rs_t *rs, const int datalen, const unsigned char * } } } + /* Reverse the result */ + for (i = 0; i < nsym_halved; i++) { + const unsigned char tmp = res[i]; + res[i] = res[nsym - 1 - i]; + res[nsym - 1 - i] = tmp; + } } /* The same as above but for unsigned int data and result - Aztec code compatible */ @@ -186,6 +192,7 @@ INTERNAL void rs_encode_uint(const rs_t *rs, const int datalen, const unsigned i const unsigned char *const rspoly = rs->rspoly; const unsigned char *const log_rspoly = rs->log_rspoly; const int nsym = rs->nsym; + const int nsym_halved = nsym >> 1; memset(res, 0, sizeof(unsigned int) * nsym); if (rs->zero) { /* Poly has a zero coeff so need to check in inner loop */ @@ -220,6 +227,12 @@ INTERNAL void rs_encode_uint(const rs_t *rs, const int datalen, const unsigned i } } } + /* Reverse the result */ + for (i = 0; i < nsym_halved; i++) { + const unsigned int tmp = res[i]; + res[i] = res[nsym - 1 - i]; + res[nsym - 1 - i] = tmp; + } } /* Versions of the above for bitlengths > 8 and <= 30 and unsigned int data and results - Aztec code compatible */ @@ -303,6 +316,7 @@ INTERNAL void rs_uint_encode(const rs_uint_t *rs_uint, const int datalen, const const unsigned short *const rspoly = rs_uint->rspoly; const unsigned int *const log_rspoly = rs_uint->log_rspoly; const int nsym = rs_uint->nsym; + const int nsym_halved = nsym >> 1; memset(res, 0, sizeof(unsigned int) * nsym); if (logt == NULL || alog == NULL) { @@ -340,6 +354,12 @@ INTERNAL void rs_uint_encode(const rs_uint_t *rs_uint, const int datalen, const } } } + /* Reverse the result */ + for (i = 0; i < nsym_halved; i++) { + const unsigned int tmp = res[i]; + res[i] = res[nsym - 1 - i]; + res[nsym - 1 - i] = tmp; + } } INTERNAL void rs_uint_free(rs_uint_t *rs_uint) { diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index aadab815..276fa2a9 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -620,7 +620,7 @@ static void test_escape_char_process(const testCtx *const p_ctx) { /* 3*/ { BARCODE_DOTCODE, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\", "", 0, 28, "65 40 44 47 48 49 4A 4B 4C 4D 5B 5D 5E 6E 41 3C 6A", 0, "" }, /* 4*/ { BARCODE_GRIDMATRIX, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\", "", 0, 30, "30 1A 00 02 01 61 00 48 28 16 0C 06 46 63 51 74 05 38 00", 0, "" }, /* 5*/ { BARCODE_HANXIN, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\", "", 0, 23, "2F 80 10 72 09 28 B3 0D 6F F3 00 20 E8 F4 0A E0 00", 0, "" }, - /* 6*/ { BARCODE_MAXICODE, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\", "", 0, 30, "(144) 04 3E 3E 00 04 07 08 09 0A 0B 03 3D 2C 24 19 1E 23 1B 18 0E 0C 0D 1E 21 3C 1E 3C 31", 0, "" }, + /* 6*/ { BARCODE_MAXICODE, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\", "", 0, 30, "(144) 04 3E 3E 00 04 07 08 09 0A 0B 03 3D 2C 24 19 1E 23 1B 18 0E 0C 0D 1E 3F 1D 1E 3C 31", 0, "" }, /* 7*/ { BARCODE_PDF417, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\", "", 0, 120, "(24) 16 901 0 23 655 318 98 18 461 639 893 122 129 92 900 900 872 438 359 646 522 773 831", 0, "" }, /* 8*/ { BARCODE_ULTRA, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\", "", 0, 20, "(15) 257 0 4 7 8 9 10 11 12 13 27 29 30 129 92", 0, "" }, /* 9*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\d129\\o201\\\\", "", 0, 18, "(32) 01 05 08 09 0A 0B 0C 0D 0E 1C 1E 1F E7 32 45 DB 70 5D E3 16 7B 2B 44 60 E1 55 F7 08", 0, "" }, diff --git a/backend/tests/test_maxicode.c b/backend/tests/test_maxicode.c index 29e143ed..1e099ac3 100644 --- a/backend/tests/test_maxicode.c +++ b/backend/tests/test_maxicode.c @@ -48,7 +48,7 @@ static void test_large(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { -1, -1, "1", 138, "", 0, 33, 30, 0, "Mode 4 (138 agrees with ISO/IEC 16023:2000); BWIPP different encodation (begins with ASCII digits then NSes)" }, + /* 0*/ { -1, -1, "1", 138, "", 0, 33, 30, 1, "Mode 4 (138 agrees with ISO/IEC 16023:2000)" }, /* 1*/ { -1, -1, "1", 139, "", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 2*/ { -1, -1, "1", 144, "", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 3*/ { -1, -1, "1", 145, "", ZINT_ERROR_TOO_LONG, -1, -1, 1, "Absolute max" }, @@ -62,24 +62,24 @@ static void test_large(const testCtx *const p_ctx) { /* 11*/ { 2, -1, "1", 127, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 12*/ { 2, -1, "A", 84, "123456789123123", 0, 33, 30, 1, "" }, /* 13*/ { 2, -1, "A", 85, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, - /* 14*/ { 2, 96 + 1, "1", 109, "123456789123123", 0, 33, 30, 0, "BWIPP different encodation (begins with ASCII digits then NSes)" }, + /* 14*/ { 2, 96 + 1, "1", 109, "123456789123123", 0, 33, 30, 1, "" }, /* 15*/ { 2, 96 + 1, "1", 110, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 16*/ { 2, 96 + 1, "1", 136, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "Absolute max with SCM vv" }, /* 17*/ { 3, -1, "1", 126, "ABCDEF123123", 0, 33, 30, 1, "" }, /* 18*/ { 3, -1, "1", 127, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 19*/ { 3, -1, "A", 84, "ABCDEF123123", 0, 33, 30, 1, "" }, /* 20*/ { 3, -1, "A", 85, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, - /* 21*/ { 3, 96 + 1, "1", 109, "ABCDEF123123", 0, 33, 30, 0, "BWIPP different encodation" }, + /* 21*/ { 3, 96 + 1, "1", 109, "ABCDEF123123", 0, 33, 30, 1, "" }, /* 22*/ { 3, 96 + 1, "1", 110, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, - /* 23*/ { 0, -1, "1", 126, "123456789123123", 0, 33, 30, 0, "Mode 2; BWIPP requires mode" }, + /* 23*/ { 0, -1, "1", 126, "123456789123123", 0, 33, 30, 1, "Mode 2" }, /* 24*/ { 0, -1, "1", 127, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 25*/ { 0, -1, "1", 126, "ABCDEF123123", 0, 33, 30, 1, "Mode 3" }, /* 26*/ { 0, -1, "1", 127, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, - /* 27*/ { 5, -1, "1", 113, "", 0, 33, 30, 0, "Extra EEC; BWIPP different encodation (begins with ASCII digits then NSes)" }, + /* 27*/ { 5, -1, "1", 113, "", 0, 33, 30, 1, "Extra EEC" }, /* 28*/ { 5, -1, "1", 114, "", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 29*/ { 5, -1, "A", 77, "", 0, 33, 30, 1, "" }, /* 30*/ { 5, -1, "A", 78, "", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, - /* 31*/ { 6, -1, "1", 138, "", 0, 33, 30, 0, "BWIPP different encodation (begins with ASCII digits then NSes)" }, + /* 31*/ { 6, -1, "1", 138, "", 0, 33, 30, 1, "" }, /* 32*/ { 6, -1, "1", 139, "", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, /* 33*/ { 6, -1, "A", 93, "", 0, 33, 30, 1, "" }, /* 34*/ { 6, -1, "A", 94, "", ZINT_ERROR_TOO_LONG, -1, -1, 1, "" }, @@ -176,6 +176,7 @@ static void test_input(const testCtx *const p_ctx) { int zxingcpp_cmp; char *comment; }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { /* 0*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 01 21 21 21 21 21 21 21 21 08 0E 19 2B 20 0C 24 06 32 1C 21 21 21 21 21 21 21 21", 1, 1, "" }, /* 1*/ { UNICODE_MODE, -1, 2, -1, { 0, 0, "" }, "A", -1, "", ZINT_ERROR_INVALID_DATA, 0, "Error 548: Primary Message empty", 1, 1, "" }, @@ -184,11 +185,11 @@ static void test_input(const testCtx *const p_ctx) { /* 4*/ { UNICODE_MODE, -1, 2, -1, { 0, 0, "" }, "A", -1, "1 123456", 0, 30, "(144) 12 00 00 00 00 10 30 1E 20 1C 1A 3D 1C 0D 1B 15 3C 17 3C 08 01 21 21 21 21 21 21 21", 1, 0, "1-digit postcode; ZXing-C++ test can't handle space" }, /* 5*/ { UNICODE_MODE, -1, 2, -1, { 0, 0, "" }, "A", -1, "123456789123456", 0, 30, "(144) 12 05 0D 2F 35 11 32 1E 20 1C 0D 1D 3B 12 22 3F 30 14 23 1A 01 21 21 21 21 21 21 21", 1, 1, "9-digit postcode" }, /* 6*/ { UNICODE_MODE, -1, 2, -1, { 0, 0, "" }, "A", -1, "1234567890123456", ZINT_ERROR_INVALID_DATA, 0, "Error 551: Primary Message length 16 wrong (7 to 15 only)", 1, 1, "10-digit postcode" }, - /* 7*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "1123456", 0, 30, "(144) 12 00 00 00 00 10 30 1E 20 1C 1A 3D 1C 0D 1B 15 3C 17 3C 08 01 21 21 21 21 21 21 21", 0, 1, "1-digit postcode; BWIPP requires mode" }, - /* 8*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "123456789123456", 0, 30, "(144) 12 05 0D 2F 35 11 32 1E 20 1C 0D 1D 3B 12 22 3F 30 14 23 1A 01 21 21 21 21 21 21 21", 0, 1, "9-digit postcode; BWIPP requires mode" }, + /* 7*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "1123456", 0, 30, "(144) 12 00 00 00 00 10 30 1E 20 1C 1A 3D 1C 0D 1B 15 3C 17 3C 08 01 21 21 21 21 21 21 21", 1, 1, "1-digit postcode" }, + /* 8*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "123456789123456", 0, 30, "(144) 12 05 0D 2F 35 11 32 1E 20 1C 0D 1D 3B 12 22 3F 30 14 23 1A 01 21 21 21 21 21 21 21", 1, 1, "9-digit postcode" }, /* 9*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "1234567890123456", ZINT_ERROR_INVALID_DATA, 0, "Error 551: Primary Message length 16 wrong (7 to 15 only)", 1, 1, "10-digit postcode" }, /* 10*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "123456", ZINT_ERROR_INVALID_DATA, 0, "Error 551: Primary Message length 6 wrong (7 to 15 only)", 1, 1, "0-digit postcode" }, - /* 11*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "12345678123456", 0, 30, "(144) 22 13 21 31 0B 00 32 1E 20 1C 04 14 07 30 10 07 08 28 1D 09 01 21 21 21 21 21 21 21", 0, 1, "8-digit postcode; BWIPP requires mode" }, + /* 11*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "12345678123456", 0, 30, "(144) 22 13 21 31 0B 00 32 1E 20 1C 04 14 07 30 10 07 08 28 1D 09 01 21 21 21 21 21 21 21", 1, 1, "8-digit postcode" }, /* 12*/ { UNICODE_MODE, -1, 2, -1, { 0, 0, "" }, "A", -1, "12345678123456", 0, 30, "(144) 22 13 21 31 0B 00 32 1E 20 1C 04 14 07 30 10 07 08 28 1D 09 01 21 21 21 21 21 21 21", 1, 1, "8-digit postcode" }, /* 13*/ { UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, "A", -1, "", ZINT_ERROR_INVALID_DATA, 0, "Error 548: Primary Message empty", 1, 1, "" }, /* 14*/ { UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, "A", -1, "A123456", 0, 30, "(144) 03 08 08 08 08 18 30 1E 20 1C 22 35 1C 0F 02 1A 26 04 10 31 01 21 21 21 21 21 21 21", 1, 1, "1-alphanumeric postcode" }, @@ -203,36 +204,51 @@ static void test_input(const testCtx *const p_ctx) { /* 23*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "A#%-/A840001", 0, 30, "(144) 13 30 1B 1B 39 18 00 12 07 00 3F 1E 25 07 2A 1E 14 3C 28 2D 01 21 21 21 21 21 21 21", 1, 1, "Alphanumeric postcode with non-control Code A chars" }, /* 24*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "1A23456", ZINT_ERROR_INVALID_DATA, 0, "Error 552: Non-numeric country code or service class in Primary Message", 1, 1, "Non-numeric country code" }, /* 25*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", -1, "12345678912345A", ZINT_ERROR_INVALID_DATA, 0, "Error 552: Non-numeric country code or service class in Primary Message", 1, 1, "Non-numeric service class" }, - /* 26*/ { UNICODE_MODE, -1, 0, -1, { 0, 0, "" }, "A", -1, "123456789123456", 0, 30, "(144) 12 05 0D 2F 35 11 32 1E 20 1C 0D 1D 3B 12 22 3F 30 14 23 1A 01 21 21 21 21 21 21 21", 0, 1, "Auto-determine mode 2; BWIPP requires mode for mode 2" }, + /* 26*/ { UNICODE_MODE, -1, 0, -1, { 0, 0, "" }, "A", -1, "123456789123456", 0, 30, "(144) 12 05 0D 2F 35 11 32 1E 20 1C 0D 1D 3B 12 22 3F 30 14 23 1A 01 21 21 21 21 21 21 21", 1, 1, "Auto-determine mode 2" }, /* 27*/ { UNICODE_MODE, -1, 0, -1, { 0, 0, "" }, "A", -1, "", ZINT_ERROR_INVALID_DATA, 0, "Error 554: Primary Message empty", 1, 1, "Auto-determine mode 2/3 requires primary message" }, /* 28*/ { UNICODE_MODE, -1, 0, -1, { 0, 0, "" }, "A", -1, "A23456123456", 0, 30, "(144) 23 1D 0D 3D 2C 1C 30 1E 20 1C 24 35 30 31 2A 0D 17 14 16 3D 01 21 21 21 21 21 21 21", 1, 1, "Auto-determine mode 3" }, - /* 29*/ { UNICODE_MODE, -1, -1, 100, { 0, 0, "" }, "A", -1, "123456123456", 0, 30, "(144) 02 10 22 07 00 20 31 1E 20 1C 0E 29 13 1B 0D 26 36 25 3B 22 3B 2A 29 3B 28 1E 30 31", 0, 1, "SCM prefix version" }, + /* 29*/ { UNICODE_MODE, -1, -1, 100, { 0, 0, "" }, "A", -1, "123456123456", 0, 30, "(144) 02 10 22 07 00 20 31 1E 20 1C 0E 29 13 1B 0D 26 36 25 3B 22 3B 2A 29 3B 28 1E 30 31", 1, 1, "SCM prefix version" }, /* 30*/ { UNICODE_MODE, -1, -1, 101, { 0, 0, "" }, "A", -1, "123456123456", ZINT_ERROR_INVALID_OPTION, 0, "Error 557: SCM prefix version '101' out of range (1 to 100)", 1, 1, "SCM prefix version" }, - /* 31*/ { UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 03 01 21 21 21 21 21 21 2F 14 23 21 05 24 27 00 24 0C 21 21 21 21 21 21 21 21", 1, 1, "" }, - /* 32*/ { UNICODE_MODE, 31, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 1F 01 21 21 21 21 21 21 00 2F 0E 09 39 3B 24 1A 21 05 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x1F" }, - /* 33*/ { UNICODE_MODE, 32, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 20 20 01 21 21 21 21 21 3D 15 0F 30 0D 22 24 35 22 06 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x20" }, - /* 34*/ { UNICODE_MODE, 1023, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 2F 3F 01 21 21 21 21 21 2E 27 23 1D 35 19 21 04 3A 26 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x3FF" }, - /* 35*/ { UNICODE_MODE, 1024, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 30 10 00 01 21 21 21 21 11 2F 15 10 1D 29 06 35 14 2B 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x400" }, - /* 36*/ { UNICODE_MODE, 32767, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 37 3F 3F 01 21 21 21 21 3E 15 12 01 07 30 39 27 04 2B 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x7FFF" }, - /* 37*/ { UNICODE_MODE, 32768, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 08 00 00 01 21 21 21 10 30 3A 04 26 23 0E 21 3D 0F 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x8000" }, - /* 38*/ { UNICODE_MODE, 65535, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 0F 3F 3F 01 21 21 21 1C 0E 1D 39 3B 0D 38 25 00 30 21 21 21 21 21 21 21 21", 1, 1, "ECI 0xFFFF" }, - /* 39*/ { UNICODE_MODE, 65536, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 10 00 00 01 21 21 21 2B 1F 24 06 38 2E 17 1B 10 2F 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x10000" }, - /* 40*/ { UNICODE_MODE, 131071, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 1F 3F 3F 01 21 21 21 0F 05 09 04 2F 3A 17 09 36 31 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x1FFFF" }, - /* 41*/ { UNICODE_MODE, 999999, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 3B 34 08 3F 01 21 21 21 26 3B 2B 23 08 17 32 05 26 35 21 21 21 21 21 21 21 21", 1, 1, "Max ECI" }, - /* 42*/ { UNICODE_MODE, -1, 1, -1, { 0, 0, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 550: Mode '1' out of range (2 to 6)", 1, 1, "" }, - /* 43*/ { UNICODE_MODE, -1, 7, -1, { 0, 0, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 550: Mode '7' out of range (2 to 6)", 1, 1, "" }, - /* 44*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "\015", -1, "", 0, 30, "(144) 04 00 21 21 21 21 21 21 21 21 37 32 10 01 24 1B 10 11 38 0C 21 21 21 21 21 21 21 21", 1, 0, "ZXing-C++ test can't handle LF" }, - /* 45*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "\001\034\001\035\001\036\001a:b", -1, "", 0, 30, "(144) 04 3E 3E 01 20 01 21 01 22 01 27 0B 35 01 08 0D 16 02 17 1A 3F 01 33 02 21 21 21 21", 1, 1, "" }, - /* 46*/ { UNICODE_MODE, -1, -1, -1, { 1, 2, "" }, "A", -1, "", 0, 30, "(144) 04 21 01 01 21 21 21 21 21 21 09 0B 26 03 37 0E 25 27 07 1E 21 21 21 21 21 21 21 21", 1, 1, "" }, - /* 47*/ { UNICODE_MODE, -1, -1, -1, { 0, 2, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 559: Structured Append index '0' out of range (1 to count 2)", 1, 1, "" }, - /* 48*/ { UNICODE_MODE, -1, -1, -1, { 1, 1, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 558: Structured Append count '1' out of range (2 to 8)", 1, 1, "" }, - /* 49*/ { UNICODE_MODE, -1, -1, -1, { 1, 9, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 558: Structured Append count '9' out of range (2 to 8)", 1, 1, "" }, - /* 50*/ { UNICODE_MODE, -1, -1, -1, { 3, 2, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 559: Structured Append index '3' out of range (1 to count 2)", 1, 1, "" }, - /* 51*/ { UNICODE_MODE, -1, -1, -1, { 1, 2, "A" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 549: Structured Append ID not available for MaxiCode", 1, 1, "" }, - /* 52*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "b..A", -1, "", 0, 30, "(144) 04 3F 02 31 38 2E 01 21 21 21 23 2F 04 2C 34 3B 28 25 2C 11 21 21 21 21 21 21 21 21", 0, 1, "BWIPP PR #279 (BWIPP 1 shorter)" }, - /* 53*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A123456789b123456789bbbA", -1, "", 0, 30, "(144) 04 01 1F 07 16 3C 34 15 3B 02 08 28 3C 0E 06 03 34 25 3C 1E 1F 07 16 3C 34 15 3F 02", 0, 1, "BWIPP PR #279 (BWIPP 1 shorter)" }, - /* 54*/ { ESCAPE_MODE, -1, -1, -1, { 0, 0, "" }, "\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192", -1, "", 0, 30, "(144) 04 3C 00 3D 00 3D 00 3D 00 3C 32 10 27 30 09 0B 06 16 3D 0D 00 3D 00 3D 00 3D 00 3C", 0, 1, "BWIPP PR #279 (BWIPP 1 shorter)" }, - /* 55*/ { ESCAPE_MODE, -1, 2, -1, { 0, 0, "" }, "1Z34567890\\GUPSN\\G102562\\G034\\G\\G1/1\\G\\GY\\G2201 Second St\\GFt Myers\\GFL\\R\\E", -1, "339010000840001", 0, 30, "(144) 02 34 21 13 03 15 02 12 07 00 0C 03 00 38 24 04 0B 1F 2F 21 31 1A 33 34 35 36 37 38", 0, 1, "BWIPP different encodation" }, + /* 31*/ { UNICODE_MODE, 25, -1, 96 + 1, { 0, 0, "" }, "A", -1, "123456123456", ZINT_ERROR_INVALID_OPTION, 0, "Error 547: SCM prefix can not be used with ECI 25 (ECI must be ASCII compatible)", 1, 1, "SCM prefix version UTF-16BE" }, + /* 32*/ { UNICODE_MODE, 33, -1, 96 + 1, { 0, 0, "" }, "A", -1, "123456123456", ZINT_ERROR_INVALID_OPTION, 0, "Error 547: SCM prefix can not be used with ECI 33 (ECI must be ASCII compatible)", 1, 1, "SCM prefix version UTF-16LE" }, + /* 33*/ { UNICODE_MODE, 34, -1, 96 + 1, { 0, 0, "" }, "A", -1, "123456123456", ZINT_ERROR_INVALID_OPTION, 0, "Error 547: SCM prefix can not be used with ECI 34 (ECI must be ASCII compatible)", 1, 1, "SCM prefix version UTF-32BE" }, + /* 34*/ { UNICODE_MODE, 35, -1, 96 + 1, { 0, 0, "" }, "A", -1, "123456123456", ZINT_ERROR_INVALID_OPTION, 0, "Error 547: SCM prefix can not be used with ECI 35 (ECI must be ASCII compatible)", 1, 1, "SCM prefix version UTF-32LE" }, + /* 35*/ { UNICODE_MODE, 3, 2, 96 + 1, { 0, 0, "" }, "A", -1, "999999999840333", 0, 30, "(144) 32 3F 09 2B 39 1E 02 12 37 14 2F 1E 03 29 3E 1B 2D 2A 06 20 3B 2A 29 3B 28 1E 30 31", 1, 1, "SCM prefix version ISO/IEC 8859-1" }, + /* 36*/ { UNICODE_MODE, 170, 2, 96 + 1, { 0, 0, "" }, "A", -1, "1234567123456", 0, 30, "(144) 32 21 16 0B 01 30 31 1E 20 1C 13 22 04 28 0E 21 13 1E 3A 14 3B 2A 29 3B 28 1E 30 31", 1, 1, "SCM prefix version ASCII Invariant" }, + /* 37*/ { UNICODE_MODE, 20, 2, 96 + 1, { 0, 0, "" }, "テ", -1, "12345678123456", 0, 30, "(144) 22 13 21 31 0B 00 32 1E 20 1C 04 14 07 30 10 07 08 28 1D 09 3B 2A 29 3B 28 1E 30 31", 1, 1, "SCM prefix version Shift JIS" }, + /* 38*/ { UNICODE_MODE | ESCAPE_MODE, 3, 2, -1, { 0, 0, "" }, "[)>\\R01\\G96A", -1, "999999999840333", 0, 30, "(144) 32 3F 09 2B 39 1E 02 12 37 14 2F 1E 03 29 3E 1B 2D 2A 06 20 3B 2A 29 3B 28 1E 30 31", 1, 1, "Manual SCM prefix ISO/IEC 8859-1" }, + /* 39*/ { UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 03 01 21 21 21 21 21 21 2F 14 23 21 05 24 27 00 24 0C 21 21 21 21 21 21 21 21", 1, 1, "" }, + /* 40*/ { UNICODE_MODE, 31, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 1F 01 21 21 21 21 21 21 00 2F 0E 09 39 3B 24 1A 21 05 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x1F" }, + /* 41*/ { UNICODE_MODE, 32, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 20 20 01 21 21 21 21 21 3D 15 0F 30 0D 22 24 35 22 06 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x20" }, + /* 42*/ { UNICODE_MODE, 1023, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 2F 3F 01 21 21 21 21 21 2E 27 23 1D 35 19 21 04 3A 26 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x3FF" }, + /* 43*/ { UNICODE_MODE, 1024, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 30 10 00 01 21 21 21 21 11 2F 15 10 1D 29 06 35 14 2B 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x400" }, + /* 44*/ { UNICODE_MODE, 32767, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 37 3F 3F 01 21 21 21 21 3E 15 12 01 07 30 39 27 04 2B 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x7FFF" }, + /* 45*/ { UNICODE_MODE, 32768, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 08 00 00 01 21 21 21 10 30 3A 04 26 23 0E 21 3D 0F 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x8000" }, + /* 46*/ { UNICODE_MODE, 65535, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 0F 3F 3F 01 21 21 21 1C 0E 1D 39 3B 0D 38 25 00 30 21 21 21 21 21 21 21 21", 1, 1, "ECI 0xFFFF" }, + /* 47*/ { UNICODE_MODE, 65536, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 10 00 00 01 21 21 21 2B 1F 24 06 38 2E 17 1B 10 2F 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x10000" }, + /* 48*/ { UNICODE_MODE, 131071, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 38 1F 3F 3F 01 21 21 21 0F 05 09 04 2F 3A 17 09 36 31 21 21 21 21 21 21 21 21", 1, 1, "ECI 0x1FFFF" }, + /* 49*/ { UNICODE_MODE, 999999, -1, -1, { 0, 0, "" }, "A", -1, "", 0, 30, "(144) 04 1B 3B 34 08 3F 01 21 21 21 26 3B 2B 23 08 17 32 05 26 35 21 21 21 21 21 21 21 21", 1, 1, "Max ECI" }, + /* 50*/ { UNICODE_MODE, -1, 1, -1, { 0, 0, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 550: Mode '1' out of range (2 to 6)", 1, 1, "" }, + /* 51*/ { UNICODE_MODE, -1, 7, -1, { 0, 0, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 550: Mode '7' out of range (2 to 6)", 1, 1, "" }, + /* 52*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "\015", -1, "", 0, 30, "(144) 04 00 21 21 21 21 21 21 21 21 37 32 10 01 24 1B 10 11 38 0C 21 21 21 21 21 21 21 21", 1, 1, "" }, + /* 53*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "\015\034\035\036 ", -1, "", 0, 30, "(144) 04 00 1C 1D 1E 20 21 21 21 21 3E 18 0B 14 22 27 2D 3A 18 22 21 21 21 21 21 21 21 21", 1, 1, "Code Set A" }, + /* 54*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "abc\034\035\036 ,./:", -1, "", 0, 30, "(144) 04 3F 01 02 03 1C 1D 1E 2F 30 21 1F 2B 2A 35 0A 00 10 36 1D 31 32 33 21 21 21 21 21", 1, 1, "Code Set B" }, + /* 55*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "\001\002\003\015\034\035\036 ", -1, "", 0, 30, "(144) 04 3E 3E 01 02 03 0D 20 21 22 3D 0F 31 3A 0C 0C 34 26 27 31 3B 1C 1C 1C 1C 1C 1C 1C", 1, 1, "Code Set E" }, + /* 56*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "ÀÀÀ\034\035\036 ", -1, "", 0, 30, "(144) 04 3C 3C 00 00 00 1C 1D 1E 3B 3C 05 39 07 18 15 25 36 28 11 3A 21 21 21 21 21 21 21", 1, 1, "Code Set C" }, + /* 57*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "ààà\034\035\036 ", -1, "", 0, 30, "(144) 04 3D 3D 00 00 00 1C 1D 1E 3B 06 26 23 19 32 1E 0C 1A 05 11 3A 21 21 21 21 21 21 21", 1, 1, "Code Set D" }, + /* 58*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "\001\034\001\035\001\036\001a:b", -1, "", 0, 30, "(144) 04 3E 3E 01 20 01 21 01 22 01 27 0B 35 01 08 0D 16 02 17 1A 3F 01 33 02 21 21 21 21", 1, 1, "" }, + /* 59*/ { UNICODE_MODE, -1, -1, -1, { 1, 2, "" }, "A", -1, "", 0, 30, "(144) 04 21 01 01 21 21 21 21 21 21 09 0B 26 03 37 0E 25 27 07 1E 21 21 21 21 21 21 21 21", 1, 1, "" }, + /* 60*/ { UNICODE_MODE, -1, -1, -1, { 0, 2, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 559: Structured Append index '0' out of range (1 to count 2)", 1, 1, "" }, + /* 61*/ { UNICODE_MODE, -1, -1, -1, { 1, 1, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 558: Structured Append count '1' out of range (2 to 8)", 1, 1, "" }, + /* 62*/ { UNICODE_MODE, -1, -1, -1, { 1, 9, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 558: Structured Append count '9' out of range (2 to 8)", 1, 1, "" }, + /* 63*/ { UNICODE_MODE, -1, -1, -1, { 3, 2, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 559: Structured Append index '3' out of range (1 to count 2)", 1, 1, "" }, + /* 64*/ { UNICODE_MODE, -1, -1, -1, { 1, 2, "A" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 549: Structured Append ID not available for MaxiCode", 1, 1, "" }, + /* 65*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "b..A", -1, "", 0, 30, "(144) 04 3B 02 2E 2E 01 21 21 21 21 11 1C 30 14 2D 3E 16 0E 0C 31 21 21 21 21 21 21 21 21", 1, 1, "" }, + /* 66*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A123456789b123456789bbbA", -1, "", 0, 30, "(144) 04 01 1F 07 16 3C 34 15 3F 02 10 1B 28 22 20 32 37 0C 0B 2A 1F 07 16 3C 34 15 02 02", 1, 1, "" }, + /* 67*/ { ESCAPE_MODE, -1, -1, -1, { 0, 0, "" }, "\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192", -1, "", 0, 30, "(144) 04 3C 00 3D 3D 00 00 00 3C 00 34 39 0E 35 1D 25 00 1B 28 03 00 00 00 3C 00 00 00 00", 1, 1, "BWIPP PR #279" }, + /* 68*/ { ESCAPE_MODE, -1, 2, -1, { 0, 0, "" }, "1Z34567890\\GUPSN\\G102562\\G034\\G\\G1/1\\G\\GY\\G2201 Second St\\GFt Myers\\GFL\\R\\E", -1, "339010000840001", 0, 30, "(144) 02 34 21 13 03 15 02 12 07 00 0C 03 00 38 24 04 0B 1F 2F 21 31 1A 33 34 35 36 37 38", 1, 1, "" }, + /* 69*/ { DATA_MODE | ESCAPE_MODE, -1, -1, -1, { 0, 0, "" }, "ABabcdeAabcdABCabcdABabc\\d192\\d192 \\d192\\d224\\d224\\d028\\d224\\d001\\d001\\d001\\d029\\d00112345678a123456789aABCDa\\d192\\d224\\d001\\d192\\d001\\d224\\d030\\d004", -1, "", 0, 30, "(144) 04 01 02 3F 01 02 03 04 05 3B 25 28 3F 32 0D 10 0D 0F 35 11 01 01 02 03 04 39 01 02", 1, 1, "Exercises all latches & no. of shifts" }, + /* 70*/ { UNICODE_MODE, 1023, 3, 96 + 1, { 2, 3, "" }, "A", -1, "P144275001", 0, 30, "(144) 03 08 08 0D 1D 0C 34 04 05 00 13 29 0C 17 0F 15 2E 38 00 0B 21 0A 3B 2A 29 3B 28 1E", 1, 1, "ECI, Structured Append, SCM" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -371,42 +387,42 @@ static void test_encode(const testCtx *const p_ctx) { "001001101111101101101010011100" "001011000000111101100100001000" }, - /* 1*/ { -1, 4, -1, { 0, 0, "" }, "MaxiCode (19 chars)", -1, "", 0, 33, 30, 0, "ISO/IEC 16023:2000 Figure H1 **NOT SAME** different encodation (figure uses '3 Shift A' among other differences); BWIPP different encodation again", - "001101011111011100000010101111" - "101100010001001100010000000100" - "101100001010001111001001111101" + /* 1*/ { -1, 4, -1, { 0, 0, "" }, "MaxiCode (19 chars)", -1, "", 0, 33, 30, 1, "ISO/IEC 16023:2000 Figure H1 **NOT SAME** different encodation (figure uses '3 Shift A' among other differences)", + "000111011111010000001010110111" + "101101010001110001000000110110" + "101110001010111100100111111011" "010101010101010101010101010100" - "000000000000000000000000000111" - "101010101010101010101010101000" - "010101010101010101010101010111" - "000000000000000000000000000000" + "000000000000000000000000000011" "101010101010101010101010101010" + "010101010101010101010101010111" + "000000000000000000000000000010" + "101010101010101010101010101011" "010101011111111100000001010100" - "000000000011110110001000000000" - "101010101110000000111010101000" - "010101100010000000001101010101" - "000000101000000000001000000000" - "101010000000000000011010101011" + "000000000011110110001000000001" + "101010101110000000111010101010" + "010101100010000000001101010110" + "000000101000000000001000000010" + "101010000000000000011010101001" "010101010000000000001101010110" - "000000001000000000001000000001" + "000000001000000000001000000010" "101010110000000000001010101010" "010101101100000000010101010111" "000000100000000000000000000000" "101010010110000000000110101011" "010101010110000000001001010110" - "000000000110001011000000000001" - "101010100110111001010010101000" - "010101010101010101010001100101" - "000000000000000000001111101000" - "101010101010101010100100001101" - "100011000111000111100000110000" - "011011110010111100011100111111" - "110010110110010000110001100100" - "001111010001000111111010011010" - "010010010101001010100000011010" - "010011010001000101110111100100" + "000000000110001011000000000011" + "101010100110111001010010101010" + "010101010101010101011100100010" + "000000000000000000000000101100" + "101010101010101010101010101101" + "011000111100100001011011100100" + "001010011100001010001111100100" + "111010000011101011110001010100" + "000111001100100000010011000110" + "100000101101100000001000111110" + "011101000100000001001111101001" }, - /* 2*/ { ESCAPE_MODE, 2, 96 + 1, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "152382802840001", 0, 33, 30, 0, "ISO/IEC 16023:2000 Figure B2 **NOT SAME** uses different encodation (figure precedes PAD chars with Latch B); BWIPP different encodation again", + /* 2*/ { ESCAPE_MODE, 2, 96 + 1, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "152382802840001", 0, 33, 30, 1, "ISO/IEC 16023:2000 Figure B2 **NOT SAME** uses different encodation (figure precedes PAD chars with Latch B)", "110101110110111110111111101111" "010101010111000011011000010010" "110110110001001010100110010001" @@ -441,7 +457,7 @@ static void test_encode(const testCtx *const p_ctx) { "000111101001100001111000010110" "000100101000110000000111110011" }, - /* 3*/ { ESCAPE_MODE, 2, 96 + 1, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "15238840001", 0, 33, 30, 0, "OkapiBarcode zero-pad postcode lacking +4 (US 840 only), ISO/IEC 16023:2000 Annex B.1.4a; BWIPP different encodation", + /* 3*/ { ESCAPE_MODE, 2, 96 + 1, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "15238840001", 0, 33, 30, 1, "OkapiBarcode zero-pad postcode lacking +4 (US 840 only), ISO/IEC 16023:2000 Annex B.1.4a", "110101110110111110111111101111" "010101010111000011011000010010" "110110110001001010100110010001" @@ -511,77 +527,77 @@ static void test_encode(const testCtx *const p_ctx) { "010010001001110010000101000010" "010001011010000011010010011100" }, - /* 5*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, { 0, 0, "" }, "Comité Européen de Normalisation\034rue de Stassart 36\034B-1050 BRUXELLES\034TEL +3225196811", -1, "", 0, 33, 30, 0, "ISO/IEC 16023:2000 Example F.5 **NOT SAME** uses different encodation (2 Shift A among other things); BWIPP different encodation again", - "010010100010110000000100001111" - "001010001100110110111110100110" - "001010011100101010011100100000" - "000000100010000000001000000110" - "111101100000011100110011110001" - "011110001011100010100111010010" - "101010000100001101101000101001" - "110010101110100100001000000000" - "000110101100100000110010111110" - "111101111111111000110110100000" - "100000111001111010010010000011" - "011100111100000000101100011010" - "100001101110000000101111111101" - "110011000100000000111100001010" - "000110010000000000010110001010" + /* 5*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, { 0, 0, "" }, "Comité Européen de Normalisation\034rue de Stassart 36\034B-1050 BRUXELLES\034TEL +3225196811", -1, "", 0, 33, 30, 1, "ISO/IEC 16023:2000 Example F.5 **NOT SAME** uses different encodation (2 Shift A among other things)", + "110010100010110000000100000111" + "011010001100110110111110101100" + "111010011100101010011100101101" + "000000100010000000001000001100" + "111101100000011100110011110110" + "011110001011100010100111011110" + "101010000100000111101000101010" + "110010101110101101001000000010" + "000110101100101111110010111111" + "111101111011111000111110100000" + "100000110101111010011110000000" + "011100110100000000101100011000" + "100001000110000000101011111100" + "110011101100000000111000001000" + "000110111100000000011010001011" "101010010000000000001000011100" - "011000001000000000001000000010" - "001001010000000000001101000000" - "000000010000000000010100101000" - "101111110100000000011110001100" - "100000000010000000011010110011" - "101001010010000001011100001010" - "001101000010001011110111101010" - "111111001010000001100100100000" - "001000001101010101010010111001" - "111001000000000000001010100000" - "010001101010101010101010110001" - "011011000011100001011001101100" - "101100000001111010000001100011" - "110001001100011100110111011010" - "011110010010101101110100000100" - "001011110011100001001001101100" - "000010111011111010110011000011" + "011000001000000000001000000000" + "001001010000000000001101000010" + "000000100100000000010000101010" + "101111101100000000010010001110" + "100000101110000000011110110000" + "101101011010000001110000001010" + "110001000110001011000111101001" + "111111000110000001110000100010" + "001000010001010101010111010000" + "110100110100000000000010001010" + "101111001110101010101101100111" + "011010000110010001100100101010" + "011100000011000100100111111110" + "010100011110011011111011000100" + "000000100010100101010010010010" + "001111010001110000011001100110" + "000100001011101000111010000010" }, - /* 6*/ { -1, -1, -1, { 0, 0, "" }, "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", -1, "", 0, 33, 30, 0, "Numeric compaction, verified manually against TEC-IT; BWIPP different encodation", - "010111101101010111101101010111" - "111011110110111011110110111010" - "001111111101001111111101001100" - "101101010111101101010111101100" - "111110111001111110111001111100" - "111111000111111111000111111110" - "110101011110110101011110110110" - "011011101111011011101111011000" - "110100111111110100111111110101" - "010111101111111100110111010100" - "111001111011011110011111101100" - "000111111110000000111011110000" - "011110100110000000000111010101" - "101111001000000000110101101110" - "111111110100000000000011010001" - "010111111000000000001110110110" - "111001101000000000001011111001" - "000111010000000000001011111100" - "011110011000000000011011010101" - "101111000100000000010001101100" - "111111100110000000100111010010" - "010101110100000001010110110110" - "101110011010101111111011111011" - "110001110111110101111011111110" - "111011010101111111110000111011" - "111101101110110101010001001000" - "111111010011111010101111110011" - "000101011000111100010001000010" - "011110001101100001011010110010" - "101110000100010011000001001000" - "100000001010110100100110001100" - "111010101011001101111001011010" - "011110011111000011101011111011" + /* 6*/ { -1, -1, -1, { 0, 0, "" }, "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", -1, "", 0, 33, 30, 1, "Numeric compaction, verified manually against TEC-IT", + "101101010111101101010111101111" + "110110111011110110111011110100" + "111101001111111101001111111100" + "010111101101010111101101010110" + "111001111110111001111110111000" + "000111111111000111111111000110" + "011110110101011110110101011111" + "101111011011101111011011101100" + "111111110100111111110100111101" + "101101011111110100101001111010" + "111110111111011010010110011111" + "111111000000000000000101111100" + "110101001100000000110001111010" + "011011101100000000001110111100" + "110100101100000000010111111110" + "101101111000000000001101011110" + "111110001000000000001011100100" + "111111101000000000001100011110" + "110101111000000000011001111000" + "011011001100000000111010111110" + "110100110110000000111011111110" + "111011010010000000100101011100" + "011111101110111111111011100101" + "111111110110011001111000011100" + "010101111011010101111010001110" + "101110111101101110110110000000" + "010011111111010011110011000000" + "101010001001110111000101100100" + "110111101010011001100011111000" + "111000110011011001001101000110" + "111010010010001000101000010101" + "101111000100011110110011011100" + "011111000110100011001101000000" }, - /* 7*/ { -1, 5, -1, { 0, 0, "" }, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\037\237\240\242\243\244\245\246\247\251\255\256\266\225\226\227\230\231\232\233\234\235\236", 51, "", 0, 33, 30, 0, "Mode 5 set E; BWIPP different encodation", + /* 7*/ { -1, 5, -1, { 0, 0, "" }, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\037\237\240\242\243\244\245\246\247\251\255\256\266\225\226\227\230\231\232\233\234\235\236", 51, "", 0, 33, 30, 1, "Mode 5 set E", "000000000000000000101010101011" "100101010111111111000000001000" "110010011100100111001001110011" @@ -721,40 +737,40 @@ static void test_encode(const testCtx *const p_ctx) { "100100110011010101001011100100" "001000101111010000111000010101" }, - /* 11*/ { UNICODE_MODE | ESCAPE_MODE, 4, -1, { 0, 0, "" }, "\\rABCDEFGHIJKLMNOPQRSTUVWXYZ\034\\G\\R \"#$%&'()*+,-./0123456789:", -1, "", 0, 33, 30, 0, "Mode 4 Set A; BWIPP different encodation", + /* 11*/ { UNICODE_MODE | ESCAPE_MODE, 4, -1, { 0, 0, "" }, "\\rABCDEFGHIJKLMNOPQRSTUVWXYZ\034\\G\\R \"#$%&'()*+,-./0123456789:", -1, "", 0, 33, 30, 1, "Mode 4 Set A", "000000000000001010101010101011" "010101111111110000000010101010" "100111001001110010011100100101" - "010101010101011010101010101010" + "010101010101011010101010101000" "101010100000001111110101011011" - "110110001101000110000110001110" - "010101010101010110000100000011" - "010101011111111111001110101100" - "001001110010011111001101100110" - "010101010011000000000001111100" - "000000001001001010010100010100" + "110110001101000110000110001100" + "010101010101010111100010111101" + "010101011111111100111010111000" + "001001110010011100111101000000" + "010101010011000000000001111000" + "000000001001001010010100011001" "101010100010000000010010011010" - "010101000000000000000001010100" - "000000110100000000100100000000" - "101010110000000000001010101011" - "010101010000000000001101010100" - "000000001000000000001000000010" + "010101000000000000000001010111" + "000000110100000000100100000010" + "101010110000000000001010101001" + "010101010000000000001101010110" + "000000001000000000001000000000" "101010100000000000001010101000" "010101001100000000001101010100" "000000111000000000101100000000" "101010000010000000011110101001" "010101010000000000100101010110" - "000000001110000001101000000001" + "000000001110000001101000000000" "101010100011000001001110101000" - "010101010101010101010011100001" - "000000000000000000000100010110" - "101010101010101010100100011110" - "101100000000000010001010010000" - "110010011000011000011011011001" - "111000110101100100110110101000" - "001001100010110011111101010101" - "110111010000000001010000100110" - "101001001010011101111100111011" + "010101010101010101011100010100" + "000000000000000000001011000100" + "101010101010101010101011110001" + "100101110110110010101111111100" + "101101011111001110100110100100" + "010001101100100011100111010100" + "010000101010001111010111011001" + "010010011001101010010001111100" + "100111100111001110011000011011" }, /* 12*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "ABCDabcdAabcABabcABCabcABCDaABCabABCabcABCéa", -1, "", 0, 33, 30, 1, "Mode 4 LCHB SHA 2SHA 3SHA LCHA SHB LCHB 3SHA 3SHA SHD", "110000000011000000000011000011" @@ -931,7 +947,7 @@ static void test_encode(const testCtx *const p_ctx) { "010110101111010110101010111100" "010100000000010110101010010100" }, - /* 17*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "¢£¤¥123456789", -1, "", 0, 33, 30, 0, "Mode 4 LCKE NS; BWIPP different encodation (1 codeword longer)", + /* 17*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "¢£¤¥123456789", -1, "", 0, 33, 30, 1, "Mode 4 LCKE NS", "111110101010101010101010101011" "111010111111111111111111111100" "000010000000000000000000000011" @@ -966,19 +982,19 @@ static void test_encode(const testCtx *const p_ctx) { "011100101001010011011100111100" "101101110111011101011010011101" }, - /* 18*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "ABCDE12abcde1ÀÁÂ⣤¥1àáâãabcde123A123456789àáâ㢣¤¥abc", -1, "", 0, 33, 30, 0, "Mode 4 mixed sets; BWIPP different encodation", + /* 18*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "ABCDE12abcde1ÀÁÂ⣤¥1àáâãabcde123A123456789àáâ㢣¤¥abc", -1, "", 0, 33, 30, 1, "Mode 4 mixed sets", "000000001111111100000000111111" - "000010100100111100000000111100" - "011100101110000000100111010100" + "000010101100111100000000111100" + "011100101110000000100111010111" "001100000000111111110101010110" - "001100000000111100010101101001" + "001100000000111100010101101010" "101111011000101010011000110110" "000000001111111100100010111110" "000010101100000000111010111000" "011100101110011110111101000010" "000000001011001100010111111010" "000000000001000010000111111000" - "110110001110000000011110101010" + "110110001110000000011110101000" "111101000010000000001101010101" "111110110000000000100110010100" "010101101000000000010111001001" @@ -986,20 +1002,20 @@ static void test_encode(const testCtx *const p_ctx) { "000000101000000000001000001110" "101011110000000000001101101110" "010101101000000000000001010101" - "000000000100000000010000000000" - "101010100000000000000110101000" + "000000000100000000010000000010" + "101010100000000000000110101001" "010101010100000000000101010100" "000000001010001011100000000011" "101010101011000001011010101000" - "010101010101010101010101001001" - "000000000000000000000010100000" - "101010101010101010101111110001" - "001110011111110100100011111000" - "011001101011100100010000010101" - "010000011110010110000011110010" - "110111100111000100111111001011" - "100011000001110011101110101000" - "001001110010111101100100010001" + "010101010101010101011001101001" + "000000000000000000001010110000" + "101010101010101010100111000000" + "001010111101110100110011111010" + "011101101010101100110000010101" + "011100101111011110010010111010" + "100101101011010111110011101011" + "100010001001110010101010111000" + "111010110110001100101000010001" }, /* 19*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "A123456789B123456789C123456789D123456789E123456789F123456789G123456789H123456789I123456789J123456789K123456789L123456789MNO123456789", -1, "", 0, 33, 30, 1, "Mode 4 spaced NSs", "001011111000100010111110001011" @@ -1106,6 +1122,41 @@ static void test_encode(const testCtx *const p_ctx) { "011111110000111010001010001100" "110010001001001011011111100111" }, + /* 22*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, "am.//ab,\034TA# z\015!", -1, "", 0, 33, 30, 1, "Was test_best_supported_set", + "101110000101101100110101010111" + "110110000011010100100000000010" + "001000101111011100101010101010" + "010101010101010101010101010110" + "000000000000000000000000000001" + "101010101010101010101010101010" + "010101010101010101010101010100" + "000000000000000000000000000010" + "101010101010101010101010101011" + "010101010111001100000101010110" + "000000001011000010000000000001" + "101010101100000000100110101010" + "010101001100000000101101010110" + "000000100000000000010000000010" + "101010110000000000010010101011" + "010101011000000000000101010100" + "000000001000000000001000000000" + "101010001000000000001010101000" + "010101010000000000001101010101" + "000000001100000000000000000010" + "101010110010000000010110101011" + "010101010100000001111001010110" + "000000001110110111111100000000" + "101010100110111101011010101000" + "010101010101010101011101100010" + "000000000000000000000101101000" + "101010101010101010100011011000" + "000000100000111000011101111100" + "110001011111000111110010001000" + "001011000001011000000110100000" + "110010000110011010101100011010" + "011011001001000010000110011100" + "000010111111111111001110001110" + }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -1345,40 +1396,40 @@ static void test_encode_segs(const testCtx *const p_ctx) { "010110101111010110101010111100" "010100000000010110101010010100" }, - /* 4*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("Pixel 4a 128 GB:$439.97"), -1, 3 }, { TU("Pixel 4a 128 GB:¥3149.79"), -1, 29 }, { TU("Pixel 4a 128 GB:444,90 €"), -1, 17 } }, "", 0, 33, 30, 0, "AIM ITS/04-023:2022 Annex A example (shortened); BWIPP different encodation, same codeword count", - "011100110111111101000011011111" - "001000110000000100100001101000" - "000010110010010000110101000010" - "110000100011101010111101111100" - "011110010111001101100111010010" - "000010001011001011111001101100" - "011100110111111101000011110111" - "001000110000000100100001111000" - "000010110010010000110101011110" - "011111110011001000000111011100" - "110110000101000110011000011110" - "011000100000000000101011000100" - "111110101110000000011110101100" - "100101100100000000001100001100" - "111011100000000000000110001101" + /* 4*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("Pixel 4a 128 GB:$439.97"), -1, 3 }, { TU("Pixel 4a 128 GB:¥3149.79"), -1, 29 }, { TU("Pixel 4a 128 GB:444,90 €"), -1, 17 } }, "", 0, 33, 30, 1, "AIM ITS/04-023:2022 Annex A example (shortened)", + "011111000111111101000011011111" + "001001000000000100100001101010" + "000011100010010000110101000001" + "110000100011101010111101111110" + "111110010111001101100111010000" + "110010001011001011111001101110" + "011111000111111101000011110110" + "001001000000000100100001111000" + "000011100010010000110101011100" + "011111111011001000000111011110" + "110110000101000110011000011100" + "011000101100000000100011000100" + "111110001110000000011010101110" + "100101101100000000001000001110" + "111011001100000000001110001100" "011100010000000000000000100010" - "000111001000000000001010010110" - "000000110000000000001010001010" - "110011010100000000011001111111" - "100011101100000000111000000000" - "001011100010000000011000100100" - "111111000010000001111000011110" - "101001000110101011100010000110" - "000001010110011101000111000010" - "110111110111010101010010100001" - "101101000011010000000001011000" - "000010000001001010100100111001" - "101010010101100010111000111000" - "000111001101011101010101101000" - "110111101110001101100111010100" - "101000010100101000011010011110" - "100000110001100001110001101000" - "010000101110100111010101100101" + "001111001000000000001010010111" + "001100110000000000001010001000" + "111100011100000000011001111110" + "100100110000000000110100000010" + "001110000110000000011100100110" + "111111001110000001011000011100" + "101001000110101011001110000100" + "000001010110011101111011000000" + "110111110111010101011111010000" + "101101000011010000000101101100" + "000010000001001010100001001111" + "001010001101110010110101001000" + "111110111100101100111101000110" + "010000000001111110111001010000" + "110101000010011011010111000110" + "100010110010010000000010010100" + "100011010011101111001011000001" }, /* 5*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("$439.97"), -1, 3 }, { TU("¥3149.79"), -1, 29 }, { TU("444,90 €"), -1, 17 } }, "", 0, 33, 30, 1, "AIM ITS/04-023:2022 Annex A example price only", "101011011101111111110111111011" @@ -1415,112 +1466,112 @@ static void test_encode_segs(const testCtx *const p_ctx) { "010111011011100000011000101000" "001111010010000100010110011110" }, - /* 6*/ { DATA_MODE, -1, -1, { 0, 0, "" }, { { TU("\266"), 1, 0 }, { TU("\266"), 1, 7 }, { TU("\266"), 1, 0 } }, "", 0, 33, 30, 0, "Standard example + extra seg, data mode; BWIPP different encodation", - "010101010101010101010101010111" - "110000000000000000000000000010" - "111010101010101010101010101011" - "010101010101010101010101010110" + /* 6*/ { DATA_MODE, -1, -1, { 0, 0, "" }, { { TU("\266"), 1, 0 }, { TU("\266"), 1, 7 }, { TU("\266"), 1, 0 } }, "", 0, 33, 30, 1, "Standard example + extra seg, data mode", + "101010101010101010101010101011" + "111111111111111111111111111100" + "000000000000000000000000000011" + "101010101010101010101010101010" + "111111111111111111111111111111" "000000000000000000000000000000" - "101010101010101010101010101000" - "010101010101010101010101010110" - "000000000000000000000000000010" - "101010101010101010101010101001" - "010101010011010100111101010110" - "000000000011111110000100000010" - "101010100010000000111010101010" - "010101001110000000110001010100" - "000000001100000000101000000000" - "101010000100000000010010101000" - "010101011000000000001101010110" - "000000001000000000001000000010" - "101010001000000000001010101000" - "010101001000000000000001010101" - "000000111100000000110100000000" - "101010011010000000011010101000" - "010101011010000001010101010100" - "000000001010110101000100000011" - "101010101111110001011110101010" - "010101010101010101010011100111" - "000000000000000000000111010110" - "101010101010101010100100000010" - "110011010010110000000111001110" - "011010011101001011010111010101" - "101010000011010101001111100110" - "001110010010000001111001111010" - "000111101111000100101110001100" - "000100001000100111100110010100" + "101010101010101010101010101011" + "111111111111111111111111111110" + "000000000000000000000000000011" + "101010100011110100111010101000" + "111111110011111110000011111111" + "000000001110000000111000000010" + "101010110110000000101110101010" + "111111111100000000110011111100" + "000000001100000000010100000011" + "101010010000000000001110101010" + "111111001000000000001011111110" + "000000000000000000001000000010" + "101010101000000000010010101001" + "111111110100000000100011111110" + "000000110000000000111100000010" + "101010100100000001110110101010" + "111111111110111101101111111101" + "000000000011111001100100000010" + "101010101010101010101010010110" + "111111111111111111110101111110" + "000000000000000000000101101010" + "000001010101000010100101111110" + "101001011111101011111010000010" + "111111110000101011110101101010" + "000000001111111101011111000010" + "111100001111010101010101111110" + "000010100101010111111010101010" }, - /* 7*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("αβ"), -1, 0 }, { TU("ÿ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, "", ZINT_WARN_USES_ECI, 33, 30, 0, "Auto-ECI; BWIPP different encodation", - "011010110111101111110011111111" - "100110111111001100110011001110" - "001100101100100001100100010111" - "010101010101010101101111110100" - "000000000000000000101100111110" - "101010101010101010010000100110" - "010101010101010101010101010111" - "000000000000000000000000000000" - "101010101010101010101010101000" - "010101010111000000110101010100" - "000000000011010010001100000010" - "101010101100000000111010101010" - "010101101100000000110101010110" - "000000011100000000011100000000" - "101010001000000000011110101000" - "010101011000000000001101010110" - "000000001000000000001000000011" - "101010001000000000001010101010" - "010101010000000000001001010100" - "000000010100000000000000000000" - "101010110010000000110110101000" - "010101010010000001110101010110" - "000000000010101011100100000001" - "101010101011010001100010101000" - "010101010101010101011010000110" - "000000000000000000001001001100" - "101010101010101010100101111110" - "110111000101110010100001011100" - "111110011010010010000011001011" - "111000110110111111111000010100" - "101001001111001011110110101001" - "101010010100011001011101100110" - "111011110000111001101101111000" - }, - /* 8*/ { UNICODE_MODE, -1, -1, { 1, 2, "" }, { { TU("αβ"), -1, 9 }, { TU("ÿ"), -1, 3 }, { TU("貫やぐ禁"), -1, 20 } }, "", 0, 33, 30, 0, "Structured Append; BWIPP different encodation", - "001101101011011110111111001111" - "001110011011111100110011001110" - "111000110010110010000110010011" - "010101010101011011111101111110" - "000000000000001011001111110011" - "101010101010100100001001010100" - "010101010101010101010101010111" + /* 7*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("αβ"), -1, 0 }, { TU("ÿ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, "", ZINT_WARN_USES_ECI, 33, 30, 1, "Auto-ECI", + "101001111110111100111101111111" + "011011111100001100001111110010" + "110011000010011001010101100010" + "010101010101010101010101111000" + "000000000000000000000000011010" + "101010101010101010101010010100" + "010101010101010101010101010101" "000000000000000000000000000010" "101010101010101010101010101011" - "010101010011000000111101010110" - "000000001101000010010000000011" - "101010101010000000100010101000" - "010101111000000000111101010111" - "000000000100000000100000000000" - "101010001100000000011010101010" - "010101011000000000000101010110" - "000000001000000000001000000000" - "101010001000000000001110101000" - "010101100000000000011001010100" - "000000111000000000001000000010" - "101010100110000000010110101011" - "010101011010000000001001010110" - "000000001010011011100000000010" - "101010101011000001000010101000" - "010101010101010101011111010011" - "000000000000000000000100001000" - "101010101010101010100101111111" - "111101010111011110110011111100" - "000011111110111101111100110001" - "001101101111000110000011100010" - "111110010111110110000111100100" - "101010011010110110110010010100" - "100101010111100011100010101000" + "010101010111000000110101010110" + "000000001011010010000000000000" + "101010100000000000111010101000" + "010101100100000000110101010111" + "000000011000000000011100000000" + "101010010000000000010010101010" + "010101010000000000001101010110" + "000000001000000000001000000011" + "101010000000000000001010101010" + "010101100000000000010001010100" + "000000000000000000010100000010" + "101010110010000000110010101000" + "010101011000000001001001010110" + "000000000010101011101100000000" + "101010100010011101101110101000" + "010101010101010101011111011101" + "000000000000000000000110001000" + "101010101010101010100100010011" + "001001001011101100110001101010" + "100011101101100100001001100101" + "110000000110011111100001111000" + "000011110000100000101100001100" + "101111001101000010111111110000" + "001001000010100001000011101011" }, - /* 9*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("ab"), -1, 3 }, { TU("ABCD"), -1, 4 }, { TU(""), 0, 0 } }, "", 0, 33, 30, 0, "Code Set B then A; BWIPP different encodation", + /* 8*/ { UNICODE_MODE, -1, -1, { 1, 2, "" }, { { TU("αβ"), -1, 9 }, { TU("ÿ"), -1, 3 }, { TU("貫やぐ禁"), -1, 20 } }, "", 0, 33, 30, 1, "Structured Append", + "000110100111111011110011110111" + "001001101111110000110000111100" + "110011001100001001100101010101" + "010101010101010101011110111110" + "000000000000000000000110001101" + "101010101010101010100101001010" + "010101010101010101010101010111" + "000000000000000000000000000010" + "101010101010101010101010101000" + "010101010011001100000001010110" + "000000000101001110001000000011" + "101010101010000000101110101000" + "010101111000000000110001010101" + "000000110100000000100000000010" + "101010001100000000011010101011" + "010101011000000000000101010100" + "000000001000000000001000000010" + "101010001000000000001010101000" + "010101100000000000011101010110" + "000000001000000000001000000010" + "101010101110000000011010101001" + "010101010110000000010101010110" + "000000001110011011011000000010" + "101010100011000001100010101010" + "010101010101010101011010110111" + "000000000000000000001111011010" + "101010101010101010101101010010" + "111001010001101011001010011100" + "001101001101101110010010110011" + "101000100011001111100000101000" + "100000000110100010001110000100" + "101000101011101111110001101000" + "000010101010000010000100110100" + }, + /* 9*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("ab"), -1, 3 }, { TU("ABCD"), -1, 4 }, { TU(""), 0, 0 } }, "", 0, 33, 30, 1, "Code Set B then A", "000000010101010101010101010111" "000010000000000000000000000010" "011100101010101010101010101001" @@ -1530,21 +1581,21 @@ static void test_encode_segs(const testCtx *const p_ctx) { "010101010101010101010101010100" "000000000000000000000000000000" "101010101010101010101010101011" - "010101010111001000000001010100" - "000000000111000110010000000000" - "101010100010000000001010101010" - "010101010010000000110001010110" - "000000110000000000110100000010" - "101010001000000000011110101011" - "010101110000000000001101010110" - "000000101000000000001000000001" - "101010110000000000001010101000" - "010101001100000000000101010101" - "000000101100000000000000000010" - "101010011010000000110110101001" - "010101010000000001111101010100" - "000000001010100111000100000010" - "101010101010010001001110101010" + "010101010111000000110001010100" + "000000001011000010000100000000" + "101010100000000000111110101010" + "010101110010000000111001010110" + "000000000000000000101000000010" + "101010011000000000010110101011" + "010101011000000000000001010110" + "000000001000000000001000000001" + "101010101000000000001010101000" + "010101000000000000001001010101" + "000000001000000000001100000010" + "101010001110000000111010101001" + "010101010010000001111101010100" + "000000000110101111011000000010" + "101010101010010001101010101010" "010101010101010101011110000100" "000000000000000000001100111010" "101010101010101010101100000000" @@ -1555,7 +1606,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "011011011101010101001101001000" "001010010110100000100111101000" }, - /* 10*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("\004\004\004\004"), -1, 3 }, { TU("ABCD"), -1, 4 }, { TU("abcd"), -1, 5 } }, "", 0, 33, 30, 0, "Code Set E then A then B; BWIPP different encodation", + /* 10*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("\004\004\004\004"), -1, 3 }, { TU("ABCD"), -1, 4 }, { TU("abcd"), -1, 5 } }, "", 0, 33, 30, 0, "Code Set E then A then B; BWIPP different encodation, LCHA before 2nd ECI not after, same codeword count, same result", "001100000000100011000000000111" "100100000010011011000000100000" "000110011100111011100111001010" @@ -1590,6 +1641,111 @@ static void test_encode_segs(const testCtx *const p_ctx) { "111010100101000101001011011000" "011111000111001010010000111100" }, + /* 11*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("12345678"), -1, 3 }, { TU("91234567901"), -1, 4 }, { TU("12345678"), -1, 5 } }, "", 0, 33, 30, 1, "Digits spanning ECIs", + "111000111110001111011010001111" + "010110010011111100001101100010" + "001100101011100111111011101001" + "010101010101011111111111111110" + "000000000000000110101010000010" + "101010101010100011011000110110" + "010101010101010101010101010111" + "000000000000000000000000000010" + "101010101010101010101010101001" + "010101011111001100010001010100" + "000000000001001010011000000010" + "101010100000000000101010101000" + "010101011110000000011001010110" + "000000011000000000001100000010" + "101010101100000000011110101010" + "010101111000000000000101010100" + "000000101000000000001000000000" + "101010101000000000001110101000" + "010101010100000000000101010110" + "000000001100000000100000000000" + "101010001110000000101110101001" + "010101011100000001010101010110" + "000000001010101111111000000011" + "101010101010011101101110101000" + "010101010101010101011010001010" + "000000000000000000000110111110" + "101010101010101010100011111111" + "011111100011010101000000000110" + "111111010001111000000100101010" + "011101100000010110110001000100" + "101110111111001001111001110000" + "010101101100001010110111001100" + "101011011010100110010010100111" + }, + /* 12*/ { UNICODE_MODE, -1, 96 + 1, { 0, 0, "" }, { { TU("12345678"), -1, 3 }, { TU("91234567901"), -1, 4 }, { TU("12345678"), -1, 5 } }, "9999840012", 0, 33, 30, 1, "SCM prefix mode 2", + "110101110110111110111110001111" + "010101010111000011011001000000" + "110110110001001010100111111001" + "110010111100101111111111111110" + "111111000110010110101010000010" + "011011101000110011011000110100" + "110110100011111111111111110100" + "000011011000000010101010010010" + "111110111010011100100111001001" + "010101010011010000011101010110" + "000000000001100000000100000001" + "101010101110000001011010101000" + "010101100010000000000001010100" + "000000100000000000001000000000" + "101010110000000000001110101000" + "010101110000000000011101010110" + "000000101000000000001000000011" + "101010000000000000011010101010" + "010101011100000000000101010110" + "000000111000000000000100000010" + "101010100110000000001010101011" + "010101011000000001101101010100" + "000000001010000011010100000010" + "101010100110000001010110101000" + "010101010101010101010010100111" + "000000000000000000001111100100" + "101010101010101010100000011011" + "001001001110011001111101100010" + "110000110000100111010010101000" + "110001111010010001001101000010" + "100110000010010001101011000111" + "110011010111010010100011101000" + "111010011111011100110001010110" + }, + /* 13*/ { UNICODE_MODE, 3, 96 + 1, { 0, 0, "" }, { { TU("12345678"), -1, 3 }, { TU("91234567901"), -1, 4 }, { TU("12345678"), -1, 5 } }, "B999840012", 0, 33, 30, 1, "SCM prefix mode 3", + "110101110110111110111110001111" + "010101010111000011011001000000" + "110110110001001010100111111001" + "110010111100101111111111111110" + "111111000110010110101010000010" + "011011101000110011011000110100" + "110110100011111111111111110100" + "000011011000000010101010010010" + "111110111010011100100111001001" + "010101011011100000011101010110" + "000000000101010000001000000001" + "101010100100000011011010101000" + "010101000000000000110001010100" + "000000100000000000110000000000" + "101010000000000000000110101000" + "010101111000000000001101010110" + "000000101000000000001000000011" + "101010000000000000001010101010" + "010101100100000000010101010110" + "000000101000000000110100000010" + "101010110100000000001110101011" + "010101011110000000001001010100" + "000000000010000101110100000010" + "101010100111011001110010101000" + "010101010101010101010010100111" + "000000000000000000001111100100" + "101010101010101010100000011011" + "001001001110011001111101100010" + "110000110000100111010010101000" + "110001111010010001001101000010" + "100110000010010001101011000111" + "110011010111010010100011101000" + "111010011111011100110001010110" + }, }; const int data_size = ARRAY_SIZE(data); int i, j, seg_count, ret; @@ -1651,7 +1807,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { if (!data[i].bwipp_cmp) { if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); } else { - ret = testUtilBwippSegs(i, symbol, -1, data[i].option_2, -1, data[i].segs, seg_count, NULL, cmp_buf, sizeof(cmp_buf)); + ret = testUtilBwippSegs(i, symbol, data[i].option_1, data[i].option_2, -1, data[i].segs, seg_count, data[i].primary, cmp_buf, sizeof(cmp_buf)); assert_zero(ret, "i:%d %s testUtilBwippSegs ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, cmp_msg, cmp_buf, data[i].expected); @@ -1688,121 +1844,6 @@ static void test_encode_segs(const testCtx *const p_ctx) { testFinish(); } -static void test_best_supported_set(const testCtx *const p_ctx) { - int debug = p_ctx->debug; - - struct item { - char *data; - int ret; - float w; - float h; - int ret_vector; - - int expected_rows; - int expected_width; - char *comment; - char *expected; - }; - static const struct item data[] = { - /* 0*/ { "am.//ab,\034TA# z\015!", 0, 100, 100, 0, 33, 30, "Different encodation than BWIPP, same number of codewords", - "111010000101111000111101010111" - "111110000000010100011000000000" - "110000101100110100111010101011" - "010101010101010101010101010100" - "000000000000000000000000000000" - "101010101010101010101010101010" - "010101010101010101010101010110" - "000000000000000000000000000010" - "101010101010101010101010101011" - "010101010111001100000101010110" - "000000001011000010000000000010" - "101010101100000000100110101010" - "010101001100000000101101010101" - "000000100000000000010000000010" - "101010110000000000010010101011" - "010101011000000000000101010110" - "000000001000000000001000000011" - "101010001000000000001010101000" - "010101010000000000001101010101" - "000000001100000000000000000010" - "101010110010000000010110101010" - "010101010100000001111001010110" - "000000001110110111111100000000" - "101010100110111101011010101000" - "010101010101010101010001100011" - "000000000000000000001110101000" - "101010101010101010100010100010" - "011000001001000010001111100000" - "110111111010111010011000001100" - "001011000101101010100000110110" - "110001100010100101010101001101" - "111000100110000011001110001100" - "011100101001111011111001111100" - }, - }; - const int data_size = ARRAY_SIZE(data); - int i, length, ret; - struct zint_symbol *symbol = NULL; - - char escaped[1024]; - char cmp_buf[32768]; - char cmp_msg[1024]; - - int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */ - - testStartSymbol("test_best_supported_set", &symbol); - - for (i = 0; i < data_size; i++) { - - if (testContinue(p_ctx, i)) continue; - - symbol = ZBarcode_Create(); - assert_nonnull(symbol, "Symbol not created\n"); - - length = testUtilSetSymbol(symbol, BARCODE_MAXICODE, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - - ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); - assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); - - if (p_ctx->generate) { - printf(" /*%2d*/ { \"%s\", %d, %.0f, %.0f, %d, %d, %d, \"%s\",\n", - i, testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), ret, - data[i].w, data[i].h, data[i].ret_vector, symbol->rows, symbol->width, data[i].comment); - testUtilModulesPrint(symbol, " ", "\n"); - printf(" },\n"); - } else { - int width, row; - - assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows); - assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width); - - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d\n", i, ret, width, row); - - ret = ZBarcode_Buffer_Vector(symbol, 0); - assert_equal(ret, data[i].ret_vector, "i:%d ZBarcode_Buffer_Vector ret %d != %d\n", i, ret, data[i].ret_vector); - - if (ret < ZINT_ERROR) { - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { - int cmp_len, ret_len; - char modules_dump[33 * 33 + 1]; - assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); - assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - - ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, symbol->primary, escaped, &ret_len); - assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n", - i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped); - } - } - } - - ZBarcode_Delete(symbol); - } - - testFinish(); -} - /* #181 Nico Gunkel OSS-Fuzz */ static void test_fuzz(const testCtx *const p_ctx) { int debug = p_ctx->debug; @@ -1848,7 +1889,9 @@ static void test_fuzz(const testCtx *const p_ctx) { #include -#define TEST_PERF_ITERATIONS 1000 +#define TEST_PERF_ITER_MILLES 10 +#define TEST_PERF_ITERATIONS (TEST_PERF_ITER_MILLES * 1000) +#define TEST_PERF_TIME(arg) (((arg) * 1000.0) / CLOCKS_PER_SEC) /* Not a real test, just performance indicator */ static void test_perf(const testCtx *const p_ctx) { @@ -1871,25 +1914,45 @@ static void test_perf(const testCtx *const p_ctx) { /* 0*/ { BARCODE_MAXICODE, UNICODE_MODE | ESCAPE_MODE, -1, -1, "1Z34567890\\GUPSN\\G102562\\G034\\G\\G1/1\\G\\GY\\G2201 Second St\\GFt Myers\\GFL\\R\\E", "339010000840001", 0, 33, 30, "Mode 2" }, + /* 1*/ { BARCODE_MAXICODE, UNICODE_MODE, 4, -1, "MaxiCode (19 chars)", "", 0, 33, 30, "Mode 4 small" }, + /* 2*/ { BARCODE_MAXICODE, DATA_MODE | ESCAPE_MODE, 4, -1, "ABCDabcdAabcABabcABCabcABCDaABCabABCabcABC\\d233a", "", 0, 33, 30, "Mode 4 medium" }, + /* 3*/ { BARCODE_MAXICODE, DATA_MODE | ESCAPE_MODE, 4, -1, + "ABabcdeAabcdABCabcdABabc\\d192\\d192 \\d192\\d224\\d224\\d028\\d224\\d001\\d001\\d001\\d029\\d00112345678a123456789aABCDa\\d192\\d224\\d001\\d192\\d001\\d224\\d030\\d004", + "", 0, 33, 30, "Mode 4 latches" }, + /* 4*/ { BARCODE_MAXICODE, UNICODE_MODE, 4, -1, + "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "", 0, 33, 30, "Mode 4 txt max" }, + /* 5*/ { BARCODE_MAXICODE, UNICODE_MODE, 4, -1, + "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "", 0, 33, 30, "Mode 4 num max" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; + struct zint_symbol *symbol; - clock_t start, total_encode = 0, total_buffer = 0, diff_encode, diff_buffer; + clock_t start; + clock_t total_create = 0, total_encode = 0, total_buffer = 0; + clock_t diff_create, diff_encode, diff_buffer; + int comment_max = 0; if (!(debug & ZINT_DEBUG_TEST_PERFORMANCE)) { /* -d 256 */ return; } + for (i = 0; i < data_size; i++) if ((int) strlen(data[i].comment) > comment_max) comment_max = (int) strlen(data[i].comment); + + printf("Iterations %d\n", TEST_PERF_ITERATIONS); + for (i = 0; i < data_size; i++) { int j; if (testContinue(p_ctx, i)) continue; - diff_encode = diff_buffer = 0; + diff_create = diff_encode = diff_buffer = 0; for (j = 0; j < TEST_PERF_ITERATIONS; j++) { - struct zint_symbol *symbol = ZBarcode_Create(); + start = clock(); + symbol = ZBarcode_Create(); + diff_create += clock() - start; assert_nonnull(symbol, "Symbol not created\n"); length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); @@ -1903,21 +1966,26 @@ static void test_perf(const testCtx *const p_ctx) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); + #if 0 start = clock(); ret = ZBarcode_Buffer(symbol, 0 /*rotate_angle*/); diff_buffer += clock() - start; assert_zero(ret, "i:%d ZBarcode_Buffer ret %d != 0 (%s)\n", i, ret, symbol->errtxt); + #endif ZBarcode_Delete(symbol); } - printf("%s: diff_encode %gms, diff_buffer %gms\n", data[i].comment, diff_encode * 1000.0 / CLOCKS_PER_SEC, diff_buffer * 1000.0 / CLOCKS_PER_SEC); + printf("%*s: encode % 8gms, buffer % 8gms, create % 8gms\n", comment_max, data[i].comment, + TEST_PERF_TIME(diff_encode), TEST_PERF_TIME(diff_buffer), TEST_PERF_TIME(diff_create)); + total_create += diff_create; total_encode += diff_encode; total_buffer += diff_buffer; } - if (p_ctx->index != -1) { - printf("totals: encode %gms, buffer %gms\n", total_encode * 1000.0 / CLOCKS_PER_SEC, total_buffer * 1000.0 / CLOCKS_PER_SEC); + if (p_ctx->index == -1) { + printf("%*s: encode % 8gms, buffer % 8gms, create % 8gms\n", comment_max, "totals", + TEST_PERF_TIME(total_encode), TEST_PERF_TIME(total_buffer), TEST_PERF_TIME(total_create)); } } @@ -1928,7 +1996,6 @@ int main(int argc, char *argv[]) { { "test_input", test_input }, { "test_encode", test_encode }, { "test_encode_segs", test_encode_segs }, - { "test_best_supported_set", test_best_supported_set }, { "test_fuzz", test_fuzz }, { "test_perf", test_perf }, }; diff --git a/backend/tests/test_reedsol.c b/backend/tests/test_reedsol.c index 6c7b6511..ed7b1dc9 100644 --- a/backend/tests/test_reedsol.c +++ b/backend/tests/test_reedsol.c @@ -124,25 +124,25 @@ static void test_encoding(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ struct item data[] = { - /* 0*/ { 0x43, 4, 1, 7, { 4, 20, 49, 37, 49, 38, 23 }, { 54, 17, 53, 58 } }, /* AUSPOST Australia Post Customer Barcoding Technical Specifications Diagram 10 */ - /* 1*/ { 0x43, 7, 1, 10, { 9, 50, 1, 41, 47, 2, 39, 37, 1, 27 }, { 38, 50, 8, 16, 10, 20, 40 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 */ - /* 2*/ { 0x13, 5, 1, 2, { 0, 9 }, { 12, 2, 3, 1, 9 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 Mode Message */ - /* 3*/ { 0x12d, 5, 1, 3, { 142, 164, 186 }, { 114, 25, 5, 88, 102 } }, /* DATAMATRIX ISO/IEC 16022:2006 Annex O */ - /* 4*/ { 0x89, 25, 1, 25, { 42, 13, 54, 39, 124, 91, 121, 65, 28, 40, 95, 48, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0 }, { 123, 47, 2, 20, 54, 112, 35, 23, 100, 89, 55, 17, 101, 4, 14, 33, 48, 62, 98, 52, 2, 79, 92, 70, 102 } }, /* GRIDMATRIX AIMD014 Section 6.8 */ - /* 5*/ { 0x163, 4, 1, 21, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4 }, { 0xEB, 0xB4, 0x68, 0x1D } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.1 */ - /* 6*/ { 0x163, 24, 1, 27, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4, 0x8A, 0x2C, 0xC3, 0x4E, 0x3D, 0x09, 0x25, 0x9A, 0x7A, 0x29, 0xAB, 0xEA, 0x3E, 0x46, 0x4C, 0x7E, 0x73, 0xE8, 0x6C, 0xC7 }, { 0x08, 0x57, 0x0C, 0xE0, 0x7A, 0xA5, 0xDD, 0xA2, 0x99, 0xCF, 0xA4, 0x82, 0xAD, 0x11, 0xB0, 0x84, 0x74, 0x5D, 0x9A, 0x99, 0x0B, 0xCD, 0x49, 0x77 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 1st block */ - /* 7*/ { 0x163, 24, 1, 27, { 0xE7, 0x3E, 0x33, 0x29, 0xE8, 0xFC, }, { 0xA2, 0xA7, 0x68, 0x8A, 0x5F, 0xE6, 0xAA, 0x11, 0xA6, 0x69, 0x4A, 0xCF, 0xCF, 0x20, 0x5D, 0x00, 0x1B, 0x79, 0xA1, 0xFE, 0xB7, 0x94, 0x03, 0x9B } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 2nd block */ + /* 0*/ { 0x43, 4, 1, 7, { 4, 20, 49, 37, 49, 38, 23 }, { 58, 53, 17, 54 } }, /* AUSPOST Australia Post Customer Barcoding Technical Specifications Diagram 10 */ + /* 1*/ { 0x43, 7, 1, 10, { 9, 50, 1, 41, 47, 2, 39, 37, 1, 27 }, { 40, 20, 10, 16, 8, 50, 38 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 */ + /* 2*/ { 0x13, 5, 1, 2, { 0, 9 }, { 9, 1, 3, 2, 12 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 Mode Message */ + /* 3*/ { 0x12d, 5, 1, 3, { 142, 164, 186 }, { 102, 88, 5, 25, 114 } }, /* DATAMATRIX ISO/IEC 16022:2006 Annex O */ + /* 4*/ { 0x89, 25, 1, 25, { 42, 13, 54, 39, 124, 91, 121, 65, 28, 40, 95, 48, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0 }, { 102, 70, 92, 79, 2, 52, 98, 62, 48, 33, 14, 4, 101, 17, 55, 89, 100, 23, 35, 112, 54, 20, 2, 47, 123 } }, /* GRIDMATRIX AIMD014 Section 6.8 */ + /* 5*/ { 0x163, 4, 1, 21, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4 }, { 0x1D, 0x68, 0xB4, 0xEB } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.1 */ + /* 6*/ { 0x163, 24, 1, 27, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4, 0x8A, 0x2C, 0xC3, 0x4E, 0x3D, 0x09, 0x25, 0x9A, 0x7A, 0x29, 0xAB, 0xEA, 0x3E, 0x46, 0x4C, 0x7E, 0x73, 0xE8, 0x6C, 0xC7 }, { 0x77, 0x49, 0xCD, 0x0B, 0x99, 0x9A, 0x5D, 0x74, 0x84, 0xB0, 0x11, 0xAD, 0x82, 0xA4, 0xCF, 0x99, 0xA2, 0xDD, 0xA5, 0x7A, 0xE0, 0x0C, 0x57, 0x08 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 1st block */ + /* 7*/ { 0x163, 24, 1, 27, { 0xE7, 0x3E, 0x33, 0x29, 0xE8, 0xFC, }, { 0x9B, 0x03, 0x94, 0xB7, 0xFE, 0xA1, 0x79, 0x1B, 0x00, 0x5D, 0x20, 0xCF, 0xCF, 0x4A, 0x69, 0xA6, 0x11, 0xAA, 0xE6, 0x5F, 0x8A, 0x68, 0xA7, 0xA2 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 2nd block */ /* 8*/ { 0x163, 24, 1, 29, { 0x00 }, { 0x00 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 3rd block */ - /* 9*/ { 0x25, 6, 1, 16, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 14, 7, 23, 3, 23, 15 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.1 */ - /* 10*/ { 0x25, 6, 1, 16, { 15, 22, 3, 25, 23, 26, 7, 3, 20, 14, 1, 4, 16, 3, 9, 28 }, { 27, 22, 24, 16, 6, 24 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.2 */ - /* 11*/ { 0x25, 7, 1, 19, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 20, 1, 20, 7, 14, 11, 18 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.1 */ - /* 12*/ { 0x25, 7, 1, 19, { 0, 8, 21, 10, 29, 1, 29, 21, 2, 24, 15, 2, 19, 1, 4, 15, 11, 4, 16 }, { 19, 7, 9, 8, 6, 16, 16 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.2 */ - /* 13*/ { 0x43, 10, 1, 10, { 4, 13, 63, 1, 24, 9, 59, 3, 15, 4 }, { 50, 2, 42, 51, 53, 34, 22, 20, 5, 16 } }, /* MAXICODE Annex H Primary */ - /* 14*/ { 0x43, 20, 1, 42, { 5, 57, 49, 47, 8, 18, 59, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 31, 2, 58, 6, 6, 39, 13, 63, 2, 30, 19, 19, 14, 19, 23, 17, 62, 8, 2, 23 } }, /* MAXICODE Annex H Secondary odd */ - /* 15*/ { 0x43, 20, 1, 42, { 47, 40, 57, 3, 1, 19, 41, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 1, 15, 22, 28, 39, 17, 60, 5, 35, 35, 4, 8, 0, 32, 51, 45, 63, 53, 61, 14 } }, /* MAXICODE Annex H Secondary even */ - /* 16*/ { 0x11d, 10, 0, 16, { 0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11 }, { 0xA5, 0x24, 0xD4, 0xC1, 0xED, 0x36, 0xC7, 0x87, 0x2C, 0x55 } }, /* QRCODE Annex I.2 */ - /* 17*/ { 0x11d, 5, 0, 5, { 0x40, 0x18, 0xAC, 0xC3, 0x00 }, { 0x86, 0x0D, 0x22, 0xAE, 0x30 } }, /* QRCODE Annex I.3 */ - /* 18*/ { 0x163, 256, 0, 1, { 0xFF }, { 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255 } }, + /* 9*/ { 0x25, 6, 1, 16, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 15, 23, 3, 23, 7, 14 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.1 */ + /* 10*/ { 0x25, 6, 1, 16, { 15, 22, 3, 25, 23, 26, 7, 3, 20, 14, 1, 4, 16, 3, 9, 28 }, { 24, 6, 16, 24, 22, 27 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.2 */ + /* 11*/ { 0x25, 7, 1, 19, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 18, 11, 14, 7, 20, 1, 20 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.1 */ + /* 12*/ { 0x25, 7, 1, 19, { 0, 8, 21, 10, 29, 1, 29, 21, 2, 24, 15, 2, 19, 1, 4, 15, 11, 4, 16 }, { 16, 16, 6, 8, 9, 7, 19 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.2 */ + /* 13*/ { 0x43, 10, 1, 10, { 4, 13, 63, 1, 24, 9, 59, 3, 15, 4 }, { 16, 5, 20, 22, 34, 53, 51, 42, 2, 50 } }, /* MAXICODE Annex H Primary */ + /* 14*/ { 0x43, 20, 1, 42, { 5, 57, 49, 47, 8, 18, 59, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 23, 2, 8, 62, 17, 23, 19, 14, 19, 19, 30, 2, 63, 13, 39, 6, 6, 58, 2, 31 } }, /* MAXICODE Annex H Secondary odd */ + /* 15*/ { 0x43, 20, 1, 42, { 47, 40, 57, 3, 1, 19, 41, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 14, 61, 53, 63, 45, 51, 32, 0, 8, 4, 35, 35, 5, 60, 17, 39, 28, 22, 15, 1 } }, /* MAXICODE Annex H Secondary even */ + /* 16*/ { 0x11d, 10, 0, 16, { 0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11 }, { 0x55, 0x2C, 0x87, 0xC7, 0x36, 0xED, 0xC1, 0xD4, 0x24, 0xA5 } }, /* QRCODE Annex I.2 */ + /* 17*/ { 0x11d, 5, 0, 5, { 0x40, 0x18, 0xAC, 0xC3, 0x00 }, { 0x30, 0xAE, 0x22, 0x0D, 0x86 } }, /* QRCODE Annex I.3 */ + /* 18*/ { 0x163, 256, 0, 1, { 0xFF }, { 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255 } }, }; int data_size = ARRAY_SIZE(data); int i; @@ -187,25 +187,25 @@ static void test_encoding_uint(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ struct item data[] = { - /* 0*/ { 0x43, 4, 1, 7, { 4, 20, 49, 37, 49, 38, 23 }, { 54, 17, 53, 58 } }, /* AUSPOST Australia Post Customer Barcoding Technical Specifications Diagram 10 */ - /* 1*/ { 0x43, 7, 1, 10, { 9, 50, 1, 41, 47, 2, 39, 37, 1, 27 }, { 38, 50, 8, 16, 10, 20, 40 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 */ - /* 2*/ { 0x13, 5, 1, 2, { 0, 9 }, { 12, 2, 3, 1, 9 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 Mode Message */ - /* 3*/ { 0x12d, 5, 1, 3, { 142, 164, 186 }, { 114, 25, 5, 88, 102 } }, /* DATAMATRIX ISO/IEC 16022:2006 Annex O */ - /* 4*/ { 0x89, 25, 1, 25, { 42, 13, 54, 39, 124, 91, 121, 65, 28, 40, 95, 48, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0 }, { 123, 47, 2, 20, 54, 112, 35, 23, 100, 89, 55, 17, 101, 4, 14, 33, 48, 62, 98, 52, 2, 79, 92, 70, 102 } }, /* GRIDMATRIX AIMD014 Section 6.8 */ - /* 5*/ { 0x163, 4, 1, 21, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4 }, { 0xEB, 0xB4, 0x68, 0x1D } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.1 */ - /* 6*/ { 0x163, 24, 1, 27, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4, 0x8A, 0x2C, 0xC3, 0x4E, 0x3D, 0x09, 0x25, 0x9A, 0x7A, 0x29, 0xAB, 0xEA, 0x3E, 0x46, 0x4C, 0x7E, 0x73, 0xE8, 0x6C, 0xC7 }, { 0x08, 0x57, 0x0C, 0xE0, 0x7A, 0xA5, 0xDD, 0xA2, 0x99, 0xCF, 0xA4, 0x82, 0xAD, 0x11, 0xB0, 0x84, 0x74, 0x5D, 0x9A, 0x99, 0x0B, 0xCD, 0x49, 0x77 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 1st block */ - /* 7*/ { 0x163, 24, 1, 27, { 0xE7, 0x3E, 0x33, 0x29, 0xE8, 0xFC, }, { 0xA2, 0xA7, 0x68, 0x8A, 0x5F, 0xE6, 0xAA, 0x11, 0xA6, 0x69, 0x4A, 0xCF, 0xCF, 0x20, 0x5D, 0x00, 0x1B, 0x79, 0xA1, 0xFE, 0xB7, 0x94, 0x03, 0x9B } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 2nd block */ + /* 0*/ { 0x43, 4, 1, 7, { 4, 20, 49, 37, 49, 38, 23 }, { 58, 53, 17, 54 } }, /* AUSPOST Australia Post Customer Barcoding Technical Specifications Diagram 10 */ + /* 1*/ { 0x43, 7, 1, 10, { 9, 50, 1, 41, 47, 2, 39, 37, 1, 27 }, { 40, 20, 10, 16, 8, 50, 38 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 */ + /* 2*/ { 0x13, 5, 1, 2, { 0, 9 }, { 9, 1, 3, 2, 12 } }, /* AZTEC ISO/IEC 24778:2008 Section G.4 Mode Message */ + /* 3*/ { 0x12d, 5, 1, 3, { 142, 164, 186 }, { 102, 88, 5, 25, 114 } }, /* DATAMATRIX ISO/IEC 16022:2006 Annex O */ + /* 4*/ { 0x89, 25, 1, 25, { 42, 13, 54, 39, 124, 91, 121, 65, 28, 40, 95, 48, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0, 126, 0 }, { 102, 70, 92, 79, 2, 52, 98, 62, 48, 33, 14, 4, 101, 17, 55, 89, 100, 23, 35, 112, 54, 20, 2, 47, 123 } }, /* GRIDMATRIX AIMD014 Section 6.8 */ + /* 5*/ { 0x163, 4, 1, 21, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4 }, { 0x1D, 0x68, 0xB4, 0xEB } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.1 */ + /* 6*/ { 0x163, 24, 1, 27, { 0x11, 0xED, 0xC8, 0xC5, 0x40, 0x0F, 0xF4, 0x8A, 0x2C, 0xC3, 0x4E, 0x3D, 0x09, 0x25, 0x9A, 0x7A, 0x29, 0xAB, 0xEA, 0x3E, 0x46, 0x4C, 0x7E, 0x73, 0xE8, 0x6C, 0xC7 }, { 0x77, 0x49, 0xCD, 0x0B, 0x99, 0x9A, 0x5D, 0x74, 0x84, 0xB0, 0x11, 0xAD, 0x82, 0xA4, 0xCF, 0x99, 0xA2, 0xDD, 0xA5, 0x7A, 0xE0, 0x0C, 0x57, 0x08 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 1st block */ + /* 7*/ { 0x163, 24, 1, 27, { 0xE7, 0x3E, 0x33, 0x29, 0xE8, 0xFC, }, { 0x9B, 0x03, 0x94, 0xB7, 0xFE, 0xA1, 0x79, 0x1B, 0x00, 0x5D, 0x20, 0xCF, 0xCF, 0x4A, 0x69, 0xA6, 0x11, 0xAA, 0xE6, 0x5F, 0x8A, 0x68, 0xA7, 0xA2 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 2nd block */ /* 8*/ { 0x163, 24, 1, 29, { 0x00 }, { 0x00 } }, /* HANXIN ISO/IEC DIS 20830:2019 Annex K.2 3rd block */ - /* 9*/ { 0x25, 6, 1, 16, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 14, 7, 23, 3, 23, 15 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.1 */ - /* 10*/ { 0x25, 6, 1, 16, { 15, 22, 3, 25, 23, 26, 7, 3, 20, 14, 1, 4, 16, 3, 9, 28 }, { 27, 22, 24, 16, 6, 24 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.2 */ - /* 11*/ { 0x25, 7, 1, 19, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 20, 1, 20, 7, 14, 11, 18 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.1 */ - /* 12*/ { 0x25, 7, 1, 19, { 0, 8, 21, 10, 29, 1, 29, 21, 2, 24, 15, 2, 19, 1, 4, 15, 11, 4, 16 }, { 19, 7, 9, 8, 6, 16, 16 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.2 */ - /* 13*/ { 0x43, 10, 1, 10, { 4, 13, 63, 1, 24, 9, 59, 3, 15, 4 }, { 50, 2, 42, 51, 53, 34, 22, 20, 5, 16 } }, /* MAXICODE Annex H Primary */ - /* 14*/ { 0x43, 20, 1, 42, { 5, 57, 49, 47, 8, 18, 59, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 31, 2, 58, 6, 6, 39, 13, 63, 2, 30, 19, 19, 14, 19, 23, 17, 62, 8, 2, 23 } }, /* MAXICODE Annex H Secondary odd */ - /* 15*/ { 0x43, 20, 1, 42, { 47, 40, 57, 3, 1, 19, 41, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 1, 15, 22, 28, 39, 17, 60, 5, 35, 35, 4, 8, 0, 32, 51, 45, 63, 53, 61, 14 } }, /* MAXICODE Annex H Secondary even */ - /* 16*/ { 0x11d, 10, 0, 16, { 0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11 }, { 0xA5, 0x24, 0xD4, 0xC1, 0xED, 0x36, 0xC7, 0x87, 0x2C, 0x55 } }, /* QRCODE Annex I.2 */ - /* 17*/ { 0x11d, 5, 0, 5, { 0x40, 0x18, 0xAC, 0xC3, 0x00 }, { 0x86, 0x0D, 0x22, 0xAE, 0x30 } }, /* QRCODE Annex I.3 */ - /* 18*/ { 0x163, 256, 0, 1, { 0xFF }, { 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255 } }, + /* 9*/ { 0x25, 6, 1, 16, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 15, 23, 3, 23, 7, 14 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.1 */ + /* 10*/ { 0x25, 6, 1, 16, { 15, 22, 3, 25, 23, 26, 7, 3, 20, 14, 1, 4, 16, 3, 9, 28 }, { 24, 6, 16, 24, 22, 27 } }, /* MAILMARK_4S Royal Mail Mailmark barcode C encoding and decoding Example 2.3.2 */ + /* 11*/ { 0x25, 7, 1, 19, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, { 18, 11, 14, 7, 20, 1, 20 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.1 */ + /* 12*/ { 0x25, 7, 1, 19, { 0, 8, 21, 10, 29, 1, 29, 21, 2, 24, 15, 2, 19, 1, 4, 15, 11, 4, 16 }, { 16, 16, 6, 8, 9, 7, 19 } }, /* MAILMARK_4S Royal Mail Mailmark barcode L encoding and decoding Example 2.3.2 */ + /* 13*/ { 0x43, 10, 1, 10, { 4, 13, 63, 1, 24, 9, 59, 3, 15, 4 }, { 16, 5, 20, 22, 34, 53, 51, 42, 2, 50 } }, /* MAXICODE Annex H Primary */ + /* 14*/ { 0x43, 20, 1, 42, { 5, 57, 49, 47, 8, 18, 59, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 23, 2, 8, 62, 17, 23, 19, 14, 19, 19, 30, 2, 63, 13, 39, 6, 6, 58, 2, 31 } }, /* MAXICODE Annex H Secondary odd */ + /* 15*/ { 0x43, 20, 1, 42, { 47, 40, 57, 3, 1, 19, 41, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 14, 61, 53, 63, 45, 51, 32, 0, 8, 4, 35, 35, 5, 60, 17, 39, 28, 22, 15, 1 } }, /* MAXICODE Annex H Secondary even */ + /* 16*/ { 0x11d, 10, 0, 16, { 0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11 }, { 0x55, 0x2C, 0x87, 0xC7, 0x36, 0xED, 0xC1, 0xD4, 0x24, 0xA5 } }, /* QRCODE Annex I.2 */ + /* 17*/ { 0x11d, 5, 0, 5, { 0x40, 0x18, 0xAC, 0xC3, 0x00 }, { 0x30, 0xAE, 0x22, 0x0D, 0x86 } }, /* QRCODE Annex I.3 */ + /* 18*/ { 0x163, 256, 0, 1, { 0xFF }, { 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255 } }, }; int data_size = ARRAY_SIZE(data); int i; @@ -251,10 +251,10 @@ static void test_uint_encoding(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ struct item data[] = { - /* 0*/ { 0x409, 1023, 4, 1, 7, { 0x3FF, 0x000, 0x100, 0x1FF, 0x3FF, 0x000, 0x123 }, { 229, 153, 993, 674 } }, - /* 1*/ { 0x1069, 4095, 4, 1, 7, { 0xFFF, 0x000, 0x700, 0x7FF, 0xFFF, 0x000, 0x123 }, { 3472, 2350, 3494, 575 } }, - /* 2*/ { 0x1000, 4095, 4, 0, 7, { 0xFFF, 0x000, 0x700, 0x7FF, 0xFFF, 0x000, 0x123 }, { 1, 65, 0, 64 } }, - /* 3*/ { 0x1000, 4095, 256, 0, 1, { 0xFFF }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 512, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + /* 0*/ { 0x409, 1023, 4, 1, 7, { 0x3FF, 0x000, 0x100, 0x1FF, 0x3FF, 0x000, 0x123 }, { 674, 993, 153, 229 } }, + /* 1*/ { 0x1069, 4095, 4, 1, 7, { 0xFFF, 0x000, 0x700, 0x7FF, 0xFFF, 0x000, 0x123 }, { 575, 3494, 2350, 3472 } }, + /* 2*/ { 0x1000, 4095, 4, 0, 7, { 0xFFF, 0x000, 0x700, 0x7FF, 0xFFF, 0x000, 0x123 }, { 64, 0, 65, 1 } }, + /* 3*/ { 0x1000, 4095, 256, 0, 1, { 0xFFF }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 512, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }, }; int data_size = ARRAY_SIZE(data); int i; diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index cc89bbfe..2e57f099 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -52,13 +52,17 @@ #include "../eci.h" #include "../output.h" -static int tests = 0; -static int failed = 0; -static int skipped = 0; -int assertionFailed = 0; -int assertionNum = 0; -struct zint_symbol **assertionPPSymbol = NULL; -const char *assertionFilename = ""; +static int testTests = 0; +static int testFailed = 0; +static int testSkipped = 0; +static int testDataset = 0; +static int testDatasetNum = 0; +static int testDatasetTot = 0; +int testAssertFailed = 0; +int testAssertNum = 0; +static int testAssertTot = 0; +struct zint_symbol **testAssertPPSymbol = NULL; +const char *testAssertFilename = ""; static const char *testName = NULL; static const char *testFunc = NULL; @@ -67,52 +71,52 @@ static const char *testFunc = NULL; #if (defined(_MSC_VER) && _MSC_VER <= 1200) || defined(ZINT_IS_C89) /* VC6 or C89 */ #include void assert_zero(int exp, const char *fmt, ...) { - assertionNum++; + testAssertNum++; if (exp != 0) { - va_list args; assertionFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; }; + va_list args; testAssertFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; }; } } void assert_nonzero(int exp, const char *fmt, ...) { - assertionNum++; + testAssertNum++; if (exp == 0) { - va_list args; assertionFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; }; + va_list args; testAssertFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; }; } } void assert_null(const void *exp, const char *fmt, ...) { - assertionNum++; + testAssertNum++; if (exp != NULL) { - va_list args; assertionFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; }; + va_list args; testAssertFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; }; } } void assert_nonnull(const void *exp, const char *fmt, ...) { - assertionNum++; + testAssertNum++; if (exp == NULL) { - va_list args; assertionFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; }; + va_list args; testAssertFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; }; } } void assert_equal(int e1, int e2, const char *fmt, ...) { - assertionNum++; + testAssertNum++; if (e1 != e2) { - va_list args; assertionFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; }; + va_list args; testAssertFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; }; } } void assert_equalu64(uint64_t e1, uint64_t e2, const char *fmt, ...) { - assertionNum++; + testAssertNum++; if (e1 != e2) { - va_list args; assertionFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; }; + va_list args; testAssertFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; }; } } void assert_notequal(int e1, int e2, const char *fmt, ...) { - assertionNum++; + testAssertNum++; if (e1 == e2) { - va_list args; assertionFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; }; + va_list args; testAssertFailed++; va_start(args, fmt); vprintf(fmt, args); va_end(args); testFinish(); + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; }; } } #endif @@ -129,66 +133,93 @@ void assert_notequal(int e1, int e2, const char *fmt, ...) { /* Begin individual test function */ void testStartReal(const char *func, const char *name, struct zint_symbol **pp_symbol) { - tests++; + testTests++; if (func && *func && name && *name && strcmp(func, name) == 0) { testName = ""; } else { testName = name; } testFunc = func ? func : ""; - assertionFailed = 0; - assertionNum = 0; - assertionPPSymbol = pp_symbol; - printf("_____%d: %s: %s...\n", tests, testFunc, testName ? testName : ""); + testDataset = 0; + testDatasetNum = 0; + testAssertFailed = 0; + testAssertNum = 0; + testAssertPPSymbol = pp_symbol; + printf("_____%d: %s: %s...\n", testTests, testFunc, testName ? testName : ""); } /* End individual test function */ void testFinish(void) { - fputs(assertionFailed ? "*****" : ".....", stdout); + testAssertTot += testAssertNum; + testDatasetTot += testDatasetNum; + fputs(testAssertFailed ? "*****" : ".....", stdout); if (testName && *testName) { - printf("%d: %s: %s ", tests, testFunc, testName); + printf("%d: %s: %s ", testTests, testFunc, testName); } else { - printf("%d: %s: ", tests, testFunc); + printf("%d: %s: ", testTests, testFunc); } - if (assertionFailed) { - printf("FAILED. (%d assertions failed.)\n", assertionFailed); - failed++; + if (testAssertFailed) { + printf("FAILED. (%d assertions failed)\n", testAssertFailed); + testFailed++; + } else if (testDataset) { + if (testAssertNum) { + printf("PASSED. (%d assertions, %d dataset items)\n", testAssertNum, testDatasetNum); + } else { + printf("EMPTY. (***No assertions executed***)\n"); + } } else { - printf("PASSED. (%d assertions passed.)\n", assertionNum); + if (testAssertNum) { + printf("PASSED. (%d assertions)\n", testAssertNum); + } else { + printf("EMPTY. (***No assertions executed***)\n"); + } } } /* Skip (and end) individual test function */ void testSkip(const char *msg) { - skipped++; - fputs(assertionFailed ? "*****" : ".....", stdout); + testSkipped++; + testAssertTot += testAssertNum; + testDatasetTot += testDatasetNum; + fputs(testAssertFailed ? "*****" : ".....", stdout); if (testName && *testName) { - printf("%d: %s: %s ", tests, testFunc, testName); + printf("%d: %s: %s ", testTests, testFunc, testName); } else { - printf("%d: %s: ", tests, testFunc); + printf("%d: %s: ", testTests, testFunc); } - if (assertionFailed) { - printf("FAILED. (%d assertions failed.)\n", assertionFailed); - failed++; + if (testAssertFailed) { + printf("FAILED. (%d assertions failed)\n", testAssertFailed); + testFailed++; + } else if (testDataset) { + printf("SKIPPED. %s. (%d assertions, %d dataset items)\n", msg, testAssertNum, testDatasetNum); } else { - printf("SKIPPED. %s. (%d assertions passed.)\n", msg, assertionNum); + printf("SKIPPED. %s. (%d assertions)\n", msg, testAssertNum); } } /* End test program */ void testReport(void) { - if (failed && skipped) { - printf("Total %d tests, %d skipped, %d **fails**.\n", tests, skipped, failed); + if (testFailed && testSkipped) { + printf("Total %d tests, %d skipped, %d **fails**.\n", testTests, testSkipped, testFailed); exit(-1); } - if (failed) { - printf("Total %d tests, %d **fails**.\n", tests, failed); + if (testFailed) { + printf("Total %d tests, %d **fails**.\n", testTests, testFailed); exit(-1); } - if (skipped) { - printf("Total %d tests, %d skipped.\n", tests, skipped); - } else if (tests) { - printf("Total %d tests, all passed.\n", tests); + if (testSkipped) { + printf("Total %d tests, %d skipped.\n", testTests, testSkipped); + } else if (testTests) { + if (testAssertTot) { + if (testDatasetTot) { + printf("Total %d tests (%d assertions, %d dataset items), all passed.\n", + testTests, testAssertTot, testDatasetTot); + } else { + printf("Total %d tests (%d assertions), all passed.\n", testTests, testAssertTot); + } + } else { + printf("***No assertions executed in %d tests.***\n", testTests); + } } else { fputs("***No tests run.***\n", stdout); } @@ -281,28 +312,28 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { filename = strrchr(argv[0], '/'); #endif if (filename) { - assertionFilename = filename + 1; + testAssertFilename = filename + 1; } else { - assertionFilename = argv[0]; + testAssertFilename = argv[0]; } } for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-d") == 0) { if (i + 1 == argc) { - fprintf(stderr, "testRun: -d debug value missing, ignoring\n"); + fprintf(stderr, "***testRun: -d debug value missing, ignoring***\n"); } else { int d; /* Allow multiple debug flags, OR-ing */ optarg = argv[++i]; if (!validate_int(optarg, &d)) { - fprintf(stderr, "testRun: -d debug value invalid, ignoring\n"); + fprintf(stderr, "***testRun: -d debug value invalid, ignoring***\n"); } else { ctx.debug |= d; } } } else if (strcmp(argv[i], "-f") == 0) { if (i + 1 == argc) { - fprintf(stderr, "testRun: -f func value missing, ignoring\n"); + fprintf(stderr, "***testRun: -f func value missing, ignoring***\n"); } else { optarg = argv[++i]; if (strlen(optarg) < 256) { @@ -314,13 +345,13 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { } func = func_buf; } else { - fprintf(stderr, "testRun: -f func value too long, ignoring\n"); + fprintf(stderr, "***testRun: -f func value too long, ignoring***\n"); func = NULL; } } } else if (strcmp(argv[i], "-n") == 0) { if (i + 1 == argc) { - fprintf(stderr, "testRun: -n func exclude value missing, ignoring\n"); + fprintf(stderr, "***testRun: -n func exclude value missing, ignoring***\n"); } else { optarg = argv[++i]; if (strlen(optarg) < 256) { @@ -332,13 +363,13 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { } func_not = func_not_buf; } else { - fprintf(stderr, "testRun: -p func exclude value too long, ignoring\n"); + fprintf(stderr, "***testRun: -p func exclude value too long, ignoring***\n"); func_not = NULL; } } } else if (strcmp(argv[i], "-m") == 0) { if (i + 1 == argc) { - fprintf(stderr, "testRun: -m func match value missing, ignoring\n"); + fprintf(stderr, "***testRun: -m func match value missing, ignoring***\n"); } else { func_match = argv[++i]; } @@ -346,30 +377,30 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { ctx.generate = 1; } else if (strcmp(argv[i], "-i") == 0) { if (i + 1 == argc) { - fprintf(stderr, "testRun: -i index value missing, ignoring\n"); + fprintf(stderr, "***testRun: -i index value missing, ignoring***\n"); } else { optarg = argv[++i]; if (!validate_int_range(optarg, &ctx.index, &ctx.index_end)) { - fprintf(stderr, "testRun: -i index value invalid, ignoring\n"); + fprintf(stderr, "***testRun: -i index value invalid, ignoring***\n"); ctx.index = ctx.index_end = -1; } } } else if (strcmp(argv[i], "-x") == 0) { if (i + 1 == argc) { - fprintf(stderr, "testRun: -x exclude value missing, ignoring\n"); + fprintf(stderr, "***testRun: -x exclude value missing, ignoring***\n"); } else { optarg = argv[++i]; if (exclude_idx + 1 == ZINT_TEST_CTX_EXC_MAX) { - fprintf(stderr, "testRun: too many -x exclude values, ignoring\n"); + fprintf(stderr, "***testRun: too many -x exclude values, ignoring***\n"); } else if (!validate_int_range(optarg, &ctx.exclude[exclude_idx], &ctx.exclude_end[exclude_idx])) { - fprintf(stderr, "testRun: -x exclude value invalid, ignoring\n"); + fprintf(stderr, "***testRun: -x exclude value invalid, ignoring***\n"); ctx.exclude[exclude_idx] = ctx.exclude_end[exclude_idx] = -1; } else { exclude_idx++; } } } else { - fprintf(stderr, "testRun: unknown arg '%s', ignoring\n", argv[i]); + fprintf(stderr, "***testRun: unknown arg '%s', ignoring***\n", argv[i]); } } @@ -389,16 +420,17 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { } if (func && !ran) { - fprintf(stderr, "testRun: unknown -f func arg '%s'\n", func); + fprintf(stderr, "***testRun: unknown -f func arg '%s'***\n", func); } if (func_match && !ran) { - fprintf(stderr, "testRun: no funcs matched -m arg '%s'\n", func_match); + fprintf(stderr, "***testRun: no funcs matched -m arg '%s'***\n", func_match); } } /* Call in a dataset loop to determine if a datum should be tested according to -i & -x args */ int testContinue(const testCtx *const p_ctx, const int i) { int j; + testDataset = 1; if (p_ctx->index != -1) { if (p_ctx->index_end != -1) { if (i < p_ctx->index || (p_ctx->index_end && i > p_ctx->index_end)) { @@ -421,6 +453,7 @@ int testContinue(const testCtx *const p_ctx, const int i) { printf("i:%d\n", i); fflush(stdout); /* For assertion failures */ } + testDatasetNum++; return 0; } @@ -3102,12 +3135,18 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int bwipp_opts = bwipp_opts_buf; } } else if (symbology == BARCODE_MAXICODE) { - int have_scm = memcmp(bwipp_data, "[)>^03001^02996", 15) == 0; + int have_eci = memcmp(bwipp_data, "^ECI", 4) == 0; + int have_scm = memcmp(bwipp_data + have_eci * 10, "[)>^03001^029", 13) == 0 + && z_isdigit(bwipp_data[13 + have_eci * 10]) + && z_isdigit(bwipp_data[14 + have_eci * 10]); int mode = option_1; + char prefix_buf[30]; + int prefix_len = 0; if (mode <= 0) { if (primary_len == 0) { mode = 4; } else { + mode = 2; for (i = 0; i < primary_len - 6; i++) { if (!z_isdigit(symbol->primary[i]) && (symbol->primary[i] != ' ')) { mode = 3; @@ -3121,9 +3160,21 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int strlen(bwipp_opts_buf) ? " " : "", mode); bwipp_opts = bwipp_opts_buf; } + if (option_2 > 0) { + char scm_vv_buf[40]; + sprintf(scm_vv_buf, "[)>^03001^029%02d", option_2 - 1); /* [)>\R01\Gvv */ + memmove(bwipp_data + 15, bwipp_data, strlen(bwipp_data) + 1); + memcpy(bwipp_data, scm_vv_buf, 15); + have_scm = 1; + have_eci = 0; + if (!parse) { + sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%sparse", + strlen(bwipp_opts_buf) ? " " : ""); + bwipp_opts = bwipp_opts_buf; + parse = 1; + } + } if (primary_len >= 6) { /* Keep gcc happy */ - char prefix_buf[30]; - int prefix_len; int postcode_len = primary_len - 6; char postcode[10]; if (postcode_len >= 10) postcode_len = 9; @@ -3144,31 +3195,27 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int sprintf(prefix_buf, "%s^029%.3s^029%.3s^029", postcode, primary + primary_len - 6, primary + primary_len - 3); prefix_len = (int) strlen(prefix_buf); - if (have_scm) { - memmove(bwipp_data + 15 + prefix_len, bwipp_data, strlen(bwipp_data) - 15 + 1); - memcpy(bwipp_data + 15, prefix_buf, prefix_len); - } else { - memmove(bwipp_data + prefix_len, bwipp_data, strlen(bwipp_data) + 1); - memcpy(bwipp_data, prefix_buf, prefix_len); + } + if (prefix_len || have_scm) { + char eci_buf[10]; + int offset = 15 * have_scm; + if (have_eci) { + memcpy(eci_buf, bwipp_data, 10); + memmove(bwipp_data, bwipp_data + 10, strlen(bwipp_data) - 10 + 1); } - if (!parse) { - sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%sparse", - strlen(bwipp_opts_buf) ? " " : ""); - bwipp_opts = bwipp_opts_buf; - parse = 1; + memmove(bwipp_data + offset + prefix_len, bwipp_data + offset, strlen(bwipp_data) - offset + 1); + memcpy(bwipp_data + offset, prefix_buf, prefix_len); + if (have_eci) { + memmove(bwipp_data + offset + prefix_len + 10, bwipp_data + offset + prefix_len, + strlen(bwipp_data) - (offset + prefix_len) + 1); + memcpy(bwipp_data + offset + prefix_len, eci_buf, 10); } } - if (option_2 > 0) { - char scm_vv_buf[40]; - sprintf(scm_vv_buf, "[^041>^03001^029%02d", option_2 - 1); /* [)>\R01\Gvv */ - memmove(bwipp_data + 18, bwipp_data, strlen(bwipp_data) + 1); - memcpy(bwipp_data, scm_vv_buf, 18); - if (!parse) { - sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%sparse", - strlen(bwipp_opts_buf) ? " " : ""); - bwipp_opts = bwipp_opts_buf; - parse = 1; - } + if (!parse) { + sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%sparse", + strlen(bwipp_opts_buf) ? " " : ""); + bwipp_opts = bwipp_opts_buf; + parse = 1; } if (symbol->structapp.count) { sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%ssam=%c%c", @@ -3759,7 +3806,7 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym { "", -1, 105, }, { "PDF417", BARCODE_HIBC_PDF, 106, }, { "", -1, 107, }, - { "", BARCODE_HIBC_MICPDF, 108, }, + { "MicroPDF417", BARCODE_HIBC_MICPDF, 108, }, { "", -1, 109, }, { "CodablockF", BARCODE_HIBC_BLOCKF, 110, }, { "", -1, 111, }, @@ -4110,6 +4157,7 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in if (primary && primary[0]) { int primary_len = (int) strlen(primary); int maxi_len = 0; + int have_manual_scm = 0; if (symbol->option_2 >= 1 && symbol->option_2 <= 100) { /* Suppress gcc warning null destination pointer [-Wformat-overflow=] false-positive */ #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 7 @@ -4121,8 +4169,10 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in #pragma GCC diagnostic pop #endif maxi_len = (int) strlen(maxi); + } else if (expected_len >= 9 && strncmp(expected, "[)>\03601\035", 7) == 0 + && z_isdigit(expected[7]) && z_isdigit(expected[8])) { + have_manual_scm = 1; } - #if 1 if (primary[0] > '9') { sprintf(maxi + maxi_len, "%-6.*s\035%.*s\035%.*s\035", primary_len - 6, primary, 3, primary + primary_len - 6, 3, primary + primary_len - 3); @@ -4135,14 +4185,17 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in 3, primary + primary_len - 6, 3, primary + primary_len - 3); } } - #else - sprintf(maxi + maxi_len, "%.*s\035%.*s\035%.*s\035", primary_len - 6, primary, - 3, primary + primary_len - 6, 3, primary + primary_len - 3); - #endif maxi_len = (int) strlen(maxi); - memcpy(maxi + maxi_len, expected, expected_len); + if (have_manual_scm) { + memmove(maxi + 9, maxi, maxi_len); + memcpy(maxi, expected, 9); + memcpy(maxi + maxi_len + 9, expected + 9, expected_len - 9); + } else { + memcpy(maxi + maxi_len, expected, expected_len); + } expected = maxi; expected_len += maxi_len; + maxi[expected_len] = '\0'; } } else if (symbology == BARCODE_CODABAR) { /* Ignore start A/B/C/D and stop A/B/C/D chars to avoid upper/lowercase issues */ diff --git a/backend/tests/testcommon.h b/backend/tests/testcommon.h index 59d6d97c..83653f13 100644 --- a/backend/tests/testcommon.h +++ b/backend/tests/testcommon.h @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019-2023 Robin Stuart + Copyright (C) 2019-2024 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -71,10 +71,10 @@ extern int pclose(FILE *stream); # pragma warning(disable: 4702) /* unreachable code */ #endif -extern int assertionFailed; -extern int assertionNum; -extern struct zint_symbol **assertionPPSymbol; -extern const char *assertionFilename; +extern int testAssertFailed; +extern int testAssertNum; +extern struct zint_symbol **testAssertPPSymbol; +extern const char *testAssertFilename; #if defined(_MSC_VER) && _MSC_VER < 1900 /* MSVC 2015 */ #define testStart(name) (testStartReal("", name, NULL)) @@ -114,9 +114,9 @@ void assert_equalu64(uint64_t e1, uint64_t e2, const char *fmt, ...); void assert_notequal(int e1, int e2, const char *fmt, ...); #else #define assert_exp(exp, ...) \ - { assertionNum++; if (!(exp)) { assertionFailed++; printf("%s:%d ", assertionFilename, __LINE__); \ + { testAssertNum++; if (!(exp)) { testAssertFailed++; printf("%s:%d ", testAssertFilename, __LINE__); \ printf(__VA_ARGS__); testFinish(); \ - if (assertionPPSymbol) { ZBarcode_Delete(*assertionPPSymbol); assertionPPSymbol = NULL; } return; } } + if (testAssertPPSymbol) { ZBarcode_Delete(*testAssertPPSymbol); testAssertPPSymbol = NULL; } return; } } #define assert_zero(exp, ...) assert_exp((exp) == 0, __VA_ARGS__) #define assert_nonzero(exp, ...) assert_exp((exp) != 0, __VA_ARGS__) diff --git a/backend/tests/tools/bwipp_dump.ps.tar.xz b/backend/tests/tools/bwipp_dump.ps.tar.xz index b6305941a99a46dfe7fa2344cd842c52480bd002..efcff7d084f309f36384ff3343f2608965916a0f 100644 GIT binary patch literal 140100 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ën&ct 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

XXH|BFYRrq18`}xdxHk8>eoit~69vPR2t^KcP zo2ye937|VqWpfEzIxGhG^G<6b8ioF&40CO208t@r`m)GZ3i>ve)VxU) zuTy5I87+PkA8y^Y?$>$NE@Tl9CiL-cWZ6U0$HZ+{Fq_(#@jnyr$Z<+4GhOm7%(?gM z)slZZ+Ie(mj03xAm;VdfF_~K>t(7ejF+ivl!h%S$k32WGdcn`2jKR^}w@ocDELje}R-Ur34IizIpJvM=f*TCkFC{;_ zngGw5*k0-2jfJ*7Gn}qy8W71ZPV9-e)dUoN{!;s^@}&#YR0wrLCDPq(dsBd;OzCAf#Ajp`(%%g#V>U4}v^e*P#OLR5ShH3qxO&mf@d#5#-+zmKkI= zt!n6Z^NGYrHRL6VCCF*^Z%#*iA!m74D^9f06{)1Md}b1+(BH~6{j}nu#<_1Vx1|l^ z@CE9t-Ed?YQ=PpznzgAq)iB;wp84MT`aO8Vtvy2wp zZ;!HwWC?^Rd`iDYV8*UX8ah?f5`3d9WxXMMe{VMp(3qCJ0D)m5i@TDt1;Q%Q$o`Ri z(0`l%w?Daz&)AJB@=Lq37;e?vmJt!Z+E913AZu=O3<>NCswzS-Gv9*iKl*(VjZUFN z<-Yee;#Q;s!q<%%!$MJ>cQQ=Q`})-iwVphrxf-5j&$0G3&%+9V%=MUgEJZfCk z9acPm5Jsep*Kpk6Vqds$96rbVD}k+)WEc@d0cUi(#N05i^+0(DHi(?cOBJQ1gv8H^ zrn~pPje_ta**EIvg>wA~haRLGTtWnzZT+sS>a>*VW)tz`HHGa>%WF*AW;~Vn z5daO`ucFK^zO1IVgtP~$cN{k7C3q_Xm8m7koeBQh%~QDT&B<}%g`_PsE%2(jo{o;Y8ThPd`F0cE|2e#f*|x=aBc8wW4|owd{cq5FkU_*#VrS%+rI3N z3YW{Gu@O6{*6KLd_t}_uA4B;(Q)B$>=DLhReUbh`u&StDXTGPLZftj}F4=Z=pWUz{ zvpy)=OINt~AGfwL-CLma4)y}gH=X3k;^wlxehh)qn5n6d;y(x@*I04*fZJD%0D9(T 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 K000001X)^DP)mLQ literal 139748 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

qrnb z-S(0h!B3*m%H6gMEjAxhGRFl#jjw}k_#6+YS2>fj2jmPX(TfJHp{V#I5F&atkF(-t zkv&_BYyA*x(&BD%IY_r;xvQm*lPJ(h+kP-jK^MK;O=j065)r&b35H6;`Vswh*o;Tz*J*98enrlRl8P*=^EwQvS-jr@W)iyUeb z{WySYmvO|qmLZ8GY-!r9^#g;1NX-%eq_Hz~SxCi?bZ|%+;NAa@zBygk(Kxg+-L+a3#Oc9d!brQKXB62S(Wmgx zU)|#P-m1fI79>)gZVuBj26&HC5M9fa6X{<|1?n+vL+kJxKu%18tt-~99Y;vz2?cl> zdhxa38rZjbVB*;1!&{X)yYT6$2^*p@laxKXBltvlaIjm4 zw~a)tF<`6uGFf27D>%4FH!(5Wy7i$3$6L-F`^^fF@J`5*#xq=9!8F~pR5Bp%NV>2* zfW!Y3;v3h5#g0uf4LLm#o|uh_1cDi!^9RVzG|ik_xpfMr&D5h|ZKY={sljNnjpGEX zEodi=e4Qk+Q=9FDK-Tr(f&g(lHEUwCeU^Y7GZnU$4K^!lNdf7)mdnJlmR&pjo<5N( zk4N&rtXNG85HY^b|H@sdOuf1{^dxzec*&idB!QrOVN`d!NC+$f#|;cT5Xqc5Xeu-( zdw8r|5R`fetLHO0Epbq2^HP!AWj{5*Z`GoG@D=A9RpP@;;BL&!=zoxlQ8wf|^8W{^ zo9s)q4HH4j`hq?U%~3BHvsXWT)1YVkawb0#c-|dL$*EU!CXOjgTnHn5;04r+7JW8KT=tg4rex>po%8Mhp`8`5j?Gli4_+yp3gol8o(Y;E;sd5Xw zC4=yP7mboKkU0sB`MWmnT$V;tY07(FGc(yA3#NwrYJj{>XT8M|rCTIm*}>?-^<+zS z1fH}1q*0+-DmT=1paiU>U0#9u(zC(fbeAY)5EUtr9C`NZPW6* zqF6ZRbgg>I;q=_LtiBl{wYHsOHBFo(<9cr;X0=sNtOo@g-@Pe8b%sVW>+QM|aEj-8?8{pqBXyS))>$O{+slb6 zHVP-;ql6gr=K%@5G>yV!#-vjn4B_3c2v(i{`+ROxlsZZNK}|-vxo5~)F-hHJZ~{}a zy$QMIRW+2QDC$0~jg0PtlbSoLlMG&mlWvx>m%(ZDaGRrR-C(!rV-cPH9bp#h94GKij)x)do%M)w3VbRi53C<=Lz^jn=_ zCw-hJmWp=OK2~-cV}po(;q`C~uxH9M43{hvEYO1qjFHP=ZKw{nOMu&GG_B?mJa2vc zbaU8i;cl!GE{0xnmT z)0FV0T{xkoY8ZfrLdp)WEpG5*i>!J~BNMVZ2*I2JQ$?kO9D*KiFLRA*%;|Ki;*Fef zFbZbEGMpW^>8(z*vrtOf?#c`5%gu>Wo&Q2!1|*shqJ8(-jpYZZjLUU0D({IO@4~1H zherYU=q1S1Qy1n#lLFc>S4FE}Jxm|LcB`_2#}mr0 zR^8(8QG`KFG}Jd?l^SS+=c7U?I36ST*%{9MFm3L&*bin=Q0`JSO%mIY>91%N4EIuH+9 z7n07cOP!!RQ>vpy@*UIkb8Mn20*^NTkKeo?eEolm<~SFyDFp_5BqbEc-99hj+Dy^FCY86U6WlFlX!9yw9CZ<4K@#s z>RA$;-Oxv{ReA`w%BwbRwrsJgfRciio4q{bQ=Q9%7ZP*}xy=k8fsKe{l#zb_4;#g+ zn<8b@Uu(lg_cO1n&{zHyd<(Z0BhhLweaiAg`?gXnQyD$~Bs5vVd{nm*|2**n`H=#u z6r%bdcw61UR5!!{3)yK;wF#`qV?pvytY;WI1X2?+f625Xh-92e6>^jIkL_^Z=j)#p6V^EK|t^5B9m{a>7_b=@^QXP-Z zvv%pV@{tgcWQYk<>BnWQQk+X}zXh;rZ4G4`F%%tVb{c_3n2!(%%;L)X_})uXjS5o#cUxvY+J$-^K8J_X3L2MnA97X<#(G&i`ln=JVbD zBypkQhQR7s0ufNXPc$jp_u82TANialI#bg_cN$zam4d6Z6MgH_s}|azfK1=p)=);5 zdwD^LM+zyGZ=~WFM~ikwxNGd3j>0^(*}|a57N-f0iBEc|Cq#7RNq>>*RJg3l{bvpG zyqZrVP4`WK(SIqX-zi#F;-sk{sXABPDo|?n1kv`;l1Q(=e4n$A;YAAhuM&r32^?N# ziWNXFYMwpZw$SXAMLQ(Yp2o0ew%u_5X4{304ns%c`Mw37fMD^TN}~BV7<3hr)J%GY zZ(t0flV+k;;bpr5RcLv*~XK}YYIWLv0Ob6iI3wS$CC^CZQouIozxI{ zUZ1n2hr=@V&Momd62s0V4rRme9kJO5_p~ueyDjpcI+X*vWK>I`^)ZlyGu&U^eP^5c z2RF3}JJH(_-RddoYzIs_8pT}5DAr_osP$hvOzhLniqqkPY;t!}Z*s*iQ5IElX4VhT zGd~yw99BeWFA>vbWiyIM? z_;t#U$uxo8px--gBONZ4k&K>FfC`T4)YV1hJ4wZ)`>OOkJ_!Aep{X)3NbGtbvqRl+ z;->1^S7|&p>0FMz5pq!Y=i&%m9fn4^6ZS8~#?#aFd*7pFG!1NOsVES4sWZ;HqF?Ax~eO7Q?ig;L?y*B6Xq@)!DN$mE0 z*+t=%(ejD3!0YBa6ibo>otibe+MBi#uJ~~lvpGlN775rOuxDp8E@@B4ixW%)3!l+h z+%1X8D#D{S4Kt@!DRrsYjYC5uT2ouPBqS#q9=c1Q8SEzZ7FHdGzu7?#HkFRgF%8D| zwU1;Y%-!Ha3rj!qZ8OAo+Qf@0n$fOpUklhvhg4sg6;kUJ1z!CfVIJ!buX1@l%*u*7 z;2B4q^GW$g*V0d=tp5-b(*s?07c9Z!gF1$3OtJome8c z7iP-%$gA45^9%{QRv}CjaYGw432}&p^=J9&zZ4b7uxHV>57YX^tUs%X|?;M%P4!u0cw{;;4W)7 zUYtZMQX(0oeFFmeg4K@jWeu=c63v*2F#UZ_Yv`>Kx%SQz-llZU^Fo`^Xxi;rQPdMy zLv_L7=E(kr^WiRF$Trc@a!W(*4m){NLI)-HR#xM@Md%G*_UsVMM zbbyuR@JQ zkirpIigRdNaLPm!IyH~RkuZx)Rnv!jyB08fILA^%W1$30VXa+0-|ct8@`d00AHUHn zl(%0y9- zuT*uva^WmrXN6gQG^WIPffH6%nJGJ14nv$tS%&5h0M(C$=Vl6kyvoj>-(cxc&x?lp zF6kJ)D-niKN>7>6Q~^6=IzGYDk%x?QK>WyBwV;{!pK$O+HSIO=KKFNfRsEMPocizX zC8kly41Hg~s_dG630rY2uRA3nv~Vpps0~Bb#MvC1v4iI|jY=BeP1pnUW)z%$W@30W z0RI1->9ON0L#(&sPgEuhWLIatdI7%dH-C)f!;J-yWefQ~E?YQ|Fh-I65A-k{=Wl1% zW~Z2tgJ75hh)`uu+)~=A(~1oeN`N+4_Sc;D?Y)Dg&M3y)(8iB<<+ZdDrcp!{KrjsG5 z=M7m{O%iHAz!=0Tigw4jtGqZ~bR%>K;eG@RN=Q`w^2-xUVt?)6iviTML(KnsXhyX>KC zLJs*R9hO?mV1t&3oR00=&)nTlOegZh`Y@w^>sjw*3n36RU$M>uHnr+i+>x`dA<@7u zC3{yZM2E;vG=f%9uF*aOnby+8WY-}W==N=L*2|xakQVCaV@L8A2_rl{K<6xYzIBXi zuVN;OKB*dqKOgiF-bg%NyBikcob*xIZWEN=(erM{*&c;?;6GdWvEdMr#I#REUX~3x z4B+Edha5Gmc(6C#?QNUAE5b;dq4OzYd$Ow&Y?8!fLwdNZNw+vZ2nyfuo>qnWXwEBX z+IVDLjc{%(6vgObmml*uzaLI7t3fY3BcY#VR*m7A?JyoF^>_FTzpt`*XZHLSm;9`F zlob6Bj<}@LDy|nM|NVM1habtYaSnqK*;vys=<^m3P0&=c*S~Y>ySt>|!yiXEWxW;E z2$mhefLq_pRo5jq0Tsy47?YNU|F&{n$~!^s!O9|Fp2p~5BcLKety^Sy02$~0O@uve zXh)6yIn2?bAjn)FamWx2X8To~R_ktLf_f_W3iFy7>^ZD=Pp<*c>a!5nIAhno_Iu(H zm>57A`jKETV_yVcSteQT?lB6(%Ae_<=!x}Tv<}3kM zOa8d(d3T}pwY(9XLkZQ36JK)764BIRvtle?@rV&q6nx=1725{1~=WY{FGp$Q4 zn^l`S?{LD>Kb4aSBDfB2#6tHwP-odHtGKiYp*IplgZm}@!Y9tu>o^~}ES;JOP^imu z>{sT2J0!33^A5C1n?mk9V zvIt1LWWp`jvDKfzeWGnG$UC^ET5f1VKn8#sfsc~MFSYD$GIY$K>h?ABU;>Pg+`uWq zSUaE(6?YtPH%(eR$1>_kbWrSuC@BEd*Q!uaB#(9kz#4C1UGa!eH*OKLXwgJ^Oy0oI z!6gkeT01gb^t1O(0ls~~oO;#<&G~Avju729deG8M@MVV0nxi+i9i)CsN@2Hl@O7M| zp}Q?=?<5BuY~QnnnGYvs4%CO!93uFYX3qV%F;HJeo%&$a!YBPGke7M+vF&WRHC@_> z9S2?Qnz*#7;Qu4UIu{Bj^m3*eqWp3DLUx#MN)|ku+BUgL@gsq+2!+_@zke98lH&qR zx~)rax_7FoKsJub4lX`)sY910SEOII2+)|jnCJp0kPRhDXKze}1`sJwK z9Lm%aRm;_J)-&Ln=RHe=Dx4m{R>_TYB1ugyps!rMT7$zMg_(92yZX3e%-xm#n#NfQ zElGi#O06I?ZI|FgfL18HcK6W5W8Q7bF;pM}1h)QWuMx&SOoVpG%=;#mv_f*^hsA%J zh-Sp@1LNx+mG7C-K4=oyzFaB2U&F=LVyBXx+Y6s|m;=E6WlD7rmvY)p_<`Q%wCl|CtOXmGo8{uxJc|qI7InkZ?wi$QhiH0FV7>9i4X~b_4~givB?=;b@+Xz> z@2rEg;g5D~0SPDYBHKaAvquKR%m6S=JyJ=7*+H|ZwCjrkpSZiR_Q!l$r$l_V^0ZeT zR>r@7i_Q9m6Li|%yKZuB#c$LP!qnjST^?KAc_QI<6d6Fn%E4!9UDH2A_;#An$6O{g zj@?2wctWm2qHl4dMPw&MJ`UYURPV0D(0p0DXaj`+unB?{*|zN51MZ7ht!kkd;D-rP*>?ky6Kz4mX(X4&$#1dUD%GXNzBs8}&R{|cq{ z`AlG)>rPj^;xq1sc3R3?3YkP8OP4j-8I>uN8o)zu~t9tu68NuCA%kzsZD znuv4$`DEUdHc|e8Qq!iIo9l9K*)bEONQ@re54sApJ6+~K z1Z$z8Xd9chS(JaMIS(MDRazwRc&>w?Yh$a#K;*i9ZcskbJoDbULqE>NViF16^xmmFXG+ z+Wb#9!woXg^w}|Sq+5`*H{aB?(;p5t&ccH~b*S29CD6bJFJ$V?c!M3WGS;ib_pJaZ zwb%)<+8WHU$QNMFvaX?aZ1hF!2;fZU9AgW1i&{@*yNlfs-;fAsjMo@r=ObR#^MVEh0IVb@eZ8AS)@RLAoft z34e3Z9Fsg56>Mbc)X9(isPr8SX;wyt!^3Bc!xqV==L zVt>FDKr=fd2*Z^nr@&x0qkT}w-lfvajT-P!ZAr*vSE?2AGp2pN=po9Y%AltpyOT3G zt?sd?Zw^I1amHkhwpW5c$XUdKvYTbREchCFaq9Jap5;J9mf`a#<@F4I?yd&lVI%)8 z;*wlcfV544?Vp=oJqEzKAaHN`8soFu@9#0HQV5K|YxNVT=8UXX;6aFB`zUg)ksa4v zR?wBVq;N$sJ!I>1wEIO!dh{IcUhHJy$m@+ifF;plLkj1|x zlG~O%Tn;nxMS6?z11K1UxoYTTI^1V{@eQ=ElNik>SpBgRICoR8EIPFAJrXbLD2M+W z37mb8`hn-3^)aE^?&6ECSJpJAlXXp2&Bkm#;}ci{eLUlR2i}9f`cF{KrHI!Q(Wq5e63eWGW*7n_!SfwYEBEiMM0rY#B!eGkcxBQ?(=GzAf6*C3 zxfnfRaezCb0=jBF+L5$$^DYw1$+2n$NMnH}sJpUn=JHIvij8bHpdD|QgI_lJj!Opd zH%0QZ z#Jv zIq(PPSym}pha4%WRYX^vL}90`ju4!4|7T^QLNVpe6K z-W`*YF}_wnzknsm4i^xDH*2K4`OPJ6Ewowy>2$od`BT~rxeBs#C;fNu>|>3SV)~D! zF}%m#-4B&6;Sk7Dm5bQAQpL zDU$L`BWEpl*8MJ&uglNWX(P(eoqF;m-_gM5Kj(gC<1>_@J04;hV4tIFZ9k%n59Fo{ z3QVo;Dhg5#?XE#d$zhNZS#rbDTd( zn=2cTS}x^DQfy_YQ}39l%6SGxs99XwExu@_Sbp4Zu@N3#tMWF-?9kRkZQ&`J2uq zha`nNpC$inuL{*_Z<-%>D|t&AqB{Fz+~<-Ck;_eVLuioPGntWzfD|%bxMxwp9{y7v zC%Z|&gaO<406i={(*!REZH7im^WToBbLJ;H$b^Y3av|O0NjKX)$=yJA&7$(H3N#T_ z#7Q6Cc*`swM4J`VzFvpSZ@a6e=1iH0U)Yg@fFnhAA3;~Ns3iN6;70HMJEU!vg^-70 z#R1w%_++7w;T10g8;VVY{4vnpkm^->s^uIpnL)%!otmg^0MzP)%+90B67E{Fkk)5p!fDlLmmY(l-yK_Al}-N{2@u^0iXl+ z_@qCgp`6Roob!ZermxGk6F&9=Ao~;vl1y@#7${fXpnR>5oSt%{Uww`r;5?D}`hqz% zE-p<=dH!hBvj>8dXNgOgOp>ap(~T#h{boyt4ma=s01l%ZB6XvPJ;PzBj5)DBzob&B zz*a(u9Gjxm%IFgS&G^&3SC$+3X)QHOXAY`yuD_X8P`td-NRhn0${QW!e&X;JD6)+O97m9Cu=0$s|R3_WzTOxwJE752| z`{a4F!w{ioz7dD;+_E{b@@ga5)j&b4Nhmty<)Zu>XvuLjeYC-Hk5V7wnjQOhU-*ei zthBkOf{%H1s}wZKJ4Sd^*sVV&SbRnbW^#Ke@&JYvj|VxCaRP|Du8DKr|6p^BV$$Jm zWMKRzBKMpA08heW+1YKbeA2CRlZ7$Z!K`j@RG=B)Maljw?c=>&$|ccG-WEV}OtUs6 zN7`_yFk}pZGq^Xq-&8ewPY}pKBJ8K}wsnC8b*Hh)SoIA-lXwVhoE~O9rAX!?(ge_Y zxJ;hg3)4GfV2_Rt%ADn4I_-ve_ApFKQ){PGGOLIy7=r)wnd?)v>EK~64A^vk(qgm` zT$vrTiCL-;5P@KhKn8PV9p?kJRXNO;84PSQjv7JqK$3MbfLHYS*;m{sQWTT4)CWOw5qB-kvi!prO z3wv!VxSVG~lLJ&@eA{}kn`XA%c;A#b*àsZm`c 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 WfWS!pYsg%&#Ao{g000001X)^2KyE?+ diff --git a/backend/tools/gen_gs1_lint.php b/backend/tools/gen_gs1_lint.php index 44690bfa..b0131aa5 100644 --- a/backend/tools/gen_gs1_lint.php +++ b/backend/tools/gen_gs1_lint.php @@ -452,9 +452,14 @@ foreach ($batches as $batch => $batch_specs) { $width += strlen($str); } $spec_func = $spec_funcs[$spec]; + $str = "$tab$tab{$tab}return $spec_func(data, data_len, p_err_no, p_err_posn, err_msg);"; + if (strlen($str) > 118) { + print ") {\n$tab$tab{$tab}return $spec_func(data,\n"; + print "$tab$tab$tab$tab$tab{$tab}data_len, p_err_no, p_err_posn, err_msg);\n"; + } else { + print ") {\n$str\n"; + } print <<