1
0
mirror of https://github.com/woo-j/zint.git synced 2024-12-24 05:33:56 +03:00

Code format and audit, part 3

Update copyright info, remove unused code, etc.
This commit is contained in:
Robin Stuart 2016-02-20 11:29:19 +00:00
parent 8a88ffdd7b
commit 660d8148bd
13 changed files with 14979 additions and 14423 deletions

View File

@ -2,7 +2,7 @@
/*
libzint - the open source barcode library
Copyright (C) 2009 Robin Stuart <robin@zint.org.uk>
Copyright (C) 2009-2016 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -28,7 +28,7 @@
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
SUCH DAMAGE.
*/
*/
#include <locale.h>
#include <string.h>
@ -38,12 +38,7 @@
#define SSET "0123456789ABCDEF"
/* This file has expanded quite a bit since version 1.5 in order to accomodate
the formatting rules for EAN and UPC symbols as set out in EN 797:1995 - the
down side of this support is that the code is now vertually unreadable! */
int ps_plot(struct zint_symbol *symbol)
{
int ps_plot(struct zint_symbol *symbol) {
int i, block_width, latch, r, this_row;
float textpos, large_bar_height, preset_height, row_height, row_posn;
FILE *feps;
@ -59,41 +54,41 @@ int ps_plot(struct zint_symbol *symbol)
int plot_text = 1;
const char *locale = NULL;
row_height=0;
row_height = 0;
textdone = 0;
main_width = symbol->width;
strcpy(addon, "");
comp_offset = 0;
addon_text_posn = 0.0;
if((symbol->output_options & BARCODE_STDOUT) != 0) {
if ((symbol->output_options & BARCODE_STDOUT) != 0) {
feps = stdout;
} else {
feps = fopen(symbol->outfile, "w");
}
if(feps == NULL) {
if (feps == NULL) {
strcpy(symbol->errtxt, "Could not open output file");
return ZINT_ERROR_FILE_ACCESS;
}
/* sort out colour options */
to_upper((unsigned char*)symbol->fgcolour);
to_upper((unsigned char*)symbol->bgcolour);
to_upper((unsigned char*) symbol->fgcolour);
to_upper((unsigned char*) symbol->bgcolour);
if(strlen(symbol->fgcolour) != 6) {
if (strlen(symbol->fgcolour) != 6) {
strcpy(symbol->errtxt, "Malformed foreground colour target");
return ZINT_ERROR_INVALID_OPTION;
}
if(strlen(symbol->bgcolour) != 6) {
if (strlen(symbol->bgcolour) != 6) {
strcpy(symbol->errtxt, "Malformed background colour target");
return ZINT_ERROR_INVALID_OPTION;
}
error_number = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour));
error_number = is_sane(SSET, (unsigned char*) symbol->fgcolour, strlen(symbol->fgcolour));
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Malformed foreground colour target");
return ZINT_ERROR_INVALID_OPTION;
}
error_number = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->bgcolour));
error_number = is_sane(SSET, (unsigned char*) symbol->bgcolour, strlen(symbol->bgcolour));
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Malformed background colour target");
return ZINT_ERROR_INVALID_OPTION;
@ -119,9 +114,9 @@ int ps_plot(struct zint_symbol *symbol)
large_bar_count = 0;
preset_height = 0.0;
for(i = 0; i < symbol->rows; i++) {
for (i = 0; i < symbol->rows; i++) {
preset_height += symbol->row_height[i];
if(symbol->row_height[i] == 0) {
if (symbol->row_height[i] == 0) {
large_bar_count++;
}
}
@ -131,18 +126,18 @@ int ps_plot(struct zint_symbol *symbol)
symbol->height = preset_height;
}
while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) {
while (!(module_is_set(symbol, symbol->rows - 1, comp_offset))) {
comp_offset++;
}
/* Certain symbols need whitespace otherwise characters get chopped off the sides */
if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC))
|| (symbol->symbology == BARCODE_ISBNX)) {
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 13: /* EAN 13 */
case 16:
case 19:
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
}
main_width = 96 + comp_offset;
@ -153,14 +148,14 @@ int ps_plot(struct zint_symbol *symbol)
}
if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) {
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
main_width = 96 + comp_offset;
}
}
if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) {
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
main_width = 51 + comp_offset;
}
@ -169,8 +164,8 @@ int ps_plot(struct zint_symbol *symbol)
latch = 0;
r = 0;
/* Isolate add-on text */
if(is_extendable(symbol->symbology)) {
for(i = 0; i < ustrlen(symbol->text); i++) {
if (is_extendable(symbol->symbology)) {
for (i = 0; i < ustrlen(symbol->text); i++) {
if (latch == 1) {
addon[r] = symbol->text[i];
r++;
@ -182,10 +177,10 @@ int ps_plot(struct zint_symbol *symbol)
}
addon[r] = '\0';
if((symbol->show_hrt == 0) || (ustrlen(symbol->text) == 0)) {
if ((symbol->show_hrt == 0) || (ustrlen(symbol->text) == 0)) {
plot_text = 0;
}
if(plot_text) {
if (plot_text) {
textoffset = 9;
} else {
textoffset = 0;
@ -196,13 +191,13 @@ int ps_plot(struct zint_symbol *symbol)
/* Start writing the header */
fprintf(feps, "%%!PS-Adobe-3.0 EPSF-3.0\n");
fprintf(feps, "%%%%Creator: Zint %s\n", ZINT_VERSION);
if(ustrlen(symbol->text) != 0) {
fprintf(feps, "%%%%Title: %s\n",symbol->text);
if (ustrlen(symbol->text) != 0) {
fprintf(feps, "%%%%Title: %s\n", symbol->text);
} else {
fprintf(feps, "%%%%Title: Zint Generated Symbol\n");
}
fprintf(feps, "%%%%Pages: 0\n");
if(symbol->symbology != BARCODE_MAXICODE) {
if (symbol->symbology != BARCODE_MAXICODE) {
fprintf(feps, "%%%%BoundingBox: 0 0 %d %d\n", roundup((symbol->width + xoffset + xoffset) * scaler), roundup((symbol->height + textoffset + yoffset + yoffset) * scaler));
} else {
fprintf(feps, "%%%%BoundingBox: 0 0 %d %d\n", roundup((74.0 + xoffset + xoffset) * scaler), roundup((72.0 + yoffset + yoffset) * scaler));
@ -224,13 +219,13 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_paper, green_paper, blue_paper);
fprintf(feps, "%.2f 0.00 TB 0.00 %.2f TR\n", (symbol->height + textoffset + yoffset + yoffset) * scaler, (symbol->width + xoffset + xoffset) * scaler);
if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) {
if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) {
default_text_posn = 0.5 * scaler;
} else {
default_text_posn = (symbol->border_width + 0.5) * scaler;
}
if(symbol->symbology == BARCODE_MAXICODE) {
if (symbol->symbology == BARCODE_MAXICODE) {
/* Maxicode uses hexagons */
float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy, mx, my;
@ -242,7 +237,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, textoffset * scaler, 0.0, (74.0 + xoffset + xoffset) * scaler);
fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, (textoffset + 72.0 + symbol->border_width) * scaler, 0.0, (74.0 + xoffset + xoffset) * scaler);
}
if((symbol->output_options & BARCODE_BOX) != 0) {
if ((symbol->output_options & BARCODE_BOX) != 0) {
/* side bars */
fprintf(feps, "TE\n");
fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
@ -256,9 +251,9 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TC\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 10.85 * scaler, (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 8.97 * scaler, (44.73 + xoffset) * scaler, (35.60 + yoffset) * scaler);
fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TC\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 7.10 * scaler, (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 5.22 * scaler, (40.98 + xoffset) * scaler, (35.60 + yoffset) * scaler);
fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TC\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 3.31 * scaler, (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 1.43 * scaler, (37.19 + xoffset) * scaler, (35.60 + yoffset) * scaler);
for(r = 0; r < symbol->rows; r++) {
for(i = 0; i < symbol->width; i++) {
if(module_is_set(symbol, r, i)) {
for (r = 0; r < symbol->rows; r++) {
for (i = 0; i < symbol->width; i++) {
if (module_is_set(symbol, r, i)) {
/* Dump a hexagon */
my = ((symbol->rows - r - 1)) * 2.135 + 1.43;
ay = my + 1.0 + yoffset;
@ -282,21 +277,21 @@ int ps_plot(struct zint_symbol *symbol)
}
}
if(symbol->symbology != BARCODE_MAXICODE) {
if (symbol->symbology != BARCODE_MAXICODE) {
/* everything else uses rectangles (or squares) */
/* Works from the bottom of the symbol up */
int addon_latch = 0;
for(r = 0; r < symbol->rows; r++) {
for (r = 0; r < symbol->rows; r++) {
this_row = symbol->rows - r - 1; /* invert r otherwise plots upside down */
if(symbol->row_height[this_row] == 0) {
if (symbol->row_height[this_row] == 0) {
row_height = large_bar_height;
} else {
row_height = symbol->row_height[this_row];
}
row_posn = 0;
for(i = 0; i < r; i++) {
if(symbol->row_height[symbol->rows - i - 1] == 0) {
for (i = 0; i < r; i++) {
if (symbol->row_height[symbol->rows - i - 1] == 0) {
row_posn += large_bar_height;
} else {
row_posn += symbol->row_height[symbol->rows - i - 1];
@ -308,7 +303,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
fprintf(feps, "%.2f %.2f ", row_height * scaler, row_posn * scaler);
i = 0;
if(module_is_set(symbol, this_row, 0)) {
if (module_is_set(symbol, this_row, 0)) {
latch = 1;
} else {
latch = 0;
@ -319,14 +314,14 @@ int ps_plot(struct zint_symbol *symbol)
do {
block_width++;
} while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i));
if((addon_latch == 0) && (r == 0) && (i > main_width)) {
if ((addon_latch == 0) && (r == 0) && (i > main_width)) {
fprintf(feps, "TE\n");
fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
fprintf(feps, "%.2f %.2f ", (row_height - 5.0) * scaler, (row_posn - 5.0) * scaler);
addon_text_posn = row_posn + row_height - 8.0;
addon_latch = 1;
}
if(latch == 1) {
if (latch == 1) {
/* a bar */
fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset) * scaler, block_width * scaler);
latch = 0;
@ -347,7 +342,7 @@ int ps_plot(struct zint_symbol *symbol)
if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) ||
(symbol->symbology == BARCODE_ISBNX)) {
/* guard bar extensions and text formatting for EAN8 and EAN13 */
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 8: /* EAN-8 */
case 11:
case 14:
@ -360,7 +355,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "TB %.2f %.2f TR\n", (34 + xoffset) * scaler, 1 * scaler);
fprintf(feps, "TB %.2f %.2f TR\n", (64 + xoffset) * scaler, 1 * scaler);
fprintf(feps, "TB %.2f %.2f TR\n", (66 + xoffset) * scaler, 1 * scaler);
for(i = 0; i < 4; i++) {
for (i = 0; i < 4; i++) {
textpart[i] = symbol->text[i];
}
textpart[4] = '\0';
@ -376,7 +371,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "-2 div 0 rmoveto\n");
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
for(i = 0; i < 4; i++) {
for (i = 0; i < 4; i++) {
textpart[i] = symbol->text[i + 4];
}
textpart[4] = '\0';
@ -391,7 +386,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
fprintf(feps, "matrix currentmatrix\n");
fprintf(feps, "/Helvetica findfont\n");
@ -445,7 +440,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "-2 div 0 rmoveto\n");
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[6] = '\0';
@ -459,7 +454,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "-2 div 0 rmoveto\n");
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 7];
}
textpart[6] = '\0';
@ -474,7 +469,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
fprintf(feps, "matrix currentmatrix\n");
fprintf(feps, "/Helvetica findfont\n");
@ -518,7 +513,7 @@ int ps_plot(struct zint_symbol *symbol)
do {
block_width++;
} while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
if(latch == 1) {
if (latch == 1) {
/* a bar */
fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset - comp_offset) * scaler, block_width * scaler);
latch = 0;
@ -537,7 +532,7 @@ int ps_plot(struct zint_symbol *symbol)
do {
block_width++;
} while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
if(latch == 1) {
if (latch == 1) {
/* a bar */
fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset - comp_offset) * scaler, block_width * scaler);
latch = 0;
@ -561,7 +556,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "-2 div 0 rmoveto\n");
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
for(i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[5] = '\0';
@ -575,7 +570,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "-2 div 0 rmoveto\n");
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
for(i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) {
textpart[i] = symbol->text[i + 6];
}
textpart[6] = '\0';
@ -602,7 +597,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
fprintf(feps, "matrix currentmatrix\n");
fprintf(feps, "/Helvetica findfont\n");
@ -655,7 +650,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "-2 div 0 rmoveto\n");
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[6] = '\0';
@ -682,7 +677,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, " (%s) show\n", textpart);
fprintf(feps, "setmatrix\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
fprintf(feps, "matrix currentmatrix\n");
fprintf(feps, "/Helvetica findfont\n");
@ -714,17 +709,17 @@ int ps_plot(struct zint_symbol *symbol)
xoffset -= comp_offset;
switch(symbol->symbology) {
switch (symbol->symbology) {
case BARCODE_MAXICODE:
/* Do nothing! (It's already been done) */
break;
default:
if((symbol->output_options & BARCODE_BIND) != 0) {
if((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
if ((symbol->output_options & BARCODE_BIND) != 0) {
if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
/* row binding */
fprintf(feps, "TE\n");
fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
for(r = 1; r < symbol->rows; r++) {
for (r = 1; r < symbol->rows; r++) {
fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", 2.0 * scaler, ((r * row_height) + textoffset + yoffset - 1) * scaler, xoffset * scaler, symbol->width * scaler);
}
}
@ -735,7 +730,7 @@ int ps_plot(struct zint_symbol *symbol)
fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, textoffset * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler);
fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, (textoffset + symbol->height + symbol->border_width) * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler);
}
if((symbol->output_options & BARCODE_BOX) != 0) {
if ((symbol->output_options & BARCODE_BOX) != 0) {
/* side bars */
fprintf(feps, "TE\n");
fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
@ -746,7 +741,7 @@ int ps_plot(struct zint_symbol *symbol)
}
/* Put the human readable text at the bottom */
if(plot_text && (textdone == 0)) {
if (plot_text && (textdone == 0)) {
fprintf(feps, "TE\n");
fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
fprintf(feps, "matrix currentmatrix\n");
@ -762,7 +757,7 @@ int ps_plot(struct zint_symbol *symbol)
}
fprintf(feps, "\nshowpage\n");
if(symbol->output_options & BARCODE_STDOUT) {
if (symbol->output_options & BARCODE_STDOUT) {
fflush(feps);
} else {
fclose(feps);
@ -773,4 +768,3 @@ int ps_plot(struct zint_symbol *symbol)
return error_number;
}

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
/*
libzint - the open source barcode library
Copyright (C) 2008 Robin Stuart <robin@zint.org.uk>
Copyright (C) 2008-2016 Robin Stuart <rstuart114@gmail.com>
Copyright (C) 2006 Kentaro Fukuchi <fukuchi@megaui.net>
Redistribution and use in source and binary forms, with or without
@ -29,7 +29,7 @@
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
SUCH DAMAGE.
*/
*/
#define LEVEL_L 1
#define LEVEL_M 2

View File

@ -27,7 +27,7 @@
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
SUCH DAMAGE.
*/
*/
// It is not written with high efficiency in mind, so is probably
// not suitable for real-time encoding. The aim was to keep it
@ -68,8 +68,7 @@ static int *logt = NULL, *alog = NULL, *rspoly = NULL;
// polynomial. e.g. for ECC200 (8-bit symbols) the polynomial is
// a**8 + a**5 + a**3 + a**2 + 1, which translates to 0x12d.
void rs_init_gf(int poly)
{
void rs_init_gf(int poly) {
int m, b, p, v;
// Find the top bit, and hence the symbol size
@ -82,8 +81,8 @@ void rs_init_gf(int poly)
// Calculate the log/alog tables
logmod = (1 << m) - 1;
logt = (int *)malloc(sizeof(int) * (logmod + 1));
alog = (int *)malloc(sizeof(int) * logmod);
logt = (int *) malloc(sizeof (int) * (logmod + 1));
alog = (int *) malloc(sizeof (int) * logmod);
for (p = 1, v = 0; v < logmod; v++) {
alog[v] = p;
@ -101,11 +100,10 @@ void rs_init_gf(int poly)
// (x + 2**i)*(x + 2**(i+1))*... [nsym terms]
// For ECC200, index is 1.
void rs_init_code(int nsym, int index)
{
void rs_init_code(int nsym, int index) {
int i, k;
rspoly = (int *)malloc(sizeof(int) * (nsym + 1));
rspoly = (int *) malloc(sizeof (int) * (nsym + 1));
rlen = nsym;
@ -122,8 +120,7 @@ void rs_init_code(int nsym, int index)
}
}
void rs_encode(int len, unsigned char *data, unsigned char *res)
{
void rs_encode(int len, unsigned char *data, unsigned char *res) {
int i, k, m;
for (i = 0; i < rlen; i++)
res[i] = 0;
@ -142,8 +139,8 @@ void rs_encode(int len, unsigned char *data, unsigned char *res)
}
}
void rs_encode_long(int len, unsigned int *data, unsigned int *res)
{ /* The same as above but for larger bitlengths - Aztec code compatible */
/* The same as above but for larger bitlengths - Aztec code compatible */
void rs_encode_long(int len, unsigned int *data, unsigned int *res) {
int i, k, m;
for (i = 0; i < rlen; i++)
res[i] = 0;
@ -162,8 +159,8 @@ void rs_encode_long(int len, unsigned int *data, unsigned int *res)
}
}
void rs_free(void)
{ /* Free memory */
/* Free memory */
void rs_free(void) {
free(logt);
free(alog);
free(rspoly);

View File

@ -34,15 +34,14 @@
#define __REEDSOL_H
#ifdef __cplusplus
extern "C"
{
extern "C" {
#endif /* __cplusplus */
extern void rs_init_gf(int poly);
extern void rs_init_code(int nsym, int index);
extern void rs_encode(int len, unsigned char *data, unsigned char *res);
extern void rs_encode_long(int len, unsigned int *data, unsigned int *res);
extern void rs_free(void);
extern void rs_init_gf(int poly);
extern void rs_init_code(int nsym, int index);
extern void rs_encode(int len, unsigned char *data, unsigned char *res);
extern void rs_encode_long(int len, unsigned int *data, unsigned int *res);
extern void rs_free(void);
#ifdef __cplusplus
}

View File

@ -8,7 +8,7 @@
/*
libzint - the open source barcode library
Copyright (C) 2009 Robin Stuart <robin@zint.org.uk>
Copyright (C) 2009-2016 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -34,7 +34,7 @@
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
SUCH DAMAGE.
*/
*/
#include <locale.h>
#include <string.h>
@ -56,8 +56,7 @@ int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexag
int render_plot_add_string(struct zint_symbol *symbol, unsigned char *text, float x, float y, float fsize, float width, struct zint_render_string **last_string);
int render_plot(struct zint_symbol *symbol, float width, float height)
{
int render_plot(struct zint_symbol *symbol, float width, float height) {
struct zint_render *render;
struct zint_render_line *line, *last_line = NULL;
struct zint_render_string *last_string = NULL;
@ -81,7 +80,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
int upceanflag = 0;
// Allocate memory for the rendered version
render = symbol->rendered = (struct zint_render *) malloc(sizeof(struct zint_render));
render = symbol->rendered = (struct zint_render *) malloc(sizeof (struct zint_render));
render->lines = NULL;
render->strings = NULL;
render->rings = NULL;
@ -104,8 +103,8 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
latch = 0;
r = 0;
/* Isolate add-on text */
if(is_extendable(symbol->symbology)) {
for(i = 0; i < ustrlen(symbol->text); i++) {
if (is_extendable(symbol->symbology)) {
for (i = 0; i < ustrlen(symbol->text); i++) {
if (latch == 1) {
addon[r] = symbol->text[i];
r++;
@ -117,7 +116,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
}
addon[r] = '\0';
if((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)) {
if ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)) {
hide_text = 1;
text_height = text_offset = 0.0;
} else {
@ -131,18 +130,18 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
* borders or white space to add.
*/
while(!(module_is_set(symbol, symbol->rows - 1, symbol_lead_in))) {
while (!(module_is_set(symbol, symbol->rows - 1, symbol_lead_in))) {
symbol_lead_in++;
}
/* Certain symbols need whitespace otherwise characters get chopped off the sides */
if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC))
|| (symbol->symbology == BARCODE_ISBNX)) {
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 13: /* EAN 13 */
case 16:
case 19:
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
}
main_symbol_width_x = 96 + symbol_lead_in;
@ -160,7 +159,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
main_symbol_width_x = 68 + symbol_lead_in;
upceanflag = 8;
}
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 11:
case 16:
/* EAN-2 add-on */
@ -176,11 +175,11 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) {
upceanflag = 12;
if(symbol->whitespace_width < 10) {
if (symbol->whitespace_width < 10) {
symbol->whitespace_width = 10;
main_symbol_width_x = 96 + symbol_lead_in;
}
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 15:
/* EAN-2 add-on */
addon_width_x = 31;
@ -194,11 +193,11 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) {
upceanflag = 6;
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
main_symbol_width_x = 51 + symbol_lead_in;
}
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 11:
/* EAN-2 add-on */
addon_width_x = 31;
@ -219,9 +218,9 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
// Determine if height should be overridden
large_bar_count = 0;
preset_height = 0.0;
for(i = 0; i < symbol->rows; i++) {
for (i = 0; i < symbol->rows; i++) {
preset_height += symbol->row_height[i];
if(symbol->row_height[i] == 0) {
if (symbol->row_height[i] == 0) {
large_bar_count++;
}
}
@ -250,7 +249,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
}
large_bar_height = (symbol->height - preset_height) / large_bar_count;
if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) {
if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) {
default_text_posn = (symbol->height + text_offset + symbol->border_width + symbol->border_width) * scaler;
} else {
default_text_posn = (symbol->height + text_offset + symbol->border_width) * scaler;
@ -261,32 +260,32 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
/* Set minimum size of symbol */
/* Barcode must be at least 2mm high by 2mm across */
if(render->height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST) {
if (render->height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST) {
render->height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST;
}
if(render->width < (2.0 * GL_CONST)) {
if (render->width < (2.0 * GL_CONST)) {
render->width = (2.0 * GL_CONST);
}
if(symbol->symbology == BARCODE_CODABAR) {
if (symbol->symbology == BARCODE_CODABAR) {
/* The minimum X-dimension of Codabar is 0.191mm. The minimum bar height is 5mm */
if(x_dimension < 0.191) {
if (x_dimension < 0.191) {
render->width = 0.191 * GL_CONST * total_area_width_x;
}
if(render->height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST) {
if (render->height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST) {
render->height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST;
}
}
if(symbol->symbology == BARCODE_CODE49) {
if (symbol->symbology == BARCODE_CODE49) {
/* The minimum X-dimension of Code 49 is 0.191mm */
if(x_dimension < 0.191) {
if (x_dimension < 0.191) {
render->width = 0.191 * GL_CONST * total_area_width_x;
render->height = render->width / symbol_aspect;
}
}
if(upceanflag != 0) {
if (upceanflag != 0) {
/* The X-dimension of UPC/EAN symbols is fixed at 0.330mm */
/* NOTE: This code will need adjustment before it correctly deals with composite symbols */
render->width = 0.330 * GL_CONST * total_area_width_x;
@ -311,32 +310,32 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
}
}
if(symbol->symbology == BARCODE_ONECODE) {
if (symbol->symbology == BARCODE_ONECODE) {
/* The size of USPS Intelligent Mail barcode is fixed */
render->width = 0.508 * GL_CONST * total_area_width_x;
render->height = 4.064 * GL_CONST;
}
if((symbol->symbology == BARCODE_POSTNET) || (symbol->symbology == BARCODE_PLANET)) {
if ((symbol->symbology == BARCODE_POSTNET) || (symbol->symbology == BARCODE_PLANET)) {
/* The size of PostNet and PLANET are fized */
render->width = 0.508 * GL_CONST * total_area_width_x;
render->height = 2.921 * GL_CONST;
}
if(((symbol->symbology == BARCODE_AUSPOST) || (symbol->symbology == BARCODE_AUSREPLY)) ||
if (((symbol->symbology == BARCODE_AUSPOST) || (symbol->symbology == BARCODE_AUSREPLY)) ||
((symbol->symbology == BARCODE_AUSROUTE) || (symbol->symbology == BARCODE_AUSREDIRECT))) {
/* Australia Post use the same sizes as USPS */
render->width = 0.508 * GL_CONST * total_area_width_x;
render->height = 4.064 * GL_CONST;
}
if((symbol->symbology == BARCODE_RM4SCC) || (symbol->symbology == BARCODE_KIX)) {
if ((symbol->symbology == BARCODE_RM4SCC) || (symbol->symbology == BARCODE_KIX)) {
/* Royal Mail and KIX Code uses 22 bars per inch */
render->width = 0.577 * GL_CONST * total_area_width_x;
render->height = 5.22 * GL_CONST;
}
if(symbol->symbology == BARCODE_MAXICODE) {
if (symbol->symbology == BARCODE_MAXICODE) {
/* Maxicode is a fixed size */
scaler = GL_CONST; /* Converts from millimeters to the scale used by glabels */
render->width = 28.16 * scaler;
@ -351,9 +350,9 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
render_plot_add_ring(symbol, ring, &last_ring);
/* Hexagons */
for(r = 0; r < symbol->rows; r++) {
for(i = 0; i < symbol->width; i++) {
if(module_is_set(symbol, r, i)) {
for (r = 0; r < symbol->rows; r++) {
for (i = 0; i < symbol->width; i++) {
if (module_is_set(symbol, r, i)) {
hexagon = render_plot_create_hexagon(((i * 0.88) + (r & 1 ? 1.76 : 1.32)) * scaler, ((r * 0.76) + 0.76) * scaler);
render_plot_add_hexagon(symbol, hexagon, &last_hexagon);
}
@ -365,16 +364,16 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
/* Works from the bottom of the symbol up */
int addon_latch = 0;
for(r = 0; r < symbol->rows; r++) {
for (r = 0; r < symbol->rows; r++) {
this_row = r;
if(symbol->row_height[this_row] == 0) {
if (symbol->row_height[this_row] == 0) {
row_height = large_bar_height;
} else {
row_height = symbol->row_height[this_row];
}
row_posn = 0;
for(i = 0; i < r; i++) {
if(symbol->row_height[i] == 0) {
for (i = 0; i < r; i++) {
if (symbol->row_height[i] == 0) {
row_posn += large_bar_height;
} else {
row_posn += symbol->row_height[i];
@ -383,7 +382,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
row_posn += yoffset;
i = 0;
if(module_is_set(symbol, this_row, 0)) {
if (module_is_set(symbol, this_row, 0)) {
latch = 1;
} else {
latch = 0;
@ -394,13 +393,13 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
do {
block_width++;
} while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i));
if((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_symbol_width_x)) {
if ((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_symbol_width_x)) {
addon_text_posn = row_posn * scaler;
addon_latch = 1;
}
if(latch == 1) {
if (latch == 1) {
/* a bar */
if(addon_latch == 0) {
if (addon_latch == 0) {
line = render_plot_create_line((i + xoffset) * scaler, (row_posn) * scaler, block_width * scaler, row_height * scaler);
} else {
line = render_plot_create_line((i + xoffset) * scaler, (row_posn + 10.0) * scaler, block_width * scaler, (row_height - 5.0) * scaler);
@ -425,11 +424,11 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
row_posn = (row_posn + large_bar_height) * scaler;
if (!hide_text) {
if(upceanflag == 8) {
if (upceanflag == 8) {
/* guard bar extensions and text formatting for EAN-8 */
i = 0;
for (line = symbol->rendered->lines; line != NULL; line = line->next) {
switch(i) {
switch (i) {
case 0:
case 1:
case 10:
@ -442,21 +441,21 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
i++;
}
for(i = 0; i < 4; i++) {
for (i = 0; i < 4; i++) {
textpart[i] = symbol->text[i];
}
textpart[4] = '\0';
textpos = 17;
textwidth = 4.0 * 8.5;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string);
for(i = 0; i < 4; i++) {
for (i = 0; i < 4; i++) {
textpart[i] = symbol->text[i + 4];
}
textpart[4] = '\0';
textpos = 50;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string);
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 86;
textwidth = 2.0 * 8.5;
@ -471,11 +470,11 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
}
if(upceanflag == 13) {
if (upceanflag == 13) {
/* guard bar extensions and text formatting for EAN-13 */
i = 0;
for (line = symbol->rendered->lines; line != NULL; line = line->next) {
switch(i) {
switch (i) {
case 0:
case 1:
case 14:
@ -494,21 +493,21 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
textwidth = 8.5;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string);
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[6] = '\0';
textpos = 25;
textwidth = 6.0 * 8.5;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string);
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 7];
}
textpart[6] = '\0';
textpos = 72;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string);
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 114;
textwidth = 2.0 * 8.5;
@ -526,7 +525,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
/* guard bar extensions and text formatting for UPCA */
i = 0;
for (line = symbol->rendered->lines; line != NULL; line = line->next) {
switch(i) {
switch (i) {
case 0:
case 1:
case 2:
@ -548,14 +547,14 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
textpos = -5;
textwidth = 6.2;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string);
for(i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[5] = '\0';
textpos = 27;
textwidth = 5.0 * 8.5;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string);
for(i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) {
textpart[i] = symbol->text[i + 6];
}
textpos = 68;
@ -566,7 +565,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
textwidth = 6.2;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string);
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 116;
textwidth = 2.0 * 8.5;
@ -584,7 +583,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
/* guard bar extensions and text formatting for UPCE */
i = 0;
for (line = symbol->rendered->lines; line != NULL; line = line->next) {
switch(i) {
switch (i) {
case 0:
case 1:
case 14:
@ -601,7 +600,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
textpos = -5;
textwidth = 6.2;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string);
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[6] = '\0';
@ -614,7 +613,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
textwidth = 6.2;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string);
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 70;
textwidth = 2.0 * 8.5;
@ -635,15 +634,15 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
}
}
switch(symbol->symbology) {
switch (symbol->symbology) {
case BARCODE_MAXICODE:
/* Do nothing! */
break;
default:
if((symbol->output_options & BARCODE_BIND) != 0) {
if((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
if ((symbol->output_options & BARCODE_BIND) != 0) {
if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
/* row binding */
for(r = 1; r < symbol->rows; r++) {
for (r = 1; r < symbol->rows; r++) {
line = render_plot_create_line(xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler);
render_plot_add_line(symbol, line, &last_line);
}
@ -655,7 +654,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
line = render_plot_create_line(0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
render_plot_add_line(symbol, line, &last_line);
}
if((symbol->output_options & BARCODE_BOX) != 0) {
if ((symbol->output_options & BARCODE_BOX) != 0) {
/* side bars */
line = render_plot_create_line(0, 0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler);
render_plot_add_line(symbol, line, &last_line);
@ -671,18 +670,16 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
return 1;
}
/*
* Create a new line with its memory allocated ready for adding to the
* rendered structure.
*
* This is much quicker than writing out each line manually (in some cases!)
*/
struct zint_render_line *render_plot_create_line(float x, float y, float width, float length)
{
struct zint_render_line *render_plot_create_line(float x, float y, float width, float length) {
struct zint_render_line *line;
line = (struct zint_render_line*) malloc(sizeof(struct zint_render_line));
line = (struct zint_render_line*) malloc(sizeof (struct zint_render_line));
line->next = NULL;
line->x = x;
line->y = y;
@ -696,8 +693,7 @@ struct zint_render_line *render_plot_create_line(float x, float y, float width,
* Add the line to the current rendering and update the last line's
* next value.
*/
int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line)
{
int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line) {
if (*last_line)
(*last_line)->next = line;
else
@ -707,11 +703,10 @@ int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *li
return 1;
}
struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width)
{
struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width) {
struct zint_render_ring *ring;
ring = (struct zint_render_ring *) malloc(sizeof(struct zint_render_ring));
ring = (struct zint_render_ring *) malloc(sizeof (struct zint_render_ring));
ring->next = NULL;
ring->x = x;
ring->y = y;
@ -721,8 +716,7 @@ struct zint_render_ring *render_plot_create_ring(float x, float y, float radius,
return ring;
}
int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring)
{
int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring) {
if (*last_ring)
(*last_ring)->next = ring;
else
@ -732,11 +726,10 @@ int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ri
return 1;
}
struct zint_render_hexagon *render_plot_create_hexagon(float x, float y)
{
struct zint_render_hexagon *render_plot_create_hexagon(float x, float y) {
struct zint_render_hexagon *hexagon;
hexagon = (struct zint_render_hexagon*) malloc(sizeof(struct zint_render_hexagon));
hexagon = (struct zint_render_hexagon*) malloc(sizeof (struct zint_render_hexagon));
hexagon->next = NULL;
hexagon->x = x;
hexagon->y = y;
@ -744,8 +737,7 @@ struct zint_render_hexagon *render_plot_create_hexagon(float x, float y)
return hexagon;
}
int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon)
{
int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon) {
if (*last_hexagon)
(*last_hexagon)->next = hexagon;
else
@ -761,18 +753,17 @@ int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexag
*/
int render_plot_add_string(struct zint_symbol *symbol,
unsigned char *text, float x, float y, float fsize, float width,
struct zint_render_string **last_string)
{
struct zint_render_string **last_string) {
struct zint_render_string *string;
string = (struct zint_render_string*) malloc(sizeof(struct zint_render_string));
string = (struct zint_render_string*) malloc(sizeof (struct zint_render_string));
string->next = NULL;
string->x = x;
string->y = y;
string->width = width;
string->fsize = fsize;
string->length = ustrlen(text);
string->text = (unsigned char*) malloc(sizeof(unsigned char) * (ustrlen(text) + 1));
string->text = (unsigned char*) malloc(sizeof (unsigned char) * (ustrlen(text) + 1));
ustrcpy(string->text, text);
if (*last_string)

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
/*
libzint - the open source barcode library
Copyright (C) 2007 Robin Stuart <robin@zint.org.uk>
Copyright (C) 2007-2016 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -28,7 +28,7 @@
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
SUCH DAMAGE.
*/
*/
#define NUMERIC 110
#define ALPHA 97
@ -38,12 +38,30 @@
#define ALPHA_OR_ISO 121
/* RSS-14 Tables */
static int g_sum_table[9] = { 0, 161, 961, 2015, 2715, 0, 336, 1036, 1516};
static int t_table[9] = { 1, 10, 34, 70, 126, 4, 20, 48, 81};
static int modules_odd[9] = { 12, 10, 8, 6, 4, 5, 7, 9, 11 };
static int modules_even[9] = { 4, 6, 8, 10, 12, 10, 8, 6, 4 };
static int widest_odd[9] = { 8, 6, 4, 3, 1, 2, 4, 6, 8 };
static int widest_even[9] = { 1, 3, 5, 6, 8, 7, 5, 3, 1 };
static int g_sum_table[9] = {
0, 161, 961, 2015, 2715, 0, 336, 1036, 1516
};
static int t_table[9] = {
1, 10, 34, 70, 126, 4, 20, 48, 81
};
static int modules_odd[9] = {
12, 10, 8, 6, 4, 5, 7, 9, 11
};
static int modules_even[9] = {
4, 6, 8, 10, 12, 10, 8, 6, 4
};
static int widest_odd[9] = {
8, 6, 4, 3, 1, 2, 4, 6, 8
};
static int widest_even[9] = {
1, 3, 5, 6, 8, 7, 5, 3, 1
};
static int widths[8];
static int finder_pattern[45] = {
3, 8, 2, 1, 1,
@ -56,7 +74,9 @@ static int finder_pattern[45] = {
1, 5, 7, 1, 1,
1, 3, 9, 1, 1
};
static int checksum_weight[32] = { /* Table 5 */
static int checksum_weight[32] = {
/* Table 5 */
1, 3, 9, 27, 2, 6, 18, 54,
4, 12, 36, 29, 8, 24, 72, 58,
16, 48, 65, 37, 32, 17, 51, 74,
@ -64,15 +84,32 @@ static int checksum_weight[32] = { /* Table 5 */
};
/* RSS Limited Tables */
static int t_even_ltd[7] = { 28, 728, 6454, 203, 2408, 1, 16632 };
static int modules_odd_ltd[7] = { 17, 13, 9, 15, 11, 19, 7 };
static int modules_even_ltd[7] = { 9, 13, 17, 11, 15, 7, 19 };
static int widest_odd_ltd[7] = { 6, 5, 3, 5, 4, 8, 1 };
static int widest_even_ltd[7] = { 3, 4, 6, 4, 5, 1, 8 };
static int checksum_weight_ltd[28] = { /* Table 7 */
static int t_even_ltd[7] = {
28, 728, 6454, 203, 2408, 1, 16632
};
static int modules_odd_ltd[7] = {
17, 13, 9, 15, 11, 19, 7
};
static int modules_even_ltd[7] = {
9, 13, 17, 11, 15, 7, 19
};
static int widest_odd_ltd[7] = {
6, 5, 3, 5, 4, 8, 1
};
static int widest_even_ltd[7] = {
3, 4, 6, 4, 5, 1, 8
};
static int checksum_weight_ltd[28] = {
/* Table 7 */
1, 3, 9, 27, 81, 65, 17, 51, 64, 14, 42, 37, 22, 66,
20, 60, 2, 6, 18, 54, 73, 41, 34, 13, 39, 28, 84, 74
};
static int finder_pattern_ltd[1246] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1,
@ -166,13 +203,32 @@ static int finder_pattern_ltd[1246] = {
};
/* RSS Expanded Tables */
static int g_sum_exp[5] = { 0, 348, 1388, 2948, 3988 };
static int t_even_exp[5] = { 4, 20, 52, 104, 204 };
static int modules_odd_exp[5] = { 12, 10, 8, 6, 4 };
static int modules_even_exp[5] = { 5, 7, 9, 11, 13 };
static int widest_odd_exp[5] = { 7, 5, 4, 3, 1 };
static int widest_even_exp[5] = { 2, 4, 5, 6, 8 };
static int checksum_weight_exp[184] = { /* Table 14 */
static int g_sum_exp[5] = {
0, 348, 1388, 2948, 3988
};
static int t_even_exp[5] = {
4, 20, 52, 104, 204
};
static int modules_odd_exp[5] = {
12, 10, 8, 6, 4
};
static int modules_even_exp[5] = {
5, 7, 9, 11, 13
};
static int widest_odd_exp[5] = {
7, 5, 4, 3, 1
};
static int widest_even_exp[5] = {
2, 4, 5, 6, 8
};
static int checksum_weight_exp[184] = {
/* Table 14 */
1, 3, 9, 27, 81, 32, 96, 77,
20, 60, 180, 118, 143, 7, 21, 63,
189, 145, 13, 39, 117, 140, 209, 205,
@ -197,7 +253,9 @@ static int checksum_weight_exp[184] = { /* Table 14 */
55, 165, 73, 8, 24, 72, 5, 15,
45, 135, 194, 160, 58, 174, 100, 89
};
static int finder_pattern_exp[60] = { /* Table 15 */
static int finder_pattern_exp[60] = {
/* Table 15 */
1, 8, 4, 1, 1,
1, 1, 4, 8, 1,
3, 6, 4, 1, 1,
@ -211,7 +269,9 @@ static int finder_pattern_exp[60] = { /* Table 15 */
2, 2, 9, 1, 1,
1, 1, 9, 2, 2
};
static int finder_sequence[198] = { /* Table 16 */
static int finder_sequence[198] = {
/* Table 16 */
1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0,
1, 6, 3, 8, 0, 0, 0, 0, 0, 0, 0,
@ -223,6 +283,7 @@ static int finder_sequence[198] = { /* Table 16 */
1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 0,
1, 2, 3, 4, 5, 8, 7, 10, 9, 12, 11
};
static int weight_rows[210] = {
0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 5, 6, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
/*
libzint - the open source barcode library
Copyright (C) 2009 Robin Stuart <robin@zint.org.uk>
Copyright (C) 2009-2016 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -28,7 +28,7 @@
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
SUCH DAMAGE.
*/
*/
#include <locale.h>
#include <string.h>
@ -38,8 +38,7 @@
#define SSET "0123456789ABCDEF"
int svg_plot(struct zint_symbol *symbol)
{
int svg_plot(struct zint_symbol *symbol) {
int i, block_width, latch, r, this_row;
float textpos, large_bar_height, preset_height, row_height, row_posn = 0.0;
FILE *fsvg;
@ -53,41 +52,41 @@ int svg_plot(struct zint_symbol *symbol)
int plot_text = 1;
const char *locale = NULL;
row_height=0;
row_height = 0;
textdone = 0;
main_width = symbol->width;
strcpy(addon, "");
comp_offset = 0;
addon_text_posn = 0.0;
if((symbol->output_options & BARCODE_STDOUT) != 0) {
if ((symbol->output_options & BARCODE_STDOUT) != 0) {
fsvg = stdout;
} else {
fsvg = fopen(symbol->outfile, "w");
}
if(fsvg == NULL) {
if (fsvg == NULL) {
strcpy(symbol->errtxt, "Could not open output file");
return ZINT_ERROR_FILE_ACCESS;
}
/* sort out colour options */
to_upper((unsigned char*)symbol->fgcolour);
to_upper((unsigned char*)symbol->bgcolour);
to_upper((unsigned char*) symbol->fgcolour);
to_upper((unsigned char*) symbol->bgcolour);
if(strlen(symbol->fgcolour) != 6) {
if (strlen(symbol->fgcolour) != 6) {
strcpy(symbol->errtxt, "Malformed foreground colour target");
return ZINT_ERROR_INVALID_OPTION;
}
if(strlen(symbol->bgcolour) != 6) {
if (strlen(symbol->bgcolour) != 6) {
strcpy(symbol->errtxt, "Malformed background colour target");
return ZINT_ERROR_INVALID_OPTION;
}
error_number = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour));
error_number = is_sane(SSET, (unsigned char*) symbol->fgcolour, strlen(symbol->fgcolour));
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Malformed foreground colour target");
return ZINT_ERROR_INVALID_OPTION;
}
error_number = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->bgcolour));
error_number = is_sane(SSET, (unsigned char*) symbol->bgcolour, strlen(symbol->bgcolour));
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Malformed background colour target");
return ZINT_ERROR_INVALID_OPTION;
@ -100,9 +99,9 @@ int svg_plot(struct zint_symbol *symbol)
large_bar_count = 0;
preset_height = 0.0;
for(i = 0; i < symbol->rows; i++) {
for (i = 0; i < symbol->rows; i++) {
preset_height += symbol->row_height[i];
if(symbol->row_height[i] == 0) {
if (symbol->row_height[i] == 0) {
large_bar_count++;
}
}
@ -112,18 +111,18 @@ int svg_plot(struct zint_symbol *symbol)
symbol->height = preset_height;
}
while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) {
while (!(module_is_set(symbol, symbol->rows - 1, comp_offset))) {
comp_offset++;
}
/* Certain symbols need whitespace otherwise characters get chopped off the sides */
if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC))
|| (symbol->symbology == BARCODE_ISBNX)) {
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 13: /* EAN 13 */
case 16:
case 19:
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
}
main_width = 96 + comp_offset;
@ -134,14 +133,14 @@ int svg_plot(struct zint_symbol *symbol)
}
if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) {
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
main_width = 96 + comp_offset;
}
}
if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) {
if(symbol->whitespace_width == 0) {
if (symbol->whitespace_width == 0) {
symbol->whitespace_width = 10;
main_width = 51 + comp_offset;
}
@ -150,8 +149,8 @@ int svg_plot(struct zint_symbol *symbol)
latch = 0;
r = 0;
/* Isolate add-on text */
if(is_extendable(symbol->symbology)) {
for(i = 0; i < ustrlen(symbol->text); i++) {
if (is_extendable(symbol->symbology)) {
for (i = 0; i < ustrlen(symbol->text); i++) {
if (latch == 1) {
addon[r] = symbol->text[i];
r++;
@ -163,10 +162,10 @@ int svg_plot(struct zint_symbol *symbol)
}
addon[r] = '\0';
if((symbol->show_hrt == 0) || (ustrlen(symbol->text) == 0)) {
if ((symbol->show_hrt == 0) || (ustrlen(symbol->text) == 0)) {
plot_text = 0;
}
if(plot_text) {
if (plot_text) {
textoffset = 9;
} else {
textoffset = 0;
@ -178,13 +177,13 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, "<?xml version=\"1.0\" standalone=\"no\"?>\n");
fprintf(fsvg, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n");
fprintf(fsvg, " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
if(symbol->symbology != BARCODE_MAXICODE) {
if (symbol->symbology != BARCODE_MAXICODE) {
fprintf(fsvg, "<svg width=\"%d\" height=\"%d\" version=\"1.1\"\n", roundup((symbol->width + xoffset + xoffset) * scaler), roundup((symbol->height + textoffset + yoffset + yoffset) * scaler));
} else {
fprintf(fsvg, "<svg width=\"%d\" height=\"%d\" version=\"1.1\"\n", roundup((74.0 + xoffset + xoffset) * scaler), roundup((72.0 + yoffset + yoffset) * scaler));
}
fprintf(fsvg, " xmlns=\"http://www.w3.org/2000/svg\">\n");
if(ustrlen(symbol->text) != 0) {
if (ustrlen(symbol->text) != 0) {
fprintf(fsvg, " <desc>%s\n", symbol->text);
} else {
fprintf(fsvg, " <desc>Zint Generated Symbol\n");
@ -192,19 +191,19 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " </desc>\n");
fprintf(fsvg, "\n <g id=\"barcode\" fill=\"#%s\">\n", symbol->fgcolour);
if(symbol->symbology != BARCODE_MAXICODE) {
if (symbol->symbology != BARCODE_MAXICODE) {
fprintf(fsvg, " <rect x=\"0\" y=\"0\" width=\"%d\" height=\"%d\" fill=\"#%s\" />\n", roundup((symbol->width + xoffset + xoffset) * scaler), roundup((symbol->height + textoffset + yoffset + yoffset) * scaler), symbol->bgcolour);
} else {
fprintf(fsvg, " <rect x=\"0\" y=\"0\" width=\"%d\" height=\"%d\" fill=\"#%s\" />\n", roundup((74.0 + xoffset + xoffset) * scaler), roundup((72.0 + yoffset + yoffset) * scaler), symbol->bgcolour);
}
if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) {
if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) {
default_text_posn = (symbol->height + textoffset + symbol->border_width + symbol->border_width) * scaler;
} else {
default_text_posn = (symbol->height + textoffset + symbol->border_width) * scaler;
}
if(symbol->symbology == BARCODE_MAXICODE) {
if (symbol->symbology == BARCODE_MAXICODE) {
/* Maxicode uses hexagons */
float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy, mx, my;
@ -214,7 +213,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", 0.0, 0.0, (74.0 + xoffset + xoffset) * scaler, symbol->border_width * scaler);
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", 0.0, (72.0 + symbol->border_width) * scaler, (74.0 + xoffset + xoffset) * scaler, symbol->border_width * scaler);
}
if((symbol->output_options & BARCODE_BOX) != 0) {
if ((symbol->output_options & BARCODE_BOX) != 0) {
/* side bars */
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", 0.0, 0.0, symbol->border_width * scaler, (72.0 + (2 * symbol->border_width)) * scaler);
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (74.0 + xoffset + xoffset - symbol->border_width) * scaler, 0.0, symbol->border_width * scaler, (72.0 + (2 * symbol->border_width)) * scaler);
@ -225,9 +224,9 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " <circle cx=\"%.2f\" cy=\"%.2f\" r=\"%.2f\" fill=\"#%s\" />\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 5.22 * scaler, symbol->bgcolour);
fprintf(fsvg, " <circle cx=\"%.2f\" cy=\"%.2f\" r=\"%.2f\" fill=\"#%s\" />\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 3.31 * scaler, symbol->fgcolour);
fprintf(fsvg, " <circle cx=\"%.2f\" cy=\"%.2f\" r=\"%.2f\" fill=\"#%s\" />\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 1.43 * scaler, symbol->bgcolour);
for(r = 0; r < symbol->rows; r++) {
for(i = 0; i < symbol->width; i++) {
if(module_is_set(symbol, r, i)) {
for (r = 0; r < symbol->rows; r++) {
for (i = 0; i < symbol->width; i++) {
if (module_is_set(symbol, r, i)) {
/* Dump a hexagon */
my = r * 2.135 + 1.43;
ay = my + 1.0 + yoffset;
@ -236,7 +235,7 @@ int svg_plot(struct zint_symbol *symbol)
dy = my - 1.0 + yoffset;
ey = my - 0.5 + yoffset;
fy = my + 0.5 + yoffset;
if(r & 1) {
if (r & 1) {
mx = (2.46 * i) + 1.23 + 1.23;
} else {
mx = (2.46 * i) + 1.23;
@ -253,21 +252,21 @@ int svg_plot(struct zint_symbol *symbol)
}
}
if(symbol->symbology != BARCODE_MAXICODE) {
if (symbol->symbology != BARCODE_MAXICODE) {
/* everything else uses rectangles (or squares) */
/* Works from the bottom of the symbol up */
int addon_latch = 0;
for(r = 0; r < symbol->rows; r++) {
for (r = 0; r < symbol->rows; r++) {
this_row = r;
if(symbol->row_height[this_row] == 0) {
if (symbol->row_height[this_row] == 0) {
row_height = large_bar_height;
} else {
row_height = symbol->row_height[this_row];
}
row_posn = 0;
for(i = 0; i < r; i++) {
if(symbol->row_height[i] == 0) {
for (i = 0; i < r; i++) {
if (symbol->row_height[i] == 0) {
row_posn += large_bar_height;
} else {
row_posn += symbol->row_height[i];
@ -276,7 +275,7 @@ int svg_plot(struct zint_symbol *symbol)
row_posn += yoffset;
i = 0;
if(module_is_set(symbol, this_row, 0)) {
if (module_is_set(symbol, this_row, 0)) {
latch = 1;
} else {
latch = 0;
@ -287,13 +286,13 @@ int svg_plot(struct zint_symbol *symbol)
do {
block_width++;
} while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i));
if((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_width)) {
if ((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_width)) {
addon_text_posn = (row_posn + 8.0) * scaler;
addon_latch = 1;
}
if(latch == 1) {
if (latch == 1) {
/* a bar */
if(addon_latch == 0) {
if (addon_latch == 0) {
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (i + xoffset) * scaler, row_posn * scaler, block_width * scaler, row_height * scaler);
} else {
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (i + xoffset) * scaler, (row_posn + 10.0) * scaler, block_width * scaler, (row_height - 5.0) * scaler);
@ -313,11 +312,11 @@ int svg_plot(struct zint_symbol *symbol)
xoffset += comp_offset;
row_posn = (row_posn + large_bar_height) * scaler;
if(plot_text) {
if (plot_text) {
if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) ||
(symbol->symbology == BARCODE_ISBNX)) {
/* guard bar extensions and text formatting for EAN8 and EAN13 */
switch(ustrlen(symbol->text)) {
switch (ustrlen(symbol->text)) {
case 8: /* EAN-8 */
case 11:
case 14:
@ -327,7 +326,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (34 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler);
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (64 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler);
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (66 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler);
for(i = 0; i < 4; i++) {
for (i = 0; i < 4; i++) {
textpart[i] = symbol->text[i];
}
textpart[4] = '\0';
@ -336,7 +335,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 11.0 * scaler, symbol->fgcolour);
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
for(i = 0; i < 4; i++) {
for (i = 0; i < 4; i++) {
textpart[i] = symbol->text[i + 4];
}
textpart[4] = '\0';
@ -346,7 +345,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 86;
fprintf(fsvg, " <text x=\"%.2f\" y=\"%.2f\" text-anchor=\"middle\"\n", textpos * scaler, addon_text_posn * scaler);
@ -380,7 +379,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 11.0 * scaler, symbol->fgcolour);
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[6] = '\0';
@ -389,7 +388,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 11.0 * scaler, symbol->fgcolour);
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 7];
}
textpart[6] = '\0';
@ -399,7 +398,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 114;
fprintf(fsvg, " <text x=\"%.2f\" y=\"%.2f\" text-anchor=\"middle\"\n", textpos * scaler, addon_text_posn * scaler);
@ -430,7 +429,7 @@ int svg_plot(struct zint_symbol *symbol)
do {
block_width++;
} while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
if(latch == 1) {
if (latch == 1) {
/* a bar */
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (i + xoffset - comp_offset) * scaler, row_posn, block_width * scaler, 5.0 * scaler);
latch = 0;
@ -449,7 +448,7 @@ int svg_plot(struct zint_symbol *symbol)
do {
block_width++;
} while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
if(latch == 1) {
if (latch == 1) {
/* a bar */
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (i + xoffset - comp_offset) * scaler, row_posn, block_width * scaler, 5.0 * scaler);
latch = 0;
@ -466,7 +465,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 8.0 * scaler, symbol->fgcolour);
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
for(i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[5] = '\0';
@ -475,7 +474,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 11.0 * scaler, symbol->fgcolour);
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
for(i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) {
textpart[i] = symbol->text[i + 6];
}
textpart[6] = '\0';
@ -492,7 +491,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 116;
fprintf(fsvg, " <text x=\"%.2f\" y=\"%.2f\" text-anchor=\"middle\"\n", textpos * scaler, addon_text_posn * scaler);
@ -525,7 +524,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 8.0 * scaler, symbol->fgcolour);
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
for(i = 0; i < 6; i++) {
for (i = 0; i < 6; i++) {
textpart[i] = symbol->text[i + 1];
}
textpart[6] = '\0';
@ -542,7 +541,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " %s\n", textpart);
fprintf(fsvg, " </text>\n");
textdone = 1;
switch(strlen(addon)) {
switch (strlen(addon)) {
case 2:
textpos = xoffset + 70;
fprintf(fsvg, " <text x=\"%.2f\" y=\"%.2f\" text-anchor=\"middle\"\n", textpos * scaler, addon_text_posn * scaler);
@ -564,15 +563,15 @@ int svg_plot(struct zint_symbol *symbol)
xoffset -= comp_offset;
switch(symbol->symbology) {
switch (symbol->symbology) {
case BARCODE_MAXICODE:
/* Do nothing! (It's already been done) */
break;
default:
if((symbol->output_options & BARCODE_BIND) != 0) {
if((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
if ((symbol->output_options & BARCODE_BIND) != 0) {
if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
/* row binding */
for(r = 1; r < symbol->rows; r++) {
for (r = 1; r < symbol->rows; r++) {
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler);
}
}
@ -581,7 +580,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", 0.0, 0.0, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", 0.0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
}
if((symbol->output_options & BARCODE_BOX) != 0) {
if ((symbol->output_options & BARCODE_BOX) != 0) {
/* side bars */
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", 0.0, 0.0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler);
fprintf(fsvg, " <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", (symbol->width + xoffset + xoffset - symbol->border_width) * scaler, 0.0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler);
@ -590,7 +589,7 @@ int svg_plot(struct zint_symbol *symbol)
}
/* Put the human readable text at the bottom */
if(plot_text && (textdone == 0)) {
if (plot_text && (textdone == 0)) {
textpos = symbol->width / 2.0;
fprintf(fsvg, " <text x=\"%.2f\" y=\"%.2f\" text-anchor=\"middle\"\n", (textpos + xoffset) * scaler, default_text_posn);
fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 8.0 * scaler, symbol->fgcolour);
@ -600,7 +599,7 @@ int svg_plot(struct zint_symbol *symbol)
fprintf(fsvg, " </g>\n");
fprintf(fsvg, "</svg>\n");
if(symbol->output_options & BARCODE_STDOUT) {
if (symbol->output_options & BARCODE_STDOUT) {
fflush(fsvg);
} else {
fclose(fsvg);
@ -611,4 +610,3 @@ int svg_plot(struct zint_symbol *symbol)
return error_number;
}

View File

@ -2,7 +2,7 @@
/*
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
modification, are permitted provided that the following conditions
@ -28,7 +28,7 @@
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
SUCH DAMAGE.
*/
*/
#define SODIUM "0123456789X"
@ -37,8 +37,7 @@
#include <stdlib.h>
#include "common.h"
static char *TeleTable[] =
{
static char *TeleTable[] ={
"1111111111111111", "1131313111", "33313111", "1111313131", "3111313111", "11333131", "13133131", "111111313111",
"31333111", "1131113131", "33113131", "1111333111", "3111113131", "1113133111", "1311133111", "111111113131",
"3131113111", "11313331", "333331", "111131113111", "31113331", "1133113111", "1313113111", "1111113331",
@ -53,11 +52,11 @@ static char *TeleTable[] =
"3113131111", "1131111133", "33111133", "111113131111", "3111111133", "111311131111", "131111131111", "111111111133",
"31311313", "113131111111", "3331111111", "1111311313", "311131111111", "11331313", "13131313", "11111131111111",
"3133111111", "1131111313", "33111313", "111133111111", "3111111313", "111313111111", "131113111111", "111111111313",
"313111111111", "1131131113", "33131113", "11113111111111","3111131113", "113311111111", "131311111111", "111111131113",
"3113111113", "11311111111111","331111111111","111113111113", "31111111111111","111311111113","131111111113"};
"313111111111", "1131131113", "33131113", "11113111111111", "3111131113", "113311111111", "131311111111", "111111131113",
"3113111113", "11311111111111", "331111111111", "111113111113", "31111111111111", "111311111113", "131111111113"
};
int telepen(struct zint_symbol *symbol, unsigned char source[], int src_len)
{
int telepen(struct zint_symbol *symbol, unsigned char source[], int src_len) {
unsigned int i, count, check_digit;
int error_number;
char dest[512]; /*14 + 30 * 14 + 14 + 14 + 1 ~ 512 */
@ -66,15 +65,15 @@ int telepen(struct zint_symbol *symbol, unsigned char source[], int src_len)
count = 0;
if(src_len > 30) {
if (src_len > 30) {
strcpy(symbol->errtxt, "Input too long");
return ZINT_ERROR_TOO_LONG;
}
/* Start character */
strcpy(dest, TeleTable['_']);
for(i = 0; i < src_len; i++) {
if(source[i] > 126) {
for (i = 0; i < src_len; i++) {
if (source[i] > 126) {
/* Cannot encode extended ASCII */
strcpy(symbol->errtxt, "Invalid characters in input data");
return ZINT_ERROR_INVALID_DATA;
@ -84,15 +83,17 @@ int telepen(struct zint_symbol *symbol, unsigned char source[], int src_len)
}
check_digit = 127 - (count % 127);
if(check_digit == 127) { check_digit = 0; }
if (check_digit == 127) {
check_digit = 0;
}
concat(dest, TeleTable[check_digit]);
/* Stop character */
concat(dest, TeleTable['z']);
expand(symbol, dest);
for(i = 0; i < src_len; i++) {
if(source[i] == '\0') {
for (i = 0; i < src_len; i++) {
if (source[i] == '\0') {
symbol->text[i] = ' ';
} else {
symbol->text[i] = source[i];
@ -102,8 +103,7 @@ int telepen(struct zint_symbol *symbol, unsigned char source[], int src_len)
return error_number;
}
int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len)
{
int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len) {
unsigned int i, count, check_digit, glyph;
int error_number, temp_length = src_len;
char dest[1024]; /* 14 + 60 * 14 + 14 + 14 + 1 ~ 1024 */
@ -112,21 +112,20 @@ int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len)
error_number = 0;
count = 0;
if(temp_length > 60) {
if (temp_length > 60) {
strcpy(symbol->errtxt, "Input too long");
return ZINT_ERROR_TOO_LONG;
}
ustrcpy(temp, source);
to_upper(temp);
error_number = is_sane(NEON, temp, temp_length);
if(error_number == ZINT_ERROR_INVALID_DATA) {
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Invalid characters in data");
return error_number;
}
/* Add a leading zero if required */
if (temp_length & 1)
{
if (temp_length & 1) {
memmove(temp + 1, temp, temp_length);
temp[0] = '0';
@ -136,14 +135,13 @@ int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len)
/* Start character */
strcpy(dest, TeleTable['_']);
for (i = 0; i < temp_length; i += 2)
{
if(temp[i] == 'X') {
for (i = 0; i < temp_length; i += 2) {
if (temp[i] == 'X') {
strcpy(symbol->errtxt, "Invalid position of X in Telepen data");
return ZINT_ERROR_INVALID_DATA;
}
if(temp[i + 1] == 'X') {
if (temp[i + 1] == 'X') {
glyph = ctoi(temp[i]) + 17;
count += glyph;
} else {
@ -155,7 +153,9 @@ int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len)
}
check_digit = 127 - (count % 127);
if(check_digit == 127) { check_digit = 0; }
if (check_digit == 127) {
check_digit = 0;
}
concat(dest, TeleTable[check_digit]);
/* Stop character */
@ -165,4 +165,3 @@ int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len)
ustrcpy(symbol->text, temp);
return error_number;
}

View File

@ -1,7 +1,7 @@
/* upcean.c - Handles UPC, EAN and ISBN
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
modification, are permitted provided that the following conditions
@ -27,7 +27,7 @@
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
SUCH DAMAGE.
*/
*/
#define SODIUM "0123456789+"
#define EAN2 102
@ -40,22 +40,47 @@
/* UPC and EAN tables checked against EN 797:1996 */
static const char *UPCParity0[10] = {"BBBAAA", "BBABAA", "BBAABA", "BBAAAB", "BABBAA", "BAABBA", "BAAABB",
"BABABA", "BABAAB", "BAABAB"}; /* Number set for UPC-E symbol (EN Table 4) */
static const char *UPCParity1[10] = {"AAABBB", "AABABB", "AABBAB", "AABBBA", "ABAABB", "ABBAAB", "ABBBAA",
"ABABAB", "ABABBA", "ABBABA"}; /* Not covered by BS EN 797:1995 */
static const char *EAN2Parity[4] = {"AA", "AB", "BA", "BB"}; /* Number sets for 2-digit add-on (EN Table 6) */
static const char *EAN5Parity[10] = {"BBAAA", "BABAA", "BAABA", "BAAAB", "ABBAA", "AABBA", "AAABB", "ABABA",
"ABAAB", "AABAB"}; /* Number set for 5-digit add-on (EN Table 7) */
static const char *EAN13Parity[10] = {"AAAAA", "ABABB", "ABBAB", "ABBBA", "BAABB", "BBAAB", "BBBAA", "BABAB",
"BABBA", "BBABA"}; /* Left hand of the EAN-13 symbol (EN Table 3) */
static const char *EANsetA[10] = {"3211", "2221", "2122", "1411", "1132", "1231", "1114", "1312", "1213",
"3112"}; /* Representation set A and C (EN Table 1) */
static const char *EANsetB[10] = {"1123", "1222", "2212", "1141", "2311", "1321", "4111", "2131", "3121",
"2113"}; /* Representation set B (EN Table 1) */
static const char *UPCParity0[10] = {
/* Number set for UPC-E symbol (EN Table 4) */
"BBBAAA", "BBABAA", "BBAABA", "BBAAAB", "BABBAA", "BAABBA", "BAAABB",
"BABABA", "BABAAB", "BAABAB"
};
char upc_check(char source[])
{ /* Calculate the correct check digit for a UPC barcode */
static const char *UPCParity1[10] = {
/* Not covered by BS EN 797:1995 */
"AAABBB", "AABABB", "AABBAB", "AABBBA", "ABAABB", "ABBAAB", "ABBBAA",
"ABABAB", "ABABBA", "ABBABA"
};
static const char *EAN2Parity[4] = {
/* Number sets for 2-digit add-on (EN Table 6) */
"AA", "AB", "BA", "BB"
};
static const char *EAN5Parity[10] = {
/* Number set for 5-digit add-on (EN Table 7) */
"BBAAA", "BABAA", "BAABA", "BAAAB", "ABBAA", "AABBA", "AAABB", "ABABA",
"ABAAB", "AABAB"
};
static const char *EAN13Parity[10] = {
/* Left hand of the EAN-13 symbol (EN Table 3) */
"AAAAA", "ABABB", "ABBAB", "ABBBA", "BAABB", "BBAAB", "BBBAA", "BABAB",
"BABBA", "BBABA"
};
static const char *EANsetA[10] = {
/* Representation set A and C (EN Table 1) */
"3211", "2221", "2122", "1411", "1132", "1231", "1114", "1312", "1213","3112"
};
static const char *EANsetB[10] = {
/* Representation set B (EN Table 1) */
"1123", "1222", "2212", "1141", "2311", "1321", "4111", "2131", "3121", "2113"
};
/* Calculate the correct check digit for a UPC barcode */
char upc_check(char source[]) {
unsigned int i, count, check_digit;
count = 0;
@ -68,24 +93,24 @@ char upc_check(char source[])
}
}
check_digit = 10 - (count%10);
if (check_digit == 10) { check_digit = 0; }
check_digit = 10 - (count % 10);
if (check_digit == 10) {
check_digit = 0;
}
return itoc(check_digit);
}
void upca_draw(char source[], char dest[])
{ /* UPC A is usually used for 12 digit numbers, but this function takes a source of any length */
/* UPC A is usually used for 12 digit numbers, but this function takes a source of any length */
void upca_draw(char source[], char dest[]) {
unsigned int i, half_way;
half_way = strlen(source) / 2;
/* start character */
concat (dest, "111");
concat(dest, "111");
for(i = 0; i <= strlen(source); i++)
{
if (i == half_way)
{
for (i = 0; i <= strlen(source); i++) {
if (i == half_way) {
/* middle character - separates manufacturer no. from product no. */
/* also inverts right hand characters */
concat(dest, "11111");
@ -95,60 +120,64 @@ void upca_draw(char source[], char dest[])
}
/* stop character */
concat (dest, "111");
concat(dest, "111");
}
void upca(struct zint_symbol *symbol, unsigned char source[], char dest[])
{ /* Make a UPC A barcode when we haven't been given the check digit */
/* Make a UPC A barcode when we haven't been given the check digit */
void upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
int length;
char gtin[15];
strcpy(gtin, (char*)source);
strcpy(gtin, (char*) source);
length = strlen(gtin);
gtin[length] = upc_check(gtin);
gtin[length + 1] = '\0';
upca_draw(gtin, dest);
ustrcpy(symbol->text, (unsigned char*)gtin);
ustrcpy(symbol->text, (unsigned char*) gtin);
}
void upce(struct zint_symbol *symbol, unsigned char source[], char dest[])
{ /* UPC E is a zero-compressed version of UPC A */
/* UPC E is a zero-compressed version of UPC A */
void upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
unsigned int i, num_system;
char emode, equivalent[12], check_digit, parity[8], temp[8];
char hrt[9];
/* Two number systems can be used - system 0 and system 1 */
if(ustrlen(source) == 7) {
switch(source[0]) {
case '0': num_system = 0; break;
case '1': num_system = 1; break;
default: num_system = 0; source[0] = '0'; break;
if (ustrlen(source) == 7) {
switch (source[0]) {
case '0': num_system = 0;
break;
case '1': num_system = 1;
break;
default: num_system = 0;
source[0] = '0';
break;
}
strcpy(temp, (char*)source);
strcpy(hrt, (char*)source);
for(i = 1; i <= 7; i++) {
strcpy(temp, (char*) source);
strcpy(hrt, (char*) source);
for (i = 1; i <= 7; i++) {
source[i - 1] = temp[i];
}
}
else {
} else {
num_system = 0;
hrt[0] = '0';
hrt[1] = '\0';
concat(hrt, (char*)source);
concat(hrt, (char*) source);
}
/* Expand the zero-compressed UPCE code to make a UPCA equivalent (EN Table 5) */
emode = source[5];
for(i = 0; i < 11; i++) {
for (i = 0; i < 11; i++) {
equivalent[i] = '0';
}
if(num_system == 1) { equivalent[0] = temp[0]; }
if (num_system == 1) {
equivalent[0] = temp[0];
}
equivalent[1] = source[0];
equivalent[2] = source[1];
equivalent[11] = '\0';
switch(emode)
{
switch (emode) {
case '0':
case '1':
case '2':
@ -161,7 +190,7 @@ void upce(struct zint_symbol *symbol, unsigned char source[], char dest[])
equivalent[3] = source[2];
equivalent[9] = source[3];
equivalent[10] = source[4];
if(((source[2] == '0') || (source[2] == '1')) || (source[2] == '2')) {
if (((source[2] == '0') || (source[2] == '1')) || (source[2] == '2')) {
/* Note 1 - "X3 shall not be equal to 0, 1 or 2" */
strcpy(symbol->errtxt, "Invalid UPC-E data");
}
@ -170,7 +199,7 @@ void upce(struct zint_symbol *symbol, unsigned char source[], char dest[])
equivalent[3] = source[2];
equivalent[4] = source[3];
equivalent[10] = source[4];
if(source[3] == '0') {
if (source[3] == '0') {
/* Note 2 - "X4 shall not be equal to 0" */
strcpy(symbol->errtxt, "Invalid UPC-E data");
}
@ -184,7 +213,7 @@ void upce(struct zint_symbol *symbol, unsigned char source[], char dest[])
equivalent[4] = source[3];
equivalent[5] = source[4];
equivalent[10] = emode;
if(source[4] == '0') {
if (source[4] == '0') {
/* Note 3 - "X5 shall not be equal to 0" */
strcpy(symbol->errtxt, "Invalid UPC-E data");
}
@ -196,7 +225,7 @@ void upce(struct zint_symbol *symbol, unsigned char source[], char dest[])
check_digit = upc_check(equivalent);
/* Use the number system and check digit information to choose a parity scheme */
if(num_system == 1) {
if (num_system == 1) {
strcpy(parity, UPCParity1[ctoi(check_digit)]);
} else {
strcpy(parity, UPCParity0[ctoi(check_digit)]);
@ -205,94 +234,86 @@ void upce(struct zint_symbol *symbol, unsigned char source[], char dest[])
/* Take all this information and make the barcode pattern */
/* start character */
concat (dest, "111");
concat(dest, "111");
for(i = 0; i <= ustrlen(source); i++) {
switch(parity[i]) {
case 'A': lookup(NEON, EANsetA, source[i], dest); break;
case 'B': lookup(NEON, EANsetB, source[i], dest); break;
for (i = 0; i <= ustrlen(source); i++) {
switch (parity[i]) {
case 'A': lookup(NEON, EANsetA, source[i], dest);
break;
case 'B': lookup(NEON, EANsetB, source[i], dest);
break;
}
}
/* stop character */
concat (dest, "111111");
concat(dest, "111111");
hrt[7] = check_digit;
hrt[8] = '\0';
ustrcpy(symbol->text, (unsigned char*)hrt);
ustrcpy(symbol->text, (unsigned char*) hrt);
}
void add_on(unsigned char source[], char dest[], int mode)
{ /* EAN-2 and EAN-5 add-on codes */
/* EAN-2 and EAN-5 add-on codes */
void add_on(unsigned char source[], char dest[], int mode) {
char parity[6];
unsigned int i, code_type;
/* If an add-on then append with space */
if (mode != 0)
{
if (mode != 0) {
concat(dest, "9");
}
/* Start character */
concat (dest, "112");
concat(dest, "112");
/* Determine EAN2 or EAN5 add-on */
if(ustrlen(source) == 2)
{
if (ustrlen(source) == 2) {
code_type = EAN2;
}
else
{
} else {
code_type = EAN5;
}
/* Calculate parity for EAN2 */
if(code_type == EAN2)
{
if (code_type == EAN2) {
int code_value, parity_bit;
code_value = (10 * ctoi(source[0])) + ctoi(source[1]);
parity_bit = code_value%4;
parity_bit = code_value % 4;
strcpy(parity, EAN2Parity[parity_bit]);
}
if(code_type == EAN5)
{
if (code_type == EAN5) {
int values[6], parity_sum, parity_bit;
for(i = 0; i < 6; i++)
{
for (i = 0; i < 6; i++) {
values[i] = ctoi(source[i]);
}
parity_sum = (3 * (values[0] + values[2] + values[4]));
parity_sum += (9 * (values[1] + values[3]));
parity_bit = parity_sum%10;
parity_bit = parity_sum % 10;
strcpy(parity, EAN5Parity[parity_bit]);
}
for(i = 0; i < ustrlen(source); i++)
{
switch(parity[i]) {
case 'A': lookup(NEON, EANsetA, source[i], dest); break;
case 'B': lookup(NEON, EANsetB, source[i], dest); break;
for (i = 0; i < ustrlen(source); i++) {
switch (parity[i]) {
case 'A': lookup(NEON, EANsetA, source[i], dest);
break;
case 'B': lookup(NEON, EANsetB, source[i], dest);
break;
}
/* Glyph separator */
if(i != (ustrlen(source) - 1))
{
concat (dest, "11");
if (i != (ustrlen(source) - 1)) {
concat(dest, "11");
}
}
}
/* ************************ EAN-13 ****************** */
char ean_check(char source[])
{ /* Calculate the correct check digit for a EAN-13 barcode */
/* Calculate the correct check digit for a EAN-13 barcode */
char ean_check(char source[]) {
int i;
unsigned int h, count, check_digit;
@ -306,19 +327,20 @@ char ean_check(char source[])
count += 2 * ctoi(source[i]);
}
}
check_digit = 10 - (count%10);
if (check_digit == 10) { check_digit = 0; }
check_digit = 10 - (count % 10);
if (check_digit == 10) {
check_digit = 0;
}
return itoc(check_digit);
}
void ean13(struct zint_symbol *symbol, unsigned char source[], char dest[])
{
void ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
unsigned int length, i, half_way;
char parity[6];
char gtin[15];
strcpy(parity, "");
strcpy(gtin, (char*)source);
strcpy(gtin, (char*) source);
/* Add the appropriate check digit */
length = strlen(gtin);
@ -332,69 +354,64 @@ void ean13(struct zint_symbol *symbol, unsigned char source[], char dest[])
half_way = 7;
/* start character */
concat (dest, "111");
concat(dest, "111");
length = strlen(gtin);
for(i = 1; i <= length; i++)
{
if (i == half_way)
{
for (i = 1; i <= length; i++) {
if (i == half_way) {
/* middle character - separates manufacturer no. from product no. */
/* also inverses right hand characters */
concat (dest, "11111");
concat(dest, "11111");
}
if(((i > 1) && (i < 7)) && (parity[i - 2] == 'B'))
{
if (((i > 1) && (i < 7)) && (parity[i - 2] == 'B')) {
lookup(NEON, EANsetB, gtin[i], dest);
}
else
{
} else {
lookup(NEON, EANsetA, gtin[i], dest);
}
}
/* stop character */
concat (dest, "111");
concat(dest, "111");
ustrcpy(symbol->text, (unsigned char*)gtin);
ustrcpy(symbol->text, (unsigned char*) gtin);
}
void ean8(struct zint_symbol *symbol, unsigned char source[], char dest[])
{ /* Make an EAN-8 barcode when we haven't been given the check digit */
/* Make an EAN-8 barcode when we haven't been given the check digit */
void ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
/* EAN-8 is basically the same as UPC-A but with fewer digits */
int length;
char gtin[10];
strcpy(gtin, (char*)source);
strcpy(gtin, (char*) source);
length = strlen(gtin);
gtin[length] = upc_check(gtin);
gtin[length + 1] = '\0';
upca_draw(gtin, dest);
ustrcpy(symbol->text, (unsigned char*)gtin);
ustrcpy(symbol->text, (unsigned char*) gtin);
}
char isbn13_check(unsigned char source[]) /* For ISBN(13) only */
{
/* For ISBN(13) only */
char isbn13_check(unsigned char source[]) {
unsigned int i, weight, sum, check, h;
sum = 0;
weight = 1;
h = ustrlen(source) - 1;
for(i = 0; i < h; i++)
{
for (i = 0; i < h; i++) {
sum += ctoi(source[i]) * weight;
if(weight == 1) weight = 3; else weight = 1;
if (weight == 1) weight = 3;
else weight = 1;
}
check = sum % 10;
check = 10 - check;
if(check == 10) check = 0;
if (check == 10) check = 0;
return itoc(check);
}
char isbn_check(unsigned char source[]) /* For ISBN(10) and SBN only */
{
/* For ISBN(10) and SBN only */
char isbn_check(unsigned char source[]) {
unsigned int i, weight, sum, check, h;
char check_char;
@ -402,49 +419,46 @@ char isbn_check(unsigned char source[]) /* For ISBN(10) and SBN only */
weight = 1;
h = ustrlen(source) - 1;
for(i = 0; i < h; i++)
{
for (i = 0; i < h; i++) {
sum += ctoi(source[i]) * weight;
weight++;
}
check = sum % 11;
check_char = itoc(check);
if(check == 10) { check_char = 'X'; }
if (check == 10) {
check_char = 'X';
}
return check_char;
}
int isbn(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len, char dest[]) /* Make an EAN-13 barcode from an SBN or ISBN */
{
/* Make an EAN-13 barcode from an SBN or ISBN */
int isbn(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len, char dest[]) {
int i, error_number;
char check_digit;
to_upper(source);
error_number = is_sane("0123456789X", source, src_len);
if(error_number == ZINT_ERROR_INVALID_DATA) {
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Invalid characters in input");
return error_number;
}
/* Input must be 9, 10 or 13 characters */
if(((src_len < 9) || (src_len > 13)) || ((src_len > 10) && (src_len < 13)))
{
if (((src_len < 9) || (src_len > 13)) || ((src_len > 10) && (src_len < 13))) {
strcpy(symbol->errtxt, "Input wrong length");
return ZINT_ERROR_TOO_LONG;
}
if(src_len == 13) /* Using 13 character ISBN */
{
if(!(((source[0] == '9') && (source[1] == '7')) &&
((source[2] == '8') || (source[2] == '9'))))
{
if (src_len == 13) /* Using 13 character ISBN */ {
if (!(((source[0] == '9') && (source[1] == '7')) &&
((source[2] == '8') || (source[2] == '9')))) {
strcpy(symbol->errtxt, "Invalid ISBN");
return ZINT_ERROR_INVALID_DATA;
}
check_digit = isbn13_check(source);
if (source[src_len - 1] != check_digit)
{
if (source[src_len - 1] != check_digit) {
strcpy(symbol->errtxt, "Incorrect ISBN check");
return ZINT_ERROR_INVALID_CHECK;
}
@ -453,16 +467,13 @@ int isbn(struct zint_symbol *symbol, unsigned char source[], const unsigned int
ean13(symbol, source, dest);
}
if(src_len == 10) /* Using 10 digit ISBN */
{
if (src_len == 10) /* Using 10 digit ISBN */ {
check_digit = isbn_check(source);
if(check_digit != source[src_len - 1])
{
if (check_digit != source[src_len - 1]) {
strcpy(symbol->errtxt, "Incorrect ISBN check");
return ZINT_ERROR_INVALID_CHECK;
}
for(i = 13; i > 0; i--)
{
for (i = 13; i > 0; i--) {
source[i] = source[i - 3];
}
source[0] = '9';
@ -473,26 +484,22 @@ int isbn(struct zint_symbol *symbol, unsigned char source[], const unsigned int
ean13(symbol, source, dest);
}
if(src_len == 9) /* Using 9 digit SBN */
{
if (src_len == 9) /* Using 9 digit SBN */ {
/* Add leading zero */
for(i = 10; i > 0; i--)
{
for (i = 10; i > 0; i--) {
source[i] = source[i - 1];
}
source[0] = '0';
/* Verify check digit */
check_digit = isbn_check(source);
if(check_digit != source[ustrlen(source) - 1])
{
if (check_digit != source[ustrlen(source) - 1]) {
strcpy(symbol->errtxt, "Incorrect SBN check");
return ZINT_ERROR_INVALID_CHECK;
}
/* Convert to EAN-13 number */
for(i = 13; i > 0; i--)
{
for (i = 13; i > 0; i--) {
source[i] = source[i - 3];
}
source[0] = '9';
@ -506,18 +513,18 @@ int isbn(struct zint_symbol *symbol, unsigned char source[], const unsigned int
return 0;
}
/* Add leading zeroes to EAN and UPC strings */
void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]) {
/* Add leading zeroes to EAN and UPC strings */
unsigned char first_part[20], second_part[20], zfirst_part[20], zsecond_part[20];
int with_addon = 0;
int first_len = 0, second_len = 0, zfirst_len = 0, zsecond_len = 0, i, h;
h = ustrlen(source);
for(i = 0; i < h; i++) {
if(source[i] == '+') {
for (i = 0; i < h; i++) {
if (source[i] == '+') {
with_addon = 1;
} else {
if(with_addon == 0) {
if (with_addon == 0) {
first_len++;
} else {
second_len++;
@ -525,34 +532,48 @@ void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsi
}
}
ustrcpy(first_part, (unsigned char *)"");
ustrcpy(second_part, (unsigned char *)"");
ustrcpy(zfirst_part, (unsigned char *)"");
ustrcpy(zsecond_part, (unsigned char *)"");
ustrcpy(first_part, (unsigned char *) "");
ustrcpy(second_part, (unsigned char *) "");
ustrcpy(zfirst_part, (unsigned char *) "");
ustrcpy(zsecond_part, (unsigned char *) "");
/* Split input into two strings */
for(i = 0; i < first_len; i++) {
for (i = 0; i < first_len; i++) {
first_part[i] = source[i];
first_part[i + 1] = '\0';
}
for(i = 0; i < second_len; i++) {
for (i = 0; i < second_len; i++) {
second_part[i] = source[i + first_len + 1];
second_part[i + 1] = '\0';
}
/* Calculate target lengths */
if(second_len <= 5) { zsecond_len = 5; }
if(second_len <= 2) { zsecond_len = 2; }
if(second_len == 0) { zsecond_len = 0; }
switch(symbol->symbology) {
if (second_len <= 5) {
zsecond_len = 5;
}
if (second_len <= 2) {
zsecond_len = 2;
}
if (second_len == 0) {
zsecond_len = 0;
}
switch (symbol->symbology) {
case BARCODE_EANX:
case BARCODE_EANX_CC:
if(first_len <= 12) { zfirst_len = 12; }
if(first_len <= 7) { zfirst_len = 7; }
if(second_len == 0) {
if(first_len <= 5) { zfirst_len = 5; }
if(first_len <= 2) { zfirst_len = 2; }
if (first_len <= 12) {
zfirst_len = 12;
}
if (first_len <= 7) {
zfirst_len = 7;
}
if (second_len == 0) {
if (first_len <= 5) {
zfirst_len = 5;
}
if (first_len <= 2) {
zfirst_len = 2;
}
}
break;
case BARCODE_UPCA:
@ -561,38 +582,43 @@ void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsi
break;
case BARCODE_UPCE:
case BARCODE_UPCE_CC:
if(first_len == 7) { zfirst_len = 7; }
if(first_len <= 6) { zfirst_len = 6; }
if (first_len == 7) {
zfirst_len = 7;
}
if (first_len <= 6) {
zfirst_len = 6;
}
break;
case BARCODE_ISBNX:
if(first_len <= 9) { zfirst_len = 9; }
if (first_len <= 9) {
zfirst_len = 9;
}
break;
}
/* Add leading zeroes */
for(i = 0; i < (zfirst_len - first_len); i++) {
uconcat(zfirst_part, (unsigned char *)"0");
for (i = 0; i < (zfirst_len - first_len); i++) {
uconcat(zfirst_part, (unsigned char *) "0");
}
uconcat(zfirst_part, first_part);
for(i = 0; i < (zsecond_len - second_len); i++) {
uconcat(zsecond_part, (unsigned char *)"0");
for (i = 0; i < (zsecond_len - second_len); i++) {
uconcat(zsecond_part, (unsigned char *) "0");
}
uconcat(zsecond_part, second_part);
/* Copy adjusted data back to local_source */
uconcat(local_source, zfirst_part);
if(zsecond_len != 0) {
uconcat(local_source, (unsigned char *)"+");
if (zsecond_len != 0) {
uconcat(local_source, (unsigned char *) "+");
uconcat(local_source, zsecond_part);
}
}
int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
{
/* splits string to parts before and after '+' parts */
unsigned char first_part[20] = { 0 }, second_part[20] = { 0 }, dest[1000] = { 0 };
unsigned char local_source[20] = { 0 };
/* splits string to parts before and after '+' parts */
int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len) {
unsigned char first_part[20] = {0}, second_part[20] = {0}, dest[1000] = {0};
unsigned char local_source[20] = {0};
unsigned int latch, reader, writer, with_addon;
int error_number, i;
@ -601,50 +627,50 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
latch = FALSE;
writer = 0;
if(src_len > 19) {
if (src_len > 19) {
strcpy(symbol->errtxt, "Input too long");
return ZINT_ERROR_TOO_LONG;
}
if(symbol->symbology != BARCODE_ISBNX) {
if (symbol->symbology != BARCODE_ISBNX) {
/* ISBN has it's own checking routine */
error_number = is_sane("0123456789+", source, src_len);
if(error_number == ZINT_ERROR_INVALID_DATA) {
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Invalid characters in data");
return error_number;
}
} else {
error_number = is_sane("0123456789Xx", source, src_len);
if(error_number == ZINT_ERROR_INVALID_DATA) {
if (error_number == ZINT_ERROR_INVALID_DATA) {
strcpy(symbol->errtxt, "Invalid characters in input");
return error_number;
}
}
/* Add leading zeroes */
ustrcpy(local_source, (unsigned char *)"");
if(symbol->symbology == BARCODE_ISBNX) {
ustrcpy(local_source, (unsigned char *) "");
if (symbol->symbology == BARCODE_ISBNX) {
to_upper(local_source);
}
ean_leading_zeroes(symbol, source, local_source);
for(reader = 0; reader <= ustrlen(local_source); reader++)
{
if(source[reader] == '+') { with_addon = TRUE; }
for (reader = 0; reader <= ustrlen(local_source); reader++) {
if (source[reader] == '+') {
with_addon = TRUE;
}
}
reader = 0;
if(with_addon) {
if (with_addon) {
do {
if(local_source[reader] == '+') {
if (local_source[reader] == '+') {
first_part[writer] = '\0';
latch = TRUE;
reader++;
writer = 0;
}
if(latch) {
if (latch) {
second_part[writer] = local_source[reader];
reader++;
writer++;
@ -655,25 +681,28 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
}
} while (reader <= ustrlen(local_source));
} else {
strcpy((char*)first_part, (char*)local_source);
strcpy((char*) first_part, (char*) local_source);
}
switch(symbol->symbology)
{
switch (symbol->symbology) {
case BARCODE_EANX:
switch(ustrlen(first_part))
{
case 2: add_on(first_part, (char*)dest, 0); ustrcpy(symbol->text, first_part); break;
case 5: add_on(first_part, (char*)dest, 0); ustrcpy(symbol->text, first_part); break;
case 7: ean8(symbol, first_part, (char*)dest); break;
case 12: ean13(symbol, first_part, (char*)dest); break;
default: strcpy(symbol->errtxt, "Invalid length input"); return ZINT_ERROR_TOO_LONG;
switch (ustrlen(first_part)) {
case 2: add_on(first_part, (char*) dest, 0);
ustrcpy(symbol->text, first_part);
break;
case 5: add_on(first_part, (char*) dest, 0);
ustrcpy(symbol->text, first_part);
break;
case 7: ean8(symbol, first_part, (char*) dest);
break;
case 12: ean13(symbol, first_part, (char*) dest);
break;
default: strcpy(symbol->errtxt, "Invalid length input");
return ZINT_ERROR_TOO_LONG;
}
break;
case BARCODE_EANX_CC:
switch(ustrlen(first_part))
{ /* Adds vertical separator bars according to ISO/IEC 24723 section 11.4 */
switch (ustrlen(first_part)) { /* Adds vertical separator bars according to ISO/IEC 24723 section 11.4 */
case 7: set_module(symbol, symbol->rows, 1);
set_module(symbol, symbol->rows, 67);
set_module(symbol, symbol->rows + 1, 0);
@ -684,7 +713,8 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
symbol->row_height[symbol->rows + 1] = 2;
symbol->row_height[symbol->rows + 2] = 2;
symbol->rows += 3;
ean8(symbol, first_part, (char*)dest); break;
ean8(symbol, first_part, (char*) dest);
break;
case 12:set_module(symbol, symbol->rows, 1);
set_module(symbol, symbol->rows, 95);
set_module(symbol, symbol->rows + 1, 0);
@ -695,20 +725,22 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
symbol->row_height[symbol->rows + 1] = 2;
symbol->row_height[symbol->rows + 2] = 2;
symbol->rows += 3;
ean13(symbol, first_part, (char*)dest); break;
default: strcpy(symbol->errtxt, "Invalid length EAN input"); return ZINT_ERROR_TOO_LONG;
ean13(symbol, first_part, (char*) dest);
break;
default: strcpy(symbol->errtxt, "Invalid length EAN input");
return ZINT_ERROR_TOO_LONG;
}
break;
case BARCODE_UPCA:
if(ustrlen(first_part) == 11) {
upca(symbol, first_part, (char*)dest);
if (ustrlen(first_part) == 11) {
upca(symbol, first_part, (char*) dest);
} else {
strcpy(symbol->errtxt, "Input wrong length");
return ZINT_ERROR_TOO_LONG;
}
break;
case BARCODE_UPCA_CC:
if(ustrlen(first_part) == 11) {
if (ustrlen(first_part) == 11) {
set_module(symbol, symbol->rows, 1);
set_module(symbol, symbol->rows, 95);
set_module(symbol, symbol->rows + 1, 0);
@ -719,22 +751,22 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
symbol->row_height[symbol->rows + 1] = 2;
symbol->row_height[symbol->rows + 2] = 2;
symbol->rows += 3;
upca(symbol, first_part, (char*)dest);
upca(symbol, first_part, (char*) dest);
} else {
strcpy(symbol->errtxt, "UPCA input wrong length");
return ZINT_ERROR_TOO_LONG;
}
break;
case BARCODE_UPCE:
if((ustrlen(first_part) >= 6) && (ustrlen(first_part) <= 7)) {
upce(symbol, first_part, (char*)dest);
if ((ustrlen(first_part) >= 6) && (ustrlen(first_part) <= 7)) {
upce(symbol, first_part, (char*) dest);
} else {
strcpy(symbol->errtxt, "Input wrong length");
return ZINT_ERROR_TOO_LONG;
}
break;
case BARCODE_UPCE_CC:
if((ustrlen(first_part) >= 6) && (ustrlen(first_part) <= 7)) {
if ((ustrlen(first_part) >= 6) && (ustrlen(first_part) <= 7)) {
set_module(symbol, symbol->rows, 1);
set_module(symbol, symbol->rows, 51);
set_module(symbol, symbol->rows + 1, 0);
@ -745,30 +777,29 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
symbol->row_height[symbol->rows + 1] = 2;
symbol->row_height[symbol->rows + 2] = 2;
symbol->rows += 3;
upce(symbol, first_part, (char*)dest);
upce(symbol, first_part, (char*) dest);
} else {
strcpy(symbol->errtxt, "UPCE input wrong length");
return ZINT_ERROR_TOO_LONG;
}
break;
case BARCODE_ISBNX:
error_number = isbn(symbol, first_part, ustrlen(first_part), (char*)dest);
if(error_number > 4) {
error_number = isbn(symbol, first_part, ustrlen(first_part), (char*) dest);
if (error_number > 4) {
return error_number;
}
break;
}
switch(ustrlen(second_part))
{
switch (ustrlen(second_part)) {
case 0: break;
case 2:
add_on(second_part, (char*)dest, 1);
uconcat(symbol->text, (unsigned char*)"+");
add_on(second_part, (char*) dest, 1);
uconcat(symbol->text, (unsigned char*) "+");
uconcat(symbol->text, second_part);
break;
case 5:
add_on(second_part, (char*)dest, 1);
uconcat(symbol->text, (unsigned char*)"+");
add_on(second_part, (char*) dest, 1);
uconcat(symbol->text, (unsigned char*) "+");
uconcat(symbol->text, second_part);
break;
default:
@ -776,15 +807,15 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
return ZINT_ERROR_TOO_LONG;
}
expand(symbol, (char*)dest);
expand(symbol, (char*) dest);
switch(symbol->symbology) {
switch (symbol->symbology) {
case BARCODE_EANX_CC:
case BARCODE_UPCA_CC:
case BARCODE_UPCE_CC:
/* shift the symbol to the right one space to allow for separator bars */
for(i = (symbol->width + 1); i >= 1; i--) {
if(module_is_set(symbol, symbol->rows - 1, i - 1)) {
for (i = (symbol->width + 1); i >= 1; i--) {
if (module_is_set(symbol, symbol->rows - 1, i - 1)) {
set_module(symbol, symbol->rows - 1, i);
} else {
unset_module(symbol, symbol->rows - 1, i);
@ -796,12 +827,8 @@ int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len)
}
if((symbol->errtxt[0] == 'w') && (error_number == 0)) {
if ((symbol->errtxt[0] == 'w') && (error_number == 0)) {
error_number = 1; /* flag UPC-E warnings */
}
return error_number;
}

View File

@ -1,7 +1,7 @@
/* zint.h - definitions for libzint
libzint - the open source barcode library
Copyright (C) 2009 Robin Stuart <robin@zint.org.uk>
Copyright (C) 2009-2016 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -27,7 +27,7 @@
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
SUCH DAMAGE.
*/
*/
#ifndef ZINT_H
#define ZINT_H
@ -36,38 +36,38 @@
extern "C" {
#endif /* __cplusplus */
struct zint_render_line {
struct zint_render_line {
float x, y, length, width;
struct zint_render_line *next; /* Pointer to next line */
};
};
struct zint_render_string {
struct zint_render_string {
float x, y, fsize;
float width; /* Suggested string width, may be 0 if none recommended */
int length;
unsigned char *text;
struct zint_render_string *next; /* Pointer to next character */
};
};
struct zint_render_ring {
struct zint_render_ring {
float x, y, radius, line_width;
struct zint_render_ring *next; /* Pointer to next ring */
};
};
struct zint_render_hexagon {
struct zint_render_hexagon {
float x, y;
struct zint_render_hexagon *next; /* Pointer to next hexagon */
};
};
struct zint_render {
struct zint_render {
float width, height;
struct zint_render_line *lines; /* Pointer to first line */
struct zint_render_string *strings; /* Pointer to first string */
struct zint_render_ring *rings; /* Pointer to first ring */
struct zint_render_hexagon *hexagons; /* Pointer to first hexagon */
};
};
struct zint_symbol {
struct zint_symbol {
int symbology;
int height;
int whitespace_width;
@ -93,10 +93,10 @@ struct zint_symbol {
int bitmap_width;
int bitmap_height;
struct zint_render *rendered;
};
};
/* Tbarcode 7 codes */
/* Tbarcode 7 codes */
#define BARCODE_CODE11 1
#define BARCODE_C25MATRIX 2
#define BARCODE_C25INTER 3
@ -153,7 +153,7 @@ struct zint_symbol {
#define BARCODE_ONECODE 85
#define BARCODE_PLESSEY 86
/* Tbarcode 8 codes */
/* Tbarcode 8 codes */
#define BARCODE_TELEPEN_NUM 87
#define BARCODE_ITF14 89
#define BARCODE_KIX 90
@ -161,7 +161,7 @@ struct zint_symbol {
#define BARCODE_DAFT 93
#define BARCODE_MICROQR 97
/* Tbarcode 9 codes */
/* Tbarcode 9 codes */
#define BARCODE_HIBC_128 98
#define BARCODE_HIBC_39 99
#define BARCODE_HIBC_DM 102
@ -171,7 +171,7 @@ struct zint_symbol {
#define BARCODE_HIBC_BLOCKF 110
#define BARCODE_HIBC_AZTEC 112
/* Zint specific */
/* Zint specific */
#define BARCODE_AZRUNE 128
#define BARCODE_CODE32 129
#define BARCODE_EANX_CC 130
@ -213,34 +213,34 @@ struct zint_symbol {
#define ZINT_ERROR_MEMORY 11
#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_MSC_VER)
# if defined (DLL_EXPORT) || defined(PIC) || defined(_USRDLL)
# define ZINT_EXTERN __declspec(dllexport)
# elif defined(ZINT_DLL)
# define ZINT_EXTERN __declspec(dllimport)
# else
# define ZINT_EXTERN extern
# endif
#if defined (DLL_EXPORT) || defined(PIC) || defined(_USRDLL)
#define ZINT_EXTERN __declspec(dllexport)
#elif defined(ZINT_DLL)
#define ZINT_EXTERN __declspec(dllimport)
#else
# define ZINT_EXTERN extern
#define ZINT_EXTERN extern
#endif
#else
#define ZINT_EXTERN extern
#endif
ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void);
ZINT_EXTERN void ZBarcode_Clear(struct zint_symbol *symbol);
ZINT_EXTERN void ZBarcode_Delete(struct zint_symbol *symbol);
ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void);
ZINT_EXTERN void ZBarcode_Clear(struct zint_symbol *symbol);
ZINT_EXTERN void ZBarcode_Delete(struct zint_symbol *symbol);
ZINT_EXTERN int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *input, int length);
ZINT_EXTERN int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename);
ZINT_EXTERN int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *input, int length);
ZINT_EXTERN int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename);
ZINT_EXTERN int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, int rotate_angle);
ZINT_EXTERN int ZBarcode_Render(struct zint_symbol *symbol, float width, float height);
ZINT_EXTERN int ZBarcode_Render(struct zint_symbol *symbol, float width, float height);
ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, int rotate_angle);
ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);
ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, int rotate_angle);
ZINT_EXTERN int ZBarcode_ValidID(int symbol_id);
ZINT_EXTERN int ZBarcode_ValidID(int symbol_id);
#ifdef __cplusplus
}