From 7b076717f2e2d800e3e6589cb84f82e9bd0055b7 Mon Sep 17 00:00:00 2001 From: gitlost Date: Sat, 18 Apr 2026 22:55:52 +0100 Subject: [PATCH] DATAMATRIX: add manual FNC1 support CODE128: error on unrecognized extra escape sequences instead of just passing them thru; fix possible shifting before manual FNC1 in 2nd position after single alpha (otherwise won't be recognized as AIM) fix not removing manual FNC1 in 1st/2nd position from content segs (as implied by symbology identifier) CLI: warn if both "--dmre" and "--square" given (as "--square" overwrites "--dmre") common: new routines `z_isalpha()`, `z_extra_escapes()` and `z_ct_set_seg_extra_escapes_eci()` library: new helper `supports_extra_escape_mode()`; fix some error_number dups BWIPP: update to latest, and allow for removal of DBAR_LTD_CC RHS quiet zones & extra row when have add-on in EAN/UPC composites test suite: fix BWIPP escaping manual/man/tcl: update for DATAMATRIX manual FNC1 support Windows: resource scripts: make more consistent (libzint, CLI, GUI) win32/README: update with MSVC 2026 --- ChangeLog | 13 +- backend/CMakeLists.txt | 2 +- backend/code128.c | 98 ++- backend/common.c | 81 ++- backend/common.h | 12 + backend/dmatrix.c | 182 ++--- backend/library.c | 34 +- backend/libzint.rc | 13 +- backend/tests/test_code128.c | 203 +++--- backend/tests/test_common.c | 154 +++- backend/tests/test_dmatrix.c | 659 +++++++++++------- backend/tests/test_library.c | 45 +- backend/tests/testcommon.c | 160 +++-- backend/tests/tools/bwipp_dump-barcode.ps.cat | 26 + backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 159164 -> 165804 bytes backend/zint.h | 2 +- backend_tcl/zint.c | 2 +- docs/manual.html | 362 ++++++---- docs/manual.pmd | 111 ++- docs/manual.txt | 229 +++--- docs/zint.1 | 18 +- docs/zint.1.pmd | 10 +- frontend/main.c | 2 +- frontend/tests/test_args.c | 23 +- frontend/zint.rc | 15 +- frontend_qt/grpC128.ui | 5 +- frontend_qt/grpDM.ui | 12 + frontend_qt/mainwindow.cpp | 10 +- frontend_qt/res/qtZint.rc | 25 +- win32/README | 11 +- 30 files changed, 1650 insertions(+), 869 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8e527230..94f1d9c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,16 +1,18 @@ -Version 2.16.0.9 (dev) not released yet (2026-03-30) +Version 2.16.0.9 (dev) not released yet (2026-04-18) ==================================================== **Incompatible changes** ------------------------ +- Code 128 now errors on unrecognized extra escape sequences + (previously just passed them through) - Aztec error codeword percentages adjusted to be at least advertised values (may cause symbol size change, and generation failure if specified) - Improved Aztec encodation algorithm (may cause symbol size change) - New Qt Backend method `save_as_memfile()` to save file to memory - New Qt Backend methods `gs1Raw()` and `setGS1Raw()` for new `GS1RAW_MODE` option for processing GS1 input -- CLI now warns if both "--dmre" and "--square" are given (previously silently - ignored "--dmre") +- CLI now warns if both "--dmre" and "--square" are given + (previously silently ignored "--dmre") Changes ------- @@ -32,11 +34,14 @@ Changes - DATAMATRIX: new options "--dmb256=" (`option_3 = DM_B256_START`) & "--dmc40=" (`option_3 = DM_C40_START`) to allow forcing of initial encodation for given no. (`option_1`) of initial characters, with 0 meaning all +- DATAMATRIX: add manual FNC1 support Bugs ---- - CODE128: fix not handling FNC1 at end of data when in manual switching mode - or any FNC1 after manual C mode selected and no other non-C data + or any FNC1 after manual C mode selected and no other non-C data; + fix possible shifting before manual FNC1 in 2nd position after single alpha; + fix not removing manual FNC1 in 1st/2nd position from content segs - CLI: fix "--scalexdimdp" X-dim inch units being divided instead of multiplied on conversion to mm - DOTCODE: fix not emitting FNC1 (signalling not GS1) if input is just 2 digits diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt index 802656fe..c0adcddd 100644 --- a/backend/CMakeLists.txt +++ b/backend/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2008 by BogDan Vatra < bogdan@licentia.eu > -# Copyright (C) 2009-2025 Robin Stuart +# Copyright (C) 2009-2026 Robin Stuart # vim: set ts=4 sw=4 et : cmake_minimum_required(VERSION 3.10) diff --git a/backend/code128.c b/backend/code128.c index ef8343f0..18df937c 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -226,7 +226,7 @@ static int c128_cost(const unsigned char source[], const int length, const int i https://github.com/bwipp/postscriptbarcode/pull/278 */ static int c128_set_values(const unsigned char source[], const int length, const int start_idx, const char priority[C128_STATES], const char fncs[C128_MAX], const char manuals[C128_MAX], - int values[C128_VALUES_MAX], int *p_final_cset) { + int values[C128_VALUES_MAX], int *p_first_cset, int *p_final_cset) { short (*costs)[C128_STATES] = (short (*)[C128_STATES]) z_alloca(sizeof(*costs) * length); char (*modes)[C128_STATES] = (char (*)[C128_STATES]) z_alloca(sizeof(*modes) * length); @@ -243,6 +243,18 @@ static int c128_set_values(const unsigned char source[], const int length, const return costs[0][0]; } + if (p_first_cset) { + *p_first_cset = modes[0][0]; + } + + /* Make sure FNC1 in 2nd position after single alpha does not switch modes before FNC1 */ + if (length > 1 && !fncs[0] && fncs[1] && z_isalpha(source[0])) { + const int mode = modes[0][0]; + if (mode == (mode & 0x0F) && mode != modes[1][mode]) { + modes[1][mode] = mode; + } + } + /* Output codewords into `values` */ for (i = 0; i < length; i++) { const unsigned char ch = source[i]; @@ -377,6 +389,7 @@ INTERNAL int zint_code128(struct zint_symbol *symbol, unsigned char source[], in char priority[C128_STATES]; int values[C128_VALUES_MAX] = {0}; int glyph_count; + int first_cset; unsigned char src_buf[C128_MAX + 1]; unsigned char *src = source; const int ab_only = symbol->symbology == BARCODE_CODE128AB; @@ -397,23 +410,27 @@ INTERNAL int zint_code128(struct zint_symbol *symbol, unsigned char source[], in char manual = 0; int j = 0; for (i = 0; i < length; i++) { - if (source[i] == '\\' && i + 2 < length && source[i + 1] == '^' - && ((source[i + 2] >= '@' && source[i + 2] <= 'C') || source[i + 2] == '1' - || source[i + 2] == '^')) { - if (source[i + 2] == '^') { /* Escape sequence '\^^' */ - manuals[j] = manual; - src_buf[j++] = source[i++]; - manuals[j] = manual; - src_buf[j++] = source[i++]; - /* Drop second '^' */ - } else if (source[i + 2] == '1') { /* FNC1 */ - i += 2; - fncs[j] = have_fnc1 = 1; - manuals[j] = manual; - src_buf[j++] = '\x1D'; /* Manual FNC1 dummy */ - } else { /* Manual mode A/B/C/@ */ - i += 2; - manual = source[i] == 'C' ? C128_C0 : source[i] - '@'; /* Assuming A0 = 1, B0 = 2 */ + if (source[i] == '\\' && i + 2 < length && source[i + 1] == '^') { + const unsigned char ch = source[i + 2]; + if ((ch >= '@' && ch <= 'C') || ch == '1' || ch == '^') { + if (ch == '^') { /* Escape sequence '\^^' */ + manuals[j] = manual; + src_buf[j++] = source[i++]; + manuals[j] = manual; + src_buf[j++] = source[i++]; + /* Drop second '^' */ + } else if (ch == '1') { /* FNC1 */ + i += 2; + fncs[j] = have_fnc1 = 1; + manuals[j] = manual; + src_buf[j++] = '\x1D'; /* Manual FNC1 dummy */ + } else { /* Manual mode A/B/C/@ */ + i += 2; + manual = ch == 'C' ? C128_C0 : ch - '@'; /* Assuming A0 = 1, B0 = 2 */ + } + } else { + return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 348, "Unrecognized extra escape \"\\^%c\"", + !z_isascii(ch) || z_iscntrl(ch) ? '?' : ch); } } else { manuals[j] = manual; @@ -468,7 +485,8 @@ INTERNAL int zint_code128(struct zint_symbol *symbol, unsigned char source[], in } c128_set_priority(priority, have_a, have_b, have_c, have_extended); - glyph_count = c128_set_values(src, length, start_idx, priority, fncs, manuals, values, NULL /*p_final_cset*/); + glyph_count = c128_set_values(src, length, start_idx, priority, fncs, manuals, values, &first_cset, + NULL /*p_final_cset*/); if (symbol->debug & ZINT_DEBUG_PRINT) { printf("Data (%d): %.*s", length, length >= 100 ? 1 : length >= 10 ? 2 : 3, " "); @@ -487,6 +505,36 @@ INTERNAL int zint_code128(struct zint_symbol *symbol, unsigned char source[], in /* ISO/IEC 15417:2007 leaves dimensions/height as application specification */ + /* Do content segs before HRT to deal with manual FNC1s in 1st position & 2nd position */ + if (content_segs) { + if (have_fnc1) { + int mv_idx = 0; + assert(length > 0); + /* Remove manual FNC1 in 1st position */ + if (fncs[0]) { + mv_idx = 1; + /* Remove manual FNC1 in 2nd position, alphabetic */ + } else if (length > 1 && fncs[1] && z_isalpha(src[0])) { + mv_idx = 2; + /* Remove manual FNC1 in 2nd position, 2 digits */ + } else if (first_cset == C128_C0 && length > 2 && fncs[2] && z_isdigit(src[0]) && z_isdigit(src[1])) { + mv_idx = 3; + } + if (mv_idx) { + memmove(src + (mv_idx - 1), src + mv_idx, length - mv_idx); + memmove(fncs + (mv_idx - 1), fncs + mv_idx, length - mv_idx); + length--; + } + } + if ((symbol->input_mode & 0x07) == DATA_MODE) { + if (z_ct_cpy(symbol, src, length)) { + return ZINT_ERROR_MEMORY; /* `z_ct_cpy()` only fails with OOM */ + } + } else if (z_ct_cpy_iso8859_1(symbol, src, length)) { + return ZINT_ERROR_MEMORY; /* `z_ct_cpy_iso8859_1()` only fails with OOM */ + } + } + /* HRT */ if (have_fnc1) { /* Remove any manual FNC1 dummies ('\x1D') */ @@ -500,16 +548,6 @@ INTERNAL int zint_code128(struct zint_symbol *symbol, unsigned char source[], in } error_number = z_hrt_cpy_iso8859_1(symbol, src, length); /* Returns warning only */ - if (content_segs) { - if ((symbol->input_mode & 0x07) == DATA_MODE) { - if (z_ct_cpy(symbol, src, length)) { - return ZINT_ERROR_MEMORY; /* `z_ct_cpy()` only fails with OOM */ - } - } else if (z_ct_cpy_iso8859_1(symbol, src, length)) { - return ZINT_ERROR_MEMORY; /* `z_ct_cpy_iso8859_1()` only fails with OOM */ - } - } - return error_number; } @@ -553,7 +591,7 @@ INTERNAL int zint_gs1_128_cc(struct zint_symbol *symbol, unsigned char source[], c128_set_priority(priority, 0 /*have_a*/, 1 /*have_b*/, 1 /*have_c*/, 0 /*have_extended*/); glyph_count = c128_set_values(reduced, reduced_length, 1 /*start_idx*/, priority, fncs, manuals, values, - &final_cset); + NULL /*p_first_cset*/, &final_cset); if (symbol->debug & ZINT_DEBUG_PRINT) { printf("Data (%d): %.*s", reduced_length, reduced_length >= 100 ? 1 : reduced_length >= 10 ? 2 : 3, " "); diff --git a/backend/common.c b/backend/common.c index 72d90743..8b626baf 100644 --- a/backend/common.c +++ b/backend/common.c @@ -776,6 +776,41 @@ INTERNAL int z_utf8_to_unicode(struct zint_symbol *symbol, const unsigned char s return 0; } +/* Process `source` for manual FNC1 extra escape sequences, placing result in `dest` with result length in `p_len`, + and setting `fncs` with found FNC1s. `dest` & `fncs` must be at least `length` in size. `eci` is checked to be + ASCII-compatible (UTF-8 & single-byte ECIs, excl. Binary 899). On error sets `errtxt` & returns error no. */ +INTERNAL int z_extra_escapes(struct zint_symbol *symbol, const unsigned char source[], const int length, + const int eci, unsigned char dest[], char *fncs, int *p_len) { + int i, j = 0; + if (eci == 20 || eci == 25 || eci >= 28) { + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 716, "Extra escape mode requires ASCII-compatible ECI"); + } + for (i = 0; i < length; i++) { + if (source[i] == '\\' && i + 2 < length && source[i + 1] == '^') { + const unsigned char ch = source[i + 2]; + if (ch == '1' || ch == '^') { + if (ch == '^') { /* Escape sequence '\^^' */ + dest[j++] = source[i++]; + dest[j++] = source[i++]; + /* Drop second '^' */ + } else { /* ch == '1' FNC1 */ + i += 2; + fncs[j] = 1; + dest[j++] = '\x1D'; /* Manual FNC1 dummy */ + } + } else { + return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 717, "Unrecognized extra escape \"\\^%c\"", + !z_isascii(ch) || z_iscntrl(ch) ? '?' : ch); + } + } else { + dest[j++] = source[i]; + } + } + *p_len = j; + + return 0; +} + /* Treats source as ISO/IEC 8859-1 and copies into `symbol->text`, converting to UTF-8. Control chars (incl. DEL) and non-ISO/IEC 8859-1 (0x80-9F) are replaced with spaces. Returns warning if truncated, else 0 */ INTERNAL int z_hrt_cpy_iso8859_1(struct zint_symbol *symbol, const unsigned char source[], const int length) { @@ -988,10 +1023,52 @@ INTERNAL int z_ct_cpy_segs(struct zint_symbol *symbol, const struct zint_seg seg return 0; } -/* Update the ECI of content seg `seg_idx` to `eci`, to reflect (feedback) the actual ECI used */ -INTERNAL void z_ct_set_seg_eci(struct zint_symbol *symbol, const int seg_idx, const int eci) { +/* Process content seg `seg_idx` buffer for manual FNC1 extra escape sequences (which must exist), + and update its ECI to `eci`, if set, to reflect (feedback) the actual ECI used */ +INTERNAL void z_ct_set_seg_extra_escapes_eci(struct zint_symbol *symbol, const int seg_idx, const int eci) { + int i, j = 0; + unsigned char *source; + int length; + const int no_fnc1_position_check = seg_idx != 0 || eci != 0; + assert(symbol->content_segs); assert(seg_idx >= 0 && seg_idx < symbol->content_seg_count); + assert(symbol->content_segs[seg_idx].source); + + source = symbol->content_segs[seg_idx].source; + length = symbol->content_segs[seg_idx].length; + + for (i = 0; i < length; i++) { + if (source[i] == '\\' && i + 2 < length && source[i + 1] == '^' + && (source[i + 2] == '1' || source[i + 2] == '^')) { + if (source[i + 2] == '^') { /* Escape sequence '\^^' */ + source[j++] = source[i++]; + source[j++] = source[i++]; + /* Drop second '^' */ + } else { /* source[i + 2] == '1' FNC1 */ + /* Do not emit if FNC1 in 1st/2nd position */ + if (no_fnc1_position_check || j > 2 || (j == 1 && !z_isalpha(source[0])) + || (j == 2 && (!z_isdigit(source[0]) || !z_isdigit(source[1]))) ) { + source[j++] = '\x1D'; /* GS */ + } + i += 2; + } + } else { + source[j++] = source[i]; + } + } + assert(j > 0 && j < length); + symbol->content_segs[seg_idx].length = j; + if (eci) { + symbol->content_segs[seg_idx].eci = eci; + } +} + +/* Update the ECI of content seg `seg_idx` to `eci`, to reflect (feedback) the actual ECI used */ +INTERNAL void z_ct_set_seg_eci(struct zint_symbol *symbol, const int seg_idx, const int eci) { + assert(seg_idx >= 0 && seg_idx < symbol->content_seg_count); + assert(eci); + assert(symbol->content_segs); symbol->content_segs[seg_idx].eci = eci; } diff --git a/backend/common.h b/backend/common.h index 481ddc90..91286870 100644 --- a/backend/common.h +++ b/backend/common.h @@ -140,6 +140,7 @@ typedef unsigned __int64 uint64_t; #define z_isdigit(ch) ((ch) <= '9' && (ch) >= '0') #define z_isupper(ch) ((ch) >= 'A' && (ch) <= 'Z') #define z_islower(ch) ((ch) >= 'a' && (ch) <= 'z') +#define z_isalpha(ch) (z_isupper(ch) || z_islower(ch)) #define z_isascii(ch) (!((ch) & ~0x7F)) #define z_iscntrl(ch) (!((ch) & ~0x1F) || (ch) == 127) @@ -307,6 +308,13 @@ INTERNAL int z_utf8_to_unicode(struct zint_symbol *symbol, const unsigned char s int *length, const int disallow_4byte); +/* Process `source` for manual FNC1 extra escape sequences, placing result in `dest` with result length in `p_len`, + and setting `fncs` with found FNC1s. `dest` & `fncs` must be at least `length` in size. `eci` is checked to be + ASCII-compatible (UTF-8 & single-byte ECIs, excl. Binary 899). On error sets `errtxt` & returns error no. */ +INTERNAL int z_extra_escapes(struct zint_symbol *symbol, const unsigned char source[], const int length, + const int eci, unsigned char dest[], char *fncs, int *p_len); + + /* Treats source as ISO/IEC 8859-1 and copies into `symbol->text`, converting to UTF-8. Control chars (incl. DEL) and non-ISO/IEC 8859-1 (0x80-9F) are replaced with spaces. Returns warning if truncated, else 0 */ INTERNAL int z_hrt_cpy_iso8859_1(struct zint_symbol *symbol, const unsigned char source[], const int length); @@ -346,6 +354,10 @@ INTERNAL void z_ct_free_segs(struct zint_symbol *symbol); If seg eci not set, content seg eci set to 3. On error sets `errxtxt`, returning BARCODE_ERROR_MEMORY */ INTERNAL int z_ct_cpy_segs(struct zint_symbol *symbol, const struct zint_seg segs[], const int seg_count); +/* Process content seg `seg_idx` buffer for manual FNC1 extra escape sequences (which must exist), + and update its ECI to `eci`, if set, to reflect (feedback) the actual ECI used */ +INTERNAL void z_ct_set_seg_extra_escapes_eci(struct zint_symbol *symbol, const int seg_idx, const int eci); + /* Update the ECI of content seg `seg_idx` to `eci`, to reflect (feedback) the actual ECI used */ INTERNAL void z_ct_set_seg_eci(struct zint_symbol *symbol, const int seg_idx, const int eci); diff --git a/backend/dmatrix.c b/backend/dmatrix.c index 5c74e893..bc8c81da 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -282,7 +282,7 @@ static int dm_text_sp_cnt(const unsigned char source[], const int position, cons /* 'look ahead test' from Annex J */ static int dm_look_ahead_test(const unsigned char source[], const int length, const int position, - const int current_mode, const int mode_arg, const int gs1, const int debug_print) { + const int current_mode, const int mode_arg, const char *fncs, const int debug_print) { int ascii_count, c40_count, text_count, x12_count, edf_count, b256_count; int ascii_rnded, c40_rnded, text_rnded, x12_rnded, edf_rnded, b256_rnded; int cnt_1; @@ -316,11 +316,11 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co } for (sp = position; sp < length; sp++) { - const unsigned char c = source[sp]; - const int is_extended = c & 0x80; + const unsigned char ch = source[sp]; + const int is_extended = ch & 0x80; /* ASCII ... step (l) */ - if (z_isdigit(c)) { + if (z_isdigit(ch)) { ascii_count += DM_MULT_1_DIV_2; /* (l)(1) */ } else { if (is_extended) { @@ -331,7 +331,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co } /* C40 ... step (m) */ - if (dm_isc40(c)) { + if (dm_isc40(ch)) { c40_count += DM_MULT_2_DIV_3; /* (m)(1) */ } else { if (is_extended) { @@ -342,7 +342,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co } /* TEXT ... step (n) */ - if (dm_istext(c)) { + if (dm_istext(ch)) { text_count += DM_MULT_2_DIV_3; /* (n)(1) */ } else { if (is_extended) { @@ -353,7 +353,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co } /* X12 ... step (o) */ - if (dm_isX12(c)) { + if (dm_isX12(ch)) { x12_count += DM_MULT_2_DIV_3; /* (o)(1) */ } else { if (is_extended) { @@ -364,7 +364,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co } /* EDIFACT ... step (p) */ - if (dm_isedifact(c)) { + if (dm_isedifact(ch)) { edf_count += DM_MULT_3_DIV_4; /* (p)(1) */ } else { if (is_extended) { @@ -375,7 +375,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co } /* Base 256 ... step (q) */ - if (gs1 == 1 && c == '\x1D') { + if (fncs[sp] && ch == '\x1D') { /* FNC1 separator */ b256_count += DM_MULT_4; /* (q)(1) */ } else { @@ -615,10 +615,10 @@ static int dm_codewords_remaining(struct zint_symbol *symbol, const int tp, cons } /* Number of C40/TEXT elements needed to encode `input` */ -static int dm_c40text_cnt(const int current_mode, const int gs1, unsigned char input) { +static int dm_c40text_cnt(const int current_mode, const char fnc, unsigned char input) { int cnt; - if (gs1 && input == '\x1D') { + if (fnc && input == '\x1D') { return 2; } cnt = 1; @@ -933,7 +933,7 @@ static void dm_addEdge(struct zint_symbol *symbol, const unsigned char *source, /* Add edges for the various modes at a vertex */ static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[], const int length, - const int last_seg, struct dm_edge *edges, const int from, struct dm_edge *previous, const int gs1) { + const int last_seg, struct dm_edge *edges, const int from, struct dm_edge *previous, const char *fncs) { int i, pos; assert(from < length); /* Suppress clang-tidy-21 clang-analyzer-security.ArrayBound */ @@ -965,7 +965,7 @@ static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[] dm_addEdge(symbol, source, length, last_seg, edges, DM_X12, from, 3, previous, 0); } - if (gs1 != 1 || source[from] != '\x1D') { + if (!fncs[from] || source[from] != '\x1D') { dm_addEdge(symbol, source, length, last_seg, edges, DM_BASE256, from, 1, previous, 0); } } @@ -981,7 +981,7 @@ static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[] /* Calculate optimized encoding modes */ static int dm_define_modes(struct zint_symbol *symbol, char modes[], const unsigned char source[], const int length, - const int last_seg, const int gs1, const int debug_print) { + const int last_seg, const char *fncs, const int debug_print) { int i, j, v_i; int minimalJ, minimalSize; @@ -995,7 +995,7 @@ static int dm_define_modes(struct zint_symbol *symbol, char modes[], const unsig } assert((length + 1) * DM_NUM_MODES < USHRT_MAX); /* Guaranteed by input length limit */ - dm_addEdges(symbol, source, length, last_seg, edges, 0, NULL, gs1); + dm_addEdges(symbol, source, length, last_seg, edges, 0, NULL, fncs); DM_TRACE_Edges("DEBUG Initial situation\n", source, length, edges, 0); @@ -1003,7 +1003,7 @@ static int dm_define_modes(struct zint_symbol *symbol, char modes[], const unsig v_i = i * DM_NUM_MODES; for (j = 0; j < DM_NUM_MODES; j++) { if (edges[v_i + j].mode) { - dm_addEdges(symbol, source, length, last_seg, edges, i, edges + v_i + j, gs1); + dm_addEdges(symbol, source, length, last_seg, edges, i, edges + v_i + j, fncs); } } DM_TRACE_Edges("DEBUG situation after adding edges to vertices at position %d\n", source, length, edges, i); @@ -1060,7 +1060,7 @@ static int dm_define_modes(struct zint_symbol *symbol, char modes[], const unsig /* Do default minimal encodation */ static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[], const int length, const int last_seg, int *p_sp, unsigned char target[], int *p_tp, int process_buffer[8], int *p_process_p, - int *p_b256_start, int *p_current_mode, const int gs1, const int debug_print) { + int *p_b256_start, int *p_current_mode, const char *fncs, const int debug_print) { int sp = *p_sp; int tp = *p_tp; int process_p = *p_process_p; @@ -1070,7 +1070,7 @@ static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[ assert(length <= 10921); /* Can only handle (10921 + 1) * 6 = 65532 < 65536 (2*16) due to sizeof(previous) */ - if (!dm_define_modes(symbol, modes, source, length, last_seg, gs1, debug_print)) { + if (!dm_define_modes(symbol, modes, source, length, last_seg, fncs, debug_print)) { return z_errtxt(ZINT_ERROR_MEMORY, symbol, 728, "Insufficient memory for mode buffers"); } @@ -1129,14 +1129,9 @@ static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[ target[tp++] = (source[sp] - 128) + 1; if (debug_print) printf("FN4 A%02X ", target[tp - 1] - 1); } else { - if (gs1 && source[sp] == '\x1D') { - if (gs1 == 2) { - target[tp++] = 29 + 1; /* GS */ - if (debug_print) fputs("GS ", stdout); - } else { - target[tp++] = 232; /* FNC1 */ - if (debug_print) fputs("FN1 ", stdout); - } + if (fncs[sp] && source[sp] == '\x1D') { + target[tp++] = 232; /* FNC1 */ + if (debug_print) fputs("FN1 ", stdout); } else { target[tp++] = source[sp] + 1; if (debug_print) printf("A%02X ", target[tp - 1] - 1); @@ -1164,14 +1159,9 @@ static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[ shift_set = ct_shift[source[sp] - 128]; value = ct_value[source[sp] - 128]; } else { - if (gs1 && source[sp] == '\x1D') { - if (gs1 == 2) { - shift_set = ct_shift[29]; - value = ct_value[29]; /* GS */ - } else { - shift_set = 2; - value = 27; /* FNC1 */ - } + if (fncs[sp] && source[sp] == '\x1D') { + shift_set = 2; + value = 27; /* FNC1 */ } else { shift_set = ct_shift[source[sp]]; value = ct_value[source[sp]]; @@ -1247,7 +1237,7 @@ static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[ /* Encode using algorithm based on ISO/IEC 21471:2020 Annex J (was ISO/IEC 21471:2006 Annex P) */ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], const int length, int *p_sp, unsigned char target[], int *p_tp, int process_buffer[8], int *p_process_p, int *p_b256_start, - int *p_current_mode, const int gs1, const int b256_end, const int c40_end, const int debug_print) { + int *p_current_mode, const char *fncs, const int b256_end, const int c40_end, const int debug_print) { int sp = *p_sp; int tp = *p_tp; int process_p = *p_process_p; @@ -1284,7 +1274,7 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c if (debug_print) printf("N%02d ", target[tp - 1] - 130); sp += 2; } else { - next_mode = dm_look_ahead_test(source, length, sp, current_mode, 0, gs1, debug_print); + next_mode = dm_look_ahead_test(source, length, sp, current_mode, 0, fncs, debug_print); if (next_mode != DM_ASCII) { tp = dm_switch_mode(next_mode, target, tp, p_b256_start, debug_print); @@ -1295,14 +1285,9 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c target[tp++] = (source[sp] - 128) + 1; if (debug_print) printf("FN4 A%02X ", target[tp - 1] - 1); } else { - if (gs1 && source[sp] == '\x1D') { - if (gs1 == 2) { - target[tp++] = 29 + 1; /* GS */ - if (debug_print) fputs("GS ", stdout); - } else { - target[tp++] = 232; /* FNC1 */ - if (debug_print) fputs("FN1 ", stdout); - } + if (fncs[sp] && source[sp] == '\x1D') { + target[tp++] = 232; /* FNC1 */ + if (debug_print) fputs("FN1 ", stdout); } else { target[tp++] = source[sp] + 1; if (debug_print) printf("A%02X ", target[tp - 1] - 1); @@ -1317,7 +1302,7 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c next_mode = current_mode; if (process_p == 0 && not_first && (sp >= c40_end)) { /* `c40_end` only set if `current_mode` DM_C40 */ - next_mode = dm_look_ahead_test(source, length, sp, current_mode, process_p, gs1, debug_print); + next_mode = dm_look_ahead_test(source, length, sp, current_mode, process_p, fncs, debug_print); } if (next_mode != current_mode) { @@ -1342,14 +1327,9 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c shift_set = ct_shift[source[sp] - 128]; value = ct_value[source[sp] - 128]; } else { - if (gs1 && source[sp] == '\x1D') { - if (gs1 == 2) { - shift_set = ct_shift[29]; - value = ct_value[29]; /* GS */ - } else { - shift_set = 2; - value = 27; /* FNC1 */ - } + if (fncs[sp] && source[sp] == '\x1D') { + shift_set = 2; + value = 27; /* FNC1 */ } else { shift_set = ct_shift[source[sp]]; value = ct_value[source[sp]]; @@ -1376,7 +1356,7 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c } else { next_mode = DM_X12; if (process_p == 0 && not_first) { - next_mode = dm_look_ahead_test(source, length, sp, current_mode, process_p, gs1, debug_print); + next_mode = dm_look_ahead_test(source, length, sp, current_mode, process_p, fncs, debug_print); } } @@ -1417,7 +1397,7 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c if (process_p == 3) { /* Note different than spec Step (f)(2), which suggests checking when 0, but this seems to work better in many cases as the switch to ASCII is "free" */ - next_mode = dm_look_ahead_test(source, length, sp, current_mode, process_p, gs1, debug_print); + next_mode = dm_look_ahead_test(source, length, sp, current_mode, process_p, fncs, debug_print); } } @@ -1446,12 +1426,12 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c /* step (g) Base 256 encodation */ } else if (current_mode == DM_BASE256) { - if (gs1 == 1 && source[sp] == '\x1D') { + if (fncs[sp] && source[sp] == '\x1D') { next_mode = DM_ASCII; } else { next_mode = DM_BASE256; if (not_first && sp >= b256_end) { - next_mode = dm_look_ahead_test(source, length, sp, current_mode, tp - (*p_b256_start + 1), gs1, + next_mode = dm_look_ahead_test(source, length, sp, current_mode, tp - (*p_b256_start + 1), fncs, debug_print); } } @@ -1490,8 +1470,8 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c /* Encodes data using ASCII, C40, Text, X12, EDIFACT or Base 256 modes as appropriate Supports encoding FNC1 in supporting systems */ -static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], const int length, - const int eci, const int last_seg, const int gs1, const int b256_end, const int c40_end, +static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], int length, + const int eci, const int last_seg, const char *fncs, const int b256_end, const int c40_end, unsigned char target[], int *p_tp) { int sp = 0; int tp = *p_tp; @@ -1520,13 +1500,14 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c if (debug_print) printf("ECI %d ", eci + 1); } + /* If FAST_MODE or MAILMARK_2D, do Annex J-based encodation */ if ((symbol->input_mode & FAST_MODE) || b256_end || c40_end) { error_number = dm_isoenc(symbol, source, length, &sp, target, &tp, process_buffer, &process_p, - &b256_start, ¤t_mode, gs1, b256_end, c40_end, debug_print); + &b256_start, ¤t_mode, fncs, b256_end, c40_end, debug_print); } else { /* Do default minimal encodation */ error_number = dm_minimalenc(symbol, source, length, last_seg, &sp, target, &tp, process_buffer, &process_p, - &b256_start, ¤t_mode, gs1, debug_print); + &b256_start, ¤t_mode, fncs, debug_print); } if (error_number) { assert(error_number >= ZINT_ERROR); @@ -1571,7 +1552,7 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c /* Backtrack to last complete triplet (same technique as BWIPP) */ while (sp > 0 && process_p % 3) { sp--; - cnt = dm_c40text_cnt(current_mode, gs1, source[sp]); + cnt = dm_c40text_cnt(current_mode, fncs[sp], source[sp]); total_cnt += cnt; process_p -= cnt; } @@ -1588,14 +1569,9 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c target[tp++] = 235; /* FNC4 */ target[tp++] = (source[sp] - 128) + 1; if (debug_print) printf("FN4 A%02X ", target[tp - 1] - 1); - } else if (gs1 && source[sp] == '\x1D') { - if (gs1 == 2) { - target[tp++] = 29 + 1; /* GS */ - if (debug_print) fputs("GS ", stdout); - } else { - target[tp++] = 232; /* FNC1 */ - if (debug_print) fputs("FN1 ", stdout); - } + } else if (fncs[sp] && source[sp] == '\x1D') { + target[tp++] = 232; /* FNC1 */ + if (debug_print) fputs("FN1 ", stdout); } else { target[tp++] = source[sp] + 1; if (debug_print) printf("A%02X ", target[tp - 1] - 1); @@ -1670,10 +1646,10 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c } #ifdef ZINT_TEST /* Wrapper for direct testing */ -INTERNAL int zint_test_dm_encode(struct zint_symbol *symbol, const unsigned char source[], const int length, - const int eci, const int last_seg, const int gs1, const int b256_end, const int c40_end, +INTERNAL int zint_test_dm_encode(struct zint_symbol *symbol, const unsigned char source[], int length, + const int eci, const int last_seg, const char *fncs, const int b256_end, const int c40_end, unsigned char target[], int *p_tp) { - return dm_encode(symbol, source, length, eci, last_seg, gs1, b256_end, c40_end, target, p_tp); + return dm_encode(symbol, source, length, eci, last_seg, fncs, b256_end, c40_end, target, p_tp); } #endif @@ -1685,10 +1661,12 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co int i; int tp = 0; int in_macro = 0; + int have_extra_escapes = 0; int tot_length = 0, b256_have_fnc1 = 0; const struct zint_seg *last_seg = &segs[seg_count - 1]; /* gs1 flag values: 0: no GS1, 1: GS1 with FNC1 serparator, 2: GS separator */ const int gs1 = (symbol->input_mode & 0x07) == GS1_MODE ? 1 + !!(symbol->output_options & GS1_GS_SEPARATOR) : 0; + const int extra_escape_mode = symbol->input_mode & EXTRA_ESCAPE_MODE; const int mailmark = symbol->symbology == BARCODE_MAILMARK_2D; const int have_c40 = (symbol->option_3 & DM_C40_START) && symbol->option_1 >= 0; const int have_b256 = (symbol->option_3 & DM_B256_START) && symbol->option_1 >= 0; @@ -1757,6 +1735,14 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co target[tp++] = id2; } + if (extra_escape_mode && (symbol->symbology != BARCODE_DATAMATRIX || gs1)) { + if (symbol->symbology != BARCODE_DATAMATRIX) { + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 843, + "Can only use extra escape mode with non-variant Data Matrix"); + } + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 844, "Cannot use extra escape mode in GS1 mode"); + } + if (gs1) { target[tp++] = 232; if (debug_print) fputs("FN1 ", stdout); @@ -1799,6 +1785,8 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co for (i = 0; i < seg_count; i++) { const unsigned char *source; + unsigned char *src_buf; + char *fncs; int length; int src_inc = 0, len_dec = 0; int b256_end = 0, c40_end = 0; @@ -1813,6 +1801,29 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co source = segs[i].source + src_inc; length = segs[i].length - len_dec; + src_buf = (unsigned char *) z_alloca(length + 1); + fncs = (char *) z_alloca(length); + + if (gs1) { + memset(fncs, gs1 == 1, length); + } else { + memset(fncs, 0, length); + if (extra_escape_mode) { + int len; + if ((error_number = z_extra_escapes(symbol, source, length, segs[i].eci, src_buf, fncs, &len))) { + return error_number; + } + if (len != length) { + assert(len < length); + length = len; + assert(length > 0); + src_buf[length] = '\0'; + source = src_buf; + have_extra_escapes = 1; + } + } + } + if (mailmark) { assert(seg_count == 1); assert(length >= 45); @@ -1834,6 +1845,7 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co if (b256_have_fnc1) { b256_end = 0; } else { + int b256_len; if (symbol->option_1 == 0) { b256_end = length; } else if (symbol->option_1 < tot_length) { @@ -1841,21 +1853,27 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co } else { b256_end = symbol->option_1 - tot_length < length ? symbol->option_1 - tot_length : length; } - if (gs1 == 1) { - /* Stop at first FNC1 */ - const int b256_len = b256_end; - for (b256_end = 0; b256_end < b256_len && source[b256_end] != '\x1D'; b256_end++); - b256_have_fnc1 = b256_end != b256_len; + /* Stop at first FNC1 */ + b256_len = b256_end; + for (b256_end = 0; b256_end < b256_len; b256_end++) { + if (fncs[b256_end] && source[b256_end] == '\x1D') { + break; + } } + b256_have_fnc1 = b256_end != b256_len; } } - if ((error_number = dm_encode(symbol, source, length, segs[i].eci, i + 1 == seg_count, gs1, b256_end, c40_end, - target, &tp))) { + if ((error_number = dm_encode(symbol, source, length, segs[i].eci, i + 1 == seg_count, fncs, b256_end, + c40_end, target, &tp))) { assert(error_number >= ZINT_ERROR); return error_number; } - if (content_segs && segs[i].eci) { - z_ct_set_seg_eci(symbol, i, segs[i].eci); + if (content_segs) { + if (have_extra_escapes) { + z_ct_set_seg_extra_escapes_eci(symbol, i, segs[i].eci); + } else if (segs[i].eci) { + z_ct_set_seg_eci(symbol, i, segs[i].eci); + } } tot_length += length; } diff --git a/backend/library.c b/backend/library.c index 40c9cf6f..c8626e8b 100644 --- a/backend/library.c +++ b/backend/library.c @@ -366,6 +366,12 @@ static int supports_non_iso8859_1(const int symbology) { return 0; } +/* Returns 1 if `symbol` can process EXTRA_ESCAPE_MODE */ +static int supports_extra_escape_mode(const struct zint_symbol *const symbol) { + return symbol->symbology == BARCODE_CODE128 + || (symbol->symbology == BARCODE_DATAMATRIX && (symbol->input_mode & 0x07) != GS1_MODE); +} + /* Returns 1 if symbology supports HRT */ static int has_hrt(const int symbology) { @@ -720,7 +726,8 @@ static int escape_char_process(struct zint_symbol *symbol, const unsigned char * int val; int i; unsigned int unicode; - const int extra_escape_mode = (symbol->input_mode & EXTRA_ESCAPE_MODE) && symbol->symbology == BARCODE_CODE128; + const int extra_escape_mode = symbol->input_mode & EXTRA_ESCAPE_MODE; + const int can_extra_escape = supports_extra_escape_mode(symbol); const int escape_parens = (symbol->input_mode & GS1PARENS_MODE) && ((symbol->input_mode & 0x07) == GS1_MODE || check_force_gs1(symbol->symbology)); @@ -748,10 +755,14 @@ static int escape_char_process(struct zint_symbol *symbol, const unsigned char * if (escaped_string) escaped_string[out_posn] = vals[z_posn(escs, ch)]; in_posn += 2; break; - case '^': /* CODE128 specific */ - if (!extra_escape_mode) { - return z_errtxt(ZINT_ERROR_INVALID_DATA, symbol, 798, - "Escape '\\^' only valid for Code 128 in extra escape mode"); + case '^': /* Symbology specific */ + if (!extra_escape_mode || !can_extra_escape) { + if (!extra_escape_mode) { + return z_errtxt(ZINT_ERROR_INVALID_DATA, symbol, 798, + "Escape '\\^' only valid in extra escape mode"); + } + return z_errtxt(ZINT_ERROR_INVALID_DATA, symbol, 213, + "Extra escape '\\^' not valid for this symbology and/or input mode"); } /* Pass thru unaltered */ if (escaped_string) { @@ -814,7 +825,7 @@ static int escape_char_process(struct zint_symbol *symbol, const unsigned char * } /* Exclude reversed BOM and surrogates and out-of-range */ if (unicode == 0xFFFE || (unicode >= 0xD800 && unicode < 0xE000) || unicode > 0x10FFFF) { - return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 246, + return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 216, "Value of escape sequence '%.*s' in input out of range", ch == 'u' ? 6 : 8, input_string + in_posn); } @@ -849,7 +860,8 @@ static int escape_char_process(struct zint_symbol *symbol, const unsigned char * break; default: return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 234, - "Unrecognised escape character '\\%c' in input", ch); + "Unrecognised escape character '\\%c' in input", + !z_isascii(ch) || z_iscntrl(ch) ? '?' : ch); break; } } else { @@ -991,7 +1003,7 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[ } escape_mode = (symbol->input_mode & ESCAPE_MODE) - || ((symbol->input_mode & EXTRA_ESCAPE_MODE) && symbol->symbology == BARCODE_CODE128); + || ((symbol->input_mode & EXTRA_ESCAPE_MODE) && supports_extra_escape_mode(symbol)); content_segs = symbol->output_options & BARCODE_CONTENT_SEGS; local_segs = (struct zint_seg *) z_alloca(sizeof(struct zint_seg) * (seg_count > 0 ? seg_count : 1)); @@ -1074,7 +1086,7 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[ } if (total_len > ZINT_MAX_DATA_LEN) { - return error_tag(ZINT_ERROR_TOO_LONG, symbol, 243, "Input too long"); + return error_tag(ZINT_ERROR_TOO_LONG, symbol, 214, "Input too long"); } /* Reconcile symbol ECI and first segment ECI if both set */ @@ -1191,7 +1203,7 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[ if ((symbol->input_mode & 0x07) == UNICODE_MODE) { for (i = 0; i < seg_count; i++) { if (!z_is_valid_utf8(local_segs[i].source, local_segs[i].length)) { - return error_tag(ZINT_ERROR_INVALID_DATA, symbol, 245, "Invalid UTF-8 in input"); + return error_tag(ZINT_ERROR_INVALID_DATA, symbol, 215, "Invalid UTF-8 in input"); } } /* Only strip BOM on first segment */ @@ -1245,7 +1257,7 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[ return error_tag(ZINT_ERROR_INVALID_OPTION, symbol, 210, "Selected symbology does not support GS1 mode"); } } else if (content_segs && supports_non_iso8859_1(symbol->symbology)) { - /* Copy these as-is. The content seg `eci` will need to be updated individually */ + /* Copy these as-is. The content seg `eci` (& maybe `source`) will need to be updated individually */ if (z_ct_cpy_segs(symbol, local_segs, seg_count)) { return error_tag(ZINT_ERROR_MEMORY, symbol, -1, NULL); /* `z_ct_cpy_segs()` only fails with OOM */ } diff --git a/backend/libzint.rc b/backend/libzint.rc index dc22c5b3..b61c0d68 100644 --- a/backend/libzint.rc +++ b/backend/libzint.rc @@ -5,11 +5,7 @@ #define VER_FILEVERSION 2,16,0,9 #define VER_FILEVERSION_STR "2.16.0.9\0" -#ifdef GCC_WINDRES VS_VERSION_INFO VERSIONINFO -#else -VS_VERSION_INFO VERSIONINFO -#endif FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_FILEVERSION FILEFLAGSMASK VS_FFI_FILEFLAGSMASK @@ -24,13 +20,14 @@ FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual + BLOCK "040904B0" + //language ID = U.S. English, char set = Windows, Unicode BEGIN + VALUE "CompanyName", "Zint\0" VALUE "FileDescription", "libzint barcode library\0" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", "zint.dll\0" - VALUE "LegalCopyright", "Copyright © 2025 Robin Stuart & BogDan Vatra\0" + VALUE "LegalCopyright", "Copyright © 2026 Robin Stuart & BogDan Vatra\0" VALUE "OriginalFilename", "zint.dll\0" VALUE "ProductName", "libzint\0" VALUE "ProductVersion", VER_FILEVERSION_STR @@ -40,6 +37,6 @@ BEGIN END BLOCK "VarFileInfo" BEGIN - VALUE "Translation", 0x0409, 1250 + VALUE "Translation", 0x0409, 1200 END END diff --git a/backend/tests/test_code128.c b/backend/tests/test_code128.c index 8222c717..2b820a50 100644 --- a/backend/tests/test_code128.c +++ b/backend/tests/test_code128.c @@ -204,83 +204,113 @@ static void test_hrt(const testCtx *const p_ctx) { int expected_length; const char *expected_content; int expected_content_length; + int bwipp_cmp; int zxingcpp_cmp; + const char *comment; }; /* Ă© U+00E9 (\351, 233), UTF-8 C3A9, CodeB-only extended ASCII */ /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "1234567890", -1, "1234567890", -1, "", -1, 1 }, - /* 1*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "1234567890", -1, "1234567890", -1, "1234567890", -1, 1 }, - /* 2*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "\000ABC\000DEF\000", 9, " ABC DEF ", -1, "", -1, 1 }, - /* 3*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "\000ABC\000DEF\000", 9, " ABC DEF ", -1, "\000ABC\000DEF\000", 9, 1 }, /* No replacements */ - /* 4*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, -1, "12345\00067890", 11, "12345 67890", -1, "", -1, 1 }, - /* 5*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "12345\00067890", 11, "12345 67890", -1, "12345\00067890", 11, 1 }, - /* 6*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "12345\01167890\037\177", -1, "12345 67890 ", -1, "", -1, 1 }, - /* 7*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "12345\01167890\037\177", -1, "12345 67890 ", -1, "12345\01167890\037\177", -1, 1 }, - /* 8*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "abcdĂ©", -1, "abcdĂ©", -1, "", -1, 1 }, - /* 9*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "abcdĂ©", -1, "abcdĂ©", -1, "abcdĂ©", -1, 1 }, /* Now UTF-8, not converted */ - /* 10*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "abcdĂ©\302\240", -1, "abcdĂ©\302\240", -1, "", -1, 1 }, /* \302\240 (U+A0) NBSP */ - /* 11*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "abcdĂ©\302\240", -1, "abcdĂ©\302\240", -1, "abcdĂ©\302\240", -1, 1 }, - /* 12*/ { BARCODE_CODE128, DATA_MODE, -1, -1, "abcd\351", -1, "abcdĂ©", -1, "", -1, 899 }, - /* 13*/ { BARCODE_CODE128, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "abcd\351", -1, "abcdĂ©", -1, "abcd\351", -1, 899 }, - /* 14*/ { BARCODE_CODE128, DATA_MODE, -1, -1, "ab\240cd\351", -1, "ab\302\240cdĂ©", -1, "", -1, 899 }, /* \240 (U+A0) NBSP */ - /* 15*/ { BARCODE_CODE128, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "ab\240cd\351", -1, "ab\302\240cdĂ©", -1, "ab\240cd\351", -1, 899 }, - /* 16*/ { BARCODE_CODE128, DATA_MODE, -1, -1, "ab\200cd\351", -1, "ab cdĂ©", -1, "", -1, 899 }, /* \200 (U+80) non-ISO/IEC 8859-1 */ - /* 17*/ { BARCODE_CODE128, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "ab\200cd\351", -1, "ab cdĂ©", -1, "ab\200cd\351", -1, 899 }, - /* 18*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C123456789012345678", -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", -1, "", -1, 1 }, /* Max length 198 + 19 special escapes = 99 + 19*3 = 255 */ - /* 19*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C123456789012345678", -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", -1, 1 }, - /* 20*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, -1, "abcdĂ©", -1, "abcdĂ©", -1, "", -1, 1 }, - /* 21*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "abcdĂ©", -1, "abcdĂ©", -1, "abcdĂ©", -1, 1 }, - /* 22*/ { BARCODE_CODE128AB, DATA_MODE, -1, -1, "abcd\351", -1, "abcdĂ©", -1, "", -1, 899 }, - /* 23*/ { BARCODE_CODE128AB, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "abcd\351", -1, "abcdĂ©", -1, "abcd\351", -1, 899 }, - /* 24*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, -1, "1234567890", -1, "*+12345678900*", -1, "", -1, 1 }, - /* 25*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "1234567890", -1, "*+12345678900*", -1, "+12345678900", -1, 1 }, - /* 26*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, -1, "a99912345", -1, "*+A999123457*", -1, "", -1, 1 }, /* Converts to upper */ - /* 27*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "a99912345", -1, "*+A999123457*", -1, "+A999123457", -1, 1 }, - /* 28*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "000393206219912345678101040", -1, "0003 932 0621 9912 3456 78 101 040 9", -1, "", -1, 1 }, /* DPDAPPD 4.0.2 - Illustration 7 */ - /* 29*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "000393206219912345678101040", -1, "0003 932 0621 9912 3456 78 101 040 9", -1, "%000393206219912345678101040", -1, 1 }, /* Includes '%', no spaces, no check digit */ - /* 30*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007110601782532948375101276", -1, "0071 106 0178 2532 9483 75 101 276 X", -1, "", -1, 1 }, /* DPDAPPD 4.0.2 - Illustration 6, figure's HRT seems incorrect */ - /* 31*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "007110601782532948375101276", -1, "0071 106 0178 2532 9483 75 101 276 X", -1, "%007110601782532948375101276", -1, 1 }, - /* 32*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020028101276", -1, "0081 827 0998 0000 0200 28 101 276 B", -1, "", -1, 1 }, /* DPDPLS Section 4 */ - /* 33*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "008182709980000020028101276", -1, "0081 827 0998 0000 0200 28 101 276 B", -1, "%008182709980000020028101276", -1, 1 }, - /* 34*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007110601632532948375179276", -1, "0071 106 0163 2532 9483 75 179 276 A", -1, "", -1, 1 }, /* DPDPLS Section 4.6 */ - /* 35*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "007110601632532948375179276", -1, "0071 106 0163 2532 9483 75 179 276 A", -1, "%007110601632532948375179276", -1, 1 }, - /* 36*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "001990009980000020084109203", -1, "0019 900 0998 0000 0200 84 109 203 1", -1, "", -1, 1 }, /* DPDPLS Section 5.1 */ - /* 37*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "001990009980000020084109203", -1, "0019 900 0998 0000 0200 84 109 203 1", -1, "%001990009980000020084109203", -1, 1 }, - /* 38*/ { BARCODE_DPD, UNICODE_MODE, 1, -1, "007110601632532948375101276", -1, "0071 106 0163 2532 9483 75 101 276 O", -1, "", -1, 1 }, /* DPDPLS Section 6.1.2 relabel, figure is actually 8.7.2 with mislabelled HRT */ - /* 39*/ { BARCODE_DPD, UNICODE_MODE, 1, BARCODE_CONTENT_SEGS, "007110601632532948375101276", -1, "0071 106 0163 2532 9483 75 101 276 O", -1, "007110601632532948375101276", -1, 1 }, /* No '%' */ - /* 40*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020029136276", -1, "0081 827 0998 0000 0200 29 136 276 3", -1, "", -1, 1 }, /* DPDPLS Section 8.1 */ - /* 41*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "001234509980000020031105276", -1, "0012 345 0998 0000 0200 31 105 276 L", -1, "", -1, 1 }, /* DPDPLS Section 8.2 */ - /* 42*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020032154276", -1, "0081 827 0998 0000 0200 32 154 276 J", -1, "", -1, 1 }, /* DPDPLS Section 8.3 */ - /* 43*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020030109276", -1, "0081 827 0998 0000 0200 30 109 276 W", -1, "", -1, 1 }, /* DPDPLS Section 8.4 */ - /* 44*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020033350276", -1, "0081 827 0998 0000 0200 33 350 276 C", -1, "", -1, 1 }, /* DPDPLS Section 8.5.1 */ - /* 45*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020034179276", -1, "0081 827 0998 0000 0200 34 179 276 I", -1, "", -1, 1 }, /* DPDPLS Section 8.5.2 */ - /* 46*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020035225276", -1, "0081 827 0998 0000 0200 35 225 276 H", -1, "", -1, 1 }, /* DPDPLS Section 8.5.3 */ - /* 47*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020036155276", -1, "0081 827 0998 0000 0200 36 155 276 5", -1, "", -1, 1 }, /* DPDPLS Section 8.5.4 */ - /* 48*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "000280009980000020037155056", -1, "0002 800 0998 0000 0200 37 155 056 6", -1, "", -1, 1 }, /* DPDPLS Section 8.5.5 */ - /* 49*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007855009980000020041302840", -1, "0078 550 0998 0000 0200 41 302 840 U", -1, "", -1, 1 }, /* DPDPLS Section 8.5.6 */ - /* 50*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020042102276", -1, "0081 827 0998 0000 0200 42 102 276 R", -1, "", -1, 1 }, /* DPDPLS Section 8.6.1 */ - /* 51*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020043113276", -1, "0081 827 0998 0000 0200 43 113 276 Y", -1, "", -1, 1 }, /* DPDPLS Section 8.7.1 */ - /* 52*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "008182709980000020043113276", -1, "0081 827 0998 0000 0200 43 113 276 Y", -1, "%008182709980000020043113276", -1, 1 }, - /* 53*/ { BARCODE_DPD, UNICODE_MODE, 1, -1, "006376209980000020044118276", -1, "0063 762 0998 0000 0200 44 118 276 I", -1, "", -1, 1 }, /* DPDPLS Section 8.7.2 relabel */ - /* 54*/ { BARCODE_DPD, UNICODE_MODE, 1, BARCODE_CONTENT_SEGS, "006376209980000020044118276", -1, "0063 762 0998 0000 0200 44 118 276 I", -1, "006376209980000020044118276", -1, 1 }, - /* 55*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007160009980000020050294276", -1, "0071 600 0998 0000 0200 50 294 276 C", -1, "", -1, 1 }, /* DPDPLS Section 8.8 */ - /* 56*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020045327276", -1, "0081 827 0998 0000 0200 45 327 276 N", -1, "", -1, 1 }, /* DPDPLS Section 8.9.1 */ - /* 57*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "006374309980000020047337276", -1, "0063 743 0998 0000 0200 47 337 276 O", -1, "", -1, 1 }, /* DPDPLS Section 8.9.2 */ - /* 58*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "006374309980000020047337276", -1, "0063 743 0998 0000 0200 47 337 276 O", -1, "%006374309980000020047337276", -1, 1 }, - /* 59*/ { BARCODE_DPD, UNICODE_MODE, 1, -1, "006374109980978004757332276", -1, "0063 741 0998 0978 0047 57 332 276 M", -1, "", -1, 1 }, /* DPDPLS Section 8.9.3 relabel, figure's HRT seems incorrect */ - /* 60*/ { BARCODE_DPD, UNICODE_MODE, 1, BARCODE_CONTENT_SEGS, "006374109980978004757332276", -1, "0063 741 0998 0978 0047 57 332 276 M", -1, "006374109980978004757332276", -1, 1 }, - /* 61*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020051106276", -1, "0081 827 0998 0000 0200 51 106 276 M", -1, "", -1, 1 }, /* DPDPLS Section 9.1 */ - /* 62*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020052110276", -1, "0081 827 0998 0000 0200 52 110 276 W", -1, "", -1, 1 }, /* DPDPLS Section 9.2 */ - /* 63*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020053161276", -1, "0081 827 0998 0000 0200 53 161 276 O", -1, "", -1, 1 }, /* DPDPLS Section 9.3 */ - /* 64*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020054352276", -1, "0081 827 0998 0000 0200 54 352 276 B", -1, "", -1, 1 }, /* DPDPLS Section 9.4 */ - /* 65*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020055191276", -1, "0081 827 0998 0000 0200 55 191 276 A", -1, "", -1, 1 }, /* DPDPLS Section 9.5 */ - /* 66*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020056237276", -1, "0081 827 0998 0000 0200 56 237 276 K", -1, "", -1, 1 }, /* DPDPLS Section 9.6 */ - /* 67*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "008182709980000020056237276", -1, "0081 827 0998 0000 0200 56 237 276 K", -1, "%008182709980000020056237276", -1, 1 }, - /* 68*/ { BARCODE_UPU_S10, UNICODE_MODE, -1, -1, "EE876543216CA", -1, "EE 876 543 216 CA", -1, "", -1, 1 }, /* UPU S10 Annex A */ - /* 69*/ { BARCODE_UPU_S10, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "EE876543216CA", -1, "EE 876 543 216 CA", -1, "EE876543216CA", -1, 1 }, /* No spaces */ + /* 0*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "1234567890", -1, "1234567890", -1, "", -1, 1, 1, "" }, + /* 1*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "1234567890", -1, "1234567890", -1, "1234567890", -1, 1, 1, "" }, + /* 2*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "\000ABC\000DEF\000", 9, " ABC DEF ", -1, "", -1, 1, 1, "" }, + /* 3*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "\000ABC\000DEF\000", 9, " ABC DEF ", -1, "\000ABC\000DEF\000", 9, 1, 1, "No replacements" }, + /* 4*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, -1, "12345\00067890", 11, "12345 67890", -1, "", -1, 1, 1, "" }, + /* 5*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "12345\00067890", 11, "12345 67890", -1, "12345\00067890", 11, 1, 1, "" }, + /* 6*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "12345\01167890\037\177", -1, "12345 67890 ", -1, "", -1, 1, 1, "" }, + /* 7*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "12345\01167890\037\177", -1, "12345 67890 ", -1, "12345\01167890\037\177", -1, 1, 1, "" }, + /* 8*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "abcdĂ©", -1, "abcdĂ©", -1, "", -1, 1, 1, "" }, + /* 9*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "abcdĂ©", -1, "abcdĂ©", -1, "abcdĂ©", -1, 1, 1, "Now UTF-8, not converted" }, + /* 10*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, "abcdĂ©\302\240", -1, "abcdĂ©\302\240", -1, "", -1, 1, 1, "\302\240 (U+A0) NBSP" }, + /* 11*/ { BARCODE_CODE128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "abcdĂ©\302\240", -1, "abcdĂ©\302\240", -1, "abcdĂ©\302\240", -1, 1, 1, "" }, + /* 12*/ { BARCODE_CODE128, DATA_MODE, -1, -1, "abcd\351", -1, "abcdĂ©", -1, "", -1, 1, 899, "" }, + /* 13*/ { BARCODE_CODE128, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "abcd\351", -1, "abcdĂ©", -1, "abcd\351", -1, 1, 899, "" }, + /* 14*/ { BARCODE_CODE128, DATA_MODE, -1, -1, "ab\240cd\351", -1, "ab\302\240cdĂ©", -1, "", -1, 1, 899, "\240 (U+A0) NBSP" }, + /* 15*/ { BARCODE_CODE128, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "ab\240cd\351", -1, "ab\302\240cdĂ©", -1, "ab\240cd\351", -1, 1, 899, "" }, + /* 16*/ { BARCODE_CODE128, DATA_MODE, -1, -1, "ab\200cd\351", -1, "ab cdĂ©", -1, "", -1, 1, 899, "\200 (U+80) non-ISO/IEC 8859-1" }, + /* 17*/ { BARCODE_CODE128, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "ab\200cd\351", -1, "ab cdĂ©", -1, "ab\200cd\351", -1, 1, 899, "" }, + /* 18*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C123456789012345678", -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", -1, "", -1, 1, 1, "Max length 198 + 19 special escapes = 99 + 19*3 = 255" }, + /* 19*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C1234567890\\^C123456789012345678", -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", -1, 1, 1, "" }, + /* 20*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^10412345", -1, "0412345", -1, "", -1, 1, 1, "" }, + /* 21*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^10412345", -1, "0412345", -1, "0412345", -1, 1, 1, "" }, + /* 22*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^1\\^1041234\\^15", -1, "0412345", -1, "", -1, 0, 1, "BWIPP: different encodation (same no. of codewords) - see below (forced mode)" }, + /* 23*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1\\^1041234\\^15", -1, "0412345", -1, "\035041234\0355", -1, 0, 1, "BWIPP - see below (forced mode)" }, + /* 24*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^1\\^1041234\\^B\\^15", -1, "0412345", -1, "", -1, 1, 1, "" }, + /* 25*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1\\^1041234\\^B\\^15", -1, "0412345", -1, "\035041234\0355", -1, 1, 1, "" }, + /* 26*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "A\\^1123456", -1, "A123456", -1, "", -1, 1, 1, "" }, + /* 27*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "A\\^1123456", -1, "A123456", -1, "A123456", -1, 1, 1, "" }, + /* 28*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "A\\^1123456\\^1", -1, "A123456", -1, "", -1, 1, 1, "" }, + /* 29*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "A\\^1123456\\^1", -1, "A123456", -1, "A123456\035", -1, 1, 1, "" }, + /* 30*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "?\\^1123456\\^1", -1, "?123456", -1, "", -1, 0, 1, "BWIPP: different encodation (same no. of codewords) - see below (forced mode)" }, + /* 31*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "?\\^1123456\\^1", -1, "?123456", -1, "?\035123456\035", -1, 0, 1, "BWIPP - see below (forced mode)" }, + /* 32*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "?\\^B\\^1\\^@123456\\^1", -1, "?123456", -1, "", -1, 1, 1, "" }, + /* 33*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "?\\^B\\^1\\^@123456\\^1", -1, "?123456", -1, "?\035123456\035", -1, 1, 1, "" }, + /* 34*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "12\\^1123456", -1, "12123456", -1, "", -1, 1, 1, "" }, + /* 35*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "12\\^1123456", -1, "12123456", -1, "12123456", -1, 1, 1, "" }, + /* 36*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "12\\^1\\^1123456", -1, "12123456", -1, "", -1, 1, 1, "" }, + /* 37*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "12\\^1\\^1123456", -1, "12123456", -1, "12\035123456", -1, 1, 1, "" }, + /* 38*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^C12\\^1\\^1123456", -1, "12123456", -1, "", -1, 1, 1, "" }, + /* 39*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^C12\\^1\\^1123456", -1, "12123456", -1, "12\035123456", -1, 1, 1, "" }, + /* 40*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "1A\\^1123456", -1, "1A123456", -1, "", -1, 0, 1, "BWIPP: different encodation (same no. of codewords)" }, + /* 41*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "1A\\^1123456", -1, "1A123456", -1, "1A\035123456", -1, 0, 1, "BWIPP: as above" }, + /* 42*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^1\\^1", -1, "", -1, "", -1, 0, 1, "BWIPP: different encodation (same no. of codewords) - see below (forced mode)" }, + /* 43*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1\\^1", -1, "", -1, "\035", -1, 0, 1, "BWIPP - see below (forced mode)" }, + /* 44*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^B\\^1\\^1", -1, "", -1, "", -1, 1, 1, "" }, + /* 45*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^B\\^1\\^1", -1, "", -1, "\035", -1, 1, 1, "" }, + /* 46*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, -1, "\\^1\\^1\\^1", -1, "", -1, "", -1, 0, 1, "BWIPP: different encodation (same no. of codewords)" }, + /* 47*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1\\^1\\^1", -1, "", -1, "\035\035", -1, 0, 1, "BWIPP: as above" }, + /* 48*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, -1, "abcdĂ©", -1, "abcdĂ©", -1, "", -1, 1, 1, "" }, + /* 49*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "abcdĂ©", -1, "abcdĂ©", -1, "abcdĂ©", -1, 1, 1, "" }, + /* 50*/ { BARCODE_CODE128AB, DATA_MODE, -1, -1, "abcd\351", -1, "abcdĂ©", -1, "", -1, 1, 899, "" }, + /* 51*/ { BARCODE_CODE128AB, DATA_MODE, -1, BARCODE_CONTENT_SEGS, "abcd\351", -1, "abcdĂ©", -1, "abcd\351", -1, 1, 899, "" }, + /* 52*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, -1, "1234567890", -1, "*+12345678900*", -1, "", -1, 1, 1, "" }, + /* 53*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "1234567890", -1, "*+12345678900*", -1, "+12345678900", -1, 1, 1, "" }, + /* 54*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, -1, "a99912345", -1, "*+A999123457*", -1, "", -1, 1, 1, "Converts to upper" }, + /* 55*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "a99912345", -1, "*+A999123457*", -1, "+A999123457", -1, 1, 1, "" }, + /* 56*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "000393206219912345678101040", -1, "0003 932 0621 9912 3456 78 101 040 9", -1, "", -1, 1, 1, "DPDAPPD 4.0.2 - Illustration 7" }, + /* 57*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "000393206219912345678101040", -1, "0003 932 0621 9912 3456 78 101 040 9", -1, "%000393206219912345678101040", -1, 1, 1, "Includes '%', no spaces, no check digit" }, + /* 58*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007110601782532948375101276", -1, "0071 106 0178 2532 9483 75 101 276 X", -1, "", -1, 1, 1, "DPDAPPD 4.0.2 - Illustration 6, figure's HRT seems incorrect" }, + /* 59*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "007110601782532948375101276", -1, "0071 106 0178 2532 9483 75 101 276 X", -1, "%007110601782532948375101276", -1, 1, 1, "" }, + /* 60*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020028101276", -1, "0081 827 0998 0000 0200 28 101 276 B", -1, "", -1, 1, 1, "DPDPLS Section 4" }, + /* 61*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "008182709980000020028101276", -1, "0081 827 0998 0000 0200 28 101 276 B", -1, "%008182709980000020028101276", -1, 1, 1, "" }, + /* 62*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007110601632532948375179276", -1, "0071 106 0163 2532 9483 75 179 276 A", -1, "", -1, 1, 1, "DPDPLS Section 4.6" }, + /* 63*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "007110601632532948375179276", -1, "0071 106 0163 2532 9483 75 179 276 A", -1, "%007110601632532948375179276", -1, 1, 1, "" }, + /* 64*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "001990009980000020084109203", -1, "0019 900 0998 0000 0200 84 109 203 1", -1, "", -1, 1, 1, "DPDPLS Section 5.1" }, + /* 65*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "001990009980000020084109203", -1, "0019 900 0998 0000 0200 84 109 203 1", -1, "%001990009980000020084109203", -1, 1, 1, "" }, + /* 66*/ { BARCODE_DPD, UNICODE_MODE, 1, -1, "007110601632532948375101276", -1, "0071 106 0163 2532 9483 75 101 276 O", -1, "", -1, 1, 1, "DPDPLS Section 6.1.2 relabel, figure is actually 8.7.2 with mislabelled HRT" }, + /* 67*/ { BARCODE_DPD, UNICODE_MODE, 1, BARCODE_CONTENT_SEGS, "007110601632532948375101276", -1, "0071 106 0163 2532 9483 75 101 276 O", -1, "007110601632532948375101276", -1, 1, 1, "No '%'" }, + /* 68*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020029136276", -1, "0081 827 0998 0000 0200 29 136 276 3", -1, "", -1, 1, 1, "DPDPLS Section 8.1" }, + /* 69*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "001234509980000020031105276", -1, "0012 345 0998 0000 0200 31 105 276 L", -1, "", -1, 1, 1, "DPDPLS Section 8.2" }, + /* 70*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020032154276", -1, "0081 827 0998 0000 0200 32 154 276 J", -1, "", -1, 1, 1, "DPDPLS Section 8.3" }, + /* 71*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020030109276", -1, "0081 827 0998 0000 0200 30 109 276 W", -1, "", -1, 1, 1, "DPDPLS Section 8.4" }, + /* 72*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020033350276", -1, "0081 827 0998 0000 0200 33 350 276 C", -1, "", -1, 1, 1, "DPDPLS Section 8.5.1" }, + /* 73*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020034179276", -1, "0081 827 0998 0000 0200 34 179 276 I", -1, "", -1, 1, 1, "DPDPLS Section 8.5.2" }, + /* 74*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020035225276", -1, "0081 827 0998 0000 0200 35 225 276 H", -1, "", -1, 1, 1, "DPDPLS Section 8.5.3" }, + /* 75*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020036155276", -1, "0081 827 0998 0000 0200 36 155 276 5", -1, "", -1, 1, 1, "DPDPLS Section 8.5.4" }, + /* 76*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "000280009980000020037155056", -1, "0002 800 0998 0000 0200 37 155 056 6", -1, "", -1, 1, 1, "DPDPLS Section 8.5.5" }, + /* 77*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007855009980000020041302840", -1, "0078 550 0998 0000 0200 41 302 840 U", -1, "", -1, 1, 1, "DPDPLS Section 8.5.6" }, + /* 78*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020042102276", -1, "0081 827 0998 0000 0200 42 102 276 R", -1, "", -1, 1, 1, "DPDPLS Section 8.6.1" }, + /* 79*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020043113276", -1, "0081 827 0998 0000 0200 43 113 276 Y", -1, "", -1, 1, 1, "DPDPLS Section 8.7.1" }, + /* 80*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "008182709980000020043113276", -1, "0081 827 0998 0000 0200 43 113 276 Y", -1, "%008182709980000020043113276", -1, 1, 1, "" }, + /* 81*/ { BARCODE_DPD, UNICODE_MODE, 1, -1, "006376209980000020044118276", -1, "0063 762 0998 0000 0200 44 118 276 I", -1, "", -1, 1, 1, "DPDPLS Section 8.7.2 relabel" }, + /* 82*/ { BARCODE_DPD, UNICODE_MODE, 1, BARCODE_CONTENT_SEGS, "006376209980000020044118276", -1, "0063 762 0998 0000 0200 44 118 276 I", -1, "006376209980000020044118276", -1, 1, 1, "" }, + /* 83*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "007160009980000020050294276", -1, "0071 600 0998 0000 0200 50 294 276 C", -1, "", -1, 1, 1, "DPDPLS Section 8.8" }, + /* 84*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020045327276", -1, "0081 827 0998 0000 0200 45 327 276 N", -1, "", -1, 1, 1, "DPDPLS Section 8.9.1" }, + /* 85*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "006374309980000020047337276", -1, "0063 743 0998 0000 0200 47 337 276 O", -1, "", -1, 1, 1, "DPDPLS Section 8.9.2" }, + /* 86*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "006374309980000020047337276", -1, "0063 743 0998 0000 0200 47 337 276 O", -1, "%006374309980000020047337276", -1, 1, 1, "" }, + /* 87*/ { BARCODE_DPD, UNICODE_MODE, 1, -1, "006374109980978004757332276", -1, "0063 741 0998 0978 0047 57 332 276 M", -1, "", -1, 1, 1, "DPDPLS Section 8.9.3 relabel, figure's HRT seems incorrect" }, + /* 88*/ { BARCODE_DPD, UNICODE_MODE, 1, BARCODE_CONTENT_SEGS, "006374109980978004757332276", -1, "0063 741 0998 0978 0047 57 332 276 M", -1, "006374109980978004757332276", -1, 1, 1, "" }, + /* 89*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020051106276", -1, "0081 827 0998 0000 0200 51 106 276 M", -1, "", -1, 1, 1, "DPDPLS Section 9.1" }, + /* 90*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020052110276", -1, "0081 827 0998 0000 0200 52 110 276 W", -1, "", -1, 1, 1, "DPDPLS Section 9.2" }, + /* 91*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020053161276", -1, "0081 827 0998 0000 0200 53 161 276 O", -1, "", -1, 1, 1, "DPDPLS Section 9.3" }, + /* 92*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020054352276", -1, "0081 827 0998 0000 0200 54 352 276 B", -1, "", -1, 1, 1, "DPDPLS Section 9.4" }, + /* 93*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020055191276", -1, "0081 827 0998 0000 0200 55 191 276 A", -1, "", -1, 1, 1, "DPDPLS Section 9.5" }, + /* 94*/ { BARCODE_DPD, UNICODE_MODE, -1, -1, "008182709980000020056237276", -1, "0081 827 0998 0000 0200 56 237 276 K", -1, "", -1, 1, 1, "DPDPLS Section 9.6" }, + /* 95*/ { BARCODE_DPD, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "008182709980000020056237276", -1, "0081 827 0998 0000 0200 56 237 276 K", -1, "%008182709980000020056237276", -1, 1, 1, "" }, + /* 96*/ { BARCODE_UPU_S10, UNICODE_MODE, -1, -1, "EE876543216CA", -1, "EE 876 543 216 CA", -1, "", -1, 1, 1, "UPU S10 Annex A" }, + /* 97*/ { BARCODE_UPU_S10, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "EE876543216CA", -1, "EE 876 543 216 CA", -1, "EE876543216CA", -1, 1, 1, "No spaces" }, /* BARCODE_GS1_128, BARCODE_EAN14, BARCODE_NVE18 hrt tested in test_gs1.c */ }; const int data_size = ARRAY_SIZE(data); @@ -319,9 +349,9 @@ static void test_hrt(const testCtx *const p_ctx) { ret = ZBarcode_Encode(symbol, TCU(data[i].data), length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_equal(symbol->text_length, expected_length, "i:%d text_length %d != expected_length %d\n", - i, symbol->text_length, expected_length); - assert_zero(memcmp(symbol->text, data[i].expected, expected_length), "i:%d memcmp(%s, %s, %d) != 0\n", + assert_equal(symbol->text_length, expected_length, "i:%d text_length %d != expected_length %d (%s, %s)\n", + i, symbol->text_length, expected_length, symbol->text, data[i].expected); + assert_zero(memcmp(symbol->text, data[i].expected, expected_length), "i:%d text memcmp(%s, %s, %d) != 0\n", i, symbol->text, data[i].expected, expected_length); if (ret < ZINT_ERROR) { @@ -329,10 +359,11 @@ static void test_hrt(const testCtx *const p_ctx) { assert_nonnull(symbol->content_segs, "i:%d content_segs NULL\n", i); assert_nonnull(symbol->content_segs[0].source, "i:%d content_segs[0].source NULL\n", i); assert_equal(symbol->content_segs[0].length, expected_content_length, - "i:%d content_segs[0].length %d != expected_content_length %d\n", - i, symbol->content_segs[0].length, expected_content_length); + "i:%d content_segs[0].length %d != expected_content_length %d (%.*s, %s)\n", + i, symbol->content_segs[0].length, expected_content_length, + symbol->content_segs[0].length, symbol->content_segs[0].source, data[i].expected_content); assert_zero(memcmp(symbol->content_segs[0].source, data[i].expected_content, expected_content_length), - "i:%d memcmp(%.*s, %s, %d) != 0\n", + "i:%d content_segs memcmp(%.*s, %s, %d) != 0\n", i, symbol->content_segs[0].length, symbol->content_segs[0].source, data[i].expected_content, expected_content_length); } else { @@ -340,7 +371,12 @@ static void test_hrt(const testCtx *const p_ctx) { } if (do_bwipp && testUtilCanBwipp(i, symbol, -1, data[i].option_2, -1, debug)) { - if (data[i].symbology == BARCODE_HIBC_128 + 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 if (data[i].symbology == BARCODE_HIBC_128 && z_not_sane(IS_NUM_F | IS_UPR_F | IS_SPC_F | IS_PLS_F | IS_MNS_F | IS_SIL_F, ZCUCP(data[i].data), length)) { if (debug & ZINT_DEBUG_TEST_PRINT) { printf("i:%d %s not BWIPP compatible (%s)\n", @@ -363,6 +399,7 @@ static void test_hrt(const testCtx *const p_ctx) { if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[4096]; + assert_nonzero(data[i].zxingcpp_cmp, "i:%d data[i].zxingcpp_cmp == 0", i); 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, data[i].zxingcpp_cmp, cmp_buf, @@ -512,8 +549,8 @@ static void test_input(const testCtx *const p_ctx) { /* 2*/ { UNICODE_MODE, "AIM1234", -1, 0, 101, 1, 1, "(9) 104 33 41 45 99 12 34 87 106", "Example from Annex A.1, check char value 87" }, /* 3*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "123456789", -1, 0, 101, 1, 1, "(9) 105 12 34 56 78 100 25 79 106", "Ticket #204 ZPL example" }, /* 4*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^B12345\\^C6789", -1, 0, 123, 0, 1, "(11) 104 17 18 19 20 21 99 67 89 11 106", "Ticket #204 ZPL example; BWIPP as above" }, - /* 5*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^B12345\\^D6789", -1, 0, 167, 0, 1, "(15) 104 17 18 19 20 21 60 62 36 22 23 24 25 1 106", "Unrecognized extra escape passed thru; BWIPP different encodation" }, - /* 6*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^B12345\\^D6789", -1, 0, 167, 0, 1, "(15) 104 17 18 19 20 21 60 62 36 22 23 24 25 1 106", "Unrecognized extra escape passed thru; BWIPP different encodation" }, + /* 5*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^B12345\\^D6789", -1, ZINT_ERROR_INVALID_DATA, 0, 1, 1, "Error 348: Unrecognized extra escape \"\\^D\"", "" }, + /* 6*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^B12345\\^\0016789", -1, ZINT_ERROR_INVALID_DATA, 0, 1, 1, "Error 348: Unrecognized extra escape \"\\^?\"", "" }, /* 7*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^A\\^B\\^C", -1, ZINT_ERROR_INVALID_DATA, 0, 1, 1, "Error 842: No input data", "" }, /* 8*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^A\\^^B\\^C", -1, 0, 68, 0, 1, "(6) 103 60 62 34 80 106", "BWIPP different encodation" }, /* 9*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^A\\^B\\^^C", -1, 0, 68, 1, 1, "(6) 104 60 62 35 84 106", "" }, @@ -649,10 +686,10 @@ static void test_input(const testCtx *const p_ctx) { /*139*/ { UNICODE_MODE, "12Ă©12Ă©", -1, 0, 123, 0, 1, "(11) 105 12 100 100 73 17 18 100 73 17 106", "StartC 12 CodeB FNC4 Ă© 1 2 FNC4 Ă©; BWIPP different encodation (StartB)" }, /*140*/ { UNICODE_MODE, "1234Ă©123456Ă©", -1, 0, 167, 1, 1, "(15) 105 12 34 100 100 73 99 12 34 56 100 100 73 15 106", "StartC 12 34 CodeB FNC4 Ă© CodeC 12 34 56 CodeB FNC4 Ă©" }, /*141*/ { DATA_MODE, "\256^a\357\033\270\017,\274u$B\305\311\006\011]\273\025u\315\2638\263\333", -1, 0, 453, 1, 899, "(41) 104 100 14 62 65 100 79 101 91 101 24 79 12 101 28 98 85 4 34 101 37 101 41 70 73 61", "" }, - /*142*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^C\\^1", -1, 0, 46, 0, 0, "(4) 105 102 1 106", "StartC FNC1; From fuzz 2026-01-12; BWIPP see below; zxing-cpp empty text" }, - /*143*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^A\\^1", -1, 0, 46, 0, 0, "(4) 103 102 102 106", "StartA FNC1; From fuzz 2026-01-12; BWIPP see below; zxing-cpp empty text" }, - /*144*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^B\\^1", -1, 0, 46, 1, 0, "(4) 104 102 0 106", "StartB FNC1; From fuzz 2026-01-12; zxing-cpp empty text" }, - /*145*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^1", -1, 0, 46, 0, 0, "(4) 105 102 1 106", "StartC FNC1; BWIPP see above; zxing-cpp empty text" }, + /*142*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^C\\^1", -1, 0, 46, 0, 1, "(4) 105 102 1 106", "StartC FNC1; From fuzz 2026-01-12; BWIPP see below" }, + /*143*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^A\\^1", -1, 0, 46, 0, 1, "(4) 103 102 102 106", "StartA FNC1; From fuzz 2026-01-12; BWIPP see below" }, + /*144*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^B\\^1", -1, 0, 46, 1, 1, "(4) 104 102 0 106", "StartB FNC1; From fuzz 2026-01-12" }, + /*145*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^1", -1, 0, 46, 0, 1, "(4) 105 102 1 106", "StartC FNC1; BWIPP see above" }, /*146*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^C\\^1A", -1, 0, 68, 0, 3, "(6) 105 102 100 33 94 106", "StartC CodeB FNC1 A; BWIPP see below" }, /*147*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^A\\^1A", -1, 0, 57, 0, 3, "(5) 103 102 33 65 106", "StartA FNC1 A; BWIPP see below" }, /*148*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^B\\^1A", -1, 0, 57, 1, 3, "(5) 104 102 33 66 106", "StartB FNC1 A" }, diff --git a/backend/tests/test_common.c b/backend/tests/test_common.c index 5ba70ebc..ad6e5786 100644 --- a/backend/tests/test_common.c +++ b/backend/tests/test_common.c @@ -155,8 +155,7 @@ static void test_to_upper(const testCtx *const p_ctx) { buf[length] = '\0'; z_to_upper(buf, length); - assert_zero(strcmp((const char *) buf, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", - i, buf, data[i].expected); + assert_zero(strcmp(ZCCP(buf), data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, buf, data[i].expected); } testFinish(); @@ -764,6 +763,70 @@ static void test_utf8_to_unicode(const testCtx *const p_ctx) { testFinish(); } +static void test_extra_escapes(const testCtx *const p_ctx) { + int debug = p_ctx->debug; + + struct item { + int eci; + const char *data; + int length; + int ret; + const char *expected; + const char expected_fncs[32]; + const char *comment; + }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ + static const struct item data[] = { + /* 0*/ { 0, "", -1, 0, "", {0}, "" }, + /* 1*/ { 3, "ABC", -1, 0, "ABC", {0}, "" }, + /* 2*/ { 4, "\\^1ABC", -1, 0, "\035ABC", {1}, "" }, + /* 3*/ { 26, "\\^1\\^1A\\^1BC\\^1", -1, 0, "\035\035A\035BC\035", {1,1,0,1,0,0,1}, "" }, + /* 4*/ { 27, "\\^^\\^1A\\^1BC\\^^1", -1, 0, "\\^\035A\035BC\\^1", {0,0,1,0,1}, "" }, + /* 5*/ { 20, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, + /* 6*/ { 25, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, + /* 7*/ { 28, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, + /* 8*/ { 29, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, + /* 9*/ { 899, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, + }; + const int data_size = ARRAY_SIZE(data); + int i, length, ret; + + struct zint_symbol s_symbol; + struct zint_symbol *symbol = &s_symbol; + int expected_length; + + testStart(p_ctx->func_name); + + symbol->debug = debug; + + for (i = 0; i < data_size; i++) { + int len = 0; + unsigned char dest[32] = {0}; + char fncs[32] = {0}; + + if (testContinue(p_ctx, i)) continue; + + memset(symbol, 0, sizeof(*symbol)); + + length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; + expected_length = (int) strlen(data[i].expected); + assert_nonzero(expected_length < (int) sizeof(dest), "i:%d expected_length %d >= sizeof(dest) %d\n", + i, expected_length, (int) sizeof(dest)); + + ret = z_extra_escapes(symbol, ZCUCP(data[i].data), length, data[i].eci, dest, fncs, &len); + assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); + if (ret < ZINT_ERROR) { + assert_equal(len, expected_length, "i:%d len %d != expected_length %d (%s)\n", + i, len, expected_length, dest); + assert_zero(strcmp(ZCCP(dest), data[i].expected), "i:%d dest (%s) != expected (%s)\n", + i, dest, data[i].expected); + assert_zero(memcmp(fncs, data[i].expected_fncs, expected_length), "i:%d fncs != expected_fncs\n", i); + } + } + + testFinish(); +} + /* Note transferred from "test_code128.c" */ static void test_hrt_cpy_iso8859_1(const testCtx *const p_ctx) { int debug = p_ctx->debug; @@ -1033,7 +1096,7 @@ static void test_hrt_printf_nochk(const testCtx *const p_ctx) { assert_zero(1, "i:%d, bad num_args\n", i); } - assert_zero(strcmp((const char *) symbol->text, data[i].expected), "i:%d strcmp(\"%s\", \"%s\") != 0\n", + assert_zero(strcmp(ZCCP(symbol->text), data[i].expected), "i:%d strcmp(\"%s\", \"%s\") != 0\n", i, symbol->text, data[i].expected); } @@ -1084,7 +1147,7 @@ static void test_hrt_conv_gs1_brackets_nochk(const testCtx *const p_ctx) { z_hrt_conv_gs1_brackets_nochk(symbol, TCU(data[i].data), length); - assert_zero(strcmp((const char *) symbol->text, data[i].expected), "i:%d strcmp(\"%s\", \"%s\") != 0\n", + assert_zero(strcmp(ZCCP(symbol->text), data[i].expected), "i:%d strcmp(\"%s\", \"%s\") != 0\n", i, symbol->text, data[i].expected); } @@ -1223,7 +1286,7 @@ static void test_ct_cpy(const testCtx *const p_ctx) { i, symbol->content_segs[0].length, expected_length); assert_zero(memcmp(symbol->content_segs[0].source, data[i].expected, expected_length), "i:%d content_segs[0].source memcmp(%s, %s, %d) != 0\n", i, - testUtilEscape((const char *) symbol->content_segs[0].source, symbol->content_segs[0].length, + testUtilEscape(ZCCP(symbol->content_segs[0].source), symbol->content_segs[0].length, escaped, sizeof(escaped)), testUtilEscape(data[i].expected, expected_length, escaped2, sizeof(escaped2)), expected_length); @@ -1237,6 +1300,81 @@ static void test_ct_cpy(const testCtx *const p_ctx) { testFinish(); } +static void test_ct_set_seg_extra_escapes_eci(const testCtx *const p_ctx) { + int debug = p_ctx->debug; + + struct item { + int seg_idx; + int seg_count; + int eci; + struct zint_seg segs[3]; + + struct zint_seg expected_content_segs[3]; + }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ + static const struct item data[] = { + /* 0*/ { 0, 1, 3, { { TU("\\^1A"), 0, 0 } }, { { TU("\035A"), 2, 3 } } }, + /* 1*/ { 0, 1, 0, { { TU("\\^1A"), 0, 0 } }, { { TU("A"), 1, 3 } } }, + /* 2*/ { 0, 1, 4, { { TU("A\\^1"), 0, 0 } }, { { TU("A\035"), 2, 4 } } }, + /* 3*/ { 0, 1, 0, { { TU("A\\^1"), 0, 0 } }, { { TU("A"), 1, 3 } } }, + /* 4*/ { 0, 1, 0, { { TU("a\\^1"), 0, 0 } }, { { TU("a"), 1, 3 } } }, + /* 5*/ { 0, 1, 0, { { TU("12\\^1"), 0, 0 } }, { { TU("12"), 2, 3 } } }, + /* 6*/ { 0, 1, 0, { { TU("?\\^1"), 0, 0 } }, { { TU("?\035"), 2, 3 } } }, + /* 7*/ { 0, 1, 0, { { TU("1A\\^1"), 0, 0 } }, { { TU("1A\035"), 3, 3 } } }, + /* 8*/ { 0, 1, 0, { { TU("\\^1\\^^1A\\^1"), 0, 0 } }, { { TU("\\^1A\035"), 5, 3 } } }, + /* 9*/ { 0, 1, 5, { { TU("\\^1\\^^1A\\^1"), 0, 0 } }, { { TU("\035\\^1A\035"), 6, 5 } } }, + /* 10*/ { 1, 2, 27, { { TU("\\^^A"), 0, 0 }, { TU("\\^1A\\^^1\\^1B\\^"), 0, 0 } }, { { TU("\\^^A"), 0, 0 }, { TU("\035A\\^1\035B\\^"), 9, 27 } } }, + /* 11*/ { 1, 2, 0, { { TU("\\^^A"), 0, 0 }, { TU("\\^1A\\^^1\\^1B\\^"), 0, 0 } }, { { TU("\\^^A"), 0, 0 }, { TU("\035A\\^1\035B\\^"), 9, 3 } } }, + }; + const int data_size = ARRAY_SIZE(data); + int i, ret; + + struct zint_symbol s_symbol = {0}; + struct zint_symbol *symbol = &s_symbol; + + char escaped[4096]; + char escaped2[4096]; + + testStart(p_ctx->func_name); + + symbol->debug = debug; + + for (i = 0; i < data_size; i++) { + int expected_length; + unsigned char *expected_source; + int expected_eci = data[i].eci ? data[i].eci : 3; + int seg_idx = data[i].seg_idx; + + if (testContinue(p_ctx, i)) continue; + + ret = z_ct_cpy_segs(symbol, data[i].segs, data[i].seg_count); + assert_zero(ret, "i:%d z_ct_cpy_segs %d != 0\n", i, ret); + assert_nonnull(symbol->content_segs, "i:%d content_segs NULL\n", i); + + z_ct_set_seg_extra_escapes_eci(symbol, seg_idx, data[i].eci); + assert_nonnull(symbol->content_segs[seg_idx].source, "i:%d content_segs[%d].source NULL\n", i, seg_idx); + + expected_length = data[i].expected_content_segs[seg_idx].length; + expected_source = data[i].expected_content_segs[seg_idx].source; + + assert_equal(symbol->content_segs[seg_idx].length, expected_length, + "i:%d content_segs[%d].length %d != expected_length %d\n", + i, seg_idx, symbol->content_segs[seg_idx].length, expected_length); + assert_zero(memcmp(symbol->content_segs[seg_idx].source, expected_source, expected_length), + "i:%d content_segs[%d].source memcmp(%s, %s, %d) != 0\n", i, seg_idx, + testUtilEscape(ZCCP(symbol->content_segs[seg_idx].source), symbol->content_segs[seg_idx].length, + escaped, sizeof(escaped)), + testUtilEscape(ZCCP(expected_source), expected_length, escaped2, sizeof(escaped2)), + expected_length); + assert_equal(symbol->content_segs[seg_idx].eci, expected_eci, "i:%d content_segs[%d].eci %d != expected_eci %d\n", + i, seg_idx, symbol->content_segs[seg_idx].eci, expected_eci); + + ZBarcode_Clear(symbol); + } + + testFinish(); +} + static void test_ct_cpy_iso8859_1(const testCtx *const p_ctx) { int debug = p_ctx->debug; @@ -1287,7 +1425,7 @@ static void test_ct_cpy_iso8859_1(const testCtx *const p_ctx) { i, symbol->content_segs[0].length, expected_length); assert_zero(memcmp(symbol->content_segs[0].source, data[i].expected, expected_length), "i:%d content_segs[0].source memcmp(%s, %s, %d) != 0\n", i, - testUtilEscape((const char *) symbol->content_segs[0].source, symbol->content_segs[0].length, + testUtilEscape(ZCCP(symbol->content_segs[0].source), symbol->content_segs[0].length, escaped, sizeof(escaped)), testUtilEscape(data[i].expected, expected_length, escaped2, sizeof(escaped2)), expected_length); @@ -1355,7 +1493,7 @@ static void test_ct_printf_256(const testCtx *const p_ctx) { i, symbol->content_segs[0].length, expected_length); assert_zero(memcmp(symbol->content_segs[0].source, data[i].expected, expected_length), "i:%d content_segs[0].source memcmp(%s, %s, %d) != 0\n", i, - testUtilEscape((const char *) symbol->content_segs[0].source, symbol->content_segs[0].length, + testUtilEscape(ZCCP(symbol->content_segs[0].source), symbol->content_segs[0].length, escaped, sizeof(escaped)), testUtilEscape(data[i].expected, expected_length, escaped2, sizeof(escaped2)), expected_length); @@ -1489,12 +1627,14 @@ int main(int argc, char *argv[]) { { "test_cnt_digits", test_cnt_digits }, { "test_is_valid_utf8", test_is_valid_utf8 }, { "test_utf8_to_unicode", test_utf8_to_unicode }, + { "test_extra_escapes", test_extra_escapes }, { "test_hrt_cpy_iso8859_1", test_hrt_cpy_iso8859_1 }, { "test_hrt_cpy_nochk", test_hrt_cpy_nochk }, { "test_hrt_cpy_cat_nochk", test_hrt_cpy_cat_nochk }, { "test_hrt_printf_nochk", test_hrt_printf_nochk }, { "test_hrt_conv_gs1_brackets_nochk", test_hrt_conv_gs1_brackets_nochk }, { "test_ct_cpy_segs", test_ct_cpy_segs }, + { "test_ct_set_seg_extra_escapes_eci", test_ct_set_seg_extra_escapes_eci }, { "test_ct_cpy", test_ct_cpy }, { "test_ct_cpy_iso8859_1", test_ct_cpy_iso8859_1 }, { "test_ct_printf_256", test_ct_printf_256 }, diff --git a/backend/tests/test_dmatrix.c b/backend/tests/test_dmatrix.c index 7c5ebdcd..5abe4ae4 100644 --- a/backend/tests/test_dmatrix.c +++ b/backend/tests/test_dmatrix.c @@ -587,6 +587,7 @@ static void test_options(const testCtx *const p_ctx) { struct item { int symbology; int input_mode; + int eci; int option_1; int option_2; int option_3; @@ -604,119 +605,128 @@ static void test_options(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, 1, "" }, - /* 1*/ { BARCODE_DATAMATRIX, -1, 2, -1, -1, -1, { 0, 0, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 524: Older Data Matrix standards are no longer supported", 0, 1, "" }, - /* 2*/ { BARCODE_DATAMATRIX, -1, -1, 1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, 1, "" }, - /* 3*/ { BARCODE_DATAMATRIX, -1, -1, 2, -1, -1, { 0, 0, "" }, "1", 0, 12, 12, "", 2, 1, "" }, - /* 4*/ { BARCODE_DATAMATRIX, -1, -1, 48, -1, -1, { 0, 0, "" }, "1", 0, 26, 64, "", 48, 1, "" }, - /* 5*/ { BARCODE_DATAMATRIX, -1, -1, 49, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, 0, "Ignored; BWIPP no options set" }, - /* 6*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____", 0, 12, 12, "", 2, 1, "4 data" }, - /* 7*/ { BARCODE_DATAMATRIX, -1, -1, 1, -1, -1, { 0, 0, "" }, "____", ZINT_ERROR_TOO_LONG, -1, -1, "Error 522: Input too long for Version 1, requires 4 codewords (maximum 3)", 1, 1, "" }, - /* 8*/ { BARCODE_DATAMATRIX, -1, -1, 25, -1, -1, { 0, 0, "" }, "____", 0, 8, 18, "", 25, 1, "" }, - /* 9*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "10 data" }, - /* 10*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, - /* 11*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE | DM_ISO_144, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, - /* 12*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE | DM_ISO_144 | DM_B256_START, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, - /* 13*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE | DM_ISO_144 | DM_C40_START, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, - /* 14*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 4, 1, "" }, - /* 15*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE | DM_ISO_144 | DM_B256_START, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 4, 1, "" }, - /* 16*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE | DM_ISO_144 | DM_C40_START, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 4, 1, "" }, - /* 17*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 27, 1, "15 data" }, - /* 18*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 27, 1, "" }, - /* 19*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________", 0, 18, 18, "", 5, 1, "" }, - /* 20*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE | DM_SQUARE, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 27, 1, "DM_DMRE trumps DM_SQUARE" }, - /* 21*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________", 0, 18, 18, "", 5, 1, "18 data" }, - /* 22*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________", 0, 20, 20, "", 6, 1, "19 data" }, - /* 23*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________", 0, 20, 20, "", 6, 1, "21 data" }, - /* 24*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "", 7, 1, "23 data" }, - /* 25*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________", 0, 8, 64, "", 32, 1, "" }, - /* 26*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "", 7, 1, "" }, - /* 27*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "", 29, 1, "31 data" }, - /* 28*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "", 29, 0, "BWIPP DMRE requires dimensions" }, - /* 29*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________", 0, 24, 24, "", 8, 1, "" }, - /* 30*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "", 9, 1, "37 data" }, - /* 31*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________", 0, 8, 96, "", 34, 1, "" }, - /* 32*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "", 9, 1, "" }, - /* 33*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "", 9, 1, "39 data" }, - /* 34*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________", 0, 12, 64, "", 37, 1, "" }, - /* 35*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "", 9, 1, "" }, - /* 36*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "", 9, 1, "43 data" }, - /* 37*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________", 0, 12, 64, "", 37, 1, "" }, - /* 38*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "", 9, 1, "" }, - /* 39*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________", 0, 26, 26, "", 9, 1, "44 data" }, - /* 40*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "", 30, 1, "45 data" }, - /* 41*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "", 30, 0, "BWIPP DMRE requires dimensions" }, - /* 42*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________________", 0, 32, 32, "", 10, 1, "" }, - /* 43*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "", 30, 1, "49 data" }, - /* 44*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "", 30, 0, "BWIPP DMRE requires dimensions" }, - /* 45*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________", 0, 32, 32, "", 10, 1, "" }, - /* 46*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 10, 1, "50 data" }, - /* 47*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________", 0, 20, 44, "", 41, 1, "" }, - /* 48*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 10, 1, "" }, - /* 49*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "51 data; BWIPP different encodation" }, - /* 50*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 20, 44, "", 41, 0, "BWIPP DMRE requires dimensions" }, - /* 51*/ { BARCODE_DATAMATRIX, -1, -1, -1, 9999, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "Ignored; BWIPP different encodation" }, - /* 52*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________________________", 0, 32, 32, "", 10, 1, "61 data" }, - /* 53*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________", 0, 32, 32, "", 10, 1, "62 data" }, - /* 54*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "", 11, 1, "63 data" }, - /* 55*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 8, 144, "", 36, 1, "" }, - /* 56*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "", 11, 1, "" }, - /* 57*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "", 11, 1, "64 data" }, - /* 58*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 12, 88, "", 38, 1, "" }, - /* 59*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, - /* 60*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "", 11, 1, "65 data" }, - /* 61*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 26, 40, "", 46, 1, "" }, - /* 62*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, - /* 63*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "", 11, 1, "70 data" }, - /* 64*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 26, 40, "", 46, 1, "" }, - /* 65*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, - /* 66*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "", 11, 1, "71 data" }, - /* 67*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 22, 48, "", 43, 1, "" }, - /* 68*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, - /* 69*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "", 11, 1, "80 data" }, - /* 70*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 24, 48, "", 44, 1, "" }, - /* 71*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, - /* 72*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "", 11, 1, "84 data" }, - /* 73*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 20, 64, "", 42, 1, "" }, - /* 74*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, - /* 75*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "90 data" }, - /* 76*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 26, 48, "", 47, 1, "" }, - /* 77*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "" }, - /* 78*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "91 data" }, - /* 79*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 24, 64, "", 45, 1, "" }, - /* 80*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "" }, - /* 81*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "", 13, 1, "118 data" }, - /* 82*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 26, 64, "", 48, 1, "118 data" }, - /* 83*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "", 13, 1, "118 data" }, - /* 84*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[90]12", 0, 10, 10, "", 1, 1, "" }, - /* 85*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(90)12", 0, 10, 10, "", 1, 1, "" }, - /* 86*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[90](", 0, 10, 10, "", 1, 1, "" }, - /* 87*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(90)(", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 253: Malformed AI in input (brackets don't match)", 0, 1, "" }, - /* 88*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(90)\\(", 0, 10, 10, "", 1, 1, "" }, /* Escaped parens now work without ESCAPE_MODE */ - /* 89*/ { BARCODE_DATAMATRIX, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(90)\\(", 0, 10, 10, "", 1, 1, "" }, - /* 90*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 2, "" }, "1", 0, 12, 12, "", 2, 1, "" }, - /* 91*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 16, 16, "" }, "1", 0, 12, 12, "", 2, 1, "" }, - /* 92*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 1, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '1' out of range (2 to 16)", 0, 1, "" }, - /* 93*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 17, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '17' out of range (2 to 16)", 0, 1, "" }, - /* 94*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '0' out of range (1 to count 16)", 0, 1, "" }, - /* 95*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 17, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '17' out of range (1 to count 16)", 0, 1, "" }, - /* 96*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "1", 0, 12, 12, "", 2, 1, "" }, - /* 97*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "A" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 723: Invalid Structured Append ID (digits only)", 0, 1, "" }, - /* 98*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "0" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '000' and ID2 '000' out of range (001 to 254) (ID \"000000\")", 0, 1, "" }, - /* 99*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '000' out of range (001 to 254) (ID \"000001\")", 0, 1, "" }, - /*100*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1000" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '000' out of range (001 to 254) (ID \"001000\")", 0, 1, "" }, - /*101*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "001255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '255' out of range (001 to 254) (ID \"001255\")", 0, 1, "" }, - /*102*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "255001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '255' out of range (001 to 254) (ID \"255001\")", 0, 1, "" }, - /*103*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "255255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '255' and ID2 '255' out of range (001 to 254) (ID \"255255\")", 0, 1, "" }, - /*104*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1234567" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 722: Structured Append ID length 7 too long (6 digit maximum)", 0, 1, "" }, - /*105*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, READER_INIT, { 2, 3, "1001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 727: Cannot have Structured Append and Reader Initialisation at the same time", 0, 1, "" }, - /*106*/ { BARCODE_DATAMATRIX, ESCAPE_MODE, -1, -1, -1, -1, { 2, 3, "1001" }, "[)>\\R05\\GA\\R\\E", 0, 12, 26, "", 27, 1, "Macro05/06 ignored if have Structured Append TODO: error/warning " }, - /*107*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234,67", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 5 in input (alphanumerics, space and \"-.$/+%\" only)", 0, 1, "" }, - /*108*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, - /*109*/ { BARCODE_HIBC_DM, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, - /*110*/ { BARCODE_HIBC_DM, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 18, 18, "", 5, 1, "" }, - /*111*/ { BARCODE_HIBC_DM, -1, 0, -1, DM_B256_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 20, 20, "", 6, 0, "BWIPP: same as above" }, - /*112*/ { BARCODE_HIBC_DM, -1, 0, -1, DM_C40_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, + /* 0*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, 1, "" }, + /* 1*/ { BARCODE_DATAMATRIX, -1, -1, 2, -1, -1, -1, { 0, 0, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 524: Older Data Matrix standards are no longer supported", 0, 1, "" }, + /* 2*/ { BARCODE_DATAMATRIX, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, 1, "" }, + /* 3*/ { BARCODE_DATAMATRIX, -1, -1, -1, 2, -1, -1, { 0, 0, "" }, "1", 0, 12, 12, "", 2, 1, "" }, + /* 4*/ { BARCODE_DATAMATRIX, -1, -1, -1, 48, -1, -1, { 0, 0, "" }, "1", 0, 26, 64, "", 48, 1, "" }, + /* 5*/ { BARCODE_DATAMATRIX, -1, -1, -1, 49, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, 0, "Ignored; BWIPP no options set" }, + /* 6*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "____", 0, 12, 12, "", 2, 1, "4 data" }, + /* 7*/ { BARCODE_DATAMATRIX, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "____", ZINT_ERROR_TOO_LONG, -1, -1, "Error 522: Input too long for Version 1, requires 4 codewords (maximum 3)", 1, 1, "" }, + /* 8*/ { BARCODE_DATAMATRIX, -1, -1, -1, 25, -1, -1, { 0, 0, "" }, "____", 0, 8, 18, "", 25, 1, "" }, + /* 9*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "10 data" }, + /* 10*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, + /* 11*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE | DM_ISO_144, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, + /* 12*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE | DM_ISO_144 | DM_B256_START, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, + /* 13*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE | DM_ISO_144 | DM_C40_START, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 26, 1, "" }, + /* 14*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 4, 1, "" }, + /* 15*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE | DM_ISO_144 | DM_B256_START, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 4, 1, "" }, + /* 16*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE | DM_ISO_144 | DM_C40_START, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 4, 1, "" }, + /* 17*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 27, 1, "15 data" }, + /* 18*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 27, 1, "" }, + /* 19*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________", 0, 18, 18, "", 5, 1, "" }, + /* 20*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE | DM_SQUARE, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 27, 1, "DM_DMRE trumps DM_SQUARE" }, + /* 21*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________", 0, 18, 18, "", 5, 1, "18 data" }, + /* 22*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________", 0, 20, 20, "", 6, 1, "19 data" }, + /* 23*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________", 0, 20, 20, "", 6, 1, "21 data" }, + /* 24*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "", 7, 1, "23 data" }, + /* 25*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________", 0, 8, 64, "", 32, 1, "" }, + /* 26*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "", 7, 1, "" }, + /* 27*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "", 29, 1, "31 data" }, + /* 28*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "", 29, 0, "BWIPP DMRE requires dimensions" }, + /* 29*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________", 0, 24, 24, "", 8, 1, "" }, + /* 30*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "", 9, 1, "37 data" }, + /* 31*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________", 0, 8, 96, "", 34, 1, "" }, + /* 32*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "", 9, 1, "" }, + /* 33*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "", 9, 1, "39 data" }, + /* 34*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________", 0, 12, 64, "", 37, 1, "" }, + /* 35*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "", 9, 1, "" }, + /* 36*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "", 9, 1, "43 data" }, + /* 37*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________", 0, 12, 64, "", 37, 1, "" }, + /* 38*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "", 9, 1, "" }, + /* 39*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________", 0, 26, 26, "", 9, 1, "44 data" }, + /* 40*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "", 30, 1, "45 data" }, + /* 41*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "", 30, 0, "BWIPP DMRE requires dimensions" }, + /* 42*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________________", 0, 32, 32, "", 10, 1, "" }, + /* 43*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "", 30, 1, "49 data" }, + /* 44*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "", 30, 0, "BWIPP DMRE requires dimensions" }, + /* 45*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________", 0, 32, 32, "", 10, 1, "" }, + /* 46*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 10, 1, "50 data" }, + /* 47*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________", 0, 20, 44, "", 41, 1, "" }, + /* 48*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 10, 1, "" }, + /* 49*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "51 data; BWIPP different encodation" }, + /* 50*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 20, 44, "", 41, 0, "BWIPP DMRE requires dimensions" }, + /* 51*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, 9999, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "Ignored; BWIPP different encodation" }, + /* 52*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________________________", 0, 32, 32, "", 10, 1, "61 data" }, + /* 53*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________", 0, 32, 32, "", 10, 1, "62 data" }, + /* 54*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "", 11, 1, "63 data" }, + /* 55*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 8, 144, "", 36, 1, "" }, + /* 56*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "", 11, 1, "" }, + /* 57*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "", 11, 1, "64 data" }, + /* 58*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 12, 88, "", 38, 1, "" }, + /* 59*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, + /* 60*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "", 11, 1, "65 data" }, + /* 61*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 26, 40, "", 46, 1, "" }, + /* 62*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, + /* 63*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "", 11, 1, "70 data" }, + /* 64*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 26, 40, "", 46, 1, "" }, + /* 65*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, + /* 66*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "", 11, 1, "71 data" }, + /* 67*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 22, 48, "", 43, 1, "" }, + /* 68*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, + /* 69*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "", 11, 1, "80 data" }, + /* 70*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 24, 48, "", 44, 1, "" }, + /* 71*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, + /* 72*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "", 11, 1, "84 data" }, + /* 73*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 20, 64, "", 42, 1, "" }, + /* 74*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "", 11, 1, "" }, + /* 75*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "90 data" }, + /* 76*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 26, 48, "", 47, 1, "" }, + /* 77*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "" }, + /* 78*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "91 data" }, + /* 79*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 24, 64, "", 45, 1, "" }, + /* 80*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "", 12, 1, "" }, + /* 81*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "", 13, 1, "118 data" }, + /* 82*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 26, 64, "", 48, 1, "118 data" }, + /* 83*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "", 13, 1, "118 data" }, + /* 84*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[90]12", 0, 10, 10, "", 1, 1, "" }, + /* 85*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(90)12", 0, 10, 10, "", 1, 1, "" }, + /* 86*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[90](", 0, 10, 10, "", 1, 1, "" }, + /* 87*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(90)(", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 253: Malformed AI in input (brackets don't match)", 0, 1, "" }, + /* 88*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(90)\\(", 0, 10, 10, "", 1, 1, "" }, /* Escaped parens now work without ESCAPE_MODE */ + /* 89*/ { BARCODE_DATAMATRIX, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(90)\\(", 0, 10, 10, "", 1, 1, "" }, + /* 90*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A", 0, 10, 10, "", 1, 1, "" }, + /* 91*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^^1\\^1", 0, 12, 12, "", 2, 1, "" }, + /* 92*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^^\\^", 0, 12, 12, "", 2, 1, "" }, + /* 93*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^^\\^2", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 717: Unrecognized extra escape \"\\^2\"", 0, 1, "" }, + /* 94*/ { BARCODE_DATAMATRIX, GS1_MODE | EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[90]12", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 844: Cannot use extra escape mode in GS1 mode", 0, 1, "" }, + /* 95*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 9, -1, -1, -1, -1, { 0, 0, "" }, "α\\^1ÎČ", 0, 14, 14, "", 3, 1, "ECI ISO/IEC 8859-7 Greek" }, + /* 96*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, -1, -1, -1, -1, { 0, 0, "" }, "あ\\^1ば", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, 1, "ECI Shift JIS" }, + /* 97*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 899, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1B", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, 1, "ECI 8-bit binary" }, + /* 98*/ { BARCODE_HIBC_DM, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 843: Can only use extra escape mode with non-variant Data Matrix", 0, 1, "" }, + /* 99*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 2, "" }, "1", 0, 12, 12, "", 2, 1, "" }, + /*100*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 16, 16, "" }, "1", 0, 12, 12, "", 2, 1, "" }, + /*101*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 1, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '1' out of range (2 to 16)", 0, 1, "" }, + /*102*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 17, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '17' out of range (2 to 16)", 0, 1, "" }, + /*103*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '0' out of range (1 to count 16)", 0, 1, "" }, + /*104*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 17, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '17' out of range (1 to count 16)", 0, 1, "" }, + /*105*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "1", 0, 12, 12, "", 2, 1, "" }, + /*106*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "A" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 723: Invalid Structured Append ID (digits only)", 0, 1, "" }, + /*107*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "0" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '000' and ID2 '000' out of range (001 to 254) (ID \"000000\")", 0, 1, "" }, + /*108*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '000' out of range (001 to 254) (ID \"000001\")", 0, 1, "" }, + /*109*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1000" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '000' out of range (001 to 254) (ID \"001000\")", 0, 1, "" }, + /*110*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "001255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '255' out of range (001 to 254) (ID \"001255\")", 0, 1, "" }, + /*111*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "255001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '255' out of range (001 to 254) (ID \"255001\")", 0, 1, "" }, + /*112*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "255255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '255' and ID2 '255' out of range (001 to 254) (ID \"255255\")", 0, 1, "" }, + /*113*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1234567" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 722: Structured Append ID length 7 too long (6 digit maximum)", 0, 1, "" }, + /*114*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, READER_INIT, { 2, 3, "1001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 727: Cannot have Structured Append and Reader Initialisation at the same time", 0, 1, "" }, + /*115*/ { BARCODE_DATAMATRIX, ESCAPE_MODE, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "[)>\\R05\\GA\\R\\E", 0, 12, 26, "", 27, 1, "Macro05/06 ignored if have Structured Append TODO: error/warning " }, + /*116*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234,67", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 5 in input (alphanumerics, space and \"-.$/+%\" only)", 0, 1, "" }, + /*117*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, + /*118*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, + /*119*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 18, 18, "", 5, 1, "" }, + /*120*/ { BARCODE_HIBC_DM, -1, -1, 0, -1, DM_B256_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 20, 20, "", 6, 0, "BWIPP: same as above" }, + /*121*/ { BARCODE_HIBC_DM, -1, -1, 0, -1, DM_C40_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -740,7 +750,7 @@ static void test_options(const testCtx *const p_ctx) { assert_nonnull(symbol, "Symbol not created\n"); debug &= ~ZINT_DEBUG_TEST; /* Want real errtxt */ - length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, + length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, data[i].option_1, data[i].option_2, data[i].option_3, data[i].output_options, data[i].data, -1, debug); if (data[i].structapp.count) { @@ -765,10 +775,11 @@ static void test_options(const testCtx *const p_ctx) { } } else { char modules_dump[144 * 144 + 1]; + int parsefnc = (data[i].input_mode & EXTRA_ESCAPE_MODE) && strchr(data[i].data, '^') != NULL; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); ret = testUtilBwipp(i, symbol, data[i].option_1, data[i].option_2, data[i].option_3, data[i].data, - length, NULL, cmp_buf, sizeof(cmp_buf), NULL); + length, NULL, cmp_buf, sizeof(cmp_buf), &parsefnc); assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); @@ -782,8 +793,8 @@ static void test_options(const testCtx *const p_ctx) { char modules_dump[144 * 144 + 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, 1 /*zxingcpp_cmp*/, cmp_buf, - sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, + data[i].eci > 0 ? data[i].eci : 1 /*zxingcpp_cmp*/, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); @@ -846,6 +857,7 @@ static void test_reader_init(const testCtx *const p_ctx) { const char *expected; const char *comment; }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { /* 0*/ { BARCODE_DATAMATRIX, UNICODE_MODE, READER_INIT, "A", 0, 10, 10, "EA 42 81 19 A4 53 21 DF", "" }, /* 1*/ { BARCODE_DATAMATRIX, GS1_MODE, READER_INIT, "[91]A", ZINT_ERROR_INVALID_OPTION, 0, 0, "Error 521: Cannot use Reader Initialisation in GS1 mode", "" }, @@ -933,10 +945,12 @@ static void test_reader_init(const testCtx *const p_ctx) { testFinish(); } +#if 1 #define ZINT_TEST_ENCODING +#endif #ifdef ZINT_TEST_ENCODING -INTERNAL int zint_test_dm_encode(struct zint_symbol *symbol, const unsigned char source[], const int length, - const int eci, const int last_seg, const int gs1, const int b256_end, const int c40_end, +INTERNAL int zint_test_dm_encode(struct zint_symbol *symbol, const unsigned char source[], int length, + const int eci, const int last_seg, const char *fncs, const int b256_end, const int c40_end, unsigned char target[], int *p_tp); #endif @@ -964,6 +978,7 @@ static void test_input(const testCtx *const p_ctx) { int expected_diff; /* Difference between default minimal encodation and ISO encodation (FAST_MODE) */ }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { /* 0*/ { UNICODE_MODE | FAST_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "0466010592130100000k*AGUATY80", 0, 0, 18, 18, 1, 1, "(32) 86 C4 83 87 DE 8F 83 82 82 31 6C EE 08 85 D6 D2 EF 65 93 B0 1C 3C 76 FB D4 AB 16 11", "#208", 0 }, /* 1*/ { UNICODE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "0466010592130100000k*AGUATY80", 0, 0, 18, 18, 1, 1, "(32) 86 C4 83 87 DE 8F 83 82 82 31 6C EE 08 85 D6 D2 EF 65 93 B0 1C 3C 76 FB D4 AB 16 11", "#208", 0 }, @@ -1249,6 +1264,15 @@ static void test_input(const testCtx *const p_ctx) { /*281*/ { UNICODE_MODE | FAST_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A*B>C 1A*B>C 1*\013B>C 1A*B>C 1A*", 0, 0, 22, 22, 1, 1, "(50) EE 57 B8 0F 04 21 72 5E 21 13 8A FE 0C EE 5E 21 13 97 08 9B 64 7E FE 42 2B 81 68 FE", "process_p 0", 1 }, /*282*/ { GS1_MODE, 0, -1, -1, -1, -1, { 1, 2, "" }, "[20]01", 0, 0, 14, 14, 1, 1, "E9 0F 01 01 E8 96 83 81 DE 06 E8 61 E2 B5 19 CE A3 F8", "", 0 }, /*283*/ { GS1_MODE, 3, -1, -1, -1, -1, { 1, 2, "123234" }, "[20]01", 0, 3, 8, 32, 1, 1, "E9 0F 7B EA E8 F1 04 96 83 81 47 4D F5 6F E8 62 DA 1C 06 7F 03", "", 0 }, + /*284*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1B", 0, 0, 10, 10, 1, 1, "42 E8 43 E5 E2 F8 F5 E5", "", 1 }, + /*285*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "a\\^1B", 0, 0, 10, 10, 1, 1, "62 E8 43 52 07 83 91 CF", "", 1 }, + /*286*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "9\\^1A", 0, 0, 10, 10, 1, 1, "3A E8 42 12 19 12 42 F6", "", 1 }, + /*287*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "99\\^1A", 0, 0, 10, 10, 1, 1, "E5 E8 42 B0 7D B7 7B 6F", "", 1 }, + /*288*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "?\\^1A", 0, 0, 10, 10, 1, 1, "40 E8 42 E7 07 1A 88 26", "", 1 }, + /*289*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 1, 2, "" }, "A\\^1B", 0, 0, 14, 14, 1, 1, "E9 0F 01 01 42 E8 43 81 F4 7B DC 13 EA 49 14 75 EA 25", "", 1 }, + /*290*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^1\\^1", 0, 0, 10, 10, 1, 1, "E8 E8 E8 88 6E 8B A4 5E", "", 1 }, + /*291*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEF\\^1GHIJK\\^1LM\\^1", 0, 0, 12, 26, 1, 1, "E6 59 E9 6D 24 0A 8D 86 C8 96 44 FE 4D 4E E8 81 33 8F 19 0F D7 59 96 B4 D8 43 49 D7 F3 B6", "BWIPP: different encodation", 0 }, + /*292*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEF\\^1GHIJK\\^1LM\\^1", 0, 0, 12, 26, 0, 1, "E6 59 E9 6D 24 0A 8D 86 C8 FE 4C E8 4D 4E E8 81 49 98 C6 DD DA A6 89 B1 83 08 56 71 C1 51", "BWIPP: same as FAST_MODE", 0 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -1342,8 +1366,8 @@ static void test_input(const testCtx *const p_ctx) { ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*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); + i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, + ret_len, escaped); } } @@ -1356,6 +1380,7 @@ static void test_input(const testCtx *const p_ctx) { && data[i].output_options == data[i - 1].output_options && strcmp(data[i].data, data[i - 1].data) == 0) { unsigned char binary[2][2200] ZINT_TESTUTIL_SANITIZEM_INIT_2D; + char *fncs = (char *) z_alloca(length); int gs1; int binlen; int binlens[2] = {0}; @@ -1381,7 +1406,8 @@ static void test_input(const testCtx *const p_ctx) { symbol->option_2 = data[i].option_2 != -1 ? data[i].option_2 : 0; /* Restore option_2 */ gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1; - ret = zint_test_dm_encode(symbol, text, length, symbol->eci, last_seg, gs1, + memset(fncs, gs1 == 1, length); + ret = zint_test_dm_encode(symbol, text, length, symbol->eci, last_seg, fncs, 0 /*b256_end*/, 0 /*c40_end*/, binary[0], &binlen); assert_zero(ret, "i:%d dm_encode() FAST_MODE ret %d != 0 (%s)\n", i, ret, symbol->errtxt); @@ -1391,8 +1417,9 @@ static void test_input(const testCtx *const p_ctx) { symbol->input_mode = data[i].input_mode; gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1; + memset(fncs, gs1 == 1, length); symbol->option_2 = data[i].option_2 != -1 ? data[i].option_2 : 0; /* Restore option_2 */ - ret = zint_test_dm_encode(symbol, text, length, symbol->eci, last_seg, gs1, + ret = zint_test_dm_encode(symbol, text, length, symbol->eci, last_seg, fncs, 0 /*b256_end*/, 0 /*c40_end*/, binary[1], &binlen); assert_zero(ret, "i:%d dm_encode() minimal ret %d != 0 (%s)\n", i, ret, symbol->errtxt); @@ -1441,6 +1468,7 @@ static void test_encode(const testCtx *const p_ctx) { /* Verified manually against ISO/IEC 16022:2006, ISO/IEC 21471:2020, GS1 General Specifications 21.0.1 (GGS), ANSI/HIBC LIC 2.6-2016 (HIBC/LIC), ANSI/HIBC PAS 1.3-2010 (HIBC/PAS) and AIM ITS/04-023:2022 (ECI Part 3: Register), with noted exceptions */ + /* s/\v(\/\*)[ 0-9]*(\*\/)/\=printf("%s%3d%s", submatch(1), (@z+setreg('z',@z+1)), submatch(2))/ | let @z=0: */ static const struct item data[] = { /* 0*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "1234abcd", -1, 0, 14, 14, 1, 1, "", 0, "10101010101010" @@ -2898,7 +2926,21 @@ static void test_encode(const testCtx *const p_ctx) { "11100101010110100111011000" "11111111111111111111111111" }, - /* 71*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 3, -1, -1, -1, "C:\\DOCS\\EXAMPLE.TXT", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 3 Example 3", 0, + /* 71*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 3, -1, -1, -1, "price:ÂŁ20.00", -1, 0, 12, 26, 1, 1, "AIM ITS/04-023:2022 ECI 3 Example 2", 0, + "10101010101010101010101010" + "10000111010111000110110001" + "10000101101010010011011000" + "11001010011000000101110111" + "10010101000100111011110110" + "11100111000100111100000001" + "11100101111110001101011100" + "10000011101101110011110011" + "11011100101111100110010110" + "10101101100110000001001011" + "11100101010110100111011000" + "11111111111111111111111111" + }, + /* 72*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 3, -1, -1, -1, "C:\\DOCS\\EXAMPLE.TXT", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 3 Example 3", 0, "101010101010101010" "100000001010011011" "100010111000011100" @@ -2918,7 +2960,29 @@ static void test_encode(const testCtx *const p_ctx) { "100110001010000100" "111111111111111111" }, - /* 72*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 4, -1, -1, -1, "Ć tudentska ĆĄt. 2198390", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 4 Example 1; BWIPP same as FAST_MODE", 0, + /* 73*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 4, -1, -1, -1, "Ć tudentska ĆĄt. 2198390", -1, 0, 20, 20, 1, 1, "AIM ITS/04-023:2022 ECI 4 Example 1 **NOT SAME** see non-FAST_MODE below", 0, + "10101010101010101010" + "10011100111101101111" + "10001101011111010110" + "11011100101011101001" + "10000100100011000100" + "11110011111010010001" + "11111011001111001000" + "10111001100101100101" + "11101010001101110100" + "10001101000100111011" + "11011111100001011100" + "11001001000110100101" + "11101001001110111000" + "11101110001101101111" + "10001000000110001100" + "11000001000111000101" + "10100010100001101100" + "11100111110101100101" + "11010000011110011010" + "11111111111111111111" + }, + /* 74*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 4, -1, -1, -1, "Ć tudentska ĆĄt. 2198390", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 4 Example 1, same; BWIPP same as FAST_MODE", 0, "10101010101010101010" "10001110100110101111" "10001101000001010110" @@ -2940,7 +3004,41 @@ static void test_encode(const testCtx *const p_ctx) { "11010000001001011010" "11111111111111111111" }, - /* 73*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 4, -1, 10, -1, "SzczegóƂowe dane kontaktowe:+48 22 694 60 00", -1, 0, 32, 32, 0, 1, "AIM ITS/04-023:2022 ECI 4 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, + /* 75*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 4, -1, 10, -1, "SzczegóƂowe dane kontaktowe:+48 22 694 60 00", -1, 0, 32, 32, 0, 1, "AIM ITS/04-023:2022 ECI 4 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, + "10101010101010101010101010101010" + "10011100101001011010100101001111" + "10001011100001001100000110000000" + "11011000010101111010000101000101" + "10010001101101101110001011011110" + "11101010000010011100010000100101" + "10010000000111001001011010011110" + "10111111010111111010001100101111" + "11100110110100101110111100110110" + "10100001100100111111110000000001" + "10001010111010101101001011011100" + "11111011101100011011011100011011" + "11111011100000101001011111000000" + "11110010110101011111101100100011" + "10111011100011101110011111110010" + "11111111111111111111111111111111" + "10101010101010101010101010101010" + "11111101100000011011101110111011" + "11101000111100001011100001101110" + "11101011110010011011000100010101" + "11001111000100101000011101110010" + "10110101101110111011011011110101" + "10011001101111001001011100011100" + "11101010111000011111101001111011" + "10011011110011101010010000101100" + "10011101001000111010000000010011" + "11100011010001001110000100110000" + "10011001101000011110111100011101" + "11100101011100001011111110011000" + "10000011100111111010011001010101" + "11001011010011101110001100100000" + "11111111111111111111111111111111" + }, + /* 76*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 4, -1, 10, -1, "SzczegóƂowe dane kontaktowe:+48 22 694 60 00", -1, 0, 32, 32, 0, 1, "AIM ITS/04-023:2022 ECI 4 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, "10101010101010101010101010101010" "10010010111100111011110110001111" "10001111110010101000001000100000" @@ -2974,7 +3072,7 @@ static void test_encode(const testCtx *const p_ctx) { "11001100101101101010010101100000" "11111111111111111111111111111111" }, - /* 74*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 5, -1, -1, DM_SQUARE, "LiÄ„tenƝtejno", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 5 Example 1; BWIPP different encodation", 0, + /* 77*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 5, -1, -1, DM_SQUARE, "LiÄ„tenƝtejno", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 5 Example 1; BWIPP different encodation", 0, "101010101010101010" "100101101010111011" "100011010100011110" @@ -2994,7 +3092,7 @@ static void test_encode(const testCtx *const p_ctx) { "110001011101010110" "111111111111111111" }, - /* 75*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 6, -1, -1, DM_SQUARE, "Lietuvą", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 6 Example 1", 0, + /* 78*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 6, -1, -1, DM_SQUARE, "Lietuvą", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 6 Example 1", 0, "1010101010101010" "1001011011110111" "1000010100001110" @@ -3012,7 +3110,7 @@ static void test_encode(const testCtx *const p_ctx) { "1100100101110010" "1111111111111111" }, - /* 76*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 7, -1, -1, DM_SQUARE, "Đ ĐŸŃŃĐžŃ", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 7 Example 1", 0, + /* 79*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 7, -1, -1, DM_SQUARE, "Đ ĐŸŃŃĐžŃ", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 7 Example 1", 0, "1010101010101010" "1001110110001111" "1001101010110100" @@ -3030,7 +3128,7 @@ static void test_encode(const testCtx *const p_ctx) { "1010110001000010" "1111111111111111" }, - /* 77*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 7, -1, -1, DM_SQUARE, "ĐœĐŸĐœĐłĐŸĐ»ŃƒĐ»Ń", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 7 Example 2", 0, + /* 80*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 7, -1, -1, DM_SQUARE, "ĐœĐŸĐœĐłĐŸĐ»ŃƒĐ»Ń", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 7 Example 2", 0, "101010101010101010" "100111100010010101" "100110000111111110" @@ -3050,7 +3148,7 @@ static void test_encode(const testCtx *const p_ctx) { "110100011110000100" "111111111111111111" }, - /* 78*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 8, -1, -1, DM_SQUARE, "ŰŹÙˆŰ§ŰČ Ű§Ù„ŰłÙŰ±", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 8 Example 1", 0, + /* 81*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 8, -1, -1, DM_SQUARE, "ŰŹÙˆŰ§ŰČ Ű§Ù„ŰłÙŰ±", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 8 Example 1", 0, "101010101010101010" "100111100010000001" "100110001111110010" @@ -3070,7 +3168,7 @@ static void test_encode(const testCtx *const p_ctx) { "101100011100001010" "111111111111111111" }, - /* 79*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 8, -1, -1, -1, "Ű§Ù„Ù…Ù†ŰŽŰŁ: Ű§Ù„Ù…Ù…Ù„ÙƒŰ© Ű§Ù„ŰčŰ±ŰšÙŠŰ© Ű§Ù„ŰłŰčÙˆŰŻÙŠŰ©", -1, 0, 24, 24, 1, 1, "AIM ITS/04-023:2022 ECI 8 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + /* 82*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 8, -1, -1, -1, "Ű§Ù„Ù…Ù†ŰŽŰŁ: Ű§Ù„Ù…Ù…Ù„ÙƒŰ© Ű§Ù„ŰčŰ±ŰšÙŠŰ© Ű§Ù„ŰłŰčÙˆŰŻÙŠŰ©", -1, 0, 24, 24, 1, 1, "AIM ITS/04-023:2022 ECI 8 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, "101010101010101010101010" "100111010010111011001011" "100110111100000010010000" @@ -3096,7 +3194,7 @@ static void test_encode(const testCtx *const p_ctx) { "100111000101101010110010" "111111111111111111111111" }, - /* 80*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 9, -1, -1, DM_SQUARE, "ÎœÎ­ÏÎżÏ‚ #. α123", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 9 Example 1", 0, + /* 83*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 9, -1, -1, DM_SQUARE, "ÎœÎ­ÏÎżÏ‚ #. α123", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 9 Example 1", 0, "101010101010101010" "100111100100000011" "100110001111001100" @@ -3116,7 +3214,7 @@ static void test_encode(const testCtx *const p_ctx) { "111100011110101000" "111111111111111111" }, - /* 81*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 10, -1, -1, -1, "Ś“ŚšŚ›Ś•ŚŸ", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 10 Example 1", 0, + /* 84*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 10, -1, -1, -1, "Ś“ŚšŚ›Ś•ŚŸ", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 10 Example 1", 0, "10101010101010101010101010101010" "10011101110010011001011101110101" "10011110001001001011101011110100" @@ -3126,7 +3224,7 @@ static void test_encode(const testCtx *const p_ctx) { "11010100010001101010000011101010" "11111111111111111111111111111111" }, - /* 82*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 10, -1, -1, -1, "ŚžŚĄŚ€Śš Ś—ŚœŚ§: A20200715001", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + /* 85*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 10, -1, -1, -1, "ŚžŚĄŚ€Śš Ś—ŚœŚ§: A20200715001", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, "10101010101010101010" "10011110011111000111" "10011101101010101110" @@ -3148,7 +3246,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000111100100101010" "11111111111111111111" }, - /* 83*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 10, -1, -1, -1, "ŚžŚĄŚ€Śš Ś—ŚœŚ§: A20200715001", -1, 0, 20, 20, 1, 1, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** different encodation", 0, + /* 86*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 10, -1, -1, -1, "ŚžŚĄŚ€Śš Ś—ŚœŚ§: A20200715001", -1, 0, 20, 20, 1, 1, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** different encodation", 0, "10101010101010101010" "10011101100001000111" "10011111111110010110" @@ -3170,7 +3268,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000111010001111010" "11111111111111111111" }, - /* 84*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 11, -1, -1, -1, "Amerika Birleßik Devletleri", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 11 Example 1 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + /* 87*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 11, -1, -1, -1, "Amerika Birleßik Devletleri", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 11 Example 1 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, "1010101010101010101010" "1000101011001011000001" "1001111101111001101100" @@ -3194,7 +3292,7 @@ static void test_encode(const testCtx *const p_ctx) { "1110010000010000011110" "1111111111111111111111" }, - /* 85*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 11, -1, -1, -1, "Amerika Birleßik Devletleri", -1, 0, 22, 22, 1, 1, "AIM ITS/04-023:2022 ECI 11 Example 1 **NOT SAME** different encodation", 0, + /* 88*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 11, -1, -1, -1, "Amerika Birleßik Devletleri", -1, 0, 22, 22, 1, 1, "AIM ITS/04-023:2022 ECI 11 Example 1 **NOT SAME** different encodation", 0, "1010101010101010101010" "1001110011001011001001" "1001111001111001110100" @@ -3218,7 +3316,7 @@ static void test_encode(const testCtx *const p_ctx) { "1110111101000010011110" "1111111111111111111111" }, - /* 86*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 11, -1, -1, -1, "Biniß kartı #120921039", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 11 Example 2; BWIPP different encodation", 0, + /* 89*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 11, -1, -1, -1, "Biniß kartı #120921039", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 11 Example 2; BWIPP different encodation", 0, "10101010101010101010" "10001110101011111111" "10010101011000110110" @@ -3240,7 +3338,7 @@ static void test_encode(const testCtx *const p_ctx) { "10000100110101011010" "11111111111111111111" }, - /* 87*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 12, -1, -1, -1, "KĆ«rybiĆĄkumą", -1, 0, 12, 26, 0, 1, "AIM ITS/04-023:2022 ECI 12 Example 1 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + /* 90*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 12, -1, -1, -1, "KĆ«rybiĆĄkumą", -1, 0, 12, 26, 0, 1, "AIM ITS/04-023:2022 ECI 12 Example 1 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, "10101010101010101010101010" "10010010000111001101100011" "10011111110110110110111000" @@ -3254,7 +3352,7 @@ static void test_encode(const testCtx *const p_ctx) { "10011101110100000011000100" "11111111111111111111111111" }, - /* 88*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 12, -1, -1, -1, "KĆ«rybiĆĄkumą", -1, 0, 12, 26, 1, 1, "AIM ITS/04-023:2022 ECI 12 Example 1 **NOT SAME** different encodation", 0, + /* 91*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 12, -1, -1, -1, "KĆ«rybiĆĄkumą", -1, 0, 12, 26, 1, 1, "AIM ITS/04-023:2022 ECI 12 Example 1 **NOT SAME** different encodation", 0, "10101010101010101010101010" "10011110000111001010011111" "10010001010110110011110000" @@ -3268,7 +3366,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000101010100110000011010" "11111111111111111111111111" }, - /* 89*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 13, -1, -1, -1, "àžšàžČàžŁàč‹àčàž„àčˆàž”", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 13 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + /* 92*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 13, -1, -1, -1, "àžšàžČàžŁàč‹àčàž„àčˆàž”", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 13 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, "1010101010101010" "1001110100011001" "1001101111101000" @@ -3286,7 +3384,7 @@ static void test_encode(const testCtx *const p_ctx) { "1001010001001010" "1111111111111111" }, - /* 90*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 15, -1, -1, -1, "uzƆēmums", -1, 0, 16, 16, 0, 1, "AIM ITS/04-023:2022 ECI 15 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + /* 93*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 15, -1, -1, -1, "uzƆēmums", -1, 0, 16, 16, 0, 1, "AIM ITS/04-023:2022 ECI 15 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, "1010101010101010" "1001101111101001" "1010110111010100" @@ -3304,7 +3402,7 @@ static void test_encode(const testCtx *const p_ctx) { "1110011001011010" "1111111111111111" }, - /* 91*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 16, -1, -1, -1, "áčĂłráčĄĂĄÄ‹", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 16 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + /* 94*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 16, -1, -1, -1, "áčĂłráčĄĂĄÄ‹", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 16 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010101010101010101010" "10011101001100111111001100100101" "10101011110110101011000000111100" @@ -3314,7 +3412,7 @@ static void test_encode(const testCtx *const p_ctx) { "11101100010001001001011110100100" "11111111111111111111111111111111" }, - /* 92*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 17, -1, -1, -1, "Price: €13.50", -1, 0, 12, 26, 1, 1, "AIM ITS/04-023:2022 ECI 17 Example 1", 0, + /* 95*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 17, -1, -1, -1, "Price: €13.50", -1, 0, 12, 26, 1, 1, "AIM ITS/04-023:2022 ECI 17 Example 1", 0, "10101010101010101010101010" "10000111000111101110001001" "10100101110010111101000010" @@ -3328,7 +3426,7 @@ static void test_encode(const testCtx *const p_ctx) { "10100111000100011110100110" "11111111111111111111111111" }, - /* 93*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 18, -1, -1, -1, "Te sƂowa są gƂębokie", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 18 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + /* 96*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 18, -1, -1, -1, "Te sƂowa są gƂębokie", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 18 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, "1010101010101010101010" "1001011001001010011011" "1010001101110111011000" @@ -3352,7 +3450,7 @@ static void test_encode(const testCtx *const p_ctx) { "1011000010010101000110" "1111111111111111111111" }, - /* 94*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 20, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 12, 26, 0, 1, "AIM ITS/04-023:2022 ECI 20 Example 1 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + /* 97*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 20, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 12, 26, 0, 1, "AIM ITS/04-023:2022 ECI 20 Example 1 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, "10101010101010101010101010" "10011110011111011010110101" "10100100010101100010110110" @@ -3366,7 +3464,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000110001100101101001010" "11111111111111111111111111" }, - /* 95*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 20, -1, -1, DM_SQUARE, "東äșŹéƒœ", -1, 0, 16, 16, 0, 1, "AIM ITS/04-023:2022 ECI 20 Example 2 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + /* 98*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 20, -1, -1, DM_SQUARE, "東äșŹéƒœ", -1, 0, 16, 16, 0, 1, "AIM ITS/04-023:2022 ECI 20 Example 2 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, "1010101010101010" "1001110111101011" "1010011001101010" @@ -3384,7 +3482,7 @@ static void test_encode(const testCtx *const p_ctx) { "1010010001000010" "1111111111111111" }, - /* 96*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 21, -1, -1, -1, "Ć tudentska ĆĄt. 2198390", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 21 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + /* 99*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 21, -1, -1, -1, "Ć tudentska ĆĄt. 2198390", -1, 0, 20, 20, 0, 1, "AIM ITS/04-023:2022 ECI 21 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, "10101010101010101010" "10001100100001100111" "10100101100110111110" @@ -3406,7 +3504,7 @@ static void test_encode(const testCtx *const p_ctx) { "11010010011010100010" "11111111111111111111" }, - /* 97*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 22, -1, -1, DM_SQUARE, "Đ ĐŸŃŃĐžŃ", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 22 Example 1", 0, + /*100*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 22, -1, -1, DM_SQUARE, "Đ ĐŸŃŃĐžŃ", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 22 Example 1", 0, "1010101010101010" "1001110111011111" "1010101011100000" @@ -3424,7 +3522,7 @@ static void test_encode(const testCtx *const p_ctx) { "1011010001101010" "1111111111111111" }, - /* 98*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 22, -1, -1, DM_SQUARE, "ĐœĐŸĐœĐłĐŸĐ»ŃƒĐ»Ń", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 22 Example 2", 0, + /*101*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 22, -1, -1, DM_SQUARE, "ĐœĐŸĐœĐłĐŸĐ»ŃƒĐ»Ń", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 22 Example 2", 0, "101010101010101010" "100111100100010101" "101010000001111110" @@ -3444,7 +3542,7 @@ static void test_encode(const testCtx *const p_ctx) { "101100011000000110" "111111111111111111" }, - /* 99*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 23, -1, -1, -1, "bƓuf", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 23 Example 1", 0, + /*102*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 23, -1, -1, -1, "bƓuf", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 23 Example 1", 0, "10101010101010" "10001110110001" "10110001110100" @@ -3460,7 +3558,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000001001110" "11111111111111" }, - /*100*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 24, -1, -1, DM_SQUARE, "ŰŹÙˆŰ§ŰČ Ű§Ù„ŰłÙŰ±", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 24 Example 1", 0, + /*103*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 24, -1, -1, DM_SQUARE, "ŰŹÙˆŰ§ŰČ Ű§Ù„ŰłÙŰ±", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 24 Example 1", 0, "101010101010101010" "100111100010000001" "101110001110110010" @@ -3480,7 +3578,7 @@ static void test_encode(const testCtx *const p_ctx) { "110100011110001010" "111111111111111111" }, - /*101*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 24, -1, -1, -1, "Ű§Ù„Ù…Ù†ŰŽŰŁ: Ű§Ù„Ù…Ù…Ù„ÙƒŰ© Ű§Ù„ŰčŰ±ŰšÙŠŰ© Ű§Ù„ŰłŰčÙˆŰŻÙŠŰ©", -1, 0, 24, 24, 1, 1, "AIM ITS/04-023:2022 ECI 24 Example 2", 0, + /*104*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 24, -1, -1, -1, "Ű§Ù„Ù…Ù†ŰŽŰŁ: Ű§Ù„Ù…Ù…Ù„ÙƒŰ© Ű§Ù„ŰčŰ±ŰšÙŠŰ© Ű§Ù„ŰłŰčÙˆŰŻÙŠŰ©", -1, 0, 24, 24, 1, 1, "AIM ITS/04-023:2022 ECI 24 Example 2", 0, "101010101010101010101010" "100111010010001001001011" "101110111100001110010010" @@ -3506,7 +3604,7 @@ static void test_encode(const testCtx *const p_ctx) { "101111000110001010111010" "111111111111111111111111" }, - /*102*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 25 Example 1", 0, + /*105*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 25 Example 1", 0, "10101010101010" "10000010011111" "10110101011100" @@ -3522,7 +3620,7 @@ static void test_encode(const testCtx *const p_ctx) { "10011101010100" "11111111111111" }, - /*103*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 25, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 12, 26, 1, 1, "AIM ITS/04-023:2022 ECI 25 Example 2", 0, + /*106*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 25, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 12, 26, 1, 1, "AIM ITS/04-023:2022 ECI 25 Example 2", 0, "10101010101010101010101010" "10011110010000001001101001" "10110000101111001011001010" @@ -3536,7 +3634,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000100100011011100111100" "11111111111111111111111111" }, - /*104*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, -1, -1, -1, "바윔드", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 25 Example 3 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*107*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, -1, -1, -1, "바윔드", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 25 Example 3 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010101010101010101010" "10011101000111111101100100000101" "10111011100010101000011111001100" @@ -3546,7 +3644,7 @@ static void test_encode(const testCtx *const p_ctx) { "11110100011001101010111111010110" "11111111111111111111111111111111" }, - /*105*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, DM_SQUARE, "æĄç ", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 26 Example 1", 0, + /*108*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, DM_SQUARE, "æĄç ", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 26 Example 1", 0, "1010101010101010" "1001110111110101" "1011111011000100" @@ -3564,7 +3662,7 @@ static void test_encode(const testCtx *const p_ctx) { "1001110001111010" "1111111111111111" }, - /*106*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 20, 20, 1, 1, "AIM ITS/04-023:2022 ECI 26 Example 2", 0, + /*109*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 20, 20, 1, 1, "AIM ITS/04-023:2022 ECI 26 Example 2", 0, "10101010101010101010" "10011110001010000111" "10111111000100111110" @@ -3586,7 +3684,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000101001001010010" "11111111111111111111" }, - /*107*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 26 Example 3", 0, + /*110*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 26 Example 3", 0, "101010101010101010" "100111100000010101" "101111000110111110" @@ -3606,7 +3704,7 @@ static void test_encode(const testCtx *const p_ctx) { "101100010110000100" "111111111111111111" }, - /*108*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 27, -1, -1, -1, "sn:7QPB4MN", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 27 Example 1", 0, + /*111*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 27, -1, -1, -1, "sn:7QPB4MN", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 27 Example 1", 0, "1010101010101010" "1001001011000001" "1011111111011000" @@ -3624,7 +3722,7 @@ static void test_encode(const testCtx *const p_ctx) { "1001011001110010" "1111111111111111" }, - /*109*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 28, -1, -1, -1, "æąçąŒ", -1, 0, 14, 14, 0, 1, "AIM ITS/04-023:2022 ECI 28 Example 1 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example except does not set explicit BASE256 byte count", 0, + /*112*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 28, -1, -1, -1, "æąçąŒ", -1, 0, 14, 14, 0, 1, "AIM ITS/04-023:2022 ECI 28 Example 1 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example except does not set explicit BASE256 byte count", 0, "10101010101010" "10011101101111" "10111001001100" @@ -3640,7 +3738,7 @@ static void test_encode(const testCtx *const p_ctx) { "10101101000110" "11111111111111" }, - /*110*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 29, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 29 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*113*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 29, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 29 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010" "10011101000111" "10111011101100" @@ -3656,7 +3754,7 @@ static void test_encode(const testCtx *const p_ctx) { "11001101000100" "11111111111111" }, - /*111*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 29, -1, -1, -1, "挗äșŹ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 29 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*114*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 29, -1, -1, -1, "挗äșŹ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 29 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010" "10011101000101" "10111011100110" @@ -3672,7 +3770,7 @@ static void test_encode(const testCtx *const p_ctx) { "10101101000110" "11111111111111" }, - /*112*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 30, -1, -1, -1, "바윔드", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 30 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*115*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 30, -1, -1, -1, "바윔드", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 30 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010101010101010101010" "10011101010000111110011110001101" "10111011100001101011001100110000" @@ -3682,7 +3780,7 @@ static void test_encode(const testCtx *const p_ctx) { "11011100010101101110100010101010" "11111111111111111111111111111111" }, - /*113*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 30, -1, -1, -1, "서욞", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 30 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*116*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 30, -1, -1, -1, "서욞", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 30 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010" "10011101010111" "10111011100110" @@ -3698,7 +3796,7 @@ static void test_encode(const testCtx *const p_ctx) { "11001101000110" "11111111111111" }, - /*114*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 31 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*117*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 31 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010" "10011101010111" "11001011110100" @@ -3714,7 +3812,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000111000100" "11111111111111" }, - /*115*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "挗äșŹ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 31 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*118*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "挗äșŹ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 31 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010" "10011101010101" "11001011111110" @@ -3730,7 +3828,7 @@ static void test_encode(const testCtx *const p_ctx) { "10100111000110" "11111111111111" }, - /*116*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "æąçąŒ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 31 Example 3 **NOT SAME** different encodation (example uses binary)", 0, + /*119*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "æąçąŒ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 31 Example 3 **NOT SAME** different encodation (example uses binary)", 0, "10101010101010" "10001101110001" "11000100010000" @@ -3746,7 +3844,7 @@ static void test_encode(const testCtx *const p_ctx) { "10110111010010" "11111111111111" }, - /*117*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*120*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010" "10011101011111" "11001011111000" @@ -3762,7 +3860,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000001000100" "11111111111111" }, - /*118*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "挗äșŹ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + /*121*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "挗äșŹ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, "10101010101010" "10011101011101" "11001011110010" @@ -3778,7 +3876,7 @@ static void test_encode(const testCtx *const p_ctx) { "10100001000110" "11111111111111" }, - /*119*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "æąçąŒ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 3 **NOT SAME** different encodation (example uses binary)", 0, + /*122*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "æąçąŒ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 3 **NOT SAME** different encodation (example uses binary)", 0, "10101010101010" "10001101111001" "11000100011100" @@ -3794,7 +3892,7 @@ static void test_encode(const testCtx *const p_ctx) { "10110001010010" "11111111111111" }, - /*120*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "àœ”àœșàŒ‹àœ…àœČàœ„àŒ", -1, 0, 24, 24, 0, 1, "AIM ITS/04-023:2022 ECI 32 Example 4 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + /*123*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "àœ”àœșàŒ‹àœ…àœČàœ„àŒ", -1, 0, 24, 24, 0, 1, "AIM ITS/04-023:2022 ECI 32 Example 4 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, "101010101010101010101010" "100111110000011010000101" "110001010011101011111000" @@ -3820,7 +3918,7 @@ static void test_encode(const testCtx *const p_ctx) { "110001000101110010010010" "111111111111111111111111" }, - /*121*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 5", 0, + /*124*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 18, 18, 1, 1, "AIM ITS/04-023:2022 ECI 32 Example 5", 0, "101010101010101010" "100111100000000001" "110010001111110010" @@ -3840,7 +3938,7 @@ static void test_encode(const testCtx *const p_ctx) { "101100011101111000" "111111111111111111" }, - /*122*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 32 Example 6 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + /*125*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 32 Example 6 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, "101010101010101010" "100111100000001111" "110001010011000100" @@ -3860,7 +3958,7 @@ static void test_encode(const testCtx *const p_ctx) { "101100010101010110" "111111111111111111" }, - /*123*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 33 Example 1", 0, + /*126*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, -1, "æĄç ", -1, 0, 14, 14, 1, 1, "AIM ITS/04-023:2022 ECI 33 Example 1", 0, "10101010101010" "10001010110111" "11000000010100" @@ -3876,7 +3974,7 @@ static void test_encode(const testCtx *const p_ctx) { "10010001000100" "11111111111111" }, - /*124*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, DM_SQUARE, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 33 Example 2 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + /*127*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, DM_SQUARE, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 33 Example 2 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, "101010101010101010" "100111100010010001" "110010000100110010" @@ -3896,7 +3994,7 @@ static void test_encode(const testCtx *const p_ctx) { "111100010111101010" "111111111111111111" }, - /*125*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, -1, "바윔드", -1, 0, 8, 32, 0, 1, "AIM ITS/04-023:2022 ECI 33 Example 3 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + /*128*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, -1, "바윔드", -1, 0, 8, 32, 0, 1, "AIM ITS/04-023:2022 ECI 33 Example 3 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, "10101010101010101010101010101010" "10010110001111011011011000110101" "11001111111100101000100000101000" @@ -3906,7 +4004,7 @@ static void test_encode(const testCtx *const p_ctx) { "11110010110110101110001111110110" "11111111111111111111111111111111" }, - /*126*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 33, -1, -1, -1, "바윔드", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 33 Example 3 **NOT SAME** different encodation", 0, + /*129*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 33, -1, -1, -1, "바윔드", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 33 Example 3 **NOT SAME** different encodation", 0, "10101010101010101010101010101010" "10011101001111011010111110010101" "11000011111111101000110111000100" @@ -3916,7 +4014,7 @@ static void test_encode(const testCtx *const p_ctx) { "11110100011100101110011010101000" "11111111111111111111111111111111" }, - /*127*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, -1, "æĄç ", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 34 Example 1", 0, + /*130*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, -1, "æĄç ", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 34 Example 1", 0, "10101010101010101010101010101010" "10000100000001011001100100101101" "11000100100001001101100101100100" @@ -3926,7 +4024,7 @@ static void test_encode(const testCtx *const p_ctx) { "11010000001111101100000001100110" "11111111111111111111111111111111" }, - /*128*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 34 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, + /*131*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 34 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, "1010101010101010101010" "1000010001011111000001" "1100000010110010010000" @@ -3950,7 +4048,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101110000000101011100" "1111111111111111111111" }, - /*129*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 34 Example 3 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + /*132*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 34 Example 3 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, "101010101010101010" "100001000101111111" "110011001011000000" @@ -3970,7 +4068,7 @@ static void test_encode(const testCtx *const p_ctx) { "101000000011010110" "111111111111111111" }, - /*130*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 34, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 34 Example 3 **NOT SAME** different encodation", 0, + /*133*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 34, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 34 Example 3 **NOT SAME** different encodation", 0, "101010101010101010" "100111100101111111" "110011011011000000" @@ -3990,7 +4088,7 @@ static void test_encode(const testCtx *const p_ctx) { "101100011111010100" "111111111111111111" }, - /*131*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, -1, "æĄç ", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 35 Example 1", 0, + /*134*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, -1, "æĄç ", -1, 0, 8, 32, 1, 1, "AIM ITS/04-023:2022 ECI 35 Example 1", 0, "10101010101010101010101010101010" "10001010101001011001011111111101" "11000000011111001011101110100000" @@ -4000,7 +4098,7 @@ static void test_encode(const testCtx *const p_ctx) { "11001100011110001000101111100010" "11111111111111111111111111111111" }, - /*132*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 35 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, + /*135*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, -1, "ăƒăƒŒă‚łăƒŒăƒ‰", -1, 0, 22, 22, 0, 1, "AIM ITS/04-023:2022 ECI 35 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, "1010101010101010101010" "1001111010111100010001" "1100100000010110000000" @@ -4024,7 +4122,7 @@ static void test_encode(const testCtx *const p_ctx) { "1000011100010000111100" "1111111111111111111111" }, - /*133*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 35 Example 3 **NOT SAME** different encodation; BWIPP different encodation", 0, + /*136*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, DM_SQUARE, "바윔드", -1, 0, 18, 18, 0, 1, "AIM ITS/04-023:2022 ECI 35 Example 3 **NOT SAME** different encodation; BWIPP different encodation", 0, "101010101010101010" "100101100010110001" "110011111110000010" @@ -4044,7 +4142,7 @@ static void test_encode(const testCtx *const p_ctx) { "110010110111000000" "111111111111111111" }, - /*134*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 170, -1, -1, -1, "sn:7QPB4MN", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 170 Example 1", 0, + /*137*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 170, -1, -1, -1, "sn:7QPB4MN", -1, 0, 16, 16, 1, 1, "AIM ITS/04-023:2022 ECI 170 Example 1", 0, "1010101010101010" "1101001101000101" "1000011000100000" @@ -4062,7 +4160,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101110101101010" "1111111111111111" }, - /*135*/ { BARCODE_DATAMATRIX, DATA_MODE, 899, -1, -1, -1, "\000\001\002\133\134\135\375\376\377", 9, 0, 12, 26, 0, 1, "AIM ITS/04-023:2022 ECI 899 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + /*138*/ { BARCODE_DATAMATRIX, DATA_MODE, 899, -1, -1, -1, "\000\001\002\133\134\135\375\376\377", 9, 0, 12, 26, 0, 1, "AIM ITS/04-023:2022 ECI 899 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, "10101010101010101010101010" "11001100001001010101010111" "10000000111000111010100110" @@ -4076,7 +4174,7 @@ static void test_encode(const testCtx *const p_ctx) { "10010010000010011010010100" "11111111111111111111111111" }, - /*136*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, 3, -1, -1, -1, "\101\300", -1, 0, 12, 12, 1, 899, "AÀ", 0, + /*139*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, 3, -1, -1, -1, "\101\300", -1, 0, 12, 12, 1, 899, "AÀ", 0, "101010101010" "100010101111" "100001011110" @@ -4090,7 +4188,7 @@ static void test_encode(const testCtx *const p_ctx) { "100011011010" "111111111111" }, - /*137*/ { BARCODE_DATAMATRIX, DATA_MODE, 3, -1, -1, -1, "\101\300", -1, 0, 12, 12, 1, 899, "AÀ", 0, + /*140*/ { BARCODE_DATAMATRIX, DATA_MODE, 3, -1, -1, -1, "\101\300", -1, 0, 12, 12, 1, 899, "AÀ", 0, "101010101010" "100010101111" "100001011110" @@ -4104,7 +4202,7 @@ static void test_encode(const testCtx *const p_ctx) { "100011011010" "111111111111" }, - /*138*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 26, -1, -1, -1, "AÀ", -1, 0, 14, 14, 1, 1, "AÀ", 0, + /*141*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 26, -1, -1, -1, "AÀ", -1, 0, 14, 14, 1, 1, "AÀ", 0, "10101010101010" "10001010100001" "10110101100100" @@ -4120,7 +4218,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000110001100" "11111111111111" }, - /*139*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, -1, "AÀ", -1, 0, 14, 14, 1, 1, "AÀ", 0, + /*142*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, -1, "AÀ", -1, 0, 14, 14, 1, 1, "AÀ", 0, "10101010101010" "10001010100001" "10110101100100" @@ -4136,7 +4234,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000110001100" "11111111111111" }, - /*140*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", -1, 0, 16, 16, 1, 1, "TEX last_shift 2, symbols_left 1, process_p 1", 0, + /*143*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", -1, 0, 16, 16, 1, 1, "TEX last_shift 2, symbols_left 1, process_p 1", 0, "1010101010101010" "1010011011101001" "1011001010010010" @@ -4154,7 +4252,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101110101001010" "1111111111111111" }, - /*141*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", -1, 0, 14, 14, 0, 1, "ATTTTTTTT; BWIPP same as FAST_MODE", 1, + /*144*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", -1, 0, 14, 14, 0, 1, "ATTTTTTTT; BWIPP same as FAST_MODE", 1, "10101010101010" "11100001010101" "11010101001000" @@ -4170,7 +4268,7 @@ static void test_encode(const testCtx *const p_ctx) { "10111011000100" "11111111111111" }, - /*142*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "7 BASE256s, 1 pad", 0, + /*145*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "7 BASE256s, 1 pad", 0, "10101010101010101010101010101010" "10000101000011011000110100100001" "11100111110101001011101110100010" @@ -4180,7 +4278,7 @@ static void test_encode(const testCtx *const p_ctx) { "11010000111100001010011101100100" "11111111111111111111111111111111" }, - /*143*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "7 BASE256s, 1 pad", 0, + /*146*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "7 BASE256s, 1 pad", 0, "10101010101010101010101010101010" "10000101000011011000110100100001" "11100111110101001011101110100010" @@ -4190,7 +4288,7 @@ static void test_encode(const testCtx *const p_ctx) { "11010000111100001010011101100100" "11111111111111111111111111111111" }, - /*144*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "8 BASE256s, no padding", 0, + /*147*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "8 BASE256s, no padding", 0, "10101010101010101010101010101010" "10000101000011011111001101000001" "11010111110101001001011001100010" @@ -4200,7 +4298,7 @@ static void test_encode(const testCtx *const p_ctx) { "11010000110010001001010001111000" "11111111111111111111111111111111" }, - /*145*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "8 BASE256s, no padding", 0, + /*148*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, 899, "8 BASE256s, no padding", 0, "10101010101010101010101010101010" "10000101000011011111001101000001" "11010111110101001001011001100010" @@ -4210,7 +4308,7 @@ static void test_encode(const testCtx *const p_ctx) { "11010000110010001001010001111000" "11111111111111111111111111111111" }, - /*146*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "8 BASE256s, square, no padding", 0, + /*149*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "8 BASE256s, square, no padding", 0, "1010101010101010" "1000010100001101" "1101011111101110" @@ -4228,7 +4326,7 @@ static void test_encode(const testCtx *const p_ctx) { "1111000011111010" "1111111111111111" }, - /*147*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "8 BASE256s, square, no padding", 0, + /*150*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "8 BASE256s, square, no padding", 0, "1010101010101010" "1000010100001101" "1101011111101110" @@ -4246,7 +4344,7 @@ static void test_encode(const testCtx *const p_ctx) { "1111000011111010" "1111111111111111" }, - /*148*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "9 BASE256s, 1 pad", 0, + /*151*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "9 BASE256s, 1 pad", 0, "1010101010101010" "1000010101001101" "1110011111000010" @@ -4264,7 +4362,7 @@ static void test_encode(const testCtx *const p_ctx) { "1100000011011010" "1111111111111111" }, - /*149*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "9 BASE256s, 1 pad", 0, + /*152*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, 899, "9 BASE256s, 1 pad", 0, "1010101010101010" "1000010101001101" "1110011111000010" @@ -4282,7 +4380,7 @@ static void test_encode(const testCtx *const p_ctx) { "1100000011011010" "1111111111111111" }, - /*150*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 22, 22, 1, 899, "22 BASE256s, 6 pads", 0, + /*153*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 22, 22, 1, 899, "22 BASE256s, 6 pads", 0, "1010101010101010101010" "1010010100011100010101" "1000011110111110001100" @@ -4306,7 +4404,7 @@ static void test_encode(const testCtx *const p_ctx) { "1111101000110111010100" "1111111111111111111111" }, - /*151*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 22, 22, 1, 899, "22 BASE256s, 6 pads", 0, + /*154*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 22, 22, 1, 899, "22 BASE256s, 6 pads", 0, "1010101010101010101010" "1010010100011100010101" "1000011110111110001100" @@ -4330,7 +4428,7 @@ static void test_encode(const testCtx *const p_ctx) { "1111101000110111010100" "1111111111111111111111" }, - /*152*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 8, 64, 1, 899, "22 BASE256s, no padding", 0, + /*155*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 8, 64, 1, 899, "22 BASE256s, no padding", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010101100011101010101011101111110100100110011100010011010111" "1101011110001010110000001110001010001011010111001010101101100000" @@ -4340,7 +4438,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101000011001010111101101101110010111100111101001010010011001000" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*153*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 8, 64, 1, 899, "22 BASE256s, no padding", 0, + /*156*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 8, 64, 1, 899, "22 BASE256s, no padding", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010101100011101010101011101111110100100110011100010011010111" "1101011110001010110000001110001010001011010111001010101101100000" @@ -4350,7 +4448,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101000011001010111101101101110010111100111101001010010011001000" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*154*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, 899, "249 BASE256s + 6 ASCII (3 double-digits)", 0, + /*157*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, 899, "249 BASE256s + 6 ASCII (3 double-digits)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -4416,7 +4514,7 @@ static void test_encode(const testCtx *const p_ctx) { "1000001101010100110010010110101010000000001010101100100011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*155*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, 899, "249 BASE256s + 6 ASCII (3 double-digits)", 0, + /*158*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, 899, "249 BASE256s + 6 ASCII (3 double-digits)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -4482,7 +4580,7 @@ static void test_encode(const testCtx *const p_ctx) { "1000001101010100110010010110101010000000001010101100100011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*156*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, 899, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, + /*159*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, 899, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -4548,7 +4646,7 @@ static void test_encode(const testCtx *const p_ctx) { "1000001101010100110100010100101010001100001000101100101001101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*157*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, 899, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, + /*160*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, 899, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -4614,7 +4712,7 @@ static void test_encode(const testCtx *const p_ctx) { "1000001101010100110100010100101010001100001000101100101001101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*158*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, 899, "10 ASCII + 251 BASE256s + 6 ASCII", 0, + /*161*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, 899, "10 ASCII + 251 BASE256s + 6 ASCII", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1010011010011101100000010111100110100010110111011011111010000001" "1011001010111110100110111101111010101101000010001101001011001100" @@ -4680,7 +4778,7 @@ static void test_encode(const testCtx *const p_ctx) { "1001010101010100111010010100101010000010001011001100101011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*159*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, 899, "10 ASCII + 251 BASE256s + 6 ASCII; BWIPP same as FAST_MODE", 0, + /*162*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, 899, "10 ASCII + 251 BASE256s + 6 ASCII; BWIPP same as FAST_MODE", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1010011010011101100000010111100110100010110111011011111010000001" "1011001010111110100110111101111010101101000010001101001011001100" @@ -4746,7 +4844,7 @@ static void test_encode(const testCtx *const p_ctx) { "1001010101010100111110010100001010001100001000001100100011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /*160*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 88, 88, 1, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII", 0, + /*163*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 88, 88, 1, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -4836,7 +4934,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101010100110101110000110100001000100000101010010010101110100111001111100010001001001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*161*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\061\062\063\064\065\066", -1, 0, 88, 88, 0, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII; BWIPP same as FAST_MODE", 0, + /*164*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\061\062\063\064\065\066", -1, 0, 88, 88, 0, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII; BWIPP same as FAST_MODE", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -4926,7 +5024,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101010100110101110000110100101000010000100010110010111110101011001111100010000101001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*162*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 88, 88, 1, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding", 0, + /*165*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 88, 88, 1, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -5016,7 +5114,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101010100110101100000110110001000001000101011110010001110100101001111000010001111001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*163*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 88, 88, 0, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding; BWIPP same as FAST_MODE", 0, + /*166*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 88, 88, 0, 899, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding; BWIPP same as FAST_MODE", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -5106,7 +5204,7 @@ static void test_encode(const testCtx *const p_ctx) { "1101010100110101100000110110101000111000100011010010011110101001001111000010000011001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*164*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@_", -1, 0, 8, 32, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, + /*167*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@_", -1, 0, 8, 32, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, "10101010101010101010101010101010" "10000000001001111001101100001101" "10000000000001001001110011001100" @@ -5116,7 +5214,7 @@ static void test_encode(const testCtx *const p_ctx) { "11000000000000001001000001011010" "11111111111111111111111111111111" }, - /*165*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@_", -1, 0, 8, 32, 0, 1, "EDI **NOT SAME** (see FAST_MODE); BWIPP uses different encodation", 0, + /*168*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@_", -1, 0, 8, 32, 0, 1, "EDI **NOT SAME** (see FAST_MODE); BWIPP uses different encodation", 0, "10101010101010101010101010101010" "11100000000000011000100100101001" "11100000000000001010011101001000" @@ -5126,7 +5224,7 @@ static void test_encode(const testCtx *const p_ctx) { "10000000000001001010010000010000" "11111111111111111111111111111111" }, - /*166*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 3 chars, not last 4 like Zint", 0, + /*169*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 3 chars, not last 4 like Zint", 0, "1010101010101010" "1000000001000001" "1000000000111110" @@ -5144,7 +5242,7 @@ static void test_encode(const testCtx *const p_ctx) { "1010100000010010" "1111111111111111" }, - /*167*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@_", -1, 0, 8, 32, 0, 1, "AAEEEEEEEEA; BWIPP uses different encodation, see above", 1, + /*170*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@_", -1, 0, 8, 32, 0, 1, "AAEEEEEEEEA; BWIPP uses different encodation, see above", 1, "10101010101010101010101010101010" "10100000000000111000110101111001" "10000000000001001000100100011000" @@ -5154,7 +5252,7 @@ static void test_encode(const testCtx *const p_ctx) { "10000110001100001001010000001110" "11111111111111111111111111111111" }, - /*168*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 4 chars, not last 1 like Zint", 0, + /*171*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 4 chars, not last 1 like Zint", 0, "1010101010101010" "1000000001000001" "1000000000001100" @@ -5172,7 +5270,7 @@ static void test_encode(const testCtx *const p_ctx) { "1000100000100010" "1111111111111111" }, - /*169*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "AAAEEEEEEEEA; BWIPP uses different encodation, see above", 0, + /*172*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "AAAEEEEEEEEA; BWIPP uses different encodation, see above", 0, "1010101010101010" "1010011101000001" "1000000000101000" @@ -5190,7 +5288,7 @@ static void test_encode(const testCtx *const p_ctx) { "1011000011010010" "1111111111111111" }, - /*170*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 5 chars, not last 2 like Zint", 0, + /*173*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 5 chars, not last 2 like Zint", 0, "1010101010101010" "1000000000100001" "1000000000111000" @@ -5208,7 +5306,7 @@ static void test_encode(const testCtx *const p_ctx) { "1011100000010010" "1111111111111111" }, - /*171*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, + /*174*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "EEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, "1010101010101010" "1000000001100001" "1000000000110100" @@ -5226,7 +5324,7 @@ static void test_encode(const testCtx *const p_ctx) { "1000000000100010" "1111111111111111" }, - /*172*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@@_", -1, 0, 12, 26, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, + /*175*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@@_", -1, 0, 12, 26, 0, 1, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, "10101010101010101010101010" "10000000001001100100101011" "10000000000010000000111000" @@ -5240,7 +5338,7 @@ static void test_encode(const testCtx *const p_ctx) { "10000001000001101011010000" "11111111111111111111111111" }, - /*173*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "AEEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, + /*176*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@@_", -1, 0, 16, 16, 0, 1, "AEEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, "1010101010101010" "1110000001000001" "1110000001000000" @@ -5258,7 +5356,7 @@ static void test_encode(const testCtx *const p_ctx) { "1001100000111010" "1111111111111111" }, - /*174*/ { BARCODE_DATAMATRIX, FAST_MODE, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@Ă©", -1, 0, 24, 24, 0, 1, "Mix of modes TEX ASC C40 ASC EDI BAS; BWIPP uses different encodation", 0, + /*177*/ { BARCODE_DATAMATRIX, FAST_MODE, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@Ă©", -1, 0, 24, 24, 0, 1, "Mix of modes TEX ASC C40 ASC EDI BAS; BWIPP uses different encodation", 0, "101010101010101010101010" "100111011110011101000101" "101111001100101101101000" @@ -5284,7 +5382,7 @@ static void test_encode(const testCtx *const p_ctx) { "111101010110111111111010" "111111111111111111111111" }, - /*175*/ { BARCODE_DATAMATRIX, -1, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@Ă©", -1, 0, 24, 24, 0, 1, "TTTTTTTTTAAAACCCCCCCCCAAAAAEEEEEEEAA; BWIPP uses different encodation", 0, + /*178*/ { BARCODE_DATAMATRIX, -1, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@Ă©", -1, 0, 24, 24, 0, 1, "TTTTTTTTTAAAACCCCCCCCCAAAAAEEEEEEEAA; BWIPP uses different encodation", 0, "101010101010101010101010" "100111011110011100000101" "101111001100101100111100" @@ -5310,7 +5408,7 @@ static void test_encode(const testCtx *const p_ctx) { "111011010111011111010010" "111111111111111111111111" }, - /*176*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", -1, 0, 132, 132, 0, 1, "Mixed modes (except B256); BWIPP different encodation", 0, + /*179*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", -1, 0, 132, 132, 0, 1, "Mixed modes (except B256); BWIPP different encodation", 0, "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "101001101001010011000111100011111001011001011010011010010111111101110111100110110110000111110000111000011100111110111010111110010101" "101100101010110110010011000010100000111010101111010100001111001010100011010100110101000010101011010001111011001010111111011000100110" @@ -5444,7 +5542,7 @@ static void test_encode(const testCtx *const p_ctx) { "110101010100010111111010100000000000110011101101010011010100111010111011101111011111110010101110001010101110001010111111010011111110" "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*177*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", -1, 0, 120, 120, 0, 1, "Mixed modes (except B256); BWIPP uses different encodation", 13, + /*180*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", -1, 0, 120, 120, 0, 1, "Mixed modes (except B256); BWIPP uses different encodation", 13, "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "101001101001010011011001100011111001011110010010011011010111111101001110101111111010000001101101101110110111111011101011" "101100101010110110001101000010100000111010101111010101000000110001110101001100101001111100111000101011100101101011001100" @@ -5566,7 +5664,7 @@ static void test_encode(const testCtx *const p_ctx) { "100101110101110001001111111010101000000010110011011101000010101010011100100101101101011100100110001010000010100000111110" "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*178*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", -1, 0, 144, 144, 1, 1, "144 x 144 default (de facto) format", 0, + /*181*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", -1, 0, 144, 144, 1, 1, "144 x 144 default (de facto) format", 0, "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "101111011100011110111101111100011110111101110001111110111101110001111011111101110001111011110111110001111011110111000111111011110111000111101111" "101110001111011110111000101111011110111000111100111110111000111101111010111000111101111011100010111101111011100011110110111011100011110111101110" @@ -5712,7 +5810,7 @@ static void test_encode(const testCtx *const p_ctx) { "110100111101111011100010111101111011100101110100110011101011110111101110101011110100001110100110110111001110110111011100101110100111011110111000" "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*179*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, DM_ISO_144, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", -1, 0, 144, 144, 0, 1, "144 x 144 ISO format; BWIPP not implemented yet TODO: implement", 0, + /*182*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, DM_ISO_144, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", -1, 0, 144, 144, 0, 1, "144 x 144 ISO format; BWIPP not implemented yet TODO: implement", 0, "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "101111011100011110111101111100011110111101110001111110111101110001111011111101110001111011110111110001111011110111000111111011110111000111101111" "101110001111011110111000101111011110111000111100111110111000111101111010111000111101111011100010111101111011100011110110111011100011110111101110" @@ -5858,6 +5956,34 @@ static void test_encode(const testCtx *const p_ctx) { "110100111101111011100010111101111011101111110100110011101001110100001110100011110100001110100110110111001110111111011110101110101111011000111000" "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, + /*183*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, -1, -1, "バ\\^1ăƒŒă‚ł\\^1ăƒŒăƒ‰\\^1東äșŹ\\^1郜", -1, 0, 26, 26, 1, 1, "", 0, + "10101010101010101010101010" + "10011101101010000100110011" + "10111101001000110010110100" + "10110011010100111111101111" + "10001110001110100111000110" + "11000011111010011110001001" + "10101010110001001011111110" + "10111001100111011000100111" + "10001100111011000101000000" + "11111010001000011111110001" + "11001000110001110000111100" + "11110101101100111101001111" + "11110111000010110000100100" + "10001111110110101000011001" + "10001101101011001000000110" + "11000000000101000110000001" + "11110000001100100101110110" + "11010111100111100100001101" + "10011111011010010001011110" + "10100100110001111100001011" + "10011000100010011010100010" + "10101110001101011111101101" + "10011110110111111010000010" + "11111101101000010010001001" + "10010001000010011010001010" + "11111111111111111111111111" + }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -5953,6 +6079,7 @@ static void test_encode(const testCtx *const p_ctx) { && data[i].option_3 == data[i - 1].option_3 && data[i].output_options == data[i - 1].output_options && strcmp(data[i].data, data[i - 1].data) == 0) { + char *fncs = (char *) z_alloca(length); unsigned char binary[2][2200]; int gs1; int binlen; @@ -5969,7 +6096,8 @@ static void test_encode(const testCtx *const p_ctx) { symbol->input_mode = data[i - 1].input_mode; gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1; - ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, gs1, + memset(fncs, gs1 == 1, length); + ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, fncs, 0 /*b256_end*/, 0 /*c40_end*/, binary[0], &binlen); assert_zero(ret, "i:%d dm_encode() FAST_MODE ret %d != 0 (%s)\n", i, ret, symbol->errtxt); @@ -5979,7 +6107,8 @@ static void test_encode(const testCtx *const p_ctx) { symbol->input_mode = data[i].input_mode; gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1; - ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, gs1, + memset(fncs, gs1 == 1, length); + ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, fncs, 0 /*b256_end*/, 0 /*c40_end*/, binary[1], &binlen); assert_zero(ret, "i:%d dm_encode() minimal ret %d != 0 (%s)\n", i, ret, symbol->errtxt); @@ -6021,6 +6150,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { const char *comment; const char *expected; }; + /* s/\v(\/\*)[ 0-9]*(\*\/)/\=printf("%s%3d%s", submatch(1), (@z+setreg('z',@z+1)), submatch(2))/ | let @z=0: */ static const struct item data[] = { /* 0*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 14, 14, 1, "ISO 16022:2006 11.6 example", "10101010101010" @@ -6474,6 +6604,30 @@ static void test_encode_segs(const testCtx *const p_ctx) { "11011111000111101101110011110000" "11111111111111111111111111111111" }, + /* 19*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, -1, -1, -1, { 0, 0, "" }, { { TU("AB\\^1CDEFGHIJ\\^1"), -1, 3 }, { TU("\\^1K\\^1L"), -1, 4 }, { TU("M\\^1N\\^1"), -1, 5 } }, 0, 22, 22, 1, "", + "1010101010101010101010" + "1001100111100100010011" + "1000110011011110100100" + "1100011110001011000001" + "1010010111010000111000" + "1110111110001000110111" + "1101100111100101001100" + "1101000010110101111111" + "1100000100001010111110" + "1101100011111011110001" + "1001111011110010101100" + "1101110011101101100101" + "1000001101110101100000" + "1100010000100111011101" + "1111000011010101100100" + "1011100100110100011011" + "1101011111111100100110" + "1010000100101011110011" + "1001111111001100000000" + "1111101110111001101001" + "1111001100011111100010" + "1111111111111111111111" + }, }; const int data_size = ARRAY_SIZE(data); int i, j, seg_count, ret; @@ -6627,14 +6781,20 @@ static void test_ct(const testCtx *const p_ctx) { /* 8*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, "Ă©", -1, 0, 26, "", -1, 0 }, /* 9*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, BARCODE_CONTENT_SEGS, "Ă©", -1, 0, 26, "Ă©", -1, 26 }, /* 10*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 899, -1, "Ă©", -1, 0, 899, "", -1, 0 }, - /* 11*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 899, BARCODE_CONTENT_SEGS, "Ă©", -1, 0, 899, "Ă©", -1, 899 }, - /* 12*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "", -1, 0 }, - /* 13*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "01049123451234591597033130128\03510ABC123", -1, 3 }, - /* 14*/ { BARCODE_DATAMATRIX, GS1_MODE, 28, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 28, "01049123451234591597033130128\03510ABC123", -1, 3 }, /* Note: content seg ECI remains at default 3 */ - /* 15*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "https://example.com/01/09506000134369", -1, 0, 0, "", -1, 0 }, - /* 16*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "https://example.com/01/09506000134369", -1, 0, 0, "https://example.com/01/09506000134369", -1, 3 }, - /* 17*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, -1, "H123ABC01234567890", -1, 0, 0, "", -1, 0 }, - /* 18*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "H123ABC01234567890", -1, 0, 0, "+H123ABC01234567890D", -1, 3 }, + /* 11*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, -1, "\\^1Ă©", -1, 0, 0, "", -1, 0 }, + /* 12*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1Ă©", -1, 0, 0, "Ă©", -1, 3 }, + /* 13*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 899, BARCODE_CONTENT_SEGS, "Ă©", -1, 0, 899, "Ă©", -1, 899 }, + /* 14*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, "Ă©\\^1", -1, 0, 26, "", -1, 0 }, + /* 15*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, BARCODE_CONTENT_SEGS, "Ă©\\^1", -1, 0, 26, "Ă©\035", -1, 26 }, + /* 16*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, "\\^^Ă©\\^1\\^1\\^", -1, 0, 26, "", -1, 0 }, + /* 17*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, BARCODE_CONTENT_SEGS, "\\^^Ă©\\^1\\^1\\^", -1, 0, 26, "\\^Ă©\035\035\\^", -1, 26 }, + /* 18*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "", -1, 0 }, + /* 19*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "01049123451234591597033130128\03510ABC123", -1, 3 }, + /* 20*/ { BARCODE_DATAMATRIX, GS1_MODE, 28, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 28, "01049123451234591597033130128\03510ABC123", -1, 3 }, /* Note: content seg ECI remains at default 3 */ + /* 21*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "https://example.com/01/09506000134369", -1, 0, 0, "", -1, 0 }, + /* 22*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "https://example.com/01/09506000134369", -1, 0, 0, "https://example.com/01/09506000134369", -1, 3 }, + /* 23*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, -1, "H123ABC01234567890", -1, 0, 0, "", -1, 0 }, + /* 24*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "H123ABC01234567890", -1, 0, 0, "+H123ABC01234567890D", -1, 3 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -6670,8 +6830,11 @@ static void test_ct(const testCtx *const p_ctx) { assert_nonnull(symbol->content_segs, "i:%d content_segs NULL\n", i); assert_nonnull(symbol->content_segs[0].source, "i:%d content_segs[0].source NULL\n", i); assert_equal(symbol->content_segs[0].length, expected_length, - "i:%d content_segs[0].length %d != expected_length %d\n", - i, symbol->content_segs[0].length, expected_length); + "i:%d content_segs[0].length %d != expected_length %d (%s, %s)\n", + i, symbol->content_segs[0].length, expected_length, + testUtilEscape((const char *) symbol->content_segs[0].source, symbol->content_segs[0].length, + escaped, sizeof(escaped)), + testUtilEscape(data[i].expected, expected_length, escaped2, sizeof(escaped2))); assert_zero(memcmp(symbol->content_segs[0].source, data[i].expected, expected_length), "i:%d content_segs[0].source memcmp(%s, %s, %d) != 0\n", i, testUtilEscape((const char *) symbol->content_segs[0].source, symbol->content_segs[0].length, @@ -7829,6 +7992,7 @@ static void test_minimalenc(const testCtx *const p_ctx) { testStartSymbol(p_ctx->func_name, &symbol); for (i = 0; i < data_size; i++) { + char *fncs; if (testContinue(p_ctx, i)) continue; @@ -7839,10 +8003,12 @@ static void test_minimalenc(const testCtx *const p_ctx) { -1 /*option_1*/, data[i].option_2, -1, data[i].output_options, data[i].data, data[i].length, debug); + fncs = (char *) z_alloca(length); binlen = 0; symbol->input_mode |= FAST_MODE; gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1; - ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, gs1, + memset(fncs, gs1 == 1, length); + ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, fncs, 0 /*b256_end*/, 0 /*c40_end*/, binary[0], &binlen); assert_equal(ret, data[i].ret, "i:%d dm_encode() FAST_MODE ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); @@ -7852,7 +8018,8 @@ static void test_minimalenc(const testCtx *const p_ctx) { binlen = 0; symbol->input_mode &= ~FAST_MODE; gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1; - ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, gs1, + memset(fncs, gs1 == 1, length); + ret = zint_test_dm_encode(symbol, ZCUCP(data[i].data), length, symbol->eci, last_seg, fncs, 0 /*b256_end*/, 0 /*c40_end*/, binary[1], &binlen); assert_equal(ret, data[i].ret, "i:%d dm_encode() minimal ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index 11540ffd..689607db 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -191,10 +191,10 @@ static void test_checks(const testCtx *const p_ctx) { /*127*/ { 150, -1, "1", -1, -1, -1, 0, 0, 0, 0, -1, -1, 0, -1, WARN_FAIL_ALL, ZINT_ERROR_INVALID_OPTION, "Error 206: Symbology out of range", -1 }, /*128*/ { BARCODE_LAST + 1, -1, "1", -1, -1, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_WARN_INVALID_OPTION, "Warning 206: Symbology out of range", BARCODE_CODE128 }, /*129*/ { BARCODE_LAST + 1, -1, "1", -1, -1, -1, 0, 0, 0, 0, -1, -1, 0, -1, WARN_FAIL_ALL, ZINT_ERROR_INVALID_OPTION, "Error 206: Symbology out of range", -1 }, - /*130*/ { BARCODE_CODE128, -1, "\200", -1, UNICODE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 245: Invalid UTF-8 in input", -1 }, - /*131*/ { BARCODE_CODE128, -1, "\\o200", -1, UNICODE_MODE | ESCAPE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 245: Invalid UTF-8 in input", -1 }, - /*132*/ { BARCODE_MAXICODE, -1, "\200", -1, UNICODE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 245: Invalid UTF-8 in input", -1 }, - /*133*/ { BARCODE_MAXICODE, -1, "\\o200", -1, UNICODE_MODE | ESCAPE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 245: Invalid UTF-8 in input", -1 }, + /*130*/ { BARCODE_CODE128, -1, "\200", -1, UNICODE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 215: Invalid UTF-8 in input", -1 }, + /*131*/ { BARCODE_CODE128, -1, "\\o200", -1, UNICODE_MODE | ESCAPE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 215: Invalid UTF-8 in input", -1 }, + /*132*/ { BARCODE_MAXICODE, -1, "\200", -1, UNICODE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 215: Invalid UTF-8 in input", -1 }, + /*133*/ { BARCODE_MAXICODE, -1, "\\o200", -1, UNICODE_MODE | ESCAPE_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 215: Invalid UTF-8 in input", -1 }, /*134*/ { BARCODE_GS1_128, -1, "[01]12345678901234", -1, GS1_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, -1, ZINT_WARN_NONCOMPLIANT, "Warning 261: AI (01) data position 14: Bad checksum '4', expected '1'", -1 }, /*135*/ { BARCODE_GS1_128, -1, "[01]12345678901234", -1, GS1_MODE, -1, 0, 0, 0, 0, -1, -1, 0, -1, WARN_FAIL_ALL, ZINT_ERROR_NONCOMPLIANT, "Error 261: AI (01) data position 14: Bad checksum '4', expected '1'", -1 }, /*136*/ { BARCODE_QRCODE, -1, "àž", -1, UNICODE_MODE, 13, 0, 0, 0, 0, -1, -1, 0, -1, -1, 0, "", -1 }, @@ -306,10 +306,10 @@ static void test_checks_segs(const testCtx *const p_ctx) { /* 8*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 3 }, { NULL, 0, 0 } }, 1, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 217: Symbology does not support ECI switching" }, /* 9*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 1 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 218: ECI code '1' out of range (0 to 999999, excluding 1, 2, 14 and 19)" }, /* 10*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, GS1_MODE, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 776: GS1 mode not supported for multiple segments" }, - /* 11*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("\200"), 0, 4 } }, 2, UNICODE_MODE, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 245: Invalid UTF-8 in input" }, + /* 11*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("\200"), 0, 4 } }, 2, UNICODE_MODE, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 215: Invalid UTF-8 in input" }, /* 12*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, -1, -1, -1, 0, "" }, /* 13*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 0 }, { TU("B"), 0, 4 } }, 2, -1, 3, -1, 0, "" }, - /* 14*/ { BARCODE_AZTEC, -1, { { TU("A"), ZINT_MAX_DATA_LEN, 3 }, { TU("B"), 1, 4 } }, 2, -1, -1, -1, ZINT_ERROR_TOO_LONG, "Error 243: Input too long" }, + /* 14*/ { BARCODE_AZTEC, -1, { { TU("A"), ZINT_MAX_DATA_LEN, 3 }, { TU("B"), 1, 4 } }, 2, -1, -1, -1, ZINT_ERROR_TOO_LONG, "Error 214: Input too long" }, }; const int data_size = ARRAY_SIZE(data); int i, ret; @@ -731,9 +731,9 @@ static void test_escape_char_process(const testCtx *const p_ctx) { /* 44*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\uFG", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\u' escape sequence in input", 0, "" }, /* 45*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\u00F", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\u' escape sequence in input", 0, "" }, /* 46*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\u00FG", "", ZINT_ERROR_INVALID_DATA, 0, "Error 211: Invalid character for '\\u' escape sequence in input (hexadecimal only)", 0, "" }, - /* 47*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\ufffe", "", ZINT_ERROR_INVALID_DATA, 0, "Error 246: Value of escape sequence '\\ufffe' in input out of range", 0, "Reversed BOM" }, - /* 48*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\ud800", "", ZINT_ERROR_INVALID_DATA, 0, "Error 246: Value of escape sequence '\\ud800' in input out of range", 0, "Surrogate" }, - /* 49*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\udfff", "", ZINT_ERROR_INVALID_DATA, 0, "Error 246: Value of escape sequence '\\udfff' in input out of range", 0, "Surrogate" }, + /* 47*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\ufffe", "", ZINT_ERROR_INVALID_DATA, 0, "Error 216: Value of escape sequence '\\ufffe' in input out of range", 0, "Reversed BOM" }, + /* 48*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\ud800", "", ZINT_ERROR_INVALID_DATA, 0, "Error 216: Value of escape sequence '\\ud800' in input out of range", 0, "Surrogate" }, + /* 49*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\udfff", "", ZINT_ERROR_INVALID_DATA, 0, "Error 216: Value of escape sequence '\\udfff' in input out of range", 0, "Surrogate" }, /* 50*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\uffff", "", 0, 12, "E7 2C B0 16 AB A1 1F 85 EB 50 A1 4C", 0, "" }, /* 51*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 17, "\\xE2\\x82\\xAC", "", 0, 12, "F1 12 EB 25 81 4A 0A 8C 31 AC E3 2E", 0, "Zint manual 4.10 Ex1" }, /* 52*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 17, "\\u20AC", "", 0, 12, "F1 12 EB 25 81 4A 0A 8C 31 AC E3 2E", 1, "" }, @@ -755,7 +755,7 @@ static void test_escape_char_process(const testCtx *const p_ctx) { /* 68*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\Udfff", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\U' escape sequence in input", 0, "Surrogate" }, /* 69*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U000F", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\U' escape sequence in input", 0, "" }, /* 70*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U0000F", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\U' escape sequence in input", 0, "" }, - /* 71*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U110000", "", ZINT_ERROR_INVALID_DATA, 0, "Error 246: Value of escape sequence '\\U110000' in input out of range", 0, "" }, + /* 71*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U110000", "", ZINT_ERROR_INVALID_DATA, 0, "Error 216: Value of escape sequence '\\U110000' in input out of range", 0, "" }, /* 72*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, "\\U10FFFF", "", 0, 14, "F1 1A E7 57 C7 81 F7 AC 09 06 28 51 F3 00 E1 8C 2A 1C", 0, "" }, /* 73*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, "\\U10FFFF", "", 0, 14, "F1 1B E7 57 E0 11 D7 6C 4F 45 E2 B3 FF F1 72 AB 54 9F", 0, "" }, /* 74*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, "\\U10FFFF", "", 0, 14, "F1 21 EB 64 33 EB 1B 36 1D F7 B1 6D 8C A6 34 64 19 3A", 0, "" }, @@ -764,11 +764,25 @@ static void test_escape_char_process(const testCtx *const p_ctx) { /* 77*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, "\\U10FFFF", "", 0, 14, "F1 24 EB 80 EB 80 11 01 17 BA C6 05 9F 4C EA E5 18 31", 0, "" }, /* 78*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[20]10", "[10]A", 0, 99, "(7) 105 102 20 10 100 59 106", 0, "" }, /* 79*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[2\\x30]1\\d048", "[\\x310]\\x41", 0, 99, "(7) 105 102 20 10 100 59 106", 1, "" }, - /* 80*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid for Code 128 in extra escape mode", 0, "" }, - /* 81*/ { BARCODE_CODE128, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^A1", "", 0, 46, "(4) 103 17 17 106", 0, "" }, - /* 82*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^", "", 0, 57, "(5) 104 60 62 82 106", 0, "Partial special escape '\\^' at end allowed" }, - /* 83*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^D1", "", 0, 79, "(7) 104 60 62 36 17 52 106", 0, "Unknown special escapes passed straight thu" }, - /* 84*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\w", "", ZINT_ERROR_INVALID_DATA, 0, "Error 234: Unrecognised escape character '\\w' in input", 0, "" }, + /* 80*/ { BARCODE_AZTEC, DATA_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, + /* 81*/ { BARCODE_AZTEC, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 213: Extra escape '\\^' not valid for this symbology and/or input mode", 0, "" }, + /* 82*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, + /* 83*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, + /* 84*/ { BARCODE_DATAMATRIX, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", 0, 10, "E8 32 81 98 94 7B 7F 6D", 0, "" }, + /* 85*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 717: Unrecognized extra escape \"\\^A\"", 0, "" }, + /* 86*/ { BARCODE_DATAMATRIX, GS1_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 213: Extra escape '\\^' not valid for this symbology and/or input mode", 0, "Not allowed of DATAMATRIX in GS1_MODE" }, + /* 87*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 18, "A\\^1B", "", 0, 12, "F1 13 42 E8 43 C3 1B 02 5A 6B 37 CC", 0, "" }, + /* 88*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, + /* 89*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, "バ\\^1ăƒŒă‚ł\\^1ăƒŒăƒ‰\\^1東äșŹ\\^1郜", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, + /* 90*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 25, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, + /* 91*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 33, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, + /* 92*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 170, "A\\^1B", "", ZINT_ERROR_INVALID_DATA, 0, "Error 244: Invalid character in input for ECI '170'", 0, "" }, + /* 93*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 899, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, + /* 94*/ { BARCODE_CODE128, DATA_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, + /* 95*/ { BARCODE_CODE128, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^A1", "", 0, 46, "(4) 103 17 17 106", 0, "" }, + /* 96*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^", "", 0, 57, "(5) 104 60 62 82 106", 0, "Partial special escape '\\^' at end allowed" }, + /* 97*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^D1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 348: Unrecognized extra escape \"\\^D\"", 0, "" }, + /* 98*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\w", "", ZINT_ERROR_INVALID_DATA, 0, "Error 234: Unrecognised escape character '\\w' in input", 0, "" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -891,6 +905,7 @@ static void test_escape_char_process_test(const testCtx *const p_ctx) { /* 2*/ { 0, 0, "\\U010283", 0, "\360\220\212\203", 4 }, /* 3*/ { 0, 0, "\\u007F\\u0080\\u011E\\u13C9\\U010283", 0, "\177\302\200\304\236\341\217\211\360\220\212\203", 12 }, /* 4*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, "\\^A\\^^\\^B", 0, "\\^A\\^^\\^B", 9 }, + /* 5*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, "\\^1\\^^\\^1", 0, "\\^1\\^^\\^1", 9 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index 5ca19e09..f1271a2d 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -2665,29 +2665,77 @@ static char *testUtilBwippCvtGS1Data(char *bwipp_data, const int bwipp_data_size return bwipp_data; } +/* Copied from "library.c" */ +/* Returns 1 if `symbol` can process EXTRA_ESCAPE_MODE */ +static int supports_extra_escape_mode(const struct zint_symbol *const symbol) { + return symbol->symbology == BARCODE_CODE128 + || (symbol->symbology == BARCODE_DATAMATRIX && (symbol->input_mode & 0x07) != GS1_MODE); +} + #define z_isxdigit(c) (z_isdigit(c) || ((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f')) #define z_isodigit(c) ((c) <= '7' && (c) >= '0') /* Convert data to Ghostscript format for passing to bwipp_dump.ps */ -static char *testUtilBwippEscape(char *bwipp_data, const int bwipp_data_size, const char *data, const int length, - const int zint_escape_mode, const int eci, int *parse, int *parsefnc) { +static char *testUtilBwippEscape(const struct zint_symbol *const symbol, char *bwipp_data, const int bwipp_data_size, + const char *data, const int length, const int eci, int *parse, int *parsefnc) { + const int is_extra_escaped = (symbol->input_mode & EXTRA_ESCAPE_MODE) && supports_extra_escape_mode(symbol); + const int is_escaped = (symbol->input_mode & ESCAPE_MODE) || is_extra_escaped; + const int is_c128 = symbol->symbology == BARCODE_CODE128; char *b = bwipp_data; char *be = b + bwipp_data_size; unsigned char *d = (unsigned char *) data; unsigned char *de = (unsigned char *) data + length; int have_done_single_caret = 0; /* Flag to help debug escaping of carets */ - if (eci && !*parsefnc) { + if (eci) { sprintf(bwipp_data, "^ECI%06d", eci); *parsefnc = 1; b = bwipp_data + 10; } while (b < be && d < de) { + /* Deal with extra escape sequences first */ + if (is_extra_escaped && *d == '\\' && d + 1 < de && d[1] == '^' + && (d + 2 == de || ((d[2] == '1' || d[2] == '^' || (is_c128 && d[2] >= '@' && d[2] <= 'C'))))) { + if (d + 2 == de || d[2] == '^') { + /* Literal "\^^" */ + if (*parsefnc) { + if (b + 6 >= be) { + fprintf(stderr, "testUtilBwippEscape: extra escape double caret bwipp_data buffer full (%d)\n", + bwipp_data_size); + return NULL; + } + strcpy(b, "^092^^"); + b += 6; + *parse = 1; + } else { + if (b + 8 >= be) { + fprintf(stderr, "testUtilBwippEscape: extra escape 094 caret bwipp_data buffer full (%d)\n", + bwipp_data_size); + return NULL; + } + strcpy(b, "^092^094"); + b += 8; + *parse = 1; + } + } else if (d[2] == '1') { + if (b + 5 >= be) { + fprintf(stderr, "testUtilBwippEscape: extra escape FNC1 bwipp_data buffer full (%d)\n", + bwipp_data_size); + return NULL; + } + strcpy(b, "^FNC1"); + b += 5; + *parsefnc = 1; + } else { + assert(d + 2 < de && is_c128 && d[2] >= '@' && d[2] <= 'C'); + } + d += 2 + (d + 2 != de); + /* Have to escape double quote otherwise Ghostscript gives "Unterminated quote in @-file" for some reason */ /* Escape single quote also to avoid having to do proper shell escaping TODO: proper shell escaping */ - if (*d < 0x20 || *d >= 0x7F || (*d == '^' && !*parsefnc) || *d == '"' || *d == '\'' - || *d == '(' || (*d == '\\' && !zint_escape_mode)) { + } else if (*d < 0x20 || *d >= 0x7F || (*d == '^' && !*parsefnc) || *d == '"' || *d == '\'' + || *d == '(' || (*d == '\\' && !is_escaped)) { if (b + 4 >= be) { fprintf(stderr, "testUtilBwippEscape: double quote bwipp_data buffer full (%d)\n", bwipp_data_size); return NULL; @@ -2710,7 +2758,7 @@ static char *testUtilBwippEscape(char *bwipp_data, const int bwipp_data_size, co /* `parsefnc` changed while escaping (see FNC1 processing below) - may cause test to fail */ fprintf(stderr, "testUtilBwippEscape: WARNING: already escaped caret singularly\n"); } - } else if (zint_escape_mode && *d == '\\' && d + 1 < de) { + } else if (is_escaped && *d == '\\' && d + 1 < de) { int val; switch (*++d) { case '0': val = 0x00; /* Null */ break; @@ -2883,6 +2931,7 @@ static char *testUtilBwippUtf8Convert(const int index, const int symbology, cons /* Create bwipp_dump.ps command and run */ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size, int *p_parsefnc) { + static const char fn[] = "testUtilBwipp"; static const char cmd_fmt[] = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s'" " backend/tests/tools/bwipp_dump.ps"; static const char cmd_opts_fmt[] = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s' -so='%s'" @@ -2924,10 +2973,11 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int FILE *fp = NULL; int cnt; + int exit_status; char *b = buffer; char *be = buffer + buffer_size; - int r, h; + int r; int parse = 0, parsefnc = p_parsefnc ? *p_parsefnc : 0; const int upcean = (ZBarcode_Cap(symbology, ZINT_CAP_EANUPC) & ZINT_CAP_EANUPC) == ZINT_CAP_EANUPC; @@ -2944,8 +2994,8 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int bwipp_barcode = testUtilBwippName(index, symbol, option_1, option_2, option_3, 0, &linear_row_height, &gs1_cvt); if (!bwipp_barcode) { - fprintf(stderr, "i:%d testUtilBwipp: no mapping for %s, option_1 %d, option_2 %d, option_3 %d\n", - index, testUtilBarcodeName(symbology), option_1, option_2, option_3); + fprintf(stderr, "i:%d %s:%d no mapping for %s, option_1 %d, option_2 %d, option_3 %d\n", + index, fn, __LINE__, testUtilBarcodeName(symbology), option_1, option_2, option_3); return -1; } @@ -2956,8 +3006,8 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int bwipp_row_height[r] = symbol->row_height[r] ? symbol->row_height[r] : linear_row_height; } if ((symbol->debug & ZINT_DEBUG_TEST_PRINT) && !(symbol->debug & ZINT_DEBUG_TEST_LESS_NOISY)) { - fprintf(stderr, "bwipp_row_height[%d] %d, symbol->row_height[%d] %g\n", - r, bwipp_row_height[r], r, symbol->row_height[r]); + fprintf(stderr, "i:%d %s:%d bwipp_row_height[%d] %d, symbol->row_height[%d] %g\n", + index, fn, __LINE__, r, bwipp_row_height[r], r, symbol->row_height[r]); } } @@ -2966,14 +3016,15 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int if ((symbol->input_mode & 0x07) == UNICODE_MODE && zint_is_eci_convertible(eci) && (data = testUtilBwippUtf8Convert(index, symbology, 1 /*try_sjis*/, &eci, (const unsigned char *) data, &data_len, (unsigned char *) converted)) == NULL) { - fprintf(stderr, "i:%d testUtilBwipp: failed to convert UTF-8 data for %s\n", - index, testUtilBarcodeName(symbology)); + fprintf(stderr, "i:%d %s:%d failed to convert UTF-8 data for %s\n", + index, fn, __LINE__, testUtilBarcodeName(symbology)); return -1; } if (z_is_composite(symbology)) { if (!primary) { - fprintf(stderr, "i:%d testUtilBwipp: no primary data given %s\n", index, testUtilBarcodeName(symbology)); + fprintf(stderr, "i:%d %s:%d no primary data given %s\n", + index, fn, __LINE__, testUtilBarcodeName(symbology)); return -1; } if (*primary != obracket && !upcean) { @@ -3072,10 +3123,7 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int } #endif } else { - const int is_extra_escaped = (symbol->input_mode & EXTRA_ESCAPE_MODE) - && symbol->symbology == BARCODE_CODE128; - const int is_escaped = (symbol->input_mode & ESCAPE_MODE) || is_extra_escaped; - if (testUtilBwippEscape(bwipp_data, bwipp_data_size, data, data_len, is_escaped, eci, &parse, &parsefnc) + if (testUtilBwippEscape(symbol, bwipp_data, bwipp_data_size, data, data_len, eci, &parse, &parsefnc) == NULL) { return -1; } @@ -3560,9 +3608,8 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int } if ((option_1 != -1 || option_2 != -1 || option_3 != -1) && !bwipp_opts) { - fprintf(stderr, - "i:%d testUtilBwipp: no BWIPP options set option_1 %d, option_2 %d, option_3 %d for symbology %s\n", - index, option_1, option_2, option_3, testUtilBarcodeName(symbology)); + fprintf(stderr, "i:%d %s:%d no BWIPP options set option_1 %d, option_2 %d, option_3 %d for symbology %s\n", + index, fn, __LINE__, option_1, option_2, option_3, testUtilBarcodeName(symbology)); return -1; } @@ -3607,7 +3654,7 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int memcpy(cmd + GS_INITIAL_LEN, adj, sizeof(adj) - 1); } if (symbology == BARCODE_CODE11 || symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39 - || symbology == BARCODE_CODABAR || symbology == BARCODE_PHARMA || symbology == BARCODE_PZN + || symbology == BARCODE_CODABAR || symbology == BARCODE_PZN || symbology == BARCODE_CODE32 || symbology == BARCODE_VIN) { /* Ratio 3 width bar/space -> 2 width */ char adj[] = " -sr=0.6"; @@ -3664,12 +3711,12 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int } if (symbol->debug & ZINT_DEBUG_TEST_PRINT) { - printf("i:%d testUtilBwipp: cmd %s\n", index, cmd); + printf("i:%d %s cmd %s\n", index, fn, cmd); } fp = testutil_popen(cmd, "r"); if (!fp) { - fprintf(stderr, "i:%d testUtilBwipp: failed to run '%s'\n", index, cmd); + fprintf(stderr, "i:%d %s:%d failed to run '%s'\n", index, fn, __LINE__, cmd); return -1; } @@ -3679,45 +3726,38 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int } else { for (r = 0; r < symbol->rows; r++) { if (b + symbol->width > be) { - fprintf(stderr, "i:%d testUtilBwipp: row %d, width %d, row width iteration overrun (%s)\n", - index, r, symbol->width, cmd); - testutil_pclose(fp); + fprintf(stderr, "i:%d %s:%d row %d, width %d, row width iteration overrun (%s)\n", + index, fn, __LINE__, r, symbol->width, cmd); + (void) testutil_pclose(fp); return -1; } cnt = (int) fread(b, 1, symbol->width, fp); if (cnt != symbol->width) { - fprintf(stderr, - "i:%d testUtilBwipp: failed to read row %d of %d, symbol->width %d bytes, cnt %d (%s)\n", - index, r + 1, symbol->rows, symbol->width, cnt, cmd); - testutil_pclose(fp); + fprintf(stderr, "i:%d %s:%d failed to read row %d of %d, symbol->width %d bytes, cnt %d (%s)\n", + index, fn, __LINE__, r + 1, symbol->rows, symbol->width, cnt, cmd); + (void) testutil_pclose(fp); return -1; } b += cnt; - for (h = bwipp_row_height[r]; h > 1; h--) { /* Ignore row copies if any */ - cnt = (int) fread(b, 1, symbol->width, fp); - if (cnt != symbol->width) { - fprintf(stderr, - "i:%d testUtilBwipp: failed to read/ignore symbol->width %d bytes, cnt %d, h %d" - ", bwipp_row_height[%d] %d, symbol->row_height[%d] %g (%s)\n", - index, symbol->width, cnt, h, r, bwipp_row_height[r], r, symbol->row_height[r], cmd); - testutil_pclose(fp); - return -1; - } - if (h * 2 == bwipp_row_height[r]) { /* Hack to use middle row (avoids add-on text offsets) */ - memcpy(b - cnt, b, cnt); - } - } } } *b = '\0'; if (fgetc(fp) != EOF) { - fprintf(stderr, "i:%d testUtilBwipp: failed to read full stream (%s)\n", index, cmd); - testutil_pclose(fp); + fprintf(stderr, "i:%d %s:%d failed to read full stream (%s)\n", index, fn, __LINE__, cmd); + (void) testutil_pclose(fp); return -1; } - testutil_pclose(fp); + if ((exit_status = testutil_pclose(fp))) { +#ifndef _WIN32 + if (WIFEXITED(exit_status)) { + exit_status = WEXITSTATUS(exit_status); + } +#endif + fprintf(stderr, "i:%d %s:%d pclose returned exit status %d (%s)\n", index, fn, __LINE__, exit_status, cmd); + return -1; + } return 0; } @@ -3797,7 +3837,7 @@ int testUtilBwippSegs(int index, struct zint_symbol *symbol, int option_1, int o total_len = (int) (d - data); if (unicode_mode) { - symbol->input_mode = DATA_MODE; + symbol->input_mode = DATA_MODE | (symbol->input_mode & ~0x07); } symbol->eci = 0; @@ -4147,6 +4187,7 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, FILE *fp = NULL; int cnt; + int exit_status; buffer[0] = '\0'; @@ -4192,17 +4233,25 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, if (cnt == buffer_size) { fprintf(stderr, "i:%d testUtilZXingCPP: buffer too small, %d bytes, cnt %d (%s)\n", index, buffer_size, cnt, cmd); - testutil_pclose(fp); + (void) testutil_pclose(fp); return -1; } if (fgetc(fp) != EOF) { fprintf(stderr, "i:%d testUtilZXingCPP: failed to read full stream (%s)\n", index, cmd); - testutil_pclose(fp); + (void) testutil_pclose(fp); return -1; } - testutil_pclose(fp); + if ((exit_status = testutil_pclose(fp))) { +#ifndef _WIN32 + if (WIFEXITED(exit_status)) { + exit_status = WEXITSTATUS(exit_status); + } +#endif + fprintf(stderr, "i:%d testUtilZXingCPP: pclose returned exit status %d (%s)\n", index, exit_status, cmd); + return -1; + } if ((data_mode && zxingcpp_cmp > 1 && (zxingcpp_cmp == 899 || zint_is_eci_convertible(zxingcpp_cmp))) || symbol->eci >= 899) { @@ -4311,7 +4360,7 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in const int is_dbar_nonexp = symbology == BARCODE_DBAR_OMN || symbology == BARCODE_DBAR_LTD || symbology == BARCODE_DBAR_OMNSTK || symbology == BARCODE_DBAR_STK; const int gs1 = (symbol->input_mode & 0x07) == GS1_MODE || is_gs1_128_dbar_exp; - const int is_extra_escaped = (symbol->input_mode & EXTRA_ESCAPE_MODE) && symbol->symbology == BARCODE_CODE128; + const int is_extra_escaped = (symbol->input_mode & EXTRA_ESCAPE_MODE) && supports_extra_escape_mode(symbol); const int is_escaped = (symbol->input_mode & ESCAPE_MODE) || is_extra_escaped; const int is_hibc = symbology >= BARCODE_HIBC_128 && symbology <= BARCODE_HIBC_AZTEC; const int have_ccheckdigit = symbol->option_2 == 1 || symbol->option_2 == 2; /* Good for C25, CODE39, CODABAR */ @@ -4360,6 +4409,7 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in /* Remove any Code 128 special escapes */ int j = 0; int have_manual_ab = 0; + int have_position_fnc1 = 0; for (i = 0; i < expected_len; i++) { if (escaped[i] == '\\' && i + 2 < expected_len && escaped[i + 1] == '^' && ((escaped[i + 2] >= '@' && escaped[i + 2] <= 'C') || escaped[i + 2] == '1' @@ -4372,11 +4422,13 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in /* FNC1 in 1st position treated as GS1 and in 2nd position AIM, neither transmitted - need to skip AIM (single alphabetic or Code Set C double digit) TODO: guessing about whether in Code Set C for double digit */ - if (j > 2 || (j == 1 && !(z_isupper(escaped[0]) || z_islower(escaped[0]))) + if (symbol->eci || have_position_fnc1 || j > 2 || (j == 1 && !z_isalpha(escaped[0])) || (j == 2 && !(z_isdigit(escaped[0]) && z_isdigit(escaped[1]) && !have_manual_ab))) { /* Probably not AIM */ escaped[j++] = 29; /* GS */ + } else { + have_position_fnc1 = 1; } } } else { diff --git a/backend/tests/tools/bwipp_dump-barcode.ps.cat b/backend/tests/tools/bwipp_dump-barcode.ps.cat index 360f6121..c0a72a5b 100644 --- a/backend/tests/tools/bwipp_dump-barcode.ps.cat +++ b/backend/tests/tools/bwipp_dump-barcode.ps.cat @@ -98,6 +98,32 @@ ret /pixs known { pixs 0 tmppixs 0 j getinterval putinterval } if + b (databarlimitedcomposite) eq { + % Add RHS 5-space quiet zone + /cpypixs pixs length array def + cpypixs 0 pixs 0 pixs length getinterval putinterval + /pixw pixs length pixx idiv def + /pixs [ + 0 pixx cpypixs length 1 sub { + /i exch def + cpypixs i pixx getinterval aload pop 0 0 0 0 0 + } for + ] def + /pixx pixx 5 add def + } if + + b (ean13composite) eq b (ean8composite) eq or b (upcacomposite) eq or b (upcecomposite) eq or { + d (|) search { + /linear exch def + pop pop + linear ( ) search { % Have add-on? + pop pop pop + % Remove last row from pixs array which just contains add-on overhang + /pixs [ pixs 0 pixs length pixx sub getinterval aload pop ] def + } { pop } ifelse + } { pop } ifelse + } if + /xs systemdict /xs known { systemdict /xs get cvi } { 0 } ifelse def /xe systemdict /xe known { systemdict /xe get cvi } { 0 } ifelse def diff --git a/backend/tests/tools/bwipp_dump.ps.tar.xz b/backend/tests/tools/bwipp_dump.ps.tar.xz index b6821a7ddc779571e673aab3819111de8824ce1e..db4d64c269a0a1d816aa81173c26c34c7ca69845 100644 GIT binary patch literal 165804 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

fV@{V$k}Kqt?*jSg`$k3F7Ctuid|Q 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

%vN6M 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 literal 159164 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 diff --git a/backend/zint.h b/backend/zint.h index 936ae4a6..1173e7eb 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -324,7 +324,7 @@ extern "C" { #define FAST_MODE 0x0080 /* Use faster if less optimal encodation or other shortcuts if available */ /* (affects AZTEC, DATAMATRIX, MICROPDF417, PDF417, QRCODE & UPNQR only) */ #define EXTRA_ESCAPE_MODE 0x0100 /* Process special symbology-specific escape sequences as well as others */ - /* Note: currently Code 128 only */ + /* Note: currently Code 128 and Data Matrix only */ #define GS1SYNTAXENGINE_MODE 0x0200 /* Use the GS1 Syntax Engine (if available) to strictly validate GS1 input */ #define GS1RAW_MODE 0x0400 /* Process GS1 data literally (no AI delimiters), parsing GSs as FNC1s */ diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index 6421f2b8..f0380ef4 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -577,7 +577,7 @@ static const char help_message[] = "zint tcl(stub,obj) dll\n" " -eci choice: ECI to use\n" /* cli option --embedfont not supported (vector output only) */ " -esc bool: process escape sequences in input data\n" - " -extraesc bool: process symbology-specific escape sequences (Code 128 only)\n" + " -extraesc bool: process symbology-specific escape sequences (Code 128 and Data Matrix only)\n" " -fast bool: use fast encodation (Aztec, Data Matrix, MicroPDF417, PDF417, QR, UPNQR)\n" " -fg color: set foreground color as 6 or 8 hex rrggbbaa\n" /* replaces cli options --binary and --gs1 */ diff --git a/docs/manual.html b/docs/manual.html index 26283968..fe93be60 100644 --- a/docs/manual.html +++ b/docs/manual.html @@ -334,7 +334,7 @@

Zint Barcode Generator and Zint Barcode Studio User Manual

Version 2.16.0.9

-

March 2026

+

April 2026