mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
Ultracode: Fix miscalculation of number of codewords when using reader initialisation
This commit is contained in:
parent
e37a82a8f1
commit
5a8bbb28f0
1
README
1
README
@ -289,6 +289,7 @@ Bugs:
|
|||||||
- Code16k selects GS1 mode by default in GUI
|
- Code16k selects GS1 mode by default in GUI
|
||||||
- Ultracode: use white pixels instead background for white modules.
|
- Ultracode: use white pixels instead background for white modules.
|
||||||
- EMF: fix Ultracode colours.
|
- EMF: fix Ultracode colours.
|
||||||
|
- Ultracode: fix count of codewords when using reader init mode
|
||||||
|
|
||||||
CONTACT US
|
CONTACT US
|
||||||
----------
|
----------
|
||||||
|
@ -660,6 +660,7 @@ static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned c
|
|||||||
|
|
||||||
if (symbol->output_options & READER_INIT) {
|
if (symbol->output_options & READER_INIT) {
|
||||||
/* Reader Initialisation mode */
|
/* Reader Initialisation mode */
|
||||||
|
codeword_count = 2;
|
||||||
if (symbol_mode == ASCII_MODE) {
|
if (symbol_mode == ASCII_MODE) {
|
||||||
codewords[0] = 272; // 7-bit ASCII mode
|
codewords[0] = 272; // 7-bit ASCII mode
|
||||||
codewords[1] = 271; // FNC3
|
codewords[1] = 271; // FNC3
|
||||||
@ -667,9 +668,9 @@ static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned c
|
|||||||
codewords[0] = 257; // 8859-1
|
codewords[0] = 257; // 8859-1
|
||||||
codewords[1] = 269; // FNC3
|
codewords[1] = 269; // FNC3
|
||||||
}
|
}
|
||||||
codeword_count = 2;
|
|
||||||
} else {
|
} else {
|
||||||
/* Calculate start character codeword */
|
/* Calculate start character codeword */
|
||||||
|
codeword_count = 1;
|
||||||
if (symbol_mode == ASCII_MODE) {
|
if (symbol_mode == ASCII_MODE) {
|
||||||
if (gs1) {
|
if (gs1) {
|
||||||
codewords[0] = 273;
|
codewords[0] = 273;
|
||||||
@ -688,7 +689,7 @@ static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned c
|
|||||||
// ECI indicates use of character set outside ISO/IEC 8859
|
// ECI indicates use of character set outside ISO/IEC 8859
|
||||||
codewords[0] = 275 + (symbol->eci / 256);
|
codewords[0] = 275 + (symbol->eci / 256);
|
||||||
codewords[1] = symbol->eci % 256;
|
codewords[1] = symbol->eci % 256;
|
||||||
codeword_count++;
|
codeword_count = 2;
|
||||||
} else if (symbol->eci == 899) {
|
} else if (symbol->eci == 899) {
|
||||||
// Non-language byte data
|
// Non-language byte data
|
||||||
codewords[0] = 280;
|
codewords[0] = 280;
|
||||||
@ -699,7 +700,7 @@ static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned c
|
|||||||
codewords[1] = 274; // Encode ECI as 3 codewords
|
codewords[1] = 274; // Encode ECI as 3 codewords
|
||||||
codewords[2] = (symbol->eci / 100) + 128;
|
codewords[2] = (symbol->eci / 100) + 128;
|
||||||
codewords[3] = (symbol->eci % 100) + 128;
|
codewords[3] = (symbol->eci % 100) + 128;
|
||||||
codeword_count += 3;
|
codeword_count = 4;
|
||||||
} else if (symbol->eci >= 10000) {
|
} else if (symbol->eci >= 10000) {
|
||||||
// Encode as 4 codewords
|
// Encode as 4 codewords
|
||||||
codewords[0] = 257; // ISO/IEC 8859-1 used to enter 8-bit mode
|
codewords[0] = 257; // ISO/IEC 8859-1 used to enter 8-bit mode
|
||||||
@ -707,7 +708,7 @@ static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned c
|
|||||||
codewords[2] = (symbol->eci / 10000) + 128;
|
codewords[2] = (symbol->eci / 10000) + 128;
|
||||||
codewords[3] = ((symbol->eci % 10000) / 100) + 128;
|
codewords[3] = ((symbol->eci % 10000) / 100) + 128;
|
||||||
codewords[4] = (symbol->eci % 100) + 128;
|
codewords[4] = (symbol->eci % 100) + 128;
|
||||||
codeword_count += 4;
|
codeword_count = 5;
|
||||||
} else {
|
} else {
|
||||||
codewords[0] = 257; // Default is assumed to be ISO/IEC 8859-1 (ECI 3)
|
codewords[0] = 257; // Default is assumed to be ISO/IEC 8859-1 (ECI 3)
|
||||||
}
|
}
|
||||||
@ -733,8 +734,6 @@ static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
codeword_count++;
|
|
||||||
|
|
||||||
/* Check for 06 Macro Sequence and crop accordingly */
|
/* Check for 06 Macro Sequence and crop accordingly */
|
||||||
if (in_length >= 9
|
if (in_length >= 9
|
||||||
&& source[0] == '[' && source[1] == ')' && source[2] == '>' && source[3] == '\x1e'
|
&& source[0] == '[' && source[1] == ')' && source[2] == '>' && source[3] == '\x1e'
|
||||||
@ -969,6 +968,7 @@ INTERNAL int ultracode(struct zint_symbol *symbol, const unsigned char source[],
|
|||||||
|
|
||||||
locn = 0;
|
locn = 0;
|
||||||
/* Calculate error correction codewords (RSEC) */
|
/* Calculate error correction codewords (RSEC) */
|
||||||
|
|
||||||
ultra_gf283((short) data_cw_count, (short) qcc, data_codewords);
|
ultra_gf283((short) data_cw_count, (short) qcc, data_codewords);
|
||||||
|
|
||||||
/* Rearrange to make final codeword sequence */
|
/* Rearrange to make final codeword sequence */
|
||||||
|
Loading…
Reference in New Issue
Block a user