mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
Performance improvement
Simplifies the QR code and improves performance Adds a new --dump option to output binary to stdout With thanks to Ismael Luceno
This commit is contained in:
parent
2300a76a07
commit
93c678e1cf
@ -127,7 +127,7 @@ void lookup(char set_string[], char *table[], char data, char dest[])
|
|||||||
|
|
||||||
int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord)
|
int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord)
|
||||||
{
|
{
|
||||||
return (symbol->encoded_data[y_coord][x_coord / 7] & (1 << (x_coord % 7))) ? 1 : 0;
|
return (symbol->encoded_data[y_coord][x_coord / 7] >> (x_coord % 7)) & 1;
|
||||||
#if 0
|
#if 0
|
||||||
switch(x_sub) {
|
switch(x_sub) {
|
||||||
case 0: if((symbol->encoded_data[y_coord][x_char] & 0x01) != 0) { result = 1; } break;
|
case 0: if((symbol->encoded_data[y_coord][x_char] & 0x01) != 0) { result = 1; } break;
|
||||||
@ -145,8 +145,7 @@ 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 set_module(struct zint_symbol *symbol, int y_coord, int x_coord)
|
||||||
{
|
{
|
||||||
if(module_is_set(symbol, y_coord, x_coord)) { return; }
|
symbol->encoded_data[y_coord][x_coord / 7] |= 1 << (x_coord % 7);
|
||||||
symbol->encoded_data[y_coord][x_coord / 7] += 1 << (x_coord % 7);
|
|
||||||
#if 0
|
#if 0
|
||||||
int x_char, x_sub;
|
int x_char, x_sub;
|
||||||
|
|
||||||
@ -168,8 +167,7 @@ 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)
|
void unset_module(struct zint_symbol *symbol, int y_coord, int x_coord)
|
||||||
{
|
{
|
||||||
if(!(module_is_set(symbol, y_coord, x_coord))) { return; }
|
symbol->encoded_data[y_coord][x_coord / 7] &= ~(1 << (x_coord % 7));
|
||||||
symbol->encoded_data[y_coord][x_coord / 7] -= 1 << (x_coord % 7);
|
|
||||||
#if 0
|
#if 0
|
||||||
int x_char, x_sub;
|
int x_char, x_sub;
|
||||||
|
|
||||||
|
@ -200,6 +200,36 @@ void error_tag(char error_string[], int error_number)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int dump_plot(struct zint_symbol *symbol)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
int i, r;
|
||||||
|
|
||||||
|
if(symbol->output_options & BARCODE_STDOUT) {
|
||||||
|
f = stdout;
|
||||||
|
} else {
|
||||||
|
f = fopen(symbol->outfile, "w");
|
||||||
|
if(!f) {
|
||||||
|
strcpy(symbol->errtxt, "Could not open output file");
|
||||||
|
return ERROR_FILE_ACCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs("[\n", f);
|
||||||
|
for (r = 0; r < symbol->rows; r++) {
|
||||||
|
fputs(" [ ", f);
|
||||||
|
for (i = 0; i < symbol->width; i++) {
|
||||||
|
fputs(module_is_set(symbol, r, i) ? "1 " : "0 ", f);
|
||||||
|
}
|
||||||
|
fputs("]\n", f);
|
||||||
|
}
|
||||||
|
fputs("]\n", f);
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int hibc(struct zint_symbol *symbol, unsigned char source[], int length)
|
int hibc(struct zint_symbol *symbol, unsigned char source[], int length)
|
||||||
{
|
{
|
||||||
int counter, error_number, i;
|
int counter, error_number, i;
|
||||||
@ -692,22 +722,22 @@ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle)
|
|||||||
if(!(strcmp(output, "PNG"))) {
|
if(!(strcmp(output, "PNG"))) {
|
||||||
if(symbol->scale < 1.0) { symbol->text[0] = '\0'; }
|
if(symbol->scale < 1.0) { symbol->text[0] = '\0'; }
|
||||||
error_number = png_handle(symbol, rotate_angle);
|
error_number = png_handle(symbol, rotate_angle);
|
||||||
} else {
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
if(!(strcmp(output, "TXT"))) {
|
||||||
|
error_number = dump_plot(symbol);
|
||||||
|
} else
|
||||||
if(!(strcmp(output, "EPS"))) {
|
if(!(strcmp(output, "EPS"))) {
|
||||||
error_number = ps_plot(symbol);
|
error_number = ps_plot(symbol);
|
||||||
} else {
|
} else
|
||||||
if(!(strcmp(output, "SVG"))) {
|
if(!(strcmp(output, "SVG"))) {
|
||||||
error_number = svg_plot(symbol);
|
error_number = svg_plot(symbol);
|
||||||
} else {
|
} else
|
||||||
|
{
|
||||||
strcpy(symbol->errtxt, "Unknown output format");
|
strcpy(symbol->errtxt, "Unknown output format");
|
||||||
error_tag(symbol->errtxt, ERROR_INVALID_OPTION);
|
error_tag(symbol->errtxt, ERROR_INVALID_OPTION);
|
||||||
return ERROR_INVALID_OPTION;
|
return ERROR_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#ifndef NO_PNG
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
strcpy(symbol->errtxt, "Unknown output format");
|
strcpy(symbol->errtxt, "Unknown output format");
|
||||||
error_tag(symbol->errtxt, ERROR_INVALID_OPTION);
|
error_tag(symbol->errtxt, ERROR_INVALID_OPTION);
|
||||||
@ -777,6 +807,10 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename)
|
|||||||
unsigned int nRead = 0, n = 0;
|
unsigned int nRead = 0, n = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!strcmp(filename, "-")) {
|
||||||
|
file = stdin;
|
||||||
|
fileLen = 7100;
|
||||||
|
} else {
|
||||||
file = fopen(filename, "rb");
|
file = fopen(filename, "rb");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
strcpy(symbol->errtxt, "Unable to read input file");
|
strcpy(symbol->errtxt, "Unable to read input file");
|
||||||
@ -794,6 +828,7 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename)
|
|||||||
fclose(file);
|
fclose(file);
|
||||||
return ERROR_INVALID_DATA;
|
return ERROR_INVALID_DATA;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Allocate memory */
|
/* Allocate memory */
|
||||||
buffer = (unsigned char *)malloc(fileLen * sizeof(unsigned char));
|
buffer = (unsigned char *)malloc(fileLen * sizeof(unsigned char));
|
||||||
|
283
backend/qr.c
283
backend/qr.c
@ -157,6 +157,13 @@ int estimate_binary_length(char mode[], int length, int gs1)
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void qr_bscan(char *binary, int data, int h)
|
||||||
|
{
|
||||||
|
for (; h; h>>=1) {
|
||||||
|
concat(binary, data & h ? "1" : "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void qr_binary(int datastream[], int version, int target_binlen, char mode[], int jisdata[], int length, int gs1, int est_binlen)
|
void qr_binary(int datastream[], int version, int target_binlen, char mode[], int jisdata[], int length, int gs1, int est_binlen)
|
||||||
{
|
{
|
||||||
/* Convert input data to a binary stream and add padding */
|
/* Convert input data to a binary stream and add padding */
|
||||||
@ -210,24 +217,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
concat(binary, "1000");
|
concat(binary, "1000");
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch(scheme) {
|
qr_bscan(binary, short_data_block_length, 0x20 << (scheme*2)); /* scheme = 1..3 */
|
||||||
case 3:
|
|
||||||
if(short_data_block_length & 0x800) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(short_data_block_length & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(short_data_block_length & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("Kanji block (length %d)\n\t", short_data_block_length); }
|
if(debug) { printf("Kanji block (length %d)\n\t", short_data_block_length); }
|
||||||
|
|
||||||
@ -241,19 +231,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
lsb = (jis & 0xff);
|
lsb = (jis & 0xff);
|
||||||
prod = (msb * 0xc0) + lsb;
|
prod = (msb * 0xc0) + lsb;
|
||||||
|
|
||||||
if(prod & 0x1000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
qr_bscan(binary, prod, 0x1000);
|
||||||
if(prod & 0x800) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X ", prod); }
|
if(debug) { printf("0x%4X ", prod); }
|
||||||
}
|
}
|
||||||
@ -267,28 +245,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
concat(binary, "0100");
|
concat(binary, "0100");
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch (scheme) {
|
qr_bscan(binary, short_data_block_length, scheme > 1 ? 0x8000 : 0x80); /* scheme = 1..3 */
|
||||||
case 3:
|
|
||||||
case 2:
|
|
||||||
if(short_data_block_length & 0x8000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x4000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x2000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x1000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x800) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(short_data_block_length & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("Byte block (length %d)\n\t", short_data_block_length); }
|
if(debug) { printf("Byte block (length %d)\n\t", short_data_block_length); }
|
||||||
|
|
||||||
@ -300,14 +257,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
byte = 0x1d; /* FNC1 */
|
byte = 0x1d; /* FNC1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
if(byte & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
qr_bscan(binary, byte, 0x80);
|
||||||
if(byte & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X ", byte); }
|
if(debug) { printf("0x%4X ", byte); }
|
||||||
}
|
}
|
||||||
@ -321,25 +271,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
concat(binary, "0010");
|
concat(binary, "0010");
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch (scheme) {
|
qr_bscan(binary, short_data_block_length, 0x40 << (2 * scheme)); /* scheme = 1..3 */
|
||||||
case 3:
|
|
||||||
if(short_data_block_length & 0x1000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x800) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(short_data_block_length & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(short_data_block_length & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("Alpha block (length %d)\n\t", short_data_block_length); }
|
if(debug) { printf("Alpha block (length %d)\n\t", short_data_block_length); }
|
||||||
|
|
||||||
@ -410,22 +342,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(count) {
|
qr_bscan(binary, prod, count == 2 ? 0x400 : 0x20); /* count = 1..2 */
|
||||||
case 2:
|
|
||||||
if(prod & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(prod & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X ", prod); }
|
if(debug) { printf("0x%4X ", prod); }
|
||||||
};
|
};
|
||||||
@ -439,26 +356,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
concat(binary, "0001");
|
concat(binary, "0001");
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch (scheme) {
|
qr_bscan(binary, short_data_block_length, 0x80 << (2 * scheme)); /* scheme = 1..3 */
|
||||||
case 3:
|
|
||||||
if(short_data_block_length & 0x2000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x1000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(short_data_block_length & 0x800) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(short_data_block_length & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(short_data_block_length & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("Number block (length %d)\n\t", short_data_block_length); }
|
if(debug) { printf("Number block (length %d)\n\t", short_data_block_length); }
|
||||||
|
|
||||||
@ -484,22 +382,7 @@ void qr_binary(int datastream[], int version, int target_binlen, char mode[], in
|
|||||||
prod = (prod * 10) + third;
|
prod = (prod * 10) + third;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(count) {
|
qr_bscan(binary, prod, 1 << (3 * count)); /* count = 1..3 */
|
||||||
case 3:
|
|
||||||
if(prod & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(prod & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(prod & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X (%d)", prod, prod); }
|
if(debug) { printf("0x%4X (%d)", prod, prod); }
|
||||||
|
|
||||||
@ -1335,19 +1218,7 @@ int micro_qr_intermediate(char binary[], int jisdata[], char mode[], int length,
|
|||||||
lsb = (jis & 0xff);
|
lsb = (jis & 0xff);
|
||||||
prod = (msb * 0xc0) + lsb;
|
prod = (msb * 0xc0) + lsb;
|
||||||
|
|
||||||
if(prod & 0x1000) { concat(binary, "1"); } else { concat(binary, "0"); }
|
qr_bscan(binary, prod, 0x1000);
|
||||||
if(prod & 0x800) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X ", prod); }
|
if(debug) { printf("0x%4X ", prod); }
|
||||||
|
|
||||||
@ -1376,14 +1247,7 @@ int micro_qr_intermediate(char binary[], int jisdata[], char mode[], int length,
|
|||||||
for(i = 0; i < short_data_block_length; i++) {
|
for(i = 0; i < short_data_block_length; i++) {
|
||||||
int byte = jisdata[position + i];
|
int byte = jisdata[position + i];
|
||||||
|
|
||||||
if(byte & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
qr_bscan(binary, byte, 0x80);
|
||||||
if(byte & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(byte & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X ", byte); }
|
if(debug) { printf("0x%4X ", byte); }
|
||||||
|
|
||||||
@ -1424,22 +1288,7 @@ int micro_qr_intermediate(char binary[], int jisdata[], char mode[], int length,
|
|||||||
prod = (first * 45) + second;
|
prod = (first * 45) + second;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(count) {
|
qr_bscan(binary, prod, 1 << (5 * count)); /* count = 1..2 */
|
||||||
case 2:
|
|
||||||
if(prod & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(prod & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X ", prod); }
|
if(debug) { printf("0x%4X ", prod); }
|
||||||
|
|
||||||
@ -1487,22 +1336,7 @@ int micro_qr_intermediate(char binary[], int jisdata[], char mode[], int length,
|
|||||||
prod = (prod * 10) + third;
|
prod = (prod * 10) + third;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(count) {
|
qr_bscan(binary, prod, 1 << (3 * count)); /* count = 1..3 */
|
||||||
case 3:
|
|
||||||
if(prod & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(prod & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(prod & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
if(prod & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) { printf("0x%4X (%d)", prod, prod); }
|
if(debug) { printf("0x%4X (%d)", prod, prod); }
|
||||||
|
|
||||||
@ -1592,18 +1426,7 @@ void microqr_expand_binary(char binary_stream[], char full_stream[], int version
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch(version) {
|
qr_bscan(full_stream, binary_stream[i + 1], 4 << version); /* version = 0..3 */
|
||||||
case 3:
|
|
||||||
if(binary_stream[i + 1] & 0x20) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(binary_stream[i + 1] & 0x10) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(binary_stream[i + 1] & 0x08) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
case 0:
|
|
||||||
if(binary_stream[i + 1] & 0x04) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x02) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x01) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
i += 2;
|
i += 2;
|
||||||
break;
|
break;
|
||||||
@ -1617,16 +1440,7 @@ void microqr_expand_binary(char binary_stream[], char full_stream[], int version
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch(version) {
|
qr_bscan(full_stream, binary_stream[i + 1], 2 << version); /* version = 1..3 */
|
||||||
case 3:
|
|
||||||
if(binary_stream[i + 1] & 0x10) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(binary_stream[i + 1] & 0x08) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
case 1:
|
|
||||||
if(binary_stream[i + 1] & 0x04) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x02) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x01) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
i += 2;
|
i += 2;
|
||||||
break;
|
break;
|
||||||
@ -1639,15 +1453,7 @@ void microqr_expand_binary(char binary_stream[], char full_stream[], int version
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch(version) {
|
qr_bscan(full_stream, binary_stream[i + 1], 2 << version); /* version = 2..3 */
|
||||||
case 3:
|
|
||||||
if(binary_stream[i + 1] & 0x10) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(binary_stream[i + 1] & 0x08) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x04) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x02) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x01) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
i += 2;
|
i += 2;
|
||||||
break;
|
break;
|
||||||
@ -1660,14 +1466,7 @@ void microqr_expand_binary(char binary_stream[], char full_stream[], int version
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Character count indicator */
|
/* Character count indicator */
|
||||||
switch(version) {
|
qr_bscan(full_stream, binary_stream[i + 1], 1 << version); /* version = 2..3 */
|
||||||
case 3:
|
|
||||||
if(binary_stream[i + 1] & 0x08) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
case 2:
|
|
||||||
if(binary_stream[i + 1] & 0x04) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x02) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
if(binary_stream[i + 1] & 0x01) { concat(full_stream, "1"); } else { concat(full_stream, "0"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
i += 2;
|
i += 2;
|
||||||
break;
|
break;
|
||||||
@ -1757,14 +1556,7 @@ void micro_qr_m1(char binary_data[])
|
|||||||
|
|
||||||
/* Add Reed-Solomon codewords to binary data */
|
/* Add Reed-Solomon codewords to binary data */
|
||||||
for(i = 0; i < ecc_codewords; i++) {
|
for(i = 0; i < ecc_codewords; i++) {
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x80) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80);
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x40) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x20) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x10) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x08) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x04) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x02) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x01) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1832,14 +1624,7 @@ void micro_qr_m2(char binary_data[], int ecc_mode)
|
|||||||
|
|
||||||
/* Add Reed-Solomon codewords to binary data */
|
/* Add Reed-Solomon codewords to binary data */
|
||||||
for(i = 0; i < ecc_codewords; i++) {
|
for(i = 0; i < ecc_codewords; i++) {
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x80) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80);
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x40) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x20) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x10) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x08) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x04) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x02) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x01) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1939,14 +1724,7 @@ void micro_qr_m3(char binary_data[], int ecc_mode)
|
|||||||
|
|
||||||
/* Add Reed-Solomon codewords to binary data */
|
/* Add Reed-Solomon codewords to binary data */
|
||||||
for(i = 0; i < ecc_codewords; i++) {
|
for(i = 0; i < ecc_codewords; i++) {
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x80) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80);
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x40) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x20) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x10) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x08) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x04) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x02) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x01) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -2018,14 +1796,7 @@ void micro_qr_m4(char binary_data[], int ecc_mode)
|
|||||||
|
|
||||||
/* Add Reed-Solomon codewords to binary data */
|
/* Add Reed-Solomon codewords to binary data */
|
||||||
for(i = 0; i < ecc_codewords; i++) {
|
for(i = 0; i < ecc_codewords; i++) {
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x80) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80);
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x40) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x20) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x10) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x08) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x04) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x02) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
if(ecc_blocks[ecc_codewords - i - 1] & 0x01) { concat(binary_data, "1"); } else { concat(binary_data, "0"); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +91,7 @@ void usage(void)
|
|||||||
" --directpng Send PNG output to stdout\n"
|
" --directpng Send PNG output to stdout\n"
|
||||||
" --directeps Send EPS output to stdout\n"
|
" --directeps Send EPS output to stdout\n"
|
||||||
" --directsvg Send SVG output to stdout\n"
|
" --directsvg Send SVG output to stdout\n"
|
||||||
|
" --dump Dump binary data to stdout\n"
|
||||||
" --rotate=NUMBER Rotate symbol (PNG output only).\n"
|
" --rotate=NUMBER Rotate symbol (PNG output only).\n"
|
||||||
" --cols=NUMBER (PDF417) Number of columns.\n"
|
" --cols=NUMBER (PDF417) Number of columns.\n"
|
||||||
" --vers=NUMBER (QR Code) Version\n"
|
" --vers=NUMBER (QR Code) Version\n"
|
||||||
@ -193,6 +194,7 @@ int main(int argc, char **argv)
|
|||||||
{"directeps", 0, 0, 0},
|
{"directeps", 0, 0, 0},
|
||||||
{"directpng", 0, 0, 0},
|
{"directpng", 0, 0, 0},
|
||||||
{"directsvg", 0, 0, 0},
|
{"directsvg", 0, 0, 0},
|
||||||
|
{"dump", 0, 0, 0},
|
||||||
{"barcode", 1, 0, 'b'},
|
{"barcode", 1, 0, 'b'},
|
||||||
{"height", 1, 0, 0},
|
{"height", 1, 0, 0},
|
||||||
{"whitesp", 1, 0, 'w'},
|
{"whitesp", 1, 0, 'w'},
|
||||||
@ -241,6 +243,10 @@ int main(int argc, char **argv)
|
|||||||
my_symbol->output_options += BARCODE_STDOUT;
|
my_symbol->output_options += BARCODE_STDOUT;
|
||||||
strncpy(my_symbol->outfile, "dummy.svg", 10);
|
strncpy(my_symbol->outfile, "dummy.svg", 10);
|
||||||
}
|
}
|
||||||
|
if(!strcmp(long_options[option_index].name, "dump")) {
|
||||||
|
my_symbol->output_options += BARCODE_STDOUT;
|
||||||
|
strncpy(my_symbol->outfile, "dummy.txt", 10);
|
||||||
|
}
|
||||||
if(!strcmp(long_options[option_index].name, "gs1")) {
|
if(!strcmp(long_options[option_index].name, "gs1")) {
|
||||||
my_symbol->input_mode = GS1_MODE;
|
my_symbol->input_mode = GS1_MODE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user