Minor tweaks, no change of function

This commit is contained in:
Robin Stuart 2017-08-07 08:37:02 +01:00
parent 1f503f2aca
commit 50ec72527b
8 changed files with 124 additions and 377 deletions

View File

@ -1570,7 +1570,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t lengt
/* Encodes Aztec runes as specified in ISO/IEC 24778:2008 Annex A */ /* Encodes Aztec runes as specified in ISO/IEC 24778:2008 Annex A */
int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) { int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) {
int input_value, error_number, i, p, y, x; int input_value, error_number, i, y, x;
char binary_string[28]; char binary_string[28];
unsigned char data_codewords[3], ecc_codewords[6]; unsigned char data_codewords[3], ecc_codewords[6];
@ -1603,13 +1603,7 @@ int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length)
} }
strcpy(binary_string, ""); strcpy(binary_string, "");
for (p = 0; p < 8; p++) { bin_append(input_value, 8, binary_string);
if (input_value & (0x80 >> p)) {
strcat(binary_string, "1");
} else {
strcat(binary_string, "0");
}
}
data_codewords[0] = 0; data_codewords[0] = 0;
data_codewords[1] = 0; data_codewords[1] = 0;

View File

@ -2,7 +2,7 @@
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -126,7 +126,7 @@ int posn(const char set_string[], const char data) {
return i; return i;
} }
} }
return 0; return -1;
} }
/* Return true (1) if a module is dark/black, otherwise false (0) */ /* Return true (1) if a module is dark/black, otherwise false (0) */

View File

@ -960,8 +960,8 @@ int calc_padding_ccc(int binary_length, int *cc_width, int lin_width, int *ecc)
} }
static int cc_binary_string(struct zint_symbol *symbol, const char source[], char binary_string[], int cc_mode, int *cc_width, int *ecc, int lin_width) { /* Handles all data encodation from section 5 of ISO/IEC 24723 */ static int cc_binary_string(struct zint_symbol *symbol, const char source[], char binary_string[], int cc_mode, int *cc_width, int *ecc, int lin_width) { /* Handles all data encodation from section 5 of ISO/IEC 24723 */
int encoding_method, read_posn, d1, d2, value, alpha_pad; int encoding_method, read_posn, d1, d2, alpha_pad;
int i, j, mask, ai_crop, fnc1_latch; int i, j, ai_crop, fnc1_latch;
long int group_val; long int group_val;
int ai90_mode, latch, remainder, binary_length; int ai90_mode, latch, remainder, binary_length;
char date_str[4]; char date_str[4];
@ -980,7 +980,6 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
alpha_pad = 0; alpha_pad = 0;
ai90_mode = 0; ai90_mode = 0;
*ecc = 0; *ecc = 0;
value = 0;
target_bitsize = 0; target_bitsize = 0;
if ((source[0] == '1') && ((source[1] == '0') || (source[1] == '1') || (source[1] == '7')) && (strlen(source) > 8)) { if ((source[0] == '1') && ((source[1] == '0') || (source[1] == '1') || (source[1] == '7')) && (strlen(source) > 8)) {
@ -1021,15 +1020,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
date_str[1] = source[7]; date_str[1] = source[7];
group_val += atoi(date_str); group_val += atoi(date_str);
mask = 0x8000; bin_append(group_val, 16, binary_string);
for (j = 0; j < 16; j++) {
if ((group_val & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
if (source[1] == '1') { if (source[1] == '1') {
/* Production Date AI 11 */ /* Production Date AI 11 */
@ -1059,7 +1050,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
#endif #endif
char numeric_part[4]; char numeric_part[4];
int alpha, alphanum, numeric, test1, test2, test3, next_ai_posn; int alpha, alphanum, numeric, test1, test2, test3, next_ai_posn;
int numeric_value, table3_letter, mask; int numeric_value, table3_letter;
/* "This encodation method may be used if an element string with an AI /* "This encodation method may be used if an element string with an AI
90 occurs at the start of the data message, and if the data field 90 occurs at the start of the data message, and if the data field
@ -1193,89 +1184,24 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
table3_letter = -1; table3_letter = -1;
if (numeric_value < 31) { if (numeric_value < 31) {
switch (ninety[test1]) { table3_letter = posn("BDHIJKLNPQRSTVWZ", ninety[test1]);
case 'B': table3_letter = 0;
break;
case 'D': table3_letter = 1;
break;
case 'H': table3_letter = 2;
break;
case 'I': table3_letter = 3;
break;
case 'J': table3_letter = 4;
break;
case 'K': table3_letter = 5;
break;
case 'L': table3_letter = 6;
break;
case 'N': table3_letter = 7;
break;
case 'P': table3_letter = 8;
break;
case 'Q': table3_letter = 9;
break;
case 'R': table3_letter = 10;
break;
case 'S': table3_letter = 11;
break;
case 'T': table3_letter = 12;
break;
case 'V': table3_letter = 13;
break;
case 'W': table3_letter = 14;
break;
case 'Z': table3_letter = 15;
break;
}
} }
if (table3_letter != -1) { if (table3_letter != -1) {
/* Encoding can be done according to 5.2.2 c) 2) */ /* Encoding can be done according to 5.2.2 c) 2) */
/* five bit binary string representing value before letter */ /* five bit binary string representing value before letter */
mask = 0x10; bin_append(numeric_value, 5, binary_string);
for (j = 0; j < 5; j++) {
if ((numeric_value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
/* followed by four bit representation of letter from Table 3 */ /* followed by four bit representation of letter from Table 3 */
mask = 0x08; bin_append(table3_letter, 4, binary_string);
for (j = 0; j < 4; j++) {
if ((table3_letter & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} else { } else {
/* Encoding is done according to 5.2.2 c) 3) */ /* Encoding is done according to 5.2.2 c) 3) */
strcat(binary_string, "11111"); bin_append(31, 5, binary_string);
/* ten bit representation of number */ /* ten bit representation of number */
mask = 0x200; bin_append(numeric_value, 10, binary_string);
for (j = 0; j < 10; j++) {
if ((numeric_value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
/* five bit representation of ASCII character */ /* five bit representation of ASCII character */
mask = 0x10; bin_append(ninety[test1] - 65, 5, binary_string);
for (j = 0; j < 5; j++) {
if (((ninety[test1] - 65) & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
read_posn = test1 + 3; read_posn = test1 + 3;
@ -1291,31 +1217,15 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
/* Alpha encodation (section 5.2.3) */ /* Alpha encodation (section 5.2.3) */
do { do {
if ((source[read_posn] >= '0') && (source[read_posn] <= '9')) { if ((source[read_posn] >= '0') && (source[read_posn] <= '9')) {
mask = 0x10; bin_append(source[read_posn] + 4, 5, binary_string);
for (j = 0; j < 5; j++) {
if (((source[read_posn] + 4) & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if ((source[read_posn] >= 'A') && (source[read_posn] <= 'Z')) { if ((source[read_posn] >= 'A') && (source[read_posn] <= 'Z')) {
mask = 0x20; bin_append(source[read_posn] - 65, 6, binary_string);
for (j = 0; j < 6; j++) {
if (((source[read_posn] - 65) & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if (source[read_posn] == '[') { if (source[read_posn] == '[') {
strcat(binary_string, "11111"); bin_append(31, 5, binary_string);
} }
read_posn++; read_posn++;
@ -1327,41 +1237,31 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
/* Alphanumeric mode */ /* Alphanumeric mode */
do { do {
if ((source[read_posn] >= '0') && (source[read_posn] <= '9')) { if ((source[read_posn] >= '0') && (source[read_posn] <= '9')) {
mask = 0x10; bin_append(source[read_posn] - 43, 5, binary_string);
for (j = 0; j < 5; j++) {
if (((source[read_posn] - 43) & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if ((source[read_posn] >= 'A') && (source[read_posn] <= 'Z')) { if ((source[read_posn] >= 'A') && (source[read_posn] <= 'Z')) {
mask = 0x20; bin_append(source[read_posn] - 33, 6, binary_string);
for (j = 0; j < 6; j++) {
if (((source[read_posn] - 33) & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
switch (source[read_posn]) { switch (source[read_posn]) {
case '[': strcat(binary_string, "01111"); case '[':
bin_append(15, 5, binary_string);
break; break;
case '*': strcat(binary_string, "111010"); case '*':
bin_append(58, 6, binary_string);
break; break;
case ',': strcat(binary_string, "111011"); case ',':
bin_append(59, 6, binary_string);
break; break;
case '-': strcat(binary_string, "111100"); case '-':
bin_append(60, 6, binary_string);
break; break;
case '.': strcat(binary_string, "111101"); case '.':
bin_append(61, 6, binary_string);
break; break;
case '/': strcat(binary_string, "111110"); case '/':
bin_append(62, 6, binary_string);
break; break;
} }
@ -1487,7 +1387,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
if (i != 0) { if (i != 0) {
if ((general_field_type[i - 1] != NUMERIC) && (general_field[i - 1] != '[')) { if ((general_field_type[i - 1] != NUMERIC) && (general_field[i - 1] != '[')) {
strcat(binary_string, "000"); /* Numeric latch */ bin_append(0, 3, binary_string); /* Numeric latch */
} }
} }
@ -1503,17 +1403,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
d2 = 10; d2 = 10;
} }
value = (11 * d1) + d2 + 8; bin_append((11 * d1) + d2 + 8, 7, binary_string);
mask = 0x40;
for (j = 0; j < 7; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
i += 2; i += 2;
break; break;
@ -1522,49 +1412,41 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
if (i != 0) { if (i != 0) {
if ((general_field_type[i - 1] == NUMERIC) || (general_field[i - 1] == '[')) { if ((general_field_type[i - 1] == NUMERIC) || (general_field[i - 1] == '[')) {
strcat(binary_string, "0000"); /* Alphanumeric latch */ bin_append(0, 4, binary_string); /* Alphanumeric latch */
} }
if (general_field_type[i - 1] == ISOIEC) { if (general_field_type[i - 1] == ISOIEC) {
strcat(binary_string, "00100"); /* ISO/IEC 646 latch */ bin_append(4, 5, binary_string); /* ISO/IEC 646 latch */
} }
} }
if ((general_field[i] >= '0') && (general_field[i] <= '9')) { if ((general_field[i] >= '0') && (general_field[i] <= '9')) {
bin_append(general_field[i] - 43, 5, binary_string);
value = general_field[i] - 43;
mask = 0x10;
for (j = 0; j < 5; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if ((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { if ((general_field[i] >= 'A') && (general_field[i] <= 'Z')) {
bin_append(general_field[i] - 33, 6, binary_string);
value = general_field[i] - 33;
mask = 0x20;
for (j = 0; j < 6; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if (general_field[i] == '[') strcat(binary_string, "01111"); /* FNC1/Numeric latch */ switch (general_field[i]) {
if (general_field[i] == '*') strcat(binary_string, "111010"); /* asterisk */ case '[':
if (general_field[i] == ',') strcat(binary_string, "111011"); /* comma */ bin_append(15, 5, binary_string);
if (general_field[i] == '-') strcat(binary_string, "111100"); /* minus or hyphen */ break;
if (general_field[i] == '.') strcat(binary_string, "111101"); /* period or full stop */ case '*':
if (general_field[i] == '/') strcat(binary_string, "111110"); /* slash or solidus */ bin_append(58, 6, binary_string);
break;
case ',':
bin_append(59, 6, binary_string);
break;
case '-':
bin_append(60, 6, binary_string);
break;
case '.':
bin_append(61, 6, binary_string);
break;
case '/':
bin_append(62, 6, binary_string);
break;
}
i++; i++;
break; break;
@ -1573,57 +1455,24 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
if (i != 0) { if (i != 0) {
if ((general_field_type[i - 1] == NUMERIC) || (general_field[i - 1] == '[')) { if ((general_field_type[i - 1] == NUMERIC) || (general_field[i - 1] == '[')) {
strcat(binary_string, "0000"); /* Alphanumeric latch */ bin_append(0, 4, binary_string); /* Alphanumeric latch */
strcat(binary_string, "00100"); /* ISO/IEC 646 latch */ bin_append(4, 5, binary_string); /* ISO/IEC 646 latch */
} }
if (general_field_type[i - 1] == ALPHA) { if (general_field_type[i - 1] == ALPHA) {
strcat(binary_string, "00100"); /* ISO/IEC 646 latch */ bin_append(4, 5, binary_string);; /* ISO/IEC 646 latch */
} }
} }
if ((general_field[i] >= '0') && (general_field[i] <= '9')) { if ((general_field[i] >= '0') && (general_field[i] <= '9')) {
bin_append(general_field[i] - 43, 5, binary_string);
value = general_field[i] - 43;
mask = 0x10;
for (j = 0; j < 5; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if ((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { if ((general_field[i] >= 'A') && (general_field[i] <= 'Z')) {
bin_append(general_field[i] - 1, 7, binary_string);
value = general_field[i] - 1;
mask = 0x40;
for (j = 0; j < 7; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if ((general_field[i] >= 'a') && (general_field[i] <= 'z')) { if ((general_field[i] >= 'a') && (general_field[i] <= 'z')) {
bin_append(general_field[i] - 7, 7, binary_string);
value = general_field[i] - 7;
mask = 0x40;
for (j = 0; j < 7; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} }
if (general_field[i] == '[') strcat(binary_string, "01111"); /* FNC1/Numeric latch */ if (general_field[i] == '[') strcat(binary_string, "01111"); /* FNC1/Numeric latch */
@ -1679,33 +1528,9 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
/* There is still one more numeric digit to encode */ /* There is still one more numeric digit to encode */
if ((remainder >= 4) && (remainder <= 6)) { if ((remainder >= 4) && (remainder <= 6)) {
d1 = ctoi(general_field[i]); bin_append(ctoi(general_field[i]) + 1, 4, binary_string);
d1++;
mask = 0x08;
for (j = 0; j < 4; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
} else { } else {
d1 = ctoi(general_field[i]); bin_append((11 * ctoi(general_field[i])) + 18, 7, binary_string);
d2 = 10;
value = (11 * d1) + d2 + 8;
mask = 0x40;
for (j = 0; j < 7; j++) {
if ((value & mask) == 0x00) {
strcat(binary_string, "0");
} else {
strcat(binary_string, "1");
}
mask = mask >> 1;
}
/* This may push the symbol up to the next size */ /* This may push the symbol up to the next size */
} }
} }

View File

@ -223,18 +223,15 @@ static void ecc200(unsigned char *binary, const int bytes, const int datablock,
/* Return true (1) if a character is valid in X12 set */ /* Return true (1) if a character is valid in X12 set */
static int isX12(const int source) { static int isX12(const int source) {
if (source == 13) {
return 1; switch(source) {
} case 13: // CR
if (source == 42) { case 42: // *
return 1; case 62: // >
} case 32: // space
if (source == 62) { return 1;
return 1;
}
if (source == 32) {
return 1;
} }
if ((source >= '0') && (source <= '9')) { if ((source >= '0') && (source <= '9')) {
return 1; return 1;
} }

View File

@ -658,20 +658,11 @@ static void calculate_binary(char binary[], char mode[], int source[], const siz
void hx_place_finder_top_left(unsigned char* grid, int size) { void hx_place_finder_top_left(unsigned char* grid, int size) {
int xp, yp; int xp, yp;
int x = 0, y = 0; int x = 0, y = 0;
char finder[] = {0x7F, 0x40, 0x5F, 0x50, 0x57, 0x57, 0x57};
int finder[] = {
1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0,
1, 0, 1, 1, 1, 1, 1,
1, 0, 1, 0, 0, 0, 0,
1, 0, 1, 0, 1, 1, 1,
1, 0, 1, 0, 1, 1, 1,
1, 0, 1, 0, 1, 1, 1
};
for (xp = 0; xp < 7; xp++) { for (xp = 0; xp < 7; xp++) {
for (yp = 0; yp < 7; yp++) { for (yp = 0; yp < 7; yp++) {
if (finder[xp + (7 * yp)] == 1) { if (finder[yp] & 0x40 >> xp) {
grid[((yp + y) * size) + (xp + x)] = 0x11; grid[((yp + y) * size) + (xp + x)] = 0x11;
} else { } else {
grid[((yp + y) * size) + (xp + x)] = 0x10; grid[((yp + y) * size) + (xp + x)] = 0x10;
@ -683,20 +674,11 @@ void hx_place_finder_top_left(unsigned char* grid, int size) {
/* Finder pattern for top right and bottom left of symbol */ /* Finder pattern for top right and bottom left of symbol */
void hx_place_finder(unsigned char* grid, int size, int x, int y) { void hx_place_finder(unsigned char* grid, int size, int x, int y) {
int xp, yp; int xp, yp;
char finder[] = {0x7F, 0x01, 0x7D, 0x05, 0x75, 0x75, 0x75};
int finder[] = {
1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 1, 0, 1,
1, 1, 1, 0, 1, 0, 1,
1, 1, 1, 0, 1, 0, 1,
1, 1, 1, 0, 1, 0, 1
};
for (xp = 0; xp < 7; xp++) { for (xp = 0; xp < 7; xp++) {
for (yp = 0; yp < 7; yp++) { for (yp = 0; yp < 7; yp++) {
if (finder[xp + (7 * yp)] == 1) { if (finder[yp] & 0x40 >> xp) {
grid[((yp + y) * size) + (xp + x)] = 0x11; grid[((yp + y) * size) + (xp + x)] = 0x11;
} else { } else {
grid[((yp + y) * size) + (xp + x)] = 0x10; grid[((yp + y) * size) + (xp + x)] = 0x10;
@ -709,20 +691,11 @@ void hx_place_finder(unsigned char* grid, int size, int x, int y) {
void hx_place_finder_bottom_right(unsigned char* grid, int size) { void hx_place_finder_bottom_right(unsigned char* grid, int size) {
int xp, yp; int xp, yp;
int x = size - 7, y = size - 7; int x = size - 7, y = size - 7;
char finder[] = {0x75, 0x75, 0x75, 0x05, 0x7D, 0x01, 0x7F};
int finder[] = {
1, 1, 1, 0, 1, 0, 1,
1, 1, 1, 0, 1, 0, 1,
1, 1, 1, 0, 1, 0, 1,
0, 0, 0, 0, 1, 0, 1,
1, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1
};
for (xp = 0; xp < 7; xp++) { for (xp = 0; xp < 7; xp++) {
for (yp = 0; yp < 7; yp++) { for (yp = 0; yp < 7; yp++) {
if (finder[xp + (7 * yp)] == 1) { if (finder[yp] & 0x40 >> xp) {
grid[((yp + y) * size) + (xp + x)] = 0x11; grid[((yp + y) * size) + (xp + x)] = 0x11;
} else { } else {
grid[((yp + y) * size) + (xp + x)] = 0x10; grid[((yp + y) * size) + (xp + x)] = 0x10;

View File

@ -2,7 +2,7 @@
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -33,19 +33,6 @@
/* The function "USPS_MSB_Math_CRC11GenerateFrameCheckSequence" /* The function "USPS_MSB_Math_CRC11GenerateFrameCheckSequence"
is Copyright (C) 2006 United States Postal Service */ is Copyright (C) 2006 United States Postal Service */
static const short int BCD[40] = {
0, 0, 0, 0,
1, 0, 0, 0,
0, 1, 0, 0,
1, 1, 0, 0,
0, 0, 1, 0,
1, 0, 1, 0,
0, 1, 1, 0,
1, 1, 1, 0,
0, 0, 0, 1,
1, 0, 0, 1
};
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
@ -337,14 +324,14 @@ int imail(struct zint_symbol *symbol, unsigned char source[], int length) {
binary_add(accum, x_reg); binary_add(accum, x_reg);
} }
x_reg[0] = BCD[ctoi(zip[read]) * 4]; for (i = 0; i < 112; i++) {
x_reg[1] = BCD[(ctoi(zip[read]) * 4) + 1];
x_reg[2] = BCD[(ctoi(zip[read]) * 4) + 2];
x_reg[3] = BCD[(ctoi(zip[read]) * 4) + 3];
for (i = 4; i < 112; i++) {
x_reg[i] = 0; x_reg[i] = 0;
} }
for (i = 0; i < 4; i++) {
if (ctoi(zip[read]) & (0x01 << i)) x_reg[i] = 1;
}
binary_add(accum, x_reg); binary_add(accum, x_reg);
} }
@ -382,14 +369,14 @@ int imail(struct zint_symbol *symbol, unsigned char source[], int length) {
binary_add(accum, y_reg); binary_add(accum, y_reg);
} }
y_reg[0] = BCD[ctoi(zip_adder[read]) * 4]; for (i = 0; i < 112; i++) {
y_reg[1] = BCD[(ctoi(zip_adder[read]) * 4) + 1];
y_reg[2] = BCD[(ctoi(zip_adder[read]) * 4) + 2];
y_reg[3] = BCD[(ctoi(zip_adder[read]) * 4) + 3];
for (i = 4; i < 112; i++) {
y_reg[i] = 0; y_reg[i] = 0;
} }
for (i = 0; i < 4; i++) {
if (ctoi(zip_adder[read]) & (0x01 << i)) y_reg[i] = 1;
}
binary_add(accum, y_reg); binary_add(accum, y_reg);
} }
@ -406,15 +393,15 @@ int imail(struct zint_symbol *symbol, unsigned char source[], int length) {
binary_add(accum, y_reg); binary_add(accum, y_reg);
} }
/* add first digit of tracker */ for (i = 0; i < 112; i++) {
y_reg[0] = BCD[ctoi(tracker[0]) * 4];
y_reg[1] = BCD[(ctoi(tracker[0]) * 4) + 1];
y_reg[2] = BCD[(ctoi(tracker[0]) * 4) + 2];
y_reg[3] = BCD[(ctoi(tracker[0]) * 4) + 3];
for (i = 4; i < 112; i++) {
y_reg[i] = 0; y_reg[i] = 0;
} }
/* add first digit of tracker */
for (i = 0; i < 4; i++) {
if (ctoi(tracker[0]) & (0x01 << i)) y_reg[i] = 1;
}
binary_add(accum, y_reg); binary_add(accum, y_reg);
/* multiply by 5 */ /* multiply by 5 */
@ -426,15 +413,15 @@ int imail(struct zint_symbol *symbol, unsigned char source[], int length) {
binary_add(accum, y_reg); binary_add(accum, y_reg);
} }
/* add second digit */ for (i = 0; i < 112; i++) {
y_reg[0] = BCD[ctoi(tracker[1]) * 4];
y_reg[1] = BCD[(ctoi(tracker[1]) * 4) + 1];
y_reg[2] = BCD[(ctoi(tracker[1]) * 4) + 2];
y_reg[3] = BCD[(ctoi(tracker[1]) * 4) + 3];
for (i = 4; i < 112; i++) {
y_reg[i] = 0; y_reg[i] = 0;
} }
/* add second digit */
for (i = 0; i < 4; i++) {
if (ctoi(tracker[1]) & (0x01 << i)) y_reg[i] = 1;
}
binary_add(accum, y_reg); binary_add(accum, y_reg);
/* and then the rest */ /* and then the rest */
@ -449,14 +436,14 @@ int imail(struct zint_symbol *symbol, unsigned char source[], int length) {
binary_add(accum, y_reg); binary_add(accum, y_reg);
} }
y_reg[0] = BCD[ctoi(tracker[read]) * 4]; for (i = 0; i < 112; i++) {
y_reg[1] = BCD[(ctoi(tracker[read]) * 4) + 1];
y_reg[2] = BCD[(ctoi(tracker[read]) * 4) + 2];
y_reg[3] = BCD[(ctoi(tracker[read]) * 4) + 3];
for (i = 4; i < 112; i++) {
y_reg[i] = 0; y_reg[i] = 0;
} }
for (i = 0; i < 4; i++) {
if (ctoi(tracker[read]) & (0x01 << i)) y_reg[i] = 1;
}
binary_add(accum, y_reg); binary_add(accum, y_reg);
} }

View File

@ -2,7 +2,7 @@
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -35,19 +35,6 @@
#include "common.h" #include "common.h"
#include "large.h" #include "large.h"
static const short int BCD[40] = {
0, 0, 0, 0,
1, 0, 0, 0,
0, 1, 0, 0,
1, 1, 0, 0,
0, 0, 1, 0,
1, 0, 1, 0,
0, 1, 1, 0,
1, 1, 1, 0,
0, 0, 0, 1,
1, 0, 0, 1
};
void binary_add(short int accumulator[], short int input_buffer[]) { /* Binary addition */ void binary_add(short int accumulator[], short int input_buffer[]) { /* Binary addition */
int i, carry, done; int i, carry, done;
carry = 0; carry = 0;
@ -190,14 +177,14 @@ void binary_load(short int reg[], char data[], const size_t src_len) {
binary_add(reg, temp); binary_add(reg, temp);
} }
temp[0] = BCD[ctoi(data[read]) * 4]; for (i = 0; i < 112; i++) {
temp[1] = BCD[(ctoi(data[read]) * 4) + 1];
temp[2] = BCD[(ctoi(data[read]) * 4) + 2];
temp[3] = BCD[(ctoi(data[read]) * 4) + 3];
for (i = 4; i < 112; i++) {
temp[i] = 0; temp[i] = 0;
} }
for (i = 0; i < 4; i++) {
if (ctoi(data[read]) & (0x01 << i)) temp[i] = 1;
}
binary_add(reg, temp); binary_add(reg, temp);
} }
} }

View File

@ -546,20 +546,11 @@ static void add_ecc(int fullstream[],const int datastream[],const int version,co
static void place_finder(unsigned char grid[],const int size,const int x,const int y) { static void place_finder(unsigned char grid[],const int size,const int x,const int y) {
int xp, yp; int xp, yp;
char finder[] = {0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x41, 0x7F};
static const int finder[] = {
1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 1,
1, 0, 1, 1, 1, 0, 1,
1, 0, 1, 1, 1, 0, 1,
1, 0, 1, 1, 1, 0, 1,
1, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1
};
for (xp = 0; xp < 7; xp++) { for (xp = 0; xp < 7; xp++) {
for (yp = 0; yp < 7; yp++) { for (yp = 0; yp < 7; yp++) {
if (finder[xp + (7 * yp)] == 1) { if (finder[yp] & 0x40 >> xp) {
grid[((yp + y) * size) + (xp + x)] = 0x11; grid[((yp + y) * size) + (xp + x)] = 0x11;
} else { } else {
grid[((yp + y) * size) + (xp + x)] = 0x10; grid[((yp + y) * size) + (xp + x)] = 0x10;
@ -570,21 +561,14 @@ static void place_finder(unsigned char grid[],const int size,const int x,const i
static void place_align(unsigned char grid[],const int size,int x,int y) { static void place_align(unsigned char grid[],const int size,int x,int y) {
int xp, yp; int xp, yp;
char alignment[] = {0x1F, 0x11, 0x15, 0x11, 0x1F};
static const int alignment[] = {
1, 1, 1, 1, 1,
1, 0, 0, 0, 1,
1, 0, 1, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 1
};
x -= 2; x -= 2;
y -= 2; /* Input values represent centre of pattern */ y -= 2; /* Input values represent centre of pattern */
for (xp = 0; xp < 5; xp++) { for (xp = 0; xp < 5; xp++) {
for (yp = 0; yp < 5; yp++) { for (yp = 0; yp < 5; yp++) {
if (alignment[xp + (5 * yp)] == 1) { if (alignment[yp] & 0x10 >> xp) {
grid[((yp + y) * size) + (xp + x)] = 0x11; grid[((yp + y) * size) + (xp + x)] = 0x11;
} else { } else {
grid[((yp + y) * size) + (xp + x)] = 0x10; grid[((yp + y) * size) + (xp + x)] = 0x10;