From 636a18c74f21527d00867e64dea136a24f4748fe Mon Sep 17 00:00:00 2001 From: hooper114 Date: Thu, 19 Feb 2009 19:09:57 +0000 Subject: [PATCH] Allow Unicode in SVG output text --- backend/2of5.c | 16 ++++----- backend/code.c | 24 +++++++------- backend/code128.c | 4 +-- backend/common.c | 21 ++++++++++++ backend/common.h | 3 ++ backend/composite.c | 2 +- backend/library.c | 26 ++++++--------- backend/medical.c | 10 +++--- backend/plessey.c | 12 +++---- backend/png.c | 81 ++++++++++++++++++++++++++++++++++----------- backend/postal.c | 31 +++-------------- backend/ps.c | 44 +++++++++++++----------- backend/rss.c | 8 ++--- backend/svg.c | 55 ++++++++++++++++-------------- backend/telepen.c | 4 +-- backend/upcean.c | 20 +++++------ backend/zint.h | 2 +- 17 files changed, 208 insertions(+), 155 deletions(-) diff --git a/backend/2of5.c b/backend/2of5.c index 05d43129..1a51be95 100644 --- a/backend/2of5.c +++ b/backend/2of5.c @@ -65,7 +65,7 @@ int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[]) concat (dest, "41111"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -99,7 +99,7 @@ int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[]) concat (dest, "31113"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -132,7 +132,7 @@ int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[]) concat (dest, "311"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -166,7 +166,7 @@ int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[]) concat (dest, "311"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -234,7 +234,7 @@ int interleaved_two_of_five(struct zint_symbol *symbol, unsigned char source[]) concat (dest, "311"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -287,7 +287,7 @@ int itf14(struct zint_symbol *symbol, unsigned char source[]) checkstr[1] = '\0'; concat(localstr, checkstr); error_number = interleaved_two_of_five(symbol, (unsigned char *)localstr); - strcpy(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*)localstr); return error_number; } @@ -332,7 +332,7 @@ int dpleit(struct zint_symbol *symbol, unsigned char source[]) checkstr[1] = '\0'; concat(localstr, checkstr); error_number = interleaved_two_of_five(symbol, (unsigned char *)localstr); - strcpy(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*)localstr); return error_number; } @@ -375,6 +375,6 @@ int dpident(struct zint_symbol *symbol, unsigned char source[]) checkstr[1] = '\0'; concat(localstr, checkstr); error_number = interleaved_two_of_five(symbol, (unsigned char *)localstr); - strcpy(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*)localstr); return error_number; } diff --git a/backend/code.c b/backend/code.c index 08d6d945..368f830f 100644 --- a/backend/code.c +++ b/backend/code.c @@ -147,8 +147,8 @@ int code_11(struct zint_symbol *symbol, unsigned char source[]) expand(symbol, dest); - strcpy(symbol->text, (char*)source); - concat(symbol->text, checkstr); + ustrcpy(symbol->text, source); + uconcat(symbol->text, (unsigned char*)checkstr); return error_number; } @@ -235,11 +235,11 @@ int c39(struct zint_symbol *symbol, unsigned char source[]) expand(symbol, dest); if(symbol->symbology == BARCODE_CODE39) { - strcpy(symbol->text, "*"); - concat(symbol->text, (char*)source); - concat(symbol->text, "*"); + ustrcpy(symbol->text, (unsigned char*)"*"); + uconcat(symbol->text, source); + uconcat(symbol->text, (unsigned char*)"*"); } else { - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); } return error_number; } @@ -287,8 +287,8 @@ int pharmazentral(struct zint_symbol *symbol, unsigned char source[]) } concat(localstr, checkstr); error_number = c39(symbol, (unsigned char *)localstr); - strcpy(symbol->text, "PZN"); - concat(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char *)"PZN"); + uconcat(symbol->text, (unsigned char *)localstr); return error_number; } @@ -336,8 +336,8 @@ int ec39(struct zint_symbol *symbol, unsigned char source[]) /* Then sends the buffer to the C39 function */ error_number = c39(symbol, buffer); - strcpy(symbol->text, (char*)source); - for(i = 0; i < strlen(symbol->text); i++) { + ustrcpy(symbol->text, source); + for(i = 0; i < ustrlen(symbol->text); i++) { if(symbol->text[i] == symbol->nullchar) { symbol->text[i] = ' '; } @@ -458,8 +458,8 @@ int c93(struct zint_symbol *symbol, unsigned char source[]) source[h + 1] = set_copy[k]; source[h + 2] = '\0'; expand(symbol, dest); - strcpy(symbol->text, (char*)source); - for(i = 0; i < strlen(symbol->text); i++) { + ustrcpy(symbol->text, source); + for(i = 0; i < ustrlen(symbol->text); i++) { if(symbol->text[i] == symbol->nullchar) { symbol->text[i] = ' '; } diff --git a/backend/code128.c b/backend/code128.c index 6379a4ef..c9168a71 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -543,8 +543,8 @@ int code_128(struct zint_symbol *symbol, unsigned char source[]) /* Stop character */ concat(dest, C128Table[106]); expand(symbol, dest); - strcpy(symbol->text, (char*)source); - for(i = 0; i < strlen(symbol->text); i++) { + ustrcpy(symbol->text, source); + for(i = 0; i < ustrlen(symbol->text); i++) { if(symbol->text[i] == symbol->nullchar) { symbol->text[i] = ' '; } diff --git a/backend/common.c b/backend/common.c index 35c6ac1d..f91e477d 100644 --- a/backend/common.c +++ b/backend/common.c @@ -33,6 +33,17 @@ int ustrlen(unsigned char data[]) { return i; } +void ustrcpy(unsigned char target[], unsigned char source[]) { + /* Local replacement for strcpy() with unsigned char strings */ + int i, len; + + len = ustrlen(source); + for(i = 0; i < len; i++) { + target[i] = source[i]; + } + target[i] = '\0'; +} + void concat(char dest[], char source[]) { /* Concatinates dest[] with the contents of source[], copying /0 as well */ unsigned int i, j; @@ -42,6 +53,16 @@ void concat(char dest[], char source[]) dest[i + j] = source[i]; } } +void uconcat(unsigned char dest[], unsigned char source[]) +{ /* Concatinates dest[] with the contents of source[], copying /0 as well */ + unsigned int i, j; + + j = ustrlen(dest); + for(i = 0; i <= ustrlen(source); i++) { + dest[i + j] = source[i]; } +} + + int ctoi(char source) { /* Converts a character 0-9 to its equivalent integer value */ if((source >= '0') && (source <= '9')) diff --git a/backend/common.h b/backend/common.h index 6fb8c3b6..09a0b82c 100644 --- a/backend/common.h +++ b/backend/common.h @@ -29,7 +29,9 @@ #include "zint.h" int ustrlen(unsigned char source[]); +void ustrcpy(unsigned char target[], unsigned char source[]); void concat(char dest[], char source[]); +void uconcat(unsigned char dest[], unsigned char source[]); int ctoi(char source); char itoc(int source); void to_upper(unsigned char source[]); @@ -39,3 +41,4 @@ int posn(char set_string[], char data); void expand(struct zint_symbol *symbol, char data[]); int is_stackable(int symbology); int roundup(float input); + diff --git a/backend/composite.c b/backend/composite.c index e548ee83..7c0268ae 100644 --- a/backend/composite.c +++ b/backend/composite.c @@ -1866,7 +1866,7 @@ int composite(struct zint_symbol *symbol, unsigned char source[]) symbol->width += top_shift; } symbol->rows += linear->rows; - strcpy(symbol->text, linear->text); + ustrcpy(symbol->text, (unsigned char *)linear->text); ZBarcode_Delete(linear); diff --git a/backend/library.c b/backend/library.c index eda7733d..5cf659f2 100644 --- a/backend/library.c +++ b/backend/library.c @@ -197,16 +197,16 @@ int hibc(struct zint_symbol *symbol, unsigned char source[]) switch(symbol->symbology) { case BARCODE_HIBC_128: error_number = code_128(symbol, (unsigned char *)to_process); - strcpy(symbol->text, "*"); - concat(symbol->text, to_process); - concat(symbol->text, "*"); + ustrcpy(symbol->text, (unsigned char*)"*"); + uconcat(symbol->text, (unsigned char*)to_process); + uconcat(symbol->text, (unsigned char*)"*"); break; case BARCODE_HIBC_39: symbol->option_2 = 0; error_number = c39(symbol, (unsigned char *)to_process); - strcpy(symbol->text, "*"); - concat(symbol->text, to_process); - concat(symbol->text, "*"); + ustrcpy(symbol->text, (unsigned char*)"*"); + uconcat(symbol->text, (unsigned char*)to_process); + uconcat(symbol->text, (unsigned char*)"*"); break; case BARCODE_HIBC_DM: error_number = dmatrix(symbol, (unsigned char *)to_process); @@ -300,16 +300,6 @@ int gs1_compliant(int symbology) return result; } -void ustrcpy(unsigned char dest[], unsigned char source[]) { - int i; - - i = 0; - do { - dest[i] = source[i]; - i++; - } while (source[i - 1] != '\0'); -} - int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *source) { int error_number, error_buffer; @@ -489,6 +479,10 @@ int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *source) case BARCODE_HIBC_MICPDF: error_number = hibc(symbol, preprocessed); break; case BARCODE_HIBC_BLOCKF: error_number = hibc(symbol, preprocessed); break; } + + if((symbol->symbology == BARCODE_CODE128) || (symbol->symbology == BARCODE_CODE128B)) { + ustrcpy(symbol->text, source); + } if(error_number == 0) { error_number = error_buffer; } diff --git a/backend/medical.c b/backend/medical.c index 087b2a17..dfb38bb4 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -96,7 +96,7 @@ int pharma_one(struct zint_symbol *symbol, unsigned char source[]) } expand(symbol, dest); - strcpy(symbol->text, ""); + return error_number; } @@ -190,7 +190,7 @@ int pharma_two(struct zint_symbol *symbol, unsigned char source[]) symbol->rows = 2; symbol->width = writer - 1; - strcpy(symbol->text, ""); + return error_number; } @@ -235,7 +235,7 @@ int codabar(struct zint_symbol *symbol, unsigned char source[]) } expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -315,8 +315,8 @@ int code32(struct zint_symbol *symbol, unsigned char source[]) if(error_number != 0) { return error_number; } /* Override the normal text output with the Pharmacode number */ - strcpy(symbol->text, "A"); - concat(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*)"A"); + uconcat(symbol->text, (unsigned char*)localstr); return error_number; } diff --git a/backend/plessey.c b/backend/plessey.c index 09a5a99f..cec5e987 100644 --- a/backend/plessey.c +++ b/backend/plessey.c @@ -93,7 +93,7 @@ int plessey(struct zint_symbol *symbol, unsigned char source[]) concat(dest, "331311313"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); free(checkptr); return error_number; } @@ -130,7 +130,7 @@ int msi_plessey(struct zint_symbol *symbol, unsigned char source[]) concat (dest, "121"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -228,7 +228,7 @@ int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[]) source[h] = itoc(pump); source[h + 1] = '\0'; expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -383,7 +383,7 @@ int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[]) source[h + 1] = itoc(chwech); source[h + 2] = '\0'; expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -453,7 +453,7 @@ int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[]) concat (dest, "121"); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -579,7 +579,7 @@ int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[]) source[h + 1] = '\0'; expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } diff --git a/backend/png.c b/backend/png.c index c12be71a..bea08956 100644 --- a/backend/png.c +++ b/backend/png.c @@ -426,6 +426,38 @@ int maxi_png_plot(struct zint_symbol *symbol, int rotate_angle) return error_number; } +void to_latin1(unsigned char source[], unsigned char preprocessed[]) +{ + int j, i, next, input_length; + + input_length = ustrlen(source); + + j = 0; + i = 0; + do { + if(source[i] < 128) { + preprocessed[j] = source[i]; + j++; + next = i + 1; + } else { + if(source[i] == 0xC2) { + preprocessed[j] = source[i + 1]; + j++; + next = i + 2; + } + if(source[i] == 0xC3) { + preprocessed[j] = source[i + 1] + 64; + j++; + next = i + 2; + } + } + i = next; + } while(i < input_length); + preprocessed[j] = '\0'; + + return; +} + int png_plot(struct zint_symbol *symbol, int rotate_angle) { int textdone, main_width, comp_offset, large_bar_count; @@ -438,7 +470,11 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) float row_height, row_posn; int error_number; int scaler = (int)(2 * symbol->scale); + int default_text_posn; + unsigned char local_text[ustrlen(symbol->text)]; + to_latin1(symbol->text, local_text); + textdone = 0; main_width = symbol->width; strcpy(addon, ""); @@ -470,7 +506,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) /* Certain symbols need whitespace otherwise characters get chopped off the sides */ if (((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) { - switch(strlen(symbol->text)) { + switch(ustrlen(local_text)) { case 13: /* EAN 13 */ case 16: case 19: @@ -501,9 +537,9 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) latch = 0; r = 0; /* Isolate add-on text */ - for(i = 0; i < strlen(symbol->text); i++) { + for(i = 0; i < ustrlen(local_text); i++) { if (latch == 1) { - addon[r] = symbol->text[i]; + addon[r] = local_text[i]; r++; } if (symbol->text[i] == '+') { @@ -512,7 +548,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) } addon[r] = '\0'; - if(strcmp(symbol->text, "")) { + if(ustrlen(local_text) != 0) { textoffset = 9; } else { textoffset = 0; @@ -531,6 +567,12 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) } } + if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + default_text_posn = image_height - 17; + } else { + default_text_posn = image_height - 17 - symbol->border_width - symbol->border_width; + } + /* Plot the body of the symbol to the pixel buffer */ for(r = 0; r < symbol->rows; r++) { this_row = symbol->rows - r - 1; /* invert r otherwise plots upside down */ @@ -587,7 +629,7 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) if (((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) { /* guard bar extensions and text formatting for EAN8 and EAN13 */ - switch(strlen(symbol->text)) { + switch(ustrlen(local_text)) { case 8: /* EAN-8 */ case 11: case 14: @@ -602,13 +644,14 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) } textpart[4] = '\0'; textpos = scaler * (17 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); for(i = 0; i < 4; i++) { textpart[i] = symbol->text[i + 4]; } textpart[4] = '\0'; textpos = scaler * (50 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: @@ -635,19 +678,19 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = scaler * (-7 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); for(i = 0; i < 6; i++) { textpart[i] = symbol->text[i + 1]; } textpart[6] = '\0'; textpos = scaler * (24 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); for(i = 0; i < 6; i++) { textpart[i] = symbol->text[i + 7]; } textpart[6] = '\0'; textpos = scaler * (71 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: @@ -706,23 +749,23 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = scaler * (-5 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); for(i = 0; i < 5; i++) { textpart[i] = symbol->text[i + 1]; } textpart[5] = '\0'; textpos = scaler * (27 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); for(i = 0; i < 5; i++) { textpart[i] = symbol->text[i + 6]; } textpart[6] = '\0'; textpos = scaler * (68 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); textpart[0] = symbol->text[11]; textpart[1] = '\0'; textpos = scaler * (100 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: @@ -748,17 +791,17 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = scaler * (-5 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); for(i = 0; i < 6; i++) { textpart[i] = symbol->text[i + 1]; } textpart[6] = '\0'; textpos = scaler * (24 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); textpart[0] = symbol->text[7]; textpart[1] = '\0'; textpos = scaler * (55 + xoffset); - draw_string(pixelbuf, textpart, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, textpart, textpos, default_text_posn, image_width, image_height); textdone = 1; switch(strlen(addon)) { case 2: @@ -809,9 +852,9 @@ int png_plot(struct zint_symbol *symbol, int rotate_angle) } /* Put the human readable text at the bottom */ - if((textdone == 0) && (strlen(symbol->text) != 0)) { + if((textdone == 0) && (ustrlen(local_text) != 0)) { textpos = (image_width / 2); - draw_string(pixelbuf, symbol->text, textpos, (image_height - 17), image_width, image_height); + draw_string(pixelbuf, (char*)local_text, textpos, default_text_posn, image_width, image_height); } error_number=png_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle); diff --git a/backend/postal.c b/backend/postal.c index 5e97c5d3..ec8bbf23 100644 --- a/backend/postal.c +++ b/backend/postal.c @@ -55,7 +55,7 @@ int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[]) { /* Handles the PostNet system used for Zip codes in the US */ unsigned int i, sum, check_digit; - int error_number, h; + int error_number; error_number = 0; @@ -85,11 +85,6 @@ int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[]) /* stop character */ concat (dest, "L"); - h = ustrlen(source); - source[h] = itoc(check_digit); - source[h + 1] = '\0'; - strcpy(symbol->text, ""); - return error_number; } @@ -131,7 +126,7 @@ int planet(struct zint_symbol *symbol, unsigned char source[], char dest[]) { /* Handles the PLANET system used for item tracking in the US */ unsigned int i, sum, check_digit; - int error_number, h; + int error_number; error_number = 0; @@ -160,11 +155,6 @@ int planet(struct zint_symbol *symbol, unsigned char source[], char dest[]) /* stop character */ concat (dest, "L"); - - h = ustrlen(source); - source[h] = itoc(check_digit); - source[h + 1] = '\0'; - strcpy(symbol->text, ""); return error_number; } @@ -241,7 +231,7 @@ int korea_post(struct zint_symbol *symbol, unsigned char source[]) } lookup(NESET, KoreaTable, localstr[6], dest); expand(symbol, dest); - strcpy(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*)localstr); return error_number; } @@ -269,7 +259,6 @@ int fim(struct zint_symbol *symbol, unsigned char source[]) lookup(BESET, FIMTable, source[0], dest); expand(symbol, dest); - strcpy(symbol->text, ""); return error_number; } @@ -314,7 +303,7 @@ int royal_plot(struct zint_symbol *symbol, unsigned char source[]) char height_pattern[200], check; unsigned int loopey; int writer; - int error_number, h; + int error_number; strcpy(height_pattern, ""); error_number = 0; @@ -352,11 +341,6 @@ int royal_plot(struct zint_symbol *symbol, unsigned char source[]) symbol->rows = 3; symbol->width = writer - 1; - h = ustrlen(source); - source[h] = check; - source[h + 1] = '\0'; - strcpy(symbol->text, ""); - return error_number; } @@ -417,8 +401,6 @@ int kix_code(struct zint_symbol *symbol, unsigned char source[]) symbol->rows = 3; symbol->width = writer - 1; - strcpy(symbol->text, ""); - return error_number; } @@ -468,8 +450,6 @@ int daft_code(struct zint_symbol *symbol, unsigned char source[]) symbol->rows = 3; symbol->width = writer - 1; - strcpy(symbol->text, ""); - return 0; } @@ -496,7 +476,6 @@ int flattermarken(struct zint_symbol *symbol, unsigned char source[]) lookup(NESET, FlatTable, source[loop], dest); } - expand(symbol, dest); - strcpy(symbol->text, ""); + expand(symbol, dest); return error_number; } diff --git a/backend/ps.c b/backend/ps.c index ef850ea8..68011f33 100644 --- a/backend/ps.c +++ b/backend/ps.c @@ -43,6 +43,7 @@ int ps_plot(struct zint_symbol *symbol) int large_bar_count, comp_offset; float addon_text_posn; float scaler = symbol->scale; + float default_text_posn; row_height=0; textdone = 0; @@ -121,7 +122,7 @@ int ps_plot(struct zint_symbol *symbol) /* Certain symbols need whitespace otherwise characters get chopped off the sides */ if (((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) { - switch(strlen(symbol->text)) { + switch(ustrlen(symbol->text)) { case 13: /* EAN 13 */ case 16: case 19: @@ -152,7 +153,7 @@ int ps_plot(struct zint_symbol *symbol) latch = 0; r = 0; /* Isolate add-on text */ - for(i = 0; i < strlen(symbol->text); i++) { + for(i = 0; i < ustrlen(symbol->text); i++) { if (latch == 1) { addon[r] = symbol->text[i]; r++; @@ -163,7 +164,7 @@ int ps_plot(struct zint_symbol *symbol) } addon[r] = '\0'; - if(strcmp(symbol->text, "")) { + if(ustrlen(symbol->text) != 0) { textoffset = 9; } else { textoffset = 0; @@ -174,7 +175,7 @@ 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(strlen(symbol->text) != 0) { + if(ustrlen(symbol->text) != 0) { fprintf(feps, "%%%%Title: %s\n",symbol->text); } else { fprintf(feps, "%%%%Title: Zint Generated Symbol\n"); @@ -202,6 +203,11 @@ 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)) { + default_text_posn = 0.5 * scaler; + } else { + default_text_posn = (symbol->border_width + 0.5) * scaler; + } if(symbol->symbology == BARCODE_MAXICODE) { /* Maxicode uses hexagons */ @@ -320,7 +326,7 @@ int ps_plot(struct zint_symbol *symbol) if (((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) { /* guard bar extensions and text formatting for EAN8 and EAN13 */ - switch(strlen(symbol->text)) { + switch(ustrlen(symbol->text)) { case 8: /* EAN-8 */ case 11: case 14: @@ -343,7 +349,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = 17; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.50 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -357,7 +363,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = 50; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -412,7 +418,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = -7; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.50 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -426,7 +432,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = 24; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.50 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -440,7 +446,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = 71; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -528,7 +534,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); textpos = -5; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -542,7 +548,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = 27; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -556,7 +562,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = 68; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -568,7 +574,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); textpos = 100; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -622,7 +628,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); textpos = -5; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -636,7 +642,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); textpos = 24; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -648,7 +654,7 @@ int ps_plot(struct zint_symbol *symbol) fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); textpos = 55; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 0.5 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", textpart); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); @@ -733,14 +739,14 @@ int ps_plot(struct zint_symbol *symbol) } /* Put the human readable text at the bottom */ - if((textdone == 0) && (strlen(symbol->text) != 0)) { + if((textdone == 0) && (ustrlen(symbol->text) != 0)) { fprintf(feps, "TE\n"); fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); fprintf(feps, "matrix currentmatrix\n"); fprintf(feps, "/Helvetica findfont\n"); fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); textpos = symbol->width / 2.0; - fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, 1.67 * scaler); + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); fprintf(feps, " (%s) stringwidth\n", symbol->text); fprintf(feps, "pop\n"); fprintf(feps, "-2 div 0 rmoveto\n"); diff --git a/backend/rss.c b/backend/rss.c index 973cee56..17fce436 100644 --- a/backend/rss.c +++ b/backend/rss.c @@ -423,7 +423,7 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) check_digit = 0; /* Calculate check digit from Annex A and place human readable text */ - strcpy(symbol->text, "(01)"); + ustrcpy(symbol->text, (unsigned char*)"(01)"); for(i = 0; i < 14; i++) { hrt[i] = '0'; } @@ -446,7 +446,7 @@ int rss14(struct zint_symbol *symbol, unsigned char source[]) if (check_digit == 10) { check_digit = 0; } hrt[13] = itoc(check_digit); - concat(symbol->text, hrt); + uconcat(symbol->text, (unsigned char*)hrt); } if((symbol->symbology == BARCODE_RSS14STACK) || (symbol->symbology == BARCODE_RSS14STACK_CC)) { @@ -872,7 +872,7 @@ int rsslimited(struct zint_symbol *symbol, unsigned char source[]) check_digit = 0; count = 0; - strcpy(symbol->text, "(01)"); + ustrcpy(symbol->text, (unsigned char*)"(01)"); for(i = 0; i < 14; i++) { hrt[i] = '0'; } @@ -896,7 +896,7 @@ int rsslimited(struct zint_symbol *symbol, unsigned char source[]) hrt[13] = itoc(check_digit); hrt[14] = '\0'; - concat(symbol->text, hrt); + uconcat(symbol->text, (unsigned char*)hrt); return error_number; } diff --git a/backend/svg.c b/backend/svg.c index 4a7dbe9c..5efbffd8 100644 --- a/backend/svg.c +++ b/backend/svg.c @@ -39,6 +39,7 @@ int svg_plot(struct zint_symbol *symbol) int large_bar_count, comp_offset; float addon_text_posn; float scaler = symbol->scale; + float default_text_posn; row_height=0; textdone = 0; @@ -117,7 +118,7 @@ int svg_plot(struct zint_symbol *symbol) /* Certain symbols need whitespace otherwise characters get chopped off the sides */ if (((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) { - switch(strlen(symbol->text)) { + switch(ustrlen(symbol->text)) { case 13: /* EAN 13 */ case 16: case 19: @@ -148,7 +149,7 @@ int svg_plot(struct zint_symbol *symbol) latch = 0; r = 0; /* Isolate add-on text */ - for(i = 0; i < strlen(symbol->text); i++) { + for(i = 0; i < ustrlen(symbol->text); i++) { if (latch == 1) { addon[r] = symbol->text[i]; r++; @@ -159,7 +160,7 @@ int svg_plot(struct zint_symbol *symbol) } addon[r] = '\0'; - if(strcmp(symbol->text, "")) { + if(ustrlen(symbol->text) != 0) { textoffset = 9; } else { textoffset = 0; @@ -177,7 +178,7 @@ int svg_plot(struct zint_symbol *symbol) fprintf(fsvg, "\n"); - if(strlen(symbol->text) != 0) { + if(ustrlen(symbol->text) != 0) { fprintf(fsvg, " %s\n", symbol->text); } else { fprintf(fsvg, " Zint Generated Symbol\n"); @@ -191,6 +192,12 @@ int svg_plot(struct zint_symbol *symbol) fprintf(fsvg, " \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)) { + 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) { /* Maxicode uses hexagons */ float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy, mx, my; @@ -275,7 +282,7 @@ int svg_plot(struct zint_symbol *symbol) block_width++; } while (symbol->encoded_data[this_row][i + block_width] == symbol->encoded_data[this_row][i]); if((addon_latch == 0) && (r == 0) && (i > main_width)) { - addon_text_posn = 9.0; + addon_text_posn = 9.0 + symbol->border_width; addon_latch = 1; } if(latch == 1) { @@ -298,11 +305,11 @@ int svg_plot(struct zint_symbol *symbol) /* That's done the actual data area, everything else is human-friendly */ xoffset += comp_offset; - row_posn = (yoffset + large_bar_height) * scaler; + row_posn = (row_posn + large_bar_height) * scaler; if (((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) { /* guard bar extensions and text formatting for EAN8 and EAN13 */ - switch(strlen(symbol->text)) { + switch(ustrlen(symbol->text)) { case 8: /* EAN-8 */ case 11: case 14: @@ -317,7 +324,7 @@ int svg_plot(struct zint_symbol *symbol) } textpart[4] = '\0'; textpos = 17; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -326,7 +333,7 @@ int svg_plot(struct zint_symbol *symbol) } textpart[4] = '\0'; textpos = 50; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -361,7 +368,7 @@ int svg_plot(struct zint_symbol *symbol) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = -7; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -370,7 +377,7 @@ int svg_plot(struct zint_symbol *symbol) } textpart[6] = '\0'; textpos = 24; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -379,7 +386,7 @@ int svg_plot(struct zint_symbol *symbol) } textpart[6] = '\0'; textpos = 71; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -447,16 +454,16 @@ int svg_plot(struct zint_symbol *symbol) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = -5; - fprintf(fsvg, " height + textoffset) * scaler); - fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\" fill=\"#%s\" >\n", 8.0 * scaler, symbol->fgcolour); - fprintf(fsvg, " %s\n", textpart); - fprintf(fsvg, " \n"); + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); for(i = 0; i < 5; i++) { textpart[i] = symbol->text[i + 1]; } textpart[5] = '\0'; textpos = 27; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -465,14 +472,14 @@ int svg_plot(struct zint_symbol *symbol) } textpart[6] = '\0'; textpos = 68; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); textpart[0] = symbol->text[11]; textpart[1] = '\0'; textpos = 100; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -506,7 +513,7 @@ int svg_plot(struct zint_symbol *symbol) textpart[0] = symbol->text[0]; textpart[1] = '\0'; textpos = -5; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -515,14 +522,14 @@ int svg_plot(struct zint_symbol *symbol) } textpart[6] = '\0'; textpos = 24; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); textpart[0] = symbol->text[7]; textpart[1] = '\0'; textpos = 55; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", textpart); fprintf(fsvg, " \n"); @@ -585,9 +592,9 @@ int svg_plot(struct zint_symbol *symbol) } /* Put the human readable text at the bottom */ - if((textdone == 0) && (strlen(symbol->text) != 0)) { + if((textdone == 0) && (ustrlen(symbol->text) != 0)) { textpos = symbol->width / 2.0; - fprintf(fsvg, " height + textoffset) * scaler); + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); fprintf(fsvg, " %s\n", symbol->text); fprintf(fsvg, " \n"); diff --git a/backend/telepen.c b/backend/telepen.c index ae3377da..e23dc02c 100644 --- a/backend/telepen.c +++ b/backend/telepen.c @@ -95,7 +95,7 @@ int telepen(struct zint_symbol *symbol, unsigned char source[]) concat(dest, TeleTable['z']); expand(symbol, dest); - strcpy(symbol->text, (char*)source); + ustrcpy(symbol->text, source); return error_number; } @@ -168,7 +168,7 @@ int telepen_num(struct zint_symbol *symbol, unsigned char source[]) concat((char*)dest, TeleTable['z']); expand(symbol, (char*)dest); - strcpy(symbol->text, (char*)local_source); + ustrcpy(symbol->text, local_source); return error_number; } diff --git a/backend/upcean.c b/backend/upcean.c index 6f1bcef2..a5c2c556 100644 --- a/backend/upcean.c +++ b/backend/upcean.c @@ -99,7 +99,7 @@ void upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) gtin[length] = upc_check(gtin); gtin[length + 1] = '\0'; upca_draw(gtin, dest); - strcpy(symbol->text, gtin); + ustrcpy(symbol->text, (unsigned char*)gtin); } void upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) @@ -209,7 +209,7 @@ void upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) hrt[7] = check_digit; hrt[8] = '\0'; - strcpy(symbol->text, hrt); + ustrcpy(symbol->text, (unsigned char*)hrt); } @@ -348,7 +348,7 @@ void ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]) /* stop character */ concat (dest, "111"); - strcpy(symbol->text, gtin); + ustrcpy(symbol->text, (unsigned char*)gtin); } void ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) @@ -362,7 +362,7 @@ void ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) gtin[length] = upc_check(gtin); gtin[length + 1] = '\0'; upca_draw(gtin, dest); - strcpy(symbol->text, gtin); + ustrcpy(symbol->text, (unsigned char*)gtin); } char isbn13_check(unsigned char source[]) /* For ISBN(13) only */ @@ -557,8 +557,8 @@ int eanx(struct zint_symbol *symbol, unsigned char source[]) case BARCODE_EANX: switch(ustrlen(first_part)) { - case 2: add_on(first_part, (char*)dest, 0); strcpy(symbol->text, (char*)first_part); break; - case 5: add_on(first_part, (char*)dest, 0); strcpy(symbol->text, (char*)first_part); break; + 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 [133]"); return ERROR_TOO_LONG; break; @@ -656,13 +656,13 @@ int eanx(struct zint_symbol *symbol, unsigned char source[]) case 0: break; case 2: add_on(second_part, (char*)dest, 1); - concat(symbol->text, "+"); - concat(symbol->text, (char*)second_part); + uconcat(symbol->text, (unsigned char*)"+"); + uconcat(symbol->text, second_part); break; case 5: add_on(second_part, (char*)dest, 1); - concat(symbol->text, "+"); - concat(symbol->text, (char*)second_part); + uconcat(symbol->text, (unsigned char*)"+"); + uconcat(symbol->text, second_part); break; default: strcpy(symbol->errtxt, "Invalid length input [139]"); diff --git a/backend/zint.h b/backend/zint.h index 4508295d..6a8a4a69 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -40,7 +40,7 @@ struct zint_symbol { int option_2; int option_3; int input_mode; - char text[100]; + unsigned char text[100]; int rows; int width; char primary[100];