mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
Code format and audit, part 2
Update copyright info, remove unused code, etc.
This commit is contained in:
parent
77cdf77690
commit
8a88ffdd7b
@ -1366,7 +1366,6 @@ int code_one(struct zint_symbol *symbol, unsigned char source[], int length) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binary_load(elreg, (char *) source, length);
|
binary_load(elreg, (char *) source, length);
|
||||||
hex_dump(elreg);
|
|
||||||
|
|
||||||
for (i = 0; i < 15; i++) {
|
for (i = 0; i < 15; i++) {
|
||||||
data[i] = 0;
|
data[i] = 0;
|
||||||
|
1285
backend/imail.c
1285
backend/imail.c
File diff suppressed because it is too large
Load Diff
309
backend/large.c
309
backend/large.c
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
|
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
@ -28,7 +28,7 @@
|
|||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -36,203 +36,168 @@
|
|||||||
#include "large.h"
|
#include "large.h"
|
||||||
|
|
||||||
static const short int BCD[40] = {
|
static const short int BCD[40] = {
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
1, 0, 0, 0,
|
1, 0, 0, 0,
|
||||||
0, 1, 0, 0,
|
0, 1, 0, 0,
|
||||||
1, 1, 0, 0,
|
1, 1, 0, 0,
|
||||||
0, 0, 1, 0,
|
0, 0, 1, 0,
|
||||||
1, 0, 1, 0,
|
1, 0, 1, 0,
|
||||||
0, 1, 1, 0,
|
0, 1, 1, 0,
|
||||||
1, 1, 1, 0,
|
1, 1, 1, 0,
|
||||||
0, 0, 0, 1,
|
0, 0, 0, 1,
|
||||||
1, 0, 0, 1 };
|
1, 0, 0, 1
|
||||||
|
};
|
||||||
|
|
||||||
void binary_add(short int accumulator[], short int input_buffer[])
|
void binary_add(short int accumulator[], short int input_buffer[]) { /* Binary addition */
|
||||||
{ /* Binary addition */
|
int i, carry, done;
|
||||||
int i, carry, done;
|
carry = 0;
|
||||||
carry = 0;
|
|
||||||
|
|
||||||
for(i = 0; i < 112; i++) {
|
for (i = 0; i < 112; i++) {
|
||||||
done = 0;
|
done = 0;
|
||||||
if(((input_buffer[i] == 0) && (accumulator[i] == 0)) && ((carry == 0) && (done == 0))) {
|
if (((input_buffer[i] == 0) && (accumulator[i] == 0))
|
||||||
accumulator[i] = 0;
|
&& ((carry == 0) && (done == 0))) {
|
||||||
carry = 0;
|
accumulator[i] = 0;
|
||||||
done = 1;
|
carry = 0;
|
||||||
}
|
done = 1;
|
||||||
if(((input_buffer[i] == 0) && (accumulator[i] == 0)) && ((carry == 1) && (done == 0))) {
|
}
|
||||||
accumulator[i] = 1;
|
if (((input_buffer[i] == 0) && (accumulator[i] == 0))
|
||||||
carry = 0;
|
&& ((carry == 1) && (done == 0))) {
|
||||||
done = 1;
|
accumulator[i] = 1;
|
||||||
}
|
carry = 0;
|
||||||
if(((input_buffer[i] == 0) && (accumulator[i] == 1)) && ((carry == 0) && (done == 0))) {
|
done = 1;
|
||||||
accumulator[i] = 1;
|
}
|
||||||
carry = 0;
|
if (((input_buffer[i] == 0) && (accumulator[i] == 1))
|
||||||
done = 1;
|
&& ((carry == 0) && (done == 0))) {
|
||||||
}
|
accumulator[i] = 1;
|
||||||
if(((input_buffer[i] == 0) && (accumulator[i] == 1)) && ((carry == 1) && (done == 0))) {
|
carry = 0;
|
||||||
accumulator[i] = 0;
|
done = 1;
|
||||||
carry = 1;
|
}
|
||||||
done = 1;
|
if (((input_buffer[i] == 0) && (accumulator[i] == 1))
|
||||||
}
|
&& ((carry == 1) && (done == 0))) {
|
||||||
if(((input_buffer[i] == 1) && (accumulator[i] == 0)) && ((carry == 0) && (done == 0))) {
|
accumulator[i] = 0;
|
||||||
accumulator[i] = 1;
|
carry = 1;
|
||||||
carry = 0;
|
done = 1;
|
||||||
done = 1;
|
}
|
||||||
}
|
if (((input_buffer[i] == 1) && (accumulator[i] == 0))
|
||||||
if(((input_buffer[i] == 1) && (accumulator[i] == 0)) && ((carry == 1) && (done == 0))) {
|
&& ((carry == 0) && (done == 0))) {
|
||||||
accumulator[i] = 0;
|
accumulator[i] = 1;
|
||||||
carry = 1;
|
carry = 0;
|
||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
if(((input_buffer[i] == 1) && (accumulator[i] == 1)) && ((carry == 0) && (done == 0))) {
|
if (((input_buffer[i] == 1) && (accumulator[i] == 0))
|
||||||
accumulator[i] = 0;
|
&& ((carry == 1) && (done == 0))) {
|
||||||
carry = 1;
|
accumulator[i] = 0;
|
||||||
done = 1;
|
carry = 1;
|
||||||
}
|
done = 1;
|
||||||
if(((input_buffer[i] == 1) && (accumulator[i] == 1)) && ((carry == 1) && (done == 0))) {
|
}
|
||||||
accumulator[i] = 1;
|
if (((input_buffer[i] == 1) && (accumulator[i] == 1))
|
||||||
carry = 1;
|
&& ((carry == 0) && (done == 0))) {
|
||||||
done = 1;
|
accumulator[i] = 0;
|
||||||
}
|
carry = 1;
|
||||||
}
|
done = 1;
|
||||||
|
}
|
||||||
|
if (((input_buffer[i] == 1) && (accumulator[i] == 1))
|
||||||
|
&& ((carry == 1) && (done == 0))) {
|
||||||
|
accumulator[i] = 1;
|
||||||
|
carry = 1;
|
||||||
|
done = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void binary_subtract(short int accumulator[], short int input_buffer[])
|
void binary_subtract(short int accumulator[], short int input_buffer[]) {
|
||||||
{ /* 2's compliment subtraction */
|
/* 2's compliment subtraction */
|
||||||
/* take input_buffer from accumulator and put answer in accumulator */
|
/* take input_buffer from accumulator and put answer in accumulator */
|
||||||
int i;
|
int i;
|
||||||
short int sub_buffer[112];
|
short int sub_buffer[112];
|
||||||
|
|
||||||
for(i = 0; i < 112; i++) {
|
for (i = 0; i < 112; i++) {
|
||||||
if(input_buffer[i] == 0) {
|
if (input_buffer[i] == 0) {
|
||||||
sub_buffer[i] = 1;
|
sub_buffer[i] = 1;
|
||||||
} else {
|
} else {
|
||||||
sub_buffer[i] = 0;
|
sub_buffer[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binary_add(accumulator, sub_buffer);
|
binary_add(accumulator, sub_buffer);
|
||||||
|
|
||||||
sub_buffer[0] = 1;
|
sub_buffer[0] = 1;
|
||||||
|
|
||||||
for(i = 1; i < 112; i++) {
|
for (i = 1; i < 112; i++) {
|
||||||
sub_buffer[i] = 0;
|
sub_buffer[i] = 0;
|
||||||
}
|
}
|
||||||
binary_add(accumulator, sub_buffer);
|
binary_add(accumulator, sub_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void shiftdown(short int buffer[])
|
void shiftdown(short int buffer[]) {
|
||||||
{
|
int i;
|
||||||
int i;
|
|
||||||
|
|
||||||
buffer[102] = 0;
|
buffer[102] = 0;
|
||||||
buffer[103] = 0;
|
buffer[103] = 0;
|
||||||
|
|
||||||
for(i = 0; i < 102; i++) {
|
for (i = 0; i < 102; i++) {
|
||||||
buffer[i] = buffer[i + 1];
|
buffer[i] = buffer[i + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void shiftup(short int buffer[])
|
void shiftup(short int buffer[]) {
|
||||||
{
|
int i;
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i = 102; i > 0; i--) {
|
for (i = 102; i > 0; i--) {
|
||||||
buffer[i] = buffer[i - 1];
|
buffer[i] = buffer[i - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer[0] = 0;
|
buffer[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
short int islarger(short int accum[], short int reg[])
|
short int islarger(short int accum[], short int reg[]) {
|
||||||
{
|
/* Returns 1 if accum[] is larger than reg[], else 0 */
|
||||||
/* Returns 1 if accum[] is larger than reg[], else 0 */
|
int i, latch, larger;
|
||||||
int i, latch, larger;
|
latch = 0;
|
||||||
latch = 0;
|
i = 103;
|
||||||
i = 103;
|
larger = 0;
|
||||||
larger = 0;
|
|
||||||
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if((accum[i] == 1) && (reg[i] == 0)) {
|
if ((accum[i] == 1) && (reg[i] == 0)) {
|
||||||
latch = 1;
|
latch = 1;
|
||||||
larger = 1;
|
larger = 1;
|
||||||
}
|
}
|
||||||
if((accum[i] == 0) && (reg[i] == 1)) {
|
if ((accum[i] == 0) && (reg[i] == 1)) {
|
||||||
latch = 1;
|
latch = 1;
|
||||||
}
|
}
|
||||||
i--;
|
i--;
|
||||||
} while ((latch == 0) && (i >= -1));
|
} while ((latch == 0) && (i >= -1));
|
||||||
|
|
||||||
return larger;
|
return larger;
|
||||||
}
|
}
|
||||||
|
|
||||||
void binary_load(short int reg[], char data[], const unsigned int src_len)
|
void binary_load(short int reg[], char data[], const unsigned int src_len) {
|
||||||
{
|
int read, i;
|
||||||
int read, i;
|
short int temp[112] = {0};
|
||||||
short int temp[112] = { 0 };
|
|
||||||
|
|
||||||
for(i = 0; i < 112; i++) {
|
for (i = 0; i < 112; i++) {
|
||||||
reg[i] = 0;
|
reg[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(read = 0; read < src_len; read++) {
|
for (read = 0; read < src_len; read++) {
|
||||||
|
|
||||||
for(i = 0; i < 112; i++) {
|
for (i = 0; i < 112; i++) {
|
||||||
temp[i] = reg[i];
|
temp[i] = reg[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
binary_add(reg, temp);
|
binary_add(reg, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
temp[0] = BCD[ctoi(data[read]) * 4];
|
temp[0] = BCD[ctoi(data[read]) * 4];
|
||||||
temp[1] = BCD[(ctoi(data[read]) * 4) + 1];
|
temp[1] = BCD[(ctoi(data[read]) * 4) + 1];
|
||||||
temp[2] = BCD[(ctoi(data[read]) * 4) + 2];
|
temp[2] = BCD[(ctoi(data[read]) * 4) + 2];
|
||||||
temp[3] = BCD[(ctoi(data[read]) * 4) + 3];
|
temp[3] = BCD[(ctoi(data[read]) * 4) + 3];
|
||||||
for(i = 4; i < 112; i++) {
|
for (i = 4; i < 112; i++) {
|
||||||
temp[i] = 0;
|
temp[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
binary_add(reg, temp);
|
binary_add(reg, temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void hex_dump(short int input_buffer[])
|
|
||||||
{
|
|
||||||
int i, digit, byte_space;
|
|
||||||
|
|
||||||
byte_space = 1;
|
|
||||||
for(i = 100; i >= 0; i-=4) {
|
|
||||||
digit = 0;
|
|
||||||
digit += 1 * input_buffer[i];
|
|
||||||
digit += 2 * input_buffer[i + 1];
|
|
||||||
digit += 4 * input_buffer[i + 2];
|
|
||||||
digit += 8 * input_buffer[i + 3];
|
|
||||||
|
|
||||||
switch(digit) {
|
|
||||||
case 0: printf("0"); break;
|
|
||||||
case 1: printf("1"); break;
|
|
||||||
case 2: printf("2"); break;
|
|
||||||
case 3: printf("3"); break;
|
|
||||||
case 4: printf("4"); break;
|
|
||||||
case 5: printf("5"); break;
|
|
||||||
case 6: printf("6"); break;
|
|
||||||
case 7: printf("7"); break;
|
|
||||||
case 8: printf("8"); break;
|
|
||||||
case 9: printf("9"); break;
|
|
||||||
case 10: printf("A"); break;
|
|
||||||
case 11: printf("B"); break;
|
|
||||||
case 12: printf("C"); break;
|
|
||||||
case 13: printf("D"); break;
|
|
||||||
case 14: printf("E"); break;
|
|
||||||
case 15: printf("F"); break;
|
|
||||||
}
|
|
||||||
if(byte_space == 1) {
|
|
||||||
byte_space = 0;
|
|
||||||
} else {
|
|
||||||
byte_space = 1;
|
|
||||||
printf(" ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
|
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
@ -42,7 +42,6 @@ extern void binary_subtract(short int accumulator[], short int input_buffer[]);
|
|||||||
extern void shiftdown(short int buffer[]);
|
extern void shiftdown(short int buffer[]);
|
||||||
extern void shiftup(short int buffer[]);
|
extern void shiftup(short int buffer[]);
|
||||||
extern short int islarger(short int accum[], short int reg[]);
|
extern short int islarger(short int accum[], short int reg[]);
|
||||||
extern void hex_dump(short int input_buffer[]);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
1592
backend/library.c
1592
backend/library.c
File diff suppressed because it is too large
Load Diff
1174
backend/maxicode.c
1174
backend/maxicode.c
File diff suppressed because it is too large
Load Diff
@ -2,20 +2,20 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
|
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
are met:
|
are met:
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
1. Redistributions of source code must retain the above copyright
|
||||||
notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
notice, this list of conditions and the following disclaimer in the
|
notice, this list of conditions and the following disclaimer in the
|
||||||
documentation and/or other materials provided with the distribution.
|
documentation and/or other materials provided with the distribution.
|
||||||
3. Neither the name of the project nor the names of its contributors
|
3. Neither the name of the project nor the names of its contributors
|
||||||
may be used to endorse or promote products derived from this software
|
may be used to endorse or promote products derived from this software
|
||||||
without specific prior written permission.
|
without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
@ -26,76 +26,79 @@
|
|||||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const int MaxiGrid[] = { /* ISO/IEC 16023 Figure 5 - MaxiCode Module Sequence */ /* 30 x 33 data grid */
|
static const int MaxiGrid[] = {
|
||||||
122, 121, 128, 127, 134, 133, 140, 139, 146, 145, 152, 151, 158, 157, 164, 163, 170, 169, 176, 175, 182, 181, 188, 187, 194, 193, 200, 199, 0, 0,
|
/* ISO/IEC 16023 Figure 5 - MaxiCode Module Sequence */ /* 30 x 33 data grid */
|
||||||
124, 123, 130, 129, 136, 135, 142, 141, 148, 147, 154, 153, 160, 159, 166, 165, 172, 171, 178, 177, 184, 183, 190, 189, 196, 195, 202, 201, 817, 0,
|
122, 121, 128, 127, 134, 133, 140, 139, 146, 145, 152, 151, 158, 157, 164, 163, 170, 169, 176, 175, 182, 181, 188, 187, 194, 193, 200, 199, 0, 0,
|
||||||
126, 125, 132, 131, 138, 137, 144, 143, 150, 149, 156, 155, 162, 161, 168, 167, 174, 173, 180, 179, 186, 185, 192, 191, 198, 197, 204, 203, 819, 818,
|
124, 123, 130, 129, 136, 135, 142, 141, 148, 147, 154, 153, 160, 159, 166, 165, 172, 171, 178, 177, 184, 183, 190, 189, 196, 195, 202, 201, 817, 0,
|
||||||
284, 283, 278, 277, 272, 271, 266, 265, 260, 259, 254, 253, 248, 247, 242, 241, 236, 235, 230, 229, 224, 223, 218, 217, 212, 211, 206, 205, 820, 0,
|
126, 125, 132, 131, 138, 137, 144, 143, 150, 149, 156, 155, 162, 161, 168, 167, 174, 173, 180, 179, 186, 185, 192, 191, 198, 197, 204, 203, 819, 818,
|
||||||
286, 285, 280, 279, 274, 273, 268, 267, 262, 261, 256, 255, 250, 249, 244, 243, 238, 237, 232, 231, 226, 225, 220, 219, 214, 213, 208, 207, 822, 821,
|
284, 283, 278, 277, 272, 271, 266, 265, 260, 259, 254, 253, 248, 247, 242, 241, 236, 235, 230, 229, 224, 223, 218, 217, 212, 211, 206, 205, 820, 0,
|
||||||
288, 287, 282, 281, 276, 275, 270, 269, 264, 263, 258, 257, 252, 251, 246, 245, 240, 239, 234, 233, 228, 227, 222, 221, 216, 215, 210, 209, 823, 0,
|
286, 285, 280, 279, 274, 273, 268, 267, 262, 261, 256, 255, 250, 249, 244, 243, 238, 237, 232, 231, 226, 225, 220, 219, 214, 213, 208, 207, 822, 821,
|
||||||
290, 289, 296, 295, 302, 301, 308, 307, 314, 313, 320, 319, 326, 325, 332, 331, 338, 337, 344, 343, 350, 349, 356, 355, 362, 361, 368, 367, 825, 824,
|
288, 287, 282, 281, 276, 275, 270, 269, 264, 263, 258, 257, 252, 251, 246, 245, 240, 239, 234, 233, 228, 227, 222, 221, 216, 215, 210, 209, 823, 0,
|
||||||
292, 291, 298, 297, 304, 303, 310, 309, 316, 315, 322, 321, 328, 327, 334, 333, 340, 339, 346, 345, 352, 351, 358, 357, 364, 363, 370, 369, 826, 0,
|
290, 289, 296, 295, 302, 301, 308, 307, 314, 313, 320, 319, 326, 325, 332, 331, 338, 337, 344, 343, 350, 349, 356, 355, 362, 361, 368, 367, 825, 824,
|
||||||
294, 293, 300, 299, 306, 305, 312, 311, 318, 317, 324, 323, 330, 329, 336, 335, 342, 341, 348, 347, 354, 353, 360, 359, 366, 365, 372, 371, 828, 827,
|
292, 291, 298, 297, 304, 303, 310, 309, 316, 315, 322, 321, 328, 327, 334, 333, 340, 339, 346, 345, 352, 351, 358, 357, 364, 363, 370, 369, 826, 0,
|
||||||
410, 409, 404, 403, 398, 397, 392, 391, 80, 79, 0, 0, 14, 13, 38, 37, 3, 0, 45, 44, 110, 109, 386, 385, 380, 379, 374, 373, 829, 0,
|
294, 293, 300, 299, 306, 305, 312, 311, 318, 317, 324, 323, 330, 329, 336, 335, 342, 341, 348, 347, 354, 353, 360, 359, 366, 365, 372, 371, 828, 827,
|
||||||
412, 411, 406, 405, 400, 399, 394, 393, 82, 81, 41, 0, 16, 15, 40, 39, 4, 0, 0, 46, 112, 111, 388, 387, 382, 381, 376, 375, 831, 830,
|
410, 409, 404, 403, 398, 397, 392, 391, 80, 79, 0, 0, 14, 13, 38, 37, 3, 0, 45, 44, 110, 109, 386, 385, 380, 379, 374, 373, 829, 0,
|
||||||
414, 413, 408, 407, 402, 401, 396, 395, 84, 83, 42, 0, 0, 0, 0, 0, 6, 5, 48, 47, 114, 113, 390, 389, 384, 383, 378, 377, 832, 0,
|
412, 411, 406, 405, 400, 399, 394, 393, 82, 81, 41, 0, 16, 15, 40, 39, 4, 0, 0, 46, 112, 111, 388, 387, 382, 381, 376, 375, 831, 830,
|
||||||
416, 415, 422, 421, 428, 427, 104, 103, 56, 55, 17, 0, 0, 0, 0, 0, 0, 0, 21, 20, 86, 85, 434, 433, 440, 439, 446, 445, 834, 833,
|
414, 413, 408, 407, 402, 401, 396, 395, 84, 83, 42, 0, 0, 0, 0, 0, 6, 5, 48, 47, 114, 113, 390, 389, 384, 383, 378, 377, 832, 0,
|
||||||
418, 417, 424, 423, 430, 429, 106, 105, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 23, 22, 88, 87, 436, 435, 442, 441, 448, 447, 835, 0,
|
416, 415, 422, 421, 428, 427, 104, 103, 56, 55, 17, 0, 0, 0, 0, 0, 0, 0, 21, 20, 86, 85, 434, 433, 440, 439, 446, 445, 834, 833,
|
||||||
420, 419, 426, 425, 432, 431, 108, 107, 60, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 90, 89, 438, 437, 444, 443, 450, 449, 837, 836,
|
418, 417, 424, 423, 430, 429, 106, 105, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 23, 22, 88, 87, 436, 435, 442, 441, 448, 447, 835, 0,
|
||||||
482, 481, 476, 475, 470, 469, 49, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 54, 53, 464, 463, 458, 457, 452, 451, 838, 0,
|
420, 419, 426, 425, 432, 431, 108, 107, 60, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 90, 89, 438, 437, 444, 443, 450, 449, 837, 836,
|
||||||
484, 483, 478, 477, 472, 471, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 465, 460, 459, 454, 453, 840, 839,
|
482, 481, 476, 475, 470, 469, 49, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 54, 53, 464, 463, 458, 457, 452, 451, 838, 0,
|
||||||
486, 485, 480, 479, 474, 473, 52, 51, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 43, 468, 467, 462, 461, 456, 455, 841, 0,
|
484, 483, 478, 477, 472, 471, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 465, 460, 459, 454, 453, 840, 839,
|
||||||
488, 487, 494, 493, 500, 499, 98, 97, 62, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 92, 91, 506, 505, 512, 511, 518, 517, 843, 842,
|
486, 485, 480, 479, 474, 473, 52, 51, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 43, 468, 467, 462, 461, 456, 455, 841, 0,
|
||||||
490, 489, 496, 495, 502, 501, 100, 99, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 29, 28, 94, 93, 508, 507, 514, 513, 520, 519, 844, 0,
|
488, 487, 494, 493, 500, 499, 98, 97, 62, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 92, 91, 506, 505, 512, 511, 518, 517, 843, 842,
|
||||||
492, 491, 498, 497, 504, 503, 102, 101, 66, 65, 18, 0, 0, 0, 0, 0, 0, 0, 19, 30, 96, 95, 510, 509, 516, 515, 522, 521, 846, 845,
|
490, 489, 496, 495, 502, 501, 100, 99, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 29, 28, 94, 93, 508, 507, 514, 513, 520, 519, 844, 0,
|
||||||
560, 559, 554, 553, 548, 547, 542, 541, 74, 73, 33, 0, 0, 0, 0, 0, 0, 11, 68, 67, 116, 115, 536, 535, 530, 529, 524, 523, 847, 0,
|
492, 491, 498, 497, 504, 503, 102, 101, 66, 65, 18, 0, 0, 0, 0, 0, 0, 0, 19, 30, 96, 95, 510, 509, 516, 515, 522, 521, 846, 845,
|
||||||
562, 561, 556, 555, 550, 549, 544, 543, 76, 75, 0, 0, 8, 7, 36, 35, 12, 0, 70, 69, 118, 117, 538, 537, 532, 531, 526, 525, 849, 848,
|
560, 559, 554, 553, 548, 547, 542, 541, 74, 73, 33, 0, 0, 0, 0, 0, 0, 11, 68, 67, 116, 115, 536, 535, 530, 529, 524, 523, 847, 0,
|
||||||
564, 563, 558, 557, 552, 551, 546, 545, 78, 77, 0, 34, 10, 9, 26, 25, 0, 0, 72, 71, 120, 119, 540, 539, 534, 533, 528, 527, 850, 0,
|
562, 561, 556, 555, 550, 549, 544, 543, 76, 75, 0, 0, 8, 7, 36, 35, 12, 0, 70, 69, 118, 117, 538, 537, 532, 531, 526, 525, 849, 848,
|
||||||
566, 565, 572, 571, 578, 577, 584, 583, 590, 589, 596, 595, 602, 601, 608, 607, 614, 613, 620, 619, 626, 625, 632, 631, 638, 637, 644, 643, 852, 851,
|
564, 563, 558, 557, 552, 551, 546, 545, 78, 77, 0, 34, 10, 9, 26, 25, 0, 0, 72, 71, 120, 119, 540, 539, 534, 533, 528, 527, 850, 0,
|
||||||
568, 567, 574, 573, 580, 579, 586, 585, 592, 591, 598, 597, 604, 603, 610, 609, 616, 615, 622, 621, 628, 627, 634, 633, 640, 639, 646, 645, 853, 0,
|
566, 565, 572, 571, 578, 577, 584, 583, 590, 589, 596, 595, 602, 601, 608, 607, 614, 613, 620, 619, 626, 625, 632, 631, 638, 637, 644, 643, 852, 851,
|
||||||
570, 569, 576, 575, 582, 581, 588, 587, 594, 593, 600, 599, 606, 605, 612, 611, 618, 617, 624, 623, 630, 629, 636, 635, 642, 641, 648, 647, 855, 854,
|
568, 567, 574, 573, 580, 579, 586, 585, 592, 591, 598, 597, 604, 603, 610, 609, 616, 615, 622, 621, 628, 627, 634, 633, 640, 639, 646, 645, 853, 0,
|
||||||
728, 727, 722, 721, 716, 715, 710, 709, 704, 703, 698, 697, 692, 691, 686, 685, 680, 679, 674, 673, 668, 667, 662, 661, 656, 655, 650, 649, 856, 0,
|
570, 569, 576, 575, 582, 581, 588, 587, 594, 593, 600, 599, 606, 605, 612, 611, 618, 617, 624, 623, 630, 629, 636, 635, 642, 641, 648, 647, 855, 854,
|
||||||
730, 729, 724, 723, 718, 717, 712, 711, 706, 705, 700, 699, 694, 693, 688, 687, 682, 681, 676, 675, 670, 669, 664, 663, 658, 657, 652, 651, 858, 857,
|
728, 727, 722, 721, 716, 715, 710, 709, 704, 703, 698, 697, 692, 691, 686, 685, 680, 679, 674, 673, 668, 667, 662, 661, 656, 655, 650, 649, 856, 0,
|
||||||
732, 731, 726, 725, 720, 719, 714, 713, 708, 707, 702, 701, 696, 695, 690, 689, 684, 683, 678, 677, 672, 671, 666, 665, 660, 659, 654, 653, 859, 0,
|
730, 729, 724, 723, 718, 717, 712, 711, 706, 705, 700, 699, 694, 693, 688, 687, 682, 681, 676, 675, 670, 669, 664, 663, 658, 657, 652, 651, 858, 857,
|
||||||
734, 733, 740, 739, 746, 745, 752, 751, 758, 757, 764, 763, 770, 769, 776, 775, 782, 781, 788, 787, 794, 793, 800, 799, 806, 805, 812, 811, 861, 860,
|
732, 731, 726, 725, 720, 719, 714, 713, 708, 707, 702, 701, 696, 695, 690, 689, 684, 683, 678, 677, 672, 671, 666, 665, 660, 659, 654, 653, 859, 0,
|
||||||
736, 735, 742, 741, 748, 747, 754, 753, 760, 759, 766, 765, 772, 771, 778, 777, 784, 783, 790, 789, 796, 795, 802, 801, 808, 807, 814, 813, 862, 0,
|
734, 733, 740, 739, 746, 745, 752, 751, 758, 757, 764, 763, 770, 769, 776, 775, 782, 781, 788, 787, 794, 793, 800, 799, 806, 805, 812, 811, 861, 860,
|
||||||
738, 737, 744, 743, 750, 749, 756, 755, 762, 761, 768, 767, 774, 773, 780, 779, 786, 785, 792, 791, 798, 797, 804, 803, 810, 809, 816, 815, 864, 863
|
736, 735, 742, 741, 748, 747, 754, 753, 760, 759, 766, 765, 772, 771, 778, 777, 784, 783, 790, 789, 796, 795, 802, 801, 808, 807, 814, 813, 862, 0,
|
||||||
|
738, 737, 744, 743, 750, 749, 756, 755, 762, 761, 768, 767, 774, 773, 780, 779, 786, 785, 792, 791, 798, 797, 804, 803, 810, 809, 816, 815, 864, 863
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int maxiCodeSet[256] = { /* from Appendix A - ASCII character to Code Set (e.g. 2 = Set B) */
|
static const int maxiCodeSet[256] = {
|
||||||
/* set 0 refers to special characters that fit into more than one set (e.g. GS) */
|
/* from Appendix A - ASCII character to Code Set (e.g. 2 = Set B) */
|
||||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
|
/* set 0 refers to special characters that fit into more than one set (e.g. GS) */
|
||||||
5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 0, 2, 1, 1, 1, 1, 1, 1,
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
|
||||||
1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2,
|
5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 0, 2, 1, 1, 1, 1, 1, 1,
|
||||||
2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
|
||||||
5, 4, 5, 5, 5, 5, 5, 5, 4, 5, 3, 4, 3, 5, 5, 4, 4, 3, 3, 3,
|
4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||||
4, 3, 5, 4, 4, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3,
|
5, 4, 5, 5, 5, 5, 5, 5, 4, 5, 3, 4, 3, 5, 5, 4, 4, 3, 3, 3,
|
||||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
4, 3, 5, 4, 4, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||||
3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
|
3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||||
|
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int maxiSymbolChar[256] = { /* from Appendix A - ASCII character to symbol value */
|
static const int maxiSymbolChar[256] = {
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
|
/* from Appendix A - ASCII character to symbol value */
|
||||||
20, 21, 22, 23, 24, 25, 26, 30, 28, 29, 30, 35, 32, 53, 34, 35, 36, 37, 38, 39,
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
|
||||||
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 37,
|
20, 21, 22, 23, 24, 25, 26, 30, 28, 29, 30, 35, 32, 53, 34, 35, 36, 37, 38, 39,
|
||||||
38, 39, 40, 41, 52, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 37,
|
||||||
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 42, 43, 44, 45, 46, 0, 1, 2, 3,
|
38, 39, 40, 41, 52, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 42, 43, 44, 45, 46, 0, 1, 2, 3,
|
||||||
24, 25, 26, 32, 54, 34, 35, 36, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 47, 48,
|
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
||||||
49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 36,
|
24, 25, 26, 32, 54, 34, 35, 36, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 47, 48,
|
||||||
37, 37, 38, 39, 40, 41, 42, 43, 38, 44, 37, 39, 38, 45, 46, 40, 41, 39, 40, 41,
|
49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 36,
|
||||||
42, 42, 47, 43, 44, 43, 44, 45, 45, 46, 47, 46, 0, 1, 2, 3, 4, 5, 6, 7,
|
37, 37, 38, 39, 40, 41, 42, 43, 38, 44, 37, 39, 38, 45, 46, 40, 41, 39, 40, 41,
|
||||||
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32,
|
42, 42, 47, 43, 44, 43, 44, 45, 45, 46, 47, 46, 0, 1, 2, 3, 4, 5, 6, 7,
|
||||||
33, 34, 35, 36, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32,
|
||||||
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36
|
33, 34, 35, 36, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
|
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
|
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
@ -28,7 +28,7 @@
|
|||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* This file contains the pixel-by-pixel representation of maxicode glyphs
|
/* This file contains the pixel-by-pixel representation of maxicode glyphs
|
||||||
at a resolution of 12 pixels per millimeter. hexagon[] is taken directly
|
at a resolution of 12 pixels per millimeter. hexagon[] is taken directly
|
||||||
@ -37,113 +37,113 @@
|
|||||||
#define SSET "0123456789ABCDEF"
|
#define SSET "0123456789ABCDEF"
|
||||||
|
|
||||||
static const int hexagon[120] = {
|
static const int hexagon[120] = {
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
|
0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
|
||||||
0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
|
||||||
0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
|
||||||
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
|
||||||
0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
|
||||||
0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
|
0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned int bullseye_compressed[] = {
|
static const unsigned int bullseye_compressed[] = {
|
||||||
0,0,0,0,0,255,248,0,0,0,0,0,
|
0, 0, 0, 0, 0, 255, 248, 0, 0, 0, 0, 0,
|
||||||
0,0,0,0,31,255,255,192,0,0,0,0,
|
0, 0, 0, 0, 31, 255, 255, 192, 0, 0, 0, 0,
|
||||||
0,0,0,1,255,255,255,252,0,0,0,0,
|
0, 0, 0, 1, 255, 255, 255, 252, 0, 0, 0, 0,
|
||||||
0,0,0,7,255,255,255,255,0,0,0,0,
|
0, 0, 0, 7, 255, 255, 255, 255, 0, 0, 0, 0,
|
||||||
0,0,0,31,255,255,255,255,192,0,0,0,
|
0, 0, 0, 31, 255, 255, 255, 255, 192, 0, 0, 0,
|
||||||
0,0,0,127,255,255,255,255,240,0,0,0,
|
0, 0, 0, 127, 255, 255, 255, 255, 240, 0, 0, 0,
|
||||||
0,0,1,255,255,255,255,255,252,0,0,0,
|
0, 0, 1, 255, 255, 255, 255, 255, 252, 0, 0, 0,
|
||||||
0,0,7,255,255,255,255,255,255,0,0,0,
|
0, 0, 7, 255, 255, 255, 255, 255, 255, 0, 0, 0,
|
||||||
0,0,15,255,255,0,7,255,255,128,0,0,
|
0, 0, 15, 255, 255, 0, 7, 255, 255, 128, 0, 0,
|
||||||
0,0,63,255,240,0,0,127,255,224,0,0,
|
0, 0, 63, 255, 240, 0, 0, 127, 255, 224, 0, 0,
|
||||||
0,0,127,255,128,0,0,15,255,240,0,0,
|
0, 0, 127, 255, 128, 0, 0, 15, 255, 240, 0, 0,
|
||||||
0,0,255,252,0,0,0,1,255,248,0,0,
|
0, 0, 255, 252, 0, 0, 0, 1, 255, 248, 0, 0,
|
||||||
0,1,255,240,0,0,0,0,127,252,0,0,
|
0, 1, 255, 240, 0, 0, 0, 0, 127, 252, 0, 0,
|
||||||
0,3,255,224,0,0,0,0,63,254,0,0,
|
0, 3, 255, 224, 0, 0, 0, 0, 63, 254, 0, 0,
|
||||||
0,7,255,128,0,0,0,0,15,255,0,0,
|
0, 7, 255, 128, 0, 0, 0, 0, 15, 255, 0, 0,
|
||||||
0,15,255,0,0,0,0,0,7,255,128,0,
|
0, 15, 255, 0, 0, 0, 0, 0, 7, 255, 128, 0,
|
||||||
0,31,252,0,0,127,240,0,1,255,192,0,
|
0, 31, 252, 0, 0, 127, 240, 0, 1, 255, 192, 0,
|
||||||
0,63,248,0,7,255,255,0,0,255,224,0,
|
0, 63, 248, 0, 7, 255, 255, 0, 0, 255, 224, 0,
|
||||||
0,127,240,0,63,255,255,224,0,127,240,0,
|
0, 127, 240, 0, 63, 255, 255, 224, 0, 127, 240, 0,
|
||||||
0,127,224,0,255,255,255,248,0,63,240,0,
|
0, 127, 224, 0, 255, 255, 255, 248, 0, 63, 240, 0,
|
||||||
0,255,192,1,255,255,255,252,0,31,248,0,
|
0, 255, 192, 1, 255, 255, 255, 252, 0, 31, 248, 0,
|
||||||
1,255,128,7,255,255,255,255,0,15,252,0,
|
1, 255, 128, 7, 255, 255, 255, 255, 0, 15, 252, 0,
|
||||||
1,255,0,15,255,255,255,255,128,7,252,0,
|
1, 255, 0, 15, 255, 255, 255, 255, 128, 7, 252, 0,
|
||||||
3,255,0,63,255,255,255,255,224,7,254,0,
|
3, 255, 0, 63, 255, 255, 255, 255, 224, 7, 254, 0,
|
||||||
3,254,0,127,255,192,31,255,240,3,254,0,
|
3, 254, 0, 127, 255, 192, 31, 255, 240, 3, 254, 0,
|
||||||
7,252,0,255,252,0,1,255,248,1,255,0,
|
7, 252, 0, 255, 252, 0, 1, 255, 248, 1, 255, 0,
|
||||||
7,252,1,255,240,0,0,127,252,1,255,0,
|
7, 252, 1, 255, 240, 0, 0, 127, 252, 1, 255, 0,
|
||||||
15,248,1,255,192,0,0,31,252,0,255,128,
|
15, 248, 1, 255, 192, 0, 0, 31, 252, 0, 255, 128,
|
||||||
15,240,3,255,128,0,0,15,254,0,127,128,
|
15, 240, 3, 255, 128, 0, 0, 15, 254, 0, 127, 128,
|
||||||
31,240,7,255,0,0,0,7,255,0,127,192,
|
31, 240, 7, 255, 0, 0, 0, 7, 255, 0, 127, 192,
|
||||||
31,224,7,254,0,0,0,3,255,0,63,192,
|
31, 224, 7, 254, 0, 0, 0, 3, 255, 0, 63, 192,
|
||||||
63,224,15,252,0,0,0,1,255,128,63,224,
|
63, 224, 15, 252, 0, 0, 0, 1, 255, 128, 63, 224,
|
||||||
63,224,31,248,0,63,192,0,255,192,63,224,
|
63, 224, 31, 248, 0, 63, 192, 0, 255, 192, 63, 224,
|
||||||
63,192,31,240,0,255,240,0,127,192,31,224,
|
63, 192, 31, 240, 0, 255, 240, 0, 127, 192, 31, 224,
|
||||||
63,192,63,224,3,255,252,0,63,224,31,224,
|
63, 192, 63, 224, 3, 255, 252, 0, 63, 224, 31, 224,
|
||||||
127,192,63,224,7,255,254,0,63,224,31,240,
|
127, 192, 63, 224, 7, 255, 254, 0, 63, 224, 31, 240,
|
||||||
127,128,63,192,15,255,255,0,31,224,15,240,
|
127, 128, 63, 192, 15, 255, 255, 0, 31, 224, 15, 240,
|
||||||
127,128,127,192,31,255,255,128,31,240,15,240,
|
127, 128, 127, 192, 31, 255, 255, 128, 31, 240, 15, 240,
|
||||||
127,128,127,128,63,255,255,192,15,240,15,240,
|
127, 128, 127, 128, 63, 255, 255, 192, 15, 240, 15, 240,
|
||||||
127,128,127,128,63,255,255,192,15,240,15,240,
|
127, 128, 127, 128, 63, 255, 255, 192, 15, 240, 15, 240,
|
||||||
255,0,127,128,127,240,255,224,15,240,7,240,
|
255, 0, 127, 128, 127, 240, 255, 224, 15, 240, 7, 240,
|
||||||
255,0,255,128,127,192,63,224,15,248,7,240,
|
255, 0, 255, 128, 127, 192, 63, 224, 15, 248, 7, 240,
|
||||||
255,0,255,0,255,128,31,240,7,248,7,240,
|
255, 0, 255, 0, 255, 128, 31, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,255,128,31,240,7,248,7,240,
|
255, 0, 255, 0, 255, 128, 31, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,255,0,15,240,7,248,7,240,
|
255, 0, 255, 0, 255, 0, 15, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,255,0,15,240,7,248,7,240,
|
255, 0, 255, 0, 255, 0, 15, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,255,0,15,240,7,248,7,240,
|
255, 0, 255, 0, 255, 0, 15, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,255,0,15,240,7,248,7,240,
|
255, 0, 255, 0, 255, 0, 15, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,255,128,31,240,7,248,7,240,
|
255, 0, 255, 0, 255, 128, 31, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,255,128,31,240,7,248,7,240,
|
255, 0, 255, 0, 255, 128, 31, 240, 7, 248, 7, 240,
|
||||||
255,0,255,0,127,192,63,224,7,248,7,240,
|
255, 0, 255, 0, 127, 192, 63, 224, 7, 248, 7, 240,
|
||||||
255,0,255,128,127,240,255,224,15,248,7,240,
|
255, 0, 255, 128, 127, 240, 255, 224, 15, 248, 7, 240,
|
||||||
255,0,127,128,63,255,255,192,15,240,7,240,
|
255, 0, 127, 128, 63, 255, 255, 192, 15, 240, 7, 240,
|
||||||
127,128,127,128,63,255,255,192,15,240,15,240,
|
127, 128, 127, 128, 63, 255, 255, 192, 15, 240, 15, 240,
|
||||||
127,128,127,128,31,255,255,128,15,240,15,240,
|
127, 128, 127, 128, 31, 255, 255, 128, 15, 240, 15, 240,
|
||||||
127,128,127,192,15,255,255,0,31,240,15,240,
|
127, 128, 127, 192, 15, 255, 255, 0, 31, 240, 15, 240,
|
||||||
127,128,63,192,7,255,254,0,31,224,15,240,
|
127, 128, 63, 192, 7, 255, 254, 0, 31, 224, 15, 240,
|
||||||
127,192,63,224,3,255,252,0,63,224,31,240,
|
127, 192, 63, 224, 3, 255, 252, 0, 63, 224, 31, 240,
|
||||||
63,192,63,224,0,255,240,0,63,224,31,224,
|
63, 192, 63, 224, 0, 255, 240, 0, 63, 224, 31, 224,
|
||||||
63,192,31,240,0,63,192,0,127,192,31,224,
|
63, 192, 31, 240, 0, 63, 192, 0, 127, 192, 31, 224,
|
||||||
63,224,31,248,0,0,0,0,255,192,63,224,
|
63, 224, 31, 248, 0, 0, 0, 0, 255, 192, 63, 224,
|
||||||
63,224,15,252,0,0,0,1,255,128,63,224,
|
63, 224, 15, 252, 0, 0, 0, 1, 255, 128, 63, 224,
|
||||||
31,224,7,254,0,0,0,3,255,0,63,192,
|
31, 224, 7, 254, 0, 0, 0, 3, 255, 0, 63, 192,
|
||||||
31,240,7,255,0,0,0,7,255,0,127,192,
|
31, 240, 7, 255, 0, 0, 0, 7, 255, 0, 127, 192,
|
||||||
15,240,3,255,128,0,0,15,254,0,127,128,
|
15, 240, 3, 255, 128, 0, 0, 15, 254, 0, 127, 128,
|
||||||
15,248,1,255,192,0,0,31,252,0,255,128,
|
15, 248, 1, 255, 192, 0, 0, 31, 252, 0, 255, 128,
|
||||||
7,252,1,255,240,0,0,127,252,1,255,0,
|
7, 252, 1, 255, 240, 0, 0, 127, 252, 1, 255, 0,
|
||||||
7,252,0,255,252,0,1,255,248,1,255,0,
|
7, 252, 0, 255, 252, 0, 1, 255, 248, 1, 255, 0,
|
||||||
3,254,0,127,255,192,31,255,240,3,254,0,
|
3, 254, 0, 127, 255, 192, 31, 255, 240, 3, 254, 0,
|
||||||
3,255,0,63,255,255,255,255,224,7,254,0,
|
3, 255, 0, 63, 255, 255, 255, 255, 224, 7, 254, 0,
|
||||||
1,255,0,15,255,255,255,255,128,7,252,0,
|
1, 255, 0, 15, 255, 255, 255, 255, 128, 7, 252, 0,
|
||||||
1,255,128,7,255,255,255,255,0,15,252,0,
|
1, 255, 128, 7, 255, 255, 255, 255, 0, 15, 252, 0,
|
||||||
0,255,192,1,255,255,255,252,0,31,248,0,
|
0, 255, 192, 1, 255, 255, 255, 252, 0, 31, 248, 0,
|
||||||
0,127,224,0,255,255,255,248,0,63,240,0,
|
0, 127, 224, 0, 255, 255, 255, 248, 0, 63, 240, 0,
|
||||||
0,127,240,0,63,255,255,224,0,127,240,0,
|
0, 127, 240, 0, 63, 255, 255, 224, 0, 127, 240, 0,
|
||||||
0,63,248,0,7,255,255,0,0,255,224,0,
|
0, 63, 248, 0, 7, 255, 255, 0, 0, 255, 224, 0,
|
||||||
0,31,252,0,0,127,240,0,1,255,192,0,
|
0, 31, 252, 0, 0, 127, 240, 0, 1, 255, 192, 0,
|
||||||
0,15,255,0,0,0,0,0,7,255,128,0,
|
0, 15, 255, 0, 0, 0, 0, 0, 7, 255, 128, 0,
|
||||||
0,7,255,128,0,0,0,0,15,255,0,0,
|
0, 7, 255, 128, 0, 0, 0, 0, 15, 255, 0, 0,
|
||||||
0,3,255,224,0,0,0,0,63,254,0,0,
|
0, 3, 255, 224, 0, 0, 0, 0, 63, 254, 0, 0,
|
||||||
0,1,255,240,0,0,0,0,127,252,0,0,
|
0, 1, 255, 240, 0, 0, 0, 0, 127, 252, 0, 0,
|
||||||
0,0,255,252,0,0,0,1,255,248,0,0,
|
0, 0, 255, 252, 0, 0, 0, 1, 255, 248, 0, 0,
|
||||||
0,0,127,255,128,0,0,15,255,240,0,0,
|
0, 0, 127, 255, 128, 0, 0, 15, 255, 240, 0, 0,
|
||||||
0,0,63,255,240,0,0,127,255,224,0,0,
|
0, 0, 63, 255, 240, 0, 0, 127, 255, 224, 0, 0,
|
||||||
0,0,15,255,255,0,7,255,255,128,0,0,
|
0, 0, 15, 255, 255, 0, 7, 255, 255, 128, 0, 0,
|
||||||
0,0,7,255,255,255,255,255,255,0,0,0,
|
0, 0, 7, 255, 255, 255, 255, 255, 255, 0, 0, 0,
|
||||||
0,0,1,255,255,255,255,255,252,0,0,0,
|
0, 0, 1, 255, 255, 255, 255, 255, 252, 0, 0, 0,
|
||||||
0,0,0,127,255,255,255,255,240,0,0,0,
|
0, 0, 0, 127, 255, 255, 255, 255, 240, 0, 0, 0,
|
||||||
0,0,0,31,255,255,255,255,192,0,0,0,
|
0, 0, 0, 31, 255, 255, 255, 255, 192, 0, 0, 0,
|
||||||
0,0,0,7,255,255,255,255,0,0,0,0,
|
0, 0, 0, 7, 255, 255, 255, 255, 0, 0, 0, 0,
|
||||||
0,0,0,1,255,255,255,252,0,0,0,0,
|
0, 0, 0, 1, 255, 255, 255, 252, 0, 0, 0, 0,
|
||||||
0,0,0,0,31,255,255,192,0,0,0,0,
|
0, 0, 0, 0, 31, 255, 255, 192, 0, 0, 0, 0,
|
||||||
0,0,0,0,0,255,248,0,0,0,0,0
|
0, 0, 0, 0, 0, 255, 248, 0, 0, 0, 0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
|
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
@ -28,7 +28,7 @@
|
|||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -40,280 +40,270 @@ extern int c39(struct zint_symbol *symbol, unsigned char source[], int length);
|
|||||||
|
|
||||||
#define CALCIUM "0123456789-$:/.+ABCD"
|
#define CALCIUM "0123456789-$:/.+ABCD"
|
||||||
|
|
||||||
static const char *CodaTable[20] = {"11111221", "11112211", "11121121", "22111111", "11211211", "21111211",
|
static const char *CodaTable[20] = {
|
||||||
"12111121", "12112111", "12211111", "21121111", "11122111", "11221111", "21112121", "21211121",
|
"11111221", "11112211", "11121121", "22111111", "11211211", "21111211",
|
||||||
"21212111", "11212121", "11221211", "12121121", "11121221", "11122211"};
|
"12111121", "12112111", "12211111", "21121111", "11122111", "11221111", "21112121", "21211121",
|
||||||
|
"21212111", "11212121", "11221211", "12121121", "11121221", "11122211"
|
||||||
|
};
|
||||||
|
|
||||||
int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length)
|
int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
{
|
/* "Pharmacode can represent only a single integer from 3 to 131070. Unlike other
|
||||||
/* "Pharmacode can represent only a single integer from 3 to 131070. Unlike other
|
commonly used one-dimensional barcode schemes, pharmacode does not store the data in a
|
||||||
commonly used one-dimensional barcode schemes, pharmacode does not store the data in a
|
form corresponding to the human-readable digits; the number is encoded in binary, rather
|
||||||
form corresponding to the human-readable digits; the number is encoded in binary, rather
|
than decimal. Pharmacode is read from right to left: with n as the bar position starting
|
||||||
than decimal. Pharmacode is read from right to left: with n as the bar position starting
|
at 0 on the right, each narrow bar adds 2n to the value and each wide bar adds 2(2^n).
|
||||||
at 0 on the right, each narrow bar adds 2n to the value and each wide bar adds 2(2^n).
|
The minimum barcode is 2 bars and the maximum 16, so the smallest number that could
|
||||||
The minimum barcode is 2 bars and the maximum 16, so the smallest number that could
|
be encoded is 3 (2 narrow bars) and the biggest is 131070 (16 wide bars)."
|
||||||
be encoded is 3 (2 narrow bars) and the biggest is 131070 (16 wide bars)."
|
- http://en.wikipedia.org/wiki/Pharmacode */
|
||||||
- http://en.wikipedia.org/wiki/Pharmacode */
|
|
||||||
|
|
||||||
/* This code uses the One Track Pharamacode calculating algorithm as recommended by
|
/* This code uses the One Track Pharamacode calculating algorithm as recommended by
|
||||||
the specification at http://www.laetus.com/laetus.php?request=file&id=69 */
|
the specification at http://www.laetus.com/laetus.php?request=file&id=69 */
|
||||||
|
|
||||||
unsigned long int tester;
|
unsigned long int tester;
|
||||||
int counter, error_number, h;
|
int counter, error_number, h;
|
||||||
char inter[18] = { 0 }; /* 131070 -> 17 bits */
|
char inter[18] = {0}; /* 131070 -> 17 bits */
|
||||||
char dest[64]; /* 17 * 2 + 1 */
|
char dest[64]; /* 17 * 2 + 1 */
|
||||||
|
|
||||||
error_number = 0;
|
error_number = 0;
|
||||||
|
|
||||||
if(length > 6) {
|
if (length > 6) {
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
return ZINT_ERROR_TOO_LONG;
|
||||||
}
|
}
|
||||||
error_number = is_sane(NEON, source, length);
|
error_number = is_sane(NEON, source, length);
|
||||||
if(error_number == ZINT_ERROR_INVALID_DATA) {
|
if (error_number == ZINT_ERROR_INVALID_DATA) {
|
||||||
strcpy(symbol->errtxt, "Invalid characters in data");
|
strcpy(symbol->errtxt, "Invalid characters in data");
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
tester = atoi((char*)source);
|
tester = atoi((char*) source);
|
||||||
|
|
||||||
if((tester < 3) || (tester > 131070)) {
|
if ((tester < 3) || (tester > 131070)) {
|
||||||
strcpy(symbol->errtxt, "Data out of range");
|
strcpy(symbol->errtxt, "Data out of range");
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
do
|
do {
|
||||||
{
|
if (!(tester & 1)) {
|
||||||
if(!(tester & 1)) {
|
concat(inter, "W");
|
||||||
concat(inter, "W");
|
tester = (tester - 2) / 2;
|
||||||
tester = (tester - 2) / 2;
|
} else {
|
||||||
} else {
|
concat(inter, "N");
|
||||||
concat(inter, "N");
|
tester = (tester - 1) / 2;
|
||||||
tester = (tester - 1) / 2;
|
}
|
||||||
}
|
} while (tester != 0);
|
||||||
}
|
|
||||||
while(tester != 0);
|
|
||||||
|
|
||||||
h = strlen(inter) - 1;
|
h = strlen(inter) - 1;
|
||||||
*dest = '\0';
|
*dest = '\0';
|
||||||
for(counter = h; counter >= 0; counter--) {
|
for (counter = h; counter >= 0; counter--) {
|
||||||
if(inter[counter] == 'W') {
|
if (inter[counter] == 'W') {
|
||||||
concat(dest, "32");
|
concat(dest, "32");
|
||||||
} else {
|
} else {
|
||||||
concat(dest, "12");
|
concat(dest, "12");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
expand(symbol, dest);
|
expand(symbol, dest);
|
||||||
|
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char dest[])
|
int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
|
||||||
{
|
/* This code uses the Two Track Pharamacode defined in the document at
|
||||||
/* This code uses the Two Track Pharamacode defined in the document at
|
http://www.laetus.com/laetus.php?request=file&id=69 and using a modified
|
||||||
http://www.laetus.com/laetus.php?request=file&id=69 and using a modified
|
algorithm from the One Track system. This standard accepts integet values
|
||||||
algorithm from the One Track system. This standard accepts integet values
|
from 4 to 64570080. */
|
||||||
from 4 to 64570080. */
|
|
||||||
|
|
||||||
unsigned long int tester;
|
unsigned long int tester;
|
||||||
int counter, h;
|
int counter, h;
|
||||||
char inter[17];
|
char inter[17];
|
||||||
int error_number;
|
int error_number;
|
||||||
|
|
||||||
tester = atoi((char*)source);
|
tester = atoi((char*) source);
|
||||||
|
|
||||||
if((tester < 4) || (tester > 64570080))
|
if ((tester < 4) || (tester > 64570080)) {
|
||||||
{
|
strcpy(symbol->errtxt, "Data out of range");
|
||||||
strcpy(symbol->errtxt, "Data out of range");
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
}
|
||||||
}
|
error_number = 0;
|
||||||
error_number = 0;
|
strcpy(inter, "");
|
||||||
strcpy(inter, "");
|
do {
|
||||||
do
|
switch (tester % 3) {
|
||||||
{
|
case 0:
|
||||||
switch(tester%3) {
|
concat(inter, "3");
|
||||||
case 0:
|
tester = (tester - 3) / 3;
|
||||||
concat(inter, "3");
|
break;
|
||||||
tester = (tester - 3) / 3;
|
case 1:
|
||||||
break;
|
concat(inter, "1");
|
||||||
case 1:
|
tester = (tester - 1) / 3;
|
||||||
concat(inter, "1");
|
break;
|
||||||
tester = (tester - 1) / 3;
|
case 2:
|
||||||
break;
|
concat(inter, "2");
|
||||||
case 2:
|
tester = (tester - 2) / 3;
|
||||||
concat(inter, "2");
|
break;
|
||||||
tester = (tester - 2) / 3;
|
}
|
||||||
break;
|
} while (tester != 0);
|
||||||
}
|
|
||||||
}
|
|
||||||
while(tester != 0);
|
|
||||||
|
|
||||||
h = strlen(inter) - 1;
|
h = strlen(inter) - 1;
|
||||||
for(counter = h; counter >= 0; counter--)
|
for (counter = h; counter >= 0; counter--) {
|
||||||
{
|
dest[h - counter] = inter[counter];
|
||||||
dest[h - counter] = inter[counter];
|
}
|
||||||
}
|
dest[h + 1] = '\0';
|
||||||
dest[h + 1] = '\0';
|
|
||||||
|
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length)
|
int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
{
|
/* Draws the patterns for two track pharmacode */
|
||||||
/* Draws the patterns for two track pharmacode */
|
char height_pattern[200];
|
||||||
char height_pattern[200];
|
unsigned int loopey, h;
|
||||||
unsigned int loopey, h;
|
int writer;
|
||||||
int writer;
|
int error_number = 0;
|
||||||
int error_number = 0;
|
strcpy(height_pattern, "");
|
||||||
strcpy(height_pattern, "");
|
|
||||||
|
|
||||||
if(length > 8) {
|
if (length > 8) {
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
return ZINT_ERROR_TOO_LONG;
|
||||||
}
|
}
|
||||||
error_number = is_sane(NEON, source, length);
|
error_number = is_sane(NEON, source, length);
|
||||||
if(error_number == ZINT_ERROR_INVALID_DATA) {
|
if (error_number == ZINT_ERROR_INVALID_DATA) {
|
||||||
strcpy(symbol->errtxt, "Invalid characters in data");
|
strcpy(symbol->errtxt, "Invalid characters in data");
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
error_number = pharma_two_calc(symbol, source, height_pattern);
|
error_number = pharma_two_calc(symbol, source, height_pattern);
|
||||||
if(error_number != 0) {
|
if (error_number != 0) {
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
writer = 0;
|
writer = 0;
|
||||||
h = strlen(height_pattern);
|
h = strlen(height_pattern);
|
||||||
for(loopey = 0; loopey < h; loopey++)
|
for (loopey = 0; loopey < h; loopey++) {
|
||||||
{
|
if ((height_pattern[loopey] == '2') || (height_pattern[loopey] == '3')) {
|
||||||
if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '3'))
|
set_module(symbol, 0, writer);
|
||||||
{
|
}
|
||||||
set_module(symbol, 0, writer);
|
if ((height_pattern[loopey] == '1') || (height_pattern[loopey] == '3')) {
|
||||||
}
|
set_module(symbol, 1, writer);
|
||||||
if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '3'))
|
}
|
||||||
{
|
writer += 2;
|
||||||
set_module(symbol, 1, writer);
|
}
|
||||||
}
|
symbol->rows = 2;
|
||||||
writer += 2;
|
symbol->width = writer - 1;
|
||||||
}
|
|
||||||
symbol->rows = 2;
|
|
||||||
symbol->width = writer - 1;
|
|
||||||
|
|
||||||
|
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int codabar(struct zint_symbol *symbol, unsigned char source[], int length)
|
/* The Codabar system consisting of simple substitution */
|
||||||
{ /* The Codabar system consisting of simple substitution */
|
int codabar(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
|
|
||||||
int i, error_number;
|
int i, error_number;
|
||||||
char dest[512];
|
char dest[512];
|
||||||
|
|
||||||
error_number = 0;
|
error_number = 0;
|
||||||
strcpy(dest, "");
|
strcpy(dest, "");
|
||||||
|
|
||||||
if(length > 60) { /* No stack smashing please */
|
if (length > 60) { /* No stack smashing please */
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
return ZINT_ERROR_TOO_LONG;
|
||||||
}
|
}
|
||||||
to_upper(source);
|
to_upper(source);
|
||||||
error_number = is_sane(CALCIUM, source, length);
|
error_number = is_sane(CALCIUM, source, length);
|
||||||
if(error_number == ZINT_ERROR_INVALID_DATA) {
|
if (error_number == ZINT_ERROR_INVALID_DATA) {
|
||||||
strcpy(symbol->errtxt, "Invalid characters in data");
|
strcpy(symbol->errtxt, "Invalid characters in data");
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
/* Codabar must begin and end with the characters A, B, C or D */
|
/* Codabar must begin and end with the characters A, B, C or D */
|
||||||
if((source[0] != 'A') && (source[0] != 'B') && (source[0] != 'C') && (source[0] != 'D'))
|
if ((source[0] != 'A') && (source[0] != 'B') && (source[0] != 'C')
|
||||||
{
|
&& (source[0] != 'D')) {
|
||||||
strcpy(symbol->errtxt, "Invalid characters in data");
|
strcpy(symbol->errtxt, "Invalid characters in data");
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((source[length - 1] != 'A') && (source[length - 1] != 'B') &&
|
if ((source[length - 1] != 'A') && (source[length - 1] != 'B') &&
|
||||||
(source[length - 1] != 'C') && (source[length - 1] != 'D'))
|
(source[length - 1] != 'C') && (source[length - 1] != 'D')) {
|
||||||
{
|
strcpy(symbol->errtxt, "Invalid characters in data");
|
||||||
strcpy(symbol->errtxt, "Invalid characters in data");
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < length; i++)
|
for (i = 0; i < length; i++) {
|
||||||
{
|
lookup(CALCIUM, CodaTable, source[i], dest);
|
||||||
lookup(CALCIUM, CodaTable, source[i], dest);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
expand(symbol, dest);
|
expand(symbol, dest);
|
||||||
ustrcpy(symbol->text, source);
|
ustrcpy(symbol->text, source);
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int code32(struct zint_symbol *symbol, unsigned char source[], int length)
|
/* Italian Pharmacode */
|
||||||
{ /* Italian Pharmacode */
|
int code32(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
int i, zeroes, error_number, checksum, checkpart, checkdigit;
|
int i, zeroes, error_number, checksum, checkpart, checkdigit;
|
||||||
char localstr[10], risultante[7];
|
char localstr[10], risultante[7];
|
||||||
long int pharmacode, remainder, devisor;
|
long int pharmacode, remainder, devisor;
|
||||||
int codeword[6];
|
int codeword[6];
|
||||||
char tabella[34];
|
char tabella[34];
|
||||||
|
|
||||||
/* Validate the input */
|
/* Validate the input */
|
||||||
if(length > 8) {
|
if (length > 8) {
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
return ZINT_ERROR_TOO_LONG;
|
||||||
}
|
}
|
||||||
error_number = is_sane(NEON, source, length);
|
error_number = is_sane(NEON, source, length);
|
||||||
if(error_number == ZINT_ERROR_INVALID_DATA) {
|
if (error_number == ZINT_ERROR_INVALID_DATA) {
|
||||||
strcpy(symbol->errtxt, "Invalid characters in data");
|
strcpy(symbol->errtxt, "Invalid characters in data");
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add leading zeros as required */
|
/* Add leading zeros as required */
|
||||||
zeroes = 8 - length;
|
zeroes = 8 - length;
|
||||||
memset(localstr, '0', zeroes);
|
memset(localstr, '0', zeroes);
|
||||||
strcpy(localstr + zeroes, (char*)source);
|
strcpy(localstr + zeroes, (char*) source);
|
||||||
|
|
||||||
/* Calculate the check digit */
|
/* Calculate the check digit */
|
||||||
checksum = 0;
|
checksum = 0;
|
||||||
checkpart = 0;
|
checkpart = 0;
|
||||||
for(i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
checkpart = ctoi(localstr[i * 2]);
|
checkpart = ctoi(localstr[i * 2]);
|
||||||
checksum += checkpart;
|
checksum += checkpart;
|
||||||
checkpart = 2 * (ctoi(localstr[(i * 2) + 1]));
|
checkpart = 2 * (ctoi(localstr[(i * 2) + 1]));
|
||||||
if(checkpart >= 10) {
|
if (checkpart >= 10) {
|
||||||
checksum += (checkpart - 10) + 1;
|
checksum += (checkpart - 10) + 1;
|
||||||
} else {
|
} else {
|
||||||
checksum += checkpart;
|
checksum += checkpart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add check digit to data string */
|
/* Add check digit to data string */
|
||||||
checkdigit = checksum % 10;
|
checkdigit = checksum % 10;
|
||||||
localstr[8] = itoc(checkdigit);
|
localstr[8] = itoc(checkdigit);
|
||||||
localstr[9] = '\0';
|
localstr[9] = '\0';
|
||||||
|
|
||||||
/* Convert string into an integer value */
|
/* Convert string into an integer value */
|
||||||
pharmacode = atoi(localstr);
|
pharmacode = atoi(localstr);
|
||||||
|
|
||||||
/* Convert from decimal to base-32 */
|
/* Convert from decimal to base-32 */
|
||||||
devisor = 33554432;
|
devisor = 33554432;
|
||||||
for(i = 5; i >= 0; i--) {
|
for (i = 5; i >= 0; i--) {
|
||||||
codeword[i] = pharmacode / devisor;
|
codeword[i] = pharmacode / devisor;
|
||||||
remainder = pharmacode % devisor;
|
remainder = pharmacode % devisor;
|
||||||
pharmacode = remainder;
|
pharmacode = remainder;
|
||||||
devisor /= 32;
|
devisor /= 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look up values in 'Tabella di conversione' */
|
/* Look up values in 'Tabella di conversione' */
|
||||||
strcpy(tabella, "0123456789BCDFGHJKLMNPQRSTUVWXYZ");
|
strcpy(tabella, "0123456789BCDFGHJKLMNPQRSTUVWXYZ");
|
||||||
for(i = 5; i >= 0; i--) {
|
for (i = 5; i >= 0; i--) {
|
||||||
risultante[5 - i] = tabella[codeword[i]];
|
risultante[5 - i] = tabella[codeword[i]];
|
||||||
}
|
}
|
||||||
risultante[6] = '\0';
|
risultante[6] = '\0';
|
||||||
/* Plot the barcode using Code 39 */
|
/* Plot the barcode using Code 39 */
|
||||||
error_number = c39(symbol, (unsigned char*)risultante, strlen(risultante));
|
error_number = c39(symbol, (unsigned char*) risultante, strlen(risultante));
|
||||||
if(error_number != 0) { return error_number; }
|
if (error_number != 0) {
|
||||||
|
return error_number;
|
||||||
|
}
|
||||||
|
|
||||||
/* Override the normal text output with the Pharmacode number */
|
/* Override the normal text output with the Pharmacode number */
|
||||||
ustrcpy(symbol->text, (unsigned char*)"A");
|
ustrcpy(symbol->text, (unsigned char*) "A");
|
||||||
uconcat(symbol->text, (unsigned char*)localstr);
|
uconcat(symbol->text, (unsigned char*) localstr);
|
||||||
|
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
1997
backend/pdf417.c
1997
backend/pdf417.c
File diff suppressed because it is too large
Load Diff
801
backend/pdf417.h
801
backend/pdf417.h
@ -2,21 +2,21 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
|
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
|
||||||
Portions Copyright (C) 2004 Grandzebu
|
Portions Copyright (C) 2004 Grandzebu
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
are met:
|
are met:
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
1. Redistributions of source code must retain the above copyright
|
||||||
notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
notice, this list of conditions and the following disclaimer in the
|
notice, this list of conditions and the following disclaimer in the
|
||||||
documentation and/or other materials provided with the distribution.
|
documentation and/or other materials provided with the distribution.
|
||||||
3. Neither the name of the project nor the names of its contributors
|
3. Neither the name of the project nor the names of its contributors
|
||||||
may be used to endorse or promote products derived from this software
|
may be used to endorse or promote products derived from this software
|
||||||
without specific prior written permission.
|
without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
@ -27,9 +27,9 @@
|
|||||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* this file contains the character table, the pre-calculated coefficients and the
|
/* this file contains the character table, the pre-calculated coefficients and the
|
||||||
codeword patterns taken from lines 416 to 454 of pdf417.frm */
|
codeword patterns taken from lines 416 to 454 of pdf417.frm */
|
||||||
@ -44,406 +44,417 @@
|
|||||||
|
|
||||||
/* PDF417 error correction coefficients from Grand Zebu */
|
/* PDF417 error correction coefficients from Grand Zebu */
|
||||||
static const int coefrs[1022] = {
|
static const int coefrs[1022] = {
|
||||||
/* k = 2 */
|
/* k = 2 */
|
||||||
27, 917,
|
27, 917,
|
||||||
|
|
||||||
/* k = 4 */
|
|
||||||
522, 568, 723, 809,
|
|
||||||
|
|
||||||
/* k = 8 */
|
|
||||||
237, 308, 436, 284, 646, 653, 428, 379,
|
|
||||||
|
|
||||||
/* k = 16 */
|
|
||||||
274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65,
|
|
||||||
|
|
||||||
/* k = 32 */
|
|
||||||
361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517,
|
|
||||||
273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410,
|
|
||||||
|
|
||||||
/* k = 64 */
|
|
||||||
539, 422, 6, 93, 862, 771, 453, 106, 610, 287, 107, 505, 733, 877, 381, 612,
|
|
||||||
723, 476, 462, 172, 430, 609, 858, 822, 543, 376, 511, 400, 672, 762, 283, 184,
|
|
||||||
440, 35, 519, 31, 460, 594, 225, 535, 517, 352, 605, 158, 651, 201, 488, 502,
|
|
||||||
648, 733, 717, 83, 404, 97, 280, 771, 840, 629, 4, 381, 843, 623, 264, 543,
|
|
||||||
|
|
||||||
/* k = 128 */
|
|
||||||
521, 310, 864, 547, 858, 580, 296, 379, 53, 779, 897, 444, 400, 925, 749, 415,
|
|
||||||
822, 93, 217, 208, 928, 244, 583, 620, 246, 148, 447, 631, 292, 908, 490, 704,
|
|
||||||
516, 258, 457, 907, 594, 723, 674, 292, 272, 96, 684, 432, 686, 606, 860, 569,
|
|
||||||
193, 219, 129, 186, 236, 287, 192, 775, 278, 173, 40, 379, 712, 463, 646, 776,
|
|
||||||
171, 491, 297, 763, 156, 732, 95, 270, 447, 90, 507, 48, 228, 821, 808, 898,
|
|
||||||
784, 663, 627, 378, 382, 262, 380, 602, 754, 336, 89, 614, 87, 432, 670, 616,
|
|
||||||
157, 374, 242, 726, 600, 269, 375, 898, 845, 454, 354, 130, 814, 587, 804, 34,
|
|
||||||
211, 330, 539, 297, 827, 865, 37, 517, 834, 315, 550, 86, 801, 4, 108, 539,
|
|
||||||
|
|
||||||
/* k = 256 */
|
|
||||||
524, 894, 75, 766, 882, 857, 74, 204, 82, 586, 708, 250, 905, 786, 138, 720,
|
|
||||||
858, 194, 311, 913, 275, 190, 375, 850, 438, 733, 194, 280, 201, 280, 828, 757,
|
|
||||||
710, 814, 919, 89, 68, 569, 11, 204, 796, 605, 540, 913, 801, 700, 799, 137,
|
|
||||||
439, 418, 592, 668, 353, 859, 370, 694, 325, 240, 216, 257, 284, 549, 209, 884,
|
|
||||||
315, 70, 329, 793, 490, 274, 877, 162, 749, 812, 684, 461, 334, 376, 849, 521,
|
|
||||||
307, 291, 803, 712, 19, 358, 399, 908, 103, 511, 51, 8, 517, 225, 289, 470,
|
|
||||||
637, 731, 66, 255, 917, 269, 463, 830, 730, 433, 848, 585, 136, 538, 906, 90,
|
|
||||||
2, 290, 743, 199, 655, 903, 329, 49, 802, 580, 355, 588, 188, 462, 10, 134,
|
|
||||||
628, 320, 479, 130, 739, 71, 263, 318, 374, 601, 192, 605, 142, 673, 687, 234,
|
|
||||||
722, 384, 177, 752, 607, 640, 455, 193, 689, 707, 805, 641, 48, 60, 732, 621,
|
|
||||||
895, 544, 261, 852, 655, 309, 697, 755, 756, 60, 231, 773, 434, 421, 726, 528,
|
|
||||||
503, 118, 49, 795, 32, 144, 500, 238, 836, 394, 280, 566, 319, 9, 647, 550,
|
|
||||||
73, 914, 342, 126, 32, 681, 331, 792, 620, 60, 609, 441, 180, 791, 893, 754,
|
|
||||||
605, 383, 228, 749, 760, 213, 54, 297, 134, 54, 834, 299, 922, 191, 910, 532,
|
|
||||||
609, 829, 189, 20, 167, 29, 872, 449, 83, 402, 41, 656, 505, 579, 481, 173,
|
|
||||||
404, 251, 688, 95, 497, 555, 642, 543, 307, 159, 924, 558, 648, 55, 497, 10,
|
|
||||||
|
|
||||||
/* k = 512 */
|
|
||||||
352, 77, 373, 504, 35, 599, 428, 207, 409, 574, 118, 498, 285, 380, 350, 492,
|
|
||||||
197, 265, 920, 155, 914, 299, 229, 643, 294, 871, 306, 88, 87, 193, 352, 781,
|
|
||||||
846, 75, 327, 520, 435, 543, 203, 666, 249, 346, 781, 621, 640, 268, 794, 534,
|
|
||||||
539, 781, 408, 390, 644, 102, 476, 499, 290, 632, 545, 37, 858, 916, 552, 41,
|
|
||||||
542, 289, 122, 272, 383, 800, 485, 98, 752, 472, 761, 107, 784, 860, 658, 741,
|
|
||||||
290, 204, 681, 407, 855, 85, 99, 62, 482, 180, 20, 297, 451, 593, 913, 142,
|
|
||||||
808, 684, 287, 536, 561, 76, 653, 899, 729, 567, 744, 390, 513, 192, 516, 258,
|
|
||||||
240, 518, 794, 395, 768, 848, 51, 610, 384, 168, 190, 826, 328, 596, 786, 303,
|
|
||||||
570, 381, 415, 641, 156, 237, 151, 429, 531, 207, 676, 710, 89, 168, 304, 402,
|
|
||||||
40, 708, 575, 162, 864, 229, 65, 861, 841, 512, 164, 477, 221, 92, 358, 785,
|
|
||||||
288, 357, 850, 836, 827, 736, 707, 94, 8, 494, 114, 521, 2, 499, 851, 543,
|
|
||||||
152, 729, 771, 95, 248, 361, 578, 323, 856, 797, 289, 51, 684, 466, 533, 820,
|
|
||||||
669, 45, 902, 452, 167, 342, 244, 173, 35, 463, 651, 51, 699, 591, 452, 578,
|
|
||||||
37, 124, 298, 332, 552, 43, 427, 119, 662, 777, 475, 850, 764, 364, 578, 911,
|
|
||||||
283, 711, 472, 420, 245, 288, 594, 394, 511, 327, 589, 777, 699, 688, 43, 408,
|
|
||||||
842, 383, 721, 521, 560, 644, 714, 559, 62, 145, 873, 663, 713, 159, 672, 729,
|
|
||||||
624, 59, 193, 417, 158, 209, 563, 564, 343, 693, 109, 608, 563, 365, 181, 772,
|
|
||||||
677, 310, 248, 353, 708, 410, 579, 870, 617, 841, 632, 860, 289, 536, 35, 777,
|
|
||||||
618, 586, 424, 833, 77, 597, 346, 269, 757, 632, 695, 751, 331, 247, 184, 45,
|
|
||||||
787, 680, 18, 66, 407, 369, 54, 492, 228, 613, 830, 922, 437, 519, 644, 905,
|
|
||||||
789, 420, 305, 441, 207, 300, 892, 827, 141, 537, 381, 662, 513, 56, 252, 341,
|
|
||||||
242, 797, 838, 837, 720, 224, 307, 631, 61, 87, 560, 310, 756, 665, 397, 808,
|
|
||||||
851, 309, 473, 795, 378, 31, 647, 915, 459, 806, 590, 731, 425, 216, 548, 249,
|
|
||||||
321, 881, 699, 535, 673, 782, 210, 815, 905, 303, 843, 922, 281, 73, 469, 791,
|
|
||||||
660, 162, 498, 308, 155, 422, 907, 817, 187, 62, 16, 425, 535, 336, 286, 437,
|
|
||||||
375, 273, 610, 296, 183, 923, 116, 667, 751, 353, 62, 366, 691, 379, 687, 842,
|
|
||||||
37, 357, 720, 742, 330, 5, 39, 923, 311, 424, 242, 749, 321, 54, 669, 316,
|
|
||||||
342, 299, 534, 105, 667, 488, 640, 672, 576, 540, 316, 486, 721, 610, 46, 656,
|
|
||||||
447, 171, 616, 464, 190, 531, 297, 321, 762, 752, 533, 175, 134, 14, 381, 433,
|
|
||||||
717, 45, 111, 20, 596, 284, 736, 138, 646, 411, 877, 669, 141, 919, 45, 780,
|
|
||||||
407, 164, 332, 899, 165, 726, 600, 325, 498, 655, 357, 752, 768, 223, 849, 647,
|
|
||||||
63, 310, 863, 251, 366, 304, 282, 738, 675, 410, 389, 244, 31, 121, 303, 263 };
|
|
||||||
|
|
||||||
|
|
||||||
static const char *codagemc[2787] = { "urA", "xfs", "ypy", "unk", "xdw", "yoz", "pDA", "uls", "pBk", "eBA",
|
/* k = 4 */
|
||||||
"pAs", "eAk", "prA", "uvs", "xhy", "pnk", "utw", "xgz", "fDA", "pls", "fBk", "frA", "pvs",
|
522, 568, 723, 809,
|
||||||
"uxy", "fnk", "ptw", "uwz", "fls", "psy", "fvs", "pxy", "ftw", "pwz", "fxy", "yrx", "ufk",
|
|
||||||
"xFw", "ymz", "onA", "uds", "xEy", "olk", "ucw", "dBA", "oks", "uci", "dAk", "okg", "dAc",
|
/* k = 8 */
|
||||||
"ovk", "uhw", "xaz", "dnA", "ots", "ugy", "dlk", "osw", "ugj", "dks", "osi", "dvk", "oxw",
|
237, 308, 436, 284, 646, 653, 428, 379,
|
||||||
"uiz", "dts", "owy", "dsw", "owj", "dxw", "oyz", "dwy", "dwj", "ofA", "uFs", "xCy", "odk",
|
|
||||||
"uEw", "xCj", "clA", "ocs", "uEi", "ckk", "ocg", "ckc", "ckE", "cvA", "ohs", "uay", "ctk",
|
/* k = 16 */
|
||||||
"ogw", "uaj", "css", "ogi", "csg", "csa", "cxs", "oiy", "cww", "oij", "cwi", "cyy", "oFk",
|
274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65,
|
||||||
"uCw", "xBj", "cdA", "oEs", "uCi", "cck", "oEg", "uCb", "ccc", "oEa", "ccE", "oED", "chk",
|
|
||||||
"oaw", "uDj", "cgs", "oai", "cgg", "oab", "cga", "cgD", "obj", "cib", "cFA", "oCs", "uBi",
|
/* k = 32 */
|
||||||
"cEk", "oCg", "uBb", "cEc", "oCa", "cEE", "oCD", "cEC", "cas", "cag", "caa", "cCk", "uAr",
|
361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517,
|
||||||
"oBa", "oBD", "cCB", "tfk", "wpw", "yez", "mnA", "tds", "woy", "mlk", "tcw", "woj", "FBA",
|
273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410,
|
||||||
"mks", "FAk", "mvk", "thw", "wqz", "FnA", "mts", "tgy", "Flk", "msw", "Fks", "Fkg", "Fvk",
|
|
||||||
"mxw", "tiz", "Fts", "mwy", "Fsw", "Fsi", "Fxw", "myz", "Fwy", "Fyz", "vfA", "xps", "yuy",
|
/* k = 64 */
|
||||||
"vdk", "xow", "yuj", "qlA", "vcs", "xoi", "qkk", "vcg", "xob", "qkc", "vca", "mfA", "tFs",
|
539, 422, 6, 93, 862, 771, 453, 106, 610, 287, 107, 505, 733, 877, 381, 612,
|
||||||
"wmy", "qvA", "mdk", "tEw", "wmj", "qtk", "vgw", "xqj", "hlA", "Ekk", "mcg", "tEb", "hkk",
|
723, 476, 462, 172, 430, 609, 858, 822, 543, 376, 511, 400, 672, 762, 283, 184,
|
||||||
"qsg", "hkc", "EvA", "mhs", "tay", "hvA", "Etk", "mgw", "taj", "htk", "qww", "vij", "hss",
|
440, 35, 519, 31, 460, 594, 225, 535, 517, 352, 605, 158, 651, 201, 488, 502,
|
||||||
"Esg", "hsg", "Exs", "miy", "hxs", "Eww", "mij", "hww", "qyj", "hwi", "Eyy", "hyy", "Eyj",
|
648, 733, 717, 83, 404, 97, 280, 771, 840, 629, 4, 381, 843, 623, 264, 543,
|
||||||
"hyj", "vFk", "xmw", "ytj", "qdA", "vEs", "xmi", "qck", "vEg", "xmb", "qcc", "vEa", "qcE",
|
|
||||||
"qcC", "mFk", "tCw", "wlj", "qhk", "mEs", "tCi", "gtA", "Eck", "vai", "tCb", "gsk", "Ecc",
|
/* k = 128 */
|
||||||
"mEa", "gsc", "qga", "mED", "EcC", "Ehk", "maw", "tDj", "gxk", "Egs", "mai", "gws", "qii",
|
521, 310, 864, 547, 858, 580, 296, 379, 53, 779, 897, 444, 400, 925, 749, 415,
|
||||||
"mab", "gwg", "Ega", "EgD", "Eiw", "mbj", "gyw", "Eii", "gyi", "Eib", "gyb", "gzj", "qFA",
|
822, 93, 217, 208, 928, 244, 583, 620, 246, 148, 447, 631, 292, 908, 490, 704,
|
||||||
"vCs", "xli", "qEk", "vCg", "xlb", "qEc", "vCa", "qEE", "vCD", "qEC", "qEB", "EFA", "mCs",
|
516, 258, 457, 907, 594, 723, 674, 292, 272, 96, 684, 432, 686, 606, 860, 569,
|
||||||
"tBi", "ghA", "EEk", "mCg", "tBb", "ggk", "qag", "vDb", "ggc", "EEE", "mCD", "ggE", "qaD",
|
193, 219, 129, 186, 236, 287, 192, 775, 278, 173, 40, 379, 712, 463, 646, 776,
|
||||||
"ggC", "Eas", "mDi", "gis", "Eag", "mDb", "gig", "qbb", "gia", "EaD", "giD", "gji", "gjb",
|
171, 491, 297, 763, 156, 732, 95, 270, 447, 90, 507, 48, 228, 821, 808, 898,
|
||||||
"qCk", "vBg", "xkr", "qCc", "vBa", "qCE", "vBD", "qCC", "qCB", "ECk", "mBg", "tAr", "gak",
|
784, 663, 627, 378, 382, 262, 380, 602, 754, 336, 89, 614, 87, 432, 670, 616,
|
||||||
"ECc", "mBa", "gac", "qDa", "mBD", "gaE", "ECC", "gaC", "ECB", "EDg", "gbg", "gba", "gbD",
|
157, 374, 242, 726, 600, 269, 375, 898, 845, 454, 354, 130, 814, 587, 804, 34,
|
||||||
"vAq", "vAn", "qBB", "mAq", "EBE", "gDE", "gDC", "gDB", "lfA", "sps", "wey", "ldk", "sow",
|
211, 330, 539, 297, 827, 865, 37, 517, 834, 315, 550, 86, 801, 4, 108, 539,
|
||||||
"ClA", "lcs", "soi", "Ckk", "lcg", "Ckc", "CkE", "CvA", "lhs", "sqy", "Ctk", "lgw", "sqj",
|
|
||||||
"Css", "lgi", "Csg", "Csa", "Cxs", "liy", "Cww", "lij", "Cwi", "Cyy", "Cyj", "tpk", "wuw",
|
/* k = 256 */
|
||||||
"yhj", "ndA", "tos", "wui", "nck", "tog", "wub", "ncc", "toa", "ncE", "toD", "lFk", "smw",
|
524, 894, 75, 766, 882, 857, 74, 204, 82, 586, 708, 250, 905, 786, 138, 720,
|
||||||
"wdj", "nhk", "lEs", "smi", "atA", "Cck", "tqi", "smb", "ask", "ngg", "lEa", "asc", "CcE",
|
858, 194, 311, 913, 275, 190, 375, 850, 438, 733, 194, 280, 201, 280, 828, 757,
|
||||||
"asE", "Chk", "law", "snj", "axk", "Cgs", "trj", "aws", "nii", "lab", "awg", "Cga", "awa",
|
710, 814, 919, 89, 68, 569, 11, 204, 796, 605, 540, 913, 801, 700, 799, 137,
|
||||||
"Ciw", "lbj", "ayw", "Cii", "ayi", "Cib", "Cjj", "azj", "vpA", "xus", "yxi", "vok", "xug",
|
439, 418, 592, 668, 353, 859, 370, 694, 325, 240, 216, 257, 284, 549, 209, 884,
|
||||||
"yxb", "voc", "xua", "voE", "xuD", "voC", "nFA", "tms", "wti", "rhA", "nEk", "xvi", "wtb",
|
315, 70, 329, 793, 490, 274, 877, 162, 749, 812, 684, 461, 334, 376, 849, 521,
|
||||||
"rgk", "vqg", "xvb", "rgc", "nEE", "tmD", "rgE", "vqD", "nEB", "CFA", "lCs", "sli", "ahA",
|
307, 291, 803, 712, 19, 358, 399, 908, 103, 511, 51, 8, 517, 225, 289, 470,
|
||||||
"CEk", "lCg", "slb", "ixA", "agk", "nag", "tnb", "iwk", "rig", "vrb", "lCD", "iwc", "agE",
|
637, 731, 66, 255, 917, 269, 463, 830, 730, 433, 848, 585, 136, 538, 906, 90,
|
||||||
"naD", "iwE", "CEB", "Cas", "lDi", "ais", "Cag", "lDb", "iys", "aig", "nbb", "iyg", "rjb",
|
2, 290, 743, 199, 655, 903, 329, 49, 802, 580, 355, 588, 188, 462, 10, 134,
|
||||||
"CaD", "aiD", "Cbi", "aji", "Cbb", "izi", "ajb", "vmk", "xtg", "ywr", "vmc", "xta", "vmE",
|
628, 320, 479, 130, 739, 71, 263, 318, 374, 601, 192, 605, 142, 673, 687, 234,
|
||||||
"xtD", "vmC", "vmB", "nCk", "tlg", "wsr", "rak", "nCc", "xtr", "rac", "vna", "tlD", "raE",
|
722, 384, 177, 752, 607, 640, 455, 193, 689, 707, 805, 641, 48, 60, 732, 621,
|
||||||
"nCC", "raC", "nCB", "raB", "CCk", "lBg", "skr", "aak", "CCc", "lBa", "iik", "aac", "nDa",
|
895, 544, 261, 852, 655, 309, 697, 755, 756, 60, 231, 773, 434, 421, 726, 528,
|
||||||
"lBD", "iic", "rba", "CCC", "iiE", "aaC", "CCB", "aaB", "CDg", "lBr", "abg", "CDa", "ijg",
|
503, 118, 49, 795, 32, 144, 500, 238, 836, 394, 280, 566, 319, 9, 647, 550,
|
||||||
"aba", "CDD", "ija", "abD", "CDr", "ijr", "vlc", "xsq", "vlE", "xsn", "vlC", "vlB", "nBc",
|
73, 914, 342, 126, 32, 681, 331, 792, 620, 60, 609, 441, 180, 791, 893, 754,
|
||||||
"tkq", "rDc", "nBE", "tkn", "rDE", "vln", "rDC", "nBB", "rDB", "CBc", "lAq", "aDc", "CBE",
|
605, 383, 228, 749, 760, 213, 54, 297, 134, 54, 834, 299, 922, 191, 910, 532,
|
||||||
"lAn", "ibc", "aDE", "nBn", "ibE", "rDn", "CBB", "ibC", "aDB", "ibB", "aDq", "ibq", "ibn",
|
609, 829, 189, 20, 167, 29, 872, 449, 83, 402, 41, 656, 505, 579, 481, 173,
|
||||||
"xsf", "vkl", "tkf", "nAm", "nAl", "CAo", "aBo", "iDo", "CAl", "aBl", "kpk", "BdA", "kos",
|
404, 251, 688, 95, 497, 555, 642, 543, 307, 159, 924, 558, 648, 55, 497, 10,
|
||||||
"Bck", "kog", "seb", "Bcc", "koa", "BcE", "koD", "Bhk", "kqw", "sfj", "Bgs", "kqi", "Bgg",
|
|
||||||
"kqb", "Bga", "BgD", "Biw", "krj", "Bii", "Bib", "Bjj", "lpA", "sus", "whi", "lok", "sug",
|
/* k = 512 */
|
||||||
"loc", "sua", "loE", "suD", "loC", "BFA", "kms", "sdi", "DhA", "BEk", "svi", "sdb", "Dgk",
|
352, 77, 373, 504, 35, 599, 428, 207, 409, 574, 118, 498, 285, 380, 350, 492,
|
||||||
"lqg", "svb", "Dgc", "BEE", "kmD", "DgE", "lqD", "BEB", "Bas", "kni", "Dis", "Bag", "knb",
|
197, 265, 920, 155, 914, 299, 229, 643, 294, 871, 306, 88, 87, 193, 352, 781,
|
||||||
"Dig", "lrb", "Dia", "BaD", "Bbi", "Dji", "Bbb", "Djb", "tuk", "wxg", "yir", "tuc", "wxa",
|
846, 75, 327, 520, 435, 543, 203, 666, 249, 346, 781, 621, 640, 268, 794, 534,
|
||||||
"tuE", "wxD", "tuC", "tuB", "lmk", "stg", "nqk", "lmc", "sta", "nqc", "tva", "stD", "nqE",
|
539, 781, 408, 390, 644, 102, 476, 499, 290, 632, 545, 37, 858, 916, 552, 41,
|
||||||
"lmC", "nqC", "lmB", "nqB", "BCk", "klg", "Dak", "BCc", "str", "bik", "Dac", "lna", "klD",
|
542, 289, 122, 272, 383, 800, 485, 98, 752, 472, 761, 107, 784, 860, 658, 741,
|
||||||
"bic", "nra", "BCC", "biE", "DaC", "BCB", "DaB", "BDg", "klr", "Dbg", "BDa", "bjg", "Dba",
|
290, 204, 681, 407, 855, 85, 99, 62, 482, 180, 20, 297, 451, 593, 913, 142,
|
||||||
"BDD", "bja", "DbD", "BDr", "Dbr", "bjr", "xxc", "yyq", "xxE", "yyn", "xxC", "xxB", "ttc",
|
808, 684, 287, 536, 561, 76, 653, 899, 729, 567, 744, 390, 513, 192, 516, 258,
|
||||||
"wwq", "vvc", "xxq", "wwn", "vvE", "xxn", "vvC", "ttB", "vvB", "llc", "ssq", "nnc", "llE",
|
240, 518, 794, 395, 768, 848, 51, 610, 384, 168, 190, 826, 328, 596, 786, 303,
|
||||||
"ssn", "rrc", "nnE", "ttn", "rrE", "vvn", "llB", "rrC", "nnB", "rrB", "BBc", "kkq", "DDc",
|
570, 381, 415, 641, 156, 237, 151, 429, 531, 207, 676, 710, 89, 168, 304, 402,
|
||||||
"BBE", "kkn", "bbc", "DDE", "lln", "jjc", "bbE", "nnn", "BBB", "jjE", "rrn", "DDB", "jjC",
|
40, 708, 575, 162, 864, 229, 65, 861, 841, 512, 164, 477, 221, 92, 358, 785,
|
||||||
"BBq", "DDq", "BBn", "bbq", "DDn", "jjq", "bbn", "jjn", "xwo", "yyf", "xwm", "xwl", "tso",
|
288, 357, 850, 836, 827, 736, 707, 94, 8, 494, 114, 521, 2, 499, 851, 543,
|
||||||
"wwf", "vto", "xwv", "vtm", "tsl", "vtl", "lko", "ssf", "nlo", "lkm", "rno", "nlm", "lkl",
|
152, 729, 771, 95, 248, 361, 578, 323, 856, 797, 289, 51, 684, 466, 533, 820,
|
||||||
"rnm", "nll", "rnl", "BAo", "kkf", "DBo", "lkv", "bDo", "DBm", "BAl", "jbo", "bDm", "DBl",
|
669, 45, 902, 452, 167, 342, 244, 173, 35, 463, 651, 51, 699, 591, 452, 578,
|
||||||
"jbm", "bDl", "jbl", "DBv", "jbv", "xwd", "vsu", "vst", "nku", "rlu", "rlt", "DAu", "bBu",
|
37, 124, 298, 332, 552, 43, 427, 119, 662, 777, 475, 850, 764, 364, 578, 911,
|
||||||
"jDu", "jDt", "ApA", "Aok", "keg", "Aoc", "AoE", "AoC", "Aqs", "Aqg", "Aqa", "AqD", "Ari",
|
283, 711, 472, 420, 245, 288, 594, 394, 511, 327, 589, 777, 699, 688, 43, 408,
|
||||||
"Arb", "kuk", "kuc", "sha", "kuE", "shD", "kuC", "kuB", "Amk", "kdg", "Bqk", "kvg", "kda",
|
842, 383, 721, 521, 560, 644, 714, 559, 62, 145, 873, 663, 713, 159, 672, 729,
|
||||||
"Bqc", "kva", "BqE", "kvD", "BqC", "AmB", "BqB", "Ang", "kdr", "Brg", "kvr", "Bra", "AnD",
|
624, 59, 193, 417, 158, 209, 563, 564, 343, 693, 109, 608, 563, 365, 181, 772,
|
||||||
"BrD", "Anr", "Brr", "sxc", "sxE", "sxC", "sxB", "ktc", "lvc", "sxq", "sgn", "lvE", "sxn",
|
677, 310, 248, 353, 708, 410, 579, 870, 617, 841, 632, 860, 289, 536, 35, 777,
|
||||||
"lvC", "ktB", "lvB", "Alc", "Bnc", "AlE", "kcn", "Drc", "BnE", "AlC", "DrE", "BnC", "AlB",
|
618, 586, 424, 833, 77, 597, 346, 269, 757, 632, 695, 751, 331, 247, 184, 45,
|
||||||
"DrC", "BnB", "Alq", "Bnq", "Aln", "Drq", "Bnn", "Drn", "wyo", "wym", "wyl", "swo", "txo",
|
787, 680, 18, 66, 407, 369, 54, 492, 228, 613, 830, 922, 437, 519, 644, 905,
|
||||||
"wyv", "txm", "swl", "txl", "kso", "sgf", "lto", "swv", "nvo", "ltm", "ksl", "nvm", "ltl",
|
789, 420, 305, 441, 207, 300, 892, 827, 141, 537, 381, 662, 513, 56, 252, 341,
|
||||||
"nvl", "Ako", "kcf", "Blo", "ksv", "Dno", "Blm", "Akl", "bro", "Dnm", "Bll", "brm", "Dnl",
|
242, 797, 838, 837, 720, 224, 307, 631, 61, 87, 560, 310, 756, 665, 397, 808,
|
||||||
"Akv", "Blv", "Dnv", "brv", "yze", "yzd", "wye", "xyu", "wyd", "xyt", "swe", "twu", "swd",
|
851, 309, 473, 795, 378, 31, 647, 915, 459, 806, 590, 731, 425, 216, 548, 249,
|
||||||
"vxu", "twt", "vxt", "kse", "lsu", "ksd", "ntu", "lst", "rvu", "ypk", "zew", "xdA", "yos",
|
321, 881, 699, 535, 673, 782, 210, 815, 905, 303, 843, 922, 281, 73, 469, 791,
|
||||||
"zei", "xck", "yog", "zeb", "xcc", "yoa", "xcE", "yoD", "xcC", "xhk", "yqw", "zfj", "utA",
|
660, 162, 498, 308, 155, 422, 907, 817, 187, 62, 16, 425, 535, 336, 286, 437,
|
||||||
"xgs", "yqi", "usk", "xgg", "yqb", "usc", "xga", "usE", "xgD", "usC", "uxk", "xiw", "yrj",
|
375, 273, 610, 296, 183, 923, 116, 667, 751, 353, 62, 366, 691, 379, 687, 842,
|
||||||
"ptA", "uws", "xii", "psk", "uwg", "xib", "psc", "uwa", "psE", "uwD", "psC", "pxk", "uyw",
|
37, 357, 720, 742, 330, 5, 39, 923, 311, 424, 242, 749, 321, 54, 669, 316,
|
||||||
"xjj", "ftA", "pws", "uyi", "fsk", "pwg", "uyb", "fsc", "pwa", "fsE", "pwD", "fxk", "pyw",
|
342, 299, 534, 105, 667, 488, 640, 672, 576, 540, 316, 486, 721, 610, 46, 656,
|
||||||
"uzj", "fws", "pyi", "fwg", "pyb", "fwa", "fyw", "pzj", "fyi", "fyb", "xFA", "yms", "zdi",
|
447, 171, 616, 464, 190, 531, 297, 321, 762, 752, 533, 175, 134, 14, 381, 433,
|
||||||
"xEk", "ymg", "zdb", "xEc", "yma", "xEE", "ymD", "xEC", "xEB", "uhA", "xas", "yni", "ugk",
|
717, 45, 111, 20, 596, 284, 736, 138, 646, 411, 877, 669, 141, 919, 45, 780,
|
||||||
"xag", "ynb", "ugc", "xaa", "ugE", "xaD", "ugC", "ugB", "oxA", "uis", "xbi", "owk", "uig",
|
407, 164, 332, 899, 165, 726, 600, 325, 498, 655, 357, 752, 768, 223, 849, 647,
|
||||||
"xbb", "owc", "uia", "owE", "uiD", "owC", "owB", "dxA", "oys", "uji", "dwk", "oyg", "ujb",
|
63, 310, 863, 251, 366, 304, 282, 738, 675, 410, 389, 244, 31, 121, 303, 263
|
||||||
"dwc", "oya", "dwE", "oyD", "dwC", "dys", "ozi", "dyg", "ozb", "dya", "dyD", "dzi", "dzb",
|
};
|
||||||
"xCk", "ylg", "zcr", "xCc", "yla", "xCE", "ylD", "xCC", "xCB", "uak", "xDg", "ylr", "uac",
|
|
||||||
"xDa", "uaE", "xDD", "uaC", "uaB", "oik", "ubg", "xDr", "oic", "uba", "oiE", "ubD", "oiC",
|
|
||||||
"oiB", "cyk", "ojg", "ubr", "cyc", "oja", "cyE", "ojD", "cyC", "cyB", "czg", "ojr", "cza",
|
static const char *codagemc[2787] = {
|
||||||
"czD", "czr", "xBc", "ykq", "xBE", "ykn", "xBC", "xBB", "uDc", "xBq", "uDE", "xBn", "uDC",
|
"urA", "xfs", "ypy", "unk", "xdw", "yoz", "pDA", "uls", "pBk", "eBA",
|
||||||
"uDB", "obc", "uDq", "obE", "uDn", "obC", "obB", "cjc", "obq", "cjE", "obn", "cjC", "cjB",
|
"pAs", "eAk", "prA", "uvs", "xhy", "pnk", "utw", "xgz", "fDA", "pls", "fBk", "frA", "pvs",
|
||||||
"cjq", "cjn", "xAo", "ykf", "xAm", "xAl", "uBo", "xAv", "uBm", "uBl", "oDo", "uBv", "oDm",
|
"uxy", "fnk", "ptw", "uwz", "fls", "psy", "fvs", "pxy", "ftw", "pwz", "fxy", "yrx", "ufk",
|
||||||
"oDl", "cbo", "oDv", "cbm", "cbl", "xAe", "xAd", "uAu", "uAt", "oBu", "oBt", "wpA", "yes",
|
"xFw", "ymz", "onA", "uds", "xEy", "olk", "ucw", "dBA", "oks", "uci", "dAk", "okg", "dAc",
|
||||||
"zFi", "wok", "yeg", "zFb", "woc", "yea", "woE", "yeD", "woC", "woB", "thA", "wqs", "yfi",
|
"ovk", "uhw", "xaz", "dnA", "ots", "ugy", "dlk", "osw", "ugj", "dks", "osi", "dvk", "oxw",
|
||||||
"tgk", "wqg", "yfb", "tgc", "wqa", "tgE", "wqD", "tgC", "tgB", "mxA", "tis", "wri", "mwk",
|
"uiz", "dts", "owy", "dsw", "owj", "dxw", "oyz", "dwy", "dwj", "ofA", "uFs", "xCy", "odk",
|
||||||
"tig", "wrb", "mwc", "tia", "mwE", "tiD", "mwC", "mwB", "FxA", "mys", "tji", "Fwk", "myg",
|
"uEw", "xCj", "clA", "ocs", "uEi", "ckk", "ocg", "ckc", "ckE", "cvA", "ohs", "uay", "ctk",
|
||||||
"tjb", "Fwc", "mya", "FwE", "myD", "FwC", "Fys", "mzi", "Fyg", "mzb", "Fya", "FyD", "Fzi",
|
"ogw", "uaj", "css", "ogi", "csg", "csa", "cxs", "oiy", "cww", "oij", "cwi", "cyy", "oFk",
|
||||||
"Fzb", "yuk", "zhg", "hjs", "yuc", "zha", "hbw", "yuE", "zhD", "hDy", "yuC", "yuB", "wmk",
|
"uCw", "xBj", "cdA", "oEs", "uCi", "cck", "oEg", "uCb", "ccc", "oEa", "ccE", "oED", "chk",
|
||||||
"ydg", "zEr", "xqk", "wmc", "zhr", "xqc", "yva", "ydD", "xqE", "wmC", "xqC", "wmB", "xqB",
|
"oaw", "uDj", "cgs", "oai", "cgg", "oab", "cga", "cgD", "obj", "cib", "cFA", "oCs", "uBi",
|
||||||
"tak", "wng", "ydr", "vik", "tac", "wna", "vic", "xra", "wnD", "viE", "taC", "viC", "taB",
|
"cEk", "oCg", "uBb", "cEc", "oCa", "cEE", "oCD", "cEC", "cas", "cag", "caa", "cCk", "uAr",
|
||||||
"viB", "mik", "tbg", "wnr", "qyk", "mic", "tba", "qyc", "vja", "tbD", "qyE", "miC", "qyC",
|
"oBa", "oBD", "cCB", "tfk", "wpw", "yez", "mnA", "tds", "woy", "mlk", "tcw", "woj", "FBA",
|
||||||
"miB", "qyB", "Eyk", "mjg", "tbr", "hyk", "Eyc", "mja", "hyc", "qza", "mjD", "hyE", "EyC",
|
"mks", "FAk", "mvk", "thw", "wqz", "FnA", "mts", "tgy", "Flk", "msw", "Fks", "Fkg", "Fvk",
|
||||||
"hyC", "EyB", "Ezg", "mjr", "hzg", "Eza", "hza", "EzD", "hzD", "Ezr", "ytc", "zgq", "grw",
|
"mxw", "tiz", "Fts", "mwy", "Fsw", "Fsi", "Fxw", "myz", "Fwy", "Fyz", "vfA", "xps", "yuy",
|
||||||
"ytE", "zgn", "gny", "ytC", "glz", "ytB", "wlc", "ycq", "xnc", "wlE", "ycn", "xnE", "ytn",
|
"vdk", "xow", "yuj", "qlA", "vcs", "xoi", "qkk", "vcg", "xob", "qkc", "vca", "mfA", "tFs",
|
||||||
"xnC", "wlB", "xnB", "tDc", "wlq", "vbc", "tDE", "wln", "vbE", "xnn", "vbC", "tDB", "vbB",
|
"wmy", "qvA", "mdk", "tEw", "wmj", "qtk", "vgw", "xqj", "hlA", "Ekk", "mcg", "tEb", "hkk",
|
||||||
"mbc", "tDq", "qjc", "mbE", "tDn", "qjE", "vbn", "qjC", "mbB", "qjB", "Ejc", "mbq", "gzc",
|
"qsg", "hkc", "EvA", "mhs", "tay", "hvA", "Etk", "mgw", "taj", "htk", "qww", "vij", "hss",
|
||||||
"EjE", "mbn", "gzE", "qjn", "gzC", "EjB", "gzB", "Ejq", "gzq", "Ejn", "gzn", "yso", "zgf",
|
"Esg", "hsg", "Exs", "miy", "hxs", "Eww", "mij", "hww", "qyj", "hwi", "Eyy", "hyy", "Eyj",
|
||||||
"gfy", "ysm", "gdz", "ysl", "wko", "ycf", "xlo", "ysv", "xlm", "wkl", "xll", "tBo", "wkv",
|
"hyj", "vFk", "xmw", "ytj", "qdA", "vEs", "xmi", "qck", "vEg", "xmb", "qcc", "vEa", "qcE",
|
||||||
"vDo", "tBm", "vDm", "tBl", "vDl", "mDo", "tBv", "qbo", "vDv", "qbm", "mDl", "qbl", "Ebo",
|
"qcC", "mFk", "tCw", "wlj", "qhk", "mEs", "tCi", "gtA", "Eck", "vai", "tCb", "gsk", "Ecc",
|
||||||
"mDv", "gjo", "Ebm", "gjm", "Ebl", "gjl", "Ebv", "gjv", "yse", "gFz", "ysd", "wke", "xku",
|
"mEa", "gsc", "qga", "mED", "EcC", "Ehk", "maw", "tDj", "gxk", "Egs", "mai", "gws", "qii",
|
||||||
"wkd", "xkt", "tAu", "vBu", "tAt", "vBt", "mBu", "qDu", "mBt", "qDt", "EDu", "gbu", "EDt",
|
"mab", "gwg", "Ega", "EgD", "Eiw", "mbj", "gyw", "Eii", "gyi", "Eib", "gyb", "gzj", "qFA",
|
||||||
"gbt", "ysF", "wkF", "xkh", "tAh", "vAx", "mAx", "qBx", "wek", "yFg", "zCr", "wec", "yFa",
|
"vCs", "xli", "qEk", "vCg", "xlb", "qEc", "vCa", "qEE", "vCD", "qEC", "qEB", "EFA", "mCs",
|
||||||
"weE", "yFD", "weC", "weB", "sqk", "wfg", "yFr", "sqc", "wfa", "sqE", "wfD", "sqC", "sqB",
|
"tBi", "ghA", "EEk", "mCg", "tBb", "ggk", "qag", "vDb", "ggc", "EEE", "mCD", "ggE", "qaD",
|
||||||
"lik", "srg", "wfr", "lic", "sra", "liE", "srD", "liC", "liB", "Cyk", "ljg", "srr", "Cyc",
|
"ggC", "Eas", "mDi", "gis", "Eag", "mDb", "gig", "qbb", "gia", "EaD", "giD", "gji", "gjb",
|
||||||
"lja", "CyE", "ljD", "CyC", "CyB", "Czg", "ljr", "Cza", "CzD", "Czr", "yhc", "zaq", "arw",
|
"qCk", "vBg", "xkr", "qCc", "vBa", "qCE", "vBD", "qCC", "qCB", "ECk", "mBg", "tAr", "gak",
|
||||||
"yhE", "zan", "any", "yhC", "alz", "yhB", "wdc", "yEq", "wvc", "wdE", "yEn", "wvE", "yhn",
|
"ECc", "mBa", "gac", "qDa", "mBD", "gaE", "ECC", "gaC", "ECB", "EDg", "gbg", "gba", "gbD",
|
||||||
"wvC", "wdB", "wvB", "snc", "wdq", "trc", "snE", "wdn", "trE", "wvn", "trC", "snB", "trB",
|
"vAq", "vAn", "qBB", "mAq", "EBE", "gDE", "gDC", "gDB", "lfA", "sps", "wey", "ldk", "sow",
|
||||||
"lbc", "snq", "njc", "lbE", "snn", "njE", "trn", "njC", "lbB", "njB", "Cjc", "lbq", "azc",
|
"ClA", "lcs", "soi", "Ckk", "lcg", "Ckc", "CkE", "CvA", "lhs", "sqy", "Ctk", "lgw", "sqj",
|
||||||
"CjE", "lbn", "azE", "njn", "azC", "CjB", "azB", "Cjq", "azq", "Cjn", "azn", "zio", "irs",
|
"Css", "lgi", "Csg", "Csa", "Cxs", "liy", "Cww", "lij", "Cwi", "Cyy", "Cyj", "tpk", "wuw",
|
||||||
"rfy", "zim", "inw", "rdz", "zil", "ily", "ikz", "ygo", "zaf", "afy", "yxo", "ziv", "ivy",
|
"yhj", "ndA", "tos", "wui", "nck", "tog", "wub", "ncc", "toa", "ncE", "toD", "lFk", "smw",
|
||||||
"adz", "yxm", "ygl", "itz", "yxl", "wco", "yEf", "wto", "wcm", "xvo", "yxv", "wcl", "xvm",
|
"wdj", "nhk", "lEs", "smi", "atA", "Cck", "tqi", "smb", "ask", "ngg", "lEa", "asc", "CcE",
|
||||||
"wtl", "xvl", "slo", "wcv", "tno", "slm", "vro", "tnm", "sll", "vrm", "tnl", "vrl", "lDo",
|
"asE", "Chk", "law", "snj", "axk", "Cgs", "trj", "aws", "nii", "lab", "awg", "Cga", "awa",
|
||||||
"slv", "nbo", "lDm", "rjo", "nbm", "lDl", "rjm", "nbl", "rjl", "Cbo", "lDv", "ajo", "Cbm",
|
"Ciw", "lbj", "ayw", "Cii", "ayi", "Cib", "Cjj", "azj", "vpA", "xus", "yxi", "vok", "xug",
|
||||||
"izo", "ajm", "Cbl", "izm", "ajl", "izl", "Cbv", "ajv", "zie", "ifw", "rFz", "zid", "idy",
|
"yxb", "voc", "xua", "voE", "xuD", "voC", "nFA", "tms", "wti", "rhA", "nEk", "xvi", "wtb",
|
||||||
"icz", "yge", "aFz", "ywu", "ygd", "ihz", "ywt", "wce", "wsu", "wcd", "xtu", "wst", "xtt",
|
"rgk", "vqg", "xvb", "rgc", "nEE", "tmD", "rgE", "vqD", "nEB", "CFA", "lCs", "sli", "ahA",
|
||||||
"sku", "tlu", "skt", "vnu", "tlt", "vnt", "lBu", "nDu", "lBt", "rbu", "nDt", "rbt", "CDu",
|
"CEk", "lCg", "slb", "ixA", "agk", "nag", "tnb", "iwk", "rig", "vrb", "lCD", "iwc", "agE",
|
||||||
"abu", "CDt", "iju", "abt", "ijt", "ziF", "iFy", "iEz", "ygF", "ywh", "wcF", "wsh", "xsx",
|
"naD", "iwE", "CEB", "Cas", "lDi", "ais", "Cag", "lDb", "iys", "aig", "nbb", "iyg", "rjb",
|
||||||
"skh", "tkx", "vlx", "lAx", "nBx", "rDx", "CBx", "aDx", "ibx", "iCz", "wFc", "yCq", "wFE",
|
"CaD", "aiD", "Cbi", "aji", "Cbb", "izi", "ajb", "vmk", "xtg", "ywr", "vmc", "xta", "vmE",
|
||||||
"yCn", "wFC", "wFB", "sfc", "wFq", "sfE", "wFn", "sfC", "sfB", "krc", "sfq", "krE", "sfn",
|
"xtD", "vmC", "vmB", "nCk", "tlg", "wsr", "rak", "nCc", "xtr", "rac", "vna", "tlD", "raE",
|
||||||
"krC", "krB", "Bjc", "krq", "BjE", "krn", "BjC", "BjB", "Bjq", "Bjn", "yao", "zDf", "Dfy",
|
"nCC", "raC", "nCB", "raB", "CCk", "lBg", "skr", "aak", "CCc", "lBa", "iik", "aac", "nDa",
|
||||||
"yam", "Ddz", "yal", "wEo", "yCf", "who", "wEm", "whm", "wEl", "whl", "sdo", "wEv", "svo",
|
"lBD", "iic", "rba", "CCC", "iiE", "aaC", "CCB", "aaB", "CDg", "lBr", "abg", "CDa", "ijg",
|
||||||
"sdm", "svm", "sdl", "svl", "kno", "sdv", "lro", "knm", "lrm", "knl", "lrl", "Bbo", "knv",
|
"aba", "CDD", "ija", "abD", "CDr", "ijr", "vlc", "xsq", "vlE", "xsn", "vlC", "vlB", "nBc",
|
||||||
"Djo", "Bbm", "Djm", "Bbl", "Djl", "Bbv", "Djv", "zbe", "bfw", "npz", "zbd", "bdy", "bcz",
|
"tkq", "rDc", "nBE", "tkn", "rDE", "vln", "rDC", "nBB", "rDB", "CBc", "lAq", "aDc", "CBE",
|
||||||
"yae", "DFz", "yiu", "yad", "bhz", "yit", "wEe", "wgu", "wEd", "wxu", "wgt", "wxt", "scu",
|
"lAn", "ibc", "aDE", "nBn", "ibE", "rDn", "CBB", "ibC", "aDB", "ibB", "aDq", "ibq", "ibn",
|
||||||
"stu", "sct", "tvu", "stt", "tvt", "klu", "lnu", "klt", "nru", "lnt", "nrt", "BDu", "Dbu",
|
"xsf", "vkl", "tkf", "nAm", "nAl", "CAo", "aBo", "iDo", "CAl", "aBl", "kpk", "BdA", "kos",
|
||||||
"BDt", "bju", "Dbt", "bjt", "jfs", "rpy", "jdw", "roz", "jcy", "jcj", "zbF", "bFy", "zjh",
|
"Bck", "kog", "seb", "Bcc", "koa", "BcE", "koD", "Bhk", "kqw", "sfj", "Bgs", "kqi", "Bgg",
|
||||||
"jhy", "bEz", "jgz", "yaF", "yih", "yyx", "wEF", "wgh", "wwx", "xxx", "sch", "ssx", "ttx",
|
"kqb", "Bga", "BgD", "Biw", "krj", "Bii", "Bib", "Bjj", "lpA", "sus", "whi", "lok", "sug",
|
||||||
"vvx", "kkx", "llx", "nnx", "rrx", "BBx", "DDx", "bbx", "jFw", "rmz", "jEy", "jEj", "bCz",
|
"loc", "sua", "loE", "suD", "loC", "BFA", "kms", "sdi", "DhA", "BEk", "svi", "sdb", "Dgk",
|
||||||
"jaz", "jCy", "jCj", "jBj", "wCo", "wCm", "wCl", "sFo", "wCv", "sFm", "sFl", "kfo", "sFv",
|
"lqg", "svb", "Dgc", "BEE", "kmD", "DgE", "lqD", "BEB", "Bas", "kni", "Dis", "Bag", "knb",
|
||||||
"kfm", "kfl", "Aro", "kfv", "Arm", "Arl", "Arv", "yDe", "Bpz", "yDd", "wCe", "wau", "wCd",
|
"Dig", "lrb", "Dia", "BaD", "Bbi", "Dji", "Bbb", "Djb", "tuk", "wxg", "yir", "tuc", "wxa",
|
||||||
"wat", "sEu", "shu", "sEt", "sht", "kdu", "kvu", "kdt", "kvt", "Anu", "Bru", "Ant", "Brt",
|
"tuE", "wxD", "tuC", "tuB", "lmk", "stg", "nqk", "lmc", "sta", "nqc", "tva", "stD", "nqE",
|
||||||
"zDp", "Dpy", "Doz", "yDF", "ybh", "wCF", "wah", "wix", "sEh", "sgx", "sxx", "kcx", "ktx",
|
"lmC", "nqC", "lmB", "nqB", "BCk", "klg", "Dak", "BCc", "str", "bik", "Dac", "lna", "klD",
|
||||||
"lvx", "Alx", "Bnx", "Drx", "bpw", "nuz", "boy", "boj", "Dmz", "bqz", "jps", "ruy", "jow",
|
"bic", "nra", "BCC", "biE", "DaC", "BCB", "DaB", "BDg", "klr", "Dbg", "BDa", "bjg", "Dba",
|
||||||
"ruj", "joi", "job", "bmy", "jqy", "bmj", "jqj", "jmw", "rtj", "jmi", "jmb", "blj", "jnj",
|
"BDD", "bja", "DbD", "BDr", "Dbr", "bjr", "xxc", "yyq", "xxE", "yyn", "xxC", "xxB", "ttc",
|
||||||
"jli", "jlb", "jkr", "sCu", "sCt", "kFu", "kFt", "Afu", "Aft", "wDh", "sCh", "sax", "kEx",
|
"wwq", "vvc", "xxq", "wwn", "vvE", "xxn", "vvC", "ttB", "vvB", "llc", "ssq", "nnc", "llE",
|
||||||
"khx", "Adx", "Avx", "Buz", "Duy", "Duj", "buw", "nxj", "bui", "bub", "Dtj", "bvj", "jus",
|
"ssn", "rrc", "nnE", "ttn", "rrE", "vvn", "llB", "rrC", "nnB", "rrB", "BBc", "kkq", "DDc",
|
||||||
"rxi", "jug", "rxb", "jua", "juD", "bti", "jvi", "btb", "jvb", "jtg", "rwr", "jta", "jtD",
|
"BBE", "kkn", "bbc", "DDE", "lln", "jjc", "bbE", "nnn", "BBB", "jjE", "rrn", "DDB", "jjC",
|
||||||
"bsr", "jtr", "jsq", "jsn", "Bxj", "Dxi", "Dxb", "bxg", "nyr", "bxa", "bxD", "Dwr", "bxr",
|
"BBq", "DDq", "BBn", "bbq", "DDn", "jjq", "bbn", "jjn", "xwo", "yyf", "xwm", "xwl", "tso",
|
||||||
"bwq", "bwn", "pjk", "urw", "ejA", "pbs", "uny", "ebk", "pDw", "ulz", "eDs", "pBy", "eBw",
|
"wwf", "vto", "xwv", "vtm", "tsl", "vtl", "lko", "ssf", "nlo", "lkm", "rno", "nlm", "lkl",
|
||||||
"zfc", "fjk", "prw", "zfE", "fbs", "pny", "zfC", "fDw", "plz", "zfB", "fBy", "yrc", "zfq",
|
"rnm", "nll", "rnl", "BAo", "kkf", "DBo", "lkv", "bDo", "DBm", "BAl", "jbo", "bDm", "DBl",
|
||||||
"frw", "yrE", "zfn", "fny", "yrC", "flz", "yrB", "xjc", "yrq", "xjE", "yrn", "xjC", "xjB",
|
"jbm", "bDl", "jbl", "DBv", "jbv", "xwd", "vsu", "vst", "nku", "rlu", "rlt", "DAu", "bBu",
|
||||||
"uzc", "xjq", "uzE", "xjn", "uzC", "uzB", "pzc", "uzq", "pzE", "uzn", "pzC", "djA", "ors",
|
"jDu", "jDt", "ApA", "Aok", "keg", "Aoc", "AoE", "AoC", "Aqs", "Aqg", "Aqa", "AqD", "Ari",
|
||||||
"ufy", "dbk", "onw", "udz", "dDs", "oly", "dBw", "okz", "dAy", "zdo", "drs", "ovy", "zdm",
|
"Arb", "kuk", "kuc", "sha", "kuE", "shD", "kuC", "kuB", "Amk", "kdg", "Bqk", "kvg", "kda",
|
||||||
"dnw", "otz", "zdl", "dly", "dkz", "yno", "zdv", "dvy", "ynm", "dtz", "ynl", "xbo", "ynv",
|
"Bqc", "kva", "BqE", "kvD", "BqC", "AmB", "BqB", "Ang", "kdr", "Brg", "kvr", "Bra", "AnD",
|
||||||
"xbm", "xbl", "ujo", "xbv", "ujm", "ujl", "ozo", "ujv", "ozm", "ozl", "crk", "ofw", "uFz",
|
"BrD", "Anr", "Brr", "sxc", "sxE", "sxC", "sxB", "ktc", "lvc", "sxq", "sgn", "lvE", "sxn",
|
||||||
"cns", "ody", "clw", "ocz", "cky", "ckj", "zcu", "cvw", "ohz", "zct", "cty", "csz", "ylu",
|
"lvC", "ktB", "lvB", "Alc", "Bnc", "AlE", "kcn", "Drc", "BnE", "AlC", "DrE", "BnC", "AlB",
|
||||||
"cxz", "ylt", "xDu", "xDt", "ubu", "ubt", "oju", "ojt", "cfs", "oFy", "cdw", "oEz", "ccy",
|
"DrC", "BnB", "Alq", "Bnq", "Aln", "Drq", "Bnn", "Drn", "wyo", "wym", "wyl", "swo", "txo",
|
||||||
"ccj", "zch", "chy", "cgz", "ykx", "xBx", "uDx", "cFw", "oCz", "cEy", "cEj", "caz", "cCy",
|
"wyv", "txm", "swl", "txl", "kso", "sgf", "lto", "swv", "nvo", "ltm", "ksl", "nvm", "ltl",
|
||||||
"cCj", "FjA", "mrs", "tfy", "Fbk", "mnw", "tdz", "FDs", "mly", "FBw", "mkz", "FAy", "zFo",
|
"nvl", "Ako", "kcf", "Blo", "ksv", "Dno", "Blm", "Akl", "bro", "Dnm", "Bll", "brm", "Dnl",
|
||||||
"Frs", "mvy", "zFm", "Fnw", "mtz", "zFl", "Fly", "Fkz", "yfo", "zFv", "Fvy", "yfm", "Ftz",
|
"Akv", "Blv", "Dnv", "brv", "yze", "yzd", "wye", "xyu", "wyd", "xyt", "swe", "twu", "swd",
|
||||||
"yfl", "wro", "yfv", "wrm", "wrl", "tjo", "wrv", "tjm", "tjl", "mzo", "tjv", "mzm", "mzl",
|
"vxu", "twt", "vxt", "kse", "lsu", "ksd", "ntu", "lst", "rvu", "ypk", "zew", "xdA", "yos",
|
||||||
"qrk", "vfw", "xpz", "hbA", "qns", "vdy", "hDk", "qlw", "vcz", "hBs", "qky", "hAw", "qkj",
|
"zei", "xck", "yog", "zeb", "xcc", "yoa", "xcE", "yoD", "xcC", "xhk", "yqw", "zfj", "utA",
|
||||||
"hAi", "Erk", "mfw", "tFz", "hrk", "Ens", "mdy", "hns", "qty", "mcz", "hlw", "Eky", "hky",
|
"xgs", "yqi", "usk", "xgg", "yqb", "usc", "xga", "usE", "xgD", "usC", "uxk", "xiw", "yrj",
|
||||||
"Ekj", "hkj", "zEu", "Evw", "mhz", "zhu", "zEt", "hvw", "Ety", "zht", "hty", "Esz", "hsz",
|
"ptA", "uws", "xii", "psk", "uwg", "xib", "psc", "uwa", "psE", "uwD", "psC", "pxk", "uyw",
|
||||||
"ydu", "Exz", "yvu", "ydt", "hxz", "yvt", "wnu", "xru", "wnt", "xrt", "tbu", "vju", "tbt",
|
"xjj", "ftA", "pws", "uyi", "fsk", "pwg", "uyb", "fsc", "pwa", "fsE", "pwD", "fxk", "pyw",
|
||||||
"vjt", "mju", "mjt", "grA", "qfs", "vFy", "gnk", "qdw", "vEz", "gls", "qcy", "gkw", "qcj",
|
"uzj", "fws", "pyi", "fwg", "pyb", "fwa", "fyw", "pzj", "fyi", "fyb", "xFA", "yms", "zdi",
|
||||||
"gki", "gkb", "Efs", "mFy", "gvs", "Edw", "mEz", "gtw", "qgz", "gsy", "Ecj", "gsj", "zEh",
|
"xEk", "ymg", "zdb", "xEc", "yma", "xEE", "ymD", "xEC", "xEB", "uhA", "xas", "yni", "ugk",
|
||||||
"Ehy", "zgx", "gxy", "Egz", "gwz", "ycx", "ytx", "wlx", "xnx", "tDx", "vbx", "mbx", "gfk",
|
"xag", "ynb", "ugc", "xaa", "ugE", "xaD", "ugC", "ugB", "oxA", "uis", "xbi", "owk", "uig",
|
||||||
"qFw", "vCz", "gds", "qEy", "gcw", "qEj", "gci", "gcb", "EFw", "mCz", "ghw", "EEy", "ggy",
|
"xbb", "owc", "uia", "owE", "uiD", "owC", "owB", "dxA", "oys", "uji", "dwk", "oyg", "ujb",
|
||||||
"EEj", "ggj", "Eaz", "giz", "gFs", "qCy", "gEw", "qCj", "gEi", "gEb", "ECy", "gay", "ECj",
|
"dwc", "oya", "dwE", "oyD", "dwC", "dys", "ozi", "dyg", "ozb", "dya", "dyD", "dzi", "dzb",
|
||||||
"gaj", "gCw", "qBj", "gCi", "gCb", "EBj", "gDj", "gBi", "gBb", "Crk", "lfw", "spz", "Cns",
|
"xCk", "ylg", "zcr", "xCc", "yla", "xCE", "ylD", "xCC", "xCB", "uak", "xDg", "ylr", "uac",
|
||||||
"ldy", "Clw", "lcz", "Cky", "Ckj", "zCu", "Cvw", "lhz", "zCt", "Cty", "Csz", "yFu", "Cxz",
|
"xDa", "uaE", "xDD", "uaC", "uaB", "oik", "ubg", "xDr", "oic", "uba", "oiE", "ubD", "oiC",
|
||||||
"yFt", "wfu", "wft", "sru", "srt", "lju", "ljt", "arA", "nfs", "tpy", "ank", "ndw", "toz",
|
"oiB", "cyk", "ojg", "ubr", "cyc", "oja", "cyE", "ojD", "cyC", "cyB", "czg", "ojr", "cza",
|
||||||
"als", "ncy", "akw", "ncj", "aki", "akb", "Cfs", "lFy", "avs", "Cdw", "lEz", "atw", "ngz",
|
"czD", "czr", "xBc", "ykq", "xBE", "ykn", "xBC", "xBB", "uDc", "xBq", "uDE", "xBn", "uDC",
|
||||||
"asy", "Ccj", "asj", "zCh", "Chy", "zax", "axy", "Cgz", "awz", "yEx", "yhx", "wdx", "wvx",
|
"uDB", "obc", "uDq", "obE", "uDn", "obC", "obB", "cjc", "obq", "cjE", "obn", "cjC", "cjB",
|
||||||
"snx", "trx", "lbx", "rfk", "vpw", "xuz", "inA", "rds", "voy", "ilk", "rcw", "voj", "iks",
|
"cjq", "cjn", "xAo", "ykf", "xAm", "xAl", "uBo", "xAv", "uBm", "uBl", "oDo", "uBv", "oDm",
|
||||||
"rci", "ikg", "rcb", "ika", "afk", "nFw", "tmz", "ivk", "ads", "nEy", "its", "rgy", "nEj",
|
"oDl", "cbo", "oDv", "cbm", "cbl", "xAe", "xAd", "uAu", "uAt", "oBu", "oBt", "wpA", "yes",
|
||||||
"isw", "aci", "isi", "acb", "isb", "CFw", "lCz", "ahw", "CEy", "ixw", "agy", "CEj", "iwy",
|
"zFi", "wok", "yeg", "zFb", "woc", "yea", "woE", "yeD", "woC", "woB", "thA", "wqs", "yfi",
|
||||||
"agj", "iwj", "Caz", "aiz", "iyz", "ifA", "rFs", "vmy", "idk", "rEw", "vmj", "ics", "rEi",
|
"tgk", "wqg", "yfb", "tgc", "wqa", "tgE", "wqD", "tgC", "tgB", "mxA", "tis", "wri", "mwk",
|
||||||
"icg", "rEb", "ica", "icD", "aFs", "nCy", "ihs", "aEw", "nCj", "igw", "raj", "igi", "aEb",
|
"tig", "wrb", "mwc", "tia", "mwE", "tiD", "mwC", "mwB", "FxA", "mys", "tji", "Fwk", "myg",
|
||||||
"igb", "CCy", "aay", "CCj", "iiy", "aaj", "iij", "iFk", "rCw", "vlj", "iEs", "rCi", "iEg",
|
"tjb", "Fwc", "mya", "FwE", "myD", "FwC", "Fys", "mzi", "Fyg", "mzb", "Fya", "FyD", "Fzi",
|
||||||
"rCb", "iEa", "iED", "aCw", "nBj", "iaw", "aCi", "iai", "aCb", "iab", "CBj", "aDj", "ibj",
|
"Fzb", "yuk", "zhg", "hjs", "yuc", "zha", "hbw", "yuE", "zhD", "hDy", "yuC", "yuB", "wmk",
|
||||||
"iCs", "rBi", "iCg", "rBb", "iCa", "iCD", "aBi", "iDi", "aBb", "iDb", "iBg", "rAr", "iBa",
|
"ydg", "zEr", "xqk", "wmc", "zhr", "xqc", "yva", "ydD", "xqE", "wmC", "xqC", "wmB", "xqB",
|
||||||
"iBD", "aAr", "iBr", "iAq", "iAn", "Bfs", "kpy", "Bdw", "koz", "Bcy", "Bcj", "Bhy", "Bgz",
|
"tak", "wng", "ydr", "vik", "tac", "wna", "vic", "xra", "wnD", "viE", "taC", "viC", "taB",
|
||||||
"yCx", "wFx", "sfx", "krx", "Dfk", "lpw", "suz", "Dds", "loy", "Dcw", "loj", "Dci", "Dcb",
|
"viB", "mik", "tbg", "wnr", "qyk", "mic", "tba", "qyc", "vja", "tbD", "qyE", "miC", "qyC",
|
||||||
"BFw", "kmz", "Dhw", "BEy", "Dgy", "BEj", "Dgj", "Baz", "Diz", "bfA", "nps", "tuy", "bdk",
|
"miB", "qyB", "Eyk", "mjg", "tbr", "hyk", "Eyc", "mja", "hyc", "qza", "mjD", "hyE", "EyC",
|
||||||
"now", "tuj", "bcs", "noi", "bcg", "nob", "bca", "bcD", "DFs", "lmy", "bhs", "DEw", "lmj",
|
"hyC", "EyB", "Ezg", "mjr", "hzg", "Eza", "hza", "EzD", "hzD", "Ezr", "ytc", "zgq", "grw",
|
||||||
"bgw", "DEi", "bgi", "DEb", "bgb", "BCy", "Day", "BCj", "biy", "Daj", "bij", "rpk", "vuw",
|
"ytE", "zgn", "gny", "ytC", "glz", "ytB", "wlc", "ycq", "xnc", "wlE", "ycn", "xnE", "ytn",
|
||||||
"xxj", "jdA", "ros", "vui", "jck", "rog", "vub", "jcc", "roa", "jcE", "roD", "jcC", "bFk",
|
"xnC", "wlB", "xnB", "tDc", "wlq", "vbc", "tDE", "wln", "vbE", "xnn", "vbC", "tDB", "vbB",
|
||||||
"nmw", "ttj", "jhk", "bEs", "nmi", "jgs", "rqi", "nmb", "jgg", "bEa", "jga", "bED", "jgD",
|
"mbc", "tDq", "qjc", "mbE", "tDn", "qjE", "vbn", "qjC", "mbB", "qjB", "Ejc", "mbq", "gzc",
|
||||||
"DCw", "llj", "baw", "DCi", "jiw", "bai", "DCb", "jii", "bab", "jib", "BBj", "DDj", "bbj",
|
"EjE", "mbn", "gzE", "qjn", "gzC", "EjB", "gzB", "Ejq", "gzq", "Ejn", "gzn", "yso", "zgf",
|
||||||
"jjj", "jFA", "rms", "vti", "jEk", "rmg", "vtb", "jEc", "rma", "jEE", "rmD", "jEC", "jEB",
|
"gfy", "ysm", "gdz", "ysl", "wko", "ycf", "xlo", "ysv", "xlm", "wkl", "xll", "tBo", "wkv",
|
||||||
"bCs", "nli", "jas", "bCg", "nlb", "jag", "rnb", "jaa", "bCD", "jaD", "DBi", "bDi", "DBb",
|
"vDo", "tBm", "vDm", "tBl", "vDl", "mDo", "tBv", "qbo", "vDv", "qbm", "mDl", "qbl", "Ebo",
|
||||||
"jbi", "bDb", "jbb", "jCk", "rlg", "vsr", "jCc", "rla", "jCE", "rlD", "jCC", "jCB", "bBg",
|
"mDv", "gjo", "Ebm", "gjm", "Ebl", "gjl", "Ebv", "gjv", "yse", "gFz", "ysd", "wke", "xku",
|
||||||
"nkr", "jDg", "bBa", "jDa", "bBD", "jDD", "DAr", "bBr", "jDr", "jBc", "rkq", "jBE", "rkn",
|
"wkd", "xkt", "tAu", "vBu", "tAt", "vBt", "mBu", "qDu", "mBt", "qDt", "EDu", "gbu", "EDt",
|
||||||
"jBC", "jBB", "bAq", "jBq", "bAn", "jBn", "jAo", "rkf", "jAm", "jAl", "bAf", "jAv", "Apw",
|
"gbt", "ysF", "wkF", "xkh", "tAh", "vAx", "mAx", "qBx", "wek", "yFg", "zCr", "wec", "yFa",
|
||||||
"kez", "Aoy", "Aoj", "Aqz", "Bps", "kuy", "Bow", "kuj", "Boi", "Bob", "Amy", "Bqy", "Amj",
|
"weE", "yFD", "weC", "weB", "sqk", "wfg", "yFr", "sqc", "wfa", "sqE", "wfD", "sqC", "sqB",
|
||||||
"Bqj", "Dpk", "luw", "sxj", "Dos", "lui", "Dog", "lub", "Doa", "DoD", "Bmw", "ktj", "Dqw",
|
"lik", "srg", "wfr", "lic", "sra", "liE", "srD", "liC", "liB", "Cyk", "ljg", "srr", "Cyc",
|
||||||
"Bmi", "Dqi", "Bmb", "Dqb", "Alj", "Bnj", "Drj", "bpA", "nus", "txi", "bok", "nug", "txb",
|
"lja", "CyE", "ljD", "CyC", "CyB", "Czg", "ljr", "Cza", "CzD", "Czr", "yhc", "zaq", "arw",
|
||||||
"boc", "nua", "boE", "nuD", "boC", "boB", "Dms", "lti", "bqs", "Dmg", "ltb", "bqg", "nvb",
|
"yhE", "zan", "any", "yhC", "alz", "yhB", "wdc", "yEq", "wvc", "wdE", "yEn", "wvE", "yhn",
|
||||||
"bqa", "DmD", "bqD", "Bli", "Dni", "Blb", "bri", "Dnb", "brb", "ruk", "vxg", "xyr", "ruc",
|
"wvC", "wdB", "wvB", "snc", "wdq", "trc", "snE", "wdn", "trE", "wvn", "trC", "snB", "trB",
|
||||||
"vxa", "ruE", "vxD", "ruC", "ruB", "bmk", "ntg", "twr", "jqk", "bmc", "nta", "jqc", "rva",
|
"lbc", "snq", "njc", "lbE", "snn", "njE", "trn", "njC", "lbB", "njB", "Cjc", "lbq", "azc",
|
||||||
"ntD", "jqE", "bmC", "jqC", "bmB", "jqB", "Dlg", "lsr", "bng", "Dla", "jrg", "bna", "DlD",
|
"CjE", "lbn", "azE", "njn", "azC", "CjB", "azB", "Cjq", "azq", "Cjn", "azn", "zio", "irs",
|
||||||
"jra", "bnD", "jrD", "Bkr", "Dlr", "bnr", "jrr", "rtc", "vwq", "rtE", "vwn", "rtC", "rtB",
|
"rfy", "zim", "inw", "rdz", "zil", "ily", "ikz", "ygo", "zaf", "afy", "yxo", "ziv", "ivy",
|
||||||
"blc", "nsq", "jnc", "blE", "nsn", "jnE", "rtn", "jnC", "blB", "jnB", "Dkq", "blq", "Dkn",
|
"adz", "yxm", "ygl", "itz", "yxl", "wco", "yEf", "wto", "wcm", "xvo", "yxv", "wcl", "xvm",
|
||||||
"jnq", "bln", "jnn", "rso", "vwf", "rsm", "rsl", "bko", "nsf", "jlo", "bkm", "jlm", "bkl",
|
"wtl", "xvl", "slo", "wcv", "tno", "slm", "vro", "tnm", "sll", "vrm", "tnl", "vrl", "lDo",
|
||||||
"jll", "Dkf", "bkv", "jlv", "rse", "rsd", "bke", "jku", "bkd", "jkt", "Aey", "Aej", "Auw",
|
"slv", "nbo", "lDm", "rjo", "nbm", "lDl", "rjm", "nbl", "rjl", "Cbo", "lDv", "ajo", "Cbm",
|
||||||
"khj", "Aui", "Aub", "Adj", "Avj", "Bus", "kxi", "Bug", "kxb", "Bua", "BuD", "Ati", "Bvi",
|
"izo", "ajm", "Cbl", "izm", "ajl", "izl", "Cbv", "ajv", "zie", "ifw", "rFz", "zid", "idy",
|
||||||
"Atb", "Bvb", "Duk", "lxg", "syr", "Duc", "lxa", "DuE", "lxD", "DuC", "DuB", "Btg", "kwr",
|
"icz", "yge", "aFz", "ywu", "ygd", "ihz", "ywt", "wce", "wsu", "wcd", "xtu", "wst", "xtt",
|
||||||
"Dvg", "lxr", "Dva", "BtD", "DvD", "Asr", "Btr", "Dvr", "nxc", "tyq", "nxE", "tyn", "nxC",
|
"sku", "tlu", "skt", "vnu", "tlt", "vnt", "lBu", "nDu", "lBt", "rbu", "nDt", "rbt", "CDu",
|
||||||
"nxB", "Dtc", "lwq", "bvc", "nxq", "lwn", "bvE", "DtC", "bvC", "DtB", "bvB", "Bsq", "Dtq",
|
"abu", "CDt", "iju", "abt", "ijt", "ziF", "iFy", "iEz", "ygF", "ywh", "wcF", "wsh", "xsx",
|
||||||
"Bsn", "bvq", "Dtn", "bvn", "vyo", "xzf", "vym", "vyl", "nwo", "tyf", "rxo", "nwm", "rxm",
|
"skh", "tkx", "vlx", "lAx", "nBx", "rDx", "CBx", "aDx", "ibx", "iCz", "wFc", "yCq", "wFE",
|
||||||
"nwl", "rxl", "Dso", "lwf", "bto", "Dsm", "jvo", "btm", "Dsl", "jvm", "btl", "jvl", "Bsf",
|
"yCn", "wFC", "wFB", "sfc", "wFq", "sfE", "wFn", "sfC", "sfB", "krc", "sfq", "krE", "sfn",
|
||||||
"Dsv", "btv", "jvv", "vye", "vyd", "nwe", "rwu", "nwd", "rwt", "Dse", "bsu", "Dsd", "jtu",
|
"krC", "krB", "Bjc", "krq", "BjE", "krn", "BjC", "BjB", "Bjq", "Bjn", "yao", "zDf", "Dfy",
|
||||||
"bst", "jtt", "vyF", "nwF", "rwh", "DsF", "bsh", "jsx", "Ahi", "Ahb", "Axg", "kir", "Axa",
|
"yam", "Ddz", "yal", "wEo", "yCf", "who", "wEm", "whm", "wEl", "whl", "sdo", "wEv", "svo",
|
||||||
"AxD", "Agr", "Axr", "Bxc", "kyq", "BxE", "kyn", "BxC", "BxB", "Awq", "Bxq", "Awn", "Bxn",
|
"sdm", "svm", "sdl", "svl", "kno", "sdv", "lro", "knm", "lrm", "knl", "lrl", "Bbo", "knv",
|
||||||
"lyo", "szf", "lym", "lyl", "Bwo", "kyf", "Dxo", "lyv", "Dxm", "Bwl", "Dxl", "Awf", "Bwv",
|
"Djo", "Bbm", "Djm", "Bbl", "Djl", "Bbv", "Djv", "zbe", "bfw", "npz", "zbd", "bdy", "bcz",
|
||||||
"Dxv", "tze", "tzd", "lye", "nyu", "lyd", "nyt", "Bwe", "Dwu", "Bwd", "bxu", "Dwt", "bxt",
|
"yae", "DFz", "yiu", "yad", "bhz", "yit", "wEe", "wgu", "wEd", "wxu", "wgt", "wxt", "scu",
|
||||||
"tzF", "lyF", "nyh", "BwF", "Dwh", "bwx", "Aiq", "Ain", "Ayo", "kjf", "Aym", "Ayl", "Aif",
|
"stu", "sct", "tvu", "stt", "tvt", "klu", "lnu", "klt", "nru", "lnt", "nrt", "BDu", "Dbu",
|
||||||
"Ayv", "kze", "kzd", "Aye", "Byu", "Ayd", "Byt", "szp" };
|
"BDt", "bju", "Dbt", "bjt", "jfs", "rpy", "jdw", "roz", "jcy", "jcj", "zbF", "bFy", "zjh",
|
||||||
|
"jhy", "bEz", "jgz", "yaF", "yih", "yyx", "wEF", "wgh", "wwx", "xxx", "sch", "ssx", "ttx",
|
||||||
/* converts values into bar patterns - replacing Grand Zebu's true type font */
|
"vvx", "kkx", "llx", "nnx", "rrx", "BBx", "DDx", "bbx", "jFw", "rmz", "jEy", "jEj", "bCz",
|
||||||
static const char *PDFttf[35] = { "00000", "00001", "00010", "00011", "00100", "00101", "00110", "00111",
|
"jaz", "jCy", "jCj", "jBj", "wCo", "wCm", "wCl", "sFo", "wCv", "sFm", "sFl", "kfo", "sFv",
|
||||||
"01000", "01001", "01010", "01011", "01100", "01101", "01110", "01111", "10000", "10001",
|
"kfm", "kfl", "Aro", "kfv", "Arm", "Arl", "Arv", "yDe", "Bpz", "yDd", "wCe", "wau", "wCd",
|
||||||
"10010", "10011", "10100", "10101", "10110", "10111", "11000", "11001", "11010",
|
"wat", "sEu", "shu", "sEt", "sht", "kdu", "kvu", "kdt", "kvt", "Anu", "Bru", "Ant", "Brt",
|
||||||
"11011", "11100", "11101", "11110", "11111", "01", "1111111101010100", "11111101000101001"};
|
"zDp", "Dpy", "Doz", "yDF", "ybh", "wCF", "wah", "wix", "sEh", "sgx", "sxx", "kcx", "ktx",
|
||||||
|
"lvx", "Alx", "Bnx", "Drx", "bpw", "nuz", "boy", "boj", "Dmz", "bqz", "jps", "ruy", "jow",
|
||||||
|
"ruj", "joi", "job", "bmy", "jqy", "bmj", "jqj", "jmw", "rtj", "jmi", "jmb", "blj", "jnj",
|
||||||
|
"jli", "jlb", "jkr", "sCu", "sCt", "kFu", "kFt", "Afu", "Aft", "wDh", "sCh", "sax", "kEx",
|
||||||
|
"khx", "Adx", "Avx", "Buz", "Duy", "Duj", "buw", "nxj", "bui", "bub", "Dtj", "bvj", "jus",
|
||||||
|
"rxi", "jug", "rxb", "jua", "juD", "bti", "jvi", "btb", "jvb", "jtg", "rwr", "jta", "jtD",
|
||||||
|
"bsr", "jtr", "jsq", "jsn", "Bxj", "Dxi", "Dxb", "bxg", "nyr", "bxa", "bxD", "Dwr", "bxr",
|
||||||
|
"bwq", "bwn", "pjk", "urw", "ejA", "pbs", "uny", "ebk", "pDw", "ulz", "eDs", "pBy", "eBw",
|
||||||
|
"zfc", "fjk", "prw", "zfE", "fbs", "pny", "zfC", "fDw", "plz", "zfB", "fBy", "yrc", "zfq",
|
||||||
|
"frw", "yrE", "zfn", "fny", "yrC", "flz", "yrB", "xjc", "yrq", "xjE", "yrn", "xjC", "xjB",
|
||||||
|
"uzc", "xjq", "uzE", "xjn", "uzC", "uzB", "pzc", "uzq", "pzE", "uzn", "pzC", "djA", "ors",
|
||||||
|
"ufy", "dbk", "onw", "udz", "dDs", "oly", "dBw", "okz", "dAy", "zdo", "drs", "ovy", "zdm",
|
||||||
|
"dnw", "otz", "zdl", "dly", "dkz", "yno", "zdv", "dvy", "ynm", "dtz", "ynl", "xbo", "ynv",
|
||||||
|
"xbm", "xbl", "ujo", "xbv", "ujm", "ujl", "ozo", "ujv", "ozm", "ozl", "crk", "ofw", "uFz",
|
||||||
|
"cns", "ody", "clw", "ocz", "cky", "ckj", "zcu", "cvw", "ohz", "zct", "cty", "csz", "ylu",
|
||||||
|
"cxz", "ylt", "xDu", "xDt", "ubu", "ubt", "oju", "ojt", "cfs", "oFy", "cdw", "oEz", "ccy",
|
||||||
|
"ccj", "zch", "chy", "cgz", "ykx", "xBx", "uDx", "cFw", "oCz", "cEy", "cEj", "caz", "cCy",
|
||||||
|
"cCj", "FjA", "mrs", "tfy", "Fbk", "mnw", "tdz", "FDs", "mly", "FBw", "mkz", "FAy", "zFo",
|
||||||
|
"Frs", "mvy", "zFm", "Fnw", "mtz", "zFl", "Fly", "Fkz", "yfo", "zFv", "Fvy", "yfm", "Ftz",
|
||||||
|
"yfl", "wro", "yfv", "wrm", "wrl", "tjo", "wrv", "tjm", "tjl", "mzo", "tjv", "mzm", "mzl",
|
||||||
|
"qrk", "vfw", "xpz", "hbA", "qns", "vdy", "hDk", "qlw", "vcz", "hBs", "qky", "hAw", "qkj",
|
||||||
|
"hAi", "Erk", "mfw", "tFz", "hrk", "Ens", "mdy", "hns", "qty", "mcz", "hlw", "Eky", "hky",
|
||||||
|
"Ekj", "hkj", "zEu", "Evw", "mhz", "zhu", "zEt", "hvw", "Ety", "zht", "hty", "Esz", "hsz",
|
||||||
|
"ydu", "Exz", "yvu", "ydt", "hxz", "yvt", "wnu", "xru", "wnt", "xrt", "tbu", "vju", "tbt",
|
||||||
|
"vjt", "mju", "mjt", "grA", "qfs", "vFy", "gnk", "qdw", "vEz", "gls", "qcy", "gkw", "qcj",
|
||||||
|
"gki", "gkb", "Efs", "mFy", "gvs", "Edw", "mEz", "gtw", "qgz", "gsy", "Ecj", "gsj", "zEh",
|
||||||
|
"Ehy", "zgx", "gxy", "Egz", "gwz", "ycx", "ytx", "wlx", "xnx", "tDx", "vbx", "mbx", "gfk",
|
||||||
|
"qFw", "vCz", "gds", "qEy", "gcw", "qEj", "gci", "gcb", "EFw", "mCz", "ghw", "EEy", "ggy",
|
||||||
|
"EEj", "ggj", "Eaz", "giz", "gFs", "qCy", "gEw", "qCj", "gEi", "gEb", "ECy", "gay", "ECj",
|
||||||
|
"gaj", "gCw", "qBj", "gCi", "gCb", "EBj", "gDj", "gBi", "gBb", "Crk", "lfw", "spz", "Cns",
|
||||||
|
"ldy", "Clw", "lcz", "Cky", "Ckj", "zCu", "Cvw", "lhz", "zCt", "Cty", "Csz", "yFu", "Cxz",
|
||||||
|
"yFt", "wfu", "wft", "sru", "srt", "lju", "ljt", "arA", "nfs", "tpy", "ank", "ndw", "toz",
|
||||||
|
"als", "ncy", "akw", "ncj", "aki", "akb", "Cfs", "lFy", "avs", "Cdw", "lEz", "atw", "ngz",
|
||||||
|
"asy", "Ccj", "asj", "zCh", "Chy", "zax", "axy", "Cgz", "awz", "yEx", "yhx", "wdx", "wvx",
|
||||||
|
"snx", "trx", "lbx", "rfk", "vpw", "xuz", "inA", "rds", "voy", "ilk", "rcw", "voj", "iks",
|
||||||
|
"rci", "ikg", "rcb", "ika", "afk", "nFw", "tmz", "ivk", "ads", "nEy", "its", "rgy", "nEj",
|
||||||
|
"isw", "aci", "isi", "acb", "isb", "CFw", "lCz", "ahw", "CEy", "ixw", "agy", "CEj", "iwy",
|
||||||
|
"agj", "iwj", "Caz", "aiz", "iyz", "ifA", "rFs", "vmy", "idk", "rEw", "vmj", "ics", "rEi",
|
||||||
|
"icg", "rEb", "ica", "icD", "aFs", "nCy", "ihs", "aEw", "nCj", "igw", "raj", "igi", "aEb",
|
||||||
|
"igb", "CCy", "aay", "CCj", "iiy", "aaj", "iij", "iFk", "rCw", "vlj", "iEs", "rCi", "iEg",
|
||||||
|
"rCb", "iEa", "iED", "aCw", "nBj", "iaw", "aCi", "iai", "aCb", "iab", "CBj", "aDj", "ibj",
|
||||||
|
"iCs", "rBi", "iCg", "rBb", "iCa", "iCD", "aBi", "iDi", "aBb", "iDb", "iBg", "rAr", "iBa",
|
||||||
|
"iBD", "aAr", "iBr", "iAq", "iAn", "Bfs", "kpy", "Bdw", "koz", "Bcy", "Bcj", "Bhy", "Bgz",
|
||||||
|
"yCx", "wFx", "sfx", "krx", "Dfk", "lpw", "suz", "Dds", "loy", "Dcw", "loj", "Dci", "Dcb",
|
||||||
|
"BFw", "kmz", "Dhw", "BEy", "Dgy", "BEj", "Dgj", "Baz", "Diz", "bfA", "nps", "tuy", "bdk",
|
||||||
|
"now", "tuj", "bcs", "noi", "bcg", "nob", "bca", "bcD", "DFs", "lmy", "bhs", "DEw", "lmj",
|
||||||
|
"bgw", "DEi", "bgi", "DEb", "bgb", "BCy", "Day", "BCj", "biy", "Daj", "bij", "rpk", "vuw",
|
||||||
|
"xxj", "jdA", "ros", "vui", "jck", "rog", "vub", "jcc", "roa", "jcE", "roD", "jcC", "bFk",
|
||||||
|
"nmw", "ttj", "jhk", "bEs", "nmi", "jgs", "rqi", "nmb", "jgg", "bEa", "jga", "bED", "jgD",
|
||||||
|
"DCw", "llj", "baw", "DCi", "jiw", "bai", "DCb", "jii", "bab", "jib", "BBj", "DDj", "bbj",
|
||||||
|
"jjj", "jFA", "rms", "vti", "jEk", "rmg", "vtb", "jEc", "rma", "jEE", "rmD", "jEC", "jEB",
|
||||||
|
"bCs", "nli", "jas", "bCg", "nlb", "jag", "rnb", "jaa", "bCD", "jaD", "DBi", "bDi", "DBb",
|
||||||
|
"jbi", "bDb", "jbb", "jCk", "rlg", "vsr", "jCc", "rla", "jCE", "rlD", "jCC", "jCB", "bBg",
|
||||||
|
"nkr", "jDg", "bBa", "jDa", "bBD", "jDD", "DAr", "bBr", "jDr", "jBc", "rkq", "jBE", "rkn",
|
||||||
|
"jBC", "jBB", "bAq", "jBq", "bAn", "jBn", "jAo", "rkf", "jAm", "jAl", "bAf", "jAv", "Apw",
|
||||||
|
"kez", "Aoy", "Aoj", "Aqz", "Bps", "kuy", "Bow", "kuj", "Boi", "Bob", "Amy", "Bqy", "Amj",
|
||||||
|
"Bqj", "Dpk", "luw", "sxj", "Dos", "lui", "Dog", "lub", "Doa", "DoD", "Bmw", "ktj", "Dqw",
|
||||||
|
"Bmi", "Dqi", "Bmb", "Dqb", "Alj", "Bnj", "Drj", "bpA", "nus", "txi", "bok", "nug", "txb",
|
||||||
|
"boc", "nua", "boE", "nuD", "boC", "boB", "Dms", "lti", "bqs", "Dmg", "ltb", "bqg", "nvb",
|
||||||
|
"bqa", "DmD", "bqD", "Bli", "Dni", "Blb", "bri", "Dnb", "brb", "ruk", "vxg", "xyr", "ruc",
|
||||||
|
"vxa", "ruE", "vxD", "ruC", "ruB", "bmk", "ntg", "twr", "jqk", "bmc", "nta", "jqc", "rva",
|
||||||
|
"ntD", "jqE", "bmC", "jqC", "bmB", "jqB", "Dlg", "lsr", "bng", "Dla", "jrg", "bna", "DlD",
|
||||||
|
"jra", "bnD", "jrD", "Bkr", "Dlr", "bnr", "jrr", "rtc", "vwq", "rtE", "vwn", "rtC", "rtB",
|
||||||
|
"blc", "nsq", "jnc", "blE", "nsn", "jnE", "rtn", "jnC", "blB", "jnB", "Dkq", "blq", "Dkn",
|
||||||
|
"jnq", "bln", "jnn", "rso", "vwf", "rsm", "rsl", "bko", "nsf", "jlo", "bkm", "jlm", "bkl",
|
||||||
|
"jll", "Dkf", "bkv", "jlv", "rse", "rsd", "bke", "jku", "bkd", "jkt", "Aey", "Aej", "Auw",
|
||||||
|
"khj", "Aui", "Aub", "Adj", "Avj", "Bus", "kxi", "Bug", "kxb", "Bua", "BuD", "Ati", "Bvi",
|
||||||
|
"Atb", "Bvb", "Duk", "lxg", "syr", "Duc", "lxa", "DuE", "lxD", "DuC", "DuB", "Btg", "kwr",
|
||||||
|
"Dvg", "lxr", "Dva", "BtD", "DvD", "Asr", "Btr", "Dvr", "nxc", "tyq", "nxE", "tyn", "nxC",
|
||||||
|
"nxB", "Dtc", "lwq", "bvc", "nxq", "lwn", "bvE", "DtC", "bvC", "DtB", "bvB", "Bsq", "Dtq",
|
||||||
|
"Bsn", "bvq", "Dtn", "bvn", "vyo", "xzf", "vym", "vyl", "nwo", "tyf", "rxo", "nwm", "rxm",
|
||||||
|
"nwl", "rxl", "Dso", "lwf", "bto", "Dsm", "jvo", "btm", "Dsl", "jvm", "btl", "jvl", "Bsf",
|
||||||
|
"Dsv", "btv", "jvv", "vye", "vyd", "nwe", "rwu", "nwd", "rwt", "Dse", "bsu", "Dsd", "jtu",
|
||||||
|
"bst", "jtt", "vyF", "nwF", "rwh", "DsF", "bsh", "jsx", "Ahi", "Ahb", "Axg", "kir", "Axa",
|
||||||
|
"AxD", "Agr", "Axr", "Bxc", "kyq", "BxE", "kyn", "BxC", "BxB", "Awq", "Bxq", "Awn", "Bxn",
|
||||||
|
"lyo", "szf", "lym", "lyl", "Bwo", "kyf", "Dxo", "lyv", "Dxm", "Bwl", "Dxl", "Awf", "Bwv",
|
||||||
|
"Dxv", "tze", "tzd", "lye", "nyu", "lyd", "nyt", "Bwe", "Dwu", "Bwd", "bxu", "Dwt", "bxt",
|
||||||
|
"tzF", "lyF", "nyh", "BwF", "Dwh", "bwx", "Aiq", "Ain", "Ayo", "kjf", "Aym", "Ayl", "Aif",
|
||||||
|
"Ayv", "kze", "kzd", "Aye", "Byu", "Ayd", "Byt", "szp"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *PDFttf[35] = {
|
||||||
|
/* converts values into bar patterns - replacing Grand Zebu's true type font */
|
||||||
|
"00000", "00001", "00010", "00011", "00100", "00101", "00110", "00111",
|
||||||
|
"01000", "01001", "01010", "01011", "01100", "01101", "01110", "01111", "10000", "10001",
|
||||||
|
"10010", "10011", "10100", "10101", "10110", "10111", "11000", "11001", "11010",
|
||||||
|
"11011", "11100", "11101", "11110", "11111", "01", "1111111101010100", "11111101000101001"};
|
||||||
|
|
||||||
/* MicroPDF417 coefficients from ISO/IEC 24728:2006 Annex F */
|
/* MicroPDF417 coefficients from ISO/IEC 24728:2006 Annex F */
|
||||||
static const int Microcoeffs[344] = {
|
static const int Microcoeffs[344] = {
|
||||||
/* k = 7 */
|
/* k = 7 */
|
||||||
76, 925, 537, 597, 784, 691, 437,
|
76, 925, 537, 597, 784, 691, 437,
|
||||||
|
|
||||||
/* k = 8 */
|
/* k = 8 */
|
||||||
237, 308, 436, 284, 646, 653, 428, 379,
|
237, 308, 436, 284, 646, 653, 428, 379,
|
||||||
|
|
||||||
/* k = 9 */
|
/* k = 9 */
|
||||||
567, 527, 622, 257, 289, 362, 501, 441, 205,
|
567, 527, 622, 257, 289, 362, 501, 441, 205,
|
||||||
|
|
||||||
/* k = 10 */
|
/* k = 10 */
|
||||||
377, 457, 64, 244, 826, 841, 818, 691, 266, 612,
|
377, 457, 64, 244, 826, 841, 818, 691, 266, 612,
|
||||||
|
|
||||||
/* k = 11 */
|
/* k = 11 */
|
||||||
462, 45, 565, 708, 825, 213, 15, 68, 327, 602, 904,
|
462, 45, 565, 708, 825, 213, 15, 68, 327, 602, 904,
|
||||||
|
|
||||||
/* k = 12 */
|
/* k = 12 */
|
||||||
597, 864, 757, 201, 646, 684, 347, 127, 388, 7, 69, 851,
|
597, 864, 757, 201, 646, 684, 347, 127, 388, 7, 69, 851,
|
||||||
|
|
||||||
/* k = 13 */
|
/* k = 13 */
|
||||||
764, 713, 342, 384, 606, 583, 322, 592, 678, 204, 184, 394, 692,
|
764, 713, 342, 384, 606, 583, 322, 592, 678, 204, 184, 394, 692,
|
||||||
|
|
||||||
/* k = 14 */
|
/* k = 14 */
|
||||||
669, 677, 154, 187, 241, 286, 274, 354, 478, 915, 691, 833, 105, 215,
|
669, 677, 154, 187, 241, 286, 274, 354, 478, 915, 691, 833, 105, 215,
|
||||||
|
|
||||||
/* k = 15 */
|
/* k = 15 */
|
||||||
460, 829, 476, 109, 904, 664, 230, 5, 80, 74, 550, 575, 147, 868, 642,
|
460, 829, 476, 109, 904, 664, 230, 5, 80, 74, 550, 575, 147, 868, 642,
|
||||||
|
|
||||||
/* k = 16 */
|
/* k = 16 */
|
||||||
274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65,
|
274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65,
|
||||||
|
|
||||||
/* k = 18 */
|
/* k = 18 */
|
||||||
279, 577, 315, 624, 37, 855, 275, 739, 120, 297, 312, 202, 560, 321, 233, 756,
|
279, 577, 315, 624, 37, 855, 275, 739, 120, 297, 312, 202, 560, 321, 233, 756,
|
||||||
760, 573,
|
760, 573,
|
||||||
|
|
||||||
/* k = 21 */
|
/* k = 21 */
|
||||||
108, 519, 781, 534, 129, 425, 681, 553, 422, 716, 763, 693, 624, 610, 310, 691,
|
108, 519, 781, 534, 129, 425, 681, 553, 422, 716, 763, 693, 624, 610, 310, 691,
|
||||||
347, 165, 193, 259, 568,
|
347, 165, 193, 259, 568,
|
||||||
|
|
||||||
/* k = 26 */
|
/* k = 26 */
|
||||||
443, 284, 887, 544, 788, 93, 477, 760, 331, 608, 269, 121, 159, 830, 446, 893,
|
443, 284, 887, 544, 788, 93, 477, 760, 331, 608, 269, 121, 159, 830, 446, 893,
|
||||||
699, 245, 441, 454, 325, 858, 131, 847, 764, 169,
|
699, 245, 441, 454, 325, 858, 131, 847, 764, 169,
|
||||||
|
|
||||||
/* k = 32 */
|
/* k = 32 */
|
||||||
361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517,
|
361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517,
|
||||||
273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410,
|
273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410,
|
||||||
|
|
||||||
/* k = 38 */
|
/* k = 38 */
|
||||||
234, 228, 438, 848, 133, 703, 529, 721, 788, 322, 280, 159, 738, 586, 388, 684,
|
234, 228, 438, 848, 133, 703, 529, 721, 788, 322, 280, 159, 738, 586, 388, 684,
|
||||||
445, 680, 245, 595, 614, 233, 812, 32, 284, 658, 745, 229, 95, 689, 920, 771,
|
445, 680, 245, 595, 614, 233, 812, 32, 284, 658, 745, 229, 95, 689, 920, 771,
|
||||||
554, 289, 231, 125, 117, 518,
|
554, 289, 231, 125, 117, 518,
|
||||||
|
|
||||||
/* k = 44 */
|
/* k = 44 */
|
||||||
476, 36, 659, 848, 678, 64, 764, 840, 157, 915, 470, 876, 109, 25, 632, 405,
|
476, 36, 659, 848, 678, 64, 764, 840, 157, 915, 470, 876, 109, 25, 632, 405,
|
||||||
417, 436, 714, 60, 376, 97, 413, 706, 446, 21, 3, 773, 569, 267, 272, 213,
|
417, 436, 714, 60, 376, 97, 413, 706, 446, 21, 3, 773, 569, 267, 272, 213,
|
||||||
31, 560, 231, 758, 103, 271, 572, 436, 339, 730, 82, 285,
|
31, 560, 231, 758, 103, 271, 572, 436, 339, 730, 82, 285,
|
||||||
|
|
||||||
/* k = 50 */
|
/* k = 50 */
|
||||||
923, 797, 576, 875, 156, 706, 63, 81, 257, 874, 411, 416, 778, 50, 205, 303,
|
923, 797, 576, 875, 156, 706, 63, 81, 257, 874, 411, 416, 778, 50, 205, 303,
|
||||||
188, 535, 909, 155, 637, 230, 534, 96, 575, 102, 264, 233, 919, 593, 865, 26,
|
188, 535, 909, 155, 637, 230, 534, 96, 575, 102, 264, 233, 919, 593, 865, 26,
|
||||||
579, 623, 766, 146, 10, 739, 246, 127, 71, 244, 211, 477, 920, 876, 427, 820,
|
579, 623, 766, 146, 10, 739, 246, 127, 71, 244, 211, 477, 920, 876, 427, 820,
|
||||||
718, 435 };
|
718, 435
|
||||||
|
};
|
||||||
|
|
||||||
/* rows, columns, error codewords, k-offset of valid MicroPDF417 sizes from ISO/IEC 24728:2006 */
|
/* rows, columns, error codewords, k-offset of valid MicroPDF417 sizes from ISO/IEC 24728:2006 */
|
||||||
static const int MicroVariants[170] =
|
static const int MicroVariants[170] ={
|
||||||
{ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||||
11, 14, 17, 20, 24, 28, 8, 11, 14, 17, 20, 23, 26, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, 4, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44,
|
11, 14, 17, 20, 24, 28, 8, 11, 14, 17, 20, 23, 26, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, 4, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44,
|
||||||
7, 7, 7, 8, 8, 8, 8, 9, 9, 10, 11, 13, 15, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, 8, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50,
|
7, 7, 7, 8, 8, 8, 8, 9, 9, 10, 11, 13, 15, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, 8, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50,
|
||||||
0, 0, 0, 7, 7, 7, 7, 15, 15, 24, 34, 57, 84, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294, 7, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294 };
|
0, 0, 0, 7, 7, 7, 7, 15, 15, 24, 34, 57, 84, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294, 7, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294
|
||||||
|
};
|
||||||
/* rows, columns, error codewords, k-offset */
|
/* rows, columns, error codewords, k-offset */
|
||||||
|
|
||||||
/* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24728:2006 tables 10, 11 and 12 */
|
/* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24728:2006 tables 10, 11 and 12 */
|
||||||
static const int RAPTable[136] =
|
static const int RAPTable[136] ={
|
||||||
{ 1, 8, 36, 19, 9, 25, 1, 1, 8, 36, 19, 9, 27, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, 47, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1,
|
1, 8, 36, 19, 9, 25, 1, 1, 8, 36, 19, 9, 27, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, 47, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, 19, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, 19, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25,
|
||||||
9, 8, 36, 19, 17, 33, 1, 9, 8, 36, 19, 17, 35, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, 43, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49,
|
9, 8, 36, 19, 17, 33, 1, 9, 8, 36, 19, 17, 35, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, 43, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49,
|
||||||
0, 3, 6, 0, 6, 0, 0, 0, 3, 6, 0, 6, 6, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0, 3, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0 };
|
0, 3, 6, 0, 6, 0, 0, 0, 3, 6, 0, 6, 6, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0, 3, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0
|
||||||
|
};
|
||||||
|
|
||||||
/* Left and Right Row Address Pattern from Table 2 */
|
/* Left and Right Row Address Pattern from Table 2 */
|
||||||
static const char *RAPLR[53] = {"", "221311", "311311", "312211", "222211", "213211", "214111", "223111",
|
static const char *RAPLR[53] = {
|
||||||
"313111", "322111", "412111", "421111", "331111", "241111", "232111", "231211", "321211",
|
"", "221311", "311311", "312211", "222211", "213211", "214111", "223111",
|
||||||
"411211", "411121", "411112", "321112", "312112", "311212", "311221", "311131", "311122",
|
"313111", "322111", "412111", "421111", "331111", "241111", "232111", "231211", "321211",
|
||||||
"311113", "221113", "221122", "221131", "221221", "222121", "312121", "321121", "231121",
|
"411211", "411121", "411112", "321112", "312112", "311212", "311221", "311131", "311122",
|
||||||
"231112", "222112", "213112", "212212", "212221", "212131", "212122", "212113", "211213",
|
"311113", "221113", "221122", "221131", "221221", "222121", "312121", "321121", "231121",
|
||||||
"211123", "211132", "211141", "211231", "211222", "211312", "211321", "211411", "212311" };
|
"231112", "222112", "213112", "212212", "212221", "212131", "212122", "212113", "211213",
|
||||||
|
"211123", "211132", "211141", "211231", "211222", "211312", "211321", "211411", "212311"
|
||||||
|
};
|
||||||
|
|
||||||
/* Centre Row Address Pattern from Table 2 */
|
/* Centre Row Address Pattern from Table 2 */
|
||||||
static const char *RAPC[53] = {"", "112231", "121231", "122131", "131131", "131221", "132121", "141121",
|
static const char *RAPC[53] = {
|
||||||
"141211", "142111", "133111", "132211", "131311", "122311", "123211", "124111", "115111",
|
"", "112231", "121231", "122131", "131131", "131221", "132121", "141121",
|
||||||
"114211", "114121", "123121", "123112", "122212", "122221", "121321", "121411", "112411",
|
"141211", "142111", "133111", "132211", "131311", "122311", "123211", "124111", "115111",
|
||||||
"113311", "113221", "113212", "113122", "122122", "131122", "131113", "122113", "113113",
|
"114211", "114121", "123121", "123112", "122212", "122221", "121321", "121411", "112411",
|
||||||
"112213", "112222", "112312", "112321", "111421", "111331", "111322", "111232", "111223",
|
"113311", "113221", "113212", "113122", "122122", "131122", "131113", "122113", "113113",
|
||||||
"111133", "111124", "111214", "112114", "121114", "121123", "121132", "112132", "112141" };
|
"112213", "112222", "112312", "112321", "111421", "111331", "111322", "111232", "111223",
|
||||||
|
"111133", "111124", "111214", "112114", "121114", "121123", "121132", "112132", "112141"
|
||||||
|
};
|
||||||
|
|
||||||
void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length, int block);
|
void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length, int block);
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
|
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
@ -28,7 +28,7 @@
|
|||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -37,472 +37,457 @@
|
|||||||
|
|
||||||
|
|
||||||
#define SSET "0123456789ABCDEF"
|
#define SSET "0123456789ABCDEF"
|
||||||
static const char *PlessTable[16] = {"13131313", "31131313", "13311313", "31311313", "13133113", "31133113",
|
static const char *PlessTable[16] = {
|
||||||
"13313113", "31313113", "13131331", "31131331", "13311331", "31311331", "13133131",
|
"13131313", "31131313", "13311313", "31311313", "13133113", "31133113",
|
||||||
"31133131", "13313131", "31313131"};
|
"13313113", "31313113", "13131331", "31131331", "13311331", "31311331", "13133131",
|
||||||
|
"31133131", "13313131", "31313131"
|
||||||
|
};
|
||||||
|
|
||||||
static const char *MSITable[10] = {"12121212", "12121221", "12122112", "12122121", "12211212", "12211221",
|
static const char *MSITable[10] = {
|
||||||
"12212112", "12212121", "21121212", "21121221"};
|
"12121212", "12121221", "12122112", "12122121", "12211212", "12211221",
|
||||||
|
"12212112", "12212121", "21121212", "21121221"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Not MSI/Plessey but the older Plessey standard */
|
||||||
|
int plessey(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
|
|
||||||
int plessey(struct zint_symbol *symbol, unsigned char source[], int length)
|
unsigned int i, check;
|
||||||
{ /* Not MSI/Plessey but the older Plessey standard */
|
unsigned char *checkptr;
|
||||||
|
static const char grid[9] = {1, 1, 1, 1, 0, 1, 0, 0, 1};
|
||||||
|
char dest[1024]; /* 8 + 65 * 8 + 8 * 2 + 9 + 1 ~ 1024 */
|
||||||
|
int error_number;
|
||||||
|
|
||||||
unsigned int i, check;
|
error_number = 0;
|
||||||
unsigned char *checkptr;
|
|
||||||
static const char grid[9] = {1,1,1,1,0,1,0,0,1};
|
|
||||||
char dest[1024]; /* 8 + 65 * 8 + 8 * 2 + 9 + 1 ~ 1024 */
|
|
||||||
int error_number;
|
|
||||||
|
|
||||||
error_number = 0;
|
if (length > 65) {
|
||||||
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
|
return ZINT_ERROR_TOO_LONG;
|
||||||
|
}
|
||||||
|
error_number = is_sane(SSET, source, length);
|
||||||
|
if (error_number == ZINT_ERROR_INVALID_DATA) {
|
||||||
|
strcpy(symbol->errtxt, "Invalid characters in data");
|
||||||
|
return error_number;
|
||||||
|
}
|
||||||
|
checkptr = (unsigned char *) calloc(1, length * 4 + 8);
|
||||||
|
|
||||||
if(length > 65) {
|
/* Start character */
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(dest, "31311331");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
|
||||||
}
|
|
||||||
error_number = is_sane(SSET, source, length);
|
|
||||||
if(error_number == ZINT_ERROR_INVALID_DATA) {
|
|
||||||
strcpy(symbol->errtxt, "Invalid characters in data");
|
|
||||||
return error_number;
|
|
||||||
}
|
|
||||||
checkptr = (unsigned char *)calloc (1, length * 4 + 8);
|
|
||||||
|
|
||||||
/* Start character */
|
/* Data area */
|
||||||
strcpy(dest, "31311331");
|
for (i = 0; i < length; i++) {
|
||||||
|
check = posn(SSET, source[i]);
|
||||||
|
lookup(SSET, PlessTable, source[i], dest);
|
||||||
|
checkptr[4 * i] = check & 1;
|
||||||
|
checkptr[4 * i + 1] = (check >> 1) & 1;
|
||||||
|
checkptr[4 * i + 2] = (check >> 2) & 1;
|
||||||
|
checkptr[4 * i + 3] = (check >> 3) & 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Data area */
|
/* CRC check digit code adapted from code by Leonid A. Broukhis
|
||||||
for(i = 0; i < length; i++)
|
used in GNU Barcode */
|
||||||
{
|
|
||||||
check = posn(SSET, source[i]);
|
|
||||||
lookup(SSET, PlessTable, source[i], dest);
|
|
||||||
checkptr[4*i] = check & 1;
|
|
||||||
checkptr[4*i+1] = (check >> 1) & 1;
|
|
||||||
checkptr[4*i+2] = (check >> 2) & 1;
|
|
||||||
checkptr[4*i+3] = (check >> 3) & 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* CRC check digit code adapted from code by Leonid A. Broukhis
|
for (i = 0; i < (4 * length); i++) {
|
||||||
used in GNU Barcode */
|
int j;
|
||||||
|
if (checkptr[i])
|
||||||
|
for (j = 0; j < 9; j++)
|
||||||
|
checkptr[i + j] ^= grid[j];
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < (4 * length); i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
int j;
|
switch (checkptr[length * 4 + i]) {
|
||||||
if (checkptr[i])
|
case 0: concat(dest, "13");
|
||||||
for (j = 0; j < 9; j++)
|
break;
|
||||||
checkptr[i+j] ^= grid[j];
|
case 1: concat(dest, "31");
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
/* Stop character */
|
||||||
switch(checkptr[length * 4 + i])
|
concat(dest, "331311313");
|
||||||
{
|
|
||||||
case 0: concat(dest, "13"); break;
|
|
||||||
case 1: concat(dest, "31"); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Stop character */
|
expand(symbol, dest);
|
||||||
concat(dest, "331311313");
|
ustrcpy(symbol->text, source);
|
||||||
|
free(checkptr);
|
||||||
expand(symbol, dest);
|
return error_number;
|
||||||
ustrcpy(symbol->text, source);
|
|
||||||
free(checkptr);
|
|
||||||
return error_number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int msi_plessey(struct zint_symbol *symbol, unsigned char source[], int length)
|
/* Plain MSI Plessey - does not calculate any check character */
|
||||||
{ /* Plain MSI Plessey - does not calculate any check character */
|
int msi_plessey(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
char dest[512]; /* 2 + 55 * 8 + 3 + 1 ~ 512 */
|
char dest[512]; /* 2 + 55 * 8 + 3 + 1 ~ 512 */
|
||||||
|
|
||||||
if(length > 55) {
|
if (length > 55) {
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
return ZINT_ERROR_TOO_LONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start character */
|
/* start character */
|
||||||
strcpy(dest, "21");
|
strcpy(dest, "21");
|
||||||
|
|
||||||
for(i = 0; i < length; i++)
|
for (i = 0; i < length; i++) {
|
||||||
{
|
lookup(NEON, MSITable, source[i], dest);
|
||||||
lookup(NEON, MSITable, source[i], dest);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Stop character */
|
/* Stop character */
|
||||||
concat (dest, "121");
|
concat(dest, "121");
|
||||||
|
|
||||||
expand(symbol, dest);
|
expand(symbol, dest);
|
||||||
ustrcpy(symbol->text, source);
|
ustrcpy(symbol->text, source);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], int length)
|
/* MSI Plessey with Modulo 10 check digit - algorithm from Barcode Island
|
||||||
{ /* MSI Plessey with Modulo 10 check digit - algorithm from Barcode Island
|
* http://www.barcodeisland.com/ */
|
||||||
http://www.barcodeisland.com/ */
|
int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
|
|
||||||
|
|
||||||
unsigned long i, wright, dau, pedwar, pump, n;
|
unsigned long i, wright, dau, pedwar, pump, n;
|
||||||
char un[200], tri[32];
|
char un[200], tri[32];
|
||||||
int error_number, h;
|
int error_number, h;
|
||||||
char dest[1000];
|
char dest[1000];
|
||||||
|
|
||||||
error_number = 0;
|
error_number = 0;
|
||||||
|
|
||||||
if(length > 18) {
|
if (length > 18) {
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
return ZINT_ERROR_TOO_LONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start character */
|
/* start character */
|
||||||
strcpy(dest, "21");
|
strcpy(dest, "21");
|
||||||
|
|
||||||
/* draw data section */
|
/* draw data section */
|
||||||
for(i = 0; i < length; i++)
|
for (i = 0; i < length; i++) {
|
||||||
{
|
lookup(NEON, MSITable, source[i], dest);
|
||||||
lookup(NEON, MSITable, source[i], dest);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* calculate check digit */
|
/* calculate check digit */
|
||||||
wright = 0;
|
wright = 0;
|
||||||
n = !(length & 1);
|
n = !(length & 1);
|
||||||
for(i = n; i < length; i += 2)
|
for (i = n; i < length; i += 2) {
|
||||||
{
|
un[wright++] = source[i];
|
||||||
un[wright++] = source[i];
|
}
|
||||||
}
|
un[wright] = '\0';
|
||||||
un[wright] = '\0';
|
|
||||||
|
|
||||||
dau = strtoul(un, NULL, 10);
|
dau = strtoul(un, NULL, 10);
|
||||||
dau *= 2;
|
dau *= 2;
|
||||||
|
|
||||||
sprintf(tri, "%ld", dau);
|
sprintf(tri, "%ld", dau);
|
||||||
|
|
||||||
pedwar = 0;
|
pedwar = 0;
|
||||||
h = strlen(tri);
|
h = strlen(tri);
|
||||||
for(i = 0; i < h; i++)
|
for (i = 0; i < h; i++) {
|
||||||
{
|
pedwar += ctoi(tri[i]);
|
||||||
pedwar += ctoi(tri[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
n = length & 1;
|
n = length & 1;
|
||||||
for(i = n; i < length; i+=2)
|
for (i = n; i < length; i += 2) {
|
||||||
{
|
pedwar += ctoi(source[i]);
|
||||||
pedwar += ctoi(source[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pump = (10 - pedwar % 10);
|
pump = (10 - pedwar % 10);
|
||||||
if(pump == 10)
|
if (pump == 10) {
|
||||||
{
|
pump = 0;
|
||||||
pump = 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* draw check digit */
|
/* draw check digit */
|
||||||
lookup(NEON, MSITable, itoc(pump), dest);
|
lookup(NEON, MSITable, itoc(pump), dest);
|
||||||
|
|
||||||
/* Stop character */
|
/* Stop character */
|
||||||
concat (dest, "121");
|
concat(dest, "121");
|
||||||
expand(symbol, dest);
|
expand(symbol, dest);
|
||||||
|
|
||||||
ustrcpy(symbol->text, source);
|
ustrcpy(symbol->text, source);
|
||||||
symbol->text[length] = itoc(pump);
|
symbol->text[length] = itoc(pump);
|
||||||
symbol->text[length + 1] = '\0';
|
symbol->text[length + 1] = '\0';
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len)
|
/* MSI Plessey with two Modulo 10 check digits - algorithm from
|
||||||
{ /* MSI Plessey with two Modulo 10 check digits - algorithm from
|
* Barcode Island http://www.barcodeisland.com/ */
|
||||||
Barcode Island http://www.barcodeisland.com/ */
|
int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) {
|
||||||
|
|
||||||
|
|
||||||
unsigned long i, n, wright, dau, pedwar, pump, chwech;
|
unsigned long i, n, wright, dau, pedwar, pump, chwech;
|
||||||
char un[16], tri[32];
|
char un[16], tri[32];
|
||||||
int error_number, h;
|
int error_number, h;
|
||||||
char dest[1000];
|
char dest[1000];
|
||||||
|
|
||||||
error_number = 0;
|
error_number = 0;
|
||||||
|
|
||||||
if(src_len > 18) { /* No Entry Stack Smashers! limit because of str->number conversion*/
|
if (src_len > 18) {
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
/* No Entry Stack Smashers! limit because of str->number conversion*/
|
||||||
return ZINT_ERROR_TOO_LONG;
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
}
|
return ZINT_ERROR_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
/* start character */
|
/* start character */
|
||||||
strcpy(dest, "21");
|
strcpy(dest, "21");
|
||||||
|
|
||||||
/* draw data section */
|
/* draw data section */
|
||||||
for(i = 0; i < src_len; i++)
|
for (i = 0; i < src_len; i++) {
|
||||||
{
|
lookup(NEON, MSITable, source[i], dest);
|
||||||
lookup(NEON, MSITable, source[i], dest);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* calculate first check digit */
|
/* calculate first check digit */
|
||||||
wright = 0;
|
wright = 0;
|
||||||
|
|
||||||
n = !(src_len & 1);
|
n = !(src_len & 1);
|
||||||
for(i = n; i < src_len; i += 2)
|
for (i = n; i < src_len; i += 2) {
|
||||||
{
|
un[wright++] = source[i];
|
||||||
un[wright++] = source[i];
|
}
|
||||||
}
|
un[wright] = '\0';
|
||||||
un[wright] = '\0';
|
|
||||||
|
|
||||||
dau = strtoul(un, NULL, 10);
|
dau = strtoul(un, NULL, 10);
|
||||||
dau *= 2;
|
dau *= 2;
|
||||||
|
|
||||||
sprintf(tri, "%ld", dau);
|
sprintf(tri, "%ld", dau);
|
||||||
|
|
||||||
pedwar = 0;
|
pedwar = 0;
|
||||||
h = strlen(tri);
|
h = strlen(tri);
|
||||||
for(i = 0; i < h; i++)
|
for (i = 0; i < h; i++) {
|
||||||
{
|
pedwar += ctoi(tri[i]);
|
||||||
pedwar += ctoi(tri[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
n = src_len & 1;
|
n = src_len & 1;
|
||||||
for(i = n; i < src_len; i += 2)
|
for (i = n; i < src_len; i += 2) {
|
||||||
{
|
pedwar += ctoi(source[i]);
|
||||||
pedwar += ctoi(source[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pump = 10 - pedwar % 10;
|
pump = 10 - pedwar % 10;
|
||||||
if(pump == 10)
|
if (pump == 10) {
|
||||||
{
|
pump = 0;
|
||||||
pump = 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* calculate second check digit */
|
/* calculate second check digit */
|
||||||
wright = 0;
|
wright = 0;
|
||||||
n = src_len & 1;
|
n = src_len & 1;
|
||||||
for(i = n; i < src_len; i += 2)
|
for (i = n; i < src_len; i += 2) {
|
||||||
{
|
un[wright++] = source[i];
|
||||||
un[wright++] = source[i];
|
}
|
||||||
}
|
un[wright++] = itoc(pump);
|
||||||
un[wright++] = itoc(pump);
|
un[wright] = '\0';
|
||||||
un[wright] = '\0';
|
|
||||||
|
|
||||||
dau = strtoul(un, NULL, 10);
|
dau = strtoul(un, NULL, 10);
|
||||||
dau *= 2;
|
dau *= 2;
|
||||||
|
|
||||||
sprintf(tri, "%ld", dau);
|
sprintf(tri, "%ld", dau);
|
||||||
|
|
||||||
pedwar = 0;
|
pedwar = 0;
|
||||||
h = strlen(tri);
|
h = strlen(tri);
|
||||||
for(i = 0; i < h; i++)
|
for (i = 0; i < h; i++) {
|
||||||
{
|
pedwar += ctoi(tri[i]);
|
||||||
pedwar += ctoi(tri[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
i = !(src_len & 1);
|
i = !(src_len & 1);
|
||||||
for(; i < src_len; i += 2)
|
for (; i < src_len; i += 2) {
|
||||||
{
|
pedwar += ctoi(source[i]);
|
||||||
pedwar += ctoi(source[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
chwech = 10 - pedwar % 10;
|
chwech = 10 - pedwar % 10;
|
||||||
if(chwech == 10)
|
if (chwech == 10) {
|
||||||
{
|
chwech = 0;
|
||||||
chwech = 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Draw check digits */
|
/* Draw check digits */
|
||||||
lookup(NEON, MSITable, itoc(pump), dest);
|
lookup(NEON, MSITable, itoc(pump), dest);
|
||||||
lookup(NEON, MSITable, itoc(chwech), dest);
|
lookup(NEON, MSITable, itoc(chwech), dest);
|
||||||
|
|
||||||
/* Stop character */
|
/* Stop character */
|
||||||
concat (dest, "121");
|
concat(dest, "121");
|
||||||
|
|
||||||
expand(symbol, dest);
|
expand(symbol, dest);
|
||||||
|
|
||||||
ustrcpy(symbol->text, source);
|
ustrcpy(symbol->text, source);
|
||||||
symbol->text[src_len] = itoc(pump);
|
symbol->text[src_len] = itoc(pump);
|
||||||
symbol->text[src_len + 1] = itoc(chwech);
|
symbol->text[src_len + 1] = itoc(chwech);
|
||||||
symbol->text[src_len + 2] = '\0';
|
symbol->text[src_len + 2] = '\0';
|
||||||
|
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Calculate a Modulo 11 check digit using the system discussed on Wikipedia -
|
||||||
|
see http://en.wikipedia.org/wiki/Talk:MSI_Barcode */
|
||||||
|
int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) {
|
||||||
|
/* uses the IBM weight system */
|
||||||
|
int i, weight, x, check;
|
||||||
|
int error_number;
|
||||||
|
char dest[1000];
|
||||||
|
|
||||||
int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len)
|
error_number = 0;
|
||||||
{
|
|
||||||
/* Calculate a Modulo 11 check digit using the system discussed on Wikipedia -
|
|
||||||
see http://en.wikipedia.org/wiki/Talk:MSI_Barcode */
|
|
||||||
/* uses the IBM weight system */
|
|
||||||
|
|
||||||
int i, weight, x, check;
|
if (src_len > 55) {
|
||||||
int error_number;
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
char dest[1000];
|
return ZINT_ERROR_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
error_number = 0;
|
/* start character */
|
||||||
|
strcpy(dest, "21");
|
||||||
|
|
||||||
if(src_len > 55) {
|
/* draw data section */
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
for (i = 0; i < src_len; i++) {
|
||||||
return ZINT_ERROR_TOO_LONG;
|
lookup(NEON, MSITable, source[i], dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start character */
|
/* calculate check digit */
|
||||||
strcpy(dest, "21");
|
x = 0;
|
||||||
|
weight = 2;
|
||||||
|
for (i = src_len - 1; i >= 0; i--) {
|
||||||
|
x += weight * ctoi(source[i]);
|
||||||
|
weight++;
|
||||||
|
if (weight > 7) {
|
||||||
|
weight = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* draw data section */
|
check = (11 - (x % 11)) % 11;
|
||||||
for(i = 0; i < src_len; i++)
|
if (check == 10) {
|
||||||
{
|
lookup(NEON, MSITable, '1', dest);
|
||||||
lookup(NEON, MSITable, source[i], dest);
|
lookup(NEON, MSITable, '0', dest);
|
||||||
}
|
} else {
|
||||||
|
lookup(NEON, MSITable, itoc(check), dest);
|
||||||
|
}
|
||||||
|
|
||||||
/* calculate check digit */
|
/* stop character */
|
||||||
x = 0;
|
concat(dest, "121");
|
||||||
weight = 2;
|
|
||||||
for(i = src_len - 1; i >= 0; i--) {
|
|
||||||
x += weight * ctoi(source[i]);
|
|
||||||
weight++;
|
|
||||||
if(weight > 7) {
|
|
||||||
weight = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
check = (11 - (x % 11)) % 11;
|
expand(symbol, dest);
|
||||||
if(check == 10) {
|
|
||||||
lookup(NEON, MSITable, '1', dest);
|
|
||||||
lookup(NEON, MSITable, '0', dest);
|
|
||||||
} else {
|
|
||||||
lookup(NEON, MSITable, itoc(check), dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* stop character */
|
ustrcpy(symbol->text, source);
|
||||||
concat (dest, "121");
|
if (check == 10) {
|
||||||
|
concat((char*) symbol->text, "10");
|
||||||
|
} else {
|
||||||
|
symbol->text[src_len] = itoc(check);
|
||||||
|
symbol->text[src_len + 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
expand(symbol, dest);
|
return error_number;
|
||||||
|
|
||||||
ustrcpy(symbol->text, source);
|
|
||||||
if(check == 10) {
|
|
||||||
concat((char* )symbol->text, "10");
|
|
||||||
} else {
|
|
||||||
symbol->text[src_len] = itoc(check);
|
|
||||||
symbol->text[src_len + 1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
return error_number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len)
|
/* Combining the Barcode Island and Wikipedia code
|
||||||
{
|
* Verified against http://www.bokai.com/BarcodeJSP/applet/BarcodeSampleApplet.htm */
|
||||||
/* Combining the Barcode Island and Wikipedia code */
|
int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) {
|
||||||
/* Verified against http://www.bokai.com/BarcodeJSP/applet/BarcodeSampleApplet.htm */
|
/* Weighted using the IBM system */
|
||||||
/* Weighted using the IBM system */
|
unsigned long i, weight, x, check, wright, dau, pedwar, pump, h;
|
||||||
|
long si;
|
||||||
|
char un[16], tri[16];
|
||||||
|
int error_number;
|
||||||
|
char dest[1000];
|
||||||
|
unsigned char temp[32];
|
||||||
|
unsigned int temp_len;
|
||||||
|
|
||||||
unsigned long i, weight, x, check, wright, dau, pedwar, pump, h;
|
error_number = 0;
|
||||||
long si;
|
|
||||||
char un[16], tri[16];
|
|
||||||
int error_number;
|
|
||||||
char dest[1000];
|
|
||||||
unsigned char temp[32];
|
|
||||||
unsigned int temp_len;
|
|
||||||
|
|
||||||
error_number = 0;
|
if (src_len > 18) {
|
||||||
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
|
return ZINT_ERROR_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
if(src_len > 18) {
|
/* start character */
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(dest, "21");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* start character */
|
/* draw data section */
|
||||||
strcpy(dest, "21");
|
for (i = 0; i < src_len; i++) {
|
||||||
|
lookup(NEON, MSITable, source[i], dest);
|
||||||
|
}
|
||||||
|
|
||||||
/* draw data section */
|
/* calculate first (mod 11) digit */
|
||||||
for(i = 0; i < src_len; i++)
|
x = 0;
|
||||||
{
|
weight = 2;
|
||||||
lookup(NEON, MSITable, source[i], dest);
|
for (si = src_len - 1; si >= 0; si--) {
|
||||||
}
|
x += weight * ctoi(source[si]);
|
||||||
|
weight++;
|
||||||
|
if (weight > 7) {
|
||||||
|
weight = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* calculate first (mod 11) digit */
|
check = (11 - (x % 11)) % 11;
|
||||||
x = 0;
|
ustrcpy(temp, source);
|
||||||
weight = 2;
|
temp_len = src_len;
|
||||||
for(si = src_len - 1; si >= 0; si--) {
|
if (check == 10) {
|
||||||
x += weight * ctoi(source[si]);
|
lookup(NEON, MSITable, '1', dest);
|
||||||
weight++;
|
lookup(NEON, MSITable, '0', dest);
|
||||||
if(weight > 7) {
|
uconcat(temp, (unsigned char *) "10");
|
||||||
weight = 2;
|
temp_len += 2;
|
||||||
}
|
} else {
|
||||||
}
|
lookup(NEON, MSITable, itoc(check), dest);
|
||||||
|
temp[temp_len++] = itoc(check);
|
||||||
|
temp[temp_len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
check = (11 - (x % 11)) % 11;
|
/* calculate second (mod 10) check digit */
|
||||||
ustrcpy(temp, source);
|
wright = 0;
|
||||||
temp_len = src_len;
|
i = !(temp_len & 1);
|
||||||
if(check == 10) {
|
for (; i < temp_len; i += 2) {
|
||||||
lookup(NEON, MSITable, '1', dest);
|
un[wright++] = temp[i];
|
||||||
lookup(NEON, MSITable, '0', dest);
|
}
|
||||||
uconcat(temp, (unsigned char *)"10");
|
un[wright] = '\0';
|
||||||
temp_len += 2;
|
|
||||||
} else {
|
|
||||||
lookup(NEON, MSITable, itoc(check), dest);
|
|
||||||
temp[temp_len++] = itoc(check);
|
|
||||||
temp[temp_len] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/* calculate second (mod 10) check digit */
|
dau = strtoul(un, NULL, 10);
|
||||||
wright = 0;
|
dau *= 2;
|
||||||
i = !(temp_len & 1);
|
|
||||||
for(; i < temp_len; i += 2)
|
|
||||||
{
|
|
||||||
un[wright++] = temp[i];
|
|
||||||
}
|
|
||||||
un[wright] = '\0';
|
|
||||||
|
|
||||||
dau = strtoul(un, NULL, 10);
|
sprintf(tri, "%ld", dau);
|
||||||
dau *= 2;
|
|
||||||
|
|
||||||
sprintf(tri, "%ld", dau);
|
pedwar = 0;
|
||||||
|
h = strlen(tri);
|
||||||
|
for (i = 0; i < h; i++) {
|
||||||
|
pedwar += ctoi(tri[i]);
|
||||||
|
}
|
||||||
|
|
||||||
pedwar = 0;
|
i = temp_len & 1;
|
||||||
h = strlen(tri);
|
for (; i < temp_len; i += 2) {
|
||||||
for(i = 0; i < h; i++)
|
pedwar += ctoi(temp[i]);
|
||||||
{
|
}
|
||||||
pedwar += ctoi(tri[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
i = temp_len & 1;
|
pump = 10 - pedwar % 10;
|
||||||
for(; i < temp_len; i+=2)
|
if (pump == 10) {
|
||||||
{
|
pump = 0;
|
||||||
pedwar += ctoi(temp[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pump = 10 - pedwar % 10;
|
/* draw check digit */
|
||||||
if(pump == 10)
|
lookup(NEON, MSITable, itoc(pump), dest);
|
||||||
{
|
|
||||||
pump = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* draw check digit */
|
/* stop character */
|
||||||
lookup(NEON, MSITable, itoc(pump), dest);
|
concat(dest, "121");
|
||||||
|
expand(symbol, dest);
|
||||||
|
|
||||||
/* stop character */
|
temp[temp_len++] = itoc(pump);
|
||||||
concat (dest, "121");
|
temp[temp_len] = '\0';
|
||||||
expand(symbol, dest);
|
|
||||||
|
|
||||||
temp[temp_len++] = itoc(pump);
|
|
||||||
temp[temp_len] = '\0';
|
|
||||||
|
|
||||||
|
|
||||||
ustrcpy(symbol->text, temp);
|
ustrcpy(symbol->text, temp);
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) {
|
int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) {
|
||||||
int error_number;
|
int error_number;
|
||||||
|
|
||||||
error_number = is_sane(NEON, source, length);
|
error_number = is_sane(NEON, source, length);
|
||||||
if(error_number != 0) {
|
if (error_number != 0) {
|
||||||
strcpy(symbol->errtxt, "Invalid characters in input data");
|
strcpy(symbol->errtxt, "Invalid characters in input data");
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if((symbol->option_2 < 0) || (symbol->option_2 > 4)) {
|
if ((symbol->option_2 < 0) || (symbol->option_2 > 4)) {
|
||||||
symbol->option_2 = 0;
|
symbol->option_2 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(symbol->option_2) {
|
switch (symbol->option_2) {
|
||||||
case 0: error_number = msi_plessey(symbol, source, length); break;
|
case 0: error_number = msi_plessey(symbol, source, length);
|
||||||
case 1: error_number = msi_plessey_mod10(symbol, source, length); break;
|
break;
|
||||||
case 2: error_number = msi_plessey_mod1010(symbol, source, length); break;
|
case 1: error_number = msi_plessey_mod10(symbol, source, length);
|
||||||
case 3: error_number = msi_plessey_mod11(symbol, source, length); break;
|
break;
|
||||||
case 4: error_number = msi_plessey_mod1110(symbol, source, length); break;
|
case 2: error_number = msi_plessey_mod1010(symbol, source, length);
|
||||||
}
|
break;
|
||||||
|
case 3: error_number = msi_plessey_mod11(symbol, source, length);
|
||||||
|
break;
|
||||||
|
case 4: error_number = msi_plessey_mod1110(symbol, source, length);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
1853
backend/png.c
1853
backend/png.c
File diff suppressed because it is too large
Load Diff
954
backend/postal.c
954
backend/postal.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user