From e515f63fabdcb4d0f51fc6022c132fe73f619788 Mon Sep 17 00:00:00 2001 From: gitlost Date: Sun, 6 Nov 2022 22:25:19 +0000 Subject: [PATCH] - PDF417/MICROPDF417: use latch not ps shift for padding when spanning Text segments to avoid affecting 1st char of 2nd segment - PDF417/MICROPDF417: add optimized encoding, FAST_MODE for previous scheme; formatting changes - common.c/h: add `cnt_digits()`, comments in include and make more consistent, minor code fiddling - DOTCODE: replace `dc_n_digits()` with new `cnt_digits()` - test_qr: fix `test_qr_perf()` - composite: minor code fiddling - library: debug dump HIBC-processed input - BWIPP: update to latest --- ChangeLog | 5 + backend/code.c | 4 +- backend/common.c | 54 +- backend/common.h | 167 +- backend/composite.c | 26 +- backend/dmatrix.c | 4 +- backend/dmatrix_trace.h | 1 + backend/dotcode.c | 15 +- backend/library.c | 2 + backend/pdf417.c | 867 +++++-- backend/pdf417.h | 6 +- backend/pdf417_tabs.h | 170 +- backend/pdf417_trace.h | 136 + backend/tests/test_pdf417.c | 2961 ++++++++++++++++++++-- backend/tests/test_qr.c | 4 +- backend/tests/testcommon.c | 14 +- backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 129000 -> 129316 bytes backend/zint.h | 2 +- backend_qt/backend_qt.pro | 1 + backend_qt/backend_vc8.pro | 1 + docs/manual.pmd | 10 +- docs/manual.txt | 15 +- docs/zint.1 | 6 +- docs/zint.1.pmd | 4 +- frontend_qt/grpMicroPDF.ui | 14 + frontend_qt/grpPDF417.ui | 14 + frontend_qt/mainwindow.cpp | 14 + win32/libzint.vcxproj | 1 + win32/vs2008/libzint.vcproj | 4 + win32/vs2015/libzint.vcxproj | 1 + win32/vs2015/vsx/libzintMD.vcxproj | 1 + win32/vs2019/libzint.vcxproj | 1 + 32 files changed, 3885 insertions(+), 640 deletions(-) create mode 100644 backend/pdf417_trace.h diff --git a/ChangeLog b/ChangeLog index 6810f729..6244688b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,9 @@ Changes and returning error if so rather than continuing to process - manual: MSE typo -> MSI; adjust SVG scaling for PDF manual; pandoc 2.19.2 - manual/man page/GUI: Code 16k -> Code 16K +- PDF417/MICROPDF417: add optimized encoding, FAST_MODE for previous; formatting + changes +- common.c/h: add `cnt_digits()`, comments in include, minor fiddling Bugs ---- @@ -45,6 +48,8 @@ Bugs - MSVC project files: remove incorrect "CompileAsCpp" setting from libzint project files (ticket #272) - bwipp_dump.ps: fix 2/4-track processing; update to latest BWIPP +- PDF417/MICROPDF417: use latch not ps shift for padding when spanning + Text segments to avoid affecting 1st char of 2nd segment Version 2.11.1 (2022-08-22) diff --git a/backend/code.c b/backend/code.c index eb59df34..23162553 100644 --- a/backend/code.c +++ b/backend/code.c @@ -568,7 +568,9 @@ typedef const struct s_channel_precalc { long value; unsigned char B[8]; unsigned char S[8]; unsigned char bmax[7]; unsigned char smax[7]; } channel_precalc; -/*#define CHANNEL_GENERATE_PRECALCS*/ +#if 0 +#define CHANNEL_GENERATE_PRECALCS +#endif #ifdef CHANNEL_GENERATE_PRECALCS /* To generate precalc tables uncomment CHANNEL_GENERATE_PRECALCS define and run diff --git a/backend/common.c b/backend/common.c index 17247466..bc146193 100644 --- a/backend/common.c +++ b/backend/common.c @@ -51,9 +51,8 @@ INTERNAL int ctoi(const char source) { INTERNAL char itoc(const int source) { if ((source >= 0) && (source <= 9)) { return ('0' + source); - } else { - return ('A' + (source - 10)); } + return ('A' - 10 + source); } /* Converts decimal string of length <= 9 to integer value. Returns -1 if not numeric */ @@ -72,7 +71,7 @@ INTERNAL int to_int(const unsigned char source[], const int length) { return val; } -/* Converts lower case characters to upper case in a string source[] */ +/* Converts lower case characters to upper case in string `source` */ INTERNAL void to_upper(unsigned char source[], const int length) { int i; @@ -83,12 +82,12 @@ INTERNAL void to_upper(unsigned char source[], const int length) { } } -/* Returns the number of times a character occurs in a string */ -INTERNAL int chr_cnt(const unsigned char string[], const int length, const unsigned char c) { +/* Returns the number of times a character occurs in `source` */ +INTERNAL int chr_cnt(const unsigned char source[], const int length, const unsigned char c) { int count = 0; int i; for (i = 0; i < length; i++) { - if (string[i] == c) { + if (source[i] == c) { count++; } } @@ -168,7 +167,7 @@ INTERNAL int is_sane_lookup(const char test_string[], const int test_length, con return 1; } -/* Returns the position of data in set_string */ +/* Returns the position of `data` in `set_string` */ INTERNAL int posn(const char set_string[], const char data) { const char *s; @@ -180,7 +179,8 @@ INTERNAL int posn(const char set_string[], const char data) { return -1; } -/* Convert an integer value to a string representing its binary equivalent and place at a given position */ +/* Converts `arg` to a string representing its binary equivalent of length `length` and places in `binary` at + `bin_posn`. Returns `bin_posn` + `length` */ INTERNAL int bin_append_posn(const int arg, const int length, char *binary, const int bin_posn) { int i; int start; @@ -198,28 +198,28 @@ INTERNAL int bin_append_posn(const int arg, const int length, char *binary, cons } #ifndef Z_COMMON_INLINE -/* Return true (1) if a module is dark/black, otherwise false (0) */ +/* Returns true (1) if a module is dark/black, otherwise false (0) */ INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) { return (symbol->encoded_data[y_coord][x_coord >> 3] >> (x_coord & 0x07)) & 1; } -/* Set a module to dark/black */ +/* Sets a module to dark/black */ INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) { symbol->encoded_data[y_coord][x_coord >> 3] |= 1 << (x_coord & 0x07); } -/* Return true (1-8) if a module is colour, otherwise false (0) */ +/* Returns true (1-8) if a module is colour, otherwise false (0) */ INTERNAL int module_colour_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) { return symbol->encoded_data[y_coord][x_coord]; } -/* Set a module to a colour */ +/* Sets a module to a colour */ INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, const int colour) { symbol->encoded_data[y_coord][x_coord] = colour; } #endif -/* Set a dark/black module to white (i.e. unset) */ +/* Sets a dark/black module to white (i.e. unsets) */ INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) { symbol->encoded_data[y_coord][x_coord >> 3] &= ~(1 << (x_coord & 0x07)); } @@ -255,7 +255,7 @@ INTERNAL void expand(struct zint_symbol *symbol, const char data[], const int le } } -/* Indicates which symbologies can have row binding */ +/* Whether `symbology` can have row binding */ INTERNAL int is_stackable(const int symbology) { if (symbology < BARCODE_PHARMA_TWO && symbology != BARCODE_POSTNET) { return 1; @@ -280,7 +280,7 @@ INTERNAL int is_stackable(const int symbology) { return 0; } -/* Indicates which symbols can have addon (EAN-2 and EAN-5) */ +/* Whether `symbology` can have addon (EAN-2 and EAN-5) */ INTERNAL int is_extendable(const int symbology) { switch (symbology) { @@ -301,12 +301,12 @@ INTERNAL int is_extendable(const int symbology) { return 0; } -/* Indicates which symbols can have composite 2D component data */ +/* Whether `symbology` can have composite 2D component data */ INTERNAL int is_composite(const int symbology) { return symbology >= BARCODE_EANX_CC && symbology <= BARCODE_DBAR_EXPSTK_CC; } -/* Returns 1 if symbology is a matrix design renderable as dots */ +/* Whether `symbology` is a matrix design renderable as dots */ INTERNAL int is_dotty(const int symbology) { switch (symbology) { @@ -332,7 +332,7 @@ INTERNAL int is_dotty(const int symbology) { return 0; } -/* Returns 1 if symbology has fixed aspect ratio (matrix design) */ +/* Whether `symbology` has a fixed aspect ratio (matrix design) */ INTERNAL int is_fixed_ratio(const int symbology) { if (is_dotty(symbology)) { @@ -358,6 +358,16 @@ INTERNAL int is_twodigits(const unsigned char source[], const int length, const return 0; } +/* Returns how many consecutive digits lie immediately ahead up to `max`, or all if `max` is -1 */ +INTERNAL int cnt_digits(const unsigned char source[], const int length, const int position, const int max) { + int i; + const int max_length = max == -1 || position + max > length ? length : position + max; + + for (i = position; i < max_length && z_isdigit(source[i]); i++); + + return i - position; +} + /* State machine to decode UTF-8 to Unicode codepoints (state 0 means done, state 12 means error) */ INTERNAL unsigned int decode_utf8(unsigned int *state, unsigned int *codep, const unsigned char byte) { /* @@ -419,8 +429,8 @@ INTERNAL int is_valid_utf8(const unsigned char source[], const int length) { return state == 0; } -/* Convert UTF-8 to Unicode. If `disallow_4byte` unset, allow all values (UTF-32). If `disallow_4byte` set, - * only allow codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */ +/* Converts UTF-8 to Unicode. If `disallow_4byte` unset, allows all values (UTF-32). If `disallow_4byte` set, + * only allows codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */ INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], int *length, const int disallow_4byte) { int bpos; @@ -453,7 +463,7 @@ INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char sou return 0; } -/* Set symbol height, returning a warning if not within minimum and/or maximum if given. +/* Sets symbol height, returning a warning if not within minimum and/or maximum if given. `default_height` does not include height of fixed-height rows (i.e. separators/composite data) */ INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, const float default_height, const float max_height, const int no_errtxt) { @@ -535,7 +545,7 @@ INTERNAL int segs_length(const struct zint_seg segs[], const int seg_count) { return total_len; } -/* Shallow copy segments, adjusting default ECIs */ +/* Shallow copies segments, adjusting default ECIs */ INTERNAL void segs_cpy(const struct zint_symbol *symbol, const struct zint_seg segs[], const int seg_count, struct zint_seg local_segs[]) { const int default_eci = symbol->symbology == BARCODE_GRIDMATRIX ? 29 : symbol->symbology == BARCODE_UPNQR ? 4 : 3; diff --git a/backend/common.h b/backend/common.h index 3b7c7423..2510341b 100644 --- a/backend/common.h +++ b/backend/common.h @@ -90,7 +90,7 @@ typedef unsigned __int64 uint64_t; /* The most commonly used set */ #define NEON_F IS_NUM_F /* NEON "0123456789" */ -/* Simple versions of functions with no dependence on locale */ +/* 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') @@ -146,75 +146,144 @@ typedef unsigned __int64 uint64_t; #define Z_COMMON_INLINE 1 #ifdef Z_COMMON_INLINE -/* Return true (1) if a module is dark/black, otherwise false (0) */ +/* Returns true (1) if a module is dark/black, otherwise false (0) */ # define module_is_set(s, y, x) (((s)->encoded_data[(y)][(x) >> 3] >> ((x) & 0x07)) & 1) -/* Set a module to dark/black */ +/* Sets a module to dark/black */ # define set_module(s, y, x) do { (s)->encoded_data[(y)][(x) >> 3] |= 1 << ((x) & 0x07); } while (0) -/* Return true (1-8) if a module is colour, otherwise false (0) */ +/* Returns true (1-8) if a module is colour, otherwise false (0) */ # define module_colour_is_set(s, y, x) ((s)->encoded_data[(y)][(x)]) -/* Set a module to a colour */ +/* Sets a module to a colour */ # define set_module_colour(s, y, x, c) do { (s)->encoded_data[(y)][(x)] = (c); } while (0) #endif - INTERNAL int ctoi(const char source); - INTERNAL char itoc(const int source); - INTERNAL int to_int(const unsigned char source[], const int length); - INTERNAL void to_upper(unsigned char source[], const int length); - INTERNAL int chr_cnt(const unsigned char string[], const int length, const unsigned char c); +/* Converts a character 0-9, A-F to its equivalent integer value */ +INTERNAL int ctoi(const char source); - INTERNAL int is_chr(const unsigned int flg, const unsigned int c); - INTERNAL int is_sane(const unsigned int flg, const unsigned char source[], const int length); - INTERNAL int is_sane_lookup(const char test_string[], const int test_length, const unsigned char source[], - const int length, int *posns); - INTERNAL int posn(const char set_string[], const char data); +/* Converts an integer value to its hexadecimal character */ +INTERNAL char itoc(const int source); - INTERNAL int bin_append_posn(const int arg, const int length, char *binary, const int bin_posn); +/* Converts decimal string of length <= 9 to integer value. Returns -1 if not numeric */ +INTERNAL int to_int(const unsigned char source[], const int length); - #ifndef Z_COMMON_INLINE - INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord); - INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); - INTERNAL int module_colour_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord); - INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, - const int colour); - #endif - INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); +/* Converts lower case characters to upper case in string `source` */ +INTERNAL void to_upper(unsigned char source[], const int length); - INTERNAL void expand(struct zint_symbol *symbol, const char data[], const int length); +/* Returns the number of times a character occurs in `source` */ +INTERNAL int chr_cnt(const unsigned char source[], const int length, const unsigned char c); - INTERNAL int is_stackable(const int symbology); - INTERNAL int is_extendable(const int symbology); - INTERNAL int is_composite(const int symbology); - INTERNAL int is_dotty(const int symbology); - INTERNAL int is_fixed_ratio(const int symbology); - INTERNAL int is_twodigits(const unsigned char source[], const int length, const int position); +/* Whether a character matches `flg` */ +INTERNAL int is_chr(const unsigned int flg, const unsigned int c); - INTERNAL unsigned int decode_utf8(unsigned int *state, unsigned int *codep, const unsigned char byte); - INTERNAL int is_valid_utf8(const unsigned char source[], const int length); - INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], - int *length, const int disallow_4byte); +/* Verifies that a string only uses valid characters */ +INTERNAL int is_sane(const unsigned int flg, const unsigned char source[], const int length); - INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, const float default_height, - const float max_height, const int set_errtxt); +/* Verifies that a string only uses valid characters, and returns `test_string` position of each in `posns` array */ +INTERNAL int is_sane_lookup(const char test_string[], const int test_length, const unsigned char source[], + const int length, int *posns); - INTERNAL float stripf(const float arg); +/* Returns the position of `data` in `set_string` */ +INTERNAL int posn(const char set_string[], const char data); - INTERNAL int segs_length(const struct zint_seg segs[], const int seg_count); - INTERNAL void segs_cpy(const struct zint_symbol *symbol, const struct zint_seg segs[], const int seg_count, - struct zint_seg local_segs[]); - INTERNAL int colour_to_red(const int colour); - INTERNAL int colour_to_green(const int colour); - INTERNAL int colour_to_blue(const int colour); +/* Converts `arg` to a string representing its binary equivalent of length `length` and places in `binary` at + `bin_posn`. Returns `bin_posn` + `length` */ +INTERNAL int bin_append_posn(const int arg, const int length, char *binary, const int bin_posn); - #ifdef ZINT_TEST - INTERNAL void debug_test_codeword_dump(struct zint_symbol *symbol, const unsigned char *codewords, - const int length); - INTERNAL void debug_test_codeword_dump_int(struct zint_symbol *symbol, const int *codewords, const int length); - #endif + +#ifndef Z_COMMON_INLINE +/* Returns true (1) if a module is dark/black, otherwise false (0) */ +INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord); + +/* Sets a module to dark/black */ +INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); + +/* Returns true (1-8) if a module is colour, otherwise false (0) */ +INTERNAL int module_colour_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord); + +/* Sets a module to a colour */ +INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, + const int colour); +#endif +/* Sets a dark/black module to white (i.e. unsets) */ +INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); + +/* Expands from a width pattern to a bit pattern */ +INTERNAL void expand(struct zint_symbol *symbol, const char data[], const int length); + + +/* Whether `symbology` can have row binding */ +INTERNAL int is_stackable(const int symbology); + +/* Whether `symbology` can have addon (EAN-2 and EAN-5) */ +INTERNAL int is_extendable(const int symbology); + +/* Whether `symbology` can have composite 2D component data */ +INTERNAL int is_composite(const int symbology); + +/* Whether `symbology` is a matrix design renderable as dots */ +INTERNAL int is_dotty(const int symbology); + +/* Whether `symbology` has a fixed aspect ratio (matrix design) */ +INTERNAL int is_fixed_ratio(const int symbology); + + +/* Whether next two characters are digits */ +INTERNAL int is_twodigits(const unsigned char source[], const int length, const int position); + +/* Returns how many consecutive digits lie immediately ahead up to `max`, or all if `max` is -1 */ +INTERNAL int cnt_digits(const unsigned char source[], const int length, const int position, const int max); + + +/* State machine to decode UTF-8 to Unicode codepoints (state 0 means done, state 12 means error) */ +INTERNAL unsigned int decode_utf8(unsigned int *state, unsigned int *codep, const unsigned char byte); + +/* Is string valid UTF-8? */ +INTERNAL int is_valid_utf8(const unsigned char source[], const int length); + +/* Converts UTF-8 to Unicode. If `disallow_4byte` unset, allows all values (UTF-32). If `disallow_4byte` set, + * only allows codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */ +INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], + int *length, const int disallow_4byte); + + +/* Sets symbol height, returning a warning if not within minimum and/or maximum if given. + `default_height` does not include height of fixed-height rows (i.e. separators/composite data) */ +INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, const float default_height, + const float max_height, const int set_errtxt); + + +/* Removes excess precision from floats - see https://stackoverflow.com/q/503436 */ +INTERNAL float stripf(const float arg); + + +/* Returns total length of segments */ +INTERNAL int segs_length(const struct zint_seg segs[], const int seg_count); + +/* Shallow copies segments, adjusting default ECIs */ +INTERNAL void segs_cpy(const struct zint_symbol *symbol, const struct zint_seg segs[], const int seg_count, + struct zint_seg local_segs[]); + + +/* Returns red component if any of ultra colour indexing "0CBMRYGKW" */ +INTERNAL int colour_to_red(const int colour); + +/* Returns green component if any of ultra colour indexing "0CBMRYGKW" */ +INTERNAL int colour_to_green(const int colour); + +/* Returns blue component if any of ultra colour indexing "0CBMRYGKW" */ +INTERNAL int colour_to_blue(const int colour); + + +#ifdef ZINT_TEST +/* Dumps hex-formatted codewords in symbol->errtxt (for use in testing) */ +INTERNAL void debug_test_codeword_dump(struct zint_symbol *symbol, const unsigned char *codewords, const int length); +/* Dumps decimal-formatted codewords in symbol->errtxt (for use in testing) */ +INTERNAL void debug_test_codeword_dump_int(struct zint_symbol *symbol, const int *codewords, const int length); +#endif #ifdef __cplusplus } diff --git a/backend/composite.c b/backend/composite.c index 78b04953..747b2c60 100644 --- a/backend/composite.c +++ b/backend/composite.c @@ -301,7 +301,7 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w const int length = (int) strlen(source) / 8; int i; unsigned char *data_string = (unsigned char *) z_alloca(length + 3); - int chainemc[180], mclength; + int chainemc[180], mclength = 0; int k, j, p, longueur, mccorrection[50] = {0}, offset; int total; char pattern[580]; @@ -322,11 +322,8 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w } } - mclength = 0; - /* "the CC-B component shall have codeword 920 in the first symbol character position" (section 9a) */ - chainemc[mclength] = 920; - mclength++; + chainemc[mclength++] = 920; pdf_byteprocess(chainemc, &mclength, data_string, 0, length, 0, debug_print); @@ -410,8 +407,7 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w /* Binary input padded to target length so no padding should be necessary */ while (i > 0) { - chainemc[mclength] = 900; /* Not reached */ - mclength++; + chainemc[mclength++] = 900; /* Not reached */ i--; } @@ -435,8 +431,7 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w } /* we add these codes to the string */ for (i = k - 1; i >= 0; i--) { - chainemc[mclength] = mccorrection[i]; - mclength++; + chainemc[mclength++] = mccorrection[i]; } /* Now get the RAP (Row Address Pattern) start values */ @@ -522,7 +517,7 @@ static void cc_c(struct zint_symbol *symbol, const char source[], const int cc_w const int length = (int) strlen(source) / 8; int i, p; unsigned char *data_string = (unsigned char *) z_alloca(length + 4); - int chainemc[1000], mclength, k; + int chainemc[1000], mclength = 0, k; int offset, longueur, loop, total, j, mccorrection[520] = {0}; int c1, c2, c3, dummy[35]; char pattern[580]; @@ -540,12 +535,8 @@ static void cc_c(struct zint_symbol *symbol, const char source[], const int cc_w } } - mclength = 0; - - chainemc[mclength] = 0; /* space for length descriptor */ - mclength++; - chainemc[mclength] = 920; /* CC-C identifier */ - mclength++; + chainemc[mclength++] = 0; /* space for length descriptor */ + chainemc[mclength++] = 920; /* CC-C identifier */ pdf_byteprocess(chainemc, &mclength, data_string, 0, length, 0, debug_print); @@ -603,8 +594,7 @@ static void cc_c(struct zint_symbol *symbol, const char source[], const int cc_w } /* we add these codes to the string */ for (i = k - 1; i >= 0; i--) { - chainemc[mclength] = mccorrection[i]; - mclength++; + chainemc[mclength++] = mccorrection[i]; } /* 818 - The CW string is finished */ diff --git a/backend/dmatrix.c b/backend/dmatrix.c index d2837f98..d2cad7bd 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -758,7 +758,9 @@ static int dm_getEndMode(struct zint_symbol *symbol, const unsigned char *source return mode; } -/*#define DM_TRACE*/ +#if 0 +#define DM_TRACE +#endif #include "dmatrix_trace.h" /* Return number of C40/TEXT codewords needed to encode characters in full batches of 3 (or less if EOD). diff --git a/backend/dmatrix_trace.h b/backend/dmatrix_trace.h index 52329986..f115f07d 100644 --- a/backend/dmatrix_trace.h +++ b/backend/dmatrix_trace.h @@ -52,6 +52,7 @@ static void DM_TRACE_VertexToString(const unsigned char *source, const int lengt printf("char '%c' at %d mode %s", source[position], position, dm_smodes[edge->mode]); } } + static void DM_TRACE_EdgeToString(char *buf, const unsigned char *source, const int length, struct dm_edge *edges, struct dm_edge *edge) { int previousMode = DM_TRACE_getPreviousMode(edges, edge); diff --git a/backend/dotcode.c b/backend/dotcode.c index fa0de6bd..4a7b2ca5 100644 --- a/backend/dotcode.c +++ b/backend/dotcode.c @@ -409,21 +409,12 @@ static int dc_datum_c(const unsigned char source[], const int length, const int return is_twodigits(source, length, position); } -/* Returns how many consecutive digits lie immediately ahead (Annex F.II.A) */ -static int dc_n_digits(const unsigned char source[], const int length, const int position, const int max) { - int i; - - for (i = position; (i < length) && z_isdigit(source[i]) && (i < position + max); i++); - - return i - position; -} - /* Checks ahead for 10 or more digits starting "17xxxxxx10..." (Annex F.II.B) */ static int dc_seventeen_ten(const unsigned char source[], const int length, const int position) { if (position + 9 < length && source[position] == '1' && source[position + 1] == '7' && source[position + 8] == '1' && source[position + 9] == '0' - && dc_n_digits(source, length, position + 2, 6) >= 6) { + && cnt_digits(source, length, position + 2, 6) >= 6) { return 1; } @@ -447,7 +438,7 @@ static int dc_ahead_c(const unsigned char source[], const int length, const int /* Annex F.II.F */ static int dc_try_c(const unsigned char source[], const int length, const int position) { - if (position < length && z_isdigit(source[position])) { /* dc_n_digits(position) > 0 */ + if (position < length && z_isdigit(source[position])) { /* cnt_digits(position) > 0 */ const int ahead_c_position = dc_ahead_c(source, length, position); if (ahead_c_position > dc_ahead_c(source, length, position + 1)) { return ahead_c_position; @@ -681,7 +672,7 @@ static int dc_encode_message(struct zint_symbol *symbol, const unsigned char sou /* Step C3 */ if (dc_binary(source, length, position)) { - /* dc_n_digits(position + 1) > 0 */ + /* cnt_digits(position + 1) > 0 */ if (position + 1 < length && z_isdigit(source[position + 1])) { if ((source[position] - 128) < 32) { codeword_array[ap++] = 110; /* Upper Shift A */ diff --git a/backend/library.c b/backend/library.c index abc2f41d..2ac74156 100644 --- a/backend/library.c +++ b/backend/library.c @@ -336,6 +336,8 @@ static int hibc(struct zint_symbol *symbol, struct zint_seg segs[], const int se segs[0].source = (unsigned char *) to_process; segs[0].length = length; + if (symbol->debug & ZINT_DEBUG_PRINT) printf("HIBC processed source: %s\n", to_process); + switch (symbol->symbology) { case BARCODE_HIBC_128: error_number = code128(symbol, segs[0].source, segs[0].length); diff --git a/backend/pdf417.c b/backend/pdf417.c index a04a0e22..13e52cde 100644 --- a/backend/pdf417.c +++ b/backend/pdf417.c @@ -34,7 +34,7 @@ /* This code is adapted from "Code barre PDF 417 / PDF 417 barcode" v2.5.0 which is Copyright (C) 2004 (Grandzebu). - The original code can be downloaded from http://grandzebu.net/index.php */ + The original code (file pdf417.frm) can be downloaded from https://grandzebu.net/informatique/codbar/pdf417.zip */ /* NOTE: symbol->option_1 is used to specify the security level (i.e. control the number of check codewords) @@ -45,6 +45,7 @@ symbol->option_3 is used to adjust the rows of the resulting symbol */ #include +#include #include #include #include "common.h" @@ -52,15 +53,37 @@ #include "pdf417_tabs.h" /* Modes */ -#define TEX 900 -#define BYT 901 -#define NUM 902 +#define PDF_ALP 1 /* Treating TEX sub-modes as pseudo-modes (minimal encode) */ +#define PDF_LOW 2 +#define PDF_MIX 3 +#define PDF_PNC 4 +#define PDF_TEX 4 /* Real modes */ +#define PDF_BYT 5 +#define PDF_NUM 6 -/* TEX mode sub-modes */ -#define T_ALPHA 1 -#define T_LOWER 2 -#define T_MIXED 4 -#define T_PUNCT 8 +#define PDF_NUM_MODES 6 + +/* Mode indicators including TEX pseudo-modes */ +static const char pdf_smodes[] = { '?', 'A', 'L', 'M', 'P', 'B', 'N' }; + +/* Return (real) mode text */ +static const char *pdf_mode_str(const int mode) { + static const char *modes[3] = { "Text", "Byte", "Number" }; + return mode >= PDF_TEX && mode <= PDF_NUM ? modes[mode - PDF_TEX] : "ERROR"; +} + +#define PDF_REAL_MODE(m) ((m) <= PDF_TEX ? PDF_TEX : (m)) + +/* TEX mode OR-able sub-modes (tables) */ +#define T_ALPHA 1 +#define T_LOWER 2 +#define T_MIXED 4 +#define T_PUNCT 8 + +#define T_ALWMX (T_ALPHA | T_LOWER | T_MIXED) +#define T_MXPNC (T_MIXED | T_PUNCT) + +#define PDF_TABLE_TO_MODE(t) (((t) >> 1) + !!((t) & 0x07)) /* Hack to map 1,2,4,8 to 1,2,3,4 */ /* Three figure numbers in comments give the location of command equivalents in the @@ -71,20 +94,42 @@ /* TEX sub-mode assignments */ static const char pdf_asciix[127] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 8, 8, 4, 12, 4, 4, 8, 8, 8, 12, 4, 12, 12, 12, 12, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 12, 8, 8, 4, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 8, 8, 8, 4, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 8, 8, 8, 8 + 0, 0, 0, 0, 0, 0, 0, 0, /* 00-07 */ + 0, T_MXPNC, T_PUNCT, 0, 0, T_MXPNC, 0, 0, /* 08-0F ..... */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 10-17 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 18-1F */ + T_ALWMX, T_PUNCT, T_PUNCT, T_MIXED, T_MXPNC, T_MIXED, T_MIXED, T_PUNCT, /* 20-27 !"#$%&' */ + T_PUNCT, T_PUNCT, T_MXPNC, T_MIXED, T_MXPNC, T_MXPNC, T_MXPNC, T_MXPNC, /* 28-2F ()*+,-./ */ + T_MIXED, T_MIXED, T_MIXED, T_MIXED, T_MIXED, T_MIXED, T_MIXED, T_MIXED, /* 30-37 01234567 */ + T_MIXED, T_MIXED, T_MXPNC, T_PUNCT, T_PUNCT, T_MIXED, T_PUNCT, T_PUNCT, /* 38-3F 89:;<=>? */ + T_PUNCT, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, /* 40-47 @ABCDEFG */ + T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, /* 48-4F HIJKLMNO */ + T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, T_ALPHA, /* 50-57 PQRSTUVW */ + T_ALPHA, T_ALPHA, T_ALPHA, T_PUNCT, T_PUNCT, T_PUNCT, T_MIXED, T_PUNCT, /* 58-5F XYZ[\]^_ */ + T_PUNCT, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, /* 60-67 `abcdefg */ + T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, /* 68-6F hijklmno */ + T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, T_LOWER, /* 70-77 pqrstuvw */ + T_LOWER, T_LOWER, T_LOWER, T_PUNCT, T_PUNCT, T_PUNCT, T_PUNCT /* 78-7E xyz{|}~ */ }; /* TEX sub-mode values */ static const char pdf_asciiy[127] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 15, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 10, 20, 15, 18, 21, 10, 28, 23, 24, 22, 20, 13, 16, 17, 19, 0, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 14, 0, 1, 23, 2, 25, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4, 5, 6, 24, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 21, 27, 9 + 0, 0, 0, 0, 0, 0, 0, 0, /* 00-07 */ + 0, 12, 15, 0, 0, 11, 0, 0, /* 08-0F */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 10-17 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 18-1F */ + 26, 10, 20, 15, 18, 21, 10, 28, /* 20-27 */ + 23, 24, 22, 20, 13, 16, 17, 19, /* 28-2F */ + 0, 1, 2, 3, 4, 5, 6, 7, /* 30-37 */ + 8, 9, 14, 0, 1, 23, 2, 25, /* 38-3F */ + 3, 0, 1, 2, 3, 4, 5, 6, /* 40-47 */ + 7, 8, 9, 10, 11, 12, 13, 14, /* 48-4F */ + 15, 16, 17, 18, 19, 20, 21, 22, /* 50-57 */ + 23, 24, 25, 4, 5, 6, 24, 7, /* 58-5F */ + 8, 0, 1, 2, 3, 4, 5, 6, /* 60-67 */ + 7, 8, 9, 10, 11, 12, 13, 14, /* 68-6F */ + 15, 16, 17, 18, 19, 20, 21, 22, /* 70-77 */ + 23, 24, 25, 26, 21, 27, 9 /* 78-7F */ }; /* Automatic sizing table */ @@ -102,24 +147,77 @@ static const char pdf_MicroAutosize[56] = { #define MICRO_PDF_MAX_LEN 366 /* 866 */ - +/* Initial non-compressed categorization of input */ static int pdf_quelmode(const unsigned char codeascii) { if (z_isdigit(codeascii)) { - return NUM; + return PDF_NUM; } if (codeascii < 127 && pdf_asciix[codeascii]) { - return TEX; + return PDF_TEX; } /* 876 */ - return BYT; + return PDF_BYT; +} + +/* Helper to switch TEX mode sub-mode */ +static int pdf_textprocess_switch(const int curtable, const int newtable, int chainet[PDF_MAX_LEN], int wnet) { + switch (curtable) { + case T_ALPHA: + switch (newtable) { + case T_LOWER: chainet[wnet++] = 27; /* LL */ + break; + case T_MIXED: chainet[wnet++] = 28; /* ML */ + break; + case T_PUNCT: chainet[wnet++] = 28; /* ML+PL */ + chainet[wnet++] = 25; + break; + } + break; + case T_LOWER: + switch (newtable) { + case T_ALPHA: chainet[wnet++] = 28; /* ML+AL */ + chainet[wnet++] = 28; + break; + case T_MIXED: chainet[wnet++] = 28; /* ML */ + break; + case T_PUNCT: chainet[wnet++] = 28; /* ML+PL */ + chainet[wnet++] = 25; + break; + } + break; + case T_MIXED: + switch (newtable) { + case T_ALPHA: chainet[wnet++] = 28; /* AL */ + break; + case T_LOWER: chainet[wnet++] = 27; /* LL */ + break; + case T_PUNCT: chainet[wnet++] = 25; /* PL */ + break; + } + break; + case T_PUNCT: + switch (newtable) { + case T_ALPHA: chainet[wnet++] = 29; /* AL */ + break; + case T_LOWER: chainet[wnet++] = 29; /* AL+LL */ + chainet[wnet++] = 27; + break; + case T_MIXED: chainet[wnet++] = 29; /* AL+ML */ + chainet[wnet++] = 28; + break; + } + break; + } + + return wnet; } /* Check consecutive segments for text/num and return the length */ static int pdf_text_num_length(int liste[3][PDF_MAX_LEN], const int indexliste, const int start) { int i, len = 0; for (i = start; i < indexliste; i++) { - if (liste[1][i] == BYT) + if (liste[1][i] == PDF_BYT) break; len += liste[0][i]; @@ -132,10 +230,7 @@ static int pdf_text_num_length(int liste[3][PDF_MAX_LEN], const int indexliste, /* Calculate length of TEX allowing for sub-mode switches (no-output version of `pdf_textprocess()`) */ static int pdf_text_submode_length(const unsigned char chaine[], const int start, const int length, int *p_curtable) { - int j, indexlistet, curtable, listet[PDF_MAX_LEN], wnet; - - wnet = 0; - curtable = *p_curtable; + int j, indexlistet, curtable = *p_curtable, listet[PDF_MAX_LEN], chainet[PDF_MAX_LEN], wnet = 0; for (indexlistet = 0; indexlistet < length; indexlistet++) { listet[indexlistet] = pdf_asciix[chaine[start + indexlistet]]; @@ -167,52 +262,16 @@ static int pdf_text_submode_length(const unsigned char chaine[], const int start /* 599 */ /* Maintain the first if several tables are possible */ - if (newtable == 7) { /* (T_ALPHA | T_LOWER | T_MIXED) */ + if (newtable == T_ALWMX) { /* (T_ALPHA | T_LOWER | T_MIXED) */ newtable = T_ALPHA; - } else if (newtable == 12) { /* (T_MIXED | T_PUNCT) */ + } else if (newtable == T_MXPNC) { /* (T_MIXED | T_PUNCT) */ newtable = T_MIXED; } /* 619 - select the switch */ - switch (curtable) { - case T_ALPHA: - switch (newtable) { - case T_LOWER: - case T_MIXED: wnet++; /* LL or ML */ - break; - case T_PUNCT: wnet += 2; /* ML+PL */ - break; - } - break; - case T_LOWER: - switch (newtable) { - case T_ALPHA: wnet += 2; /* ML+AL */ - break; - case T_MIXED: wnet++; /* ML */ - break; - case T_PUNCT: wnet += 2; /* ML+PL */ - break; - } - break; - case T_MIXED: - switch (newtable) { - case T_ALPHA: - case T_LOWER: - case T_PUNCT: wnet++; /* AL or LL or PL */ - break; - } - break; - case T_PUNCT: - switch (newtable) { - case T_ALPHA: wnet++; /* AL */ - break; - case T_LOWER: - case T_MIXED: wnet += 2; /* AL+LL or AL+ML */ - break; - } - break; - } + wnet = pdf_textprocess_switch(curtable, newtable, chainet, wnet); curtable = newtable; + /* 659 - at last we add the character */ wnet++; } } @@ -239,11 +298,11 @@ static int pdf_num_stay(const unsigned char *chaine, const int indexliste, int l curtable = T_ALPHA; /* Next len if after NUM, sub-mode will be alpha */ next_len = i == indexliste - 1 ? 0 : pdf_text_submode_length(chaine, liste[2][i + 1], liste[0][i + 1], &curtable); - num_cws = (last_len + 1) / 2 + 1 + 4 + (liste[0][i] > 11) + 1 + (next_len + 1) / 2; + num_cws = ((last_len + 1) >> 1) + 1 + 4 + (liste[0][i] > 11) + 1 + ((next_len + 1) >> 1); curtable = T_MIXED; /* Next len if stay TEX, sub-mode will be mixed */ next_len = i == indexliste - 1 ? 0 : pdf_text_submode_length(chaine, liste[2][i + 1], liste[0][i + 1], &curtable); - tex_cws = (last_len + !last_ml + liste[0][i] + next_len + 1) / 2; + tex_cws = (last_len + !last_ml + liste[0][i] + next_len + 1) >> 1; if (num_cws > tex_cws) { return 0; @@ -252,36 +311,37 @@ static int pdf_num_stay(const unsigned char *chaine, const int indexliste, int l } /* Pack segments using the method described in Appendix D of the AIM specification (ISO/IEC 15438:2015 Annex N) */ -static void pdf_appendix_d_encode(const unsigned char *chaine, int liste[3][PDF_MAX_LEN], int *indexliste, +static void pdf_appendix_d_encode(const unsigned char *chaine, int liste[3][PDF_MAX_LEN], int *p_indexliste, const int debug_print) { + const int indexliste = *p_indexliste; int i = 0, next, last = 0, stayintext = 0; - while (i < *(indexliste)) { + while (i < indexliste) { if (debug_print) { printf("Encoding block %d = %d (%d)\n", i, liste[1][i], liste[0][i]); } - if ((liste[1][i] == NUM) && pdf_num_stay(chaine, *indexliste, liste, i)) { + if ((liste[1][i] == PDF_NUM) && pdf_num_stay(chaine, indexliste, liste, i)) { /* leave as numeric */ liste[0][last] = liste[0][i]; - liste[1][last] = NUM; + liste[1][last] = PDF_NUM; liste[2][last] = liste[2][i]; stayintext = 0; last++; - } else if (((liste[1][i] == TEX) || (liste[1][i] == NUM)) - && (stayintext || i == *indexliste - 1 || (liste[0][i] >= 5) - || (pdf_text_num_length(liste, *indexliste, i) >= 5))) { + } else if (((liste[1][i] == PDF_TEX) || (liste[1][i] == PDF_NUM)) + && (stayintext || i == indexliste - 1 || (liste[0][i] >= 5) + || (pdf_text_num_length(liste, indexliste, i) >= 5))) { /* set to text and combine additional text/short numeric segments */ liste[0][last] = liste[0][i]; - liste[1][last] = TEX; + liste[1][last] = PDF_TEX; liste[2][last] = liste[2][i]; stayintext = 0; next = i + 1; - while (next < *(indexliste)) { - if ((liste[1][next] == NUM) && pdf_num_stay(chaine, *indexliste, liste, next)) { + while (next < indexliste) { + if ((liste[1][next] == PDF_NUM) && pdf_num_stay(chaine, indexliste, liste, next)) { break; - } else if (liste[1][next] == BYT) { + } else if (liste[1][next] == PDF_BYT) { break; } @@ -295,20 +355,20 @@ static void pdf_appendix_d_encode(const unsigned char *chaine, int liste[3][PDF_ } else { /* build byte segment, including combining numeric/text segments that aren't long enough on their own */ liste[0][last] = liste[0][i]; - liste[1][last] = BYT; + liste[1][last] = PDF_BYT; liste[2][last] = liste[2][i]; stayintext = 0; next = i + 1; - while (next < *(indexliste)) { - if (liste[1][next] != BYT) { + while (next < indexliste) { + if (liste[1][next] != PDF_BYT) { /* check for case of a single byte shift from text mode */ - if ((liste[0][last] == 1) && (last > 0) && (liste[1][last - 1] == TEX)) { + if ((liste[0][last] == 1) && (last > 0) && (liste[1][last - 1] == PDF_TEX)) { stayintext = 1; break; } - if ((liste[0][next] >= 5) || (pdf_text_num_length(liste, *indexliste, next) >= 5)) { + if ((liste[0][next] >= 5) || (pdf_text_num_length(liste, indexliste, next) >= 5)) { break; } } @@ -326,16 +386,47 @@ static void pdf_appendix_d_encode(const unsigned char *chaine, int liste[3][PDF_ } /* set the size of the list based on the last consolidated segment */ - *indexliste = last; + *p_indexliste = last; +} + +/* Helper to pad TEX mode, allowing for whether last segment or not, writing out `chainet` */ +static void pdf_textprocess_end(int *chainemc, int *p_mclength, const int is_last_seg, int chainet[PDF_MAX_LEN], + int wnet, int *p_curtable, int *p_tex_padded) { + int i; + + *p_tex_padded = wnet & 1; + if (*p_tex_padded) { + if (is_last_seg) { + chainet[wnet++] = 29; /* PS or AL */ + } else { /* Can't use PS as may carry over to following segment */ + /* This is sub-optimal if curtable T_ALPHA and following seg lower, or if curtable T_MIXED + and following seg is lower or punct; TODO: need peek-ahead to table of following seg */ + chainet[wnet++] = 28 + (*p_curtable == T_PUNCT); /* ML (T_ALPHA/T_LOWER) or AL (T_MIXED/T_PUNCT) */ + *p_curtable = *p_curtable == T_ALPHA || *p_curtable == T_LOWER ? T_MIXED : T_ALPHA; + } + } + + /* Now translate the string chainet into codewords */ + + for (i = 0; i < wnet; i += 2) { + chainemc[(*p_mclength)++] = (30 * chainet[i]) + chainet[i + 1]; + } } /* 547 */ -static void pdf_textprocess(int *chainemc, int *mclength, const unsigned char chaine[], const int start, - const int length, const int lastmode, int *p_curtable, int *p_tex_padded) { - int j, indexlistet, curtable, listet[2][PDF_MAX_LEN] = {{0}}, chainet[PDF_MAX_LEN], wnet; +/* Text compaction */ +static void pdf_textprocess(int *chainemc, int *p_mclength, const unsigned char chaine[], const int start, + const int length, const int lastmode, const int is_last_seg, int *p_curtable, int *p_tex_padded) { + const int real_lastmode = PDF_REAL_MODE(lastmode); + int j, indexlistet; + int curtable = real_lastmode == PDF_TEX ? *p_curtable : T_ALPHA; /* Set default table upper alpha */ + int listet[2][PDF_MAX_LEN] = {{0}}, chainet[PDF_MAX_LEN]; + int wnet = 0; - wnet = 0; - curtable = *p_curtable; + /* add mode indicator if needed */ + if (real_lastmode != PDF_TEX) { + chainemc[(*p_mclength)++] = 900; + } /* listet will contain the table numbers and the value of each characters */ for (indexlistet = 0; indexlistet < length; indexlistet++) { @@ -345,9 +436,6 @@ static void pdf_textprocess(int *chainemc, int *mclength, const unsigned char ch } /* 570 */ - if (lastmode != TEX) { - curtable = T_ALPHA; /* set default table upper alpha */ - } for (j = 0; j < length; j++) { if (listet[0][j] & curtable) { @@ -377,60 +465,14 @@ static void pdf_textprocess(int *chainemc, int *mclength, const unsigned char ch /* 599 */ /* Maintain the first if several tables are possible */ - if (newtable == 7) { /* (T_ALPHA | T_LOWER | T_MIXED) */ + if (newtable == T_ALWMX) { /* (T_ALPHA | T_LOWER | T_MIXED) */ newtable = T_ALPHA; - } else if (newtable == 12) { /* (T_MIXED | T_PUNCT) */ + } else if (newtable == T_MXPNC) { /* (T_MIXED | T_PUNCT) */ newtable = T_MIXED; } /* 619 - select the switch */ - switch (curtable) { - case T_ALPHA: - switch (newtable) { - case T_LOWER: chainet[wnet++] = 27; /* LL */ - break; - case T_MIXED: chainet[wnet++] = 28; /* ML */ - break; - case T_PUNCT: chainet[wnet++] = 28; /* ML+PL */ - chainet[wnet++] = 25; - break; - } - break; - case T_LOWER: - switch (newtable) { - case T_ALPHA: chainet[wnet++] = 28; /* ML+AL */ - chainet[wnet++] = 28; - break; - case T_MIXED: chainet[wnet++] = 28; /* ML */ - break; - case T_PUNCT: chainet[wnet++] = 28; /* ML+PL */ - chainet[wnet++] = 25; - break; - } - break; - case T_MIXED: - switch (newtable) { - case T_ALPHA: chainet[wnet++] = 28; /* AL */ - break; - case T_LOWER: chainet[wnet++] = 27; /* LL */ - break; - case T_PUNCT: chainet[wnet++] = 25; /* PL */ - break; - } - break; - case T_PUNCT: - switch (newtable) { - case T_ALPHA: chainet[wnet++] = 29; /* AL */ - break; - case T_LOWER: chainet[wnet++] = 29; /* AL+LL */ - chainet[wnet++] = 27; - break; - case T_MIXED: chainet[wnet++] = 29; /* AL+ML */ - chainet[wnet++] = 28; - break; - } - break; - } + wnet = pdf_textprocess_switch(curtable, newtable, chainet, wnet); curtable = newtable; /* 659 - at last we add the character */ chainet[wnet++] = listet[1][j]; @@ -438,49 +480,93 @@ static void pdf_textprocess(int *chainemc, int *mclength, const unsigned char ch } /* 663 */ - *p_tex_padded = wnet & 1; - if (*p_tex_padded) { - chainet[wnet++] = 29; - } - /* Now translate the string chainet into codewords */ + *p_curtable = curtable; + pdf_textprocess_end(chainemc, p_mclength, is_last_seg, chainet, wnet, p_curtable, p_tex_padded); +} + +/* Minimal text compaction */ +static void pdf_textprocess_minimal(int *chainemc, int *p_mclength, const unsigned char chaine[], + int liste[3][PDF_MAX_LEN], const int indexliste, const int lastmode, const int is_last_seg, + int *p_curtable, int *p_tex_padded, int *p_i) { + const int real_lastmode = PDF_REAL_MODE(lastmode); + int i, j, k; + int curtable = real_lastmode == PDF_TEX ? *p_curtable : T_ALPHA; /* Set default table upper alpha */ + int chainet[PDF_MAX_LEN]; + int wnet = 0; /* add mode indicator if needed */ - if (lastmode != TEX) { - chainemc[(*mclength)++] = 900; + if (real_lastmode != PDF_TEX) { + chainemc[(*p_mclength)++] = 900; } - for (j = 0; j < wnet; j += 2) { - const int cw_number = (30 * chainet[j]) + chainet[j + 1]; - chainemc[(*mclength)++] = cw_number; + for (i = *p_i; i < indexliste && PDF_REAL_MODE(liste[1][i]) == PDF_TEX; i++) { + static const int newtables[5] = { 0, T_ALPHA, T_LOWER, T_MIXED, T_PUNCT }; + const int newtable = newtables[liste[1][i]]; + const int from = liste[2][i]; + for (j = 0; j < liste[0][i]; j++) { + const int c = chaine[from + j]; + const int t_table = c < 127 ? pdf_asciix[c] : 0; + if (!t_table) { /* BYT Shift? */ + if (wnet & 1) { + chainet[wnet++] = 29; /* PS or AL (T_PUNCT) */ + if (curtable == T_PUNCT) { + curtable = T_ALPHA; + } + } + for (k = 0; k < wnet; k += 2) { + chainemc[(*p_mclength)++] = (30 * chainet[k]) + chainet[k + 1]; + } + chainemc[(*p_mclength)++] = 913; /* BYT Shift */ + chainemc[(*p_mclength)++] = c; + wnet = 0; + continue; + } + + if (newtable != curtable) { + wnet = pdf_textprocess_switch(curtable, newtable, chainet, wnet); + curtable = newtable; + } + if (curtable == T_LOWER && t_table == T_ALPHA) { + chainet[wnet++] = 27; /* AS */ + } else if (curtable != T_PUNCT && (t_table & T_PUNCT) && (curtable != T_MIXED || !(t_table & T_MIXED))) { + chainet[wnet++] = 29; /* PS */ + } + /* At last we add the character */ + chainet[wnet++] = pdf_asciiy[c]; + } } + *p_i = i ? i - 1 : 0; *p_curtable = curtable; + pdf_textprocess_end(chainemc, p_mclength, is_last_seg, chainet, wnet, p_curtable, p_tex_padded); } /* 671 */ -INTERNAL void pdf_byteprocess(int *chainemc, int *mclength, const unsigned char chaine[], int start, const int length, - const int lastmode, const int debug_print) { +/* Byte compaction */ +INTERNAL void pdf_byteprocess(int *chainemc, int *p_mclength, const unsigned char chaine[], int start, + const int length, const int lastmode, const int debug_print) { + const int real_lastmode = PDF_REAL_MODE(lastmode); if (debug_print) printf("\nEntering byte mode at position %d\n", start); if (length == 1) { /* shift or latch depending on previous mode */ - chainemc[(*mclength)++] = (lastmode == TEX) ? 913 : 901; - chainemc[(*mclength)++] = chaine[start]; + chainemc[(*p_mclength)++] = real_lastmode == PDF_TEX ? 913 : 901; + chainemc[(*p_mclength)++] = chaine[start]; if (debug_print) { - printf("%s %d\n", (lastmode == TEX) ? "913" : "901", chaine[start]); + printf("%s %d\n", real_lastmode == PDF_TEX ? "913" : "901", chaine[start]); } } else { int len; /* select the switch for multiple of 6 bytes */ if (length % 6 == 0) { - chainemc[(*mclength)++] = 924; + chainemc[(*p_mclength)++] = 924; if (debug_print) printf("924 "); } else { /* Default mode for MICROPDF417 is Byte Compaction (ISO/IEC 24728:2006 5.4.3), but not emitting it * depends on whether an ECI has been emitted previously (or not) it appears, so simpler and safer * to always emit it. */ - chainemc[(*mclength)++] = 901; + chainemc[(*p_mclength)++] = 901; if (debug_print) printf("901 "); } @@ -502,14 +588,14 @@ INTERNAL void pdf_byteprocess(int *chainemc, int *mclength, const unsigned char chunkLen = 5; while (chunkLen--) { - chainemc[*mclength + chunkLen] = (int) (total % 900); + chainemc[*p_mclength + chunkLen] = (int) (total % 900); total /= 900; } - *mclength += 5; + *p_mclength += 5; } else { /* If there remains a group of less than 6 bytes */ len += chunkLen; while (chunkLen--) { - chainemc[(*mclength)++] = chaine[start++]; + chainemc[(*p_mclength)++] = chaine[start++]; } } } @@ -517,11 +603,12 @@ INTERNAL void pdf_byteprocess(int *chainemc, int *mclength, const unsigned char } /* 712 */ -static void pdf_numbprocess(int *chainemc, int *mclength, const unsigned char chaine[], const int start, +/* Numeric compaction */ +static void pdf_numbprocess(int *chainemc, int *p_mclength, const unsigned char chaine[], const int start, const int length) { int j; - chainemc[(*mclength)++] = 902; + chainemc[(*p_mclength)++] = 902; j = 0; while (j < length) { @@ -559,65 +646,392 @@ static void pdf_numbprocess(int *chainemc, int *mclength, const unsigned char ch len = p; } while (p); for (loop = dumlength - 1; loop >= 0; loop--) { - chainemc[(*mclength)++] = dummy[loop]; + chainemc[(*p_mclength)++] = dummy[loop]; } j += longueur; } } #ifdef ZINT_TEST /* Wrapper for direct testing */ -INTERNAL void pdf_numbprocess_test(int *chainemc, int *mclength, const unsigned char chaine[], const int start, +INTERNAL void pdf_numbprocess_test(int *chainemc, int *p_mclength, const unsigned char chaine[], const int start, const int length) { - pdf_numbprocess(chainemc, mclength, chaine, start, length); + pdf_numbprocess(chainemc, p_mclength, chaine, start, length); } #endif -/* Return mode text */ -static const char *pdf_mode_str(const int mode) { - static const char *modes[3] = { "Text", "Byte", "Number" }; - return mode >= TEX && mode <= NUM ? modes[mode - TEX] : "ERROR"; +/* Minimal encoding */ + +/* Return number of consecutive chars from `position` in table `t_table` */ +static int pdf_table_length(const unsigned char source[], const int length, const int position, const int t_table) { + int i; + + for (i = position; i < length && source[i] < 127 && (pdf_asciix[source[i]] & t_table); i++); + + return i - position; +} + +struct pdf_edge { + unsigned char mode; + unsigned short from; /* Position in input data, 0-based */ + unsigned short len; + unsigned short units; /* Cumulative TEX/NUM/BYT units since entering TEX/NUM/BYT mode */ + unsigned short unit_size; /* Number of codewords based on units since entering TEX/NUM/BYT mode */ + unsigned short size; /* Cumulative number of codewords in previous TEX/NUM/BYT modes */ + 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 PDF_PREVIOUS(edges, edge) \ + ((edge)->previous ? (edges) + (edge)->previous : NULL) + +#if 0 +#define PDF_TRACE +#endif +#include "pdf417_trace.h" + +/* Initialize a new edge */ +static int pdf_new_Edge(struct pdf_edge *edges, const int mode, const int from, const int len, const int t_table, + const int lastmode, struct pdf_edge *previous, struct pdf_edge *edge) { + const int real_mode = PDF_REAL_MODE(mode); + int previousMode, real_previousMode; + int units; + int unit_size = 0; /* Suppress clang-tidy clang-analyzer-core.uninitialized.Assign warning */ + int dv, md; + + edge->mode = mode; + edge->from = from; + edge->len = len; + if (previous) { + assert(previous->mode && previous->len && (previous->unit_size + previous->size)); + previousMode = previous->mode; + real_previousMode = PDF_REAL_MODE(previousMode); + edge->previous = previous - edges; + if (real_mode != real_previousMode) { + edge->size = previous->size + previous->unit_size + 1; /* + TEX/NUM/BYT switch */ + units = 0; + } else { + edge->size = previous->size; + units = previous->units; + } + } else { + previousMode = lastmode; + real_previousMode = PDF_REAL_MODE(previousMode); + edge->previous = 0; + edge->size = real_mode != real_previousMode || real_previousMode != PDF_TEX ? 1 : 0; + units = 0; + } + + switch (mode) { + case PDF_ALP: + assert(!t_table || (t_table & (T_ALPHA | T_PUNCT))); + if (t_table) { + if (previousMode != mode && real_previousMode == PDF_TEX) { + units += 1 + (previousMode == PDF_LOW); /* AL or ML+AL */ + } + units += (1 + !(t_table & T_ALPHA)) * len; /* chars or PS + char */ + } else { /* Binary shift */ + assert(len == 1); + if (units & 1) { + units++; /* PS or AL pad */ + } + if (previousMode != mode && real_previousMode == PDF_TEX) { + units += 1 + (previousMode == PDF_LOW); /* AL or ML+AL */ + } + units += 4; /* BYT SHIFT 913 (2 units) + byte (2 units) */ + } + unit_size = (units + 1) >> 1; + break; + + case PDF_LOW: + assert(!t_table || (t_table & (T_LOWER | T_PUNCT | T_ALPHA))); + if (t_table) { + if (previousMode != mode) { + units += 1 + (previousMode == PDF_PNC); /* LL or AL+LL */ + } + units += (1 + !(t_table & T_LOWER)) * len; /* chars or PS/AS + char */ + } else { /* Binary shift */ + assert(len == 1); + if (units & 1) { + units++; /* PS or AL pad */ + } + if (previousMode != mode) { + units += 1 + (previousMode == PDF_PNC); /* LL or AL+LL */ + } + units += 4; /* BYT SHIFT 913 (2 units) + byte (2 units) */ + } + unit_size = (units + 1) >> 1; + break; + + case PDF_MIX: + assert(!t_table || (t_table & (T_MIXED | T_PUNCT))); + if (t_table) { + if (previousMode != mode) { + units += 1 + (previousMode == PDF_PNC); /* ML or AL+ML */ + } + units += (1 + !(t_table & T_MIXED)) * len; /* chars or PS + char */ + } else { /* Binary shift */ + assert(len == 1); + if (units & 1) { + units++; /* PS pad */ + } + if (previousMode != mode) { + units += 1 + (previousMode == PDF_PNC); /* ML or AL+ML */ + } + units += 4; /* BYT SHIFT 913 (2 units) + byte (2 units) */ + } + unit_size = (units + 1) >> 1; + break; + + case PDF_PNC: + assert(!t_table || (t_table & T_PUNCT)); + if (t_table) { + if (previousMode != mode) { + units += 1 + (previousMode != PDF_MIX); /* PL or ML+PL */ + } + units += len; /* chars */ + } else { /* Binary shift */ + assert(len == 1); + if (units & 1) { + units += 3; /* AL pad + (after BYT SHIFT) ML+PL to return to PNC */ + } else if (previousMode != mode) { + units += 1 + (previousMode != PDF_MIX); /* PL or ML+PL */ + } + units += 4; /* BYT SHIFT 913 (2 units) + byte (2 units) */ + } + unit_size = (units + 1) >> 1; + break; + + case PDF_BYT: + units += len; + dv = units / 6; + unit_size = dv * 5 + (units - dv * 6); + break; + + case PDF_NUM: + units += len; + dv = units / 44; + md = units - dv * 44; + unit_size = dv * 15 + (md ? md / 3 + 1 : 0); + break; + } + edge->units = units; + edge->unit_size = unit_size; + + return edge->size + edge->unit_size; +} + +/* Whether `new_units` likely to result in less (fractional) codewords than `existing_units`, allowing for `mode` */ +static int pdf_new_units_better(const int mode, const int existing_units, const int new_units) { + if (PDF_REAL_MODE(mode) == PDF_TEX) { + if ((new_units & 1) != (existing_units & 1)) { + return (existing_units & 1); + } + } else if (mode == PDF_BYT) { + const int existing_md = existing_units % 6; + if (new_units % 6 != existing_md) { + return existing_md; + } + } + return new_units < existing_units; +} + +/* Add an edge for a mode at a vertex if no existing edge or if more optimal than existing edge */ +static void pdf_addEdge(const unsigned char *source, const int length, struct pdf_edge *edges, const int mode, + const int from, const int len, const int t_table, const int lastmode, struct pdf_edge *previous) { + struct pdf_edge edge; + const int new_size = pdf_new_Edge(edges, mode, from, len, t_table, lastmode, previous, &edge); + const int vertexIndex = from + len; + const int v_ij = vertexIndex * PDF_NUM_MODES + mode - 1; + const int v_size = edges[v_ij].size + edges[v_ij].unit_size; + + if (edges[v_ij].mode == 0 || v_size > new_size + || (v_size == new_size && pdf_new_units_better(mode, edge.units, edges[v_ij].units))) { + PDF_TRACE_AddEdge(source, length, edges, previous, vertexIndex, t_table, &edge); + edges[v_ij] = edge; + } else { + PDF_TRACE_NotAddEdge(source, length, edges, previous, vertexIndex, t_table, &edge); + } +} + +/* Add edges for the various modes at a vertex */ +static void pdf_addEdges(const unsigned char source[], const int length, const int lastmode, struct pdf_edge *edges, + const int from, struct pdf_edge *previous) { + const unsigned char c = source[from]; + const int t_table = c < 127 ? pdf_asciix[c] : 0; + + if (t_table & T_ALPHA) { + const int len = pdf_table_length(source, length, from, T_ALPHA); + pdf_addEdge(source, length, edges, PDF_ALP, from, len, T_ALPHA, lastmode, previous); + } + if (!t_table || (t_table & T_PUNCT)) { /* Binary shift or PS */ + pdf_addEdge(source, length, edges, PDF_ALP, from, 1 /*len*/, t_table & ~T_ALPHA, lastmode, previous); + } + + if (t_table & T_LOWER) { + const int len = pdf_table_length(source, length, from, T_LOWER); + pdf_addEdge(source, length, edges, PDF_LOW, from, len, T_LOWER, lastmode, previous); + } + if (!t_table || (t_table & (T_PUNCT | T_ALPHA))) { /* Binary shift or PS/AS */ + pdf_addEdge(source, length, edges, PDF_LOW, from, 1 /*len*/, t_table & ~T_LOWER, lastmode, previous); + } + + if (t_table & T_MIXED) { + const int len = pdf_table_length(source, length, from, T_MIXED); + pdf_addEdge(source, length, edges, PDF_MIX, from, len, T_MIXED, lastmode, previous); + if (len > 1 && z_isdigit(source[from + 1])) { /* Add single-length edge before digit to compare to NUM */ + pdf_addEdge(source, length, edges, PDF_MIX, from, 1 /*len*/, T_MIXED, lastmode, previous); + } + } + if (!t_table || (t_table & T_PUNCT)) { /* Binary shift or PS */ + pdf_addEdge(source, length, edges, PDF_MIX, from, 1 /*len*/, t_table & ~T_MIXED, lastmode, previous); + } + + if (t_table & T_PUNCT) { + const int len = pdf_table_length(source, length, from, T_PUNCT); + pdf_addEdge(source, length, edges, PDF_PNC, from, len, T_PUNCT, lastmode, previous); + } + if (!t_table) { /* Binary shift */ + pdf_addEdge(source, length, edges, PDF_PNC, from, 1 /*len*/, t_table, lastmode, previous); + } + + if (z_isdigit(c)) { + const int len = cnt_digits(source, length, from, -1 /*all*/); + pdf_addEdge(source, length, edges, PDF_NUM, from, len, 0 /*t_table*/, lastmode, previous); + } + + pdf_addEdge(source, length, edges, PDF_BYT, from, 1 /*len*/, 0 /*t_table*/, lastmode, previous); +} + +/* Calculate optimized encoding modes */ +static int pdf_define_mode(int liste[3][PDF_MAX_LEN], int *p_indexliste, const unsigned char source[], + const int length, const int lastmode, const int debug_print) { + + int i, j, v_i; + int minimalJ, minimalSize; + struct pdf_edge *edge; + int mode_start, mode_len; + + struct pdf_edge *edges = (struct pdf_edge *) calloc((length + 1) * PDF_NUM_MODES, sizeof(struct pdf_edge)); + if (!edges) { + return 0; + } + pdf_addEdges(source, length, lastmode, edges, 0, NULL); + + PDF_TRACE_Edges("DEBUG Initial situation\n", source, length, edges, 0); + + for (i = 1; i < length; i++) { + v_i = i * PDF_NUM_MODES; + for (j = 0; j < PDF_NUM_MODES; j++) { + if (edges[v_i + j].mode) { + pdf_addEdges(source, length, lastmode, edges, i, edges + v_i + j); + } + } + PDF_TRACE_Edges("DEBUG situation after adding edges to vertices at position %d\n", source, length, edges, i); + } + + PDF_TRACE_Edges("DEBUG Final situation\n", source, length, edges, length); + + v_i = length * PDF_NUM_MODES; + minimalJ = -1; + minimalSize = INT_MAX; + for (j = 0; j < PDF_NUM_MODES; j++) { + edge = edges + v_i + j; + if (edge->mode) { + const int edge_size = edge->size + edge->unit_size; + if (debug_print) { + printf("edges[%d][%d][0] size %d(%d,%d)\n", length, j, edge_size, edge->unit_size, 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_start = length; + while (edge) { + const int current_mode = edge->mode; + const int current_from = edge->from; + mode_len += edge->len; + edge = PDF_PREVIOUS(edges, edge); + if (!edge || edge->mode != current_mode) { + mode_start--; + liste[0][mode_start] = mode_len; + liste[1][mode_start] = current_mode; + liste[2][mode_start] = current_from; + mode_len = 0; + } + } + *p_indexliste = length - mode_start; + if (mode_start) { + memmove(liste[0], liste[0] + mode_start, sizeof(int) * (*p_indexliste)); + memmove(liste[1], liste[1] + mode_start, sizeof(int) * (*p_indexliste)); + memmove(liste[2], liste[2] + mode_start, sizeof(int) * (*p_indexliste)); + } + if (debug_print) { + printf("modes (%d):", *p_indexliste); + for (i = 0; i < *p_indexliste; i++) printf(" %c(%d,%d)", pdf_smodes[liste[1][i]], liste[2][i], liste[0][i]); + printf("\n"); + } + + free(edges); + + return 1; } /* Initial processing of data, shared by `pdf417()` and `micropdf417()` */ static int pdf_initial(struct zint_symbol *symbol, const unsigned char chaine[], const int length, const int eci, - const int is_micro, int *p_lastmode, int *p_curtable, int *p_tex_padded, int chainemc[PDF_MAX_LEN], - int *p_mclength) { - int i, indexchaine, indexliste, mode; + const int is_micro, const int is_last_seg, int *p_lastmode, int *p_curtable, int *p_tex_padded, + int chainemc[PDF_MAX_LEN], int *p_mclength) { + int i, indexchaine = 0, indexliste = 0; int liste[3][PDF_MAX_LEN] = {{0}}; int mclength; const int debug_print = symbol->debug & ZINT_DEBUG_PRINT; + const int fast_encode = symbol->input_mode & FAST_MODE; /* 456 */ - indexliste = 0; - indexchaine = 0; - mode = pdf_quelmode(chaine[indexchaine]); + if (fast_encode) { + int mode = pdf_quelmode(chaine[0]); - /* 463 */ - do { - liste[1][indexliste] = mode; - liste[2][indexliste] = indexchaine; - while ((liste[1][indexliste] == mode) && (indexchaine < length)) { - liste[0][indexliste]++; - indexchaine++; - mode = pdf_quelmode(chaine[indexchaine]); + /* 463 */ + do { + liste[1][indexliste] = mode; + liste[2][indexliste] = indexchaine; + while ((liste[1][indexliste] == mode) && (indexchaine < length)) { + liste[0][indexliste]++; + indexchaine++; + mode = pdf_quelmode(chaine[indexchaine]); + } + indexliste++; + } while (indexchaine < length); + + if (debug_print) { + printf("\nInitial block pattern:\n"); + for (i = 0; i < indexliste; i++) { + printf("Start: %d Len: %d Type: %s\n", liste[2][i], liste[0][i], pdf_mode_str(liste[1][i])); + } } - indexliste++; - } while (indexchaine < length); - if (debug_print) { - printf("\nInitial block pattern:\n"); - for (i = 0; i < indexliste; i++) { - printf("Start: %d Len: %d Type: %s\n", liste[2][i], liste[0][i], pdf_mode_str(liste[1][i])); + pdf_appendix_d_encode(chaine, liste, &indexliste, debug_print); + } else { + if (!pdf_define_mode(liste, &indexliste, chaine, length, *p_lastmode, debug_print)) { + strcpy(symbol->errtxt, "749: Insufficient memory for mode buffers"); + return ZINT_ERROR_MEMORY; } } - pdf_appendix_d_encode(chaine, liste, &indexliste, debug_print); - if (debug_print) { printf("\nCompacted block pattern:\n"); for (i = 0; i < indexliste; i++) { - printf("Start: %d Len: %d Type: %s\n", liste[2][i], liste[0][i], pdf_mode_str(liste[1][i])); + printf("Start: %d Len: %d Type: %s\n", liste[2][i], liste[0][i], + pdf_mode_str(PDF_REAL_MODE(liste[1][i]))); } } @@ -652,28 +1066,38 @@ static int pdf_initial(struct zint_symbol *symbol, const unsigned char chaine[], } for (i = 0; i < indexliste; i++) { - switch (liste[1][i]) { - case TEX: /* 547 - text mode */ - pdf_textprocess(chainemc, &mclength, chaine, indexchaine, liste[0][i], *p_lastmode, p_curtable, - p_tex_padded); - *p_lastmode = TEX; + const int real_mode = PDF_REAL_MODE(liste[1][i]); + switch (real_mode) { + case PDF_TEX: /* 547 - text mode */ + if (fast_encode) { + pdf_textprocess(chainemc, &mclength, chaine, indexchaine, liste[0][i], *p_lastmode, is_last_seg, + p_curtable, p_tex_padded); + indexchaine += liste[0][i]; + *p_lastmode = PDF_ALP; + } else { + pdf_textprocess_minimal(chainemc, &mclength, chaine, liste, indexliste, *p_lastmode, is_last_seg, + p_curtable, p_tex_padded, &i); + indexchaine = i + 1 < indexliste ? liste[2][i + 1] : length; + *p_lastmode = PDF_TABLE_TO_MODE(*p_curtable); + } break; - case BYT: /* 670 - octet stream mode */ + case PDF_BYT: /* 670 - octet stream mode */ pdf_byteprocess(chainemc, &mclength, chaine, indexchaine, liste[0][i], *p_lastmode, debug_print); /* don't switch mode on single byte shift from text mode */ - if (*p_lastmode != TEX || liste[0][i] != 1) { - *p_lastmode = BYT; + if (PDF_REAL_MODE(*p_lastmode) != PDF_TEX || liste[0][i] != 1) { + *p_lastmode = PDF_BYT; } else if (*p_curtable == T_PUNCT && *p_tex_padded) { /* If T_PUNCT and padded with AL */ /* Then need to reset to alpha - ISO/IEC 15438:2015 5.4.2.4 b) 2) */ *p_curtable = T_ALPHA; } + indexchaine += liste[0][i]; break; - case NUM: /* 712 - numeric mode */ + case PDF_NUM: /* 712 - numeric mode */ pdf_numbprocess(chainemc, &mclength, chaine, indexchaine, liste[0][i]); - *p_lastmode = NUM; + *p_lastmode = PDF_NUM; + indexchaine += liste[0][i]; break; } - indexchaine = indexchaine + liste[0][i]; } *p_mclength = mclength; @@ -747,14 +1171,14 @@ static int pdf_initial_segs(struct zint_symbol *symbol, struct zint_seg segs[], /* Default mode for PDF417 is Text Compaction Alpha (ISO/IEC 15438:2015 5.4.2.1), and for MICROPDF417 is Byte * Compaction (ISO/IEC 24728:2006 5.4.3) */ - lastmode = is_micro ? BYT : TEX; + lastmode = is_micro ? PDF_BYT : PDF_ALP; /* Start in upper alpha - tracked across calls to `pdf_textprocess()` to allow for interleaving byte shifts */ curtable = T_ALPHA; for (i = 0; i < seg_count; i++) { - error_number = pdf_initial(symbol, segs[i].source, segs[i].length, segs[i].eci, is_micro, &lastmode, - &curtable, &tex_padded, chainemc, p_mclength); - if (error_number) { /* Only errors return >= ZINT_ERROR */ + error_number = pdf_initial(symbol, segs[i].source, segs[i].length, segs[i].eci, is_micro, i + 1 == seg_count, + &lastmode, &curtable, &tex_padded, chainemc, p_mclength); + if (error_number) { /* Only errors >= ZINT_ERROR returned */ return error_number; } } @@ -763,6 +1187,7 @@ static int pdf_initial_segs(struct zint_symbol *symbol, struct zint_seg segs[], } /* 366 */ +/* Encode PDF417 */ static int pdf_enc(struct zint_symbol *symbol, struct zint_seg segs[], const int seg_count) { int i, j, longueur, loop, mccorrection[520] = {0}, offset; int total, chainemc[PDF_MAX_LEN], mclength, c1, c2, c3, dummy[35]; @@ -1065,7 +1490,7 @@ INTERNAL int micropdf417(struct zint_symbol *symbol, struct zint_seg segs[], con int bp = 0; int structapp_cws[18] = {0}; /* 3 (Index) + 10 (ID) + 4 (Count) + 1 (Last) */ int structapp_cp = 0; - int variant, LeftRAPStart, CentreRAPStart, RightRAPStart, StartCluster; + int variant; int LeftRAP, CentreRAP, RightRAP, Cluster, loop; const int debug_print = symbol->debug & ZINT_DEBUG_PRINT; @@ -1302,17 +1727,13 @@ INTERNAL int micropdf417(struct zint_symbol *symbol, struct zint_seg segs[], con #endif /* Now get the RAP (Row Address Pattern) start values */ - LeftRAPStart = pdf_RAPTable[variant]; - CentreRAPStart = pdf_RAPTable[variant + 34]; - RightRAPStart = pdf_RAPTable[variant + 68]; - StartCluster = pdf_RAPTable[variant + 102] / 3; + LeftRAP = pdf_RAPTable[variant]; + CentreRAP = pdf_RAPTable[variant + 34]; + RightRAP = pdf_RAPTable[variant + 68]; + Cluster = pdf_RAPTable[variant + 102] / 3; /* That's all values loaded, get on with the encoding */ - LeftRAP = LeftRAPStart; - CentreRAP = CentreRAPStart; - RightRAP = RightRAPStart; - Cluster = StartCluster; /* Cluster can be 0, 1 or 2 for Cluster(0), Cluster(3) and Cluster(6) */ if (debug_print) printf("\nInternal row representation:\n"); @@ -1386,13 +1807,11 @@ INTERNAL int micropdf417(struct zint_symbol *symbol, struct zint_seg segs[], con return error_number; } -#undef TEX -#undef BYT -#undef NUM - #undef T_ALPHA #undef T_LOWER #undef T_MIXED #undef T_PUNCT +#undef T_ALWMX +#undef T_MXPNC /* vim: set ts=4 sw=4 et : */ diff --git a/backend/pdf417.h b/backend/pdf417.h index 139e55cc..f0578ea0 100644 --- a/backend/pdf417.h +++ b/backend/pdf417.h @@ -45,7 +45,7 @@ INTERNAL_DATA_EXTERN const unsigned short pdf_bitpattern[2787]; INTERNAL_DATA_EXTERN const unsigned short pdf_Microcoeffs[344]; /* rows, columns, error codewords, k-offset of valid MicroPDF417 sizes from ISO/IEC 24728:2006 */ -INTERNAL_DATA_EXTERN const unsigned short pdf_MicroVariants[170]; +INTERNAL_DATA_EXTERN const unsigned short pdf_MicroVariants[136]; /* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24728:2006 tables 10, 11 and 12 */ INTERNAL_DATA_EXTERN const char pdf_RAPTable[136]; @@ -56,8 +56,8 @@ INTERNAL_DATA_EXTERN const unsigned short pdf_rap_side[52]; /* Centre Row Address Pattern from Table 2 */ INTERNAL_DATA_EXTERN const unsigned short pdf_rap_centre[52]; -INTERNAL void pdf_byteprocess(int *chainemc, int *mclength, const unsigned char chaine[], int start, const int length, - const int lastmode, const int debug); +INTERNAL void pdf_byteprocess(int *chainemc, int *p_mclength, const unsigned char chaine[], int start, + const int length, const int lastmode, const int debug); /* vim: set ts=4 sw=4 et : */ #endif /* Z_PDF417_H */ diff --git a/backend/pdf417_tabs.h b/backend/pdf417_tabs.h index 0cb42cd1..59722a97 100644 --- a/backend/pdf417_tabs.h +++ b/backend/pdf417_tabs.h @@ -42,7 +42,7 @@ /* PDF417 error correction coefficients from Grand Zebu */ INTERNAL_DATA const unsigned short pdf_coefrs[1022] = { /* k = 2 */ - 27, 917, + 27, 917, /* k = 4 */ 522, 568, 723, 809, @@ -51,79 +51,79 @@ INTERNAL_DATA const unsigned short pdf_coefrs[1022] = { 237, 308, 436, 284, 646, 653, 428, 379, /* k = 16 */ - 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65, + 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65, /* k = 32 */ 361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517, - 273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410, + 273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410, /* k = 64 */ - 539, 422, 6, 93, 862, 771, 453, 106, 610, 287, 107, 505, 733, 877, 381, 612, + 539, 422, 6, 93, 862, 771, 453, 106, 610, 287, 107, 505, 733, 877, 381, 612, 723, 476, 462, 172, 430, 609, 858, 822, 543, 376, 511, 400, 672, 762, 283, 184, - 440, 35, 519, 31, 460, 594, 225, 535, 517, 352, 605, 158, 651, 201, 488, 502, - 648, 733, 717, 83, 404, 97, 280, 771, 840, 629, 4, 381, 843, 623, 264, 543, + 440, 35, 519, 31, 460, 594, 225, 535, 517, 352, 605, 158, 651, 201, 488, 502, + 648, 733, 717, 83, 404, 97, 280, 771, 840, 629, 4, 381, 843, 623, 264, 543, /* k = 128 */ - 521, 310, 864, 547, 858, 580, 296, 379, 53, 779, 897, 444, 400, 925, 749, 415, - 822, 93, 217, 208, 928, 244, 583, 620, 246, 148, 447, 631, 292, 908, 490, 704, - 516, 258, 457, 907, 594, 723, 674, 292, 272, 96, 684, 432, 686, 606, 860, 569, - 193, 219, 129, 186, 236, 287, 192, 775, 278, 173, 40, 379, 712, 463, 646, 776, - 171, 491, 297, 763, 156, 732, 95, 270, 447, 90, 507, 48, 228, 821, 808, 898, - 784, 663, 627, 378, 382, 262, 380, 602, 754, 336, 89, 614, 87, 432, 670, 616, - 157, 374, 242, 726, 600, 269, 375, 898, 845, 454, 354, 130, 814, 587, 804, 34, - 211, 330, 539, 297, 827, 865, 37, 517, 834, 315, 550, 86, 801, 4, 108, 539, + 521, 310, 864, 547, 858, 580, 296, 379, 53, 779, 897, 444, 400, 925, 749, 415, + 822, 93, 217, 208, 928, 244, 583, 620, 246, 148, 447, 631, 292, 908, 490, 704, + 516, 258, 457, 907, 594, 723, 674, 292, 272, 96, 684, 432, 686, 606, 860, 569, + 193, 219, 129, 186, 236, 287, 192, 775, 278, 173, 40, 379, 712, 463, 646, 776, + 171, 491, 297, 763, 156, 732, 95, 270, 447, 90, 507, 48, 228, 821, 808, 898, + 784, 663, 627, 378, 382, 262, 380, 602, 754, 336, 89, 614, 87, 432, 670, 616, + 157, 374, 242, 726, 600, 269, 375, 898, 845, 454, 354, 130, 814, 587, 804, 34, + 211, 330, 539, 297, 827, 865, 37, 517, 834, 315, 550, 86, 801, 4, 108, 539, /* k = 256 */ - 524, 894, 75, 766, 882, 857, 74, 204, 82, 586, 708, 250, 905, 786, 138, 720, + 524, 894, 75, 766, 882, 857, 74, 204, 82, 586, 708, 250, 905, 786, 138, 720, 858, 194, 311, 913, 275, 190, 375, 850, 438, 733, 194, 280, 201, 280, 828, 757, - 710, 814, 919, 89, 68, 569, 11, 204, 796, 605, 540, 913, 801, 700, 799, 137, + 710, 814, 919, 89, 68, 569, 11, 204, 796, 605, 540, 913, 801, 700, 799, 137, 439, 418, 592, 668, 353, 859, 370, 694, 325, 240, 216, 257, 284, 549, 209, 884, - 315, 70, 329, 793, 490, 274, 877, 162, 749, 812, 684, 461, 334, 376, 849, 521, - 307, 291, 803, 712, 19, 358, 399, 908, 103, 511, 51, 8, 517, 225, 289, 470, - 637, 731, 66, 255, 917, 269, 463, 830, 730, 433, 848, 585, 136, 538, 906, 90, - 2, 290, 743, 199, 655, 903, 329, 49, 802, 580, 355, 588, 188, 462, 10, 134, - 628, 320, 479, 130, 739, 71, 263, 318, 374, 601, 192, 605, 142, 673, 687, 234, - 722, 384, 177, 752, 607, 640, 455, 193, 689, 707, 805, 641, 48, 60, 732, 621, - 895, 544, 261, 852, 655, 309, 697, 755, 756, 60, 231, 773, 434, 421, 726, 528, - 503, 118, 49, 795, 32, 144, 500, 238, 836, 394, 280, 566, 319, 9, 647, 550, - 73, 914, 342, 126, 32, 681, 331, 792, 620, 60, 609, 441, 180, 791, 893, 754, - 605, 383, 228, 749, 760, 213, 54, 297, 134, 54, 834, 299, 922, 191, 910, 532, - 609, 829, 189, 20, 167, 29, 872, 449, 83, 402, 41, 656, 505, 579, 481, 173, - 404, 251, 688, 95, 497, 555, 642, 543, 307, 159, 924, 558, 648, 55, 497, 10, + 315, 70, 329, 793, 490, 274, 877, 162, 749, 812, 684, 461, 334, 376, 849, 521, + 307, 291, 803, 712, 19, 358, 399, 908, 103, 511, 51, 8, 517, 225, 289, 470, + 637, 731, 66, 255, 917, 269, 463, 830, 730, 433, 848, 585, 136, 538, 906, 90, + 2, 290, 743, 199, 655, 903, 329, 49, 802, 580, 355, 588, 188, 462, 10, 134, + 628, 320, 479, 130, 739, 71, 263, 318, 374, 601, 192, 605, 142, 673, 687, 234, + 722, 384, 177, 752, 607, 640, 455, 193, 689, 707, 805, 641, 48, 60, 732, 621, + 895, 544, 261, 852, 655, 309, 697, 755, 756, 60, 231, 773, 434, 421, 726, 528, + 503, 118, 49, 795, 32, 144, 500, 238, 836, 394, 280, 566, 319, 9, 647, 550, + 73, 914, 342, 126, 32, 681, 331, 792, 620, 60, 609, 441, 180, 791, 893, 754, + 605, 383, 228, 749, 760, 213, 54, 297, 134, 54, 834, 299, 922, 191, 910, 532, + 609, 829, 189, 20, 167, 29, 872, 449, 83, 402, 41, 656, 505, 579, 481, 173, + 404, 251, 688, 95, 497, 555, 642, 543, 307, 159, 924, 558, 648, 55, 497, 10, /* k = 512 */ - 352, 77, 373, 504, 35, 599, 428, 207, 409, 574, 118, 498, 285, 380, 350, 492, - 197, 265, 920, 155, 914, 299, 229, 643, 294, 871, 306, 88, 87, 193, 352, 781, - 846, 75, 327, 520, 435, 543, 203, 666, 249, 346, 781, 621, 640, 268, 794, 534, - 539, 781, 408, 390, 644, 102, 476, 499, 290, 632, 545, 37, 858, 916, 552, 41, - 542, 289, 122, 272, 383, 800, 485, 98, 752, 472, 761, 107, 784, 860, 658, 741, - 290, 204, 681, 407, 855, 85, 99, 62, 482, 180, 20, 297, 451, 593, 913, 142, - 808, 684, 287, 536, 561, 76, 653, 899, 729, 567, 744, 390, 513, 192, 516, 258, - 240, 518, 794, 395, 768, 848, 51, 610, 384, 168, 190, 826, 328, 596, 786, 303, - 570, 381, 415, 641, 156, 237, 151, 429, 531, 207, 676, 710, 89, 168, 304, 402, - 40, 708, 575, 162, 864, 229, 65, 861, 841, 512, 164, 477, 221, 92, 358, 785, - 288, 357, 850, 836, 827, 736, 707, 94, 8, 494, 114, 521, 2, 499, 851, 543, - 152, 729, 771, 95, 248, 361, 578, 323, 856, 797, 289, 51, 684, 466, 533, 820, - 669, 45, 902, 452, 167, 342, 244, 173, 35, 463, 651, 51, 699, 591, 452, 578, - 37, 124, 298, 332, 552, 43, 427, 119, 662, 777, 475, 850, 764, 364, 578, 911, - 283, 711, 472, 420, 245, 288, 594, 394, 511, 327, 589, 777, 699, 688, 43, 408, - 842, 383, 721, 521, 560, 644, 714, 559, 62, 145, 873, 663, 713, 159, 672, 729, - 624, 59, 193, 417, 158, 209, 563, 564, 343, 693, 109, 608, 563, 365, 181, 772, - 677, 310, 248, 353, 708, 410, 579, 870, 617, 841, 632, 860, 289, 536, 35, 777, - 618, 586, 424, 833, 77, 597, 346, 269, 757, 632, 695, 751, 331, 247, 184, 45, - 787, 680, 18, 66, 407, 369, 54, 492, 228, 613, 830, 922, 437, 519, 644, 905, - 789, 420, 305, 441, 207, 300, 892, 827, 141, 537, 381, 662, 513, 56, 252, 341, - 242, 797, 838, 837, 720, 224, 307, 631, 61, 87, 560, 310, 756, 665, 397, 808, - 851, 309, 473, 795, 378, 31, 647, 915, 459, 806, 590, 731, 425, 216, 548, 249, - 321, 881, 699, 535, 673, 782, 210, 815, 905, 303, 843, 922, 281, 73, 469, 791, - 660, 162, 498, 308, 155, 422, 907, 817, 187, 62, 16, 425, 535, 336, 286, 437, - 375, 273, 610, 296, 183, 923, 116, 667, 751, 353, 62, 366, 691, 379, 687, 842, - 37, 357, 720, 742, 330, 5, 39, 923, 311, 424, 242, 749, 321, 54, 669, 316, - 342, 299, 534, 105, 667, 488, 640, 672, 576, 540, 316, 486, 721, 610, 46, 656, - 447, 171, 616, 464, 190, 531, 297, 321, 762, 752, 533, 175, 134, 14, 381, 433, - 717, 45, 111, 20, 596, 284, 736, 138, 646, 411, 877, 669, 141, 919, 45, 780, + 352, 77, 373, 504, 35, 599, 428, 207, 409, 574, 118, 498, 285, 380, 350, 492, + 197, 265, 920, 155, 914, 299, 229, 643, 294, 871, 306, 88, 87, 193, 352, 781, + 846, 75, 327, 520, 435, 543, 203, 666, 249, 346, 781, 621, 640, 268, 794, 534, + 539, 781, 408, 390, 644, 102, 476, 499, 290, 632, 545, 37, 858, 916, 552, 41, + 542, 289, 122, 272, 383, 800, 485, 98, 752, 472, 761, 107, 784, 860, 658, 741, + 290, 204, 681, 407, 855, 85, 99, 62, 482, 180, 20, 297, 451, 593, 913, 142, + 808, 684, 287, 536, 561, 76, 653, 899, 729, 567, 744, 390, 513, 192, 516, 258, + 240, 518, 794, 395, 768, 848, 51, 610, 384, 168, 190, 826, 328, 596, 786, 303, + 570, 381, 415, 641, 156, 237, 151, 429, 531, 207, 676, 710, 89, 168, 304, 402, + 40, 708, 575, 162, 864, 229, 65, 861, 841, 512, 164, 477, 221, 92, 358, 785, + 288, 357, 850, 836, 827, 736, 707, 94, 8, 494, 114, 521, 2, 499, 851, 543, + 152, 729, 771, 95, 248, 361, 578, 323, 856, 797, 289, 51, 684, 466, 533, 820, + 669, 45, 902, 452, 167, 342, 244, 173, 35, 463, 651, 51, 699, 591, 452, 578, + 37, 124, 298, 332, 552, 43, 427, 119, 662, 777, 475, 850, 764, 364, 578, 911, + 283, 711, 472, 420, 245, 288, 594, 394, 511, 327, 589, 777, 699, 688, 43, 408, + 842, 383, 721, 521, 560, 644, 714, 559, 62, 145, 873, 663, 713, 159, 672, 729, + 624, 59, 193, 417, 158, 209, 563, 564, 343, 693, 109, 608, 563, 365, 181, 772, + 677, 310, 248, 353, 708, 410, 579, 870, 617, 841, 632, 860, 289, 536, 35, 777, + 618, 586, 424, 833, 77, 597, 346, 269, 757, 632, 695, 751, 331, 247, 184, 45, + 787, 680, 18, 66, 407, 369, 54, 492, 228, 613, 830, 922, 437, 519, 644, 905, + 789, 420, 305, 441, 207, 300, 892, 827, 141, 537, 381, 662, 513, 56, 252, 341, + 242, 797, 838, 837, 720, 224, 307, 631, 61, 87, 560, 310, 756, 665, 397, 808, + 851, 309, 473, 795, 378, 31, 647, 915, 459, 806, 590, 731, 425, 216, 548, 249, + 321, 881, 699, 535, 673, 782, 210, 815, 905, 303, 843, 922, 281, 73, 469, 791, + 660, 162, 498, 308, 155, 422, 907, 817, 187, 62, 16, 425, 535, 336, 286, 437, + 375, 273, 610, 296, 183, 923, 116, 667, 751, 353, 62, 366, 691, 379, 687, 842, + 37, 357, 720, 742, 330, 5, 39, 923, 311, 424, 242, 749, 321, 54, 669, 316, + 342, 299, 534, 105, 667, 488, 640, 672, 576, 540, 316, 486, 721, 610, 46, 656, + 447, 171, 616, 464, 190, 531, 297, 321, 762, 752, 533, 175, 134, 14, 381, 433, + 717, 45, 111, 20, 596, 284, 736, 138, 646, 411, 877, 669, 141, 919, 45, 780, 407, 164, 332, 899, 165, 726, 600, 325, 498, 655, 357, 752, 768, 223, 849, 647, - 63, 310, 863, 251, 366, 304, 282, 738, 675, 410, 389, 244, 31, 121, 303, 263 + 63, 310, 863, 251, 366, 304, 282, 738, 675, 410, 389, 244, 31, 121, 303, 263 }; INTERNAL_DATA const unsigned short pdf_bitpattern[2787] = { @@ -411,7 +411,7 @@ INTERNAL_DATA const unsigned short pdf_bitpattern[2787] = { /* MicroPDF417 coefficients from ISO/IEC 24728:2006 Annex F */ INTERNAL_DATA const unsigned short pdf_Microcoeffs[344] = { /* k = 7 */ - 76, 925, 537, 597, 784, 691, 437, + 76, 925, 537, 597, 784, 691, 437, /* k = 8 */ 237, 308, 436, 284, 646, 653, 428, 379, @@ -420,13 +420,13 @@ INTERNAL_DATA const unsigned short pdf_Microcoeffs[344] = { 567, 527, 622, 257, 289, 362, 501, 441, 205, /* k = 10 */ - 377, 457, 64, 244, 826, 841, 818, 691, 266, 612, + 377, 457, 64, 244, 826, 841, 818, 691, 266, 612, /* k = 11 */ - 462, 45, 565, 708, 825, 213, 15, 68, 327, 602, 904, + 462, 45, 565, 708, 825, 213, 15, 68, 327, 602, 904, /* k = 12 */ - 597, 864, 757, 201, 646, 684, 347, 127, 388, 7, 69, 851, + 597, 864, 757, 201, 646, 684, 347, 127, 388, 7, 69, 851, /* k = 13 */ 764, 713, 342, 384, 606, 583, 322, 592, 678, 204, 184, 394, 692, @@ -435,13 +435,13 @@ INTERNAL_DATA const unsigned short pdf_Microcoeffs[344] = { 669, 677, 154, 187, 241, 286, 274, 354, 478, 915, 691, 833, 105, 215, /* k = 15 */ - 460, 829, 476, 109, 904, 664, 230, 5, 80, 74, 550, 575, 147, 868, 642, + 460, 829, 476, 109, 904, 664, 230, 5, 80, 74, 550, 575, 147, 868, 642, /* k = 16 */ - 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65, + 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65, /* k = 18 */ - 279, 577, 315, 624, 37, 855, 275, 739, 120, 297, 312, 202, 560, 321, 233, 756, + 279, 577, 315, 624, 37, 855, 275, 739, 120, 297, 312, 202, 560, 321, 233, 756, 760, 573, /* k = 21 */ @@ -449,45 +449,45 @@ INTERNAL_DATA const unsigned short pdf_Microcoeffs[344] = { 347, 165, 193, 259, 568, /* k = 26 */ - 443, 284, 887, 544, 788, 93, 477, 760, 331, 608, 269, 121, 159, 830, 446, 893, + 443, 284, 887, 544, 788, 93, 477, 760, 331, 608, 269, 121, 159, 830, 446, 893, 699, 245, 441, 454, 325, 858, 131, 847, 764, 169, /* k = 32 */ 361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517, - 273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410, + 273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410, /* k = 38 */ 234, 228, 438, 848, 133, 703, 529, 721, 788, 322, 280, 159, 738, 586, 388, 684, - 445, 680, 245, 595, 614, 233, 812, 32, 284, 658, 745, 229, 95, 689, 920, 771, + 445, 680, 245, 595, 614, 233, 812, 32, 284, 658, 745, 229, 95, 689, 920, 771, 554, 289, 231, 125, 117, 518, /* k = 44 */ - 476, 36, 659, 848, 678, 64, 764, 840, 157, 915, 470, 876, 109, 25, 632, 405, - 417, 436, 714, 60, 376, 97, 413, 706, 446, 21, 3, 773, 569, 267, 272, 213, - 31, 560, 231, 758, 103, 271, 572, 436, 339, 730, 82, 285, + 476, 36, 659, 848, 678, 64, 764, 840, 157, 915, 470, 876, 109, 25, 632, 405, + 417, 436, 714, 60, 376, 97, 413, 706, 446, 21, 3, 773, 569, 267, 272, 213, + 31, 560, 231, 758, 103, 271, 572, 436, 339, 730, 82, 285, /* k = 50 */ - 923, 797, 576, 875, 156, 706, 63, 81, 257, 874, 411, 416, 778, 50, 205, 303, - 188, 535, 909, 155, 637, 230, 534, 96, 575, 102, 264, 233, 919, 593, 865, 26, - 579, 623, 766, 146, 10, 739, 246, 127, 71, 244, 211, 477, 920, 876, 427, 820, + 923, 797, 576, 875, 156, 706, 63, 81, 257, 874, 411, 416, 778, 50, 205, 303, + 188, 535, 909, 155, 637, 230, 534, 96, 575, 102, 264, 233, 919, 593, 865, 26, + 579, 623, 766, 146, 10, 739, 246, 127, 71, 244, 211, 477, 920, 876, 427, 820, 718, 435 }; /* rows, columns, error codewords, k-offset of valid MicroPDF417 sizes from ISO/IEC 24728:2006 */ -INTERNAL_DATA const unsigned short pdf_MicroVariants[170] = { - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 11, 14, 17, 20, 24, 28, 8, 11, 14, 17, 20, 23, 26, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, 4, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, - 7, 7, 7, 8, 8, 8, 8, 9, 9, 10, 11, 13, 15, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, 8, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, - 0, 0, 0, 7, 7, 7, 7, 15, 15, 24, 34, 57, 84, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294, 7, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294 +INTERNAL_DATA const unsigned short pdf_MicroVariants[136] = { /*34*4*/ + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 11, 14, 17, 20, 24, 28, 8, 11, 14, 17, 20, 23, 26, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, 4, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, + 7, 7, 7, 8, 8, 8, 8, 9, 9, 10, 11, 13, 15, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, 8, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, + 0, 0, 0, 7, 7, 7, 7, 15, 15, 24, 34, 57, 84, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294, 7, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294 }; /* rows, columns, error codewords, k-offset */ /* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24728:2006 tables 10, 11 and 12 */ -INTERNAL_DATA const char pdf_RAPTable[136] = { - 1, 8, 36, 19, 9, 25, 1, 1, 8, 36, 19, 9, 27, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, 47, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, 19, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, - 9, 8, 36, 19, 17, 33, 1, 9, 8, 36, 19, 17, 35, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, 43, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, - 0, 3, 6, 0, 6, 0, 0, 0, 3, 6, 0, 6, 6, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0, 3, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0 +INTERNAL_DATA const char pdf_RAPTable[136] = { /*34*4*/ + 1, 8, 36, 19, 9, 25, 1, 1, 8, 36, 19, 9, 27, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, 47, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, 19, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, + 9, 8, 36, 19, 17, 33, 1, 9, 8, 36, 19, 17, 35, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, 43, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, + 0, 3, 6, 0, 6, 0, 0, 0, 3, 6, 0, 6, 6, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0, 3, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0 }; /* Left and Right Row Address Pattern from Table 2 */ diff --git a/backend/pdf417_trace.h b/backend/pdf417_trace.h new file mode 100644 index 00000000..e7acbf44 --- /dev/null +++ b/backend/pdf417_trace.h @@ -0,0 +1,136 @@ +/* pdf417_trace.h - Trace routines for optimal PDF417 optimization algorithm */ +/* + libzint - the open source barcode library + Copyright (C) 2022 Robin Stuart + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + */ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef Z_PDF417_TRACE_H +#define Z_PDF417_TRACE_H + +#ifndef PDF_TRACE +#define PDF_TRACE_Edges(px, s, l, p, v) +#define PDF_TRACE_AddEdge(s, l, es, p, v, t, e) do { (void)(s); (void)(l); } while (0) +#define PDF_TRACE_NotAddEdge(s, l, es, p, v, t, e) do { (void)(s); (void)(l); } while (0) +#else + +static int PDF_TRACE_getPreviousMode(struct pdf_edge *edges, struct pdf_edge *edge) { + struct pdf_edge *previous = PDF_PREVIOUS(edges, edge); + return previous == NULL ? PDF_ALP : previous->mode; +} + +static void PDF_TRACE_EdgeToString(char *buf, const unsigned char *source, const int length, struct pdf_edge *edges, + struct pdf_edge *edge) { + int previousMode = PDF_TRACE_getPreviousMode(edges, edge); + (void)length; + if (buf) { + sprintf(buf, "%d_%c %c(%d,%d) %d(%d,%d,%d) -> %d_%c", + edge->from, pdf_smodes[previousMode], pdf_smodes[edge->mode], source[edge->from], edge->len, edge->size + + edge->unit_size, edge->units, edge->unit_size, edge->size, edge->from + 1, pdf_smodes[edge->mode]); + } else { + printf("%d_%c %c(%d,%d) %d(%d,%d,%d) -> %d_%c", + edge->from, pdf_smodes[previousMode], pdf_smodes[edge->mode], source[edge->from], edge->len, edge->size + + edge->unit_size, edge->units, edge->unit_size, edge->size, edge->from + 1, pdf_smodes[edge->mode]); + } +} + +static void PDF_TRACE_Path(const unsigned char *source, const int length, struct pdf_edge *edges, + struct pdf_edge *edge, char *result, const int result_size) { + PDF_TRACE_EdgeToString(result, source, length, edges, edge); + struct pdf_edge *current = PDF_PREVIOUS(edges, edge); + while (current) { + char s[256]; + char *pos; + int len; + PDF_TRACE_EdgeToString(s, source, length, edges, current); + pos = strrchr(s, ' '); + assert(pos); + len = strlen(result); + if ((pos - s) + 1 + len + 1 >= result_size) { + result[result_size - 4] = '\0'; + strcat(result, "..."); + break; + } + memmove(result + (pos - s) + 1, result, len + 1); + memcpy(result, s, (pos - s) + 1); + current = PDF_PREVIOUS(edges, current); + } + puts(result); +} + +static void PDF_TRACE_Edges(const char *prefix, const unsigned char *source, const int length, + struct pdf_edge *edges, const int vertexIndex) { + int i, j, e_i; + char result[1024 * 2]; + if (vertexIndex) { + printf(prefix, vertexIndex); + } else { + fputs(prefix, stdout); + } + for (i = vertexIndex; i <= length; i++) { + e_i = i * PDF_NUM_MODES; + for (j = 0; j < PDF_NUM_MODES; j++) { + if (edges[e_i + j].mode) { + fputs(" **** ", stdout); + PDF_TRACE_Path(source, length, edges, edges + e_i + j, result, (int) ARRAY_SIZE(result)); + } + } + } +} + +static void PDF_TRACE_AddEdge(const unsigned char *source, const int length, struct pdf_edge *edges, + struct pdf_edge *previous, const int vertexIndex, const int t_table, struct pdf_edge *edge) { + const int new_size = edge->size + edge->unit_size; + const int v_ij = vertexIndex * PDF_NUM_MODES + edge->mode - 1; + const int v_size = edges[v_ij].size + edges[v_ij].unit_size; + + (void)source; (void)length; + + printf("add mode %c, t_table 0x%X, previous %d, from %d, len %d, v_ij %d, %d(%d,%d,%d) > %d(%d,%d,%d)\n", + pdf_smodes[edge->mode], t_table, previous ? (int) (previous - edges) : 0, edge->from, edge->len, v_ij, + v_size, edges[v_ij].units, edges[v_ij].unit_size, edges[v_ij].size, + new_size, edge->units, edge->unit_size, edge->size); +} + +static void PDF_TRACE_NotAddEdge(const unsigned char *source, const int length, struct pdf_edge *edges, + struct pdf_edge *previous, const int vertexIndex, const int t_table, struct pdf_edge *edge) { + const int new_size = edge->size + edge->unit_size; + const int v_ij = vertexIndex * PDF_NUM_MODES + edge->mode - 1; + const int v_size = edges[v_ij].size + edges[v_ij].unit_size; + + (void)source; (void)length; + + printf("NOT mode %c, t_table %d, previous %d, from %d, len %d, v_ij %d, %d(%d,%d,%d) <= %d(%d,%d,%d)\n", + pdf_smodes[edge->mode], t_table, previous ? (int) (previous - edges) : 0, edge->from, edge->len, v_ij, + v_size, edges[v_ij].units, edges[v_ij].unit_size, edges[v_ij].size, + new_size, edge->units, edge->unit_size, edge->size); +} + +#endif /* PDF_TRACE */ +/* vim: set ts=4 sw=4 et : */ +#endif /* Z_PDF417_TRACE_H */ diff --git a/backend/tests/test_pdf417.c b/backend/tests/test_pdf417.c index 23c6a5a6..0996246c 100644 --- a/backend/tests/test_pdf417.c +++ b/backend/tests/test_pdf417.c @@ -92,6 +92,19 @@ static void test_large(const testCtx *const p_ctx) { } assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected_errtxt); + /* FAST_MODE */ + + length = testUtilSetSymbol(symbol, data[i].symbology, FAST_MODE, -1 /*eci*/, data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, data_buf, data[i].length, debug); + + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); + + if (ret < ZINT_ERROR) { + assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, symbol->errtxt); + assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width); + } + assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected_errtxt); + ZBarcode_Delete(symbol); } @@ -323,58 +336,95 @@ static void test_input(const testCtx *const p_ctx) { /* é U+00E9 (\351, 233), UTF-8 C3A9 */ /* β U+03B2 in ISO 8859-7 Greek (but not other ISO 8859 or Win page) (\342, 226), UTF-8 CEB2 */ struct item data[] = { - /* 0*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "é", 0, 0, 6, 103, "(12) 4 913 233 900 398 878 279 350 217 295 231 77", 1, "" }, - /* 1*/ { BARCODE_PDF417, UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "é", 0, 3, 7, 103, "(14) 6 927 3 913 233 900 162 81 551 529 607 384 164 108", 1, "" }, - /* 2*/ { BARCODE_PDF417, UNICODE_MODE, 26, -1, -1, { 0, 0, "" }, "é", 0, 26, 7, 103, "(14) 6 927 26 901 195 169 574 701 519 908 84 241 360 642", 1, "" }, - /* 3*/ { BARCODE_PDF417, UNICODE_MODE, 9, -1, -1, { 0, 0, "" }, "β", 0, 9, 7, 103, "(14) 6 927 9 913 226 900 487 92 418 278 838 500 576 84", 1, "" }, - /* 4*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 7, 103, "Warning (14) 6 927 9 913 226 900 487 92 418 278 838 500 576 84", 1, "" }, - /* 5*/ { BARCODE_PDF417, UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "β", ZINT_ERROR_INVALID_DATA, 3, 0, 0, "Error 244: Invalid character in input data for ECI 3", 1, "" }, - /* 6*/ { BARCODE_PDF417, UNICODE_MODE, 899, -1, -1, { 0, 0, "" }, "A", 0, 899, 6, 103, "(12) 4 927 899 29 567 272 3 384 796 210 839 746", 0, "BWIPP BYTE1" }, - /* 7*/ { BARCODE_PDF417, UNICODE_MODE, 900, -1, -1, { 0, 0, "" }, "A", 0, 900, 7, 103, "(14) 6 926 0 0 29 900 205 526 248 527 915 616 104 416", 0, "BWIPP BYTE1" }, - /* 8*/ { BARCODE_PDF417, UNICODE_MODE, 810899, -1, -1, { 0, 0, "" }, "A", 0, 810899, 7, 103, "(14) 6 926 899 899 29 900 67 632 76 482 536 212 354 560", 0, "BWIPP BYTE1" }, - /* 9*/ { BARCODE_PDF417, UNICODE_MODE, 810900, -1, -1, { 0, 0, "" }, "A", 0, 810900, 6, 103, "(12) 4 925 0 29 682 61 599 519 256 742 797 153", 0, "BWIPP BYTE1" }, - /* 10*/ { BARCODE_PDF417, UNICODE_MODE, 811799, -1, -1, { 0, 0, "" }, "A", 0, 811799, 6, 103, "(12) 4 925 899 29 447 238 770 706 58 39 749 743", 0, "BWIPP BYTE1" }, - /* 11*/ { BARCODE_PDF417, UNICODE_MODE, 811800, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, 811800, 0, 0, "Error 472: Invalid ECI", 1, "" }, - /* 12*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "é", 0, 0, 11, 38, "(11) 901 233 900 900 310 142 569 141 677 300 494", 1, "" }, - /* 13*/ { BARCODE_MICROPDF417, UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "é", 0, 3, 11, 38, "(11) 927 3 901 233 657 863 824 246 172 292 833", 1, "" }, - /* 14*/ { BARCODE_MICROPDF417, UNICODE_MODE, 26, -1, 3, { 0, 0, "" }, "é", 0, 26, 6, 82, "(18) 927 26 901 195 169 900 288 96 509 365 709 784 713 403 219 81 851 866", 1, "" }, - /* 15*/ { BARCODE_MICROPDF417, UNICODE_MODE, 9, -1, -1, { 0, 0, "" }, "β", 0, 9, 11, 38, "(11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, - /* 16*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 11, 38, "Warning (11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, - /* 17*/ { BARCODE_MICROPDF417, UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "β", ZINT_ERROR_INVALID_DATA, 3, 0, 0, "Error 244: Invalid character in input data for ECI 3", 1, "" }, - /* 18*/ { BARCODE_MICROPDF417, UNICODE_MODE, 899, -1, -1, { 0, 0, "" }, "A", 0, 899, 11, 38, "(11) 927 899 900 29 533 437 884 3 617 241 747", 0, "BWIPP BYTE" }, - /* 19*/ { BARCODE_MICROPDF417, UNICODE_MODE, 900, -1, -1, { 0, 0, "" }, "A", 0, 900, 6, 82, "(18) 926 0 0 900 29 900 913 543 414 141 214 886 461 1 419 422 54 495", 0, "BWIPP BYTE" }, - /* 20*/ { BARCODE_MICROPDF417, UNICODE_MODE, 810899, -1, -1, { 0, 0, "" }, "A", 0, 810899, 6, 82, "(18) 926 899 899 900 29 900 351 555 241 509 787 583 3 326 41 628 534 151", 0, "BWIPP BYTE" }, - /* 21*/ { BARCODE_MICROPDF417, UNICODE_MODE, 810900, -1, -1, { 0, 0, "" }, "A", 0, 810900, 11, 38, "(11) 925 0 900 29 233 533 43 483 708 659 704", 0, "BWIPP BYTE" }, - /* 22*/ { BARCODE_MICROPDF417, UNICODE_MODE, 811800, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, 811800, 0, 0, "Error 472: Invalid ECI", 0, "BWIPP BYTE" }, - /* 23*/ { BARCODE_HIBC_PDF, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, ",", ZINT_ERROR_INVALID_DATA, 0, 0, 0, "Error 203: Invalid character in data (alphanumerics, space and \"-.$/+%\" only)", 1, "" }, - /* 24*/ { BARCODE_HIBC_MICPDF, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, ",", ZINT_ERROR_INVALID_DATA, 0, 0, 0, "Error 203: Invalid character in data (alphanumerics, space and \"-.$/+%\" only)", 1, "" }, - /* 25*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "AB{} C#+ de{} {}F 12{} G{} H", 0, 0, 12, 120, "(36) 28 1 865 807 896 782 855 626 807 94 865 807 896 808 776 839 176 808 32 776 839 806 208", 0, "BWIPP different encodation (1 codeword shorter)" }, - /* 26*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "{} #+ de{} 12{} {} H", 0, 0, 10, 120, "(30) 22 865 807 896 808 470 807 94 865 807 896 808 32 776 839 806 865 807 896 787 900 900", 0, "BWIPP different encodation" }, - /* 27*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", 0, 0, 5, 103, "(10) 2 29 478 509 903 637 74 490 760 21", 0, "BWIPP BYTE1" }, - /* 28*/ { BARCODE_PDF417, UNICODE_MODE, -1, 0, -1, { 0, 0, "" }, "A", 0, 0, 4, 86, "(4) 2 29 347 502", 0, "BWIPP BYTE1" }, - /* 29*/ { BARCODE_PDF417, UNICODE_MODE, -1, 1, -1, { 0, 0, "" }, "A", 0, 0, 6, 86, "(6) 2 29 752 533 551 139", 0, "BWIPP BYTE1" }, - /* 30*/ { BARCODE_PDF417, UNICODE_MODE, -1, 2, -1, { 0, 0, "" }, "A", 0, 0, 5, 103, "(10) 2 29 478 509 903 637 74 490 760 21", 0, "BWIPP BYTE1" }, - /* 31*/ { BARCODE_PDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, "A", 0, 0, 9, 103, "(18) 2 29 290 888 64 789 390 182 22 197 347 41 298 467 387 917 455 196", 0, "BWIPP BYTE1" }, - /* 32*/ { BARCODE_PDF417, UNICODE_MODE, -1, 4, -1, { 0, 0, "" }, "A", 0, 0, 12, 120, "(36) 4 29 900 900 702 212 753 721 695 584 222 459 110 594 813 465 718 912 667 349 852 602", 0, "BWIPP BYTE1" }, - /* 33*/ { BARCODE_PDF417, UNICODE_MODE, -1, 5, -1, { 0, 0, "" }, "A", 0, 0, 14, 154, "(70) 6 29 900 900 900 900 774 599 527 418 850 374 921 763 922 772 572 661 584 902 578 696", 0, "BWIPP BYTE1" }, - /* 34*/ { BARCODE_PDF417, UNICODE_MODE, -1, 6, -1, { 0, 0, "" }, "A", 0, 0, 19, 188, "(133) 5 29 900 900 900 113 261 822 368 600 652 404 869 860 902 184 702 611 323 195 794 566", 0, "BWIPP BYTE1" }, - /* 35*/ { BARCODE_PDF417, UNICODE_MODE, -1, 7, -1, { 0, 0, "" }, "A", 0, 0, 29, 222, "(261) 5 29 900 900 900 384 614 456 20 422 177 78 492 215 859 765 864 755 572 621 891 97 538", 0, "BWIPP BYTE1" }, - /* 36*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 0, 0, "" }, "A", 0, 0, 40, 290, "(520) 8 29 900 900 900 900 900 900 255 576 871 499 885 500 866 196 784 681 589 448 428 108", 0, "BWIPP BYTE1" }, - /* 37*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 1, 4, "017053" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 928 111 100 17 53 923 1 111 104 903 71", 1, "H.4 example" }, - /* 38*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 4, 4, "017053" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 928 111 103 17 53 923 1 111 104 922 772 754", 1, "H.4 example last segment" }, - /* 39*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 2, 4, "" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 900 900 928 111 101 923 1 111 104 583", 1, "No ID" }, - /* 40*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 99998, 99999, "12345" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 928 222 197 123 45 923 1 222 199 198", 1, "IDs '123', '045'" }, - /* 41*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 1, 4, "017053" }, "A", 0, 0, 6, 99, "(24) 900 29 900 928 111 100 17 53 923 1 111 104 430 136 328 218 796 853 32 421 712 477 363", 1, "H.4 example" }, - /* 42*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 4, 4, "017053" }, "A", 0, 0, 6, 99, "(24) 900 29 928 111 103 17 53 923 1 111 104 922 837 837 774 835 701 445 926 428 285 851 334", 1, "H.4 example last segment" }, - /* 43*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 3, 4, "" }, "A", 0, 0, 17, 38, "(17) 900 29 900 928 111 102 923 1 111 104 343 717 634 693 618 860 618", 1, "No ID" }, - /* 44*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 99999, 99999, "100200300" }, "A", 0, 0, 11, 55, "(22) 900 29 928 222 198 100 200 300 923 1 222 199 922 693 699 895 719 637 154 478 399 638", 1, "IDs '100', '200', '300'" }, - /* 45*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, "123456", 0, 0, 7, 103, "(14) 6 902 1 348 256 900 759 577 359 263 64 409 852 154", 0, "BWIPP BYTE" }, - /* 46*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, "12345678901234567890", 0, 0, 9, 103, "(18) 10 902 211 358 354 304 269 753 190 900 327 902 163 367 231 586 808 731", 1, "" }, - /* 47*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, 0, 12, 137, "(48) 40 902 491 81 137 450 302 67 15 174 492 862 667 475 869 12 434 685 326 422 57 117 339", 1, "" }, + /* 0*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "é", 0, 0, 6, 103, "(12) 4 913 233 900 398 878 279 350 217 295 231 77", 1, "" }, + /* 1*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "é", 0, 0, 6, 103, "(12) 4 913 233 900 398 878 279 350 217 295 231 77", 1, "" }, + /* 2*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 3, -1, -1, { 0, 0, "" }, "é", 0, 3, 7, 103, "(14) 6 927 3 913 233 900 162 81 551 529 607 384 164 108", 1, "" }, + /* 3*/ { BARCODE_PDF417, UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "é", 0, 3, 7, 103, "(14) 6 927 3 913 233 900 162 81 551 529 607 384 164 108", 1, "" }, + /* 4*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 26, -1, -1, { 0, 0, "" }, "é", 0, 26, 7, 103, "(14) 6 927 26 901 195 169 574 701 519 908 84 241 360 642", 1, "" }, + /* 5*/ { BARCODE_PDF417, UNICODE_MODE, 26, -1, -1, { 0, 0, "" }, "é", 0, 26, 7, 103, "(14) 6 927 26 901 195 169 574 701 519 908 84 241 360 642", 1, "" }, + /* 6*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 9, -1, -1, { 0, 0, "" }, "β", 0, 9, 7, 103, "(14) 6 927 9 913 226 900 487 92 418 278 838 500 576 84", 1, "" }, + /* 7*/ { BARCODE_PDF417, UNICODE_MODE, 9, -1, -1, { 0, 0, "" }, "β", 0, 9, 7, 103, "(14) 6 927 9 913 226 900 487 92 418 278 838 500 576 84", 1, "" }, + /* 8*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 7, 103, "Warning (14) 6 927 9 913 226 900 487 92 418 278 838 500 576 84", 1, "" }, + /* 9*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 7, 103, "Warning (14) 6 927 9 913 226 900 487 92 418 278 838 500 576 84", 1, "" }, + /* 10*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 3, -1, -1, { 0, 0, "" }, "β", ZINT_ERROR_INVALID_DATA, 3, 0, 0, "Error 244: Invalid character in input data for ECI 3", 1, "" }, + /* 11*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 899, -1, -1, { 0, 0, "" }, "A", 0, 899, 6, 103, "(12) 4 927 899 29 567 272 3 384 796 210 839 746", 0, "BWIPP BYTE1" }, + /* 12*/ { BARCODE_PDF417, UNICODE_MODE, 899, -1, -1, { 0, 0, "" }, "A", 0, 899, 6, 103, "(12) 4 927 899 29 567 272 3 384 796 210 839 746", 0, "BWIPP BYTE1" }, + /* 13*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 900, -1, -1, { 0, 0, "" }, "A", 0, 900, 7, 103, "(14) 6 926 0 0 29 900 205 526 248 527 915 616 104 416", 0, "BWIPP BYTE1" }, + /* 14*/ { BARCODE_PDF417, UNICODE_MODE, 900, -1, -1, { 0, 0, "" }, "A", 0, 900, 7, 103, "(14) 6 926 0 0 29 900 205 526 248 527 915 616 104 416", 0, "BWIPP BYTE1" }, + /* 15*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 810899, -1, -1, { 0, 0, "" }, "A", 0, 810899, 7, 103, "(14) 6 926 899 899 29 900 67 632 76 482 536 212 354 560", 0, "BWIPP BYTE1" }, + /* 16*/ { BARCODE_PDF417, UNICODE_MODE, 810899, -1, -1, { 0, 0, "" }, "A", 0, 810899, 7, 103, "(14) 6 926 899 899 29 900 67 632 76 482 536 212 354 560", 0, "BWIPP BYTE1" }, + /* 17*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 810900, -1, -1, { 0, 0, "" }, "A", 0, 810900, 6, 103, "(12) 4 925 0 29 682 61 599 519 256 742 797 153", 0, "BWIPP BYTE1" }, + /* 18*/ { BARCODE_PDF417, UNICODE_MODE, 810900, -1, -1, { 0, 0, "" }, "A", 0, 810900, 6, 103, "(12) 4 925 0 29 682 61 599 519 256 742 797 153", 0, "BWIPP BYTE1" }, + /* 19*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 811799, -1, -1, { 0, 0, "" }, "A", 0, 811799, 6, 103, "(12) 4 925 899 29 447 238 770 706 58 39 749 743", 0, "BWIPP BYTE1" }, + /* 20*/ { BARCODE_PDF417, UNICODE_MODE, 811799, -1, -1, { 0, 0, "" }, "A", 0, 811799, 6, 103, "(12) 4 925 899 29 447 238 770 706 58 39 749 743", 0, "BWIPP BYTE1" }, + /* 21*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, 811800, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, 811800, 0, 0, "Error 472: Invalid ECI", 1, "" }, + /* 22*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "é", 0, 0, 11, 38, "(11) 901 233 900 900 310 142 569 141 677 300 494", 1, "" }, + /* 23*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "é", 0, 0, 11, 38, "(11) 901 233 900 900 310 142 569 141 677 300 494", 1, "" }, + /* 24*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 3, -1, -1, { 0, 0, "" }, "é", 0, 3, 11, 38, "(11) 927 3 901 233 657 863 824 246 172 292 833", 1, "" }, + /* 25*/ { BARCODE_MICROPDF417, UNICODE_MODE, 3, -1, -1, { 0, 0, "" }, "é", 0, 3, 11, 38, "(11) 927 3 901 233 657 863 824 246 172 292 833", 1, "" }, + /* 26*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 26, -1, 3, { 0, 0, "" }, "é", 0, 26, 6, 82, "(18) 927 26 901 195 169 900 288 96 509 365 709 784 713 403 219 81 851 866", 1, "" }, + /* 27*/ { BARCODE_MICROPDF417, UNICODE_MODE, 26, -1, 3, { 0, 0, "" }, "é", 0, 26, 6, 82, "(18) 927 26 901 195 169 900 288 96 509 365 709 784 713 403 219 81 851 866", 1, "" }, + /* 28*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 9, -1, -1, { 0, 0, "" }, "β", 0, 9, 11, 38, "(11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, + /* 29*/ { BARCODE_MICROPDF417, UNICODE_MODE, 9, -1, -1, { 0, 0, "" }, "β", 0, 9, 11, 38, "(11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, + /* 30*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 11, 38, "Warning (11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, + /* 31*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 11, 38, "Warning (11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, + /* 32*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 11, 38, "Warning (11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, + /* 33*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_USES_ECI, 9, 11, 38, "Warning (11) 927 9 901 226 806 489 813 191 671 146 327", 1, "" }, + /* 34*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 3, -1, -1, { 0, 0, "" }, "β", ZINT_ERROR_INVALID_DATA, 3, 0, 0, "Error 244: Invalid character in input data for ECI 3", 1, "" }, + /* 35*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 899, -1, -1, { 0, 0, "" }, "A", 0, 899, 11, 38, "(11) 927 899 900 29 533 437 884 3 617 241 747", 0, "BWIPP BYTE" }, + /* 36*/ { BARCODE_MICROPDF417, UNICODE_MODE, 899, -1, -1, { 0, 0, "" }, "A", 0, 899, 11, 38, "(11) 927 899 900 29 533 437 884 3 617 241 747", 0, "BWIPP BYTE" }, + /* 37*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 900, -1, 3, { 0, 0, "" }, "A", 0, 900, 6, 82, "(18) 926 0 0 900 29 900 913 543 414 141 214 886 461 1 419 422 54 495", 0, "BWIPP BYTE" }, + /* 38*/ { BARCODE_MICROPDF417, UNICODE_MODE, 900, -1, 3, { 0, 0, "" }, "A", 0, 900, 6, 82, "(18) 926 0 0 900 29 900 913 543 414 141 214 886 461 1 419 422 54 495", 0, "BWIPP BYTE" }, + /* 39*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 810899, -1, 3, { 0, 0, "" }, "A", 0, 810899, 6, 82, "(18) 926 899 899 900 29 900 351 555 241 509 787 583 3 326 41 628 534 151", 0, "BWIPP BYTE" }, + /* 40*/ { BARCODE_MICROPDF417, UNICODE_MODE, 810899, -1, 3, { 0, 0, "" }, "A", 0, 810899, 6, 82, "(18) 926 899 899 900 29 900 351 555 241 509 787 583 3 326 41 628 534 151", 0, "BWIPP BYTE" }, + /* 41*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 810900, -1, 1, { 0, 0, "" }, "A", 0, 810900, 11, 38, "(11) 925 0 900 29 233 533 43 483 708 659 704", 0, "BWIPP BYTE" }, + /* 42*/ { BARCODE_MICROPDF417, UNICODE_MODE, 810900, -1, 1, { 0, 0, "" }, "A", 0, 810900, 11, 38, "(11) 925 0 900 29 233 533 43 483 708 659 704", 0, "BWIPP BYTE" }, + /* 43*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, 811800, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, 811800, 0, 0, "Error 472: Invalid ECI", 0, "BWIPP BYTE" }, + /* 44*/ { BARCODE_HIBC_PDF, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, ",", ZINT_ERROR_INVALID_DATA, 0, 0, 0, "Error 203: Invalid character in data (alphanumerics, space and \"-.$/+%\" only)", 1, "" }, + /* 45*/ { BARCODE_HIBC_MICPDF, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, ",", ZINT_ERROR_INVALID_DATA, 0, 0, 0, "Error 203: Invalid character in data (alphanumerics, space and \"-.$/+%\" only)", 1, "" }, + /* 46*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "AB{} C#+ de{} {}F 12{} G{} H", 0, 0, 12, 120, "(36) 28 1 865 807 896 782 855 626 807 94 865 807 896 808 776 839 176 808 32 776 839 806 208", 0, "BWIPP different encodation (3 codewords shorter)" }, + /* 47*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "AB{} C#+ de{} {}F 12{} G{} H", 0, 0, 11, 120, "(33) 25 1 896 897 806 88 470 806 813 149 809 836 809 809 837 178 806 32 776 839 806 209 809", 0, "BWIPP different encodation, same codeword count" }, + /* 48*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "{} #+ de{} 12{} {} H", 0, 0, 10, 120, "(30) 22 865 807 896 808 470 807 94 865 807 896 808 32 776 839 806 865 807 896 787 900 900", 0, "BWIPP different encodation" }, + /* 49*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "{} #+ de{} 12{} {} H", 0, 0, 9, 120, "(27) 19 896 897 866 795 626 813 149 809 838 806 32 776 839 806 896 897 806 239 325 656 122", 0, "BWIPP different encodation" }, + /* 50*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "A", 0, 0, 5, 103, "(10) 2 29 478 509 903 637 74 490 760 21", 0, "BWIPP BYTE1" }, + /* 51*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A", 0, 0, 5, 103, "(10) 2 29 478 509 903 637 74 490 760 21", 0, "BWIPP BYTE1" }, + /* 52*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 0, -1, { 0, 0, "" }, "A", 0, 0, 4, 86, "(4) 2 29 347 502", 0, "BWIPP BYTE1" }, + /* 53*/ { BARCODE_PDF417, UNICODE_MODE, -1, 0, -1, { 0, 0, "" }, "A", 0, 0, 4, 86, "(4) 2 29 347 502", 0, "BWIPP BYTE1" }, + /* 54*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 1, -1, { 0, 0, "" }, "A", 0, 0, 6, 86, "(6) 2 29 752 533 551 139", 0, "BWIPP BYTE1" }, + /* 55*/ { BARCODE_PDF417, UNICODE_MODE, -1, 1, -1, { 0, 0, "" }, "A", 0, 0, 6, 86, "(6) 2 29 752 533 551 139", 0, "BWIPP BYTE1" }, + /* 56*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 2, -1, { 0, 0, "" }, "A", 0, 0, 5, 103, "(10) 2 29 478 509 903 637 74 490 760 21", 0, "BWIPP BYTE1" }, + /* 57*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 3, -1, { 0, 0, "" }, "A", 0, 0, 9, 103, "(18) 2 29 290 888 64 789 390 182 22 197 347 41 298 467 387 917 455 196", 0, "BWIPP BYTE1" }, + /* 58*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 4, -1, { 0, 0, "" }, "A", 0, 0, 12, 120, "(36) 4 29 900 900 702 212 753 721 695 584 222 459 110 594 813 465 718 912 667 349 852 602", 0, "BWIPP BYTE1" }, + /* 59*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 5, -1, { 0, 0, "" }, "A", 0, 0, 14, 154, "(70) 6 29 900 900 900 900 774 599 527 418 850 374 921 763 922 772 572 661 584 902 578 696", 0, "BWIPP BYTE1" }, + /* 60*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 6, -1, { 0, 0, "" }, "A", 0, 0, 19, 188, "(133) 5 29 900 900 900 113 261 822 368 600 652 404 869 860 902 184 702 611 323 195 794 566", 0, "BWIPP BYTE1" }, + /* 61*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 7, -1, { 0, 0, "" }, "A", 0, 0, 29, 222, "(261) 5 29 900 900 900 384 614 456 20 422 177 78 492 215 859 765 864 755 572 621 891 97 538", 0, "BWIPP BYTE1" }, + /* 62*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 8, -1, { 0, 0, "" }, "A", 0, 0, 40, 290, "(520) 8 29 900 900 900 900 900 900 255 576 871 499 885 500 866 196 784 681 589 448 428 108", 0, "BWIPP BYTE1" }, + /* 63*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 8, -1, { 1, 4, "017053" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 928 111 100 17 53 923 1 111 104 903 71", 1, "H.4 example" }, + /* 64*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 1, 4, "017053" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 928 111 100 17 53 923 1 111 104 903 71", 1, "H.4 example" }, + /* 65*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 8, -1, { 4, 4, "017053" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 928 111 103 17 53 923 1 111 104 922 772 754", 1, "H.4 example last segment" }, + /* 66*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 4, 4, "017053" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 928 111 103 17 53 923 1 111 104 922 772 754", 1, "H.4 example last segment" }, + /* 67*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 8, -1, { 2, 4, "" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 900 900 928 111 101 923 1 111 104 583", 1, "No ID" }, + /* 68*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 2, 4, "" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 900 900 928 111 101 923 1 111 104 583", 1, "No ID" }, + /* 69*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, 8, -1, { 99998, 99999, "12345" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 928 222 197 123 45 923 1 222 199 198", 1, "IDs '123', '045'" }, + /* 70*/ { BARCODE_PDF417, UNICODE_MODE, -1, 8, -1, { 99998, 99999, "12345" }, "A", 0, 0, 41, 290, "(533) 21 29 900 900 900 900 900 900 900 900 900 900 928 222 197 123 45 923 1 222 199 198", 1, "IDs '123', '045'" }, + /* 71*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 1, 4, "017053" }, "A", 0, 0, 6, 99, "(24) 900 29 900 928 111 100 17 53 923 1 111 104 430 136 328 218 796 853 32 421 712 477 363", 1, "H.4 example" }, + /* 72*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 1, 4, "017053" }, "A", 0, 0, 6, 99, "(24) 900 29 900 928 111 100 17 53 923 1 111 104 430 136 328 218 796 853 32 421 712 477 363", 1, "H.4 example" }, + /* 73*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 4, 4, "017053" }, "A", 0, 0, 6, 99, "(24) 900 29 928 111 103 17 53 923 1 111 104 922 837 837 774 835 701 445 926 428 285 851 334", 1, "H.4 example last segment" }, + /* 74*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 3, 4, "" }, "A", 0, 0, 17, 38, "(17) 900 29 900 928 111 102 923 1 111 104 343 717 634 693 618 860 618", 1, "No ID" }, + /* 75*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 3, 4, "" }, "A", 0, 0, 17, 38, "(17) 900 29 900 928 111 102 923 1 111 104 343 717 634 693 618 860 618", 1, "No ID" }, + /* 76*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 99999, 99999, "100200300" }, "A", 0, 0, 11, 55, "(22) 900 29 928 222 198 100 200 300 923 1 222 199 922 693 699 895 719 637 154 478 399 638", 1, "IDs '100', '200', '300'" }, + /* 77*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 99999, 99999, "100200300" }, "A", 0, 0, 11, 55, "(22) 900 29 928 222 198 100 200 300 923 1 222 199 922 693 699 895 719 637 154 478 399 638", 1, "IDs '100', '200', '300'" }, + /* 78*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "123456", 0, 0, 7, 103, "(14) 6 902 1 348 256 900 759 577 359 263 64 409 852 154", 0, "BWIPP BYTE" }, + /* 79*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, "123456", 0, 0, 7, 103, "(14) 6 841 63 125 209 900 889 730 746 451 470 371 667 636", 1, "" }, + /* 80*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "12345678901234567890", 0, 0, 9, 103, "(18) 10 902 211 358 354 304 269 753 190 900 327 902 163 367 231 586 808 731", 1, "" }, + /* 81*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, "12345678901234567890", 0, 0, 9, 103, "(18) 10 902 211 358 354 304 269 753 190 900 327 902 163 367 231 586 808 731", 1, "" }, + /* 82*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, 0, 12, 137, "(48) 40 902 491 81 137 450 302 67 15 174 492 862 667 475 869 12 434 685 326 422 57 117 339", 1, "" }, + /* 83*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, 0, 12, 137, "(48) 40 902 491 81 137 450 302 67 15 174 492 862 667 475 869 12 434 685 326 422 57 117 339", 1, "" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; struct zint_symbol *symbol; + int last_fast_num_cwds; char escaped[1024]; char cmp_buf[32768]; @@ -417,6 +467,20 @@ static void test_input(const testCtx *const p_ctx) { assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); if (ret < ZINT_ERROR) { + if (ret == 0 && p_ctx->index == -1) { + if (i && (data[i - 1].input_mode & FAST_MODE) && !(data[i].input_mode & FAST_MODE) + && strcmp(data[i - 1].data, data[i].data) == 0) { + int num_cwds; + assert_equal(sscanf(symbol->errtxt, "(%d)", &num_cwds), 1, "i:%d num_cwds sscanf != 1 (%s)\n", i, symbol->errtxt); + assert_nonzero(last_fast_num_cwds >= num_cwds, "i:%d last_fast_num_cwds %d < num_cwds %d\n", i, last_fast_num_cwds, num_cwds); + if (num_cwds < last_fast_num_cwds && (debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) { + printf("i:%d diff %d\n", i, num_cwds - last_fast_num_cwds); + } + } + if (data[i].input_mode & FAST_MODE) { + assert_equal(sscanf(symbol->errtxt, "(%d)", &last_fast_num_cwds), 1, "i:%d last_fast sscanf != 1 (%s)\n", i, symbol->errtxt); + } + } if (do_bwipp && testUtilCanBwipp(i, symbol, data[i].option_1, data[i].option_2, -1, debug)) { if (!data[i].bwipp_cmp) { if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); @@ -471,7 +535,7 @@ static void test_encode(const testCtx *const p_ctx) { char *expected; }; struct item data[] = { - /* 0*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 2, -1, "PDF417 Symbology Standard", 0, 10, 103, 0, "ISO 15438:2015 Figure 1, same, BWIPP uses different encodation, same codeword count", + /* 0*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 2, -1, "PDF417 Symbology Standard", 0, 10, 103, 0, "ISO 15438:2015 Figure 1, same, BWIPP uses different encodation, same codeword count", "1111111101010100011101010011100000111010110011110001110111011001100011110101011110000111111101000101001" "1111111101010100011111010100110000110100001110001001111010001010000011111010100110000111111101000101001" "1111111101010100011101010111111000101100110111100001110111111000101011010100111110000111111101000101001" @@ -483,14 +547,33 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100110000101001111101101111100010001010100110011111000111111101000101001" "1111111101010100010100011000001100100010111101111001100011100011001011010001100011100111111101000101001" }, - /* 1*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 2, -1, "PDF417", 0, 5, 103, 1, "ISO 15438:2015 Annex Q example for generating ECC", + /* 1*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 2, -1, "PDF417 Symbology Standard", 0, 10, 103, 0, "ISO 15438:2015 Figure 1, same, BWIPP uses different encodation, same codeword count", + "1111111101010100011101010011100000111010110011110001110111011001100011110101011110000111111101000101001" + "1111111101010100011111010100110000110100001110001001111010001010000011111010100110000111111101000101001" + "1111111101010100011101010111111000101100110111100001110111111000101011010100111110000111111101000101001" + "1111111101010100010101111101111100100000100100000101000101000100000010101111001111000111111101000101001" + "1111111101010100011010111000100000111100100000101001001000011111011011010111000100000111111101000101001" + "1111111101010100011110101111010000100111100001010001100111110010010011110101111001000111111101000101001" + "1111111101010100010100111001110000101110001110100001111001101000111011010011101111000111111101000101001" + "1111111101010100011010111111011110111101011001100001010011111101110011010111111011110111111101000101001" + "1111111101010100011010011011111100110000101001111101101111100010001010100110011111000111111101000101001" + "1111111101010100010100011000001100100010111101111001100011100011001011010001100011100111111101000101001" + }, + /* 2*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 2, -1, "PDF417", 0, 5, 103, 1, "ISO 15438:2015 Annex Q example for generating ECC", "1111111101010100011110101011110000110101000110000001110111011001100011110101011110000111111101000101001" "1111111101010100011111101010011100110100001110001001111010001010000011111101010111000111111101000101001" "1111111101010100011101010111111000101100110011110001100011111001001011101010011111100111111101000101001" "1111111101010100010101111001111000101011101110000001100001101000100010101111001111000111111101000101001" "1111111101010100011101011100011000100001101011111101111110110001011011101011100110000111111101000101001" }, - /* 2*/ { BARCODE_PDF417, -1, UNICODE_MODE, 0, 1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ ", 0, 17, 86, 1, "Text Compaction Alpha", + /* 3*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 2, -1, "PDF417", 0, 5, 103, 1, "ISO 15438:2015 Annex Q example for generating ECC", + "1111111101010100011110101011110000110101000110000001110111011001100011110101011110000111111101000101001" + "1111111101010100011111101010011100110100001110001001111010001010000011111101010111000111111101000101001" + "1111111101010100011101010111111000101100110011110001100011111001001011101010011111100111111101000101001" + "1111111101010100010101111001111000101011101110000001100001101000100010101111001111000111111101000101001" + "1111111101010100011101011100011000100001101011111101111110110001011011101011100110000111111101000101001" + }, + /* 4*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 0, 1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ ", 0, 17, 86, 1, "Text Compaction Alpha", "11111111010101000111110101001111101101011001110000011101010111000000111111101000101001" "11111111010101000111111010101110001111110101011100011110101000100000111111101000101001" "11111111010101000110101011111000001010011001111100011101010111111000111111101000101001" @@ -509,7 +592,26 @@ static void test_encode(const testCtx *const p_ctx) { "11111111010101000110010110111000001100011000100001011100101000111000111111101000101001" "11111111010101000101000111100100001110000101100010010100011110000100111111101000101001" }, - /* 3*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 1, -1, "abcdefghijklmnopqrstuvwxyz ", 0, 19, 86, 1, "Text Compaction Lower", + /* 5*/ { BARCODE_PDF417, -1, UNICODE_MODE, 0, 1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ ", 0, 17, 86, 1, "Text Compaction Alpha", + "11111111010101000111110101001111101101011001110000011101010111000000111111101000101001" + "11111111010101000111111010101110001111110101011100011110101000100000111111101000101001" + "11111111010101000110101011111000001010011001111100011101010111111000111111101000101001" + "11111111010101000111010010111000001101000001011000011010111101111100111111101000101001" + "11111111010101000111010111001100001010000111110011011110101110001110111111101000101001" + "11111111010101000111110101110000101011001110011111011110101111010000111111101000101001" + "11111111010101000101001110001110001100100001101110010100111011100000111111101000101001" + "11111111010101000101011111000011001101100111100100010101111110001110111111101000101001" + "11111111010101000101001101111100001001100001000111011010011011111100111111101000101001" + "11111111010101000110100011101111001001100111100111010100011000110000111111101000101001" + "11111111010101000111010011101100001001100101111110011110100111001110111111101000101001" + "11111111010101000110100010011111001000001010111100010100010001111000111111101000101001" + "11111111010101000110100000101100001000110011001000010100001100001100111111101000101001" + "11111111010101000111101000101000001110001100111010011111010001001100111111101000101001" + "11111111010101000111101000011110101100011110010011011101000011111010111111101000101001" + "11111111010101000110010110111000001100011000100001011100101000111000111111101000101001" + "11111111010101000101000111100100001110000101100010010100011110000100111111101000101001" + }, + /* 6*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 1, -1, "abcdefghijklmnopqrstuvwxyz ", 0, 19, 86, 1, "Text Compaction Lower", "11111111010101000110101000110000001101011001110000011101010111000000111111101000101001" "11111111010101000111110101001100001100000101110010011111010100011000111111101000101001" "11111111010101000110101011111000001111101011110110011010100111110000111111101000101001" @@ -530,7 +632,28 @@ static void test_encode(const testCtx *const p_ctx) { "11111111010101000111111001011101101010000001001111010010111001111110111111101000101001" "11111111010101000111011010000110001000100111001110011110110100111000111111101000101001" }, - /* 4*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 2, -1, "abcdefgABCDEFG", 0, 9, 103, 1, "Text Compaction Lower Alpha", + /* 7*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 1, -1, "abcdefghijklmnopqrstuvwxyz ", 0, 19, 86, 1, "Text Compaction Lower", + "11111111010101000110101000110000001101011001110000011101010111000000111111101000101001" + "11111111010101000111110101001100001100000101110010011111010100011000111111101000101001" + "11111111010101000110101011111000001111101011110110011010100111110000111111101000101001" + "11111111010101000111101001011110001010001110111000011010111101111100111111101000101001" + "11111111010101000110101110001000001010001111000001011010111000010000111111101000101001" + "11111111010101000111110101110000101110010011111001011110101111001000111111101000101001" + "11111111010101000110100111000111101011001111000111010100111011100000111111101000101001" + "11111111010101000110101111110111101111101100100100011110100101000000111111101000101001" + "11111111010101000101001101111100001011100100000011010100110011111000111111101000101001" + "11111111010101000101000111001110001100010001001100010100011000110000111111101000101001" + "11111111010101000110100111001000001110001001110011011010011100010000111111101000101001" + "11111111010101000110100010011111001101111000100110010100010000111100111111101000101001" + "11111111010101000111010000010111001000110111101110010100001100001100111111101000101001" + "11111111010101000111111010001011101100011011110010011110100010001000111111101000101001" + "11111111010101000111101000011110101000001100101110011010000010111110111111101000101001" + "11111111010101000111001011011110001000010010000001011100101000111000111111101000101001" + "11111111010101000101000111100010001111010000101000010100011110000010111111101000101001" + "11111111010101000111111001011101101010000001001111010010111001111110111111101000101001" + "11111111010101000111011010000110001000100111001110011110110100111000111111101000101001" + }, + /* 8*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 2, -1, "abcdefgABCDEFG", 0, 9, 103, 1, "Text Compaction Lower Alpha", "1111111101010100011111010101111100110101000001100001000001010000010011110101011110000111111101000101001" "1111111101010100011110101000010000111101011100111001110100111001100011110101001000000111111101000101001" "1111111101010100011101010111111000111110010111101101000001110100110010101000011110000111111101000101001" @@ -541,14 +664,32 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100111111011010110001011100111111010010101111110111000111111101000101001" "1111111101010100011010011011111100100011101100011101010111011111100011111010011101000111111101000101001" }, - /* 5*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "0123456&\015\011,:#-.$/+%*=^ 789", 0, 5, 137, 1, "Text Compaction Mixed", + /* 9*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 2, -1, "abcdefgABCDEFG", 0, 9, 103, 1, "Text Compaction Lower Alpha", + "1111111101010100011111010101111100110101000001100001000001010000010011110101011110000111111101000101001" + "1111111101010100011110101000010000111101011100111001110100111001100011110101001000000111111101000101001" + "1111111101010100011101010111111000111110010111101101000001110100110010101000011110000111111101000101001" + "1111111101010100011010111100111110111101010111100001010011100111000010101111001111000111111101000101001" + "1111111101010100011010111000001000111110100010011001101000000111001011110101110011100111111101000101001" + "1111111101010100011110101111010000100111111001110101011111000011010011110101111101100111111101000101001" + "1111111101010100011101001110111110110010000101100001001110111101100011010011101111000111111101000101001" + "1111111101010100011111101001011100111111011010110001011100111111010010101111110111000111111101000101001" + "1111111101010100011010011011111100100011101100011101010111011111100011111010011101000111111101000101001" + }, + /* 10*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 4, -1, "0123456&\015\011,:#-.$/+%*=^ 789", 0, 5, 137, 1, "Text Compaction Mixed", "11111111010101000111101010111100001110101100111100010000110111001100110101111001111101010001110111000011101010011100000111111101000101001" "11111111010101000111111010100111001010001111000001011101101111001100110110011110010001110010000011010011111101010111000111111101000101001" "11111111010101000110101001111100001100111010000111011011110010110000100000101011110001101111101010000011101010011111100111111101000101001" "11111111010101000101011110011110001000010000100001010010011000011000110010000100110001000011000110010010101111101111100111111101000101001" "11111111010101000111010111000110001001111001001111010000101111101100100011110010111101001111110110111011101011100110000111111101000101001" }, - /* 6*/ { BARCODE_PDF417, -1, UNICODE_MODE, 3, 2, -1, ";<>@[\\]_'~!\015\011,:\012-.$/\"|*()?{", 0, 16, 103, 1, "Text Compaction Punctuation", + /* 11*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "0123456&\015\011,:#-.$/+%*=^ 789", 0, 5, 137, 1, "Text Compaction Mixed", + "11111111010101000111101010111100001110101100111100010000110111001100110101111001111101010001110111000011101010011100000111111101000101001" + "11111111010101000111111010100111001010001111000001011101101111001100110110011110010001110010000011010011111101010111000111111101000101001" + "11111111010101000110101001111100001100111010000111011011110010110000100000101011110001101111101010000011101010011111100111111101000101001" + "11111111010101000101011110011110001000010000100001010010011000011000110010000100110001000011000110010010101111101111100111111101000101001" + "11111111010101000111010111000110001001111001001111010000101111101100100011110010111101001111110110111011101011100110000111111101000101001" + }, + /* 12*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 3, 2, -1, ";<>@[\\]_'~!\015\011,:\012-.$/\"|*()?{", 0, 16, 103, 1, "Text Compaction Punctuation", "1111111101010100011111010100111110111010110011110001000111011100100011110101011110000111111101000101001" "1111111101010100011111010100001100111111010101110001101011111101111011110101000100000111111101000101001" "1111111101010100011101010111111000101000001000111101011011001111000011010100001111100111111101000101001" @@ -566,7 +707,25 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011101000011111010111111010001101001011000010011100010010101111000000111111101000101001" "1111111101010100011001011011100000110011001100001101100100101100000011110010100011110111111101000101001" }, - /* 7*/ { BARCODE_PDF417, -1, UNICODE_MODE, 4, 2, -1, "\015\015\015\015\010\015", 0, 20, 103, 1, "Text Compaction Punctuation 1 Mixed -> Byte", + /* 13*/ { BARCODE_PDF417, -1, UNICODE_MODE, 3, 2, -1, ";<>@[\\]_'~!\015\011,:\012-.$/\"|*()?{", 0, 16, 103, 1, "Text Compaction Punctuation", + "1111111101010100011111010100111110111010110011110001000111011100100011110101011110000111111101000101001" + "1111111101010100011111010100001100111111010101110001101011111101111011110101000100000111111101000101001" + "1111111101010100011101010111111000101000001000111101011011001111000011010100001111100111111101000101001" + "1111111101010100011101001011100000110000110010100001100100001101110010101111001111000111111101000101001" + "1111111101010100011101011100000110110110011110010001110010000011010011110101110001110111111101000101001" + "1111111101010100011110101111010000110011101000011101101111001011000011101011111001000111111101000101001" + "1111111101010100010100111000111000110001101000100001000110011001000011010011101111000111111101000101001" + "1111111101010100011110100100100000111000110011101001110000010111011010101111110001110111111101000101001" + "1111111101010100011010011011111100110011111010100001001111000010010011111101001110110111111101000101001" + "1111111101010100011010001110111100110101000110000001100011010010000011010001100011100111111101000101001" + "1111111101010100011101001110000110110100111110011101001000011110100011110100111001110111111101000101001" + "1111111101010100010100010001111000110010011011111101000101000001111010100011001111100111111101000101001" + "1111111101010100011010000010110000110001011001110001100100010011000010100001100000110111111101000101001" + "1111111101010100011110100010000010110000010001110101111010011000110011111010001001100111111101000101001" + "1111111101010100011101000011111010111111010001101001011000010011100010010101111000000111111101000101001" + "1111111101010100011001011011100000110011001100001101100100101100000011110010100011110111111101000101001" + }, + /* 14*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 4, 2, -1, "\015\015\015\015\010\015", 0, 20, 103, 1, "Text Compaction Punctuation 1 Mixed -> Byte", "1111111101010100011010100011000000110101000011000001100011100011010011110101011110000111111101000101001" "1111111101010100011110101101100000111110101100011101110111101111101011111010100011000111111101000101001" "1111111101010100011101010111111000110100111111001001001111000101000011010110111111000111111101000101001" @@ -588,7 +747,29 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011101101000011000111010111011111001011001111000111011111011010011110111111101000101001" "1111111101010100011110100000110110100111111011011101101110001111101010100001111101100111111101000101001" }, - /* 8*/ { BARCODE_PDF417, -1, UNICODE_MODE, 4, 3, -1, "??????ABCDEFG??????abcdef??????%%%%%%", 0, 19, 120, 1, "Text Compaction Punctuation Alpha Punctuation Lower Punctuation Mixed", + /* 15*/ { BARCODE_PDF417, -1, UNICODE_MODE, 4, 2, -1, "\015\015\015\015\010\015", 0, 20, 103, 0, "Text Compaction Punctuation 1 Mixed; BWIPP same as FAST_MODE", + "1111111101010100011010100011000000110101000011000001110001110110110011110101011110000111111101000101001" + "1111111101010100011110101101100000101100101111110001111001000110110011111010100011000111111101000101001" + "1111111101010100011101010111111000100111111001110101010100001111000011010110111111000111111101000101001" + "1111111101010100011110100101111000110001010011000001000011000110010010101111001111000111111101000101001" + "1111111101010100011110101111011110111110011010001001011100010111110011010111000010000111111101000101001" + "1111111101010100011110101111010000111110110011110101001001011110000011010111111010000111111101000101001" + "1111111101010100011010011100011110110010100001100001110001100100110011010011101111000111111101000101001" + "1111111101010100011111010010001100111001001110001101111000100110110011110100101000000111111101000101001" + "1111111101010100011010011011111100101110000011011101001111011101110011111010011100010111111101000101001" + "1111111101010100010100011100111000110001000010011001100111101110100011010001100011100111111101000101001" + "1111111101010100011010011110110000110110000111101001110001100111010011010011100010000111111101000101001" + "1111111101010100010100010001111000111101001111101101100111100100110011111010001110010111111101000101001" + "1111111101010100011101000001011100100010111100111101110001100001011010100001100000110111111101000101001" + "1111111101010100011101000110010000101000111110001101010000111110011011110100010001000111111101000101001" + "1111111101010100011101000011111010111000100111110101100011100100111011001010011111000111111101000101001" + "1111111101010100011100101101111000110111001100001001000010000101000011110010100011110111111101000101001" + "1111111101010100011111010000101100111100100110110001100100111100110010100011110000010111111101000101001" + "1111111101010100010010111011111100100010100111100001101110000101110011001011111101000111111101000101001" + "1111111101010100011101101000011000110100000100001101001110000111010011111011010011110111111101000101001" + "1111111101010100011110100000110110111000000100110101111100100001011010100001111101100111111101000101001" + }, + /* 16*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 4, 3, -1, "??????ABCDEFG??????abcdef??????%%%%%%", 0, 19, 120, 1, "Text Compaction Punctuation Alpha Punctuation Lower Punctuation Mixed", "111111110101010001101010001100000011010111001111000100011101110010001100111000110010011111010101111100111111101000101001" "111111110101010001111010100000010011111001110011010111110011100110101101111100101111011111010100011000111111101000101001" "111111110101010001010100111100000011111010111101100101000100000111101111100101111011010101101111100000111111101000101001" @@ -609,7 +790,28 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001111100101110010010011100000100110100111010000110001100110100001111011100101111100010111111101000101001" "111111110101010001110110100001100010011001111001110101111011110001001011011100011000011011010001000000111111101000101001" }, - /* 9*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, ";;;;;é;;;;;", 0, 10, 103, 0, "BWIPP different encodation", + /* 17*/ { BARCODE_PDF417, -1, UNICODE_MODE, 4, 3, -1, "??????ABCDEFG??????abcdef??????%%%%%%", 0, 19, 120, 1, "Text Compaction Punctuation Alpha Punctuation Lower Punctuation Mixed", + "111111110101010001101010001100000011010111001111000100011101110010001100111000110010011111010101111100111111101000101001" + "111111110101010001111010100000010011111001110011010111110011100110101101111100101111011111010100011000111111101000101001" + "111111110101010001010100111100000011111010111101100101000100000111101111100101111011010101101111100000111111101000101001" + "111111110101010001111010010111100010001110111001000110011100011001001100111000110010011010111100111110111111101000101001" + "111111110101010001110101111011100011111001110011010100111110100011101111110101011100011010111000010000111111101000101001" + "111111110101010001111101011110110010100110011111000101000001000111101000000110100111011101011111000010111111101000101001" + "111111110101010001101001110001111011001110001100100110011100011001001100111000110010011101001110111110111111101000101001" + "111111110101010001111010010001000010001111001011110111100010000010101111000100000101011110100101000000111111101000101001" + "111111110101010001111110100110010010001110110001110100001001011110001001111001101100010100111001111110111111101000101001" + "111111110101010001010001110011100011000110110000110110001011100111101100111001100001010100011000011000111111101000101001" + "111111110101010001010011110100000011011110111111010100000101111000101110110111001000011010011100010000111111101000101001" + "111111110101010001101000100011111011000101101111110110111110010001001011010011100000010100011101111110111111101000101001" + "111111110101010001110100000101110010010001000000100100000100110110001100110001010000011010000111011110111111101000101001" + "111111110101010001111101000110111010011110001011110111110101000011001111001001000010011110100010001000111111101000101001" + "111111110101010001010000010111100010111100010001000111001001111101001110011111101010010010100111100000111111101000101001" + "111111110101010001110010110111100010100011000110000110001110001100101000010010010000010010100001000000111111101000101001" + "111111110101010001111010000101000010000010111101000111010001101000001111000001001001010100011110000010111111101000101001" + "111111110101010001111100101110010010011100000100110100111010000110001100110100001111011100101111100010111111101000101001" + "111111110101010001110110100001100010011001111001110101111011110001001011011100011000011011010001000000111111101000101001" + }, + /* 18*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, ";;;;;é;;;;;", 0, 10, 103, 1, "", "1111111101010100011101010011100000110101101110000001000111011100100011110101011110000111111101000101001" "1111111101010100011111010100011000111110101011000001111101010110000011111010100110000111111101000101001" "1111111101010100011101010111111000101011100011111101001111110011101011010100011111000111111101000101001" @@ -621,14 +823,43 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100110111100110011101001101000001110010100110001111100111111101000101001" "1111111101010100010100011000001100100010001110111001001010000010000011010001100011100111111101000101001" }, - /* 10*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "12345678901234", 0, 5, 120, 1, "Numeric Compaction", + /* 19*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, ";;;;;é;;;;;", 0, 10, 103, 1, "", + "1111111101010100011101010011100000110101101110000001000111011100100011110101011110000111111101000101001" + "1111111101010100011111010100011000111110101011000001111101010110000011111010100110000111111101000101001" + "1111111101010100011101010111111000101011100011111101001111110011101011010100011111000111111101000101001" + "1111111101010100010101111101111100111101100101110001000111011100100010101111001111000111111101000101001" + "1111111101010100011010111000010000111110101011000001111101010110000011010111000100000111111101000101001" + "1111111101010100011110101111010000101011100011111101100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000111011110011010001111010010111100011010011101111000111111101000101001" + "1111111101010100011110100101000000111111011010011001111000001010001011010111111011110111111101000101001" + "1111111101010100011010011011111100110111100110011101001101000001110010100110001111100111111101000101001" + "1111111101010100010100011000001100100010001110111001001010000010000011010001100011100111111101000101001" + }, + /* 20*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 3, -1, "12345678", 0, 3, 120, 1, "Numeric Compaction (minimum)", + "111111110101010001110101011100000011111010100111110100111101111010001010000001010000011111010101111100111111101000101001" + "111111110101010001111010100010000011100010000110100111000101110001101011111000100111011111010101100000111111101000101001" + "111111110101010001010100111100000010011001100011110101011000011111001000011000101110010101000111100000111111101000101001" + }, + /* 21*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 3, -1, "12345678", 0, 3, 120, 1, "Numeric Compaction (minimum)", + "111111110101010001110101011100000011111010100111110100111101111010001010000001010000011111010101111100111111101000101001" + "111111110101010001111010100010000011100010000110100111000101110001101011111000100111011111010101100000111111101000101001" + "111111110101010001010100111100000010011001100011110101011000011111001000011000101110010101000111100000111111101000101001" + }, + /* 22*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 3, -1, "12345678901234", 0, 5, 120, 1, "Numeric Compaction", "111111110101010001111010101111000011101010001110000100111101111010001001011100001110011111010101111100111111101000101001" "111111110101010001111110101000111011010000001110010111111011010011001111010100000010011111101010111000111111101000101001" "111111110101010001010100111100000010111000110011100101110011000011101110001111110101011101010001111110111111101000101001" "111111110101010001010111100111100010001100001100010100001100011101101110101100111100011010111100111110111111101000101001" "111111110101010001110101110000110011000000101110010110001001110000101011001000111111011101011100110000111111101000101001" }, - /* 11*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "1234567890123456789012345678901234567890123", 0, 9, 120, 1, "Numeric Compaction 43 consecutive", + /* 23*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "12345678901234", 0, 5, 120, 1, "Numeric Compaction", + "111111110101010001111010101111000011101010001110000100111101111010001001011100001110011111010101111100111111101000101001" + "111111110101010001111110101000111011010000001110010111111011010011001111010100000010011111101010111000111111101000101001" + "111111110101010001010100111100000010111000110011100101110011000011101110001111110101011101010001111110111111101000101001" + "111111110101010001010111100111100010001100001100010100001100011101101110101100111100011010111100111110111111101000101001" + "111111110101010001110101110000110011000000101110010110001001110000101011001000111111011101011100110000111111101000101001" + }, + /* 24*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 3, -1, "1234567890123456789012345678901234567890123", 0, 9, 120, 1, "Numeric Compaction 43 consecutive", "111111110101010001111101010111110011010110001110000100111101111010001101001101110000011111010101111100111111101000101001" "111111110101010001111010100001000011010011100001000110100111101100001110000101100001011110101001000000111111101000101001" "111111110101010001010100111100000011111010111000010110010010011111001000011010000111010101000011110000111111101000101001" @@ -639,7 +870,18 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001111110100101110010100111100001000110000101111001101110010110000100010101111110111000111111101000101001" "111111110101010001111110100110010011100100111110100100111110011000101001111000010001011111010011101000111111101000101001" }, - /* 12*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "12345678901234567890123456789012345678901234", 0, 9, 120, 1, "Numeric Compaction 44 consecutive", + /* 25*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "1234567890123456789012345678901234567890123", 0, 9, 120, 1, "Numeric Compaction 43 consecutive", + "111111110101010001111101010111110011010110001110000100111101111010001101001101110000011111010101111100111111101000101001" + "111111110101010001111010100001000011010011100001000110100111101100001110000101100001011110101001000000111111101000101001" + "111111110101010001010100111100000011111010111000010110010010011111001000011010000111010101000011110000111111101000101001" + "111111110101010001101011110011111011100010001001110110011011000110001001000110011000011010111100111110111111101000101001" + "111111110101010001101011100000100010010111101000000111000010111011001001101111101000011110101110011100111111101000101001" + "111111110101010001111101011110110010001111001000100110110010111100001100011111001001011110101111101100111111101000101001" + "111111110101010001110100111011111010000110001100100110010001110111101001001110111000011101001110111110111111101000101001" + "111111110101010001111110100101110010100111100001000110000101111001101110010110000100010101111110111000111111101000101001" + "111111110101010001111110100110010011100100111110100100111110011000101001111000010001011111010011101000111111101000101001" + }, + /* 26*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 3, -1, "12345678901234567890123456789012345678901234", 0, 9, 120, 1, "Numeric Compaction 44 consecutive", "111111110101010001111101010111110011010110001110000100111101111010001000100011000011011111010101111100111111101000101001" "111111110101010001111010100001000011101001100100000111010001100001001110010000001101011110101001000000111111101000101001" "111111110101010001010100111100000011111100010110100101001100001111101010110011111000010101000011110000111111101000101001" @@ -650,7 +892,18 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001111110100101110011100110011101000100110001011111101101001110000001010101111110111000111111101000101001" "111111110101010001111110100110010010111001100011100101000110111110001001100001000111011111010011101000111111101000101001" }, - /* 13*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "123456789012345678901234567890123456789012345", 0, 9, 120, 1, "Numeric Compaction 45 consecutive", + /* 27*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "12345678901234567890123456789012345678901234", 0, 9, 120, 1, "Numeric Compaction 44 consecutive", + "111111110101010001111101010111110011010110001110000100111101111010001000100011000011011111010101111100111111101000101001" + "111111110101010001111010100001000011101001100100000111010001100001001110010000001101011110101001000000111111101000101001" + "111111110101010001010100111100000011111100010110100101001100001111101010110011111000010101000011110000111111101000101001" + "111111110101010001101011110011111010010111100111100100110011100001101000111011101000011010111100111110111111101000101001" + "111111110101010001101011100000100011111000010100110110001011100100001011111001011100011110101110011100111111101000101001" + "111111110101010001111101011110110010101101111100000101110001100111001100011111001001011110101111101100111111101000101001" + "111111110101010001110100111011111010000110001100100100001011011000001000100000100100011101001110111110111111101000101001" + "111111110101010001111110100101110011100110011101000100110001011111101101001110000001010101111110111000111111101000101001" + "111111110101010001111110100110010010111001100011100101000110111110001001100001000111011111010011101000111111101000101001" + }, + /* 28*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 3, -1, "123456789012345678901234567890123456789012345", 0, 9, 120, 1, "Numeric Compaction 45 consecutive", "111111110101010001111101010111110011010110001110000100111101111010001000100011000011011111010101111100111111101000101001" "111111110101010001111010100001000011101001100100000111010001100001001110010000001101011110101001000000111111101000101001" "111111110101010001010100111100000011111100010110100101001100001111101010110011111000010101000011110000111111101000101001" @@ -661,7 +914,7 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001111110100101110011110001001101100111101001110011101101111010111110010101111110111000111111101000101001" "111111110101010001111110100110010011011110011001110110011100100011101100100100011111011111010011101000111111101000101001" }, - /* 14*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567", 0, 14, 120, 1, "Numeric Compaction 87 consecutive", + /* 29*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 3, -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567", 0, 14, 120, 1, "Numeric Compaction 87 consecutive", "111111110101010001111010100111100011111010111111010100111101111010001000100011000011011111010101111100111111101000101001" "111111110101010001111110101000111011101001100100000111010001100001001110010000001101011111101010011100111111101000101001" "111111110101010001010100111100000011111100010110100101001100001111101010110011111000011101010001111110111111101000101001" @@ -677,7 +930,23 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001010000010100000011110111001001100110100000100110001110111100011010011010000111011110111111101000101001" "111111110101010001111101000100011011100101110011000111100011001101001000001011110001011110100010010000111111101000101001" }, - /* 15*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", 0, 14, 120, 1, "Numeric Compaction 88 consecutive", + /* 30*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567", 0, 14, 120, 1, "Numeric Compaction 87 consecutive", + "111111110101010001111010100111100011111010111111010100111101111010001000100011000011011111010101111100111111101000101001" + "111111110101010001111110101000111011101001100100000111010001100001001110010000001101011111101010011100111111101000101001" + "111111110101010001010100111100000011111100010110100101001100001111101010110011111000011101010001111110111111101000101001" + "111111110101010001111101011111101010010111100111100100110011100001101000111011101000011010111100111110111111101000101001" + "111111110101010001110101110000110011111000010100110110001011100100001011111001011100011101011100011000111111101000101001" + "111111110101010001111101011110110010101101111100000101110001100111001111101001110100011101011111010000111111101000101001" + "111111110101010001101001110011110011000100011011100111101110000101101101101000010000011101001110111110111111101000101001" + "111111110101010001111101001011000010011000111110100101110000101111101100000100011101010101111110011100111111101000101001" + "111111110101010001111110100110010010000110011011110110011111010001001000011110110110010100110000111110111111101000101001" + "111111110101010001010001110111000011011110111000010100110001100000101111101011111101010100011000011000111111101000101001" + "111111110101010001110100111000110010111101101111100111110000101001101011111101011000011101001110011000111111101000101001" + "111111110101010001101000100011111011000111110010010100000100010111101011111001100100011010001101111110111111101000101001" + "111111110101010001010000010100000011110111001001100110100000100110001110111100011010011010000111011110111111101000101001" + "111111110101010001111101000100011011100101110011000111100011001101001000001011110001011110100010010000111111101000101001" + }, + /* 31*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 3, -1, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", 0, 14, 120, 1, "Numeric Compaction 88 consecutive", "111111110101010001111010100111100011111010111111010100111101111010001000100011000011011111010101111100111111101000101001" "111111110101010001111110101000111011101001100100000111010001100001001110010000001101011111101010011100111111101000101001" "111111110101010001010100111100000011111100010110100101001100001111101010110011111000011101010001111110111111101000101001" @@ -693,7 +962,23 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001010000010100000011100010110011110111011001100111001110011010000110011010000111011110111111101000101001" "111111110101010001111101000100011011110010110000110111011100111100101111010000110011011110100010010000111111101000101001" }, - /* 16*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", 0, 14, 120, 1, "Numeric Compaction 89 consecutive", + /* 32*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", 0, 14, 120, 1, "Numeric Compaction 88 consecutive", + "111111110101010001111010100111100011111010111111010100111101111010001000100011000011011111010101111100111111101000101001" + "111111110101010001111110101000111011101001100100000111010001100001001110010000001101011111101010011100111111101000101001" + "111111110101010001010100111100000011111100010110100101001100001111101010110011111000011101010001111110111111101000101001" + "111111110101010001111101011111101010010111100111100100110011100001101000111011101000011010111100111110111111101000101001" + "111111110101010001110101110000110011111000010100110110001011100100001011111001011100011101011100011000111111101000101001" + "111111110101010001111101011110110010101101111100000101110001100111001111011111010111011101011111010000111111101000101001" + "111111110101010001101001110011110011101100001001100110001001100011101110100110001111011101001110111110111111101000101001" + "111111110101010001111101001011000010100111110001100111110110010100001101100111100001010101111110011100111111101000101001" + "111111110101010001111110100110010011001000100111110101111110111001001011111011001000010100110000111110111111101000101001" + "111111110101010001010001110111000011111001010111110100000100011011001110110000010110010100011000011000111111101000101001" + "111111110101010001110100111000110011100010011001000100100011110100001011111101011000011101001110011000111111101000101001" + "111111110101010001101000100011111011000111110010010100011110100000101001110011011100011010001101111110111111101000101001" + "111111110101010001010000010100000011100010110011110111011001100111001110011010000110011010000111011110111111101000101001" + "111111110101010001111101000100011011110010110000110111011100111100101111010000110011011110100010010000111111101000101001" + }, + /* 33*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 2, 3, -1, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", 0, 14, 120, 1, "Numeric Compaction 89 consecutive", "111111110101010001111010100111100011111010111111010100111101111010001000100011000011011111010101111100111111101000101001" "111111110101010001111110101000111011101001100100000111010001100001001110010000001101011111101010011100111111101000101001" "111111110101010001010100111100000011111100010110100101001100001111101010110011111000011101010001111110111111101000101001" @@ -709,7 +994,23 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001010000010100000011100110011001110100111011110110001100010000100110011010000111011110111111101000101001" "111111110101010001111101000100011011100101110001100110001001110100001010001111000001011110100010010000111111101000101001" }, - /* 17*/ { BARCODE_PDF417, -1, UNICODE_MODE, 0, 3, -1, "AB{} C#+ de{} {}F 12{} G{} H", 0, 10, 120, 0, "Text Compaction newtable, BWIPP uses PUNCT_SHIFT better for less codewords", + /* 34*/ { BARCODE_PDF417, -1, UNICODE_MODE, 2, 3, -1, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", 0, 14, 120, 1, "Numeric Compaction 89 consecutive -> ML(1) NUM(88)", + "111111110101010001111010100111100011111010111111010100111101111010001000100011000011011111010101111100111111101000101001" + "111111110101010001111110101000111011101001100100000111010001100001001110010000001101011111101010011100111111101000101001" + "111111110101010001010100111100000011111100010110100101001100001111101010110011111000011101010001111110111111101000101001" + "111111110101010001111101011111101010010111100111100100110011100001101000111011101000011010111100111110111111101000101001" + "111111110101010001110101110000110011111000010100110110001011100100001011111001011100011101011100011000111111101000101001" + "111111110101010001111101011110110010101101111100000101110001100111001111011111010111011101011111010000111111101000101001" + "111111110101010001101001110011110011101100001001100110001001100011101110100110001111011101001110111110111111101000101001" + "111111110101010001111101001011000010100111110001100111110110010100001101100111100001010101111110011100111111101000101001" + "111111110101010001111110100110010011001000100111110101111110111001001011111011001000010100110000111110111111101000101001" + "111111110101010001010001110111000011111001010111110100000100011011001110110000010110010100011000011000111111101000101001" + "111111110101010001110100111000110011100010011001000100100011110100001110101100010000011101001110011000111111101000101001" + "111111110101010001101000100011111011000111110010010110010001011111001111010011110001011010001101111110111111101000101001" + "111111110101010001010000010100000011100110011001110100111011110110001100010000100110011010000111011110111111101000101001" + "111111110101010001111101000100011011100101110001100110001001110100001010001111000001011110100010010000111111101000101001" + }, + /* 35*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 0, 3, -1, "AB{} C#+ de{} {}F 12{} G{} H", 0, 10, 120, 0, "Text Compaction newtable, BWIPP uses PUNCT_SHIFT better for less codewords", "111111110101010001110101001110000011010111000111100111101010111100001000111011100100011111010101111100111111101000101001" "111111110101010001111101010110000011100000101100010100111110100111001110001100011101011111010100110000111111101000101001" "111111110101010001010100111100000010111111001110100100001101011100001001111101101000011010101111100000111111101000101001" @@ -721,39 +1022,82 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001111110100110010010111111011100100110001111001011001011001100111100010100110111110000111111101000101001" "111111110101010001010001100000110010000110001100100110011100110100001100100100110000010100011000011000111111101000101001" }, - /* 18*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction", + /* 36*/ { BARCODE_PDF417, -1, UNICODE_MODE, 0, 3, -1, "AB{} C#+ de{} {}F 12{} G{} H", 0, 9, 120, 0, "Text Compaction newtable; BWIPP same except ML before spaces instead of after", + "111111110101010001111101010111110011010111001111000111101010111100001100000100001011011111010101111100111111101000101001" + "111111110101010001111010100100000010011111010001110111000001011001001110100110000010011110101001000000111111101000101001" + "111111110101010001010100111100000010001101011100000110001111001011001000111100100001010101001111000000111111101000101001" + "111111110101010001101011110011111011001010001100000100000101000010001000001001101100011010111100111110111111101000101001" + "111111110101010001111010111001110011100000101110110111000001011101101000111010111110011110101110011100111111101000101001" + "111111110101010001111101011110110010110100000111000110001111001011001111101011110110011111010111101100111111101000101001" + "111111110101010001110100111011111011000110000100010110000110111011101000001010010000011101001110111110111111101000101001" + "111111110101010001010111111011100011010000001110010111000001011101101111110001110101010101111110111000111111101000101001" + "111111110101010001111110100110010010001111010000100110001010001111101010001101111100011111101001100100111111101000101001" + }, + /* 37*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 4, -1, "\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction", "11111111010101000111010101110000001101010000110000010000010000100010101000001001000001010000010010000011101010011100000111111101000101001" "11111111010101000111101010001000001111101000100011011111010001000110111110100010001101011111101011000011111010101100000111111101000101001" "11111111010101000110101001111100001100011110101100011001101011110000100000111010110001011110011100111010101000111100000111111101000101001" }, - /* 19*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", + /* 38*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction", + "11111111010101000111010101110000001101010000110000010000010000100010101000001001000001010000010010000011101010011100000111111101000101001" + "11111111010101000111101010001000001111101000100011011111010001000110111110100010001101011111101011000011111010101100000111111101000101001" + "11111111010101000110101001111100001100011110101100011001101011110000100000111010110001011110011100111010101000111100000111111101000101001" + }, + /* 39*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 4, -1, "\177\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", "11111111010101000111010101110000001101010000110000011000111000110100111001001100111101000010100001000011101010011100000111111101000101001" "11111111010101000111101010001000001110010000111011010100111110000110111101001100001101011111101011000011111010101100000111111101000101001" "11111111010101000110101001111100001011111011101100010000001110100110110000011010111101111010111100001010101000111100000111111101000101001" }, - /* 20*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction", + /* 40*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", + "11111111010101000111010101110000001101010000110000011000111000110100111001001100111101000010100001000011101010011100000111111101000101001" + "11111111010101000111101010001000001110010000111011010100111110000110111101001100001101011111101011000011111010101100000111111101000101001" + "11111111010101000110101001111100001011111011101100010000001110100110110000011010111101111010111100001010101000111100000111111101000101001" + }, + /* 41*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 4, -1, "\177\177\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction", "11111111010101000111010101110000001101010000110000010000010000100010111001001100111101000010100001000011101010011100000111111101000101001" "11111111010101000111101010001000001110010000111011010100111110000110111101001100001101111101000100011011111010101100000111111101000101001" "11111111010101000110101001111100001011000110011110010110001000111000100011010000111001001100100001110010101000111100000111111101000101001" }, - /* 21*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177\177\177\177\177\177", 0, 4, 137, 1, "Byte Compaction", + /* 42*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177\177", 0, 3, 137, 1, "Byte Compaction", + "11111111010101000111010101110000001101010000110000010000010000100010111001001100111101000010100001000011101010011100000111111101000101001" + "11111111010101000111101010001000001110010000111011010100111110000110111101001100001101111101000100011011111010101100000111111101000101001" + "11111111010101000110101001111100001011000110011110010110001000111000100011010000111001001100100001110010101000111100000111111101000101001" + }, + /* 43*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 4, -1, "\177\177\177\177\177\177\177\177\177\177\177", 0, 4, 137, 1, "Byte Compaction", "11111111010101000111101010111100001101011011100000010000010000100010111001001100111101000010100001000011101010011100000111111101000101001" "11111111010101000111110101001100001110010000111011010100111110000110111101001100001101111101000100011011111101010111000111111101000101001" "11111111010101000110101001111100001010000001011110010100000010111100101000000101111001010000001011110011010100111110000111111101000101001" "11111111010101000101011110011110001010001000001000011011000010100000111000110001001101100111000110010010101111101111100111111101000101001" }, - /* 22*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177\177\177\177\177\177\177", 0, 4, 137, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", + /* 44*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177\177\177\177\177\177", 0, 4, 137, 1, "Byte Compaction", + "11111111010101000111101010111100001101011011100000010000010000100010111001001100111101000010100001000011101010011100000111111101000101001" + "11111111010101000111110101001100001110010000111011010100111110000110111101001100001101111101000100011011111101010111000111111101000101001" + "11111111010101000110101001111100001010000001011110010100000010111100101000000101111001010000001011110011010100111110000111111101000101001" + "11111111010101000101011110011110001010001000001000011011000010100000111000110001001101100111000110010010101111101111100111111101000101001" + }, + /* 45*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 1, 4, -1, "\177\177\177\177\177\177\177\177\177\177\177\177", 0, 4, 137, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", "11111111010101000111101010111100001101011011100000011000111000110100111001001100111101000010100001000011101010011100000111111101000101001" "11111111010101000111110101001100001110010000111011010100111110000110111101001100001101111001010010000011111101010111000111111101000101001" "11111111010101000110101001111100001001110000100110010011000100001110101000011001111101101000101111100011010100111110000111111101000101001" "11111111010101000101011110011110001101000100011000010011000111001100110001100001000101110100010111000010101111101111100111111101000101001" }, - /* 23*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, 5, -1, "1\177", 0, 3, 154, 1, "Byte Compaction, 1 Numeric, 1 Byte", + /* 46*/ { BARCODE_PDF417, -1, UNICODE_MODE, 1, 4, -1, "\177\177\177\177\177\177\177\177\177\177\177\177", 0, 4, 137, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", + "11111111010101000111101010111100001101011011100000011000111000110100111001001100111101000010100001000011101010011100000111111101000101001" + "11111111010101000111110101001100001110010000111011010100111110000110111101001100001101111001010010000011111101010111000111111101000101001" + "11111111010101000110101001111100001001110000100110010011000100001110101000011001111101101000101111100011010100111110000111111101000101001" + "11111111010101000101011110011110001101000100011000010011000111001100110001100001000101110100010111000010101111101111100111111101000101001" + }, + /* 47*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, 5, -1, "1\177", 0, 3, 154, 1, "Byte Compaction, 1 Numeric, 1 Byte", "1111111101010100011101010111000000111010100011100001000001000010001011010011011100000101000001001000001000011000110010011110101001111000111111101000101001" "1111111101010100011110101000010000101111110101100001011111101011000011101001110110000111000010110100001110000110011101011111010101100000111111101000101001" "1111111101010100011101010011111100100111100000100101101100010011110010111100000110110101101110111110001001101011100000010101000011110000111111101000101001" }, - /* 24*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, 5, -1, "ABCDEF1234567890123\177\177\177\177VWXYZ", 0, 6, 154, 1, "Text, Numeric, Byte, Text", + /* 48*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, 5, -1, "1\177", 0, 3, 154, 0, "Byte Compaction, 1 Numeric, 1 Byte; BWIPP same as FAST_MODE", + "1111111101010100011101010111000000111010100011100001000001001100011011110011110010100101000001001000001000011000110010011110101001111000111111101000101001" + "1111111101010100011110101000010000101111110101100001011111101011000011011011110001000100011100101111101110100111000110011111010101100000111111101000101001" + "1111111101010100011101010011111100100110011011110001001100010000111010000011110010100100000100010111101011111011010000010101000011110000111111101000101001" + }, + /* 49*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, 5, -1, "ABCDEF1234567890123\177\177\177\177VWXYZ", 0, 6, 154, 1, "Text, Numeric, Byte, Text", "1111111101010100011110101011110000110101110111100001111010101111000010100111001110000110100000101100001001111011110100011110101001111000111111101000101001" "1111111101010100011110101000010000111101011001100001010011110000100011111100011101010110000010111000101111001011011000011111101010111000111111101000101001" "1111111101010100011101010011111100110011111101100101010000001011110010100000010111100101000000101111001010000001011110010101000011110000111111101000101001" @@ -761,7 +1105,15 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010111000001000101111110101100001011111101011000011001011111001110111100100100100001011111101011000011101011100110000111111101000101001" "1111111101010100011111010111100110110111110110011001101001011111000010101110011111100100100001000111101011000000101110011110101111101100111111101000101001" }, - /* 25*/ { BARCODE_PDF417, -1, UNICODE_MODE, 6, 5, -1, "ABCDEF1234567890123\177\177\177\177VWXYZ", 0, 30, 154, 1, "ECC 6: Text, Numeric, Byte, Text", + /* 50*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, 5, -1, "ABCDEF1234567890123\177\177\177\177VWXYZ", 0, 6, 154, 1, "Text, Numeric, Byte(7), Text", + "1111111101010100011110101011110000110101110111100001111010101111000010100111001110000110100000101100001001111011110100011110101001111000111111101000101001" + "1111111101010100011110101000010000111101011001100001010011110000100011111100011101010110000010111000101111001011011000011111101010111000111111101000101001" + "1111111101010100011101010011111100110011111101100101010000001011110010100000010111100101000000101111001010000001011110010101000011110000111111101000101001" + "1111111101010100010101111001111000100001100011001001000110111101110011110111101101100110111100111000101000011000110010011111010111111010111111101000101001" + "1111111101010100011010111000001000101111110101100001011111101011000011001011111001110111100100100100001011111101011000011101011100110000111111101000101001" + "1111111101010100011111010111100110110111110110011001101001011111000010101110011111100100100001000111101011000000101110011110101111101100111111101000101001" + }, + /* 51*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 6, 5, -1, "ABCDEF1234567890123\177\177\177\177VWXYZ", 0, 30, 154, 1, "ECC 6: Text, Numeric, Byte, Text", "1111111101010100010101000001000000110101110111100001111010101111000010100111001110000110100000101100001001111011110100011110101001111000111111101000101001" "1111111101010100011110101100011000111101011001100001010011110000100011111100011101010110000010111000101111001011011000011111010100001100111111101000101001" "1111111101010100011101010011111100110011111101100101010000001011110010100000010111100101000000101111001010000001011110011111101011000010111111101000101001" @@ -793,7 +1145,39 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011100100110100000110101111011000001100110011110100010000010001111010111001011001000001001000011110100011110110110100000111111101000101001" "1111111101010100010110001110111110111110001011100101111101100111101010000111010110000110110010111100001111101011100100010110000011011110111111101000101001" }, - /* 26*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, 5, -1, "ABCDEF1234567890123\177\177\177\177YZ1234567890123", 0, 7, 154, 0, "Text, Numeric, Byte, 2 Text, Numeric; BWIPP different encodation", + /* 52*/ { BARCODE_PDF417, -1, UNICODE_MODE, 6, 5, -1, "ABCDEF1234567890123\177\177\177\177VWXYZ", 0, 30, 154, 1, "ECC 6: Text, Numeric, Byte, Text", + "1111111101010100010101000001000000110101110111100001111010101111000010100111001110000110100000101100001001111011110100011110101001111000111111101000101001" + "1111111101010100011110101100011000111101011001100001010011110000100011111100011101010110000010111000101111001011011000011111010100001100111111101000101001" + "1111111101010100011101010011111100110011111101100101010000001011110010100000010111100101000000101111001010000001011110011111101011000010111111101000101001" + "1111111101010100011101001001110000100001100011001001000110111101110011110111101101100110111100111000101000011000110010011111010111111010111111101000101001" + "1111111101010100010101111000010000101111110101100001011111101011000011110001010000010100001001111000101011110011011111011101011100000110111111101000101001" + "1111111101010100011111010111100110100111011000111001111010001111010011001111001011000111001111110100101101110000101110011101001011111100111111101000101001" + "1111111101010100010100111100111100110011000010000101010000100000100011110011110101000110111100111001001101000110111000011010011100111100111111101000101001" + "1111111101010100011111010011011100101000111100100001101001110010000010000001011110100110111001111101001001100010111111011110100100100000111111101000101001" + "1111111101010100011010011001111110111111001011101101011111000110100011010101111100000100001110010001101010111001111110011101001111100100111111101000101001" + "1111111101010100010100011110111100111101111010001001101000110001110011110100101111000111101100101110001001001000010000010100011101110000111111101000101001" + "1111111101010100010100111100001000111000010110010001110011000111001011100101100000100100111011111101001111110111001010011101001110000110111111101000101001" + "1111111101010100010100010000011110111001000111110101001111001100011010100001101111100100110000001011101011100110000111010100001011110000111111101000101001" + "1111111101010100011101000001001110100001011000001101101111000111001010100001110001110100010100001000001010000110110000010100000101000000111111101000101001" + "1111111101010100011101000111011000110011111101011101101001111011000010001110111111010111110111011000101111011101110010011110100010000010111111101000101001" + "1111111101010100010100000100111100110000111110100101101111010001100010001111000100100101110000010011001000101000111100011111100101101000111111101000101001" + "1111111101010100011001011001110000100111000111010001011000011010000011001100011001100100010100010000001010111110111110010010100000100000111111101000101001" + "1111111101010100011101000011001000101111110100110001111101011011100010011101001111100110000001001110101111100010101100010100011111001100111111101000101001" + "1111111101010100011111001011100010110000111010111001101010000111110011111010111000100101111011001100001000011101000110010110100111000000111111101000101001" + "1111111101010100011101101000001100101110011100010001111001111010100010110011110111000100101000001000001011110011110100011110110100011100111111101000101001" + "1111111101010100010100000111101000111110001010011001111100011001001010110111111000110111100100100100001111110001101011011111010000010110111111101000101001" + "1111111101010100010110110111100000101111000010100001000111101000010011011010000111100100011010011100001001111000001001010110111011111000111111101000101001" + "1111111101010100010110111000011000101111001111001001000011011100011011100001101000110110011000011001101101001000001100010110111001100000111111101000101001" + "1111111101010100011100101100001000110110011110000101110010011101100011110100011000110111110110010100001011100010011111011111001010000110111111101000101001" + "1111111101010100011110010011110010100011111001101001001111000110011010001110110011100110000101011111001111110101101000010110010000111000111111101000101001" + "1111111101010100011001000100110000110100111001111001011100111101100011010000100011000110011011000110001101011001110000011011001000000100111111101000101001" + "1111111101010100011001011111001110110110111110011001110001001100100010010001111010000111101000100100001011111101101110010010111100100000111111101000101001" + "1111111101010100011111100100011010110100000101111101011001110111110010111000110111000110001001111110101111011011111001010110001001110000111111101000101001" + "1111111101010100010010001110001110100110000110010001100001001100111011101001110111110110111100011100101110101001110000010010001110111000111111101000101001" + "1111111101010100011100100110100000110101111011000001100110011110100010000010001111010111001011001000001001000011110100011110110110100000111111101000101001" + "1111111101010100010110001110111110111110001011100101111101100111101010000111010110000110110010111100001111101011100100010110000011011110111111101000101001" + }, + /* 53*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, 5, -1, "ABCDEF1234567890123\177\177\177\177YZ1234567890123", 0, 7, 154, 0, "Text, Numeric, Byte, 2 Text, Numeric; BWIPP different encodation", "1111111101010100011111010101111100101011100011100001111010101111000010100111001110000110100000101100001001111011110100011110101001111000111111101000101001" "1111111101010100011111010100011000111101011001100001010011110000100011111100011101010110000010111000101111001011011000011110101001000000111111101000101001" "1111111101010100011101010011111100110011111101100101010000001011110010100000010111100101000000101111001010000001011110011010100011111000111111101000101001" @@ -802,7 +1186,15 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111010111100110110001111100100101100011111001001010011100101100000110011101011100001111010111110110011110101111000010111111101000101001" "1111111101010100011101001110111110110001001100011101010000111000111011101010011100000110100010001100001110111100110001011010011100111100111111101000101001" }, - /* 27*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZ", 0, 14, 154, 1, "ECC 3", + /* 54*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, 5, -1, "ABCDEF1234567890123\177\177\177\177YZ1234567890123", 0, 6, 154, 1, "Text, Numeric, Byte, 2 Text, Numeric", + "1111111101010100011110101011110000110101110111100001111010101111000010100111001110000110100000101100001001111011110100011110101001111000111111101000101001" + "1111111101010100011110101000010000111101011001100001010011110000100011111100011101010110000010111000101111001011011000011111101010111000111111101000101001" + "1111111101010100011101010011111100100000111100101001111011011111010010011100001001100100110001000011101110100011111001010101000011110000111111101000101001" + "1111111101010100010101111001111000101101111011100001001111011110100011110101100111110110100001000011001000001001101100011111010111111010111111101000101001" + "1111111101010100011010111000001000110000010111000101111001011011000010110001111101000111010011100011001110110111010000011101011100110000111111101000101001" + "1111111101010100011111010111100110100001100110111101100110101111000010110011011110000111011100010111101001001001111000011110101111101100111111101000101001" + }, + /* 55*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZ", 0, 14, 154, 1, "ECC 3", "1111111101010100011110101001111000111010011001111001111010101111000010100111001110000110100000101100001111011010000111011110101001111000111111101000101001" "1111111101010100011110101000001000100101111001000001110110111100110011101100111100110111000101100100001110001001110011011111101010011100111111101000101001" "1111111101010100011101010011111100110111100010011001000001000101111010011110011000110101111100011001001111101011110110010101000001111000111111101000101001" @@ -818,7 +1210,23 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100010100000101000000111101100100011101000011011010000011001000000101100110100000010011001010000110000011010100000101000000111111101000101001" "1111111101010100011101000110100000100111101001111001111100100101100011110101101100000111100010011001101111000100000101011110100010010000111111101000101001" }, - /* 28*/ { BARCODE_PDF417, -1, UNICODE_MODE, 8, 29, 32, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 562, 1, "Max codewords (with padding)", + /* 56*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZABCDEFGHIJKLMOPQRSTUVWXYZ", 0, 14, 154, 1, "ECC 3", + "1111111101010100011110101001111000111010011001111001111010101111000010100111001110000110100000101100001111011010000111011110101001111000111111101000101001" + "1111111101010100011110101000001000100101111001000001110110111100110011101100111100110111000101100100001110001001110011011111101010011100111111101000101001" + "1111111101010100011101010011111100110111100010011001000001000101111010011110011000110101111100011001001111101011110110010101000001111000111111101000101001" + "1111111101010100011111010111111010101000111011100001110010110111100010010011000011000101100111100011101011000011000010011111010111111010111111101000101001" + "1111111101010100011010111000000100111001000001101001001101011111100010011001011111100111110111001100101100001011110110011101011100011000111111101000101001" + "1111111101010100011111010111100110110111110001000101110101011111100010100110011111000101000001000111101011011001111000011110101111100110111111101000101001" + "1111111101010100011010011100111100110010001001100001100100001101110010001011000110000110001000100110001001100011001000011010011100111100111111101000101001" + "1111111101010100011111010010011000110011001111010001111001100001101011000110111100100110000100011101001111010111001110010101111110011100111111101000101001" + "1111111101010100011010011001111110101000100000111101111100101111011011100100111110010101100001000011101001101110111110010100111011111100111111101000101001" + "1111111101010100010100011101110000111101110101100001001100111100111011100110000100110110001101000100001000110011001000010100011101110000111111101000101001" + "1111111101010100011010011100000100111000110011101001011111101011000010111111010110000101111110101100001111010100001000011101001110011000111111101000101001" + "1111111101010100010100010000011110100100110001111101011011000111100011000111100101100110010101111100001111101000111010010100011000111110111111101000101001" + "1111111101010100010100000101000000111101100100011101000011011010000011001000000101100110100000010011001010000110000011010100000101000000111111101000101001" + "1111111101010100011101000110100000100111101001111001111100100101100011110101101100000111100010011001101111000100000101011110100010010000111111101000101001" + }, + /* 57*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, 8, 29, 32, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 562, 1, "Max codewords (with padding)", "1111111101010100011010100000110000111000100110111101111010101111000010100111001110000110100000101100001111011010000111011001000100110000110010000110111001110001011001111011110111010110000100110011110011101110011000010011011000110100010000100011001100100001100111001110011010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010011010111000111100111111101000101001" "1111111101010100011110101100000110101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000011110101000001000111111101000101001" "1111111101010100011111010111000100110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011111010111001000111111101000101001" @@ -852,15 +1260,57 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100010010000110110000110011010000010001010000100001000011010110111000000111011000001001101100010001001100011001100001010000111100010010111101101111011110011010001000110000110110110001000001001110110101100000011000110001001000110010001101110001010010000010000011111011110101100100010000010100001000010110001100011100010110111100110110010000001001111101100101111010000100001010000110010001100111001101110001101000011101000010111000111001000101110001000001000100100010101110001110000101000110000110001110011010000110011101100001000110111111101000101001" "1111111101010100011011011111001100101111001001111001101110011111010011100110011100100110000100011101001111010011000110011110101110001110100010011110000101100101110000010010111101000111100111010011010000001101011111000111011110101101100000110001001111001101110100000011010010001000111101000111100010010100001111010110011000011001011111011100101000111101000001111001000001010011111001010001100111011100011110101110010000001101011011000011110010110000101110010001001001111001000010100001111100110110100111000010001011010011111100011011011110010000111111101000101001" }, - /* 29*/ { BARCODE_PDF417COMP, -1, UNICODE_MODE, 1, 2, -1, "PDF417 APK", 0, 6, 69, 0, "ISO 15438:2015 Figure G.1, same, BWIPP uses different encodation, same codeword count", + /* 58*/ { BARCODE_PDF417, -1, UNICODE_MODE, 8, 29, 32, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 562, 1, "Max codewords (with padding)", + "1111111101010100011010100000110000111000100110111101111010101111000010100111001110000110100000101100001111011010000111011001000100110000110010000110111001110001011001111011110111010110000100110011110011101110011000010011011000110100010000100011001100100001100111001110011010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010011010111000111100111111101000101001" + "1111111101010100011110101100000110101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000011110101000001000111111101000101001" + "1111111101010100011111010111000100110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011111010111001000111111101000101001" + "1111111101010100011110100100111100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010100110000110000111111101000101001" + "1111111101010100011010111110111000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000011010111000000100111111101000101001" + "1111111101010100010100100000111100110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011010010001111100111111101000101001" + "1111111101010100010100111100011110100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010011010001100111000111111101000101001" + "1111111101010100011110100110001100101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000011111010010011000111111101000101001" + "1111111101010100011101000101111110110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011010011111100010111111101000101001" + "1111111101010100011010000101100000100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010100001100011000111111101000101001" + "1111111101010100010100111110011000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000011010011100000100111111101000101001" + "1111111101010100010100001100111110110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001010100001000011110111111101000101001" + "1111111101010100010100000100010000100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010010000110001100100100001100011001001000011000110010011110010100111100111111101000101001" + "1111111101010100011101000111000110101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000010111111010110000101111110101100001011111101011000011101000110100000111111101000101001" + "1111111101010100010010110000111110110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100011111001001011000111110010010110001111100100101100001010111110010011000000101110110001111101001001100111111011001010000011100010110101100001101111001011110001100011011010110111111000100111110011000101111100101110100010001111000101000100010001101111101011110000011011011011110101100000111001110100111101011110001100110011001001011111000110010100001111101000110100001110011001011001111110111111101000101001" + "1111111101010100011100101100111100100110011010000001001011000011000010110001110110000101000110000110001000110111000110010110001111001110111010010000111001000001010100000011010000100011000101110011100010001010000010000010010100011000110000110000110100010001101101101100000011001001000011000110000100001011001100001100101000010000101000100000101110011111011101001000110000110010000010100000100100111011100100001101100010000001011110011110010010100110000111011001000110011110111011111001010111110100111001110010001101000111011110011111011010111100111111101000101001" + "1111111101010100011101000011101100110000001011101001011111010011100011111000110001010100010001111010001000110111110100010001101111100010111001011001000001101101111100110011111011001010000100100111111011101101110101111110011101000011010000110111101111110101111101101001000011100100111101110111110110001001001111110110101100011010111100110000101111100010011101111001101110011011100100110010000101011110000100001100001000011101011100100011100110110110011110001001110101100010000010011111011011110110001011111011101011111101101110010100011111000110111111101000101001" + "1111111101010100010110100000111000101111010000100001000001110100011010001111000010100110111110000101001000101011110000010100001100111110111111011001110101110100011111001011101111010011100111101011111001101001000010011110011111100101101000111011110100011101100111110100100010111000110011100110001111001011001000011110100100010000111101001000110100111111010001011110000100100010001111101100100100101100001111101011110000101000010111111011101000111001011111000101110100111110001010110011100111110111110010111001001011110000100010011101101000111110111111101000101001" + "1111111101010100011001001011000000111110101011111001110011110011001010001000110000110110011011100111001011100011100010010110111110111100100011000011101101100010000100011010001000010010000110110000100010001100010001001100011100111000100010110010000110111001101000011001110010111011100100000101000000101000001100001000110111011001101001000000110110010010000001110100001101111011100110010000110110010111101111101101000100001100010111000011101000110011001001000001101111001110010011101011100111110111110110010111101111101100101111011001001101110000111111101000101001" + "1111111101010100011110100000010010110001100111100101011111010001110011100000100011010101110111111001001111010001000010011101101110010000110101110010000001101000111010000010110101111110000101111100101110001100101110000001010111101100111110111001001110110001010001111110111011100011011101000110000100111101101110010011000010011100001101110100111101000010100001011000111111011010111011111100010110101111100011101111101110111011011111100101001110101110011011111101010001111101100010001111101011100110100011100100001101000011100010011110100000100100111111101000101001" + "1111111101010100011111011011110100100011110101000001010010111100000010001010000011110110111110001000101110110010011111011001111011001110110000011101011101011101110111100011111000101110100101100000101110001000110100001110011011110100000110101111101100001001000111000001011011000111100010110101110011000111001111000101111010010010111011111100110111100010001101101111000101100010000010101111000111111001011010001000111110011010010000111100101000101100111001111101001111001000010011111101001100100101111011100011101011100100000110010110111000111110111111101000101001" + "1111111101010100010010011101110000111001000100011101011000111100111011010000111011110111001100010110001100111001101000011010000010001100110110010000100001001000110110000011011011100111000110111000110001001000010000100100010001100110000100100100111100111101001111011110010011001101110011100110011000010100001011000110000010011110001101011100110001101100001101111101101001111010110000111011000111110101111110101001110000111010011000100010000110110000010010011001110100000100111011000110100000100100110011110111001100001100001001011011001000100000111111101000101001" + "1111111101010100011100101110110000110011011110100001111110111010100010111011001111110100110001111101001100001001110001011111010100110000111001100111001001001111101011100011110010001101100111110010101100001111000100100001011111010100011000111000001001100101111100110100010010110001111110110111110110110011001111101000100110010001100101111110101001111101100001111101000010011011111001000010110101110111111001001111101100110011010011110101111000111011001110000101110010110000001010111101000111100110001000111000101001011110001000011110010100000100111111101000101001" + "1111111101010100011001000100111110100111010001100001001101000001110010100110011111000110100001001111101100011010011110010011000010011100110111100001011001111010011110001011001111000010110101101001110000001000111100010100011101110100011110110011111001000101111001001111001010111100000100100100111001011000001110011010111110010110000110111100111111010011001001100111101000110011011101000111000101111000100010001101110000010111010000111011001110100111100001010001101000111111010010000001001011110100010010000111101101110110011110011001000101111100111111101000101001" + "1111111101010100011100100010011100110001110011000101100001100010100011000010001101110111010101110000001001000011011000010110111100011100110100001000110001010000110000110010111001110100000110110010001000001000101000100000010001101100001000111000110010001101101000010110000010011100111101100110101000001100001110110000101100011011001000000100111011100001000101000011011000010011000110100010000110010111001111001110110001001100011000010101100000111010001100111101000001000011011010110111011000000111011000001001101100010100110000010110011100110000111111101000101001" + "1111111101010100011111011010100000101101111110011001111001010001000011000100111101100111100101100011001111000101101100010001101111101000111101011000011001111000010110011011110000010010010111100101101100001110100011000010010111110100001110110001001110000101110100111100111011110101101100000111010011100011001101011110000110010011110110111110111100101110111001001111010011110011100101111011100111101110001110101111101000100110011000100111010000111101110111000101101000111000010010011111100101100111000101100000101100010001110010011001011110011000111111101000101001" + "1111111101010100010110001101111000111011110101110001100101111110010011000001101011110110111001000011101000010100011110010111000001001100110011110001011001011010000111000011111000100111010100110101110000001100110010011110011111010011101000111111010110000101101111100100100010000011110101000100100010000111101100011111010010010110000001011100110001101001111001000011100110111010110110111100000100111011101111001010000100011110011110010011110100111100010111101001100111101001100011100100101111110101100100000111001000111110011010010110001000001110111111101000101001" + "1111111101010100010110011110001110100111001111011001100011011100111010000101000010000110100001110111101111011110100100010000110111101110110110110110000001111011000100111010001000011101110100011000011001001110001100001011011110110000101110101110111001000001101100110110000011110011110010010110100010001100001100100000100011010110001110011000111000101000111001100111000110100010010111100111100100001001100001101010000100010000010111100011110100111000111011011001001000011000011011000110010100000111001100000101101101110011001000010010000100100000111111101000101001" + "1111111101010100011110010011001100101100010111111001111001001100011011101001100010000100111101101111101110100001110011011010000111010000111111011101101101001100011111001010100111111001110100010111100100001011000100111111011011111010011110110011011110100001110110000011101011001101111001000101100011111010001110110111001000011111000101001100101000111100100001100100011100100011101001101000000101000111100100001101111110100111010001111100101110100101111100001101000101111101100011011100011111010101110000101111101011010001111110011110010010010000111111101000101001" + "1111111101010100010001010001111000110101100111111001110100011111010010111100011000110110001110010011101000110101110000011111100100011010101100111011111001011001101111000011000111110100100101111011011000001010111011111100010011100011011100110111000101110001100011111001001010011010011100000100111001000001101111010111100010010111100010001000100111001000001101101000001011111010111001000110000110111101011000001011100110111000011101010111111000110011110001011001001110000010011010011100110111000100111000010001101111110101100100011100010101111110111111101000101001" + "1111111101010100010010000110110000110011010000010001010000100001000011010110111000000111011000001001101100010001001100011001100001010000111100010010111101101111011110011010001000110000110110110001000001001110110101100000011000110001001000110010001101110001010010000010000011111011110101100100010000010100001000010110001100011100010110111100110110010000001001111101100101111010000100001010000110010001100111001101110001101000011101000010111000111001000101110001000001000100100010101110001110000101000110000110001110011010000110011101100001000110111111101000101001" + "1111111101010100011011011111001100101111001001111001101110011111010011100110011100100110000100011101001111010011000110011110101110001110100010011110000101100101110000010010111101000111100111010011010000001101011111000111011110101101100000110001001111001101110100000011010010001000111101000111100010010100001111010110011000011001011111011100101000111101000001111001000001010011111001010001100111011100011110101110010000001101011011000011110010110000101110010001001001111001000010100001111100110110100111000010001011010011111100011011011110010000111111101000101001" + }, + /* 59*/ { BARCODE_PDF417COMP, -1, UNICODE_MODE | FAST_MODE, 1, 2, -1, "PDF417 APK\012", 0, 6, 69, 0, "ISO 15438:2015 Figure G.1, same, BWIPP uses different encodation (AL before ), same codeword count", "111111110101010001111010101111000011010100001100000111011101100110001" "111111110101010001111010100010000011010000111000100111101000101000001" "111111110101010001110101011111100010110011011110000100111110011000101" - "111111110101010001010111100111100011001100100000010100001100011001001" - "111111110101010001111010111000111011011000001111010110010011101000001" - "111111110101010001111010111101000011110100111101000110010010011111001" + "111111110101010001010111100111100011001100100000010110000110001010001" + "111111110101010001111010111000111011111011000100100101110111111000101" + "111111110101010001111010111101000010011111001110110100011100011011101" }, - /* 30*/ { BARCODE_PDF417COMP, -1, UNICODE_MODE, 4, 4, -1, "ABCDEFG", 0, 10, 103, 1, "", + /* 60*/ { BARCODE_PDF417COMP, -1, UNICODE_MODE, 1, 2, -1, "PDF417 APK\012", 0, 6, 69, 0, "ISO 15438:2015 Figure G.1, same, BWIPP uses different encodation (AL before ), same codeword count", + "111111110101010001111010101111000011010100001100000111011101100110001" + "111111110101010001111010100010000011010000111000100111101000101000001" + "111111110101010001110101011111100010110011011110000100111110011000101" + "111111110101010001010111100111100011001100100000010110000110001010001" + "111111110101010001111010111000111011111011000100100101110111111000101" + "111111110101010001111010111101000010011111001110110100011100011011101" + }, + /* 61*/ { BARCODE_PDF417COMP, -1, UNICODE_MODE | FAST_MODE, 4, 4, -1, "ABCDEFG", 0, 10, 103, 1, "", "1111111101010100011101010011100000110101000011000001111010101111000010100111001110000110100000101100001" "1111111101010100011110101000000100110100000011100101011111101011000010111111010110000101111110101100001" "1111111101010100011010100111110000101111001100011001000001111010100010011111001100100111001011111001001" @@ -872,7 +1322,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100010100110011111000100110000110111101100111000010111010010001011110000110011111010001001" "1111111101010100010100011000001100110001101010000001100011000110011011001001101110000111110111110101001" }, - /* 31*/ { BARCODE_HIBC_PDF, -1, UNICODE_MODE, -1, 3, -1, "H123ABC01234567890D", 0, 8, 120, 0, "BWIPP uses different encodation, same codeword count but zint half-pad shorter", + /* 62*/ { BARCODE_PDF417COMP, -1, UNICODE_MODE, 4, 4, -1, "ABCDEFG", 0, 10, 103, 1, "", + "1111111101010100011101010011100000110101000011000001111010101111000010100111001110000110100000101100001" + "1111111101010100011110101000000100110100000011100101011111101011000010111111010110000101111110101100001" + "1111111101010100011010100111110000101111001100011001000001111010100010011111001100100111001011111001001" + "1111111101010100010101111101111100100001011000110001100011100110010011011011100111000101111000111100101" + "1111111101010100011101011110111000111110011010000101110000010110010011100100011001000100011111001011101" + "1111111101010100011110101111001000111111010111011001110111111010100010100000010011110100111100110001101" + "1111111101010100010100111001110000100001101101000001101100110000110011011000110011000101000000101000001" + "1111111101010100011110100100010000111101001000010001111101011011100011100100001100100101001111100011001" + "1111111101010100010100110011111000100110000110111101100111000010111010010001011110000110011111010001001" + "1111111101010100010100011000001100110001101010000001100011000110011011001001101110000111110111110101001" + }, + /* 63*/ { BARCODE_HIBC_PDF, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "H123ABC01234567890D", 0, 8, 120, 0, "BWIPP uses different encodation, same codeword count but zint half-pad shorter", "111111110101010001111101010111110011101011001111000100000100010010001110001110100010011111010101111100111111101000101001" "111111110101010001111110101000111011110000010001010110101111110111101111100011101101011110101001000000111111101000101001" "111111110101010001010100111100000011111010111101100100001111000101001100101000011111011101010001111110111111101000101001" @@ -882,7 +1344,17 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001110100111011111010100110001100000110100011100111101111010010111100011101001110111110111111101000101001" "111111110101010001111101001011000011100001001100100111010000011001001111011000110100010101111110111000111111101000101001" }, - /* 32*/ { BARCODE_HIBC_PDF, -1, UNICODE_MODE, 1, 3, -1, "A123BJC5D6E71", 0, 6, 120, 1, "BWIPP example", + /* 64*/ { BARCODE_HIBC_PDF, -1, UNICODE_MODE, -1, 3, -1, "H123ABC01234567890D", 0, 8, 120, 0, "BWIPP uses different encodation, same codeword count but zint half-pad shorter", + "111111110101010001111101010111110011101011001111000100000100010010001110001110100010011111010101111100111111101000101001" + "111111110101010001111110101000111011110000010001010110101111110111101111100011101101011110101001000000111111101000101001" + "111111110101010001010100111100000011111010111101100100001111000101001100101000011111011101010001111110111111101000101001" + "111111110101010001101011110011111010000100000101000110001110110010001100100101100000011010111100111110111111101000101001" + "111111110101010001110101110000110010111111010110000110100111100110001011111101011000011110101110011100111111101000101001" + "111111110101010001111101011110110011000111110010010110010100111110001000001001001111011101011111010000111111101000101001" + "111111110101010001110100111011111010100110001100000110100011100111101111010010111100011101001110111110111111101000101001" + "111111110101010001111101001011000011100001001100100111010000011001001111011000110100010101111110111000111111101000101001" + }, + /* 65*/ { BARCODE_HIBC_PDF, -1, UNICODE_MODE | FAST_MODE, 1, 3, -1, "A123BJC5D6E71", 0, 6, 120, 1, "BWIPP example", "111111110101010001111010101111000011110101101111100100000100010010001000011011100110011111010101111100111111101000101001" "111111110101010001111010100010000011110000010001010110101111110111101111000001000101011111101010111000111111101000101001" "111111110101010001010100111100000010110001100011110101111110111101101000111100011011010101000111100000111111101000101001" @@ -890,7 +1362,15 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001111010111000111011010111110011100110100000011100101111110101000111011101011100110000111111101000101001" "111111110101010001111101011110110010011100110011100100011110110011001011001011100000011110101111000100111111101000101001" }, - /* 33*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "ABCDEFGHIJKLMNOPQRSTUV", 0, 20, 38, 1, "ISO 24728:2006 Figure 1 1st 1x20, same", + /* 66*/ { BARCODE_HIBC_PDF, -1, UNICODE_MODE, 1, 3, -1, "A123BJC5D6E71", 0, 6, 120, 1, "BWIPP example", + "111111110101010001111010101111000011110101101111100100000100010010001000011011100110011111010101111100111111101000101001" + "111111110101010001111010100010000011110000010001010110101111110111101111000001000101011111101010111000111111101000101001" + "111111110101010001010100111100000010110001100011110101111110111101101000111100011011010101000111100000111111101000101001" + "111111110101010001010111100111100011100011101001000100001101111011101110001110100010011010111100111110111111101000101001" + "111111110101010001111010111000111011010111110011100110100000011100101111110101000111011101011100110000111111101000101001" + "111111110101010001111101011110110010011100110011100100011110110011001011001011100000011110101111000100111111101000101001" + }, + /* 67*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "ABCDEFGHIJKLMNOPQRSTUV", 0, 20, 38, 1, "ISO 24728:2006 Figure 1 1st 1x20, same", "11110101001000011000110010011110101001" "11100101001111110101011100011100101001" "11101101001010011001111100011101101001" @@ -912,7 +1392,29 @@ static void test_encode(const testCtx *const p_ctx) { "11011101001111011111011010011011101001" "11011001001100010001110100011011001001" }, - /* 34*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 20, 55, 1, "ISO 24728:2006 Figure 1 2nd 2x20, same", + /* 68*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "ABCDEFGHIJKLMNOPQRSTUV", 0, 20, 38, 1, "ISO 24728:2006 Figure 1 1st 1x20, same", + "11110101001000011000110010011110101001" + "11100101001111110101011100011100101001" + "11101101001010011001111100011101101001" + "11101001001101000001011000011101001001" + "11101001101010000111110011011101001101" + "11101011101011001110011111011101011101" + "11101011001100100001101110011101011001" + "11101010001101100111100100011101010001" + "11001010001001100001000111011001010001" + "11001011001001100111100111011001011001" + "11001011101001100101111110011001011101" + "11001001101000001010111100011001001101" + "11001101101111001100100111011001101101" + "11101101101011100111111010011101101101" + "11100101101110011110100111011100101101" + "11000101101110001010011100011000101101" + "11000101001100010111100110011000101001" + "11001101001000011001000111011001101001" + "11011101001111011111011010011011101001" + "11011001001100010001110100011011001001" + }, + /* 69*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 20, 55, 1, "ISO 24728:2006 Figure 1 2nd 2x20, same", "1111010100100001100011001001111010101111000011110101001" "1110010100110101111110111101111101000100110011100101001" "1110110100101101100111100001011001110011111011101101001" @@ -934,7 +1436,29 @@ static void test_encode(const testCtx *const p_ctx) { "1101110100111010110011110001000001001101100011011101001" "1101100100111100110110100001001001111001000011011001001" }, - /* 35*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN", 0, 20, 82, 1, "ISO 24728:2006 Figure 1 3rd 3x20", + /* 70*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 20, 55, 1, "ISO 24728:2006 Figure 1 2nd 2x20, same", + "1111010100100001100011001001111010101111000011110101001" + "1110010100110101111110111101111101000100110011100101001" + "1110110100101101100111100001011001110011111011101101001" + "1110100100110010000110111001110001011001111011101001001" + "1110100110111001000001101001001101011111100011101001101" + "1110101110110111100101100001000001010111100011101011101" + "1110101100100011001100100001100111001110011011101011001" + "1110101000111111010101110001101011111101111011101010001" + "1100101000101000001000111101011011001111000011001010001" + "1100101100110010001001100001100100001101110011001011001" + "1100101110110110011110010001110010000011010011001011101" + "1100100110110011101000011101101111001011000011001001101" + "1100110110110001101000100001000110011001000011001101101" + "1110110110111000110011101001111110101011100011101101101" + "1110010110101001100111110001000110010011100011100101101" + "1100010110110110011011000001100110100010000011000101101" + "1100010100111111001010011101110000100110100011000101001" + "1100110100111001111100101101111110010011010011001101001" + "1101110100111010110011110001000001001101100011011101001" + "1101100100111100110110100001001001111001000011011001001" + }, + /* 71*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN", 0, 20, 82, 1, "ISO 24728:2006 Figure 1 3rd 3x20", "1100100010100001100011001001011110010111101010111100001010011100111000011100101101" "1110100010111110100010011001011110110101000011111001101001011110010000011000101101" "1110110010111100010111101001001110110110111011001111001001100001000111011000101001" @@ -956,7 +1480,29 @@ static void test_encode(const testCtx *const p_ctx) { "1111010100101111011110100001011001000111110011010111101011110111110110011010000101" "1110010100110010001111011001011001100111000010111011001110001011100110011011000101" }, - /* 36*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZAB", 0, 20, 99, 1, "ISO 24728:2006 Figure 1 4th 4x20, same", + /* 72*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN", 0, 20, 82, 1, "ISO 24728:2006 Figure 1 3rd 3x20", + "1100100010100001100011001001011110010111101010111100001010011100111000011100101101" + "1110100010111110100010011001011110110101000011111001101001011110010000011000101101" + "1110110010111100010111101001001110110110111011001111001001100001000111011000101001" + "1100110010100110011110011101001110100111001100001001101100011010001000011001101001" + "1101110010110000101111011001001100100111000110011101001111110101011100011011101001" + "1101111010101001100111110001001100110101000001000111101011011001111000011011001001" + "1100111010110010001001100001001000110110010000110111001110001011001111011011001101" + "1110111010111001000001101001001000010100110101111110001001100101111110011011011101" + "1110011010100000101011110001011000010110111110101000001101111100010001011011011001" + "1111011010111101010111100001011100010101001110011100001101000001011000011011010001" + "1111001010101000011111001101011100110100101111001000001110110111100110011010010001" + "1110001010110111011001111001011100100101111100110010001110011111010110011010110001" + "1100001010111100111101010001011101100111100111100101001111101110100111011010111001" + "1100011010111001101110010001001101100101001111000001001111010001100110011010111101" + "1100010010110010001111110101000101100110011100001011101111001000111101011010011101" + "1110010010100110001100000101000101000110111101110001001101100110110000011010011001" + "1111010010100111010001111101001101000100110111110100001111001110111010011010001001" + "1111010110101100100000011101011101000110001101000111101000000100101111011010001101" + "1111010100101111011110100001011001000111110011010111101011110111110110011010000101" + "1110010100110010001111011001011001100111000010111011001110001011100110011011000101" + }, + /* 73*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZAB", 0, 20, 99, 1, "ISO 24728:2006 Figure 1 4th 4x20, same", "110010001010000110001100100111101010111100001011110010101001110011100001101000001011000011100101101" "111010001010100001111100110100101111001000001011110110111011011110011001101100111100100011000101101" "111011001010011000010001110110011101000011101001110110110111100101100001000001010111100011000101001" @@ -978,7 +1524,29 @@ static void test_encode(const testCtx *const p_ctx) { "111101010011100011101010000110001011101111001011001000111110111101011001100101110111100011010000101" "111001010010001000001111010111100010100001001011001100100111101101111101001110100111110011011000101" }, - /* 37*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "123456789012345", 0, 14, 38, 1, "Number Compaction", + /* 74*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZAB", 0, 20, 99, 1, "ISO 24728:2006 Figure 1 4th 4x20, same", + "110010001010000110001100100111101010111100001011110010101001110011100001101000001011000011100101101" + "111010001010100001111100110100101111001000001011110110111011011110011001101100111100100011000101101" + "111011001010011000010001110110011101000011101001110110110111100101100001000001010111100011000101001" + "110011001010001100110010000110011100111001101001110100111101010111100001010011100111000011001101001" + "110111001011111010001001100101000011111001101001100100100101111001000001110110111100110011011101001" + "110111101011011101100111100100110000100011101001100110110011101000011101101111001011000011011001001" + "110011101011000110100010000100011001100100001001000110110011100111001101111010101111000011011001101" + "111011101011010111111011110111110100010011001001000010101000011111001101001011110010000011011011101" + "111001101011110001011110100110111011001111001011000010100110000100011101100111010000111011011011001" + "111101101011100110000100110110001101000100001011100010100011001100100001100111001110011011011010001" + "111100101011111101010111000110101111110111101011100110111110100010011001010000111110011011010010001" + "111000101010110011100111110111100010111101001011100100110111011001111001001100001000111011010110001" + "110000101010011001111001110111001100001001101011101100110001101000100001000110011001000011010111001" + "110001101011100011001110100111111010101110001001101100111101001110111001011111011001111011010111101" + "110001001011110101111101100101111001110011101000101100101110110111000001000010000101111011010011101" + "111001001010000010100000100111000111010010001000101000110010000010110001101100010000001011010011001" + "111101001011110111001110100110000010011100101001101000111101100110001001011110100001111011010001001" + "111101011010000001010011110100110110001111001011101000110000111100101101111010011110010011010001101" + "111101010011100011101010000110001011101111001011001000111110111101011001100101110111100011010000101" + "111001010010001000001111010111100010100001001011001100100111101101111101001110100111110011011000101" + }, + /* 75*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "123456789012345", 0, 14, 38, 1, "Number Compaction", "11101110101011111101001100011101110101" "11100110101110101011111100011100110101" "11110110101000001011001100011110110101" @@ -994,7 +1562,55 @@ static void test_encode(const testCtx *const p_ctx) { "11100101001101011110000110011100101001" "11101101001101000111111001011101101001" }, - /* 38*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "\177\177\177", 0, 8, 55, 1, "Byte Compaction", + /* 76*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "123456789012345", 0, 14, 38, 1, "Number Compaction", + "11101110101011111101001100011101110101" + "11100110101110101011111100011100110101" + "11110110101000001011001100011110110101" + "11110010101111100100110111011110010101" + "11100010101000111110110010011100010101" + "11000010101010000010100000011000010101" + "11000110101110001100111010011000110101" + "11000100101000100001001111011000100101" + "11100100101011110011110010011100100101" + "11110100101110011000011101011110100101" + "11110101101000101000001111011110101101" + "11110101001111001010011110011110101001" + "11100101001101011110000110011100101001" + "11101101001101000111111001011101101001" + }, + /* 77*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "+12345678901", 0, 14, 38, 0, "Single mixed + Number Compaction; BWIPP different encodation", + "11101110101011111101011000011101110101" + "11100110101101111110001101011100110101" + "11110110101001111011110100011110110101" + "11110010101101000111100011011110010101" + "11100010101111110100011001011100010101" + "11000010101100100000101100011000010101" + "11000110101101001110000001011000110101" + "11000100101001111011000110011000100101" + "11100100101010001110001110011100100101" + "11110100101110101111001110011110100101" + "11110101101110011110101110011110101101" + "11110101001001011000110000011110101001" + "11100101001101001110001000011100101001" + "11101101001000010011011111011101101001" + }, + /* 78*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "+12345678901", 0, 14, 38, 0, "Single mixed + Number Compaction; BWIPP different encodation", + "11101110101011111101011000011101110101" + "11100110101101111110001101011100110101" + "11110110101001111011110100011110110101" + "11110010101101000111100011011110010101" + "11100010101111110100011001011100010101" + "11000010101100100000101100011000010101" + "11000110101101001110000001011000110101" + "11000100101001111011000110011000100101" + "11100100101010001110001110011100100101" + "11110100101110101111001110011110100101" + "11110101101110011110101110011110101101" + "11110101001001011000110000011110101001" + "11100101001101001110001000011100101001" + "11101101001000010011011111011101101001" + }, + /* 79*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "\177\177\177", 0, 8, 55, 1, "Byte Compaction", "1100100010100000100001000101010000010010000011001000101" "1110100010111110100010001101111101000100011011101000101" "1110110010110001111100100101100011111001001011101100101" @@ -1004,7 +1620,17 @@ static void test_encode(const testCtx *const p_ctx) { "1100111010111001111001100101000001001101100011001110101" "1110111010111000101111011101110001000011010011101110101" }, - /* 39*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "\177\177\177\177\177\177", 0, 8, 55, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", + /* 80*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "\177\177\177", 0, 8, 55, 1, "Byte Compaction", + "1100100010100000100001000101010000010010000011001000101" + "1110100010111110100010001101111101000100011011101000101" + "1110110010110001111100100101100011111001001011101100101" + "1100110010100001100011001001000011000110010011001100101" + "1101110010111001000111011001011011111101100011011100101" + "1101111010111010011111101101001110010011000011011110101" + "1100111010111001111001100101000001001101100011001110101" + "1110111010111000101111011101110001000011010011101110101" + }, + /* 81*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "\177\177\177\177\177\177", 0, 8, 55, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", "1100100010110001110001101001110010011001111011001000101" "1110100010100010001111010001110010000111011011101000101" "1110110010101000011001111101101000101111100011101100101" @@ -1014,7 +1640,17 @@ static void test_encode(const testCtx *const p_ctx) { "1100111010100100010000100001110111101100001011001110101" "1110111010111110011010100001101100001111010011101110101" }, - /* 40*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFG\177\177\177", 0, 8, 82, 1, "Text & Byte Compaction", + /* 82*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "\177\177\177\177\177\177", 0, 8, 55, 1, "Byte Compaction, mod 6 == 0 (924 emitted)", + "1100100010110001110001101001110010011001111011001000101" + "1110100010100010001111010001110010000111011011101000101" + "1110110010101000011001111101101000101111100011101100101" + "1100110010100001100011001001000011000110010011001100101" + "1101110010101110001001111101101000111000001011011100101" + "1101111010100011001101111001010010000111100011011110101" + "1100111010100100010000100001110111101100001011001110101" + "1110111010111110011010100001101100001111010011101110101" + }, + /* 83*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFG\177\177\177", 0, 8, 82, 1, "Text & Byte Compaction", "1100111010100001100011001001000010110111101010111100001010011100111000011001110101" "1110111010111110100010011001000010010110100000011100101101111110101110011101110101" "1110011010101000000101111001000011010101000000101111001010000001011110011100110101" @@ -1024,7 +1660,51 @@ static void test_encode(const testCtx *const p_ctx) { "1100001010111110111010111001001100010110011100011000101101100001100110011000010101" "1100011010110100011100001001001110010110110000111101001100011011110010011000110101" }, - /* 41*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "\177\177\177abcdefgh1234567890123", 0, 8, 99, 1, "Byte & Text & Numeric Compaction", + /* 84*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFG\177\177\177", 0, 8, 82, 1, "Text & Byte Compaction", + "1100111010100001100011001001000010110111101010111100001010011100111000011001110101" + "1110111010111110100010011001000010010110100000011100101101111110101110011101110101" + "1110011010101000000101111001000011010101000000101111001010000001011110011100110101" + "1111011010100001100011001001000111010100100001010000001111001110100011011110110101" + "1111001010111000001001100101000110010111010011000010001110100110000100011110010101" + "1110001010101111010001000001000100010101100010000011101000000111001011011100010101" + "1100001010111110111010111001001100010110011100011000101101100001100110011000010101" + "1100011010110100011100001001001110010110110000111101001100011011110010011000110101" + }, + /* 85*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "\177\177\177abcd123456789", 0, 8, 99, 1, "Byte & Text & Numeric Compaction", + "110011101010000010000100010101000001001000001000010110101000001001000001010000010010000011001110101" + "111011101010111111010110000110000010111001001000010010111101011100111001010011111000011011101110101" + "111001101011111010111101100101000100000111101000011010111110010111101101110010011111001011100110101" + "111101101011001000010011000100001100011001001000111010100001100011001001000011000110010011110110101" + "111100101010111111010110000101111110101100001000110010100100001111001001001110010111110011110010101" + "111000101010010101111000000111111011011101001000100010101100000110111101000100011011111011100010101" + "110000101011100011001101110100001101110110001001100010100010110000110001101100110000110011000010101" + "110001101011101110011110100101000011111001101001110010110001011110011001110011011101000011000110101" + }, + /* 86*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "\177\177\177abcd123456789", 0, 6, 99, 0, "Byte & Text & Numeric Compaction -> BYT(8) NUM(8); BWIPP same as FAST_MODE", + "110010001010000010000100010111001001100111101011001110100001010000100001100010010000110011001000101" + "111010001011110111001110100110010111100001101001001110110100111000001001011111101001100011101000101" + "111011001011101010111111000100001001101111101001101110110001111101000101001000000101111011101100101" + "110011001010001110011110110101001110011100001000101110100010000110110001000001000011011011001100101" + "110111001011101100011100010101001111100001101000100110111001100111010001111011000110100011011100101" + "110111101010111101000000100111011111100101001000110110101101001110000001011100010011000011011110101" + }, + /* 87*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "\177\177\177abcdef12345", 0, 6, 99, 1, "Byte & Text & Numeric Compaction", + "110010001010000010000100010101000001001000001011001110101000001001000001010000010010000011001000101" + "111010001010111111010110000110000010111001001001001110111101011100111001110100111001100011101000101" + "111011001010110100000111000111110101111011001001101110101000100000111101101101000001111011101100101" + "110011001010011011000010000110010001000001101000101110101101110110000001010000011011000011001100101" + "110111001011001011101000000101001111110011101000100110111010111101110001111101110011001011011100101" + "110111101010011100110011100110100011111101001000110110100110100000111001100100100111110011011110101" + }, + /* 88*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "\177\177\177abcd123456789", 0, 6, 99, 0, "Byte & Text & Numeric Compaction; BWIPP same as FAST_MODE", + "110010001010000010000100010111001001100111101011001110100001010000100001100010010000110011001000101" + "111010001011110111001110100110010111100001101001001110110100111000001001011111101001100011101000101" + "111011001011101010111111000100001001101111101001101110110001111101000101001000000101111011101100101" + "110011001010001110011110110101001110011100001000101110100010000110110001000001000011011011001100101" + "110111001011101100011100010101001111100001101000100110111001100111010001111011000110100011011100101" + "110111101010111101000000100111011111100101001000110110101101001110000001011100010011000011011110101" + }, + /* 89*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "\177\177\177abcdefgh1234567890123", 0, 8, 99, 1, "Byte & Text & Numeric Compaction", "110011101010000010000100010101000001001000001000010110101000001001000001010000010010000011001110101" "111011101010111111010110000110000010111001001000010010111101011100111001110100111001100011101110101" "111001101011111001011110110101100110011110001000011010100001111000101001111110101100010011100110101" @@ -1034,7 +1714,17 @@ static void test_encode(const testCtx *const p_ctx) { "110000101011000011010000100100000101101100001001100010101110111110111001111001110010110011000010101" "110001101011101110111100010100100011110100001001110010100000101111000101111001010010000011000110101" }, - /* 42*/ { BARCODE_HIBC_MICPDF, -1, UNICODE_MODE, -1, 4, -1, "H123ABC01234567890D", 0, 8, 99, 0, "BWIPP uses different encodation, same codeword count but zint full-pad shorter", + /* 90*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "\177\177\177abcdefgh1234567890123", 0, 8, 99, 1, "Byte(6) & Text & Numeric Compaction", + "110011101010000010000100010101000001001000001000010110101000001001000001010000010010000011001110101" + "111011101010111111010110000110000010111001001000010010111101011100111001110100111001100011101110101" + "111001101011111001011110110101100110011110001000011010100001111000101001111110101100010011100110101" + "111101101011010000100001100100000100110110001000111010100000101101100001001001110011100011110110101" + "111100101010111111010110000101111110101100001000110010101111101011100001110011000111010011110010101" + "111000101010111111011110110110111111000110101000100010100111000000101101001111101101000011100010101" + "110000101011000011010000100100000101101100001001100010101110111110111001111001110010110011000010101" + "110001101011101110111100010100100011110100001001110010100000101111000101111001010010000011000110101" + }, + /* 91*/ { BARCODE_HIBC_MICPDF, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "H123ABC01234567890D", 0, 8, 99, 0, "BWIPP uses different encodation, same codeword count but zint full-pad shorter", "110011101010000110001100100100000100010010001000010110111000111010001001000001001100011011001110101" "111011101011010111111011110111110001110110101000010010111101011100111001011111101001100011101110101" "111001101011001010000111110100011110101000001000011010100111110001101001011011000111100011100110101" @@ -1044,7 +1734,17 @@ static void test_encode(const testCtx *const p_ctx) { "110000101010110110001000000111000101100111101001100010110111101110000101100010101100000011000010101" "110001101011110110000011010111100100001101101001110010101101011111100001111001000110011011000110101" }, - /* 43*/ { BARCODE_HIBC_MICPDF, -1, UNICODE_MODE, -1, 1, -1, "/EAH783", 0, 17, 38, 1, "HIBC Provider Applications Standard (PAS) example", + /* 92*/ { BARCODE_HIBC_MICPDF, -1, UNICODE_MODE, -1, 4, -1, "H123ABC01234567890D", 0, 8, 99, 0, "BWIPP uses different encodation, same codeword count but zint full-pad shorter", + "110011101010000110001100100100000100010010001000010110111000111010001001000001001100011011001110101" + "111011101011010111111011110111110001110110101000010010111101011100111001011111101001100011101110101" + "111001101011001010000111110100011110101000001000011010100111110001101001011011000111100011100110101" + "111101101010000110001100100101000010001000001000111010100001100011001001000011000110010011110110101" + "111100101010111111010110000101111110101100001000110010111001001100001001111110001101011011110010101" + "111000101010001100101110000110010010011111001000100010100111100001101101111110101100010011100010101" + "110000101010110110001000000111000101100111101001100010110111101110000101100010101100000011000010101" + "110001101011110110000011010111100100001101101001110010101101011111100001111001000110011011000110101" + }, + /* 93*/ { BARCODE_HIBC_MICPDF, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "/EAH783", 0, 17, 38, 1, "HIBC Provider Applications Standard (PAS) example", "11001101001100011111001001011001101001" "11011101001000001000100100011011101001" "11011001001000100011110100011011001001" @@ -1063,7 +1763,26 @@ static void test_encode(const testCtx *const p_ctx) { "11010000101101100100001111011010000101" "11011000101110111000100010011011000101" }, - /* 44*/ { BARCODE_PDF417, 9, DATA_MODE, -1, -1, -1, "\342", 0, 7, 103, 1, "β", + /* 94*/ { BARCODE_HIBC_MICPDF, -1, UNICODE_MODE, -1, 1, -1, "/EAH783", 0, 17, 38, 1, "HIBC Provider Applications Standard (PAS) example", + "11001101001100011111001001011001101001" + "11011101001000001000100100011011101001" + "11011001001000100011110100011011001001" + "11011001101111010000111101011011001101" + "11011011101101100100010000011011011101" + "11011011001111001010000100011011011001" + "11011010001010000110011111011011010001" + "11010010001101001100001110011010010001" + "11010110001011111101011000011010110001" + "11010111001100011111001001011010111001" + "11010111101100110001000010011010111101" + "11010011101100001000111001011010011101" + "11010011001011110111000111011010011001" + "11010001001110001100100011011010001001" + "11010001101110010000110100011010001101" + "11010000101101100100001111011010000101" + "11011000101110111000100010011011000101" + }, + /* 95*/ { BARCODE_PDF417, 9, DATA_MODE, -1, -1, -1, "\342", 0, 7, 103, 1, "β", "1111111101010100011111010101111100110101000110000001100011100011001011110101011110000111111101000101001" "1111111101010100011111010100011000111110101000011001011111100100011011110101001000000111111101000101001" "1111111101010100011101010111111000110110010011110001100011111001001011010100011111000111111101000101001" @@ -1072,7 +1791,16 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011110101111010000100011110001000101000110010111000011110101111000010111111101000101001" "1111111101010100011101001110111110101110001110001001010001101100000011010011101111000111111101000101001" }, - /* 45*/ { BARCODE_MICROPDF417, 9, DATA_MODE, -1, 1, -1, "\342\343", 0, 14, 38, 1, "βγ", + /* 96*/ { BARCODE_PDF417, 9, DATA_MODE, -1, -1, -1, "\342", 0, 7, 103, 1, "β", + "1111111101010100011111010101111100110101000110000001100011100011001011110101011110000111111101000101001" + "1111111101010100011111010100011000111110101000011001011111100100011011110101001000000111111101000101001" + "1111111101010100011101010111111000110110010011110001100011111001001011010100011111000111111101000101001" + "1111111101010100011010111100111110100110011100110001010001100001100010101111001111000111111101000101001" + "1111111101010100011010111000010000110110001111000101111110010010111011110101110011100111111101000101001" + "1111111101010100011110101111010000100011110001000101000110010111000011110101111000010111111101000101001" + "1111111101010100011101001110111110101110001110001001010001101100000011010011101111000111111101000101001" + }, + /* 97*/ { BARCODE_MICROPDF417, 9, DATA_MODE, -1, 1, -1, "\342\343", 0, 14, 38, 1, "βγ", "11101110101001111110010110011101110101" "11100110101101010000111110011100110101" "11110110101000001000010001011110110101" @@ -1088,7 +1816,23 @@ static void test_encode(const testCtx *const p_ctx) { "11100101001011100101111100011100101001" "11101101001101001001111100011101101001" }, - /* 46*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "12345678", 0, 11, 38, 0, "1 columns x 11 rows, variant 1; BWIPP uses byte compaction TODO: investigate", + /* 98*/ { BARCODE_MICROPDF417, 9, DATA_MODE, -1, 1, -1, "\342\343", 0, 14, 38, 1, "βγ", + "11101110101001111110010110011101110101" + "11100110101101010000111110011100110101" + "11110110101000001000010001011110110101" + "11110010101111001011001100011110010101" + "11100010101110110010011111011100010101" + "11000010101000011000110010011000010101" + "11000110101011111101011000011000110101" + "11000100101001111000101000011000100101" + "11100100101000100000101000011100100101" + "11110100101101110010111111011110100101" + "11110101101101100101111000011110101101" + "11110101001101011100111100011110101001" + "11100101001011100101111100011100101001" + "11101101001101001001111100011101101001" + }, + /* 99*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "12345678", 0, 11, 38, 1, "1 columns x 11 rows, variant 1", "11001000101001111011110100011100110101" "11101000101110100011000001011110110101" "11101100101000011010011100011110010101" @@ -1101,7 +1845,20 @@ static void test_encode(const testCtx *const p_ctx) { "11110110101001000001000010011110101101" "11110010101110001001110110011110101001" }, - /* 47*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "123456789012345678901234567890", 0, 20, 38, 1, "1 columns x 20 rows, variant 4", + /*100*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "12345678", 0, 11, 38, 1, "1 columns x 11 rows, variant 1", + "11001000101001111011110100011100110101" + "11101000101110100011000001011110110101" + "11101100101000011010011100011110010101" + "11001100101100110011000011011100010101" + "11011100101111100001010110011000010101" + "11011110101101100100111100011000110101" + "11001110101011110011111011011000100101" + "11101110101000110111110010011100100101" + "11100110101011011110111111011110100101" + "11110110101001000001000010011110101101" + "11110010101110001001110110011110101001" + }, + /*101*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "123456789012345678901234567890", 0, 20, 38, 1, "1 columns x 20 rows, variant 4", "11110101001001111011110100011110101001" "11100101001111101010011000011100101001" "11101101001111110010011001011101101001" @@ -1123,7 +1880,29 @@ static void test_encode(const testCtx *const p_ctx) { "11011101001011110111101000011011101001" "11011001001010001111000010011011001001" }, - /* 48*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "1234567890123456789012345678901234567890", 0, 24, 38, 1, "1 columns x 24 rows, variant 5", + /*102*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "123456789012345678901234567890", 0, 20, 38, 1, "1 columns x 20 rows, variant 4", + "11110101001001111011110100011110101001" + "11100101001111101010011000011100101001" + "11101101001111110010011001011101101001" + "11101001001001110011110110011101001001" + "11101001101111100010100110011101001101" + "11101011101010000010111100011101011101" + "11101011001011000111100111011101011001" + "11101010001110100000111011011101010001" + "11001010001110011101001111011001010001" + "11001011001100101110011110011001011001" + "11001011101100111011111010011001011101" + "11001001101011011000111100011001001101" + "11001101101100110000010010011001101101" + "11101101101100100011110110011101101101" + "11100101101001111110111001011100101101" + "11000101101001110011100100011000101101" + "11000101001010000111100100011000101001" + "11001101001011111101110001011001101001" + "11011101001011110111101000011011101001" + "11011001001010001111000010011011001001" + }, + /*103*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "1234567890123456789012345678901234567890", 0, 24, 38, 1, "1 columns x 24 rows, variant 5", "11100110101000011110001010011110100101" "11110110101101001000011000011110101101" "11110010101101000011100010011110101001" @@ -1149,7 +1928,33 @@ static void test_encode(const testCtx *const p_ctx) { "11001101101000101101100000011011001101" "11101101101111000010010010011011011101" }, - /* 49*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "12345678901234567890123456789012345678901234567890", 0, 28, 38, 1, "1 columns x 28 rows, variant 6", + /*104*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "1234567890123456789012345678901234567890", 0, 24, 38, 1, "1 columns x 24 rows, variant 5", + "11100110101000011110001010011110100101" + "11110110101101001000011000011110101101" + "11110010101101000011100010011110101001" + "11100010101001000011011111011100101001" + "11000010101011000011001000011101101001" + "11000110101100010111000100011101001001" + "11000100101110110101111100011101001101" + "11100100101101011100011110011101011101" + "11110100101001001111000001011101011001" + "11110101101110001110101111011101010001" + "11110101001101100001000010011001010001" + "11100101001110111011110100011001011001" + "11101101001111110100111011011001011101" + "11101001001000010000110011011001001101" + "11101001101111010000010010011001101101" + "11101011101100011111001001011101101101" + "11101011001000010011100111011100101101" + "11101010001111101100001001011000101101" + "11001010001011101101110000011000101001" + "11001011001000010011011000011001101001" + "11001011101100110111100100011011101001" + "11001001101001110011011100011011001001" + "11001101101000101101100000011011001101" + "11101101101111000010010010011011011101" + }, + /*105*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 1, -1, "12345678901234567890123456789012345678901234567890", 0, 28, 38, 1, "1 columns x 28 rows, variant 6", "11101011001001111011110100011100101101" "11101010001100010111110111011000101101" "11001010001110100111110001011000101001" @@ -1179,7 +1984,37 @@ static void test_encode(const testCtx *const p_ctx) { "11010000101001111001100110011001110101" "11011000101110101011100000011101110101" }, - /* 50*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTU", 0, 11, 55, 1, "2 columns x 11 rows, variant 8", + /*106*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 1, -1, "12345678901234567890123456789012345678901234567890", 0, 28, 38, 1, "1 columns x 28 rows, variant 6", + "11101011001001111011110100011100101101" + "11101010001100010111110111011000101101" + "11001010001110100111110001011000101001" + "11001011001010000011000110011001101001" + "11001011101110010000001101011011101001" + "11001001101111110001011010011011001001" + "11001101101010011110111100011011001101" + "11101101101111110101101111011011011101" + "11100101101101101000111100011011011001" + "11000101101001100111000011011011010001" + "11000101001101111101001111011010010001" + "11001101001000111001011000011010110001" + "11011101001100010001000011011010111001" + "11011001001011111001011100011010111101" + "11011001101010110111110000011010011101" + "11011011101110111010100000011010011001" + "11011011001111110101011100011010001001" + "11011010001000011100001011011010001101" + "11010010001010001100011000011010000101" + "11010110001011111101011000011011000101" + "11010111001110111110101100011001000101" + "11010111101101011110111110011101000101" + "11010011101011110100111100011101100101" + "11010011001011101110111100011001100101" + "11010001001000101100001100011011100101" + "11010001101111101000100011011011110101" + "11010000101001111001100110011001110101" + "11011000101110101011100000011101110101" + }, + /*107*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTU", 0, 11, 55, 1, "2 columns x 11 rows, variant 8", "1100100010100001100011001001111010101111000011100110101" "1110100010110101111110111101111101000100110011110110101" "1110110010101101100111100001011001110011111011110010101" @@ -1192,7 +2027,20 @@ static void test_encode(const testCtx *const p_ctx) { "1111011010111000110100001101000101110111000011110101101" "1111001010110001011100000101000100011110001011110101001" }, - /* 51*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZA", 0, 14, 55, 1, "2 columns x 14 rows, variant 9", + /*108*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTU", 0, 11, 55, 1, "2 columns x 11 rows, variant 8", + "1100100010100001100011001001111010101111000011100110101" + "1110100010110101111110111101111101000100110011110110101" + "1110110010101101100111100001011001110011111011110010101" + "1100110010110010000110111001110001011001111011100010101" + "1101110010111001000001101001001101011111100011000010101" + "1101111010110111100101100001100001101001111011000110101" + "1100111010100001100011001001110010000101110011000100101" + "1110111010111101110111010001111100001010110011100100101" + "1110011010110010001001111101101100101111000011110100101" + "1111011010111000110100001101000101110111000011110101101" + "1111001010110001011100000101000100011110001011110101001" + }, + /*109*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZA", 0, 14, 55, 1, "2 columns x 14 rows, variant 9", "1110111010101111110101100001111110101011100011101110101" "1110011010101001100111110001010000010001111011100110101" "1111011010111101101000011101100100010011000011110110101" @@ -1208,7 +2056,23 @@ static void test_encode(const testCtx *const p_ctx) { "1110010100101111100110111101110110011110011011100101001" "1110110100100000011010111001100111101000011011101101001" }, - /* 52*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL", 0, 17, 55, 1, "2 columns x 17 rows, variant 10", + /*110*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZA", 0, 14, 55, 1, "2 columns x 14 rows, variant 9", + "1110111010101111110101100001111110101011100011101110101" + "1110011010101001100111110001010000010001111011100110101" + "1111011010111101101000011101100100010011000011110110101" + "1111001010111011011110011001101100111100100011110010101" + "1110001010100110000100011101100111010000111011100010101" + "1100001010111001100001001101100011010001000011000010101" + "1100011010110000101111011001110001100111010011000110101" + "1100010010101011100011111101100011111001001011000100101" + "1110010010100001100011001001000011000110010011100100101" + "1111010010101111110101100001110111000111101011110100101" + "1111010110101111110111001001111001011110100011110101101" + "1111010100101010000010000001110100001001110011110101001" + "1110010100101111100110111101110110011110011011100101001" + "1110110100100000011010111001100111101000011011101101001" + }, + /*111*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL", 0, 17, 55, 1, "2 columns x 17 rows, variant 10", "1100110100110001111100100101110101011111100011001101001" "1101110100101001110011100001101000001011000011011101001" "1101100100101000011111001101001011110010000011011001001" @@ -1227,7 +2091,26 @@ static void test_encode(const testCtx *const p_ctx) { "1101000010101110011101111001010010011110000011010000101" "1101100010100101111101111101000110000011010011011000101" }, - /* 53*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", 0, 23, 55, 1, "2 columns x 23 rows, variant 12", + /*112*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL", 0, 17, 55, 1, "2 columns x 17 rows, variant 10", + "1100110100110001111100100101110101011111100011001101001" + "1101110100101001110011100001101000001011000011011101001" + "1101100100101000011111001101001011110010000011011001001" + "1101100110111100010111101001101110110011110011011001101" + "1101101110111101110101100001001100111100111011011011101" + "1101101100100110010111111001111101110011001011011011001" + "1101101000110111110101000001101111100010001011011010001" + "1101001000111101010111100001010011100111000011010010001" + "1101011000111110100010011001010000111110011011010110001" + "1101011100101100111001111101111000101111010011010111001" + "1101011110100001100011001001000011000110010011010111101" + "1101001110101111110101100001011111101011000011010011101" + "1101001100101110100000110001001111001010000011010011001" + "1101000100111001000110111101110011000010011011010001001" + "1101000110111111001010111001111000101100110011010001101" + "1101000010101110011101111001010010011110000011010000101" + "1101100010100101111101111101000110000011010011011000101" + }, + /*113*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", 0, 23, 55, 1, "2 columns x 23 rows, variant 12", "1110011010110001111100100101110101011111100011110100101" "1111011010101001110011100001101000001011000011110101101" "1111001010101000011111001101001011110010000011110101001" @@ -1252,7 +2135,32 @@ static void test_encode(const testCtx *const p_ctx) { "1100100110101100011011110001111101101111010011011001001" "1100110110100001000010000101100010001000011011011001101" }, - /* 54*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ", 0, 26, 55, 1, "2 columns x 26 rows, variant 13", + /*114*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", 0, 23, 55, 1, "2 columns x 23 rows, variant 12", + "1110011010110001111100100101110101011111100011110100101" + "1111011010101001110011100001101000001011000011110101101" + "1111001010101000011111001101001011110010000011110101001" + "1110001010111100010111101001101110110011110011100101001" + "1100001010111101110101100001001100111100111011101101001" + "1100011010100110010111111001111101110011001011101001001" + "1100010010110111110101000001101111100010001011101001101" + "1110010010111101010111100001010011100111000011101011101" + "1111010010111110100010011001010000111110011011101011001" + "1111010110101100111001111101111000101111010011101010001" + "1111010100111000101100111101111011101011000011001010001" + "1110010100100110101111110001001100101111110011001011001" + "1110110100100000101011110001101111101010000011001011101" + "1110100100110011100111001101111010101111000011001001101" + "1110100110110101111110111101111101000100110011001101101" + "1110101110111110010011100101100011111001001011101101101" + "1110101100100001100011001001110111100110010011100101101" + "1110101000110111011111001001110000100011010011000101101" + "1100101000100011010011100001011000100000111011000101001" + "1100101100111010001001110001101000101100000011001101001" + "1100101110111010000001101001011001111100010011011101001" + "1100100110101100011011110001111101101111010011011001001" + "1100110110100001000010000101100010001000011011011001101" + }, + /*115*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ", 0, 26, 55, 1, "2 columns x 26 rows, variant 13", "1100101000110001111100100101110101011111100011000101001" "1100101100101001110011100001101000001011000011001101001" "1100101110101000011111001101001011110010000011011101001" @@ -1280,7 +2188,35 @@ static void test_encode(const testCtx *const p_ctx) { "1101000010100010111011111101010100011110000011001110101" "1101100010110001000001011001110101000111000011101110101" }, - /* 55*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJ", 0, 6, 82, 1, "3 columns x 6 rows, variant 14", + /*116*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 2, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ", 0, 26, 55, 1, "2 columns x 26 rows, variant 13", + "1100101000110001111100100101110101011111100011000101001" + "1100101100101001110011100001101000001011000011001101001" + "1100101110101000011111001101001011110010000011011101001" + "1100100110111100010111101001101110110011110011011001001" + "1100110110111101110101100001001100111100111011011001101" + "1110110110100110010111111001111101110011001011011011101" + "1110010110110111110101000001101111100010001011011011001" + "1100010110111101010111100001010011100111000011011010001" + "1100010100111110100010011001010000111110011011010010001" + "1100110100101100111001111101111000101111010011010110001" + "1101110100111000101100111101111011101011000011010111001" + "1101100100100110101111110001001100101111110011010111101" + "1101100110100000101011110001101111101010000011010011101" + "1101101110110011100111001101111010101111000011010011001" + "1101101100110101111110111101111101000100110011010001001" + "1101101000101101100111100001011001110011111011010001101" + "1101001000110010000110111001110001011001111011010000101" + "1101011000111001000001101001111001101100100011011000101" + "1101011100110001111100100101101001000011111011001000101" + "1101011110100100001101100001011100011100010011101000101" + "1101001110100010011110100001111110110100110011101100101" + "1101001100111101011111001101100011101001110011001100101" + "1101000100110111011110011101011100011100010011011100101" + "1101000110100111011011111101110110011101000011011110101" + "1101000010100010111011111101010100011110000011001110101" + "1101100010110001000001011001110101000111000011101110101" + }, + /*117*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJ", 0, 6, 82, 1, "3 columns x 6 rows, variant 14", "1100100010100001100011001001011001110111101010111100001010011100111000011001000101" "1110100010111110100010011001001001110101000011111001101001011110010000011101000101" "1110110010110100010001111101001101110110000101001111101001000100111100011101100101" @@ -1288,7 +2224,15 @@ static void test_encode(const testCtx *const p_ctx) { "1101110010111010011110011101000100110111011100111100101110100111001100011011100101" "1101111010100001111010000101000110110100110100000011101100100111111001011011110101" }, - /* 56*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTU", 0, 10, 82, 1, "3 columns x 10 rows, variant 16", + /*118*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJ", 0, 6, 82, 1, "3 columns x 6 rows, variant 14", + "1100100010100001100011001001011001110111101010111100001010011100111000011001000101" + "1110100010111110100010011001001001110101000011111001101001011110010000011101000101" + "1110110010110100010001111101001101110110000101001111101001000100111100011101100101" + "1100110010111101101001110001000101110100100011101110001011110011110001011001100101" + "1101110010111010011110011101000100110111011100111100101110100111001100011011100101" + "1101111010100001111010000101000110110100110100000011101100100111111001011011110101" + }, + /*119*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTU", 0, 10, 82, 1, "3 columns x 10 rows, variant 16", "1100010010110001111100100101001111010111010101111110001010011001111100011000100101" "1110010010110100000101100001011111010111101101000011101100100010011000011100100101" "1111010010111011011110011001011110010110110011110010001110010000011010011110100101" @@ -1300,7 +2244,19 @@ static void test_encode(const testCtx *const p_ctx) { "1110100110101011111001100001001000110101110010011111001111101100101000011101001101" "1110101110110111101100111001001000010110111110000101001001110001101110011101011101" }, - /* 57*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 12, 82, 1, "3 columns x 12 rows, variant 17", + /*120*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTU", 0, 10, 82, 1, "3 columns x 10 rows, variant 16", + "1100010010110001111100100101001111010111010101111110001010011001111100011000100101" + "1110010010110100000101100001011111010111101101000011101100100010011000011100100101" + "1111010010111011011110011001011110010110110011110010001110010000011010011110100101" + "1111010110110011101000011101011110110110111100101100001100001101001111011110101101" + "1111010100100001100011001001001110110100001100011001001101110001101000011110101001" + "1110010100110000100111010001001110100111010001110110001101011100000100011100101001" + "1110110100110100110011111101001100100110011100001011101000110010000111011101101001" + "1110100100101011110011110001001100110100001001001000001101101000001000011101001001" + "1110100110101011111001100001001000110101110010011111001111101100101000011101001101" + "1110101110110111101100111001001000010110111110000101001001110001101110011101011101" + }, + /*121*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 12, 82, 1, "3 columns x 12 rows, variant 17", "1110101100100001100011001001011000010111101010111100001010011100111000011101011001" "1110101000111110100010011001011100010101000011111001101001011110010000011101010001" "1100101000111100010111101001011100110110111011001111001001100001000111011001010001" @@ -1314,7 +2270,21 @@ static void test_encode(const testCtx *const p_ctx) { "1100010100111101100011000101011001000110110001111000101100011001111001011000101001" "1100110100101010000011110001011001100111001111101011001111010111100010011001101001" }, - /* 58*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI", 0, 15, 82, 1, "3 columns x 15 rows, variant 18", + /*122*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 12, 82, 1, "3 columns x 12 rows, variant 17", + "1110101100100001100011001001011000010111101010111100001010011100111000011101011001" + "1110101000111110100010011001011100010101000011111001101001011110010000011101010001" + "1100101000111100010111101001011100110110111011001111001001100001000111011001010001" + "1100101100100110011110011101011100100111001100001001101100011010001000011001011001" + "1100101110110000101111011001011101100111000110011101001111110101011100011001011101" + "1100100110101001100111110001001101100110001111100100101100011111001001011001001101" + "1100110110110011010000100001000101100100011101110010001101100100000010011001101101" + "1110110110111101011000110001000101000111101110111010001111110111010100011101101101" + "1110010110100011010111000001001101000101110000001011001110101111101000011100101101" + "1100010110101100001110001101011101000110111000111001101110001011011110011000101101" + "1100010100111101100011000101011001000110110001111000101100011001111001011000101001" + "1100110100101010000011110001011001100111001111101011001111010111100010011001101001" + }, + /*123*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI", 0, 15, 82, 1, "3 columns x 15 rows, variant 18", "1101110100100001100011001001011000100111101010111100001010011100111000011011101001" "1101100100111110100010011001011000110101000011111001101001011110010000011011001001" "1101100110111100010111101001010000110110111011001111001001100001000111011011001101" @@ -1331,7 +2301,24 @@ static void test_encode(const testCtx *const p_ctx) { "1101000110111110101101110001001011100101111110101100001111100110100001011010001101" "1101000010111011101011110001011011100100011100000101101011000110001111011010000101" }, - /* 59*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST", 0, 26, 82, 1, "3 columns x 26 rows, variant 20", + /*124*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI", 0, 15, 82, 1, "3 columns x 15 rows, variant 18", + "1101110100100001100011001001011000100111101010111100001010011100111000011011101001" + "1101100100111110100010011001011000110101000011111001101001011110010000011011001001" + "1101100110111100010111101001010000110110111011001111001001100001000111011011001101" + "1101101110100110011110011101010001110111001100001001101100011010001000011011011101" + "1101101100110000101111011001010001100111000110011101001111110101011100011011011001" + "1101101000101001100111110001010011100101000001000111101011011001111000011011010001" + "1101001000110110011100111001010011000100001100011001001000011000110010011010010001" + "1101011000101111110101100001010111000101111110101100001011111101011000011010110001" + "1101011100110111100100001101010110000111011010011111001101111001011000011010111001" + "1101011110110011100110000101010010000100010110000011001011110001111001011010111101" + "1101001110111010001100100001011010000100111110100011101011010001111110011010011101" + "1101001100110011110010110001001010000110011111101100101000111000101100011010011001" + "1101000100100001100110010001001011000100000100001010001111010000101111011010001001" + "1101000110111110101101110001001011100101111110101100001111100110100001011010001101" + "1101000010111011101011110001011011100100011100000101101011000110001111011010000101" + }, + /*125*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST", 0, 26, 82, 1, "3 columns x 26 rows, variant 20", "1100100010100001100011001001000011010111101010111100001010011100111000011110100101" "1110100010111110100010011001000111010101000011111001101001011110010000011110101101" "1110110010111100010111101001000110010110111011001111001001100001000111011110101001" @@ -1359,7 +2346,35 @@ static void test_encode(const testCtx *const p_ctx) { "1110101100100110011010000001001101000111011110001100101100110000100100011011011001" "1110101000111100010100100001011101000101111101001110001111100100010011011011010001" }, - /* 60*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 82, 1, "3 columns x 26 rows, variant 20", + /*126*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST", 0, 26, 82, 1, "3 columns x 26 rows, variant 20", + "1100100010100001100011001001000011010111101010111100001010011100111000011110100101" + "1110100010111110100010011001000111010101000011111001101001011110010000011110101101" + "1110110010111100010111101001000110010110111011001111001001100001000111011110101001" + "1100110010100110011110011101000100010111001100001001101100011010001000011100101001" + "1101110010110000101111011001001100010111000110011101001111110101011100011101101001" + "1101111010101001100111110001001110010101000001000111101011011001111000011101001001" + "1100111010110010001001100001001111010110010000110111001110001011001111011101001101" + "1110111010111001000001101001011111010100110101111110001001100101111110011101011101" + "1110011010100000101011110001011110010110111110101000001101111100010001011101011001" + "1111011010111101010111100001011110110101001110011100001101000001011000011101010001" + "1111001010101000011111001101001110110100101111001000001110110111100110011001010001" + "1110001010110111011001111001001110100100110000100011101100111010000111011001011001" + "1100001010111001100001001101001100100100001100011001001000011000110010011001011101" + "1100011010101111110101100001001100110101111110101100001011111101011000011001001101" + "1100010010110001111100100101001000110110001111100100101100011111001001011001101101" + "1110010010100001100011001001001000010101000000100000101001111011110100011101101101" + "1111010010100111001011111001011000010111101101100100001111010111000111011100101101" + "1111010110101101001110000001011100010110011111101101001100011101000111011000101101" + "1111010100111001110001010001011100110100111000111010001111001101000111011000101001" + "1110010100111000101100001001011100100111000110011101001100011011110001011001101001" + "1110110100100111000010011001011101100100000110110111101010011011111000011011101001" + "1110100100110010000110011101001101100111001111011000101110010001011100011011001001" + "1110100110110001011110001101000101100111100001011001101111001101101000011011001101" + "1110101110110011110010001101000101000100111101001000001101111101100110011011011101" + "1110101100100110011010000001001101000111011110001100101100110000100100011011011001" + "1110101000111100010100100001011101000101111101001110001111100100010011011011010001" + }, + /*127*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 82, 1, "3 columns x 26 rows, variant 20", "1110110100110001111100100101011101100111010101111110001010011001111100011011101001" "1110100100110100000101100001001101100111101101000011101100100010011000011011001001" "1110100110111011011110011001000101100110110011110010001110010000011010011011001101" @@ -1393,7 +2408,41 @@ static void test_encode(const testCtx *const p_ctx) { "1101000010110010100001111101000010110100111100110011001111010000111101011000100101" "1101100010101110011101000001000010010110000100010001101110001101000011011100100101" }, - /* 61*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 38, 82, 1, "3 columns x 38 rows, variant 22", + /*128*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 82, 1, "3 columns x 26 rows, variant 20", + "1110110100110001111100100101011101100111010101111110001010011001111100011011101001" + "1110100100110100000101100001001101100111101101000011101100100010011000011011001001" + "1110100110111011011110011001000101100110110011110010001110010000011010011011001101" + "1110101110110011101000011101000101000110111100101100001000001010111100011011011101" + "1110101100100011001100100001001101000110011100111001101111010101111000011011011001" + "1110101000110101111110111101011101000111110100010011001010000111110011011011010001" + "1100101000101100111001111101011001000111100010111101001101110110011110011010010001" + "1100101100111101110101100001011001100100110011110011101110011000010011011010110001" + "1100101110111110111001100101011000100110000101111011001110001100111010011010111001" + "1100100110111010101111110001011000110101001100111110001010000010001111011010111101" + "1100110110111101101000011101010000110110010001001100001100100001101110011010011101" + "1110110110110110011110010001010001110111001000001101001001101011111100011010011001" + "1110010110110111100101100001010001100100000101011110001101111101010000011010001001" + "1100010110110011100111001101010011100111101010111100001010011100111000011010001101" + "1100010100111110100010011001010011000101000011111001101001011110010000011010000101" + "1100110100111100010111101001010111000110111011001111001001100001000111011011000101" + "1101110100100110011110011101010110000111001100001001101100011010001000011001000101" + "1101100100110000101111011001010010000111000110011101001011111101011000011101000101" + "1101100110110001111100100101011010000110001111100100101100011111001001011101100101" + "1101101110100001100011001001001010000111101111101101001110110000100011011001100101" + "1101101100100001011111001101001011000111010000111001101110011011101000011011100101" + "1101101000110011111101100101001011100101111100011101101100100100111110011011110101" + "1101001000101000010001000001011011100100110111001100001110111010100000011001110101" + "1101011000101011111100111001011011110111110001110110101111110101001110011101110101" + "1101011100100011001001110001011001110100011110101000001100111110010010011100110101" + "1101011110111011100010000101001001110101101111001110001001100111000011011110110101" + "1101001110100111111010011001001101110100011001111101001111000100110011011110010101" + "1101001100100011101011000001000101110111010111110010001000010010011110011100010101" + "1101000100111000010010011101000100110100001011000001101000101111001111011000010101" + "1101000110111110010000101101000110110111001101111001101111110110001011011000110101" + "1101000010110010100001111101000010110100111100110011001111010000111101011000100101" + "1101100010101110011101000001000010010110000100010001101110001101000011011100100101" + }, + /*129*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 38, 82, 1, "3 columns x 38 rows, variant 22", "1100010010110001111100100101000101100111010101111110001010011001111100011010011101" "1110010010110100000101100001000101000111101101000011101100100010011000011010011001" "1111010010111011011110011001001101000110110011110010001110010000011010011010001001" @@ -1433,7 +2482,47 @@ static void test_encode(const testCtx *const p_ctx) { "1101000010110100101111100001001111010101000000100111101011101111011111011001101101" "1101100010111011101100001101011111010100000101000010001011110111100010011101101101" }, - /* 62*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 44, 82, 1, "3 columns x 44 rows, variant 23", + /*130*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 38, 82, 1, "3 columns x 38 rows, variant 22", + "1100010010110001111100100101000101100111010101111110001010011001111100011010011101" + "1110010010110100000101100001000101000111101101000011101100100010011000011010011001" + "1111010010111011011110011001001101000110110011110010001110010000011010011010001001" + "1111010110110011101000011101011101000110111100101100001000001010111100011010001101" + "1111010100100011001100100001011001000110011100111001101111010101111000011010000101" + "1110010100110101111110111101011001100111110100010011001010000111110011011011000101" + "1110110100101100111001111101011000100111100010111101001101110110011110011001000101" + "1110100100111101110101100001011000110100110011110011101110011000010011011101000101" + "1110100110111110111001100101010000110110000101111011001110001100111010011101100101" + "1110101110111010101111110001010001110101001100111110001010000010001111011001100101" + "1110101100111101101000011101010001100110010001001100001100100001101110011011100101" + "1110101000110110011110010001010011100111001000001101001001101011111100011011110101" + "1100101000110111100101100001010011000100000101011110001101111101010000011001110101" + "1100101100110011100111001101010111000111101010111100001010011100111000011101110101" + "1100101110111110100010011001010110000101000011111001101001011110010000011100110101" + "1100100110111100010111101001010010000110111011001111001001100001000111011110110101" + "1100110110100110011110011101011010000111001100001001101100011010001000011110010101" + "1110110110110000101111011001001010000111000110011101001111110101011100011100010101" + "1110010110101001100111110001001011000101000001000111101011011001111000011000010101" + "1100010110110010001001100001001011100110010000110111001110001011001111011000110101" + "1100010100111001000001101001011011100100110101111110001001100101111110011000100101" + "1100110100100000101011110001011011110110111110101000001101111100010001011100100101" + "1101110100100001100011001001011001110100001100011001001000011000110010011110100101" + "1101100100101111110101100001001001110110110011110001001110000101100100011110101101" + "1101100110101111000001001001001101110111111001011000101000110001011100011110101001" + "1101101110110111000110010001000101110101001111001111001100100101100000011100101001" + "1101101100101100011111000101000100110101111110011011101011100011111101011101101001" + "1101101000101111010000001001000110110101110011101111001001110011101111011101001001" + "1101001000111110111010011101000010110110110011100111001100100001001100011101001101" + "1101011000100101111000010001000010010100111111001011001101001110010000011101011101" + "1101011100100011101000110001000011010110011100001011101011101001100000011101011001" + "1101011110110110000110011001000111010111000011010001101001000100001000011101010001" + "1101001110110101110000001001000110010110010011111011101111010001100110011001010001" + "1101001100111110001011101001000100010100011001001110001011111011100011011001011001" + "1101000100100100001100001101001100010111011000010001101001011100111000011001011101" + "1101000110110000010011100101001110010101100111110001001111010111000111011001001101" + "1101000010110100101111100001001111010101000000100111101011101111011111011001101101" + "1101100010111011101100001101011111010100000101000010001011110111100010011101101101" + }, + /*131*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 44, 82, 1, "3 columns x 44 rows, variant 23", "1100100010100001100011001001011000010111101010111100001010011100111000011010001001" "1110100010111110100010011001011100010101000011111001101001011110010000011010001101" "1110110010111100010111101001011100110110111011001111001001100001000111011010000101" @@ -1479,13 +2568,65 @@ static void test_encode(const testCtx *const p_ctx) { "1101001000111000100010011101001111010110000010010011001111011101000110011011001101" "1101011000100100011111011001011111010111011100111100101001011110100000011011011101" }, - /* 63*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFG", 0, 4, 99, 1, "4 columns x 4 rows, variant 24", + /*132*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 3, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 44, 82, 1, "3 columns x 44 rows, variant 23", + "1100100010100001100011001001011000010111101010111100001010011100111000011010001001" + "1110100010111110100010011001011100010101000011111001101001011110010000011010001101" + "1110110010111100010111101001011100110110111011001111001001100001000111011010000101" + "1100110010100110011110011101011100100111001100001001101100011010001000011011000101" + "1101110010110000101111011001011101100111000110011101001111110101011100011001000101" + "1101111010101001100111110001001101100101000001000111101011011001111000011101000101" + "1100111010110010001001100001000101100110010000110111001110001011001111011101100101" + "1110111010111001000001101001000101000100110101111110001001100101111110011001100101" + "1110011010100000101011110001001101000110111110101000001101111100010001011011100101" + "1111011010111101010111100001011101000101001110011100001101000001011000011011110101" + "1111001010101000011111001101011001000100101111001000001110110111100110011001110101" + "1110001010110111011001111001011001100100110000100011101100111010000111011101110101" + "1100001010111001100001001101011000100110001101000100001000110011001000011100110101" + "1100011010111000110011101001011000110111111010101110001101011111101111011110110101" + "1100010010101000001000111101010000110101101100111100001011001110011111011110010101" + "1110010010110010000110111001010001110111000101100111101111011101011000011100010101" + "1111010010100110101111110001010001100100110010111111001111101110011001011000010101" + "1111010110110111110101000001010011100110111110001000101110101011111100011000110101" + "1111010100101001110011100001010011000110100000101100001111011010000111011000100101" + "1110010100100101111001000001010111000111011011110011001101100111100100011100100101" + "1110110100100110000100011101010110000110011101000011101101111001011000011110100101" + "1110100100110001101000100001010010000100011001100100001100111001110011011110101101" + "1110100110111111010101110001011010000110101111110111101111101000100110011110101001" + "1110101110101101100111100001001010000101100111001111101111000101111010011100101001" + "1110101100111000101100111101001011000111101110101100001001100111100111011101101001" + "1110101000100110010111111001001011100111110111001100101100001011110110011101001001" + "1100101000110111110001000101011011100110001111100100101100011111001001011101001101" + "1100101100100001100011001001011011110111100100100111101110010000101110011101011101" + "1100101110111100010001101101011001110111011100111101001111100010101100011101011001" + "1100100110111001100101111101001001110110010100001111101011000010000111011101010001" + "1100110110100011000110100001001101110101100110001000001110001001000111011001010001" + "1110110110101101001111110001000101110111011000111101101111000101000010011001011001" + "1110010110100111100000100101000100110111000100111110101001100010000111011001011101" + "1100010110100010000100100001000110110111010011001111001000101000010000011001001101" + "1100010100101111000100111101000010110110001011100100001111000001010001011001101101" + "1100110100101110100110000001000010010101111011000011001000110011001111011101101101" + "1101110100110001110110010001000011010100011011100110001001100001100100011100101101" + "1101100100100111110001011101000111010100011110101111001110100110000100011000101101" + "1101100110101100110111100001000110010111001001111100101011110010001000011000101001" + "1101101110111011000001011001000100010101000111000111001001110001110010011001101001" + "1101101100101111101100111101001100010111101000100000101110100111100111011011101001" + "1101101000110111100001011001001110010111110100001110101001100100001110011011001001" + "1101001000111000100010011101001111010110000010010011001111011101000110011011001101" + "1101011000100100011111011001011111010111011100111100101001011110100000011011011101" + }, + /*133*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFG", 0, 4, 99, 1, "4 columns x 4 rows, variant 24", "110100111010111111010110000111111010101110001001110110110101111110111101111101000100110011010010001" "110100110011111001001110010110001111100100101001110100110001111100100101100011111001001011010110001" "110100010011000110100010000101101111101111001001100100110100110000111001110011100101000011010111001" "110100011011111011001001000110100111000010001001100110101011111101110001110110111100110011010111101" }, - /* 64*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRS", 0, 6, 99, 1, "4 columns x 6 rows, variant 25", + /*134*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFG", 0, 4, 99, 1, "4 columns x 4 rows, variant 24", + "110100111010111111010110000111111010101110001001110110110101111110111101111101000100110011010010001" + "110100110011111001001110010110001111100100101001110100110001111100100101100011111001001011010110001" + "110100010011000110100010000101101111101111001001100100110100110000111001110011100101000011010111001" + "110100011011111011001001000110100111000010001001100110101011111101110001110110111100110011010111101" + }, + /*135*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRS", 0, 6, 99, 1, "4 columns x 6 rows, variant 25", "110010001010000110001100100111101010111100001011001110101001110011100001101000001011000011001000101" "111010001010100001111100110100101111001000001001001110111011011110011001101100111100100011101000101" "111011001010011000010001110110011101000011101001101110101111001000000101100011111001001011101100101" @@ -1493,7 +2634,15 @@ static void test_encode(const testCtx *const p_ctx) { "110111001011000110011110010101101111100001001000100110111110001010110001111101100010001011011100101" "110111101010001110110001110100000100101111001000110110110111100000101101111000101111001011011110101" }, - /* 65*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJK", 0, 10, 99, 1, "4 columns x 10 rows, variant 27", + /*136*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRS", 0, 6, 99, 1, "4 columns x 6 rows, variant 25", + "110010001010000110001100100111101010111100001011001110101001110011100001101000001011000011001000101" + "111010001010100001111100110100101111001000001001001110111011011110011001101100111100100011101000101" + "111011001010011000010001110110011101000011101001101110101111001000000101100011111001001011101100101" + "110011001010010001000000100110100001000011001000101110110111011000010001110010111011111011001100101" + "110111001011000110011110010101101111100001001000100110111110001010110001111101100010001011011100101" + "110111101010001110110001110100000100101111001000110110110111100000101101111000101111001011011110101" + }, + /*137*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJK", 0, 10, 99, 1, "4 columns x 10 rows, variant 27", "110001001011000111110010010111010101111110001001111010101001100111110001010000010001111011000100101" "111001001011110110100001110110010001001100001011111010110010000110111001110001011001111011100100101" "111101001011100100000110100100110101111110001011110010100110010111111001111101110011001011110100101" @@ -1505,7 +2654,19 @@ static void test_encode(const testCtx *const p_ctx) { "111010011011101100000111010110111111010111001001000110100010011111011001111010110000110011101001101" "111010111011001111110110010100011101000011001001000010101111100110010001011100001100111011101011101" }, - /* 66*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 12, 99, 1, "4 columns x 12 rows, variant 28", + /*138*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJK", 0, 10, 99, 1, "4 columns x 10 rows, variant 27", + "110001001011000111110010010111010101111110001001111010101001100111110001010000010001111011000100101" + "111001001011110110100001110110010001001100001011111010110010000110111001110001011001111011100100101" + "111101001011100100000110100100110101111110001011110010100110010111111001111101110011001011110100101" + "111101011011011111010100000110111110001000101011110110111010101111110001010011001111100011110101101" + "111101010011010000010110000111101101000011101001110110110010001001100001101100001000010011110101001" + "111001010010111111010110000101111110101100001001110100101111110101100001011111101011000011100101001" + "111011010010001110111011110111110101110001001001100100100110001000011101110010111111011011101101001" + "111010010010001000100000010100100010000100001001100110110110000100010001110001001000111011101001001" + "111010011011101100000111010110111111010111001001000110100010011111011001111010110000110011101001101" + "111010111011001111110110010100011101000011001001000010101111100110010001011100001100111011101011101" + }, + /*139*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 12, 99, 1, "4 columns x 12 rows, variant 28", "111010110010000110001100100111101010111100001011000010101001110011100001101000001011000011101011001" "111010100010100001111100110100101111001000001011100010111011011110011001101100111100100011101010001" "110010100010011000010001110110011101000011101011100110110111100101100001000001010111100011001010001" @@ -1519,7 +2680,21 @@ static void test_encode(const testCtx *const p_ctx) { "110001010010001111001011110111101101100010001011001000111100111011101001111001100011001011000101001" "110011010011101111110100100101011100111111001011001100100001111000101001001111101110110011001101001" }, - /* 67*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI", 0, 15, 99, 1, "4 columns x 15 rows, variant 29", + /*140*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 0, 12, 99, 1, "4 columns x 12 rows, variant 28", + "111010110010000110001100100111101010111100001011000010101001110011100001101000001011000011101011001" + "111010100010100001111100110100101111001000001011100010111011011110011001101100111100100011101010001" + "110010100010011000010001110110011101000011101011100110110111100101100001000001010111100011001010001" + "110010110010001100110010000110011100111001101011100100111101010111100001010011100111000011001011001" + "110010111011111010001001100101000011111001101011101100100101111001000001110110111100110011001011101" + "110010011011011101100111100100110000100011101001101100110011101000011101101111001011000011001001101" + "110011011011000110100010000100011001100100001000101100110011100111001101111010101111000011001101101" + "111011011011010111111011110101111110101100001000101000111101100111001101011100100011111011101101101" + "111001011011101100100111110100010110001111101001101000111101011110000101110010111110001011100101101" + "110001011011000001000010110111010101110000001011101000111110100101111101101100011100111011000101101" + "110001010010001111001011110111101101100010001011001000111100111011101001111001100011001011000101001" + "110011010011101111110100100101011100111111001011001100100001111000101001001111101110110011001101001" + }, + /*141*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI", 0, 15, 99, 1, "4 columns x 15 rows, variant 29", "110111010010000110001100100111101010111100001011000100101001110011100001101000001011000011011101001" "110110010010100001111100110100101111001000001011000110111011011110011001101100111100100011011001001" "110110011010011000010001110110011101000011101010000110110111100101100001000001010111100011011001101" @@ -1536,7 +2711,24 @@ static void test_encode(const testCtx *const p_ctx) { "110100011010111010000111110110001000111001001001011100111101100000110101100100011101000011010001101" "110100001010011110100100000100111110011010001011011100111011111101001001011101100011100011010000101" }, - /* 68*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 20, 99, 1, "4 columns x 20 rows, variant 30", + /*142*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI", 0, 15, 99, 1, "4 columns x 15 rows, variant 29", + "110111010010000110001100100111101010111100001011000100101001110011100001101000001011000011011101001" + "110110010010100001111100110100101111001000001011000110111011011110011001101100111100100011011001001" + "110110011010011000010001110110011101000011101010000110110111100101100001000001010111100011011001101" + "110110111010001100110010000110011100111001101010001110111101010111100001010011100111000011011011101" + "110110110011111010001001100101000011111001101010001100100101111001000001110110111100110011011011001" + "110110100011011101100111100100110000100011101010011100110011101000011101101111001011000011011010001" + "110100100011000110100010000100011001100100001010011000110011100111001101111010101111000011010010001" + "110101100011010111111011110111110100010011001010111000101000011111001101111110110100110011010110001" + "110101110011000111110010010110001111100100101010110000110001111100100101100011111001001011010111001" + "110101111010000110001100100100001100011001001010010000100001100011001001110110100110000011010111101" + "110100111010111100101111000100111110100111001011010000111001101110100001011001111100010011010011101" + "110100110010000110010011100111001011111000101001010000110011100100111001110011111101001011010011001" + "110100010011000111011001000110100110000111001001011000111001000010111001111001101000111011010001001" + "110100011010111010000111110110001000111001001001011100111101100000110101100100011101000011010001101" + "110100001010011110100100000100111110011010001011011100111011111101001001011101100011100011010000101" + }, + /*143*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 20, 99, 1, "4 columns x 20 rows, variant 30", "110010001010000110001100100111101010111100001011110010101001110011100001101000001011000011100101101" "111010001010100001111100110100101111001000001011110110111011011110011001101100111100100011000101101" "111011001010011000010001110110011101000011101001110110110111100101100001000001010111100011000101001" @@ -1558,7 +2750,29 @@ static void test_encode(const testCtx *const p_ctx) { "111101010011001100001010000100010001000000101011001000100001100110100001110111001000100011010000101" "111001010011100101100100000111000110111000101011001100111110010010001101110001011101100011011000101" }, - /* 69*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 26, 99, 1, "4 columns x 26 rows, variant 31", + /*144*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 20, 99, 1, "4 columns x 20 rows, variant 30", + "110010001010000110001100100111101010111100001011110010101001110011100001101000001011000011100101101" + "111010001010100001111100110100101111001000001011110110111011011110011001101100111100100011000101101" + "111011001010011000010001110110011101000011101001110110110111100101100001000001010111100011000101001" + "110011001010001100110010000110011100111001101001110100111101010111100001010011100111000011001101001" + "110111001011111010001001100101000011111001101001100100100101111001000001110110111100110011011101001" + "110111101011011101100111100100110000100011101001100110110011101000011101101111001011000011011001001" + "110011101011000110100010000100011001100100001001000110110011100111001101111010101111000011011001101" + "111011101011010111111011110111110100010011001001000010101000011111001101001011110010000011011011101" + "111001101011110001011110100110111011001111001011000010100110000100011101100111010000111011011011001" + "111101101011100110000100110110001101000100001011100010100011001100100001100111001110011011011010001" + "111100101010111111010110000101111110101100001011100110101111110101100001011111101011000011010010001" + "111000101011000111110010010110001111100100101011100100110001111100100101100011111001001011010110001" + "110000101010000110001100100100001100011001001011101100100001100011001001000011000110010011010111001" + "110001101010111111010110000101111110101100001001101100111110110010010001101111101001111011010111101" + "110001001011111101011100110111100010111100101000101100100011011011110001010010000011110011010011101" + "111001001010000100001100110110011100011010001000101000110111101111001101100001001100111011010011001" + "111101001010111101000011110111100011001101001001101000110100001110000101101111110100111011010001001" + "111101011010111100000110110100110001100111101011101000101100010000011101000001111011011011010001101" + "111101010011001100001010000100010001000000101011001000100001100110100001110111001000100011010000101" + "111001010011100101100100000111000110111000101011001100111110010010001101110001011101100011011000101" + }, + /*145*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 26, 99, 1, "4 columns x 26 rows, variant 31", "110010001010000110001100100111101010111100001000011010101001110011100001101000001011000011110100101" "111010001010100001111100110100101111001000001000111010111011011110011001101100111100100011110101101" "111011001010011000010001110110011101000011101000110010110111100101100001000001010111100011110101001" @@ -1586,7 +2800,35 @@ static void test_encode(const testCtx *const p_ctx) { "111010110011000110000100100100100001001000001001101000100000100011001101000011001100001011011011001" "111010100011110100010010000111000001101110101011101000111001001110011001101111101001111011011010001" }, - /* 70*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 99, 1, "4 columns x 32 rows, variant 32", + /*146*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 26, 99, 1, "4 columns x 26 rows, variant 31", + "110010001010000110001100100111101010111100001000011010101001110011100001101000001011000011110100101" + "111010001010100001111100110100101111001000001000111010111011011110011001101100111100100011110101101" + "111011001010011000010001110110011101000011101000110010110111100101100001000001010111100011110101001" + "110011001010001100110010000110011100111001101000100010111101010111100001010011100111000011100101001" + "110111001011111010001001100101000011111001101001100010100101111001000001110110111100110011101101001" + "110111101011011101100111100100110000100011101001110010110011101000011101101111001011000011101001001" + "110011101011000110100010000100011001100100001001111010110011100111001101111010101111000011101001101" + "111011101011010111111011110111110100010011001011111010101000011111001101001011110010000011101011101" + "111001101011110001011110100110111011001111001011110010100110000100011101100111010000111011101011001" + "111101101011100110000100110110001101000100001011110110100011001100100001100111001110011011101010001" + "111100101011111101010111000110101111110111101001110110111110100010011001010000111110011011001010001" + "111000101010110011100111110111100010111101001001110100110111011001111001001100001000111011001011001" + "110000101010011001111001110111001100001001101001100100110001101000100001000110011001000011001011101" + "110001101011100011001110100111111010101110001001100110110101111110111101111101000100110011001001101" + "110001001010110110011110000101100111001111101001000110111100010111101001101110110011110011001101101" + "111001001011110111010110000100110011110011101001000010111001100001001101100011010001000011101101101" + "111101001011000010111101100111000110011101001011000010101111110101100001011111101011000011100101101" + "111101011011000111110010010110001111100100101011100010110001111100100101100011111001001011000101101" + "111101010011000111011000010101100001110011001011100110101100111011000001000010010000100011000101001" + "111001010011100100111000110110000100011100101011100100111100101010000001001111100100111011001101001" + "111011010010110100011100000101101000000111001011101100100000110010011101100111110001010011011101001" + "111010010010010000110000110110000100010110001001101100100001000110011001010011101110000011011001001" + "111010011011110001100110100110001000011100101000101100110000010111010001111101100110011011011001101" + "111010111010011111001100100100010100001111001000101000100111100000101001001111100111011011011011101" + "111010110011000110000100100100100001001000001001101000100000100011001101000011001100001011011011001" + "111010100011110100010010000111000001101110101011101000111001001110011001101111101001111011011010001" + }, + /*147*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 99, 1, "4 columns x 32 rows, variant 32", "111011010011000111110010010111010101111110001011101100101001100111110001010000010001111011011101001" "111010010011110110100001110110010001001100001001101100110010000110111001110001011001111011011001001" "111010011011100100000110100100110101111110001000101100100110010111111001111101110011001011011001101" @@ -1620,7 +2862,41 @@ static void test_encode(const testCtx *const p_ctx) { "110100001010110000100001110101110000011011101000010110101110000010110001101111110011010011000100101" "110110001010010000001001000110011101100001001000010010111110010101111101110001000100111011100100101" }, - /* 71*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 38, 99, 1, "4 columns x 38 rows, variant 33", + /*148*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 32, 99, 1, "4 columns x 32 rows, variant 32", + "111011010011000111110010010111010101111110001011101100101001100111110001010000010001111011011101001" + "111010010011110110100001110110010001001100001001101100110010000110111001110001011001111011011001001" + "111010011011100100000110100100110101111110001000101100100110010111111001111101110011001011011001101" + "111010111011011111010100000110111110001000101000101000111010101111110001010011001111100011011011101" + "111010110011010000010110000111101101000011101001101000110010001001100001100100001101110011011011001" + "111010100011011001111001000111001000001101001011101000100110101111110001001100101111110011011010001" + "110010100010000010101111000110111110101000001011001000110111110001000101110101011111100011010010001" + "110010110010100111001110000110100000101100001011001100111101101000011101100100010011000011010110001" + "110010111011101101111001100110110011110010001011000100111001000001101001001101011111100011010111001" + "110010011011011110010110000100000101011110001011000110110111110101000001101111100010001011010111101" + "110011011011110101011110000101001110011100001010000110110100000101100001111011010000111011010011101" + "111011011010010111100100000111011011110011001010001110110110011110010001110010000011010011010011001" + "111001011011001110100001110110111100101100001010001100100000101011110001101111101010000011010001001" + "110001011011001110011100110111101010111100001010011100101001110011100001101000001011000011010001101" + "110001010010100001111100110100101111001000001010011000111011011110011001101100111100100011010000101" + "110011010010011000010001110110011101000011101010111000110111100101100001000001010111100011011000101" + "110111010010001100110010000110011100111001101010110000111101010111100001010011100111000011001000101" + "110110010011111010001001100101000011111001101010010000100101111001000001110110111100110011101000101" + "110110011011011101100111100100110000100011101011010000110011101000011101101111001011000011101100101" + "110110111011000110100010000100011001100100001001010000110011100111001101000011000110010011001100101" + "110110110010111111010110000101111110101100001001011000101111110101100001011111101011000011011100101" + "110110100011000111110010010110001111100100101001011100110001111100100101100011111001001011011110101" + "110100100010000110001100100100001100011001001011011100110111100111000101100001100010100011001110101" + "110101100011111010000101100111001000001101001011011110111100011011010001111101010001100011101110101" + "110101110010000001110010110101110100001100001011001110101001001111000001111110101100100011100110101" + "110101111011000010110011100101101111100111101001001110110011000100001001001101110110000011110110101" + "110100111011110100011011000100101111100110001001101110100100111100001001111000100100100011110010101" + "110100110011100111101001110111100101111101101000101110100000100100111101111110101100010011100010101" + "110100010010011000011010000100001100011001001000100110100110000110100001101100100100000011000010101" + "110100011010110111111000110111110000101011001000110110111010001100000101111000110110001011000110101" + "110100001010110000100001110101110000011011101000010110101110000010110001101111110011010011000100101" + "110110001010010000001001000110011101100001001000010010111110010101111101110001000100111011100100101" + }, + /*149*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 38, 99, 1, "4 columns x 38 rows, variant 33", "110001001011000111110010010111010101111110001000101100101001100111110001010000010001111011010011101" "111001001011110110100001110110010001001100001000101000110010000110111001110001011001111011010011001" "111101001011100100000110100100110101111110001001101000100110010111111001111101110011001011010001001" @@ -1660,7 +2936,47 @@ static void test_encode(const testCtx *const p_ctx) { "110100001011001111001011000110011111010001001001111010100100101111000001011100000100011011001101101" "110110001011011101111001110111101101100111101011111010110100011001110001100110100001000011101101101" }, - /* 72*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 44, 99, 1, "4 columns x 44 rows, variant 34", + /*150*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 38, 99, 1, "4 columns x 38 rows, variant 33", + "110001001011000111110010010111010101111110001000101100101001100111110001010000010001111011010011101" + "111001001011110110100001110110010001001100001000101000110010000110111001110001011001111011010011001" + "111101001011100100000110100100110101111110001001101000100110010111111001111101110011001011010001001" + "111101011011011111010100000110111110001000101011101000111010101111110001010011001111100011010001101" + "111101010011010000010110000111101101000011101011001000110010001001100001100100001101110011010000101" + "111001010011011001111001000111001000001101001011001100100110101111110001001100101111110011011000101" + "111011010010000010101111000110111110101000001011000100110111110001000101110101011111100011001000101" + "111010010010100111001110000110100000101100001011000110111101101000011101100100010011000011101000101" + "111010011011101101111001100110110011110010001010000110111001000001101001001101011111100011101100101" + "111010111011011110010110000100000101011110001010001110110111110101000001101111100010001011001100101" + "111010110011110101011110000101001110011100001010001100110100000101100001111011010000111011011100101" + "111010100010010111100100000111011011110011001010011100110110011110010001110010000011010011011110101" + "110010100011001110100001110110111100101100001010011000100000101011110001101111101010000011001110101" + "110010110011001110011100110111101010111100001010111000101001110011100001101000001011000011101110101" + "110010111010100001111100110100101111001000001010110000111011011110011001101100111100100011100110101" + "110010011010011000010001110110011101000011101010010000110111100101100001000001010111100011110110101" + "110011011010001100110010000110011100111001101011010000111101010111100001010011100111000011110010101" + "111011011011111010001001100101000011111001101001010000100101111001000001110110111100110011100010101" + "111001011011011101100111100100110000100011101001011000110011101000011101101111001011000011000010101" + "110001011011000110100010000100011001100100001001011100110011100111001101111010101111000011000110101" + "110001010011010111111011110111110100010011001011011100101000011111001101001011110010000011000100101" + "110011010011110001011110100110111011001111001011011110100110000100011101100111010000111011100100101" + "110111010011100110000100110110001101000100001011001110100011001100100001100111001110011011110100101" + "110110010010111111010110000101111110101100001001001110101111110101100001011111101011000011110101101" + "110110011011000111110010010110001111100100101001101110110001111100100101100011111001001011110101001" + "110110111010000110001100100100001100011001001000101110100001100011001001000011000110010011100101001" + "110110110010111111010110000101111110101100001000100110101111110101100001011111101011000011101101001" + "110110100011011111101101000100001100101110001000110110110110010111100001001111011000110011101001001" + "110100100011100011101000100110000010001001101000010110111101111010000101000001000011011011101001101" + "110101100011100010001110110110110001111000101000010010101111101000011101001000011110010011101011101" + "110101110011010100001111100101111101110011001000011010101110000010110001011000100000111011101011001" + "110101111010000100010100000110001101100001101000111010111101110100001101011101111001100011101010001" + "110100111011101001110000110100100111101000001000110010111111001010111001110100000011010011001010001" + "110100110010001111010000100111111010011000101000100010101001000011110001011110010001000011001011001" + "110100010011110111101001000110011110111000101001100010110011001010000001101110110000100011001011101" + "110100011011001011110000110100110001111100101001110010101110011011111101001011110100000011001001101" + "110100001011001111001011000110011111010001001001111010100100101111000001011100000100011011001101101" + "110110001011011101111001110111101101100111101011111010110100011001110001100110100001000011101101101" + }, + /*151*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE | FAST_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 44, 99, 1, "4 columns x 44 rows, variant 34", "110010001010000110001100100111101010111100001011000010101001110011100001101000001011000011010001001" "111010001010100001111100110100101111001000001011100010111011011110011001101100111100100011010001101" "111011001010011000010001110110011101000011101011100110110111100101100001000001010111100011010000101" @@ -1706,7 +3022,53 @@ static void test_encode(const testCtx *const p_ctx) { "110100100011100011101100110111010111001111101001111010100001000110110001110100110111100011011001101" "110101100011001000011101000111110100101100001011111010110101111101110001101101111010000011011011101" }, - /* 73*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "123\035", 0, 7, 103, 1, "MR #151 NUM BYTE1", + /*152*/ { BARCODE_MICROPDF417, -1, UNICODE_MODE, -1, 4, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 44, 99, 1, "4 columns x 44 rows, variant 34", + "110010001010000110001100100111101010111100001011000010101001110011100001101000001011000011010001001" + "111010001010100001111100110100101111001000001011100010111011011110011001101100111100100011010001101" + "111011001010011000010001110110011101000011101011100110110111100101100001000001010111100011010000101" + "110011001010001100110010000110011100111001101011100100111101010111100001010011100111000011011000101" + "110111001011111010001001100101000011111001101011101100100101111001000001110110111100110011001000101" + "110111101011011101100111100100110000100011101001101100110011101000011101101111001011000011101000101" + "110011101011000110100010000100011001100100001000101100110011100111001101111010101111000011101100101" + "111011101011010111111011110111110100010011001000101000101000011111001101001011110010000011001100101" + "111001101011110001011110100110111011001111001001101000100110000100011101100111010000111011011100101" + "111101101011100110000100110110001101000100001011101000100011001100100001100111001110011011011110101" + "111100101011111101010111000110101111110111101011001000111110100010011001010000111110011011001110101" + "111000101010110011100111110111100010111101001011001100110111011001111001001100001000111011101110101" + "110000101010011001111001110111001100001001101011000100110001101000100001000110011001000011100110101" + "110001101011100011001110100111111010101110001011000110110101111110111101111101000100110011110110101" + "110001001010110110011110000101100111001111101010000110111100010111101001101110110011110011110010101" + "111001001011110111010110000100110011110011101010001110111001100001001101100011010001000011100010101" + "111101001011000010111101100111000110011101001010001100111111010101110001101011111101111011000010101" + "111101011010100000100011110101101100111100001010011100101100111001111101111000101111010011000110101" + "111101010011100010110011110111101110101100001010011000100110011110011101110011000010011011000100101" + "111001010011111011100110010110000101111011001010111000111000110011101001111110101011100011100100101" + "111011010010100110011111000101000001000111101010110000101101100111100001011001110011111011110100101" + "111010010011001000011011100111000101100111101010010000111101110101100001001100111100111011110101101" + "111010011010011001011111100111110111001100101011010000110000101111011001110001100111010011110101001" + "111010111011101010111111000101001100111110001001010000101000001000111101011011001111000011100101001" + "111010110011001000100110000110010000110111001001011000111000101100111101111011101011000011101101001" + "111010100010011010111111000100110010111111001001011100111110111001100101100001011110110011101001001" + "110010100011011111000100010111010101111110001011011100101001100111110001010000010001111011101001101" + "110010110011110110100001110110010001001100001011011110110010000110111001110001011001111011101011101" + "110010111011100100000110100100110101111110001011001110100110010111111001111101110011001011101011001" + "110010011011011111010100000110111110001000101001001110110001111100100101100011111001001011101010001" + "110011011010000110001100100100001100011001001001101110100001100011001001000011000110010011001010001" + "111011011010111111010110000101111110101100001000101110111000100001101001111011110111101011001011001" + "111001011010101100011111000101111000010010001000100110101000100011110001101110110011110011001011101" + "110001011010001011000110000111001000110111101000110110111101010111100001011000011100110011001001101" + "110001010011001001110100000111100010100000101000010110111100111011101001111001010000001011001101101" + "110011010010011110110001100100011101101110001000010010100101000001111001111010111110110011101101101" + "110111010011100011001011000110000110110011001000011010101111001111010001100001001100111011100101101" + "110110010011110001000110110111101001000010001000111010110001001110100001011111010000111011000101101" + "110110011010001101001110000101110000010001101000110010100111000110011101000011010000111011000101001" + "110110111010000010100010000110001110110000101000100010110110110110000001000011000110100011001101001" + "110110110011110001100110010111101001110111001001100010111000100110100001001110100111110011011101001" + "110110100011000101101111110100100001101111101001110010110000011101011101001011011111000011011001001" + "110100100011100011101100110111010111001111101001111010100001000110110001110100110111100011011001101" + "110101100011001000011101000111110100101100001011111010110101111101110001101101111010000011011011101" + }, + /*153*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "123\035", 0, 7, 103, 1, "MR #151 NUM BYTE1", "1111111101010100011111010101111100110101000110000001000001000010001011110101011110000111111101000101001" "1111111101010100011111010100011000111010111100011101010111100001000011110101001000000111111101000101001" "1111111101010100011101010111111000101001001111000001010111000111111011010100011111000111111101000101001" @@ -1715,7 +3077,104 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011110101111010000110001100101111001000111100010010011110101111000010111111101000101001" "1111111101010100011101001110111110100100001100001101100011000010100011010011101111000111111101000101001" }, - /* 74*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "BP2D+1.00+0005+FLE ESC BV+1.00+3.60*BX2D+1.00+0001+Casual shoes & apparel+90044030118100801265*D_2D+1.02+31351440315981+C910332+02032018+KXXXX CXXXX+UNIT 4 HXXXXXXXX BUSINESS PARK++ST ALBANS+ST ALBANS++AL2 3TA+0001+000001+001+00000000+00++N+N+N+0000++++++N+++N*DS2D+1.01+0001+0001+90044030118100801265+++++07852389322++E*F_2D+1.00+0005*", 0, 26, 222, 0, "MR #151 NUM -> BYTE Ex. 1; BWIPP different encodation", + /*154*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "123\035", 0, 7, 103, 0, "MR #151 NUM BYTE1; BWIPP same as FAST_MODE", + "1111111101010100011111010101111100110101000110000001000001001100011011110101011110000111111101000101001" + "1111111101010100011111010100011000110101111110111101011111100100011011110101001000000111111101000101001" + "1111111101010100011101010111111000101011100011111101100011111001001011010100011111000111111101000101001" + "1111111101010100011010111100111110101100011000001001111011000010111010101111001111000111111101000101001" + "1111111101010100011010111000010000111100110011010001010011111100111011110101110011100111111101000101001" + "1111111101010100011110101111010000111110010011101001011101001100000011110101111000010111111101000101001" + "1111111101010100011101001110111110100110001100000101110111101101000011010011101111000111111101000101001" + }, + /*155*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "+123456789012", 0, 8, 103, 1, "", + "1111111101010100011111010101111100110101000011000001000001000100100011110101011110000111111101000101001" + "1111111101010100011111101010001110111101011100111001110100111001100011110101001000000111111101000101001" + "1111111101010100011101010111111000111110010111101101110010011111001011101010001111110111111101000101001" + "1111111101010100011010111100111110110010001100011101101011110011111010101111001111000111111101000101001" + "1111111101010100011101011100001100110000100111000101011111100100011011110101110011100111111101000101001" + "1111111101010100011110101111010000110101111110001001100111110001001011101011111010000111111101000101001" + "1111111101010100011101001110111110110000110110110001001101111101111011010011101111000111111101000101001" + "1111111101010100011111010010110000111111011101101101111110100010111010101111110111000111111101000101001" + }, + /*156*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "+123456789012", 0, 8, 103, 1, "", + "1111111101010100011111010101111100110101000011000001000001000100100011110101011110000111111101000101001" + "1111111101010100011111101010001110111101011100111001110100111001100011110101001000000111111101000101001" + "1111111101010100011101010111111000111110010111101101110010011111001011101010001111110111111101000101001" + "1111111101010100011010111100111110110010001100011101101011110011111010101111001111000111111101000101001" + "1111111101010100011101011100001100110000100111000101011111100100011011110101110011100111111101000101001" + "1111111101010100011110101111010000110101111110001001100111110001001011101011111010000111111101000101001" + "1111111101010100011101001110111110110000110110110001001101111101111011010011101111000111111101000101001" + "1111111101010100011111010010110000111111011101101101111110100010111010101111110111000111111101000101001" + }, + /*157*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "+1234567890123", 0, 8, 103, 0, "BWIPP different encodation", + "1111111101010100011111010101111100110101000011000001000001000100100011110101011110000111111101000101001" + "1111111101010100011111101010001110101111110100110001111010110011000011110101001000000111111101000101001" + "1111111101010100011101010111111000101000010111100001011111101110100011101010001111110111111101000101001" + "1111111101010100011010111100111110100000101101100001001001110011100010101111001111000111111101000101001" + "1111111101010100011101011100001100111111001010111001001101111100001011110101110011100111111101000101001" + "1111111101010100011110101111010000100000111100100101011100100000011011101011111010000111111101000101001" + "1111111101010100011101001110111110110110000100001001110100100111000011010011101111000111111101000101001" + "1111111101010100011111010010110000100001011110000101000111110101110010101111110111000111111101000101001" + }, + /*158*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "+1234567890123", 0, 8, 103, 0, "BWIPP different encodation", + "1111111101010100011111010101111100110101000011000001000001000100100011110101011110000111111101000101001" + "1111111101010100011111101010001110101111110100110001111010110011000011110101001000000111111101000101001" + "1111111101010100011101010111111000101000010111100001011111101110100011101010001111110111111101000101001" + "1111111101010100011010111100111110100000101101100001001001110011100010101111001111000111111101000101001" + "1111111101010100011101011100001100111111001010111001001101111100001011110101110011100111111101000101001" + "1111111101010100011110101111010000100000111100100101011100100000011011101011111010000111111101000101001" + "1111111101010100011101001110111110110110000100001001110100100111000011010011101111000111111101000101001" + "1111111101010100011111010010110000100001011110000101000111110101110010101111110111000111111101000101001" + }, + /*159*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "90044030118100801265*D_2D+1.02+31351440315981", 0, 11, 120, 0, "BWIPP different encodation", + "111111110101010001110101001110000011010111001111000100111101111010001110001010111000011111010101111100111111101000101001" + "111111110101010001111110101000111010011011111000100111100101010000001001001111110111011111010100110000111111101000101001" + "111111110101010001010100111100000010011111000011010100001100101110001100000110101111011101010001111110111111101000101001" + "111111110101010001010111110111110010000110001100100110011110111001001101000011000111011010111100111110111111101000101001" + "111111110101010001110101110000110011100101110011000111010011000001001010011111000011011010111000100000111111101000101001" + "111111110101010001111101011110110010111100011000110100001000101111001110100111110010011101011111010000111111101000101001" + "111111110101010001010011100111000010011110111101000101101100010000001111011010011100011101001110111110111111101000101001" + "111111110101010001111101001011000011111011010001000110011111010111101000101111010000011010111111011110111111101000101001" + "111111110101010001111110100110010011000111110010010111101011110100001101111100100001010100110000111110111111101000101001" + "111111110101010001010001100000110010001110111001000101111000111100101100110011100111010100011000011000111111101000101001" + "111111110101010001110100111000110010100111100001000110100000111101101101011110000011011010011100100000111111101000101001" + }, + /*160*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "90044030118100801265*D_2D+1.02+31351440315981", 0, 11, 120, 0, "BWIPP different encodation", + "111111110101010001110101001110000011010111001111000100111101111010001110001010111000011111010101111100111111101000101001" + "111111110101010001111110101000111010011011111000100111100101010000001001001111110111011111010100110000111111101000101001" + "111111110101010001010100111100000010011111000011010100001100101110001100000110101111011101010001111110111111101000101001" + "111111110101010001010111110111110010000110001100100110011110111001001101000011000111011010111100111110111111101000101001" + "111111110101010001110101110000110011100101110011000111010011000001001010011111000011011010111000100000111111101000101001" + "111111110101010001111101011110110010111100011000110100001000101111001110100111110010011101011111010000111111101000101001" + "111111110101010001010011100111000011010001100011100110100011101111001111101011111101011101001110111110111111101000101001" + "111111110101010001111101001011000010100111111001110111010011101100001010001111100110011010111111011110111111101000101001" + "111111110101010001111110100110010010110011000111100100101100001111101100111010011100010100110000111110111111101000101001" + "111111110101010001010001100000110010011101111001100111101101011100001111010010011110010100011000011000111111101000101001" + "111111110101010001110100111000110011110100101000000111111011101000101101011111001110011010011100100000111111101000101001" + }, + /*161*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "+C910332+02032018+KXXXX CXXXX", 0, 9, 120, 1, "", + "111111110101010001111101010111110011010110001110000100000100010010001000011011100011011111010101111100111111101000101001" + "111111110101010001111010100001000011000111011111010110101110010000001101001110010000011110101001000000111111101000101001" + "111111110101010001010100111100000011101001111100100101010011110000001101010011111000010101000011110000111111101000101001" + "111111110101010001101011110011111010100111011100000110100100110000001110000100101110011010111100111110111111101000101001" + "111111110101010001101011100000100011001001111001100110000100111001001100011011110001011110101110011100111111101000101001" + "111111110101010001111101011110110011101001111110110101111101110011001011111011110111011110101111101100111111101000101001" + "111111110101010001110100111011111010000110001100100111001000001011101101011000111000011101001110111110111111101000101001" + "111111110101010001111110100101110011000101110000010110000101110010001110010000110001010101111110111000111111101000101001" + "111111110101010001111110100110010010000011100100110110111110001001001100010010111110011111010011101000111111101000101001" + }, + /*162*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "+C910332+02032018+KXXXX CXXXX", 0, 9, 120, 1, "", + "111111110101010001111101010111110011010110001110000100000100010010001000011011100011011111010101111100111111101000101001" + "111111110101010001111010100001000011000111011111010110101110010000001101001110010000011110101001000000111111101000101001" + "111111110101010001010100111100000011101001111100100101010011110000001101010011111000010101000011110000111111101000101001" + "111111110101010001101011110011111010100111011100000110100100110000001110000100101110011010111100111110111111101000101001" + "111111110101010001101011100000100011001001111001100110000100111001001100011011110001011110101110011100111111101000101001" + "111111110101010001111101011110110011101001111110110101111101110011001011111011110111011110101111101100111111101000101001" + "111111110101010001110100111011111010000110001100100111001000001011101101011000111000011101001110111110111111101000101001" + "111111110101010001111110100101110011000101110000010110000101110010001110010000110001010101111110111000111111101000101001" + "111111110101010001111110100110010010000011100100110110111110001001001100010010111110011111010011101000111111101000101001" + }, + /*163*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "BP2D+1.00+0005+FLE ESC BV+1.00+3.60*BX2D+1.00+0001+Casual shoes & apparel+90044030118100801265*D_2D+1.02+31351440315981+C910332+02032018+KXXXX CXXXX+UNIT 4 HXXXXXXXX BUSINESS PARK++ST ALBANS+ST ALBANS++AL2 3TA+0001+000001+001+00000000+00++N+N+N+0000++++++N+++N*DS2D+1.01+0001+0001+90044030118100801265+++++07852389322++E*F_2D+1.00+0005*", 0, 26, 222, 0, "MR #151 NUM -> BYTE Ex. 1; BWIPP different encodation", "111111110101010001101010000110000011001001000011000111010010000111001000011011100011010000010011101110100000100010010001101001000001100011101010111000000100001010000010001110101011100000011010100001100000111111101000101001" "111111110101010001111010110110000011101000011001000111000011001110101001001111100110011101111011111010100010011110000101110000100001101011001100001111010100010001111001001111100110110011011110101000010000111111101000101001" "111111110101010001010100001111000011111101011000010111010001111100101011010000001110011011111010001000111010010011111101000011100001011010001111000110110110111111000110101101011111100010011010110111111000111111101000101001" @@ -1743,7 +3202,35 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001101100110110000010110001111001110101011111011111001001001100110000011011000010000010110110001100110001110100100011100010011011000010000111011010000110001100010111011110011011001101100000111111101000101001" "111111110101010001100101111000110010111011011111100110001011100000101110001011000010010011100010111110111001001110011001110001011001000011110101111011110101011111011000001100110011110100011100101111011100111111101000101001" }, - /* 75*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350246290\035840\03501\0355622748502010201\035FDE\035605421261\035280\035\0351/1\0350.30LB\035N\035201 West 103rd St\035Indianapolis\035IN\035Recipient Name\03606\03510ZED006\03511ZSam's Publishing\03512Z1234567890\03515Z118561\03520Z0.00\0340\03531Z1001891751060004629000562274850201\03532Z02\03534Z01\035KShipment PO10001\035\036\004", 0, 26, 222, 0, "MR #151 NUM -> BYTE Ex. 2; BWIPP different encodation", + /*164*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "BP2D+1.00+0005+FLE ESC BV+1.00+3.60*BX2D+1.00+0001+Casual shoes & apparel+90044030118100801265*D_2D+1.02+31351440315981+C910332+02032018+KXXXX CXXXX+UNIT 4 HXXXXXXXX BUSINESS PARK++ST ALBANS+ST ALBANS++AL2 3TA+0001+000001+001+00000000+00++N+N+N+0000++++++N+++N*DS2D+1.01+0001+0001+90044030118100801265+++++07852389322++E*F_2D+1.00+0005*", 0, 26, 222, 0, "MR #151 NUM -> BYTE Ex. 1; BWIPP different encodation", + "111111110101010001101010000110000011001001000011000111010010000111001000011011100011010000010011101110100000100010010001101001000001100011101010111000000100001010000010001110101011100000011010100001100000111111101000101001" + "111111110101010001111010110110000011101000011001000111000011001110101001001111100110011101111011111010100010011110000101110000100001101011001100001111010100010001111001001111100110110011011110101000010000111111101000101001" + "111111110101010001010100001111000011111101011000010111010001111100101011010000001110011011111010001000111010010011111101000011100001011010001111000110110110111111000110101101011111100010011010110111111000111111101000101001" + "111111110101010001101001001100000011101010111000000100001010000010001110101011100000011101001101111000100001101110001101000001010000010011011100011001000101010000001000001100111000011010011010010011000000111111101000101001" + "111111110101010001111010111101111011111001011011100111010001100000101100000101110100011001001111000110110000010111001001111100010110111011110101100110000111101000110110001101111101011110011010111000001000111111101000101001" + "111111110101010001111010111110110010000111100010100111011101001111001011110110000110010110111101111110100110110000111101001111100001101010000110010111000110000011010111101100011111001001011010111111010000111111101000101001" + "111111110101010001101001111011111011001111011100100110100001100011101101100100010000011010001100111000101000011000110001100001010000011011011100110100000101000100001000001101000110001110011010011110111110111111101000101001" + "111111110101010001111101001000110011110100111001110111010111000110001010011111100111011101001110110000101000111110011001110010111000110011100010000110100111010011000001001111101101000100011111101001011100111111101000101001" + "111111110101010001111101001110100011010100111110000110100010001111101001110000100011010100110111110000110100010001111101110101011111100010110001001110000110011111000100101011111011100110011111010011100010111111101000101001" + "111111110101010001010001110001110011101111011010000100011000011010001110111101101000011101111011010000100000100010010001000001000100100011000100101100000110000101000110001000011011110111010100011100011100111111101000101001" + "111111110101010001101001111011000011000001011101000111001011000000101100001001110010011000010011100100110000100111001001100011011110001010101111000010000111111011101010001011000101111110011010011100001000111111101000101001" + "111111110101010001111110100011001010111100101000000100011110110001101111110101100010010011010000001110101111000001101101110111111000101011001110000101110100011110101000001001101101111000011111010001110010111111101000101001" + "111111110101010001101000001001100011101011011110000100010000010010001110000100101110011100110000100110100000101001000001010100000010000011010111101111100100110110001000001000001000100100011010000010011000111111101000101001" + "111111110101010001110100011001000011100010000110100111110101000001101111000011001101011100111001111010101111101011100001111010111011100010011001111101000111110101011000001010111100001000011110100010000100111111101000101001" + "111111110101010001010000001001111011010101111100000110101011111000001110101011111100010011100001000110111010101111110001001110000100011011010101111100000110101011111000001101010111110000011001010011111000111111101000101001" + "111111110101010001001011001100000010101100001100000111010101110000001110001101001100011000111011001000100000100010010001100011101100100010000010001001000110001110110010001000001000100100010010110011000000111111101000101001" + "111111110101010001111101000010110011111010101100000111110101011000001011100110111111010111001101111110101110011011111101001111010111100011011111010111100101110011011111101001111010111100011010001111101110111111101000101001" + "111111110101010001111001011110001010001111101100010110100011111101001000011100001011010001111000110110110111111000110101101011111100010011101010111111000100111000010001101101010111110000011001011111101000111111101000101001" + "111111110101010001101101000001000011101001101111000111010101110000001111010101111000010000101100001100111010101110000001010000010100000011101010011100000111101010111100001101001001100000011011010000010000111111101000101001" + "111111110101010001111010000011011011010111001000000111101010000100001111110101011100011110100101000000111010000110010001011100110111111010111001101111110111111010100011101100101110000001011110100000101000111111101000101001" + "111111110101010001101101100111110010100110011111000101100111001111101101000100011111011101001111100100100001101001110001111100101110100010011110100000100100001111010000101000011100001011010010010000011110111111101000101001" + "111111110101010001001001100001100010000010011101110100000100010010001101001000001100011101010111000000100001010000010001110101011100000010010111101111000100001100011001001000011000110010010010011000011000111111101000101001" + "111111110101010001111001011011000010111111010110000101111110101100001011111101011000010111111010110000100010000111100101001111101011100011110100000100100111010111000011001010011110000100011110010100001000111111101000101001" + "111111110101010001110010011111001010100001001111000101110111011110001001000000101111010000011011011110111001111110100101100111111001101011110101111010000100111011101111001110011111100101011011001011110000111111101000101001" + "111111110101010001101100110110000011000111011001000101100011001000001000111001111011010110001110011000110010110011100001011001111001110011101111000110010110111100111010001111101111001011011011001101100000111111101000101001" + "111111110101010001100101111000110011110010110011000100010001111101101110001001101000011001011110001100111101110001110101111001110111001011100010011001000111000100011001001100100111101100011100101111011100111111101000101001" + }, + /*165*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "[)>\03601\0350246290\035840\03501\0355622748502010201\035FDE\035605421261\035280\035\0351/1\0350.30LB\035N\035201 West 103rd St\035Indianapolis\035IN\035Recipient Name\03606\03510ZED006\03511ZSam's Publishing\03512Z1234567890\03515Z118561\03520Z0.00\0340\03531Z1001891751060004629000562274850201\03532Z02\03534Z01\035KShipment PO10001\035\036\004", 0, 26, 222, 0, "MR #151 NUM -> BYTE Ex. 2; BWIPP different encodation", "111111110101010001101010000110000011001001000011000100000100001000101001010000100000010000100011011000100010100000100001000100001110111010010001000000100101011110111100001000011000110010011010100001100000111111101000101001" "111111110101010001111010110110000011111000111011010101011111100111001010000111100100010110100111111000101111110010001101111101011101111011001011100000100111110101110111101011111100100011011110101000010000111111101000101001" "111111110101010001010100001111000010101110001111110111010101111110001001111110011101010101110001111110100001111000101001111110101110011011011100110011110100001001001111001010111000111111011010110111111000111111101000101001" @@ -1771,7 +3258,34 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001101100110110000010011000011101100100111101111010001100011011001100011110111101001000111100110100111001101000010011000011100110010110000100100110000110001100001000001011011011001101100000111111101000101001" "111111110101010001100101111000110011101000011000010100110111111011001111100011001010010100111110001100100111011011111101111110010100111011111011000010010111101011011000001110101111101111011100101111011100111111101000101001" }, - /* 76*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350274310\035250\03570\0351111123177100430\035FDE\035630133769\035222\035\0351/1\035160.00KG\035N\03554 Some Paris St\035Paris\035 \035F. Consignee\03606\03510ZEIO05\03511ZThe French Company\03512Z9876543210\03514Z5th Floor - Receiving\03515Z113167\03531Z1010147571640963660600111112317710\03532Z02\035KMISC_REF1\03599ZEI0005\034US\034200\034USD\034Content DESCRIPTION\034\034Y\034NO EEI 30.37 (a)\0340\034\035\036\004", 0, 28, 239, 0, "MR #151 Ex. 3; BWIPP different encodation", + /*166*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350246290\035840\03501\0355622748502010201\035FDE\035605421261\035280\035\0351/1\0350.30LB\035N\035201 West 103rd St\035Indianapolis\035IN\035Recipient Name\03606\03510ZED006\03511ZSam's Publishing\03512Z1234567890\03515Z118561\03520Z0.00\0340\03531Z1001891751060004629000562274850201\03532Z02\03534Z01\035KShipment PO10001\035\036\004", 0, 25, 222, 0, "MR #151 NUM -> BYTE Ex. 2; BWIPP different encodation", + "111111110101010001101010000110000011011011011000000100000100001000101001010000100000010000100011011000100010100000100001000100001110111010010001000000100101011110111100001001111011110100011010100001100000111111101000101001" + "111111110101010001111010100000010011110101000000100111000100011000101111100011010100011011111101011100110101111000110001101111100101111011100101111011100111101001001000001100100001110100011110101000010000111111101000101001" + "111111110101010001010100001111000011010010111110000101011100011111101000011110001010011111101011100110110111001100111101000010010011110010101110001111110100111000100001101110101011111100010101101111100000111111101000101001" + "111111110101010001101001001100000011000111000110100110100110111000001101001100111000011101000011011110110010110001110001101110001110011010011110111101000101000001000100001010000010000010011010010011000000111111101000101001" + "111111110101010001110101111011100010011000011111010110111111010111001101011110001100010000110111110010111010110010000001100100111101100010001011110100000111101001100110001100100011110011011010111000001000111111101000101001" + "111111110101010001111010111110110011010001101111110110111110010010001001110000100110011010011111100010101111101100000101111010001111001010000111100101000100011100110111001010111000111111011101011111000010111111101000101001" + "111111110101010001101001111011111010000110001100100100001101110001101111010101111000010000010100010000110011101110011001010000001010000011000010100011000100000100110001101110101001110000011010011110111110111111101000101001" + "111111110101010001111010010001000011100001101110010110100111110011101100000100111010011000100011110110101111110010001101111101011101111010000110101111110111111011000101101100101110001000011111101001011100111111101000101001" + "111111110101010001111101001110100010001000110111110100001011011111001001101100001111010111100100000010100111111001110101010111000111111010000011101001100111101100111110101001111110011101010100111001111110111111101000101001" + "111111110101010001010001110001110010101111011110000100110001100000101101000011101111010110011000100000110110010000001001100110110001100011000001010011000111100110100111001000101000010000010100011100011100111111101000101001" + "111111110101010001010011110100000010011111101000110101011110000100001100110111100010010010001111100110101101000111111001100010001110100010111111010110000110001100111100101010011111000011011010011100001000111111101000101001" + "111111110101010001111110100011001011010101111100000111110010011100101001111110011101010101110001111110111101011110100001000000110100111011011110010000110101011011111000001100011111001010010100011101111110111111101000101001" + "111111110101010001101000001001100011000100000101100110000010010110001100001010000011011011000011001100100010000111011101110110011001110011100100110111100111100111100101001010111101111000011010000010011000111111101000101001" + "111111110101010001111101000110111011110000010001010111010011000001001111000110001101011110101110011100111010011100110001010001111000001011110010100001000101101001111110001011111100100011011110100010000100111111101000101001" + "111111110101010001010000001001111010101110001111110111101011110001001000000110100111010000111100010100111010101111110001001101110111110010111110000110010110011111101100101010010111100000010010100111100000111111101000101001" + "111111110101010001001011001100000010000010010000010100111001111011001010011001100000011100110010110000101000100001000001000110011010000011001000101100000101011110011110001100000101001100010010110011000000111111101000101001" + "111111110101010001111010000101000011101011110001110110100111010000001011111101001100011110101110001110110101111000001101010011110010000011100010001100010111010011000100001111000100001001011010001111101110111111101000101001" + "111111110101010001111001011110001010111110011010000111011110101110001100001111010011010000001101011100111111010110100001000101000001111011001111110110010101001011110000001001111100110001011100101111100010111111101000101001" + "111111110101010001101101000001000010011101111011000111000011010001101101000100011000010100100000010000100001101110011001100001000010011011101100011001110111101111010001001010111101111000011011010000010000111111101000101001" + "111111110101010001110100000110100010111111010110000100100111101000001111100001101010011001011110000110111101100111001101110110001110010011000001011101000100111101001111001111011000001101011110100000101000111111101000101001" + "111111110101010001101101100111110010000111100010100101000001011110001001001100111110011001111110110010101011100011111101111101011100001011101010011111100110001111100100101100011111001001010110110000111100111111101000101001" + "111111110101010001001001100001100010000110001100100100001100011001001000011000110010010000110001100100100111011100100001011100111000100011100100001011100100111011101000001101101100110000010010011000011000111111101000101001" + "111111110101010001110010110100000011001101111100110100100011110000101110111001111010010111111011011100101001111100001101011111000101110011110001010001000110010111000001001111010000100001011110010100001000111111101000101001" + "111111110101010001110010011111001010001111010000100100111110001100101100101100111111011001111010001100100111101100011001011111001100010011001110000101110101111101110110001011000011011110010110010111000000111111101000101001" + "111111110101010001101100110110000011010110111000000100001100110100001111101010011111010100001000100000111000010100011101011110011110001011110010100011110111011001100111001110001110110011011011001101100000111111101000101001" + }, + /*167*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "[)>\03601\0350274310\035250\03570\0351111123177100430\035FDE\035630133769\035222\035\0351/1\035160.00KG\035N\03554 Some Paris St\035Paris\035 \035F. Consignee\03606\03510ZEIO05\03511ZThe French Company\03512Z9876543210\03514Z5th Floor - Receiving\03515Z113167\03531Z1010147571640963660600111112317710\03532Z02\035KMISC_REF1\03599ZEI0005\034US\034200\034USD\034Content DESCRIPTION\034\034Y\034NO EEI 30.37 (a)\0340\034\035\036\004", 0, 28, 239, 0, "MR #151 Ex. 3; BWIPP different encodation", "11111111010101000101010000010000001101100110110000010000010000100010100101000010000001000010001101100010001010000010000100010000111011101001000100000010010101111011110000100001100011001001000011011100110010101000001000000111111101000101001" "11111111010101000111101010000001001111101001011000011111101000101110110101110010000001011111100100011011111010111011110101011111100011101111101011101111010111111001000110111110101110111101111001010100000011111010100001100111111101000101001" "11111111010101000110101000011111001001111110011101010101110001111110100001111000101001010110001111100010111110011000010111111010001101001110111101001110010100011000111110100110000101110001100111111011001010101101111100000111111101000101001" @@ -1801,7 +3315,39 @@ static void test_encode(const testCtx *const p_ctx) { "11111111010101000101100111001111101110010111110100010110001001110000101110000100011001001110000001011010111100001000100100111000100001101000010011011111010000011101101110110011001011110001111010111100100011110010001111010111111101000101001" "11111111010101000100100011100011101001000110011000011010001000110000111001011011110001000101110001110011001000100110000101100011101100001110001000100111011100100011011110110110001000100001010000001000001010010001110001110111111101000101001" }, - /* 77*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350278759\035840\03503\0355659756807730201\035FDE\035604081602\035169\035\0351/1\0355.00LB\035N\0351234\035Austin\035TX\035Test Co\03606\03510ZED007\03511ZTest Co\03512Z8005553333\03515Z119534\03520Z0.00\034134\03531Z1001901752720007875900565975680773\03532Z02\03534Z01\03539ZNOHA\035\03609\035FDX\035z\0358\035-]\021\020<2\177B\036\004", 0, 25, 222, 0, "MR #151 Ex. 4; BWIPP different encodation", + /*168*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350274310\035250\03570\0351111123177100430\035FDE\035630133769\035222\035\0351/1\035160.00KG\035N\03554 Some Paris St\035Paris\035 \035F. Consignee\03606\03510ZEIO05\03511ZThe French Company\03512Z9876543210\03514Z5th Floor - Receiving\03515Z113167\03531Z1010147571640963660600111112317710\03532Z02\035KMISC_REF1\03599ZEI0005\034US\034200\034USD\034Content DESCRIPTION\034\034Y\034NO EEI 30.37 (a)\0340\034\035\036\004", 0, 30, 222, 0, "MR #151 Ex. 3; BWIPP different encodation", + "111111110101010001010100000100000011011001000100000100000100001000101001010000100000010000100011011000100010100000100001000100001110111010010001000000100101011110111100001001111011110100011010100001100000111111101000101001" + "111111110101010001111101011011100011110101000000100101110010001111101100000101110010011011111101011100110101111000110001000001001111001011001111010111110111010000011000101111000101000100011111010100001100111111101000101001" + "111111110101010001010100001111000010100101111000000101011100011111101000011110001010010101100011111000101111100110000101111110100011010011101111010011100101000110001111101001100001011100011111101011001000111111101000101001" + "111111110101010001110100100111000011000111000110100110100110111000001101001100111000011101000011011110110010110001110001101110001110011010011110111101000111001011001111001000010100100000011010010011000000111111101000101001" + "111111110101010001010111100100000011110100100100000100111111010001101101011110001100010000010011110010101111001011110001111100101000110010101111100110000111101001100110001100100011110011011101011100000110111111101000101001" + "111111110101010001111010111110110011010001101111110110111110010010001001111100001101011101001111100100100011100101100001000111100001001011011100100011100110110010000111101101001011111000011101011111101100111111101000101001" + "111111110101010001010011110011110010100011110111100110110000100100001100110011000011010011011000100000100001100011001001001100001101000010001001111011110110010100110000001100000100101100011010011110111110111111101000101001" + "111111110101010001111010010000100011110101100110000110010111110111001110000010110001010011001011111100101111110010001101111101011101111011100001101110100111101011001100001100101111101110011110100100100000111111101000101001" + "111111110101010001111101001110100010011111100111010101011100011111101100011110010110010011111100111010101011100011111101000011100010110011000011110010110100111110110100001111010011110100011110100111101000111111101000101001" + "111111110101010001010001111011110010011011000100000111001000101110001100110100001000011001010001100000110001110001101001110100110111100010111001110010000111100110100111001001000110000011010100011100011100111111101000101001" + "111111110101010001110100111101110011000100011101000101111110101100001100011001111001010010111100001000111110001110110101101000011100001010111111001000110111110101110111101110101110011000011101001110000110111111101000101001" + "111111110101010001111110100011001010000001101001110101111000110110001111001001111001010011111011010000110110101111000001100101001111100010100110000111110100111110110100001111010011110100011110100011110100111111101000101001" + "111111110101010001110100000100111011000101100011100111010110111100001000110001100001011110011110010100101011110111100001000001001100011011010001100111000110011100011000101011001111001110011010000010011000111111101000101001" + "111111110101010001111010001100110011110010100010000110100011110001101111010011101110011010111001000000101111110010001101111101011101111011101011100011000100111100101111001110000110011101011110100010000010111111101000101001" + "111111110101010001010000001001111011011111101100100101100110111100001000011100010110010011011100111110100010000010111101100011110010011010001100100011100110111111011010001010000010111100011100101001111110111111101000101001" + "111111110101010001100101100111000011010000010011000110000100100001101100110100000100011110011110010100101011110111100001000001001100011011111011010111100110011100011000101010111100111100010010110011000000111111101000101001" + "111111110101010001111010000100100011101001110110000101000011111001101011111100100011011111010111011110111010011101100001001111001011110010111111010011000111101011100011101111010010000010010100011111001100111111101000101001" + "111111110101010001111001011110001010111110111000110100110100000011101001100011001111011001011001111110100111001000001101000001100101110011000110001011110111011001111110101001111100011010011100101111110110111111101000101001" + "111111110101010001110110100000110011010100000110000100000100001000101010010000001000010000110111001100100111011110110001110000110100011011010001000110000101011110111100001000011000110010011011010000010000111111101000101001" + "111111110101010001110100000110010011100100111000110110010111110111001110100110000001011111001011001110111110100010011001111000001000101010111111001000110111110101110111101111011011010000011111010000010110111111101000101001" + "111111110101010001101101100111110010000001101001110101000000100111101000011110001010011111101011010000111101000111100101000001111001010011010111111000100100110000100111001101111011001110010110110000011110111111101000101001" + "111111110101010001011011100001100011011011000011000100101111011110001010001000010000011011100011000100100011001101000001100001101100110011000011010001000100001100011001001010001100110000010010011000011000111111101000101001" + "111111110101010001111100101101110011110010000010010111100010001000101110110001110010011000001011101000111100011101110101110100011000001011110100100000010110010111100001101110001000110100011111001010000110111111101000101001" + "111111110101010001110010011111001010011000010011100110011111101100101111101011100010011111010111000100101000100111100001111101011100010011000111110010010101110010000001101100011110100110011101100101111100111111101000101001" + "111111110101010001100100010011000011010000010011000100000101000100001010001100011000011011100110010000111011001001100001000001000010001010100111101111000100001011011000001100100010000110011011001101100000111111101000101001" + "111111110101010001001011110000100011000100111101100111101100001101001111101011101111011010111001000000111111010100111001011111101011000010111111010110000101111110101100001011111101011000010010111100100000111111101000101001" + "111111110101010001001000110011111011000111110010010110001111100100101100011111001001011000111110010010100001111000100101101110001011100010100100000111100101111000010010001110101000111111011100100011111010111111101000101001" + "111111110101010001001000111000111010110111001100000100110001100000101000010010000001011000110101000000100010000110001101001011111011111011100100101110000110100000010001101100111001100001010110011110011100111111101000101001" + "111111110101010001111100100100011010101111100011000110100011100000101001110100111110011111010010011000110110111100001001111110111001010011110010000110110101110011111101001100010011101000011110110110100000111111101000101001" + "111111110101010001101100001001111010011001000001110101001100111110001011100010001100011011110100000110111001110101111001000111100100010010101100111110000110011000100111101000011001101111010110000110011110111111101000101001" + }, + /*169*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "[)>\03601\0350278759\035840\03503\0355659756807730201\035FDE\035604081602\035169\035\0351/1\0355.00LB\035N\0351234\035Austin\035TX\035Test Co\03606\03510ZED007\03511ZTest Co\03512Z8005553333\03515Z119534\03520Z0.00\034134\03531Z1001901752720007875900565975680773\03532Z02\03534Z01\03539ZNOHA\035\03609\035FDX\035z\0358\035-]\021\020<2\177B\036\004", 0, 25, 222, 0, "MR #151 Ex. 4; BWIPP different encodation", "111111110101010001101010000110000011011011011000000100000100001000101001010000100000010000100011011000100010100000100001000100001110111010010001000000100101011110111100001000011000110010011010100001100000111111101000101001" "111111110101010001111010100000010011111000111011010111110100101100001100101111011000010100011111001100101111110010001101111101011101111011001011100000100111110101110111101011111100100011011110101000010000111111101000101001" "111111110101010001010100001111000010101110001111110110101001111100001001111110011101010101110001111110100001111000101001111110101110011011110000101111010111011111100100101000111101100011010101101111100000111111101000101001" @@ -1828,7 +3374,35 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001110010011111001010111111001110100101111100001100101100111101001100011011111011001100101111001000100001011110010000001011011000010011110111011111101001001111001011110010010110010111000000111111101000101001" "111111110101010001101100110110000010110011100110000110011101100100001110001110100010010001001110001110100100000100001001101000001000110011010000100011000111010000100111001000110110010000011011001101100000111111101000101001" }, - /* 78*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350285040\035840\03501\035D10011060813097\035EMSY\03537\03562\035\0351/1\0353LB\035N\0354440 E ELWOOD ST\035PHOENIX\035AZ\035CXXXXXX RXXX\03606\0353Z01\03511ZONTRAC - CXXXXXX RXXX\03512Z\03514ZSTE 102\03515Z90210\03520Z2000\034U\0341288\03521Z1\03522Z0\03524Z1\0359KRef-12549\035\036\004", 0, 25, 205, 0, "MR #151 Ex. 5; BWIPP different encodation", + /*170*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350278759\035840\03503\0355659756807730201\035FDE\035604081602\035169\035\0351/1\0355.00LB\035N\0351234\035Austin\035TX\035Test Co\03606\03510ZED007\03511ZTest Co\03512Z8005553333\03515Z119534\03520Z0.00\034134\03531Z1001901752720007875900565975680773\03532Z02\03534Z01\03539ZNOHA\035\03609\035FDX\035z\0358\035-]\021\020<2\177B\036\004", 0, 26, 205, 0, "MR #151 Ex. 4; BWIPP different encodation", + "1111111101010100011010100001100000111011010110000001000001000010001010010100001000000100001000110110001000101000001000010001000011101110100100010000001001010111101111000011101010001110000111111101000101001" + "1111111101010100011110101101100000101111110100110001111010100000010010111001101111110100111011111101001101111110101110011010111100011000110111110010111101110010111101110011110101000010000111111101000101001" + "1111111101010100011101010001111110111111010011101101011100110001110010100100111100000101011100011111101000011110001010011111101011100110111100001011110101110111111001001011010110111111000111111101000101001" + "1111111101010100011010010011000000111101111000100101000011001100010010001100000110100110001110001101001101001101110000011010011001110000111010000110111101100101100011100011111010010111110111111101000101001" + "1111111101010100011110101111011110111100010001000101011111101001100011110100010000100101100001111100101010000011110010010011111101000110110101111000110001100001101111010011010111000001000111111101000101001" + "1111111101010100011101011111010000111110100111000101111100100111010010110000100111000110100111111010001001100110111100011010001101111110110111110010001001110100111110100011010111111010000111111101000101001" + "1111111101010100011010011110111110101000100001000001000010001001000010110000110001000110000100101100001111011101101110010100100000010000110000010010011001100111101110100010100111101111000111111101000101001" + "1111111101010100011111010010001100110000010111001001100010111100110011010011110001100111101110011100101000001101111101011101001110001100111100011000110101110101111000111011111101001011100111111101000101001" + "1111111101010100010100110000111110110010100011111001010011011111000011111100100110100111110101110010001001001000001111010111000110111000101110000010011001000001001001111011111010011100010111111101000101001" + "1111111101010100010100011100011100111001000101110001010001000010000011110111101101100101110001111011001000101000001000010000100001001000100001100011001001010000111000111011010001110011110111111101000101001" + "1111111101010100011010011110110000111110001110110101111110101000111010111111001000110111110101110111101110101110011000010011110010111100110111011111000101110100011000001011010011100001000111111101000101001" + "1111111101010100011010001101111110110011100001011101001111101100010010111000011001110100111111001110101010111000111111010111111011100010111010001011111101000001100100111011111010001110010111111101000101001" + "1111111101010100011010000010011000111101100100011101111101010011111011001011011100000101000110000011001010001100000110011110011110010100101011110111100001110100101110000010100000100100000111111101000101001" + "1111111101010100011101000110010000100111100101111001111000001000101011101011100000110101000111100010001101000111101100010111111001000110111110101110111101101011111000111011110100010000100111111101000101001" + "1111111101010100010100000010111100100000011010011101001111100110001010000100010111100101011100011111101001111110011101011111010111000100111101011110010001111100101110100011001010011111000111111101000101001" + "1111111101010100010010110011000000111100111100101001010111101111000011010001100011100100011101110010001001111011110100011101001011100000110100110011100001101000001000110011110010110111110111111101000101001" + "1111111101010100011111010000101100110110001111000101110001011000001011101000111000110101101111110110001011100111111010011000010011110110110110111100010001111010000100001011010001111101110111111101000101001" + "1111111101010100011110010111100100100011010011100001100111111011001010100101111000000100111110011000101100111100100110011101111110101000111010011111010001010010111100000011001011111101000111111101000101001" + "1111111101010100011011010000010000100001101110011001100001000010011011101100011001110111101111010001001010010000001000010000110111001100100001101110001101110000110100110011110110100001110111111101000101001" + "1111111101010100011110100000110110111010011100001101111010001010000011110100100000010101101111100010001111000001010010011111101010111000111010111100011101101011110000011011110100000101000111111101000101001" + "1111111101010100010110110011110000111111010000110101100001100101111011011001001111000101001011110000001000001110100011011000111001001110101110011101111001010001001111000010010010000011110111111101000101001" + "1111111101010100010010011000011000101011100011100001110110100001100011000100001101110111011110011000101000011001110011011110101001111000100001100011001001000011000110010010110111000110000111111101000101001" + "1111111101010100011110010110110000100011011111101101101011100100000011000001011100100110111101001111101001000011110100011100001011000100110010111100110001101000111001000011110010100001000111111101000101001" + "1111111101010100011101101111110100101101100000111101111100010011101011100010011111010101111011110111101011110011000011010101000111100000100000111011011101001001100111110011011001011110000111111101000101001" + "1111111101010100011011001101100000100001010001000001111011101011000011101100000100110110010111001111001110111110111001011000100100110000110101000001100001010001110011100011110010001011110111111101000101001" + "1111111101010100011001011110001100101101111100001001111010001000010011000011011110100110111011111010001000000101111001010000100111101000111000010110000101100001001110001011100101111011100111111101000101001" + }, + /*171*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "[)>\03601\0350285040\035840\03501\035D10011060813097\035EMSY\03537\03562\035\0351/1\0353LB\035N\0354440 E ELWOOD ST\035PHOENIX\035AZ\035CXXXXXX RXXX\03606\0353Z01\03511ZONTRAC - CXXXXXX RXXX\03512Z\03514ZSTE 102\03515Z90210\03520Z2000\034U\0341288\03521Z1\03522Z0\03524Z1\0359KRef-12549\035\036\004", 0, 25, 205, 0, "MR #151 Ex. 5; BWIPP different encodation", "1111111101010100011010100001100000100101110011100001000001000010001010010100001000000100001000110110001000101000001000010001000011101110100100010000001001010111101111000011101010001110000111111101000101001" "1111111101010100011110101000000100101111110101100001111100011101101011111101001011100111010001111011101010011111100111010111111001000110111110101110111101100101110000010011110101000010000111111101000101001" "1111111101010100011101010001111110101011100011111101001111110011101010101110001111110111010101111110001001111110011101010101110001111110100011110001101101000011110001010010101101111100000111111101000101001" @@ -1855,7 +3429,31 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011101101111110100111111000101101001110011110010111011011111101100010101111100110000101011110100000010011111101000011010110110010011110001111110100011001010110010111000000111111101000101001" "1111111101010100011011001101100000111011000010011001101001000011000010000101100000110110100010110000001101110111100111011100011101100110111011101100110001110010111011111011110010001011110111111101000101001" }, - /* 79*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "01\01130\011{)>\01194\011GSA/XE 7\0110200\01502\01107072017\0111Z291YX2AT50000027\01111\011P\011\0113\01110.0\011KGS\011\011\011F/D\011415.52\011USD\011\011\011\011US\011EFTA\011U\011\011\011\011\0112\01504\011SH\011PHILIPS HEALTHCARE\011ROERMOND\011\0116045GH \011NL\011291YX2\011MARIE CURIEWEG 20\011\011\011NL009076840B01\011PHS EMEA TOMS\011310475528727\011\011\011\01504\011ST\011PHILIPS MEDICAL SYSTEMS\011LOUISVILLE\011KY\01140219 \011US\011\0111920 OUTER LOOP DRIVE\011\011\011\011C/O UPS-SPS. DOCK 157\011\011\011\011\01505\011GSI\011MEDICAL EQUIPMENT\01507\0111Z291YX2AT50000027\01110.0\011\011\011\011\011\011\011\011\011\011\011\01508\0112\011EA\011103.88\011FILTER 603Y0066\011JP\011\011\011\011\011\011451213341491\01508\0112\011EA\011103.88\011FILTER 603Y0066\011JP\011\011\011\011\011\011451213341491\01513\011\011\011\0114509123000\0112\011415.52\011415.52\01599\015", 0, 32, 256, 0, "MR #151 Ex. 6; BWIPP different encodation", + /*172*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "[)>\03601\0350285040\035840\03501\035D10011060813097\035EMSY\03537\03562\035\0351/1\0353LB\035N\0354440 E ELWOOD ST\035PHOENIX\035AZ\035CXXXXXX RXXX\03606\0353Z01\03511ZONTRAC - CXXXXXX RXXX\03512Z\03514ZSTE 102\03515Z90210\03520Z2000\034U\0341288\03521Z1\03522Z0\03524Z1\0359KRef-12549\035\036\004", 0, 22, 205, 0, "MR #151 Ex. 5; BWIPP different encodation", + "1111111101010100011101010001110000111001011001111001000001000010001010010100001000000100001000110110001000101000001000010001000011101110100100010000001001010111101111000011101010001110000111111101000101001" + "1111111101010100011111010100001100101111110100110001111010100000010011110111001110010111100001000100101101111110101110011010111100011000110111110010111101110010111101110011111101010001110111111101000101001" + "1111111101010100011101010001111110111111010011101101011100110001110011010010111110000101011100011111101111101001110100010000111100010100110110101111000001101111000010110011010100001111100111111101000101001" + "1111111101010100011111010010111110110001100010010001000100110110000010011001111001110110001110001101001101001101110000011010010000011000111100010010111101101100010010000011111010010111110111111101000101001" + "1111111101010100011101011100000110111001000110010001111010011000110011100011001110100111001011110111001110001011100110010001011111000110110101111000110001100000100111010011101011100001100111111101000101001" + "1111111101010100011101011111010000110111111011010001001110010011000011000101000111110101000000101111001000011000010111011001001111110010110110010111100001110111010001111011101011111001000111111101000101001" + "1111111101010100010100111101111000100001100011001001000011011110111010100001100001100100000101000100001100101001100000011010000010001100110011101100001001001101110001100010100111101111000111111101000101001" + "1111111101010100011110100100100000101111000101111001100010001111011010111111001000110111110101110111101111000101001000010010000111100010111100100001010001000110111110100011111010010110000111111101000101001" + "1111111101010100010100110000111110100111111001110101010111000111111011111010111001000100111111001110101010111000111111011101001111110110101111101110011001011111011100110011111101001110110111111101000101001" + "1111111101010100011010001110011110111011110110010001000100001000010011101111011010000110001110001101001110100110111100010111001110010000111100110100111001001000111011100011010001110011110111111101000101001" + "1111111101010100011101001110000110110010111000010001111101001101110011000010111100110111010000110100001100101110010000010111001001111100101111110101100001111001000001001011101001110001100111111101000101001" + "1111111101010100011010001101111110110111100010110001010100111100000011000111100100110100011001000111001110100111111011010111110111001100101111101110011001000011000010111010100011001111100111111101000101001" + "1111111101010100010100000100100000100010000100001001110111101101000010000010000100010101001000000100001100000100100110011000111001100010101001000010000001110000110100011010100000100100000111111101000101001" + "1111111101010100011110100010000010101011110000010001011111101011000011111100111001010111100010001000101100000101110100011010111001000000111010011000000101011111100100011011111010001000110111111101000101001" + "1111111101010100010100000010111100101011100011111101111010111100010010000001101001110110111111001101001010100111100000011111010111000010100111111001110101010111000111111010010101111000000111111101000101001" + "1111111101010100011110010110111110101001110111000001000111011100100010011110111101000111010110111100001110010000100111011000111000110100110100100000110001000100111101111011110010110111110111111101000101001" + "1111111101010100010100011111001100111011011100010001000100000111101011101011111011110111010011100110001101011100010000011001110101111110111111000110101101110110111010000010100011111011000111111101000101001" + "1111111101010100011110010111100100101001011110000001001111100110100010001111011000110100110000100011101110010111110010011010011111100100111101000011110101001111011100111011100101111101000111111101000101001" + "1111111101010100011110110100001110100010001100110001101111001110010010000110001100100101100011100011001000001011000011011111011010111100100010001101100001010011100011100011110110100001110111111101000101001" + "1111111101010100011111010000010110111101000100000101101111110101110011111010111011110110101110010000001111110101001110010111111010110000101111110101100001011111101011000010100001111100110111111101000101001" + "1111111101010100010110110011110000101110001000001101101000100011111010011111011101100110110110011111001000000110100111011000011101001110110011110010110001010011000011111011001001000111110111111101000101001" + "1111111101010100010110111000110000110111000110001001110001110100010011011000110000110111011000100110001000110001100100010100110001100000110011100110100001100000100110111010110111000110000111111101000101001" + }, + /*173*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "01\01130\011{)>\01194\011GSA/XE 7\0110200\01502\01107072017\0111Z291YX2AT50000027\01111\011P\011\0113\01110.0\011KGS\011\011\011F/D\011415.52\011USD\011\011\011\011US\011EFTA\011U\011\011\011\011\0112\01504\011SH\011PHILIPS HEALTHCARE\011ROERMOND\011\0116045GH \011NL\011291YX2\011MARIE CURIEWEG 20\011\011\011NL009076840B01\011PHS EMEA TOMS\011310475528727\011\011\011\01504\011ST\011PHILIPS MEDICAL SYSTEMS\011LOUISVILLE\011KY\01140219 \011US\011\0111920 OUTER LOOP DRIVE\011\011\011\011C/O UPS-SPS. DOCK 157\011\011\011\011\01505\011GSI\011MEDICAL EQUIPMENT\01507\0111Z291YX2AT50000027\01110.0\011\011\011\011\011\011\011\011\011\011\011\01508\0112\011EA\011103.88\011FILTER 603Y0066\011JP\011\011\011\011\011\011451213341491\01508\0112\011EA\011103.88\011FILTER 603Y0066\011JP\011\011\011\011\011\011451213341491\01513\011\011\011\0114509123000\0112\011415.52\011415.52\01599\015", 0, 32, 256, 0, "MR #151 Ex. 6; BWIPP different encodation", "1111111101010100011010100000110000101100011110111001000011011100110011101001000111000101000110001100001110011010110000010111100011110010111010001011100001100001100011011010010001110111000110011010010000001110110110011100011010100000110000111111101000101001" "1111111101010100011110101101100000111110101110111101100110011110010011010001110000100110000010001110101110110011101000011010111110001110111110101000001101111010100100000011101100111010000111100101010000001111110010101110011110101000001000111111101000101001" "1111111101010100010101000001111000111010101111110001011001011100000010100100000111100100000110010011101111110100111011010100100000111100111011111000101101000011100001011010011111001100010100111000010011001111110010111011011010110111111000111111101000101001" @@ -1889,7 +3487,41 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100010010000110110000100100001101100001010000001010000011011001000100000101001110111000001000101000100000011001011011100000110101110111100001000001010000010010000010011101110110011110111010001110111101110011010010000110110000111111101000101001" "1111111101010100011011011110001000100100001111001001111000100001010011111100110101100101011111100011101000001011110010011101000011000010101110011111101001011101111110001011100110001110010100110101111110001111110100010111011011011110010000111111101000101001" }, - /* 80*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC123456789ABC", 0, 9, 103, 1, "T3 N9 T3 -> T15", + /*174*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "01\01130\011{)>\01194\011GSA/XE 7\0110200\01502\01107072017\0111Z291YX2AT50000027\01111\011P\011\0113\01110.0\011KGS\011\011\011F/D\011415.52\011USD\011\011\011\011US\011EFTA\011U\011\011\011\011\0112\01504\011SH\011PHILIPS HEALTHCARE\011ROERMOND\011\0116045GH \011NL\011291YX2\011MARIE CURIEWEG 20\011\011\011NL009076840B01\011PHS EMEA TOMS\011310475528727\011\011\011\01504\011ST\011PHILIPS MEDICAL SYSTEMS\011LOUISVILLE\011KY\01140219 \011US\011\0111920 OUTER LOOP DRIVE\011\011\011\011C/O UPS-SPS. DOCK 157\011\011\011\011\01505\011GSI\011MEDICAL EQUIPMENT\01507\0111Z291YX2AT50000027\01110.0\011\011\011\011\011\011\011\011\011\011\011\01508\0112\011EA\011103.88\011FILTER 603Y0066\011JP\011\011\011\011\011\011451213341491\01508\0112\011EA\011103.88\011FILTER 603Y0066\011JP\011\011\011\011\011\011451213341491\01513\011\011\011\0114509123000\0112\011415.52\011415.52\01599\015", 0, 32, 256, 0, "MR #151 Ex. 6; BWIPP different encodation", + "1111111101010100011010100000110000101100011110111001000011011100110011101001000111000101000110001100001110011010011000010000010100001000100011000110000101110100010111000010010001110111000110011010010000001110110110011100011010100000110000111111101000101001" + "1111111101010100011110101101100000111110101110111101100110011110010011010001110000100110000010001110101110110011101000011010111110001110111110101000001101111010100100000011101100111010000111100101010000001111110010101110011110101000001000111111101000101001" + "1111111101010100010101000001111000111010101111110001011001011100000010100100000111100100000110010011101111110100111011010100100000111100111011111000101101000011100001011010011111001100010100111000010011001111110010111011011010110111111000111111101000101001" + "1111111101010100011110100100111100111010101110000001110101011100000010100111101111000100010100010000001110100100011100011000111011000100111000011001001101110001010001110010001010001000000111101011001111101101011011100000011110100100111100111111101000101001" + "1111111101010100011110101111011110100000100011110101101000001110010010001110111111010111001000111001101110000110011101010000001001111010101001111100001101111011001110011011110101110001110111100010011011001111010010001000011010111000000100111111101000101001" + "1111111101010100011110101111100110110111111000110101011110110000011010001111000010100101110110011100001001100110001111010111100000100010110001111101010001010000010001111010011100010110000110001111101010001000011010011100011010111111010000111111101000101001" + "1111111101010100010100111100011110110001011001110001100010110011100011000101000110000110110000100000101010000010000100010000010001010000111011001000110001100010110001110010010011000011000110110000110011001011101110100000010100111100011110111111101000101001" + "1111111101010100011111010010001100110011100111110101010011111100111011111001000101100111111001010111001111010110011000011010001111011000110110011110000101001000011110001011100010011000010111100100000100101010011111000011011111010010011000111111101000101001" + "1111111101010100010100111011111100101110110011100001011010000001110010100000100011110111011111100101001011001101111000011000111100101100110001111101010001011100100001100010001111000010100111111010011101101010010000011110011111010011100010111111101000101001" + "1111111101010100011010000101100000101111011110100001000011011100011011001101001000000111000101001110001101110011000010011001010011000000101000100001000001101110011000010010100000010000010111010000010111001000001010001000011010000101100000111111101000101001" + "1111111101010100011010011110110000110101111100011101110010001110011010010001111101100111110110001101101111100011101101011111010100001100111111010100011101111010000010100010100111111001110111100000100010101111100011101101011010011100000100111111101000101001" + "1111111101010100010100011000111110111010111110000101011111100111010010110010001110000110001111010011001101110100000111011111101011100110100111000110011101001100100000111010001111000010100101000100011110001110101001111110011111010001110010111111101000101001" + "1111111101010100010100000100010000110110111001110001001010000100000011110010001011110101001111011110001100010110011100010001011001100000111101010011110001100110100100000011100110000100110111001111011001001110011001000011010100000100010000111111101000101001" + "1111111101010100011101000110010000111001011110011101100101111000011010111011001111110111101100111001101101001110000100011010111110001110111100100010000101111101110110010010011001011111100111110100011011101111100010001011011101000110100000111111101000101001" + "1111111101010100011001010111110000110011001001111001011100001011000011011000101111000111000111010111101111110011011101011111001011101000100110010011100001011111000110100011011101000001110101010011110000001110101111100100011001010011111000111111101000101001" + "1111111101010100011100101100111100100000101001000001000001010010000011001101001000000111100011010111001110000110010011010001010001000000100100011000011001110101110011111011100011101100110110001101001000001010000011000110011100101100111100111111101000101001" + "1111111101010100011111010000101100100111001111110101111011000011001011100010111001100111001110011110101111000100110011011000100001110100100011101111110101110010001110011010010001111101100111010011000000101110001000110001010100011111000110111111101000101001" + "1111111101010100011110010111110110111001111101011001110000101111101010000111100101000100011000110111101011110010000001010111101100110000111101000111101001010011101111110011001111101101100111101011110001001011001011100000011001011111101000111111101000101001" + "1111111101010100011001001011000000110001011001110001000101100110000011111010100111110110011010010000001110110110011100011011001110011100110001011001110001010000111000111011101100100001100101010000001000001001110001110100011001001011000000111111101000101001" + "1111111101010100011110100000110110100110100111111001100101111000011011110110011100110111011000111001001000011001111101011111101010001110111001000110010001001111001011110011110000110011010111110110100010001011111010000111011110100000100100111111101000101001" + "1111111101010100010110110001111000100111100111011101110100010111111011010110001111110101111110111101101101010111110000011010101111100000101010011110000001011001011100000011111010111000010100001000101111001011101100111000010010010000011110111111101000101001" + "1111111101010100010010011101110000110001011001110001100010110011100011000101100111000110001011001110001000101100110000011010100001100000110001010001100001100110100100000010100001100001100111000011001001101101011110111110010010011101110000111111101000101001" + "1111111101010100011110010110110000111010011110011101110010111101110010010001111101100110100011111011101111100100010110011101000110000100111000001011001001110001110111101011111010100110000101111101000011101111100011101101011110010100000100111111101000101001" + "1111111101010100011001001111110100110101000111110001011011000011110011011111100110100100011010000011101011101100111000010111011001110000101110110011100001010000010001111011111010111101100111101011110010001010001000001111011011001011110000111111101000101001" + "1111111101010100011100100010011100111110101111110101011001110001100011011000010000010100100010001000001110100010111000010000110111101110110101110001111001000101000100000011101010011100000110111001100001001001000100010000011100100010011100111111101000101001" + "1111111101010100011001011110001100111000011001110101110010111100111011110001000100010100110111110100001100000101110100010100001111010000101001111100001101110001100111001011111010101100000101000011111011001001000111110110011001011110011000111111101000101001" + "1111111101010100011111001000111010101100000101110001000111100001010010111011001110000101110110011100001101110100000111010010111011111100110100110111111001010001000011110011101000011111010100101011110000001110101111100010011110110011111010111111101000101001" + "1111111101010100010110011110001110101011111011111001100010110011100011000101100111000110100000101100001010100000100000011010111100111110101000110001100001110101011100000011000101000110000100010100001000001110100101110000010110011110001110111111101000101001" + "1111111101010100011111011011001100111100010011011001111010010001000011110100010100000111101000010000101101000111100110011111011001010000111111011011011101011111101011000010111111010110000101111110101100001011111101011000011110010010010000111111101000101001" + "1111111101010100010110000100001110110001111100100101100011111001010010011001000001110110001111101000101001100011011110010001111010100000100111100110110001100011010001111010000111001011000100011110001000101110111110101100010010000010011110111111101000101001" + "1111111101010100010010000110110000100001001000010001010100000100000011001110110000010111010101110000001110000110100011010110011000100000100100000010010001110011001011000011011000011001100101110011110110001011001111000111010010000110110000111111101000101001" + "1111111101010100011011011110001000111011100111101001010001111000001011101101110001000101111101100111101000110100111111011110001101100100101100111110000101111010000001001011100100011101100111100100001101101110000101100010011011011110010000111111101000101001" + }, + /*175*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABC123456789ABC", 0, 9, 103, 1, "T3 N9 T3 -> T15", "1111111101010100011111010101111100110101000001100001111010101111000011110101011110000111111101000101001" "1111111101010100011110101000010000111010011000001001111010111001110011110101001000000111111101000101001" "1111111101010100011101010111111000101000100000111101111100101111011010101000011110000111111101000101001" @@ -1900,7 +3532,18 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100100100111110110001110110000111010010101111110111000111111101000101001" "1111111101010100011010011011111100101111100110010001011110010100000011111010011101000111111101000101001" }, - /* 81*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC1234567890ABC", 0, 9, 103, 1, "T3 N10 T3 -> T16", + /*176*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC123456789ABC", 0, 9, 103, 1, "T3 N9 T3 -> T15", + "1111111101010100011111010101111100110101000001100001111010101111000011110101011110000111111101000101001" + "1111111101010100011110101000010000111010011000001001111010111001110011110101001000000111111101000101001" + "1111111101010100011101010111111000101000100000111101111100101111011010101000011110000111111101000101001" + "1111111101010100011010111100111110100100110000110001001000010010000010101111001111000111111101000101001" + "1111111101010100011010111000001000111111010101110001110100110000001011110101110011100111111101000101001" + "1111111101010100011110101111010000100111101001000001110110001011111011110101111101100111111101000101001" + "1111111101010100011101001110111110110111000110010001100110001001000011010011101111000111111101000101001" + "1111111101010100011111101001011100100100111110110001110110000111010010101111110111000111111101000101001" + "1111111101010100011010011011111100101111100110010001011110010100000011111010011101000111111101000101001" + }, + /*177*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABC1234567890ABC", 0, 9, 103, 1, "T3 N10 T3 -> T16", "1111111101010100011111010101111100110101000001100001111010101111000011110101011110000111111101000101001" "1111111101010100011110101000010000111010011000001001111010111001110011110101001000000111111101000101001" "1111111101010100011101010111111000101000100000111101111100101111011010101000011110000111111101000101001" @@ -1911,7 +3554,18 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100110100011111011101110000010111011010101111110111000111111101000101001" "1111111101010100011010011011111100110001001111110101000111100001001011111010011101000111111101000101001" }, - /* 82*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC12345678901ABC", 0, 10, 103, 0, "T3 N11 T3; BWIPP -> T17", + /*178*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC1234567890ABC", 0, 9, 103, 1, "T3 N10 T3 -> T16", + "1111111101010100011111010101111100110101000001100001111010101111000011110101011110000111111101000101001" + "1111111101010100011110101000010000111010011000001001111010111001110011110101001000000111111101000101001" + "1111111101010100011101010111111000101000100000111101111100101111011010101000011110000111111101000101001" + "1111111101010100011010111100111110100100110000110001100100011000111010101111001111000111111101000101001" + "1111111101010100011010111000001000111110001110110101111010111001110011110101110011100111111101000101001" + "1111111101010100011110101111010000111011111101000101010011100111111011110101111101100111111101000101001" + "1111111101010100011101001110111110100001011011000001001000001101100011010011101111000111111101000101001" + "1111111101010100011111101001011100110100011111011101110000010111011010101111110111000111111101000101001" + "1111111101010100011010011011111100110001001111110101000111100001001011111010011101000111111101000101001" + }, + /*179*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABC12345678901ABC", 0, 10, 103, 0, "T3 N11 T3; BWIPP -> T17", "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" "1111111101010100011111010100011000111010011000000101011111101001100011111010100110000111111101000101001" "1111111101010100011101010111111000111110010111000101111110100011001011010100011111000111111101000101001" @@ -1923,7 +3577,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100100111000101100001100110100111100010100110001111100111111101000101001" "1111111101010100010100011000001100110111011000100001000110001100001011010001100011100111111101000101001" }, - /* 83*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "AB+12345678901ABC", 0, 10, 103, 0, "T3 N11 T3; BWIPP -> T17", + /*180*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC12345678901ABC", 0, 10, 103, 0, "T3 N11 T3; BWIPP -> T17", + "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111010100011000111010011000001001111010111001110011111010100110000111111101000101001" + "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" + "1111111101010100010101111101111100100100110000110001100100011000111010101111001111000111111101000101001" + "1111111101010100011010111000010000110101111100111001111110101011100011010111000100000111111101000101001" + "1111111101010100011110101111010000101000100111100001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000110001110011010001110001110110110011010011101111000111111101000101001" + "1111111101010100011110100101000000110001011100010001000111001011111011010111111011110111111101000101001" + "1111111101010100011010011011111100110111010111000001011100100000011010100110001111100111111101000101001" + "1111111101010100010100011000001100100010000111011101110010010011100011010001100011100111111101000101001" + }, + /*181*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "AB+12345678901ABC", 0, 10, 103, 0, "T3 N11 T3; BWIPP -> T17", "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" "1111111101010100011111010100011000110111110101111001011111101001100011111010100110000111111101000101001" "1111111101010100011101010111111000111110010111000101111110100011001011010100011111000111111101000101001" @@ -1935,7 +3601,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100101000010001111001101111000101100010100110001111100111111101000101001" "1111111101010100010100011000001100101100011100001101101100100010000011010001100011100111111101000101001" }, - /* 84*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC12345678901+BC", 0, 10, 103, 1, "T3 N11 T3 -> T17", + /*182*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "AB+12345678901ABC", 0, 10, 103, 1, "T3 N11 T3", + "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111010100011000110111110101111001111010111001110011111010100110000111111101000101001" + "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" + "1111111101010100010101111101111100100100110000110001100100011000111010101111001111000111111101000101001" + "1111111101010100011010111000010000110101111100111001111110101011100011010111000100000111111101000101001" + "1111111101010100011110101111010000101000100111100001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000100011011010000001001001110111000011010011101111000111111101000101001" + "1111111101010100011110100101000000111110000110010101111100110001001011010111111011110111111101000101001" + "1111111101010100011010011011111100111101011111001101011110001010000010100110001111100111111101000101001" + "1111111101010100010100011000001100110011110111000101000100011011000011010001100011100111111101000101001" + }, + /*183*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABC12345678901+BC", 0, 10, 103, 1, "T3 N11 T3 -> T17", "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" "1111111101010100011111010100011000111010011000001001111010111001110011111010100110000111111101000101001" "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" @@ -1947,7 +3625,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100111110101110001001011110001010000010100110001111100111111101000101001" "1111111101010100010100011000001100110001011000111001101011000111000011010001100011100111111101000101001" }, - /* 85*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "AB+12345678901+BC", 0, 10, 103, 1, "T3 N11 T3 -> T17", + /*184*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC12345678901+BC", 0, 10, 103, 1, "T3 N11 T3 -> T17", + "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111010100011000111010011000001001111010111001110011111010100110000111111101000101001" + "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" + "1111111101010100010101111101111100100100110000110001100100011000111010101111001111000111111101000101001" + "1111111101010100011010111000010000101011110000100001111000001000101011010111000100000111111101000101001" + "1111111101010100011110101111010000101000100111100001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000111000011010001101000110011010000011010011101111000111111101000101001" + "1111111101010100011110100101000000100110101111110001100000010111010011010111111011110111111101000101001" + "1111111101010100011010011011111100111110101110001001011110001010000010100110001111100111111101000101001" + "1111111101010100010100011000001100110001011000111001101011000111000011010001100011100111111101000101001" + }, + /*185*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "AB+12345678901+BC", 0, 10, 103, 1, "T3 N11 T3 -> T17", "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" "1111111101010100011111010100011000110111110101111001111010111001110011111010100110000111111101000101001" "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" @@ -1959,7 +3649,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100100001100101110001000000100101111010100110001111100111111101000101001" "1111111101010100010100011000001100111000110001011001001000010000100011010001100011100111111101000101001" }, - /* 86*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC123456789012ABC", 0, 10, 103, 1, "T3 N12 T3 -> T18", + /*186*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "AB+12345678901+BC", 0, 10, 103, 1, "T3 N11 T3 -> T17", + "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111010100011000110111110101111001111010111001110011111010100110000111111101000101001" + "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" + "1111111101010100010101111101111100100100110000110001100100011000111010101111001111000111111101000101001" + "1111111101010100011010111000010000101011110000100001111000001000101011010111000100000111111101000101001" + "1111111101010100011110101111010000101000100111100001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000110011000010000101010010000001000011010011101111000111111101000101001" + "1111111101010100011110100101000000101111101011100001000100001111001011010111111011110111111101000101001" + "1111111101010100011010011011111100100001100101110001000000100101111010100110001111100111111101000101001" + "1111111101010100010100011000001100111000110001011001001000010000100011010001100011100111111101000101001" + }, + /*187*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABC123456789012ABC", 0, 10, 103, 1, "T3 N12 T3 -> T18", "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" "1111111101010100011111010100011000111010011000001001111010111001110011111010100110000111111101000101001" "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" @@ -1971,7 +3673,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100110011101000111001100011110001011010100110001111100111111101000101001" "1111111101010100010100011000001100101000110110000001001001111001111011010001100011100111111101000101001" }, - /* 87*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD123456789ABC", 0, 9, 103, 1, "T4 N9 T3 -> T16", + /*188*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC123456789012ABC", 0, 10, 103, 1, "T3 N12 T3 -> T18", + "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111010100011000111010011000001001111010111001110011111010100110000111111101000101001" + "1111111101010100011101010111111000101000100000111101111100101111011011010100011111000111111101000101001" + "1111111101010100010101111101111100100100110000110001100100011000111010101111001111000111111101000101001" + "1111111101010100011010111000010000111101011100111001111100011101101011010111000100000111111101000101001" + "1111111101010100011110101111010000111110101111011001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000110100001001100001011000011100110011010011101111000111111101000101001" + "1111111101010100011110100101000000110000011011110101000100011111011011010111111011110111111101000101001" + "1111111101010100011010011011111100110011101000111001100011110001011010100110001111100111111101000101001" + "1111111101010100010100011000001100101000110110000001001001111001111011010001100011100111111101000101001" + }, + /*189*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD123456789ABC", 0, 9, 103, 1, "T4 N9 T3 -> T16", "1111111101010100011111010101111100110101000001100001111010101111000011110101011110000111111101000101001" "1111111101010100011110101000010000110101111110111101111000001000101011110101001000000111111101000101001" "1111111101010100011101010111111000101001100111110001010000010001111010101000011110000111111101000101001" @@ -1982,7 +3696,18 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100100010000111100101111001001100011010101111110111000111111101000101001" "1111111101010100011010011011111100100100010111100001001001100011111011111010011101000111111101000101001" }, - /* 88*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD1234567890ABC", 0, 10, 103, 1, "T4 N10 T3 -> T17", + /*190*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD123456789ABC", 0, 9, 103, 1, "T4 N9 T3 -> T16", + "1111111101010100011111010101111100110101000001100001111010101111000011110101011110000111111101000101001" + "1111111101010100011110101000010000110101111110111101111000001000101011110101001000000111111101000101001" + "1111111101010100011101010111111000101001100111110001010000010001111010101000011110000111111101000101001" + "1111111101010100011010111100111110111101101000011101100100010011000010101111001111000111111101000101001" + "1111111101010100011010111000001000111110001110110101111010111001110011110101110011100111111101000101001" + "1111111101010100011110101111010000110011111010010001110100111110001011110101111101100111111101000101001" + "1111111101010100011101001110111110101110011100010001110010100011100011010011101111000111111101000101001" + "1111111101010100011111101001011100100010000111100101111001001100011010101111110111000111111101000101001" + "1111111101010100011010011011111100100100010111100001001001100011111011111010011101000111111101000101001" + }, + /*191*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD1234567890ABC", 0, 10, 103, 1, "T4 N10 T3 -> T17", "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" "1111111101010100011111010100011000110101111110111101111000001000101011111010100110000111111101000101001" "1111111101010100011101010111111000101001100111110001010000010001111011010100011111000111111101000101001" @@ -1994,7 +3719,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100100001111000100101110111010011110010100110001111100111111101000101001" "1111111101010100010100011000001100110010110111000001011001111011100011010001100011100111111101000101001" }, - /* 89*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD12345678901ABC", 0, 10, 103, 0, "T4 N11 T3; BWIPP -> T18", + /*192*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD1234567890ABC", 0, 10, 103, 1, "T4 N10 T3 -> T17", + "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111010100011000110101111110111101111000001000101011111010100110000111111101000101001" + "1111111101010100011101010111111000101001100111110001010000010001111011010100011111000111111101000101001" + "1111111101010100010101111101111100111101101000011101100100010011000010101111001111000111111101000101001" + "1111111101010100011010111000010000111101011101110001111110101011100011010111000100000111111101000101001" + "1111111101010100011110101111010000101000100111100001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000101100001101000001100100000010110011010011101111000111111101000101001" + "1111111101010100011110100101000000100000100111100101011011111010000011010111111011110111111101000101001" + "1111111101010100011010011011111100100001111000100101110111010011110010100110001111100111111101000101001" + "1111111101010100010100011000001100110010110111000001011001111011100011010001100011100111111101000101001" + }, + /*193*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD12345678901ABC", 0, 10, 103, 0, "T4 N11 T3; BWIPP -> T18", "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" "1111111101010100011111010100011000110101111110111101011111101001100011111010100110000111111101000101001" "1111111101010100011101010111111000111110010111000101111110100011001011010100011111000111111101000101001" @@ -2006,7 +3743,19 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011010011011111100100111001000001101000111011011100010100110001111100111111101000101001" "1111111101010100010100011000001100100011100111001001000100010010000011010001100011100111111101000101001" }, - /* 90*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD123456789012ABC", 0, 7, 120, 0, "T4 N12 T3; BWIPP -> T19", + /*194*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD12345678901ABC", 0, 10, 103, 0, "T4 N11 T3; BWIPP -> T18", + "1111111101010100011101010011100000110101101110000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111010100011000110101111110111101011111101001100011111010100110000111111101000101001" + "1111111101010100011101010111111000111110010111000101111110100011001011010100011111000111111101000101001" + "1111111101010100010101111101111100110010000010110001110100001011100010101111001111000111111101000101001" + "1111111101010100011010111000010000101111110101100001111110101011100011010111000100000111111101000101001" + "1111111101010100011110101111010000101000100111100001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000100011000110010001110110001001100011010011101111000111111101000101001" + "1111111101010100011110100101000000111001011101100001111101110011001011010111111011110111111101000101001" + "1111111101010100011010011011111100100111001000001101000111011011100010100110001111100111111101000101001" + "1111111101010100010100011000001100100011100111001001000100010010000011010001100011100111111101000101001" + }, + /*195*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD123456789012ABC", 0, 7, 120, 0, "T4 N12 T3; BWIPP -> T19", "111111110101010001111101010111110011101011011110000111101010111100001010011100111000011111010101111100111111101000101001" "111111110101010001111101010001100010111111010011000111111010101110001001100011111010011110101001000000111111101000101001" "111111110101010001010100111100000011101001111110110100000101011110001010000100111100011010100011111000111111101000101001" @@ -2015,7 +3764,16 @@ static void test_encode(const testCtx *const p_ctx) { "111111110101010001111101011110110010110100011100000100011110010001001101111000010110011110101111000010111111101000101001" "111111110101010001110100111011111010011100011101000110110001000000101001100111011000011101001110111110111111101000101001" }, - /* 91*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD\177FGH", 0, 9, 103, 1, "BYTE1", + /*196*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD123456789012ABC", 0, 7, 120, 1, "T5 N11 T3 -> T19", + "111111110101010001111101010111110011101011011110000111101010111100001010011100111000011111010101111100111111101000101001" + "111111110101010001111101010001100011110000010001010110101111110111101111101000100110011110101001000000111111101000101001" + "111111110101010001010100111100000010110110011110000101100111001111101110101011111100011010100011111000111111101000101001" + "111111110101010001101011110011111011010001100111000111101010111100001110100011001111011010111100111110111111101000101001" + "111111110101010001101011100001000010111111010110000100111011011111101110110011101000011110101110011100111111101000101001" + "111111110101010001111101011110110011011000010011110100011110101000001011111001100010011110101111000010111111101000101001" + "111111110101010001110100111011111010100001101100000111001100110011101010001110011100011101001110111110111111101000101001" + }, + /*197*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD\177FGH", 0, 9, 103, 1, "BYTE1", "1111111101010100011111010101111100110101000001100001000001000010001011110101011110000111111101000101001" "1111111101010100011110101000010000110100111100011001100100111100011011110101001000000111111101000101001" "1111111101010100011101010111111000111001100101111101111110010110010010101000011110000111111101000101001" @@ -2026,7 +3784,17 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100111000010011001001111000101100011010101111110111000111111101000101001" "1111111101010100011010011011111100100111000001001101100110110011111011111010011101000111111101000101001" }, - /* 92*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC+\177FGH", 0, 9, 103, 1, "BYTE1", + /*198*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD\177FGH", 0, 8, 103, 0, "BYTE1; BWIPP same as FAST_MODE", + "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111101010001110110101111110111101011111100100011011110101001000000111111101000101001" + "1111111101010100011101010111111000101000000101111001111100101111011011101010001111110111111101000101001" + "1111111101010100011010111100111110111011001000110001000011000110010010101111001111000111111101000101001" + "1111111101010100011101011100001100101111101000111001011001111110110011110101110011100111111101000101001" + "1111111101010100011110101111010000100011100010110001111011111101011011101011111010000111111101000101001" + "1111111101010100011101001110111110100010010000010001101000011101111011010011101111000111111101000101001" + "1111111101010100011111010010110000101111000100111101001100111110100010101111110111000111111101000101001" + }, + /*199*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABC+\177FGH", 0, 9, 103, 1, "BYTE1", "1111111101010100011111010101111100110101000001100001000001000010001011110101011110000111111101000101001" "1111111101010100011110101000010000110100111100011001100100111100011011110101001000000111111101000101001" "1111111101010100011101010111111000100110010111000001101000001011111010101000011110000111111101000101001" @@ -2037,7 +3805,17 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100111010000111001101110010011000001010101111110111000111111101000101001" "1111111101010100011010011011111100100111101100001101001110110011100011111010011101000111111101000101001" }, - /* 93*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC+\177+GH", 0, 9, 103, 1, "BYTE1", + /*200*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD\177FGH", 0, 8, 103, 0, "BYTE1; BWIPP same as FAST_MODE", + "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111101010001110110101111110111101011111100100011011110101001000000111111101000101001" + "1111111101010100011101010111111000101000000101111001111100101111011011101010001111110111111101000101001" + "1111111101010100011010111100111110111011001000110001000011000110010010101111001111000111111101000101001" + "1111111101010100011101011100001100101111101000111001011001111110110011110101110011100111111101000101001" + "1111111101010100011110101111010000100011100010110001111011111101011011101011111010000111111101000101001" + "1111111101010100011101001110111110100010010000010001101000011101111011010011101111000111111101000101001" + "1111111101010100011111010010110000101111000100111101001100111110100010101111110111000111111101000101001" + }, + /*201*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABC+\177+GH", 0, 9, 103, 1, "BYTE1", "1111111101010100011111010101111100110101000001100001000001000010001011110101011110000111111101000101001" "1111111101010100011110101000010000110100111100011001100100111100011011110101001000000111111101000101001" "1111111101010100011101010111111000100110010111000001101000001011111010101000011110000111111101000101001" @@ -2048,7 +3826,17 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100110110001111001001110110111001000010101111110111000111111101000101001" "1111111101010100011010011011111100110110001011110001000000100101111011111010011101000111111101000101001" }, - /* 94*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD+\177GH", 0, 8, 103, 0, "BYTE1; BWIPP different encodation (A5 B3)", + /*202*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABC+\177+GH", 0, 8, 103, 0, "BYTE1; BWIPP same as FAST_MODE", + "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111101010001110111010011000001001110011000111010011110101001000000111111101000101001" + "1111111101010100011101010111111000100111111001110101010000001011110011101010001111110111111101000101001" + "1111111101010100011010111100111110111000010010111001111011010000111010101111001111000111111101000101001" + "1111111101010100011101011100001100111100001000010101111011011000010011110101110011100111111101000101001" + "1111111101010100011110101111010000110100011011111101101001000011111011101011111010000111111101000101001" + "1111111101010100011101001110111110110010000100110001110001000100111011010011101111000111111101000101001" + "1111111101010100011111010010110000100101111000001001110001101110001010101111110111000111111101000101001" + }, + /*203*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD+\177GH", 0, 8, 103, 0, "BYTE1; BWIPP different encodation (A5 B3)", "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" "1111111101010100011111101010001110110101111110111101101111101011110011110101001000000111111101000101001" "1111111101010100011101010111111000100111111001110101010000001011110011101010001111110111111101000101001" @@ -2058,7 +3846,17 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011101001110111110101000010000010001100110100000100011010011101111000111111101000101001" "1111111101010100011111010010110000111100010001101101001001111100110010101111110111000111111101000101001" }, - /* 95*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD\177+GH", 0, 9, 103, 1, "BYTE1", + /*204*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD+\177GH", 0, 8, 103, 0, "BYTE1; BWIPP different encodation (A5 B3)", + "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111101010001110110101111110111101101111101011110011110101001000000111111101000101001" + "1111111101010100011101010111111000100111111001110101010000001011110011101010001111110111111101000101001" + "1111111101010100011010111100111110111000111010010001110110010001100010101111001111000111111101000101001" + "1111111101010100011101011100001100111101111011110101111000010100001011110101110011100111111101000101001" + "1111111101010100011110101111010000101110001000011001100111110100001011101011111010000111111101000101001" + "1111111101010100011101001110111110101000010000010001100110100000100011010011101111000111111101000101001" + "1111111101010100011111010010110000111100010001101101001001111100110010101111110111000111111101000101001" + }, + /*205*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD\177+GH", 0, 9, 103, 1, "BYTE1", "1111111101010100011111010101111100110101000001100001000001000010001011110101011110000111111101000101001" "1111111101010100011110101000010000110100111100011001100100111100011011110101001000000111111101000101001" "1111111101010100011101010111111000111001100101111101111110010110010010101000011110000111111101000101001" @@ -2069,7 +3867,17 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011111101001011100111010110010000001110001011010000010101111110111000111111101000101001" "1111111101010100011010011011111100111111001001101001001110000100110011111010011101000111111101000101001" }, - /* 96*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD+\177+GH", 0, 8, 103, 0, "BYTE1; BWIPP different encodation (A5 B4)", + /*206*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD\177+GH", 0, 8, 103, 0, "BYTE1; BWIPP same as FAST_MODE", + "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111101010001110110101111110111101011111100100011011110101001000000111111101000101001" + "1111111101010100011101010111111000101000000101111001101111110001101011101010001111110111111101000101001" + "1111111101010100011010111100111110111000111010010001110110010001100010101111001111000111111101000101001" + "1111111101010100011101011100001100110011000111101001111101110111011011110101110011100111111101000101001" + "1111111101010100011110101111010000110001111000101101001110100011000011101011111010000111111101000101001" + "1111111101010100011101001110111110110011001100001101010010000100000011010011101111000111111101000101001" + "1111111101010100011111010010110000110101111101110001100010001110010010101111110111000111111101000101001" + }, + /*207*/ { BARCODE_PDF417, -1, UNICODE_MODE | FAST_MODE, -1, -1, -1, "ABCD+\177+GH", 0, 8, 103, 0, "BYTE1; BWIPP different encodation (A5 B4)", "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" "1111111101010100011111101010001110110101111110111101101111101011110011110101001000000111111101000101001" "1111111101010100011101010111111000100111111001110101010000001011110011101010001111110111111101000101001" @@ -2079,10 +3887,45 @@ static void test_encode(const testCtx *const p_ctx) { "1111111101010100011101001110111110100000101100110001010011001100000011010011101111000111111101000101001" "1111111101010100011111010010110000111101000001101101110101110000011010101111110111000111111101000101001" }, + /*208*/ { BARCODE_PDF417, -1, UNICODE_MODE, -1, -1, -1, "ABCD+\177+GH", 0, 8, 103, 0, "BYTE1; BWIPP different encodation (A5 B4)", + "1111111101010100011111010101111100110101000011000001111010101111000011110101011110000111111101000101001" + "1111111101010100011111101010001110110101111110111101101111101011110011110101001000000111111101000101001" + "1111111101010100011101010111111000100111111001110101010000001011110011101010001111110111111101000101001" + "1111111101010100011010111100111110111000010010111001111011010000111010101111001111000111111101000101001" + "1111111101010100011101011100001100101001111000001001100100111100110011110101110011100111111101000101001" + "1111111101010100011110101111010000100011110100001001111010111100100011101011111010000111111101000101001" + "1111111101010100011101001110111110100000101100110001010011001100000011010011101111000111111101000101001" + "1111111101010100011111010010110000111101000001101101110101110000011010101111110111000111111101000101001" + }, + /*209*/ { BARCODE_PDF417, 29, UNICODE_MODE | FAST_MODE, -1, -1, -1, "¥3149.79", 0, 10, 103, 1, "", + "1111111101010100011101010011100000110101101110000001100011100011001011110101011110000111111101000101001" + "1111111101010100011111010100011000111110101110111101101111110101110011111010100110000111111101000101001" + "1111111101010100011101010111111000110010111111010001110010111111011011010100011111000111111101000101001" + "1111111101010100010101111101111100100001100011001001000001001110111010101111001111000111111101000101001" + "1111111101010100011010111000010000111010111000110001111011011000010011010111000100000111111101000101001" + "1111111101010100011110101111010000111011011111100101100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000110100100001100001110001101000110011010011101111000111111101000101001" + "1111111101010100011110100101000000111010110000010001000101111110111011010111111011110111111101000101001" + "1111111101010100011010011011111100111110101110100001001111101110110010100110001111100111111101000101001" + "1111111101010100010100011000001100111001000110111101000010110000011011010001100011100111111101000101001" + }, + /*210*/ { BARCODE_PDF417, 29, UNICODE_MODE, -1, -1, -1, "¥3149.79", 0, 10, 103, 0, "BWIPP same as FAST_MODE", + "1111111101010100011101010011100000110101101110000001100011100011001011110101011110000111111101000101001" + "1111111101010100011111010100011000111110101110111101011111100100011011111010100110000111111101000101001" + "1111111101010100011101010111111000110010111111010001001111110011101011010100011111000111111101000101001" + "1111111101010100010101111101111100100101100000110001000001001110111010101111001111000111111101000101001" + "1111111101010100011010111000010000111010111000110001111011011000010011010111000100000111111101000101001" + "1111111101010100011110101111010000111011011111100101100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000111001101000110001110110001011000011010011101111000111111101000101001" + "1111111101010100011110100101000000111110111011101101011111101100111011010111111011110111111101000101001" + "1111111101010100011010011011111100110011100001011101001111000100100010100110001111100111111101000101001" + "1111111101010100010100011000001100110100000100001101001011110111100011010001100011100111111101000101001" + }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; struct zint_symbol *symbol; + int last_fast_num_cwds; char escaped[1024]; char cmp_buf[32768]; @@ -2100,6 +3943,8 @@ static void test_encode(const testCtx *const p_ctx) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); + symbol->debug = ZINT_DEBUG_TEST; /* Needed to get codeword dump in errtxt */ + length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, data[i].data, -1, debug); ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); @@ -2117,11 +3962,28 @@ static void test_encode(const testCtx *const p_ctx) { if (ret < ZINT_ERROR) { int width, row; - assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); - assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); + testUtilEscape(data[i].data, length, escaped, sizeof(escaped)); + + assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, escaped); + assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, escaped); ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, escaped); + + if (ret == 0 && p_ctx->index == -1) { + if (i && (data[i - 1].input_mode & FAST_MODE) && !(data[i].input_mode & FAST_MODE) + && strcmp(data[i - 1].data, data[i].data) == 0) { + int num_cwds; + assert_equal(sscanf(symbol->errtxt, "(%d)", &num_cwds), 1, "i:%d num_cwds sscanf != 1 (%s)\n", i, symbol->errtxt); + assert_nonzero(last_fast_num_cwds >= num_cwds, "i:%d last_fast_num_cwds %d < num_cwds %d\n", i, last_fast_num_cwds, num_cwds); + if (num_cwds < last_fast_num_cwds && (debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) { + printf("i:%d diff %d\n", i, num_cwds - last_fast_num_cwds); + } + } + if (data[i].input_mode & FAST_MODE) { + assert_equal(sscanf(symbol->errtxt, "(%d)", &last_fast_num_cwds), 1, "i:%d last_fast sscanf != 1 (%s)\n", i, symbol->errtxt); + } + } if (do_bwipp && testUtilCanBwipp(i, symbol, data[i].option_1, data[i].option_2, data[i].option_3, debug)) { if (!data[i].bwipp_cmp) { @@ -2175,7 +4037,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { char *expected; }; struct item data[] = { - /* 0*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 103, 1, "Standard example", + /* 0*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 103, 1, "Standard example", "1111111101010100011111010101111100110101000011000001111001111001010011110101011110000111111101000101001" "1111111101010100011111101010001110101000011110010001001111110010110011110101001000000111111101000101001" "1111111101010100011101010111111000111010100011111101001111110011101011101010001111110111111101000101001" @@ -2185,7 +4047,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1111111101010100011101001110111110101000111011100001000111011100100011010011101111000111111101000101001" "1111111101010100011111010010110000111000101110110001101011100001000010101111110111000111111101000101001" }, - /* 1*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 103, 1, "Standard example auto-ECI", + /* 1*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 103, 1, "Standard example", "1111111101010100011111010101111100110101000011000001111001111001010011110101011110000111111101000101001" "1111111101010100011111101010001110101000011110010001001111110010110011110101001000000111111101000101001" "1111111101010100011101010111111000111010100011111101001111110011101011101010001111110111111101000101001" @@ -2195,7 +4057,27 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1111111101010100011101001110111110101000111011100001000111011100100011010011101111000111111101000101001" "1111111101010100011111010010110000111000101110110001101011100001000010101111110111000111111101000101001" }, - /* 2*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Ж"), -1, 7 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 9, 103, 1, "Standard example inverted", + /* 2*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 103, 1, "Standard example auto-ECI", + "1111111101010100011111010101111100110101000011000001111001111001010011110101011110000111111101000101001" + "1111111101010100011111101010001110101000011110010001001111110010110011110101001000000111111101000101001" + "1111111101010100011101010111111000111010100011111101001111110011101011101010001111110111111101000101001" + "1111111101010100011010111100111110110110100010000001000011000110010010101111001111000111111101000101001" + "1111111101010100011101011100001100101110100011111001111000001001001011110101110011100111111101000101001" + "1111111101010100011110101111010000111011111000101101001111100001101011101011111010000111111101000101001" + "1111111101010100011101001110111110101000111011100001000111011100100011010011101111000111111101000101001" + "1111111101010100011111010010110000111000101110110001101011100001000010101111110111000111111101000101001" + }, + /* 3*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 103, 1, "Standard example auto-ECI", + "1111111101010100011111010101111100110101000011000001111001111001010011110101011110000111111101000101001" + "1111111101010100011111101010001110101000011110010001001111110010110011110101001000000111111101000101001" + "1111111101010100011101010111111000111010100011111101001111110011101011101010001111110111111101000101001" + "1111111101010100011010111100111110110110100010000001000011000110010010101111001111000111111101000101001" + "1111111101010100011101011100001100101110100011111001111000001001001011110101110011100111111101000101001" + "1111111101010100011110101111010000111011111000101101001111100001101011101011111010000111111101000101001" + "1111111101010100011101001110111110101000111011100001000111011100100011010011101111000111111101000101001" + "1111111101010100011111010010110000111000101110110001101011100001000010101111110111000111111101000101001" + }, + /* 4*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Ж"), -1, 7 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 9, 103, 1, "Standard example inverted", "1111111101010100011111010101111100110101000001100001100011100011001011110101011110000111111101000101001" "1111111101010100011110101000010000111111010100011101011111100100011011110101001000000111111101000101001" "1111111101010100011101010111111000110010010111110001000011111011001010101000011110000111111101000101001" @@ -2206,7 +4088,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1111111101010100011111101001011100111100100010100001001111101011100010101111110111000111111101000101001" "1111111101010100011010011011111100100111010011000001100011010011110011111010011101000111111101000101001" }, - /* 3*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Ж"), -1, 0 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 9, 103, 1, "Standard example inverted auto-ECI", + /* 5*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Ж"), -1, 7 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 9, 103, 1, "Standard example inverted", "1111111101010100011111010101111100110101000001100001100011100011001011110101011110000111111101000101001" "1111111101010100011110101000010000111111010100011101011111100100011011110101001000000111111101000101001" "1111111101010100011101010111111000110010010111110001000011111011001010101000011110000111111101000101001" @@ -2217,7 +4099,29 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1111111101010100011111101001011100111100100010100001001111101011100010101111110111000111111101000101001" "1111111101010100011010011011111100100111010011000001100011010011110011111010011101000111111101000101001" }, - /* 4*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("$439.97"), -1, 3 }, { TU("¥3149.79"), -1, 29 }, { TU("Produkt:444,90 €"), -1, 17 } }, 0, 10, 137, 0, "AIM ITS/04-023:2022 Annex A example; BWIPP different encodation", + /* 6*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Ж"), -1, 0 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 9, 103, 1, "Standard example inverted auto-ECI", + "1111111101010100011111010101111100110101000001100001100011100011001011110101011110000111111101000101001" + "1111111101010100011110101000010000111111010100011101011111100100011011110101001000000111111101000101001" + "1111111101010100011101010111111000110010010111110001000011111011001010101000011110000111111101000101001" + "1111111101010100011010111100111110111010100111000001111001111001010010101111001111000111111101000101001" + "1111111101010100011010111000001000101000011110010001011111101011000011110101110011100111111101000101001" + "1111111101010100011110101111010000111000111111010101100111110100010011110101111101100111111101000101001" + "1111111101010100011101001110111110111110111010111001111001100101110011010011101111000111111101000101001" + "1111111101010100011111101001011100111100100010100001001111101011100010101111110111000111111101000101001" + "1111111101010100011010011011111100100111010011000001100011010011110011111010011101000111111101000101001" + }, + /* 7*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Ж"), -1, 0 }, { TU("¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 9, 103, 1, "Standard example inverted auto-ECI", + "1111111101010100011111010101111100110101000001100001100011100011001011110101011110000111111101000101001" + "1111111101010100011110101000010000111111010100011101011111100100011011110101001000000111111101000101001" + "1111111101010100011101010111111000110010010111110001000011111011001010101000011110000111111101000101001" + "1111111101010100011010111100111110111010100111000001111001111001010010101111001111000111111101000101001" + "1111111101010100011010111000001000101000011110010001011111101011000011110101110011100111111101000101001" + "1111111101010100011110101111010000111000111111010101100111110100010011110101111101100111111101000101001" + "1111111101010100011101001110111110111110111010111001111001100101110011010011101111000111111101000101001" + "1111111101010100011111101001011100111100100010100001001111101011100010101111110111000111111101000101001" + "1111111101010100011010011011111100100111010011000001100011010011110011111010011101000111111101000101001" + }, + /* 8*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("$439.97"), -1, 3 }, { TU("¥3149.79"), -1, 29 }, { TU("Produkt:444,90 €"), -1, 17 } }, 0, 10, 137, 0, "AIM ITS/04-023:2022 Annex A example (shortened); BWIPP different encodation (LL AS P instead of AL P LL)", "11111111010101000111010100111000001101011110011111011000111000110010111010100111000001000001000101000011101010011100000111111101000101001" "11111111010101000111110101000110001111110100010111011110110110000100111110010010110001001111110010110011111010100110000111111101000101001" "11111111010101000110101001111100001010111000111111011001111110110010110010111111010001110010111111011011010100011111000111111101000101001" @@ -2229,7 +4133,49 @@ static void test_encode_segs(const testCtx *const p_ctx) { "11111111010101000101001100111110001100011110001011010110001100111100100001100100111001001111001001000010100110001111100111111101000101001" "11111111010101000101000110000011001110111101110011011101110110011000111100111001001101101011110111110010100011000001100111111101000101001" }, - /* 5*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { 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, 23, 188, 0, "AIM ITS/04-023:2022 Annex A example; BWIPP different encodation", + /* 9*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("$439.97"), -1, 3 }, { TU("¥3149.79"), -1, 29 }, { TU("Produkt:444,90 €"), -1, 17 } }, 0, 10, 137, 0, "AIM ITS/04-023:2022 Annex A example (shortened); BWIPP different encodation", + "11111111010101000111010100111000001101011110011111011000111000110010111010100111000001000001000101000011101010011100000111111101000101001" + "11111111010101000111110101000110001111110100010111011110110110000100111110010010110001001111110010110011111010100110000111111101000101001" + "11111111010101000110101001111100001010111000111111010011111100111010110010111111010001001111110011101011010100011111000111111101000101001" + "11111111010101000101011111011111001001011000001100011010001100011100111010000010011101100110001000010010101111101111100111111101000101001" + "11111111010101000110101110000100001111001001100011010011111100101100111101011001100001100010111000100011010111000100000111111101000101001" + "11111111010101000111101011110010001110111101000111010100001011110000111001101011111001000111100001001011110101111000010111111101000101001" + "11111111010101000101001110011100001010000010100000011010000010000110110010001100011101000001010000100010100111001110000111111101000101001" + "11111111010101000111101001010000001011111100100011011110100001001000101111110101100001011111101011000011010111111011110111111101000101001" + "11111111010101000101001100111110001100000101011111011011010001111000110001111001001101100000111101011010100110001111100111111101000101001" + "11111111010101000101000110000011001101000010000110010111011100010000111001000100011101111001100010111010100011000001100111111101000101001" + }, + /* 10*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("$39.97"), -1, 3 }, { TU("¥149.79"), -1, 29 }, { TU("Produkt:44,90 €"), -1, 17 } }, 0, 13, 120, 0, "AIM ITS/04-023:2022 Annex A example (shortened), PS pad issue spanning ECIs; BWIPP different encodation (uses PS for 1st pad instead of ML)", + "111111110101010001111010100111100010101111001111000110001110001100101110101001110000011111010101111100111111101000101001" + "111111110101010001111101010001100010011110110111110111010011100001101110011011100100011111101010011100111111101000101001" + "111111110101010001010100111100000011001000100111110100001111101100101010111000111111011010100011111000111111101000101001" + "111111110101010001111101011111101010000010000100010100101100001100001001011000001100011010111100111110111111101000101001" + "111111110101010001101011100001000010111111010110000111100000100010101111010001000001011101011100011000111111101000101001" + "111111110101010001111101011110110011101111010111000100010100011110001000011111011001011110101111000010111111101000101001" + "111111110101010001101001110011110011110101100111110100110011000010001001100011010000011101001110111110111111101000101001" + "111111110101010001111010010100000010100111100001000110010011110110001100111101011111010101111110011100111111101000101001" + "111111110101010001111110100110010010100000100111100101110010001100001111110101110011010100110001111100111111101000101001" + "111111110101010001010001110111000011110011110010100100101100000110001000011000110010010100011000011000111111101000101001" + "111111110101010001101001110001000010111111010110000111110001100010101100000101110010011101001110011000111111101000101001" + "111111110101010001101000100011111011101101011111000100111110110100001001111000110011010100011011111000111111101000101001" + "111111110101010001010000010100000010110011100110000101000111001110001001000110110000011010000111011110111111101000101001" + }, + /* 11*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("$39.97"), -1, 3 }, { TU("¥149.79"), -1, 29 }, { TU("Produkt:44,90 €"), -1, 17 } }, 0, 13, 120, 0, "AIM ITS/04-023:2022 Annex A example (shortened), PS pad issue spanning ECIs; BWIPP different encodation", + "111111110101010001111010100111100010101111001111000110001110001100101110101001110000011111010101111100111111101000101001" + "111111110101010001111101010001100010011110110111110111010011100001101110011011100100011111101010011100111111101000101001" + "111111110101010001010100111100000011001000100111110100001111101100101010111000111111011010100011111000111111101000101001" + "111111110101010001111101011111101011110011110010100100101100001100001111001111001010011010111100111110111111101000101001" + "111111110101010001101011100001000011110100001001000111100000100010101111010001000001011101011100011000111111101000101001" + "111111110101010001111101011110110011101111010111000100010100011110001000011111011001011110101111000010111111101000101001" + "111111110101010001101001110011110011110101100111110100110011000010001001100011010000011101001110111110111111101000101001" + "111111110101010001111010010100000010100111100001000110010011110110001100111101011111010101111110011100111111101000101001" + "111111110101010001111110100110010010100000100111100101110010001100001111110101110011010100110001111100111111101000101001" + "111111110101010001010001110111000011110011110010100100101100000110001000011000110010010100011000011000111111101000101001" + "111111110101010001101001110001000010111111010110000111110100100011001111000100011011011101001110011000111111101000101001" + "111111110101010001101000100011111010111010001100000100011110010001001111010111110110010100011011111000111111101000101001" + "111111110101010001010000010100000011011000010001000110001011100111101011100111001000011010000111011110111111101000101001" + }, + /* 12*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { 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, 23, 188, 0, "AIM ITS/04-023:2022 Annex A example; BWIPP different encodation", "11111111010101000111010100011100001111100101011111011000111000110010111010100111000001100000100101100010011000110100000110100001000011001110100010001110011010100011000000111111101000101001" "11111111010101000111101010000010001111000001101101010000010111110110111101100001100101111010000010001011010001110000100111000011011101001001011111101110011111101010001110111111101000101001" "11111111010101000110101000111110001110010101111110011001111101101100100101100011111001111110101110011010011111000110010110001111010110001111101001110100010101000001111000111111101000101001" @@ -2254,7 +4200,32 @@ static void test_encode_segs(const testCtx *const p_ctx) { "11111111010101000101101110001100001100111000110100010001100110010000111011110110001001111101110100111010000100100000010111000101101111001011100111010000011101101110011110111111101000101001" "11111111010101000111100101000001001100000110111101011101001110001100111100010111011101101101111000010011111000011010010101101111101000001100100001111011011111001010001100111111101000101001" }, - /* 6*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("\357"), 1, 0 }, { TU("\357"), 1, 7 }, { TU("\357"), 1, 0 } }, 0, 10, 103, 1, "Standard example + extra seg, data mode", + /* 13*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { 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, 23, 188, 0, "AIM ITS/04-023:2022 Annex A example; BWIPP different encodation", + "11111111010101000111010100011100001111100101011111011000111000110010111010100111000001100000100101100010011000110100000110100001000011001110100010001110011010100011000000111111101000101001" + "11111111010101000111101010000010001111000001101101010000010111110110111101100001100101111010000010001011010001110000100111000011011101001001011111101110011111101010001110111111101000101001" + "11111111010101000110101000111110001110010101111110011001111101101100100101100011111001111110101110011010011111000110010110001111010110001111101001110100010101000001111000111111101000101001" + "11111111010101000111110100101111101000001010001000011111011010011110110000010100110001001101110000110011000001010011000111001100001001101110111010010000011110100101111000111111101000101001" + "11111111010101000110101110000001001111101010001100011010001110000100111000001101110101110000010110001011010111101100000111101010010000001011011111000010011101011100001100111111101000101001" + "11111111010101000111101011110000101010110011111000011110111101011110110100110011111101000111100001001010001100010111000101000110011111001011110100100000011110101111100110111111101000101001" + "11111111010101000101001111011110001101100100010000011000111000110010101011110111100001000001000010001011100100000101110110101100111000001000100100000100011010011100011110111111101000101001" + "11111111010101000111110100100110001000010111100100010011100111111010101000011111011001111000010110110011110111001110010110110011110000101100011011110001011111010010110000111111101000101001" + "11111111010101000101001100011111001001001001111000010110111011111000101101101111000001011001000001110011000111110010010100011110110001101001111101110110010100111011111100111111101000101001" + "11111111010101000110100011100111101100001000110111011000101011000000100001101111011101000001010000010010000010100010000100010001101100001101001111011111010100011100111000111111101000101001" + "11111111010101000110100111000001001100000101110100011010000111101100110111111010111001100100111010000011111101110100100111100010100000101111010110011000011101001110001100111111101000101001" + "11111111010101000101000110111110001100111000100111011001101001111000101110001100111001101100000101111010011001100011110101111000101000001001100101110000010100011000111110111111101000101001" + "11111111010101000101000001001000001100110000010010011011110011100010101000001010000001101100110000110011001000001000110100000100010010001100100000100011011101000001011100111111101000101001" + "11111111010101000111010001101000001011101111110100011110011100111010111101000010010001011111101011000011110001110111010111010111000110001111011011000010011111010001000110111111101000101001" + "11111111010101000101000001101111101110110111111001010000111110110010111111010110001001011111100111010011011111101101000111011100010111101011110000100001011001010111110000111111101000101001" + "11111111010101000111100101101111101100001010000110011110011001011100110010010011000001000100111011100010110000110100000110000010100110001101110110000100011100101101111000111111101000101001" + "11111111010101000101000111110001101000110100111111011110010001000010111000001000110101100000101110010011000001011101000111100110110100001111010111001110010100011111011000111111101000101001" + "11111111010101000111110010111101101001000010111100011101111110010100101001000011110001101111001000011010011000000101110100100010000111101111001001111001011110010111110110111111101000101001" + "11111111010101000111101101000011101000100001000001011100001100010110110000010100110001011100111101100011101100101100000111101011001111101101111001110001011101101000011000111111101000101001" + "11111111010101000111101000001001001110101110110000011110001011001100111101000100001001111000100010100010010000111100010111101000100100001111100100001011010100001111100110111111101000101001" + "11111111010101000110010010011111001111110101110011010011111100111010111001011111101101100011111001001011000111110010010111011001011111001000111000010110010110110001111000111111101000101001" + "11111111010101000101101110001100001101100010000010010100011110111100100000100010000101111011110010001011101000000101110100010001010000001101011001110000011101101110011110111111101000101001" + "11111111010101000111100101000001001100011001111010011010011100100000101011111011000001101100001111010010110111110010000110100011110110001110010011000001011111001010001100111111101000101001" + }, + /* 14*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("\357"), 1, 0 }, { TU("\357"), 1, 7 }, { TU("\357"), 1, 0 } }, 0, 10, 103, 1, "Standard example + extra seg, data mode", "1111111101010100011101010011100000110101101110000001111001111001010011110101011110000111111101000101001" "1111111101010100011111010100011000111100101110011101001111110010110011111010100110000111111101000101001" "1111111101010100011101010111111000111010100011111101001111110011101011010100011111000111111101000101001" @@ -2266,7 +4237,19 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1111111101010100011010011011111100110100111111010001001011101111110010100110001111100111111101000101001" "1111111101010100010100011000001100111100100100111101100011001010000011010001100011100111111101000101001" }, - /* 7*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, ZINT_WARN_USES_ECI, 11, 120, 1, "Auto-ECI", + /* 15*/ { BARCODE_PDF417, DATA_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("\357"), 1, 0 }, { TU("\357"), 1, 7 }, { TU("\357"), 1, 0 } }, 0, 10, 103, 1, "Standard example + extra seg, data mode", + "1111111101010100011101010011100000110101101110000001111001111001010011110101011110000111111101000101001" + "1111111101010100011111010100011000111100101110011101001111110010110011111010100110000111111101000101001" + "1111111101010100011101010111111000111010100011111101001111110011101011010100011111000111111101000101001" + "1111111101010100010101111101111100111011001000110001100011100011001010101111001111000111111101000101001" + "1111111101010100011010111000010000111110101001100001011111100100011011010111000100000111111101000101001" + "1111111101010100011110101111010000101100110011110001100011111001001011110101111000010111111101000101001" + "1111111101010100010100111001110000110101000011000001100100011001110011010011101111000111111101000101001" + "1111111101010100011110100101000000100001011110000101101011111101111011010111111011110111111101000101001" + "1111111101010100011010011011111100110100111111010001001011101111110010100110001111100111111101000101001" + "1111111101010100010100011000001100111100100100111101100011001010000011010001100011100111111101000101001" + }, + /* 16*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, ZINT_WARN_USES_ECI, 11, 120, 1, "Auto-ECI", "111111110101010001110101001110000011010111001111000110001110001100101010100000100000011111010101111100111111101000101001" "111111110101010001111110101000111011011111101011100111111001010111001111001011000110011111010100110000111111101000101001" "111111110101010001010100111100000010110011101111100111111001000110101000011111011001011101010001111110111111101000101001" @@ -2279,7 +4262,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "111111110101010001010001100000110011001000010011000110011000110011001011110011110010010100011000011000111111101000101001" "111111110101010001110100111000110011010001111011000110000110111100101101001111000011011010011100100000111111101000101001" }, - /* 8*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 2, 4, "017053" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 13 }, { TU("貫やぐ禁"), -1, 20 } }, 0, 11, 120, 1, "Structured Append", + /* 17*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, ZINT_WARN_USES_ECI, 11, 120, 1, "Auto-ECI", "111111110101010001110101001110000011010111001111000110001110001100101010100000100000011111010101111100111111101000101001" "111111110101010001111110101000111011011111101011100111111001010111001111001011000110011111010100110000111111101000101001" "111111110101010001010100111100000010110011101111100111111001000110101000011111011001011101010001111110111111101000101001" @@ -2292,7 +4275,55 @@ static void test_encode_segs(const testCtx *const p_ctx) { "111111110101010001010001100000110011001000010011000110011000110011001011110011110010010100011000011000111111101000101001" "111111110101010001110100111000110011010001111011000110000110111100101101001111000011011010011100100000111111101000101001" }, - /* 9*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("¶¶"), -1, 0 }, { TU("ЖЖ"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 82, 1, "Standard example (doubled to avoid Byte Shift)", + /* 18*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("12345678"), -1, 0 }, { TU("ABCDEF"), -1, 4 }, { TU("\001\001\001\001"), -1, 0 } }, 0, 9, 120, 0, "NUM seg TEX seg BYT seg; BWIPP different encodation", + "111111110101010001111101010111110011010110001110000100111101111010001010000001010000011111010101111100111111101000101001" + "111111110101010001111010100001000011100010000110100111000101110001101001111110010110011110101001000000111111101000101001" + "111111110101010001010100111100000011101010011111100110001111100100101110101011111100010101000011110000111111101000101001" + "111111110101010001101011110011111010100111001110000110100000101100001100011100011001011010111100111110111111101000101001" + "111111110101010001101011100000100011111010100110000110111111010111001111110101011100011110101110011100111111101000101001" + "111111110101010001111101011110110011101010111111000111010101111110001110101011111100011110101111101100111111101000101001" + "111111110101010001110100111011111010000110001100100110011101100000101011011000010000011101001110111110111111101000101001" + "111111110101010001111110100101110011110011011100110110110000011110101000001011111011010101111110111000111111101000101001" + "111111110101010001111110100110010010011110010010000100000100010111101110001110101111011111010011101000111111101000101001" + }, + /* 19*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("12345678"), -1, 0 }, { TU("ABCDEF"), -1, 4 }, { TU("\001\001\001\001"), -1, 0 } }, 0, 9, 120, 0, "NUM seg TEX seg BYT seg; BWIPP different encodation", + "111111110101010001111101010111110011010110001110000100111101111010001010000001010000011111010101111100111111101000101001" + "111111110101010001111010100001000011100010000110100111000101110001101001111110010110011110101001000000111111101000101001" + "111111110101010001010100111100000011101010011111100110001111100100101110101011111100010101000011110000111111101000101001" + "111111110101010001101011110011111010100111001110000110100000101100001100011100011001011010111100111110111111101000101001" + "111111110101010001101011100000100011111010100110000110111111010111001111110101011100011110101110011100111111101000101001" + "111111110101010001111101011110110011101010111111000111010101111110001110101011111100011110101111101100111111101000101001" + "111111110101010001110100111011111010000110001100100110011101100000101011011000010000011101001110111110111111101000101001" + "111111110101010001111110100101110011110011011100110110110000011110101000001011111011010101111110111000111111101000101001" + "111111110101010001111110100110010010011110010010000100000100010111101110001110101111011111010011101000111111101000101001" + }, + /* 20*/ { BARCODE_PDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 2, 4, "017053" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 13 }, { TU("貫やぐ禁"), -1, 20 } }, 0, 11, 120, 1, "Structured Append", + "111111110101010001110101001110000011010111001111000110001110001100101010100000100000011111010101111100111111101000101001" + "111111110101010001111110101000111011011111101011100111111001010111001111001011000110011111010100110000111111101000101001" + "111111110101010001010100111100000010110011101111100111111001000110101000011111011001011101010001111110111111101000101001" + "111111110101010001010111110111110011101011011110000100000100001000101001011000110000011010111100111110111111101000101001" + "111111110101010001110101110000110011110100001010000111010000001100101001111110010110011010111000100000111111101000101001" + "111111110101010001111101011110110011111101011000010110011111101100101011001000001110011101011111010000111111101000101001" + "111111110101010001010011100111000011001100001100110101100011110011101100111001110011011101001110111110111111101000101001" + "111111110101010001111101001011000011111010001011000110100011101000001111100101001100011010111111011110111111101000101001" + "111111110101010001111110100110010011000111110010010100111010011000001110101111100010010100110000111110111111101000101001" + "111111110101010001010001100000110011001000010011000110011000110011001011110011110010010100011000011000111111101000101001" + "111111110101010001110100111000110011010001111011000110000110111100101101001111000011011010011100100000111111101000101001" + }, + /* 21*/ { BARCODE_PDF417, UNICODE_MODE, -1, -1, -1, { 2, 4, "017053" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 13 }, { TU("貫やぐ禁"), -1, 20 } }, 0, 11, 120, 1, "Structured Append", + "111111110101010001110101001110000011010111001111000110001110001100101010100000100000011111010101111100111111101000101001" + "111111110101010001111110101000111011011111101011100111111001010111001111001011000110011111010100110000111111101000101001" + "111111110101010001010100111100000010110011101111100111111001000110101000011111011001011101010001111110111111101000101001" + "111111110101010001010111110111110011101011011110000100000100001000101001011000110000011010111100111110111111101000101001" + "111111110101010001110101110000110011110100001010000111010000001100101001111110010110011010111000100000111111101000101001" + "111111110101010001111101011110110011111101011000010110011111101100101011001000001110011101011111010000111111101000101001" + "111111110101010001010011100111000011001100001100110101100011110011101100111001110011011101001110111110111111101000101001" + "111111110101010001111101001011000011111010001011000110100011101000001111100101001100011010111111011110111111101000101001" + "111111110101010001111110100110010011000111110010010100111010011000001110101111100010010100110000111110111111101000101001" + "111111110101010001010001100000110011001000010011000110011000110011001011110011110010010100011000011000111111101000101001" + "111111110101010001110100111000110011010001111011000110000110111100101101001111000011011010011100100000111111101000101001" + }, + /* 22*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("¶¶"), -1, 0 }, { TU("ЖЖ"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 82, 1, "Standard example (doubled to avoid Byte Shift)", "1100111010100000100001000101000010110110110100010000001101101000100000011001110101" "1110111010100111111001011001000010010111111010100011101101111110101110011101110101" "1110011010110010010111110001000011010110010010111110001100011111001001011100110101" @@ -2302,7 +4333,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1100001010111011100010100001001100010101110001110010001100100111011110011000010101" "1100011010101111100100111001001110010111010001100010001111000101000001011000110101" }, - /* 10*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("¶¶"), -1, 0 }, { TU("ЖЖ"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 82, 1, "Standard example auto-ECI", + /* 23*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("¶¶"), -1, 0 }, { TU("ЖЖ"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 82, 1, "Standard example (doubled to avoid Byte Shift)", "1100111010100000100001000101000010110110110100010000001101101000100000011001110101" "1110111010100111111001011001000010010111111010100011101101111110101110011101110101" "1110011010110010010111110001000011010110010010111110001100011111001001011100110101" @@ -2312,7 +4343,27 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1100001010111011100010100001001100010101110001110010001100100111011110011000010101" "1100011010101111100100111001001110010111010001100010001111000101000001011000110101" }, - /* 11*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("ЖЖ"), -1, 7 }, { TU("¶¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 8, 82, 1, "Standard example inverted", + /* 24*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("¶¶"), -1, 0 }, { TU("ЖЖ"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 82, 1, "Standard example auto-ECI", + "1100111010100000100001000101000010110110110100010000001101101000100000011001110101" + "1110111010100111111001011001000010010111111010100011101101111110101110011101110101" + "1110011010110010010111110001000011010110010010111110001100011111001001011100110101" + "1111011010100001100011001001000111010100001011101110001100010000010011011110110101" + "1111001010111001000011010001000110010110111001111101001101000011101000011110010101" + "1110001010101101101111000001000100010100111100001101101011011100011111011100010101" + "1100001010111011100010100001001100010101110001110010001100100111011110011000010101" + "1100011010101111100100111001001110010111010001100010001111000101000001011000110101" + }, + /* 25*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("¶¶"), -1, 0 }, { TU("ЖЖ"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 82, 1, "Standard example auto-ECI", + "1100111010100000100001000101000010110110110100010000001101101000100000011001110101" + "1110111010100111111001011001000010010111111010100011101101111110101110011101110101" + "1110011010110010010111110001000011010110010010111110001100011111001001011100110101" + "1111011010100001100011001001000111010100001011101110001100010000010011011110110101" + "1111001010111001000011010001000110010110111001111101001101000011101000011110010101" + "1110001010101101101111000001000100010100111100001101101011011100011111011100010101" + "1100001010111011100010100001001100010101110001110010001100100111011110011000010101" + "1100011010101111100100111001001110010111010001100010001111000101000001011000110101" + }, + /* 26*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("ЖЖ"), -1, 7 }, { TU("¶¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 8, 82, 1, "Standard example inverted", "1100111010110001110001100101000010110111010100011100001000001000010001011001110101" "1110111010101000011110010001000010010101000011110010001001111110010110011101110101" "1110011010110101001111100001000011010110011111101100101100100101111100011100110101" @@ -2322,7 +4373,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1100001010110100001000110001001100010111010010000111001110001100010011011000010101" "1100011010111110111011000101001110010111011000111000101110100111000110011000110101" }, - /* 12*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("ЖЖ"), -1, 0 }, { TU("¶¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 82, 1, "Standard example inverted auto-ECI", + /* 27*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("ЖЖ"), -1, 7 }, { TU("¶¶"), -1, 0 }, { TU(""), 0, 0 } }, 0, 8, 82, 1, "Standard example inverted", "1100111010110001110001100101000010110111010100011100001000001000010001011001110101" "1110111010101000011110010001000010010101000011110010001001111110010110011101110101" "1110011010110101001111100001000011010110011111101100101100100101111100011100110101" @@ -2332,7 +4383,27 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1100001010110100001000110001001100010111010010000111001110001100010011011000010101" "1100011010111110111011000101001110010111011000111000101110100111000110011000110101" }, - /* 13*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 4, -1, { 0, 0, "" }, { { TU("product:Google Pixel 4a 128 GB Black;price:$439.97"), -1, 3 }, { TU("品名:Google 谷歌 Pixel 4a 128 GB 黑色;零售价:¥3149.79"), -1, 29 }, { TU("Produkt:Google Pixel 4a 128 GB Schwarz;Preis:444,90 €"), -1, 17 } }, 0, 44, 99, 0, "AIM ITS/04-023:2022 Annex A example (shortened); BWIPP different encodation", + /* 28*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("ЖЖ"), -1, 0 }, { TU("¶¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 82, 1, "Standard example inverted auto-ECI", + "1100111010110001110001100101000010110111010100011100001000001000010001011001110101" + "1110111010101000011110010001000010010101000011110010001001111110010110011101110101" + "1110011010110101001111100001000011010110011111101100101100100101111100011100110101" + "1111011010110110100010000001000111010100000100111011101010000010100000011110110101" + "1111001010110111001111101001000110010110111011111010001011111010011100011110010101" + "1110001010101100010001110001000100010110111110010000101000000110101110011100010101" + "1100001010110100001000110001001100010111010010000111001110001100010011011000010101" + "1100011010111110111011000101001110010111011000111000101110100111000110011000110101" + }, + /* 29*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("ЖЖ"), -1, 0 }, { TU("¶¶"), -1, 0 }, { TU(""), 0, 0 } }, ZINT_WARN_USES_ECI, 8, 82, 1, "Standard example inverted auto-ECI", + "1100111010110001110001100101000010110111010100011100001000001000010001011001110101" + "1110111010101000011110010001000010010101000011110010001001111110010110011101110101" + "1110011010110101001111100001000011010110011111101100101100100101111100011100110101" + "1111011010110110100010000001000111010100000100111011101010000010100000011110110101" + "1111001010110111001111101001000110010110111011111010001011111010011100011110010101" + "1110001010101100010001110001000100010110111110010000101000000110101110011100010101" + "1100001010110100001000110001001100010111010010000111001110001100010011011000010101" + "1100011010111110111011000101001110010111011000111000101110100111000110011000110101" + }, + /* 30*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, 4, -1, { 0, 0, "" }, { { TU("product:Google Pixel 4a 128 GB Black;price:$439.97"), -1, 3 }, { TU("品名:Google 谷歌 Pixel 4a 128 GB 黑色;零售价:¥3149.79"), -1, 29 }, { TU("Produkt:Google Pixel 4a 128 GB Schwarz;Preis:444,90 €"), -1, 17 } }, 0, 44, 99, 0, "AIM ITS/04-023:2022 Annex A example (shortened); BWIPP different encodation", "110010001011000111000110010111010100111000001011000010100001100011001001100000100101100011010001001" "111010001011000100111010000101001111000010001011100010111101001101100001111000001101101011010001101" "111011001010001111001101100101110001100111001011100110100100100001111001111110010110001011010000101" @@ -2341,7 +4412,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "110111101011001111101101100100100101111000001001101100110001111010110001110111111010100011101000101" "110011101011111010101111100110110000100001001000101100110101100111000001101110011000010011101100101" "111011101010101111110011100110011110101111101000101000100010011111011001110100111000011011001100101" - "111001101010111101001000000101100110011110001001101000100001111101100101010111000111111011011100101" + "111001101010111101001000000110010001001111101001101000100001111101100101010111000111111011011100101" "111101101010000010000100010111011011001110001011101000111011010001100001110010010011100011011110101" "111100101011100101111001110101111110101100001011001000111100000110110101110100000011001011001110101" "111000101010111000110011100100100100001111001011001100111111001011000101100111111011001011101110101" @@ -2364,21 +4435,67 @@ static void test_encode_segs(const testCtx *const p_ctx) { "110010111011001111010111110111101000100100001011001110111010001100100001011010011111100011101011001" "110010011011000111100100110100111111001110101001001110111001011111101101100011111001001011101010001" "110011011010000110001100100100001100011001001001101110100001100011001001000011000110010011001010001" - "111011011010111111010110000101111110101100001000101110110011101111101001111110001110101011001011001" - "111001011010011000010011100101001000011110001000100110111111001011001001000111100100001011001011101" - "110001011011100100010011100100110001101000001000110110111010010011100001101111101111010011001001101" - "110001010011010011101000000111101000001101101000010110111110001010001101001111110101100011001101101" - "110011010010010000010011110100111110011010001000010010100011000100011101000111000110111011101101101" - "110111010011100111101100100101001000001000001000011010101000010001000001011101110001000011100101101" - "110110010010001011111001100100001011111001101000111010101111110100011001110001011110111011000101101" - "110110011011000111110110110110100001001111101000110010111011110100111001001001100111110011000101001" - "110110111011101110110011000101100000110001001000100010111010011011110001100100011101111011001101001" - "110110110011110010100010000111001000001101001001100010111011000011101001110001000011010011011101001" - "110110100011001111010110000110101101111110001001110010101110001100011101111110100001101011011001001" - "110100100011100110100001100100110011010000001001111010110110000100001001001100111011000011011001101" - "110101100011011101111101000111100101001000001011111010111111000111010101110010011100011011011011101" + "111011011010111111010110000101111110101100001000101110110001000111001001110001100111010011001011001" + "111001011011010010111110000111010100011111101000100110100011110000100101011100100110000011001011101" + "110001011011101100100011000111000111011011001000110110110001001110111101000011001100010011001001101" + "110001010011010001110000100101110011111100101000010110111101001100001101110100000110100011001101101" + "110011010010111001110011110100110111001111101000010010101110000001011001000110110001111011101101101" + "110111010010010000001001000101100011110111001000011010111001010011100001111101110100111011100101101" + "110110010011111010111011110101111110011011101000111010100010011110100001111000001101101011000101101" + "110110011010000111100101000100001111000101001000110010111101000011110101011000001011100011000101001" + "110110111010000100011000110110111110111101001000100010110010111011110001000010011001100011001101001" + "110110110011111011010100000111100100110011001001100010111110101000001101111011000011001011011101001" + "110110100011001110010001110101110100000011001001110010101110110011100001000110010000111011011001001" + "110100100011101110100000100110101110011110001001111010111101110100001101010000110001100011011001101" + "110101100011111010110011100111111010010111001011111010111100100100000101011111100101100011011011101" }, - /* 14*/ { BARCODE_MICROPDF417, DATA_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("\357\357"), 2, 0 }, { TU("\357\357"), 2, 7 }, { TU("\357\357"), 2, 0 } }, 0, 10, 82, 1, "Standard example (doubled) + extra seg, data mode", + /* 31*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, 4, -1, { 0, 0, "" }, { { TU("product:Google Pixel 4a 128 GB Black;price:$439.97"), -1, 3 }, { TU("品名:Google 谷歌 Pixel 4a 128 GB 黑色;零售价:¥3149.79"), -1, 29 }, { TU("Produkt:Google Pixel 4a 128 GB Schwarz;Preis:444,90 €"), -1, 17 } }, 0, 44, 99, 0, "AIM ITS/04-023:2022 Annex A example (shortened); BWIPP different encodation", + "110010001011000111000110010111010100111000001011000010100001100011001001100000100101100011010001001" + "111010001011000100111010000101001111000010001011100010111101001101100001111000001101101011010001101" + "111011001010001111001101100101110001100111001011100110100100100001111001111110010110001011010000101" + "110011001011000001001011000110010001101110001011100100110100000100011001000001010001000011011000101" + "110111001011010001110000010111010110000001001011101100111100000100010101111110100101110011001000101" + "110111101011001111101101100100100101111000001001101100110001111010110001110111111010100011101000101" + "110011101011111010101111100110110000100001001000101100110101100111000001101110011000010011101100101" + "111011101010101111110011100110011110101111101000101000100010011111011001110100111000011011001100101" + "111001101010111101001000000110010001001111101001101000100001111101100101010111000111111011011100101" + "111101101010000010000100010111001000001011101011101000110101100111000001000100100000100011011110101" + "111100101010000101111001000100111001111110101011001000101000011111011001111000010110110011001110101" + "111000101011000011010111100101110110000111001011001100100001100001011101001001001111000011101110101" + "110000101010110110001000000111101101000111001011000100111011001011000001000011000110010011100110101" + "110001101010111100100011110100001101011111101011000110100011010011111101111001000100001011110110101" + "110001001010011111001110110100111110110010001010000110110011111011011001111101011110110011110010101" + "111001001010010001100110000111000111010010001010001110110100110001110001000001000010001011100010101" + "111101001011011011110001000111110100010110001010001100110001100111100101100100011100001011000010101" + "111101011011000111100010110110001000101111101010011100100011100101100001101001111110100011000110101" + "111101010011110100010111100111101110100110001010011000100101100001100001001011000001100011000100101" + "111001010010111111010110000111100011101110101010111000111010111000110001111011011000010011100100101" + "111011010011101101111110010100001111101100101010110000111111010110001001011111100111010011110100101" + "111010010011000011011011000100110111000110001010010000100001011000001101100001010000110011110101101" + "111010011011111011000001010111010000011001001011010000100100001111101101001001111100110011110101001" + "111010111010011111011010000100001010111100001001010000111001111001011101101110100111000011100101001" + "111010110010000110111101110100000101000001001001011000100000101000100001101011110011111011101101001" + "111010100011111101101011000111000111011110101001011100111010111110111101111101110110001011101001001" + "110010100010100110000111110111001111010011101011011100110011100100111001000000110010111011101001101" + "110010110011000001001011000111011100110011001011011110101100110000100001110001110110011011101011101" + "110010111011110100010010000111010001100100001011001110101101001111110001110000010111011011101011001" + "110010011010011111100111010111001011111101101001001110110001111100100101100011111001001011101010001" + "110011011010000110001100100100001100011001001001101110100001100011001001000011000110010011001010001" + "111011011010111111010110000101111110101100001000101110101111000010111101111100100110111011001011001" + "111001011011101110010011110110011110001001101000100110110001011111101001011101100011100011001011101" + "110001011010001010000001000110001100100000101000110110110100001000011001101100100100000011001001101" + "110001010011110110110000010111101000010100001000010110100000010011110101100010111101100011001101101" + "110011010011100111110010110110001110100111001000010010110011011001111101101100110011111011101101101" + "110111010010000010011011000110100011011100001000011010110110010000100001101110011001000011100101101" + "110110010011110110000011010100001101111100101000111010110100001111001101101001111000110011000101101" + "110110011011011101100111100111111010000110101000110010100100110001111101100111010011100011000101001" + "110110111010111000011101000110010111001111001000100010100001001010000001010000011011000011001101001" + "110110110011000100000111010111111011010001101001100010100100111110011001010000011110100011011101001" + "110110100011110000101111010100111101100011001001110010110001111101010001100100101111100011011001001" + "110100100010011011111011110111001110100001001001111010110111011100110001011110001111010011011001101" + "110101100010101111110001110111100001100110101011111010111101000010000101011111000010111011011011101" + }, + /* 32*/ { BARCODE_MICROPDF417, DATA_MODE | FAST_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("\357\357"), 2, 0 }, { TU("\357\357"), 2, 7 }, { TU("\357\357"), 2, 0 } }, 0, 10, 82, 1, "Standard example (doubled) + extra seg, data mode", "1100010010110011111101100101001111010101100110011110001011001100111100011000100101" "1110010010110001110001100101011111010111010100011100001000001000010001011100100101" "1111010010111100101110011101011110010111100101110011101001111110010110011110100101" @@ -2390,7 +4507,19 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1110100110111101000011001101001000110111101001000100001100100111010000011101001101" "1110101110100000101101111101001000010111010011111000101001110111001111011101011101" }, - /* 15*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, ZINT_WARN_USES_ECI, 17, 55, 1, "Auto-ECI", + /* 33*/ { BARCODE_MICROPDF417, DATA_MODE, -1, 3, -1, { 0, 0, "" }, { { TU("\357\357"), 2, 0 }, { TU("\357\357"), 2, 7 }, { TU("\357\357"), 2, 0 } }, 0, 10, 82, 1, "Standard example (doubled) + extra seg, data mode", + "1100010010110011111101100101001111010101100110011110001011001100111100011000100101" + "1110010010110001110001100101011111010111010100011100001000001000010001011100100101" + "1111010010111100101110011101011110010111100101110011101001111110010110011110100101" + "1111010110110101001111100001011110110110011111101100101011001100111100011110101101" + "1111010100111011001000110001001110110100001100011001001100111011001000011110101001" + "1110010100110001000001110101001110100111111011101010001101110111110100011100101001" + "1110110100110100010011111001001100100110010100001111101110011111101010011101101001" + "1110100100110110000010000101001100110101001000001000001110100000100111011101001001" + "1110100110111101000011001101001000110111101001000100001100100111010000011101001101" + "1110101110100000101101111101001000010111010011111000101001110111001111011101011101" + }, + /* 34*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, ZINT_WARN_USES_ECI, 17, 55, 1, "Auto-ECI", "1100110100100001111101100101101010000111110011001101001" "1101110100100000100001000101100100110011100011011101001" "1101100100111100101100011001100101111011000011011001001" @@ -2409,7 +4538,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1101000010110000011010111101100110010001111011010000101" "1101100010100001001101100001001001110111000011011000101" }, - /* 16*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 3, 4, "017053" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 13 }, { TU("貫やぐ禁"), -1, 20 } }, 0, 17, 55, 1, "Structured Append", + /* 35*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 0 }, { TU("貫やぐ禁"), -1, 20 } }, ZINT_WARN_USES_ECI, 17, 55, 1, "Auto-ECI", "1100110100100001111101100101101010000111110011001101001" "1101110100100000100001000101100100110011100011011101001" "1101100100111100101100011001100101111011000011011001001" @@ -2428,7 +4557,83 @@ static void test_encode_segs(const testCtx *const p_ctx) { "1101000010110000011010111101100110010001111011010000101" "1101100010100001001101100001001001110111000011011000101" }, - /* 17*/ { BARCODE_PDF417COMP, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 69, 1, "Standard example", + /* 36*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("ABCDE"), -1, 0 }, { TU("fghij"), -1, 17 }, { TU(""), 0, 0 } }, 0, 17, 38, 0, "Pad spanning ECI; BWIPP uses LL (better) instead of ML", + "11001101001100011111001001011001101001" + "11011101001111010101111000011011101001" + "11011001001101011111101111011011001001" + "11011001101001011000011111011011001101" + "11011011101100011100011001011011011101" + "11011011001111010110011000011011011001" + "11011010001000011100010110011011010001" + "11010010001111011010000111011010010001" + "11010110001001011110010000011010110001" + "11010111001100011111001001011010111001" + "11010111101000111011100010011010111101" + "11010011101111010001100110011010011101" + "11010011001100110000101111011010011001" + "11010001001101110011001000011010001001" + "11010001101000101111100011011010001101" + "11010000101001111010000100011010000101" + "11011000101100110100100000011011000101" + }, + /* 37*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("ABCDE"), -1, 0 }, { TU("fghij"), -1, 17 }, { TU(""), 0, 0 } }, 0, 17, 38, 0, "Pad spanning ECI; BWIPP uses LL (better) instead of ML", + "11001101001100011111001001011001101001" + "11011101001111010101111000011011101001" + "11011001001101011111101111011011001001" + "11011001101001011000011111011011001101" + "11011011101100011100011001011011011101" + "11011011001111010110011000011011011001" + "11011010001000011100010110011011010001" + "11010010001111011010000111011010010001" + "11010110001001011110010000011010110001" + "11010111001100011111001001011010111001" + "11010111101000111011100010011010111101" + "11010011101111010001100110011010011101" + "11010011001100110000101111011010011001" + "11010001001101110011001000011010001001" + "11010001101000101111100011011010001101" + "11010000101001111010000100011010000101" + "11011000101100110100100000011011000101" + }, + /* 38*/ { BARCODE_MICROPDF417, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 3, 4, "017053" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 13 }, { TU("貫やぐ禁"), -1, 20 } }, 0, 17, 55, 1, "Structured Append", + "1100110100100001111101100101101010000111110011001101001" + "1101110100100000100001000101100100110011100011011101001" + "1101100100111100101100011001100101111011000011011001001" + "1101100110111111001000110101000011111011001011011001101" + "1101101110111010110111100001000001000010001011011011101" + "1101101100101000111111011101111010000101000011011011001" + "1101101000100100111011111101000011111011001011011010001" + "1101001000101011000011000001000001000010001011010010001" + "1101011000111001011000001001111011101110100011010110001" + "1101011100110011010011110001101111100010001011010111001" + "1101011110110100001110111101110100000010111011010111101" + "1101001110111110010100110001011111101011000011010011101" + "1101001100101000011001111101000000110100111011010011001" + "1101000100110100110111000001000010000100100011010001001" + "1101000110111001011110011101101101111001000011010001101" + "1101000010110000011010111101100110010001111011010000101" + "1101100010100001001101100001001001110111000011011000101" + }, + /* 39*/ { BARCODE_MICROPDF417, UNICODE_MODE, -1, -1, -1, { 3, 4, "017053" }, { { TU("Τεχτ"), -1, 9 }, { TU("กขฯ"), -1, 13 }, { TU("貫やぐ禁"), -1, 20 } }, 0, 17, 55, 1, "Structured Append", + "1100110100100001111101100101101010000111110011001101001" + "1101110100100000100001000101100100110011100011011101001" + "1101100100111100101100011001100101111011000011011001001" + "1101100110111111001000110101000011111011001011011001101" + "1101101110111010110111100001000001000010001011011011101" + "1101101100101000111111011101111010000101000011011011001" + "1101101000100100111011111101000011111011001011011010001" + "1101001000101011000011000001000001000010001011010010001" + "1101011000111001011000001001111011101110100011010110001" + "1101011100110011010011110001101111100010001011010111001" + "1101011110110100001110111101110100000010111011010111101" + "1101001110111110010100110001011111101011000011010011101" + "1101001100101000011001111101000000110100111011010011001" + "1101000100110100110111000001000010000100100011010001001" + "1101000110111001011110011101101101111001000011010001101" + "1101000010110000011010111101100110010001111011010000101" + "1101100010100001001101100001001001110111000011011000101" + }, + /* 40*/ { BARCODE_PDF417COMP, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 69, 1, "Standard example", "111111110101010001111101010111110011010100001100000111100111100101001" "111111110101010001111110101000111010100001111001000100111111001011001" "111111110101010001110101011111100011101010001111110100111111001110101" @@ -2438,16 +4643,27 @@ static void test_encode_segs(const testCtx *const p_ctx) { "111111110101010001110100111011111010100011101110000100011101110010001" "111111110101010001111101001011000011100010111011000110101110000100001" }, - /* 18*/ { BARCODE_HIBC_PDF, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("H123ABC"), -1, 0 }, { TU("012345678"), -1, 0 }, { TU("90D"), -1, 20 } }, ZINT_ERROR_INVALID_OPTION, 0, 0, 1, "HIBC", + /* 41*/ { BARCODE_PDF417COMP, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("¶"), -1, 0 }, { TU("Ж"), -1, 7 }, { TU(""), 0, 0 } }, 0, 8, 69, 1, "Standard example", + "111111110101010001111101010111110011010100001100000111100111100101001" + "111111110101010001111110101000111010100001111001000100111111001011001" + "111111110101010001110101011111100011101010001111110100111111001110101" + "111111110101010001101011110011111011011010001000000100001100011001001" + "111111110101010001110101110000110010111010001111100111100000100100101" + "111111110101010001111010111101000011101111100010110100111110000110101" + "111111110101010001110100111011111010100011101110000100011101110010001" + "111111110101010001111101001011000011100010111011000110101110000100001" + }, + /* 42*/ { BARCODE_HIBC_PDF, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("H123ABC"), -1, 0 }, { TU("012345678"), -1, 0 }, { TU("90D"), -1, 20 } }, ZINT_ERROR_INVALID_OPTION, 0, 0, 1, "HIBC", "" }, - /* 19*/ { BARCODE_HIBC_MICPDF, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("H123ABC"), -1, 0 }, { TU("012345678"), -1, 0 }, { TU("90D"), -1, 20 } }, ZINT_ERROR_INVALID_OPTION, 0, 0, 1, "HIBC", + /* 43*/ { BARCODE_HIBC_MICPDF, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("H123ABC"), -1, 0 }, { TU("012345678"), -1, 0 }, { TU("90D"), -1, 20 } }, ZINT_ERROR_INVALID_OPTION, 0, 0, 1, "HIBC", "" }, }; int data_size = ARRAY_SIZE(data); int i, j, seg_count, ret; struct zint_symbol *symbol; + int last_fast_num_cwds; char escaped[1024]; char cmp_buf[32768]; @@ -2465,6 +4681,8 @@ static void test_encode_segs(const testCtx *const p_ctx) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); + symbol->debug = ZINT_DEBUG_TEST; /* Needed to get codeword dump in errtxt */ + testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, NULL, 0, debug); for (j = 0, seg_count = 0; j < 3 && data[i].segs[j].length; j++, seg_count++); @@ -2502,6 +4720,20 @@ static void test_encode_segs(const testCtx *const p_ctx) { ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d\n", i, ret, width, row); + if (data[i].ret == 0 && p_ctx->index == -1) { + if (i && (data[i - 1].input_mode & FAST_MODE) && !(data[i].input_mode & FAST_MODE)) { + int num_cwds; + assert_equal(sscanf(symbol->errtxt, "(%d)", &num_cwds), 1, "i:%d num_cwds sscanf != 1 (%s)\n", i, symbol->errtxt); + assert_nonzero(last_fast_num_cwds >= num_cwds, "i:%d last_fast_num_cwds %d < num_cwds %d\n", i, last_fast_num_cwds, num_cwds); + if (num_cwds < last_fast_num_cwds && (debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) { + printf("i:%d diff %d\n", i, num_cwds - last_fast_num_cwds); + } + } + if (data[i].input_mode & FAST_MODE) { + assert_equal(sscanf(symbol->errtxt, "(%d)", &last_fast_num_cwds), 1, "i:%d last_fast sscanf != 1 (%s)\n", i, symbol->errtxt); + } + } + if (do_bwipp && testUtilCanBwipp(i, symbol, data[i].option_1, data[i].option_2, data[i].option_3, debug)) { if (!data[i].bwipp_cmp) { if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); @@ -2515,7 +4747,7 @@ 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 & 0x07) == DATA_MODE) { if (debug & ZINT_DEBUG_TEST_PRINT) { printf("i:%d multiple segments in DATA_MODE not currently supported for ZXing-C++ testing (%s)\n", i, testUtilBarcodeName(symbol->symbology)); @@ -2549,13 +4781,14 @@ static void test_fuzz(const testCtx *const p_ctx) { struct item { int symbology; + int input_mode; char *data; int length; int option_1; int ret; }; struct item data[] = { - /* 0*/ { BARCODE_PDF417, + /* 0*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075" "\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\073\060\025\060\075\060\204\060\103\204\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060" "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" @@ -2582,7 +4815,34 @@ static void test_fuzz(const testCtx *const p_ctx) { "\204\060\214\060\204\060\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\004\060\103\204\060" "\204\060\003\060\204\075\060\120\214\060\204\060\004\060\103\204\060\204\060\003\060\211\074\060\120\060\124\060\351\060\120\060\075\060\351\060\072\375\060\204\060", 1001, -1, ZINT_ERROR_TOO_LONG }, /* Original OSS-Fuzz triggering data */ - /* 1*/ { BARCODE_PDF417COMP, + /* 1*/ { BARCODE_PDF417, DATA_MODE, + "\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075" + "\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\073\060\025\060\075\060\204\060\103\204\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060" + "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" + "\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\204\060\204\060\126\060\075\060\204\060\177\060\103\204\060\204\060\377\060\262\060" + "\000\075\060\226\060\100\060\073\060\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\041\060\110\060\160\060\075\060\075\204\060" + "\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\073\060\074\060\075" + "\060\204\060\103\204\060\075\060\204\060\204\060\075\204\060\120\214\060\204\060\074\204\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041" + "\060\000\060\000\060\200\060\204\060\214\060\204\060\075\060\141\060\000\060\204\060\120\214\060\204\060\075\060\204\060\075\204\060\204\060\204\075\060\075\060" + "\204\060\075\060\075\204\060\075\060\103\204\060\204\060\372\120\060\124\060\000\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060" + "\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\075\060\103\204\060\214\060\204\060\075\060" + "\200\060\204\075\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060\075\204\060\204\060\204\075\060\075\060\204\060\134\060\075\204\060\040\060\103\204" + "\060\372\120\060\124\060\004\060\103\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\000\060\113\060\377\060\235\060\075\060" + "\204\060\103\204\060\204\060\075\060\204\060\204\060\075\204\060\075\214\060\204\060\074\204\060\204\060\075\204\060\075\060\103\211\060\214\060\204\060\075\060" + "\041\060\204\060\204\060\120\060\075\060\204\060\003\060\103\204\060\204\060\377\060\350\060\223\060\000\075\060\226\060\103\204\060\204\060\204\120\060\075\060" + "\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120" + "\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\155\060\000\075\060\226\060\100\204\060\204\060" + "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" + "\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\204\060\204\060\126\060\075\060\204\060\177\060\103\204\060\204\060\377\060\262\060" + "\000\075\060\226\060\100\204\060\204\060\204\075\060\073\060\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\075\060\110\060\160" + "\060\075\060\075\204\060\075\060\103\204\060\204\060\372\120\060\124\060\000\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075" + "\060\073\060\074\060\075\060\204\060\103\204\060\075\060\204\060\204\060\075\204\060\075\214\060\204\060\074\204\060\204\060\075\204\060\075\060\103\214\060\214" + "\060\204\060\075\060\041\060\000\060\000\060\200\060\204\060\214\060\204\060\075\060\141\060\000\060\204\060\075\214\060\204\060\075\060\204\060\075\204\060\204" + "\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103" + "\204\060\214\060\204\060\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\004\060\103\204\060" + "\204\060\003\060\204\075\060\120\214\060\204\060\004\060\103\204\060\204\060\003\060\211\074\060\120\060\124\060\351\060\120\060\075\060\351\060\072\375\060\204\060", + 1001, -1, 0 }, /* Original OSS-Fuzz triggering data */ + /* 2*/ { BARCODE_PDF417COMP, DATA_MODE | FAST_MODE, "\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075" "\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\073\060\025\060\075\060\204\060\103\204\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060" "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" @@ -2609,7 +4869,34 @@ static void test_fuzz(const testCtx *const p_ctx) { "\204\060\214\060\204\060\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\004\060\103\204\060" "\204\060\003\060\204\075\060\120\214\060\204\060\004\060\103\204\060\204\060\003\060\211\074\060\120\060\124\060\351\060\120\060\075\060\351\060\072\375\060\204\060", 1001, -1, ZINT_ERROR_TOO_LONG }, - /* 2*/ { BARCODE_MICROPDF417, + /* 3*/ { BARCODE_PDF417COMP, DATA_MODE, + "\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075" + "\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\073\060\025\060\075\060\204\060\103\204\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060" + "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" + "\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\204\060\204\060\126\060\075\060\204\060\177\060\103\204\060\204\060\377\060\262\060" + "\000\075\060\226\060\100\060\073\060\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\041\060\110\060\160\060\075\060\075\204\060" + "\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\073\060\074\060\075" + "\060\204\060\103\204\060\075\060\204\060\204\060\075\204\060\120\214\060\204\060\074\204\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041" + "\060\000\060\000\060\200\060\204\060\214\060\204\060\075\060\141\060\000\060\204\060\120\214\060\204\060\075\060\204\060\075\204\060\204\060\204\075\060\075\060" + "\204\060\075\060\075\204\060\075\060\103\204\060\204\060\372\120\060\124\060\000\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060" + "\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\075\060\103\204\060\214\060\204\060\075\060" + "\200\060\204\075\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060\075\204\060\204\060\204\075\060\075\060\204\060\134\060\075\204\060\040\060\103\204" + "\060\372\120\060\124\060\004\060\103\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\000\060\113\060\377\060\235\060\075\060" + "\204\060\103\204\060\204\060\075\060\204\060\204\060\075\204\060\075\214\060\204\060\074\204\060\204\060\075\204\060\075\060\103\211\060\214\060\204\060\075\060" + "\041\060\204\060\204\060\120\060\075\060\204\060\003\060\103\204\060\204\060\377\060\350\060\223\060\000\075\060\226\060\103\204\060\204\060\204\120\060\075\060" + "\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120" + "\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\155\060\000\075\060\226\060\100\204\060\204\060" + "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" + "\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\204\060\204\060\126\060\075\060\204\060\177\060\103\204\060\204\060\377\060\262\060" + "\000\075\060\226\060\100\204\060\204\060\204\075\060\073\060\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\075\060\110\060\160" + "\060\075\060\075\204\060\075\060\103\204\060\204\060\372\120\060\124\060\000\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075" + "\060\073\060\074\060\075\060\204\060\103\204\060\075\060\204\060\204\060\075\204\060\075\214\060\204\060\074\204\060\204\060\075\204\060\075\060\103\214\060\214" + "\060\204\060\075\060\041\060\000\060\000\060\200\060\204\060\214\060\204\060\075\060\141\060\000\060\204\060\075\214\060\204\060\075\060\204\060\075\204\060\204" + "\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103" + "\204\060\214\060\204\060\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\004\060\103\204\060" + "\204\060\003\060\204\075\060\120\214\060\204\060\004\060\103\204\060\204\060\003\060\211\074\060\120\060\124\060\351\060\120\060\075\060\351\060\072\375\060\204\060", + 1001, -1, 0 }, + /* 4*/ { BARCODE_MICROPDF417, DATA_MODE | FAST_MODE, "\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075" "\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\073\060\025\060\075\060\204\060\103\204\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060" "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" @@ -2636,7 +4923,34 @@ static void test_fuzz(const testCtx *const p_ctx) { "\204\060\214\060\204\060\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\004\060\103\204\060" "\204\060\003\060\204\075\060\120\214\060\204\060\004\060\103\204\060\204\060\003\060\211\074\060\120\060\124\060\351\060\120\060\075\060\351\060\072\375\060\204\060", 1001, -1, ZINT_ERROR_TOO_LONG }, - /* 3*/ { BARCODE_PDF417, + /* 5*/ { BARCODE_MICROPDF417, DATA_MODE, + "\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075" + "\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\073\060\025\060\075\060\204\060\103\204\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060" + "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" + "\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\204\060\204\060\126\060\075\060\204\060\177\060\103\204\060\204\060\377\060\262\060" + "\000\075\060\226\060\100\060\073\060\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\041\060\110\060\160\060\075\060\075\204\060" + "\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\073\060\074\060\075" + "\060\204\060\103\204\060\075\060\204\060\204\060\075\204\060\120\214\060\204\060\074\204\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041" + "\060\000\060\000\060\200\060\204\060\214\060\204\060\075\060\141\060\000\060\204\060\120\214\060\204\060\075\060\204\060\075\204\060\204\060\204\075\060\075\060" + "\204\060\075\060\075\204\060\075\060\103\204\060\204\060\372\120\060\124\060\000\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060" + "\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\075\060\103\204\060\214\060\204\060\075\060" + "\200\060\204\075\060\075\060\204\060\000\075\060\226\060\100\204\060\204\060\075\204\060\204\060\204\075\060\075\060\204\060\134\060\075\204\060\040\060\103\204" + "\060\372\120\060\124\060\004\060\103\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\000\060\113\060\377\060\235\060\075\060" + "\204\060\103\204\060\204\060\075\060\204\060\204\060\075\204\060\075\214\060\204\060\074\204\060\204\060\075\204\060\075\060\103\211\060\214\060\204\060\075\060" + "\041\060\204\060\204\060\120\060\075\060\204\060\003\060\103\204\060\204\060\377\060\350\060\223\060\000\075\060\226\060\103\204\060\204\060\204\120\060\075\060" + "\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120" + "\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\031\060\155\060\000\075\060\226\060\100\204\060\204\060" + "\204\060\075\204\060\120\214\060\204\060\074\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\000\060\204\060\120\214\060\204\060\074\204" + "\060\377\060\075\204\060\075\060\103\204\060\214\060\204\060\075\060\041\060\204\060\204\060\126\060\075\060\204\060\177\060\103\204\060\204\060\377\060\262\060" + "\000\075\060\226\060\100\204\060\204\060\204\075\060\073\060\204\060\000\075\060\226\060\100\060\103\204\060\204\060\075\204\060\204\060\204\075\060\110\060\160" + "\060\075\060\075\204\060\075\060\103\204\060\204\060\372\120\060\124\060\000\060\204\060\074\204\060\204\060\075\204\060\075\060\103\204\060\214\060\204\060\075" + "\060\073\060\074\060\075\060\204\060\103\204\060\075\060\204\060\204\060\075\204\060\075\214\060\204\060\074\204\060\204\060\075\204\060\075\060\103\214\060\214" + "\060\204\060\075\060\041\060\000\060\000\060\200\060\204\060\214\060\204\060\075\060\141\060\000\060\204\060\075\214\060\204\060\075\060\204\060\075\204\060\204" + "\060\204\041\060\075\060\204\060\075\060\075\204\060\075\060\103\204\060\204\060\003\120\060\075\060\004\060\204\060\074\204\060\204\060\075\204\060\075\060\103" + "\204\060\214\060\204\060\075\060\073\060\075\060\204\060\103\204\060\075\060\204\060\204\060\122\060\000\060\075\060\000\076\060\100\000\060\004\060\103\204\060" + "\204\060\003\060\204\075\060\120\214\060\204\060\004\060\103\204\060\204\060\003\060\211\074\060\120\060\124\060\351\060\120\060\075\060\351\060\072\375\060\204\060", + 1001, -1, ZINT_ERROR_TOO_LONG }, + /* 6*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" @@ -2657,7 +4971,28 @@ static void test_fuzz(const testCtx *const p_ctx) { "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "1234567890", 2710, 0, 0 }, /* Max numerics with ECC 0 */ - /* 4*/ { BARCODE_PDF417, + /* 7*/ { BARCODE_PDF417, DATA_MODE, + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "1234567890", + 2710, 0, 0 }, /* Max numerics with ECC 0 */ + /* 8*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" @@ -2678,7 +5013,28 @@ static void test_fuzz(const testCtx *const p_ctx) { "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "12345678901", 2711, 0, ZINT_ERROR_TOO_LONG }, - /* 5*/ { BARCODE_PDF417, + /* 9*/ { BARCODE_PDF417, DATA_MODE, + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "12345678901", + 2711, 0, ZINT_ERROR_TOO_LONG }, + /*10*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" @@ -2697,7 +5053,26 @@ static void test_fuzz(const testCtx *const p_ctx) { "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", 2528, -1, 0 }, /* Max numerics with ECC 5 */ - /* 6*/ { BARCODE_PDF417, + /*11*/ { BARCODE_PDF417, DATA_MODE, + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", + 2528, -1, 0 }, /* Max numerics with ECC 5 */ + /*12*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -2714,7 +5089,24 @@ static void test_fuzz(const testCtx *const p_ctx) { "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCD", 1850, 0, 0 }, /* Max text with ECC 0 */ - /* 7*/ { BARCODE_PDF417, + /*13*/ { BARCODE_PDF417, DATA_MODE, + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCD", + 1850, 0, 0 }, /* Max text with ECC 0 */ + /*14*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -2731,7 +5123,24 @@ static void test_fuzz(const testCtx *const p_ctx) { "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", 1853, 0, ZINT_ERROR_TOO_LONG }, - /* 8*/ { BARCODE_PDF417, + /*15*/ { BARCODE_PDF417, DATA_MODE, + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", + 1853, 0, ZINT_ERROR_TOO_LONG }, + /*16*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" @@ -2761,7 +5170,37 @@ static void test_fuzz(const testCtx *const p_ctx) { "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240", 1108, 0, 0 }, /* Max bytes with ECC 0 */ - /* 9*/ { BARCODE_PDF417, + /*17*/ { BARCODE_PDF417, DATA_MODE, + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240", + 1108, 0, 0 }, /* Max bytes with ECC 0 */ + /*18*/ { BARCODE_PDF417, DATA_MODE | FAST_MODE, "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" @@ -2791,21 +5230,69 @@ static void test_fuzz(const testCtx *const p_ctx) { "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240", 1111, 0, ZINT_ERROR_TOO_LONG }, - /*10*/ { BARCODE_MICROPDF417, + /*19*/ { BARCODE_PDF417, DATA_MODE, + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" + "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240", + 1111, 0, ZINT_ERROR_TOO_LONG }, + /*20*/ { BARCODE_MICROPDF417, DATA_MODE | FAST_MODE, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456", 366, -1, 0 }, /* Max numerics */ - /*11*/ { BARCODE_MICROPDF417, + /*21*/ { BARCODE_MICROPDF417, DATA_MODE, + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456", + 366, -1, 0 }, /* Max numerics */ + /*22*/ { BARCODE_MICROPDF417, DATA_MODE | FAST_MODE, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "1234567890123456789012345678901234567890123456789012345678901234567", 367, -1, ZINT_ERROR_TOO_LONG }, - /*12*/ { BARCODE_MICROPDF417, + /*23*/ { BARCODE_MICROPDF417, DATA_MODE, + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" + "1234567890123456789012345678901234567890123456789012345678901234567", + 367, -1, ZINT_ERROR_TOO_LONG }, + /*24*/ { BARCODE_MICROPDF417, DATA_MODE | FAST_MODE, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP", 250, -1, 0 }, /* Max text */ - /*13*/ { BARCODE_MICROPDF417, + /*25*/ { BARCODE_MICROPDF417, DATA_MODE, + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP", + 250, -1, 0 }, /* Max text */ + /*26*/ { BARCODE_MICROPDF417, DATA_MODE | FAST_MODE, + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ", + 251, -1, ZINT_ERROR_TOO_LONG }, + /*27*/ { BARCODE_MICROPDF417, DATA_MODE, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ", 251, -1, ZINT_ERROR_TOO_LONG }, @@ -2824,6 +5311,9 @@ static void test_fuzz(const testCtx *const p_ctx) { assert_nonnull(symbol, "Symbol not created\n"); symbol->symbology = data[i].symbology; + if (data[i].input_mode != -1) { + symbol->input_mode = data[i].input_mode; + } if (data[i].option_1 != -1) { symbol->option_1 = data[i].option_1; } @@ -2843,7 +5333,7 @@ static void test_fuzz(const testCtx *const p_ctx) { testFinish(); } -INTERNAL void pdf_numbprocess_test(int *chainemc, int *mclength, const unsigned char chaine[], const int start, +INTERNAL void pdf_numbprocess_test(int *chainemc, int *p_mclength, const unsigned char chaine[], const int start, const int length); #include "../large.h" @@ -2985,8 +5475,8 @@ static void test_numbprocess(const testCtx *const p_ctx) { if (testContinue(p_ctx, i)) continue; - mclength = 0; length = (int) ustrlen(data[i].chaine); + mclength = 0; pdf_numbprocess_test(chainemc, &mclength, data[i].chaine, 0, length); assert_nonzero(mclength < ARRAY_SIZE(chainemc), "i:%d mclength %d >= ARRAY_SIZE(chainemc) %d\n", i, mclength, ARRAY_SIZE(chainemc)); #if 0 @@ -3064,6 +5554,11 @@ static void test_perf(const testCtx *const p_ctx) { "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240" "\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240", 0, 51, 358, "960 chars, byte" }, + /* 3*/ { BARCODE_PDF417, -1, -1, -1, + "BP2D+1.00+0005+FLE ESC BV+1.00+3.60*BX2D+1.00+0001+Casual shoes & apparel+90044030118100801265*D_2D+1.02+31351440315981+C910332+02032018+KXXXX CXXXX+UNIT 4 HXXX" + "XXXXX BUSINESS PARK++ST ALBANS+ST ALBANS++AL2 3TA+0001+000001+001+00000000+00++N+N+N+0000++++++N+++N*DS2D+1.01+0001+0001+90044030118100801265+++++07852389322+" + "+E*F_2D+1.00+0005*", + 0, 26, 222, "338 chars, text/numeric/byte" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -3082,6 +5577,68 @@ static void test_perf(const testCtx *const p_ctx) { printf("Iterations %d\n", TEST_PERF_ITERATIONS); + printf("FAST_MODE\n"); + for (i = 0; i < data_size; i++) { + int j; + + if (testContinue(p_ctx, i)) continue; + + diff_create = diff_encode = diff_buffer = diff_buf_inter = diff_print = 0; + + for (j = 0; j < TEST_PERF_ITERATIONS; j++) { + int input_mode = data[i].input_mode == -1 ? FAST_MODE : (data[i].input_mode | FAST_MODE); + start = clock(); + symbol = ZBarcode_Create(); + diff_create += clock() - start; + assert_nonnull(symbol, "Symbol not created\n"); + + length = testUtilSetSymbol(symbol, data[i].symbology, input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); + + start = clock(); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); + diff_encode += clock() - start; + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); + + assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); + assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); + + start = clock(); + ret = ZBarcode_Buffer(symbol, 0 /*rotate_angle*/); + diff_buffer += clock() - start; + assert_zero(ret, "i:%d ZBarcode_Buffer ret %d != 0 (%s)\n", i, ret, symbol->errtxt); + + symbol->output_options |= OUT_BUFFER_INTERMEDIATE; + start = clock(); + ret = ZBarcode_Buffer(symbol, 0 /*rotate_angle*/); + diff_buf_inter += clock() - start; + assert_zero(ret, "i:%d ZBarcode_Buffer OUT_BUFFER_INTERMEDIATE ret %d != 0 (%s)\n", i, ret, symbol->errtxt); + symbol->output_options &= ~OUT_BUFFER_INTERMEDIATE; /* Undo */ + + start = clock(); + ret = ZBarcode_Print(symbol, 0 /*rotate_angle*/); + diff_print += clock() - start; + assert_zero(ret, "i:%d ZBarcode_Print ret %d != 0 (%s)\n", i, ret, symbol->errtxt); + assert_zero(remove(symbol->outfile), "i:%d remove(%s) != 0\n", i, symbol->outfile); + + ZBarcode_Delete(symbol); + } + + printf("%*s: encode % 8gms, buffer % 8gms, buf_inter % 8gms, print % 8gms, create % 8gms\n", comment_max, data[i].comment, + TEST_PERF_TIME(diff_encode), TEST_PERF_TIME(diff_buffer), TEST_PERF_TIME(diff_buf_inter), TEST_PERF_TIME(diff_print), TEST_PERF_TIME(diff_create)); + + total_create += diff_create; + total_encode += diff_encode; + total_buffer += diff_buffer; + total_buf_inter += diff_buf_inter; + total_print += diff_print; + } + if (p_ctx->index == -1) { + printf("%*s: encode % 8gms, buffer % 8gms, buf_inter % 8gms, print % 8gms, create % 8gms\n", comment_max, "totals", + TEST_PERF_TIME(total_encode), TEST_PERF_TIME(total_buffer), TEST_PERF_TIME(total_buf_inter), TEST_PERF_TIME(total_print), TEST_PERF_TIME(total_create)); + } + + printf("OPTIMIZED\n"); + total_create = 0, total_encode = 0, total_buffer = 0, total_buf_inter = 0, total_print = 0; for (i = 0; i < data_size; i++) { int j; diff --git a/backend/tests/test_qr.c b/backend/tests/test_qr.c index 733665cb..7384ac29 100644 --- a/backend/tests/test_qr.c +++ b/backend/tests/test_qr.c @@ -4417,7 +4417,7 @@ static void test_qr_perf(const testCtx *const p_ctx) { struct item data[] = { /* 0*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点", - 0, 37, 37, "107 chars, Mixed modes" }, + ZINT_WARN_NONCOMPLIANT, 37, 37, "107 chars, Mixed modes" }, /* 1*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点" @@ -4428,7 +4428,7 @@ static void test_qr_perf(const testCtx *const p_ctx) { "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点" "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点", - 0, 105, 105, "963 chars, Mixed modes" }, + ZINT_WARN_NONCOMPLIANT, 105, 105, "963 chars, Mixed modes" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index d71cf77a..04b8ad0e 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -3342,7 +3342,7 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym { "DataBarExpanded", BARCODE_DBAR_EXPSTK, 81, }, { "", BARCODE_PLANET, 82, }, { "", -1, 83, }, - { "", BARCODE_MICROPDF417, 84, }, + { "MicroPDF417", BARCODE_MICROPDF417, 84, }, { "", BARCODE_USPS_IMAIL, 85, }, { "", BARCODE_PLESSEY, 86, }, { "", BARCODE_TELEPEN_NUM, 87, }, @@ -3468,9 +3468,9 @@ int testUtilCanZXingCPP(int index, const struct zint_symbol *symbol, const char int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, const int length, char *bits, char *buffer, const int buffer_size, int *p_cmp_len) { - static const char cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -bits '%s'"; - static const char hint_cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -hint '%s' -bits '%s'"; - static const char cs_cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -bits '%s' -charset %s"; + static const char cmd_fmt[] = "zxingcppdecoder -textonly -format %s -width %d -bits '%s'"; + static const char hint_cmd_fmt[] = "zxingcppdecoder -textonly -format %s -hint '%s' -width %d -bits '%s'"; + static const char cs_cmd_fmt[] = "zxingcppdecoder -textonly -format %s -charset %s -width %d -bits '%s'"; const int bits_len = (int) strlen(bits); const int width = symbol->width; @@ -3519,11 +3519,11 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, } else { charset = "ISO8859_1"; } - sprintf(cmd, cs_cmd_fmt, width, zxingcpp_barcode, bits, charset); + sprintf(cmd, cs_cmd_fmt, zxingcpp_barcode, charset, width, bits); } else if (hint) { - sprintf(cmd, hint_cmd_fmt, width, zxingcpp_barcode, hint, bits); + sprintf(cmd, hint_cmd_fmt, zxingcpp_barcode, hint, width, bits); } else { - sprintf(cmd, cmd_fmt, width, zxingcpp_barcode, bits); + sprintf(cmd, cmd_fmt, zxingcpp_barcode, width, bits); } if (symbol->debug & ZINT_DEBUG_TEST_PRINT) { diff --git a/backend/tests/tools/bwipp_dump.ps.tar.xz b/backend/tests/tools/bwipp_dump.ps.tar.xz index fb5ad41630a940a0ac13b1bda16cc7b806f65125..e016e60fb616ccfd1a8a135e0fc0b1c1a8649bff 100644 GIT binary patch literal 129316 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 g3^Lfm= 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%0A+EXWY1SV;E___uyHXSzRzuJ{xtyyK?rR;p`Z_`< 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 */ #define DM_SQUARE 100 /* Only consider square versions on automatic symbol size selection */ diff --git a/backend_qt/backend_qt.pro b/backend_qt/backend_qt.pro index 0372fa81..047f6214 100644 --- a/backend_qt/backend_qt.pro +++ b/backend_qt/backend_qt.pro @@ -56,6 +56,7 @@ HEADERS += ../backend/aztec.h \ ../backend/pcx.h \ ../backend/pdf417.h \ ../backend/pdf417_tabs.h \ + ../backend/pdf417_trace.h \ ../backend/qr.h \ ../backend/reedsol.h \ ../backend/reedsol_logs.h \ diff --git a/backend_qt/backend_vc8.pro b/backend_qt/backend_vc8.pro index ece8cb8a..8950f12b 100644 --- a/backend_qt/backend_vc8.pro +++ b/backend_qt/backend_vc8.pro @@ -43,6 +43,7 @@ HEADERS += ../backend/aztec.h \ ../backend/pcx.h \ ../backend/pdf417.h \ ../backend/pdf417_tabs.h \ + ../backend/pdf417_trace.h \ ../backend/qr.h \ ../backend/reedsol.h \ ../backend/rss.h \ diff --git a/docs/manual.pmd b/docs/manual.pmd index 07237895..9ff623eb 100644 --- a/docs/manual.pmd +++ b/docs/manual.pmd @@ -1,6 +1,6 @@ % Zint Barcode Generator and Zint Barcode Studio User Manual % Version 2.11.1.9 -% October 2022 +% November 2022 # 1. Introduction @@ -2031,7 +2031,8 @@ Value Effect overall height. `FAST_MODE` Use faster if less optimal encodation for symbologies that - support it (currently `DATAMATRIX` only). + support it (currently `DATAMATRIX`, `MICROPDF417` and + `PDF417` only). -------------------------------------------------------------------------------- Table: API `input_mode` Values {#tbl:api_input_mode tag="$ $"} @@ -2917,6 +2918,9 @@ This symbology uses Latin-1 character encoding by default but also supports the ECI encoding mechanism. A separate symbology ID (`BARCODE_HIBC_PDF`) can be used to encode Health Industry Barcode (HIBC) data. +For a faster but less optimal encoding, the `--fast` option (API `input_mode |= +FAST_MODE`) may be used. + PDF417 supports Structured Append of up to 99,999 symbols and an optional numeric ID of up to 30 digits, which can be set by using the `--structapp` option (see [4.16 Structured Append]) (API `structapp`). The ID consists of up @@ -2947,7 +2951,7 @@ can be determined using the `--cols` switch (API `option_2`) as with PDF417. This symbology uses Latin-1 character encoding by default but also supports the ECI encoding mechanism. A separate symbology ID (`BARCODE_HIBC_MICPDF`) can be used to encode Health Industry Barcode (HIBC) data. MicroPDF417 supports -Structured Append the same as PDF417, for which see details. +`FAST_MODE` and Structured Append the same as PDF417, for which see details. ### 6.2.7 GS1 DataBar Stacked (ISO 24724) diff --git a/docs/manual.txt b/docs/manual.txt index 9c0f4a50..7aa671b5 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -1,6 +1,6 @@ Zint Barcode Generator and Zint Barcode Studio User Manual Version 2.11.1.9 -October 2022 +November 2022 ******************************************************************************* * For reference the following is a text-only version of the Zint manual, * @@ -2051,7 +2051,8 @@ property. Valid values are shown in the table below. overall height. FAST_MODE Use faster if less optimal encodation for symbologies that - support it (currently DATAMATRIX only). + support it (currently DATAMATRIX, MICROPDF417 and PDF417 + only). ------------------------------------------------------------------------------- : Table  : API input_mode Values @@ -2870,6 +2871,9 @@ This symbology uses Latin-1 character encoding by default but also supports the ECI encoding mechanism. A separate symbology ID (BARCODE_HIBC_PDF) can be used to encode Health Industry Barcode (HIBC) data. +For a faster but less optimal encoding, the --fast option (API +input_mode |= FAST_MODE) may be used. + PDF417 supports Structured Append of up to 99,999 symbols and an optional numeric ID of up to 30 digits, which can be set by using the --structapp option (see 4.16 Structured Append) (API structapp). The ID consists of up to 10 @@ -2900,7 +2904,7 @@ can be determined using the --cols switch (API option_2) as with PDF417. This symbology uses Latin-1 character encoding by default but also supports the ECI encoding mechanism. A separate symbology ID (BARCODE_HIBC_MICPDF) can be used to encode Health Industry Barcode (HIBC) data. MicroPDF417 supports -Structured Append the same as PDF417, for which see details. +FAST_MODE and Structured Append the same as PDF417, for which see details. 6.2.7 GS1 DataBar Stacked (ISO 24724) @@ -4121,7 +4125,7 @@ defined. Annex B. Man Page ZINT(1) -% ZINT(1) Version 2.11.1.9 % % October 2022 +% ZINT(1) Version 2.11.1.9 % % November 2022 NAME @@ -4284,7 +4288,8 @@ OPTIONS --fast - Use faster if less optimal encodation (currently affects Data Matrix only). + Use faster if less optimal encodation (currently affects Data Matrix, + MicroPDF417 & PDF417 only). --fg=COLOUR diff --git a/docs/zint.1 b/docs/zint.1 index 8295fa0a..a305473c 100644 --- a/docs/zint.1 +++ b/docs/zint.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "ZINT" "1" "October 2022" "Version 2.11.1.9" "" +.TH "ZINT" "1" "November 2022" "Version 2.11.1.9" "" .hy .SH NAME .PP @@ -193,8 +193,8 @@ The escape sequences are: .RE .TP \f[V]--fast\f[R] -Use faster if less optimal encodation (currently affects Data Matrix -only). +Use faster if less optimal encodation (currently affects Data Matrix, +MicroPDF417 & PDF417 only). .TP \f[V]--fg=COLOUR\f[R] Specify a foreground (ink) colour where \f[I]COLOUR\f[R] is in hex diff --git a/docs/zint.1.pmd b/docs/zint.1.pmd index da69cefc..f933ef60 100644 --- a/docs/zint.1.pmd +++ b/docs/zint.1.pmd @@ -1,6 +1,6 @@ % ZINT(1) Version 2.11.1.9 % -% October 2022 +% November 2022 # NAME @@ -144,7 +144,7 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S `--fast` -: Use faster if less optimal encodation (currently affects Data Matrix only). +: Use faster if less optimal encodation (currently affects Data Matrix, MicroPDF417 & PDF417 only). `--fg=COLOUR` diff --git a/frontend_qt/grpMicroPDF.ui b/frontend_qt/grpMicroPDF.ui index 64c7bc9b..b58d69e8 100644 --- a/frontend_qt/grpMicroPDF.ui +++ b/frontend_qt/grpMicroPDF.ui @@ -231,6 +231,20 @@ the data with a slash "/" + + + + &Fast encoding + + + Use a faster but less optimal algorithm +for encoding the data + + + false + + + diff --git a/frontend_qt/grpPDF417.ui b/frontend_qt/grpPDF417.ui index c0478bfe..86364494 100644 --- a/frontend_qt/grpPDF417.ui +++ b/frontend_qt/grpPDF417.ui @@ -922,6 +922,20 @@ right row indicators and shortens the stop pattern + + + + &Fast encoding + + + Use a faster but less optimal algorithm +for encoding the data + + + false + + + diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index 04ffcf41..71f57db0 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -1486,6 +1486,7 @@ void MainWindow::change_options() connect(get_widget(QSL("radPDFTruncated")), SIGNAL(toggled( bool )), SLOT(update_preview())); connect(get_widget(QSL("radPDFStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); connect(get_widget(QSL("radPDFHIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkPDFFast")), SIGNAL(toggled( bool )), SLOT(update_preview())); connect(get_widget(QSL("spnPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(get_widget(QSL("spnPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); connect(get_widget(QSL("spnPDFStructAppIndex")), SIGNAL(valueChanged( int )), SLOT(update_preview())); @@ -1510,6 +1511,7 @@ void MainWindow::change_options() connect(m_btnHeightPerRowDisable, SIGNAL(clicked( bool )), SLOT(height_per_row_disable())); connect(m_btnHeightPerRowDefault, SIGNAL(clicked( bool )), SLOT(height_per_row_default())); connect(get_widget(QSL("radMPDFStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkMPDFFast")), SIGNAL(toggled( bool )), SLOT(update_preview())); connect(get_widget(QSL("spnMPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(get_widget(QSL("spnMPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); connect(get_widget(QSL("spnMPDFStructAppIndex")), SIGNAL(valueChanged( int )), SLOT(update_preview())); @@ -2437,6 +2439,10 @@ void MainWindow::update_preview() } m_bc.bc.setOption1(get_cmb_index(QSL("cmbPDFECC")) - 1); + if (get_chk_val(QSL("chkPDFFast"))) { + m_bc.bc.setInputMode(FAST_MODE | m_bc.bc.inputMode()); + } + if ((item_val = get_spn_val(QSL("spnPDFStructAppCount"))) > 1) { m_bc.bc.setStructApp(item_val, get_spn_val(QSL("spnPDFStructAppIndex")), get_txt_val(QSL("txtPDFStructAppID"))); @@ -2451,6 +2457,10 @@ void MainWindow::update_preview() m_bc.bc.setOption2(get_cmb_index(QSL("cmbMPDFCols"))); + if (get_chk_val(QSL("chkMPDFFast"))) { + m_bc.bc.setInputMode(FAST_MODE | m_bc.bc.inputMode()); + } + if ((item_val = get_spn_val(QSL("spnMPDFStructAppCount"))) > 1) { m_bc.bc.setStructApp(item_val, get_spn_val(QSL("spnMPDFStructAppIndex")), get_txt_val(QSL("txtMPDFStructAppID"))); @@ -3677,6 +3687,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) settings.setValue(QSL("studio/bc/pdf417/ecc"), get_cmb_index(QSL("cmbPDFECC"))); settings.setValue(QSL("studio/bc/pdf417/encoding_mode"), get_rad_grp_index( QStringList() << QSL("radPDFStand") << QSL("radPDFTruncated") << QSL("radPDFHIBC"))); + settings.setValue(QSL("studio/bc/pdf417/chk_fast"), get_chk_val(QSL("chkPDFFast"))); settings.setValue(QSL("studio/bc/pdf417/structapp_count"), get_spn_val(QSL("spnPDFStructAppCount"))); settings.setValue(QSL("studio/bc/pdf417/structapp_index"), get_spn_val(QSL("spnPDFStructAppIndex"))); settings.setValue(QSL("studio/bc/pdf417/structapp_id"), get_txt_val(QSL("txtPDFStructAppID"))); @@ -3688,6 +3699,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) settings.setValue(QSL("studio/bc/micropdf417/height_per_row"), get_dspn_val(QSL("spnMPDFHeightPerRow"))); settings.setValue(QSL("studio/bc/micropdf417/encoding_mode"), get_rad_grp_index( QStringList() << QSL("radMPDFStand") << QSL("radMPDFHIBC"))); + settings.setValue(QSL("studio/bc/micropdf417/chk_fast"), get_chk_val(QSL("chkMPDFFast"))); settings.setValue(QSL("studio/bc/micropdf417/structapp_count"), get_spn_val(QSL("spnMPDFStructAppCount"))); settings.setValue(QSL("studio/bc/micropdf417/structapp_index"), @@ -4059,6 +4071,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) set_cmb_from_setting(settings, QSL("studio/bc/pdf417/ecc"), QSL("cmbPDFECC")); set_rad_from_setting(settings, QSL("studio/bc/pdf417/encoding_mode"), QStringList() << QSL("radPDFStand") << QSL("radPDFTruncated") << QSL("radPDFHIBC")); + set_chk_from_setting(settings, QSL("studio/bc/pdf417/chk_fast"), QSL("chkPDFFast")); set_spn_from_setting(settings, QSL("studio/bc/pdf417/structapp_count"), QSL("spnPDFStructAppCount"), 1); set_spn_from_setting(settings, QSL("studio/bc/pdf417/structapp_index"), QSL("spnPDFStructAppIndex"), 0); set_txt_from_setting(settings, QSL("studio/bc/pdf417/structapp_id"), QSL("txtPDFStructAppID"), QSL("")); @@ -4071,6 +4084,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) 0.0f); set_rad_from_setting(settings, QSL("studio/bc/micropdf417/encoding_mode"), QStringList() << QSL("radMPDFStand") << QSL("radMPDFHIBC")); + set_chk_from_setting(settings, QSL("studio/bc/micropdf417/chk_fast"), QSL("chkMPDFFast")); set_spn_from_setting(settings, QSL("studio/bc/micropdf417/structapp_count"), QSL("spnMPDFStructAppCount"), 1); set_spn_from_setting(settings, QSL("studio/bc/micropdf417/structapp_index"), diff --git a/win32/libzint.vcxproj b/win32/libzint.vcxproj index 3bfd8609..07bed1be 100644 --- a/win32/libzint.vcxproj +++ b/win32/libzint.vcxproj @@ -201,6 +201,7 @@ + diff --git a/win32/vs2008/libzint.vcproj b/win32/vs2008/libzint.vcproj index 122ef10d..2104fa71 100644 --- a/win32/vs2008/libzint.vcproj +++ b/win32/vs2008/libzint.vcproj @@ -589,6 +589,10 @@ RelativePath="..\..\backend\pdf417_tabs.h" > + + diff --git a/win32/vs2015/libzint.vcxproj b/win32/vs2015/libzint.vcxproj index e5b8b868..1caf9aa1 100644 --- a/win32/vs2015/libzint.vcxproj +++ b/win32/vs2015/libzint.vcxproj @@ -378,6 +378,7 @@ + diff --git a/win32/vs2015/vsx/libzintMD.vcxproj b/win32/vs2015/vsx/libzintMD.vcxproj index 010c80d2..ad4692d1 100644 --- a/win32/vs2015/vsx/libzintMD.vcxproj +++ b/win32/vs2015/vsx/libzintMD.vcxproj @@ -149,6 +149,7 @@ + diff --git a/win32/vs2019/libzint.vcxproj b/win32/vs2019/libzint.vcxproj index 4c0c8efe..cc0aa80e 100644 --- a/win32/vs2019/libzint.vcxproj +++ b/win32/vs2019/libzint.vcxproj @@ -201,6 +201,7 @@ +