Bugfix: Insertion of unlatch character in EDIFACT mode will unlatch immediately, not at the end of the 24-bit block

Fixes #60, Ref: ISO para 5.2.8.2.
Bug report thanks to ice4x800@sf
This commit is contained in:
Robin Stuart 2017-05-14 18:46:43 +01:00
parent 4c8de6399f
commit a1327cbd0d

View File

@ -1041,7 +1041,7 @@ static int dm200encode_remainder(unsigned char target[], int target_length, cons
} }
break; break;
case DM_EDIFACT: case DM_EDIFACT:
if (symbols_left <= 2) // Unlatch not required! if (symbols_left <= 2) // Unlatch not required!
{ {
if (process_p == 1) { if (process_p == 1) {
@ -1056,15 +1056,10 @@ static int dm200encode_remainder(unsigned char target[], int target_length, cons
target_length++; target_length++;
} }
} else { } else {
// Append edifact unlatch value (31) and encode as triple // Append edifact unlatch value (31) and empty buffer
if (process_p == 0) { if (process_p == 0) {
target[target_length] = (unsigned char) (31 << 2); target[target_length] = (unsigned char) (31 << 2);
target_length++; target_length++;
target[target_length] = 0;
target_length++;
target[target_length] = 0;
target_length++;
} }
if (process_p == 1) { if (process_p == 1) {
@ -1072,8 +1067,6 @@ static int dm200encode_remainder(unsigned char target[], int target_length, cons
target_length++; target_length++;
target[target_length] = (unsigned char) ((31 & 0x0f) << 4); target[target_length] = (unsigned char) ((31 & 0x0f) << 4);
target_length++; target_length++;
target[target_length] = (unsigned char) 0;
target_length++;
} }
if (process_p == 2) { if (process_p == 2) {
@ -1093,7 +1086,6 @@ static int dm200encode_remainder(unsigned char target[], int target_length, cons
target[target_length] = (unsigned char) (((process_buffer[2] & 0x03) << 6) + 31); target[target_length] = (unsigned char) (((process_buffer[2] & 0x03) << 6) + 31);
target_length++; target_length++;
} }
} }
break; break;
} }
@ -1219,7 +1211,7 @@ int data_matrix_200(struct zint_symbol *symbol, const unsigned char source[], co
// Print Codewords // Print Codewords
#ifdef DEBUG #ifdef DEBUG
{ {
int CWCount; int CWCount;
int posCur; int posCur;
if (skew) if (skew)
CWCount = 1558 + 620; CWCount = 1558 + 620;
@ -1254,7 +1246,7 @@ int data_matrix_200(struct zint_symbol *symbol, const unsigned char source[], co
#ifdef DEBUG #ifdef DEBUG
// Print position matrix as in standard // Print position matrix as in standard
for (y = NR - 1; y >= 0; y--) { for (y = NR - 1; y >= 0; y--) {
for (x = 0; x < NC; x++) { for (x = 0; x < NC; x++) {
int v; int v;
if (x != 0) if (x != 0)
fprintf(stderr, "|"); fprintf(stderr, "|");