From 411d4d71e52fac401afb99f6d6064aaaaa8f18e0 Mon Sep 17 00:00:00 2001 From: tgotic Date: Mon, 17 Jan 2011 19:44:27 +0100 Subject: [PATCH] ERROR_* renamed to ZERROR_* errno renamed to err_no Merged form master --- backend/png.c | 155 ++++++++++++++++++++++++++++---------------------- 1 file changed, 88 insertions(+), 67 deletions(-) diff --git a/backend/png.c b/backend/png.c index 00a76da6..3feb6cc8 100644 --- a/backend/png.c +++ b/backend/png.c @@ -20,7 +20,7 @@ */ #include -#ifdef _MSC_VER +#ifdef WIN32 #include #include #endif @@ -34,8 +34,8 @@ #ifndef NO_PNG #include "png.h" /* libpng header; includes zlib.h and setjmp.h */ -#include "maxipng.h" /* Maxicode shapes */ #endif /* NO_PNG */ +#include "maxipng.h" /* Maxicode shapes */ #include "font.h" /* Font for human readable text */ @@ -84,7 +84,7 @@ int png_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width graphic = &wpng_info; unsigned long rowbytes; unsigned char *image_data; - int i, row, column, errno; + int i, row, column, err_no; int fgred, fggrn, fgblu, bgred, bggrn, bgblu; switch(rotate_angle) { @@ -106,21 +106,21 @@ int png_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width if(strlen(symbol->fgcolour) != 6) { strcpy(symbol->errtxt, "Malformed foreground colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } if(strlen(symbol->bgcolour) != 6) { strcpy(symbol->errtxt, "Malformed background colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } - errno = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); - if (errno == ERROR_INVALID_DATA) { + err_no = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); + if (err_no == ZERROR_INVALID_DATA) { strcpy(symbol->errtxt, "Malformed foreground colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } - errno = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->bgcolour)); - if (errno == ERROR_INVALID_DATA) { + err_no = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->bgcolour)); + if (err_no == ZERROR_INVALID_DATA) { strcpy(symbol->errtxt, "Malformed background colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); @@ -132,17 +132,17 @@ int png_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width /* Open output file in binary mode */ if((symbol->output_options & BARCODE_STDOUT) != 0) { -#ifdef _MSC_VER +#ifdef WIN32 if (-1 == _setmode(_fileno(stdout), _O_BINARY)) { strcpy(symbol->errtxt, "Can't open output file"); - return ERROR_FILE_ACCESS; + return ZERROR_FILE_ACCESS; } #endif graphic->outfile = stdout; } else { if (!(graphic->outfile = fopen(symbol->outfile, "wb"))) { strcpy(symbol->errtxt, "Can't open output file"); - return ERROR_FILE_ACCESS; + return ZERROR_FILE_ACCESS; } } @@ -150,21 +150,21 @@ int png_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, graphic, writepng_error_handler, NULL); if (!png_ptr) { strcpy(symbol->errtxt, "Out of memory"); - return ERROR_MEMORY; + return ZERROR_MEMORY; } info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, NULL); strcpy(symbol->errtxt, "Out of memory"); - return ERROR_MEMORY; + return ZERROR_MEMORY; } /* catch jumping here */ if (setjmp(graphic->jmpbuf)) { png_destroy_write_struct(&png_ptr, &info_ptr); strcpy(symbol->errtxt, "libpng error occurred"); - return ERROR_MEMORY; + return ZERROR_MEMORY; } /* open output file with libpng */ @@ -305,7 +305,7 @@ int png_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width int bmp_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle) { unsigned long rowbytes; - int i, row, column, errno; + int i, row, column, err_no; int fgred, fggrn, fgblu, bgred, bggrn, bgblu; switch(rotate_angle) { @@ -333,21 +333,21 @@ int bmp_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width if(strlen(symbol->fgcolour) != 6) { strcpy(symbol->errtxt, "Malformed foreground colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } if(strlen(symbol->bgcolour) != 6) { strcpy(symbol->errtxt, "Malformed background colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } - errno = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); - if (errno == ERROR_INVALID_DATA) { + err_no = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); + if (err_no == ZERROR_INVALID_DATA) { strcpy(symbol->errtxt, "Malformed foreground colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } - errno = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->fgcolour)); - if (errno == ERROR_INVALID_DATA) { + err_no = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->fgcolour)); + if (err_no == ZERROR_INVALID_DATA) { strcpy(symbol->errtxt, "Malformed background colour target"); - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; } fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); @@ -463,7 +463,7 @@ int png_to_file(struct zint_symbol *symbol, int image_height, int image_width, c /* Apply scale options by creating another pixel buffer */ if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) { printf("Insufficient memory for pixel buffer"); - return ERROR_ENCODING_PROBLEM; + return ZERROR_ENCODING_PROBLEM; } else { for(i = 0; i < (scale_width * scale_height); i++) { *(scaled_pixelbuf + i) = '0'; @@ -480,7 +480,7 @@ int png_to_file(struct zint_symbol *symbol, int image_height, int image_width, c #ifndef NO_PNG error_number = png_pixel_plot(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle); #else - return ERROR_INVALID_OPTION; + return ZERROR_INVALID_OPTION; #endif } else { error_number = bmp_pixel_plot(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle); @@ -557,13 +557,15 @@ void draw_hexagon(char *pixelbuf, int image_width, int xposn, int yposn) } } -void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int image_width, int image_height) +void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int smalltext, int image_width, int image_height) { /* Put a letter into a position */ int skip, i, j, glyph_no, alphabet; skip = 0; alphabet = 0; + + image_height = 0; /* to silence compiler warning */ if(letter < 33) { skip = 1; } if((letter > 127) && (letter < 161)) { skip = 1; } @@ -576,15 +578,31 @@ void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int glyph_no = letter - 33; } - for(i = 0; i <= 13; i++) { - for(j = 0; j < 7; j++) { - if(alphabet == 0) { - if(ascii_font[(glyph_no * 7) + (i * 665) + j - 1] == 1) { - *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + if(smalltext) { + for(i = 0; i <= 8; i++) { + for(j = 0; j < 5; j++) { + if(alphabet == 0) { + if(small_font[(glyph_no * 5) + (i * 475) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } + } else { + if(small_font_extended[(glyph_no * 5) + (i * 475) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } } - } else { - if(ascii_ext_font[(glyph_no * 7) + (i * 665) + j - 1] == 1) { - *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } + } + } else { + for(i = 0; i <= 13; i++) { + for(j = 0; j < 7; j++) { + if(alphabet == 0) { + if(ascii_font[(glyph_no * 7) + (i * 665) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } + } else { + if(ascii_ext_font[(glyph_no * 7) + (i * 665) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } } } } @@ -592,7 +610,7 @@ void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int } } -void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int image_width, int image_height) +void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int smalltext, int image_width, int image_height) { /* Plot a string into the pixel buffer */ int i, string_length, string_left_hand; @@ -601,7 +619,7 @@ void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int im string_left_hand = xposn - ((7 * string_length) / 2); for(i = 0; i < string_length; i++) { - draw_letter(pixbuf, input_string[i], string_left_hand + (i * 7), yposn, image_width, image_height); + draw_letter(pixbuf, input_string[i], string_left_hand + (i * 7), yposn, smalltext, image_width, image_height); } } @@ -621,7 +639,7 @@ int maxi_png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) if (!(pixelbuf = (char *) malloc(image_width * image_height))) { printf("Insifficient memory for pixel buffer"); - return ERROR_ENCODING_PROBLEM; + return ZERROR_ENCODING_PROBLEM; } else { for(i = 0; i < (image_width * image_height); i++) { *(pixelbuf + i) = '0'; @@ -635,13 +653,13 @@ int maxi_png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) for(column = 0; column < symbol->width; column++) { xposn = column * 10; if(module_is_set(symbol, row, column)) { - if((row % 2) == 0) { - /* Even (full) row */ - draw_hexagon(pixelbuf, image_width, xposn + (2 * xoffset), yposn + (2 * yoffset)); - } else { + if(row & 1) { /* Odd (reduced) row */ xposn += 5; draw_hexagon(pixelbuf, image_width, xposn + (2 * xoffset), yposn + (2 * yoffset)); + } else { + /* Even (full) row */ + draw_hexagon(pixelbuf, image_width, xposn + (2 * xoffset), yposn + (2 * yoffset)); } } } @@ -702,7 +720,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) float addon_text_posn, preset_height, large_bar_height; int i, r, textoffset, yoffset, xoffset, latch, image_width, image_height; char *pixelbuf; - int addon_latch = 0; + int addon_latch = 0, smalltext = 0; int this_row, block_width, plot_height, plot_yposn, textpos; float row_height, row_posn; int error_number; @@ -726,6 +744,9 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) comp_offset = 0; addon_text_posn = 0.0; row_height = 0; + if(symbol->output_options & SMALL_TEXT) { + smalltext = 1; + } if (symbol->height == 0) { symbol->height = 50; @@ -810,7 +831,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) if (!(pixelbuf = (char *) malloc(image_width * image_height))) { printf("Insufficient memory for pixel buffer"); - return ERROR_ENCODING_PROBLEM; + return ZERROR_ENCODING_PROBLEM; } else { for(i = 0; i < (image_width * image_height); i++) { *(pixelbuf + i) = '0'; @@ -891,22 +912,22 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) textpart[4] = '\0'; textpos = 2 * (17 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); for(i = 0; i < 4; i++) { textpart[i] = symbol->text[i + 4]; } textpart[4] = '\0'; textpos = 2 * (50 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: textpos = 2 * (xoffset + 86); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; case 5: textpos = 2 * (xoffset + 100); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; } @@ -924,28 +945,28 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = 2 * (-7 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); for(i = 0; i < 6; i++) { textpart[i] = symbol->text[i + 1]; } textpart[6] = '\0'; textpos = 2 * (24 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); for(i = 0; i < 6; i++) { textpart[i] = symbol->text[i + 7]; } textpart[6] = '\0'; textpos = 2 * (71 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: textpos = 2 * (xoffset + 114); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; case 5: textpos = 2 * (xoffset + 128); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; } break; @@ -995,32 +1016,32 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = 2 * (-5 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); for(i = 0; i < 5; i++) { textpart[i] = symbol->text[i + 1]; } textpart[5] = '\0'; textpos = 2 * (27 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); for(i = 0; i < 5; i++) { textpart[i] = symbol->text[i + 6]; } textpart[6] = '\0'; textpos = 2 * (68 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); textpart[0] = symbol->text[11]; textpart[1] = '\0'; textpos = 2 * (100 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: textpos = 2 * (xoffset + 116); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; case 5: textpos = 2 * (xoffset + 130); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; } @@ -1037,26 +1058,26 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = 2 * (-5 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); for(i = 0; i < 6; i++) { textpart[i] = symbol->text[i + 1]; } textpart[6] = '\0'; textpos = 2 * (24 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); textpart[0] = symbol->text[7]; textpart[1] = '\0'; textpos = 2 * (55 + xoffset); - draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: textpos = 2 * (xoffset + 70); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; case 5: textpos = 2 * (xoffset + 84); - draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, image_width, image_height); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); break; } @@ -1088,7 +1109,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) /* Put the human readable text at the bottom */ if((textdone == 0) && (ustrlen(local_text) != 0)) { textpos = (image_width / 2); - draw_string(pixelbuf, (char*)local_text, textpos, default_text_posn, image_width, image_height); + draw_string(pixelbuf, (char*)local_text, textpos, default_text_posn, smalltext, image_width, image_height); } error_number=png_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle, data_type);