From cb0e4e27e87d37de65a81be0d3e8a6df9bcb7446 Mon Sep 17 00:00:00 2001 From: hooper114 Date: Sun, 31 May 2009 20:33:54 +0000 Subject: [PATCH] Converted zint_symbol structure usage to a more compressed format --- backend/2of5.c | 32 +++---- backend/auspost.c | 16 ++-- backend/aztec.c | 12 +-- backend/blockf.c | 9 +- backend/code128.c | 4 +- backend/code16k.c | 3 +- backend/common.c | 63 ++++++++++++- backend/common.h | 3 + backend/composite.c | 12 +-- backend/dm200.c | 5 +- backend/dmatrix.c | 58 ++++++------ backend/imail.c | 14 +-- backend/library.c | 11 ++- backend/maxicode.c | 37 ++++---- backend/medical.c | 28 +++--- backend/micqr.c | 2 +- backend/pdf417.c | 28 +++--- backend/plessey.c | 24 ++--- backend/png.c | 12 +-- backend/postal.c | 60 ++++++------ backend/ps.c | 12 +-- backend/qr.c | 10 +- backend/rss.c | 207 ++++++++++++++++++++++-------------------- backend/svg.c | 12 +-- backend/telepen.c | 10 +- backend/upcean.c | 56 ++++++------ backend/zint.h | 4 +- backend_qt4/qzint.cpp | 43 ++++++--- backend_qt4/qzint.h | 1 + 29 files changed, 447 insertions(+), 341 deletions(-) diff --git a/backend/2of5.c b/backend/2of5.c index 1a51be95..a30ab05b 100644 --- a/backend/2of5.c +++ b/backend/2of5.c @@ -45,12 +45,12 @@ int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 80) { - strcpy(symbol->errtxt, "Input too long [021]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [022]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -79,12 +79,12 @@ int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 45) { - strcpy(symbol->errtxt, "Input too long [071]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid character in data [072]"); + strcpy(symbol->errtxt, "Invalid character in data"); return error_number; } @@ -112,12 +112,12 @@ int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 45) { - strcpy(symbol->errtxt, "Input too long [041]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [042]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -146,12 +146,12 @@ int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 80) { - strcpy(symbol->errtxt, "Input too long [061]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [062]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -180,12 +180,12 @@ int interleaved_two_of_five(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 90) { - strcpy(symbol->errtxt, "Input too long [031]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if (error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [032]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -252,13 +252,13 @@ int itf14(struct zint_symbol *symbol, unsigned char source[]) h = ustrlen(source); if(h > 13) { - strcpy(symbol->errtxt, "Input too long [891]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid character in data [892]"); + strcpy(symbol->errtxt, "Invalid character in data"); return error_number; } @@ -302,12 +302,12 @@ int dpleit(struct zint_symbol *symbol, unsigned char source[]) count = 0; h = ustrlen(source); if(h > 13) { - strcpy(symbol->errtxt, "Input wrong length [211]"); + strcpy(symbol->errtxt, "Input wrong length"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [212]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -345,12 +345,12 @@ int dpident(struct zint_symbol *symbol, unsigned char source[]) count = 0; h = ustrlen(source); if(h > 11) { - strcpy(symbol->errtxt, "Input wrong length [221]"); + strcpy(symbol->errtxt, "Input wrong length"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [222]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } diff --git a/backend/auspost.c b/backend/auspost.c index 02ffa80b..e94cba03 100644 --- a/backend/auspost.c +++ b/backend/auspost.c @@ -128,17 +128,17 @@ int australia_post(struct zint_symbol *symbol, unsigned char source[]) case 16: strcpy(fcc, "59"); error_number = is_sane(NESET, source); break; case 18: strcpy(fcc, "62"); break; case 23: strcpy(fcc, "62"); error_number = is_sane(NESET, source); break; - default: strcpy(symbol->errtxt, "Auspost input is wrong length [631]"); + default: strcpy(symbol->errtxt, "Auspost input is wrong length"); return ERROR_TOO_LONG; break; } if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [632]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } } else { if(ustrlen(source) > 8) { - strcpy(symbol->errtxt, "Auspost input is too long [633]"); + strcpy(symbol->errtxt, "Auspost input is too long"); return ERROR_TOO_LONG; } switch(symbol->symbology) { @@ -157,7 +157,7 @@ int australia_post(struct zint_symbol *symbol, unsigned char source[]) concat(localstr, (char*)source); error_number = is_sane(GDSET, (unsigned char *)localstr); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [634]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -168,7 +168,7 @@ int australia_post(struct zint_symbol *symbol, unsigned char source[]) dpid[8] = '\0'; error_number = is_sane(NESET, (unsigned char *)dpid); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in DPID [635]"); + strcpy(symbol->errtxt, "Invalid characters in DPID"); return error_number; } @@ -227,12 +227,12 @@ int australia_post(struct zint_symbol *symbol, unsigned char source[]) { if((data_pattern[loopey] == '1') || (data_pattern[loopey] == '0')) { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); if((data_pattern[loopey] == '2') || (data_pattern[loopey] == '0')) { - symbol->encoded_data[2][writer] = '1'; + set_module(symbol, 2, writer); } writer += 2; } diff --git a/backend/aztec.c b/backend/aztec.c index 9e35b743..c9fb2634 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -1107,11 +1107,11 @@ int aztec(struct zint_symbol *symbol, unsigned char source[]) for(y = AztecCompactOffset[layers - 1]; y < (27 - AztecCompactOffset[layers - 1]); y++) { for(x = AztecCompactOffset[layers - 1]; x < (27 - AztecCompactOffset[layers - 1]); x++) { if(CompactAztecMap[(y * 27) + x] == 1) { - symbol->encoded_data[y - AztecCompactOffset[layers - 1]][x - AztecCompactOffset[layers - 1]] = '1'; + set_module(symbol, y - AztecCompactOffset[layers - 1], x - AztecCompactOffset[layers - 1]); } if(CompactAztecMap[(y * 27) + x] >= 2) { if(bit_pattern[CompactAztecMap[(y * 27) + x] - 2] == '1') { - symbol->encoded_data[y - AztecCompactOffset[layers - 1]][x - AztecCompactOffset[layers - 1]] = '1'; + set_module(symbol, y - AztecCompactOffset[layers - 1], x - AztecCompactOffset[layers - 1]); } } } @@ -1124,11 +1124,11 @@ int aztec(struct zint_symbol *symbol, unsigned char source[]) for(y = AztecOffset[layers - 1]; y < (151 - AztecOffset[layers - 1]); y++) { for(x = AztecOffset[layers - 1]; x < (151 - AztecOffset[layers - 1]); x++) { if(AztecMap[(y * 151) + x] == 1) { - symbol->encoded_data[y - AztecOffset[layers - 1]][x - AztecOffset[layers - 1]] = '1'; + set_module(symbol, y - AztecOffset[layers - 1], x - AztecOffset[layers - 1]); } if(AztecMap[(y * 151) + x] >= 2) { if(bit_pattern[AztecMap[(y * 151) + x] - 2] == '1') { - symbol->encoded_data[y - AztecOffset[layers - 1]][x - AztecOffset[layers - 1]] = '1'; + set_module(symbol, y - AztecOffset[layers - 1], x - AztecOffset[layers - 1]); } } } @@ -1218,11 +1218,11 @@ int aztec_runes(struct zint_symbol *symbol, unsigned char source[]) for(y = 8; y < 19; y++) { for(x = 8; x < 19; x++) { if(CompactAztecMap[(y * 27) + x] == 1) { - symbol->encoded_data[y - 8][x - 8] = '1'; + set_module(symbol, y - 8, x - 8); } if(CompactAztecMap[(y * 27) + x] >= 2) { if(binary_string[CompactAztecMap[(y * 27) + x] - 2000] == '1') { - symbol->encoded_data[y - 8][x - 8] = '1'; + set_module(symbol, y - 8, x - 8); } } } diff --git a/backend/blockf.c b/backend/blockf.c index 9d6f9e49..10d2c32b 100644 --- a/backend/blockf.c +++ b/backend/blockf.c @@ -592,7 +592,7 @@ int codablock(struct zint_symbol *symbol, unsigned char source[]) final_mode = MODEA; if(input_length > 5450) { - strcpy(symbol->errtxt, "Input data too long [741]"); + strcpy(symbol->errtxt, "Input data too long"); return ERROR_TOO_LONG; } @@ -624,7 +624,7 @@ int codablock(struct zint_symbol *symbol, unsigned char source[]) columns_needed = (estimate_codelength + 2) / rows_needed; if(columns_needed < 4) { columns_needed = 4; } if(columns_needed > 62) { - strcpy(symbol->errtxt, "Input data too long [742]"); + strcpy(symbol->errtxt, "Input data too long"); return ERROR_TOO_LONG; } @@ -632,7 +632,7 @@ int codablock(struct zint_symbol *symbol, unsigned char source[]) error_number = data_encode_blockf(source, subset_selector, blockmatrix, &columns_needed, &rows_needed, &final_mode, symbol->nullchar, gs1); if(error_number > 0) { if(error_number == ERROR_TOO_LONG) { - strcpy(symbol->errtxt, "Input data too long [743]"); + strcpy(symbol->errtxt, "Input data too long"); } return error_number; } @@ -736,10 +736,9 @@ int codablock(struct zint_symbol *symbol, unsigned char source[]) for (j = 0; j < strlen(row_pattern); j++) { for(k = 0; k < ctoi(row_pattern[j]); k++) { if(flip_flop == 1) { - symbol->encoded_data[i][writer] = '1'; + set_module(symbol, i, writer); writer++; } else { - symbol->encoded_data[i][writer] = '0'; writer++; } } diff --git a/backend/code128.c b/backend/code128.c index 155034bf..1d2daae1 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -864,8 +864,8 @@ int ean_128(struct zint_symbol *symbol, unsigned char source[]) /* Add the separator pattern for composite symbols */ if(symbol->symbology == BARCODE_EAN128_CC) { for(i = 0; i < symbol->width; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = '1'; + if(module_is_set(symbol, separator_row + 1, i)) { + set_module(symbol, separator_row, i); } } } diff --git a/backend/code16k.c b/backend/code16k.c index ff93f333..7111bb96 100644 --- a/backend/code16k.c +++ b/backend/code16k.c @@ -537,10 +537,9 @@ int code16k(struct zint_symbol *symbol, unsigned char source[]) for (mx_reader = 0; mx_reader < strlen(width_pattern); mx_reader++) { for(looper = 0; looper < ctoi(width_pattern[mx_reader]); looper++) { if(flip_flop == 1) { - symbol->encoded_data[current_row][writer] = '1'; + set_module(symbol, current_row, writer); writer++; } else { - symbol->encoded_data[current_row][writer] = '0'; writer++; } } if(flip_flop == 0) { flip_flop = 1; } else { flip_flop = 0; } diff --git a/backend/common.c b/backend/common.c index f91e477d..12c69db2 100644 --- a/backend/common.c +++ b/backend/common.c @@ -120,6 +120,67 @@ void lookup(char set_string[], char *table[], char data, char dest[]) if (data == set_string[i]) { concat(dest, table[i]); } } } +int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + int x_char, x_sub, result; + + x_char = x_coord / 7; + x_sub = x_coord % 7; + result = 0; + + switch(x_sub) { + case 0: if((symbol->encoded_data[y_coord][x_char] & 0x01) != 0) { result = 1; } break; + case 1: if((symbol->encoded_data[y_coord][x_char] & 0x02) != 0) { result = 1; } break; + case 2: if((symbol->encoded_data[y_coord][x_char] & 0x04) != 0) { result = 1; } break; + case 3: if((symbol->encoded_data[y_coord][x_char] & 0x08) != 0) { result = 1; } break; + case 4: if((symbol->encoded_data[y_coord][x_char] & 0x10) != 0) { result = 1; } break; + case 5: if((symbol->encoded_data[y_coord][x_char] & 0x20) != 0) { result = 1; } break; + case 6: if((symbol->encoded_data[y_coord][x_char] & 0x40) != 0) { result = 1; } break; + } + + return result; +} + +void set_module(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + if(module_is_set(symbol, y_coord, x_coord)) { return; } + + int x_char, x_sub; + + x_char = x_coord / 7; + x_sub = x_coord % 7; + + switch(x_sub) { + case 0: symbol->encoded_data[y_coord][x_char] += 0x01; break; + case 1: symbol->encoded_data[y_coord][x_char] += 0x02; break; + case 2: symbol->encoded_data[y_coord][x_char] += 0x04; break; + case 3: symbol->encoded_data[y_coord][x_char] += 0x08; break; + case 4: symbol->encoded_data[y_coord][x_char] += 0x10; break; + case 5: symbol->encoded_data[y_coord][x_char] += 0x20; break; + case 6: symbol->encoded_data[y_coord][x_char] += 0x40; break; + } /* The last binary digit is reserved for colour barcodes */ +} + +void unset_module(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + if(!(module_is_set(symbol, y_coord, x_coord))) { return; } + + int x_char, x_sub; + + x_char = x_coord / 7; + x_sub = x_coord % 7; + + switch(x_sub) { + case 0: symbol->encoded_data[y_coord][x_char] -= 0x01; break; + case 1: symbol->encoded_data[y_coord][x_char] -= 0x02; break; + case 2: symbol->encoded_data[y_coord][x_char] -= 0x04; break; + case 3: symbol->encoded_data[y_coord][x_char] -= 0x08; break; + case 4: symbol->encoded_data[y_coord][x_char] -= 0x10; break; + case 5: symbol->encoded_data[y_coord][x_char] -= 0x20; break; + case 6: symbol->encoded_data[y_coord][x_char] -= 0x40; break; + } /* The last binary digit is reserved for colour barcodes */ +} + void expand(struct zint_symbol *symbol, char data[]) { /* Expands from a width pattern to a bit pattern */ @@ -131,7 +192,7 @@ void expand(struct zint_symbol *symbol, char data[]) for(reader = 0; reader < strlen(data); reader++) { for(i = 0; i < ctoi(data[reader]); i++) { - symbol->encoded_data[symbol->rows][writer] = latch; + if(latch == '1') { set_module(symbol, symbol->rows, writer); } writer++; } if(latch == '1') { diff --git a/backend/common.h b/backend/common.h index 09a0b82c..23cb4be7 100644 --- a/backend/common.h +++ b/backend/common.h @@ -41,4 +41,7 @@ int posn(char set_string[], char data); void expand(struct zint_symbol *symbol, char data[]); int is_stackable(int symbology); int roundup(float input); +int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord); +void set_module(struct zint_symbol *symbol, int y_coord, int x_coord); +void unset_module(struct zint_symbol *symbol, int y_coord, int x_coord); diff --git a/backend/composite.c b/backend/composite.c index 77912977..c5eb8e01 100644 --- a/backend/composite.c +++ b/backend/composite.c @@ -299,7 +299,7 @@ int cc_a(struct zint_symbol *symbol, unsigned char source[], int cc_width) /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */ for(loop = 0; loop < strlen(pattern); loop++) { - symbol->encoded_data[i][loop] = pattern[loop]; + if(pattern[loop] == '1') { set_module(symbol, i, loop); } } symbol->row_height[i] = 2; symbol->rows++; @@ -527,7 +527,7 @@ int cc_b(struct zint_symbol *symbol, unsigned char source[], int cc_width) /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */ for(loop = 0; loop < strlen(pattern); loop++) { - symbol->encoded_data[i][loop] = pattern[loop]; + if(pattern[loop] == '1') { set_module(symbol, i, loop); } } symbol->row_height[i] = 2; @@ -683,7 +683,7 @@ int cc_c(struct zint_symbol *symbol, unsigned char source[], int cc_width, int e lookup(BRSET, PDFttf, codebarre[loop], pattern); } for(loop = 0; loop < strlen(pattern); loop++) { - symbol->encoded_data[i][loop] = pattern[loop]; + if(pattern[loop] == '1') { set_module(symbol, i, loop); } } symbol->row_height[i] = 3; } @@ -1851,10 +1851,10 @@ int composite(struct zint_symbol *symbol, unsigned char source[]) /* Move the 2d component of the symbol horizontally */ for(i = 0; i <= symbol->rows; i++) { for(j = (symbol->width + top_shift); j >= top_shift; j--) { - symbol->encoded_data[i][j] = symbol->encoded_data[i][j - top_shift]; + if(module_is_set(symbol, i, j - top_shift)) { set_module(symbol, i, j); } else { unset_module(symbol, i, j); } } for(j = 0; j < top_shift; j++) { - symbol->encoded_data[i][j] = '0'; + unset_module(symbol, i, j); } } } @@ -1863,7 +1863,7 @@ int composite(struct zint_symbol *symbol, unsigned char source[]) for(i = 0; i <= linear->rows; i++) { symbol->row_height[symbol->rows + i] = linear->row_height[i]; for(j = 0; j <= linear->width; j++) { - symbol->encoded_data[i + symbol->rows][j + bottom_shift] = linear->encoded_data[i][j]; + if(module_is_set(linear, i, j)) { set_module(symbol, i + symbol->rows, j + bottom_shift); } else { unset_module(symbol, i + symbol->rows, j + bottom_shift); } } } if((linear->width + bottom_shift) > symbol->width) { diff --git a/backend/dm200.c b/backend/dm200.c index 495ba693..4758638c 100644 --- a/backend/dm200.c +++ b/backend/dm200.c @@ -842,9 +842,8 @@ int data_matrix_200(struct zint_symbol *symbol, unsigned char source[]) int x; for(x = 0; x < W; x++) { if(grid[W * y + x]) { - symbol->encoded_data[(H - y) - 1][x] = '1'; } - else { - symbol->encoded_data[(H - y) - 1][x] = '0'; } + set_module(symbol, (H - y) - 1, x); + } } symbol->row_height[(H - y) - 1] = 1; } diff --git a/backend/dmatrix.c b/backend/dmatrix.c index aefb7398..abd011ca 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -1241,41 +1241,41 @@ int matrix89(struct zint_symbol *symbol, unsigned char source[]) symbol->row_height[0] = 1; /* Fill corners */ - symbol->encoded_data[0][0] = '1'; - symbol->encoded_data[0][width + 1] = '1'; - symbol->encoded_data[width + 1][0] = '1'; - symbol->encoded_data[width + 1][width + 1] = '1'; + set_module(symbol, 0, 0); + set_module(symbol, 0, width + 1); + set_module(symbol, width + 1, 0); + set_module(symbol, width + 1, width + 1); for(i = 0; i < width; i++) { /* Fill sides */ - symbol->encoded_data[i + 1][0] = '1'; - symbol->encoded_data[width + 1][i + 1] = '1'; + set_module(symbol, i + 1, 0); + set_module(symbol, width + 1, i + 1); if((i % 2) == 0) { - symbol->encoded_data[i][width + 1] = '1'; - symbol->encoded_data[0][i] = '1'; + set_module(symbol, i, width + 1); + set_module(symbol, 0, i); } for(j = 0; j < width; j++) { switch(symbol_size) { - case 0: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh1[(i * width) + j]]; break; - case 1: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh2[(i * width) + j]]; break; - case 2: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh3[(i * width) + j]]; break; - case 3: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh4[(i * width) + j]]; break; - case 4: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh5[(i * width) + j]]; break; - case 5: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh6[(i * width) + j]]; break; - case 6: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh7[(i * width) + j]]; break; - case 7: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh8[(i * width) + j]]; break; - case 8: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh9[(i * width) + j]]; break; - case 9: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh10[(i * width) + j]]; break; - case 10: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh11[(i * width) + j]]; break; - case 11: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh12[(i * width) + j]]; break; - case 12: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh13[(i * width) + j]]; break; - case 13: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh14[(i * width) + j]]; break; - case 14: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh15[(i * width) + j]]; break; - case 15: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh16[(i * width) + j]]; break; - case 16: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh17[(i * width) + j]]; break; - case 17: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh18[(i * width) + j]]; break; - case 18: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh19[(i * width) + j]]; break; - case 19: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh20[(i * width) + j]]; break; - case 20: symbol->encoded_data[i + 1][j + 1] = randomized_stream[tableh21[(i * width) + j]]; break; + case 0: if(randomized_stream[tableh1[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 1: if(randomized_stream[tableh2[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 2: if(randomized_stream[tableh3[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 3: if(randomized_stream[tableh4[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 4: if(randomized_stream[tableh5[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 5: if(randomized_stream[tableh6[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 6: if(randomized_stream[tableh7[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 7: if(randomized_stream[tableh8[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 8: if(randomized_stream[tableh9[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 9: if(randomized_stream[tableh10[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 10: if(randomized_stream[tableh11[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 11: if(randomized_stream[tableh12[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 12: if(randomized_stream[tableh13[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 13: if(randomized_stream[tableh14[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 14: if(randomized_stream[tableh15[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 15: if(randomized_stream[tableh16[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 16: if(randomized_stream[tableh17[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 17: if(randomized_stream[tableh18[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 18: if(randomized_stream[tableh19[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 19: if(randomized_stream[tableh20[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; + case 20: if(randomized_stream[tableh21[(i * width) + j]] == '1') { set_module(symbol, i + 1, j + 1); } break; } } symbol->row_height[i + 1] = 1; diff --git a/backend/imail.c b/backend/imail.c index 27b19ca5..ec4cbf14 100644 --- a/backend/imail.c +++ b/backend/imail.c @@ -313,12 +313,12 @@ int imail(struct zint_symbol *symbol, unsigned char source[]) errno = 0; if(ustrlen(source) > 32) { - strcpy(symbol->errtxt, "Input too long [851]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } errno = is_sane(NASET, source); if(errno == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [852]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return errno; } @@ -361,11 +361,11 @@ int imail(struct zint_symbol *symbol, unsigned char source[]) } if(strlen(tracker) != 20) { - strcpy(symbol->errtxt, "Invalid length tracking code [853]"); + strcpy(symbol->errtxt, "Invalid length tracking code"); return ERROR_INVALID_DATA; } if(strlen(zip) > 11) { - strcpy(symbol->errtxt, "Invalid ZIP code [854]"); + strcpy(symbol->errtxt, "Invalid ZIP code"); return ERROR_INVALID_DATA; } @@ -672,12 +672,12 @@ int imail(struct zint_symbol *symbol, unsigned char source[]) { if((data_pattern[i] == '1') || (data_pattern[i] == '0')) { - symbol->encoded_data[0][read] = '1'; + set_module(symbol, 0, read); } - symbol->encoded_data[1][read] = '1'; + set_module(symbol, 1, read); if((data_pattern[i] == '2') || (data_pattern[i] == '0')) { - symbol->encoded_data[2][read] = '1'; + set_module(symbol, 2, read); } read += 2; } diff --git a/backend/library.c b/backend/library.c index a1d1174b..e1b32805 100644 --- a/backend/library.c +++ b/backend/library.c @@ -54,7 +54,7 @@ struct zint_symbol *ZBarcode_Create() strcpy(symbol->primary, ""); for(i = 0; i < 178; i++) { for(j = 0; j < 1000; j++) { - symbol->encoded_data[i][j] = '0'; + unset_module(symbol, i, j); } symbol->row_height[i] = 0; } @@ -585,6 +585,15 @@ int ZBarcode_Print(struct zint_symbol *symbol) int error_number; char output[4]; + int i, j; + + for(i = 0; i < symbol->rows; i++) { + for(j = 0; j < symbol->width / 7; j++) { + printf("%2.2X ", symbol->encoded_data[i][j]); + } + printf("\n"); + } + if(strlen(symbol->outfile) > 3) { output[0] = symbol->outfile[strlen(symbol->outfile) - 3]; output[1] = symbol->outfile[strlen(symbol->outfile) - 2]; diff --git a/backend/maxicode.c b/backend/maxicode.c index 0c46df1c..f6f4e8c4 100644 --- a/backend/maxicode.c +++ b/backend/maxicode.c @@ -579,19 +579,19 @@ int maxicode(struct zint_symbol *symbol, unsigned char source[]) } if((mode < 2) || (mode > 6)) { /* Only codes 2 to 6 supported */ - strcpy(symbol->errtxt, "Invalid Maxicode Mode [571]"); + strcpy(symbol->errtxt, "Invalid Maxicode Mode"); return ERROR_INVALID_OPTION; } if((mode == 2) || (mode == 3)) { /* Modes 2 and 3 need data in symbol->primary */ if(strlen(symbol->primary) != 15) { - strcpy(symbol->errtxt, "Invalid Primary String [572]"); + strcpy(symbol->errtxt, "Invalid Primary String"); return ERROR_INVALID_DATA; } for(i = 9; i < 15; i++) { /* check that country code and service are numeric */ if((symbol->primary[i] < 48) || (symbol->primary[i] > 57)) { - strcpy(symbol->errtxt, "Invalid Primary String [573]"); + strcpy(symbol->errtxt, "Invalid Primary String"); return ERROR_INVALID_DATA; } } @@ -630,7 +630,7 @@ int maxicode(struct zint_symbol *symbol, unsigned char source[]) i = maxi_text_process(mode, source, symbol->nullchar); if(i == ERROR_TOO_LONG ) { - strcpy(symbol->errtxt, "Input data too long [574]"); + strcpy(symbol->errtxt, "Input data too long"); return i; } @@ -648,7 +648,6 @@ int maxicode(struct zint_symbol *symbol, unsigned char source[]) /* Copy data into symbol grid */ for(i = 0; i < 33; i++) { for(j = 0; j < 30; j++) { - symbol->encoded_data[i][j] = '0'; block = (MaxiGrid[(i * 30) + j] + 5) / 6; bit = (MaxiGrid[(i * 30) + j] + 5) % 6; @@ -662,26 +661,26 @@ int maxicode(struct zint_symbol *symbol, unsigned char source[]) bit_pattern[5] = (maxi_codeword[block - 1] & 0x1); if(bit_pattern[bit] != 0) { - symbol->encoded_data[i][j] = '1'; + set_module(symbol, i, j); } } } } /* Add orientation markings */ - symbol->encoded_data[0][28] = '1'; // Top right filler - symbol->encoded_data[0][29] = '1'; - symbol->encoded_data[9][10] = '1'; // Top left marker - symbol->encoded_data[9][11] = '1'; - symbol->encoded_data[10][11] = '1'; - symbol->encoded_data[15][7] = '1'; // Left hand marker - symbol->encoded_data[16][8] = '1'; - symbol->encoded_data[16][20] = '1'; // Right hand marker - symbol->encoded_data[17][20] = '1'; - symbol->encoded_data[22][10] = '1'; // Bottom left marker - symbol->encoded_data[23][10] = '1'; - symbol->encoded_data[22][17] = '1'; // Bottom right marker - symbol->encoded_data[23][17] = '1'; + set_module(symbol, 0, 28); // Top right filler + set_module(symbol, 0, 29); + set_module(symbol, 9, 10); // Top left marker + set_module(symbol, 0, 11); + set_module(symbol, 10, 11); + set_module(symbol, 15, 7); // Left hand marker + set_module(symbol, 16, 8); + set_module(symbol, 16, 20); // Right hand marker + set_module(symbol, 17, 20); + set_module(symbol, 22, 10); // Bottom left marker + set_module(symbol, 23, 10); + set_module(symbol, 22, 17); // Bottom right marker + set_module(symbol, 23, 17); symbol->width = 30; symbol->rows = 33; diff --git a/backend/medical.c b/backend/medical.c index dfb38bb4..a1d5c28e 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -58,12 +58,12 @@ int pharma_one(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 6) { - strcpy(symbol->errtxt, "Input too long [511]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [512]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -71,7 +71,7 @@ int pharma_one(struct zint_symbol *symbol, unsigned char source[]) tester = atoi((char*)source); if((tester < 3) || (tester > 131070)) { - strcpy(symbol->errtxt, "Data out of range [513]"); + strcpy(symbol->errtxt, "Data out of range"); return ERROR_INVALID_DATA; } @@ -120,7 +120,7 @@ int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char des if((tester < 4) || (tester > 64570080)) { - strcpy(symbol->errtxt, "Data out of range [533]"); + strcpy(symbol->errtxt, "Data out of range"); return ERROR_INVALID_DATA; } do @@ -161,12 +161,12 @@ int pharma_two(struct zint_symbol *symbol, unsigned char source[]) strcpy(height_pattern, ""); if(ustrlen(source) > 8) { - strcpy(symbol->errtxt, "Input too long [531]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [532]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } error_number = pharma_two_calc(symbol, source, height_pattern); @@ -179,11 +179,11 @@ int pharma_two(struct zint_symbol *symbol, unsigned char source[]) { if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '3')) { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '3')) { - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); } writer += 2; } @@ -204,13 +204,13 @@ int codabar(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 60) { /* No stack smashing please */ - strcpy(symbol->errtxt, "Input too long [181]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } to_upper(source); error_number = is_sane(CASET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [182]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -218,14 +218,14 @@ int codabar(struct zint_symbol *symbol, unsigned char source[]) if(((source[0] != 'A') && (source[0] != 'B')) && ((source[0] != 'C') && (source[0] != 'D'))) { - strcpy(symbol->errtxt, "Invalid characters in data [183]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return 6; } if(((source[ustrlen(source) - 1] != 'A') && (source[ustrlen(source) - 1] != 'B')) && ((source[ustrlen(source) - 1] != 'C') && (source[ustrlen(source) - 1] != 'D'))) { - strcpy(symbol->errtxt, "Invalid characters in data [184]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return 6; } @@ -249,12 +249,12 @@ int code32(struct zint_symbol *symbol, unsigned char source[]) /* Validate the input */ if(ustrlen(source) > 8) { - strcpy(symbol->errtxt, "Input too long [C91]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [C92]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } diff --git a/backend/micqr.c b/backend/micqr.c index 9c2a0a20..be627b22 100644 --- a/backend/micqr.c +++ b/backend/micqr.c @@ -940,7 +940,7 @@ int microqr(struct zint_symbol *symbol, unsigned char source[]) /* Copy data into symbol */ for(i = 0; i < width; i++) { for(j = 0; j < width; j++) { - symbol->encoded_data[i][j] = candidate[i][j]; + if(candidate[i][j] == '1') { set_module(symbol, i, j); } } symbol->row_height[i] = 1; } diff --git a/backend/pdf417.c b/backend/pdf417.c index 100beabb..35eb41fb 100644 --- a/backend/pdf417.c +++ b/backend/pdf417.c @@ -701,7 +701,7 @@ int pdf417(struct zint_symbol *symbol, unsigned char chaine[]) lookup(BRSET, PDFttf, codebarre[loop], pattern); } for(loop = 0; loop < strlen(pattern); loop++) { - symbol->encoded_data[i][loop] = pattern[loop]; + if(pattern[loop] == '1') { set_module(symbol, i, loop); } } symbol->row_height[i] = 3; } @@ -720,12 +720,12 @@ int pdf417enc(struct zint_symbol *symbol, unsigned char source[]) errno = 0; if((symbol->option_1 < -1) || (symbol->option_1 > 8)) { - strcpy(symbol->errtxt, "Security value out of range [551]"); + strcpy(symbol->errtxt, "Security value out of range"); symbol->option_1 = -1; errno = WARN_INVALID_OPTION; } if((symbol->option_2 < 0) || (symbol->option_2 > 30)) { - strcpy(symbol->errtxt, "Number of columns out of range [552]"); + strcpy(symbol->errtxt, "Number of columns out of range"); symbol->option_2 = 0; errno = WARN_INVALID_OPTION; } @@ -737,23 +737,23 @@ int pdf417enc(struct zint_symbol *symbol, unsigned char source[]) if(codeerr != 0) { switch(codeerr) { case 1: - strcpy(symbol->errtxt, "No such file or file unreadable [553]"); + strcpy(symbol->errtxt, "No such file or file unreadable"); errno = ERROR_INVALID_OPTION; break; case 2: - strcpy(symbol->errtxt, "Input string too long [554]"); + strcpy(symbol->errtxt, "Input string too long"); errno = ERROR_TOO_LONG; break; case 3: - strcpy(symbol->errtxt, "Number of codewords per row too small [555]"); + strcpy(symbol->errtxt, "Number of codewords per row too small"); errno = WARN_INVALID_OPTION; break; case 4: - strcpy(symbol->errtxt, "Data too long for specified number of columns [556]"); + strcpy(symbol->errtxt, "Data too long for specified number of columns"); errno = ERROR_TOO_LONG; break; default: - strcpy(symbol->errtxt, "Something strange happened [557]"); + strcpy(symbol->errtxt, "Something strange happened"); errno = ERROR_ENCODING_PROBLEM; break; } @@ -821,11 +821,11 @@ int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[]) /* This is where it all changes! */ if(mclength > 126) { - strcpy(symbol->errtxt, "Input data too long [841]"); + strcpy(symbol->errtxt, "Input data too long"); return ERROR_TOO_LONG; } if(symbol->option_2 > 4) { - strcpy(symbol->errtxt, "Specified width out of range [842]"); + strcpy(symbol->errtxt, "Specified width out of range"); symbol->option_2 = 0; codeerr = WARN_INVALID_OPTION; } @@ -837,21 +837,21 @@ int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[]) if((symbol->option_2 == 1) && (mclength > 20)) { /* the user specified 1 column but the data doesn't fit - go to automatic */ symbol->option_2 = 0; - strcpy(symbol->errtxt, "Specified symbol size too small for data [843]"); + strcpy(symbol->errtxt, "Specified symbol size too small for data"); codeerr = WARN_INVALID_OPTION; } if((symbol->option_2 == 2) && (mclength > 37)) { /* the user specified 2 columns but the data doesn't fit - go to automatic */ symbol->option_2 = 0; - strcpy(symbol->errtxt, "Specified symbol size too small for data [844]"); + strcpy(symbol->errtxt, "Specified symbol size too small for data"); codeerr = WARN_INVALID_OPTION; } if((symbol->option_2 == 3) && (mclength > 82)) { /* the user specified 3 columns but the data doesn't fit - go to automatic */ symbol->option_2 = 0; - strcpy(symbol->errtxt, "Specified symbol size too small for data [845]"); + strcpy(symbol->errtxt, "Specified symbol size too small for data"); codeerr = WARN_INVALID_OPTION; } @@ -1038,7 +1038,7 @@ int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[]) /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */ for(loop = 0; loop < strlen(pattern); loop++) { - symbol->encoded_data[i][loop] = pattern[loop]; + if(pattern[loop] == '1') { set_module(symbol, i, loop); } } symbol->row_height[i] = 2; diff --git a/backend/plessey.c b/backend/plessey.c index cec5e987..5579d064 100644 --- a/backend/plessey.c +++ b/backend/plessey.c @@ -47,12 +47,12 @@ int plessey(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 65) { - strcpy(symbol->errtxt, "Input too long [861]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(SSET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [862]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } checkptr = calloc (1, ustrlen(source) * 4 + 8); @@ -109,12 +109,12 @@ int msi_plessey(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 55) { - strcpy(symbol->errtxt, "Input too long [471]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [472]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -147,12 +147,12 @@ int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 55) { - strcpy(symbol->errtxt, "Input too long [473]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [474]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -245,12 +245,12 @@ int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 55) { /* No Entry Stack Smashers! */ - strcpy(symbol->errtxt, "Input too long [475]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if (error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [476]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -402,12 +402,12 @@ int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 55) { - strcpy(symbol->errtxt, "Input too long [477]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [478]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -472,12 +472,12 @@ int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 55) { - strcpy(symbol->errtxt, "Input too long [479]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if (error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [47A]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } diff --git a/backend/png.c b/backend/png.c index fd1741d1..b38c1ce2 100644 --- a/backend/png.c +++ b/backend/png.c @@ -396,7 +396,7 @@ int maxi_png_plot(struct zint_symbol *symbol, int rotate_angle) yposn = row * 9; for(column = 0; column < symbol->width; column++) { xposn = column * 10; - if(symbol->encoded_data[row][column] == '1') { + if(module_is_set(symbol, row, column)) { if((row % 2) == 0) { /* Even (full) row */ draw_hexagon(pixelbuf, image_width, xposn + (scaler * xoffset), yposn + (scaler * yoffset)); @@ -501,7 +501,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) symbol->height = preset_height; } - while(symbol->encoded_data[symbol->rows - 1][comp_offset] != '1') { + while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) { comp_offset++; } @@ -597,7 +597,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) plot_yposn = (int)row_posn; i = 0; - if(symbol->encoded_data[this_row][0] == '1') { + if(module_is_set(symbol, this_row, 0)) { latch = 1; } else { latch = 0; @@ -607,7 +607,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) block_width = 0; do { block_width++; - } while (symbol->encoded_data[this_row][i + block_width] == symbol->encoded_data[this_row][i]); + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); if((addon_latch == 0) && (r == 0) && (i > main_width)) { plot_height = (int)(row_height - 5.0); plot_yposn = (int)(row_posn - 5.0); @@ -718,7 +718,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) block_width = 0; do { block_width++; - } while (symbol->encoded_data[symbol->rows - 1][i + block_width] == symbol->encoded_data[symbol->rows - 1][i]); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if(latch == 1) { /* a bar */ draw_bar(pixelbuf, (i + xoffset - comp_offset) * scaler, block_width * scaler, (4 + (int)yoffset) * scaler, 5 * scaler, image_width, image_height); @@ -737,7 +737,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) block_width = 0; do { block_width++; - } while (symbol->encoded_data[symbol->rows - 1][i + block_width] == symbol->encoded_data[symbol->rows - 1][i]); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if(latch == 1) { /* a bar */ draw_bar(pixelbuf, (i + xoffset - comp_offset) * scaler, block_width * scaler, (4 + (int)yoffset) * scaler, 5 * scaler, image_width, image_height); diff --git a/backend/postal.c b/backend/postal.c index a297575c..cefa6023 100644 --- a/backend/postal.c +++ b/backend/postal.c @@ -67,12 +67,12 @@ int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[]) error_number = 0; if(ustrlen(source) > 38) { - strcpy(symbol->errtxt, "Input too long [401]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [402]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } sum = 0; @@ -116,9 +116,9 @@ int post_plot(struct zint_symbol *symbol, unsigned char source[]) { if(height_pattern[loopey] == 'L') { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); writer += 3; } symbol->row_height[0] = 6; @@ -138,12 +138,12 @@ int planet(struct zint_symbol *symbol, unsigned char source[], char dest[]) error_number = 0; if(ustrlen(source) > 38) { - strcpy(symbol->errtxt, "Input too long [821]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [822]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } sum = 0; @@ -187,9 +187,9 @@ int planet_plot(struct zint_symbol *symbol, unsigned char source[]) { if(height_pattern[loopey] == 'L') { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); writer += 3; } symbol->row_height[0] = 6; @@ -208,12 +208,12 @@ int korea_post(struct zint_symbol *symbol, unsigned char source[]) error_number = 0; h = ustrlen(source); if(h > 6) { - strcpy(symbol->errtxt, "Input too long [771]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [772]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } strcpy(localstr, ""); @@ -255,12 +255,12 @@ int fim(struct zint_symbol *symbol, unsigned char source[]) to_upper(source); if(ustrlen(source) > 1) { - strcpy(symbol->errtxt, "Input too long [491]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(BESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [492]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } lookup(BESET, FIMTable, source[0], dest); @@ -317,12 +317,12 @@ int royal_plot(struct zint_symbol *symbol, unsigned char source[]) to_upper(source); if(ustrlen(source) > 120) { - strcpy(symbol->errtxt, "Input too long [701]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(KRSET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [702]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } check = rm4scc((char*)source, (unsigned char*)height_pattern); @@ -332,12 +332,12 @@ int royal_plot(struct zint_symbol *symbol, unsigned char source[]) { if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '0')) { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '0')) { - symbol->encoded_data[2][writer] = '1'; + set_module(symbol, 2, writer); } writer += 2; } @@ -366,12 +366,12 @@ int kix_code(struct zint_symbol *symbol, unsigned char source[]) to_upper(source); if(ustrlen(source) > 11) { - strcpy(symbol->errtxt, "Input too long [901]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(KRSET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [902]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -392,12 +392,12 @@ int kix_code(struct zint_symbol *symbol, unsigned char source[]) { if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '0')) { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '0')) { - symbol->encoded_data[2][writer] = '1'; + set_module(symbol, 2, writer); } writer += 2; } @@ -447,12 +447,12 @@ int daft_code(struct zint_symbol *symbol, unsigned char source[]) { if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '0')) { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '0')) { - symbol->encoded_data[2][writer] = '1'; + set_module(symbol, 2, writer); } writer += 2; } @@ -476,12 +476,12 @@ int flattermarken(struct zint_symbol *symbol, unsigned char source[]) strcpy(dest, ""); if(ustrlen(source) > 90) { - strcpy(symbol->errtxt, "Input too long [281]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [282]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -570,12 +570,12 @@ int japan_post(struct zint_symbol *symbol, unsigned char source[]) { if((pattern[loopey] == '2') || (pattern[loopey] == '1')) { - symbol->encoded_data[0][writer] = '1'; + set_module(symbol, 0, writer); } - symbol->encoded_data[1][writer] = '1'; + set_module(symbol, 1, writer); if((pattern[loopey] == '3') || (pattern[loopey] == '1')) { - symbol->encoded_data[2][writer] = '1'; + set_module(symbol, 2, writer); } writer += 2; } diff --git a/backend/ps.c b/backend/ps.c index 97299234..90613de3 100644 --- a/backend/ps.c +++ b/backend/ps.c @@ -116,7 +116,7 @@ int ps_plot(struct zint_symbol *symbol) symbol->height = preset_height; } - while(symbol->encoded_data[symbol->rows - 1][comp_offset] != '1') { + while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) { comp_offset++; } @@ -238,7 +238,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TC\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 3.31 * scaler, (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 1.43 * scaler, (37.19 + xoffset) * scaler, (35.60 + yoffset) * scaler); for(r = 0; r < symbol->rows; r++) { for(i = 0; i < symbol->width; i++) { - if(symbol->encoded_data[r][i] == '1') { + if(module_is_set(symbol, r, i)) { /* Dump a hexagon */ my = ((symbol->rows - r - 1)) * 2.135 + 1.43; ay = my + 1.0 + yoffset; @@ -290,7 +290,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); fprintf(feps, "%.2f %.2f ", row_height * scaler, row_posn * scaler); i = 0; - if(symbol->encoded_data[this_row][0] == '1') { + if(module_is_set(symbol, this_row, 0)) { latch = 1; } else { latch = 0; @@ -300,7 +300,7 @@ int ps_plot(struct zint_symbol *symbol) block_width = 0; do { block_width++; - } while (symbol->encoded_data[this_row][i + block_width] == symbol->encoded_data[this_row][i]); + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); if((addon_latch == 0) && (r == 0) && (i > main_width)) { fprintf(feps, "TE\n"); fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); @@ -498,7 +498,7 @@ int ps_plot(struct zint_symbol *symbol) block_width = 0; do { block_width++; - } while (symbol->encoded_data[symbol->rows - 1][i + block_width] == symbol->encoded_data[symbol->rows - 1][i]); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if(latch == 1) { /* a bar */ fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset - comp_offset) * scaler, block_width * scaler); @@ -517,7 +517,7 @@ int ps_plot(struct zint_symbol *symbol) block_width = 0; do { block_width++; - } while (symbol->encoded_data[symbol->rows - 1][i + block_width] == symbol->encoded_data[symbol->rows - 1][i]); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if(latch == 1) { /* a bar */ fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset - comp_offset) * scaler, block_width * scaler); diff --git a/backend/qr.c b/backend/qr.c index c786be98..9b9aeffa 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -71,7 +71,7 @@ int qr_code(struct zint_symbol *symbol, unsigned char source[]) code = encode(symbol->option_1, symbol->option_2, source, kanji); if(code == NULL) { - strcpy(symbol->errtxt, "libqrencode failed to encode the input data [581]"); + strcpy(symbol->errtxt, "libqrencode failed to encode the input data"); return ERROR_ENCODING_PROBLEM; } @@ -80,10 +80,8 @@ int qr_code(struct zint_symbol *symbol, unsigned char source[]) for(i = 0; i < code->width; i++) { for(j = 0; j < code->width; j++) { - if((*(code->data + (i * code->width) + j) & 0x01) == 0) { - symbol->encoded_data[i][j] = '0'; - } else { - symbol->encoded_data[i][j] = '1'; + if((*(code->data + (i * code->width) + j) & 0x01) != 0) { + set_module(symbol, i, j); } } symbol->row_height[i] = 1; @@ -98,7 +96,7 @@ int qr_code(struct zint_symbol *symbol, unsigned char source[]) /* Handler if no QR Encode library is available */ int qr_code(struct zint_symbol *symbol, unsigned char source[]) { - strcpy(symbol->errtxt, "QR Code library not available [580]"); + strcpy(symbol->errtxt, "QR Code library not available"); return ERROR_INVALID_OPTION; } #endif diff --git a/backend/rss.c b/backend/rss.c index 17fce436..077972d3 100644 --- a/backend/rss.c +++ b/backend/rss.c @@ -151,12 +151,12 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) separator_row = 0; if(ustrlen(source) > 13) { - strcpy(symbol->errtxt, "Input too long [291]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [292]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -371,7 +371,7 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) latch = '0'; for(i = 0; i < 46; i++) { for(j = 0; j < total_widths[i]; j++) { - symbol->encoded_data[symbol->rows][writer] = latch; + if(latch == '1') { set_module(symbol, symbol->rows, writer); } writer++; } if(latch == '1') { @@ -384,35 +384,36 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) if(symbol->symbology == BARCODE_RSS14_CC) { /* separator pattern for composite symbol */ for(i = 4; i < 92; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = '1'; - } + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); } } latch = '1'; for(i = 16; i < 32; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = latch; + if(!(module_is_set(symbol, separator_row + 1, i))) { if(latch == '1') { + set_module(symbol, separator_row, i); latch = '0'; } else { + unset_module(symbol, separator_row, i); latch = '1'; } } else { - symbol->encoded_data[separator_row][i] = '0'; + unset_module(symbol, separator_row, i); latch = '1'; } } latch = '1'; for(i = 63; i < 78; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = latch; + if(!(module_is_set(symbol, separator_row + 1, i))) { if(latch == '1') { + set_module(symbol, separator_row, i); latch = '0'; } else { + unset_module(symbol, separator_row, i); latch = '1'; } } else { - symbol->encoded_data[separator_row][i] = '0'; + unset_module(symbol, separator_row, i); latch = '1'; } } @@ -455,7 +456,11 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) latch = '0'; for(i = 0; i < 23; i++) { for(j = 0; j < total_widths[i]; j++) { - symbol->encoded_data[symbol->rows][writer] = latch; + if(latch == '1') { + set_module(symbol, symbol->rows, writer); + } else { + unset_module(symbol, symbol->rows, writer); + } writer++; } if(latch == '1') { @@ -464,18 +469,22 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) latch = '1'; } } - symbol->encoded_data[symbol->rows][writer] = '1'; - symbol->encoded_data[symbol->rows][writer + 1] = '0'; + set_module(symbol, symbol->rows, writer); + unset_module(symbol, symbol->rows, writer + 1); symbol->row_height[symbol->rows] = 5; /* bottom row */ symbol->rows = symbol->rows + 2; - symbol->encoded_data[symbol->rows][0] = '1'; - symbol->encoded_data[symbol->rows][1] = '0'; + set_module(symbol, symbol->rows, 0); + unset_module(symbol, symbol->rows, 1); writer = 0; latch = '1'; for(i = 23; i < 46; i++) { for(j = 0; j < total_widths[i]; j++) { - symbol->encoded_data[symbol->rows][writer + 2] = latch; + if(latch == '1') { + set_module(symbol, symbol->rows, writer + 2); + } else { + unset_module(symbol, symbol->rows, writer + 2); + } writer++; } if(latch == '1') { @@ -487,13 +496,13 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) symbol->row_height[symbol->rows] = 7; /* separator pattern */ for(i = 4; i < 46; i++) { - if(symbol->encoded_data[symbol->rows - 2][i] == symbol->encoded_data[symbol->rows][i]) { - if(symbol->encoded_data[symbol->rows - 2][i] == '0') { - symbol->encoded_data[symbol->rows - 1][i] = '1'; + if(module_is_set(symbol, symbol->rows - 2, i) == module_is_set(symbol, symbol->rows, i)) { + if(!(module_is_set(symbol, symbol->rows - 2, i))) { + set_module(symbol, symbol->rows - 1, i); } } else { - if(symbol->encoded_data[symbol->rows - 1][i - 1] != '1') { - symbol->encoded_data[symbol->rows - 1][i] = '1'; + if(!(module_is_set(symbol, symbol->rows - 1, i - 1))) { + set_module(symbol, symbol->rows - 1, i); } } } @@ -501,21 +510,22 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) if(symbol->symbology == BARCODE_RSS14STACK_CC) { /* separator pattern for composite symbol */ for(i = 4; i < 46; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = '1'; + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); } } latch = '1'; for(i = 16; i < 32; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = latch; + if(!(module_is_set(symbol, separator_row + 1, i))) { if(latch == '1') { + set_module(symbol, separator_row, i); latch = '0'; } else { + unset_module(symbol, separator_row, i); latch = '1'; } } else { - symbol->encoded_data[separator_row][i] = '0'; + unset_module(symbol, separator_row, i); latch = '1'; } } @@ -530,7 +540,7 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) latch = '0'; for(i = 0; i < 23; i++) { for(j = 0; j < total_widths[i]; j++) { - symbol->encoded_data[symbol->rows][writer] = latch; + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } writer++; } if(latch == '1') { @@ -539,17 +549,17 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) latch = '1'; } } - symbol->encoded_data[symbol->rows][writer] = '1'; - symbol->encoded_data[symbol->rows][writer + 1] = '0'; + set_module(symbol, symbol->rows, writer); + unset_module(symbol, symbol->rows, writer + 1); /* bottom row */ symbol->rows = symbol->rows + 4; - symbol->encoded_data[symbol->rows][0] = '1'; - symbol->encoded_data[symbol->rows][1] = '0'; + set_module(symbol, symbol->rows, 0); + unset_module(symbol, symbol->rows, 1); writer = 0; latch = '1'; for(i = 23; i < 46; i++) { for(j = 0; j < total_widths[i]; j++) { - symbol->encoded_data[symbol->rows][writer + 2] = latch; + if(latch == '1') { set_module(symbol, symbol->rows, writer + 2); } else { unset_module(symbol, symbol->rows, writer + 2); } writer++; } if(latch == '1') { @@ -560,47 +570,49 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) } /* middle separator */ for(i = 5; i < 46; i += 2) { - symbol->encoded_data[symbol->rows - 2][i] = '1'; + set_module(symbol, symbol->rows - 2, i); } symbol->row_height[symbol->rows - 2] = 1; /* top separator */ for(i = 4; i < 46; i++) { - if(symbol->encoded_data[symbol->rows - 4][i] != '1') { - symbol->encoded_data[symbol->rows - 3][i] = '1'; + if(!(module_is_set(symbol, symbol->rows - 4, i))) { + set_module(symbol, symbol->rows - 3, i); } } latch = '1'; for(i = 17; i < 33; i++) { - if(symbol->encoded_data[symbol->rows - 4][i] != '1') { - symbol->encoded_data[symbol->rows - 3][i] = latch; + if(!(module_is_set(symbol, symbol->rows - 4, i))) { if(latch == '1') { + set_module(symbol, symbol->rows - 3, i); latch = '0'; } else { + unset_module(symbol, symbol->rows - 3, i); latch = '1'; } } else { - symbol->encoded_data[symbol->rows - 3][i] = '0'; + unset_module(symbol, symbol->rows - 3, i); latch = '1'; } } symbol->row_height[symbol->rows - 3] = 1; /* bottom separator */ for(i = 4; i < 46; i++) { - if(symbol->encoded_data[symbol->rows][i] != '1') { - symbol->encoded_data[symbol->rows - 1][i] = '1'; + if(!(module_is_set(symbol, symbol->rows, i))) { + set_module(symbol, symbol->rows - 1, i); } } latch = '1'; for(i = 16; i < 32; i++) { - if(symbol->encoded_data[symbol->rows][i] != '1') { - symbol->encoded_data[symbol->rows - 1][i] = latch; + if(!(module_is_set(symbol, symbol->rows, i))) { if(latch == '1') { + set_module(symbol, symbol->rows - 1, i); latch = '0'; } else { + unset_module(symbol, symbol->rows - 1, i); latch = '1'; } } else { - symbol->encoded_data[symbol->rows - 1][i] = '0'; + unset_module(symbol, symbol->rows - 1, i); latch = '1'; } } @@ -609,21 +621,22 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) if(symbol->symbology == BARCODE_RSS14_OMNI_CC) { /* separator pattern for composite symbol */ for(i = 4; i < 46; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = '1'; + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); } } latch = '1'; for(i = 16; i < 32; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = latch; + if(!(module_is_set(symbol, separator_row + 1, i))) { if(latch == '1') { + set_module(symbol, separator_row, i); latch = '0'; } else { + unset_module(symbol, separator_row, i); latch = '1'; } } else { - symbol->encoded_data[separator_row][i] = '0'; + unset_module(symbol, separator_row, i); latch = '1'; } } @@ -648,12 +661,12 @@ int rsslimited(struct zint_symbol *symbol, unsigned char source[]) separator_row = 0; if(ustrlen(source) > 13) { - strcpy(symbol->errtxt, "Input too long [301]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } error_number = is_sane(NESET, source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [302]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -846,7 +859,7 @@ int rsslimited(struct zint_symbol *symbol, unsigned char source[]) latch = '0'; for(i = 0; i < 46; i++) { for(j = 0; j < total_widths[i]; j++) { - symbol->encoded_data[symbol->rows][writer] = latch; + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } writer++; } if(latch == '1') { @@ -861,8 +874,8 @@ int rsslimited(struct zint_symbol *symbol, unsigned char source[]) /* add separator pattern if composite symbol */ if(symbol->symbology == BARCODE_RSS_LTD_CC) { for(i = 4; i < 70; i++) { - if(symbol->encoded_data[separator_row + 1][i] != '1') { - symbol->encoded_data[separator_row][i] = '1'; + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); } } } @@ -1190,7 +1203,7 @@ int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_str if((source[i] < '0') || (source[i] > '9')) { if((source[i] != '[') && (source[i] != ']')) { /* Something is wrong */ - strcpy(symbol->errtxt, "Invalid characters in input data [314]"); + strcpy(symbol->errtxt, "Invalid characters in input data"); return ERROR_INVALID_DATA; } } @@ -1561,7 +1574,7 @@ int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_str if(latch == 1) { /* Invalid characters in input data */ - strcpy(symbol->errtxt, "Invalid characters in input data [315]"); + strcpy(symbol->errtxt, "Invalid characters in input data"); return ERROR_INVALID_DATA; } @@ -1794,7 +1807,7 @@ int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_str } if(strlen(binary_string) > 252) { - strcpy(symbol->errtxt, "Input too long [316]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } @@ -1995,7 +2008,7 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) latch = '0'; for(i = 0; i < pattern_width; i++) { for(j = 0; j < elements[i]; j++) { - symbol->encoded_data[symbol->rows][writer] = latch; + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } writer++; } if(latch == '1') { @@ -2008,20 +2021,20 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) symbol->rows = symbol->rows + 1; if(symbol->symbology == BARCODE_RSS_EXP_CC) { for(j = 4; j < (symbol->width - 4); j++) { - if(symbol->encoded_data[separator_row + 1][j] == '1') { - symbol->encoded_data[separator_row][j] = '0'; + if(module_is_set(symbol, separator_row + 1, j)) { + unset_module(symbol, separator_row, j); } else { - symbol->encoded_data[separator_row][j] = '1'; + set_module(symbol, separator_row, j); } } /* finder bar adjustment */ for(j = 0; j < (writer / 49); j++) { k = (49 * j) + 18; for(i = 0; i < 15; i++) { - if((symbol->encoded_data[separator_row + 1][i + k - 1] == '0') && - (symbol->encoded_data[separator_row + 1][i + k] == '0') && - (symbol->encoded_data[separator_row][i + k - 1] == '1')) { - symbol->encoded_data[separator_row][i + k] = '0'; + if((!(module_is_set(symbol, separator_row + 1, i + k - 1))) && + (!(module_is_set(symbol, separator_row + 1, i + k))) && + module_is_set(symbol, separator_row, i + k - 1)) { + unset_module(symbol, separator_row, i + k); } } } @@ -2133,7 +2146,7 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) writer = 0; for(i = 0; i < elements_in_sub; i++) { for(j = 0; j < sub_elements[i]; j++) { - symbol->encoded_data[symbol->rows][writer] = latch; + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } writer++; } if(latch == '1') { @@ -2147,15 +2160,15 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) if(current_row != 1) { /* middle separator pattern (above current row) */ for(j = 5; j < (49 * symbol->option_2); j += 2) { - symbol->encoded_data[symbol->rows - 2][j] = '1'; + set_module(symbol, symbol->rows - 2, j); } symbol->row_height[symbol->rows - 2] = 1; /* bottom separator pattern (above current row) */ for(j = 4; j < (writer - 4); j++) { - if(symbol->encoded_data[symbol->rows][j] == '1') { - symbol->encoded_data[symbol->rows - 1][j] = '0'; + if(module_is_set(symbol, symbol->rows, j)) { + unset_module(symbol, symbol->rows - 1, j); } else { - symbol->encoded_data[symbol->rows - 1][j] = '1'; + set_module(symbol, symbol->rows - 1, j); } } symbol->row_height[symbol->rows - 1] = 1; @@ -2168,18 +2181,18 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) } if(left_to_right) { for(i = 0; i < 15; i++) { - if((symbol->encoded_data[symbol->rows][i + k - 1] == '0') && - (symbol->encoded_data[symbol->rows][i + k] == '0') && - (symbol->encoded_data[symbol->rows - 1][i + k - 1] == '1')) { - symbol->encoded_data[symbol->rows - 1][i + k] = '0'; + if((!(module_is_set(symbol, symbol->rows, i + k - 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows - 1, i + k - 1)) { + unset_module(symbol, symbol->rows - 1, i + k); } } } else { for(i = 14; i >= 0; i--) { - if((symbol->encoded_data[symbol->rows][i + k + 1] == '0') && - (symbol->encoded_data[symbol->rows][i + k] == '0') && - (symbol->encoded_data[symbol->rows - 1][i + k + 1] == '1')) { - symbol->encoded_data[symbol->rows - 1][i + k] = '0'; + if((!(module_is_set(symbol, symbol->rows, i + k + 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows - 1, i + k + 1)) { + unset_module(symbol, symbol->rows - 1, i + k); } } } @@ -2189,10 +2202,10 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) if(current_row != stack_rows) { /* top separator pattern (below current row) */ for(j = 4; j < (writer - 4); j++) { - if(symbol->encoded_data[symbol->rows][j] == '1') { - symbol->encoded_data[symbol->rows + 1][j] = '0'; + if(module_is_set(symbol, symbol->rows, j)) { + unset_module(symbol, symbol->rows + 1, j); } else { - symbol->encoded_data[symbol->rows + 1][j] = '1'; + set_module(symbol, symbol->rows + 1, j); } } symbol->row_height[symbol->rows + 1] = 1; @@ -2201,18 +2214,18 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) k = (49 * j) + 18; if(left_to_right) { for(i = 0; i < 15; i++) { - if((symbol->encoded_data[symbol->rows][i + k - 1] == '0') && - (symbol->encoded_data[symbol->rows][i + k] == '0') && - (symbol->encoded_data[symbol->rows + 1][i + k - 1] == '1')) { - symbol->encoded_data[symbol->rows + 1][i + k] = '0'; + if((!(module_is_set(symbol, symbol->rows, i + k - 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows + 1, i + k - 1)) { + unset_module(symbol, symbol->rows + 1, i + k); } } } else{ for(i = 14; i >= 0; i--) { - if((symbol->encoded_data[symbol->rows][i + k + 1] == '0') && - (symbol->encoded_data[symbol->rows][i + k] == '0') && - (symbol->encoded_data[symbol->rows + 1][i + k + 1] == '1')) { - symbol->encoded_data[symbol->rows + 1][i + k] = '0'; + if((!(module_is_set(symbol, symbol->rows, i + k + 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows + 1, i + k + 1)) { + unset_module(symbol, symbol->rows + 1, i + k); } } } @@ -2224,20 +2237,20 @@ int rssexpanded(struct zint_symbol *symbol, unsigned char source[]) symbol->rows = symbol->rows - 3; if(symbol->symbology == BARCODE_RSS_EXPSTACK_CC) { for(j = 4; j < (symbol->width - 4); j++) { - if(symbol->encoded_data[separator_row + 1][j] == '1') { - symbol->encoded_data[separator_row][j] = '0'; + if(module_is_set(symbol, separator_row + 1, j)) { + unset_module(symbol, separator_row, j); } else { - symbol->encoded_data[separator_row][j] = '1'; + set_module(symbol, separator_row, j); } } /* finder bar adjustment */ for(j = 0; j < reader; j++) { k = (49 * j) + 18; for(i = 0; i < 15; i++) { - if((symbol->encoded_data[separator_row + 1][i + k - 1] == '0') && - (symbol->encoded_data[separator_row + 1][i + k] == '0') && - (symbol->encoded_data[separator_row][i + k - 1] == '1')) { - symbol->encoded_data[separator_row][i + k] = '0'; + if((!(module_is_set(symbol, separator_row + 1, i + k - 1))) && + (!(module_is_set(symbol, separator_row + 1, i + k))) && + module_is_set(symbol, separator_row, i + k - 1)) { + unset_module(symbol, separator_row, i + k); } } } diff --git a/backend/svg.c b/backend/svg.c index ef37724b..15873c93 100644 --- a/backend/svg.c +++ b/backend/svg.c @@ -112,7 +112,7 @@ int svg_plot(struct zint_symbol *symbol) symbol->height = preset_height; } - while(symbol->encoded_data[symbol->rows - 1][comp_offset] != '1') { + while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) { comp_offset++; } @@ -222,7 +222,7 @@ int svg_plot(struct zint_symbol *symbol) fprintf(fsvg, " \n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 1.43 * scaler, symbol->bgcolour); for(r = 0; r < symbol->rows; r++) { for(i = 0; i < symbol->width; i++) { - if(symbol->encoded_data[r][i] == '1') { + if(module_is_set(symbol, r, i)) { /* Dump a hexagon */ my = r * 2.135 + 1.43; ay = my + 1.0 + yoffset; @@ -271,7 +271,7 @@ int svg_plot(struct zint_symbol *symbol) row_posn += yoffset; i = 0; - if(symbol->encoded_data[this_row][0] == '1') { + if(module_is_set(symbol, this_row, 0)) { latch = 1; } else { latch = 0; @@ -281,7 +281,7 @@ int svg_plot(struct zint_symbol *symbol) block_width = 0; do { block_width++; - } while (symbol->encoded_data[this_row][i + block_width] == symbol->encoded_data[this_row][i]); + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); if((addon_latch == 0) && (r == 0) && (i > main_width)) { addon_text_posn = 9.0 + symbol->border_width; addon_latch = 1; @@ -423,7 +423,7 @@ int svg_plot(struct zint_symbol *symbol) block_width = 0; do { block_width++; - } while (symbol->encoded_data[symbol->rows - 1][i + block_width] == symbol->encoded_data[symbol->rows - 1][i]); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if(latch == 1) { /* a bar */ fprintf(fsvg, " \n", (i + xoffset - comp_offset) * scaler, row_posn, block_width * scaler, 5.0 * scaler); @@ -442,7 +442,7 @@ int svg_plot(struct zint_symbol *symbol) block_width = 0; do { block_width++; - } while (symbol->encoded_data[symbol->rows - 1][i + block_width] == symbol->encoded_data[symbol->rows - 1][i]); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if(latch == 1) { /* a bar */ fprintf(fsvg, " \n", (i + xoffset - comp_offset) * scaler, row_posn, block_width * scaler, 5.0 * scaler); diff --git a/backend/telepen.c b/backend/telepen.c index e23dc02c..4a6740d7 100644 --- a/backend/telepen.c +++ b/backend/telepen.c @@ -62,14 +62,14 @@ int telepen(struct zint_symbol *symbol, unsigned char source[]) count = 0; if(ustrlen(source) > 30) { - strcpy(symbol->errtxt, "Input too long [321]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } for(i = 0; i < ustrlen(source); i++) { if(source[i] > 127) { /* Cannot encode extended ASCII */ - strcpy(symbol->errtxt, "Invalid characters in input data [322]"); + strcpy(symbol->errtxt, "Invalid characters in input data"); return ERROR_INVALID_DATA; } } @@ -115,13 +115,13 @@ int telepen_num(struct zint_symbol *symbol, unsigned char source[]) count = 0; if(input_length > 60) { - strcpy(symbol->errtxt, "Input too long [871]"); + strcpy(symbol->errtxt, "Input too long"); return ERROR_TOO_LONG; } to_upper(local_source); error_number = is_sane(NASET, local_source); if(error_number == ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "Invalid characters in data [872]"); + strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } @@ -146,7 +146,7 @@ int telepen_num(struct zint_symbol *symbol, unsigned char source[]) for (i=0; i < input_length; i+=2) { if(local_source[i] == 'X') { - strcpy(symbol->errtxt, "Invalid position of X in Telepen data [873]"); + strcpy(symbol->errtxt, "Invalid position of X in Telepen data"); return ERROR_INVALID_DATA; } diff --git a/backend/upcean.c b/backend/upcean.c index 3d03e29e..f8f6e0b2 100644 --- a/backend/upcean.c +++ b/backend/upcean.c @@ -650,23 +650,23 @@ int eanx(struct zint_symbol *symbol, unsigned char source[]) case BARCODE_EANX_CC: switch(ustrlen(first_part)) { /* Adds vertical separator bars according to ISO/IEC 24723 section 11.4 */ - case 7: symbol->encoded_data[symbol->rows][1] = '1'; - symbol->encoded_data[symbol->rows][67] = '1'; - symbol->encoded_data[symbol->rows + 1][0] = '1'; - symbol->encoded_data[symbol->rows + 1][68] = '1'; - symbol->encoded_data[symbol->rows + 2][1] = '1'; - symbol->encoded_data[symbol->rows + 2][67] = '1'; + case 7: set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 67); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 68); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 1, 67); symbol->row_height[symbol->rows] = 2; symbol->row_height[symbol->rows + 1] = 2; symbol->row_height[symbol->rows + 2] = 2; symbol->rows += 3; ean8(symbol, first_part, (char*)dest); break; - case 12:symbol->encoded_data[symbol->rows][1] = '1'; - symbol->encoded_data[symbol->rows][95] = '1'; - symbol->encoded_data[symbol->rows + 1][0] = '1'; - symbol->encoded_data[symbol->rows + 1][96] = '1'; - symbol->encoded_data[symbol->rows + 2][1] = '1'; - symbol->encoded_data[symbol->rows + 2][95] = '1'; + case 12:set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 95); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 96); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 2, 95); symbol->row_height[symbol->rows] = 2; symbol->row_height[symbol->rows + 1] = 2; symbol->row_height[symbol->rows + 2] = 2; @@ -685,12 +685,12 @@ int eanx(struct zint_symbol *symbol, unsigned char source[]) break; case BARCODE_UPCA_CC: if(ustrlen(first_part) == 11) { - symbol->encoded_data[symbol->rows][1] = '1'; - symbol->encoded_data[symbol->rows][95] = '1'; - symbol->encoded_data[symbol->rows + 1][0] = '1'; - symbol->encoded_data[symbol->rows + 1][96] = '1'; - symbol->encoded_data[symbol->rows + 2][1] = '1'; - symbol->encoded_data[symbol->rows + 2][95] = '1'; + set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 95); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 96); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 2, 95); symbol->row_height[symbol->rows] = 2; symbol->row_height[symbol->rows + 1] = 2; symbol->row_height[symbol->rows + 2] = 2; @@ -711,12 +711,12 @@ int eanx(struct zint_symbol *symbol, unsigned char source[]) break; case BARCODE_UPCE_CC: if((ustrlen(first_part) >= 6) && (ustrlen(first_part) <= 7)) { - symbol->encoded_data[symbol->rows][1] = '1'; - symbol->encoded_data[symbol->rows][51] = '1'; - symbol->encoded_data[symbol->rows + 1][0] = '1'; - symbol->encoded_data[symbol->rows + 1][52] = '1'; - symbol->encoded_data[symbol->rows + 2][1] = '1'; - symbol->encoded_data[symbol->rows + 2][51] = '1'; + set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 51); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 52); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 2, 51); symbol->row_height[symbol->rows] = 2; symbol->row_height[symbol->rows + 1] = 2; symbol->row_height[symbol->rows + 2] = 2; @@ -761,9 +761,13 @@ int eanx(struct zint_symbol *symbol, unsigned char source[]) case BARCODE_UPCE_CC: /* shift the symbol to the right one space to allow for separator bars */ for(i = (symbol->width + 1); i >= 1; i--) { - symbol->encoded_data[symbol->rows - 1][i] = symbol->encoded_data[symbol->rows - 1][i - 1]; + if(module_is_set(symbol, symbol->rows - 1, i - 1)) { + set_module(symbol, symbol->rows - 1, i); + } else { + unset_module(symbol, symbol->rows - 1, i); + } } - symbol->encoded_data[symbol->rows - 1][0] = '0'; + unset_module(symbol, symbol->rows - 1, 0); symbol->width += 2; break; } diff --git a/backend/zint.h b/backend/zint.h index 27f7a307..b10d79dd 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -44,8 +44,8 @@ struct zint_symbol { int rows; int width; char primary[100]; - char encoded_data[178][1000]; - int row_height[155]; + unsigned char encoded_data[178][143]; + int row_height[178]; /* Largest symbol is 177x177 QR Code */ char errtxt[100]; char nullchar; }; diff --git a/backend_qt4/qzint.cpp b/backend_qt4/qzint.cpp index 25725984..aec7621b 100644 --- a/backend_qt4/qzint.cpp +++ b/backend_qt4/qzint.cpp @@ -254,6 +254,27 @@ bool QZint::save_to_file(QString filename) if(error == 0) { return true; } else { return false; } } +int QZint::module_set(int y_coord, int x_coord) +{ + int x_char, x_sub, result; + + x_char = x_coord / 7; + x_sub = x_coord % 7; + result = 0; + + switch(x_sub) { + case 0: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x01) != 0) { result = 1; } break; + case 1: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x02) != 0) { result = 1; } break; + case 2: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x04) != 0) { result = 1; } break; + case 3: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x08) != 0) { result = 1; } break; + case 4: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x10) != 0) { result = 1; } break; + case 5: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x20) != 0) { result = 1; } break; + case 6: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x40) != 0) { result = 1; } break; + } + + return result; +} + void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode mode) { encode(); @@ -375,7 +396,7 @@ void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode } } - while(m_zintSymbol->encoded_data[m_zintSymbol->rows - 1][comp_offset] != '1') { + while(!(module_set(m_zintSymbol->rows - 1, comp_offset))) { comp_offset++; } xoffset = comp_offset; @@ -425,7 +446,7 @@ void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode { for (int c=0;cwidth;c++) { - if (m_zintSymbol->encoded_data[r][c]=='1') + if (module_set(r, c)) { qreal col=(qreal)c*(maxi_width+1)+(r%2)*((maxi_width+1)/2); qreal row=(qreal)r*(maxi_width+1)*0.868; @@ -456,15 +477,15 @@ void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode for (int row=0;rowrows;row++) { for (int i=0;iwidth;i++) { - if (m_zintSymbol->encoded_data[row][i]!='0') + if (module_set(row, i)) { - int ed=m_zintSymbol->encoded_data[row][i]; + int ed = module_set(row, i); int linewidth=0; for (int j=i;jwidth;j++,linewidth++) - if (ed!=m_zintSymbol->encoded_data[row][j]) + if (ed != module_set(row, j)) break; QColor color; - switch(ed) + /* switch(ed) { case 'R': color=qRgb(0xff,0x00,0x00); @@ -490,10 +511,10 @@ void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode color=qRgb(0xff,0xff,0x00); break; - default: + default: */ color=m_fgColor; - break; - } + /* break; + } */ if(!((i > main_width) && (row == m_zintSymbol->rows - 1))) { painter.fillRect(i,y,linewidth,m_zintSymbol->row_height[row],QBrush(color)); } else { @@ -574,7 +595,7 @@ void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode block_width = 0; do { block_width++; - } while (m_zintSymbol->encoded_data[m_zintSymbol->rows - 1][j + block_width] == m_zintSymbol->encoded_data[m_zintSymbol->rows - 1][j]); + } while (module_set(m_zintSymbol->rows - 1, j + block_width) == module_set(m_zintSymbol->rows - 1, j)); if(latch == true) { /* a bar */ painter.fillRect(j + xoffset - comp_offset,m_zintSymbol->height,block_width,5,QBrush(m_fgColor)); @@ -593,7 +614,7 @@ void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode block_width = 0; do { block_width++; - } while (m_zintSymbol->encoded_data[m_zintSymbol->rows - 1][j + block_width] == m_zintSymbol->encoded_data[m_zintSymbol->rows - 1][j]); + } while (module_set(m_zintSymbol->rows - 1, j + block_width) == module_set(m_zintSymbol->rows - 1, j)); if(latch == true) { /* a bar */ painter.fillRect(j + xoffset - comp_offset,m_zintSymbol->height,block_width,5,QBrush(m_fgColor)); diff --git a/backend_qt4/qzint.h b/backend_qt4/qzint.h index 130604d9..2eeb7046 100644 --- a/backend_qt4/qzint.h +++ b/backend_qt4/qzint.h @@ -89,6 +89,7 @@ public: bool save_to_file(QString filename); private: void encode(); + int module_set(int y_coords, int x_coords); private: int m_symbol;