1
0
mirror of https://git.code.sf.net/p/zint/code synced 2026-01-26 13:25:58 +00:00

synchronized with master

This commit is contained in:
tgotic
2011-05-04 21:48:06 +02:00
parent 534bc69609
commit 891570299c
20 changed files with 159 additions and 135 deletions

View File

@@ -43,39 +43,24 @@ static char *AusBarTable[64] = {"000", "001", "002", "003", "010", "011", "012",
#include "common.h"
#include "reedsol.h"
static inline char convert_pattern(char data, int shift)
{
return (data - '0') << shift;
}
void rs_error(char data_pattern[])
{
/* Adds Reed-Solomon error correction to auspost */
int reader, triple_writer;
int reader, triple_writer = 0;
char triple[31], inv_triple[31];
unsigned char result[5];
triple_writer = 0;
for(reader = 2; reader < strlen(data_pattern); reader+= 3)
{
triple[triple_writer] = 0;
switch(data_pattern[reader])
for(reader = 2; reader < strlen(data_pattern); reader += 3, triple_writer++)
{
case '1': triple[triple_writer] += 16; break;
case '2': triple[triple_writer] += 32; break;
case '3': triple[triple_writer] += 48; break;
}
switch(data_pattern[reader + 1])
{
case '1': triple[triple_writer] += 4; break;
case '2': triple[triple_writer] += 8; break;
case '3': triple[triple_writer] += 12; break;
}
switch(data_pattern[reader + 2])
{
case '1': triple[triple_writer] += 1; break;
case '2': triple[triple_writer] += 2; break;
case '3': triple[triple_writer] += 3; break;
}
triple_writer++;
triple[triple_writer] = convert_pattern(data_pattern[reader], 4)
+ convert_pattern(data_pattern[reader + 1], 2)
+ convert_pattern(data_pattern[reader + 2], 0);
}
for(reader = 0; reader < triple_writer; reader++)
@@ -113,23 +98,35 @@ int australia_post(struct zint_symbol *symbol, unsigned char source[], int lengt
char data_pattern[200];
char fcc[3] = { 0 };
char dpid[10];
char localstr[30];
char localstr[30] = { 0 };
error_number = 0;
strcpy(localstr, "");
/* Do all of the length checking first to avoid stack smashing */
if(symbol->symbology == BARCODE_AUSPOST) {
/* Format control code (FCC) */
switch(length)
{
case 8: strcpy(fcc, "11"); break;
case 13: strcpy(fcc, "59"); break;
case 16: strcpy(fcc, "59"); error_number = is_sane(NEON, source, length); break;
case 18: strcpy(fcc, "62"); break;
case 23: strcpy(fcc, "62"); error_number = is_sane(NEON, source, length); break;
default: strcpy(symbol->errtxt, "Auspost input is wrong length");
return ZERROR_TOO_LONG;
case 8:
strcpy(fcc, "11");
break;
case 13:
strcpy(fcc, "59");
break;
case 16:
strcpy(fcc, "59");
error_number = is_sane(NEON, source, length);
break;
case 18:
strcpy(fcc, "62");
break;
case 23:
strcpy(fcc, "62");
error_number = is_sane(NEON, source, length);
break;
default:
strcpy(symbol->errtxt, "Auspost input is wrong length");
return ZERROR_TOO_LONG;
break;
}
if(error_number == ZERROR_INVALID_DATA) {
@@ -150,7 +147,6 @@ int australia_post(struct zint_symbol *symbol, unsigned char source[], int lengt
/* Add leading zeros as required */
zeroes = 8 - length;
memset(localstr, '0', zeroes);
localstr[8] = '\0';
}
concat(localstr, (char*)source);
@@ -195,7 +191,7 @@ int australia_post(struct zint_symbol *symbol, unsigned char source[], int lengt
lookup(GDSET, AusCTable, localstr[reader], data_pattern);
}
}
if((h == 16) || (h == 23)) {
else if((h == 16) || (h == 23)) {
for(reader = 8; reader < h; reader++) {
lookup(NEON, AusNTable, localstr[reader], data_pattern);
}