From bcb3ceefe13cd8999b0a6e902631394568a083e9 Mon Sep 17 00:00:00 2001 From: gitlost Date: Mon, 2 Feb 2026 14:20:10 +0000 Subject: [PATCH] AZTEC: add almost optimal encoding algorithm, previous algorithm available via "--fast" (input_mode |= FAST_MODE) (ticket #347); add new option "--azfull" (option_3 = ZINT_AZTEC_FULL) to only consider Full symbols (not Compact ones) on automatic sizing GUI: adjust Aztec tab to show feedback by selecting combos and shorten message to just actual ECC; grpCodabar min width library: debug source input dump 200 -> 2000 common: some code fiddling (c -> ch, flg -> flag) backend_tcl: add "-azfull" option & make capitalization of help more consistent general: remove some trailing whitespace manual: make Aztec ECCs more precise, i.e. ">=" rather than ">" (similarly in GUI) CLI: code fiddling c -> opt --- ChangeLog | 11 +- backend/Makefile.mingw | 2 +- backend/aztec.c | 1394 +++++--- backend/aztec.h | 88 +- backend/common.c | 36 +- backend/common.h | 24 +- backend/library.c | 6 +- backend/tests/data/png/aztec_z1_seq4of7.png | Bin 173 -> 174 bytes backend/tests/test_aztec.c | 3140 +++++++++++++++++-- backend/tests/test_perf.c | 77 +- backend/tests/test_random.c | 11 +- backend/tests/test_raster.c | 8 +- backend/tests/test_vector.c | 8 +- backend/tests/testcommon.c | 10 +- backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 153768 -> 155176 bytes backend/tools/gen_qr_masks.php | 2 +- backend/zint.h | 7 +- backend_qt/qzint.cpp | 6 +- backend_qt/tests/test_qzint.cpp | 12 +- backend_tcl/zint.c | 55 +- docs/manual.html | 24 +- docs/manual.pmd | 18 +- docs/manual.txt | 27 +- docs/zint.1 | 8 +- docs/zint.1.pmd | 9 +- frontend/main.c | 62 +- frontend/tests/test_args.c | 133 +- frontend_qt/grpAztec.ui | 44 +- frontend_qt/grpCodabar.ui | 6 + frontend_qt/mainwindow.cpp | 104 +- frontend_qt/mainwindow.h | 7 +- win32/zint_cmdline_vc6/resource.h | 2 +- zint.spec | 16 +- 33 files changed, 4430 insertions(+), 927 deletions(-) diff --git a/ChangeLog b/ChangeLog index b888e800..293badc1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,12 @@ -Version 2.16.0.9 (dev) not released yet (2025-01-30) +Version 2.16.0.9 (dev) not released yet (2026-02-02) ==================================================== **Incompatible changes** ------------------------ -- New Qt Backend method `save_as_memfile()` to save file to memory - Aztec error codeword percentages adjusted to be at least advertised values - (may cause symbol size change or generation failure when specified) + (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 Changes ------- @@ -16,6 +17,10 @@ Changes add `ZINT_TEST`-only "--test" option to do various internal tests - GS1SE: exclude GS1_128 from requisite AIs check as may be spread across more than one barcode (ticket #348, props Harald Oehlmann and Terry Burton) +- AZTEC: add almost optimal encoding algorithm, previous algoritm available via + "--fast" (input_mode |= FAST_MODE) +- AZTEC: add new option "--azfull" (option_3 = ZINT_AZTEC_FULL) to only + consider Full symbols (not Compact ones) on automatic sizing Bugs ---- diff --git a/backend/Makefile.mingw b/backend/Makefile.mingw index 8b577713..e986ee0e 100644 --- a/backend/Makefile.mingw +++ b/backend/Makefile.mingw @@ -61,7 +61,7 @@ $(STATLIB): $(LIB_OBJ) @echo Linking $@... $(AR) $@ $(LIB_OBJ) -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 - + .PHONY: install uninstall clean dist install: diff --git a/backend/aztec.c b/backend/aztec.c index 591a1ca6..d4c2fc47 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -31,6 +31,7 @@ /* SPDX-License-Identifier: BSD-3-Clause */ #include +#include #include #include "common.h" #include "aztec.h" @@ -46,7 +47,7 @@ #define AZ_BIN_CAP_CWDS_S "1661" /* String version of (AZTEC_BIN_CAPACITY / 12) */ /* Count number of consecutive (. SP) or (, SP) Punct mode doubles for comparison against Digit mode encoding */ -static int az_count_doubles(const unsigned char source[], const int position, const int length) { +static int az_count_doubles(const unsigned char source[], const int length, const int position) { int i; for (i = position; i + 1 < length && (source[i] == '.' || source[i] == ',') && source[i + 1] == ' '; i += 2); @@ -55,7 +56,7 @@ static int az_count_doubles(const unsigned char source[], const int position, co } /* Count number of consecutive full stops or commas (can be encoded in Punct or Digit mode) */ -static int az_count_dotcomma(const unsigned char source[], const int position, const int length) { +static int az_count_dotcomma(const unsigned char source[], const int length, const int position) { int i; for (i = position; i < length && (source[i] == '.' || source[i] == ','); i++); @@ -64,7 +65,7 @@ static int az_count_dotcomma(const unsigned char source[], const int position, c } /* Count number of consecutive `chr`s */ -static int az_count_chr(const unsigned char source[], const int position, const int length, const unsigned char chr) { +static int az_count_chr(const unsigned char source[], const int length, const int position, const unsigned char chr) { int i; for (i = position; i < length && source[i] == chr; i++); @@ -72,50 +73,103 @@ static int az_count_chr(const unsigned char source[], const int position, const return i - position; } -/* Return mode following current, or 'E' if none */ -static char az_get_next_mode(const char encode_mode[], const int length, int i) { - const char current_mode = encode_mode[i]; +/* Return mode following current, or AZ_E if none */ +static char az_get_next_mode(const char modes[], const int length, int i) { + const char current_mode = AZ_MASK(modes[i]); do { i++; - } while (i < length && encode_mode[i] == current_mode); + } while (i < length && AZ_MASK(modes[i]) == current_mode); if (i >= length) { - return 'E'; + return AZ_E; } - return encode_mode[i]; + return AZ_MASK(modes[i]); } -/* Same as `z_bin_append_posn()`, except check for buffer overflow first */ -static int az_bin_append_posn(const int arg, const int length, char *binary, const int bin_posn) { +#define AZ_DOUBLE_PUNCT_NO_LEN_CHECK(s, i) \ + (((s)[i] == '\r' && (s)[(i) + 1] == '\n') \ + || ((s)[(i) + 1] == ' ' && ((s)[i] == '.' || (s)[i] == ',' || (s)[i] == ':'))) - if (bin_posn + length > AZTEC_BIN_CAPACITY) { - return 0; /* Fail */ +#define AZ_DOUBLE_PUNCT(s, l, i) ((i) + 1 < (l) && AZ_DOUBLE_PUNCT_NO_LEN_CHECK(s, i)) + +/* Reduce two letter combinations to one codeword marked as [abcd] in Punct mode */ +static int az_reduce(char *modes, unsigned char *source, const int length) { + int i = 0, j = 0; + + while (i + 1 < length) { + modes[j] = modes[i]; + if ((modes[i] == AZ_P || (modes[i] & AZ_PS)) && AZ_DOUBLE_PUNCT_NO_LEN_CHECK(source, i)) { + if (source[i] == '\r') { + source[j] = 'a'; + } else if (source[i] == '.') { + source[j] = 'b'; + } else if (source[i] == ',') { + source[j] = 'c'; + } else { + source[j] = 'd'; + } + i += 2; + } else { + source[j] = source[i++]; + } + j++; } - return z_bin_append_posn(arg, length, binary, bin_posn); + if (i < length) { + modes[j] = modes[i]; + source[j++] = source[i]; + } + + return j; } -/* Determine encoding modes and encode */ -static int aztec_text_process(const unsigned char source[], int length, int bp, char binary_string[], const int gs1, - const int gs1_bp, const int eci, char *p_current_mode, int *data_length, const int debug_print) { +/* Return mapped mode */ +static char az_mode_char(const char mode) { + /* Same order as AZ_U, AZ_L etc */ + static const char mode_chars[] = { '?', 'U', 'L', 'M', 'P', 'D', 'B', 'X', 'E' }; + char ch; - int i, j; - const char initial_mode = p_current_mode ? *p_current_mode : 'U'; + assert(ARRAY_SIZE(mode_chars) == AZ_E + 1); + + if (mode & AZ_US) { + assert(AZ_MASK(mode) == AZ_L || AZ_MASK(mode) == AZ_D); + return AZ_MASK(mode) == AZ_L ? 'r' : 't'; + } + assert(AZ_MASK(mode) < ARRAY_SIZE(mode_chars)); + + ch = mode_chars[AZ_MASK(mode)]; + if (mode & AZ_PS) { + assert(AZ_MASK(mode) != AZ_P); + return ch | 0x20; /* Make lower case */ + } + return ch; +} + +/* Print out the modes */ +static void az_print_modes(const char *modes, const int length) { + int i; + for (i = 0; i < length; i++) { + fputc(az_mode_char(modes[i]), stdout); + } + fputc('\n', stdout); +} + +/* Determine encoding modes using modified Annex H algorithm (`FAST_MODE`) */ +static int az_text_modes(char modes[], unsigned char source[], int length, const int gs1, const char initial_mode, + const int debug_print) { + int i; char current_mode; int count; char next_mode; int reduced_length; - char *encode_mode = (char *) z_alloca(length + 1); - unsigned char *reduced_source = (unsigned char *) z_alloca(length + 1); - char *reduced_encode_mode = (char *) z_alloca(length + 1); for (i = 0; i < length; i++) { - if (!z_isascii(source[i])) { - encode_mode[i] = 'B'; + if (!z_isascii(source[i]) || !AztecFlags[source[i]]) { + modes[i] = AZ_B; } else if (gs1 && source[i] == '\x1D') { - encode_mode[i] = 'P'; /* For FLG(n) & FLG(0) = FNC1 */ + modes[i] = AZ_P; /* For FLG(n) & FLG(0) = FNC1 */ } else { - encode_mode[i] = AztecModes[source[i]]; + modes[i] = AztecModes[source[i]]; } } @@ -124,279 +178,894 @@ static int aztec_text_process(const unsigned char source[], int length, int bp, current_mode = initial_mode; for (i = 0; i + 1 < length; i++) { /* Combination (CR LF) should always be in Punct mode */ - if (source[i] == 13 && source[i + 1] == 10) { - encode_mode[i] = 'P'; - encode_mode[i + 1] = 'P'; + if (source[i] == '\r' && source[i + 1] == '\n') { + modes[i] = AZ_P; + modes[i + 1] = AZ_P; /* Combination (: SP) should always be in Punct mode */ } else if (source[i] == ':' && source[i + 1] == ' ') { - encode_mode[i + 1] = 'P'; + modes[i + 1] = AZ_P; /* Combinations (. SP) and (, SP) sometimes use fewer bits in Digit mode */ - } else if ((source[i] == '.' || source[i] == ',') && source[i + 1] == ' ' && encode_mode[i] == 'X') { - count = az_count_doubles(source, i, length); - next_mode = az_get_next_mode(encode_mode, length, i); + } else if ((source[i] == '.' || source[i] == ',') && source[i + 1] == ' ' && modes[i] == AZ_X) { + count = az_count_doubles(source, length, i); + next_mode = az_get_next_mode(modes, length, i); - if (current_mode == 'U') { - if (next_mode == 'D' && count <= 5) { - memset(encode_mode + i, 'D', 2 * count); + if (current_mode == AZ_U) { + if (next_mode == AZ_D && count <= 5) { + memset(modes + i, AZ_D, 2 * count); } - } else if (current_mode == 'L') { - if (next_mode == 'D' && count <= 4) { - memset(encode_mode + i, 'D', 2 * count); + } else if (current_mode == AZ_L) { + if (next_mode == AZ_D && count <= 4) { + memset(modes + i, AZ_D, 2 * count); } - } else if (current_mode == 'M') { - if (next_mode == 'D' && count == 1) { - encode_mode[i] = 'D'; - encode_mode[i + 1] = 'D'; + } else if (current_mode == AZ_M) { + if (next_mode == AZ_D && count == 1) { + modes[i] = AZ_D; + modes[i + 1] = AZ_D; } - } else if (current_mode == 'D') { - if (next_mode != 'D' && count <= 4) { - memset(encode_mode + i, 'D', 2 * count); - } else if (next_mode == 'D' && count <= 7) { - memset(encode_mode + i, 'D', 2 * count); + } else if (current_mode == AZ_D) { + if (next_mode != AZ_D && count <= 4) { + memset(modes + i, AZ_D, 2 * count); + } else if (next_mode == AZ_D && count <= 7) { + memset(modes + i, AZ_D, 2 * count); } } /* Default is Punct mode */ - if (encode_mode[i] == 'X') { - encode_mode[i] = 'P'; - encode_mode[i + 1] = 'P'; + if (modes[i] == AZ_X) { + modes[i] = AZ_P; + modes[i + 1] = AZ_P; } } - if (encode_mode[i] != 'X' && encode_mode[i] != 'B') { - current_mode = encode_mode[i]; + if (modes[i] != AZ_X && modes[i] != AZ_B) { + current_mode = modes[i]; } } if (debug_print) { - fputs("First Pass:\n", stdout); - printf("%.*s\n", length, encode_mode); + printf("Initial Mode: %c\nFirst Pass (%d):\n", az_mode_char(initial_mode), length); + az_print_modes(modes, length); } /* Reduce two letter combinations to one codeword marked as [abcd] in Punct mode */ - i = 0; - j = 0; - while (i < length) { - reduced_encode_mode[j] = encode_mode[i]; - if (i + 1 < length) { - if (source[i] == 13 && source[i + 1] == 10) { /* CR LF */ - reduced_source[j] = 'a'; - i += 2; - } else if (source[i] == '.' && source[i + 1] == ' ' && encode_mode[i] == 'P') { - reduced_source[j] = 'b'; - i += 2; - } else if (source[i] == ',' && source[i + 1] == ' ' && encode_mode[i] == 'P') { - reduced_source[j] = 'c'; - i += 2; - } else if (source[i] == ':' && source[i + 1] == ' ') { - reduced_source[j] = 'd'; - i += 2; - } else { - reduced_source[j] = source[i++]; - } - } else { - reduced_source[j] = source[i++]; - } - j++; - } - - reduced_length = j; + reduced_length = az_reduce(modes, source, length); + assert(reduced_length > 0); current_mode = initial_mode; for (i = 0; i < reduced_length; i++) { + if (modes[i] == AZ_B) { + if (current_mode == AZ_D || current_mode == AZ_P) { + current_mode = AZ_U; + } + continue; + } /* Resolve Carriage Return (CR) which can be Punct or Mixed mode */ - if (reduced_source[i] == 13) { - count = az_count_chr(reduced_source, i, reduced_length, 13); - next_mode = az_get_next_mode(reduced_encode_mode, reduced_length, i); + if (source[i] == '\r') { + count = az_count_chr(source, reduced_length, i, '\r'); + next_mode = az_get_next_mode(modes, reduced_length, i); - if (current_mode == 'U' && (next_mode == 'U' || next_mode == 'B') && count == 1) { - reduced_encode_mode[i] = 'P'; + if (current_mode == AZ_U && (next_mode == AZ_U || next_mode == AZ_B) && count == 1) { + modes[i] = AZ_P; - } else if (current_mode == 'L' && (next_mode == 'L' || next_mode == 'B') && count == 1) { - reduced_encode_mode[i] = 'P'; + } else if (current_mode == AZ_L && (next_mode == AZ_L || next_mode == AZ_B) && count == 1) { + modes[i] = AZ_P; - } else if (current_mode == 'P' || next_mode == 'P') { - reduced_encode_mode[i] = 'P'; + } else if (current_mode == AZ_P || next_mode == AZ_P) { + modes[i] = AZ_P; } - if (current_mode == 'D') { - if ((next_mode == 'E' || next_mode == 'U' || next_mode == 'D' || next_mode == 'B') && count <= 2) { - memset(reduced_encode_mode + i, 'P', count); - } else if (next_mode == 'L' && count == 1) { - reduced_encode_mode[i] = 'P'; + if (current_mode == AZ_D) { + if ((next_mode == AZ_E || next_mode == AZ_U || next_mode == AZ_D || next_mode == AZ_B) + && count <= 2) { + memset(modes + i, AZ_P, count); + } else if (next_mode == AZ_L && count == 1) { + modes[i] = AZ_P; } } /* Default is Mixed mode */ - if (reduced_encode_mode[i] == 'X') { - reduced_encode_mode[i] = 'M'; + if (modes[i] == AZ_X) { + modes[i] = AZ_M; } /* Resolve full stop and comma which can be in Punct or Digit mode */ - } else if (reduced_source[i] == '.' || reduced_source[i] == ',') { - count = az_count_dotcomma(reduced_source, i, reduced_length); - next_mode = az_get_next_mode(reduced_encode_mode, reduced_length, i); + } else if (source[i] == '.' || source[i] == ',') { + count = az_count_dotcomma(source, reduced_length, i); + next_mode = az_get_next_mode(modes, reduced_length, i); - if (current_mode == 'U') { - if ((next_mode == 'U' || next_mode == 'L' || next_mode == 'M' || next_mode == 'B') && count == 1) { - reduced_encode_mode[i] = 'P'; + if (current_mode == AZ_U) { + if ((next_mode == AZ_U || next_mode == AZ_L || next_mode == AZ_M || next_mode == AZ_B) + && count == 1) { + modes[i] = AZ_P; } - } else if (current_mode == 'L') { - if (next_mode == 'L' && count <= 2) { - memset(reduced_encode_mode + i, 'P', count); - } else if ((next_mode == 'M' || next_mode == 'B') && count == 1) { - reduced_encode_mode[i] = 'P'; + } else if (current_mode == AZ_L) { + if (next_mode == AZ_L && count <= 2) { + memset(modes + i, AZ_P, count); + } else if ((next_mode == AZ_M || next_mode == AZ_B) && count == 1) { + modes[i] = AZ_P; } - } else if (current_mode == 'M') { - if ((next_mode == 'E' || next_mode == 'U' || next_mode == 'L' || next_mode == 'M') && count <= 4) { - memset(reduced_encode_mode + i, 'P', count); - } else if (next_mode == 'B' && count <= 2) { - memset(reduced_encode_mode + i, 'P', count); + } else if (current_mode == AZ_M) { + if ((next_mode == AZ_E || next_mode == AZ_U || next_mode == AZ_L || next_mode == AZ_M) + && count <= 4) { + memset(modes + i, AZ_P, count); + } else if (next_mode == AZ_B && count <= 2) { + memset(modes + i, AZ_P, count); } - } else if (current_mode == 'P' && next_mode != 'D' && count <= 9) { - memset(reduced_encode_mode + i, 'P', count); + } else if (current_mode == AZ_P && next_mode != AZ_D && count <= 9) { + memset(modes + i, AZ_P, count); } /* Default is Digit mode */ - if (reduced_encode_mode[i] == 'X') { - reduced_encode_mode[i] = 'D'; + if (modes[i] == AZ_X) { + modes[i] = AZ_D; } /* Resolve Space (SP) which can be any mode except Punct */ - } else if (reduced_source[i] == ' ') { - count = az_count_chr(reduced_source, i, reduced_length, ' '); - next_mode = az_get_next_mode(reduced_encode_mode, reduced_length, i); + } else if (source[i] == ' ') { + count = az_count_chr(source, reduced_length, i, ' '); + next_mode = az_get_next_mode(modes, reduced_length, i); - if (current_mode == 'U') { - if (next_mode == 'E' && count <= 5) { - memset(reduced_encode_mode + i, 'U', count); - } else if ((next_mode == 'U' || next_mode == 'L' || next_mode == 'M' || next_mode == 'P' - || next_mode == 'B') && count <= 9) { - memset(reduced_encode_mode + i, 'U', count); + if (current_mode == AZ_U) { + if (next_mode == AZ_E && count <= 5) { + memset(modes + i, AZ_U, count); + } else if ((next_mode == AZ_U || next_mode == AZ_L || next_mode == AZ_M || next_mode == AZ_P + || next_mode == AZ_B) && count <= 9) { + memset(modes + i, AZ_U, count); } - } else if (current_mode == 'L') { - if (next_mode == 'E' && count <= 5) { - memset(reduced_encode_mode + i, 'L', count); + } else if (current_mode == AZ_L) { + if (next_mode == AZ_E && count <= 5) { + memset(modes + i, AZ_L, count); - } else if (next_mode == 'U' && count == 1) { - reduced_encode_mode[i] = 'L'; + } else if (next_mode == AZ_U && count == 1) { + modes[i] = AZ_L; - } else if (next_mode == 'L' && count <= 14) { - memset(reduced_encode_mode + i, 'L', count); + } else if (next_mode == AZ_L && count <= 14) { + memset(modes + i, AZ_L, count); - } else if ((next_mode == 'M' || next_mode == 'P' || next_mode == 'B') && count <= 9) { - memset(reduced_encode_mode + i, 'L', count); + } else if ((next_mode == AZ_M || next_mode == AZ_P || next_mode == AZ_B) && count <= 9) { + memset(modes + i, AZ_L, count); } - } else if (current_mode == 'M') { - if ((next_mode == 'E' || next_mode == 'U') && count <= 9) { - memset(reduced_encode_mode + i, 'M', count); + } else if (current_mode == AZ_M) { + if ((next_mode == AZ_E || next_mode == AZ_U) && count <= 9) { + memset(modes + i, AZ_M, count); - } else if ((next_mode == 'L' || next_mode == 'B') && count <= 14) { - memset(reduced_encode_mode + i, 'M', count); + } else if ((next_mode == AZ_L || next_mode == AZ_B) && count <= 14) { + memset(modes + i, AZ_M, count); - } else if ((next_mode == 'M' || next_mode == 'P') && count <= 19) { - memset(reduced_encode_mode + i, 'M', count); + } else if ((next_mode == AZ_M || next_mode == AZ_P) && count <= 19) { + memset(modes + i, AZ_M, count); } - } else if (current_mode == 'P') { - if (next_mode == 'E' && count <= 5) { - memset(reduced_encode_mode + i, 'U', count); + } else if (current_mode == AZ_P) { + if (next_mode == AZ_E && count <= 5) { + memset(modes + i, AZ_U, count); - } else if ((next_mode == 'U' || next_mode == 'L' || next_mode == 'M' || next_mode == 'P' - || next_mode == 'B') && count <= 9) { - memset(reduced_encode_mode + i, 'U', count); + } else if ((next_mode == AZ_U || next_mode == AZ_L || next_mode == AZ_M || next_mode == AZ_P + || next_mode == AZ_B) && count <= 9) { + memset(modes + i, AZ_U, count); } } /* Default is Digit mode */ - if (reduced_encode_mode[i] == 'X') { - reduced_encode_mode[i] = 'D'; + if (modes[i] == AZ_X) { + modes[i] = AZ_D; } } - if (reduced_encode_mode[i] != 'B') { - current_mode = reduced_encode_mode[i]; - } + current_mode = modes[i]; } /* Decide when to use P/S instead of P/L and U/S instead of U/L */ current_mode = initial_mode; for (i = 0; i < reduced_length; i++) { - if (reduced_encode_mode[i] != current_mode) { + if (modes[i] == AZ_B) { + if (current_mode == AZ_D || current_mode == AZ_P) { + current_mode = AZ_U; + } + continue; + } + if (modes[i] != current_mode) { - for (count = 0; i + count < reduced_length && reduced_encode_mode[i + count] == reduced_encode_mode[i]; - count++); - next_mode = az_get_next_mode(reduced_encode_mode, reduced_length, i); + for (count = 0; i + count < reduced_length && modes[i + count] == modes[i]; count++); + next_mode = az_get_next_mode(modes, reduced_length, i); - if (reduced_encode_mode[i] == 'P') { - if (current_mode == 'U' && count <= 2) { - memset(reduced_encode_mode + i, 'p', count); + if (modes[i] == AZ_P) { + if (current_mode == AZ_U && count <= 2) { + memset(modes + i, AZ_U_PS, count); - } else if (current_mode == 'L' && next_mode != 'U' && count <= 2) { - memset(reduced_encode_mode + i, 'p', count); + } else if (current_mode == AZ_L && next_mode != AZ_U && count <= 2) { + memset(modes + i, AZ_L_PS, count); - } else if (current_mode == 'L' && next_mode == 'U' && count == 1) { - reduced_encode_mode[i] = 'p'; + } else if (current_mode == AZ_L && next_mode == AZ_U && count == 1) { + modes[i] = AZ_L_PS; - } else if (current_mode == 'M' && next_mode != 'M' && count == 1) { - reduced_encode_mode[i] = 'p'; + } else if (current_mode == AZ_M && next_mode != AZ_M && count == 1) { + modes[i] = AZ_M_PS; - } else if (current_mode == 'M' && next_mode == 'M' && count <= 2) { - memset(reduced_encode_mode + i, 'p', count); + } else if (current_mode == AZ_M && next_mode == AZ_M && count <= 2) { + memset(modes + i, AZ_M_PS, count); - } else if (current_mode == 'D' && next_mode != 'D' && count <= 3) { - memset(reduced_encode_mode + i, 'p', count); + } else if (current_mode == AZ_D && next_mode != AZ_D && count <= 3) { + memset(modes + i, AZ_D_PS, count); - } else if (current_mode == 'D' && next_mode == 'D' && count <= 6) { - memset(reduced_encode_mode + i, 'p', count); + } else if (current_mode == AZ_D && next_mode == AZ_D && count <= 6) { + memset(modes + i, AZ_D_PS, count); } - } else if (reduced_encode_mode[i] == 'U') { - if (current_mode == 'L' && (next_mode == 'L' || next_mode == 'M') && count <= 2) { - memset(reduced_encode_mode + i, 'u', count); + } else if (modes[i] == AZ_U) { + if (current_mode == AZ_L && (next_mode == AZ_L || next_mode == AZ_M) && count <= 2) { + memset(modes + i, AZ_L_US, count); - } else if (current_mode == 'L' && (next_mode == 'E' || next_mode == 'D' || next_mode == 'B' - || next_mode == 'P') && count == 1) { - reduced_encode_mode[i] = 'u'; + } else if (current_mode == AZ_L && (next_mode == AZ_E || next_mode == AZ_D || next_mode == AZ_B + || next_mode == AZ_P) && count == 1) { + modes[i] = AZ_L_US; - } else if (current_mode == 'D' && next_mode == 'D' && count == 1) { - reduced_encode_mode[i] = 'u'; + } else if (current_mode == AZ_D && next_mode == AZ_D && count == 1) { + modes[i] = AZ_D_US; - } else if (current_mode == 'D' && next_mode == 'P' && count <= 2) { - memset(reduced_encode_mode + i, 'u', count); + } else if (current_mode == AZ_D && next_mode == AZ_P && count <= 2) { + memset(modes + i, AZ_D_US, count); } } } - if (reduced_encode_mode[i] != 'p' && reduced_encode_mode[i] != 'u' && reduced_encode_mode[i] != 'B') { - current_mode = reduced_encode_mode[i]; - } + current_mode = AZ_MASK(modes[i]); } if (debug_print) { - printf("%.*s\n", reduced_length, reduced_source); - printf("%.*s\n", reduced_length, reduced_encode_mode); + printf("Final Pass (%d):\n%.*s\n", reduced_length, reduced_length, source); + az_print_modes(modes, reduced_length); } - if (bp == gs1_bp && gs1) { + return reduced_length; +} + +/* Cheapo to check if input all of one type of Byte-only, Upper, Lower or Digit, returning AZ_B, AZ_U, AZ_L or AZ_D + resp., or 0 if not */ +static char az_all_byte_only_or_uld(const unsigned char source[], const int length) { + int i; + int byte_only, upper, lower, digit; + + for (i = 0, byte_only = 0; i < length; i++) { + byte_only += !z_isascii(source[i]) || !AztecFlags[source[i]]; + } + if (byte_only) { + return byte_only == length ? AZ_B : 0; + } + for (i = 0, upper = 0, lower = 0, digit = 0; i < length; i++) { + upper += !!(AztecFlags[source[i]] & AZ_U_F); + lower += !!(AztecFlags[source[i]] & AZ_L_F); + /* Dot, comma & space only non-digit AZ_D_F, exclude in case they're AZ_P doubles */ + digit += z_isdigit(source[i]); + } + return upper == length ? AZ_U : lower == length ? AZ_L : digit == length ? AZ_D : 0; +} + +/* Count number of initial consecutive punct chars (with no special treatment of multi-mode chars, unlike + following `az_count_punct()`), and assuming not GS1_MODE */ +static int az_count_initial_puncts(const unsigned char source[], const int length) { + int i; + + for (i = 0; i < length; i++) { + if (AZ_DOUBLE_PUNCT(source, length, i)) { + i++; + } else if (!z_isascii(source[i]) || !(AztecFlags[source[i]] & AZ_P_F)) { + break; + } + } + return i; +} + +/* Count number of consecutive punct chars, treating multi-modes CR (without LF), dot and comma singularly */ +static int az_count_punct(const unsigned char source[], const int length, const int position, const int gs1, + int *begins_double) { + const unsigned ch = source[position]; + + assert(z_isascii(ch)); + + *begins_double = AZ_DOUBLE_PUNCT(source, length, position); + + if (!*begins_double && (ch == '\r' || ch == '.' || ch == ',')) { + return 1; + } + if ((gs1 && ch == '\x1D') || (AztecFlags[ch] & AZ_P_F)) { + int i; + if (gs1) { + for (i = position + 1 + *begins_double; i < length && z_isascii(source[i]); i++) { + if (AZ_DOUBLE_PUNCT(source, length, i)) { + i++; + } else if (source[i] != '\x1D' && (!(AztecFlags[source[i]] & AZ_P_F) + || source[i] == '\r' || source[i] == '.' || source[i] == ',')) { + break; + } + } + return i - position; + } else { + for (i = position + 1 + *begins_double; i < length && z_isascii(source[i]); i++) { + if (AZ_DOUBLE_PUNCT(source, length, i)) { + i++; + } else if (!(AztecFlags[source[i]] & AZ_P_F) + || source[i] == '\r' || source[i] == '.' || source[i] == ',') { + break; + } + } + return i - position; + } + } + + return 0; +} + +/* Count number of consecutive Upper chars, treating multi-mode space singularly */ +static int az_count_upper(const unsigned char source[], const int length, const int position) { + int i; + + if (source[position] == ' ') { + return 1; + } + for (i = position; i < length && source[i] != ' ' && z_isascii(source[i]) && (AztecFlags[source[i]] & AZ_U_F); + i++); + + return i - position; +} + +/* Count number of consecutive Lower chars, treating multi-mode space singularly */ +static int az_count_lower(const unsigned char source[], const int length, const int position) { + int i; + + if (source[position] == ' ') { + return 1; + } + for (i = position; i < length && source[i] != ' ' && z_isascii(source[i]) && (AztecFlags[source[i]] & AZ_L_F); + i++); + + return i - position; +} + +/* Count number of consecutive Mixed chars, treating multi-mode CR singularly */ +static int az_count_mixed(const unsigned char source[], const int length, const int position, const int gs1) { + int i; + + if (source[position] == '\r') { + return 1; + } + for (i = position; i < length && z_isascii(source[i]) && (AztecFlags[source[i]] & AZ_M_F) + && (!gs1 || source[i] != '\x1D') && source[i] != '\r'; i++); + + return i - position; +} + +/* Count number of consecutive Digit chars, treating multi-modes dot, comma and space singularly */ +static int az_count_digit(const unsigned char source[], const int length, const int position) { + int i; + + if (source[position] == '.' || source[position] == ',' || source[position] == ' ') { + return 1; + } + for (i = position; i < length && z_isdigit(source[i]); i++); /* Dot, comma & space only non-digit AZ_D_F */ + + return i - position; +} + +/* Count number of consecutive Byte-only chars */ +static int az_count_byte_only(const unsigned char source[], const int length, const int position) { + int i; + + for (i = position; i < length && (!z_isascii(source[i]) || !AztecFlags[source[i]]); i++); + + return i - position; +} + +/* Bit-size of encoding punct chars */ +static int az_punct_size(const unsigned char source[], const int len, const int gs1) { + int i; + int cnt_doubles = 0; + int cnt_fnc1s = 0; + int size; + + if (gs1) { + for (i = 0; i < len; i++) { + cnt_doubles += AZ_DOUBLE_PUNCT(source, len, i); + cnt_fnc1s += (source[i] == '\x1D'); + } + } else { + for (i = 0; i < len; i++) { + cnt_doubles += AZ_DOUBLE_PUNCT(source, len, i); + } + } + size = 5 * (len - cnt_doubles - cnt_fnc1s) + 8 * cnt_fnc1s; + + return size; +} + +struct az_edge { + unsigned char mode; + unsigned char startMode; /* For Byte edges */ + unsigned short from; /* Position in input data, 0-based */ + unsigned short len; + unsigned short size; /* Cumulative number of bits */ + unsigned short bytes; /* Byte count for AZ_X */ + unsigned short previous; /* Index into edges array */ +}; + +/* Note 1st row of edges not used so valid previous cannot point there, i.e. won't be zero */ +#define AZ_PREVIOUS(edges, edge) \ + ((edge)->previous ? (edges) + (edge)->previous : NULL) + +#if 0 +#include "aztec_trace.h" +#else +#define AZ_TRACE_Edges(px, s, l, im, p, v) +#define AZ_TRACE_AddEdge(s, l, es, p, v, e) do { (void)(s); (void)(l); } while (0) +#define AZ_TRACE_NotAddEdge(s, l, es, p, v, ij, e) do { (void)(s); (void)(l); } while (0) +#endif + +/* Initialize a new edge. */ +static void az_new_Edge(const struct az_edge *edges, const char mode, const unsigned char *source, const int from, + const int len, const int gs1, const int initial_mode, const struct az_edge *previous, + struct az_edge *edge) { + + /* Bit-size of switching modes from row to col */ + static const unsigned int switch_sizes[AZ_NUM_MODES - 1][AZ_NUM_MODES] = { + /* U L M P D B */ + /*U*/ { 0, 5, 5, 5 + 5, 5, 5 + 5, }, + /*L*/ { 5 + 4, 0, 5, 5 + 5, 5, 5 + 5, }, + /*M*/ { 5, 5, 0, 5, 5 + 5, 5 + 5, }, + /*P*/ { 5, 5 + 5, 5 + 5, 0, 5 + 5, 5 + 5 + 5, }, + /*D*/ { 4, 4 + 5, 4 + 5, 4 + 5 + 5, 0, 4 + 5 + 5, }, + /*B - not used*/ + }; + const int mask_mode = AZ_MASK(mode); + int previousMode; + int previousStartMode; + + assert(len > 0); + + edge->mode = mode; + edge->from = from; + edge->len = len; + if (previous) { + edge->size = previous->size; + edge->previous = previous - edges; + previousMode = AZ_MASK(previous->mode); + previousStartMode = previous->startMode; + } else { + edge->size = 0; + edge->previous = 0; + previousMode = AZ_MASK(initial_mode); + previousStartMode = previousMode; + } + + switch (mask_mode) { + case AZ_U: + case AZ_L: + case AZ_M: + if (mode & AZ_PS) { + assert(len <= 2); + edge->size += 5 /*P/S*/ + az_punct_size(source + from, len, gs1); + } else if (mode & AZ_US) { + assert(len == 1); + assert(mask_mode == AZ_L); + edge->size += 5 /*U/S*/ + 5; + } else { + edge->size += 5 * len; + } + edge->size += switch_sizes[(previousMode == AZ_B ? previousStartMode : previousMode) - 1][mask_mode - 1]; + edge->startMode = mask_mode; + break; + case AZ_P: + assert(mask_mode == mode); + edge->size += az_punct_size(source + from, len, gs1); + edge->size += switch_sizes[(previousMode == AZ_B ? previousStartMode : previousMode) - 1][mask_mode - 1]; + edge->startMode = AZ_U; + break; + case AZ_D: + if (mode & AZ_PS) { + assert(len <= 2); + edge->size += 4 /*P/S*/ + az_punct_size(source + from, len, gs1); + } else if (mode & AZ_US) { + assert(len == 1); + edge->size += 4 /*U/S*/ + 5; + } else { + edge->size += 4 * len; + } + edge->size += switch_sizes[(previousMode == AZ_B ? previousStartMode : previousMode) - 1][mask_mode - 1]; + edge->startMode = AZ_U; + break; + case AZ_B: + assert(mask_mode == mode); + if (previousMode != mask_mode) { + edge->size += switch_sizes[previousMode - 1][mask_mode - 1]; + if (len > 31) { + edge->size += 11; + } + edge->bytes = len; + } else { + if (len + previous->bytes > 31) { + if (previous->bytes <= 31) { + /* Note this may be sub-optimal as not taken into account when previous edge added */ + edge->size += 11; + } + } + edge->bytes = len + previous->bytes; + } + edge->size += 8 * len; + edge->startMode = previousStartMode; + break; + } + assert(edge->startMode && AZ_MASK(edge->startMode) == edge->startMode && edge->startMode != AZ_B); +} + +/* Add an edge for a mode at a vertex if no existing edge or if more optimal than existing edge */ +static void az_addEdge(const unsigned char *source, const int length, struct az_edge *edges, const char mode, + const int from, const int len, const int gs1, const int initial_mode, struct az_edge *previous) { + struct az_edge edge; + const int vertexIndex = from + len; + const int v_ij = vertexIndex * AZ_NUM_MODES + AZ_MASK(mode) - 1; + + az_new_Edge(edges, mode, source, from, len, gs1, initial_mode, previous, &edge); + + if (edges[v_ij].mode == 0 || edges[v_ij].size > edge.size) { + AZ_TRACE_AddEdge(source, length, edges, previous, vertexIndex, &edge); + edges[v_ij] = edge; + } else { + AZ_TRACE_NotAddEdge(source, length, edges, previous, vertexIndex, v_ij, &edge); + } +} + +/* Add edges for the various modes at a vertex */ +static void az_addEdges(const unsigned char source[], const int length, const int gs1, const int initial_mode, + struct az_edge *edges, const int from, struct az_edge *previous) { + const unsigned char ch = source[from]; + int len; + + if (z_isascii(ch) && AztecFlags[ch]) { + int begins_double; + + if ((len = az_count_punct(source, length, from, gs1, &begins_double))) { + az_addEdge(source, length, edges, AZ_P, from, len, gs1, initial_mode, previous); + + az_addEdge(source, length, edges, AZ_U_PS, from, 1 + begins_double, gs1, initial_mode, previous); + az_addEdge(source, length, edges, AZ_L_PS, from, 1 + begins_double, gs1, initial_mode, previous); + if (ch != '\r') { + az_addEdge(source, length, edges, AZ_M_PS, from, 1 + begins_double, gs1, initial_mode, previous); + } + if (ch != '.' && ch != ',') { + az_addEdge(source, length, edges, AZ_D_PS, from, 1 + begins_double, gs1, initial_mode, previous); + } + } + if ((len = az_count_upper(source, length, from))) { + az_addEdge(source, length, edges, AZ_U, from, len, gs1, initial_mode, previous); + } + if ((len = az_count_lower(source, length, from))) { + az_addEdge(source, length, edges, AZ_L, from, len, gs1, initial_mode, previous); + } + if ((len = az_count_mixed(source, length, from, gs1))) { + az_addEdge(source, length, edges, AZ_M, from, len, gs1, initial_mode, previous); + } + if ((len = az_count_digit(source, length, from))) { + az_addEdge(source, length, edges, AZ_D, from, len, gs1, initial_mode, previous); + } + + if (z_isupper(ch)) { /* Space only non-upper AZ_U_F */ + az_addEdge(source, length, edges, AZ_L_US, from, 1, gs1, initial_mode, previous); + az_addEdge(source, length, edges, AZ_D_US, from, 1, gs1, initial_mode, previous); + } + } + + if (!gs1 || ch != '\x1D') { + if (ch == '\r' || ch == ' ' || ch == '.' || ch == ',') { /* Multi-mode chars */ + len = 1; + } else { + len = 1 + az_count_byte_only(source, length, from + 1); + } + az_addEdge(source, length, edges, AZ_B, from, len, gs1, initial_mode, previous); + } +} + +/* Default, close to optimal encoding, using Dijkstra-based algorithm adapted from Data Matrix one by Alex Geller. + Note that a bitstream that is encoded to be shortest based on mode choices may not be so after bit-stuffing */ +static int az_define_modes(char modes[], unsigned char source[], const int length, const int gs1, + const char initial_mode, const int debug_print) { + int i, j, v_i; + int minimalJ, minimalSize; + struct az_edge *edge; + int mode_end, mode_len; + int reduced_length; + struct az_edge *edges; + + if ((length + 1) * AZ_NUM_MODES > USHRT_MAX + || !(edges = (struct az_edge *) calloc((length + 1) * AZ_NUM_MODES, sizeof(struct az_edge)))) { + return 0; + } + az_addEdges(source, length, gs1, initial_mode, edges, 0, NULL); + + AZ_TRACE_Edges("DEBUG Initial situation\n", source, length, initial_mode, edges, 0); + + assert(length > 0); /* Suppress clang-tidy clang-analyzer-security.ArrayBound warning */ + + for (i = 1; i < length; i++) { + v_i = i * AZ_NUM_MODES; + for (j = 0; j < AZ_NUM_MODES; j++) { + if (edges[v_i + j].mode) { + az_addEdges(source, length, gs1, initial_mode, edges, i, edges + v_i + j); + } + } + AZ_TRACE_Edges("DEBUG situation after adding edges to vertices at position %d\n", source, length, + initial_mode, edges, i); + } + + AZ_TRACE_Edges("DEBUG Final situation\n", source, length, initial_mode, edges, length); + + #if 0 + { + const int fw = length * AZ_NUM_MODES > 100 ? 3 : 2; + fputs("Dump of edges:\n", stdout); + for (i = 0; i < length + 1; i++) { + v_i = i * AZ_NUM_MODES; + for (j = 0; j < AZ_NUM_MODES; j++) { + fprintf(stdout, " %*d(%02X,%*d,%*d,%*d)", + fw, v_i + j, edges[v_i + j].mode, fw, edges[v_i + j].len, fw, edges[v_i + j].size, + fw, edges[v_i + j].previous); + } + fputc('\n', stdout); + } + fputc('\n', stdout); + } + #endif + + v_i = length * AZ_NUM_MODES; + minimalJ = -1; + minimalSize = INT_MAX; + for (j = 0; j < AZ_NUM_MODES; j++) { + edge = edges + v_i + j; + if (edge->mode) { + if (debug_print) { + printf("edges[%d][%d][0] size %d\n", length, j, edge->size); + } + if (edge->size < minimalSize) { + minimalSize = edge->size; + minimalJ = j; + if (debug_print) printf(" set minimalJ %d\n", minimalJ); + } + } else { + if (debug_print) printf("edges[%d][%d][0] NULL\n", length, j); + } + } + assert(minimalJ >= 0); + + edge = edges + v_i + minimalJ; + mode_len = 0; + mode_end = length; + while (edge) { + const char current_mode = edge->mode; + mode_len += edge->len; + edge = AZ_PREVIOUS(edges, edge); + if (!edge || edge->mode != current_mode) { + for (i = mode_end - mode_len; i < mode_end; i++) { + modes[i] = current_mode; + } + mode_end = mode_end - mode_len; + mode_len = 0; + } + } + + reduced_length = az_reduce(modes, source, length); + + if (debug_print) { + printf(" Modes (%d):\n", reduced_length); + az_print_modes(modes, reduced_length); + } + assert(mode_end == 0); + + free(edges); + + return reduced_length; +} + +/* Calculate the binary size */ +static int az_text_size(const char *modes, const unsigned char *source, int length, const int gs1, const int set_gs1, + const int eci, const char initial_mode, const int eci_latch, int *byte_counts) { + int i; + int byte_i = 0; + char current_mode; + int size = 0; + + if (set_gs1 && gs1) { + size += 5 + 5 + 3; + } + if (eci != 0) { + if (initial_mode != AZ_P) { + if (eci_latch) { + if (initial_mode != AZ_M) { + if (initial_mode == AZ_D) { + size += 4; + } + size += 5; + } + size += 5; + } else { + size += initial_mode == AZ_D ? 4 : 5; + } + } + size += 5 + 3 + 4 + 4 * ((eci > 9) + (eci > 99) + (eci > 999) + (eci > 9999) + (eci > 99999)); + } + current_mode = eci_latch ? AZ_P : initial_mode; + for (i = 0; i < length; i++) { + int current_mode_set = 0; + if (modes[i] != current_mode) { + /* Change mode */ + const char mask_mode = AZ_MASK(modes[i]); + if (mask_mode != current_mode) { + size += 4 + (current_mode != AZ_D); + } + if (current_mode == AZ_U) { + if (mask_mode == AZ_P) { + size += 5; + } + } else if (current_mode == AZ_L) { + if (mask_mode == AZ_P) { + size += 5; + } else if (mask_mode == AZ_U) { + size += 4; + } + } else if (current_mode == AZ_M) { + if (mask_mode == AZ_D) { + size += 5; + } + } else if (current_mode == AZ_P) { + if (mask_mode != AZ_U) { + size += 5; + if (mask_mode == AZ_B) { + current_mode = AZ_U; + current_mode_set = 1; + } + } + } else if (current_mode == AZ_D) { + if (mask_mode == AZ_L || mask_mode == AZ_M) { + size += 5; + } else if (mask_mode == AZ_P) { + size += 5 + 5; + } else if (mask_mode == AZ_B) { + size += 5; + current_mode = AZ_U; + current_mode_set = 1; + } + } + if (modes[i] & AZ_PS) { + size += 4 + (mask_mode != AZ_D); + } else if (modes[i] & AZ_US) { + size += 4 + (mask_mode != AZ_D); + } + + /* Byte mode - process full block here */ + if (modes[i] == AZ_B) { + int big_batch = 0, count; + for (count = 0; i + count < length && modes[i + count] == AZ_B; count++); + + if (count > 2047 + 2078) { /* Can't be more than 19968 / 8 = 2496 */ + return 0; + } + byte_counts[byte_i++] = count; + + if (count > 2047) { /* Max 11-bit number */ + big_batch = count > 2078 ? 2078 : count; + /* Put 00000 followed by 11-bit number of bytes less 31 */ + size += 16 + 8 * big_batch; + i += big_batch; + count -= big_batch; + } + if (count) { + if (big_batch) { + size += 5; + } + if (count > 31) { + assert(count <= 2078); + /* Put 00000 followed by 11-bit number of bytes less 31 */ + size += 16; + } else { + /* Put 5-bit number of bytes */ + size += 5; + } + size += 8 * count; + i += count; + } + i--; + continue; + } + + if (current_mode != mask_mode && !current_mode_set) { + current_mode = mask_mode; + } + } + + if (modes[i] == AZ_U || (modes[i] & AZ_US) || modes[i] == AZ_L || modes[i] == AZ_M) { + size += 5; + } else if (modes[i] == AZ_P || (modes[i] & AZ_PS)) { + size += 5; + if (gs1 && source[i] == '\x1D') { + size += 3; + } + } else if (modes[i] == AZ_D) { + size += 4; + } + } + + return size; +} + +/* Determine encoding modes and encode */ +static int az_text_process(unsigned char *source, int length, int bp, char *binary_string, const int gs1, + const int gs1_bp, const int eci, const int fast_encode, char *p_current_mode, int *data_length, + const int debug_print) { + int i, j; + char current_mode; + int reduced_length; + char *modes = (char *) z_alloca(length + 1); + int *byte_counts = (int *) z_alloca(sizeof(int) * length); /* Cache of Byte-run counts */ + int byte_i = 0; + int size; + int eci_latch = 0; + const char initial_mode = p_current_mode ? *p_current_mode : AZ_U; + const int set_gs1 = bp == gs1_bp; + const int all_byte_only_or_uld = az_all_byte_only_or_uld(source, length); +#ifndef NDEBUG + const int initial_bp = bp; +#endif + + /* See if it's worthwhile latching to AZ_P when have ECI */ + if (!all_byte_only_or_uld && eci && initial_mode != AZ_P && az_count_initial_puncts(source, length) + > 2 + (initial_mode == AZ_D)) { + assert(!gs1); + eci_latch = 1; + } + + if (all_byte_only_or_uld) { + memset(modes, all_byte_only_or_uld, length); + reduced_length = length; + } else if (fast_encode) { + reduced_length = az_text_modes(modes, source, length, gs1, eci_latch ? AZ_P : initial_mode, debug_print); + } else { + reduced_length = az_define_modes(modes, source, length, gs1, eci_latch ? AZ_P : initial_mode, debug_print); + } + + size = az_text_size(modes, source, reduced_length, gs1, set_gs1, eci, initial_mode, eci_latch, byte_counts); + if (size == 0 || bp + size > AZTEC_BIN_CAPACITY) { + return 0; + } + + if (set_gs1 && gs1) { + assert(initial_mode == AZ_U); bp = z_bin_append_posn(0, 5, binary_string, bp); /* P/S */ bp = z_bin_append_posn(0, 5, binary_string, bp); /* FLG(n) */ bp = z_bin_append_posn(0, 3, binary_string, bp); /* FLG(0) */ } if (eci != 0) { - bp = z_bin_append_posn(0, initial_mode == 'D' ? 4 : 5, binary_string, bp); /* P/S */ + if (initial_mode != AZ_P) { + if (eci_latch) { + if (initial_mode != AZ_M) { + if (initial_mode == AZ_D) { + bp = z_bin_append_posn(14, 4, binary_string, bp); /* U/L */ + } + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + } + bp = z_bin_append_posn(30, 5, binary_string, bp); /* P/L */ + } else { + bp = z_bin_append_posn(0, initial_mode == AZ_D ? 4 : 5, binary_string, bp); /* P/S */ + } + } bp = z_bin_append_posn(0, 5, binary_string, bp); /* FLG(n) */ if (eci <= 9) { bp = z_bin_append_posn(1, 3, binary_string, bp); /* FLG(1) */ @@ -434,229 +1103,187 @@ static int aztec_text_process(const unsigned char source[], int length, int bp, } } - current_mode = initial_mode; + current_mode = eci_latch ? AZ_P : initial_mode; for (i = 0; i < reduced_length; i++) { - - if (reduced_encode_mode[i] != current_mode) { + int current_mode_set = 0; + if (modes[i] != current_mode) { /* Change mode */ - if (current_mode == 'U') { - switch (reduced_encode_mode[i]) { - case 'L': - if (!(bp = az_bin_append_posn(28, 5, binary_string, bp))) return 0; /* L/L */ - break; - case 'M': - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* M/L */ - break; - case 'P': - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* M/L */ - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* P/L */ - break; - case 'p': - if (!(bp = az_bin_append_posn(0, 5, binary_string, bp))) return 0; /* P/S */ - break; - case 'D': - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* D/L */ - break; - case 'B': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* B/S */ - break; + const char mask_mode = AZ_MASK(modes[i]); + if (current_mode == AZ_U) { + if (mask_mode == AZ_L) { + bp = z_bin_append_posn(28, 5, binary_string, bp); /* L/L */ + } else if (mask_mode == AZ_M) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + } else if (mask_mode == AZ_P) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + bp = z_bin_append_posn(30, 5, binary_string, bp); /* P/L */ + } else if (mask_mode == AZ_D) { + bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ + } else if (mask_mode == AZ_B) { + bp = z_bin_append_posn(31, 5, binary_string, bp); /* B/S */ } - } else if (current_mode == 'L') { - switch (reduced_encode_mode[i]) { - case 'U': - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* D/L */ - if (!(bp = az_bin_append_posn(14, 4, binary_string, bp))) return 0; /* U/L */ - break; - case 'u': - if (!(bp = az_bin_append_posn(28, 5, binary_string, bp))) return 0; /* U/S */ - break; - case 'M': - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* M/L */ - break; - case 'P': - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* M/L */ - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* P/L */ - break; - case 'p': - if (!(bp = az_bin_append_posn(0, 5, binary_string, bp))) return 0; /* P/S */ - break; - case 'D': - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* D/L */ - break; - case 'B': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* B/S */ - break; + } else if (current_mode == AZ_L) { + if (mask_mode == AZ_U) { + bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ + bp = z_bin_append_posn(14, 4, binary_string, bp); /* U/L */ + } else if (mask_mode == AZ_M) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + } else if (mask_mode == AZ_P) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + bp = z_bin_append_posn(30, 5, binary_string, bp); /* P/L */ + } else if (mask_mode == AZ_D) { + bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ + } else if (mask_mode == AZ_B) { + bp = z_bin_append_posn(31, 5, binary_string, bp); /* B/S */ } - } else if (current_mode == 'M') { - switch (reduced_encode_mode[i]) { - case 'U': - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* U/L */ - break; - case 'L': - if (!(bp = az_bin_append_posn(28, 5, binary_string, bp))) return 0; /* L/L */ - break; - case 'P': - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* P/L */ - break; - case 'p': - if (!(bp = az_bin_append_posn(0, 5, binary_string, bp))) return 0; /* P/S */ - break; - case 'D': - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* U/L */ - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* D/L */ - break; - case 'B': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* B/S */ - break; + } else if (current_mode == AZ_M) { + if (mask_mode == AZ_U) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* U/L */ + } else if (mask_mode == AZ_L) { + bp = z_bin_append_posn(28, 5, binary_string, bp); /* L/L */ + } else if (mask_mode == AZ_P) { + bp = z_bin_append_posn(30, 5, binary_string, bp); /* P/L */ + } else if (mask_mode == AZ_D) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* U/L */ + bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ + } else if (mask_mode == AZ_B) { + bp = z_bin_append_posn(31, 5, binary_string, bp); /* B/S */ } - } else if (current_mode == 'P') { - switch (reduced_encode_mode[i]) { - case 'U': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* U/L */ - break; - case 'L': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* U/L */ - if (!(bp = az_bin_append_posn(28, 5, binary_string, bp))) return 0; /* L/L */ - break; - case 'M': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* U/L */ - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* M/L */ - break; - case 'D': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* U/L */ - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* D/L */ - break; - case 'B': - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* U/L */ - current_mode = 'U'; - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* B/S */ - break; + } else if (current_mode == AZ_P) { + if (mask_mode != current_mode) { + bp = z_bin_append_posn(31, 5, binary_string, bp); /* U/L */ + if (mask_mode == AZ_L) { + bp = z_bin_append_posn(28, 5, binary_string, bp); /* L/L */ + } else if (mask_mode == AZ_M) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + } else if (mask_mode == AZ_D) { + bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ + } else if (mask_mode == AZ_B) { + current_mode = AZ_U; + current_mode_set = 1; + bp = z_bin_append_posn(31, 5, binary_string, bp); /* B/S */ + } } - } else if (current_mode == 'D') { - switch (reduced_encode_mode[i]) { - case 'U': - if (!(bp = az_bin_append_posn(14, 4, binary_string, bp))) return 0; /* U/L */ - break; - case 'u': - if (!(bp = az_bin_append_posn(15, 4, binary_string, bp))) return 0; /* U/S */ - break; - case 'L': - if (!(bp = az_bin_append_posn(14, 4, binary_string, bp))) return 0; /* U/L */ - if (!(bp = az_bin_append_posn(28, 5, binary_string, bp))) return 0; /* L/L */ - break; - case 'M': - if (!(bp = az_bin_append_posn(14, 4, binary_string, bp))) return 0; /* U/L */ - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* M/L */ - break; - case 'P': - if (!(bp = az_bin_append_posn(14, 4, binary_string, bp))) return 0; /* U/L */ - if (!(bp = az_bin_append_posn(29, 5, binary_string, bp))) return 0; /* M/L */ - if (!(bp = az_bin_append_posn(30, 5, binary_string, bp))) return 0; /* P/L */ - break; - case 'p': - if (!(bp = az_bin_append_posn(0, 4, binary_string, bp))) return 0; /* P/S */ - break; - case 'B': - if (!(bp = az_bin_append_posn(14, 4, binary_string, bp))) return 0; /* U/L */ - current_mode = 'U'; - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* B/S */ - break; + } else if (current_mode == AZ_D) { + if (mask_mode != current_mode) { + bp = z_bin_append_posn(14, 4, binary_string, bp); /* U/L */ + if (mask_mode == AZ_L) { + bp = z_bin_append_posn(28, 5, binary_string, bp); /* L/L */ + } else if (mask_mode == AZ_M) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + } else if (mask_mode == AZ_P) { + bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ + bp = z_bin_append_posn(30, 5, binary_string, bp); /* P/L */ + } else if (mask_mode == AZ_B) { + current_mode = AZ_U; + current_mode_set = 1; + bp = z_bin_append_posn(31, 5, binary_string, bp); /* B/S */ + } + } + } + if (modes[i] & AZ_PS) { + assert(mask_mode != AZ_P); + bp = z_bin_append_posn(0, 4 + (mask_mode != AZ_D), binary_string, bp); /* P/S */ + } else if (modes[i] & AZ_US) { + assert(mask_mode == AZ_L || mask_mode == AZ_D); + if (mask_mode == AZ_L) { + bp = z_bin_append_posn(28, 5, binary_string, bp); /* U/S */ + } else { + bp = z_bin_append_posn(15, 4, binary_string, bp); /* U/S */ } } /* Byte mode - process full block here */ - if (reduced_encode_mode[i] == 'B') { + if (modes[i] == AZ_B) { int big_batch = 0; - for (count = 0; i + count < reduced_length && reduced_encode_mode[i + count] == 'B'; count++); + int count = byte_counts[byte_i++]; - if (count > 2047 + 2078) { /* Can't be more than 19968 / 8 = 2496 */ - return 0; - } + assert(count <= 2047 + 2078); /* Can't be more than 19968 / 8 = 2496 */ if (count > 2047) { /* Max 11-bit number */ big_batch = count > 2078 ? 2078 : count; /* Put 00000 followed by 11-bit number of bytes less 31 */ - if (!(bp = az_bin_append_posn(big_batch - 31, 16, binary_string, bp))) return 0; + bp = z_bin_append_posn(big_batch - 31, 16, binary_string, bp); for (j = 0; j < big_batch; j++) { - if (!(bp = az_bin_append_posn(reduced_source[i++], 8, binary_string, bp))) return 0; + bp = z_bin_append_posn(source[i++], 8, binary_string, bp); } count -= big_batch; } if (count) { if (big_batch) { - if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* B/S */ + bp = z_bin_append_posn(31, 5, binary_string, bp); /* B/S */ } if (count > 31) { assert(count <= 2078); /* Put 00000 followed by 11-bit number of bytes less 31 */ - if (!(bp = az_bin_append_posn(count - 31, 16, binary_string, bp))) return 0; + bp = z_bin_append_posn(count - 31, 16, binary_string, bp); } else { /* Put 5-bit number of bytes */ - if (!(bp = az_bin_append_posn(count, 5, binary_string, bp))) return 0; + bp = z_bin_append_posn(count, 5, binary_string, bp); } for (j = 0; j < count; j++) { - if (!(bp = az_bin_append_posn(reduced_source[i++], 8, binary_string, bp))) return 0; + bp = z_bin_append_posn(source[i++], 8, binary_string, bp); } } i--; continue; } - if (reduced_encode_mode[i] != 'u' && reduced_encode_mode[i] != 'p') { - current_mode = reduced_encode_mode[i]; + if (current_mode != mask_mode && !current_mode_set) { + current_mode = mask_mode; } } - if (reduced_encode_mode[i] == 'U' || reduced_encode_mode[i] == 'u') { - if (reduced_source[i] == ' ') { - if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* SP */ + if (modes[i] == AZ_U || (modes[i] & AZ_US)) { + if (source[i] == ' ') { + bp = z_bin_append_posn(1, 5, binary_string, bp); /* SP */ } else { - if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0; + bp = z_bin_append_posn(AztecSymbolChar[source[i]], 5, binary_string, bp); } - } else if (reduced_encode_mode[i] == 'L') { - if (reduced_source[i] == ' ') { - if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* SP */ + } else if (modes[i] == AZ_L) { + if (source[i] == ' ') { + bp = z_bin_append_posn(1, 5, binary_string, bp); /* SP */ } else { - if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0; + bp = z_bin_append_posn(AztecSymbolChar[source[i]], 5, binary_string, bp); } - } else if (reduced_encode_mode[i] == 'M') { - if (reduced_source[i] == ' ') { - if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* SP */ - } else if (reduced_source[i] == 13) { - if (!(bp = az_bin_append_posn(14, 5, binary_string, bp))) return 0; /* CR */ + } else if (modes[i] == AZ_M) { + if (source[i] == ' ') { + bp = z_bin_append_posn(1, 5, binary_string, bp); /* SP */ + } else if (source[i] == '\r') { + bp = z_bin_append_posn(14, 5, binary_string, bp); /* CR */ } else { - if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0; + bp = z_bin_append_posn(AztecSymbolChar[source[i]], 5, binary_string, bp); } - } else if (reduced_encode_mode[i] == 'P' || reduced_encode_mode[i] == 'p') { - if (gs1 && reduced_source[i] == '\x1D') { - if (!(bp = az_bin_append_posn(0, 5, binary_string, bp))) return 0; /* FLG(n) */ - if (!(bp = az_bin_append_posn(0, 3, binary_string, bp))) return 0; /* FLG(0) = FNC1 */ - } else if (reduced_source[i] == 13) { - if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* CR */ - } else if (reduced_source[i] == 'a') { - if (!(bp = az_bin_append_posn(2, 5, binary_string, bp))) return 0; /* CR LF */ - } else if (reduced_source[i] == 'b') { - if (!(bp = az_bin_append_posn(3, 5, binary_string, bp))) return 0; /* . SP */ - } else if (reduced_source[i] == 'c') { - if (!(bp = az_bin_append_posn(4, 5, binary_string, bp))) return 0; /* , SP */ - } else if (reduced_source[i] == 'd') { - if (!(bp = az_bin_append_posn(5, 5, binary_string, bp))) return 0; /* : SP */ - } else if (reduced_source[i] == ',') { - if (!(bp = az_bin_append_posn(17, 5, binary_string, bp))) return 0; /* Comma */ - } else if (reduced_source[i] == '.') { - if (!(bp = az_bin_append_posn(19, 5, binary_string, bp))) return 0; /* Full stop */ + } else if (modes[i] == AZ_P || (modes[i] & AZ_PS)) { + if (gs1 && source[i] == '\x1D') { + bp = z_bin_append_posn(0, 5, binary_string, bp); /* FLG(n) */ + bp = z_bin_append_posn(0, 3, binary_string, bp); /* FLG(0) = FNC1 */ + } else if (source[i] == '\r') { + bp = z_bin_append_posn(1, 5, binary_string, bp); /* CR */ + } else if (source[i] == 'a') { + bp = z_bin_append_posn(2, 5, binary_string, bp); /* CR LF */ + } else if (source[i] == 'b') { + bp = z_bin_append_posn(3, 5, binary_string, bp); /* . SP */ + } else if (source[i] == 'c') { + bp = z_bin_append_posn(4, 5, binary_string, bp); /* , SP */ + } else if (source[i] == 'd') { + bp = z_bin_append_posn(5, 5, binary_string, bp); /* : SP */ + } else if (source[i] == ',') { + bp = z_bin_append_posn(17, 5, binary_string, bp); /* Comma */ + } else if (source[i] == '.') { + bp = z_bin_append_posn(19, 5, binary_string, bp); /* Full stop */ } else { - if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0; + bp = z_bin_append_posn(AztecSymbolChar[source[i]], 5, binary_string, bp); } - } else if (reduced_encode_mode[i] == 'D') { - if (reduced_source[i] == ' ') { - if (!(bp = az_bin_append_posn(1, 4, binary_string, bp))) return 0; /* SP */ - } else if (reduced_source[i] == ',') { - if (!(bp = az_bin_append_posn(12, 4, binary_string, bp))) return 0; /* Comma */ - } else if (reduced_source[i] == '.') { - if (!(bp = az_bin_append_posn(13, 4, binary_string, bp))) return 0; /* Full stop */ + } else if (modes[i] == AZ_D) { + if (source[i] == ' ') { + bp = z_bin_append_posn(1, 4, binary_string, bp); /* SP */ + } else if (source[i] == ',') { + bp = z_bin_append_posn(12, 4, binary_string, bp); /* Comma */ + } else if (source[i] == '.') { + bp = z_bin_append_posn(13, 4, binary_string, bp); /* Full stop */ } else { - if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 4, binary_string, bp))) return 0; + bp = z_bin_append_posn(AztecSymbolChar[source[i]], 4, binary_string, bp); } } } @@ -670,22 +1297,25 @@ static int aztec_text_process(const unsigned char source[], int length, int bp, *p_current_mode = current_mode; } + assert(size == bp - initial_bp); + return 1; } -/* Call `aztec_text_process()` for each segment */ -static int aztec_text_process_segs(struct zint_symbol *symbol, struct zint_seg segs[], const int seg_count, int bp, +/* Call `az_text_process()` for each segment */ +static int az_text_process_segs(struct zint_symbol *symbol, struct zint_seg segs[], const int seg_count, int bp, char binary_string[], const int gs1, const int gs1_bp, int *data_length, const int debug_print) { int i; - char current_mode = 'U'; + char current_mode = AZ_U; + const int fast_encode = symbol->input_mode & FAST_MODE; /* Raw text dealt with by `ZBarcode_Encode_Segs()`, except for `eci` feedback. Note not updating `eci` for GS1 mode as not converted */ const int content_segs = !gs1 && (symbol->output_options & BARCODE_CONTENT_SEGS); for (i = 0; i < seg_count; i++) { - if (!aztec_text_process(segs[i].source, segs[i].length, bp, binary_string, gs1, gs1_bp, segs[i].eci, + if (!az_text_process(segs[i].source, segs[i].length, bp, binary_string, gs1, gs1_bp, segs[i].eci, fast_encode, ¤t_mode, &bp, debug_print)) { - return ZINT_ERROR_TOO_LONG; /* `aztec_text_process()` only fails with too long */ + return ZINT_ERROR_TOO_LONG; /* `az_text_process()` only fails with too long */ } if (content_segs && segs[i].eci) { z_ct_set_seg_eci(symbol, i, segs[i].eci); @@ -857,6 +1487,7 @@ static int az_codeword_size(const int layers) { return codeword_size; } +/* Encodes Aztec Code as specified in ISO/IEC 24778:2008 */ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int seg_count) { int x, y, i, p, data_blocks, ecc_blocks, layers, total_bits; char bit_pattern[AZTEC_MAP_POSN_MAX + 1]; /* Note AZTEC_MAP_POSN_MAX > AZTEC_BIN_CAPACITY */ @@ -925,13 +1556,13 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons symbol->structapp.count, symbol->structapp.index, symbol->structapp.id, sa_src); } - (void) aztec_text_process(sa_src, sa_len, bp, binary_string, 0 /*gs1*/, 0 /*gs1_bp*/, 0 /*eci*/, - NULL /*p_current_mode*/, &bp, debug_print); + (void) az_text_process(sa_src, sa_len, bp, binary_string, 0 /*gs1*/, 0 /*gs1_bp*/, 0 /*eci*/, + 0 /*fast_encode*/, NULL /*p_current_mode*/, &bp, debug_print); /* Will be in U/L due to uppercase A-Z index/count indicators at end */ gs1_bp = bp; /* Initial FNC1 (FLG0) position */ } - if ((error_number = aztec_text_process_segs(symbol, segs, seg_count, bp, binary_string, gs1, gs1_bp, &data_length, + if ((error_number = az_text_process_segs(symbol, segs, seg_count, bp, binary_string, gs1, gs1_bp, &data_length, debug_print))) { assert(error_number == ZINT_ERROR_TOO_LONG || error_number == ZINT_ERROR_MEMORY); if (error_number == ZINT_ERROR_TOO_LONG) { @@ -968,7 +1599,8 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons layers = 0; /* For each level of error correction work out the smallest symbol which the data will fit in */ - if (data_length + adjustment_size <= AztecCompactDataSizes[ecc_level - 1][compact_loop_start - 1]) { + if ((symbol->option_3 & 0xFF) != ZINT_AZTEC_FULL && data_length + adjustment_size + <= AztecCompactDataSizes[ecc_level - 1][compact_loop_start - 1]) { for (i = compact_loop_start; i > 0; i--) { if (data_length + adjustment_size <= AztecCompactDataSizes[ecc_level - 1][i - 1]) { layers = i; @@ -1118,13 +1750,6 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons symbol->option_1 |= ((int) z_stripf(ecc_ratio * 100.0f)) << 8; } - if (debug_print) { - printf("Generating a %s symbol with %d layers\n", compact ? "compact" : "full-size", layers); - printf("Requires %d codewords of %d-bits\n", data_blocks + ecc_blocks, codeword_size); - printf(" (%d data words, %d ecc words, %.1f%%, output option_1 %d, option_2 %d)\n", - data_blocks, ecc_blocks, ecc_ratio * 100, symbol->option_1, symbol->option_2); - } - data_part = (unsigned int *) z_alloca(sizeof(unsigned int) * data_blocks); ecc_part = (unsigned int *) z_alloca(sizeof(unsigned int) * ecc_blocks); @@ -1284,6 +1909,13 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons symbol->rows = dim; symbol->width = dim; + if (debug_print) { + printf("Generating a %dx%d %s symbol with %d layers\n", dim, dim, compact ? "compact" : "full-size", layers); + printf("Requires %d codewords of %d-bits\n", data_blocks + ecc_blocks, codeword_size); + printf(" (%d data words, %d ecc words, %.1f%%, output option_1 0x%X, option_2 %d)\n", + data_blocks, ecc_blocks, ecc_ratio * 100, symbol->option_1, symbol->option_2); + } + return error_number; } diff --git a/backend/aztec.h b/backend/aztec.h index 01a7a22d..a9ffd149 100644 --- a/backend/aztec.h +++ b/backend/aztec.h @@ -96,15 +96,87 @@ static const char AztecSymbolChar[128] = { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 25, 30, 26, 27 }; +/* Modes */ +#define AZ_U 1 +#define AZ_L 2 +#define AZ_M 3 +#define AZ_P 4 +#define AZ_D 5 +#define AZ_B 6 /* 5 or 11-bit Byte (ideally would be separate modes, but not done due to performance hit) */ + +/* Pseudo-modes */ +#define AZ_X 7 /* Used to indicate chars belonging to more than one mode */ +#define AZ_E 8 /* Used to signal no next mode */ + +#define AZ_NUM_MODES 6 + +#define AZ_MASK(m) ((m) & 0x0F) + +#define AZ_PS 0x10 +#define AZ_US 0x20 + +/* P/S */ +#define AZ_U_PS (AZ_U | AZ_PS) +#define AZ_L_PS (AZ_L | AZ_PS) +#define AZ_M_PS (AZ_M | AZ_PS) +#define AZ_D_PS (AZ_D | AZ_PS) + +/* U/S */ +#define AZ_L_US (AZ_L | AZ_US) +#define AZ_D_US (AZ_D | AZ_US) + static const char AztecModes[128] = { - 'B', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'X', 'B', 'B', - 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'M', 'M', 'M', 'M', 'M', - 'X', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'X', 'P', 'X', 'P', - 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'P', 'P', 'P', 'P', 'P', 'P', - 'M', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', - 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'P', 'M', 'P', 'M', 'M', - 'M', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', - 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'P', 'M', 'P', 'M', 'M' + AZ_B, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, AZ_X, AZ_B, AZ_B, + AZ_B, AZ_B, AZ_B, AZ_B, AZ_B, AZ_B, AZ_B, AZ_B, AZ_B, AZ_B, AZ_B, AZ_M, AZ_M, AZ_M, AZ_M, AZ_M, + AZ_X, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_X, AZ_P, AZ_X, AZ_P, + AZ_D, AZ_D, AZ_D, AZ_D, AZ_D, AZ_D, AZ_D, AZ_D, AZ_D, AZ_D, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, AZ_P, + AZ_M, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, + AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_U, AZ_P, AZ_M, AZ_P, AZ_M, AZ_M, + AZ_M, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, + AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_L, AZ_P, AZ_M, AZ_P, AZ_M, AZ_M +}; + +/* Testable flags */ +#define AZ_U_F 0x01 +#define AZ_L_F 0x02 +#define AZ_M_F 0x04 +#define AZ_P_F 0x08 +#define AZ_D_F 0x10 + +/* Flag version of `AztecModes[]` */ +static const char AztecFlags[128] = { + 0, AZ_M_F, AZ_M_F, AZ_M_F, /* 0-3*/ + AZ_M_F, AZ_M_F, AZ_M_F, AZ_M_F, /* 4-7*/ + AZ_M_F, AZ_M_F, AZ_M_F, AZ_M_F, /* 8-11*/ + AZ_M_F, AZ_M_F | AZ_P_F, 0, 0, /* 12-15*/ + 0, 0, 0, 0, /* 16-19*/ + 0, 0, 0, 0, /* 20-23*/ + 0, 0, 0, AZ_M_F, /* 24-27*/ + AZ_M_F, AZ_M_F, AZ_M_F, AZ_M_F, /* 28-31*/ + AZ_U_F | AZ_L_F | AZ_M_F | AZ_D_F, AZ_P_F, AZ_P_F, AZ_P_F, /* 32-35*/ + AZ_P_F, AZ_P_F, AZ_P_F, AZ_P_F, /* 36-39*/ + AZ_P_F, AZ_P_F, AZ_P_F, AZ_P_F, /* 40-43*/ + AZ_P_F | AZ_D_F, AZ_P_F, AZ_P_F | AZ_D_F, AZ_P_F, /* 44-47*/ + AZ_D_F, AZ_D_F, AZ_D_F, AZ_D_F, /* 48-51*/ + AZ_D_F, AZ_D_F, AZ_D_F, AZ_D_F, /* 52-55*/ + AZ_D_F, AZ_D_F, AZ_P_F, AZ_P_F, /* 56-59*/ + AZ_P_F, AZ_P_F, AZ_P_F, AZ_P_F, /* 60-63*/ + AZ_M_F, AZ_U_F, AZ_U_F, AZ_U_F, /* 64-67*/ + AZ_U_F, AZ_U_F, AZ_U_F, AZ_U_F, /* 68-71*/ + AZ_U_F, AZ_U_F, AZ_U_F, AZ_U_F, /* 72-75*/ + AZ_U_F, AZ_U_F, AZ_U_F, AZ_U_F, /* 76-79*/ + AZ_U_F, AZ_U_F, AZ_U_F, AZ_U_F, /* 80-83*/ + AZ_U_F, AZ_U_F, AZ_U_F, AZ_U_F, /* 84-87*/ + AZ_U_F, AZ_U_F, AZ_U_F, AZ_P_F, /* 88-91*/ + AZ_M_F, AZ_P_F, AZ_M_F, AZ_M_F, /* 92-95*/ + AZ_M_F, AZ_L_F, AZ_L_F, AZ_L_F, /* 96-99*/ + AZ_L_F, AZ_L_F, AZ_L_F, AZ_L_F, /* 100-103*/ + AZ_L_F, AZ_L_F, AZ_L_F, AZ_L_F, /* 104-107*/ + AZ_L_F, AZ_L_F, AZ_L_F, AZ_L_F, /* 108-111*/ + AZ_L_F, AZ_L_F, AZ_L_F, AZ_L_F, /* 112-115*/ + AZ_L_F, AZ_L_F, AZ_L_F, AZ_L_F, /* 116-119*/ + AZ_L_F, AZ_L_F, AZ_L_F, AZ_P_F, /* 120-123*/ + AZ_M_F, AZ_P_F, AZ_M_F, AZ_M_F, /* 124-127*/ }; /* Codewords per symbol */ diff --git a/backend/common.c b/backend/common.c index aaf23603..2b7a5200 100644 --- a/backend/common.c +++ b/backend/common.c @@ -1,7 +1,7 @@ /* common.c - Contains functions needed for a number of barcodes */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -36,13 +36,13 @@ #include "common.h" /* Converts a character 0-9, A-F to its equivalent integer value */ -INTERNAL int z_ctoi(const char source) { - if (z_isdigit(source)) - return (source - '0'); - if (source >= 'A' && source <= 'F') - return (source - 'A' + 10); - if (source >= 'a' && source <= 'f') - return (source - 'a' + 10); +INTERNAL int z_ctoi(const char ch) { + if (z_isdigit(ch)) + return (ch - '0'); + if (ch >= 'A' && ch <= 'F') + return (ch - 'A' + 10); + if (ch >= 'a' && ch <= 'f') + return (ch - 'a' + 10); return -1; } @@ -70,20 +70,20 @@ INTERNAL void z_to_upper(unsigned char source[], const int length) { } } -/* Returns the number of times a character occurs in `source` */ -INTERNAL int z_chr_cnt(const unsigned char source[], const int length, const unsigned char c) { +/* Returns the number of times a character `ch` occurs in `source` */ +INTERNAL int z_chr_cnt(const unsigned char source[], const int length, const unsigned char ch) { int count = 0; int i; for (i = 0; i < length; i++) { - count += source[i] == c; + count += source[i] == ch; } return count; } /* Flag table for `is_chr()` and `z_not_sane()` */ #define IS_CLS_F (IS_CLI_F | IS_SIL_F) -static const unsigned short flgs[256] = { +static const unsigned short flags[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*00-1F*/ IS_SPC_F, IS_C82_F, IS_C82_F, IS_HSH_F, /*20-23*/ /* !"# */ IS_CLS_F, IS_SIL_F | IS_C82_F, IS_C82_F, IS_C82_F, /*24-27*/ /* $%&' */ @@ -115,17 +115,17 @@ static const unsigned short flgs[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*E0-FF*/ }; -/* Whether a character matches `flg` */ -INTERNAL int z_is_chr(const unsigned int flg, const unsigned int c) { - return z_isascii(c) && (flgs[c] & flg); +/* Whether a character `ch` matches `flag` */ +INTERNAL int z_is_chr(const unsigned int flag, const unsigned int ch) { + return z_isascii(ch) && (flags[ch] & flag); /* As passed an int ch need to check it's ASCII */ } /* Verifies if a string only uses valid characters, returning 1-based position in `source` if not, 0 for success */ -INTERNAL int z_not_sane(const unsigned int flg, const unsigned char source[], const int length) { +INTERNAL int z_not_sane(const unsigned int flag, const unsigned char source[], const int length) { int i; for (i = 0; i < length; i++) { - if (!(flgs[source[i]] & flg)) { + if (!(flags[source[i]] & flag)) { return i + 1; } } @@ -849,7 +849,7 @@ INTERNAL void z_hrt_cpy_cat_nochk(struct zint_symbol *symbol, const unsigned cha symbol->text[total_length] = '\0'; } -/* Copy a single ASCII character into `symbol->text` (i.e. replaces content) */ +/* Copy a single ASCII character `ch` into `symbol->text` (i.e. replaces content) */ INTERNAL void z_hrt_cpy_chr(struct zint_symbol *symbol, const char ch) { symbol->text[0] = ch; symbol->text_length = 1; diff --git a/backend/common.h b/backend/common.h index 2f67c766..481ddc90 100644 --- a/backend/common.h +++ b/backend/common.h @@ -137,11 +137,11 @@ typedef unsigned __int64 uint64_t; #define z_isfintf(arg) (fmodf(arg, 1.0f) == 0.0f) /* Simple versions of functions with no dependence on locale */ -#define z_isdigit(c) ((c) <= '9' && (c) >= '0') -#define z_isupper(c) ((c) >= 'A' && (c) <= 'Z') -#define z_islower(c) ((c) >= 'a' && (c) <= 'z') -#define z_isascii(c) (!((c) & ~0x7F)) -#define z_iscntrl(c) (!((c) & ~0x1F) || (c) == 127) +#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_isascii(ch) (!((ch) & ~0x7F)) +#define z_iscntrl(ch) (!((ch) & ~0x1F) || (ch) == 127) /* Shorthands to cast away char pointer signedness */ #define ZUCP(p) ((unsigned char *) (p)) @@ -155,7 +155,7 @@ typedef unsigned __int64 uint64_t; #define z_xtoc(i) ((i) < 10 ? z_itoc(i) : ((i) - 10) + 'A') /* Converts a character 0-9, A-F to its equivalent integer value */ -INTERNAL int z_ctoi(const char source); +INTERNAL int z_ctoi(const char ch); /* Converts decimal string of length <= 9 to integer value. Returns -1 if not numeric */ INTERNAL int z_to_int(const unsigned char source[], const int length); @@ -163,8 +163,8 @@ INTERNAL int z_to_int(const unsigned char source[], const int length); /* Converts lower case characters to upper case in string `source` */ INTERNAL void z_to_upper(unsigned char source[], const int length); -/* Returns the number of times a character occurs in `source` */ -INTERNAL int z_chr_cnt(const unsigned char source[], const int length, const unsigned char c); +/* Returns the number of times a character `ch` occurs in `source` */ +INTERNAL int z_chr_cnt(const unsigned char source[], const int length, const unsigned char ch); /* `z_is_chr()` & `z_not_sane()` flags */ #define IS_SPC_F 0x0001 /* Space */ @@ -190,11 +190,11 @@ INTERNAL int z_chr_cnt(const unsigned char source[], const int length, const uns /* The most commonly used set */ #define NEON_F IS_NUM_F /* NEON "0123456789" */ -/* Whether a character matches `flg` */ -INTERNAL int z_is_chr(const unsigned int flg, const unsigned int c); +/* Whether a character `ch` matches `flag` */ +INTERNAL int z_is_chr(const unsigned int flag, const unsigned int ch); /* Verifies if a string only uses valid characters, returning 1-based position in `source` if not, 0 for success */ -INTERNAL int z_not_sane(const unsigned int flg, const unsigned char source[], const int length); +INTERNAL int z_not_sane(const unsigned int flag, const unsigned char source[], const int length); /* Verifies if a string only uses valid characters as above, but also returns `test_string` position of each in `posns` array */ @@ -319,7 +319,7 @@ INTERNAL void z_hrt_cpy_nochk(struct zint_symbol *symbol, const unsigned char so INTERNAL void z_hrt_cpy_cat_nochk(struct zint_symbol *symbol, const unsigned char source[], const int length, const char separator, const unsigned char cat[], const int cat_length); -/* Copy a single ASCII character into `symbol->text` (i.e. replaces content) */ +/* Copy a single ASCII character `ch` into `symbol->text` (i.e. replaces content) */ INTERNAL void z_hrt_cpy_chr(struct zint_symbol *symbol, const char ch); /* No-check as-is append of ASCII to `symbol->text`, assuming current `symbol->text_length` + `length` fits */ diff --git a/backend/library.c b/backend/library.c index 90cbf6e4..e01e3954 100644 --- a/backend/library.c +++ b/backend/library.c @@ -1048,9 +1048,9 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[ const int len = local_segs[0].length; const int primary_len = symbol->primary[0] ? (int) strlen(symbol->primary) : 0; char name[32]; - char source[1001]; /* 200*5 + 1 = 1001 */ + char source[10001]; /* 2000*5 + 1 = 10001 */ (void) ZBarcode_BarcodeName(symbol->symbology, name); - z_debug_print_escape(local_segs[0].source, len > 200 ? 200 : len, source); + z_debug_print_escape(local_segs[0].source, len > 2000 ? 2000 : len, source); printf("\nZBarcode_Encode_Segs: %s (%d), height %g, scale: %g, whitespace: (%d, %d), border_width: %d\n" " output_options: 0x%X, fg: \"%s\", bg: \"%s\"\n" " outfile: \"%s\"\n" @@ -1069,7 +1069,7 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[ symbol->eci, symbol->dpmm, symbol->dot_size, symbol->text_gap, symbol->guard_descent, symbol->structapp.index, symbol->structapp.count, symbol->structapp.id, symbol->warn_level, seg_count, - len > 200 ? "first 200 " : "", seg_count > 1 ? "[0]" : "", len, source); + len > 2000 ? "first 2000 " : "", seg_count > 1 ? "[0]" : "", len, source); fflush(stdout); } diff --git a/backend/tests/data/png/aztec_z1_seq4of7.png b/backend/tests/data/png/aztec_z1_seq4of7.png index 8bc4f3e0e6adc8da661010c2e8932ed0539514f0..83ffd3a8c65107ef6dc9bda8a3586d91a43a2a29 100644 GIT binary patch delta 127 zcmV-_0D%9k0j>d%Hh5!6L_t&t*FD5B3cxT31yI2?kgEu;1+O0H8t7F7SK)W)Pv7ta zy{;wS&oid*RMB&Hjm^DmHXlIeImI@IBaGj!*SXy-&!xWkDn#=;#gdNzgtvs)zt7}W h73Yn}#i5q{{Q?QlWnU-38V3LX002ovPDHLkV1lnqJJA3D delta 126 zcmV-^0D=Fm0j&X$Hg{r4L_t&t*EPg33IHJt1i%Gb!LJBu1AhI$HsDtT+rVDoI>jK( zv2mXPOU+X^bjA+XetLU@B;FnFdK-J_urjKqnd5zmyI#hTIyU^%bugstructapp = data[i].structapp; @@ -217,8 +222,12 @@ static void test_large(const testCtx *const p_ctx) { i, ret ? "set" : "empty", symbol->errtxt); if (p_ctx->generate) { - printf(" /*%3d*/ { %s, %d, %d, %d, %s, { %d, %d, \"\" }, \"%s\", %d, %s, %d, %d, \"%s\", %d, \"%s\" },\n", - i, testUtilBarcodeName(data[i].symbology), data[i].eci, data[i].option_1, data[i].option_2, + printf(" /*%3d*/ { %s, %s, %d, %d, %d, %s, %s, { %d, %d, \"\" }, \"%s\"," + " %d, %s, %d, %d, \"%s\", %d, \"%s\" },\n", + i, testUtilBarcodeName(data[i].symbology), + testUtilInputModeName(data[i].input_mode), + data[i].eci, data[i].option_1, data[i].option_2, + testUtilOption3Name(data[i].symbology, data[i].option_3), testUtilOutputOptionsName(data[i].output_options), data[i].structapp.index, data[i].structapp.count, testUtilEscape(data[i].pattern, (int) strlen(data[i].pattern), escaped, sizeof(escaped)), @@ -268,6 +277,7 @@ static void test_options(const testCtx *const p_ctx) { int output_options; int option_1; int option_2; + int option_3; struct zint_structapp structapp; const char *data; int ret; @@ -277,56 +287,61 @@ static void test_options(const testCtx *const p_ctx) { const char *expected_errtxt; int expected_option_1; int expected_option_2; + int expected_option_3; }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1 }, - /* 1*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1 }, - /* 2*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1 }, - /* 3*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1 }, - /* 4*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "12345678901", 0, 15, 15, "", (29 << 8) | 2, 1 }, - /* 5*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "123456789012", 0, 15, 15, "", (29 << 8) | 2, 1 }, - /* 6*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "1234567890123456", 0, 15, 15, "", (11 << 8) | 1, 1 }, - /* 7*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "123456789012345678", 0, 19, 19, "", (60 << 8) | 4, 2 }, - /* 8*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "1234567890123456789", 0, 19, 19, "", (57 << 8) | 4, 2 }, - /* 9*/ { BARCODE_AZTEC, -1, -1, 2, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1 }, - /* 10*/ { BARCODE_AZTEC, -1, -1, 3, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2 }, - /* 11*/ { BARCODE_AZTEC, -1, -1, 3, -1, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (70 << 8) | 4, 2 }, - /* 12*/ { BARCODE_AZTEC, -1, -1, 4, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2 }, - /* 13*/ { BARCODE_AZTEC, -1, -1, 5, -1, { 0, 0, "" }, "1234567890", ZINT_WARN_INVALID_OPTION, 15, 15, "Warning 503: Error correction level '5' out of range (1 to 4), ignoring", (35 << 8) | 3, 1 }, - /* 14*/ { BARCODE_AZTEC, -1, -1, -1, 1, { 0, 0, "" }, "12345678901234567890", ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Input too long for Version 1, requires 15 codewords (maximum 14)", -1, 1 }, - /* 15*/ { BARCODE_AZTEC, -1, -1, -1, 5, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (47 << 8) | 4, 5 }, - /* 16*/ { BARCODE_AZTEC, -1, -1, -1, 5, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (42 << 8) | 3, 5 }, - /* 17*/ { BARCODE_AZTEC, -1, -1, -1, 5, { 0, 0, "" }, "1234567890123456", 0, 19, 19, "", (28 << 8) | 2, 5 }, - /* 18*/ { BARCODE_AZTEC, -1, -1, -1, 5, { 0, 0, "" }, "123456789012345678901", 0, 19, 19, "", (14 << 8) | 1, 5 }, - /* 19*/ { BARCODE_AZTEC, -1, -1, -1, 5, { 0, 0, "" }, "123456789012345678901234", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 708: Number of ECC codewords 4 less than 5% + 3 of data codewords 17", (4 << 8) | 0, 5 }, - /* 20*/ { BARCODE_AZTEC, -1, -1, -1, 5, { 0, 0, "" }, "1234567890123456780123456", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 706: Number of ECC codewords 3 at minimum", -1, 5 }, - /* 21*/ { BARCODE_AZTEC, -1, -1, -1, 36, { 0, 0, "" }, "1234567890", 0, 151, 151, "", (99 << 8) | 4, 36 }, - /* 22*/ { BARCODE_AZTEC, -1, -1, -1, 37, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '37' out of range (1 to 36)", -1, 37 }, - /* 23*/ { BARCODE_AZTEC, -1, -1, -1, -2, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '-2' out of range (1 to 36)", -1, -2 }, - /* 24*/ { BARCODE_AZTEC, GS1_MODE, READER_INIT, -1, -1, { 0, 0, "" }, "[91]A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 501: Cannot use Reader Initialisation in GS1 mode", -1, 0 }, - /* 25*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, { 0, 0, "" }, "[91]A", 0, 15, 15, "", (41 << 8) | 3, 1 }, - /* 26*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, { 0, 0, "" }, "(91)A", 0, 15, 15, "", (41 << 8) | 3, 1 }, - /* 27*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, { 0, 0, "" }, "(91)(", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 253: Malformed AI in input (brackets don't match)", -1, 0 }, - /* 28*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (41 << 8) | 3, 1 }, /* Escaped parens now work without ESCAPE_MODE */ - /* 29*/ { BARCODE_AZTEC, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (41 << 8) | 3, 1 }, - /* 30*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 26, { 0, 0, "" }, "A", 0, 109, 109, "", (99 << 8) | 4, 26 }, /* 22 layers */ - /* 31*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 27, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 709: Version '27' out of range for Reader Initialisation symbols (maximum 26)", -1, 27 }, /* 23 layers */ - /* 32*/ { BARCODE_AZTEC, -1, READER_INIT, 4, -1, { 0, 0, "" }, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", ZINT_ERROR_TOO_LONG, -1, -1, "Error 506: Input too long for Reader Initialisation, requires 23 layers (maximum 22)", 4, 27 }, /* 23 layers */ - /* 33*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1 }, /* Compact 1 layer */ - /* 34*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 3, { 0, 0, "" }, "A", 0, 19, 19, "", (80 << 8) | 4, 5 }, /* Compact 3 layers gets set to full 1 layer if READER_INIT set */ - /* 35*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1 }, /* Compact 1 layer */ - /* 36*/ { BARCODE_AZTEC, -1, READER_INIT, 1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1 }, /* Still compact 1 layer if READER_INIT set */ - /* 37*/ { BARCODE_AZRUNE, -1, -1, -1, -1, { 0, 0, "" }, "0001", ZINT_ERROR_TOO_LONG, -1, -1, "Error 507: Input length 4 too long (maximum 3)", -1, 0 }, - /* 38*/ { BARCODE_AZRUNE, -1, -1, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 508: Invalid character at position 1 in input (digits only)", -1, 0 }, - /* 39*/ { BARCODE_AZRUNE, -1, -1, -1, -1, { 0, 0, "" }, "256", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 509: Input value out of range (0 to 255)", -1, 0 }, - /* 40*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 1, 2, "" }, "1234567890", 0, 19, 19, "", (65 << 8) | 4, 2 }, - /* 41*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 1, 2, {'1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2'} }, "1234567890", 0, 23, 23, "", (41 << 8) | 3, 3 }, - /* 42*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 1, 1, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 701: Structured Append count '1' out of range (2 to 26)", -1, 0 }, - /* 43*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 0, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '0' out of range (1 to count 2)", -1, 0 }, - /* 44*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 3, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '3' out of range (1 to count 2)", -1, 0 }, - /* 45*/ { BARCODE_AZTEC, -1, -1, -1, -1, { 1, 2, "A B" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 703: Structured Append ID cannot contain spaces", -1, 0 }, - /* 46*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, { 0, 0, "" }, "1234567890;", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 11 in input (alphanumerics, space and \"-.$/+%\" only)", -1, 0 }, + /* 0*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 1*/ { BARCODE_AZTEC, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "1234567", 0, 19, 19, "", (57 << 8) | 4, 5, ZINT_AZTEC_FULL }, + /* 2*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, + /* 3*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 4*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, + /* 5*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "12345678901", 0, 15, 15, "", (29 << 8) | 2, 1, 0 }, + /* 6*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "123456789012", 0, 15, 15, "", (29 << 8) | 2, 1, 0 }, + /* 7*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890123456", 0, 15, 15, "", (11 << 8) | 1, 1, 0 }, + /* 8*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "123456789012345678", 0, 19, 19, "", (60 << 8) | 4, 2, 0 }, + /* 9*/ { BARCODE_AZTEC, -1, -1, 1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "123456789012345678", 0, 19, 19, "", (23 << 8) | 2, 5, ZINT_AZTEC_FULL }, + /* 10*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890123456789", 0, 19, 19, "", (57 << 8) | 4, 2, 0 }, + /* 11*/ { BARCODE_AZTEC, -1, -1, 2, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, + /* 12*/ { BARCODE_AZTEC, -1, -1, 3, -1, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2, 0 }, + /* 13*/ { BARCODE_AZTEC, -1, -1, 3, -1, -1, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (70 << 8) | 4, 2, 0 }, + /* 14*/ { BARCODE_AZTEC, -1, -1, 4, -1, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2, 0 }, + /* 15*/ { BARCODE_AZTEC, -1, -1, 5, -1, -1, { 0, 0, "" }, "1234567890", ZINT_WARN_INVALID_OPTION, 15, 15, "Warning 503: Error correction level '5' out of range (1 to 4), ignoring", (35 << 8) | 3, 1, 0 }, + /* 16*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, { 0, 0, "" }, "12345678901234567890", ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Input too long for Version 1, requires 15 codewords (maximum 14)", -1, 1, 0 }, + /* 17*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (47 << 8) | 4, 5, 0 }, + /* 18*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (42 << 8) | 3, 5, 0 }, + /* 19*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890123456", 0, 19, 19, "", (28 << 8) | 2, 5, 0 }, + /* 20*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "123456789012345678901", 0, 19, 19, "", (14 << 8) | 1, 5, 0 }, + /* 21*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "123456789012345678901234", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 708: Number of ECC codewords 4 less than 5% + 3 of data codewords 17", (4 << 8) | 0, 5, 0 }, + /* 22*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890123456780123456", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 706: Number of ECC codewords 3 at minimum", -1, 5, 0 }, + /* 23*/ { BARCODE_AZTEC, -1, -1, -1, 36, -1, { 0, 0, "" }, "1234567890", 0, 151, 151, "", (99 << 8) | 4, 36, 0 }, + /* 24*/ { BARCODE_AZTEC, -1, -1, -1, 37, -1, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '37' out of range (1 to 36)", -1, 37, 0 }, + /* 25*/ { BARCODE_AZTEC, -1, -1, -1, -2, -1, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '-2' out of range (1 to 36)", -1, -2, 0 }, + /* 26*/ { BARCODE_AZTEC, GS1_MODE, READER_INIT, -1, -1, -1, { 0, 0, "" }, "[91]A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 501: Cannot use Reader Initialisation in GS1 mode", -1, 0, 0 }, + /* 27*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[91]A", 0, 15, 15, "", (41 << 8) | 3, 1, 0 }, + /* 28*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)A", 0, 15, 15, "", (41 << 8) | 3, 1, 0 }, + /* 29*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)(", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 253: Malformed AI in input (brackets don't match)", -1, 0, 0 }, + /* 30*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (41 << 8) | 3, 1, 0 }, /* Escaped parens now work without ESCAPE_MODE */ + /* 31*/ { BARCODE_AZTEC, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (41 << 8) | 3, 1, 0 }, + /* 32*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 26, -1, { 0, 0, "" }, "A", 0, 109, 109, "", (99 << 8) | 4, 26, 0 }, /* 22 layers */ + /* 33*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 27, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 709: Version '27' out of range for Reader Initialisation symbols (maximum 26)", -1, 27, 0 }, /* 23 layers */ + /* 34*/ { BARCODE_AZTEC, -1, READER_INIT, 4, -1, -1, { 0, 0, "" }, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", ZINT_ERROR_TOO_LONG, -1, -1, "Error 506: Input too long for Reader Initialisation, requires 23 layers (maximum 22)", 4, 27, 0 }, /* 23 layers */ + /* 35*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ + /* 36*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 3, -1, { 0, 0, "" }, "A", 0, 19, 19, "", (80 << 8) | 4, 5, 0 }, /* Compact 3 layers gets set to full 1 layer if READER_INIT set */ + /* 37*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ + /* 38*/ { BARCODE_AZTEC, -1, READER_INIT, 1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Still compact 1 layer if READER_INIT set */ + /* 39*/ { BARCODE_AZTEC, -1, READER_INIT, -1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ + /* 40*/ { BARCODE_AZTEC, -1, READER_INIT, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "A", 0, 19, 19, "", (80 << 8) | 4, 5, ZINT_AZTEC_FULL }, /* Full 1 layer */ + /* 41*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, { 0, 0, "" }, "0001", ZINT_ERROR_TOO_LONG, -1, -1, "Error 507: Input length 4 too long (maximum 3)", -1, 0, 0 }, + /* 42*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 508: Invalid character at position 1 in input (digits only)", -1, 0, 0 }, + /* 43*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, { 0, 0, "" }, "256", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 509: Input value out of range (0 to 255)", -1, 0, 0 }, + /* 44*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 2, "" }, "1234567890", 0, 19, 19, "", (65 << 8) | 4, 2, 0 }, + /* 45*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 2, {'1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2'} }, "1234567890", 0, 23, 23, "", (41 << 8) | 3, 3, 0 }, + /* 46*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 1, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 701: Structured Append count '1' out of range (2 to 26)", -1, 0, 0 }, + /* 47*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 0, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '0' out of range (1 to count 2)", -1, 0, 0 }, + /* 48*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 3, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '3' out of range (1 to count 2)", -1, 0, 0 }, + /* 49*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 2, "A B" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 703: Structured Append ID cannot contain spaces", -1, 0, 0 }, + /* 50*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567890;", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 11 in input (alphanumerics, space and \"-.$/+%\" only)", -1, 0, 0 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -342,7 +357,7 @@ static void test_options(const testCtx *const p_ctx) { assert_nonnull(symbol, "Symbol not created\n"); length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, - data[i].option_1, data[i].option_2, -1 /*option_3*/, data[i].output_options, + 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) { symbol->structapp = data[i].structapp; @@ -366,7 +381,8 @@ static void test_options(const testCtx *const p_ctx) { data[i].expected_option_1, symbol->option_2); assert_equal(symbol->option_2, data[i].expected_option_2, "i:%d symbol->option_2 %d != %d\n", i, symbol->option_2, data[i].expected_option_2); - assert_zero(symbol->option_3, "i:%d symbol->option_3 %d != 0\n", i, symbol->option_3); /* Unchanged */ + assert_equal(symbol->option_3, data[i].expected_option_3, "i:%d symbol->option_3 %d != %d\n", + i, symbol->option_3, data[i].expected_option_3); ZBarcode_Delete(symbol); } @@ -384,6 +400,7 @@ static void test_encode(const testCtx *const p_ctx) { int output_options; int option_1; int option_2; + int option_3; struct zint_structapp structapp; const char *data; int length; @@ -396,8 +413,9 @@ static void test_encode(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_AZTEC, UNICODE_MODE, -1, -1, -1, 1, { 0, 0, "" }, "123456789012", -1, 0, 15, 15, 1, 1, "ISO/IEC 24778:2008 Figure 1 (left)", + /* 0*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "123456789012", -1, 0, 15, 15, 1, 1, "ISO/IEC 24778:2008 Figure 1 (left)", "000111000011100" "110111001110010" "111100001000100" @@ -414,7 +432,24 @@ static void test_encode(const testCtx *const p_ctx) { "101011110101010" "100010001000101" }, - /* 1*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "Aztec Code is a public domain 2D matrix barcode symbology of nominally square symbols built on a square grid with a distinctive square bullseye pattern at their center.", -1, 0, 41, 41, 0, 1, "ISO/IEC 24778:2008 Figure 1 (right) NOTE: Not the same but down to single encoding mode difference (UPPER space rather than LOWER space after 2D); BWIPP same encodation as figure", + /* 1*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "123456789012", -1, 0, 15, 15, 1, 1, "ISO/IEC 24778:2008 Figure 1 (left), same as above", + "000111000011100" + "110111001110010" + "111100001000100" + "001111111111100" + "010100000001000" + "100101111101010" + "100101000101110" + "001101010101100" + "101101000101111" + "101101111101010" + "110100000001101" + "000111111111111" + "110001010010001" + "101011110101010" + "100010001000101" + }, + /* 2*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "Aztec Code is a public domain 2D matrix barcode symbology of nominally square symbols built on a square grid with a distinctive square bullseye pattern at their center.", -1, 0, 41, 41, 0, 1, "ISO/IEC 24778:2008 Figure 1 (right) NOTE: Not the same but down to single encoding mode difference (UPPER space rather than LOWER space after 2D); BWIPP same encodation as figure", "00001100110010010010111000010100001011000" "01000110010110110001000000100101101000001" "01011100101011001110101100000001100011001" @@ -457,7 +492,50 @@ static void test_encode(const testCtx *const p_ctx) { "00010010010011001011011010000110001000101" "10001000001010100110100000001001001110000" }, - /* 2*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "Code 2D!", -1, 0, 15, 15, 0, 1, "ISO/IEC 24778:2008 Figure G.2; BWIPP defaults to full (see following)", + /* 3*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "Aztec Code is a public domain 2D matrix barcode symbology of nominally square symbols built on a square grid with a distinctive square bullseye pattern at their center.", -1, 0, 41, 41, 0, 1, "See above", + "00001100110010010010111000010100001011000" + "01000110010110110001000000100101101000001" + "01011100101011001110101100000001100011001" + "11100000010100001000010010010100110001010" + "10101010101010101010101010101010101010101" + "00110101011100000001000100011001101100010" + "11001000100011110101100010110100011011010" + "01000101001101011011011111101100000101011" + "11011010111101111111101010001101111011100" + "01000101001000110011010101001101110100111" + "01011101100011100001100000101010111011001" + "00100101100111100101001111011011011100101" + "11101000000100001111101011010101101010101" + "00000100011101100101000001011110110000000" + "01001101010001111111111111110101101011100" + "00110000000010100000000000110100010000111" + "00001011011111101111111110100110000011110" + "00000111010010101000000010110011101100000" + "11001001010101101011111010111111100010111" + "11110001000101101010001010100111001100011" + "10101010101010101010101010101010101010101" + "00100100010000101010001010100101100000000" + "00001100111110101011111010111001111010000" + "10010101000010101000000010110110111001010" + "01011101011011101111111110110000110011110" + "00110101011100100000000000111011010100100" + "00111101000010111111111111110100011011011" + "00000010101100011111001110001000111000010" + "10001000010111101001100110011000001010001" + "10010001111100101111011100100011110101101" + "01111100000001001110100011011011110011000" + "10000001000010110110010010010101111000000" + "00101100010010001011111101101111111110101" + "00100001101000100101010001001110010001111" + "10011001111110000001110100000001010010011" + "10110010000000111110011001111111100101011" + "10101010101010101010101010101010101010101" + "10000010011110010010000100001010001101110" + "10101101110100001100111100110101001010001" + "00010010010011001011011010000110001000101" + "10001000001010100110100000001001001110000" + }, + /* 4*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "Code 2D!", -1, 0, 15, 15, 0, 1, "ISO/IEC 24778:2008 Figure G.2; BWIPP defaults to full (see following)", "000110001100000" "000000110000010" "101100001000101" @@ -474,7 +552,7 @@ static void test_encode(const testCtx *const p_ctx) { "011000011011010" "111001101100000" }, - /* 3*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, { 0, 0, "" }, "Code 2D!", -1, 0, 15, 15, 1, 1, "ISO/IEC 24778:2008 Figure G.2; specify size", + /* 5*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "Code 2D!", -1, 0, 15, 15, 1, 1, "ISO/IEC 24778:2008 Figure G.2; specify size", "000110001100000" "000000110000010" "101100001000101" @@ -491,7 +569,24 @@ static void test_encode(const testCtx *const p_ctx) { "011000011011010" "111001101100000" }, - /* 4*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\015\012", -1, 0, 53, 53, 1, 1, "ISO/IEC 24778:2008 Figure I.1 (left) (note CRLF at end!), same", + /* 6*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "Code 2D!", -1, 0, 15, 15, 1, 1, "ISO/IEC 24778:2008 Figure G.2; specify size, same as above", + "000110001100000" + "000000110000010" + "101100001000101" + "011111111111100" + "111100000001101" + "000101111101100" + "100101000101111" + "001101010101001" + "001101000101010" + "010101111101001" + "100100000001011" + "100111111111101" + "010001100010010" + "011000011011010" + "111001101100000" + }, + /* 7*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\015\012", -1, 0, 53, 53, 1, 1, "ISO/IEC 24778:2008 Figure I.1 (left) (note CRLF at end!), same", "00010101011010101010101010110101010101010110101010101" "00101010100101010101010101001010101010101001010101010" "11100101011010101010101010110101010101010110101010110" @@ -546,7 +641,62 @@ static void test_encode(const testCtx *const p_ctx) { "01010101010010101010101010010101010101010100101010110" "10101010101101010101010101101010101010101011010101001" }, - /* 5*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\015\012", -1, 0, 53, 53, 1, 1, "ISO/IEC 24778:2008 Figure I.1 (right) (CRLF at end), same", + /* 8*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\015\012", -1, 0, 53, 53, 1, 1, "ISO/IEC 24778:2008 Figure I.1 (left) (note CRLF at end!), same, see above", + "00010101011010101010101010110101010101010110101010101" + "00101010100101010101010101001010101010101001010101010" + "11100101011010101010101010110101010101010110101010110" + "11011010100101010101010101001010101010101001010101001" + "00101001011010101010101010110101010101010110101011010" + "01010110100101010101010101001010101010101001010100101" + "10101010011010101010101010110101010101010110101101010" + "01010101100101010101010101001010101010101001010010101" + "10101010101010101010101010110101010101010110110101010" + "01010101010101010101010101001010101010101001001010101" + "10101010101010101010101010101010101010101010101010101" + "10101010100101010100000010000100011110011001010101010" + "01010101011010010011110110111000110101111010101010101" + "10101010100100011100001111011001101011001101010101010" + "01010101011011001111111011100110111001001010101010101" + "10101010100101001000001100001111011001011101010101010" + "01010101011001100000011100110001110001100010101010101" + "10101010100001100100101000011101101100111001010101010" + "01010101011001000110001101100101011101111110101010101" + "10101010100101001101101000000010011100011001010101010" + "01010101011111010101111111111111110111010110101010101" + "10101010100110110101100000000000111000100001010101010" + "01010101011110111010101111111110101101000110101010101" + "10101010100010011000101000000010100100000101010101010" + "01010101011111010010101011111010101011110010101010101" + "10101010100000010001101010001010101011010001010101010" + "10101010101010101010101010101010101010101010101010101" + "01010101010101000111101010001010111100101100101010101" + "10101010101111111001101011111010111101000011010101010" + "01010101010110010001101000000010111100111100101010101" + "10101010101011010100101111111110101010010011010101010" + "01010101010000101110100000000000101111001000101010101" + "10101010101001000000111111111111111110110111010101010" + "01010101010101101100010110000110000111110100101010101" + "10101010101101110101011101100001010010100111010101010" + "01010101010000111001101101011011011010111000101010101" + "10101010101001011011011100100001001001001011010101010" + "01010101010001110110101010000110111100000000101010101" + "10101010101000001110110100101011000011001111010101010" + "01010101010001110010110111010101111111101100101010101" + "10101010101100100010010111110110111100001111010101010" + "01010101010000011101010001000010011111011100101010101" + "10101010101010101010101010101010101010101010101010101" + "10101010010010101010101010010101010101010101010101010" + "01010101101101010101010101101010101010101010101010101" + "10101001010010101010101010010101010101010100110101010" + "01010110101101010101010101101010101010101011001010101" + "10100101010010101010101010010101010101010100101101010" + "01011010101101010101010101101010101010101011010010101" + "10010101010010101010101010010101010101010100101011010" + "01101010101101010101010101101010101010101011010100101" + "01010101010010101010101010010101010101010100101010110" + "10101010101101010101010101101010101010101011010101001" + }, + /* 9*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\015\012", -1, 0, 53, 53, 1, 1, "ISO/IEC 24778:2008 Figure I.1 (right) (CRLF at end), same", "00111111111111111111111111111111111111111111111111111" "00000000000000000000000000000000000000000000000000000" "11101111111111111111111111111111111111111111111111101" @@ -601,7 +751,62 @@ static void test_encode(const testCtx *const p_ctx) { "00000000000000000000000000000000000000000000000000001" "11111111111111111111111111111111111111111111111111101" }, - /* 6*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[01]03453120000011[17]120508[10]ABCD1234[410]9501101020917", -1, 0, 23, 23, 1, 1, "#189 Follow embedded FLG(n) with FLG(0)", + /* 10*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\015\012", -1, 0, 53, 53, 1, 1, "ISO/IEC 24778:2008 Figure I.1 (right) (CRLF at end), same, see above", + "00111111111111111111111111111111111111111111111111111" + "00000000000000000000000000000000000000000000000000000" + "11101111111111111111111111111111111111111111111111101" + "11100000000000000000000000000000000000000000000000001" + "00101011111111111111111111111111111111111111111110101" + "10101000000000000000000000000000000000000000000000101" + "10101010111111111111111111111111111111111111111010101" + "10101010000000000000000000000000000000000000000010101" + "10101010101111111111111111111111111111111111101010101" + "10101010100000000000000000000000000000000000001010101" + "10101010101010101010101010101010101010101010101010101" + "10101010100100101111110001000100101100100000101010101" + "10101010101101111101110010111000101000111010101010101" + "10101010100101100101101111010110010110001000101010101" + "10101010101101110110011100100101011101001110101010101" + "10101010100100101010001101001001101000011100101010101" + "10101010101000101001010110111111111000100110101010101" + "10101010100000101001101101000111100001001100101010101" + "10101010101001011101100000110001101011000010101010101" + "10101010100100000111101000000010010100011100101010101" + "10101010101111001011111111111111111011111110101010101" + "10101010100110110111100000000000111101001100101010101" + "10101010101111001010101111111110100000100110101010101" + "10101010100001001000101000000010101010000000101010101" + "10101010101100110010101011111010100101111110101010101" + "10101010100010111111101010001010100001100000101010101" + "10101010101010101010101010101010101010101010101010101" + "10101010100111000101101010001010111101001100101010101" + "10101010101001000011101011111010110001011010101010101" + "10101010100111011011101000000010111000000100101010101" + "10101010101011100110101111111110100100011110101010101" + "10101010100001010110100000000000100011100100101010101" + "10101010101110101100111111111111110011110010101010101" + "10101010100100000010010110000110000110001100101010101" + "10101010101110101100110100111110100111001110101010101" + "10101010100100011000111110000001100011101000101010101" + "10101010101010100111001011111011100101111110101010101" + "10101010100011101001111001000100101000111100101010101" + "10101010101101100101110101110101101010110010101010101" + "10101010100101000101110100010000011101011100101010101" + "10101010101000110100111011110110000101000010101010101" + "10101010100101010001100000001011100001110000101010101" + "10101010101010101010101010101010101010101010101010101" + "10101010000000000000000000000000000000000000101010101" + "10101010111111111111111111111111111111111110101010101" + "10101000000000000000000000000000000000000000001010101" + "10101011111111111111111111111111111111111111101010101" + "10100000000000000000000000000000000000000000000010101" + "10101111111111111111111111111111111111111111111010101" + "10000000000000000000000000000000000000000000000000101" + "10111111111111111111111111111111111111111111111110101" + "00000000000000000000000000000000000000000000000000001" + "11111111111111111111111111111111111111111111111111101" + }, + /* 11*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[01]03453120000011[17]120508[10]ABCD1234[410]9501101020917", -1, 0, 23, 23, 1, 1, "#189 Follow embedded FLG(n) with FLG(0)", "00100000101111000100100" "00011101100110001010000" "00000111000111101011011" @@ -626,7 +831,32 @@ static void test_encode(const testCtx *const p_ctx) { "00010001010101010101011" "11101100000000000010110" }, - /* 7*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[01]95012345678903[3103]000123", -1, 0, 19, 19, 1, 1, "#189 Follow embedded FLG(n) with FLG(0)", + /* 12*/ { BARCODE_AZTEC, GS1_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[01]03453120000011[17]120508[10]ABCD1234[410]9501101020917", -1, 0, 23, 23, 1, 1, "Same as above", + "00100000101111000100100" + "00011101100110001010000" + "00000111000111101011011" + "01000001010100001100010" + "00001001100110000111110" + "00011011111000110101101" + "00001011100111101111110" + "11000111111111111010000" + "11001101000000010111110" + "00111011011111010111110" + "01000001010001011110010" + "00011001010101011111101" + "01101111010001011110011" + "10011001011111011011100" + "01011011000000010010110" + "00011101111111111001100" + "10101100110111100001101" + "10110101111100111010001" + "11101001010000011001110" + "00101010101010001111001" + "11000101000100100000100" + "00010001010101010101011" + "11101100000000000010110" + }, + /* 13*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[01]95012345678903[3103]000123", -1, 0, 19, 19, 1, 1, "#189 Follow embedded FLG(n) with FLG(0)", "0000000100001010101" "0001101111011000000" "0111100100010110100" @@ -647,7 +877,71 @@ static void test_encode(const testCtx *const p_ctx) { "1000110111011000101" "1010100000101101001" }, - /* 8*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[01]04610044273252[21]LRFX)k\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", -1, 0, 23, 23, 0, 1, "HIBC/PAS Section 2.2 Patient Id Macro **NOT SAME** different encodation, Zint 1 codeword longer; BWIPP same as figure", + /* 20*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "/ACMRN123456/V200912190833", -1, 0, 19, 19, 1, 1, "Same as above", + "0001110111000101110" + "0010000101001101000" + "0101011111101000101" + "1001011010110011000" + "0001110101100010100" + "0001111111111110010" + "0010110000000100011" + "0011010111110110010" + "1011010100010101011" + "1001110101010110011" + "0011010100010111110" + "0010010111110110001" + "1011110000000111101" + "0010011111111110000" + "1010000100111001100" + "0000000111110111100" + "1111010101111100001" + "0010110100110111011" + "1101111110100000110" + }, + /* 21*/ { BARCODE_AZTEC, ESCAPE_MODE, -1, -1, -1, 3, -1, { 0, 0, "" }, "[)>\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", -1, 0, 23, 23, 1, 1, "HIBC/PAS Section 2.2 Patient Id Macro, same", + "11000001111110000001101" + "11110100010110110001101" + "10011001100011001111001" + "10100010111011011100001" + "01010010110101110000100" + "01100010101111110101101" + "01100111100111001101001" + "10001111111111111011010" + "11010101000000010111100" + "00111101011111010000101" + "10010101010001010110011" + "10100001010101011001011" + "01011111010001010000111" + "00010101011111010100110" + "11011101000000010101111" + "11000101111111111101000" + "10101000110001100000110" + "00100111000001011001011" + "01101100001101100010010" + "11011111101011111111100" + "10110101010000111010010" + "01000110011100010011000" + "01000101001001110111010" + }, + /* 22*/ { BARCODE_AZTEC, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[)>\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", -1, 0, 23, 23, 0, 1, "HIBC/PAS Section 2.2 Patient Id Macro **NOT SAME** different encodation, Zint 1 codeword longer; BWIPP same as figure", "11010110110000110111011" "10111111001000110100000" "11000001011011010011010" @@ -761,7 +1122,7 @@ static void test_encode(const testCtx *const p_ctx) { "11110110111110011000100" "10110000010101011110010" }, - /* 12*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, 3, -1, { 0, 0, "" }, "/EO523201", -1, 0, 19, 19, 1, 1, "HIBC/PAS Section 2.2 Purchase Order, same", + /* 23*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, 3, -1, -1, { 0, 0, "" }, "/EO523201", -1, 0, 19, 19, 1, 1, "HIBC/PAS Section 2.2 Purchase Order, same", "0011100011001101111" "0010011001010110110" "0110100100101000000" @@ -782,7 +1143,28 @@ static void test_encode(const testCtx *const p_ctx) { "0111011100001111101" "1010000000101001001" }, - /* 13*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "/KN12345", -1, 0, 19, 19, 1, 1, "HIBC/PAS Section 2.2 Asset Tag, same", + /* 24*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, 3, -1, -1, { 0, 0, "" }, "/EO523201", -1, 0, 19, 19, 1, 1, "Same as above", + "0011100011001101111" + "0010011001010110110" + "0110100100101000000" + "1001111000110011001" + "0011110100101011001" + "0001111111111110101" + "0001010000000100100" + "0001010111110101000" + "1000010100010100011" + "1001010101010111001" + "0000010100010110100" + "0111010111110111101" + "1000110000000101001" + "1001011111111111010" + "0010000000111001101" + "0110010000010110011" + "1110001000101101001" + "0111011100001111101" + "1010000000101001001" + }, + /* 25*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "/KN12345", -1, 0, 19, 19, 1, 1, "HIBC/PAS Section 2.2 Asset Tag, same", "0011111101100100110" "0010011100111110101" "0111110010101101110" @@ -803,7 +1185,28 @@ static void test_encode(const testCtx *const p_ctx) { "0010000010110001111" "1001101110111100011" }, - /* 14*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "A123ABCDEFGHI1234567891/$$420020216LOT123456789012345/SXYZ456789012345678/16D20130202", -1, 0, 27, 27, 1, 1, "IDAutomation example, same", + /* 26*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "/KN12345", -1, 0, 19, 19, 1, 1, "Same as above", + "0011111101100100110" + "0010011100111110101" + "0111110010101101110" + "1000010111011000001" + "0001110100101010001" + "0010111111111110110" + "0001110000000111110" + "0000010111110110011" + "1010010100010100000" + "1011010101010100101" + "0010010100010100100" + "1101110111110110110" + "0011110000000110110" + "0100011111111110100" + "1110000011111000011" + "1100001111010010010" + "1100001101001110001" + "0010000010110001111" + "1001101110111100011" + }, + /* 27*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A123ABCDEFGHI1234567891/$$420020216LOT123456789012345/SXYZ456789012345678/16D20130202", -1, 0, 27, 27, 1, 1, "IDAutomation example, same", "001010100100100010000010110" "000110110110001000101000100" "010010001101110110001000110" @@ -832,7 +1235,36 @@ static void test_encode(const testCtx *const p_ctx) { "011010111000111110011011110" "000010010001000011010000001" }, - /* 15*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, { 0, 0, "" }, "\377\000\000\377\300\000\017\377\376\217\300\017", 12, 0, 19, 19, 1, 899, "6 bit words", + /* 28*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A123ABCDEFGHI1234567891/$$420020216LOT123456789012345/SXYZ456789012345678/16D20130202", -1, 0, 27, 27, 1, 1, "Same as above", + "001010100100100010000010110" + "000110110110001000101000100" + "010010001101110110001000110" + "000110101101000001010111100" + "000101110011011000111100000" + "000100110000110111011011010" + "011100000100000111111000001" + "011101111110011100111011100" + "110001001111110110101101100" + "100100001111111111100110000" + "001000101100000001011001101" + "111011010101111101111010001" + "010010101101000101001101100" + "001000110101010101010011100" + "011011001101000101010011111" + "011111010101111101000100100" + "110000011100000001001111011" + "101110110111111111111001001" + "001110110000000110000001101" + "010010001010001000001011001" + "000100111010110100000100110" + "000010100010001000000111001" + "111100011100100010001100100" + "001110101000001010011010101" + "100001000110111011000010111" + "011010111000111110011011110" + "000010010001000011010000001" + }, + /* 29*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\377\000\000\377\300\000\017\377\376\217\300\017", 12, 0, 19, 19, 1, 899, "6 bit words", "1101000001111000001" "1101011000011100000" "1000001010001001001" @@ -853,7 +1285,28 @@ static void test_encode(const testCtx *const p_ctx) { "1011110000001001011" "0011111100000000010" }, - /* 16*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 3, { 0, 0, "" }, "\377\377\377\377\377\000\000\000\000\377\377\377\000\000\377\377\377\377\000\000\000\000\000", 23, 0, 23, 23, 1, 899, "8 bit words", + /* 30*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\377\000\000\377\300\000\017\377\376\217\300\017", 12, 0, 19, 19, 1, 899, "Same as above", + "1101000001111000001" + "1101011000011100000" + "1000001010001001001" + "0110011100001000011" + "1001110101001011011" + "0111111111111110100" + "1111010000000110101" + "1110110111110100001" + "1010010100010101001" + "1110010101010111111" + "0001110100010101011" + "0000010111110101101" + "0011010000000110011" + "0011011111111110011" + "0110000011010001001" + "0010101001100111111" + "0001000100011100011" + "1011110000001001011" + "0011111100000000010" + }, + /* 31*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 3, -1, { 0, 0, "" }, "\377\377\377\377\377\000\000\000\000\377\377\377\000\000\377\377\377\377\000\000\000\000\000", 23, 0, 23, 23, 1, 899, "8 bit words", "11111111111111111100000" "11011101110111011110001" "11110110111011010101100" @@ -878,7 +1331,32 @@ static void test_encode(const testCtx *const p_ctx) { "11011100001000100010010" "11111110000000000000000" }, - /* 17*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 13, { 0, 0, "" }, "\000\000\000\377\377\000\000\000\000\377\377\377\377\000\377\377\377\377\000\000\377\000\000", 23, 0, 53, 53, 1, 899, "10 bit words", + /* 32*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, -1, -1, -1, 3, -1, { 0, 0, "" }, "\377\377\377\377\377\000\000\000\000\377\377\377\000\000\377\377\377\377\000\000\000\000\000", 23, 0, 23, 23, 1, 899, "Same as above", + "11111111111111111100000" + "11011101110111011110001" + "11110110111011010101100" + "01111000111100011111100" + "11000101111110011010100" + "11001111001011001100000" + "11000111100110101001011" + "10001111111111111100111" + "11000111000000011111011" + "11010111011111010001101" + "11000011010001011010111" + "10000101010101011000011" + "11001011010001010001011" + "11011011011111011101001" + "11001111000000011010011" + "10001001111111111111011" + "11001100000000000000111" + "11011011001100000010011" + "11000011001011110101011" + "10001000111111011110000" + "11000000001110101011000" + "11011100001000100010010" + "11111110000000000000000" + }, + /* 33*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 13, -1, { 0, 0, "" }, "\000\000\000\377\377\000\000\000\000\377\377\377\377\000\377\377\377\377\000\000\377\000\000", 23, 0, 53, 53, 1, 899, "10 bit words", "00011010011110010011110101110010000000111111010101001" "00000010100101010010001000010100000010101101001111110" "11101010001110100001111100110101111010110110110001010" @@ -933,7 +1411,62 @@ static void test_encode(const testCtx *const p_ctx) { "11101111010111010000111101011101111011000000001011100" "11111111111111110000111111111111111111100010000011111" }, - /* 18*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 27, { 0, 0, "" }, "\377\377\377\000\000\377\377\377\377\000\000\000\000\377\000\000\000\000\377\377\000\377\377\377\000\000\000", 27, 0, 113, 113, 1, 899, "12 bit words", + /* 34*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, -1, -1, -1, 13, -1, { 0, 0, "" }, "\000\000\000\377\377\000\000\000\000\377\377\377\377\000\377\377\377\377\000\000\377\000\000", 23, 0, 53, 53, 1, 899, "Same as above", + "00011010011110010011110101110010000000111111010101001" + "00000010100101010010001000010100000010101101001111110" + "11101010001110100001111100110101111010110110110001010" + "11000010110001100001000100010011110110001001110110011" + "11101001111011111001010000100101101011101010101000100" + "01110000100100011010101111011100111000100001000011011" + "11001000001101011010001111100001101111000011010001110" + "00001110000100111010100000000110101111011101001101001" + "00101001111001011001001000110011011001110011110010111" + "00001110100001001111111111001011001010001101001101111" + "10101010101010101010101010101010101010101010101010101" + "00010011000110111100001100011010011010101101000001000" + "01110111011000100011111111111111010100110010010100110" + "00011101100100100001111111000100111100010101101010011" + "00010100011010010011101101101001100101111110110010011" + "00110110000001100111111101001111100011110101011110000" + "00111110111111001011010000100001100001101010001101110" + "01010011000110100110101111000100000010000000000111110" + "00011001011011101101110111100010000100010011111011110" + "00011010000111001001101000000000010100110001000111010" + "00000100001011100111111111111111111000010010001010101" + "11110000100101010111100000000000100000101101001011100" + "11100011101111001100101111111110111111010110000001111" + "11000000010100001101101000000010100100010000101010110" + "11011000001010101011101011111010110100101011100111110" + "11101111100010111000101010001010101011011001010101001" + "10101010101010101010101010101010101010101010101010101" + "11000100000110100000101010001010101100101000011000011" + "10110100011010000110101011111010100100100111000101100" + "11000001010101000101101000000010111010100100000101001" + "10110111011110011110101111111110110011001110000001100" + "00000111100110110001100000000000111000101101111011111" + "00100101001001100110111111111111110110100111011101000" + "00001100110000110010001101011000001100110001110010010" + "00001010111110011011011100110001001110011110100100100" + "00111111000010000111110111010111101010101101000100010" + "00110100101110101000101110100101010110101111001010100" + "00100100000010111111001101001100000011110001111100101" + "01011111101101001110100101101000000111101110110111001" + "00001111000100101010011111001100011101011100010011010" + "00001011111001000011100001100001000001111011010101111" + "00000101010011100101010000010010000010011001111101011" + "10101010101010101010101010101010101010101010101010101" + "00000011000011110011111000001000000110011100110110010" + "01100110111101101010001110101001111111000111011110000" + "00010110000111101110001011011110001100100100000001000" + "00110110011101001010011110111110111101010110001011100" + "00100010010011101001001010000101011011011101011100010" + "01101001101111101010010000110100110011000111011010000" + "11110001000011110111001100010011011001010001110101000" + "11011000101001001101101111100111101001010110111011100" + "11101111010111010000111101011101111011000000001011100" + "11111111111111110000111111111111111111100010000011111" + }, + /* 35*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 27, -1, { 0, 0, "" }, "\377\377\377\000\000\377\377\377\377\000\000\000\000\377\000\000\000\000\377\377\000\377\377\377\000\000\000", 27, 0, 113, 113, 1, 899, "12 bit words", "11111010101001000010110010110110001010111011100001100010111010111011011110010101111001111110001101011111100000011" "11111001010001010111110100101000101000010110010011001000011010011001111000010101011110010001110101100110011001100" "11101100111000011000000011000001001001111001111110000001110100001110010010001100100011101110000011010101101011011" @@ -1048,7 +1581,122 @@ static void test_encode(const testCtx *const p_ctx) { "11000000001000001011101101101101101001100000101000000000010111000000100101000110010000110010000011000101011111000" "11100000100000001110111110110000111110011100000010001110101010101111000011001011111001101101010010001011111011101" }, - /* 19*/ { BARCODE_AZTEC, UNICODE_MODE, -1, READER_INIT, -1, 1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "", + /* 36*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, -1, -1, -1, 27, -1, { 0, 0, "" }, "\377\377\377\000\000\377\377\377\377\000\000\000\000\377\000\000\000\000\377\377\000\377\377\377\000\000\000", 27, 0, 113, 113, 1, 899, "Same as above", + "11111010101001000010110010110110001010111011100001100010111010111011011110010101111001111110001101011111100000011" + "11111001010001010111110100101000101000010110010011001000011010011001111000010101011110010001110101100110011001100" + "11101100111000011000000011000001001001111001111110000001110100001110010010001100100011101110000011010101101011011" + "10110010001100011001110101101111111010100000010000011010011100111110010000000111011110010111110001010010000011001" + "11101111110100000110110011100000101100011010001010011100110001010111001110011001100010101101000101001000110110110" + "11000001000111110000011001001100110001010000000001010111000100101100100000011011001001000111011001101101001111101" + "11011101101011110011011110111101101101001100010010101010100001111111100110011101010100011100110111111101101100000" + "11011110000101110011110000101111100111100101011010100010011000011100010001111000100110100101011011001101011001101" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "11101110000011011000110000100100010110100010110101111111000011111011010101010011000101000110111111111011001101111" + "11010011100011001101011011110000010100011001100100111111111110001010111110000000001111001110000001111011110100101" + "11110101011101110000011001000111000101000011000110111011000110110011100100000111101100000011000100001010011111001" + "10111001111000101000101111110101001000001000001100011100111001011010001110110000101011001001111001100011101001010" + "11101000001010100010000000100110101011010100010000110101010111111011000101110100001101110110010101010101011010000" + "11101110101000010010010111101100100110111000111001011010110110010001111010010011011100001001011101110010110111111" + "11101110001111110110010000110111101100010000111100110111000110111101101001111001101010010100011010001001001110001" + "11111000100110000011010110111010101001001011001101111000110110001011000110100000100100001111000000000100101010001" + "11001110001110100010000001100110100001100010001110001011000100111100111101100000011101000001010110101111010011001" + "10100001101001100010010010110010111001101000010101110110111010000111100110000001110111111000110001000110100100101" + "00111101011000111111010101011111111011000000001110101111011101110111100100011111001100110000110000011001010001100" + "00000011111100000101111110100000010010101000000011011011111110011000100010011000010100011001010101001000101100001" + "00000010011110111000110101001101011101010011011111011111010110100000111000100001110010110001110111110101001100011" + "00100101101010111011111011011011100110011100100111100111101011010011100010100110101011001111111010100111111011111" + "00100001011101110100100001001101011101010111100001000100001000110111111100010011110001010000100001110001000001111" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "01101111010111101011110101110001010000100011000111100011010110111101011101000001001011110111110101100000001010101" + "00011110100001100110001010110011001011011110110110110000101100100110100110001111111011111111010100111000101101111" + "00001100001111101101101000011101111101100100001011000001001000010111101100100011101101110001010010111001001111111" + "01001010110111011110001110101011101100111110100101100000101001111101010011001111110101011110101011100001100010001" + "11111110010100000110111001001010100011010100110101011101001000111010100100010011011111000100001100000000001100100" + "11101010100001010011100010010010100010001000001000110000110110000100011110001101001101111111110011001010101101110" + "11010001000111100010100000111000011111000110011101100001001011010110111001101011111100000000000001010011010111010" + "11001011110110001001101111000111101010011100001011011001101010000000110111111011100011111010100100001110100001001" + "11110111010110000000011100111110101000110110101110001000011011111010001001111000110010110011110110010110001100101" + "11011000101011000111010111110110101000001010001011111000101010110010110011000100100101001100010110100001111111110" + "11001100010000000000101100001110011101100111100110101110000100101010111000100001001000000001011111100100011111011" + "11001000101100010101000010000100110001001101101110100100100111110111011011010111100011101011001001100001110010110" + "10000100001000101100011001011111100110010111111111011011000011011110001100001000101110100100001010010000000001110" + "11001001100000100110010111011101111010111011110011100110110011110110111011011101000001111001100111111100110110010" + "11110100010011101010111101111011100100010001110000100010010100011110001101101100000110100110001010001100000110110" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "11101010011001111101000001000100111100010111100110100011011111100010100100100100101000000000011110011010011111100" + "11011000110000000101010110110011111000111110100100000011100111011010110111101010110000001011111100010110111101101" + "11100100001010010001100001001100000011100000110001000110011110100000001101000000101000000000111111011111001011111" + "10110100101101001001110110110000100011111101000011110010101110001111001010010110100100001001111111101000111111111" + "11110111000000010110101000100110010010110011111011100001001001101110111101001101111001100101111010110110010010110" + "10101010111100101100111010010101101111001101011101100110101000101011110011001001011001011010000111100110110001100" + "00011000010111101000001001100001101110000101000100001100011010111000100100011111001101110010101010100011011000000" + "00000001111010100010111111010011001010011100111010010001110001111100000111000100011011101000011111000011101011111" + "00101011000110101001011000111011011001010100111101110110000000010011101100100011101001110111001101011110000000011" + "00010000101001010000110011111001001110111111011011111111111111110010110110011111010101101110111011111001111001100" + "00000011011110011110000101111111101001000011011010100000000000100100010101010110111110100000000101100011011100101" + "00010111100101101100111111000001100010011011011010101111111110110110100011001010000100111001100001101001100100010" + "00001011011111110001111001100001000111000000010011101000000010100011100100001110000011000100111111010001011011001" + "00110000100100110001100110101011100110111011100001101011111010101111100110111011010000111011011001001110110100001" + "00011001010000110100101000001000011000110011111011101010001010111010101001111011110010000111010001110101011110010" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "01100111001110010110110100001110110000000110011110101010001010110000011001000001000101100010011011100101000111001" + "00101001100010010001111010100101101110111011101000101011111010100001011110110000010010101100110011011010111001101" + "00000100001011011100011101111011101110110010010100101000000010111010010100110110101110110000100010101100001011011" + "00110010111110000001110111010110010101101101000000101111111110111000110111100000001111001011010001000110101010110" + "00100101010110001001011100111010111001110110111111100000000000110010011000111011101110000010100011011001000001001" + "00000000111101111101111110111000101000011111000100111111111111110100010011100110010001101011001100111011110101110" + "01011111001111001111101001100010110011000001010110011110010001000110101001101111110100000000111100001101010010000" + "01110001111101111010111011100110010011101111011111100000100101001111010111111101100111001100101001111000100011011" + "11101100000100010100011100001011011101010101101101001010000101001111100101101100001100110101001010100000010000011" + "11001111110100111000110111111000110001001111110000010111101010000000010011100111010011111000101111100000101111101" + "11111011011110101010100101110100001011110000000000010001011011001111000101010000001100000111100001100110001100101" + "10001111111110011011110011111110001110011000010011101000101000011100111010000101111110001110011110001101100001101" + "00001100001010000010100001011101011100110010110010001000010010011101011001110011011001110001100111101110001001001" + "00100110110000000101000010110101010001001110101110000010110110101111001010011011110111101011101010011000110010000" + "00011111000011010010101000010001110010100110101010010101000010101111100100010010111010110000010011111100011000100" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "00100110010000010110110100011110100001000011011000110110001011000011011101101011101010100101110110101111010010101" + "00001100100010111111111011011000100110101110110010000111100110001100111110001110101100101100001011001101100100100" + "00000100000110001111010000100000100011010000011111111010011011110000111000011110001000010101100001100001010010110" + "01010011111111111100001010101100001010111101001111100010111110010000101010100000011100101001110011011110101011101" + "00100110001010001111011101101111100000000000001101010011010111010100100000010011101011100101111001111101011100101" + "00111011100011001100100011001110001011111010000101101001100110001110111010111110000101111100011110010110101110100" + "00011000001101000110001001000010010101010111011101100101010000000101100000010001111001010101100101100011001000110" + "00101001111001011010110111010101001010101111111011010111100111001100010010010001101010111000100111000110111101110" + "00001000011101110110110101111110100010100100011110000111010100000100010100101111010101110101001111000101001110010" + "01010111110111001101011110101101001110001011010011011111100000100011101010101110111101001111110001100010111001011" + "00000111000100111011101101010100001100100110010110010010011000111000010000011100000110100010000100001011011011010" + "00001101101110011111110010000111100110111100101011011110111111010101111111000000111110011011110000010111101100000" + "00010010001110011111110101110000001100010001111001101111000000101000000001010001100111100001101100010010010111110" + "01110011101110110110110011011101110100001010010110100110110011101011100011001111011110111110101111011101110010001" + "11111010000100110111101100110110111010110011110111110010000010011000011101111101001101100100111000110001011110001" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "11010010010101011110111001111011101100010101010111000000011011011111101100010000000100000011100111000011010101101" + "11001111111111001010101010000001010001011100101100110110100110111010101011101111100100011011100110110101101010011" + "11110011000011100100010001101001000101000010111111010101001110110000010000000001000101010101100111010110011101100" + "11100101100001000110100111011001011000001100010001100110101111110110101111100101010001001100110011010101101001110" + "11111001000100001001110100011001001110010011001100000000011111000110010000010100001011010010100010111111000100001" + "11001100111001110001010011110110011110101010100001111011111010111011011011010010110010101000001111000100111100110" + "10010100001100111111100101101000111001110111010011011110000000110111001101100010110110100001111011001011011000100" + "00111010100010111011001111110001000000101010011111111111100000100101110110101010011101111010110100100001100001100" + "00110001010001110111011100011011110111110110100010000100011011110100000000100000101000000010010100011101010100100" + "00101000100110010001111010000110100101011000011111101110110000100111100011000110000010011011111100100010110011000" + "00000101001010101000010101000110010110110101000100100110011010100101110000110100100111010100111100100100011110111" + "11011100101011111001110111001000101111001001101101010111101101011110110011110110001110011001001000010010110001101" + "11000010011001001000100101001100111011000101100000111110011011110011100101000010101011000000110000100101011010000" + "11000001111010110010111011110100100100101100111101111100111010000011110010011001111110101100101000001000100110010" + "11110111000001001010010000001000101101110101001110110011011011011010010101111110000000000111001111010010011000111" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "11000011011111001011001101010001011100100111010000101011000101111101101101000101110101110110010011100011001101100" + "11001000101111010000101011101000011011001010110010101000100011110101111111000001000110001101100001001110111100101" + "11101110000100001111001001001101100111000010011100011111001010100010101000011110000111000010101001100010010001111" + "10000001111010110010110010001111101001111011011100110001111111001011010010100000001011001111010010101100111010111" + "11110101011110010111100001100001000000010111111010101111000001100011111101110001000001000001100000100110000001011" + "11101101100010110000110110001100111001001101000101110001101010000111011110000001111001011010110100011101110011100" + "11000000001000001011101101101101101001100000101000000000010111000000100101000110010000110010000011000101011111000" + "11100000100000001110111110110000111110011100000010001110101010101111000011001011111001101101010010001011111011101" + }, + /* 37*/ { BARCODE_AZTEC, UNICODE_MODE, -1, READER_INIT, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "", "000011000111101" "001110010011000" "011100100000100" @@ -1065,7 +1713,24 @@ static void test_encode(const testCtx *const p_ctx) { "110110000101100" "010001010010110" }, - /* 20*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 2, { 0, 0, "" }, "121212121abcd", -1, 0, 19, 19, 1, 1, "#210", + /* 38*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, READER_INIT, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "Same as above", + "000011000111101" + "001110010011000" + "011100100000100" + "011111111111110" + "101100000001010" + "110101111101100" + "111101000101010" + "100101010101000" + "100101000101111" + "100101111101101" + "000100000001010" + "100111111111100" + "100011001110001" + "110110000101100" + "010001010010110" + }, + /* 39*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "121212121abcd", -1, 0, 19, 19, 1, 1, "#210", "1101101111001101010" "1101111011110110000" "0001111101100010000" @@ -1086,7 +1751,735 @@ static void test_encode(const testCtx *const p_ctx) { "0011111001001010011" "1001101000100100001" }, - /* 21*/ { BARCODE_AZTEC, DATA_MODE, 3, -1, -1, 1, { 0, 0, "" }, "\101\300", -1, 0, 15, 15, 1, 899, "AÀ", + /* 40*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "121212121abcd", -1, 0, 19, 19, 1, 1, "#210, same as above", + "1101101111001101010" + "1101111011110110000" + "0001111101100010000" + "0100011111001001001" + "1010110100101010010" + "1000111111111111101" + "0001110000000111110" + "0111010111110110100" + "1001010100010101010" + "1001010101010101100" + "0010010100010101100" + "0110110111110111011" + "1001110000000111010" + "1011011111111110010" + "0011000011111001100" + "0110100001100101011" + "1001001010110011011" + "0011111001001010011" + "1001101000100100001" + }, + /* 41*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "4\000:", 3, 0, 19, 19, 1, 1, "", + "1111001000000011100" + "1100100101110000100" + "1010011010100010011" + "0011110011010111101" + "0100110100011011100" + "1000111111111111011" + "0111010000000100100" + "1001010111110111101" + "1001110100010111101" + "0001110101010111110" + "0010110100010100010" + "0101110111110111111" + "0011110000000111010" + "0010011111111111101" + "0111001011001001101" + "0100001011101101010" + "1111010001010110100" + "1111101010111001001" + "0011111000011010100" + }, + /* 42*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "4\000:", 3, 0, 19, 19, 0, 1, "BWIPP: different encodation, one codeword shorter (see above)", + "1100110110001101111" + "1100110000100110010" + "0010011101101111010" + "1100010011001100011" + "0100110100011010100" + "1100111111111111011" + "0110110000000110000" + "1111010111110100101" + "1101110100010110111" + "0001110101010101011" + "0001110100010111101" + "1001010111110111101" + "0001110000000101011" + "0001011111111111001" + "0100001000001000010" + "0000001100100111000" + "0000111011010110111" + "1000110111011101111" + "0011111000100011101" + }, + /* 43*/ { BARCODE_AZTEC, ESCAPE_MODE, 899, -1, -1, 4, -1, { 0, 0, "" }, "\\xA4\\xE2\\x80\\xB8\\xEF4\\xF80O\\xE0|3\\xF2\\xD8\\xA54\\x8A\\xE2kb\\x06\\\\\\x0ADe_\\xA3\\x9C\\xCF\\xDB\\xC0\\xE4", -1, 0, 27, 27, 0, 1, "BWIPP: different encodation (1 codeword longer)", + "001110010010001000001101100" + "000110001011101111010010001" + "001000100001000111101110010" + "010110000110110001011100000" + "001111010111100011001111111" + "001000001101010100000000001" + "111011010101111000011000110" + "101011100101000001101111110" + "101010101111100100100000101" + "101101101111111111100000111" + "111110001100000001110010011" + "101001010101111101110100010" + "111001011101000101001010101" + "110100111101010101100001110" + "110110111101000101110011000" + "101111101101111101001011101" + "101010111100000001010000011" + "010010100111111111100111011" + "010111000001110110010100100" + "011001100111011110111101100" + "001111001000110101100100000" + "101111000110110101010110011" + "011001111111000001000000011" + "111111110001011010111101111" + "000100111101101010111011110" + "110001110111101001110010001" + "000000010010110110110001000" + }, + /* 44*/ { BARCODE_AZTEC, ESCAPE_MODE | FAST_MODE, 899, -1, -1, 4, -1, { 0, 0, "" }, "\\xA4\\xE2\\x80\\xB8\\xEF4\\xF80O\\xE0|3\\xF2\\xD8\\xA54\\x8A\\xE2kb\\x06\\\\\\x0ADe_\\xA3\\x9C\\xCF\\xDB\\xC0\\xE4", -1, 0, 27, 27, 0, 1, "BWIPP: different encodation, 7 codewords shorter", + "001010110111011111001111101" + "000001100111001101110110110" + "001000110001110111010101111" + "010101010001101111010110101" + "000100100100101011011100011" + "001101011100100011001110100" + "111111011011011000000100100" + "100001010111001110111010101" + "101100111111101100110011011" + "100101011111111111101110110" + "111101001100000001111001100" + "100111100101111101111101101" + "111100001101000101100111111" + "111101000101010101010101011" + "110010010101000101011111100" + "100101000101111101000100100" + "000111001100000001111001110" + "100001010111111111101000111" + "110101000000100100011011010" + "010100011110000010101110010" + "000101001010011011011000100" + "101100111000001110111101111" + "010010010000111011110101011" + "111110100011001100001101000" + "000010010011110111111110101" + "110001110111111010101100111" + "000000010010111101111110011" + }, + /* 45*/ { BARCODE_AZTEC, ESCAPE_MODE, 899, -1, -1, 2, -1, { 0, 0, "" }, "*; )WF+", -1, 0, 19, 19, 1, 1, "", + "0000111010001110001" + "0000111101000011001" + "0101101110101001101" + "0001101000111000001" + "0011110100110010101" + "0100111111111111101" + "0100110000000111101" + "1110110111110100000" + "0100110100010111101" + "0110010101010110101" + "0111010100010111010" + "1110110111110100010" + "0110010000000111000" + "1011011111111110101" + "0011001100100001110" + "0010101000000010000" + "0111110010100000000" + "1000010010001010011" + "1100110000001110010" + }, + /* 46*/ { BARCODE_AZTEC, ESCAPE_MODE | FAST_MODE, 899, -1, -1, 2, -1, { 0, 0, "" }, "*; )WF+", -1, 0, 19, 19, 1, 1, "Same as above", + "0000111010001110001" + "0000111101000011001" + "0101101110101001101" + "0001101000111000001" + "0011110100110010101" + "0100111111111111101" + "0100110000000111101" + "1110110111110100000" + "0100110100010111101" + "0110010101010110101" + "0111010100010111010" + "1110110111110100010" + "0110010000000111000" + "1011011111111110101" + "0011001100100001110" + "0010101000000010000" + "0111110010100000000" + "1000010010001010011" + "1100110000001110010" + }, + /* 47*/ { BARCODE_AZTEC, DATA_MODE, 899, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "\200F`\015\012", -1, 0, 19, 19, 1, 1, "", + "0010111110010100100" + "0011001011010001010" + "0011000000000000110" + "0111111111111111101" + "0011000000000001001" + "0001011111111101011" + "0111010000000101110" + "0111010111110101010" + "1101010100010101111" + "0101010101010101010" + "0111010100010101111" + "0101010111110101010" + "0101010000000101110" + "1111011111111101001" + "0101000000000001011" + "1101111111111111101" + "1100110110100110000" + "1001000011110010011" + "1001000000111111010" + }, + /* 48*/ { BARCODE_AZTEC, FAST_MODE, 899, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "\200F`\015\012", -1, 0, 19, 19, 0, 1, "BWIPP: different encodation, 1 codeword shorter, see above", + "0011101100000101001" + "0010101111101010000" + "0011000000000000101" + "0111111111111111111" + "0011000000000001010" + "0011011111111101000" + "0111010000000101111" + "0111010111110101111" + "1111010100010101010" + "0101010101010101010" + "0101010100010101000" + "0101010111110101011" + "0101010000000101011" + "1111011111111101101" + "0111000000000001010" + "1101111111111111100" + "1100111110001100000" + "1001000011110010010" + "1001000000111111000" + }, + /* 49*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGH\032abcdefgh\032ABCDEFGH\032~~~~~~~~\032ABCDEFGH\032;;;;;;;;;\032ABCDEFGH\032123456789\032ABCDEFGH", -1, 0, 37, 37, 1, 1, "Cycle from Upper to other modes between Byte-onlys", + "0010100101001100111100111001110011111" + "0101111100001111100011100111001110001" + "1010101010101010101010101010101010101" + "0000000110111011000111100001110100001" + "0010110110100000101110010100111000111" + "1100000000100011110000101100010110001" + "0010011001000011101110110111100011101" + "1001101111100010100011011111010010010" + "0010001001111111111011111110101000100" + "0101001101110001110110010111111011010" + "0110011010110100001011111010010100100" + "0000111001011001000000010110110010001" + "1110101010011111111111111110001010111" + "0000011110001000000000001011011100011" + "0111111000001011111111101010111001110" + "1100000001011010000000101000100100001" + "0110100101001010111110101110011111100" + "0001110011101010100010101010110100000" + "1010101010101010101010101010101010101" + "0000100000101010100010101101111000010" + "1010011101001010111110101100000010111" + "0100001001001010000000101011111100010" + "1111000110111011111111101110111101100" + "1100100000001000000000001100100101011" + "1011110010001111111111111101101110100" + "0001100111000100100100110000110100010" + "0111001011110110101001100100001110110" + "0000010111001001000001110001001000000" + "0110101110100100001100001001000001101" + "1000000101110100100011110101110011000" + "1010100010010001011110111101111011111" + "1101001101011100010111000000101111000" + "1010101100111001111001110011100111100" + "0001111111100111000111001110011110010" + "1010101010101010101010101010101010101" + "0000101000010010000101110000111101000" + "0110010001101011101001110010100111101" + }, + /* 50*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "abcdefgh\032ABCDEFGH\032abcdefgh\032~~~~~~~~\032abcdefgh\032;;;;;;;;;\032abcdefgh\032123456789\032abcdefgh", -1, 0, 37, 37, 1, 1, "Cycle from Lower to other modes between Byte-onlys", + "1111100001111100111100111001110010110" + "1000010100110011100011100111001111011" + "1010101010101010101010101010101010101" + "0001100000101100100100111000111010010" + "0011011101100111101000111010001001111" + "1000010100100111010001111111110101000" + "0010001111001110101111010111111101101" + "0101011001000010100001010010011100000" + "1010010101000000111101100101110000100" + "0100100000011101000110001111000110011" + "0011010000011101001000000000110101111" + "0000101010011001000000010100010110011" + "1010010101111111111111111110010100100" + "1000010111111000000000001011101001010" + "0111010010011011111111101010011000100" + "1001011001111010000000101000110100001" + "0010111111011010111110101110100001101" + "1101010111011010100010101110101111011" + "1010101010101010101010101010101010101" + "1000011011111010100010101111111101000" + "1011111100111010111110101010100101101" + "0001010010101010000000101110000010010" + "0111000011001011111111101011011000101" + "0000001111111000000000001100010110001" + "1110100011001111111111111110011100100" + "1100001000100110010110110000100101000" + "1111110101110011101000000110011101110" + "0001110011101001110010001101010011001" + "0011111111101001111001101100101111110" + "1000010111101010100011111110010111000" + "0010000001010000101010001011101011101" + "1101000100100011010011100011111101000" + "0110111111111001111001110011100110100" + "0100100101100111000111001110011110001" + "1010101010101010101010101010101010101" + "1001001001000110100111000111001010011" + "1111100001010000101010001011100001101" + }, + /* 51*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "~~~~~~~~\032ABCDEFGH\032~~~~~~~~\032abcdefgh\032~~~~~~~~\032;;;;;;;;;\032~~~~~~~~\032123456789\032~~~~~~~~", -1, 0, 37, 37, 1, 1, "Ditto Mixed", + "1111111000011101001010010000101000100" + "1000100101001110000111010110001001000" + "1010101010101010101010101010101010101" + "1101101000001011110111000011111001011" + "1011010111011001101100101001100111110" + "1001011000011100010011110101100001010" + "1111110110100111011000101000110101111" + "0100100011000100100111110110001110000" + "0110110010010000101110010011110010101" + "1001001110010111100101011000011011000" + "1011010100011010111101111110100001100" + "1101110011111001000000010101100101011" + "0110110000011111111111111101101010111" + "0100111000011000000000001011110110010" + "1011011111111011111111101000010011110" + "1001010011001010000000101001110101011" + "1111111111101010111110101111100001101" + "0100111100111010100010101110011010001" + "1010101010101010101010101010101010101" + "0100110110101010100010101011110110010" + "1011000100111010111110101011101111110" + "1001001010011010000000101000011110011" + "1111100011001011111111101110000011101" + "0100101110011000000000001000110010001" + "0110110111101111111111111100101010110" + "1101110101100001110100100000110011010" + "1111111101101111011100010010101000111" + "0000010011010010110110000101010101001" + "0010011001111011101111011011000000101" + "1001010000111110000111011011100100010" + "0010001110011100111100111110010101110" + "1101111001110011100011100110110011011" + "0111110011100111001111001110011111101" + "0100011110011100110100111001110111001" + "1010101010101010101010101010101010101" + "1100100100011010110100011100101001011" + "1010000101000010011000101110000111101" + }, + /* 52*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, ";;;;;;;;;\032ABCDEFGH\032;;;;;;;;;\032abcdefgh\032;;;;;;;;;\032~~~~~~~~\032;;;;;;;;;\032123456789\032;;;;;;;;;", -1, 0, 37, 37, 1, 1, "Ditto Punct", + "1110111010110001001100111100001111111" + "1000001001000010100000010010100101011" + "1010101010101010101010101010101010101" + "1100111110111001110001110011100111001" + "1110001111100111001111001110011100110" + "1001111110110000010100011000110011010" + "1011100101010001111110110000110010111" + "1101100100010100010010001001101010001" + "0110010000001111011111011110000111101" + "0100000000110100100110100000000100010" + "1011011101010011111000101100010001110" + "1000001100011001000000010110011100011" + "1111101010111111111111111111001000101" + "0100111010101000000000001010001111001" + "0110110111111011111111101000110111110" + "1001100111101010000000101110010110010" + "1010111101001010111110101110101010111" + "1101101111011010100010101011111011001" + "1010101010101010101010101010101010101" + "0101100011101010100010101011101101001" + "0110101010111010111110101001110101110" + "1000101101001010000000101001010110010" + "1011001011011011111111101010011010111" + "1101010110011000000000001110111011001" + "0111101011101111111111111110111101101" + "0100111111100000100010000010000101010" + "1010110010010011011110000111110110110" + "1001000000101001110111011010101010011" + "1111010011110110001010011110101011111" + "0101101100100111100011010001111101010" + "1110100011011001011001011001110101111" + "1100111111111100000111111111000110010" + "1110011100111011111000101001010010110" + "1001110011100111110110000111111111011" + "1010101010101010101010101010101010101" + "1000001100001010000010010001011100000" + "1010101000100100011101011100011100101" + }, + /* 53*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "123456789\032ABCDEFGH\032123456789\032abcdefgh\032123456789\032~~~~~~~~\032123456789\032;;;;;;;;;\032123456789", -1, 0, 37, 37, 1, 1, "Ditto Digit", + "1111011001010011101001110101100010101" + "1101001111000011100100010010000101000" + "1010101010101010101010101010101010101" + "0000111100111001110001101001010011000" + "0110010011100111001111111111000011100" + "1000101010101010100101101001111110001" + "1010101011011111011101010100101111111" + "0000110010110000100010000110110011001" + "1011010011001010001111111110011010101" + "1000111000111101000011011101110010010" + "1111101101000110101100010110111010100" + "0001001010011001000000010101101011010" + "1110010010111111111111111110101000100" + "1101011110011000000000001001010110001" + "0010111011011011111111101001010100111" + "0101011100001010000000101000111111011" + "0011010000001010111110101101010111101" + "1101011000011010100010101110011100011" + "1010101010101010101010101010101010101" + "0101110011101010100010101001000011011" + "0111100100011010111110101011100001101" + "0101001111011010000000101010111101001" + "1111100100001011111111101111100000101" + "1101101100011000000000001010001001010" + "0111010000001111111111111110111001101" + "1100010111000001110100100011001010000" + "1110111101001100011010101011011100101" + "0000011100111110110111000111111111011" + "0010100111101110011111110100011111110" + "1001001110011000000011011000100010001" + "0011000000101101011111111000100011110" + "1101111011101100010000111111010010010" + "0110100111001110011110011111000010110" + "0001111100111001110001110011001011000" + "1010101010101010101010101010101010101" + "0000101000010010000101110000111100010" + "0110010001101011101001110010100110111" + }, + /* 54*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, " ABCD EFGH abcd efgh ~~~~ ~~~~~ ;;;; ;;; 12345 67890", -1, 0, 27, 27, 0, 1, "Spaces; BWIPP different encodation, LL before not after space, same no. of codewords", + "001100111001100000111001110" + "000011100111111001100111001" + "101101101010100001101001010" + "000101101001110111100011111" + "101101010100000001000110110" + "001111010111111010110101100" + "011111110001000000001111100" + "101101111111111111111000010" + "010001010000000000011101011" + "000000010111111111010000101" + "001010010100000001010011101" + "100011110101111101010111010" + "100100110101000101011010010" + "010101010101010101010101010" + "000101110101000101011101011" + "011011110101111101010010101" + "000010110100000001010100001" + "110011110111111111010001111" + "001000010000000000011111100" + "011110011111111111111000100" + "110001000001101010000100010" + "010001001000110010100111111" + "000111001111101101111100111" + "001001011011110110100010100" + "100100010000001010010100110" + "100110010010010110001001000" + "000110000010100000010101101" + }, + /* 55*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, " ABCD EFGH abcd efgh ~~~~ ~~~~~ ;;;; ;;; 12345 67890", -1, 0, 27, 27, 0, 1, "BWIPP different encodation, 1 codeword less", + "001100111001100000111001110" + "000011100111111001100111001" + "101100000000101111101010110" + "000101110100010010111101111" + "101100010100101100011011010" + "001101010101111100101010100" + "010001110001000000001110000" + "100011111111111111111110010" + "011110010000000000011010111" + "001110110111111111010100101" + "000101010100000001010110101" + "101100110101111101011000010" + "101101010101000101010101110" + "010101010101010101010101010" + "000110010101000101010101111" + "010101110101111101010011101" + "001011110100000001011101001" + "111001110111111111011101011" + "001110110000000000011000101" + "010100011111111111111001011" + "110110000011100000100011010" + "011010100010010011101101000" + "001111001100001011010111101" + "001110000100010010100100000" + "101111001011001110110101010" + "100110010010010110001001000" + "000110000010100000010101101" + }, + /* 56*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, ";;;; ;;;; 1234", -1, 0, 23, 23, 0, 1, "Spaces; BWIPP different encodation, same no. of codewords, however BWIPP wins by 1-bit due to less bit-stuffing", + "11010110011001000111101" + "10100111111110100011101" + "11100000101010100000100" + "11001000010100111110000" + "10001100001000000011111" + "10011111111111111110010" + "11110100000000000100110" + "01001101111111110111111" + "01101101000000010100111" + "10011101011111010100000" + "10000101010001010100101" + "01010101010101010101010" + "11011101010001010101001" + "01111101011111010110110" + "01010101000000010111110" + "10001101111111110101010" + "11100100000000000101100" + "11000111111111111110010" + "10110010010010111000111" + "00100100011101001110100" + "00001010000000011000110" + "11111110011110011110100" + "11011001110001110111101" + }, + /* 57*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, ";;;; ;;;; 1234", -1, 0, 23, 23, 0, 1, "Same as above", + "11010110011001000111101" + "10100111111110100011101" + "11100000101010100000100" + "11001000010100111110000" + "10001100001000000011111" + "10011111111111111110010" + "11110100000000000100110" + "01001101111111110111111" + "01101101000000010100111" + "10011101011111010100000" + "10000101010001010100101" + "01010101010101010101010" + "11011101010001010101001" + "01111101011111010110110" + "01010101000000010111110" + "10001101111111110101010" + "11100100000000000101100" + "11000111111111111110010" + "10110010010010111000111" + "00100100011101001110100" + "00001010000000011000110" + "11111110011110011110100" + "11011001110001110111101" + }, + /* 58*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "ABC\015D\015~~~~\015~~~~~\015;;;;\015;;;\015~~~~\015\012", -1, 0, 23, 23, 0, 1, "CRs; BWIPP different encodation, same no. of codewords", + "00111111111010011101000" + "01101000111101110011100" + "00011101011010111100111" + "00011011110101000011001" + "11101100001000000010101" + "00101111111111111110010" + "10110100000000000100110" + "00011101111111110110111" + "00011101000000010111101" + "00100101011111010110101" + "00100101010001010111010" + "01010101010101010101010" + "01011101010001010111110" + "01110101011111010101011" + "00001101000000010110111" + "10101101111111110110101" + "11110100000000000110111" + "11110111111111111111000" + "01100011000010000001110" + "01100000111111111010111" + "11101110000000111010001" + "10011100110110111001101" + "01110011100011100111010" + }, + /* 59*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "ABC\015D\015~~~~\015~~~~~\015;;;;\015;;;\015~~~~\015\012", -1, 0, 23, 23, 0, 1, "Same as above", + "00101111100010011101000" + "01110111100101110011100" + "00010001110001100111111" + "00010100100100101011001" + "11101100001000000011001" + "00101111111111111111010" + "10110100000000000100010" + "00011101111111110110111" + "00011101000000010110001" + "00100101011111010110001" + "00100101010001010110010" + "01010101010101010101010" + "01001101010001010110011" + "01000101011111010100000" + "00001101000000010111000" + "10011101111111110111101" + "11010100000000000111111" + "11010111111111111110010" + "01110011000010000000010" + "01010000001110011111011" + "11011111010011000100001" + "10011100110110111001101" + "01110011100011100111010" + }, + /* 60*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "\015\012\015", -1, 0, 15, 15, 1, 1, "CR/CRLF", + "001110111101100" + "001100100011101" + "001100000010111" + "011111111111110" + "001100000001101" + "011101111101110" + "000101000101101" + "000101010101101" + "000101000101001" + "011101111101101" + "001100000001100" + "010111111111100" + "110000101000000" + "011001000111101" + "101010100010101" + }, + /* 61*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "\015\012\015", -1, 0, 15, 15, 1, 1, "Same as above", + "001110111101100" + "001100100011101" + "001100000010111" + "011111111111110" + "001100000001101" + "011101111101110" + "000101000101101" + "000101010101101" + "000101000101001" + "011101111101101" + "001100000001100" + "010111111111100" + "110000101000000" + "011001000111101" + "101010100010101" + }, + /* 62*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "\015\015\012\015\015\012", -1, 0, 15, 15, 0, 1, "CR/CRLF; BWIPP: different encodation, same no. of codewords", + "000000101100011" + "111100111011110" + "101100000100111" + "101111111111100" + "110100000001001" + "100101111101110" + "111101000101000" + "110101010101100" + "000101000101011" + "000101111101000" + "100100000001000" + "000111111111111" + "000011101110001" + "000101100111000" + "101110011111011" + }, + /* 63*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "\015\015\012\015\015\012", -1, 0, 15, 15, 1, 1, "Same as BWIPP", + "001110010000101" + "110111101011100" + "101100000100100" + "111111111111100" + "110100000001000" + "100101111101111" + "001101000101000" + "000101010101100" + "100101000101010" + "000101111101011" + "100100000001010" + "000111111111111" + "000011101110010" + "000010001000101" + "101110000101001" + }, + /* 64*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, ", .", -1, 0, 15, 15, 1, 1, "Spaces/dots/commas: uses DL", + "000001001101000" + "110000011111000" + "111100000010110" + "011111111111111" + "100100000001001" + "001101111101000" + "000101000101111" + "110101010101010" + "100101000101101" + "110101111101110" + "011100000001010" + "110111111111100" + "000000011000000" + "010001111001000" + "100110100000110" + }, + /* 65*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, ", .", -1, 0, 15, 15, 0, 1, "Spaces/dots/commas: uses PSs, which is 3-bits more; BWIPP: see above", + "000110011011010" + "000101111100100" + "001100000010111" + "011111111111111" + "001100000001101" + "101101111101111" + "000101000101111" + "000101010101110" + "000101000101011" + "101101111101111" + "011100000001100" + "110111111111101" + "110000101000000" + "001110101111111" + "010001001101111" + }, + /* 66*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, ", . ", -1, 0, 15, 15, 1, 1, "Spaces/dots/commas: uses 2 PSs, which although 1-bit less than using DL, ends up 1-bit more after bit-stuffing", + "001011111110101" + "001100011001011" + "001100000010110" + "011111111111110" + "001100000001111" + "101101111101110" + "000101000101110" + "000101010101110" + "000101000101010" + "011101111101111" + "001100000001110" + "110111111111100" + "110000101000010" + "101111111111111" + "110111100000011" + }, + /* 67*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, ", . ", -1, 0, 15, 15, 1, 1, "Same as above", + "001011111110101" + "001100011001011" + "001100000010110" + "011111111111110" + "001100000001111" + "101101111101110" + "000101000101110" + "000101010101110" + "000101000101010" + "011101111101111" + "001100000001110" + "110111111111100" + "110000101000010" + "101111111111111" + "110111100000011" + }, + /* 68*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, ", . , ", -1, 0, 15, 15, 0, 1, "Spaces/dots/commas", + "001111110111101" + "111100000011101" + "101100000100111" + "111111111111101" + "110100000001000" + "100101111101100" + "001101000101011" + "100101010101110" + "000101000101011" + "000101111101011" + "110100000001001" + "000111111111100" + "100011101110001" + "111100000110001" + "011011011100111" + }, + /* 69*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, ", . , ", -1, 0, 15, 15, 1, 1, "Same as above", + "001111110111101" + "111100000011101" + "101100000100111" + "111111111111101" + "110100000001000" + "100101111101100" + "001101000101011" + "100101010101110" + "000101000101011" + "000101111101011" + "110100000001001" + "000111111111100" + "100011101110001" + "111100000110001" + "011011011100111" + }, + /* 70*/ { BARCODE_AZTEC, DATA_MODE, 3, -1, -1, 1, -1, { 0, 0, "" }, "\101\300", -1, 0, 15, 15, 1, 899, "AÀ", "000000101011100" "000100010100111" "001100000110110" @@ -1103,7 +2496,24 @@ static void test_encode(const testCtx *const p_ctx) { "110001000111110" "111001100011011" }, - /* 22*/ { BARCODE_AZTEC, UNICODE_MODE, 26, -1, -1, 1, { 0, 0, "" }, "AÀ", -1, 0, 15, 15, 1, 1, "AÀ", + /* 71*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, 3, -1, -1, 1, -1, { 0, 0, "" }, "\101\300", -1, 0, 15, 15, 1, 899, "Same as above", + "000000101011100" + "000100010100111" + "001100000110110" + "011111111111111" + "001100000001100" + "001101111101000" + "011101000101110" + "000101010101011" + "100101000101010" + "101101111101111" + "101100000001111" + "000111111111111" + "100011000110001" + "110001000111110" + "111001100011011" + }, + /* 72*/ { BARCODE_AZTEC, UNICODE_MODE, 26, -1, -1, 1, -1, { 0, 0, "" }, "AÀ", -1, 0, 15, 15, 1, 1, "AÀ", "001111011000101" "000110100011000" "001100001000111" @@ -1120,7 +2530,58 @@ static void test_encode(const testCtx *const p_ctx) { "001100010010010" "011110110011000" }, - /* 23*/ { BARCODE_AZTEC, UNICODE_MODE, 100, -1, -1, 1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(3)", + /* 73*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, 26, -1, -1, 1, -1, { 0, 0, "" }, "AÀ", -1, 0, 15, 15, 1, 1, "Same as above", + "001111011000101" + "000110100011000" + "001100001000111" + "011111111111111" + "001100000001101" + "000101111101100" + "010101000101101" + "011101010101001" + "001101000101001" + "100101111101001" + "010100000001011" + "000111111111111" + "000001100010010" + "001100010010010" + "011110110011000" + }, + /* 74*/ { BARCODE_AZTEC, ESCAPE_MODE, 899, -1, -1, 1, -1, { 0, 0, "" }, "\\xC3\\x95\\xAB", -1, 0, 15, 15, 1, 1, "Blank top row", + "000000000000000" + "001111111011111" + "001100001010111" + "011111111111101" + "000100000001011" + "001101111101010" + "010101000101010" + "011101010101101" + "111101000101011" + "011101111101111" + "011100000001110" + "010111111111110" + "110001001010010" + "111101100110011" + "011100110010101" + }, + /* 75*/ { BARCODE_AZTEC, ESCAPE_MODE | FAST_MODE, 899, -1, -1, 1, -1, { 0, 0, "" }, "\\xC3\\x95\\xAB", -1, 0, 15, 15, 1, 1, "Blank top row", + "000000000000000" + "001111111011111" + "001100001010111" + "011111111111101" + "000100000001011" + "001101111101010" + "010101000101010" + "011101010101101" + "111101000101011" + "011101111101111" + "011100000001110" + "010111111111110" + "110001001010010" + "111101100110011" + "011100110010101" + }, + /* 76*/ { BARCODE_AZTEC, UNICODE_MODE, 100, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(3)", "001101001111101" "000000111011100" "001100000100101" @@ -1137,7 +2598,24 @@ static void test_encode(const testCtx *const p_ctx) { "100011101111100" "000111110001110" }, - /* 24*/ { BARCODE_AZTEC, UNICODE_MODE, 1000, -1, -1, 1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(4)", + /* 77*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, 100, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "Same as above", + "001101001111101" + "000000111011100" + "001100000100101" + "011111111111110" + "001100000001111" + "000101111101001" + "011101000101001" + "010101010101001" + "100101000101101" + "011101111101010" + "100100000001100" + "010111111111111" + "000011011110011" + "100011101111100" + "000111110001110" + }, + /* 78*/ { BARCODE_AZTEC, UNICODE_MODE, 1000, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(4)", "001010100011011" "001000100000101" "001100000100111" @@ -1154,7 +2632,24 @@ static void test_encode(const testCtx *const p_ctx) { "101000000111010" "000001110101111" }, - /* 25*/ { BARCODE_AZTEC, UNICODE_MODE, 10000, -1, -1, 1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(5)", + /* 79*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, 1000, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "Same as above", + "001010100011011" + "001000100000101" + "001100000100111" + "011111111111110" + "001100000001110" + "000101111101000" + "011101000101010" + "100101010101001" + "000101000101101" + "011101111101011" + "100100000001101" + "010111111111100" + "000011011110011" + "101000000111010" + "000001110101111" + }, + /* 80*/ { BARCODE_AZTEC, UNICODE_MODE, 10000, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(5)", "000100110110010" "000001000010111" "001100000110101" @@ -1171,7 +2666,24 @@ static void test_encode(const testCtx *const p_ctx) { "101010001110110" "000000011000101" }, - /* 26*/ { BARCODE_AZTEC, UNICODE_MODE, 100000, -1, -1, 1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(6)", + /* 81*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, 10000, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "Same as above", + "000100110110010" + "000001000010111" + "001100000110101" + "011111111111111" + "000100000001010" + "001101111101101" + "011101000101110" + "100101010101100" + "100101000101101" + "010101111101100" + "101100000001011" + "010111111111111" + "000011110110011" + "101010001110110" + "000000011000101" + }, + /* 82*/ { BARCODE_AZTEC, UNICODE_MODE, 100000, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "FLG(6)", "000010010000010" "001101000100110" "001100000110111" @@ -1188,7 +2700,24 @@ static void test_encode(const testCtx *const p_ctx) { "101010100011011" "000000000111010" }, - /* 27*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", -1, 0, 61, 61, 0, 1, "Zint website example gui3.png NOTE now ends with D/L . instead of P/S .; BWIPP same encodation but estimates number of Data/ECC codewords differently", + /* 83*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, 100000, -1, -1, 1, -1, { 0, 0, "" }, "A", -1, 0, 15, 15, 1, 1, "Same as above", + "000010010000010" + "001101000100110" + "001100000110111" + "011111111111111" + "001100000001110" + "001101111101010" + "011101000101111" + "110101010101011" + "000101000101001" + "011101111101101" + "101100000001110" + "010111111111101" + "000011000110011" + "101010100011011" + "000000000111010" + }, + /* 84*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", -1, 0, 61, 61, 1, 1, "Zint website example ss_6.png NOTE now ends with D/L . instead of P/S .", "0010110111101110101100000101001101110100010000100111011100001" "0001100000000000001101110010000100010101110011000001000011110" "0001111110101010100101000110101101000110011000101111011100110" @@ -1251,36 +2780,153 @@ static void test_encode(const testCtx *const p_ctx) { "1110000011010000000000100001100001000111011110011010000000001" "0000010101001111100010001001111100101000010001110010010101101" }, - /* 28*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "Colon: etc. NUM. 12345, num. 12345 @, 123. . . . . @.¡.!A ", -1, 0, 27, 27, 0, 1, "BWIPP different encodation (better use of D/L and B/S)", + /* 85*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", -1, 0, 61, 61, 1, 1, "Same as above", + "0010110111101110101100000101001101110100010000100111011100001" + "0001100000000000001101110010000100010101110011000001000011110" + "0001111110101010100101000110101101000110011000101111011100110" + "0011000000001001101011010000010110111000011110000000010001001" + "0111001010111110010111100000001111101100011100100000001000000" + "1001100111000000001000011101000000001011001100000111100110000" + "1101101000101111010010010000101100010100100100111011011100000" + "1100100110001001100001110100100101001100011000001010110010000" + "0000101001000010000101001001101011110000000000100000001011111" + "1011100100011001100110101001100001100011110111010110110101001" + "0001101000110010111010000000001010111101010000100001001000100" + "0110100010001101000100011011100011000110000011011111001010010" + "0010000010110011001111011110101001010101001010100110000010000" + "1110001010110000110011000100010001111110110000011011001111001" + "1010101010101010101010101010101010101010101010101010101010101" + "0010110110101001010101000111110011001011000111000011100111001" + "1100110100101111110010000000111011110100100011101100110001100" + "0001001001100101000010011100000111100000111010011000000001101" + "1101000001000011101100000010011100001110110010101001000010010" + "1010110011000101100001111000100001001111100010001100111001100" + "0010011111000011101101000010101100001001000100100110000100001" + "0000100101100001111110111011010011101000011010000100000011101" + "1010011010011110110000000000011010110110101001111101010001000" + "1000100001011000111011111010100000110100010111010001010001110" + "1001100110000011001011011111111111111110011010101011001000000" + "1011110010100101000001001000000000001100001001011011001000000" + "0000011111110010010001111011111111101000000001110010001110100" + "1100000001001100110101011010000000101000010110011110010011110" + "0110010000111011111010111010111110101010111010111111001000010" + "0001001001111101111000011010100010101011100000000000000001010" + "1010101010101010101010101010101010101010101010101010101010101" + "1010111000100000110011111010100010101011100001000111100001010" + "1101101000101111100010101010111110101001110111100010010101110" + "0010000101101001111100101010000000101101111100011110110111110" + "1100101110001111000000111011111111101101000101101000010100011" + "1000011000011101111101111000000000001111100100010100010011000" + "0010000010010111001010001111111111111110000100101110110111011" + "0001000100011000011111100010110001100011001101000000010000100" + "1010001010001110100101011010001101011111010011111000011001110" + "0110000110110101011111001110000010010001010111000101000010100" + "0110101001110010110010011100001010001100000111111100011000000" + "1010110110000001111100011001000011011001111100010110000100000" + "0000011010001010000011011001101001110010001100101000111011010" + "0001001010100100010010000010110110101110101100010101010001011" + "1100010000010110110110101101101011111001101111110100011000011" + "0110001101000001111010001100110011001111011111010010100011000" + "1010101010101010101010101010101010101010101010101010101010101" + "1011000001100100011100000111010101011110110011001000100000010" + "0000111101110110001110101001001101000011110010100000101001010" + "0100100001011000000001000100000010001011110101010011110110000" + "0001001110010110101001011101101010001101000000100001101000010" + "1110010011010000011001010010010101000100110100011010001101100" + "0011001010010010011100110100011000111011100100110001001001001" + "0000111010110000100100000001110011001110001101010100001010101" + "1100010010110111011011111100001011001011001011100011100000101" + "0110111000011101110110010111100000010000011101011010001110101" + "0001000000111010000000001100001010101111100010100000010011101" + "0101000010010000110000000010000001110010000111000111100011000" + "0110100111000110011010010101111110001000000011101100000100101" + "1110000011010000000000100001100001000111011110011010000000001" + "0000010101001111100010001001111100101000010001110010010101101" + }, + /* 86*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 4, -1, { 0, 0, "" }, "Colon: etc. NUM. 12345, num. 12345 @, 123. . . . . @.¡.!A ", -1, 0, 27, 27, 1, 1, "", + "001010110110111011010110111" + "100111110010100000100001110" + "011000101010111011100000011" + "110101011010011111110010100" + "001100001100010000101000011" + "100110011110010000001010101" + "001110011011000100001000011" + "001110100110011001101000111" + "110100111111101010110101100" + "011001101111111111111110101" + "100010010100000001001010011" + "000010111101111101110101001" + "001011110101000101010110011" + "110111010101010101000000110" + "111010100101000101001110100" + "001010001101111101110110100" + "000001000100000001001001111" + "001000000111111111101000111" + "011100010011100010001000010" + "011110011001001111111000001" + "000111001101011100110100010" + "111111100110110011101000010" + "010110011001000100001101010" + "011100101001010011110101000" + "011100100101001011111111010" + "001101101101111011110110111" + "010111000110110101011100000" + }, + /* 87*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "Colon: etc. NUM. 12345, num. 12345 @, 123. . . . . @.¡.!A ", -1, 0, 27, 27, 0, 1, "BWIPP different encodation (3 codewords less, see above)", "001011011101101011011110111" "101001010000010000111010101" - "011101001100101111010111111" - "110110011100000110101001100" - "001111101101100101101110001" - "100111011111010110000110011" - "001000010001011010000001001" - "001000110100110011000111111" - "110110111111101100110000010" - "011110001111111111110110000" - "100101000100000001011101100" - "001110100101111101010001111" - "001101111101000101100011111" - "110100110101010101100001010" - "111010100101000101110000101" - "000010101101111101000101010" - "000010011100000001011100010" - "001000100111111111101010010" - "010101000000010100010000000" - "011011001101111000010001010" - "001010001110010110111001111" - "110011011101100111101010100" - "011011101110010010110011101" + "011111000001110001101101111" + "110111100100101000011111100" + "001101001100111110100110001" + "100111001011110111010110011" + "001000111111111000111011001" + "001010111111001110001101111" + "110100111111101100111100010" + "011111111111111111111000000" + "100111111100000001110111100" + "001110110101111101100001111" + "001110101101000101111111111" + "110100000101010101001101010" + "111010100101000101001000101" + "000000100101111101011001010" + "000011001100000001110110010" + "001011010111111111101110010" + "010111100000100100000100000" + "011010101111010011011001010" + "001011000000001011111101111" + "110010010111001100000110100" + "011010111110010001101111101" "011111111001010010100110111" "011101011001001010010111111" "000000111111011010100010100" "010000011101011110110000100" }, - /* 29*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "1. 1a @ A@@ @@!!@@!!1!!!!¡a ", -1, 0, 23, 23, 0, 1, "BWIPP different encodation (better use of B/S)", + /* 88*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 3, -1, { 0, 0, "" }, "1. 1a @ A@@ @@!!@@!!1!!!!¡a ", -1, 0, 23, 23, 0, 1, "BWIPP different encodation, same no. of codewords", + "11001000100010001001111" + "11100010101000100010011" + "00001001010101100111100" + "01100000001100000111010" + "11001100011010101000110" + "10010010111011111110101" + "10001111100110101001001" + "00100111111111111000001" + "10000001000000010011110" + "01011011011111011110010" + "11001011010001011001100" + "11101101010101010100000" + "01000111010001011001100" + "11011101011111011101011" + "00100011000000010101100" + "00100001111111111100100" + "01000000001100000100000" + "01011111010000001111000" + "11010011010101111010001" + "01001001111110100000001" + "00100001110000100011000" + "01100011101111001100010" + "01000011000010110000011" + }, + /* 89*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1. 1a @ A@@ @@!!@@!!1!!!!¡a ", -1, 0, 23, 23, 0, 1, "BWIPP different encodation, less codewords (better use of B/S)", "11110101100111101010011" "11111111110111111001011" "00000000001000011111000" @@ -1305,7 +2951,36 @@ static void test_encode(const testCtx *const p_ctx) { "01100011101111001100010" "11000011000010110000011" }, - /* 30*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "1234\01512\015AB\015AB\015ab\015ab\01512\015ab\015!\015!\015a,a,1,a,@,", -1, 0, 27, 27, 0, 1, "BWIPP different encodation (better use of P/S CRs)", + /* 90*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "1234\01512\015AB\015AB\015ab\015ab\01512\015ab\015!\015!\015a,a,1,a,@,", -1, 0, 27, 27, 0, 1, "BWIPP different encodation, same no. of codewords", + "110001111110000001011000000" + "110000100110011001111000001" + "000100010101100100111100011" + "011000101101110000110010100" + "100101110011100110011110110" + "101101111001110100000000100" + "000010110001000000001011100" + "100001111111111111111100100" + "100001010000000000011111100" + "110100110111111111010010011" + "000101110100000001010000111" + "001010010101111101011100011" + "000100010101000101010110000" + "010101010101010101010101010" + "001100110101000101011100000" + "010110110101111101010010110" + "001111010100000001010110100" + "110010110111111111010011010" + "010010110000000000010001100" + "000101011111111111111011100" + "000000001100100100000110000" + "000011011001010110111110100" + "000000100101101011001000011" + "000000011100111011110010000" + "111010111010001101010000000" + "100001000000010010000011010" + "100100100001001001000011000" + }, + /* 91*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234\01512\015AB\015AB\015ab\015ab\01512\015ab\015!\015!\015a,a,1,a,@,", -1, 0, 27, 27, 0, 1, "BWIPP different encodation, less codewords (better use of P/S CRs)", "111111110000010110000011001" "110110110010011110100000101" "000011100001000111001100111" @@ -1334,7 +3009,7 @@ static void test_encode(const testCtx *const p_ctx) { "000110100001100100110010100" "101110010000110000111111101" }, - /* 31*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 6, { 0, 0, "" }, "AA!! ", -1, 0, 23, 23, 1, 1, "", + /* 92*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 6, -1, { 0, 0, "" }, "AA!! ", -1, 0, 23, 23, 1, 1, "", "00110111000010111110110" "01011001101100101011001" "00101000101000011110111" @@ -1359,7 +3034,108 @@ static void test_encode(const testCtx *const p_ctx) { "00111110110110100011111" "10010010100010101110001" }, - /* 32*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 36, { 0, 0, "" }, "Lorem ipsum dolor sit amet.", -1, 0, 151, 151, 1, 1, "Max version 151x151", + /* 93*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 6, -1, { 0, 0, "" }, "AA!! ", -1, 0, 23, 23, 1, 1, "Same as above", + "00110111000010111110110" + "01011001101100101011001" + "00101000101000011110111" + "00011011100111110011101" + "10011100001000000010001" + "00001111111111111110000" + "00010100000000000100111" + "00011101111111110100111" + "01000101000000010101101" + "11110101011111010110011" + "00110101010001010110010" + "01010101010101010101010" + "00010101010001010100011" + "00100101011111010101001" + "00100101000000010101010" + "11001101111111110111100" + "00011100000000000101000" + "00110111111111111111011" + "01100000101000010001001" + "11101001010111001100010" + "11110100110010110001111" + "00111110110110100011111" + "10010010100010101110001" + }, + /* 94*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "\015\015\012", -1, 0, 15, 15, 1, 1, "", + "001100000001000" + "000100001000000" + "001100000010111" + "011111111111111" + "001100000001111" + "001101111101100" + "100101000101110" + "000101010101111" + "000101000101000" + "011101111101101" + "001100000001101" + "100111111111110" + "110000101000000" + "100100100100110" + "111100100110111" + }, + /* 95*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 1, -1, { 0, 0, "" }, "\015\015\012", -1, 0, 15, 15, 1, 1, "Same as above", + "001100000001000" + "000100001000000" + "001100000010111" + "011111111111111" + "001100000001111" + "001101111101100" + "100101000101110" + "000101010101111" + "000101000101000" + "011101111101101" + "001100000001101" + "100111111111110" + "110000101000000" + "100100100100110" + "111100100110111" + }, + /* 96*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\015\015\012. , ; β", -1, ZINT_WARN_USES_ECI, 19, 19, 1, 1, "", + "1101110010010001101" + "1000110110100010001" + "1101111111111001001" + "1110001111110111001" + "1010110100110010101" + "0010111111111111101" + "0010010000000100001" + "0011110111110111110" + "0110110100010110010" + "1110010101010100110" + "0101010100010101000" + "1011010111110101000" + "0011010000000100101" + "0101011111111110110" + "0001001111100001010" + "0100010010100011010" + "0011110101110111000" + "0100110110001110011" + "0101001111001110011" + }, + /* 97*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\015\015\012. , ; β", -1, ZINT_WARN_USES_ECI, 19, 19, 1, 1, "Same as above", + "1101110010010001101" + "1000110110100010001" + "1101111111111001001" + "1110001111110111001" + "1010110100110010101" + "0010111111111111101" + "0010010000000100001" + "0011110111110111110" + "0110110100010110010" + "1110010101010100110" + "0101010100010101000" + "1011010111110101000" + "0011010000000100101" + "0101011111111110110" + "0001001111100001010" + "0100010010100011010" + "0011110101110111000" + "0100110110001110011" + "0101001111001110011" + }, + /* 98*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 36, -1, { 0, 0, "" }, "Lorem ipsum dolor sit amet.", -1, 0, 151, 151, 1, 1, "Max version 151x151", "0110011000001101111010100010010110101010100001110111111001101101010000111100111111111001000011100001010000101001010001001010101001000111101011111001101" "1011011111111000001111111001010101111011100101110110001011011000101000010101101100000110011110100000010100110111100111111011011110001000110100111100100" "1110001110001111110101011110010010011011001011001000001010000010000110101010101011111110110010000010000111000010000011011110001111111001000010000000111" @@ -1512,7 +3288,160 @@ static void test_encode(const testCtx *const p_ctx) { "1000000100011011110011111011110000011111110111001111111010110101100011000111010100100010001111000101110110110100000111000011101011011101111111000011111" "1000110110001001001111110010011100000100011010101101101101101001001001011110101010011110010011011110100111100111110111111110000101100111110000101010011" }, - /* 33*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 31, { 0, 0, "" }, "aztec barcode", -1, 0, 131, 131, 1, 1, "Layers 27 example from Andre Maute, mailing list 2020-12-16", + /* 99*/ { BARCODE_AZTEC, UNICODE_MODE | FAST_MODE, -1, -1, -1, 36, -1, { 0, 0, "" }, "Lorem ipsum dolor sit amet.", -1, 0, 151, 151, 1, 1, "Same as above", + "0110011000001101111010100010010110101010100001110111111001101101010000111100111111111001000011100001010000101001010001001010101001000111101011111001101" + "1011011111111000001111111001010101111011100101110110001011011000101000010101101100000110011110100000010100110111100111111011011110001000110100111100100" + "1110001110001111110101011110010010011011001011001000001010000010000110101010101011111110110010000010000111000010000011011110001111111001000010000000111" + "1111111110111100000010100111101000111010110101100001000110010111110111110011110100111110101100011000001010110110100001111101110111001101001101011100001" + "0001111011000111110101010100010001011101110011011100001110100100111111001010100000010111000001100010110011100000111110011000101100011011000010100100001" + "1010011111011100100000000001110110111000110110010101110001011100100001101101111010100110101101111101111101011101101111001001010010011000011110010111000" + "0010100000000010010111100000011001110011011011101010011101101010000010010110110100010010010001000100001011100011011010101010001000010011001010110111111" + "0111111001111100110000010101000101011011100110110110010011011110101110111011000100111001101100111001011011110101000100101111101001100011010100010101110" + "0010010101101010010100100100110010111100100010111001000100000101000110110000110110100000011010001001101010100010011110101100110010010100011010001011011" + "1110101000010010000001001011111110111011001110110000111011111010110010001011111101011101110100100000010101110001010101101001101101101110011110100001110" + "0001011111001011100101100010111101000010011010000010010100000111011111100010110101100000101011011101001000000011000001011110001001001011101001101001000" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "1110101001101000000110000100110101010101001011110010001100001111110110010000101011100011011001000110101100100110110100001010001011101111011000001110110" + "0000111010111110110101010011100110100110111101010000011001110011001101100011100001000000100100110101110111010011010110011101110111100101011110001001001" + "1110100110100000100100001010111100110000001000000100001010000010010110001010001111111010111001010110111100100001110110011000100011100011011001100001000" + "1001000111111111011011001111011110111000011110101110011100011101110001010111001111001010100110010010000101011100110010001001011100010010111100110111101" + "0001001001001100010001111110010110001101000011010111000011001000111110011110000100111111100010011001100111001001110111110000110101110001100010001000010" + "0000000100011110100100000011010101101011010111110000000110110010011111110111010110100001111110011000010001110100101110000101011100001000111101100000010" + "1001000010101000000001001000101000111110010000110111000111100111111010100100111101101001101010100010010010101001110011001100010001110001000000101001111" + "1011010010111100010011100001111110100001100100010001001010110101111101010101111101010101011101110101011111110110011011101101001110000101110111010010110" + "1000010000000110100010011000100011000000100000011111111101100001010111000010000101100110101011011010000100000100100111100010000010110100010011100010110" + "1010110100110111101010110101000000001111001111011001111000010011010111001111110000111011000101000110010011011100110111101001111001000001110100001101001" + "0001100110001110101110000010000000111100000011111000101110101111100111001110011001000110001011100101001100101110010000000000011111101011011011001010110" + "1110001000010100000011010011011100011000010111101010111111010011001010011101010110011010001111101001100101011101100100011111111111000001010101011001011" + "0100110011100111100111010110010011000001010011001100110010101000101001001010100111100110000001001101011101101000111001100100011010011000001001100111110" + "0011001110110110101100000101000111010001110110010110101000010111111110100001101011000110011111000000101011011000110001010001101111000111000101000101101" + "1001000100101010110101111010011011011101101000011000001011001000000011110000011110100111100011100001011001001011011100111010010100101110000000111011110" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "1101101101100010000110100110000001010101011010111011011010101100010100000100100110011100011000100111010110100100111011101010110111100011011000011011101" + "0010011010011111011100111101111001010010101100001000011000111101010100111001011100010101011100110001001100110001101111101111000110110000010111001011111" + "1101000110001011110100100110010100000011000000010000111010001001010100000010110101000010000000001010000001100011101011001110011011000111101011111001000" + "1001000010110011011110000111100001100001111100111111001100010111011101101111111101011101110110101110111011011100111101110001110010110001000101011011000" + "0000000100100000011011001110011011001010000011110000101001100000011100110010101010010010001010010011101100100100001001101000110111000000010010011111000" + "0010111110111010010000100001111110010010100111100010001100110000100111011011010111010101100110110010000010011010111011010111011111111000000101110101110" + "1010101111000010110010011010101001101010111000010010010001001110010111111100110111010110111001101100000000001010101100100000101011100101100011100100101" + "0110101110110100101100111001111000011000001101000011100011011010110011010011001100011101011101011100110001110110000000100011011111011100101110111100110" + "0111110110101000001001001000100101011000100001110011100000000000111111100100010101001100010010011101010011000110111100010000111000000111011000100100001" + "1010010111111010001001100001001101111100100110101101011000011110010111001101101001101000000101111000010010010111001100111101110110010001101101010100000" + "0011100010101101110010100010101000010011001000100000010110100110110010001100001100111100001010101101001010101000011110010110110101100101001000110000001" + "0000001010011110010101110111001100001101011110000011110111111010101111001101111000110000110100110001101000111100010111010011001000001010100100010111110" + "1100110111001001100100000000100000000001001000011001011011100000001111100110001110001111000011111001010111100111000111111110101011100101011000000100001" + "0101110000110100000101101001001011011110110101011010110110010110000001101001011001110110000101101000000011111000101100101101001100101001001110010010001" + "1000000100101010101110001010101010000110100000000010010101100100001000000000100110010100001011010001110100000111110110111010011110000000000011101100001" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "0010101101101101000001101000100111100101010000110001010010101000010000000000000010111010100010010000000010101111100001010010001101001110001001101000001" + "0111010100111101011001001101101001000011000111111111110011010101000000010011101010101010010100000100110001011000100110100011110000110110000111111001101" + "0001001101101100100010100000100110100000011001110010000110001011100100010010101011011000011000101011011110101011100100101000111001010001100011011100100" + "1101011011011101000110100111100100011011110110101010011010011100101010000101000101000110101110001011000100110100101001011001000100011000011101000010101" + "0011100100101001100001000100011011110010100000000110010100100101001000010000100111101100001011010010001101100111111000010010110000110110011001000001011" + "0011100010111011110010111101010001000110110100110011101011110011111100101101011001101011001111000110111111010100100100101001111110010000100111000001010" + "1100101101000011110101001110110011011100100011000011101101001001100011011000000111101011110010001100111101101100011000111100001010110100100011100100010" + "0100110010010111110000101011101111111101111110000001010011111011111111101001110110001001011101100101110000111111101110000101101010010010010111110101010" + "0011001100000011000111111000101001000010011011000010001111100001111011010100100110000100101000110010010011001110000100011100010111011101101001011111001" + "0111110110010111010011000001010110110101010100011101001111011010001000011101100000001101101110000011000111010010100110010001110110100010010110001101100" + "0110011111100110111111101000111110100100011001100010100101001100110100100010001010101110101010000110011111000001010101101100100011011100000001001110000" + "0111110101010110000101100011100010010110000100110000001111110001111010010101010101100111001100011100001010010001001000101111110101001011111101001100001" + "0111011010000001000101011010110010110011100010110110010011001101110011011100011110010000011001100100011001101101000110001000001000101010101010111000000" + "0100000101011111110001001011011111000101011111101011101100011111001001110111110001010101011101101010110011111101100110100011001101010000000101001011001" + "0011001010101111100011001010010011100001001011100111111111101111010011011100011110000110101001001101101100000100010001101010100101100001111011101001010" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "0000011100101011001000111110011011101100011010001011010010001110111011101000101001011111010011001010100011001000000000101110010010010111010010001111010" + "1001100110011100011111000101000000100000011101110101110011111000000100011011000001110011100110001001101110010011001110101101100100100100001101000010111" + "0001010010100000011111001110101010100111011011000111110100000010111111101010111001000001110000111000001111101011000010100000111000001000111001111000000" + "1011111100010010110100100101010100010010001110100000101001011111110011110101101110000000110101001011100011111001111101111111111010110101010110100100001" + "0101111011100000110101111100110110000000000011011101110011101111000101111100011101111000111010110110100100001111101110000010101011110010110011011010011" + "1110100100110011000110110101000010010011000110110100011000010010111011000111010100110100010111111100110000010011101011000011010001011100000110000100001" + "0001111101001000101110001100100001011100011010101000001111100000111100111110010100011101011001010101101001001010101101001110110110001100100010000100011" + "0101010000110101111110010101100100001101101101111000101000110011100101001011001111101001001110100001101111111101111011100101111001001000010101011001110" + "1001010000001111111000000010011001010011100000010111101101100101010111111110000000111010000010100111010010000100000110010010011110110111110001011100100" + "1010111001010011111110000101000100010101001110101101111110110101101111111111111111100100110101111001010000111001101101110001111110111010110101110011111" + "1000000100100010010101011110110111100111011011101000111111001110001001000000000001010110010000000110100001100000101111001000001010100101101000010001001" + "1110011000111101010011001111011010010011001100101100101110010101101111011111111101010101011110111001010001110000000010000001011110101110010111001100111" + "1100100000000011110001110010001100000011001011011000111101101001001001010000000101110011010010000011011100000000101100000010000101100110111010011101000" + "1001001010110111111111010011010101111010101111000101110111011011110101010111110101001000001111111111010100111001111110010101001100110100000100110000000" + "1110010000000011010111110000001010000110010011100111111100000001000011010100010101101111011010110000010000000010000110111100010001001011100000000101110" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "0111000010101100001110010100000100001100111001111010010011001110111001010100010101100001010000111111001010101010100010100010100001110101010001001110000" + "1100010110010000110000100101001011111100111100101100001001111101011001010111110101000101010100111111001101011000111000010111000001011100000110000010011" + "0000100111000001011000100110100010111000001010011101111100001111000101010000000101010101000011100110100101000011101100010110001001110001010000111000100" + "1111110010010110011010100111010110000100111101111101111110110100000001011111111101000010010110101000010101010111010010100111010110011101110110000100011" + "1100111010101111110010110100100110100010101010111111101010001101100011000000000001100010001000011110100001000001010010010000110011000001000010100011001" + "1010111010010000101001111001111011111011001100101100000011010101100001111111111111111101001100110010010001110010100010010011000011100111011100110001110" + "0101101101000000010100101000000111000000011011001000110000001110011000100110100010000101100000101011010110101110111111101100010111111000100001000100000" + "0001101001011101010111101101111101011000001111111110000100010111011101101011010000101000110100010100100001010011111101011101110010001011101100000100100" + "1101101111100101000111111110111010110101100010101010001101100000011001000110000010011001100011001101000100100111101000001100110101110101011011011010100" + "1110001010010010110101010011011100000111101101111100001011111111001001010101010101001001111100010000010101011101101101001001011011110000110101101101000" + "1110001011100111101011001100111010010111000001100111110001101110001101111010000011011000111010100001101011100010110010111100110111111010101000000010101" + "0010100101111110111110001111000001101110100100100110011111010001001010010101000001111100100111110100001110110011111001011111010001100100101100010000001" + "1010001010100100110110111010011010100010101001010101010101000011011000011110110111010010101000110101101111101011110110011100101000101101111011011011110" + "0110000100010000100101110101101010010101010100001111011000111101011010110101010101101100001110011001001010111110001101100101000111011101000101101101000" + "0111011011000001110010111100100001111100000011000000011010000101101010100010100101010000010001011001101101000100111100101110001100111001101001000111000" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "1001000110000001010110111110000011111101101010010001111000101001010100010010100110001100100001001000000000000100111101111110001001000111000000000010101" + "1101000100010100111100010111111111001010011111100111101011111010101110110011101010010101100101111111001100011111111111110101011000110101001110001110000" + "1100010101100000000000111000000001011101010011010111000100000011100111100010010001000011101001000100010101001001110101011010010011100001010011101000000" + "1011100010110110110000100101100000000010010111010101100111110101001110000101111011100110101111100010101011110011110100101111101111011011101101111111110" + "1001101001000101000101000110110101001110111000011011110000100000110101110010011011100111111011100101111001001100101011000000011100010111111011010110100" + "1110100111010111100010100011100000010001101101110101000001111011010000000011000110100100110101101000110000110010101001101101110100100111110111000111001" + "1110011001100100010111011010001010010100001001110101001101000001101100001010110111000010001010011010100111101100000101010100001011101110001001101110111" + "0011001000011100100111111111000111111100110100100100001011010101011110101101110100101101101101110111101110011101001101100111100111001101100100010110111" + "1101011110001110111110100110001001000111111010011001010000100011110110110100000001101101000010010010111011101010100111101100001000100011010011111111011" + "1001100111010000100111100111010110111100010110111000010011110100110010011101100110101101010111001101100100111101001011001101010110100010111110010100010" + "1010100000100101000100111010101101000101011010000010011101001100110101001010001001010011010010111101000111101011011001101000001011111011010001111010011" + "0001111010010010001100110101111111101100001101101001000101111111111101010001111011001011101111111010011101010110111111001111100110001101100101001100110" + "0101000000101011000000010000101001011110111011111101001101000010101100101100011000000100000000001011100101001101111100110100010010100010111010011110011" + "1100010010110101000101011011110100001011100101001011011101111101000111101011000000100011001111100110011010111111101001010001001100000101011101001001010" + "1011111100100010001111101100010001011011001010000111110000101010000100010100101010000000011000101001100011100111010111010110010100010101111010110011000" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "1010011001001000111101011100011010101000111000111111111111001001110110001010010101100001011010110111010101101100011101111100010111101001010011100001111" + "1010000001011110101000101111001000110010000110001010111000011010110010111111110111100011001111111010001000110001111100010001100110100110100110110111100" + "1110100110001001111000011110010110101001100000011010010010101110100011100110011100000010000000100100001000100101100001000000100110100011101010101110101" + "0010111110010111100101011001100101010001010101101001001101011111011010011011000110001011101111001111011111011001010100010001110011101101011111101010010" + "0110111010101110011111101100101011000110011011101001110100101101101100010010111101000111010010010010111100001100101010011000001000000111100010011000100" + "1111111100011101110010111001000110010000101100101011101011011100110111000111010100001101001101111001001100011010111011110111111000010111010101000010100" + "0101111000101010101001011010011111101111011011010010100110001110010010101010000010101111011010100000011100001101000001111110110111000100011011100111100" + "0110000000011011110101001001011010100001010110010100011100111011000010000101010000001011110111111111100001010111010001110011001101010100110110000000000" + "1100110001000100110100011010110011110110000011010100111010100100011000000000010000110000110000111100010001100101101101111110101110011110000010101111011" + "1100110111110000010100001011001000001111001111101101010000011111001011100101110100100011110101110101011111111100001100100101100100111111010110011010110" + "0110110011000111100000011110111001110001101011101000100010101101101101110100100011100110010011100111101111100101100111011110001100111011010001110001101" + "0111001010110101011001001011000101101001001100110000000001111101011010001101001000010010011110101101111110011111101110100011101111001001011100101111101" + "0010011101101010100111100010011100010011000011010101101000001010100011101010111111100110001000000001101100100110110000000110011001011001111011101100001" + "1000110111011110100100110001000010010000100111011010001000011010111100010101001100011111101100010110000011011111101000001011111100110001101110110101011" + "1101011001101010111110000110100101010000100001001110101110000100010110001110010001010011100010110101010110001100000001101000010011101010000000111101011" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "0001001110100100001101000110101001111011101001011011001100101100111110000010101011101111010000000000100110101101001101011100000100000011011000010011101" + "1000010101110010110001111011101111111001101111011011101101011110001011110101010101011011010101100011101101010100111001111001100100010000001101111001011" + "1001110110000010011011111000101000110010000010000111001101100100100101110000101010011110111011010000001010101111011110100110011011100000111001100111011" + "0110000100011001011000111101110001111001000101000011111110011110110101000001111101111101100111110010101010110001011011000101011001101111110100110101011" + "1010100111100111101110010100001010110011000000010110011000000010100001000010101000111011100001001001010111001101010100100000110001011100011001100100100" + "1101011100111100110101110101001111100100010100110111011000010110100000000101001001001100011100101011110011110101001100110011010011111011010100100011100" + "0001111101101100011000100010110100110011100011011110110011101000101010010100110110010000011010100100101001100100011011111100101100101000110001100000010" + "0110110101010101011000000011101100110000010110111001001100111011011100000111110110111110110111101011000010010111010101110001110101110010111101011011101" + "1011010000100001101110101100011101011001000010110111111001000111101101011010110010010111010011000111101000100000110000011000010010110001011011110111110" + "0011101110011110110100001101100111100101101110100010001100011100001001001001000111001000000100100110001100111011100100001101101000011101010101100000010" + "0101000110101100011100101110101011111000001000010101011000000011001100101000110010100000101010110001111101101011010010010100011000001010001010010100111" + "1000100000111011001011000011100010110110100111011111001000111111111110011101010011100001010100111010011011011001001001011001010001011001011101011111110" + "0111110000100111111101001110011000101101110000010010101111101101000010000010000011100101011000101000011110101111100010000110010010100100110011011110010" + "0110100111111100001111000011010011010101101110001001110101111011000001000001001000100010001110100100001110010010010110100011001101000001100111110101001" + "0010011011100100101100011110010110011010001010001110111000101011100101001000101001001001101000010110000110101000011110110010101110101000011000000010110" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "0000111011001011101000110110100010010000000011011011011101001010110100101110110100001010100000001000101100000100011011001100001001101011011000111010100" + "1011101011110000100011110101010110111100011110111001011001010000001011111111010111001100010111110011111000110011001011111111010010110100111101001111101" + "0111100100101010000001010010000101011001000001001101110000101010110000111110010110010101000010000011001011101001000110010010000011101010110001100111100" + "1000101111010011001101110101000110000001001100111110010110010010010001011001010111100110110111001001001001111101101101010001011111100101110100011110100" + "1101000111101110010011001110111100100110010000000110001101001001110000111100010101011100010011001101111100101110111100001000001111100000101011110110100" + "0110111110110001100101011101000011111001001111010100100101110011010000111111101100100111010111000101000001010011110011100011010001111011100111001101100" + "0101010101101010010000110100111010110010110001110011110011101100011111110000000101010001000011001011111100000111101000010010111111011111101000110010001" + "1100111000010101000011100001001001101000111101110011001001010111011111001001011011100001101100100010000001111100101001001111110000000110101111001100111" + "1001101001000001000111111110110101001101010000110110110011101100000101011010111100101000001011001101101010000010101000010110001101101011110001110010001" + "1000000100011011110011111011110000011111110111001111111010110101100011000111010100100010001111000101110110110100000111000011101011011101111111000011111" + "1000110110001001001111110010011100000100011010101101101101101001001001011110101010011110010011011110100111100111110111111110000101100111110000101010011" + }, + /*100*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 31, -1, { 0, 0, "" }, "aztec barcode", -1, 0, 131, 131, 1, 1, "Layers 27 example from Andre Maute, mailing list 2020-12-16", "10101111100010101000001110000100001111111110110110010011000100100000011000101001100000001111111010100010010101111010001011001110001" "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "10001110111111000001001111011100100100010011110010101011110111111000000110101100000110101010110000010101101110010010010101001001001" @@ -1645,7 +3574,140 @@ static void test_encode(const testCtx *const p_ctx) { "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "10111010011101110010010111100011101001001011100010101101110000011000110101000011100000011000101000101010001110100000000100101100001" }, - /* 34*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 6, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 23, 23, 1, 1, "Full 2 layers example", + /*101*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, -1, -1, -1, 31, -1, { 0, 0, "" }, "aztec barcode", -1, 0, 131, 131, 1, 1, "Same as above", + "10101111100010101000001110000100001111111110110110010011000100100000011000101001100000001111111010100010010101111010001011001110001" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "10001110111111000001001111011100100100010011110010101011110111111000000110101100000110101010110000010101101110010010010101001001001" + "01011001101100001111011110100110011101100100000111011100011110111100111011101100010001000101010011011110111101111101110001011110110" + "00010011111010010000101100000000000101100100001110001110011110010010100010101111100000011110100000010100110001100001010010110011000" + "11001001110100100101100011010001110000110110011111011000000100010101001010000111111010010011110101110011001111010110000101111111010" + "10111000100010000011110011100111101111010100001010111010110011010010101010001111000010011101110110111101011100010001111010011110100" + "01100011011111101110100010111100110000110010011111010011011010110110001000110011110010100110011111000101011001011110001011010101111" + "10111011100010110001000011000011001010001000111010011010000011000000101101111011000100110001111110110001010011100001101001000110101" + "01101011010010000111110000000000010100010111001001101011100011010110011001110011110000000101011001010011011110101111100101010011010" + "00101000011001101010110101101101100000111101001100100001110011101001000010100001000100001111001010100001010111010011110010111101100" + "01001111101011110101110001001000111001011110110101101011000010010111101001110001110011000110000101010011000010011111100111011001011" + "10101100000010001010110001101001001000111110110100111110111001011011101010111000001101111011011100011111101101011000100001111101001" + "01001001100010001100011111110001110000101100101001010010001010010101110111011111011100000100011011111001111001110110000110000101011" + "00100100111100100010001110101011101010001011011110110001100000110010000010100010100110100100111110111001110001100000110111101010100" + "01011001010010101111111010000100110000111000011001100111010101111110011101100011010000100011101101010001101111001100010100111011111" + "00000110100101111000011110111001001111101001100000001101001101101010000000110111001101010110100000111111101111001011100000010010001" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "00010001111000001001010101001011001100010011011110101010111011101010001010001000100111101100101110111010000110100001000101111100101" + "11000000111111110111010110110110011001111100111011010111010010101100100000001111010100001010000011101010111111110111001110001101011" + "00010111001101000010010100010101001011100101000010011000100010101011101010110100101101111000001100100111111101111000011101100111000" + "11101100100010000101010011011101110110110000100111100000001001000101101110011001111000000111010101001111101100010111001001010000011" + "00001100100011000001100101011111100101110001010100011100100110001001111101011000001101010000101000100111110100111010001101100100100" + "01100111110100011101010010110000011010110001111011010110011010100111001101101001011101001000000001110001010001000110100001101010010" + "00100000001100011011000001111010000110011001001100111110101110111000100000110011001101010100110100011000000110111011111100111010000" + "01010000101101010101110101101101110010001000000101010001011100101110101000000010111101000110000011100111101001110101110111111000010" + "10110110101101011011001101001000000011000000010010010100101000011010110111011000001001101101011110001000010000100001011101000111001" + "01001011100011001110101011100111111001111110010101001111111011100100010111111000011110101011011101110010100011000101001110000001011" + "10011001111000000000001111011101000111011111110000010110000111111001001011101100001010110000110010100001000001100010000000001101100" + "01111111110110110110111011000110110111010000000101000111011111000101001011111010011101110011100111001110011100110111110101111001111" + "00000010101110011001001111000100001011110001010000001011101010011010100110000100001011101101101100111010011110111011101001001010000" + "01000001101111101101100110000100010111000001101001011011011110010100001001000100010101001001000111101111101011100100011001100111110" + "00011110000110100011011011001100100110011111011010111001001010100010101101001000101000001010101110101100111010000000101110011010100" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "10001110011000100010010001101100000110110000101100111001100100110001111111110011000111011101111010011110011111001011001000010000001" + "11000000010111110110000011011100011110000110010111111111111001011111010111010110011110011000101101110011011101001100011001000000110" + "00111011101000001010000010100010100001111010110000110110101011110000001000011111101110100010111010110101101101100010010110100000000" + "11000110110101110101111000000101011001101100101011100000010001000111111111111110110110001101111101100111101101101100010011001101111" + "10101111001011100011010011000110000101100011111000001000111110011000000011011100001100011001111100101110010110100000101010101110100" + "01111100001011001111100010011101110111101100000001110001101000000100100110000001011101101010111101101000110001111110000001110101010" + "00001100111011011001110001010001100010110011010010001111000110100001111110001110000110101011000010001000001111001001101011001000000" + "01110110101101011100010100001001110110111001011101011101010111000111110011001011011010110010011011110111000100011111101010101100010" + "00110110110101010011001000111101001110101111000010100111111110110000010100001011101011110100011000001100010111111011010100000001001" + "01100000111100110110110010101010110011101101010101001111111110011100111000001110111000111101011101001101011000001101001110011101110" + "00010011010001100010010000001110000001001011001000111111000111000011101010000011001101001010010000011010101000000001010001000010000" + "11011000101000110111001100011101111000011000011001100111011010110110101101011011010000001111101001110100110010111110100000011000010" + "00011110000110001001000010101000100100110111010010000100001111100000001111010010100010110011001100100010000100011001010101100000100" + "01011101100100110111011100110000011100100101011001010000111110101110100110010001110110000111000011010000101010001111110011011001110" + "00111101100111011000010100100110100011000110000000010010100001101000001111010100100110010010011000101010110100110010111001110100101" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "00111000001111011001000100110111100100110001000110001011000101010001001100111100101101000011111100111101000100101001010110101011101" + "01011111010111010110011110110010111110101001000011011110011110010100100101000110010110010110101001001010000011011100101110011010111" + "00001000010011010001000110010011000010111100000100001001101001110001010101001111001010100001101100000001010011001000100101100100001" + "01101010100101111100001001001000111010111111001111100000110001101111001001000100010010001010001011000101010010011111000101000011011" + "00000011010001101000111111100100001001100111011100000110101011111011000100001110100110011001001100110010001010111000011010101000100" + "11010101010100001110111111011001011010100000100001010100110101010101011110011011111011010100110111001000011011100110000110110011010" + "00000101001101101010100100111011101111101101100110101010010011000011011011110011001100101101000000101000000010110011001111010100101" + "11110110001100110111101101010110010100011001001111001001001010001110010010100000011011010010100001110011110101101111111001010111111" + "00110001011100010011111000001001100110011101011100111010001111010000000011110011101110010100111100110010111101001010111101001110100" + "01101001000110001110111111010101110010101011100111011100101111111111111110010000110110000010011111111000011010100110101010100010111" + "00111011111011000001100101100100001101011101011010001000101100000000000101000001001110101111000110111111110110000010001110101000001" + "11010010101110010111101110011111110011001100100101000010011101111111110101101111111000101000010001010110001110100101101010111000010" + "00001011001111111010000010001001001110111000000110001001001101000000010101011010001011011110001100001101100100011011111010101101000" + "11000011000000101100000010010001110001101010111001101011111101011111010110111111111001100001100111000000111011001111101110001101110" + "10101011010001000010001110011110100001110000001110110000101101010001010100000100001111011001111010000110000101100001001000111111000" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "10000001101001111011010001101101000110011100001100110111111101010001010111111001100110010110000100111101111011101011111100000000000" + "01100010100010111111110001011100110011010001010011011001010101011111010100111001111000011100111101111101011101010111001000000111010" + "10001110101111110001001100101101100010101101100010111110000101000000010111101110000010111100101110100110011001101010111101011001100" + "11101000101001111101011101100011110101111011000111011100111101111111110101101100010010010011001011100010111010100110101110000110111" + "00011111000101111010101101100110101010101111111010101000110100000000000101011100100111111000010010011111011101011001011111101101100" + "01001110110110000111110101110101110001011110111111011110110111111111111110000001010000000110110011000011111111001110101101110100011" + "10000001101010010011110100000101000010110100110100110000110010010001011000100011100101100010010110000001110010101010010101001001101" + "11001101011000110101110001111010111101101010100111001000000100011110111100010001110001110110000111000100111001110111000100001101110" + "10010000001010100000100110001010000001010010101010010000111101100010010010100110001100011011101010011100110111000011010111100101000" + "01001101110110000101100001001111010110010100111111101110100001100101000101011101011001101110100011100100100110010100011110110110110" + "10111001110000110011100100001010001001011111111010010101011001111011000010010011000011001111111010011111011000110000001001111110100" + "01010010101010011110101111101100110100001110110111100010001111010100010011111000010110010100011001110110111000011110101101000010010" + "10101001111100001000011101000001000011001011010010111011100000101001000000101101100101011100111010101110001010111010011100000011001" + "11010111100100000111010000000100011011101010001101011001010100000100101000111001011110101110001111111001111001111111011100101001011" + "10001001111001001011100001100101000001100011010000100001000111110001001111100000001000111101010100011010101010011011110101110110100" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "00100101110111111001101000000010100111110001011010010011110100011010000010010100101111011111110110001100110100011010101100000010100" + "01001101110010000100000101001100010001000101010011101000000100000100100110100111111101010100100001010001000011000111110110001111011" + "10001001010001101010010110011111100010001000010100010101100001100011000110011000100101111100100010001010110110010001111001000110000" + "11100111010001110110100001001111010111001001110111001101100001001111010110110011011000011100101001000001010101100100000010111011011" + "10010100010000000001111110100111101111000000011100100100000101011001001101101010101101101100011010101000101101110000111101101000001" + "11011100101111010111010100100101110010100100100101001011110110000111110011110010110001111101101001110001101010100110100101110100010" + "00110011101011000000110000010110101001111000110000111001110111110001110101110001000000011111100010110011111111100010011001010100100" + "11001011110000000101011010000001011010000010011001100000001001011110000000010001010000101000110001110110000001110111001000101010111" + "00011100000000110001101011111110100000010001101110001011000110100011011101000100000101101011011100111000001010100011101111010101001" + "01010001010010011100101101001001110110100011111011100000001111010100001100010000110001011100101101110100110011111110010010000101110" + "10000001010011100010000000111111100010010000100010111011110010101000101100000101100100010011010010000101000111001010101101001111101" + "01110011110111111110011110000010111100100011010101111100100100011110100100011001011100101100011111110011101101010111111111101100110" + "00100101011010001011010000100110000110101010110110110110001101000000000100011000001010001000010010101111000100011011100001111000101" + "11100110011100011100101010011100011011010000011111100111101100010100000011010000010100100000001011111101001100111110000110100101011" + "10010100001110110000000111101110001001001101111110010100100100101011011010001111001000101011000110011001011111101011110110000000100" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "10111000010101100001100011100000000100000100101000000111111011100000111011101101100000011111111000011011101010100001111001011010101" + "01100100010101101110101010001011011011011100111011001000000100010110111001010000110011010000101011000101111000010100111001101001011" + "10001110010010010011011100101001000011000110100010110111001000101011010001110001000001100101101100000000101111001011011100111111000" + "01000101001011111111111101011111111001000011100011010000110011101110111110000001111101001100110101101001010000000101101010010100111" + "00111010101100100011110010101001101000110110101110011000111011101000111000110110001101000001010100000011100110110010000100101111101" + "11111011101000100111000000011000110110111111110011011100110111110101101000010011111000110000011001010101100011110111011101000101110" + "10001110101010101001011000000100001101010101111010000111110110101000111000010010101001010010001100111111000001010010100111111000100" + "11100111011000100100001000011010011001110000000001111001101010001111111111000010110001000101000001011010011000111101010000101101111" + "00001011101001000001100010010001001110101010010010011100111000001001110101010101101110010001100010110101001000010000101110010111000" + "11011101100000111111001001111001010001110001100111111000100101101110101010101110011001011011000111000011011010111111101011011110111" + "10010100110100100010001111000110001110000001101010000000101011001001011101111111101001000000000010111100011000110001101000011110101" + "11101100000100111100101100101100111010011110111111010100101101010111001101001100111110000000111111011011000101001111011011100110111" + "10101001100001010011101100011100101001111010011000000110110001011000001000000101001111111001101010011110111000111011101000101110101" + "01001010100101101101010100000001010000011001101111000001000011101110000011111000011110000001000001111101111111111111101110100100011" + "10101101000110101010100000000001000111110111111010011000111001011000101101101101000011000101011100010010000000110011100101001000101" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "10011011001010011011111010010110100001000101010110001110001011111000110110010001000110001100111000010001100101110001000111100011101" + "11100100101011001110001010000011010110011000010111110000001000011101100110111010111011000110000001100111110001000100110100001000110" + "10101001001011011000111000110010001010011101110000110110010000010000011111000000000010100001010100111001011111011010001001011011101" + "01100000001011001101101000101111111011001010011101011110011001011100110000001010011000010000010111111001111110101101001101110110110" + "10000011011100100001000010111111101011010011010010011111011010010001000001000001101000101000111010111100110000110011011010100000100" + "11001001000110111111000011001101110110101101000111000011001000010100100011001100110000100110010111000001000000010101011111000011111" + "10101010101001111010010101110100001100110100110000001010101010010000110011101001001001110111111010100100100001010001111001010101001" + "11110000111000111111110010110001011000010001111101101100110100001101000110011101011000000001000111011011101110000101010000100010010" + "10110001100000011010111110000101100101000000110000010110101100011001110001101000101001101001010000010010111000100000111010100010001" + "11110010110100011101100100111100010111011100001111011101101100000111011110011111111001000010111111101100111111110101110000101001010" + "00010111010101110011011101100100101011000101001000111100101110111000101001111110101111000010011110010111011110000011100010011001100" + "01000100010011111110101010011101110011010101110001001100110111100101001111010001111000111011011101111001001011111101101111100101011" + "00011000000101000011011001001011100101101100001110101000010111001011101011001100100010001000011110010010011010011010001101000101001" + "11001101000110000101110000001101110010010111000111001111110111011101100110011000010110000101011001011001110110010110100111100010011" + "00110011100010101000010110010101100101101100000110100010100010111011101100111001101100111101011100001101010111110000101110101001001" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" + "10111010011101110010010111100011101001001011100010101101110000011000110101000011100000011000101000101010001110100000000100101100001" + }, + /*102*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 6, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 23, 23, 1, 1, "Full 2 layers example", "00000100110001011110010" "01111011110100100101111" "00001011010000010011001" @@ -1670,7 +3732,7 @@ static void test_encode(const testCtx *const p_ctx) { "11001100111110110000000" "00011010100010111001011" }, - /* 35*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 7, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF", -1, 0, 27, 27, 1, 1, "Full 3 layers example", + /*103*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 7, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF", -1, 0, 27, 27, 1, 1, "Full 3 layers example", "001011111011101010010010000" "011111001111111001111010110" "001111101101101100001011101" @@ -1699,7 +3761,7 @@ static void test_encode(const testCtx *const p_ctx) { "110011110110011010110100110" "101010010111000001000111010" }, - /* 36*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 8, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNO", -1, 0, 31, 31, 1, 1, "Full 4 layers example", + /*104*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 8, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNO", -1, 0, 31, 31, 1, 1, "Full 4 layers example", "0011101110100110101001010110000" "0110000101110011101111001100111" "0000011000110010000001101101001" @@ -1732,7 +3794,7 @@ static void test_encode(const testCtx *const p_ctx) { "1111011001010111010011101111110" "1001011100001000011100011001100" }, - /* 37*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 9, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 37, 37, 1, 1, "5 layers example", + /*105*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 9, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 37, 37, 1, 1, "5 layers example", "0010010100110011001011100010000111101" "0101111010111110110100101101010011001" "1010101010101010101010101010101010101" @@ -1771,7 +3833,7 @@ static void test_encode(const testCtx *const p_ctx) { "0101001010110100110101111101011110000" "0111100001000111001011001100101001111" }, - /* 38*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 12, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 49, 49, 1, 1, "8 layers example", + /*106*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 12, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 49, 49, 1, 1, "8 layers example", "0001000111011100100000001101000011110011100000101" "0110100001000100011100000000110110101100010111110" "0000011110010100101100001010000010000100110110111" @@ -1822,7 +3884,7 @@ static void test_encode(const testCtx *const p_ctx) { "1001110101111010111101010001000110101110000111011" "1110001110011001010011001001010000100100101000001" }, - /* 39*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 14, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 57, 57, 1, 1, "10 layers example", + /*107*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 14, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 57, 57, 1, 1, "10 layers example", "001011000011100111111010110111010001110110001110011100010" "011110001010001111111111000000100000100100110001001011111" "000101001001111111010111010010011011111011101011010110010" @@ -1881,7 +3943,7 @@ static void test_encode(const testCtx *const p_ctx) { "111101011110010100100011010101100011100110010111011001001" "001100101001110000101000010011000100001101011001011100010" }, - /* 40*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 16, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 67, 67, 1, 1, "12 layers example", + /*108*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 16, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 67, 67, 1, 1, "12 layers example", "0000000100001010000100101101101010101011010000001010001111010001101" "0101010101010101010101010101010101010101010101010101010101010101010" "0001010100101010100010110000101110111100001101110000000100111010001" @@ -1950,7 +4012,7 @@ static void test_encode(const testCtx *const p_ctx) { "0101010101010101010101010101010101010101010101010101010101010101010" "0001010011000010100000100100010000011010100101110000010001110001101" }, - /* 41*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 17, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 71, 71, 1, 1, "13 layers example", + /*109*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 17, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 71, 71, 1, 1, "13 layers example", "00001101010011011010101011001110001000011100011011001100101000001110111" "01110010110000100111001011100101010101000111011001110000100101100001100" "00000111000100010100111110101011100011011010001110001000101100010000011" @@ -2023,7 +4085,7 @@ static void test_encode(const testCtx *const p_ctx) { "10110010001101011101001110011001111101100101011010011110111110101111111" "10000010100001001000010000110101001001110000100011100001100110010100001" }, - /* 42*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 20, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 83, 83, 1, 1, "16 layers example", + /*110*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 20, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 83, 83, 1, 1, "16 layers example", "00001011100001101001010010111011000000000010110111001100101011111010100110010011011" "00001100111101010101111001100010000000000101110110000101011100011010011001001000011" "00000001101101111000000010100101011010101011110011000000000101010100111000110101100" @@ -2108,7 +4170,7 @@ static void test_encode(const testCtx *const p_ctx) { "01101011110001110011001111101100101011010101110111110101111101011001011101100001111" "00001001000010000110101000101110000100011010001100110010100011011111011100001101110" }, - /* 43*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 23, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 95, 95, 1, 1, "19 layers example", + /*111*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 23, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 95, 95, 1, 1, "19 layers example", "00010001011000001001011100000100010100011110001000101101010001101011000110101100111011100100000" "00111000100000010000111101010111001010100110100100101001100010111101100100110001001101001001000" "00110000001000100010001011100100111100110000000000111101000101101101011010001100100111011100010" @@ -2205,7 +4267,7 @@ static void test_encode(const testCtx *const p_ctx) { "10011001111011010101011010011101111110101111010101011110010010111111000001000011100100110011001" "00110101001011100000100011100010100110010100111000001111111101000000001100011000110110100110000" }, - /* 44*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 24, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 101, 101, 1, 1, "20 layers example", + /*112*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 24, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 101, 101, 1, 1, "20 layers example", "00100011001001111011101000010101101000001111011011100001010111001110100001111011101010011110100110110" "01001011101010010001000100010011010011001011100001000010011001000001100110100110000010001111010101011" "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" @@ -2308,7 +4370,7 @@ static void test_encode(const testCtx *const p_ctx) { "01011101100101011001001110111110100111101011010110010100101110001100000100001110000011101010010100001" "01100101110000100011110001100110011010011000001110100010010101000111010001001111111100001101100010111" }, - /* 45*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 30, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 125, 125, 1, 1, "26 layers example", + /*113*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, -1, 30, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 125, 125, 1, 1, "26 layers example", "00100110111101111000100011101010001011000100011001100001000110110101101111011010100110010101111010000000001001111011011101111" "01000110110001010011111011000100001101000010100100110101101011001111101101110000100110101000000100001011010101000110110110011" "00100000111011111011100111001111100011001111101001011011011111100001111010110111111101111111011010001000100011110110101111001" @@ -2435,7 +4497,7 @@ static void test_encode(const testCtx *const p_ctx) { "11111010111101011001001001001000000000110100010101011110101011001010101011000101010010100111110010111001110100001111110111011" "10011001010011111111011111100010010011110010001010100100000110100111000110011010110111001010011011101001111100110010110010011" }, - /* 46*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, { 1, 2, "" }, "[20]01", -1, 0, 15, 15, 1, 1, "GS1 with Structured Append", + /*114*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, -1, { 1, 2, "" }, "[20]01", -1, 0, 15, 15, 1, 1, "GS1 with Structured Append", "001101011010101" "111100100000010" "101100001000101" @@ -2452,7 +4514,24 @@ static void test_encode(const testCtx *const p_ctx) { "001001100010110" "000001101000000" }, - /* 47*/ { BARCODE_AZTEC, GS1_MODE, 3, -1, -1, -1, { 3, 3, "AZ1" }, "[20]01", -1, 0, 19, 19, 1, 1, "GS1 with Structured Append, ECI", + /*115*/ { BARCODE_AZTEC, GS1_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 1, 2, "" }, "[20]01", -1, 0, 15, 15, 1, 1, "Same as above", + "001101011010101" + "111100100000010" + "101100001000101" + "111111111111110" + "111100000001101" + "010101111101101" + "000101000101100" + "011101010101010" + "001101000101011" + "000101111101001" + "110100000001001" + "000111111111111" + "000001100010011" + "001001100010110" + "000001101000000" + }, + /*116*/ { BARCODE_AZTEC, GS1_MODE, 3, -1, -1, -1, -1, { 3, 3, "AZ1" }, "[20]01", -1, 0, 19, 19, 1, 1, "GS1 with Structured Append, ECI", "1101011001100100101" "1000001000001010100" "1100010010010100100" @@ -2473,7 +4552,28 @@ static void test_encode(const testCtx *const p_ctx) { "0011010000001001010" "1011000010000000000" }, - /* 48*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, 6, { 2, 4, { '1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2' } }, "[01]12345678901231[10]01", -1, ZINT_WARN_NONCOMPLIANT, 23, 23, 1, 1, "GS1 with Structured Append, full symbol", + /*117*/ { BARCODE_AZTEC, GS1_MODE | FAST_MODE, 3, -1, -1, -1, -1, { 3, 3, "AZ1" }, "[20]01", -1, 0, 19, 19, 1, 1, "Same as above", + "1101011001100100101" + "1000001000001010100" + "1100010010010100100" + "1101101011111010101" + "0111110101000011000" + "0011111111111110000" + "0001010000000110010" + "1000010111110101101" + "0000010100010110111" + "1011010101010111111" + "1100110100010111001" + "0100010111110111101" + "1110110000000110100" + "1101011111111110100" + "1010000010110000010" + "0011001010000011100" + "0111101011010100100" + "0011010000001001010" + "1011000010000000000" + }, + /*118*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, 6, -1, { 2, 4, { '1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2' } }, "[01]12345678901231[10]01", -1, ZINT_WARN_NONCOMPLIANT, 23, 23, 1, 1, "GS1 with Structured Append, full symbol", "11100110011000010001000" "10100110000110101111010" "11000101100000111000011" @@ -2498,7 +4598,53 @@ static void test_encode(const testCtx *const p_ctx) { "01011110101100000101110" "00010001000011011101100" }, - /* 49*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, { 0, 0, "" }, "\152\076\350\255\362\357\027\231\072\040\123\224\237\303\035\207", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 1st example; BWIPP different encodation", + /*119*/ { BARCODE_AZTEC, GS1_MODE | FAST_MODE, -1, -1, -1, 6, -1, { 2, 4, { '1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2' } }, "[01]12345678901231[10]01", -1, ZINT_WARN_NONCOMPLIANT, 23, 23, 1, 1, "Same as above", + "11100110011000010001000" + "10100110000110101111010" + "11000101100000111000011" + "11100111110100011101011" + "01101100001000000011000" + "11001111111111111110111" + "11001100000000000111001" + "00001101111111110100101" + "00011101000000010111000" + "10000101011111010110101" + "01001101010001010100101" + "01010101010101010101010" + "10010101010001010100010" + "10111101011111010110100" + "00110101000000010110110" + "10001101111111110101001" + "10010100000000000100010" + "11000111111111111111010" + "00010000010000000000110" + "11010000010111010111011" + "11101101110011000101000" + "01011110101100000101110" + "00010001000011011101100" + }, + /*120*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "j>\350\255\362\357\027\231: S\224\237\303\035\207", -1, 0, 19, 19, 1, 899, "BWIP-JS #354 1st example", + "1101010010011101000" + "1100111010011110011" + "1001101000000110101" + "1011101011001001011" + "0011110101011011000" + "0010111111111111010" + "1110010000000110010" + "0101110111110111000" + "0111110100010101100" + "0010010101010100001" + "0100110100010101100" + "1100010111110100101" + "1111010000000110101" + "0111011111111111011" + "1110001101101000000" + "0110001001111011110" + "0011111011010111001" + "1110110001011011110" + "0001111011111000101" + }, + /*121*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "j>\350\255\362\357\027\231: S\224\237\303\035\207", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 1st example; BWIPP different encodation, 3 codewords shorter (see above)", "1111001111001101001" "1011001011010001101" "0010010101011000011" @@ -2519,7 +4665,28 @@ static void test_encode(const testCtx *const p_ctx) { "0000111100101101101" "1011101101111100011" }, - /* 50*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, { 0, 0, "" }, "\035\316\244\056\040\104\004\275\031\175\244\311\030\035\076\164", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 2nd example; BWIPP different encodation", + /*122*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\035\316\244. D\004\275\031}\244\311\030\035>t", -1, 0, 19, 19, 1, 899, "BWIP-JS #354 2nd example", + "1110110111000100010" + "1110111001100010100" + "1010011100101001011" + "1010000100011000000" + "0001110101011010110" + "0011111111111111001" + "0011010000000111001" + "1100110111110110110" + "1000110100010101101" + "1100010101010100011" + "1011110100010101111" + "0110010111110101001" + "1110010000000111000" + "0111011111111110111" + "0111001101101001100" + "0000101100011111101" + "1010010010101001001" + "0111010000000000111" + "0001000001010001010" + }, + /*123*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\035\316\244. D\004\275\031}\244\311\030\035>t", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 2nd example; BWIPP different encodation", "1110001010011101111" "1001010010100100110" "1100010011111011111" @@ -2540,7 +4707,7 @@ static void test_encode(const testCtx *const p_ctx) { "0001011110011100101" "0000001100111001111" }, - /* 51*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "0", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (1st)", + /*124*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "0", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (1st)", "11101010101" "11111111111" "01000000010" @@ -2553,7 +4720,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00101010100" }, - /* 52*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "25", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (2nd)", + /*125*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "25", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (2nd)", "11101100101" "11111111111" "01000000011" @@ -2566,7 +4733,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100100000" }, - /* 53*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "125", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (3rd)", + /*126*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "125", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (3rd)", "11110101101" "11111111111" "11000000011" @@ -2579,7 +4746,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111101000" }, - /* 54*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "255", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (4th)", + /*127*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "255", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (4th)", "11010101001" "11111111111" "01000000011" @@ -2592,7 +4759,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110011100" }, - /* 55*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "1", -1, 0, 11, 11, 1, 1, "", + /*128*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1", -1, 0, 11, 11, 1, 1, "", "11101010101" "11111111111" "11000000011" @@ -2605,7 +4772,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100110100" }, - /* 56*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "15", -1, 0, 11, 11, 1, 1, "", + /*129*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "15", -1, 0, 11, 11, 1, 1, "", "11101001001" "11111111111" "11000000011" @@ -2618,7 +4785,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00001111100" }, - /* 57*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "16", -1, 0, 11, 11, 1, 1, "", + /*130*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "16", -1, 0, 11, 11, 1, 1, "", "11101110101" "11111111111" "11000000010" @@ -2631,7 +4798,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111100100" }, - /* 58*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "63", -1, 0, 11, 11, 1, 1, "", + /*131*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "63", -1, 0, 11, 11, 1, 1, "", "11100101001" "11111111111" "11000000011" @@ -2644,7 +4811,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00101010000" }, - /* 59*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "64", -1, 0, 11, 11, 1, 1, "", + /*132*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "64", -1, 0, 11, 11, 1, 1, "", "11111010101" "11111111111" "01000000010" @@ -2657,7 +4824,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111011100" }, - /* 60*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "65", -1, 0, 11, 11, 1, 1, "", + /*133*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "65", -1, 0, 11, 11, 1, 1, "", "11111010101" "11111111111" "11000000011" @@ -2670,7 +4837,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110111100" }, - /* 61*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "126", -1, 0, 11, 11, 1, 1, "", + /*134*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "126", -1, 0, 11, 11, 1, 1, "", "11110101001" "11111111111" "01000000010" @@ -2683,7 +4850,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110111000" }, - /* 62*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "127", -1, 0, 11, 11, 1, 1, "", + /*135*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "127", -1, 0, 11, 11, 1, 1, "", "11110101001" "11111111111" "11000000011" @@ -2696,7 +4863,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111011000" }, - /* 63*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "128", -1, 0, 11, 11, 1, 1, "", + /*136*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "128", -1, 0, 11, 11, 1, 1, "", "11001010101" "11111111111" "11000000010" @@ -2709,7 +4876,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100010000" }, - /* 64*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "191", -1, 0, 11, 11, 1, 1, "", + /*137*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "191", -1, 0, 11, 11, 1, 1, "", "11000101001" "11111111111" "01000000011" @@ -2722,7 +4889,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100010100" }, - /* 65*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "192", -1, 0, 11, 11, 1, 1, "", + /*138*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "192", -1, 0, 11, 11, 1, 1, "", "11011010101" "11111111111" "11000000010" @@ -2735,7 +4902,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110011000" }, - /* 66*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "225", -1, 0, 11, 11, 1, 1, "", + /*139*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "225", -1, 0, 11, 11, 1, 1, "", "11010010101" "11111111111" "11000000011" @@ -2748,7 +4915,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00001100100" }, - /* 67*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "254", -1, 0, 11, 11, 1, 1, "", + /*140*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "254", -1, 0, 11, 11, 1, 1, "", "11010101001" "11111111111" "11000000010" @@ -2766,7 +4933,7 @@ static void test_encode(const testCtx *const p_ctx) { int i, length, ret; struct zint_symbol *symbol = NULL; - char escaped[1024]; + char escaped[8192]; char cmp_buf[32768]; char cmp_msg[1024]; @@ -2784,19 +4951,22 @@ static void test_encode(const testCtx *const p_ctx) { assert_nonnull(symbol, "Symbol not created\n"); length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, - data[i].option_1, data[i].option_2, -1 /*option_3*/, data[i].output_options, + data[i].option_1, data[i].option_2, data[i].option_3, data[i].output_options, data[i].data, data[i].length, debug); if (data[i].structapp.count) { symbol->structapp = data[i].structapp; } ret = ZBarcode_Encode(symbol, TCU(data[i].data), length); - assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", + i, ret, data[i].ret, symbol->errtxt); if (p_ctx->generate) { - printf(" /*%3d*/ { %s, %s, %d, %s, %d, %d, { %d, %d, \"%.32s\" }, \"%s\", %d, %s, %d, %d, %d, %d, \"%s\",\n", + printf(" /*%3d*/ { %s, %s, %d, %s, %d, %d, %s, { %d, %d, \"%.32s\" }, \"%s\", %d," + " %s, %d, %d, %d, %d, \"%s\",\n", i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].eci, testUtilOutputOptionsName(data[i].output_options), data[i].option_1, data[i].option_2, + testUtilOption3Name(data[i].symbology, data[i].option_3), data[i].structapp.index, data[i].structapp.count, data[i].structapp.id, testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), data[i].length, testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].bwipp_cmp, @@ -2868,6 +5038,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { int output_options; int option_1; int option_2; + int option_3; struct zint_seg segs[3]; int ret; @@ -2877,8 +5048,9 @@ 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*/ { UNICODE_MODE, -1, -1, 1, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "ISO/IEC 24778:2008 16.5 example", + /* 0*/ { UNICODE_MODE, -1, -1, 1, -1, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "ISO/IEC 24778:2008 16.5 example", "001111000011111" "110111100100011" "111100001000111" @@ -2895,7 +5067,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "001010111001010" "000001011100111" }, - /* 1*/ { UNICODE_MODE, -1, -1, 1, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 15, 15, 1, "ISO/IEC 24778:2008 16.5 example auto-ECI", + /* 1*/ { UNICODE_MODE | FAST_MODE, -1, -1, 1, -1, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "Same as above", "001111000011111" "110111100100011" "111100001000111" @@ -2912,7 +5084,41 @@ static void test_encode_segs(const testCtx *const p_ctx) { "001010111001010" "000001011100111" }, - /* 2*/ { UNICODE_MODE, -1, -1, 2, { { TU("Ж"), -1, 7 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 19, 19, 1, "ISO/IEC 24778:2008 16.5 example inverted", + /* 2*/ { UNICODE_MODE, -1, -1, 1, -1, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 15, 15, 1, "ISO/IEC 24778:2008 16.5 example auto-ECI", + "001111000011111" + "110111100100011" + "111100001000111" + "101111111111111" + "001100000001111" + "000101111101101" + "110101000101101" + "011101010101001" + "101101000101010" + "110101111101001" + "000100000001011" + "000111111111111" + "010001100010001" + "001010111001010" + "000001011100111" + }, + /* 3*/ { UNICODE_MODE | FAST_MODE, -1, -1, 1, -1, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 15, 15, 1, "Same as above", + "001111000011111" + "110111100100011" + "111100001000111" + "101111111111111" + "001100000001111" + "000101111101101" + "110101000101101" + "011101010101001" + "101101000101010" + "110101111101001" + "000100000001011" + "000111111111111" + "010001100010001" + "001010111001010" + "000001011100111" + }, + /* 4*/ { UNICODE_MODE, -1, -1, 2, -1, { { TU("Ж"), -1, 7 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 19, 19, 1, "ISO/IEC 24778:2008 16.5 example inverted", "0000011010000000000" "0000001101101010000" "0111000110100011110" @@ -2933,7 +5139,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1000001011111001010" "0100000000011100111" }, - /* 3*/ { UNICODE_MODE, -1, -1, 2, { { TU("Ж"), -1, 0 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 19, 19, 1, "ISO/IEC 24778:2008 16.5 example inverted auto-ECI", + /* 5*/ { UNICODE_MODE | FAST_MODE, -1, -1, 2, -1, { { TU("Ж"), -1, 7 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 19, 19, 1, "Same as above", "0000011010000000000" "0000001101101010000" "0111000110100011110" @@ -2954,7 +5160,100 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1000001011111001010" "0100000000011100111" }, - /* 4*/ { UNICODE_MODE, -1, -1, -1, { { TU("product:Google Pixel 4a - 128 GB of Storage - Black;price:$439.97"), -1, 3 }, { TU("品名:Google 谷歌 Pixel 4a -128 GB的存储空间-黑色;零售价:¥3149.79"), -1, 29 }, { TU("Produkt:Google Pixel 4a - 128 GB Speicher - Schwarz;Preis:444,90 €"), -1, 17 } }, 0, 49, 49, 0, "AIM ITS/04-023:2022 Annex A example; BWIPP different encodation (better)", + /* 6*/ { UNICODE_MODE, -1, -1, 2, -1, { { TU("Ж"), -1, 0 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 19, 19, 1, "ISO/IEC 24778:2008 16.5 example inverted auto-ECI", + "0000011010000000000" + "0000001101101010000" + "0111000110100011110" + "0010011111100001110" + "0001110100110010000" + "0110111111111111110" + "0000010000000100011" + "1100110111110110000" + "0011110100010110101" + "1100010101010100001" + "1110010100010100000" + "1001010111110100000" + "1001010000000100011" + "0011011111111110001" + "0100001111100000111" + "1011111010011010111" + "1111010101011010101" + "1000001011111001010" + "0100000000011100111" + }, + /* 7*/ { UNICODE_MODE | FAST_MODE, -1, -1, 2, -1, { { TU("Ж"), -1, 0 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 19, 19, 1, "Same as above", + "0000011010000000000" + "0000001101101010000" + "0111000110100011110" + "0010011111100001110" + "0001110100110010000" + "0110111111111111110" + "0000010000000100011" + "1100110111110110000" + "0011110100010110101" + "1100010101010100001" + "1110010100010100000" + "1001010111110100000" + "1001010000000100011" + "0011011111111110001" + "0100001111100000111" + "1011111010011010111" + "1111010101011010101" + "1000001011111001010" + "0100000000011100111" + }, + /* 8*/ { UNICODE_MODE, -1, -1, -1, -1, { { TU("product:Google Pixel 4a - 128 GB of Storage - Black;price:$439.97"), -1, 3 }, { TU("品名:Google 谷歌 Pixel 4a -128 GB的存储空间-黑色;零售价:¥3149.79"), -1, 29 }, { TU("Produkt:Google Pixel 4a - 128 GB Speicher - Schwarz;Preis:444,90 €"), -1, 17 } }, 0, 49, 49, 0, "AIM ITS/04-023:2022 Annex A example; BWIPP different encodation, same no. of codewords", + "0010101110000010101011011001100001001001100001010" + "0010100001100010000000110000110010000000010010001" + "0001110011100101000100111100111110001111101010101" + "0101011000001100010000110000010101100110010100100" + "0000011110111011010000011010111001101101110010100" + "0001001100001101000100000110101111010001010100111" + "0100000011000000101101001000001010101011100010101" + "0100001000010010010010010010110100001100010110001" + "1010101010101010101010101010101010101010101010101" + "0111110100011000111110010100001100110111001000100" + "1101111110001100001111111100000001100011110010010" + "1011110001111011011101010101101100011111000011110" + "0110100011110111110110111000010111101010100011101" + "0000110000000110100100110111110111010101001011011" + "0100001011000100110101011101101111101110100110010" + "1010111101011000101010010101100011001001011000000" + "0110010110011001110000111011110100011000111110001" + "1110101000110010011001110000100100100110000011011" + "0000100110011000011111111111111110010011100101100" + "0000111000100010001000000000001101101111010111000" + "0010100110010011001011111111101011100110110000000" + "1001000101101111011010000000101110110001001111110" + "1101100111011101001010111110101010101100101111001" + "0110010000010110111010100010101110111110010011011" + "1010101010101010101010101010101010101010101010101" + "1001010000010111011010100010101010101111001110010" + "0001100110101000011010111110101011000100100011000" + "1010100100110101011010000000101010100100000100101" + "0111010110010000101011111111101100100111110111110" + "0111111101101100101000000000001110101111001010000" + "0101001011110110001111111111111101101110100011100" + "0010110000110010000111010010010000010111000001001" + "0011011011001001111100011010100011001111110111000" + "0110010000001101100100110110101111001000000110111" + "0101101010000011100111011011110000000000101000011" + "0100100001011010001011010011001001111110011011100" + "1100010111110001001001001010011111001101110111100" + "1000010000110011000001000111011010111010010101110" + "0000000011000101010000011100000010101110100000010" + "1001010101010101010111100110011110101001000000001" + "1010101010101010101010101010101010101010101010101" + "0001010001101001101011110010101111000111011110101" + "1000010011001000110000001100101011001101110111010" + "0010111001110110101000110010011001001000010010101" + "0101111110001110110001101111110111010111110110100" + "0011111100010011101100110111011100010100000001000" + "0001101110111010011110011110101001011000110010010" + "1001101000110101111010100111100011111001011001001" + "0001001010011000000100101101100110101000101100000" + }, + /* 9*/ { UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, { { TU("product:Google Pixel 4a - 128 GB of Storage - Black;price:$439.97"), -1, 3 }, { TU("品名:Google 谷歌 Pixel 4a -128 GB的存储空间-黑色;零售价:¥3149.79"), -1, 29 }, { TU("Produkt:Google Pixel 4a - 128 GB Speicher - Schwarz;Preis:444,90 €"), -1, 17 } }, 0, 49, 49, 0, "AIM ITS/04-023:2022 Annex A example; BWIPP different encodation (better)", "0000110010100000001100011100010010010010100010101" "0001100000010101011010010100011100000001000100010" "0001110011110000000000101101100110101001100000000" @@ -3005,7 +5304,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1001101000110101111010100111100011111001000100101" "0001001010011000000100101101100110101000100000000" }, - /* 5*/ { DATA_MODE, -1, -1, 2, { { TU("\357"), 1, 0 }, { TU("\357"), 1, 7 }, { TU("\357"), 1, 0 } }, 0, 19, 19, 1, "Standard example + extra seg, data mode", + /* 10*/ { DATA_MODE, -1, -1, 2, -1, { { TU("\357"), 1, 0 }, { TU("\357"), 1, 7 }, { TU("\357"), 1, 0 } }, 0, 19, 19, 1, "Standard example + extra seg, data mode", "1110011101010111000" "1100010001011100011" "1001110101000010110" @@ -3026,7 +5325,28 @@ static void test_encode_segs(const testCtx *const p_ctx) { "0110001101100001010" "0111100111100000010" }, - /* 6*/ { UNICODE_MODE, -1, -1, -1, { { TU("12345678"), -1, 3 }, { TU("ABCDEFGH"), -1, 4 }, { TU("123456789"), -1, 5 } }, 0, 23, 23, 0, "Mode change between segs; BWIPP different encodation", + /* 11*/ { DATA_MODE | FAST_MODE, -1, -1, 2, -1, { { TU("\357"), 1, 0 }, { TU("\357"), 1, 7 }, { TU("\357"), 1, 0 } }, 0, 19, 19, 1, "Same as above", + "1110011101010111000" + "1100010001011100011" + "1001110101000010110" + "0001000011101001111" + "0001110100111011000" + "1111111111111110101" + "1100110000000111011" + "0110010111110100111" + "1110110100010101011" + "1010010101010110001" + "0010010100010100111" + "0001110111110111010" + "0011110000000111100" + "0000011111111110001" + "0111001101000000011" + "0011000000111110111" + "1111111001101000010" + "0110001101100001010" + "0111100111100000010" + }, + /* 12*/ { UNICODE_MODE, -1, -1, -1, -1, { { TU("12345678"), -1, 3 }, { TU("ABCDEFGH"), -1, 4 }, { TU("123456789"), -1, 5 } }, 0, 23, 23, 0, "Mode change between segs; BWIPP different encodation", "00100011011101100111000" "00101011010000010111111" "00011001010101011010100" @@ -3051,7 +5371,199 @@ static void test_encode_segs(const testCtx *const p_ctx) { "10101100001011010010000" "10001000000000111000011" }, - /* 7*/ { GS1_MODE, -1, -1, -1, { { TU("[20]01"), -1, 0 }, { TU(""), 0, 0 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "GS1 with single seg ok", + /* 13*/ { UNICODE_MODE | FAST_MODE, -1, -1, -1, -1, { { TU("12345678"), -1, 3 }, { TU("ABCDEFGH"), -1, 4 }, { TU("123456789"), -1, 5 } }, 0, 23, 23, 0, "Same as above", + "00100011011101100111000" + "00101011010000010111111" + "00011001010101011010100" + "01011001100000101110000" + "00011000100010011101100" + "00110000100011111111000" + "01001111100101001111000" + "01000111111111111000110" + "01010111000000011000101" + "11010101011111011111000" + "11111101010001011100100" + "00100011010101011101010" + "01000001010001010001111" + "10111101011111010110010" + "10001001000000010111000" + "00001001111111111011111" + "10101100101001000010000" + "10110011100001111000110" + "11101000100001111011010" + "00010010100111001011100" + "11111111000010000100001" + "10101100001011010010000" + "10001000000000111000011" + }, + /* 14*/ { UNICODE_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("1234"), -1, 3 }, { TU("Жabcd"), -1, 7 }, { TU("的存abcd"), -1, 29 } }, 0, 23, 23, 0, "Mode changes between segs with Byte; BWIPP different encodation, same no. of codewords", + "00110001001010011111001" + "00100101111100101110010" + "01011111001000100100010" + "00001100111110010010000" + "00111100001000000010000" + "01101111111111111110110" + "00010100000000000101100" + "10101101111111110111100" + "10001101000000010110001" + "11010101011111010110001" + "11000101010001010111000" + "01010101010101010101010" + "10001101010001010111100" + "00110101011111010100010" + "01001101000000010111001" + "10101101111111110110010" + "10000100000000000111000" + "00010111111111111111101" + "10010011000010000000110" + "10001110110110000100100" + "11010101001011100011000" + "00010011011111100110111" + "00000001011001100101110" + }, + /* 15*/ { UNICODE_MODE | FAST_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("1234"), -1, 3 }, { TU("Жabcd"), -1, 7 }, { TU("的存abcd"), -1, 29 } }, 0, 23, 23, 0, "Same as above", + "00110001001010011111001" + "00100101111100101110010" + "01011111001000100100010" + "00001100111110010010000" + "00111100001000000010000" + "01101111111111111110110" + "00010100000000000101100" + "10101101111111110111100" + "10001101000000010110001" + "11010101011111010110001" + "11000101010001010111000" + "01010101010101010101010" + "10001101010001010111100" + "00110101011111010100010" + "01001101000000010111001" + "10101101111111110110010" + "10000100000000000111000" + "00010111111111111111101" + "10010011000010000000110" + "10001110110110000100100" + "11010101001011100011000" + "00010011011111100110111" + "00000001011001100101110" + }, + /* 16*/ { UNICODE_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("abcd"), -1, 3 }, { TU("Жabcd"), -1, 7 }, { TU("的存ABCD"), -1, 29 } }, 0, 23, 23, 0, "Mode changes between segs with Byte; BWIPP different encodation, same no. of codewords", + "00101100101011100101111" + "00110011000110011001011" + "01001100010001110001101" + "00110101110100001010000" + "00011100001000000010010" + "01111111111111111110101" + "00100100000000000111000" + "10110101111111110100000" + "10100101000000010101010" + "11001101011111010101000" + "11010101010001010100100" + "01010101010101010101010" + "00000101010001010101100" + "00001101011111010111010" + "01110101000000010110110" + "00000101111111110111000" + "00101100000000000101001" + "11000111111111111110100" + "00010011101000110001111" + "10111101100100110111000" + "00011101010010000011100" + "11000010101111001011010" + "00000000010011100110100" + }, + /* 17*/ { UNICODE_MODE | FAST_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("abcd"), -1, 3 }, { TU("Жabcd"), -1, 7 }, { TU("的存ABCD"), -1, 29 } }, 0, 23, 23, 0, "Same as above", + "00101100101011100101111" + "00110011000110011001011" + "01001100010001110001101" + "00110101110100001010000" + "00011100001000000010010" + "01111111111111111110101" + "00100100000000000111000" + "10110101111111110100000" + "10100101000000010101010" + "11001101011111010101000" + "11010101010001010100100" + "01010101010101010101010" + "00000101010001010101100" + "00001101011111010111010" + "01110101000000010110110" + "00000101111111110111000" + "00101100000000000101001" + "11000111111111111110100" + "00010011101000110001111" + "10111101100100110111000" + "00011101010010000011100" + "11000010101111001011010" + "00000000010011100110100" + }, + /* 18*/ { UNICODE_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("abcd"), -1, 3 }, { TU("Ж~~~~"), -1, 7 }, { TU("的存~~~~"), -1, 29 } }, 0, 23, 23, 0, "Mode changes between segs with Byte; BWIPP different encodation, same no. of codewords", + "00011000100011001111001" + "00110010111110010011110" + "01000001101001101011000" + "00111010111101011110110" + "00101100001000000011000" + "01011111111111111111110" + "00100100000000000100100" + "10111101111111110110100" + "10011101000000010111000" + "11010101011111010110000" + "11100101010001010111110" + "01010101010101010101010" + "00101101010001010110011" + "00110101011111010101001" + "01011101000000010111101" + "00011101111111110111110" + "00100100000000000111010" + "11100111111111111111111" + "00110011000010000000001" + "10000000110111001100101" + "00010000001010011011011" + "11000010101111001011001" + "00000000010011100110111" + }, + /* 19*/ { UNICODE_MODE | FAST_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("abcd"), -1, 3 }, { TU("Ж~~~~"), -1, 7 }, { TU("的存~~~~"), -1, 29 } }, 0, 23, 23, 0, "Same as above", + "00011000100011001111001" + "00110010111110010011110" + "01000001101001101011000" + "00111010111101011110110" + "00101100001000000011000" + "01011111111111111111110" + "00100100000000000100100" + "10111101111111110110100" + "10011101000000010111000" + "11010101011111010110000" + "11100101010001010111110" + "01010101010101010101010" + "00101101010001010110011" + "00110101011111010101001" + "01011101000000010111101" + "00011101111111110111110" + "00100100000000000111010" + "11100111111111111111111" + "00110011000010000000001" + "10000000110111001100101" + "00010000001010011011011" + "11000010101111001011001" + "00000000010011100110111" + }, + /* 20*/ { GS1_MODE, -1, -1, -1, -1, { { TU("[20]01"), -1, 0 }, { TU(""), 0, 0 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "GS1 with single seg ok", + "000100111011111" + "000101001110001" + "001100000100110" + "011111111111111" + "001100000001110" + "000101111101000" + "011101000101000" + "000101010101001" + "010101000101100" + "111101111101010" + "100100000001100" + "010111111111110" + "000011011110011" + "000001100010000" + "010101010100011" + }, + /* 21*/ { GS1_MODE | FAST_MODE, -1, -1, -1, -1, { { TU("[20]01"), -1, 0 }, { TU(""), 0, 0 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "Same as above", "000100111011111" "000101001110001" "001100000100110" @@ -3091,7 +5603,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { assert_nonnull(symbol, "Symbol not created\n"); testUtilSetSymbol(symbol, BARCODE_AZTEC, data[i].input_mode, -1 /*eci*/, - data[i].option_1, data[i].option_2, -1 /*option_3*/, + data[i].option_1, data[i].option_2, data[i].option_3, data[i].output_options, NULL, 0, debug); for (j = 0, seg_count = 0; j < 3 && data[i].segs[j].length; j++, seg_count++); @@ -3102,12 +5614,16 @@ static void test_encode_segs(const testCtx *const p_ctx) { if (p_ctx->generate) { char escaped1[4096]; char escaped2[4096]; - int length = data[i].segs[0].length == -1 ? (int) z_ustrlen(data[i].segs[0].source) : data[i].segs[0].length; - int length1 = data[i].segs[1].length == -1 ? (int) z_ustrlen(data[i].segs[1].source) : data[i].segs[1].length; - int length2 = data[i].segs[2].length == -1 ? (int) z_ustrlen(data[i].segs[2].source) : data[i].segs[2].length; - printf(" /*%3d*/ { %s, %s, %d, %d, { { TU(\"%s\"), %d, %d }, { TU(\"%s\"), %d, %d }, { TU(\"%s\"), %d, %d } }, %s, %d, %d, %d, \"%s\",\n", + int length = data[i].segs[0].length == -1 + ? (int) z_ustrlen(data[i].segs[0].source) : data[i].segs[0].length; + int length1 = data[i].segs[1].length == -1 + ? (int) z_ustrlen(data[i].segs[1].source) : data[i].segs[1].length; + int length2 = data[i].segs[2].length == -1 + ? (int) z_ustrlen(data[i].segs[2].source) : data[i].segs[2].length; + printf(" /*%3d*/ { %s, %s, %d, %d, %s, { { TU(\"%s\"), %d, %d }, { TU(\"%s\"), %d, %d }," + " { TU(\"%s\"), %d, %d } }, %s, %d, %d, %d, \"%s\",\n", i, testUtilInputModeName(data[i].input_mode), testUtilOutputOptionsName(data[i].output_options), - data[i].option_1, data[i].option_2, + data[i].option_1, data[i].option_2, testUtilOption3Name(symbol->symbology, data[i].option_3), testUtilEscape((const char *) data[i].segs[0].source, length, escaped, sizeof(escaped)), data[i].segs[0].length, data[i].segs[0].eci, testUtilEscape((const char *) data[i].segs[1].source, length1, escaped1, sizeof(escaped1)), @@ -3149,9 +5665,10 @@ static void test_encode_segs(const testCtx *const p_ctx) { } if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, (const char *) data[i].segs[0].source, data[i].segs[0].length, debug)) { - if (data[i].input_mode == DATA_MODE) { + if ((data[i].input_mode & 0x7) == DATA_MODE) { if (debug & ZINT_DEBUG_TEST_PRINT) { - printf("i:%d %s multiple segments in DATA_MODE not currently supported for ZXing-C++ testing\n", + printf("i:%d %s multiple segments in DATA_MODE not currently supported for" + " ZXing-C++ testing\n", i, testUtilBarcodeName(symbol->symbology)); } } else { @@ -3256,8 +5773,8 @@ static void test_rt(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, - escaped, sizeof(escaped)), + 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)), expected_length); assert_equal(symbol->content_segs[0].eci, data[i].expected_content_eci, @@ -3329,7 +5846,8 @@ static void test_rt_segs(const testCtx *const p_ctx) { assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width); - assert_equal(symbol->content_seg_count, data[i].expected_content_seg_count, "i:%d symbol->content_seg_count %d != %d\n", + assert_equal(symbol->content_seg_count, data[i].expected_content_seg_count, + "i:%d symbol->content_seg_count %d != %d\n", i, symbol->content_seg_count, data[i].expected_content_seg_count); if (symbol->output_options & BARCODE_CONTENT_SEGS) { assert_nonnull(symbol->content_segs, "i:%d content_segs NULL\n", i); @@ -3341,7 +5859,8 @@ static void test_rt_segs(const testCtx *const p_ctx) { assert_equal(symbol->content_segs[j].length, expected_length, "i:%d content_segs[%d].length %d != expected_length %d\n", i, j, symbol->content_segs[j].length, expected_length); - assert_zero(memcmp(symbol->content_segs[j].source, data[i].expected_content_segs[j].source, expected_length), + assert_zero(memcmp(symbol->content_segs[j].source, data[i].expected_content_segs[j].source, + expected_length), "i:%d content_segs[%d].source memcmp(%s, %s, %d) != 0\n", i, j, testUtilEscape((const char *) symbol->content_segs[j].source, expected_length, escaped, sizeof(escaped)), @@ -3377,7 +5896,7 @@ static void test_fuzz(const testCtx *const p_ctx) { const char *expected_errtxt; int zxingcpp_cmp; }; - /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ + /* 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_AZTEC, DATA_MODE, -1, -1, "\133\060\060\060\135\060\125\125\125\125\140\060\125\125\125\125\060\060\060\271\060\060\125\103\164\125\125\125\377\377\125\125" @@ -3453,7 +5972,7 @@ static void test_fuzz(const testCtx *const p_ctx) { "\135\335\135\060\060\010\010\010\010\010\060", 2251, ZINT_ERROR_TOO_LONG, "Error 707: Input too long for ECC level 2, requires too many codewords (maximum 1278)", 3 }, /* Original OSS-Fuzz triggering data for malloc leak */ - /* 1*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, + /* 1*/ { BARCODE_AZTEC, DATA_MODE | FAST_MODE, -1, -1, "\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060" "\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\000\060\060\060\060\000\060\060\000\060\060\060\060" "\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060" @@ -4109,6 +6628,43 @@ static void test_fuzz(const testCtx *const p_ctx) { "\010\060", 4402, ZINT_ERROR_TOO_LONG, "Error 502: Input too long, requires too many codewords (maximum 1661)", 3 }, /* fuzz_data (1st) */ + /* 13*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, + "\xbd\x3e\x3e\x61\xfb\x2d\x37\x44\x7c\xe8\x67\xa8\x29\x35\x5e\x6c\x0e\xf3\x92\x51\x18\xa0\xf6\x59\xd4\xcd\xf1\x92\xb6\x35\x7f\x77\x8c\x6b\xf9\xd0\x9a\x71\x2b\xf1" + "\xf5\x3e\x37\x60\x57\xe2\x6c\x68\x94\xee\xca\xca\xae\xda\x81\x0b\xfb\x39\xc8\x1d\xaf\x19\x2b\x41\xbb\xc3\x3d\x8b\xb9\xfa\x7b\x85\x21\x06\x29\x79\xf9\xb4\x16\xc7" + "\x63\x8a\x64\x3e\x94\xc9\x89\x03\xe2\xd9\xa5\xee\xb6\x79\xd1\x1e\x04\xa1\x7c\xdb\x9c\xed\x2e\xe7\x8c\x43\xb1\x66\xed\xc0\x12\x7b\x78\x17\xf6\x90\x11\x98\x06\x4d" + "\xf2\x3e\x90\x0e\xf8\x99\xc1\x04\x56\x69\xc2\x6e\x02\x9a\xbd\x81\x8c\xe0\x4c\xe6\x9c\x43\x05\x82\x63\xf2\x58\xf2\xba\x3c\xfb\xe8\x9e\xe9\xba\x2d\x56\xd8\x6a\xbc" + "\x0c\x8a\x07\xf7\x0a\xc6\x9a\x25\x10\x79\xe9\x9b\x61\xd2\xd4\x70\x40\x66\x95\x0f\x36\xf3\x2e\xa9\x4d\x6c\xd6\x11\x45\x93\x58\x6a\xbc\x06\x2e\xd7\xfe\xb7\xce\x24" + "\x63\x86\xe0\x67\xc7\x14\xf5\x05\xab\x83\x30\x78\x31\x95\xc5\x6a\x59\xd3\x53\x8b\x5f\x7e\x30\x4d\x70\x02\x62\x46\xdd\xfc\x66\xf6\x0e\xef\xec\x4a\x6a\xaa\xee\x8f" + "\x0d\x88\x3d\x03\x2a\x37\x90\xb6\x1f\x74\x15\x3f\x3d\xbe\xdd\xc8\xa6\x43\x74\xdb\x29\x64\xee\xd9\xf7\xcb\x31\x16\xfe\x74\x60\x95\xcf\xe4\x50\x6c\x3d\xf1\x89\xc4" + "\x12\x30\x35\x1e\x21\x29\x7e\x98\x73\x06\xd1\x66\x6a\x73\x5c\x66\xdd\xae\x7c\x43\x7c\x8a\xa3\x2d\xc9\xf6\x67\x3c\x89\x8d\x64\x3b\x82\xad\xdb\x2c\xbb\x95\xce\xc9" + "\xba\x51\x21\xa6\xf7\x0a\xea\x49\x8b\x35\xa0\x11\xc1\x07\xd2\x8f\x0a\x24\x10\x8c\x19\x68\x49\x0e\x34\xee\x5a\xb4\x8e\x52\xf8\x83\x47\x83\x2e\x49\xc3\x8f\xb1\x06" + "\x97\x8c\xa5\x1f\xe9\x24\x86\x39\x03\xb9\xba\x64\x0c\xcb\x2a\x8e\xf4\x0c\x68\xec\x46\xa7\x03\x13\xb5\x54\xed\x51\xb6\x1d\x92\xaa\x67\x78\x90\x4b\xea\xdf\x6d\xa1" + "\x3f\x64\x2d\xef\x69\x9b\xf3\x12\x1c\xbe\xcb\xd3\xda\x3e\xec\x11\xda\x31\xba\xd6\xf7\xef\x76\xa3\xc6\x38\x49\x8a\xa3\xd7\x21\xea\x44\x6a\x9c\x0c\x11\x33\x57\x27" + "\xd9\xc1\x6c\x3a\xe5\xe0\x2e\x04\xfd\xfd\x18\x3e\x81\x7d\x92\x72\xd2\xaf\x85\xdd\xca\x5e\x81\x21\x57\x62\x48\xae\x06\x05\x3e\x30\xe9\x3a\xe5\x7a\x08\xc3\x2b\x83" + "\x33\x2a\x02\xde\x26\x65\xc6\x95\x54\x72\xd5\x9c\x36\x7f\x4c\x06\x39\xe2\x13\x22\x7a\xc8\x86\x41\xa3\x56\x1b\x1c\x42\x90\xf2\x08\x17\xf5\x9e\x5d\xbd\x06\x37\x8e" + "\x60\x57\x12\x57\x29\xc4\x3e\xee\x2b\xdd\xd3\xc9\xf3\xef\xab\x7b\x05\x6a\x9e\x44\xfe\xea\x9b\x1d\xe1\xd4\x3a\xe2\xc3\xec\xdf\x54\x7c\x36\x34\x0b\xaa\x2f\x1e\xfa" + "\xc3\xd6\x54\x02\xf8\xe7\x9b\x9b\xa9\xf0\x71\x52\xcd\x67\xf1\x94\xa2\xf8\x6d\x4b\x4f\x38\x22\xe5\xda\x99\xbf\x8b\x3f\xa2\x5f\x54\x33\x93\xbc\xa7\x97\x1d\xb0\xd2" + "\x91\x3a\x86\xd0\x88\x68\x55\x1b\x32\xda\x76\xfa\x2c\x55\x97\xc6\xaf\x4d\x9f\x22\x65\x6b\xb6\x6b\x76\x1a\x55\x6d\xfc\xd3\x52\xaf\x1c\x8f\x1c\xc5\x08\x9d\xb5\x3d" + "\x8d\x3b\x81\x06\xfc\xd7\x25\x84\xb5\x58\xfa\xae\x16\x58\x42\x40\xef\x79\x07\x1b\x45\x9d\x3d\x84\x29\x2e\x7a\x4d\x96\x5e\xd7\xbd\xf4\x7f\x12\x75\xf1\x76\x1a\x92" + "\x35\x95\x88\x65\x66\x3c\x0b\x33\xaa\x13\x90\xf4\x0a\xe9\x82\x36\x04\x58\xc1\x12\x44\x27\x0e\x8e\xdf\x7d\x59\x07\x75\x4a\x23\x0c\x18\x91\x12\x18\x8c\x8d\xe5\x43" + "\x25\x2a\x81\xbe\x0e\x5a\x45\xcc\x24\x7e\x9c\x8c\x97\x35\x76\x88\xb8\x49\xf4\x57\xd2\x12\xec\xac\x60\x95\xca\x05\xc6\x87\x38\xe9\x4c\x67\x50\xef\x95\x43\xcb\x46" + "\x6d\x7a\x7e\x44\x3e\xf4\x14\x57\xd3\x68\xd1\x57\x15\x85\x72\x87\x69\x9f\x37\x18\xa7\x39\x56\x15\x64\xb4\x95\xf2\xf5\x22\x9f\x48\x19\x1b\xb3\x59\xf4\xd0\x2b\x83" + "\x43\xa5\xf6\xd9\xad\x38\x11\xa8\x54\xa8\x79\x31\x01\x16\x37\x77\x30\x68\xaf\xb4\xb9\xf6\xb3\xac\xa5\x1c\x96\x6b\xac\x11\xd2\x55\xe1\x36\xc7\x01\x27\x9d\xde\x1c" + "\x59\x2f\x3a\x37\x60\x74\x0a\x4e\xde\xe4\x26\x05\x71\x30\x40\x25\xcb\x47\xb9\xb4\x67\x23\xd4\xc5\x7e\x64\xd8\x4b\xce\x56\xa9\xbe\x94\x37\x9a\x66\x20\x60\xa5\x50" + "\x2c\x75\x49\x0a\x1c\x49\xb6\x86\xb0\x73\xa1\x47\x39\x80\x69\xbd\x2c\x29\x2d\x9a\x04\x96\x40\xfc\x3c\xfc\x58\xf0\x65\x52\xa2\xaf\xfd\x5c\xc1\xbf\xde\xf2\xc0\x06" + "\x2d\x2f\x33\x6b\x4a\xb7\x1e\x85\xc2\xf0\x85\xd3\x2a\xb8\xa2\xc3\x35\xca\xb0\x10\x65\x21\x10\xd3\x6d\x8c\x92\x8f\x7b\xb5\xf3\x32\xbf\x04\x0f\x76\x93\xaa\x68\x8d" + "\xa3\x17\x44\x23\x4f\x1c\x14\x76\x45\x2e\x6c\x25\xdd\x77\x1f\x0c\xf2\xd8\x51\x92\xdc\x39\x40\x60\xf1\x84\xe3\xc2\xba\x3d\x89\x8b\xc2\x6a\xef\xf8\x77\x1a\x32\xca" + "\x58\x92\x2c\xd9\x66\x27\x41\x4c\xb1\xaf\x34\xc7\xa3\x8c\xef\x4f\xbd\xac\xcf\x41\xed\xf3\x65\x32\x3d\xf0\x06\x41\x36\xad\x8d\x77\xf6\x78\xe9\x63\xaa\x06\xbe\xdd" + "\xf4\xf5\x14\x66\x3c\x46\x13\xee\xd8\x0a\x04\x74\xbd\x3b\x2e\xef\xf0\xe3\xe4\x43\x7b\xf6\xa2\x5b\xbe\xb1\xbf\x92\xe3\xf5\x58\x43\xaf\x7c\xa1\x1e\x09\x47\x6a\xbd" + "\xf8\x1c\x8b\x4e\x82\xaa\xa1\x36\x0e\x58\xaa\xce\x58\xca\x15\x93\xa3\xd0\x05\x9f\x89\xa2\xbc\xdc\x2b\x62\xd6\x89\x02\xb9\xa8\x77\x95\x7f\x31\x96\x7f\xd4\x72\x58" + "\xbe\xb7\x02\x63\x55\x05\x18\x53\xeb\x21\x20\x8d\x3e\x7a\xf0\x4a\xb3\xcb\x20\x2d\x0b\xc2\x9f\x36\x08\x8d\x62\x50\xac\xed\xa1\xea\x60\x13\x68\xe9\x3b\xc0\xca\x3c" + "\xb4\x44\x5e\xfe\x35\xfc\xd2\x28\x22\xee\xbd\x63\xba\xe5\x13\x3a\xf9\xb9\x90\x24\x1e\xc8\xba\x7a\x79\x51\x28\x83\x57\xcf\x3b\x50\x0b\x16\xbc\xb3\xec\xe4\xac\xf3" + "\xbf\xa1\xfc\xf4\x34\xb2\xf9\x2d\x1a\xc6\xee\x0f\x75\x69\x78\x3d\x5a\x80\xd0\xa2\x47\x92\xc5\xf0\x41\x90\x90\xf5\x6d\xe8\xc8\x9f\x23\xf1\x2f\x28\x41\xf5\xae\x57" + "\x8c\x2e\x98\xdd\x83\x5c\xd2\xf6\xd1\x5b\x6b\x96\xee\x4f\x65\xab\x02\x79\x01\x02\xc4\xd8\x60\xeb\x85\x74\x0e\x93\xf7\xee\x25\xba\x0b\xd8\xcc\xf6\x16\x95\x33\xbc" + "\xd9\xe7\x55\x1c\xa3\x57\x8f\xde\x6a\x26\x26\x24\x93\x94\x4e\x85\x04\x2f\x40\x71\x44\x62\x0a\x9f\x2c\xcd\x6c\x66\xc3\x0b\x03\x36\xf4\xfe\x3d\x1d\x17\x30\x8b\x03" + "\x25\xaa\x8f\x7c\x21\xd6\xfd\xa5\x2b\x4e\xc7\x48\x52\xdb\xa8\xde\x59\x64\x11\xb3\x32\x70\x98\x60\x12\x52\x1b\x39\xc2\xc3\x17\xd3\xd1\x40\x6c\x4b\x24\x57\x18", + 1359, 0, "", 899 + }, /* #347 Francois Grieu */ }; const int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/test_perf.c b/backend/tests/test_perf.c index ab6ce2dd..e5610786 100644 --- a/backend/tests/test_perf.c +++ b/backend/tests/test_perf.c @@ -1,7 +1,7 @@ /* These are not real tests, just performance indicators */ /* libzint - the open source barcode library - Copyright (C) 2025 Robin Stuart + Copyright (C) 2025-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -185,11 +185,20 @@ static void test_aztec(const testCtx *const p_ctx) { static const struct perf_item data[] = { /* 0*/ { BARCODE_AZTEC, -1, -1, -1, -1, + "ABC xyz ~~~ ??? 1234 \377\377", + "", 0, 19, 19, "31 chars, Compact 6-bit words, mixed" }, + /* 1*/ { BARCODE_AZTEC, ESCAPE_MODE, -1, -1, -1, + "[)>\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", + "", 0, 23, 23, "41 chars, Compact 8-bit words, mixed" }, + /* 2*/ { BARCODE_AZTEC, -1, -1, -1, -1, + "ABCDEFGHIJKLM nopqrstuvwxyz ~~~~~~~~~~~~ ???????????? 12345678901234567890 \377\377\377", + "", 0, 27, 27, "90 chars, 8-bit words, mixed" }, + /* 3*/ { BARCODE_AZTEC, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 49, 49, "286 chars, 8-bit words, upper" }, - /* 1*/ { BARCODE_AZTEC, -1, -1, -1, -1, + /* 4*/ { BARCODE_AZTEC, -1, -1, -1, -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" @@ -197,7 +206,7 @@ static void test_aztec(const testCtx *const p_ctx) { "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", "", 0, 79, 79, "900 chars, 10-bit words, numeric" }, - /* 2*/ { BARCODE_AZTEC, -1, -1, -1, -1, + /* 5*/ { BARCODE_AZTEC, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" @@ -206,7 +215,7 @@ static void test_aztec(const testCtx *const p_ctx) { "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377", "", 0, 91, 91, "980 chars, 10-bit words, mixed" }, - /* 3*/ { BARCODE_AZTEC, -1, -1, -1, -1, + /* 6*/ { BARCODE_AZTEC, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" @@ -219,7 +228,64 @@ static void test_aztec(const testCtx *const p_ctx) { "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377", "", 0, 113, 113, "1540 chars, 12-bit words, mixed" }, - /* 4*/ { BARCODE_AZRUNE, -1, -1, -1, -1, + /* 7*/ { BARCODE_AZRUNE, -1, -1, -1, -1, + "255", + "", 0, 11, 11, "3 chars, AZRUNE" }, + }; + const int data_size = ARRAY_SIZE(data); + const int default_iterations = 1 * 1000; + + test_perf(p_ctx, default_iterations, data, data_size); +} + +static void test_aztec_fast(const testCtx *const p_ctx) { + + static const struct perf_item data[] = { + /* 0*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, + "ABC xyz ~~~ ??? 1234 \377\377", + "", 0, 19, 19, "31 chars, Compact 6-bit words, mixed" }, + /* 1*/ { BARCODE_AZTEC, ESCAPE_MODE | FAST_MODE, -1, -1, -1, + "[)>\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", + "", 0, 23, 23, "41 chars, Compact 8-bit words, mixed" }, + /* 2*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, + "ABCDEFGHIJKLM nopqrstuvwxyz ~~~~~~~~~~~~ ???????????? 12345678901234567890 \377\377\377", + "", 0, 27, 27, "90 chars, 8-bit words, mixed" }, + /* 3*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "", 0, 49, 49, "286 chars, 8-bit words, upper" }, + /* 4*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", + "", 0, 79, 79, "900 chars, 10-bit words, numeric" }, + /* 5*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377", + "", 0, 91, 91, "980 chars, 10-bit words, mixed" }, + /* 6*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ~~~~~~~~~~~~~~~~~~~~~~~~~ ?????????????????????????? 12345678901234567890123456 \377\377\377\377\377\377", + "", 0, 113, 113, "1540 chars, 12-bit words, mixed" }, + /* 7*/ { BARCODE_AZRUNE, -1, -1, -1, -1, "255", "", 0, 11, 11, "3 chars, AZRUNE" }, }; @@ -691,6 +757,7 @@ int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func */ { "test_2of5", test_2of5 }, { "test_aztec", test_aztec }, + { "test_aztec_fast", test_aztec_fast }, { "test_code11", test_code11 }, { "test_code128", test_code128 }, { "test_composite", test_composite }, diff --git a/backend/tests/test_random.c b/backend/tests/test_random.c index 5f0ad1c4..013fffe8 100644 --- a/backend/tests/test_random.c +++ b/backend/tests/test_random.c @@ -168,7 +168,15 @@ static void test_random(const testCtx *const p_ctx, const struct random_item *rd static void test_aztec(const testCtx *const p_ctx) { struct random_item rdata = { - FLAG_FULL_8BIT, BARCODE_AZTEC, DATA_MODE, 899, 1, 0, 0, -1, 1590 + FLAG_FULL_8BIT, BARCODE_AZTEC, DATA_MODE, 899, 1, 0, 0, -1, 1900 + }; + + test_random(p_ctx, &rdata); +} + +static void test_aztec_fast(const testCtx *const p_ctx) { + struct random_item rdata = { + FLAG_FULL_8BIT, BARCODE_AZTEC, DATA_MODE | FAST_MODE, 899, 1, 0, 0, -1, 1590 }; test_random(p_ctx, &rdata); @@ -298,6 +306,7 @@ int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func */ { "test_aztec", test_aztec }, + { "test_aztec_fast", test_aztec_fast }, { "test_codablockf", test_codablockf }, { "test_codablockf_ascii", test_codablockf_ascii }, { "test_code128", test_code128 }, diff --git a/backend/tests/test_raster.c b/backend/tests/test_raster.c index 54adc0a8..f23c4b14 100644 --- a/backend/tests/test_raster.c +++ b/backend/tests/test_raster.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019-2025 Robin Stuart + Copyright (C) 2019-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -1851,9 +1851,9 @@ static void test_quiet_zones(const testCtx *const p_ctx) { /*231*/ { BARCODE_HIBC_BLOCKF, -1, -1, -1, -1, "1234", "", 0, 20, 2, 101, 242, 44, 0 /*set*/, 0, 44, 0, 20 }, /*232*/ { BARCODE_HIBC_BLOCKF, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 20, 2, 101, 242, 44, 0 /*set*/, 0, 44, 0, 20 }, /*233*/ { BARCODE_HIBC_BLOCKF, BARCODE_NO_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 20, 2, 101, 202, 44, 1 /*set*/, 0, 44, 0, 4 }, - /*234*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 0, 2 }, - /*235*/ { BARCODE_HIBC_AZTEC, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 0, 2 }, - /*236*/ { BARCODE_HIBC_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 0, 2 }, + /*234*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 4, 4 }, + /*235*/ { BARCODE_HIBC_AZTEC, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 4, 4 }, + /*236*/ { BARCODE_HIBC_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 4, 4 }, /*237*/ { BARCODE_DOTCODE, -1, -1, -1, -1, "1234", "", 0, 10, 10, 13, 27, 21, 1 /*set*/, 5, 6, 1, 1 }, /*238*/ { BARCODE_DOTCODE, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 10, 10, 13, 39, 33, 0 /*set*/, 0, 33, 0, 7 }, /*239*/ { BARCODE_HANXIN, -1, -1, -1, -1, "1234", "", 0, 23, 23, 23, 46, 46, 1 /*set*/, 0, 2, 0, 14 }, diff --git a/backend/tests/test_vector.c b/backend/tests/test_vector.c index 31049852..fa0d555f 100644 --- a/backend/tests/test_vector.c +++ b/backend/tests/test_vector.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019-2025 Robin Stuart + Copyright (C) 2019-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -2063,9 +2063,9 @@ static void test_quiet_zones(const testCtx *const p_ctx) { /*230*/ { BARCODE_HIBC_BLOCKF, -1, -1, -1, -1, "1234", "", 0, 20, 2, 101, 242, 44, 20, 2, 4, 40 }, /*231*/ { BARCODE_HIBC_BLOCKF, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 20, 2, 101, 242, 44, 20, 2, 4, 40 }, /*232*/ { BARCODE_HIBC_BLOCKF, BARCODE_NO_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 20, 2, 101, 202, 44, 0, 2, 4, 40 }, - /*233*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 22, 0, 2, 2 }, - /*234*/ { BARCODE_HIBC_AZTEC, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 22, 0, 2, 2 }, - /*235*/ { BARCODE_HIBC_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 22, 0, 2, 2 }, + /*233*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 4, 0, 2, 2 }, + /*234*/ { BARCODE_HIBC_AZTEC, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 4, 0, 2, 2 }, + /*235*/ { BARCODE_HIBC_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 15, 15, 15, 30, 30, 4, 0, 2, 2 }, /*236*/ { BARCODE_DOTCODE, -1, -1, -1, -1, "1234", "", 0, 10, 10, 13, 26, 20, 5, 1, 1.6, 0 }, /*237*/ { BARCODE_DOTCODE, BARCODE_QUIET_ZONES, -1, -1, -1, "1234", "", 0, 10, 10, 13, 38, 32, 11, 7, 1.6, 0 }, /*238*/ { BARCODE_HANXIN, -1, -1, -1, -1, "1234", "", 0, 23, 23, 23, 46, 46, 0, 0, 14, 2 }, diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index c2d2d0c5..600e0d12 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019-2025 Robin Stuart + Copyright (C) 2019-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -617,7 +617,13 @@ const char *testUtilOption3Name(int symbology, int option_3) { const char *name = NULL; const unsigned int high_byte = option_3 == -1 ? 0 : (option_3 >> 8) & 0xFF; - if (symbology == BARCODE_DATAMATRIX || symbology == BARCODE_HIBC_DM) { + if (symbology == BARCODE_AZTEC || symbology == BARCODE_HIBC_AZTEC) { + if ((option_3 & 0xFF) == ZINT_AZTEC_FULL) { + name = "ZINT_AZTEC_FULL"; + } else { + name = (option_3 & 0xFF) ? "-1" : "0"; + } + } else if (symbology == BARCODE_DATAMATRIX || symbology == BARCODE_HIBC_DM) { if (option_3 > 0) { if ((option_3 & 0x7F) == DM_SQUARE) { if ((option_3 & DM_ISO_144) == DM_ISO_144) { diff --git a/backend/tests/tools/bwipp_dump.ps.tar.xz b/backend/tests/tools/bwipp_dump.ps.tar.xz index 17e0e8062a79fe8095c3ea636f53987599de2a3d..ff7f1368328c6ece3537848d10b20b2901e288c3 100644 GIT binary patch literal 155176 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 + Copyright (C) 2009-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -322,11 +322,14 @@ extern "C" { #define GS1NOCHECK_MODE 0x0020 /* Do not check validity of GS1 data (except that printable ASCII only) */ #define HEIGHTPERROW_MODE 0x0040 /* Interpret `height` as per-row rather than as overall height */ #define FAST_MODE 0x0080 /* Use faster if less optimal encodation or other shortcuts if available */ - /* Note: affects DATAMATRIX, MICROPDF417, PDF417, QRCODE & UPNQR only */ + /* (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 */ #define GS1SYNTAXENGINE_MODE 0x0200 /* Use the GS1 Syntax Engine (if available) to strictly validate GS1 input */ +/* Aztec Code specific options (`symbol->option_3`) */ +#define ZINT_AZTEC_FULL 128 /* Only consider Full versions on automatic symbol size selection */ + /* Data Matrix specific options (`symbol->option_3`) */ #define DM_SQUARE 100 /* Only consider square versions on automatic symbol size selection */ #define DM_DMRE 101 /* Consider DMRE versions on automatic symbol size selection */ diff --git a/backend_qt/qzint.cpp b/backend_qt/qzint.cpp index b66b75c7..b612fbf5 100644 --- a/backend_qt/qzint.cpp +++ b/backend_qt/qzint.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (C) 2008 by BogDan Vatra * * bogdan@licentia.eu * - * Copyright (C) 2010-2025 Robin Stuart * + * Copyright (C) 2010-2026 Robin Stuart * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -1305,6 +1305,10 @@ namespace Zint { arg_int(cmd, "--addongap=", option2()); } + if (m_symbol == BARCODE_AZTEC || m_symbol == BARCODE_HIBC_AZTEC) { + arg_bool(cmd, "--azfull", (option3() & 0xFF) == ZINT_AZTEC_FULL); + } + if (bgStr() != QSL("FFFFFF") && !nobackground) { arg_str(cmd, "--bg=", bgStr()); } diff --git a/backend_qt/tests/test_qzint.cpp b/backend_qt/tests/test_qzint.cpp index 88960343..08e74f31 100644 --- a/backend_qt/tests/test_qzint.cpp +++ b/backend_qt/tests/test_qzint.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2021-2025 by Robin Stuart * + * Copyright (C) 2021-2026 by Robin Stuart * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -729,17 +729,17 @@ private slots: QTest::newRow("BARCODE_AZTEC") << false << 0.0f << "" << BARCODE_AZTEC << UNICODE_MODE // symbology-inputMode << "12345678Ж0%var%" << "" // text-primary - << 0.0f << 1 << 0 << 0 << 4.0f << 0.0f << true << 0.9f << 1.0f // height-textGap + << 0.0f << 1 << 0 << ZINT_AZTEC_FULL << 4.0f << 0.0f << true << 0.9f << 1.0f // height-textGap << 5.0f << 2 << 1 << "as\"dfa'sdf" // guardDescent-structAppID << "" << "" << QColor(Qt::blue) << QColor(Qt::white) << true // fgStr-cmyk << 0 << 0 << 2 << 3 << 0 // borderTypeIndex-fontSetting << true << false << false << false << false << 0 // showText-rotateAngle << 7 << false << false << false << false << false << false << WARN_DEFAULT << false // eci-debug << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp - << "zint -b 92 --cmyk --eci=7 -d '12345678Ж0%var%' --dotsize=0.9 --dotty --fg=0000FF --scale=4" - " --secure=1 --structapp='1,2,as\"dfa'\\''sdf' --vwhitesp=3 -w 2" - << "zint.exe -b 92 --cmyk --eci=7 -d \"12345678Ж0%var%\" --dotsize=0.9 --dotty --fg=0000FF --scale=4" - " --secure=1 --structapp=\"1,2,as\\\"dfa'sdf\" --vwhitesp=3 -w 2" + << "zint -b 92 --azfull --cmyk --eci=7 -d '12345678Ж0%var%' --dotsize=0.9 --dotty --fg=0000FF" + " --scale=4 --secure=1 --structapp='1,2,as\"dfa'\\''sdf' --vwhitesp=3 -w 2" + << "zint.exe -b 92 --azfull --cmyk --eci=7 -d \"12345678Ж0%var%\" --dotsize=0.9 --dotty --fg=0000FF" + " --scale=4 --secure=1 --structapp=\"1,2,as\\\"dfa'sdf\" --vwhitesp=3 -w 2" << "" << "" << "" << ""; QTest::newRow("BARCODE_AZTEC (bgStr CMYK, fgStr CMYK)") << false << 0.0f << "" diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index 7183200a..12cee075 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -1,7 +1,7 @@ /* zint_tcl.c TCL binding for zint */ /* zint - the open source tcl binding to the zint barcode library - Copyright (C) 2014-2025 Harald Oehlmann + Copyright (C) 2014-2026 Harald Oehlmann Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -186,6 +186,9 @@ - Added: EAN8, EAN_2ADDON, EAN_5ADDON, EAN13, EAN8_CC, EAN13_CC, DMFILMEDGE 2025-12-17 HaO - Added -gs1strict switch, copied from CLI program. +2026-02-20 GL +- Added -azfull switch. +- Fiddled with some help capitalization. */ #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) @@ -547,6 +550,7 @@ static const char help_message[] = "zint tcl(stub,obj) dll\n" " Available options:\n" " -barcode choice: symbology, use 'zint symbology' to get a list\n" " -addongap integer: (7..12, default: 9) set add-on gap in multiple of module size (EAN/UPC-CC)\n" + " -azfull bool: force Aztec symbols to be Full (non-Compact) on automatic size selection\n" " -bg color: set background color as 6 or 8 hex rrggbbaa\n" /* cli option --binary internally handled */ " -bind bool: bars above/below the code, size set by -border\n" @@ -558,21 +562,21 @@ static const char help_message[] = "zint tcl(stub,obj) dll\n" " -cols integer: Codablock F, DotCode, PDF417: number of columns\n" " -compliantheight bool: warn if height not compliant, and use standard default\n" /* cli option --data is standard parameter */ - " -dmiso144 bool: Use ISO format for 144x144 Data Matrix symbols\n" - " -dmre bool: Allow Data Matrix Rectangular Extended\n" + " -dmiso144 bool: use ISO format for 144x144 Data Matrix symbols\n" + " -dmre bool: allow Data Matrix Rectangular Extended\n" " -dotsize number: radius ratio of dots from 0.01 to 1.0\n" " -dotty bool: use dots instead of boxes for matrix codes\n" /* cli option --dump not supported */ /* cli option --ecinos not supported */ " -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" - " -fast bool: use fast encodation (Data Matrix)\n" + " -esc bool: process escape sequences in input data\n" + " -extraesc bool: process symbology-specific escape sequences (Code 128 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 */ " -format binary|unicode|gs1: input data format. Default:unicode\n" - " -fullmultibyte bool: allow multibyte compaction for xQR, HanXin, Gridmatrix\n" + " -fullmultibyte bool: allow multibyte compaction for xQR, HanXin, GridMatrix\n" /* cli option --gs1 replaced by -format */ " -gs1nocheck bool: for gs1, do not check validity of data (allows non-standard symbols)\n" " -gs1parens bool: for gs1, AIs enclosed in parentheses instead of square brackets\n" @@ -581,13 +585,13 @@ static const char help_message[] = "zint tcl(stub,obj) dll\n" #else " -gs1strict 0: GS1 syntax engine not compiled in, may not be activated.\n" #endif - " -gssep bool: for gs1, use gs as separator instead fnc1 (Datamatrix only)\n" - " -guarddescent double: Height of guard bar descent in modules (EAN/UPC only)\n" + " -gssep bool: for gs1, use gs as separator instead fnc1 (Data Matrix only)\n" + " -guarddescent double: height of guard bar descent in modules (EAN/UPC only)\n" " -guardwhitespace bool: add quiet zone indicators (EAN/UPC only)\n" - " -height double: Symbol height in modules\n" + " -height double: symbol height in modules\n" " -heightperrow bool: treat height as per-row\n" /* cli option --input not supported */ - " -init bool: Create reader initialisation symbol (Code 128, Data Matrix)\n" + " -init bool: create reader initialisation symbol (Code 128, Data Matrix)\n" " -mask integer: set masking pattern to use (QR/MicroQR/HanXin/DotCode)\n" /* cli option --mirror not supported */ " -mode integer: set encoding mode (MaxiCode, Composite)\n" @@ -597,26 +601,26 @@ static const char help_message[] = "zint tcl(stub,obj) dll\n" /* cli option --output not supported */ " -primary text: Structured primary data (MaxiCode, Composite)\n" " -quietzones bool: add compliant quiet zones to whitespace\n" - " -reverse bool: Reverse colours (white on black)\n" - " -rotate angle: Image rotation by 0,90 or 270 degrees\n" + " -reverse bool: reverse colours (white on black)\n" + " -rotate angle: image rotation by 0, 90 or 270 degrees\n" " -rows integer: Codablock F, PDF417: number of rows\n" - " -scale double: Scale the image to this factor\n" - " -scalexdimdp {xdim ?resolution?}: Scale with X-dimension mm, resolution dpmm\n" - " -scmvv integer: Prefix SCM with [)>\\R01\\Gvv (vv is integer) (MaxiCode)\n" + " -scale double: scale the image to this factor\n" + " -scalexdimdp {xdim ?resolution?}: scale with X-dimension mm, resolution dpmm\n" + " -scmvv integer: prefix SCM with [)>\\R01\\Gvv (vv is integer) (MaxiCode)\n" " -secure integer: EC Level (Aztec, GridMatrix, HanXin, PDF417, QR, UltraCode)\n" - " -segN {eci data}: Set the ECI & data content for segment N where N is 1 to 9\n" + " -segN {eci data}: set the ECI & data content for segment N where N is 1 to 9\n" " -separator 0..4 (default: 1) : Stacked symbologies: separator width\n" /* cli option --small replaced by -smalltext */ " -smalltext bool: tiny interpretation line font\n" " -square bool: force Data Matrix symbols to be square\n" " -structapp {index count ?id?}: set Structured Append info\n" - " -textgap double: Gap between barcode and text\n" + " -textgap double: gap between barcode and text\n" /* cli option --types not supported */ - " -vers integer: Symbology option\n" + " -vers integer: symbology option\n" /* cli option --version not supported */ " -vwhitesp integer: vertical quiet zone in modules\n" " -whitesp integer: horizontal quiet zone in modules\n" - " -werror bool: Convert all warnings into errors\n" + " -werror bool: convert all warnings into errors\n" " -to {x0 y0 ?width? ?height?}: place to put in photo image\n" "\n" "zint symbologies: List available symbologies\n" @@ -902,7 +906,8 @@ static int Encode(Tcl_Interp *interp, int objc, /*--------------------------------------------------------------------*/ /* Option list and indexes */ static const char *optionList[] = { - "-addongap", "-barcode", "-bg", "-bind", "-bindtop", "-bold", "-border", "-box", + "-addongap", "-azfull", + "-barcode", "-bg", "-bind", "-bindtop", "-bold", "-border", "-box", "-cols", "-compliantheight", "-dmiso144", "-dmre", "-dotsize", "-dotty", "-eci", "-esc", "-extraesc", "-fast", "-fg", "-format", "-fullmultibyte", "-gs1nocheck", "-gs1parens", @@ -916,7 +921,8 @@ static int Encode(Tcl_Interp *interp, int objc, "-textgap", "-to", "-vers", "-vwhitesp", "-werror", "-whitesp", NULL}; enum iOption { - iAddonGap, iBarcode, iBG, iBind, iBindTop, iBold, iBorder, iBox, + iAddonGap, iAzFull, + iBarcode, iBG, iBind, iBindTop, iBold, iBorder, iBox, iCols, iCompliantHeight, iDMISO144, iDMRE, iDotSize, iDotty, iECI, iEsc, iExtraEsc, iFast, iFG, iFormat, iFullMultiByte, iGS1NoCheck, iGS1Parens, @@ -944,6 +950,7 @@ static int Encode(Tcl_Interp *interp, int objc, /*--------------------------------------------------------------------*/ /* >> Decode object */ switch (optionIndex) { + case iAzFull: case iBind: case iBindTop: case iBold: @@ -1078,6 +1085,10 @@ static int Encode(Tcl_Interp *interp, int objc, addon_gap = intValue; } break; + case iAzFull: + if (intValue) + my_symbol->option_3 = ZINT_AZTEC_FULL | (my_symbol->option_3 & ~0xFF); + break; case iBind: if (intValue) { my_symbol->output_options |= BARCODE_BIND; diff --git a/docs/manual.html b/docs/manual.html index 08b5ccbe..28c3a0d2 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

-

December 2025

+

February 2026