This commit is contained in:
oxygenic 2012-12-30 14:55:05 +01:00
parent bf2dbe7494
commit 4c45bac1ae
8 changed files with 211 additions and 199 deletions

2
.gitignore vendored
View File

@ -1,4 +1,6 @@
build/ build/
*~
*.[ao]
*.swp *.swp
*.swo *.swo
.directory .directory

View File

@ -10,7 +10,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set (ZINT_VERSION_MAJOR 2) set (ZINT_VERSION_MAJOR 2)
set (ZINT_VERSION_MINOR 4) set (ZINT_VERSION_MINOR 4)
set (ZINT_VERSION_RELEASE 2) set (ZINT_VERSION_RELEASE 3)
set (ZINT_VERSION "${ZINT_VERSION_MAJOR}.${ZINT_VERSION_MINOR}.${ZINT_VERSION_RELEASE}" ) set (ZINT_VERSION "${ZINT_VERSION_MAJOR}.${ZINT_VERSION_MINOR}.${ZINT_VERSION_RELEASE}" )
add_definitions (-DZINT_VERSION=\"${ZINT_VERSION}\" -Wall) add_definitions (-DZINT_VERSION=\"${ZINT_VERSION}\" -Wall)
@ -30,8 +30,8 @@ endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
IF(APPLE) IF(APPLE)
IF (UNIVERSAL) # TODO: make univeral binary IF (UNIVERSAL) # TODO: make univeral binary
IF(NOT ZINT_HAS_BEEN_RUN_BEFORE and UNIVERAL) IF(NOT ZINT_HAS_BEEN_RUN_BEFORE and UNIVERAL)
IF(EXISTS /Developer/SDKs/MacOSX10.5.sdk OR EXISTS /SDKs/MacOSX10.5.sdk) IF(EXISTS /Developer/SDKs/MacOSX10.5.sdk OR EXISTS /SDKs/MacOSX10.5.sdk)
SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING "Build architectures for OSX" FORCE) SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING "Build architectures for OSX" FORCE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden -Wl -single_module " CACHE STRING "Flags used by the compiler during all build types." FORCE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden -Wl -single_module " CACHE STRING "Flags used by the compiler during all build types." FORCE)

11
INSTALL
View File

@ -53,8 +53,9 @@ Studio is more involved! Full instructions are currently not ready for
publication but will be placed on the project website as soon as possible. publication but will be placed on the project website as soon as possible.
Mac OSX: Mac OSX:
Efforts are currently under way to ease compiling on OSX using the CMake It is possible to compile Zint using methods similar to those
method. It may be possible to compile Zint using methods similar to those given above, but this has not been thoroughly tested yet. An install
given above, but this has not been thoroughly tested yet. If you have any binary for OSX is also in development. As of feb 2012 the easiest way to
success with compiling Zint on OSX then please get in touch. An install get zint install on Mac OSX is to use HomeBrew with:
binary for OSX is also in development.
brew install zint

17
README
View File

@ -59,24 +59,20 @@ Visual Studio. Correct bug preventing compilation without PNG support.
Version 2.4.2: Version 2.4.2:
Fix bugs in batch processing - this now works from the command line. Fix bugs in batch processing - this now works from the command line.
Version 2.4.3:
Some Windows-only fixes and changes
CONTACT ME CONTACT ME
---------- ----------
The home of libzint is: The home of libzint is:
<http://www.sourceforge.net/projects/zint> <http://www.sourceforge.net/projects/zint>
and the home for Zint documentation is:
<http://www.zint.org.uk>
For feature requests or bug reports please join the mailing list at For feature requests or bug reports please join the mailing list at
<https://lists.sourceforge.net/lists/listinfo/zint-barcode> <https://lists.sourceforge.net/lists/listinfo/zint-barcode>
or send an e-mail to
<zint-barcode@lists.sourceforge.net>
BEFORE POSTING TO THIS LIST BEFORE POSTING TO THIS LIST
--------------------------- ---------------------------
Please note the following points... Please note the following points...
@ -97,8 +93,3 @@ Please note the following points...
* Please remember that Zint is developed by volunteers - don't be surprised * Please remember that Zint is developed by volunteers - don't be surprised
if we are unable to help you or if it takes a long time to answer your if we are unable to help you or if it takes a long time to answer your
questions. questions.
Thanks for your interest in libzint.
Happy encoding.
Robin.

View File

@ -97,7 +97,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
} }
} }
} }
/* Look for double character encoding possibilities */ /* Look for double character encoding possibilities */
i = 0; i = 0;
do{ do{
@ -108,7 +108,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
mapshorten(charmap, typemap, i, maplength); mapshorten(charmap, typemap, i, maplength);
maplength--; maplength--;
} }
if(((charmap[i] == 302) && (charmap[i + 1] == 1)) && ((typemap[i] == 24) && (typemap[i + 1] == 23))) { if(((charmap[i] == 302) && (charmap[i + 1] == 1)) && ((typemap[i] == 24) && (typemap[i + 1] == 23))) {
/* . SP combination */ /* . SP combination */
charmap[i] = 3; charmap[i] = 3;
@ -116,7 +116,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
mapshorten(charmap, typemap, i, maplength); mapshorten(charmap, typemap, i, maplength);
maplength--; maplength--;
} }
if(((charmap[i] == 301) && (charmap[i + 1] == 1)) && ((typemap[i] == 24) && (typemap[i + 1] == 23))) { if(((charmap[i] == 301) && (charmap[i + 1] == 1)) && ((typemap[i] == 24) && (typemap[i + 1] == 23))) {
/* , SP combination */ /* , SP combination */
charmap[i] = 4; charmap[i] = 4;
@ -124,7 +124,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
mapshorten(charmap, typemap, i, maplength); mapshorten(charmap, typemap, i, maplength);
maplength--; maplength--;
} }
if(((charmap[i] == 21) && (charmap[i + 1] == 1)) && ((typemap[i] == PUNC) && (typemap[i + 1] == 23))) { if(((charmap[i] == 21) && (charmap[i + 1] == 1)) && ((typemap[i] == PUNC) && (typemap[i + 1] == 23))) {
/* : SP combination */ /* : SP combination */
charmap[i] = 5; charmap[i] = 5;
@ -132,10 +132,10 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
mapshorten(charmap, typemap, i, maplength); mapshorten(charmap, typemap, i, maplength);
maplength--; maplength--;
} }
i++; i++;
}while(i < (maplength - 1)); }while(i < (maplength - 1));
/* look for blocks of characters which use the same table */ /* look for blocks of characters which use the same table */
blocks = 1; blocks = 1;
blockmap[0][0] = typemap[0]; blockmap[0][0] = typemap[0];
@ -156,7 +156,6 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
if(blockmap[0][0] & 8) { blockmap[0][0] = 8; } if(blockmap[0][0] & 8) { blockmap[0][0] = 8; }
if(blocks > 1) { if(blocks > 1) {
/* look for adjacent blocks which can use the same table (left to right search) */ /* look for adjacent blocks which can use the same table (left to right search) */
for(i = 1; i < blocks; i++) { for(i = 1; i < blocks; i++) {
if(blockmap[0][i] & blockmap[0][i - 1]) { if(blockmap[0][i] & blockmap[0][i - 1]) {
@ -183,7 +182,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
if(blockmap[0][i] & 2) { blockmap[0][i] = 2; } if(blockmap[0][i] & 2) { blockmap[0][i] = 2; }
if(blockmap[0][i] & 1) { blockmap[0][i] = 1; } if(blockmap[0][i] & 1) { blockmap[0][i] = 1; }
} }
/* Combine blocks of the same type */ /* Combine blocks of the same type */
i = 0; i = 0;
do{ do{
@ -199,7 +198,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
} }
} while (i < blocks); } while (i < blocks);
} }
/* Put the adjusted block data back into typemap */ /* Put the adjusted block data back into typemap */
j = 0; j = 0;
for(i = 0; i < blocks; i++) { for(i = 0; i < blocks; i++) {
@ -214,10 +213,10 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
} }
j += blockmap[1][i]; j += blockmap[1][i];
} }
/* Don't shift an initial capital letter */ /* Don't shift an initial capital letter */
if(typemap[0] == 65) { typemap[0] = 1; }; if(typemap[0] == 65) { typemap[0] = 1; };
/* Problem characters (those that appear in different tables with different values) can now be resolved into their tables */ /* Problem characters (those that appear in different tables with different values) can now be resolved into their tables */
for(i = 0; i < maplength; i++) { for(i = 0; i < maplength; i++) {
if((charmap[i] >= 300) && (charmap[i] < 400)) { if((charmap[i] >= 300) && (charmap[i] < 400)) {
@ -248,7 +247,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
} }
} }
*binary_string = '\0'; *binary_string = '\0';
curtable = UPPER; /* start with UPPER table */ curtable = UPPER; /* start with UPPER table */
lasttable = UPPER; lasttable = UPPER;
for(i = 0; i < maplength; i++) { for(i = 0; i < maplength; i++) {
@ -568,20 +567,20 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
newtable = BINARY; newtable = BINARY;
break; break;
} }
bytes = 0; bytes = 0;
do{ do{
bytes++; bytes++;
}while(typemap[i + (bytes - 1)] == BINARY); }while(typemap[i + (bytes - 1)] == BINARY);
bytes--; bytes--;
if(bytes > 2079) { if(bytes > 2079) {
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
} }
if(bytes > 31) { /* Put 00000 followed by 11-bit number of bytes less 31 */ if(bytes > 31) { /* Put 00000 followed by 11-bit number of bytes less 31 */
int adjusted; int adjusted;
adjusted = bytes - 31; adjusted = bytes - 31;
concat(binary_string, "00000"); concat(binary_string, "00000");
if(adjusted & 0x400) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } if(adjusted & 0x400) { concat(binary_string, "1"); } else { concat(binary_string, "0"); }
@ -603,7 +602,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
if(bytes & 0x01) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } if(bytes & 0x01) { concat(binary_string, "1"); } else { concat(binary_string, "0"); }
} }
if(debug) printf("(%d bytes) ", bytes); if(debug) printf("(%d bytes) ", bytes);
break; break;
} }
} }
@ -644,13 +643,13 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
} }
} }
if(debug) printf("\n"); if(debug) printf("\n");
if(strlen(binary_string) > 14970) { if(strlen(binary_string) > 14970) {
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
} }
return 0; return 0;
} }
@ -680,7 +679,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
strcpy(symbol->errtxt, "Cannot encode in GS1 and Reader Initialisation mode at the same time"); strcpy(symbol->errtxt, "Cannot encode in GS1 and Reader Initialisation mode at the same time");
return ERROR_INVALID_OPTION; return ERROR_INVALID_OPTION;
} }
switch(symbol->input_mode) { switch(symbol->input_mode) {
case DATA_MODE: case DATA_MODE:
case GS1_MODE: case GS1_MODE:
@ -702,25 +701,25 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
} }
err_code = aztec_text_process(local_source, length, binary_string, gs1); err_code = aztec_text_process(local_source, length, binary_string, gs1);
if(err_code != 0) { if(err_code != 0) {
strcpy(symbol->errtxt, "Input too long or too many extended ASCII characters"); strcpy(symbol->errtxt, "Input too long or too many extended ASCII characters");
return err_code; return err_code;
} }
if(!((symbol->option_1 >= -1) && (symbol->option_1 <= 4))) { if(!((symbol->option_1 >= -1) && (symbol->option_1 <= 4))) {
strcpy(symbol->errtxt, "Invalid error correction level - using default instead"); strcpy(symbol->errtxt, "Invalid error correction level - using default instead");
err_code = WARN_INVALID_OPTION; err_code = WARN_INVALID_OPTION;
symbol->option_1 = -1; symbol->option_1 = -1;
} }
ecc_level = symbol->option_1; ecc_level = symbol->option_1;
if((ecc_level == -1) || (ecc_level == 0)) { if((ecc_level == -1) || (ecc_level == 0)) {
ecc_level = 2; ecc_level = 2;
} }
data_length = strlen(binary_string); data_length = strlen(binary_string);
layers = 0; /* Keep compiler happy! */ layers = 0; /* Keep compiler happy! */
@ -796,42 +795,42 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
} }
break; break;
} }
if(layers == 0) { /* Couldn't find a symbol which fits the data */ if(layers == 0) { /* Couldn't find a symbol which fits the data */
strcpy(symbol->errtxt, "Input too long (too many bits for selected ECC)"); strcpy(symbol->errtxt, "Input too long (too many bits for selected ECC)");
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
} }
/* Determine codeword bitlength - Table 3 */ /* Determine codeword bitlength - Table 3 */
codeword_size = 6; /* if (layers <= 2) */ codeword_size = 6; /* if (layers <= 2) */
if((layers >= 3) && (layers <= 8)) { codeword_size = 8; } if((layers >= 3) && (layers <= 8)) { codeword_size = 8; }
if((layers >= 9) && (layers <= 22)) { codeword_size = 10; } if((layers >= 9) && (layers <= 22)) { codeword_size = 10; }
if(layers >= 23) { codeword_size = 12; } if(layers >= 23) { codeword_size = 12; }
j = 0; i = 0; j = 0; i = 0;
do { do {
if((j + 1) % codeword_size == 0) { if((j + 1) % codeword_size == 0) {
/* Last bit of codeword */ /* Last bit of codeword */
int t, done = 0; int t, done = 0;
count = 0; count = 0;
/* Discover how many '1's in current codeword */ /* Discover how many '1's in current codeword */
for(t = 0; t < (codeword_size - 1); t++) { for(t = 0; t < (codeword_size - 1); t++) {
if(binary_string[(i - (codeword_size - 1)) + t] == '1') count++; if(binary_string[(i - (codeword_size - 1)) + t] == '1') count++;
} }
if(count == (codeword_size - 1)) { if(count == (codeword_size - 1)) {
adjusted_string[j] = '0'; adjusted_string[j] = '0';
j++; j++;
done = 1; done = 1;
} }
if(count == 0) { if(count == 0) {
adjusted_string[j] = '1'; adjusted_string[j] = '1';
j++; j++;
done = 1; done = 1;
} }
if(done == 0) { if(done == 0) {
adjusted_string[j] = binary_string[i]; adjusted_string[j] = binary_string[i];
j++; j++;
@ -845,10 +844,10 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
adjusted_string[j] = '\0'; adjusted_string[j] = '\0';
adjusted_length = strlen(adjusted_string); adjusted_length = strlen(adjusted_string);
adjustment_size = adjusted_length - data_length; adjustment_size = adjusted_length - data_length;
/* Add padding */ /* Add padding */
remainder = adjusted_length % codeword_size; remainder = adjusted_length % codeword_size;
padbits = codeword_size - remainder; padbits = codeword_size - remainder;
if(padbits == codeword_size) { padbits = 0; } if(padbits == codeword_size) { padbits = 0; }
@ -856,7 +855,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
concat(adjusted_string, "1"); concat(adjusted_string, "1");
} }
adjusted_length = strlen(adjusted_string); adjusted_length = strlen(adjusted_string);
count = 0; count = 0;
for(i = (adjusted_length - codeword_size); i < adjusted_length; i++) { for(i = (adjusted_length - codeword_size); i < adjusted_length; i++) {
if(adjusted_string[i] == '1') { count++; } if(adjusted_string[i] == '1') { count++; }
@ -872,7 +871,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
printf("\n"); printf("\n");
} }
} }
} while(adjusted_length > data_maxsize); } while(adjusted_length > data_maxsize);
/* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s /* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s
means that the binary string has had to be lengthened beyond the maximum number of bits that can means that the binary string has had to be lengthened beyond the maximum number of bits that can
@ -900,31 +899,31 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
if((layers >= 3) && (layers <= 8)) { codeword_size = 8; } if((layers >= 3) && (layers <= 8)) { codeword_size = 8; }
if((layers >= 9) && (layers <= 22)) { codeword_size = 10; } if((layers >= 9) && (layers <= 22)) { codeword_size = 10; }
if(layers >= 23) { codeword_size = 12; } if(layers >= 23) { codeword_size = 12; }
j = 0; i = 0; j = 0; i = 0;
do { do {
if((j + 1) % codeword_size == 0) { if((j + 1) % codeword_size == 0) {
/* Last bit of codeword */ /* Last bit of codeword */
int t, done = 0; int t, done = 0;
count = 0; count = 0;
/* Discover how many '1's in current codeword */ /* Discover how many '1's in current codeword */
for(t = 0; t < (codeword_size - 1); t++) { for(t = 0; t < (codeword_size - 1); t++) {
if(binary_string[(i - (codeword_size - 1)) + t] == '1') count++; if(binary_string[(i - (codeword_size - 1)) + t] == '1') count++;
} }
if(count == (codeword_size - 1)) { if(count == (codeword_size - 1)) {
adjusted_string[j] = '0'; adjusted_string[j] = '0';
j++; j++;
done = 1; done = 1;
} }
if(count == 0) { if(count == 0) {
adjusted_string[j] = '1'; adjusted_string[j] = '1';
j++; j++;
done = 1; done = 1;
} }
if(done == 0) { if(done == 0) {
adjusted_string[j] = binary_string[i]; adjusted_string[j] = binary_string[i];
j++; j++;
@ -937,9 +936,9 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
} while (i <= (data_length + 1)); } while (i <= (data_length + 1));
adjusted_string[j] = '\0'; adjusted_string[j] = '\0';
adjusted_length = strlen(adjusted_string); adjusted_length = strlen(adjusted_string);
remainder = adjusted_length % codeword_size; remainder = adjusted_length % codeword_size;
padbits = codeword_size - remainder; padbits = codeword_size - remainder;
if(padbits == codeword_size) { padbits = 0; } if(padbits == codeword_size) { padbits = 0; }
@ -947,7 +946,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
concat(adjusted_string, "1"); concat(adjusted_string, "1");
} }
adjusted_length = strlen(adjusted_string); adjusted_length = strlen(adjusted_string);
count = 0; count = 0;
for(i = (adjusted_length - codeword_size); i < adjusted_length; i++) { for(i = (adjusted_length - codeword_size); i < adjusted_length; i++) {
if(adjusted_string[i] == '1') { count++; } if(adjusted_string[i] == '1') { count++; }
@ -965,7 +964,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
strcpy(symbol->errtxt, "Data too long for specified Aztec Code symbol size"); strcpy(symbol->errtxt, "Data too long for specified Aztec Code symbol size");
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
} }
if(debug) { if(debug) {
printf("Codewords:\n"); printf("Codewords:\n");
for(i = 0; i < (adjusted_length / codeword_size); i++) { for(i = 0; i < (adjusted_length / codeword_size); i++) {
@ -977,20 +976,20 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
} }
} }
if(reader && (layers > 22)) { if(reader && (layers > 22)) {
strcpy(symbol->errtxt, "Data too long for reader initialisation symbol"); strcpy(symbol->errtxt, "Data too long for reader initialisation symbol");
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
} }
data_blocks = adjusted_length / codeword_size; data_blocks = adjusted_length / codeword_size;
if(compact) { if(compact) {
ecc_blocks = AztecCompactSizes[layers - 1] - data_blocks; ecc_blocks = AztecCompactSizes[layers - 1] - data_blocks;
} else { } else {
ecc_blocks = AztecSizes[layers - 1] - data_blocks; ecc_blocks = AztecSizes[layers - 1] - data_blocks;
} }
if(debug) { if(debug) {
printf("Generating a "); printf("Generating a ");
if(compact) { printf("compact"); } else { printf("full-size"); } if(compact) { printf("compact"); } else { printf("full-size"); }
@ -1010,7 +1009,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
/* Copy across data into separate integers */ /* Copy across data into separate integers */
memset(data_part,0,(data_blocks + 2)*sizeof(int)); memset(data_part,0,(data_blocks + 2)*sizeof(int));
memset(ecc_part,0,(ecc_blocks + 2)*sizeof(int)); memset(ecc_part,0,(ecc_blocks + 2)*sizeof(int));
/* Split into codewords and calculate reed-colomon error correction codes */ /* Split into codewords and calculate reed-colomon error correction codes */
switch(codeword_size) { switch(codeword_size) {
case 6: case 6:
@ -1126,15 +1125,15 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
rs_free(); rs_free();
break; break;
} }
/* Invert the data so that actual data is on the outside and reed-solomon on the inside */ /* Invert the data so that actual data is on the outside and reed-solomon on the inside */
memset(bit_pattern,'0',20045); memset(bit_pattern,'0',20045);
total_bits = (data_blocks + ecc_blocks) * codeword_size; total_bits = (data_blocks + ecc_blocks) * codeword_size;
for(i = 0; i < total_bits; i++) { for(i = 0; i < total_bits; i++) {
bit_pattern[i] = adjusted_string[total_bits - i - 1]; bit_pattern[i] = adjusted_string[total_bits - i - 1];
} }
/* Now add the symbol descriptor */ /* Now add the symbol descriptor */
memset(desc_data,0,4); memset(desc_data,0,4);
memset(desc_ecc,0,6); memset(desc_ecc,0,6);
@ -1183,7 +1182,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
descriptor[16] = '\0'; descriptor[16] = '\0';
if(debug) printf("Mode Message = %s\n", descriptor); if(debug) printf("Mode Message = %s\n", descriptor);
} }
/* Split into 4-bit codewords */ /* Split into 4-bit codewords */
for(i = 0; i < 4; i++) { for(i = 0; i < 4; i++) {
if(descriptor[i * 4] == '1') { desc_data[i] += 8; } if(descriptor[i * 4] == '1') { desc_data[i] += 8; }
@ -1216,7 +1215,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
} }
} }
rs_free(); rs_free();
/* Merge descriptor with the rest of the symbol */ /* Merge descriptor with the rest of the symbol */
for(i = 0; i < 40; i++) { for(i = 0; i < 40; i++) {
if(compact) { if(compact) {
@ -1228,7 +1227,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
/* Plot all of the data into the symbol in pre-defined spiral pattern */ /* Plot all of the data into the symbol in pre-defined spiral pattern */
if(compact) { if(compact) {
for(y = AztecCompactOffset[layers - 1]; y < (27 - AztecCompactOffset[layers - 1]); y++) { for(y = AztecCompactOffset[layers - 1]; y < (27 - AztecCompactOffset[layers - 1]); y++) {
for(x = AztecCompactOffset[layers - 1]; x < (27 - AztecCompactOffset[layers - 1]); x++) { for(x = AztecCompactOffset[layers - 1]; x < (27 - AztecCompactOffset[layers - 1]); x++) {
if(CompactAztecMap[(y * 27) + x] == 1) { if(CompactAztecMap[(y * 27) + x] == 1) {
@ -1245,7 +1244,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
symbol->rows = 27 - (2 * AztecCompactOffset[layers - 1]); symbol->rows = 27 - (2 * AztecCompactOffset[layers - 1]);
symbol->width = 27 - (2 * AztecCompactOffset[layers - 1]); symbol->width = 27 - (2 * AztecCompactOffset[layers - 1]);
} else { } else {
for(y = AztecOffset[layers - 1]; y < (151 - AztecOffset[layers - 1]); y++) { for(y = AztecOffset[layers - 1]; y < (151 - AztecOffset[layers - 1]); y++) {
for(x = AztecOffset[layers - 1]; x < (151 - AztecOffset[layers - 1]); x++) { for(x = AztecOffset[layers - 1]; x < (151 - AztecOffset[layers - 1]); x++) {
if(AztecMap[(y * 151) + x] == 1) { if(AztecMap[(y * 151) + x] == 1) {
@ -1262,7 +1261,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
symbol->rows = 151 - (2 * AztecOffset[layers - 1]); symbol->rows = 151 - (2 * AztecOffset[layers - 1]);
symbol->width = 151 - (2 * AztecOffset[layers - 1]); symbol->width = 151 - (2 * AztecOffset[layers - 1]);
} }
return err_code; return err_code;
} }
@ -1294,12 +1293,12 @@ int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length)
case 1: input_value = ctoi(source[0]); case 1: input_value = ctoi(source[0]);
break; break;
} }
if(input_value > 255) { if(input_value > 255) {
strcpy(symbol->errtxt, "Input too large"); strcpy(symbol->errtxt, "Input too large");
return ERROR_INVALID_DATA; return ERROR_INVALID_DATA;
} }
strcpy(binary_string, ""); strcpy(binary_string, "");
if(input_value & 0x80) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } if(input_value & 0x80) { concat(binary_string, "1"); } else { concat(binary_string, "0"); }
if(input_value & 0x40) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } if(input_value & 0x40) { concat(binary_string, "1"); } else { concat(binary_string, "0"); }
@ -1319,12 +1318,12 @@ int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length)
if(binary_string[(i * 4) + 2] == '1') { data_codewords[i] += 2; } if(binary_string[(i * 4) + 2] == '1') { data_codewords[i] += 2; }
if(binary_string[(i * 4) + 3] == '1') { data_codewords[i] += 1; } if(binary_string[(i * 4) + 3] == '1') { data_codewords[i] += 1; }
} }
rs_init_gf(0x13); rs_init_gf(0x13);
rs_init_code(5, 1); rs_init_code(5, 1);
rs_encode(2, data_codewords, ecc_codewords); rs_encode(2, data_codewords, ecc_codewords);
rs_free(); rs_free();
strcpy(binary_string, ""); strcpy(binary_string, "");
for(i = 0; i < 5; i++) { for(i = 0; i < 5; i++) {
@ -1353,6 +1352,6 @@ int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length)
} }
symbol->rows = 11; symbol->rows = 11;
symbol->width = 11; symbol->width = 11;
return 0; return 0;
} }

View File

@ -49,7 +49,7 @@ void horiz(struct zint_symbol *symbol, int row_no, int full)
void central_finder(struct zint_symbol *symbol, int start_row, int row_count, int full_rows) void central_finder(struct zint_symbol *symbol, int start_row, int row_count, int full_rows)
{ {
int i; int i;
for(i = 0; i < row_count; i++) { for(i = 0; i < row_count; i++) {
if(i < full_rows) { if(i < full_rows) {
horiz(symbol, start_row + (i * 2), 1); horiz(symbol, start_row + (i * 2), 1);
@ -106,18 +106,18 @@ int isedi(unsigned char input)
int dq4bi(unsigned char source[], int sourcelen, int position) int dq4bi(unsigned char source[], int sourcelen, int position)
{ {
int i; int i;
for(i = position; isedi(source[position + i]) && ((position + i) < sourcelen); i++); for(i = position; isedi(source[position + i]) && ((position + i) < sourcelen); i++);
if((position + i) == sourcelen) { if((position + i) == sourcelen) {
/* Reached end of input */ /* Reached end of input */
return 0; return 0;
} }
if (source[position + i - 1] == 13) { return 1; } if (source[position + i - 1] == 13) { return 1; }
if (source[position + i - 1] == '*') { return 1; } if (source[position + i - 1] == '*') { return 1; }
if (source[position + i - 1] == '>') { return 1; } if (source[position + i - 1] == '>') { return 1; }
return 0; return 0;
} }
@ -126,7 +126,7 @@ int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int
float ascii_count, c40_count, text_count, edi_count, byte_count; float ascii_count, c40_count, text_count, edi_count, byte_count;
char reduced_char; char reduced_char;
int done, best_scheme, best_count, sp; int done, best_scheme, best_count, sp;
/* Step J */ /* Step J */
if(current_mode == C1_ASCII) { if(current_mode == C1_ASCII) {
ascii_count = 0.0; ascii_count = 0.0;
@ -141,18 +141,18 @@ int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int
edi_count = 2.0; edi_count = 2.0;
byte_count = 3.0; byte_count = 3.0;
} }
switch(current_mode) { switch(current_mode) {
case C1_C40: c40_count = 0.0; break; case C1_C40: c40_count = 0.0; break;
case C1_TEXT: text_count = 0.0; break; case C1_TEXT: text_count = 0.0; break;
case C1_BYTE: byte_count = 0.0; break; case C1_BYTE: byte_count = 0.0; break;
case C1_EDI: edi_count = 0.0; break; case C1_EDI: edi_count = 0.0; break;
} }
for(sp = position; (sp < sourcelen) && (sp <= (position + 8)); sp++) { for(sp = position; (sp < sourcelen) && (sp <= (position + 8)); sp++) {
if(source[sp] <= 127) { reduced_char = source[sp]; } else { reduced_char = source[sp] - 127; } if(source[sp] <= 127) { reduced_char = source[sp]; } else { reduced_char = source[sp] - 127; }
/* Step L */ /* Step L */
if((source[sp] >= '0') && (source[sp] <= '9')) { if((source[sp] >= '0') && (source[sp] <= '9')) {
ascii_count += 0.5; ascii_count += 0.5;
@ -164,7 +164,7 @@ int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int
ascii_count += 1.0; ascii_count += 1.0;
} }
} }
/* Step M */ /* Step M */
done = 0; done = 0;
if(reduced_char == ' ') { c40_count += (2.0 / 3.0); done = 1; } if(reduced_char == ' ') { c40_count += (2.0 / 3.0); done = 1; }
@ -172,7 +172,7 @@ int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int
if((reduced_char >= 'A') && (reduced_char <= 'Z')) { c40_count += (2.0 / 3.0); done = 1; } if((reduced_char >= 'A') && (reduced_char <= 'Z')) { c40_count += (2.0 / 3.0); done = 1; }
if(source[sp] > 127) { c40_count += (4.0 / 3.0); } if(source[sp] > 127) { c40_count += (4.0 / 3.0); }
if(done == 0) { c40_count += (4.0 / 3.0); } if(done == 0) { c40_count += (4.0 / 3.0); }
/* Step N */ /* Step N */
done = 0; done = 0;
if(reduced_char == ' ') { text_count += (2.0 / 3.0); done = 1; } if(reduced_char == ' ') { text_count += (2.0 / 3.0); done = 1; }
@ -196,52 +196,52 @@ int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int
edi_count += (10.0 / 3.0); edi_count += (10.0 / 3.0);
} }
} }
/* Step P */ /* Step P */
if(gs1 && (source[sp] == '[')) { byte_count += 3.0; } else { byte_count += 1.0; } if(gs1 && (source[sp] == '[')) { byte_count += 3.0; } else { byte_count += 1.0; }
} }
ascii_count = froundup(ascii_count); ascii_count = froundup(ascii_count);
c40_count = froundup(c40_count); c40_count = froundup(c40_count);
text_count = froundup(text_count); text_count = froundup(text_count);
edi_count = froundup(edi_count); edi_count = froundup(edi_count);
byte_count = froundup(byte_count); byte_count = froundup(byte_count);
best_scheme = C1_ASCII; best_scheme = C1_ASCII;
if(sp == sourcelen) { if(sp == sourcelen) {
/* Step K */ /* Step K */
best_count = edi_count; best_count = edi_count;
if(text_count <= best_count) { if(text_count <= best_count) {
best_count = text_count; best_count = text_count;
best_scheme = C1_TEXT; best_scheme = C1_TEXT;
} }
if(c40_count <= best_count) { if(c40_count <= best_count) {
best_count = c40_count; best_count = c40_count;
best_scheme = C1_C40; best_scheme = C1_C40;
} }
if(ascii_count <= best_count) { if(ascii_count <= best_count) {
best_count = ascii_count; best_count = ascii_count;
best_scheme = C1_ASCII; best_scheme = C1_ASCII;
} }
if(byte_count <= best_count) { if(byte_count <= best_count) {
best_count = byte_count; best_count = byte_count;
best_scheme = C1_BYTE; best_scheme = C1_BYTE;
} }
} else { } else {
/* Step Q */ /* Step Q */
if(((edi_count + 1.0 <= ascii_count) && (edi_count + 1.0 <= c40_count)) && if(((edi_count + 1.0 <= ascii_count) && (edi_count + 1.0 <= c40_count)) &&
((edi_count + 1.0 <= byte_count) && (edi_count + 1.0 <= text_count))) { ((edi_count + 1.0 <= byte_count) && (edi_count + 1.0 <= text_count))) {
best_scheme = C1_EDI; best_scheme = C1_EDI;
} }
if((c40_count + 1.0 <= ascii_count) && (c40_count + 1.0 <= text_count)) { if((c40_count + 1.0 <= ascii_count) && (c40_count + 1.0 <= text_count)) {
if(c40_count < edi_count) { if(c40_count < edi_count) {
best_scheme = C1_C40; best_scheme = C1_C40;
} else { } else {
@ -255,17 +255,17 @@ int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int
} }
} }
} }
if(((text_count + 1.0 <= ascii_count) && (text_count + 1.0 <= c40_count)) && if(((text_count + 1.0 <= ascii_count) && (text_count + 1.0 <= c40_count)) &&
((text_count + 1.0 <= byte_count) && (text_count + 1.0 <= edi_count))) { ((text_count + 1.0 <= byte_count) && (text_count + 1.0 <= edi_count))) {
best_scheme = C1_TEXT; best_scheme = C1_TEXT;
} }
if(((ascii_count + 1.0 <= byte_count) && (ascii_count + 1.0 <= c40_count)) && if(((ascii_count + 1.0 <= byte_count) && (ascii_count + 1.0 <= c40_count)) &&
((ascii_count + 1.0 <= text_count) && (ascii_count + 1.0 <= edi_count))) { ((ascii_count + 1.0 <= text_count) && (ascii_count + 1.0 <= edi_count))) {
best_scheme = C1_ASCII; best_scheme = C1_ASCII;
} }
if(((byte_count + 1.0 <= ascii_count) && (byte_count + 1.0 <= c40_count)) && if(((byte_count + 1.0 <= ascii_count) && (byte_count + 1.0 <= c40_count)) &&
((byte_count + 1.0 <= text_count) && (byte_count + 1.0 <= edi_count))) { ((byte_count + 1.0 <= text_count) && (byte_count + 1.0 <= edi_count))) {
best_scheme = C1_BYTE; best_scheme = C1_BYTE;
@ -286,7 +286,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
int edi_buffer[6], edi_p; int edi_buffer[6], edi_p;
char decimal_binary[40]; char decimal_binary[40];
int byte_start = 0; int byte_start = 0;
sp = 0; sp = 0;
tp = 0; tp = 0;
latch = 0; latch = 0;
@ -297,14 +297,14 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
memset(edi_buffer, 0, 6); memset(edi_buffer, 0, 6);
edi_p = 0; edi_p = 0;
strcpy(decimal_binary, ""); strcpy(decimal_binary, "");
if(symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; } if(symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; }
if(gs1) { target[tp] = 232; tp++; } /* FNC1 */ if(gs1) { target[tp] = 232; tp++; } /* FNC1 */
/* Step A */ /* Step A */
current_mode = C1_ASCII; current_mode = C1_ASCII;
next_mode = C1_ASCII; next_mode = C1_ASCII;
do { do {
if(current_mode != next_mode) { if(current_mode != next_mode) {
/* Change mode */ /* Change mode */
@ -318,7 +318,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
if((current_mode != C1_BYTE) && (next_mode == C1_BYTE)) { byte_start = tp; } if((current_mode != C1_BYTE) && (next_mode == C1_BYTE)) { byte_start = tp; }
current_mode = next_mode; current_mode = next_mode;
if(current_mode == C1_ASCII) { /* Step B - ASCII encodation */ if(current_mode == C1_ASCII) { /* Step B - ASCII encodation */
next_mode = C1_ASCII; next_mode = C1_ASCII;
@ -341,7 +341,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
for(i = 0; i < 13; i++) { for(i = 0; i < 13; i++) {
if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; }
} }
if (j == 13) { if (j == 13) {
latch = 0; latch = 0;
for(i = sp + 13; i < length; i++) { for(i = sp + 13; i < length; i++) {
@ -354,7 +354,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
} }
} }
} }
if(next_mode == C1_ASCII) { /* Step B3 */ if(next_mode == C1_ASCII) { /* Step B3 */
if(istwodigits(source, sp) && ((sp + 1) != length)) { if(istwodigits(source, sp) && ((sp + 1) != length)) {
target[tp] = (10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130; target[tp] = (10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130;
@ -382,7 +382,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
for(i = 0; i < 7; i++) { for(i = 0; i < 7; i++) {
if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; }
} }
if (j == 7) { if (j == 7) {
latch = 0; latch = 0;
for(i = sp + 7; i < length; i++) { for(i = sp + 7; i < length; i++) {
@ -402,7 +402,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
/* Step B6 */ /* Step B6 */
next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1);
if(next_mode == C1_ASCII) { if(next_mode == C1_ASCII) {
if(source[sp] > 127) { if(source[sp] > 127) {
/* Step B7 */ /* Step B7 */
@ -421,10 +421,10 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
} }
} }
} }
if(current_mode == C1_C40) { /* Step C - C40 encodation */ if(current_mode == C1_C40) { /* Step C - C40 encodation */
int shift_set, value, done = 0, latch = 0; int shift_set, value, done = 0, latch = 0;
next_mode = C1_C40; next_mode = C1_C40;
if(c40_p == 0) { if(c40_p == 0) {
if((length - sp) >= 12) { if((length - sp) >= 12) {
@ -459,12 +459,12 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
next_mode = C1_ASCII; done = 1; next_mode = C1_ASCII; done = 1;
} }
} }
if(!(done)) { if(!(done)) {
next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1);
} }
} }
if(next_mode != C1_C40) { if(next_mode != C1_C40) {
target[tp] = 255; tp++; /* Unlatch */ target[tp] = 255; tp++; /* Unlatch */
} else { } else {
@ -477,24 +477,24 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
shift_set = c40_shift[source[sp]]; shift_set = c40_shift[source[sp]];
value = c40_value[source[sp]]; value = c40_value[source[sp]];
} }
if(gs1 && (source[sp] == '[')) { if(gs1 && (source[sp] == '[')) {
shift_set = 2; shift_set = 2;
value = 27; /* FNC1 */ value = 27; /* FNC1 */
} }
if(shift_set != 0) { if(shift_set != 0) {
c40_buffer[c40_p] = shift_set - 1; c40_p++; c40_buffer[c40_p] = shift_set - 1; c40_p++;
} }
c40_buffer[c40_p] = value; c40_p++; c40_buffer[c40_p] = value; c40_p++;
if(c40_p >= 3) { if(c40_p >= 3) {
int iv; int iv;
iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1;
target[tp] = iv / 256; tp++; target[tp] = iv / 256; tp++;
target[tp] = iv % 256; tp++; target[tp] = iv % 256; tp++;
c40_buffer[0] = c40_buffer[3]; c40_buffer[0] = c40_buffer[3];
c40_buffer[1] = c40_buffer[4]; c40_buffer[1] = c40_buffer[4];
c40_buffer[2] = c40_buffer[5]; c40_buffer[2] = c40_buffer[5];
@ -506,10 +506,10 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
sp++; sp++;
} }
} }
if(current_mode == C1_TEXT) { /* Step D - Text encodation */ if(current_mode == C1_TEXT) { /* Step D - Text encodation */
int shift_set, value, done = 0, latch = 0; int shift_set, value, done = 0, latch = 0;
next_mode = C1_TEXT; next_mode = C1_TEXT;
if(text_p == 0) { if(text_p == 0) {
if((length - sp) >= 12) { if((length - sp) >= 12) {
@ -544,12 +544,12 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
next_mode = C1_ASCII; done = 1; next_mode = C1_ASCII; done = 1;
} }
} }
if(!(done)) { if(!(done)) {
next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1);
} }
} }
if(next_mode != C1_TEXT) { if(next_mode != C1_TEXT) {
target[tp] = 255; tp++; /* Unlatch */ target[tp] = 255; tp++; /* Unlatch */
} else { } else {
@ -562,24 +562,24 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
shift_set = text_shift[source[sp]]; shift_set = text_shift[source[sp]];
value = text_value[source[sp]]; value = text_value[source[sp]];
} }
if(gs1 && (source[sp] == '[')) { if(gs1 && (source[sp] == '[')) {
shift_set = 2; shift_set = 2;
value = 27; /* FNC1 */ value = 27; /* FNC1 */
} }
if(shift_set != 0) { if(shift_set != 0) {
text_buffer[text_p] = shift_set - 1; text_p++; text_buffer[text_p] = shift_set - 1; text_p++;
} }
text_buffer[text_p] = value; text_p++; text_buffer[text_p] = value; text_p++;
if(text_p >= 3) { if(text_p >= 3) {
int iv; int iv;
iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1;
target[tp] = iv / 256; tp++; target[tp] = iv / 256; tp++;
target[tp] = iv % 256; tp++; target[tp] = iv % 256; tp++;
text_buffer[0] = text_buffer[3]; text_buffer[0] = text_buffer[3];
text_buffer[1] = text_buffer[4]; text_buffer[1] = text_buffer[4];
text_buffer[2] = text_buffer[5]; text_buffer[2] = text_buffer[5];
@ -591,7 +591,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
sp++; sp++;
} }
} }
if(current_mode == C1_EDI) { /* Step E - EDI Encodation */ if(current_mode == C1_EDI) { /* Step E - EDI Encodation */
int value = 0,latch = 0; int value = 0,latch = 0;
@ -629,12 +629,12 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
next_mode = C1_ASCII; next_mode = C1_ASCII;
} }
} }
if(!((isedi(source[sp]) && isedi(source[sp + 1])) && isedi(source[sp + 2]))) { if(!((isedi(source[sp]) && isedi(source[sp + 1])) && isedi(source[sp + 2]))) {
next_mode = C1_ASCII; next_mode = C1_ASCII;
} }
} }
if(next_mode != C1_EDI) { if(next_mode != C1_EDI) {
target[tp] = 255; tp++; /* Unlatch */ target[tp] = 255; tp++; /* Unlatch */
} else { } else {
@ -644,16 +644,16 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
if(source[sp] == ' ') { value = 3; } if(source[sp] == ' ') { value = 3; }
if((source[sp] >= '0') && (source[sp] <= '9')) { value = source[sp] - '0' + 4; } if((source[sp] >= '0') && (source[sp] <= '9')) { value = source[sp] - '0' + 4; }
if((source[sp] >= 'A') && (source[sp] <= 'Z')) { value = source[sp] - 'A' + 14; } if((source[sp] >= 'A') && (source[sp] <= 'Z')) { value = source[sp] - 'A' + 14; }
edi_buffer[edi_p] = value; edi_p++; edi_buffer[edi_p] = value; edi_p++;
if(edi_p >= 3) { if(edi_p >= 3) {
int iv; int iv;
iv = (1600 * edi_buffer[0]) + (40 * edi_buffer[1]) + (edi_buffer[2]) + 1; iv = (1600 * edi_buffer[0]) + (40 * edi_buffer[1]) + (edi_buffer[2]) + 1;
target[tp] = iv / 256; tp++; target[tp] = iv / 256; tp++;
target[tp] = iv % 256; tp++; target[tp] = iv % 256; tp++;
edi_buffer[0] = edi_buffer[3]; edi_buffer[0] = edi_buffer[3];
edi_buffer[1] = edi_buffer[4]; edi_buffer[1] = edi_buffer[4];
edi_buffer[2] = edi_buffer[5]; edi_buffer[2] = edi_buffer[5];
@ -665,12 +665,12 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
sp++; sp++;
} }
} }
if(current_mode == C1_DECIMAL) { /* Step F - Decimal encodation */ if(current_mode == C1_DECIMAL) { /* Step F - Decimal encodation */
int value, decimal_count, data_left; int value, decimal_count, data_left;
next_mode = C1_DECIMAL; next_mode = C1_DECIMAL;
data_left = length - sp; data_left = length - sp;
decimal_count = 0; decimal_count = 0;
@ -688,9 +688,9 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
int bits_left_in_byte, target_count; int bits_left_in_byte, target_count;
int sub_target; int sub_target;
/* Finish Decimal mode and go back to ASCII */ /* Finish Decimal mode and go back to ASCII */
concat(decimal_binary, "111111"); /* Unlatch */ concat(decimal_binary, "111111"); /* Unlatch */
target_count = 3; target_count = 3;
if(strlen(decimal_binary) <= 16) { target_count = 2; } if(strlen(decimal_binary) <= 16) { target_count = 2; }
if(strlen(decimal_binary) <= 8) { target_count = 1; } if(strlen(decimal_binary) <= 8) { target_count = 1; }
@ -714,11 +714,11 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
concat(decimal_binary, "1111"); concat(decimal_binary, "1111");
} }
} }
if(bits_left_in_byte == 6) { if(bits_left_in_byte == 6) {
concat(decimal_binary, "01"); concat(decimal_binary, "01");
} }
/* Binary buffer is full - transfer to target */ /* Binary buffer is full - transfer to target */
if(target_count >= 1) { if(target_count >= 1) {
sub_target = 0; sub_target = 0;
@ -756,7 +756,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
if(decimal_binary[23] == '1') { sub_target += 1; } if(decimal_binary[23] == '1') { sub_target += 1; }
target[tp] = sub_target; tp++; target[tp] = sub_target; tp++;
} }
next_mode = C1_ASCII; next_mode = C1_ASCII;
} else { } else {
/* There are three digits - convert the value to binary */ /* There are three digits - convert the value to binary */
@ -775,11 +775,11 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
sp+= 3; sp+= 3;
} }
if(strlen(decimal_binary) >= 24) { if(strlen(decimal_binary) >= 24) {
int target1 = 0, target2 = 0, target3 = 0; int target1 = 0, target2 = 0, target3 = 0;
char temp_binary[40]; char temp_binary[40];
/* Binary buffer is full - transfer to target */ /* Binary buffer is full - transfer to target */
if(decimal_binary[0] == '1') { target1 += 128; } if(decimal_binary[0] == '1') { target1 += 128; }
if(decimal_binary[1] == '1') { target1 += 64; } if(decimal_binary[1] == '1') { target1 += 64; }
@ -808,7 +808,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
target[tp] = target1; tp++; target[tp] = target1; tp++;
target[tp] = target2; tp++; target[tp] = target2; tp++;
target[tp] = target3; tp++; target[tp] = target3; tp++;
strcpy(temp_binary, ""); strcpy(temp_binary, "");
if(strlen(decimal_binary) > 24) { if(strlen(decimal_binary) > 24) {
for(i = 0; i <= (strlen(decimal_binary) - 24); i++) { for(i = 0; i <= (strlen(decimal_binary) - 24); i++) {
@ -818,10 +818,10 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
} }
} }
} }
if(current_mode == C1_BYTE) { if(current_mode == C1_BYTE) {
next_mode = C1_BYTE; next_mode = C1_BYTE;
if(gs1 && (source[sp] == '[')) { if(gs1 && (source[sp] == '[')) {
next_mode = C1_ASCII; next_mode = C1_ASCII;
} else { } else {
@ -829,7 +829,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1);
} }
} }
if(next_mode != C1_BYTE) { if(next_mode != C1_BYTE) {
/* Insert byte field length */ /* Insert byte field length */
if((tp - byte_start) <= 249) { if((tp - byte_start) <= 249) {
@ -852,18 +852,18 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
sp++; sp++;
} }
} }
if(tp > 1480) { if(tp > 1480) {
/* Data is too large for symbol */ /* Data is too large for symbol */
strcpy(symbol->errtxt, "Input data too long"); strcpy(symbol->errtxt, "Input data too long");
return 0; return 0;
} }
} while (sp < length); } while (sp < length);
/* Empty buffers */ /* Empty buffers */
if(c40_p == 2) { if(c40_p == 2) {
int iv; int iv;
c40_buffer[2] = 1; c40_buffer[2] = 1;
iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1;
target[tp] = iv / 256; tp++; target[tp] = iv / 256; tp++;
@ -872,7 +872,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
} }
if(c40_p == 1) { if(c40_p == 1) {
int iv; int iv;
c40_buffer[1] = 1; c40_buffer[1] = 1;
c40_buffer[2] = 31; /* Pad */ c40_buffer[2] = 31; /* Pad */
iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1;
@ -882,7 +882,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
} }
if(text_p == 2) { if(text_p == 2) {
int iv; int iv;
text_buffer[2] = 1; text_buffer[2] = 1;
iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1;
target[tp] = iv / 256; tp++; target[tp] = iv / 256; tp++;
@ -891,7 +891,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
} }
if(text_p == 1) { if(text_p == 1) {
int iv; int iv;
text_buffer[1] = 1; text_buffer[1] = 1;
text_buffer[2] = 31; /* Pad */ text_buffer[2] = 31; /* Pad */
iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1;
@ -899,32 +899,32 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
target[tp] = iv % 256; tp++; target[tp] = iv % 256; tp++;
target[tp] = 255; tp++; /* Unlatch */ target[tp] = 255; tp++; /* Unlatch */
} }
if(current_mode == C1_DECIMAL) { if(current_mode == C1_DECIMAL) {
int bits_left_in_byte, target_count; int bits_left_in_byte, target_count;
int sub_target; int sub_target;
/* Finish Decimal mode and go back to ASCII */ /* Finish Decimal mode and go back to ASCII */
concat(decimal_binary, "111111"); /* Unlatch */ concat(decimal_binary, "111111"); /* Unlatch */
target_count = 3; target_count = 3;
if(strlen(decimal_binary) <= 16) { target_count = 2; } if(strlen(decimal_binary) <= 16) { target_count = 2; }
if(strlen(decimal_binary) <= 8) { target_count = 1; } if(strlen(decimal_binary) <= 8) { target_count = 1; }
bits_left_in_byte = (8 * target_count) - strlen(decimal_binary); bits_left_in_byte = (8 * target_count) - strlen(decimal_binary);
if(bits_left_in_byte == 8) { bits_left_in_byte = 0; } if(bits_left_in_byte == 8) { bits_left_in_byte = 0; }
if(bits_left_in_byte == 2) { if(bits_left_in_byte == 2) {
concat(decimal_binary, "01"); concat(decimal_binary, "01");
} }
if((bits_left_in_byte == 4) || (bits_left_in_byte == 6)) { if((bits_left_in_byte == 4) || (bits_left_in_byte == 6)) {
concat(decimal_binary, "1111"); concat(decimal_binary, "1111");
} }
if(bits_left_in_byte == 6) { if(bits_left_in_byte == 6) {
concat(decimal_binary, "01"); concat(decimal_binary, "01");
} }
/* Binary buffer is full - transfer to target */ /* Binary buffer is full - transfer to target */
if(target_count >= 1) { if(target_count >= 1) {
sub_target = 0; sub_target = 0;
@ -963,7 +963,7 @@ int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int t
target[tp] = sub_target; tp++; target[tp] = sub_target; tp++;
} }
} }
if(current_mode == C1_BYTE) { if(current_mode == C1_BYTE) {
/* Insert byte field length */ /* Insert byte field length */
if((tp - byte_start) <= 249) { if((tp - byte_start) <= 249) {
@ -1017,12 +1017,12 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
char datagrid[136][120]; char datagrid[136][120];
int row, col; int row, col;
int sub_version = 0; int sub_version = 0;
if((symbol->option_2 < 0) || (symbol->option_2 > 10)) { if((symbol->option_2 < 0) || (symbol->option_2 > 10)) {
strcpy(symbol->errtxt, "Invalid symbol size"); strcpy(symbol->errtxt, "Invalid symbol size");
return ERROR_INVALID_OPTION; return ERROR_INVALID_OPTION;
} }
if(symbol->option_2 == 9) { if(symbol->option_2 == 9) {
/* Version S */ /* Version S */
int codewords; int codewords;
@ -1030,7 +1030,7 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
unsigned int data[15], ecc[15]; unsigned int data[15], ecc[15];
int stream[30]; int stream[30];
int block_width; int block_width;
if(length > 18) { if(length > 18) {
strcpy(symbol->errtxt, "Input data too long"); strcpy(symbol->errtxt, "Input data too long");
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
@ -1039,11 +1039,11 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
strcpy(symbol->errtxt, "Invalid input data (Version S encodes numeric input only)"); strcpy(symbol->errtxt, "Invalid input data (Version S encodes numeric input only)");
return ERROR_INVALID_DATA; return ERROR_INVALID_DATA;
} }
sub_version = 3; codewords = 12; block_width = 6; /* Version S-30 */ sub_version = 3; codewords = 12; block_width = 6; /* Version S-30 */
if(length <= 12) { sub_version = 2; codewords = 8; block_width = 4; } /* Version S-20 */ if(length <= 12) { sub_version = 2; codewords = 8; block_width = 4; } /* Version S-20 */
if(length <= 6) { sub_version = 1; codewords = 4; block_width = 2; } /* Version S-10 */ if(length <= 6) { sub_version = 1; codewords = 4; block_width = 2; } /* Version S-10 */
binary_load(elreg, (char *)source, length); binary_load(elreg, (char *)source, length);
hex_dump(elreg); hex_dump(elreg);
@ -1059,7 +1059,7 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
data[codewords - i - 1] += 8 * elreg[(i * 5) + 3]; data[codewords - i - 1] += 8 * elreg[(i * 5) + 3];
data[codewords - i - 1] += 16 * elreg[(i * 5) + 4]; data[codewords - i - 1] += 16 * elreg[(i * 5) + 4];
} }
rs_init_gf(0x25); rs_init_gf(0x25);
rs_init_code(codewords, 1); rs_init_code(codewords, 1);
rs_encode_long(codewords, data, ecc); rs_encode_long(codewords, data, ecc);
@ -1097,7 +1097,7 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
symbol->rows = 8; symbol->rows = 8;
symbol->width = 10 * sub_version + 1; symbol->width = 10 * sub_version + 1;
} }
if(symbol->option_2 == 10) { if(symbol->option_2 == 10) {
/* Version T */ /* Version T */
unsigned int data[40], ecc[25]; unsigned int data[40], ecc[25];
@ -1107,16 +1107,16 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
for(i = 0; i < 40; i++) { data[i] = 0; } for(i = 0; i < 40; i++) { data[i] = 0; }
data_length = c1_encode(symbol, source, data, length); data_length = c1_encode(symbol, source, data, length);
if(data_length == 0) { if(data_length == 0) {
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
} }
if(data_length > 38) { if(data_length > 38) {
strcpy(symbol->errtxt, "Input data too long"); strcpy(symbol->errtxt, "Input data too long");
return ERROR_TOO_LONG; return ERROR_TOO_LONG;
} }
size = 10; size = 10;
sub_version = 3; data_cw = 38; ecc_cw = 22; block_width = 12; sub_version = 3; data_cw = 38; ecc_cw = 22; block_width = 12;
if(data_length <= 24) { sub_version = 2; data_cw = 24; ecc_cw = 16; block_width = 8; } if(data_length <= 24) { sub_version = 2; data_cw = 24; ecc_cw = 16; block_width = 8; }
@ -1125,13 +1125,13 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
for(i = data_length; i < data_cw; i++) { for(i = data_length; i < data_cw; i++) {
data[i] = 129; /* Pad */ data[i] = 129; /* Pad */
} }
/* Calculate error correction data */ /* Calculate error correction data */
rs_init_gf(0x12d); rs_init_gf(0x12d);
rs_init_code(ecc_cw, 1); rs_init_code(ecc_cw, 1);
rs_encode_long(data_cw, data, ecc); rs_encode_long(data_cw, data, ecc);
rs_free(); rs_free();
/* "Stream" combines data and error correction data */ /* "Stream" combines data and error correction data */
for(i = 0; i < data_cw; i++) { for(i = 0; i < data_cw; i++) {
stream[i] = data[i]; stream[i] = data[i];
@ -1160,11 +1160,11 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
i++; i++;
} }
} }
symbol->rows = 16; symbol->rows = 16;
symbol->width = (sub_version * 16) + 1; symbol->width = (sub_version * 16) + 1;
} }
if((symbol->option_2 != 9) && (symbol->option_2 != 10)) { if((symbol->option_2 != 9) && (symbol->option_2 != 10)) {
/* Version A to H */ /* Version A to H */
unsigned int data[1500], ecc[600]; unsigned int data[1500], ecc[600];
@ -1192,14 +1192,14 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
for(i = data_length; i < c1_data_length[size - 1]; i++) { for(i = data_length; i < c1_data_length[size - 1]; i++) {
data[i] = 129; /* Pad */ data[i] = 129; /* Pad */
} }
/* Calculate error correction data */ /* Calculate error correction data */
data_length = c1_data_length[size - 1]; data_length = c1_data_length[size - 1];
for(i = 0; i < 190; i++) { sub_data[i] = 0; } for(i = 0; i < 190; i++) { sub_data[i] = 0; }
for(i = 0; i < 75; i++) { sub_ecc[i] = 0; } for(i = 0; i < 75; i++) { sub_ecc[i] = 0; }
data_blocks = c1_blocks[size - 1]; data_blocks = c1_blocks[size - 1];
rs_init_gf(0x12d); rs_init_gf(0x12d);
rs_init_code(c1_ecc_blocks[size - 1], 0); rs_init_code(c1_ecc_blocks[size - 1], 0);
for(i = 0; i < data_blocks; i++) { for(i = 0; i < data_blocks; i++) {
@ -1213,7 +1213,7 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
} }
} }
rs_free(); rs_free();
/* "Stream" combines data and error correction data */ /* "Stream" combines data and error correction data */
for(i = 0; i < data_length; i++) { for(i = 0; i < data_length; i++) {
stream[i] = data[i]; stream[i] = data[i];
@ -1253,7 +1253,7 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
symbol->rows = c1_height[size - 1]; symbol->rows = c1_height[size - 1];
symbol->width = c1_width[size - 1]; symbol->width = c1_width[size - 1];
} }
switch(size) { switch(size) {
case 1: /* Version A */ case 1: /* Version A */
central_finder(symbol, 6, 3, 1); central_finder(symbol, 6, 3, 1);
@ -1510,6 +1510,6 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
for(i = 0; i < symbol->rows; i++) { for(i = 0; i < symbol->rows; i++) {
symbol->row_height[i] = 1; symbol->row_height[i] = 1;
} }
return 0; return 0;
} }

View File

@ -119,7 +119,7 @@ int validator(char test_string[], char source[])
if (!(latch)) { if (!(latch)) {
return ERROR_INVALID_DATA; } return ERROR_INVALID_DATA; }
} }
return 0; return 0;
} }
@ -136,7 +136,7 @@ int escape_char_process(struct zint_symbol *my_symbol, unsigned char input_strin
i = 0; i = 0;
j = 0; j = 0;
do { do {
if(input_string[i] == '\\') { if(input_string[i] == '\\') {
switch(input_string[i + 1]) { switch(input_string[i + 1]) {
@ -162,9 +162,9 @@ int escape_char_process(struct zint_symbol *my_symbol, unsigned char input_strin
j++; j++;
} while (i < length); } while (i < length);
escaped_string[j] = '\0'; escaped_string[j] = '\0';
error_number = ZBarcode_Encode(my_symbol, escaped_string, j); error_number = ZBarcode_Encode(my_symbol, escaped_string, j);
return error_number; return error_number;
} }
@ -291,6 +291,7 @@ int batch_process(struct zint_symbol *symbol, char *filename)
error_number = ZBarcode_Encode_and_Print(symbol, buffer, posn, 0); error_number = ZBarcode_Encode_and_Print(symbol, buffer, posn, 0);
if(error_number != 0) { if(error_number != 0) {
fprintf(stderr, "On line %d: %s\n", line_count, symbol->errtxt); fprintf(stderr, "On line %d: %s\n", line_count, symbol->errtxt);
fflush(stderr);
} }
ZBarcode_Clear(symbol); ZBarcode_Clear(symbol);
memset(buffer, 0, sizeof(unsigned char) * 7100); memset(buffer, 0, sizeof(unsigned char) * 7100);
@ -302,6 +303,7 @@ int batch_process(struct zint_symbol *symbol, char *filename)
} }
if(posn > 7090) { if(posn > 7090) {
fprintf(stderr, "On line %d: Input data too long\n", line_count); fprintf(stderr, "On line %d: Input data too long\n", line_count);
fflush(stderr);
do { do {
character = fgetc(file); character = fgetc(file);
} while((!feof(file)) && (character != '\n')); } while((!feof(file)) && (character != '\n'));
@ -310,6 +312,7 @@ int batch_process(struct zint_symbol *symbol, char *filename)
if(character != '\n') { if(character != '\n') {
fprintf(stderr, "Warning: No newline at end of file\n"); fprintf(stderr, "Warning: No newline at end of file\n");
fflush(stderr);
} }
fclose(file); fclose(file);
@ -438,6 +441,7 @@ int main(int argc, char **argv)
if(my_symbol->scale < 0.01) { if(my_symbol->scale < 0.01) {
/* Zero and negative values are not permitted */ /* Zero and negative values are not permitted */
fprintf(stderr, "Invalid scale value\n"); fprintf(stderr, "Invalid scale value\n");
fflush(stderr);
my_symbol->scale = 1.0; my_symbol->scale = 1.0;
} }
} }
@ -451,6 +455,7 @@ int main(int argc, char **argv)
my_symbol->border_width = atoi(optarg); my_symbol->border_width = atoi(optarg);
} else { } else {
fprintf(stderr, "Border width out of range\n"); fprintf(stderr, "Border width out of range\n");
fflush(stderr);
} }
} }
if(!strcmp(long_options[option_index].name, "height")) { if(!strcmp(long_options[option_index].name, "height")) {
@ -463,6 +468,7 @@ int main(int argc, char **argv)
my_symbol->height = atoi(optarg); my_symbol->height = atoi(optarg);
} else { } else {
fprintf(stderr, "Symbol height out of range\n"); fprintf(stderr, "Symbol height out of range\n");
fflush(stderr);
} }
} }
@ -471,6 +477,7 @@ int main(int argc, char **argv)
my_symbol->option_2 = atoi(optarg); my_symbol->option_2 = atoi(optarg);
} else { } else {
fprintf(stderr, "Number of columns out of range\n"); fprintf(stderr, "Number of columns out of range\n");
fflush(stderr);
} }
} }
if(!strcmp(long_options[option_index].name, "vers")) { if(!strcmp(long_options[option_index].name, "vers")) {
@ -478,6 +485,7 @@ int main(int argc, char **argv)
my_symbol->option_2 = atoi(optarg); my_symbol->option_2 = atoi(optarg);
} else { } else {
fprintf(stderr, "Invalid QR Code version\n"); fprintf(stderr, "Invalid QR Code version\n");
fflush(stderr);
} }
} }
if(!strcmp(long_options[option_index].name, "secure")) { if(!strcmp(long_options[option_index].name, "secure")) {
@ -485,6 +493,7 @@ int main(int argc, char **argv)
my_symbol->option_1 = atoi(optarg); my_symbol->option_1 = atoi(optarg);
} else { } else {
fprintf(stderr, "ECC level out of range\n"); fprintf(stderr, "ECC level out of range\n");
fflush(stderr);
} }
} }
if(!strcmp(long_options[option_index].name, "primary")) { if(!strcmp(long_options[option_index].name, "primary")) {
@ -492,6 +501,7 @@ int main(int argc, char **argv)
strcpy(my_symbol->primary, optarg); strcpy(my_symbol->primary, optarg);
} else { } else {
fprintf(stderr, "Primary data string too long"); fprintf(stderr, "Primary data string too long");
fflush(stderr);
} }
} }
if(!strcmp(long_options[option_index].name, "mode")) { if(!strcmp(long_options[option_index].name, "mode")) {
@ -499,6 +509,7 @@ int main(int argc, char **argv)
my_symbol->option_1 = optarg[0] - '0'; my_symbol->option_1 = optarg[0] - '0';
} else { } else {
fprintf(stderr, "Invalid mode\n"); fprintf(stderr, "Invalid mode\n");
fflush(stderr);
} }
} }
if(!strcmp(long_options[option_index].name, "rotate")) { if(!strcmp(long_options[option_index].name, "rotate")) {
@ -548,6 +559,7 @@ int main(int argc, char **argv)
my_symbol->whitespace_width = atoi(optarg); my_symbol->whitespace_width = atoi(optarg);
} else { } else {
fprintf(stderr, "Whitespace value out of range"); fprintf(stderr, "Whitespace value out of range");
fflush(stderr);
} }
break; break;
@ -560,11 +572,13 @@ int main(int argc, char **argv)
generated = 1; generated = 1;
if(error_number != 0) { if(error_number != 0) {
fprintf(stderr, "%s\n", my_symbol->errtxt); fprintf(stderr, "%s\n", my_symbol->errtxt);
fflush(stderr);
ZBarcode_Delete(my_symbol); ZBarcode_Delete(my_symbol);
return 1; return 1;
} }
} else { } else {
fprintf(stderr, "Cannot define data in batch mode"); fprintf(stderr, "Cannot define data in batch mode");
fflush(stderr);
} }
break; break;
@ -577,6 +591,7 @@ int main(int argc, char **argv)
generated = 1; generated = 1;
if(error_number != 0) { if(error_number != 0) {
fprintf(stderr, "%s\n", my_symbol->errtxt); fprintf(stderr, "%s\n", my_symbol->errtxt);
fflush(stderr);
ZBarcode_Delete(my_symbol); ZBarcode_Delete(my_symbol);
return 1; return 1;
} }
@ -586,6 +601,7 @@ int main(int argc, char **argv)
generated = 1; generated = 1;
if(error_number != 0) { if(error_number != 0) {
fprintf(stderr, "%s\n", my_symbol->errtxt); fprintf(stderr, "%s\n", my_symbol->errtxt);
fflush(stderr);
ZBarcode_Delete(my_symbol); ZBarcode_Delete(my_symbol);
return 1; return 1;
} }
@ -606,18 +622,21 @@ int main(int argc, char **argv)
default: default:
fprintf(stderr, "?? getopt error 0%o\n", c); fprintf(stderr, "?? getopt error 0%o\n", c);
fflush(stderr);
} }
} }
if (optind < argc) { if (optind < argc) {
fprintf(stderr, "Invalid option "); fprintf(stderr, "Invalid option ");
while (optind < argc) while (optind < argc)
fprintf(stderr, "%s", argv[optind++]); fprintf(stderr, "%s", argv[optind++]);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
fflush(stderr);
} }
if(generated == 0) { if(generated == 0) {
fprintf(stderr, "error: No data received, no symbol generated\n"); fprintf(stderr, "error: No data received, no symbol generated\n");
fflush(stderr);
} }
ZBarcode_Delete(my_symbol); ZBarcode_Delete(my_symbol);

View File

@ -1,5 +1,5 @@
Name: zint Name: zint
Version: 2.3.1 Version: 2.4.3
Release: 2%{?dist} Release: 2%{?dist}
Summary: A barcode generator and library Summary: A barcode generator and library
License: GPLv3+ License: GPLv3+
@ -114,7 +114,7 @@ rm -rf $RPM_BUILD_ROOT
%files %files
%defattr(-,root,root,-) %defattr(-,root,root,-)
%doc COPYING readme %doc COPYING README
%{_bindir}/%{name} %{_bindir}/%{name}
%{_libdir}/libzint.so.* %{_libdir}/libzint.so.*