Correct "trailing full stop" bug.

This commit is contained in:
hooper114 2010-04-06 09:14:28 +00:00
parent 695df7572b
commit f3e8505fd4

View File

@ -129,16 +129,16 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
}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 = 0; blocks = 1;
blockmap[0][0] = typemap[0]; blockmap[0][0] = typemap[0];
blockmap[1][0] = 1; blockmap[1][0] = 1;
for(i = 1; i < maplength; i++) { for(i = 1; i < maplength; i++) {
if(typemap[i] == typemap[i - 1]) { if(typemap[i] == typemap[i - 1]) {
blockmap[1][blocks]++; blockmap[1][blocks - 1]++;
} else { } else {
blocks++; blocks++;
blockmap[0][blocks] = typemap[i]; blockmap[0][blocks - 1] = typemap[i];
blockmap[1][blocks] = 1; blockmap[1][blocks - 1] = 1;
} }
} }
@ -148,6 +148,7 @@ 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]) {
@ -193,7 +194,7 @@ int aztec_text_process(unsigned char source[], const unsigned int src_len, char
/* 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++) {
if((blockmap[1][i] < 3) && (blockmap[0][i] != 32)) { /* Shift character(s) needed */ if((blockmap[1][i] < 3) && (blockmap[0][i] != 32)) { /* Shift character(s) needed */
for(k = 0; k < blockmap[1][i]; k++) { for(k = 0; k < blockmap[1][i]; k++) {
typemap[j + k] = blockmap[0][i] + 64; typemap[j + k] = blockmap[0][i] + 64;
@ -693,6 +694,7 @@ 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");
@ -836,18 +838,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
adjusted_length = strlen(adjusted_string); adjusted_length = strlen(adjusted_string);
adjustment_size = adjusted_length - data_length; adjustment_size = adjusted_length - data_length;
if(debug) { /* Add padding */
printf("Codewords:\n");
for(i = 0; i < (adjusted_length / codeword_size); i++) {
for(j = 0; j < codeword_size; j++) {
printf("%c", adjusted_string[(i * codeword_size) + j]);
}
printf("\n");
}
}
/* Only important if this loop is repeated */
remainder = adjusted_length % codeword_size; remainder = adjusted_length % codeword_size;
padbits = codeword_size - remainder; padbits = codeword_size - remainder;
@ -864,6 +855,16 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
} }
if(count == codeword_size) { adjusted_string[adjusted_length - 1] = '0'; } if(count == codeword_size) { adjusted_string[adjusted_length - 1] = '0'; }
if(debug) {
printf("Codewords:\n");
for(i = 0; i < (adjusted_length / codeword_size); i++) {
for(j = 0; j < codeword_size; j++) {
printf("%c", adjusted_string[(i * codeword_size) + j]);
}
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
@ -956,6 +957,17 @@ 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) {
printf("Codewords:\n");
for(i = 0; i < (adjusted_length / codeword_size); i++) {
for(j = 0; j < codeword_size; j++) {
printf("%c", adjusted_string[(i * codeword_size) + j]);
}
printf("\n");
}
}
} }
if(reader && (layers > 22)) { if(reader && (layers > 22)) {
@ -1136,6 +1148,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
if((data_blocks - 1) & 0x02) { descriptor[6] = '1'; } else { descriptor[6] = '0'; } if((data_blocks - 1) & 0x02) { descriptor[6] = '1'; } else { descriptor[6] = '0'; }
if((data_blocks - 1) & 0x01) { descriptor[7] = '1'; } else { descriptor[7] = '0'; } if((data_blocks - 1) & 0x01) { descriptor[7] = '1'; } else { descriptor[7] = '0'; }
descriptor[8] = '\0'; descriptor[8] = '\0';
if(debug) printf("Mode Message = %s\n", descriptor);
} else { } else {
/* The first 5 bits represent the number of layers minus 1 */ /* The first 5 bits represent the number of layers minus 1 */
if((layers - 1) & 0x10) { descriptor[0] = '1'; } else { descriptor[0] = '0'; } if((layers - 1) & 0x10) { descriptor[0] = '1'; } else { descriptor[0] = '0'; }
@ -1160,6 +1173,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[], int length)
if((data_blocks - 1) & 0x02) { descriptor[14] = '1'; } else { descriptor[14] = '0'; } if((data_blocks - 1) & 0x02) { descriptor[14] = '1'; } else { descriptor[14] = '0'; }
if((data_blocks - 1) & 0x01) { descriptor[15] = '1'; } else { descriptor[15] = '0'; } if((data_blocks - 1) & 0x01) { descriptor[15] = '1'; } else { descriptor[15] = '0'; }
descriptor[16] = '\0'; descriptor[16] = '\0';
if(debug) printf("Mode Message = %s\n", descriptor);
} }
/* Split into 4-bit codewords */ /* Split into 4-bit codewords */