From 36c19053d759eee6b31e7b78e3145827821fdf0d Mon Sep 17 00:00:00 2001 From: gitlost Date: Wed, 30 Sep 2020 12:19:12 +0100 Subject: [PATCH] vector.c: string halign; POSTNET/PLANET: 1 module space; ZBarcode_Cap(); GUI settings --- backend/aztec.c | 12 +- backend/codablock.c | 19 +- backend/code16k.c | 24 +- backend/common.c | 12 +- backend/common.h | 3 +- backend/composite.c | 11 +- backend/dmatrix.c | 2 +- backend/eci.c | 4 +- backend/emf.c | 268 +- backend/emf.h | 23 + backend/font.h | 2 - backend/gridmtx.c | 2 +- backend/hanxin.c | 2 +- backend/library.c | 206 +- backend/maxicode.c | 37 +- backend/medical.c | 3 +- backend/pdf417.c | 14 +- backend/postal.c | 23 +- backend/ps.c | 98 +- backend/qr.c | 2 +- backend/raster.c | 119 +- backend/svg.c | 11 +- .../tests/data/emf/code128_egrave_bold.emf | Bin 0 -> 1248 bytes .../data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf | Bin 0 -> 1876 bytes backend/tests/data/emf/itf14_bold.emf | Bin 0 -> 1552 bytes backend/tests/data/emf/telenum_fg_bg.emf | Bin 1260 -> 1268 bytes backend/tests/data/emf/ultracode_fg_bg.emf | Bin 2796 -> 2808 bytes .../data/emf/upca_2addon_ggs_5.2.6.6-5.emf | Bin 0 -> 1860 bytes backend/tests/data/emf/upce_2addon.emf | Bin 0 -> 1460 bytes .../tests/data/emf/upce_2addon_small_bold.emf | Bin 0 -> 1460 bytes .../tests/data/eps/code128_egrave_bold.eps | 95 + .../tests/data/eps/code128_escape_latin1.eps | 101 + backend/tests/data/eps/code39_fg_bg.eps | 60 +- .../data/eps/dbar_ltd_24724_fig7_bold.eps | 72 + .../data/eps/ean13_2addon_ggs_5.2.2.5.1-2.eps | 127 + backend/tests/data/eps/ultra_fg_bg.eps | 282 +- .../data/eps/upca_2addon_ggs_5.2.6.6-5.eps | 133 + backend/tests/data/eps/upce_5addon.eps | 116 + .../tests/data/eps/upce_5addon_small_bold.eps | 116 + backend/tests/data/png/codablockf_3rows.png | Bin 347 -> 365 bytes .../tests/data/png/code128_egrave_bold.png | Bin 0 -> 520 bytes .../data/png/code128_egrave_bold_box3.png | Bin 0 -> 549 bytes backend/tests/data/png/code39_small.png | Bin 0 -> 366 bytes .../data/png/ean13_cc_2addon_cca_4x4.png | Bin 0 -> 1132 bytes .../data/png/ean13_cc_5addon_ccb_3x4.png | Bin 0 -> 1263 bytes .../png/ean13_cc_5addon_ccb_3x4_notext.png | Bin 0 -> 647 bytes .../tests/data/png/ean8_cc_2addon_cca_4x3.png | Bin 0 -> 934 bytes .../tests/data/png/ean8_cc_5addon_ccb_8x3.png | Bin 0 -> 1073 bytes backend/tests/data/png/gs1_128_cc_fig12.png | Bin 0 -> 1164 bytes backend/tests/data/png/postnet_zip.png | Bin 0 -> 350 bytes backend/tests/data/png/upca_5addon_bind3.png | Bin 0 -> 904 bytes backend/tests/data/png/upca_5addon_notext.png | Bin 0 -> 424 bytes .../tests/data/png/upca_cc_2addon_cca_3x4.png | Bin 0 -> 1062 bytes .../tests/data/png/upca_cc_5addon_ccb_4x4.png | Bin 0 -> 1179 bytes .../data/png/upca_cc_5addon_ccb_4x4_bind3.png | Bin 0 -> 1169 bytes .../png/upca_cc_5addon_ccb_4x4_notext.png | Bin 0 -> 657 bytes .../tests/data/png/upce_cc_2addon_cca_5x2.png | Bin 0 -> 882 bytes .../tests/data/png/upce_cc_5addon_ccb_8x2.png | Bin 0 -> 1060 bytes .../png/upce_cc_5addon_ccb_8x2_notext.png | Bin 0 -> 596 bytes .../tests/data/print/bmp/dotcode_aim_fig7.bmp | Bin 146 -> 2062 bytes backend/tests/data/print/emf/code128_aim.emf | Bin 948 -> 956 bytes .../tests/data/print/emf/dotcode_aim_fig7.emf | Bin 1200 -> 1212 bytes backend/tests/data/print/emf/qr_v1_m.emf | Bin 2232 -> 2244 bytes backend/tests/data/print/emf/ultracode_a.emf | Bin 2676 -> 2688 bytes backend/tests/data/print/eps/code128_aim.eps | 48 +- .../tests/data/print/eps/dotcode_aim_fig7.eps | 84 +- backend/tests/data/print/eps/qr_v1_m.eps | 2 +- backend/tests/data/print/eps/ultracode_a.eps | 2 +- .../tests/data/print/gif/dotcode_aim_fig7.gif | Bin 83 -> 688 bytes .../tests/data/print/pcx/dotcode_aim_fig7.pcx | Bin 668 -> 4856 bytes .../tests/data/print/png/dotcode_aim_fig7.png | Bin 145 -> 682 bytes backend/tests/data/print/svg/code128_aim.svg | 8 +- .../tests/data/print/svg/dotcode_aim_fig7.svg | 82 +- .../tests/data/print/tif/dotcode_aim_fig7.tif | Bin 1906 -> 39244 bytes backend/tests/data/svg/codablockf_3rows.svg | 106 +- backend/tests/data/svg/code128_amperands.svg | 8 +- .../tests/data/svg/code128_egrave_bold.svg | 47 + .../data/svg/code128_egrave_bold_box3.svg | 51 + backend/tests/data/svg/code39_small.svg | 41 + .../data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg | 34 +- .../data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg | 52 +- .../data/svg/ean13_cc_2addon_cca_4x4.svg | 147 + .../data/svg/ean13_cc_5addon_ccb_3x4.svg | 154 + .../svg/ean13_cc_5addon_ccb_3x4_notext.svg | 138 + backend/tests/data/svg/ean2.svg | 8 +- backend/tests/data/svg/ean5.svg | 8 +- backend/tests/data/svg/ean8_2addon.svg | 30 +- backend/tests/data/svg/ean8_5addon.svg | 48 +- .../tests/data/svg/ean8_cc_2addon_cca_4x3.svg | 116 + .../tests/data/svg/ean8_cc_5addon_ccb_8x3.svg | 182 + backend/tests/data/svg/gs1_128_cc_fig12.svg | 252 + backend/tests/data/svg/postnet_zip.svg | 44 + .../data/svg/upca_2addon_ggs_5.2.6.6-5.svg | 38 +- backend/tests/data/svg/upca_5addon.svg | 56 +- backend/tests/data/svg/upca_5addon_bind3.svg | 80 + .../tests/data/svg/upca_5addon_small_bold.svg | 78 + .../tests/data/svg/upca_cc_2addon_cca_3x4.svg | 134 + .../tests/data/svg/upca_cc_5addon_ccb_4x4.svg | 158 + .../data/svg/upca_cc_5addon_ccb_4x4_bind3.svg | 160 + .../svg/upca_cc_5addon_ccb_4x4_notext.svg | 138 + backend/tests/data/svg/upce_2addon.svg | 34 +- backend/tests/data/svg/upce_5addon.svg | 52 +- backend/tests/data/svg/upce_5addon_notext.svg | 45 + .../tests/data/svg/upce_cc_2addon_cca_5x2.svg | 107 + .../tests/data/svg/upce_cc_5addon_ccb_8x2.svg | 142 + .../svg/upce_cc_5addon_ccb_8x2_notext.svg | 126 + backend/tests/test_2of5.c | 14 +- backend/tests/test_auspost.c | 53 +- backend/tests/test_bmp.c | 4 +- backend/tests/test_channel.c | 76 +- backend/tests/test_codablock.c | 16 +- backend/tests/test_code.c | 79 +- backend/tests/test_code1.c | 21 +- backend/tests/test_code128.c | 16 +- backend/tests/test_code16k.c | 21 +- backend/tests/test_code49.c | 19 +- backend/tests/test_composite.c | 138 +- backend/tests/test_emf.c | 30 +- backend/tests/test_gs1.c | 8 +- backend/tests/test_imail.c | 19 +- backend/tests/test_library.c | 129 + backend/tests/test_mailmark.c | 61 + backend/tests/test_medical.c | 37 +- backend/tests/test_pcx.c | 20 +- backend/tests/test_pdf417.c | 24 +- backend/tests/test_png.c | 88 +- backend/tests/test_postal.c | 91 +- backend/tests/test_print.c | 26 +- backend/tests/test_ps.c | 55 +- backend/tests/test_raster.c | 277 +- backend/tests/test_rss.c | 14 +- backend/tests/test_svg.c | 72 +- backend/tests/test_telepen.c | 28 +- backend/tests/test_upcean.c | 14 +- backend/tests/test_vector.c | 394 +- backend/tests/testcommon.c | 173 +- backend/tests/testcommon.h | 12 +- .../tests/tools/bwipp_dump-barcode.ps.diff | 132 +- backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 116196 -> 116944 bytes backend/tests/tools/run_bwipp_tests.sh | 43 +- backend/upcean.c | 27 +- backend/vector.c | 205 +- backend/zint.h | 23 +- backend_qt/CMakeLists.txt | 1 + backend_qt/qzint.cpp | 380 +- backend_qt/qzint.h | 47 +- backend_tcl/Makefile.in | 3 +- backend_tcl/configure | 8576 +++++------------ backend_tcl/configure.in | 18 +- backend_tcl/zint.c | 72 +- docs/manual.txt | 165 +- frontend/main.c | 81 +- .../tests/cmake/Modules/FindLibZint.cmake | 53 + frontend_qt/grpDotCode.ui | 49 +- frontend_qt/grpGrid.ui | 13 + frontend_qt/grpHX.ui | 13 + frontend_qt/grpMQR.ui | 13 + frontend_qt/grpMaxicode.ui | 4 +- frontend_qt/grpQR.ui | 13 + frontend_qt/grpRMQR.ui | 13 + frontend_qt/mainWindow.ui | 663 +- frontend_qt/mainwindow.cpp | 1009 +- frontend_qt/mainwindow.h | 30 +- tools/update_version.php | 14 +- win32/vs2015/libzint.vcxproj | 184 +- win32/vs2015/zint.vcxproj | 24 +- win32/vs2019/libzint.vcxproj | 214 + win32/vs2019/zint.sln | 36 + win32/vs2019/zint.vcxproj | 107 + 169 files changed, 10975 insertions(+), 8318 deletions(-) create mode 100644 backend/tests/data/emf/code128_egrave_bold.emf create mode 100644 backend/tests/data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf create mode 100644 backend/tests/data/emf/itf14_bold.emf create mode 100644 backend/tests/data/emf/upca_2addon_ggs_5.2.6.6-5.emf create mode 100644 backend/tests/data/emf/upce_2addon.emf create mode 100644 backend/tests/data/emf/upce_2addon_small_bold.emf create mode 100644 backend/tests/data/eps/code128_egrave_bold.eps create mode 100644 backend/tests/data/eps/code128_escape_latin1.eps create mode 100644 backend/tests/data/eps/dbar_ltd_24724_fig7_bold.eps create mode 100644 backend/tests/data/eps/ean13_2addon_ggs_5.2.2.5.1-2.eps create mode 100644 backend/tests/data/eps/upca_2addon_ggs_5.2.6.6-5.eps create mode 100644 backend/tests/data/eps/upce_5addon.eps create mode 100644 backend/tests/data/eps/upce_5addon_small_bold.eps create mode 100644 backend/tests/data/png/code128_egrave_bold.png create mode 100644 backend/tests/data/png/code128_egrave_bold_box3.png create mode 100644 backend/tests/data/png/code39_small.png create mode 100644 backend/tests/data/png/ean13_cc_2addon_cca_4x4.png create mode 100644 backend/tests/data/png/ean13_cc_5addon_ccb_3x4.png create mode 100644 backend/tests/data/png/ean13_cc_5addon_ccb_3x4_notext.png create mode 100644 backend/tests/data/png/ean8_cc_2addon_cca_4x3.png create mode 100644 backend/tests/data/png/ean8_cc_5addon_ccb_8x3.png create mode 100644 backend/tests/data/png/gs1_128_cc_fig12.png create mode 100644 backend/tests/data/png/postnet_zip.png create mode 100644 backend/tests/data/png/upca_5addon_bind3.png create mode 100644 backend/tests/data/png/upca_5addon_notext.png create mode 100644 backend/tests/data/png/upca_cc_2addon_cca_3x4.png create mode 100644 backend/tests/data/png/upca_cc_5addon_ccb_4x4.png create mode 100644 backend/tests/data/png/upca_cc_5addon_ccb_4x4_bind3.png create mode 100644 backend/tests/data/png/upca_cc_5addon_ccb_4x4_notext.png create mode 100644 backend/tests/data/png/upce_cc_2addon_cca_5x2.png create mode 100644 backend/tests/data/png/upce_cc_5addon_ccb_8x2.png create mode 100644 backend/tests/data/png/upce_cc_5addon_ccb_8x2_notext.png create mode 100644 backend/tests/data/svg/code128_egrave_bold.svg create mode 100644 backend/tests/data/svg/code128_egrave_bold_box3.svg create mode 100644 backend/tests/data/svg/code39_small.svg create mode 100644 backend/tests/data/svg/ean13_cc_2addon_cca_4x4.svg create mode 100644 backend/tests/data/svg/ean13_cc_5addon_ccb_3x4.svg create mode 100644 backend/tests/data/svg/ean13_cc_5addon_ccb_3x4_notext.svg create mode 100644 backend/tests/data/svg/ean8_cc_2addon_cca_4x3.svg create mode 100644 backend/tests/data/svg/ean8_cc_5addon_ccb_8x3.svg create mode 100644 backend/tests/data/svg/gs1_128_cc_fig12.svg create mode 100644 backend/tests/data/svg/postnet_zip.svg create mode 100644 backend/tests/data/svg/upca_5addon_bind3.svg create mode 100644 backend/tests/data/svg/upca_5addon_small_bold.svg create mode 100644 backend/tests/data/svg/upca_cc_2addon_cca_3x4.svg create mode 100644 backend/tests/data/svg/upca_cc_5addon_ccb_4x4.svg create mode 100644 backend/tests/data/svg/upca_cc_5addon_ccb_4x4_bind3.svg create mode 100644 backend/tests/data/svg/upca_cc_5addon_ccb_4x4_notext.svg create mode 100644 backend/tests/data/svg/upce_5addon_notext.svg create mode 100644 backend/tests/data/svg/upce_cc_2addon_cca_5x2.svg create mode 100644 backend/tests/data/svg/upce_cc_5addon_ccb_8x2.svg create mode 100644 backend/tests/data/svg/upce_cc_5addon_ccb_8x2_notext.svg mode change 100644 => 100755 backend_tcl/configure create mode 100644 frontend/tests/cmake/Modules/FindLibZint.cmake create mode 100644 win32/vs2019/libzint.vcxproj create mode 100644 win32/vs2019/zint.sln create mode 100644 win32/vs2019/zint.vcxproj diff --git a/backend/aztec.c b/backend/aztec.c index c9c72236..466c6bfd 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -980,7 +980,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz char binary_string[AZTEC_BIN_CAPACITY + 1], bit_pattern[20045], descriptor[42]; char adjusted_string[AZTEC_MAX_CAPACITY + 1]; unsigned char desc_data[4], desc_ecc[6]; - int err_code, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length; + int error_number, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length; int remainder, padbits, count, gs1, adjustment_size; int debug = (symbol->debug & ZINT_DEBUG_PRINT), reader = 0; int comp_loop = 4; @@ -1009,11 +1009,11 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz populate_map(); - err_code = aztec_text_process(source, length, binary_string, gs1, symbol->eci, symbol->debug); + error_number = aztec_text_process(source, length, binary_string, gs1, symbol->eci, debug); - if (err_code != 0) { + if (error_number != 0) { strcpy(symbol->errtxt, "502: Input too long or too many extended ASCII characters"); - return err_code; + return error_number; } if (!((symbol->option_1 >= -1) && (symbol->option_1 <= 4))) { @@ -1021,7 +1021,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz if (symbol->warn_level == WARN_FAIL_ALL) { return ZINT_ERROR_INVALID_OPTION; } else { - err_code = ZINT_WARN_INVALID_OPTION; + error_number = ZINT_WARN_INVALID_OPTION; } symbol->option_1 = -1; } @@ -1573,7 +1573,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz symbol->width = 151 - (2 * AztecOffset[layers - 1]); } - return err_code; + return error_number; } /* Encodes Aztec runes as specified in ISO/IEC 24778:2008 Annex A */ diff --git a/backend/codablock.c b/backend/codablock.c index 2eef2a70..d45fe7e7 100644 --- a/backend/codablock.c +++ b/backend/codablock.c @@ -629,7 +629,7 @@ static void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet) */ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], const size_t length) { int charCur, dataLength; - int Error; + int error_number; int rows, columns, useColumns; int fillings; int Sum1,Sum2; @@ -652,14 +652,15 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], /* option1: rows <= 0: automatic, 1..44 */ rows = symbol->option_1; if (rows == 1) { - Error = code_128(symbol, source, length); - if (Error < 5) { + error_number = code_128(symbol, source, length); /* Only returns errors, not warnings */ + if (error_number < ZINT_ERROR) { symbol->output_options |= BARCODE_BIND; if (symbol->border_width == 0) { /* Allow override if non-zero */ symbol->border_width = 1; /* AIM ISS-X-24 Section 4.6.1 b) (note change from previous default 2) */ } + symbol->text[0] = '\0'; /* Disable HRT for compatibility with CODABLOCKF */ } - return Error; + return error_number; } if (rows > 44) { strcpy(symbol->errtxt, "410: Rows parameter not in 0..44"); @@ -723,14 +724,14 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], useColumns = columns - 5; if ( rows > 0 ) { /* row count given */ - Error = Rows2Columns(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings); + error_number = Rows2Columns(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings); } else { /* column count given */ - Error = Columns2Rows(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings); + error_number = Columns2Rows(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings); } - if (Error != 0) { + if (error_number != 0) { strcpy(symbol->errtxt, "413: Data string too long"); - return Error; + return error_number; } /* Suppresses clang-analyzer-core.VLASize warning */ assert(rows >= 2 && useColumns >= 4); @@ -984,5 +985,5 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], symbol->border_width = 1; /* AIM ISS-X-24 Section 4.6.1 b) (note change from previous default 2) */ } - return 0; + return error_number; } diff --git a/backend/code16k.c b/backend/code16k.c index c7394c5d..a0e4ff04 100644 --- a/backend/code16k.c +++ b/backend/code16k.c @@ -109,7 +109,7 @@ static void c16k_set_c(const unsigned char source_a, unsigned char source_b, int INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const size_t length) { char width_pattern[100]; - int current_row, rows_needed, looper, first_check, second_check; + int current_row, rows, looper, first_check, second_check; int indexchaine; int list[2][C128_MAX] = {{0}}; char set[C128_MAX] = {0}, fset[C128_MAX], mode, last_set, current_set; @@ -117,14 +117,14 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s int values[C128_MAX] = {0}; int bar_characters; float glyph_count; - int errornum, first_sum, second_sum; + int error_number, first_sum, second_sum; int input_length; int gs1, c_count; /* Suppresses clang-analyzer-core.UndefinedBinaryOperatorResult warning on fset which is fully set */ assert(length > 0); - errornum = 0; + error_number = 0; strcpy(width_pattern, ""); input_length = length; @@ -287,13 +287,13 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s /* Calculate how tall the symbol will be */ glyph_count = glyph_count + 2.0; i = (int)glyph_count; - rows_needed = (i / 5); + rows = (i / 5); if (i % 5 > 0) { - rows_needed++; + rows++; } - if (rows_needed == 1) { - rows_needed = 2; + if (rows == 1) { + rows = 2; } /* start with the mode character - Table 2 */ @@ -319,7 +319,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s m = 6; } } - values[bar_characters] = (7 * (rows_needed - 2)) + m; /* see 4.3.4.2 */ + values[bar_characters] = (7 * (rows - 2)) + m; /* see 4.3.4.2 */ values[bar_characters + 1] = 96; /* FNC3 */ bar_characters += 2; } else { @@ -339,7 +339,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s m = 6; } } - values[bar_characters] = (7 * (rows_needed - 2)) + m; /* see 4.3.4.2 */ + values[bar_characters] = (7 * (rows - 2)) + m; /* see 4.3.4.2 */ bar_characters++; } @@ -457,7 +457,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s } #endif - for (current_row = 0; current_row < rows_needed; current_row++) { + for (current_row = 0; current_row < rows; current_row++) { int writer; int flip_flop; int len; @@ -491,7 +491,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s symbol->row_height[current_row] = 10; } - symbol->rows = rows_needed; + symbol->rows = rows; symbol->width = 70; symbol->output_options |= BARCODE_BIND; @@ -500,5 +500,5 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s symbol->border_width = 1; /* BS EN 12323:2005 Section 4.3.7 minimum (note change from previous default 2) */ } - return errornum; + return error_number; } diff --git a/backend/common.c b/backend/common.c index 3690d83b..533bd028 100644 --- a/backend/common.c +++ b/backend/common.c @@ -135,7 +135,7 @@ INTERNAL int posn(const char set_string[], const char data) { return -1; } -/* Return true (1) if a module is dark/black/colour, otherwise false (0) */ +/* Return true (1-8) if a module is dark/black/colour, otherwise false (0) */ INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) { if (symbol->symbology == BARCODE_ULTRA) { return symbol->encoded_data[y_coord][x_coord]; @@ -154,7 +154,7 @@ INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, c symbol->encoded_data[y_coord][x_coord] = colour; } -/* Set (or unset) a module to white */ +/* Set a dark/black module to white (i.e. unset) */ INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) { symbol->encoded_data[y_coord][x_coord / 8] &= ~(1 << (x_coord % 8)); } @@ -193,10 +193,9 @@ INTERNAL void expand(struct zint_symbol *symbol, const char data[]) { symbol->rows = symbol->rows + 1; } -/* Indicates which symbologies can have row binding - * Note: if change this must also change version in frontend/main.c */ +/* Indicates which symbologies can have row binding */ INTERNAL int is_stackable(const int symbology) { - if (symbology < BARCODE_PDF417) { + if (symbology < BARCODE_PHARMA_TWO && symbology != BARCODE_POSTNET) { return 1; } @@ -218,8 +217,7 @@ INTERNAL int is_stackable(const int symbology) { return 0; } -/* Indicates which symbols can have addon (EAN-2 and EAN-5) - * Note: if change this must also change version in frontend/main.c */ +/* Indicates which symbols can have addon (EAN-2 and EAN-5) */ INTERNAL int is_extendable(const int symbology) { switch (symbology) { diff --git a/backend/common.h b/backend/common.h index 2ad54d9e..52b59cdf 100644 --- a/backend/common.h +++ b/backend/common.h @@ -89,7 +89,8 @@ extern "C" { INTERNAL int is_composite(const int symbology); INTERNAL int istwodigits(const unsigned char source[], const int length, const int position); INTERNAL unsigned int decode_utf8(unsigned int *state, unsigned int *codep, const unsigned char byte); - INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], size_t *length, int disallow_4byte); + INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], + size_t *length, int disallow_4byte); INTERNAL void set_minimum_height(struct zint_symbol *symbol, const int min_height); typedef unsigned int *(*pn_head_costs)(unsigned int state[]); diff --git a/backend/composite.c b/backend/composite.c index 682a5338..d41619cf 100644 --- a/backend/composite.c +++ b/backend/composite.c @@ -1349,7 +1349,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha return 0; } -static int linear_dummy_run(unsigned char *source, int length) { +static int linear_dummy_run(unsigned char *source, int length, char *errtxt) { struct zint_symbol *dummy; int error_number; int linear_width; @@ -1359,6 +1359,9 @@ static int linear_dummy_run(unsigned char *source, int length) { dummy->option_1 = 3; error_number = ean_128(dummy, source, length); linear_width = dummy->width; + if (error_number != 0) { + strcpy(errtxt, dummy->errtxt); + } ZBarcode_Delete(dummy); if (error_number == 0) { @@ -1404,9 +1407,9 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l if (symbol->symbology == BARCODE_GS1_128_CC) { /* Do a test run of encoding the linear component to establish its width */ - linear_width = linear_dummy_run((unsigned char *) symbol->primary, pri_len); + linear_width = linear_dummy_run((unsigned char *) symbol->primary, pri_len, symbol->errtxt); if (linear_width == 0) { - strcpy(symbol->errtxt, "448: Invalid data"); + strcat(symbol->errtxt, " in linear component"); return ZINT_ERROR_INVALID_DATA; } if (symbol->debug & ZINT_DEBUG_PRINT) { @@ -1557,7 +1560,7 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l if (error_number != 0) { strcpy(symbol->errtxt, linear->errtxt); - strcat(symbol->errtxt, " in linear component "); + strcat(symbol->errtxt, " in linear component"); ZBarcode_Delete(linear); return error_number; } diff --git a/backend/dmatrix.c b/backend/dmatrix.c index 2fe14a65..639d6d21 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -55,7 +55,7 @@ #include "reedsol.h" #include "dmatrix.h" -/* Annex M placement alorithm low level */ +/* Annex M placement algorithm low level */ static void ecc200placementbit(int *array, const int NR, const int NC, int r, int c, const int p, const char b) { if (r < 0) { r += NR; diff --git a/backend/eci.c b/backend/eci.c index 42277904..d07ae347 100644 --- a/backend/eci.c +++ b/backend/eci.c @@ -45,8 +45,8 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch int ext; int done; - if (eci == 26) { - /* Unicode mode, do not process - just copy data across */ + if (eci == 26 || eci == 899) { + /* Unicode or 8-bit binary data, do not process - just copy data across */ memcpy(dest, source, *length); dest[*length] = '\0'; return 0; diff --git a/backend/emf.c b/backend/emf.c index 4d068700..d66640f1 100644 --- a/backend/emf.c +++ b/backend/emf.c @@ -81,12 +81,28 @@ static int count_hexagons(struct zint_symbol *symbol) { return hexagons; } -static int count_strings(struct zint_symbol *symbol) { +static int count_strings(struct zint_symbol *symbol, int *fsize, int *fsize2, int *halign, int *halign1, int *halign2) { int strings = 0; struct zint_vector_string *str; + *fsize = *fsize2 = *halign = *halign1 = *halign2 = 0; + str = symbol->vector->strings; while (str) { + /* Allow 2 font sizes */ + if (*fsize == 0) { + *fsize = (int) str->fsize; + } else if (str->fsize != *fsize && *fsize2 == 0) { + *fsize2 = (int) str->fsize; + } + /* Only 3 haligns possible */ + if (str->halign) { + if (str->halign == 1) { + *halign1 = str->halign; + } else { + *halign2 = str->halign; + } + } strings++; str = str->next; } @@ -126,8 +142,22 @@ static int bump_up(int input) { return input; } -INTERNAL int emf_plot(struct zint_symbol *symbol) { - int i,j; +static int utfle_length(unsigned char *input, int length) { + int result = 0; + int i; + + for (i = 0; i < length; i++) { + result++; + if (input[i] >= 0x80) { /* 2 byte UTF-8 counts as one UTF-16LE character */ + i++; + } + } + + return result; +} + +INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { + int i; FILE *emf_file; int fgred, fggrn, fgblu, bgred, bggrn, bgblu; int error_number = 0; @@ -140,8 +170,11 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { int colours_used = 0; int rectangle_count_bycolour[9]; unsigned char *this_string[6]; - uint32_t spacing; + int width, height; + int utfle_len; + int bumped_len; int draw_background = 1; + int bold; float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy; @@ -152,6 +185,8 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { emr_header_t emr_header; emr_eof_t emr_eof; + emr_mapmode_t emr_mapmode; + emr_setworldtransform_t emr_setworldtransform; emr_createbrushindirect_t emr_createbrushindirect_fg; emr_createbrushindirect_t emr_createbrushindirect_bg; emr_createbrushindirect_t emr_createbrushindirect_colour[8]; // Used for colour symbols only @@ -161,17 +196,31 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { emr_createpen_t emr_createpen; emr_selectobject_t emr_selectobject_pen; emr_rectangle_t background; - emr_extcreatefontindirectw_t emr_extcreatefontindirectw; emr_settextcolor_t emr_settextcolor; + + int fsize; + emr_extcreatefontindirectw_t emr_extcreatefontindirectw; emr_selectobject_t emr_selectobject_font; - //emr_extcreatefontindirectw_t emr_extcreatefontindirectw_big; - //emr_selectobject_t emr_selectobject_font_big; + int fsize2; + emr_extcreatefontindirectw_t emr_extcreatefontindirectw2; + emr_selectobject_t emr_selectobject_font2; + int halign; + emr_settextalign_t emr_settextalign; + int halign1; + emr_settextalign_t emr_settextalign1; + int halign2; + emr_settextalign_t emr_settextalign2; + + int current_fsize; + int current_halign; #ifdef _MSC_VER emr_rectangle_t *rectangle; emr_ellipse_t *circle; emr_polygon_t *hexagon; emr_exttextoutw_t *text; + int *text_fsizes; + int *text_haligns; #endif fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); @@ -190,18 +239,22 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { rectangle_count = count_rectangles(symbol); circle_count = count_circles(symbol); hexagon_count = count_hexagons(symbol); - string_count = count_strings(symbol); + string_count = count_strings(symbol, &fsize, &fsize2, &halign, &halign1, &halign2); #ifndef _MSC_VER emr_rectangle_t rectangle[rectangle_count ? rectangle_count : 1]; // Avoid sanitize runtime error by making always non-zero emr_ellipse_t circle[circle_count ? circle_count : 1]; emr_polygon_t hexagon[hexagon_count ? hexagon_count : 1]; emr_exttextoutw_t text[string_count ? string_count: 1]; + int text_fsizes[string_count ? string_count: 1]; + int text_haligns[string_count ? string_count: 1]; #else rectangle = (emr_rectangle_t*) _alloca(rectangle_count * sizeof (emr_rectangle_t)); circle = (emr_ellipse_t*) _alloca(circle_count * sizeof (emr_ellipse_t)); hexagon = (emr_polygon_t*) _alloca(hexagon_count * sizeof (emr_polygon_t)); text = (emr_exttextoutw_t*) _alloca(string_count * sizeof (emr_exttextoutw_t)); + text_fsizes = (int *) _alloca(string_count * sizeof (int)); + text_haligns = (int *) _alloca(string_count * sizeof (int)); #endif //Calculate how many coloured rectangles @@ -220,12 +273,15 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { } } + width = ceil(symbol->vector->width); + height = ceil(symbol->vector->height); + /* Header */ emr_header.type = 0x00000001; // EMR_HEADER emr_header.size = 108; // Including extensions emr_header.emf_header.bounds.left = 0; - emr_header.emf_header.bounds.right = ceil(symbol->vector->width); - emr_header.emf_header.bounds.bottom = ceil(symbol->vector->height); + emr_header.emf_header.bounds.right = rotate_angle == 90 || rotate_angle == 270 ? height : width; + emr_header.emf_header.bounds.bottom = rotate_angle == 90 || rotate_angle == 270 ? width : height; emr_header.emf_header.bounds.top = 0; emr_header.emf_header.frame.left = 0; emr_header.emf_header.frame.right = emr_header.emf_header.bounds.right * 30; @@ -236,7 +292,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { if (symbol->symbology == BARCODE_ULTRA) { emr_header.emf_header.handles = 11; // Number of graphics objects } else { - emr_header.emf_header.handles = 4; + emr_header.emf_header.handles = fsize2 ? 5 : 4; } emr_header.emf_header.reserved = 0x0000; emr_header.emf_header.n_description = 0; @@ -256,6 +312,25 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { bytecount = 108; recordcount = 1; + emr_mapmode.type = 0x00000011; // EMR_SETMAPMODE + emr_mapmode.size = 12; + emr_mapmode.mapmode = 0x01; // MM_TEXT + bytecount += 12; + recordcount++; + + if (rotate_angle) { + emr_setworldtransform.type = 0x00000023; // EMR_SETWORLDTRANSFORM + emr_setworldtransform.size = 32; + emr_setworldtransform.m11 = rotate_angle == 90 ? 0.0f : rotate_angle == 180 ? -1.0f : 0.0f; + emr_setworldtransform.m12 = rotate_angle == 90 ? 1.0f : rotate_angle == 180 ? 0.0f : -1.0f; + emr_setworldtransform.m21 = rotate_angle == 90 ? -1.0f : rotate_angle == 180 ? 0.0f : 1.0f; + emr_setworldtransform.m22 = rotate_angle == 90 ? 0.0f : rotate_angle == 180 ? -1.0f : 0.0f; + emr_setworldtransform.dx = rotate_angle == 90 ? height : rotate_angle == 180 ? width : 0.0f; + emr_setworldtransform.dy = rotate_angle == 90 ? 0.0f : rotate_angle == 180 ? height : width; + bytecount += 32; + recordcount++; + } + /* Create Brushes */ emr_createbrushindirect_bg.type = 0x00000027; // EMR_CREATEBRUSHINDIRECT emr_createbrushindirect_bg.size = 24; @@ -444,37 +519,60 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { hex = hex->next; } - /* Create font records */ + /* Create font records, alignment records and text color */ if (symbol->vector->strings) { + bold = (symbol->output_options & BOLD_TEXT) && (!is_extendable(symbol->symbology) || (symbol->output_options & SMALL_TEXT)); + memset(&emr_extcreatefontindirectw, 0, sizeof(emr_extcreatefontindirectw)); emr_extcreatefontindirectw.type = 0x00000052; // EMR_EXTCREATEFONTINDIRECTW emr_extcreatefontindirectw.size = 104; - emr_extcreatefontindirectw.ih_fonts = 4; - emr_extcreatefontindirectw.elw.height = 16 * symbol->scale; + emr_extcreatefontindirectw.ih_fonts = 11; + emr_extcreatefontindirectw.elw.height = fsize; emr_extcreatefontindirectw.elw.width = 0; // automatic - emr_extcreatefontindirectw.elw.escapement = 0; - emr_extcreatefontindirectw.elw.orientation = 0; - emr_extcreatefontindirectw.elw.weight = 400; - emr_extcreatefontindirectw.elw.italic = 0x00; - emr_extcreatefontindirectw.elw.underline = 0x00; - emr_extcreatefontindirectw.elw.strike_out = 0x00; - emr_extcreatefontindirectw.elw.char_set = 0x01; + emr_extcreatefontindirectw.elw.weight = bold ? 700 : 400; + emr_extcreatefontindirectw.elw.char_set = 0x00; // ANSI_CHARSET emr_extcreatefontindirectw.elw.out_precision = 0x00; // OUT_DEFAULT_PRECIS emr_extcreatefontindirectw.elw.clip_precision = 0x00; // CLIP_DEFAULT_PRECIS - emr_extcreatefontindirectw.elw.quality = 0x00; - emr_extcreatefontindirectw.elw.pitch_and_family = 0x00; - for (i = 0; i < 64; i++) { - emr_extcreatefontindirectw.elw.facename[i] = '\0'; - } + emr_extcreatefontindirectw.elw.pitch_and_family = 0x02 | (0x02 << 6); // FF_SWISS | VARIABLE_PITCH utfle_copy(emr_extcreatefontindirectw.elw.facename, (unsigned char*) "sans-serif", 10); bytecount += 104; recordcount++; - + emr_selectobject_font.type = 0x00000025; // EMR_SELECTOBJECT emr_selectobject_font.size = 12; - emr_selectobject_font.ih_object = 4; + emr_selectobject_font.ih_object = 11; bytecount += 12; recordcount++; - + + if (fsize2) { + memcpy(&emr_extcreatefontindirectw2, &emr_extcreatefontindirectw, sizeof(emr_extcreatefontindirectw)); + emr_extcreatefontindirectw2.ih_fonts = 12; + emr_extcreatefontindirectw2.elw.height = fsize2; + bytecount += 104; + recordcount++; + + emr_selectobject_font2.type = 0x00000025; // EMR_SELECTOBJECT + emr_selectobject_font2.size = 12; + emr_selectobject_font2.ih_object = 12; + bytecount += 12; + recordcount++; + } + + /* Note select aligns counted below in strings loop */ + + emr_settextalign.type = 0x00000016; // EMR_SETTEXTALIGN + emr_settextalign.size = 12; + emr_settextalign.text_alignment_mode = 0x0006 | 0x0018; // TA_CENTER | TA_BASELINE + if (halign1) { + emr_settextalign1.type = 0x00000016; // EMR_SETTEXTALIGN + emr_settextalign1.size = 12; + emr_settextalign1.text_alignment_mode = 0x0000 | 0x0018; // TA_LEFT | TA_BASELINE + } + if (halign2) { + emr_settextalign2.type = 0x00000016; // EMR_SETTEXTALIGN + emr_settextalign2.size = 12; + emr_settextalign2.text_alignment_mode = 0x0002 | 0x0018; // TA_RIGHT | TA_BASELINE + } + emr_settextcolor.type = 0x0000018; // EMR_SETTEXTCOLOR emr_settextcolor.size = 12; emr_settextcolor.color.red = fgred; @@ -486,38 +584,57 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { } //Text - str = symbol->vector->strings; this_text = 0; - while (str) { - this_string[this_text] = (unsigned char *) malloc(bump_up(str->length + 1) * 2); - text[this_text].type = 0x00000054; // EMR_EXTTEXTOUTW - text[this_text].size = 76 + (6 * bump_up(str->length + 1)); - text[this_text].bounds.top = 0; // ignored - text[this_text].bounds.left = 0; // ignored - text[this_text].bounds.right = 0xffffffff; // ignored - text[this_text].bounds.bottom = 0xffffffff; // ignored - text[this_text].i_graphics_mode = 0x00000001; // GM_COMPATIBLE - text[this_text].ex_scale = 1.0; - text[this_text].ey_scale = 1.0; - text[this_text].w_emr_text.reference.x = str->x - (4 * str->length * symbol->scale); // text left - text[this_text].w_emr_text.reference.y = str->y - (16 * symbol->scale); // text top - text[this_text].w_emr_text.chars = str->length; - text[this_text].w_emr_text.off_string = 76; - text[this_text].w_emr_text.options = 0; - text[this_text].w_emr_text.rectangle.top = 0; - text[this_text].w_emr_text.rectangle.left = 0; - text[this_text].w_emr_text.rectangle.right = 0xffffffff; - text[this_text].w_emr_text.rectangle.bottom = 0xffffffff; - text[this_text].w_emr_text.off_dx = 76 + (2 * bump_up(str->length + 1)); - for (i = 0; i < bump_up(str->length + 1) * 2; i++) { - this_string[this_text][i] = '\0'; - } - utfle_copy(this_string[this_text], str->text, str->length); - bytecount += 76 + (6 * bump_up(str->length + 1)); - recordcount++; + // Loop over font sizes so that they're grouped together, so only have to select font twice at most + for (current_fsize = fsize; current_fsize; current_fsize = fsize2) { + str = symbol->vector->strings; + current_halign = -1; + while (str) { + if (str->fsize != current_fsize) { + str = str->next; + continue; + } + text_fsizes[this_text] = str->fsize; + text_haligns[this_text] = str->halign; + if (text_haligns[this_text] != current_halign) { + current_halign = text_haligns[this_text]; + bytecount += 12; + recordcount++; + } + assert(str->length > 0); + utfle_len = utfle_length(str->text, str->length); + bumped_len = bump_up(utfle_len) * 2; + this_string[this_text] = (unsigned char *) malloc(bumped_len); + memset(this_string[this_text], 0, bumped_len); + text[this_text].type = 0x00000054; // EMR_EXTTEXTOUTW + text[this_text].size = 76 + bumped_len; + text[this_text].bounds.top = 0; // ignored + text[this_text].bounds.left = 0; // ignored + text[this_text].bounds.right = 0xffffffff; // ignored + text[this_text].bounds.bottom = 0xffffffff; // ignored + text[this_text].i_graphics_mode = 0x00000002; // GM_ADVANCED + text[this_text].ex_scale = 1.0f; + text[this_text].ey_scale = 1.0f; + text[this_text].w_emr_text.reference.x = str->x; + text[this_text].w_emr_text.reference.y = str->y; + text[this_text].w_emr_text.chars = utfle_len; + text[this_text].w_emr_text.off_string = 76; + text[this_text].w_emr_text.options = 0; + text[this_text].w_emr_text.rectangle.top = 0; + text[this_text].w_emr_text.rectangle.left = 0; + text[this_text].w_emr_text.rectangle.right = 0xffffffff; + text[this_text].w_emr_text.rectangle.bottom = 0xffffffff; + text[this_text].w_emr_text.off_dx = 0; + utfle_copy(this_string[this_text], str->text, str->length); + bytecount += 76 + bumped_len; + recordcount++; - this_text++; - str = str->next; + this_text++; + str = str->next; + } + if (current_fsize == fsize2) { + break; + } } /* Create EOF record */ @@ -551,6 +668,12 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { fwrite(&emr_header, sizeof (emr_header_t), 1, emf_file); + fwrite(&emr_mapmode, sizeof (emr_mapmode_t), 1, emf_file); + + if (rotate_angle) { + fwrite(&emr_setworldtransform, sizeof (emr_setworldtransform_t), 1, emf_file); + } + fwrite(&emr_createbrushindirect_bg, sizeof (emr_createbrushindirect_t), 1, emf_file); if (symbol->symbology == BARCODE_ULTRA) { @@ -567,6 +690,9 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { if (symbol->vector->strings) { fwrite(&emr_extcreatefontindirectw, sizeof (emr_extcreatefontindirectw_t), 1, emf_file); + if (fsize2) { + fwrite(&emr_extcreatefontindirectw2, sizeof (emr_extcreatefontindirectw_t), 1, emf_file); + } } fwrite(&emr_selectobject_bgbrush, sizeof (emr_selectobject_t), 1, emf_file); @@ -633,14 +759,26 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { /* Suppresses clang-tidy clang-analyzer-core.UndefinedBinaryOperatorResult warning */ assert((symbol->vector->strings == NULL && string_count == 0) || (symbol->vector->strings != NULL && string_count > 0)); + current_fsize = fsize; + current_halign = -1; for (i = 0; i < string_count; i++) { - spacing = 8 * symbol->scale; - fwrite(&text[i], sizeof (emr_exttextoutw_t), 1, emf_file); - fwrite(this_string[i], bump_up(text[i].w_emr_text.chars + 1) * 2, 1, emf_file); - free(this_string[i]); - for (j = 0; j < bump_up(text[i].w_emr_text.chars + 1); j++) { - fwrite(&spacing, 4, 1, emf_file); + if (text_fsizes[i] != current_fsize) { + current_fsize = text_fsizes[i]; + fwrite(&emr_selectobject_font2, sizeof (emr_selectobject_t), 1, emf_file); } + if (text_haligns[i] != current_halign) { + current_halign = text_haligns[i]; + if (current_halign == 0) { + fwrite(&emr_settextalign, sizeof (emr_settextalign_t), 1, emf_file); + } else if (current_halign == 1) { + fwrite(&emr_settextalign1, sizeof (emr_settextalign_t), 1, emf_file); + } else { + fwrite(&emr_settextalign2, sizeof (emr_settextalign_t), 1, emf_file); + } + } + fwrite(&text[i], sizeof (emr_exttextoutw_t), 1, emf_file); + fwrite(this_string[i], bump_up(text[i].w_emr_text.chars) * 2, 1, emf_file); + free(this_string[i]); } fwrite(&emr_eof, sizeof (emr_eof_t), 1, emf_file); diff --git a/backend/emf.h b/backend/emf.h index 4182e187..cef437a5 100644 --- a/backend/emf.h +++ b/backend/emf.h @@ -135,6 +135,23 @@ extern "C" { emf_header_t emf_header; } emr_header_t; + typedef struct emr_mapmode { + uint32_t type; + uint32_t size; + uint32_t mapmode; + } emr_mapmode_t; + + typedef struct emr_setworldtransform { + uint32_t type; + uint32_t size; + float m11; + float m12; + float m21; + float m22; + float dx; + float dy; + } emr_setworldtransform_t; + typedef struct emr_createbrushindirect { uint32_t type; uint32_t size; @@ -187,6 +204,12 @@ extern "C" { log_font_t elw; } emr_extcreatefontindirectw_t; + typedef struct emr_settextalign { + uint32_t type; + uint32_t size; + uint32_t text_alignment_mode; + } emr_settextalign_t; + typedef struct emr_settextcolor { uint32_t type; uint32_t size; diff --git a/backend/font.h b/backend/font.h index 2ae76c3a..d4c3ced9 100644 --- a/backend/font.h +++ b/backend/font.h @@ -132,7 +132,6 @@ static font_item ascii_font[] = { 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, /* | */ 0, 48, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 48, /* } */ 0, 32, 82, 74, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ~ */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*  */ 0, 0, 8, 8, 0, 8, 8, 8, 8, 8, 8, 8, 0, 0, /* ¡ */ 0, 0, 0, 0, 16, 60, 82, 80, 80, 80, 82, 60, 16, 0, /* ¢ */ 0, 0, 0, 12, 18, 16, 16, 60, 16, 16, 60, 18, 0, 0, /* £ */ @@ -329,7 +328,6 @@ static font_item small_font[] = { 0, 2, 2, 2, 2, 2, 2, 0, 0, /* | */ 0, 4, 2, 3, 2, 2, 4, 0, 0, /* } */ 0, 5, 10, 0, 0, 0, 0, 0, 0, /* ~ */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, /*  */ 0, 2, 0, 2, 2, 2, 2, 0, 0, /* ¡ */ 0, 0, 2, 7, 10, 10, 7, 2, 0, /* ¢ */ 0, 0, 3, 4, 14, 4, 11, 0, 0, /* £ */ diff --git a/backend/gridmtx.c b/backend/gridmtx.c index a7642856..bfb04bef 100644 --- a/backend/gridmtx.c +++ b/backend/gridmtx.c @@ -221,7 +221,7 @@ static void gm_cur_cost(unsigned int state[], const unsigned int gbdata[], const /* Calculate optimized encoding modes */ static void define_mode(char* mode, const unsigned int gbdata[], const size_t length, const int debug) { - static const char mode_types[] = { GM_CHINESE, GM_NUMBER, GM_LOWER, GM_UPPER, GM_MIXED, GM_BYTE }; /* Must be in same order as GM_H etc */ + static const char mode_types[] = { GM_CHINESE, GM_NUMBER, GM_LOWER, GM_UPPER, GM_MIXED, GM_BYTE, '\0' }; /* Must be in same order as GM_H etc */ unsigned int state[3] = { 0 /*numeral_end*/, 0 /*numeral_cost*/, 0 /*byte_count*/ }; pn_define_mode(mode, gbdata, length, debug, state, mode_types, GM_NUM_MODES, gm_head_costs, gm_switch_cost, gm_eod_cost, gm_cur_cost); diff --git a/backend/hanxin.c b/backend/hanxin.c index 15dff6bf..25db2743 100644 --- a/backend/hanxin.c +++ b/backend/hanxin.c @@ -438,7 +438,7 @@ static void hx_cur_cost(unsigned int state[], const unsigned int gbdata[], const /* Calculate optimized encoding modes */ static void hx_define_mode(char* mode, const unsigned int gbdata[], const size_t length, const int debug) { - static const char mode_types[] = { 'n', 't', 'b', '1', '2', 'd', 'f' }; /* Must be in same order as HX_N etc */ + static const char mode_types[] = { 'n', 't', 'b', '1', '2', 'd', 'f', '\0' }; /* Must be in same order as HX_N etc */ unsigned int state[5] = { 0 /*numeric_end*/, 0 /*numeric_cost*/, 1 /*text_submode*/, 0 /*fourbyte_end*/, 0 /*fourbyte_cost*/ }; pn_define_mode(mode, gbdata, length, debug, state, mode_types, HX_NUM_MODES, hx_head_costs, hx_switch_cost, hx_eod_cost, hx_cur_cost); diff --git a/backend/library.c b/backend/library.c index 86f75ade..62513921 100644 --- a/backend/library.c +++ b/backend/library.c @@ -59,7 +59,7 @@ struct zint_symbol *ZBarcode_Create() { strcpy(symbol->bgcolour, "ffffff"); symbol->bgcolor = &symbol->bgcolour[0]; strcpy(symbol->outfile, "out.png"); - symbol->scale = 1.0; + symbol->scale = 1.0f; symbol->option_1 = -1; symbol->option_2 = 0; symbol->option_3 = 0; @@ -71,7 +71,7 @@ struct zint_symbol *ZBarcode_Create() { symbol->bitmap_height = 0; symbol->alphamap = NULL; symbol->eci = 0; // Default 0 uses ECI 3 - symbol->dot_size = 4.0 / 5.0; + symbol->dot_size = 4.0f / 5.0f; symbol->vector = NULL; symbol->debug = 0; symbol->warn_level = WARN_DEFAULT; @@ -83,6 +83,8 @@ INTERNAL void vector_free(struct zint_symbol *symbol); /* Free vector structures void ZBarcode_Clear(struct zint_symbol *symbol) { int i, j; + if (!symbol) return; + for (i = 0; i < symbol->rows; i++) { for (j = 0; j < symbol->width; j++) { unset_module(symbol, i, j); @@ -108,6 +110,8 @@ void ZBarcode_Clear(struct zint_symbol *symbol) { } void ZBarcode_Delete(struct zint_symbol *symbol) { + if (!symbol) return; + if (symbol->bitmap != NULL) free(symbol->bitmap); if (symbol->alphamap != NULL) @@ -196,7 +200,7 @@ static void error_tag(char error_string[], int error_number) { char error_buffer[100]; strcpy(error_buffer, error_string); - if (error_number > 4) { + if (error_number >= ZINT_ERROR) { strcpy(error_string, "Error "); } else { strcpy(error_string, "Warning "); @@ -426,12 +430,13 @@ static int gs1_compliant(const int symbology) { return result; } -static int is_matrix(const int symbology) { - /* Returns 1 if symbology is a matrix design */ +static int is_dotty(const int symbology) { + /* Returns 1 if symbology is a matrix design renderable as dots */ int result = 0; switch (symbology) { + /* Note MAXICODE and ULTRA absent */ case BARCODE_QRCODE: case BARCODE_DATAMATRIX: case BARCODE_MICROQR: @@ -453,6 +458,25 @@ static int is_matrix(const int symbology) { return result; } +static int is_fixed_ratio(const int symbology) { + /* Returns 1 if symbology has fixed aspect ratio (matrix design) */ + + int result = 0; + + if (is_dotty(symbology)) { + return 1; + } + + switch (symbology) { + case BARCODE_MAXICODE: + case BARCODE_ULTRA: + result = 1; + break; + } + + return result; +} + static int is_linear(const int symbology) { /* Returns 1 if symbology is linear (1 dimensional) */ @@ -541,6 +565,119 @@ static int supports_eci(const int symbology) { return result; } +static int has_hrt(const int symbology) { + /* Returns 1 if symbology supports HRT */ + + if (is_fixed_ratio(symbology)) { + return 0; + } + + switch (symbology) { /* These don't support HRT */ + case BARCODE_CODE16K: + case BARCODE_CODE49: + case BARCODE_FLAT: + case BARCODE_POSTNET: + case BARCODE_FIM: + case BARCODE_PHARMA: + case BARCODE_PHARMA_TWO: + case BARCODE_PDF417: + case BARCODE_PDF417COMP: + case BARCODE_AUSPOST: + case BARCODE_AUSREPLY: + case BARCODE_AUSROUTE: + case BARCODE_AUSREDIRECT: + case BARCODE_RM4SCC: + case BARCODE_CODABLOCKF: + case BARCODE_JAPANPOST: + case BARCODE_DBAR_STK: + case BARCODE_DBAR_OMNSTK: + case BARCODE_DBAR_EXPSTK: + case BARCODE_PLANET: + case BARCODE_MICROPDF417: + case BARCODE_USPS_IMAIL: + case BARCODE_KIX: + case BARCODE_DAFT: + case BARCODE_HIBC_PDF: + case BARCODE_HIBC_MICPDF: + case BARCODE_HIBC_BLOCKF: + case BARCODE_MAILMARK: + case BARCODE_DBAR_STK_CC: + case BARCODE_DBAR_OMNSTK_CC: + case BARCODE_DBAR_EXPSTK_CC: + return 0; + break; + } + + return 1; +} + +unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag) { + unsigned int result = 0; + + if (!ZBarcode_ValidID(symbol_id)) { + return 0; + } + + if ((cap_flag & ZINT_CAP_HRT) && has_hrt(symbol_id)) { + result |= ZINT_CAP_HRT; + } + if ((cap_flag & ZINT_CAP_STACKABLE) && is_stackable(symbol_id)) { + result |= ZINT_CAP_STACKABLE; + } + if ((cap_flag & ZINT_CAP_EXTENDABLE) && is_extendable(symbol_id)) { + result |= ZINT_CAP_EXTENDABLE; + } + if ((cap_flag & ZINT_CAP_COMPOSITE) && is_composite(symbol_id)) { + result |= ZINT_CAP_COMPOSITE; + } + if ((cap_flag & ZINT_CAP_ECI) && supports_eci(symbol_id)) { + result |= ZINT_CAP_ECI; + } + if ((cap_flag & ZINT_CAP_GS1) && gs1_compliant(symbol_id)) { + result |= ZINT_CAP_GS1; + } + if ((cap_flag & ZINT_CAP_DOTTY) && is_dotty(symbol_id)) { + result |= ZINT_CAP_DOTTY; + } + if ((cap_flag & ZINT_CAP_FIXED_RATIO) && is_fixed_ratio(symbol_id)) { + result |= ZINT_CAP_FIXED_RATIO; + } + if (cap_flag & ZINT_CAP_READER_INIT) { + /* Note does not include HIBC versions */ + switch (symbol_id) { + case BARCODE_CODE128: /* Note does not include GS1_128 or NVE18 */ + case BARCODE_CODE128B: + case BARCODE_CODE16K: + case BARCODE_CODABLOCKF: + case BARCODE_PDF417: + case BARCODE_PDF417COMP: + case BARCODE_DATAMATRIX: + case BARCODE_MICROPDF417: + case BARCODE_AZTEC: + case BARCODE_DOTCODE: + case BARCODE_GRIDMATRIX: + case BARCODE_ULTRA: + result |= ZINT_CAP_READER_INIT; + break; + } + } + if (cap_flag & ZINT_CAP_FULL_MULTIBYTE) { + switch (symbol_id) { + case BARCODE_QRCODE: + case BARCODE_MICROQR: + //case BARCODE_HIBC_QR: Note character set restricted to ASCII subset + //case BARCODE_UPNQR: Note does not use Kanji mode + case BARCODE_RMQR: + case BARCODE_HANXIN: + case BARCODE_GRIDMATRIX: + result |= ZINT_CAP_FULL_MULTIBYTE; + break; + } + } + + return result; +} + int ZBarcode_ValidID(int symbol_id) { /* Checks whether a symbology is supported */ @@ -1019,8 +1156,16 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int #ifdef _MSC_VER unsigned char* local_source; #endif + + if (!symbol) return ZINT_ERROR_INVALID_DATA; + error_number = 0; + if (source == NULL) { + strcpy(symbol->errtxt, "200: Input data NULL"); + error_tag(symbol->errtxt, ZINT_ERROR_INVALID_DATA); + return ZINT_ERROR_INVALID_DATA; + } if (in_length <= 0) { in_length = (int)ustrlen(source); } @@ -1208,7 +1353,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int error_number = ZINT_ERROR_INVALID_OPTION; } - if ((symbol->dot_size < 0.01) || (symbol->dot_size > 20.0)) { + if ((symbol->dot_size < 0.01f) || (symbol->dot_size > 20.0f)) { strcpy(symbol->errtxt, "221: Invalid dot size"); error_number = ZINT_ERROR_INVALID_OPTION; } @@ -1217,7 +1362,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int symbol->input_mode = DATA_MODE; /* Reset completely */ } - if (error_number > 4) { + if (error_number >= ZINT_ERROR) { error_tag(symbol->errtxt, error_number); return error_number; } else { @@ -1251,6 +1396,9 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int #endif error_number = gs1_verify(symbol, local_source, in_length, reduced); if (error_number != 0) { + if (is_composite(symbol->symbology)) { + strcat(symbol->errtxt, " in 2D component"); + } error_tag(symbol->errtxt, error_number); return error_number; } @@ -1287,7 +1435,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int } error_tag(symbol->errtxt, error_number); - if (error_number < 5) { + if (error_number < ZINT_ERROR) { check_row_heights(symbol); } @@ -1297,6 +1445,8 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) { int error_number; + if (!symbol) return ZINT_ERROR_INVALID_DATA; + switch (rotate_angle) { case 0: case 90: @@ -1310,7 +1460,7 @@ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) { } if (symbol->output_options & BARCODE_DOTTY_MODE) { - if (!(is_matrix(symbol->symbology))) { + if (!(is_dotty(symbol->symbology))) { strcpy(symbol->errtxt, "224: Selected symbology cannot be rendered as dots"); error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION); return ZINT_ERROR_INVALID_OPTION; @@ -1326,31 +1476,31 @@ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) { to_upper((unsigned char*) output); if (!(strcmp(output, "PNG"))) { - if (symbol->scale < 1.0) { + if (symbol->scale < 1.0f) { symbol->text[0] = '\0'; } error_number = plot_raster(symbol, rotate_angle, OUT_PNG_FILE); } else if (!(strcmp(output, "BMP"))) { - if (symbol->scale < 1.0) { + if (symbol->scale < 1.0f) { symbol->text[0] = '\0'; } error_number = plot_raster(symbol, rotate_angle, OUT_BMP_FILE); } else if (!(strcmp(output, "PCX"))) { - if (symbol->scale < 1.0) { + if (symbol->scale < 1.0f) { symbol->text[0] = '\0'; } error_number = plot_raster(symbol, rotate_angle, OUT_PCX_FILE); } else if (!(strcmp(output, "GIF"))) { - if (symbol->scale < 1.0) { + if (symbol->scale < 1.0f) { symbol->text[0] = '\0'; } error_number = plot_raster(symbol, rotate_angle, OUT_GIF_FILE); } else if (!(strcmp(output, "TIF"))) { - if (symbol->scale < 1.0) { + if (symbol->scale < 1.0f) { symbol->text[0] = '\0'; } error_number = plot_raster(symbol, rotate_angle, OUT_TIF_FILE); @@ -1384,6 +1534,8 @@ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) { int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle) { int error_number; + if (!symbol) return ZINT_ERROR_INVALID_DATA; + switch (rotate_angle) { case 0: case 90: @@ -1397,7 +1549,7 @@ int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle) { } if (symbol->output_options & BARCODE_DOTTY_MODE) { - if (!(is_matrix(symbol->symbology))) { + if (!(is_dotty(symbol->symbology))) { strcpy(symbol->errtxt, "237: Selected symbology cannot be rendered as dots"); error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION); return ZINT_ERROR_INVALID_OPTION; @@ -1412,6 +1564,8 @@ int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle) { int ZBarcode_Buffer_Vector(struct zint_symbol *symbol, int rotate_angle) { int error_number; + if (!symbol) return ZINT_ERROR_INVALID_DATA; + switch (rotate_angle) { case 0: case 90: @@ -1425,7 +1579,7 @@ int ZBarcode_Buffer_Vector(struct zint_symbol *symbol, int rotate_angle) { } if (symbol->output_options & BARCODE_DOTTY_MODE) { - if (!(is_matrix(symbol->symbology))) { + if (!(is_dotty(symbol->symbology))) { strcpy(symbol->errtxt, "238: Selected symbology cannot be rendered as dots"); error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION); return ZINT_ERROR_INVALID_OPTION; @@ -1442,7 +1596,7 @@ int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int first_err; error_number = ZBarcode_Encode(symbol, input, length); - if (error_number >= 5) { + if (error_number >= ZINT_ERROR) { return error_number; } @@ -1459,7 +1613,7 @@ int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int first_err; error_number = ZBarcode_Encode(symbol, input, length); - if (error_number >= 5) { + if (error_number >= ZINT_ERROR) { return error_number; } @@ -1477,7 +1631,7 @@ int ZBarcode_Encode_and_Buffer_Vector(struct zint_symbol *symbol, unsigned char int first_err; error_number = ZBarcode_Encode(symbol, input, length); - if (error_number >= 5) { + if (error_number >= ZINT_ERROR) { return error_number; } @@ -1498,6 +1652,14 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) { int nRead = 0; int ret; + if (!symbol) return ZINT_ERROR_INVALID_DATA; + + if (!filename) { + strcpy(symbol->errtxt, "239: Filename NULL"); + error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION); + return ZINT_ERROR_INVALID_DATA; + } + if (!strcmp(filename, "-")) { file = stdin; fileLen = 7900; @@ -1568,7 +1730,7 @@ int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, i int first_err; error_number = ZBarcode_Encode_File(symbol, filename); - if (error_number >= 5) { + if (error_number >= ZINT_ERROR) { return error_number; } @@ -1586,7 +1748,7 @@ int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, int first_err; error_number = ZBarcode_Encode_File(symbol, filename); - if (error_number >= 5) { + if (error_number >= ZINT_ERROR) { return error_number; } @@ -1604,7 +1766,7 @@ int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, char *fil int first_err; error_number = ZBarcode_Encode_File(symbol, filename); - if (error_number >= 5) { + if (error_number >= ZINT_ERROR) { return error_number; } diff --git a/backend/maxicode.c b/backend/maxicode.c index 8773c57f..b1f2db22 100644 --- a/backend/maxicode.c +++ b/backend/maxicode.c @@ -36,10 +36,8 @@ #include "maxicode.h" #include "reedsol.h" -static int maxi_codeword[144]; - /* Handles error correction of primary message */ -static void maxi_do_primary_check() { +static void maxi_do_primary_check(int maxi_codeword[144]) { unsigned char data[15]; unsigned char results[15]; int j; @@ -60,7 +58,7 @@ static void maxi_do_primary_check() { } /* Handles error correction of odd characters in secondary */ -static void maxi_do_secondary_chk_odd(int ecclen) { +static void maxi_do_secondary_chk_odd(int maxi_codeword[144], int ecclen) { unsigned char data[100]; unsigned char results[30]; int j; @@ -84,7 +82,7 @@ static void maxi_do_secondary_chk_odd(int ecclen) { } /* Handles error correction of even characters in secondary */ -static void maxi_do_secondary_chk_even(int ecclen) { +static void maxi_do_secondary_chk_even(int maxi_codeword[144], int ecclen) { unsigned char data[100]; unsigned char results[30]; int j; @@ -145,7 +143,7 @@ static int bestSurroundingSet(int index, int length, int set[], int setval[], in } /* Format text according to Appendix A */ -static int maxi_text_process(int mode, unsigned char source[], int length, int eci) { +static int maxi_text_process(int maxi_codeword[144], int mode, unsigned char source[], int length, int eci) { /* This code doesn't make use of [Lock in C], [Lock in D] and [Lock in E] and so is not always the most efficient at compressing data, but should suffice for most applications */ @@ -532,7 +530,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e } /* Format structured primary for Mode 2 */ -static void maxi_do_primary_2(char postcode[], int country, int service) { +static void maxi_do_primary_2(int maxi_codeword[144], char postcode[], int country, int service) { size_t postcode_length; int postcode_num, i; @@ -558,7 +556,7 @@ static void maxi_do_primary_2(char postcode[], int country, int service) { } /* Format structured primary for Mode 3 */ -static void maxi_do_primary_3(char postcode[], int country, int service) { +static void maxi_do_primary_3(int maxi_codeword[144], char postcode[], int country, int service) { int i, h; h = strlen(postcode); @@ -590,7 +588,8 @@ static void maxi_do_primary_3(char postcode[], int country, int service) { INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], const int length) { int i, j, block, bit, mode, lp = 0; - int bit_pattern[7], internal_error = 0, eclen; + int bit_pattern[7], error_number = 0, eclen; + int maxi_codeword[144] = {0}; char postcode[12], countrystr[4], servicestr[4]; mode = symbol->option_1; @@ -598,8 +597,6 @@ INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], strcpy(countrystr, ""); strcpy(servicestr, ""); - memset(maxi_codeword, 0, sizeof (maxi_codeword)); - if (mode == -1) { /* If mode is unspecified */ lp = strlen(symbol->primary); if (lp == 0) { @@ -627,13 +624,13 @@ INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], lp = strlen(symbol->primary); } if (lp != 15) { - strcpy(symbol->errtxt, "551: Invalid Primary String"); + strcpy(symbol->errtxt, "551: Invalid Primary Message"); return ZINT_ERROR_INVALID_DATA; } for (i = 9; i < 15; i++) { /* check that country code and service are numeric */ if ((symbol->primary[i] < '0') || (symbol->primary[i] > '9')) { - strcpy(symbol->errtxt, "552: Invalid Primary String"); + strcpy(symbol->errtxt, "552: Invalid Primary Message"); return ZINT_ERROR_INVALID_DATA; } } @@ -665,31 +662,31 @@ INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], service = atoi(servicestr); if (mode == 2) { - maxi_do_primary_2(postcode, countrycode, service); + maxi_do_primary_2(maxi_codeword, postcode, countrycode, service); } if (mode == 3) { - maxi_do_primary_3(postcode, countrycode, service); + maxi_do_primary_3(maxi_codeword, postcode, countrycode, service); } } else { maxi_codeword[0] = mode; } - i = maxi_text_process(mode, local_source, length, symbol->eci); + i = maxi_text_process(maxi_codeword, mode, local_source, length, symbol->eci); if (i == ZINT_ERROR_TOO_LONG) { strcpy(symbol->errtxt, "553: Input data too long"); return i; } /* All the data is sorted - now do error correction */ - maxi_do_primary_check(); /* always EEC */ + maxi_do_primary_check(maxi_codeword); /* always EEC */ if (mode == 5) eclen = 56; // 68 data codewords , 56 error corrections else eclen = 40; // 84 data codewords, 40 error corrections - maxi_do_secondary_chk_even(eclen / 2); // do error correction of even - maxi_do_secondary_chk_odd(eclen / 2); // do error correction of odd + maxi_do_secondary_chk_even(maxi_codeword, eclen / 2); // do error correction of even + maxi_do_secondary_chk_odd(maxi_codeword, eclen / 2); // do error correction of odd /* Copy data into symbol grid */ for (i = 0; i < 33; i++) { @@ -731,5 +728,5 @@ INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], symbol->width = 30; symbol->rows = 33; - return internal_error; + return error_number; } diff --git a/backend/medical.c b/backend/medical.c index 51e77ebd..af50b2e2 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -58,7 +58,8 @@ INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int - http://en.wikipedia.org/wiki/Pharmacode */ /* This code uses the One Track Pharamacode calculating algorithm as recommended by - the specification at http://www.laetus.com/laetus.php?request=file&id=69 */ + the specification at http://www.laetus.com/laetus.php?request=file&id=69 + (http://www.gomaro.ch/ftproot/Laetus_PHARMA-CODE.pdf) */ unsigned long int tester; int counter, error_number, h; diff --git a/backend/pdf417.c b/backend/pdf417.c index 713ec056..60185201 100644 --- a/backend/pdf417.c +++ b/backend/pdf417.c @@ -537,6 +537,7 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size int total, chainemc[PDF417_MAX_LEN], mclength, c1, c2, c3, dummy[35], calcheight; int liste[2][PDF417_MAX_LEN] = {{0}}; char pattern[580]; + int error_number = 0; int debug = symbol->debug & ZINT_DEBUG_PRINT; if (length > PDF417_MAX_LEN) { @@ -760,13 +761,15 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size } #endif + symbol->rows = mclength / symbol->option_2; + /* 818 - The CW string is finished */ - c1 = (mclength / symbol->option_2 - 1) / 3; - c2 = symbol->option_1 * 3 + (mclength / symbol->option_2 - 1) % 3; + c1 = (symbol->rows - 1) / 3; + c2 = symbol->option_1 * 3 + (symbol->rows - 1) % 3; c3 = symbol->option_2 - 1; /* we now encode each row */ - for (i = 0; i <= (mclength / symbol->option_2) - 1; i++) { + for (i = 0; i < symbol->rows; i++) { for (j = 0; j < symbol->option_2; j++) { dummy[j + 1] = chainemc[i * symbol->option_2 + j]; } @@ -821,11 +824,10 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size symbol->row_height[j] = calcheight; } - symbol->rows = (mclength / symbol->option_2); - symbol->width =(int)strlen(pattern); + symbol->width = (int) strlen(pattern); /* 843 */ - return 0; + return error_number; } /* 345 */ diff --git a/backend/postal.c b/backend/postal.c index b90743d8..fec8f374 100644 --- a/backend/postal.c +++ b/backend/postal.c @@ -135,7 +135,7 @@ INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int l set_module(symbol, 0, writer); } set_module(symbol, 1, writer); - writer += 3; + writer += 2; } symbol->row_height[0] = 6; symbol->row_height[1] = 6; @@ -145,7 +145,7 @@ INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int l return error_number; } -/* Handles the PLANET system used for item tracking in the US */ +/* Handles the PLANET system used for item tracking in the US */ static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { int i, sum, check_digit; int error_number; @@ -197,12 +197,13 @@ INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int set_module(symbol, 0, writer); } set_module(symbol, 1, writer); - writer += 3; + writer += 2; } symbol->row_height[0] = 6; symbol->row_height[1] = 6; symbol->rows = 2; symbol->width = writer - 1; + return error_number; } @@ -241,13 +242,13 @@ INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int lookup(NEON, KoreaTable, localstr[6], dest); expand(symbol, dest); ustrcpy(symbol->text, (unsigned char*) localstr); + return error_number; } /* The simplest barcode symbology ever! Supported by MS Word, so here it is! glyphs from http://en.wikipedia.org/wiki/Facing_Identification_Mark */ INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length) { - char dest[16] = {0}; if (length > 1) { @@ -279,11 +280,12 @@ INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length) } expand(symbol, dest); + return 0; } /* Handles the 4 State barcodes used in the UK by Royal Mail */ -static char rm4scc(char source[], unsigned char dest[], int length) { +static char rm4scc(unsigned char source[], char dest[], int length) { int i; int top, bottom, row, column, check_digit; char values[3], set_copy[] = KRSET; @@ -292,10 +294,10 @@ static char rm4scc(char source[], unsigned char dest[], int length) { bottom = 0; /* start character */ - strcpy((char*) dest, "1"); + strcpy(dest, "1"); for (i = 0; i < length; i++) { - lookup(KRSET, RoyalTable, source[i], (char*) dest); + lookup(KRSET, RoyalTable, source[i], dest); strcpy(values, RoyalValues[posn(KRSET, source[i])]); top += ctoi(values[0]); bottom += ctoi(values[1]); @@ -311,10 +313,10 @@ static char rm4scc(char source[], unsigned char dest[], int length) { column = 5; } check_digit = (6 * row) + column; - strcat((char*) dest, RoyalTable[check_digit]); + strcat(dest, RoyalTable[check_digit]); /* stop character */ - strcat((char*) dest, "0"); + strcat(dest, "0"); return set_copy[check_digit]; } @@ -337,7 +339,7 @@ INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int strcpy(symbol->errtxt, "489: Invalid characters in data"); return error_number; } - /*check = */rm4scc((char*) source, (unsigned char*) height_pattern, length); + /*check = */rm4scc(source, height_pattern, length); writer = 0; h = strlen(height_pattern); @@ -487,6 +489,7 @@ INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], i } expand(symbol, dest); + return error_number; } diff --git a/backend/ps.c b/backend/ps.c index fd3a37ab..7fe4f2f7 100644 --- a/backend/ps.c +++ b/backend/ps.c @@ -32,13 +32,14 @@ /* vim: set ts=4 sw=4 et : */ #include -#include -#include #include #include +#ifdef _MSC_VER +#include +#endif #include "common.h" -void colour_to_pscolor(int option, int colour, char* output) { +static void colour_to_pscolor(int option, int colour, char* output) { strcpy(output, ""); if ((option & CMYK_COLOUR) == 0) { // Use RGB colour space @@ -101,6 +102,35 @@ void colour_to_pscolor(int option, int colour, char* output) { } } +STATIC_UNLESS_ZINT_TEST void ps_convert(const unsigned char *string, unsigned char *ps_string) { + const unsigned char *s; + unsigned char *p = ps_string; + + for (s = string; *s; s++) { + switch (*s) { + case '(': + case ')': + case '\\': + *p++ = '\\'; + *p++ = *s; + break; + case 0xC2: /* See `to_iso8859_1()` in raster.c */ + *p++ = *++s; + break; + case 0xC3: + *p++ = *++s + 64; + break; + default: + if (*s < 0x80) { + *p++ = *s; + } + break; + + } + } + *p = '\0'; +} + INTERNAL int ps_plot(struct zint_symbol *symbol) { FILE *feps; int fgred, fggrn, fgblu, bgred, bggrn, bgblu; @@ -118,6 +148,13 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { struct zint_vector_circle *circle; struct zint_vector_string *string; const char *locale = NULL; + const char *font; + int i, len; + int ps_len = 0; + int iso_latin1 = 0; +#ifdef _MSC_VER + unsigned char *ps_string; +#endif if (strlen(symbol->bgcolour) > 6) { if ((ctoi(symbol->bgcolour[6]) == 0) && (ctoi(symbol->bgcolour[7]) == 0)) { @@ -197,6 +234,28 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { yellow_paper = 0.0; } + for (i = 0, len = (int) ustrlen(symbol->text); i < len; i++) { + switch (symbol->text[i]) { + case '(': + case ')': + case '\\': + ps_len += 2; + break; + default: + if (!iso_latin1 && symbol->text[i] >= 0x80) { + iso_latin1 = 1; + } + ps_len++; /* Will overcount 2 byte UTF-8 chars */ + break; + } + } + +#ifndef _MSC_VER + unsigned char ps_string[ps_len + 1]; +#else + ps_string = (unsigned char *) _alloca(ps_len + 1); +#endif + /* Start writing the header */ fprintf(feps, "%%!PS-Adobe-3.0 EPSF-3.0\n"); if (ZINT_VERSION_BUILD) { @@ -330,21 +389,44 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { } // Text + string = symbol->vector->strings; + if (string) { + if ((symbol->output_options & BOLD_TEXT) && (!is_extendable(symbol->symbology) || (symbol->output_options & SMALL_TEXT))) { + font = "Helvetica-Bold"; + } else { + font = "Helvetica"; + } + if (iso_latin1) { /* Change encoding to ISO 8859-1, see Postscript Language Reference Manual 2nd Edition Example 5.6 */ + fprintf(feps, "/%s findfont\n", font); + fprintf(feps, "dup length dict begin\n"); + fprintf(feps, "{1 index /FID ne {def} {pop pop} ifelse} forall\n"); + fprintf(feps, "/Encoding ISOLatin1Encoding def\n"); + fprintf(feps, "currentdict\n"); + fprintf(feps, "end\n"); + fprintf(feps, "/Helvetica-ISOLatin1 exch definefont pop\n"); + font = "Helvetica-ISOLatin1"; + } + } while (string) { + ps_convert(string->text, ps_string); fprintf(feps, "matrix currentmatrix\n"); - fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "/%s findfont\n", font); fprintf(feps, "%.2f scalefont setfont\n", string->fsize); fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", string->x, (symbol->vector->height - string->y)); - fprintf(feps, " (%s) stringwidth\n", string->text); + if (string->halign == 0 || string->halign == 2) { /* Need width for middle or right align */ + fprintf(feps, " (%s) stringwidth\n", ps_string); + } if (string->rotation != 0) { fprintf(feps, "gsave\n"); fprintf(feps, "%d rotate\n", 360 - string->rotation); } - fprintf(feps, "pop\n"); - fprintf(feps, "-2 div 0 rmoveto\n"); - fprintf(feps, " (%s) show\n", string->text); + if (string->halign == 0 || string->halign == 2) { + fprintf(feps, "pop\n"); + fprintf(feps, "%s 0 rmoveto\n", string->halign == 2 ? "neg" : "-2 div"); + } + fprintf(feps, " (%s) show\n", ps_string); if (string->rotation != 0) { fprintf(feps, "grestore\n"); } diff --git a/backend/qr.c b/backend/qr.c index 0346d33c..e82c8fb8 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -138,7 +138,7 @@ static int in_alpha(const unsigned int jisdata[], const size_t length, const uns #define QR_B 2 /* Byte */ #define QR_K 3 /* Kanji */ -static const char mode_types[] = { 'N', 'A', 'B', 'K', }; /* Must be in same order as QR_N etc */ +static const char mode_types[] = { 'N', 'A', 'B', 'K', '\0' }; /* Must be in same order as QR_N etc */ #define QR_NUM_MODES 4 diff --git a/backend/raster.c b/backend/raster.c index 80127e1c..34a5c889 100644 --- a/backend/raster.c +++ b/backend/raster.c @@ -67,14 +67,14 @@ static int buffer_plot(struct zint_symbol *symbol, char *pixelbuf) { int fgalpha, bgalpha; int row, column, i; int plot_alpha = 0; - + if (strlen(symbol->fgcolour) > 6) { fgalpha = (16 * ctoi(symbol->fgcolour[6])) + ctoi(symbol->fgcolour[7]); plot_alpha = 1; } else { fgalpha = 0xff; } - + if (strlen(symbol->bgcolour) > 6) { bgalpha = (16 * ctoi(symbol->bgcolour[6])) + ctoi(symbol->bgcolour[7]); plot_alpha = 1; @@ -359,7 +359,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo skip = 1; } - if ((letter > 127) && (letter < 161)) { + if ((letter >= 127) && (letter < 161)) { skip = 1; } @@ -384,8 +384,8 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo char *linePtr, *maxPtr; int x_start = 0; - if (letter > 128) { - glyph_no = letter - 66; + if (letter > 127) { + glyph_no = letter - 67; /* 161 - (127 - 33) */ } else { glyph_no = letter - 33; } @@ -432,7 +432,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo linePtr = pixelbuf + (yposn * image_width) + xposn; for (y = 0; y < max_y; y++) { int x_si, y_si; - char *pixelPtr; + char *pixelPtr = linePtr; /* Avoid warning */ for (y_si = 0; y_si < half_si; y_si++) { int extra_dot = 0; pixelPtr = linePtr; @@ -586,8 +586,7 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in int image_height, image_width; char *pixelbuf; int error_number; - int xoffset, yoffset; - int roffset, boffset; + int xoffset, yoffset, roffset, boffset; float scaler = symbol->scale; char *scaled_hexagon; int hexagon_size; @@ -664,26 +663,32 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int file_type) { float scaler = 2 * symbol->scale; - float half_scaler, dot_size_scaled; char *scaled_pixelbuf; int r, i; int scale_width, scale_height; int error_number = 0; - int xoffset, yoffset, image_width, image_height; - int roffset, boffset; + int image_width, image_height; + int xoffset, yoffset, roffset, boffset; + int dot_overspill = 0; + float dotradius_scaled; symbol->height = symbol->rows; // This is true because only 2d matrix symbols are processed here output_set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset); - image_width = symbol->width + xoffset + roffset; - image_height = symbol->height + yoffset + boffset; + dot_overspill = (int) ceil(symbol->dot_size - 1); /* Allow for exceeding 1X */ + if (dot_overspill < 0) { + dot_overspill = 0; + } + + image_width = symbol->width + dot_overspill + xoffset + roffset; + image_height = symbol->height + dot_overspill + yoffset + boffset; if (scaler < 2.0f) { scaler = 2.0f; } - scale_width = (image_width * scaler) + 1; - scale_height = (image_height * scaler) + 1; + scale_width = image_width * scaler; + scale_height = image_height * scaler; /* Apply scale options by creating another pixel buffer */ if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) { @@ -693,21 +698,22 @@ static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int f memset(scaled_pixelbuf, DEFAULT_PAPER, scale_width * scale_height); /* Plot the body of the symbol to the pixel buffer */ - half_scaler = scaler / 2.0f; - dot_size_scaled = (symbol->dot_size * scaler) / 2.0f; + dotradius_scaled = (symbol->dot_size * scaler) / 2.0f; for (r = 0; r < symbol->rows; r++) { - float row_scaled = (r + yoffset) * scaler + half_scaler; + float row_scaled = (r + yoffset) * scaler + dotradius_scaled; for (i = 0; i < symbol->width; i++) { if (module_is_set(symbol, r, i)) { draw_circle(scaled_pixelbuf, scale_width, scale_height, - (i + xoffset) * scaler + half_scaler, + (i + xoffset) * scaler + dotradius_scaled, row_scaled, - dot_size_scaled, + dotradius_scaled, DEFAULT_INK); } } } + // TODO: bind/box + error_number = save_raster_image_to_file(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle, file_type); if (rotate_angle || file_type != OUT_BUFFER || !(symbol->output_options & OUT_BUFFER_INTERMEDIATE)) { free(scaled_pixelbuf); @@ -759,12 +765,14 @@ static void to_iso8859_1(const unsigned char source[], unsigned char preprocesse static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int file_type) { int error_number; - float large_bar_height; - int textdone; - int main_width, comp_offset, addon_gap; + int large_bar_height; + int textdone = 0; + int main_width; + int comp_offset = 0; unsigned char addon[6]; + int addon_gap; + float addon_text_posn = 0.0f; int xoffset, yoffset, roffset, boffset; - float addon_text_posn; int textoffset; int default_text_posn; float row_height, row_posn; @@ -772,12 +780,13 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int int addon_latch = 0; unsigned char textpart1[5], textpart2[7], textpart3[7], textpart4[2]; int textpos; - int hide_text = 0; + int hide_text; int i, r; - int text_height; /* Font size */ + int text_height; /* Font pixel size (so whole integers) */ int text_gap; /* Gap between barcode and text */ int textflags = 0; + int guardoffset = 0; int image_width, image_height; char *pixelbuf; int next_yposn; @@ -789,7 +798,6 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int int scale_width, scale_height; char *scaled_pixelbuf; int horiz, vert; - int guardoffset = 0; /* Ignore scaling < 0.5 for raster as would drop modules */ if (scaler < 0.5f) { @@ -804,10 +812,8 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int } large_bar_height = output_large_bar_height(symbol); - textdone = 0; main_width = symbol->width; - comp_offset = 0; if (is_extendable(symbol->symbology)) { upceanflag = output_process_upcean(symbol, &main_width, &comp_offset, addon, &addon_gap); @@ -815,36 +821,32 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int output_set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset); - addon_text_posn = 0.0f; hide_text = ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)); + /* Note font sizes halved as in pixels */ if (upceanflag) { textflags = UPCEAN_TEXT; /* Small and bold not available for UPC/EAN */ + text_height = (UPCEAN_FONT_HEIGHT + 1) / 2; + text_gap = 1; } else { textflags = symbol->output_options & (SMALL_TEXT | BOLD_TEXT); + text_height = textflags & SMALL_TEXT ? (SMALL_FONT_HEIGHT + 1) / 2 : (NORMAL_FONT_HEIGHT + 1) / 2; + text_gap = 1; } if (hide_text) { - text_gap = 0; textoffset = upceanflag && upceanflag != 2 && upceanflag != 5 ? 5 : 0; /* Need 5X from bottom for guard bars */ } else { - /* Note font sizes halved as in pixels */ if (upceanflag) { - text_height = (UPCEAN_FONT_HEIGHT + 1) / 2; - } else if (textflags & SMALL_TEXT) { - text_height = (SMALL_FONT_HEIGHT + 1) / 2; - } else { - text_height = (NORMAL_FONT_HEIGHT + 1) / 2; - } - if (upceanflag) { - text_gap = 1; textoffset = (text_height > 5 ? text_height : 5) + text_gap; /* Need at least 5X for guard bars */ - guardoffset = textoffset - 5 + yoffset; } else { - text_gap = 1; textoffset = text_height + text_gap; } } + if (upceanflag) { + guardoffset = textoffset - 5 + boffset; + } + image_width = (symbol->width + xoffset + roffset) * si; image_height = (symbol->height + textoffset + yoffset + boffset) * si; @@ -857,22 +859,18 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int default_text_posn = image_height - (textoffset - text_gap) * si; row_height = 0.0f; - row_posn = textoffset + yoffset; - next_yposn = textoffset + yoffset; + row_posn = textoffset + boffset; /* Bottom up */ + next_yposn = textoffset + boffset; /* Plot the body of the symbol to the pixel buffer */ for (r = 0; r < symbol->rows; r++) { int plot_yposn; - int plot_height; + float plot_height; int this_row = symbol->rows - r - 1; /* invert r otherwise plots upside down */ int module_fill; row_posn += row_height; plot_yposn = next_yposn; - if (symbol->row_height[this_row] == 0) { - row_height = large_bar_height; - } else { - row_height = symbol->row_height[this_row]; - } + row_height = symbol->row_height[this_row] ? symbol->row_height[this_row] : large_bar_height; next_yposn = (int) (row_posn + row_height); plot_height = next_yposn - plot_yposn; @@ -886,13 +884,20 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int } while ((i + block_width < symbol->width) && 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 (upceanflag == 12 || upceanflag == 6) { /* UPC-A/E add-ons don't descend */ - plot_height = row_height > 8.0f ? row_height - 8.0f : 1; - plot_yposn = row_posn; - } else { - plot_height = row_height > 3.0f ? row_height - 3.0f : 1; - plot_yposn = row_posn - 5.0f; + plot_height = row_height - (text_height + text_gap) + 5.0f; + plot_yposn = row_posn - 5.0f; + if (plot_yposn < 0.0f) { + plot_yposn = 0.0f; } + if (upceanflag == 12 || upceanflag == 6) { /* UPC-A/E add-ons don't descend */ + plot_height -= 5.0f; + plot_yposn += 5.0f; + } + if (plot_height < 0.5f) { + plot_height = 0.5f; + } + /* Need to invert composite position */ + addon_text_posn = is_composite(symbol->symbology) ? image_height - (plot_yposn + plot_height + text_height + text_gap) * si : yoffset * si; addon_latch = 1; } if (module_fill) { @@ -1086,12 +1091,14 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int /* row binding */ if (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF) { for (r = 1; r < symbol->rows; r++) { + row_height = symbol->row_height[r - 1] ? symbol->row_height[r - 1] : large_bar_height; draw_bar(pixelbuf, xoffset * si, symbol->width * si, ((r * row_height) + textoffset + yoffset - sep_height / 2) * si, sep_height * si, image_width, image_height, DEFAULT_INK); } } else { for (r = 1; r < symbol->rows; r++) { /* Avoid 11-module start and 13-module stop chars */ + row_height = symbol->row_height[r - 1] ? symbol->row_height[r - 1] : large_bar_height; draw_bar(pixelbuf, (xoffset + 11) * si, (symbol->width - 24) * si, ((r * row_height) + textoffset + yoffset - sep_height / 2) * si, sep_height * si, image_width, image_height, DEFAULT_INK); } diff --git a/backend/svg.c b/backend/svg.c index bb42ac6c..ead5440c 100644 --- a/backend/svg.c +++ b/backend/svg.c @@ -125,6 +125,8 @@ INTERNAL int svg_plot(struct zint_symbol *symbol) { char bgcolour_string[7]; int bg_alpha = 0xff; int fg_alpha = 0xff; + const char *font_family = "Helvetica, sans-serif"; + int bold; struct zint_vector_rect *rect; struct zint_vector_hexagon *hex; @@ -278,10 +280,15 @@ INTERNAL int svg_plot(struct zint_symbol *symbol) { circle = circle->next; } + bold = (symbol->output_options & BOLD_TEXT) && (!is_extendable(symbol->symbology) || (symbol->output_options & SMALL_TEXT)); string = symbol->vector->strings; while (string) { - fprintf(fsvg, " x, string->y); - fprintf(fsvg, " font-family=\"Helvetica\" font-size=\"%.1f\"", string->fsize); + const char *halign = string->halign == 2 ? "end" : string->halign == 1 ? "start" : "middle"; + fprintf(fsvg, " x, string->y, halign); + fprintf(fsvg, " font-family=\"%s\" font-size=\"%.1f\"", font_family, string->fsize); + if (bold) { + fprintf(fsvg, " font-weight=\"bold\""); + } if (fg_alpha != 0xff) { fprintf(fsvg, " opacity=\"%.3f\"", (float) fg_alpha / 255.0); } diff --git a/backend/tests/data/emf/code128_egrave_bold.emf b/backend/tests/data/emf/code128_egrave_bold.emf new file mode 100644 index 0000000000000000000000000000000000000000..1979555bff2b464b130b4b1073860f12462f8525 GIT binary patch literal 1248 zcmaLW%_~G<6bA5T29p>{Ns}bWM=@k2D>DgM3`rJ~9r>K5Y0N0>Cdopww6KtcEF~+8 zSxJhOl_ZNNHeZVZ1&v_$9O03+XD2=%+CS= zl0+9g21d@|YKhG@ z)6BFw)UjAS(NP|&$RLjqW&=6wVAIV0f4859-Tk{>?q`^hwYVy=k!R@U$Sv48^8D6) zE^Cx(Wc)7Ilah7$y~ESWb^XrQPu0(ipQ~ROzf`|6eyx6E{8s(W z_`Ujr@kjNd@hA0X<1gxO#^2RHjDM2CrW~AhMmA;!`B;vlrXVI!>G#Hp|)AHnSo4)}+TzKX3V){rG#&ziJn-0r8LbBCR~f!77!C<#7zJ zab&q;8PA+<>QFV5onDpHR$BWcZVG|o=j1)H#GJAhoaDZ6G@($-DS_n;%zALqWF zeTd&nR6N7z@q3A$7B+eRMB)Xy-(%|S^iCWvAu-3FhgUa}dNEV8l6aZkE8b5(CO$|X z7C%WJ6+cZM6CbCa6F*PCDDL;-bsb6XE54(X;#1y?x{0LE?RKVScf{|~@8OuvpQYay ze?XrTpQkT~FVY{1KcYVte?osMzD$26{+#|&e1-l>{55@5e2xA_{4M<*j_LDUr@t5f zfa@mYqxdKK7xAz3Z{pwSKg561e~JI5`$mwiGmmRuPn~!Jy-|E8eYbdl-X`8o?-1{# zcZqk?4~iG*CGj%7U;H?IkRE%B?|H3=?@L}Sh@Te_e;3anQP^X%s>xtxz-(r~d;Q(P zSR2iJ<5%>%^dT|Z_avV^jzmRoI@|XSpPfhkH@nArt%&sCr<%F`&Qv$I59>aR+2yL{ c`gdRlX4h`A-lKK|Q%iOTeT_&n66NQA07})XlmGw# literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/itf14_bold.emf b/backend/tests/data/emf/itf14_bold.emf new file mode 100644 index 0000000000000000000000000000000000000000..bd9674975535a9512477e7b1bab2c81239a77d9d GIT binary patch literal 1552 zcmajfPe@cz7zOZeOkLz48WJKh3}Px~(LY+WaW+W|DiSVQ34%q2Nodrjg}5mQBqAbQ zxzUxYh=`C@ty;ATaTVc0BqCb1ay;jCuJbqueZ!f#@AtlU=gz#DTZo7`BvrK#@jM;i zb+a#`+7?m1J~k3jh_>d4Yw*Tg4~Kgv{$&W)Gsjgsu!!(6nkjIEUPhg_w;y`PToA&!8i%KaIJbvj{&+ zs`MSE9xfsElrZKsWn>;n-h(l{*PNf5K43m5A2L5LzhcgN#(65{Bk~*ORr#p-xO~E# z_ki=?GM|#qnBSAnne#j0JP*tlw7>X!w_hcL2j#sB~S literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/telenum_fg_bg.emf b/backend/tests/data/emf/telenum_fg_bg.emf index 1192c33913b6796f5f2bdea557f82177322b5c8a..f9c78727d25dd746928178345a7c2f8fd6cbf833 100644 GIT binary patch delta 206 zcmaFE`Gs?Wh+;Vd0yKy*Fnr==U{G-Nbz@*)Wcb3uz@R_T)SOcgsD=lK87F3jD{uoD zdT|r7EfEc7#r0N0#(0njk4oHVUF^~d-|4_gL<~7(e hFf`aF0NKTp=d#EvfCLR0j2Mi8G{|xhkN^~b*Z@Jh9a#VX delta 161 zcmeyu`G#|Xh+-K70yKy*FkInfU{G-Nbz@*)WO&2Ez@R(P)O=z^2rH1uATaTw7%L-4 z{lqspjAff68O51JK@t)`%mc(CRTmgSfON{_i7djhV3iCF_6$G_5={eQW+3(fVg`^3 VNsy=^gAs!>B95C+- zj$>`W(>kDSXyg=-!{Bz{IC*8_(e%@{zdFG0OaF>S!dgm?JE#_$b3n0JL={Kp6@nJx z`>5Si4W-&?iE~^}P&=r4Dvf)a#+$RaglWv8i@JgtOkzB>mYjPXogp9G|Fh0s=Jr1M zT<7kj)H4r%SME{I+|y(x?Q=TeJB=$(%3F=M2foL+`k(su8}H_Lnew^?32EJzeN#M_nKM(wc@pX=Ae_k4Y z75Ho8Zvua7{9WK1TsKo6sI;FSjeidOi}A04e>46g@Snzi1^(N(E}XP(71!ENjdA}E z>JDn5YAJ>OZ<_C-Mk)PnJ$UD3QIUbA0bpsMn)5kI*Vb^xH$U7ja**=es#i|#_w<#M z`!Ice9_`)hv|61pjvl_J^bDu@P<1M)tNVZB3PknshZ?iMQBbcrFigAN-I?qLMTZqo}~0piU$cj zcn}c};=zNbBK?#4U&Qy)8M>K+=Fox1&VDkP*`1wl20(>!`%UMIZ@4x_fSWby(PO#CS|PW4f$tsHJ| z=iB>v>X@arP{S^^L-gHSucJHULg@djGs)cEC--&lX-YkF^SAOC z^~__2ElB6ACVbSm@}zvsc%JJ=%JWPZSN~J~%=k>;FN_xgFByLs_>%GEz{|#00$(%! zI&i&>Y=cVA`L;!YcY(h*z8SdwE2~gx9`#E0iAwucYf<2H;CsgR1OLwbBkBj0=07xk z6!=f$$AO<1KMnlM_<7(L#xDcEGJb8`XG!0ZW<+x+)7;3{oUBvozZ<{ZmTCTguZvPI zJ@rJNpWZMvj~COtcy86}B=-U1I>}vRoZm-h_d0p2qgiqDGo^RXOsY-~b=Mu{FpmWk XP(-Pt^Xu&%QmS=d-YjEsl$-opUgL`I literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/upce_2addon_small_bold.emf b/backend/tests/data/emf/upce_2addon_small_bold.emf new file mode 100644 index 0000000000000000000000000000000000000000..b9e699081e5685cde5986f1faef3c86ba162683e GIT binary patch literal 1460 zcmb`G%`3!V5XZkuByUAX(k6xSmbcv_Quc%-2L}luYC}tMk{l!l$-zOAgB%>3931>X z{)_efu9-ah9N2@YZ!^Eo&dxk9^CSRdDYth9`~E?H-3)ZpQPZ;-Ac40EV33@y$Ue&f zsXy_pq95&}fxebv3VNtki|LTh=TS-TyiCwcyqjvLswwqW4Yvgb+f)su`k{UN6goS= z8g_Aj0csOD>|iTQ{WJDH>QNtM|7V{r*7kGqSo`jybY^aTSDvG-dQPJyHPP<|yv4Zc zguKmol755oI-SOK{vq!*-XHNH<6{v|8y}DOr17bUXN=E8e9riM#C12aB`RF!a)AOX z5nnaF9&!CwmZicvIxCspMtE+y0tF5ueq{VO;^+M4bHW7`*1t4<74aM6w-LWHejo7% zbE@%V+5lZLkj7V)~~zMdseT% M>ee%-iE>l?1qG{$V*mgE literal 0 HcmV?d00001 diff --git a/backend/tests/data/eps/code128_egrave_bold.eps b/backend/tests/data/eps/code128_egrave_bold.eps new file mode 100644 index 00000000..bc068f2d --- /dev/null +++ b/backend/tests/data/eps/code128_egrave_bold.eps @@ -0,0 +1,95 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Zint 2.9.1.9 +%%Title: Zint Generated Symbol +%%Pages: 0 +%%BoundingBox: 0 0 224 119 +%%EndComments +/TL { setlinewidth moveto lineto stroke } bind def +/TD { newpath 0 360 arc fill } bind def +/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def +/TB { 2 copy } bind def +/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def +/TE { pop pop } bind def +newpath +1.00 1.00 1.00 setrgbcolor +118.90 0.00 TB 0.00 224.00 TR +TE +0.00 0.00 0.00 setrgbcolor +100.00 18.90 TB 0.00 4.00 TR +TE +100.00 18.90 TB 6.00 2.00 TR +TE +100.00 18.90 TB 12.00 2.00 TR +TE +100.00 18.90 TB 22.00 2.00 TR +TE +100.00 18.90 TB 26.00 8.00 TR +TE +100.00 18.90 TB 36.00 6.00 TR +TE +100.00 18.90 TB 44.00 4.00 TR +TE +100.00 18.90 TB 54.00 2.00 TR +TE +100.00 18.90 TB 62.00 2.00 TR +TE +100.00 18.90 TB 66.00 2.00 TR +TE +100.00 18.90 TB 72.00 4.00 TR +TE +100.00 18.90 TB 78.00 2.00 TR +TE +100.00 18.90 TB 88.00 2.00 TR +TE +100.00 18.90 TB 98.00 4.00 TR +TE +100.00 18.90 TB 106.00 2.00 TR +TE +100.00 18.90 TB 110.00 2.00 TR +TE +100.00 18.90 TB 114.00 2.00 TR +TE +100.00 18.90 TB 120.00 8.00 TR +TE +100.00 18.90 TB 132.00 2.00 TR +TE +100.00 18.90 TB 138.00 2.00 TR +TE +100.00 18.90 TB 142.00 8.00 TR +TE +100.00 18.90 TB 154.00 4.00 TR +TE +100.00 18.90 TB 160.00 4.00 TR +TE +100.00 18.90 TB 166.00 8.00 TR +TE +100.00 18.90 TB 176.00 2.00 TR +TE +100.00 18.90 TB 184.00 4.00 TR +TE +100.00 18.90 TB 194.00 2.00 TR +TE +100.00 18.90 TB 198.00 4.00 TR +TE +100.00 18.90 TB 208.00 6.00 TR +TE +100.00 18.90 TB 216.00 2.00 TR +TE +100.00 18.90 TB 220.00 4.00 TR +TE +/Helvetica-Bold findfont +dup length dict begin +{1 index /FID ne {def} {pop pop} ifelse} forall +/Encoding ISOLatin1Encoding def +currentdict +end +/Helvetica-ISOLatin1 exch definefont pop +matrix currentmatrix +/Helvetica-ISOLatin1 findfont +14.00 scalefont setfont + 0 0 moveto 112.00 3.50 translate 0.00 rotate 0 0 moveto + (Égjpqy) stringwidth +pop +-2 div 0 rmoveto + (Égjpqy) show +setmatrix diff --git a/backend/tests/data/eps/code128_escape_latin1.eps b/backend/tests/data/eps/code128_escape_latin1.eps new file mode 100644 index 00000000..7cf28451 --- /dev/null +++ b/backend/tests/data/eps/code128_escape_latin1.eps @@ -0,0 +1,101 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Zint 2.9.1.9 +%%Title: Zint Generated Symbol +%%Pages: 0 +%%BoundingBox: 0 0 246 119 +%%EndComments +/TL { setlinewidth moveto lineto stroke } bind def +/TD { newpath 0 360 arc fill } bind def +/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def +/TB { 2 copy } bind def +/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def +/TE { pop pop } bind def +newpath +1.00 1.00 1.00 setrgbcolor +118.90 0.00 TB 0.00 246.00 TR +TE +0.00 0.00 0.00 setrgbcolor +100.00 18.90 TB 0.00 4.00 TR +TE +100.00 18.90 TB 6.00 2.00 TR +TE +100.00 18.90 TB 12.00 2.00 TR +TE +100.00 18.90 TB 22.00 2.00 TR +TE +100.00 18.90 TB 26.00 2.00 TR +TE +100.00 18.90 TB 34.00 4.00 TR +TE +100.00 18.90 TB 44.00 6.00 TR +TE +100.00 18.90 TB 52.00 8.00 TR +TE +100.00 18.90 TB 62.00 2.00 TR +TE +100.00 18.90 TB 66.00 2.00 TR +TE +100.00 18.90 TB 74.00 2.00 TR +TE +100.00 18.90 TB 78.00 4.00 TR +TE +100.00 18.90 TB 88.00 4.00 TR +TE +100.00 18.90 TB 96.00 2.00 TR +TE +100.00 18.90 TB 102.00 2.00 TR +TE +100.00 18.90 TB 110.00 2.00 TR +TE +100.00 18.90 TB 114.00 8.00 TR +TE +100.00 18.90 TB 124.00 6.00 TR +TE +100.00 18.90 TB 132.00 2.00 TR +TE +100.00 18.90 TB 138.00 4.00 TR +TE +100.00 18.90 TB 144.00 2.00 TR +TE +100.00 18.90 TB 154.00 2.00 TR +TE +100.00 18.90 TB 162.00 4.00 TR +TE +100.00 18.90 TB 170.00 2.00 TR +TE +100.00 18.90 TB 176.00 2.00 TR +TE +100.00 18.90 TB 180.00 4.00 TR +TE +100.00 18.90 TB 190.00 2.00 TR +TE +100.00 18.90 TB 198.00 2.00 TR +TE +100.00 18.90 TB 204.00 6.00 TR +TE +100.00 18.90 TB 214.00 4.00 TR +TE +100.00 18.90 TB 220.00 4.00 TR +TE +100.00 18.90 TB 230.00 6.00 TR +TE +100.00 18.90 TB 238.00 2.00 TR +TE +100.00 18.90 TB 242.00 4.00 TR +TE +/Helvetica findfont +dup length dict begin +{1 index /FID ne {def} {pop pop} ifelse} forall +/Encoding ISOLatin1Encoding def +currentdict +end +/Helvetica-ISOLatin1 exch definefont pop +matrix currentmatrix +/Helvetica-ISOLatin1 findfont +14.00 scalefont setfont + 0 0 moveto 123.00 3.50 translate 0.00 rotate 0 0 moveto + (A\\B\)ç\(D) stringwidth +pop +-2 div 0 rmoveto + (A\\B\)ç\(D) show +setmatrix diff --git a/backend/tests/data/eps/code39_fg_bg.eps b/backend/tests/data/eps/code39_fg_bg.eps index 59959e74..89f6cd31 100644 --- a/backend/tests/data/eps/code39_fg_bg.eps +++ b/backend/tests/data/eps/code39_fg_bg.eps @@ -1,8 +1,8 @@ %!PS-Adobe-3.0 EPSF-3.0 -%%Creator: Zint 2.9.0 +%%Creator: Zint 2.9.1.9 %%Title: Zint Generated Symbol %%Pages: 0 -%%BoundingBox: 0 0 128 118 +%%BoundingBox: 0 0 128 119 %%EndComments /TL { setlinewidth moveto lineto stroke } bind def /TD { newpath 0 360 arc fill } bind def @@ -12,63 +12,63 @@ /TE { pop pop } bind def newpath 0.98 0.59 0.19 setrgbcolor -118.00 0.00 TB 0.00 128.00 TR +118.90 0.00 TB 0.00 128.00 TR TE 0.08 0.48 0.81 setrgbcolor -100.00 18.00 TB 0.00 2.00 TR +100.00 18.90 TB 0.00 2.00 TR TE -100.00 18.00 TB 6.00 2.00 TR +100.00 18.90 TB 6.00 2.00 TR TE -100.00 18.00 TB 10.00 4.00 TR +100.00 18.90 TB 10.00 4.00 TR TE -100.00 18.00 TB 16.00 4.00 TR +100.00 18.90 TB 16.00 4.00 TR TE -100.00 18.00 TB 22.00 2.00 TR +100.00 18.90 TB 22.00 2.00 TR TE -100.00 18.00 TB 26.00 4.00 TR +100.00 18.90 TB 26.00 4.00 TR TE -100.00 18.00 TB 32.00 2.00 TR +100.00 18.90 TB 32.00 2.00 TR TE -100.00 18.00 TB 38.00 2.00 TR +100.00 18.90 TB 38.00 2.00 TR TE -100.00 18.00 TB 42.00 2.00 TR +100.00 18.90 TB 42.00 2.00 TR TE -100.00 18.00 TB 46.00 4.00 TR +100.00 18.90 TB 46.00 4.00 TR TE -100.00 18.00 TB 52.00 2.00 TR +100.00 18.90 TB 52.00 2.00 TR TE -100.00 18.00 TB 56.00 4.00 TR +100.00 18.90 TB 56.00 4.00 TR TE -100.00 18.00 TB 64.00 2.00 TR +100.00 18.90 TB 64.00 2.00 TR TE -100.00 18.00 TB 68.00 2.00 TR +100.00 18.90 TB 68.00 2.00 TR TE -100.00 18.00 TB 72.00 4.00 TR +100.00 18.90 TB 72.00 4.00 TR TE -100.00 18.00 TB 78.00 4.00 TR +100.00 18.90 TB 78.00 4.00 TR TE -100.00 18.00 TB 84.00 4.00 TR +100.00 18.90 TB 84.00 4.00 TR TE -100.00 18.00 TB 92.00 2.00 TR +100.00 18.90 TB 92.00 2.00 TR TE -100.00 18.00 TB 96.00 2.00 TR +100.00 18.90 TB 96.00 2.00 TR TE -100.00 18.00 TB 100.00 2.00 TR +100.00 18.90 TB 100.00 2.00 TR TE -100.00 18.00 TB 104.00 2.00 TR +100.00 18.90 TB 104.00 2.00 TR TE -100.00 18.00 TB 110.00 2.00 TR +100.00 18.90 TB 110.00 2.00 TR TE -100.00 18.00 TB 114.00 4.00 TR +100.00 18.90 TB 114.00 4.00 TR TE -100.00 18.00 TB 120.00 4.00 TR +100.00 18.90 TB 120.00 4.00 TR TE -100.00 18.00 TB 126.00 2.00 TR +100.00 18.90 TB 126.00 2.00 TR TE matrix currentmatrix /Helvetica findfont -18.00 scalefont setfont - 0 0 moveto 64.00 0.00 translate 0.00 rotate 0 0 moveto +14.00 scalefont setfont + 0 0 moveto 64.00 3.50 translate 0.00 rotate 0 0 moveto (*123*) stringwidth pop -2 div 0 rmoveto diff --git a/backend/tests/data/eps/dbar_ltd_24724_fig7_bold.eps b/backend/tests/data/eps/dbar_ltd_24724_fig7_bold.eps new file mode 100644 index 00000000..86be5e40 --- /dev/null +++ b/backend/tests/data/eps/dbar_ltd_24724_fig7_bold.eps @@ -0,0 +1,72 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Zint 2.9.1.9 +%%Title: Zint Generated Symbol +%%Pages: 0 +%%BoundingBox: 0 0 158 119 +%%EndComments +/TL { setlinewidth moveto lineto stroke } bind def +/TD { newpath 0 360 arc fill } bind def +/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def +/TB { 2 copy } bind def +/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def +/TE { pop pop } bind def +newpath +1.00 1.00 1.00 setrgbcolor +118.90 0.00 TB 0.00 158.00 TR +TE +0.00 0.00 0.00 setrgbcolor +100.00 18.90 TB 2.00 2.00 TR +TE +100.00 18.90 TB 10.00 4.00 TR +TE +100.00 18.90 TB 18.00 4.00 TR +TE +100.00 18.90 TB 28.00 4.00 TR +TE +100.00 18.90 TB 34.00 4.00 TR +TE +100.00 18.90 TB 40.00 2.00 TR +TE +100.00 18.90 TB 44.00 2.00 TR +TE +100.00 18.90 TB 50.00 6.00 TR +TE +100.00 18.90 TB 58.00 2.00 TR +TE +100.00 18.90 TB 64.00 2.00 TR +TE +100.00 18.90 TB 68.00 2.00 TR +TE +100.00 18.90 TB 72.00 4.00 TR +TE +100.00 18.90 TB 78.00 2.00 TR +TE +100.00 18.90 TB 84.00 4.00 TR +TE +100.00 18.90 TB 90.00 2.00 TR +TE +100.00 18.90 TB 96.00 2.00 TR +TE +100.00 18.90 TB 102.00 2.00 TR +TE +100.00 18.90 TB 106.00 4.00 TR +TE +100.00 18.90 TB 116.00 4.00 TR +TE +100.00 18.90 TB 122.00 6.00 TR +TE +100.00 18.90 TB 132.00 4.00 TR +TE +100.00 18.90 TB 140.00 4.00 TR +TE +100.00 18.90 TB 146.00 2.00 TR +TE +matrix currentmatrix +/Helvetica-Bold findfont +14.00 scalefont setfont + 0 0 moveto 79.00 3.50 translate 0.00 rotate 0 0 moveto + (\(01\)15012345678907) stringwidth +pop +-2 div 0 rmoveto + (\(01\)15012345678907) show +setmatrix diff --git a/backend/tests/data/eps/ean13_2addon_ggs_5.2.2.5.1-2.eps b/backend/tests/data/eps/ean13_2addon_ggs_5.2.2.5.1-2.eps new file mode 100644 index 00000000..6d12ac6e --- /dev/null +++ b/backend/tests/data/eps/ean13_2addon_ggs_5.2.2.5.1-2.eps @@ -0,0 +1,127 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Zint 2.9.1.9 +%%Title: Zint Generated Symbol +%%Pages: 0 +%%BoundingBox: 0 0 276 117 +%%EndComments +/TL { setlinewidth moveto lineto stroke } bind def +/TD { newpath 0 360 arc fill } bind def +/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def +/TB { 2 copy } bind def +/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def +/TE { pop pop } bind def +newpath +1.00 1.00 1.00 setrgbcolor +116.40 0.00 TB 0.00 276.00 TR +TE +0.00 0.00 0.00 setrgbcolor +110.00 6.40 TB 22.00 2.00 TR +TE +110.00 6.40 TB 26.00 2.00 TR +TE +100.00 16.40 TB 30.00 6.00 TR +TE +100.00 16.40 TB 38.00 4.00 TR +TE +100.00 16.40 TB 46.00 2.00 TR +TE +100.00 16.40 TB 54.00 2.00 TR +TE +100.00 16.40 TB 58.00 4.00 TR +TE +100.00 16.40 TB 66.00 4.00 TR +TE +100.00 16.40 TB 72.00 8.00 TR +TE +100.00 16.40 TB 82.00 2.00 TR +TE +100.00 16.40 TB 90.00 2.00 TR +TE +100.00 16.40 TB 96.00 2.00 TR +TE +100.00 16.40 TB 100.00 2.00 TR +TE +100.00 16.40 TB 108.00 4.00 TR +TE +110.00 6.40 TB 114.00 2.00 TR +TE +110.00 6.40 TB 118.00 2.00 TR +TE +100.00 16.40 TB 122.00 2.00 TR +TE +100.00 16.40 TB 128.00 6.00 TR +TE +100.00 16.40 TB 136.00 4.00 TR +TE +100.00 16.40 TB 142.00 4.00 TR +TE +100.00 16.40 TB 150.00 2.00 TR +TE +100.00 16.40 TB 154.00 6.00 TR +TE +100.00 16.40 TB 164.00 6.00 TR +TE +100.00 16.40 TB 174.00 2.00 TR +TE +100.00 16.40 TB 178.00 4.00 TR +TE +100.00 16.40 TB 186.00 4.00 TR +TE +100.00 16.40 TB 192.00 2.00 TR +TE +100.00 16.40 TB 200.00 2.00 TR +TE +110.00 6.40 TB 206.00 2.00 TR +TE +110.00 6.40 TB 210.00 2.00 TR +TE +91.00 6.40 TB 226.00 2.00 TR +TE +91.00 6.40 TB 230.00 4.00 TR +TE +91.00 6.40 TB 238.00 4.00 TR +TE +91.00 6.40 TB 246.00 2.00 TR +TE +91.00 6.40 TB 250.00 2.00 TR +TE +91.00 6.40 TB 256.00 2.00 TR +TE +91.00 6.40 TB 262.00 4.00 TR +TE +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 12.00 0.40 translate 0.00 rotate 0 0 moveto + (9) stringwidth +pop +neg 0 rmoveto + (9) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 70.00 0.40 translate 0.00 rotate 0 0 moveto + (771384) stringwidth +pop +-2 div 0 rmoveto + (771384) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 164.00 0.40 translate 0.00 rotate 0 0 moveto + (524017) stringwidth +pop +-2 div 0 rmoveto + (524017) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 246.00 101.40 translate 0.00 rotate 0 0 moveto + (12) stringwidth +pop +-2 div 0 rmoveto + (12) show +setmatrix diff --git a/backend/tests/data/eps/ultra_fg_bg.eps b/backend/tests/data/eps/ultra_fg_bg.eps index fcc301b9..d6ad740b 100644 --- a/backend/tests/data/eps/ultra_fg_bg.eps +++ b/backend/tests/data/eps/ultra_fg_bg.eps @@ -1,8 +1,8 @@ %!PS-Adobe-3.0 EPSF-3.0 -%%Creator: Zint 2.9.0 +%%Creator: Zint 2.9.1.9 %%Title: Zint Generated Symbol %%Pages: 0 -%%BoundingBox: 0 0 32 26 +%%BoundingBox: 0 0 28 26 %%EndComments /TL { setlinewidth moveto lineto stroke } bind def /TD { newpath 0 360 arc fill } bind def @@ -12,164 +12,195 @@ /TE { pop pop } bind def newpath 0.98 0.59 0.19 setrgbcolor -26.00 0.00 TB 0.00 32.00 TR +26.00 0.00 TB 0.00 28.00 TR TE 0.00 1.00 1.00 setrgbcolor -2.00 22.00 TB 18.00 4.00 TR +2.00 22.00 TB 16.00 4.00 TR TE -2.00 22.00 TB 24.00 4.00 TR -TE -2.00 20.00 TB 14.00 2.00 TR -TE -2.00 18.00 TB 6.00 2.00 TR -TE -2.00 18.00 TB 18.00 2.00 TR -TE -2.00 18.00 TB 24.00 4.00 TR -TE -2.00 14.00 TB 12.00 2.00 TR -TE -2.00 10.00 TB 12.00 2.00 TR -TE -2.00 10.00 TB 16.00 2.00 TR -TE -2.00 10.00 TB 20.00 8.00 TR -TE -2.00 8.00 TB 6.00 2.00 TR -TE -2.00 8.00 TB 18.00 2.00 TR -TE -2.00 6.00 TB 22.00 4.00 TR -TE -2.00 4.00 TB 12.00 6.00 TR -TE -2.00 4.00 TB 26.00 2.00 TR -TE -2.00 2.00 TB 6.00 2.00 TR -TE -1.00 0.00 1.00 setrgbcolor -2.00 22.00 TB 16.00 2.00 TR -TE -2.00 20.00 TB 6.00 2.00 TR +2.00 22.00 TB 22.00 4.00 TR TE 2.00 20.00 TB 12.00 2.00 TR TE -2.00 20.00 TB 18.00 4.00 TR -TE -2.00 18.00 TB 14.00 2.00 TR -TE -2.00 16.00 TB 16.00 2.00 TR -TE -2.00 16.00 TB 20.00 2.00 TR -TE -2.00 14.00 TB 6.00 2.00 TR -TE -2.00 14.00 TB 18.00 2.00 TR -TE -2.00 14.00 TB 24.00 2.00 TR -TE -2.00 8.00 TB 12.00 2.00 TR -TE -2.00 8.00 TB 20.00 4.00 TR -TE -2.00 8.00 TB 26.00 2.00 TR -TE -2.00 6.00 TB 16.00 2.00 TR -TE -2.00 2.00 TB 12.00 12.00 TR -TE -1.00 1.00 0.00 setrgbcolor -2.00 22.00 TB 6.00 2.00 TR -TE -2.00 22.00 TB 14.00 2.00 TR -TE -2.00 22.00 TB 22.00 2.00 TR +2.00 18.00 TB 4.00 2.00 TR TE 2.00 18.00 TB 16.00 2.00 TR TE -2.00 18.00 TB 22.00 2.00 TR +2.00 18.00 TB 22.00 4.00 TR TE -2.00 16.00 TB 6.00 2.00 TR +2.00 14.00 TB 10.00 2.00 TR TE -2.00 16.00 TB 12.00 2.00 TR +2.00 10.00 TB 10.00 2.00 TR TE -2.00 16.00 TB 18.00 2.00 TR +2.00 10.00 TB 14.00 2.00 TR TE -2.00 16.00 TB 24.00 2.00 TR +2.00 10.00 TB 18.00 8.00 TR TE -2.00 14.00 TB 14.00 4.00 TR +2.00 8.00 TB 4.00 2.00 TR TE -2.00 14.00 TB 22.00 2.00 TR +2.00 8.00 TB 16.00 2.00 TR TE -2.00 14.00 TB 26.00 2.00 TR +2.00 6.00 TB 20.00 4.00 TR TE -2.00 10.00 TB 18.00 2.00 TR -TE -2.00 8.00 TB 14.00 4.00 TR -TE -2.00 6.00 TB 6.00 2.00 TR -TE -2.00 6.00 TB 12.00 2.00 TR -TE -2.00 6.00 TB 18.00 4.00 TR -TE -2.00 6.00 TB 26.00 2.00 TR +2.00 4.00 TB 10.00 6.00 TR TE 2.00 4.00 TB 24.00 2.00 TR TE -2.00 2.00 TB 26.00 2.00 TR +2.00 2.00 TB 4.00 2.00 TR TE -0.00 1.00 0.00 setrgbcolor -2.00 22.00 TB 12.00 2.00 TR +1.00 0.00 1.00 setrgbcolor +2.00 22.00 TB 14.00 2.00 TR TE -2.00 20.00 TB 16.00 2.00 TR +2.00 20.00 TB 4.00 2.00 TR TE -2.00 20.00 TB 22.00 6.00 TR +2.00 20.00 TB 10.00 2.00 TR +TE +2.00 20.00 TB 16.00 4.00 TR TE 2.00 18.00 TB 12.00 2.00 TR TE -2.00 18.00 TB 20.00 2.00 TR -TE 2.00 16.00 TB 14.00 2.00 TR TE -2.00 16.00 TB 22.00 2.00 TR +2.00 16.00 TB 18.00 2.00 TR TE -2.00 16.00 TB 26.00 2.00 TR +2.00 14.00 TB 4.00 2.00 TR TE -2.00 14.00 TB 20.00 2.00 TR +2.00 14.00 TB 16.00 2.00 TR TE -2.00 10.00 TB 6.00 2.00 TR +2.00 14.00 TB 22.00 2.00 TR TE -2.00 10.00 TB 14.00 2.00 TR +2.00 8.00 TB 10.00 2.00 TR +TE +2.00 8.00 TB 18.00 4.00 TR TE 2.00 8.00 TB 24.00 2.00 TR TE 2.00 6.00 TB 14.00 2.00 TR TE -2.00 4.00 TB 6.00 2.00 TR +2.00 2.00 TB 10.00 12.00 TR TE -2.00 4.00 TB 18.00 6.00 TR +1.00 1.00 0.00 setrgbcolor +2.00 22.00 TB 4.00 2.00 TR +TE +2.00 22.00 TB 12.00 2.00 TR +TE +2.00 22.00 TB 20.00 2.00 TR +TE +2.00 18.00 TB 14.00 2.00 TR +TE +2.00 18.00 TB 20.00 2.00 TR +TE +2.00 16.00 TB 4.00 2.00 TR +TE +2.00 16.00 TB 10.00 2.00 TR +TE +2.00 16.00 TB 16.00 2.00 TR +TE +2.00 16.00 TB 22.00 2.00 TR +TE +2.00 14.00 TB 12.00 4.00 TR +TE +2.00 14.00 TB 20.00 2.00 TR +TE +2.00 14.00 TB 24.00 2.00 TR +TE +2.00 10.00 TB 16.00 2.00 TR +TE +2.00 8.00 TB 12.00 4.00 TR +TE +2.00 6.00 TB 4.00 2.00 TR +TE +2.00 6.00 TB 10.00 2.00 TR +TE +2.00 6.00 TB 16.00 4.00 TR +TE +2.00 6.00 TB 24.00 2.00 TR +TE +2.00 4.00 TB 22.00 2.00 TR TE 2.00 2.00 TB 24.00 2.00 TR TE -0.00 0.00 0.00 setrgbcolor -2.00 24.00 TB 2.00 28.00 TR +0.00 1.00 0.00 setrgbcolor +2.00 22.00 TB 10.00 2.00 TR TE +2.00 20.00 TB 14.00 2.00 TR +TE +2.00 20.00 TB 20.00 6.00 TR +TE +2.00 18.00 TB 10.00 2.00 TR +TE +2.00 18.00 TB 18.00 2.00 TR +TE +2.00 16.00 TB 12.00 2.00 TR +TE +2.00 16.00 TB 20.00 2.00 TR +TE +2.00 16.00 TB 24.00 2.00 TR +TE +2.00 14.00 TB 18.00 2.00 TR +TE +2.00 10.00 TB 4.00 2.00 TR +TE +2.00 10.00 TB 12.00 2.00 TR +TE +2.00 8.00 TB 22.00 2.00 TR +TE +2.00 6.00 TB 12.00 2.00 TR +TE +2.00 4.00 TB 4.00 2.00 TR +TE +2.00 4.00 TB 16.00 6.00 TR +TE +2.00 2.00 TB 22.00 2.00 TR +TE +0.00 0.00 0.00 setrgbcolor +2.00 24.00 TB 0.00 28.00 TR +TE +2.00 22.00 TB 0.00 2.00 TR +TE +22.00 2.00 TB 6.00 2.00 TR +TE +22.00 2.00 TB 26.00 2.00 TR +TE +2.00 20.00 TB 0.00 4.00 TR +TE +2.00 18.00 TB 0.00 2.00 TR +TE +2.00 16.00 TB 0.00 4.00 TR +TE +2.00 14.00 TB 0.00 2.00 TR +TE +2.00 12.00 TB 0.00 4.00 TR +TE +2.00 12.00 TB 10.00 2.00 TR +TE +2.00 12.00 TB 14.00 2.00 TR +TE +2.00 12.00 TB 18.00 2.00 TR +TE +2.00 12.00 TB 22.00 2.00 TR +TE +2.00 10.00 TB 0.00 2.00 TR +TE +2.00 8.00 TB 0.00 4.00 TR +TE +2.00 6.00 TB 0.00 2.00 TR +TE +2.00 4.00 TB 0.00 4.00 TR +TE +2.00 2.00 TB 0.00 2.00 TR +TE +2.00 0.00 TB 0.00 28.00 TR +TE +1.00 1.00 1.00 setrgbcolor 2.00 22.00 TB 2.00 2.00 TR TE 22.00 2.00 TB 8.00 2.00 TR TE -22.00 2.00 TB 28.00 2.00 TR -TE -2.00 20.00 TB 2.00 4.00 TR -TE 2.00 18.00 TB 2.00 2.00 TR TE -2.00 16.00 TB 2.00 4.00 TR -TE 2.00 14.00 TB 2.00 2.00 TR TE -2.00 12.00 TB 2.00 4.00 TR +2.00 12.00 TB 4.00 2.00 TR TE 2.00 12.00 TB 12.00 2.00 TR TE @@ -181,38 +212,7 @@ TE TE 2.00 10.00 TB 2.00 2.00 TR TE -2.00 8.00 TB 2.00 4.00 TR -TE 2.00 6.00 TB 2.00 2.00 TR TE -2.00 4.00 TB 2.00 4.00 TR -TE 2.00 2.00 TB 2.00 2.00 TR TE -2.00 0.00 TB 2.00 28.00 TR -TE -1.00 1.00 1.00 setrgbcolor -2.00 22.00 TB 4.00 2.00 TR -TE -22.00 2.00 TB 10.00 2.00 TR -TE -2.00 18.00 TB 4.00 2.00 TR -TE -2.00 14.00 TB 4.00 2.00 TR -TE -2.00 12.00 TB 6.00 2.00 TR -TE -2.00 12.00 TB 14.00 2.00 TR -TE -2.00 12.00 TB 18.00 2.00 TR -TE -2.00 12.00 TB 22.00 2.00 TR -TE -2.00 12.00 TB 26.00 2.00 TR -TE -2.00 10.00 TB 4.00 2.00 TR -TE -2.00 6.00 TB 4.00 2.00 TR -TE -2.00 2.00 TB 4.00 2.00 TR -TE diff --git a/backend/tests/data/eps/upca_2addon_ggs_5.2.6.6-5.eps b/backend/tests/data/eps/upca_2addon_ggs_5.2.6.6-5.eps new file mode 100644 index 00000000..926272d4 --- /dev/null +++ b/backend/tests/data/eps/upca_2addon_ggs_5.2.6.6-5.eps @@ -0,0 +1,133 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Zint 2.9.1.9 +%%Title: Zint Generated Symbol +%%Pages: 0 +%%BoundingBox: 0 0 276 117 +%%EndComments +/TL { setlinewidth moveto lineto stroke } bind def +/TD { newpath 0 360 arc fill } bind def +/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def +/TB { 2 copy } bind def +/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def +/TE { pop pop } bind def +newpath +1.00 1.00 1.00 setrgbcolor +116.40 0.00 TB 0.00 276.00 TR +TE +0.00 0.00 0.00 setrgbcolor +110.00 6.40 TB 18.00 2.00 TR +TE +110.00 6.40 TB 22.00 2.00 TR +TE +110.00 6.40 TB 30.00 4.00 TR +TE +110.00 6.40 TB 36.00 2.00 TR +TE +100.00 16.40 TB 42.00 4.00 TR +TE +100.00 16.40 TB 50.00 2.00 TR +TE +100.00 16.40 TB 56.00 2.00 TR +TE +100.00 16.40 TB 62.00 4.00 TR +TE +100.00 16.40 TB 68.00 8.00 TR +TE +100.00 16.40 TB 78.00 2.00 TR +TE +100.00 16.40 TB 82.00 2.00 TR +TE +100.00 16.40 TB 90.00 4.00 TR +TE +100.00 16.40 TB 96.00 4.00 TR +TE +100.00 16.40 TB 106.00 2.00 TR +TE +110.00 6.40 TB 110.00 2.00 TR +TE +110.00 6.40 TB 114.00 2.00 TR +TE +100.00 16.40 TB 118.00 2.00 TR +TE +100.00 16.40 TB 122.00 2.00 TR +TE +100.00 16.40 TB 132.00 2.00 TR +TE +100.00 16.40 TB 140.00 2.00 TR +TE +100.00 16.40 TB 146.00 2.00 TR +TE +100.00 16.40 TB 152.00 2.00 TR +TE +100.00 16.40 TB 160.00 6.00 TR +TE +100.00 16.40 TB 168.00 2.00 TR +TE +100.00 16.40 TB 174.00 6.00 TR +TE +100.00 16.40 TB 184.00 2.00 TR +TE +110.00 6.40 TB 188.00 2.00 TR +TE +110.00 6.40 TB 194.00 6.00 TR +TE +110.00 6.40 TB 202.00 2.00 TR +TE +110.00 6.40 TB 206.00 2.00 TR +TE +81.00 16.40 TB 226.00 2.00 TR +TE +81.00 16.40 TB 230.00 4.00 TR +TE +81.00 16.40 TB 238.00 2.00 TR +TE +81.00 16.40 TB 244.00 4.00 TR +TE +81.00 16.40 TB 250.00 2.00 TR +TE +81.00 16.40 TB 254.00 2.00 TR +TE +81.00 16.40 TB 262.00 4.00 TR +TE +matrix currentmatrix +/Helvetica findfont +14.00 scalefont setfont + 0 0 moveto 8.00 0.40 translate 0.00 rotate 0 0 moveto + (0) stringwidth +pop +neg 0 rmoveto + (0) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 72.00 0.40 translate 0.00 rotate 0 0 moveto + (12345) stringwidth +pop +-2 div 0 rmoveto + (12345) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 152.00 0.40 translate 0.00 rotate 0 0 moveto + (67890) stringwidth +pop +-2 div 0 rmoveto + (67890) show +setmatrix +matrix currentmatrix +/Helvetica findfont +14.00 scalefont setfont + 0 0 moveto 218.00 0.40 translate 0.00 rotate 0 0 moveto + (5) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 246.00 101.40 translate 0.00 rotate 0 0 moveto + (24) stringwidth +pop +-2 div 0 rmoveto + (24) show +setmatrix diff --git a/backend/tests/data/eps/upce_5addon.eps b/backend/tests/data/eps/upce_5addon.eps new file mode 100644 index 00000000..005bfd45 --- /dev/null +++ b/backend/tests/data/eps/upce_5addon.eps @@ -0,0 +1,116 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Zint 2.9.1.9 +%%Title: Zint Generated Symbol +%%Pages: 0 +%%BoundingBox: 0 0 238 117 +%%EndComments +/TL { setlinewidth moveto lineto stroke } bind def +/TD { newpath 0 360 arc fill } bind def +/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def +/TB { 2 copy } bind def +/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def +/TE { pop pop } bind def +newpath +1.00 1.00 1.00 setrgbcolor +116.40 0.00 TB 0.00 238.00 TR +TE +0.00 0.00 0.00 setrgbcolor +110.00 6.40 TB 18.00 2.00 TR +TE +110.00 6.40 TB 22.00 2.00 TR +TE +100.00 16.40 TB 26.00 4.00 TR +TE +100.00 16.40 TB 34.00 4.00 TR +TE +100.00 16.40 TB 42.00 2.00 TR +TE +100.00 16.40 TB 48.00 4.00 TR +TE +100.00 16.40 TB 54.00 8.00 TR +TE +100.00 16.40 TB 64.00 2.00 TR +TE +100.00 16.40 TB 70.00 6.00 TR +TE +100.00 16.40 TB 78.00 2.00 TR +TE +100.00 16.40 TB 82.00 6.00 TR +TE +100.00 16.40 TB 92.00 2.00 TR +TE +100.00 16.40 TB 96.00 2.00 TR +TE +100.00 16.40 TB 100.00 8.00 TR +TE +110.00 6.40 TB 110.00 2.00 TR +TE +110.00 6.40 TB 114.00 2.00 TR +TE +110.00 6.40 TB 118.00 2.00 TR +TE +81.00 16.40 TB 134.00 2.00 TR +TE +81.00 16.40 TB 138.00 4.00 TR +TE +81.00 16.40 TB 144.00 4.00 TR +TE +81.00 16.40 TB 152.00 4.00 TR +TE +81.00 16.40 TB 158.00 2.00 TR +TE +81.00 16.40 TB 164.00 2.00 TR +TE +81.00 16.40 TB 170.00 4.00 TR +TE +81.00 16.40 TB 176.00 2.00 TR +TE +81.00 16.40 TB 180.00 2.00 TR +TE +81.00 16.40 TB 190.00 2.00 TR +TE +81.00 16.40 TB 194.00 2.00 TR +TE +81.00 16.40 TB 198.00 2.00 TR +TE +81.00 16.40 TB 206.00 4.00 TR +TE +81.00 16.40 TB 212.00 2.00 TR +TE +81.00 16.40 TB 216.00 4.00 TR +TE +81.00 16.40 TB 226.00 2.00 TR +TE +matrix currentmatrix +/Helvetica findfont +14.00 scalefont setfont + 0 0 moveto 8.00 0.40 translate 0.00 rotate 0 0 moveto + (0) stringwidth +pop +neg 0 rmoveto + (0) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 66.00 0.40 translate 0.00 rotate 0 0 moveto + (123456) stringwidth +pop +-2 div 0 rmoveto + (123456) show +setmatrix +matrix currentmatrix +/Helvetica findfont +14.00 scalefont setfont + 0 0 moveto 126.00 0.40 translate 0.00 rotate 0 0 moveto + (5) show +setmatrix +matrix currentmatrix +/Helvetica findfont +20.00 scalefont setfont + 0 0 moveto 182.00 101.40 translate 0.00 rotate 0 0 moveto + (12345) stringwidth +pop +-2 div 0 rmoveto + (12345) show +setmatrix diff --git a/backend/tests/data/eps/upce_5addon_small_bold.eps b/backend/tests/data/eps/upce_5addon_small_bold.eps new file mode 100644 index 00000000..5ab0d2da --- /dev/null +++ b/backend/tests/data/eps/upce_5addon_small_bold.eps @@ -0,0 +1,116 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Zint 2.9.1.9 +%%Title: Zint Generated Symbol +%%Pages: 0 +%%BoundingBox: 0 0 238 112 +%%EndComments +/TL { setlinewidth moveto lineto stroke } bind def +/TD { newpath 0 360 arc fill } bind def +/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def +/TB { 2 copy } bind def +/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def +/TE { pop pop } bind def +newpath +1.00 1.00 1.00 setrgbcolor +111.90 0.00 TB 0.00 238.00 TR +TE +0.00 0.00 0.00 setrgbcolor +110.00 1.90 TB 18.00 2.00 TR +TE +110.00 1.90 TB 22.00 2.00 TR +TE +100.00 11.90 TB 26.00 4.00 TR +TE +100.00 11.90 TB 34.00 4.00 TR +TE +100.00 11.90 TB 42.00 2.00 TR +TE +100.00 11.90 TB 48.00 4.00 TR +TE +100.00 11.90 TB 54.00 8.00 TR +TE +100.00 11.90 TB 64.00 2.00 TR +TE +100.00 11.90 TB 70.00 6.00 TR +TE +100.00 11.90 TB 78.00 2.00 TR +TE +100.00 11.90 TB 82.00 6.00 TR +TE +100.00 11.90 TB 92.00 2.00 TR +TE +100.00 11.90 TB 96.00 2.00 TR +TE +100.00 11.90 TB 100.00 8.00 TR +TE +110.00 1.90 TB 110.00 2.00 TR +TE +110.00 1.90 TB 114.00 2.00 TR +TE +110.00 1.90 TB 118.00 2.00 TR +TE +87.00 11.90 TB 134.00 2.00 TR +TE +87.00 11.90 TB 138.00 4.00 TR +TE +87.00 11.90 TB 144.00 4.00 TR +TE +87.00 11.90 TB 152.00 4.00 TR +TE +87.00 11.90 TB 158.00 2.00 TR +TE +87.00 11.90 TB 164.00 2.00 TR +TE +87.00 11.90 TB 170.00 4.00 TR +TE +87.00 11.90 TB 176.00 2.00 TR +TE +87.00 11.90 TB 180.00 2.00 TR +TE +87.00 11.90 TB 190.00 2.00 TR +TE +87.00 11.90 TB 194.00 2.00 TR +TE +87.00 11.90 TB 198.00 2.00 TR +TE +87.00 11.90 TB 206.00 4.00 TR +TE +87.00 11.90 TB 212.00 2.00 TR +TE +87.00 11.90 TB 216.00 4.00 TR +TE +87.00 11.90 TB 226.00 2.00 TR +TE +matrix currentmatrix +/Helvetica-Bold findfont +12.00 scalefont setfont + 0 0 moveto 8.00 0.40 translate 0.00 rotate 0 0 moveto + (0) stringwidth +pop +neg 0 rmoveto + (0) show +setmatrix +matrix currentmatrix +/Helvetica-Bold findfont +14.00 scalefont setfont + 0 0 moveto 66.00 0.40 translate 0.00 rotate 0 0 moveto + (123456) stringwidth +pop +-2 div 0 rmoveto + (123456) show +setmatrix +matrix currentmatrix +/Helvetica-Bold findfont +12.00 scalefont setfont + 0 0 moveto 126.00 0.40 translate 0.00 rotate 0 0 moveto + (5) show +setmatrix +matrix currentmatrix +/Helvetica-Bold findfont +14.00 scalefont setfont + 0 0 moveto 182.00 101.40 translate 0.00 rotate 0 0 moveto + (12345) stringwidth +pop +-2 div 0 rmoveto + (12345) show +setmatrix diff --git a/backend/tests/data/png/codablockf_3rows.png b/backend/tests/data/png/codablockf_3rows.png index cc18fc8b37eb41ecee6f70594e377ee7ca503f97..90ef5c07eed64318750ab41bb0f8fcee82ec242f 100644 GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^pMcndg9%7FN83MOU|=-yba4!+xb^n#!F5dr0uF&$ zKmNzB<2Ij>HtU!lugP;AMaP4`E1Zmiveq77@1@DU#xVHV>4(Yoo7}D`WKS@CVo|(4 z+Wx!SqU;-GZ%aK(;#H%h_a<#QJF#4J@Be>gWw)G4&fHeE*|#TFy0$6u`?Wc1KdQ2% z@NQy@Y+f_b^n?_cshr);0OUJ@P2AM>Tr1MP-q`rd(Yj~t`~Ljlt+9OndAhCfqTBY) zF3fx03MudU``G@|u6@xUEl?v+m=J^OQ>IN+J!9mw$u~{%xO~6l+Ou<&=iJ==kJ%<& zj?rqEaktaqI2fgR7bi1RMf` z|NM{N)}5!7c<4gU(PhtdMAx*f-nU&M=Xhbx{H(RP1-&zk1~$58Vx*g1;xxf7U8B=8{@bK&*c&grgrtSCRw(mZNJ~+tI<>0u0 zLxhEk$#sE30FYvBR0-Zc?0zVhmGQv0>A zBCWeIxBRtB;xj*So6GE<9r^wGzn@o@eYcCeX$N`4#7ZG0foU>gTe~DWM4f DpYX@z literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/code128_egrave_bold_box3.png b/backend/tests/data/png/code128_egrave_bold_box3.png new file mode 100644 index 0000000000000000000000000000000000000000..6edfb65b13bb82255a12a2777a60d86fb2f09791 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^Z-BUgg9%8sw+kgPFfhLHba4!+xb^nt#k?j1k%ou! zQs4hSb(eM7O%2;JMzidF?@#ftuGzol3P>}M8(jno(qr@htoFrffWcC0>6o5>i$e@#C1_r=^>dvUufeD${It4%8 z{=d4bgX6KnqgHOcr85d=3jgMlcvxL4)wE>4tYue)t@>)wy&d7Z{J!tq_B?0yr|CW0 z-l?fPQ_p*&H}B=P8GNgymR^gyap-M%hxSL^@H^gI)w?D~troQv+<#$?#O2QEdb|H} zd`e%q+o}73T9}9AC>`i;b?H}{%w&q)>1E9F{boFyt=akR{ E0CuqEdjJ3c literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/code39_small.png b/backend/tests/data/png/code39_small.png new file mode 100644 index 0000000000000000000000000000000000000000..09985dc49a12eef8a5bd024f50ee4fc9e60c582e GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M1GL!2~2D&%JMDU|=-$ba4!+xb^n>X|84i0f&o{ zFaQ7lR3ezwEaWM#&{!Ovb@h^raHgA!OGxORQ)m8q+=xbg8~Bs3&=kxC#7An~x*6@d)VZlE2vhEc(5}Z4l Qfj(yNboFyt=akR{0NHbI=Kufz literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/ean13_cc_2addon_cca_4x4.png b/backend/tests/data/png/ean13_cc_2addon_cca_4x4.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb571c084a8667e318744313947c2879d335f63 GIT binary patch literal 1132 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yx}OE{Q-sYh)wb8`TA5rrzoMU`dqcExV=y8ejDQ=r~+?(0?Bw=D*T~(P%5aSXi z57r02=4fpylRtmqk?Hq)lCRHpe@mV8@&2~rJ>TXoJ>j7|Gu?XsskyupxfoV51Thw^ zdi!Vj_sm@$^916*Z-4K&_Nx4O;YUC3-I}}TM{wChqqjfv?=#Q&o^E6Q@7nGNB~b^h zhL8hmHQd)^@2@`EQ*4wAHK+W{%9P-Oe;pwZQ?;~{Pb_l*ss(aeEMD%dfBV0@YtQoC z|I9w=ecf9Ay?2lL-tTi?X4^{Ezpr^W`{`qMm4A6(e*B4om@)>307(S7y*mH*|Q zvd)rwCR=WnB{<7Vb7@arXLrbtw8c_YK9@@_oSGc+BkJ4U;CUeqn*tv{><)2Q7Py3I zQm>Mz#MB&-l?PU&EcRe^duo5lQR~hu<-E|!MNE%EH>D|w9$CSA)O-~Ra?taG?P0Rsw2u=9f$6~Mj*#|MbX0Fs&j3BDyvpa21Sasn5M zDy#;;RADs$WX*^2iaGb6nD|=T-3+h$SD8QeW0lg{=Y6W#-`rlEdDZX1s-PJ(HRzJQ z<#{XV>ziF0PfT5Z_xyIzZR}ga9!A{{O3N%x>(khl&$n4>Z|st+IS!G}&pNJMQvPX@ z+x;@-?Kj@#2ZJQ6&aF6lb@h}Wugvv7l-p}QFOt}kweMC{^uM?5oyA{Q?T>xF=tdG# zb@pw;yo0DHI{#>RdjF(bX|BPX3o+}XA`@TjTxRuC zi7T#F5Jn;4& z@6S3)FFp$v2btUce|1zoCh|`4`b8zVt+FNaSFOIaOFjQ^h|RmJw<8bo_n&@xZ(iTT zy%!E{bm8ieD4o3F+m18O-gL&zNetILdFk@(^twxWWw#O@yX#u8oVM5gw11MXWtP&_ zZ%1>UsJx54$0BYyzvz_-+oxNt-aVN;zb*%{1~)yP6>Xgv=dV7e-stM=ixXMYDp)O_ zulUM$@YDMn5?d?f-dBq(4!oUkvREzs$ciHykGxm9_h-NTKgMX;rBAGmSV#j)5e83J KKbLh*2~7Z*hawID literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/ean13_cc_5addon_ccb_3x4.png b/backend/tests/data/png/ean13_cc_5addon_ccb_3x4.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcf13cbf0968189aa04cbecff9d1b3871e5f06d GIT binary patch literal 1263 zcmaJ>eNfT|7{;tfC#RdUUAaK7GfzuN%_tSDsaqdLYAcy0rul^=Q5b%pl6hseo2)Y} zwB(dajS@o-emVqJYHEU%3p745^Mh3)8Vf_n-*C6J<9Y9`h{1jb zbKK|%fk0sU_eI7*Aa=Ha8TY&Qs9jh zF~3G_aF1vjEzG`MAw*w|*r%vh)3IMz8$)=AsfW8`dCy zXI-Be??HelaM`ND5JaK(lR%!u?r(*lLg7a7?FhaZ#6f$kq>hIGsE8gjTV>0?jGot0 zXhAzZkyS~{1s17+HBD!8btqFHt4CfGujxw89kSjcv}T@ursN2s^_SD?En~^uYBc}C zxpl_^ja%39FFFHDBe&S99@uEDHNLMXonH<;aO`R4)D}r~7H~E0fX{7$OM|K>;^5L; zUJZX4H>Pk!@XGBR!gyrezFrRm7Aq)EyGOvm^U%7r&DjhqBHoa8-}x(dT34*z(~C~@ zL(IHacxLH6neqCDyhgE%P7Vik8(5(+de5U%v^ie5uaSe63X8&Y#)};ETI0}!6>Of) zRFS%)kS6kW66<-wO#eFAyOeIJyo4&KF{D1MBOj&hVj5ri3@RT{IVyV&T0*F)H~XK@ zS&-5fA5eGH(~oIJO%kR!d+1rh5xpG`x>EN_6*lf_LjGZ1sz301)Jqxs0&PLfj+l~eY^{#DF3pSS5qWeeXb zHr{Jh|18Sw%;e%`HJGmzK8(Aj2R@iLQgO@miLC_(n}v4+sJ!36O(QGJX!_FtzZhk0&`F-A-EK%e+>5jaLW`Y+~0)n2%kdW=iGrl)byceERWUCM3EiK2f&HwpF*%kT^iN zv(&E4I>!I4G}tGq!fIv5^C>somEv}N;m0-rS~;vy(3(ba6D^IS`np;zcaU^P z&e$XXnyQ@fd52R_+nJ-mA%IuMp2IURnD`_KjAHjPoHW7naEz=(RyEnzlyhpi#S2xM zykh{&^aqoR&jhgI^{2T6bO3Qv@0RlR@v~>4?(f8G4EeZ+F*W=w4*%KwIjsWwb}{tD z3~Nq(T^#88dMcPS981)$E*bIw|Ind^MIvNYD`jwZXtTG`9`FLWjx14eCuj$AK)xi5 Tbf?=M8DxJHHj?|zi3@)Mc=41& literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/ean13_cc_5addon_ccb_3x4_notext.png b/backend/tests/data/png/ean13_cc_5addon_ccb_3x4_notext.png new file mode 100644 index 0000000000000000000000000000000000000000..89fc6b000f7a1f5eb09d71961a5a25b4ae14eaa0 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0y~yU<6`@JPsxx`KyBG76Sv5pQnpsNX4zUcQ1M!b`WR_ zRIdFW-Y4FqqhtK%n{5eWCwk+&4-6%{N>hz4hPUnKH4BPa;KQ z-ZFx8-7DM{KXdix>x<6M^|a^wE}Ua`S#IwC-`B66Kl||Ny-&tAzohDno>x!3cU5kJ ztwQw!xy`jk7oSd!Guo|Ioc}ee>{HFbUoo@(^Va{r{OA4W)uxue-W;g;cYPi6x^E3{ zfHoXwTb+I;WSOZ=8q~sfR<~zg`0%4}D|-t63Ar8LbMl=ICm(~Festcy|KCnNpZ|1z z;Py|F)hGWyRDUm8{!aMrr1g{cu3h6+8g|v}s_mpZ*VOOryajYU$Ow?L93Yl$Vh4E% zBKYB%+_VPkSNBaHys+jAc^_ktXa9cx{?Ph0KbN1}xGHzmUa$cO^+<*wOvNe)_7}t& zgi0hqgoB#j=rW=?@ZVWrEZzD3_elAHBJFYG@5RdL_{t$b(J*RXGuSARapLh({F eC=BJ_u&ZskHT~7ud-s6}jKR~@&t;ucLK6TA5luk= literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/ean8_cc_2addon_cca_4x3.png b/backend/tests/data/png/ean8_cc_2addon_cca_4x3.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5247066400025e4bcafe9347bcad95dcba4b10 GIT binary patch literal 934 zcmeAS@N?(olHy`uVBq!ia0vp^kAS#@g9%8A`&Qm#U|`Pmba4!+xb^n#-J(MZ0uG6V zHUGo6iJvPm@{E|?^5@sw)n={=1!<81mp|3*m$&rN>_46yQCF2(vG>@PwufI6=WZ2S z{`JbOwNoXp&3_-gkH7Hm*22?wywiM)zQ%VyXI`M`5d4Q_{Wb9;I|J2(=U$s|a?zu( zthZ^u!cMD2SAW&CuMN#zbM5(*waH4em`qrG8+Silwsnq?oqo^ez1QaG=t-u}DU6et zescSa^H-+#I=r6Iv5di&an_@GJ2T(zeP&^wZQI}TdA|?;^ttiZZmpX8b=}Fr&*fiE zN3P7^0-AT!Kk!<*+4tWik6V|2URJC)s|l!E(R}LEQvt5Q4a*j27RMH(w@Ea{`mDw`NBt&W-d2_-xPwoevmiY;3rRy!wqXMR=Q2Qk0yWf>dH{-2GzD02MGoPYCw zTXs!f9B*%CJ>ig{^>Sw8kXetIE{K>MjWxQm?9<)L%+VSln=d{5@5N!}vq{H{#<V}*m!ftt9jMoeeT_O7{jD>jAef0WE!{aJqLsb%vf9o_Y!RMbpL_~MsptFMwT zf==ZmNQg!YwHDO(noEq}Gdwf<*Sl$YeJ>2vm22)}skcwgsHy7g`qp{v zw!rn1dOv-AknyW?V*j+m%N}|^TD*Ead-TcL+f6h6ezaTnc6H6+cWYnXetR=BW0|no z+^@IRnMGWlt#U8vYya$snM>Xkh%d@4Su&~S`o~4y4_Dka^DMvpGJoP!CllMPako>e zw@OFuaX3HikNvNRX|5Nx>|cEO@(KmRw>$E!pDbCl)$BRLd1H&H;tby#J7RJ_Mjwy8 cwO6m+{^9zE6Kk|)6RDi~Zts<_pIf7rZZ$h`J!Ix@t(m`# ze^#a4RJ;Fqnzj8qshJZUCNMZQ6=yB^@h;&0-Kl5(PKc_#ddsf(x^{ib%(thd)`Xq^ zQtRedn&QUf$i%|Qrgb~~#=N?n7uH{Xe+Xnt6U&?k<;aPvrx++VDgdF>$*!2v7D-MP zAhf%7{>HmU`ONWl%2RG$+GYE>x2*8=ne7%&zEAz{*S)W+oQ`W^Y@>zUsm~BvNL}}RT=-WlA?2evM2nByLUBhZN2o-o+D3}P1*PK@~8i7 z+@Df6|K;8S8F_?tXp8-AK8xlk@qz zGaheJr)_+||8UQ`qi4gildrc_v&T)?@j_|CwCz4Ix^E52ZL@?umfd_cjrrRAG?ljA zf4Xlc?@gUGH)z|;i3fU)>~Pxie&vR@=kt!vzkbffc$)pQGr}>o;_7ES5;ECAp~oQv zfuLvw!3Izu0wE(v5>o*IX`K2MJPgj9H{4xmH-Gj2bNQKf<=$`nI^%P7KQJa9Y0tCOYI);ylG_t)Y;^-n4GA7yTsT;5mf|D#JX({f4E#v6sL3Y&9w z|0r7VO(-jWuEow97dA{f$uoV&*$J025)AZ8C)_E`oE~X9HE7vQ55Dykd(F$1^u=n= ziaz75YYTp+#r(^DUQ5dt6ld;<)zqWi#GxJl0*labtwlgV2J_Qks_A(!y8d?Rqd% zcH6@BZo9sCn40|DCHZm+!<+EZD{&s*jdHd=y`Oq!-&Uphl1sLC@4CvJeOLaDU);kN z>pmU}>v4ZKS6ct=FT45;Pp?$(zW0dVhxexb@1Ojlmlc11@c17LED9JrUHx3vIVCg! E0C%|!WB>pF literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/gs1_128_cc_fig12.png b/backend/tests/data/png/gs1_128_cc_fig12.png new file mode 100644 index 0000000000000000000000000000000000000000..38a44e0f02ec5eb505fae6c8ac5ea7235d859578 GIT binary patch literal 1164 zcmeAS@N?(olHy`uVBq!ia0y~yV2lB>OE{Q-q}w0aDGUrO!JaOTAr-gY-o03~$UuTE z;O57_@i+Ir@M)L&_d~TIs`}hfKXJne4D%-}(3$SI{r20UojRvKeR#ih{mbH|q3^TS zKKJ*!y?@G*Isa@zcZcfUT<2MDyE=E`mA$hz$DZGu9Xr(^>i)lblimjwyC0t?c6$1a z``0|P|L;B~}e^UGY=PuQyYp37-cQ^j{Rw{`up$aHvL^!-xvG6TjYPrCoXro=`Y*vRbN+4TX{`4((BTyt7U6$?X<6(_(t*X z*Ejdi-`7{XZ*}rl&%3L|w@=K3m<4v?{v%&y!xq^q8Qi)bcXnpK!WVb#RYvabSFe9| za(Za(=Eo~`f1fN?@h@&-kNy|$*Y%edN?D(Hy8qWxAI5^8Fi-vn@RzOisQPrhIL!9U z&;0jWmWI}!|EuL^x32KbWbRLfQ*6(Nt;m{n=eGT?>d2E7r(TGyzozojb!AQD-=*Pi z_b;zO_2KKlzw?XFf0M1vEB(Eu(QE(y?f+L>pPVedDtz+Rv&UuK<}2HLU-I~3?yNI2 zd*pkkUA`Yw?7t~*d*IgmC+=RG)+~8a)06pSx7J^wIhqXi=SAG?&E4!LKAU&q%Kx^Q zdaq9>?Y~D(nIHV*^|b4G_0dn~*PRreJn7f7@@0FrsXjk<`d9AN_-l8*q{yFmFR;?9 zU>U<7aKOXk6A>4uFC%5d*-Yt<%yX{_oFFUnI`{Bb&^3!hW?Va^wj?`Ci zm#3>Zzo{Jhp0~@6?N(>J_0z-K^V__apV@sldGnuDXU_i5le5g7lRIta&M)nucDvoK zHWmCV$aAQ9`}gXRKX3WJKl?gIxVo~m<5~X98H($FKQujM&hGTE;c^S-&$^j9tLG;E zzqotNo0WHCqUQ!G$Jo_){Cac$vAO?gbN%8~%^&ifJ$d!lT71>%35TnT<*soo{J?qc z#_7pMt6%Hn(>R-9Hxop|l_dnllGqJr~ui6mClz~btn92~v fiAGSWYITf^aO^71iMh7GaAWXv^>bP0l+XkKu{?FY literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/upca_5addon_bind3.png b/backend/tests/data/png/upca_5addon_bind3.png new file mode 100644 index 0000000000000000000000000000000000000000..11da1cf6a244130c5fb7879ba8d41c55fa003701 GIT binary patch literal 904 zcmeAS@N?(olHy`uVBq!ia0y~yVDtjA8#tJNCJYSB{+=$5Ar-gY-nlq!kpe?Q z;*HC{_ZwATyeX?LEaz!CK$HU6|f6iy0c8|H2 z_V@SK8LyukJf9K$JMp#o>x+HwKL3%^+n;*!{pafUFYNZei_pKZH~;&A+tMj{k>5LZ zFAn|jnCE!-nPln0yuaE1zLkIcaA@({uUjOOdp=&jwXMcZf95W0-|K1l`!>Gyan)Sf zb*wEu`-F5>+KIbUf9Bnud?dfHZ`=LtwJ&rxeirAmJ;$1szoI91_2=m;cYi3k@c69F zW^YHy*-_CDebhp;{{2SiGVkh(MeGRTg=cVOm)HB+6eoo8Za`)p|-Oc7b*I)VH zf35v$(m`wA_n+F#PrqCn@Y{CIQOg+f{P%Sym%MwNH}j&-xrKi}?KW83#dO|&#Z760 z>f-0zk9WO4zdnEF|GwIPaq0Ue$A9|I{bYN|>y2mbeJFjx`-$xd?+NJ%<_h@^_dvK| z4`U@WND!yQ32B6mhCPl59jFqFmCZ1tK<2~j0GW?d0%$SBa)@e(tDr6dM{9$CQ-|i# zS-X!)I91#;|NlAauJXNv@Vqze=kHzm^L~H&{4*!-?|qnTn`fviv-j+Zi+s6hX_mno zKWNreId2o+{Qa5X-^9gh+p~U$sNbpfDST`Dp=Gblyr{E*;{9QJZ7lbn%CIgqzjH5a zxoCIC=FQ&^2$$WyeCo{NrBk%pc758C?fb9s`n|*PSGI*WU+=$`FS+Np&FuJ6|5Aw^ zK0E$yEx-LZ^V!91eRuz?`n_*`>(V1X_WYN3HawQ;KTUuAmy^$LmTmFNon8{RL(w>A z{WkU|wcX}LyX_9oyzTdYivHv0cj9vUW9I1dFXrrTn0a6KwQatB{?AXlO!mKecG%`x z`^6`(KZm*J-oChN+uamrx7_tBtN*+?yXCW)$?Uz)Lq1wgIPGTrpJkQ$mP5Rf`}Xpj z{=HM`{$CN3zw3;)aka2@fBrM)0PE*(?_O>NCX||;`wv}6k`S`zeFzFxPgg&ebxsLQ E0GwCV(f|Me literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/upca_5addon_notext.png b/backend/tests/data/png/upca_5addon_notext.png new file mode 100644 index 0000000000000000000000000000000000000000..faf3b144d08dc9597fcc83e6cd3d8e98a46fae4c GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0y~yVDtjA^EjA*8`1)(p*XcW+o2D1f zSbJr)?A%KGhhL4uul;^0JJ<65XCtNw<_h@^_Zs#vRx*EL1K}sUC!|4wApGFoJ+}jY zV=L?T&AYij`TqM|pZxxv`p^Bv-)i^t{QM7(We~cXAtoT}#%U~E;t4OpK8Jfq4#6XF zLKn_#(wKV?t7Rk#{ cw{_cXy0q@Pa1+NQU<@#Ly85}Sb4q9e0HU_IV*mgE literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/upca_cc_2addon_cca_3x4.png b/backend/tests/data/png/upca_cc_2addon_cca_3x4.png new file mode 100644 index 0000000000000000000000000000000000000000..262ec0951236d018e271ea707fd1ca81bf450027 GIT binary patch literal 1062 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yx}OE{Q-ZIIZFUs0`JU-ztdd!DnN#7gMc?+fJcmF0`d!)bWAcyBFSmdE=$-22 ze&g1pRFi36kKI33dNnuk&bAKzq#%E_I7UCx0yes9($Y$Venv`z_nrdt^Ko4t-rFo zx?yd(*|)bxK9w)swrT6SpqZ(sKYwpEI{tsj^6R_bs{}JHVe(*Ah+?=N^*hS*@QjHo z8G?X9Z&t49NlaIT$UfLzt!1q(VQeG{cFFmo6Yp1k+JEolp3tP%(K1Hwr>y=uZ&$5u zXY^K6yVG)0ZwXA-`MM=UtuO9h&-~rRvt1W^9Zu1T`5)!+@3vO{s>%-Qx|=H^v!vP* zCG7U9=mkGK<;Ggo^SI)I)|8MPI?;1iex2qN)EM|*@@wTUCDDM(8bORxdzC~bLT_pS zg(1xUANhhFF1LIXHdS3qAwKk)&$1?&uWrUOxlW|X^=mTLDg-Zly!XPj`?XX5mA}^i zm7?`v^#m>ju=~NmqaX_QrUz?72m{2&Ag=+L5LFDIK$*Y=m4d6nW&m6jHUm(sY0x(4 zc^vWF;c&t3yYt*<|Fix3?c}G=QMnm?%LTIhg#c5WPUY2gsmlyjzG4<$CrCF^1N@Dm~H z^J;SIqUQ3=XPjF%<9zJww3{jB+HI*{Ic9zl{azlHBer*~yY<}_FYmuyeyTcqq0I3@ z_bYypGi5?zFHEn9iu`-u_h{3cvTFf#SN};#ynVj9`ZxEB?T$6Kuk5O|G%@vuef1%#SWvygQ{oO?}C$>0(tj zw!drUsb1n+4uk67$i@RSw zzKQqjf4qu&Tki50wum_Y^EqCVFT3jtyXbq*cs8wm_xyi%zH1zN9v-%@tnYJZdXLpc hW%+Nr{&qf)zb9+(!T#jV2w?ta@O1TaS?83{1OSb6{5b#s literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/upca_cc_5addon_ccb_4x4.png b/backend/tests/data/png/upca_cc_5addon_ccb_4x4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb914998380185ab6a54c0084b4382b0e7deb516 GIT binary patch literal 1179 zcma)6Z7|yh9R91Ro;B$7rlo?ms`N@nP?bcLdYJ|b7OKjOOqF_1v=Om(le#WmR+GiN z%&GUQjMB7-uredsP%n{Wq~4km5t2$o{usA!yIpS|elK^=@1EzL=ff{Iz|RY!W26HB z0K~`J0}TKgy9J~j*tgq59L`z-z(-L&9&SMye908Msp_1*R`IrO=j8=K%3bY`n!A(nkZ7Fbi04|j59hfyM4U?x;*{!>UDd&bsJY$@@m#CxhqA-Rb z1%9Tbm2D*tzY{&c;Gojgg*WxRxCh3e`h<(i-zF2(nT(^)ImZ^O1Lx-HhaPPTBrw6+ z93mlla0ABnL$1g2TE>m+r$rsUbiQVk-hD(;{xtISNcEl0v9kFLf2efzgw&fp{=jqk zg{jbPjbk)VHQ&z7uEIE_Z8RXv6xoxSh>{gt_?h$Apj}0cX6=;`fp|CxtlNX4^#1B# za4Tni{z9^g^g^EnJmd&OuE9_h5(HCEu=X47FqvTDp9xfJS*Q~Hv507UvCA}%WO^OM zY|XM74Ta_I>vD2d+N#)2c?{J?mJRirA}$a+M)p5etY#0h1XTFy0u|rX57cs$WBHGJ$$g zF>%hF$M~d(nCix3VD=2(+p~QCpIH8T`5?F#=l`H!qJV#qcgNJ+E*Bq!q3B#Of-jRU zR3!>_xL0##9B<)%fhVG(W|IaR6wRA4q1#xop_b3Vr`RDht|S8 znZ@!<%u{pufOz{kq5y_-((Xk7Y5d& zSxbrPWiuajWgO|jke7@#_|0m}ab##8x9qB|g&q=u%Mo_+g~#P=IEguJzzTcn!p9ZL z42PDmSJkumBeJOuOEGpWYm%)ZdFAK+%zcEWlF>B?J^2}fP!JIT$dc45LR|E`bMZKOvA zggX%q9xpt7-;z!%1f$%s@ixyV>}$x3@Z_F&g3=}>`Q*kvJeB&JDI5a+^bnloP>PsL sTYLV1l}kL$p2kYL?AO#r$PjI5hFOj;D|sr+?$ZH$F8g^jU5dQ>H*9usX8-^I literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/upca_cc_5addon_ccb_4x4_bind3.png b/backend/tests/data/png/upca_cc_5addon_ccb_4x4_bind3.png new file mode 100644 index 0000000000000000000000000000000000000000..6783d1679475861311136934ee75c5254ef5f030 GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yU<6`@1`Z}5dCja$gMoo1!qdeuq~g}wyB8-Fdx@}J zurPi9|I|6xSN@tMx1+Lqx2{{Jc8O(vZoA5SexN1>h70QxWsXl;&U^U%`}Z98|NFSl z_M1H4$h7v!&YwG%{1cw z1f&0vtP0;6ZZMz!bUn>%Vx8$dV}JRx-&-cGtFt;=w6C=K;)%^l-qv%C?k{zpR`c^t z$aeWk{-pQXPFvZJ$O%+0xPQ;?ey-a(WB00;S1f*h=Lq`ywrJMVA0OwL8Ku_D%2c0U zwI%0fRe}I+FaPpIkZs&6ucAHb{pCLQwN#c)rG3EU2=k}p;KkfefDOTRkCjNi#-aq*#bf;^5iv0d((v(_#hkf#W_409l z!v8+nzgj$ge(cxJyX#5{if2amExYAh`RsB3ySe}NT(nyI?L)(v^IC5Wcn)uhD>Zvh$k>mJ$r+^93z*e-0m|JRXhcj0P_kFgC}jccrD-Dp13 zZF^!5nA&6bIf>u1H2Bul=iPUgvP*~V@+x@^vTU(ceA(@syB9;MEnXkly+FiV+IK5^ zNcFud74QGXHC!n^z3=0~H_@D@_U&Bo=C(G-!;T;?gF+tccWex7VkpXqFyfvT1DY-1 z^u~~I)SxeUZe!cS&p&J2XaBRU{gVCjf7Iyb~`7o^QT*-l=R;)GNPh zC)FhWO}rtt_iw(dx%IL2)24XL?G*X^sJQXiYSm3bLEL++B0pxVyta3Buzgn8Z*RVJ zk1fP|F(IYlUMGGPup|9IQ`<2u#?xmd0z{z+Vu2sZu;fAPjW{#_j9;c zJA7++)A;(_x361f)|{Jj=F;Y`SKbSrd3L*SX5rtTKC^XZ>RFVdQ&MBb@00rkv{Qv*} literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/upce_cc_2addon_cca_5x2.png b/backend/tests/data/png/upce_cc_2addon_cca_5x2.png new file mode 100644 index 0000000000000000000000000000000000000000..5508fbed999b7f0dd5109e867b8a88c1575f6e9b GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^2Y|SQg9%8+JY8kXz`$(j>EaktaqI2fi+zg?cpNTn zdiDRm(eHpx$0a-XSfUQ?^j~bkC6JffZe-B&_{WNLiME&TuXCh&FMB>`tN-)2A2|yD zfAVp~vATE2$I=&Dbh{Iyk+w{q#6znU#2 z2$XMJz?O9~D%BugfAxeK*2(KnUR$+#$E8(!(=TIr}rxU6dJ(ijObN`n!n`^$=cxwFn zzkZYd&hWzOf0C}e>NYd>uF6xoAnW~UhwA;e>PiCV(z(=U9^Y=8R-W*#$5|;L{M#DU zWk!wLyq2-N((Ru6C;w+q1ph-|NL6qqN%lLR%4K@!-@Tx3UcJdhl`z2-+SNvUoenGF zT7BjBW~>kay7)@^-Z06tM*Fs#*36kV>%WRRQ)wu}+?;-nD{GyrcXc{g@C&|3O3i=P zxAf2CY2Ws%yRbBgurYzW3i2&5Fd4uc4i+%SL7@RE?7#pH4i+Ym8cfwpj1XZCh#_#* zVmxc_J&E2|`?;f>B|fJp{MnM_KLr~%bU)XxvA$ooMd8Q3YkX7R{4sRm*fP=K>FFi2 zZ+~unnRfBh#V8x&&BFdqp9PEd&%Bc)!*=T1cJ+U66%HG$k^SNLE#&BF?kf(DE#$Vp zj-NTj^!BR0kY~RH8pVW7`jS7y=0yCGvAxxHPW|@$p6TCp7cGBzV$SK5W!8&cb(z;j zz1iuq;`cM7f1)?c=KntWM@{tSjkRlc)ZQ-6V$t$HvwEpd-_Ino^+#(KAIy03bC$#B z#k_qr7jujI?%N!7^t^s&-d4+(D;etJs@|VI%{$xweE*Sor`LY^Gv#CSw=X~!IPUv- zXm{3%2dB<%%g?$fv&PraRKymD^nzstA&FMV(ICAR*_&*wr7j~I?NmOm}87p^u+RhxRx{;l_inLTl* zFK^A?npVC7D9hNz?4J73cBP5&u^8`TuSNFR<;|J>_?z+0KRe>MLJC0!D0b&>R?mKR zd`7nN<=@X29dSQ1fAg8OUCbiv8hmHYJt{29{Tp__X407%Rj(z}ihizm%@8WHz`~*M z#3SXCJ#NR1{oR(nx>cB+F7e;*O9w(S`BHAY)VY4=?fcqQ=0(o458GFsSP~-&G&DeF z#>AuF`+q-6UzJj~{^s@W6FZ?>&Ya0dRlTo! zK}>n^;KSCsYwuk%Yx@(`_Fua;t^fY1Ns$xxmHn$tH?pkX|A#a4{_Y#i@r(1`&50>| zxuAP-m-5q(^W5UhX5V@1yV~MjS4wG(#J8gV)1{4<+J0_op8rUe{c!e9t-g7`75n05 zzjk^yy?=?tvGV!f+-H5dd^uiIc|}d&p?hz>ZS9KFet3G*5!t^pS3IhktY3Co(aBU>SotX=e;&d%l_4C&J~Yd?3ZlYBlP^G?bO9_*Zc}&UbgN0Te#wj zhyEYfcoqs>℘njTYZ@_CLSz_*|#$ zsvqT%`-;y8mjxeX4E@tw)%Eeu?>}>XoXK+EI`iF3%fGezB|G}Bn(tWG_4x2Y3s6Xd zA_^4Aj9tx;)BuWAkT9wwFtR~O1t#fGh^!MN*?2xxa%)p=?%AX3_wDF3)nC}fynDvp zs!x}hc5D@`h!>i&cY)r%oPvblR~xnDG=(_!E{{}*J}Uo>M<=9z*{83j6D%s*PJZqW zF1l=-e&y{e!NLSl`$bmM>NhCfn){+L?(x>uKOVm~5BriD`AF+t$?V>#YgTT3{HN^v z8E&n^>%abO(_HH-r{t$EdHa}}-pl{OO{c7{OuDvd*Yk}ZO4ckn;=W_wpM&QPZ~ozU zO3k(u?q~3H^>bP0l+XkK Din17) literal 0 HcmV?d00001 diff --git a/backend/tests/data/png/upce_cc_5addon_ccb_8x2_notext.png b/backend/tests/data/png/upce_cc_5addon_ccb_8x2_notext.png new file mode 100644 index 0000000000000000000000000000000000000000..8874016f6b85e523d4b4b315ee5fd64319e2db50 GIT binary patch literal 596 zcmeAS@N?(olHy`uVBq!ia0vp^-+(xeg9%8^cCFmVz`!K!>EaktaqI2fi&?83MA|M! zefqaPN1w@6;@g+`l3O_=U%#3#Z^hL9#BiTG-)jF$ZO^^^et&;-#lCxapMU)Nxc9j3 zmi6lYpZ};TQn?!V)P8N<^qrp#%Kx3LwPy8@QQ=$vYU94nsWXjcdd;_=JNv<8$-T3d zuP*OB_b%e7<0FN_9a&=WGrcBfpShZH$M50Wy5Ggc^}kQX)ZLBOgeW-ks6Kk8>1UvV zsV~1)2mY!)(|_|!t|)tF^O1+|BKO$u?Aw?9u5QwkS-)Ngsull?e9pMq0%&hv_tDf$A^=jQ}OEu5rpIfW8)%=f+oTPp!{J4F&%Cmg1Bl(2f!4`tT zNr=5u8E7|%xxLbYb-n)n|91P;?J92tmM*U@^8bG)o$c4}S=Bq{pcB*rC=cC5r_P?I6o!@gr3)vAs_c*^`kCCjs VeP+S3!@$(S;OXk;vd$@?2>_VN7C`_2 literal 0 HcmV?d00001 diff --git a/backend/tests/data/print/bmp/dotcode_aim_fig7.bmp b/backend/tests/data/print/bmp/dotcode_aim_fig7.bmp index bb0133b552c6fb40ab26a9dacaa0f34fa9acbb9c..69bb9520bd1c527a2080f60ab5c8e8d005c3f0b5 100644 GIT binary patch literal 2062 zcmc&#K~lpo3{>d>PV@=Qkyo@c-1!CnXoi>dDR~0N92mlSEsYHR!-6lpC*ve$B7 z-=3e0;{y4D=L63>o&$dEcmR-|Wm(#(V#8rbRuN{W(dL8|VRpVBz5o>gLt)qH_>HL| zcKlSV%B$+bC)>eo2{9VAv`6ORIA!gYFc*)Xp>45c1m@y2XRS9@<&DxTmFD#!!*+1J zi8WG}=eaKsWF|v-@6UHw6hyhF4Msk$6Xq#){Zy>VtLo!N*CN*IORf0`D!5G@RM4fN zf@W`Qa|CFr`qnFOYemJ7!4(y35@*4wV3WYLrXsMK3O31(pNds^Reib2t>n=IJXTW| z10U$uBx2kQtzlXGhAksn1BcSLfUdom%VBtunA%S diff --git a/backend/tests/data/print/emf/code128_aim.emf b/backend/tests/data/print/emf/code128_aim.emf index a646646275e112d349b2b9c62f2c8e19fe4fa20b..8ea27995d613544d1b6e7e32d68e98d14db0e244 100644 GIT binary patch delta 185 zcmdnOzK4B+h+;Vd0({_SVEDw#z@Xsj>&C#q$gqc*fkA1asX3=0Pz?_dGfvD5SKtOR z_z;@FtO<;8fu@NMau~}u`!e2VR0JuN0Ai3{5D)`m5L*t2LqK@4BeSq96OhHg&|nY3 eE5Cd&y@Bv~5kP1!^!;!(0!FTdpW^n+hk``kC delta 182 zcmdnPzJ+~)h+-K70({_SV7S7|z@Xsj>&C#q$gqVO$ew6wKCvQ%l?A9wVB$qFRz{He ziEnZk%Qi|O3Ii{Nhv8MrKFUU7r)BF5ArYKUOEGlb6|7k ztPC@I=BAVMZsqxOFw2MU;lA{>Bb_}xkEKrE8`8bGua)z&E}`4*Un@VxXC^o^RXz>Qo-6lLcw#O* zWqsy?Ggsv>1gm@&oc&k62;MiGx$wkXc*?%a1!u0xnF)^f%ICrPUhqAO|79NHUsf(T APXGV_ literal 1200 zcmZ9IL23d)6h!|dF^CKyhy;-=vWbD{!b|ARy@$x*JXUTo*6U1#8XG>-{iga?{qCyj zN9DEAX61vv{bSYTq3Yv!K2>#feX2T$>oZxu(oy^FuO>go!`JT4*sp?1OJ-VF=4=>MS4IbaB)WDK^HZml~kM*KT{@Q5O@{ao*-|o1* z$(DWWHy0;E=H!ePjk$Hqot!-A$&;KsaPlN451c&7?Z-d7?92S<@JVhze3G-L$Vs^m z?+K@0a^ELsa`JE{4|m-MM!}N%KJz8lv7PCMxBHL<9lesfFDyCp^N+cc+mH85Za?yK z*S@?ZI{cG62Oi1o$2%q0v7PZjzFzEa3Sk>t diff --git a/backend/tests/data/print/emf/qr_v1_m.emf b/backend/tests/data/print/emf/qr_v1_m.emf index 33041d573e5079bbfc9bc14f04af3551eeafa744..2493b9fd9fff44a2183c9abcb0d9f1c13bb2636b 100644 GIT binary patch delta 29 jcmdlXctmi50qYSC28Ni4rskZ23=9lBK+L!?)1LzXZp{WE delta 19 acmX>ixI=J)0qYJ928QT~rsf+fd^i9j5y&7Sh~XCnw`c!-#&XtLPo_&AXVIY}wF zR*9L}ajDrkdF2_ZnI&54NNSpzIH%eQIOrNHJL@-UTZgXuXJi_H6xZ=bZ*F{sYccZaFVDS(?~n=T#Nrcl=SWtl&hYGdXPbVaYA!hn1RX0i>ww}x}t+kko!AUtkSSb=0-*K7I5bNshG|=l~ z$eYuCyLS2RYppwXjXnExk<-uDKSg}Gape5*?~gxRLw7V-Ru+4|y;hkd@P&3CZ?L(? z#DccT1z~!nNw|%AX~~w_b3I^K;CJ>tNFpB~X4s&27M3`Sc??P?A~gw0WuS5^*+@u# zIv$bVjhNJ^*Nica2;_^iy{93HLk3tIZs4Ve;F3Yk)FDqvP6;J<@#W@Xh(J22QI|>< WNuQKVW{Kb`J^J_Kj&2%I0027`-%_Ih literal 83 zcmZ?wbh9u|lx7fR_`tyM|Nnmm1_m7yK0=4|Y5!M7YD^=wV8JNT%k_AC|0}7UK}yW3pNZv=?>^#VfKzdPAw{$# zdss5nh~|vj2 z{(@qVHfNaT!}u7v@lDv$2s2R^B)nyPh(RU4%xX~9hj!4|ovZJ@LzsX4C?tg5<&Wl` z{{NFTcdie9OSlb!Ky;f2fkKF6A4mbwEg$uvc|@uK8Utip)Q1q#<_yz(7#|}yzJG5^ By{iBK literal 668 zcmbtQK?;B{4C@daphM8u;7t{<5=65N(ghjf34lc9dyzhHn4=F*KEVyIY@zER2mC5J@*=VQdmsEsTvDkh?)CD~EBkJ6CrC7ww3#cjKZRF*aN@ za^RsG_$xXt7v!&$6z z)ccK1p?@swYSc+s9qtB4K6zx#SRO`nkVdZYv2;xFer$pgL1{0n8)sJnzE$hT21WY^rE2xw zE7vT|Mc3iLb-CzL95@N9!`-kSUe#Q)C>LFg11Bh%B&^lyy;Ig~z(rT!z(LV^L5cq4 zG?z$4N3f$W^^xaaNkCo4QJK}jZIr9V0SdF}h6_u#QX z(RwHvtea&woQtMrd(LS9>(Up^-SBlIMAuzc literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^(m*WA!2~2N_AnIzsR&OO#}JFt$$$R;w`UGz6lP{- zR#sM?(|^W|ZO4^_O_G_9-2Uh(i5gt8k?Aaad7xF!d$q$rxJ~nc=PdZ$F u;F9vkM6dM)D*DshKbsy+bie$CgQ4?`VoBDHd;LH=7(8A5T-G@yGywqVA~DMV diff --git a/backend/tests/data/print/svg/code128_aim.svg b/backend/tests/data/print/svg/code128_aim.svg index dbafcbb1..4f20b887 100644 --- a/backend/tests/data/print/svg/code128_aim.svg +++ b/backend/tests/data/print/svg/code128_aim.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -27,8 +27,8 @@ - + AIM diff --git a/backend/tests/data/print/svg/dotcode_aim_fig7.svg b/backend/tests/data/print/svg/dotcode_aim_fig7.svg index 6273525f..7966d67c 100644 --- a/backend/tests/data/print/svg/dotcode_aim_fig7.svg +++ b/backend/tests/data/print/svg/dotcode_aim_fig7.svg @@ -1,51 +1,51 @@ - Zint Generated Symbol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/data/print/tif/dotcode_aim_fig7.tif b/backend/tests/data/print/tif/dotcode_aim_fig7.tif index 83b548fd8f6ab1952468e569fa257060948d8907..74f4dcc271938c8bd04fd11f1780cec670e82d48 100644 GIT binary patch literal 39244 zcmeH`&u$ex48?Q%2eGPzL;(R3EGwRY1q&ARExO=A5KjRwTkvhBBRBOp$(->xnLG0d z)roz4es=D6d;2Ba{R!b8`@+*B%j82uo9{kdf%vwjB_94w4=rT4kYb_2<_hs`P@5pd zW8vlyZJ~u&hWNIr^`a8jTX^ZkY~(ApjhESlAlhtmr2z45Rx5%jOW-L)%lp*Eh;N%( zFRI$j^Lj64Q{SXHpEnyL+H7;B0P$^EOKi&2dJ56%o%Jl@+oM+B#-43|1IVwg{ps2# zr2X@+ecUA(;R%Cy3-AK{bGCcMVP0wbkD!lens4r;x2psmc)_Z&U? zBFu_bOvOvP{Zr>2eG%rYRxB`mg4n!AUxZoL>RG$z=+PHp&T5kayUiz^d-O$^OSDvz zY-ycikG=>qqFv`jb{BmEJ-#5qjA->u&dU-H|K>GWS;c`Vu5w4TRYv8-2~s?k%UvoF zW<+Z@Y@1a2ya+R*)v0D@MWlE+yQj4fVMes3bBSQ4j(Br~8PVe8Qyto*nxc*O2s5J9 zslaRk26kIVjxZxy>*Vttz@i6 zv}2PQftT+L)LpXp2E1P1%NJRo1vB;JAA(n<<)#!@X}yY#n3J~gxWbHHzQ|~H%yymi zdA)pfDm`n&EVhl8IuDrj@J1>Z53ov ztjwFF;xUn191&kHEwTrlS>m_>ZOw8+R=X0ZTqEYu>t zUfROZ#4?>(&x#EfxkP-uw8-FD=A;1es?s99UfQYwlj0I)s!3Gq91&kHEwUMe8S&k< zOKkvoK`$*bJHm|kPHBmUe^X`RJr`0e)=XU@+Nqu;_g=mVTY?miNwBw&$}&hBO=AiY=19p7ECEXn3cA8N(3ux>!mHk6Uz{0vEd?@2$h!> z8606oe6!jFEL+bDytJI5Hb$6hy=v=;tyVJDdud0283DpP!)})}wE?f!@6i`wp3>4i z|5p2La8ruA@I{yvZIX(|6&BK?FT$*A^{m}<^yrH)D_SuXFYWeEoqO~}n6p~3!1M`X z^B#Q>W?idi?Vh7YUxYcUO$zKbpLFig7hx{ZQcbd@b&fsyBFu<(ofp|%^bH^{h-h^x zJ-a1enuUM*;7OJXDNeF>$Bp?WdS^X* zYQFk5_N=~vt8gDK!r}3M;KTVt{F}~)A^u768O7)H_v&v5=fnL`^J0k4D1LRg2$%Ht zHPu`X_eaeexFn!-i7dkQb*^auk9dOY;k zvXxKWVs_C(eJN(X#q6SodJDF?JUTt()_YoAwfZ7^%2wX8lAz`JgqV5KM<_fhcgj)k z+eRc7JAIc}>pOLTQGUV^7l-mFI E7rI|Cwg3PC diff --git a/backend/tests/data/svg/codablockf_3rows.svg b/backend/tests/data/svg/codablockf_3rows.svg index ece7188d..0645033f 100644 --- a/backend/tests/data/svg/codablockf_3rows.svg +++ b/backend/tests/data/svg/codablockf_3rows.svg @@ -1,63 +1,63 @@ - Zint Generated Symbol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/data/svg/code128_amperands.svg b/backend/tests/data/svg/code128_amperands.svg index 071b7c66..28c0ee97 100644 --- a/backend/tests/data/svg/code128_amperands.svg +++ b/backend/tests/data/svg/code128_amperands.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -33,8 +33,8 @@ - + <>"&' diff --git a/backend/tests/data/svg/code128_egrave_bold.svg b/backend/tests/data/svg/code128_egrave_bold.svg new file mode 100644 index 00000000..0981b05f --- /dev/null +++ b/backend/tests/data/svg/code128_egrave_bold.svg @@ -0,0 +1,47 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Égjpqy + + + diff --git a/backend/tests/data/svg/code128_egrave_bold_box3.svg b/backend/tests/data/svg/code128_egrave_bold_box3.svg new file mode 100644 index 00000000..23d66bcd --- /dev/null +++ b/backend/tests/data/svg/code128_egrave_bold_box3.svg @@ -0,0 +1,51 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Égjpqy + + + diff --git a/backend/tests/data/svg/code39_small.svg b/backend/tests/data/svg/code39_small.svg new file mode 100644 index 00000000..c93b6d41 --- /dev/null +++ b/backend/tests/data/svg/code39_small.svg @@ -0,0 +1,41 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *123* + + + diff --git a/backend/tests/data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg b/backend/tests/data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg index 27a04678..f735e419 100644 --- a/backend/tests/data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg +++ b/backend/tests/data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -38,27 +38,27 @@ - - - - - - - - + + + + + + + + 9 - + 771384 - + 524017 - + 12 diff --git a/backend/tests/data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg b/backend/tests/data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg index 6865935e..9186e92c 100644 --- a/backend/tests/data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg +++ b/backend/tests/data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -38,36 +38,36 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 9 - + 780877 - + 799306 - + 54321 diff --git a/backend/tests/data/svg/ean13_cc_2addon_cca_4x4.svg b/backend/tests/data/svg/ean13_cc_2addon_cca_4x4.svg new file mode 100644 index 00000000..866b9d09 --- /dev/null +++ b/backend/tests/data/svg/ean13_cc_2addon_cca_4x4.svg @@ -0,0 +1,147 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + 234567 + + + 890128 + + + 12 + + + diff --git a/backend/tests/data/svg/ean13_cc_5addon_ccb_3x4.svg b/backend/tests/data/svg/ean13_cc_5addon_ccb_3x4.svg new file mode 100644 index 00000000..f57b25b4 --- /dev/null +++ b/backend/tests/data/svg/ean13_cc_5addon_ccb_3x4.svg @@ -0,0 +1,154 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + 234567 + + + 890128 + + + 54321 + + + diff --git a/backend/tests/data/svg/ean13_cc_5addon_ccb_3x4_notext.svg b/backend/tests/data/svg/ean13_cc_5addon_ccb_3x4_notext.svg new file mode 100644 index 00000000..c56eeb39 --- /dev/null +++ b/backend/tests/data/svg/ean13_cc_5addon_ccb_3x4_notext.svg @@ -0,0 +1,138 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/data/svg/ean2.svg b/backend/tests/data/svg/ean2.svg index 25b31406..ac209e03 100644 --- a/backend/tests/data/svg/ean2.svg +++ b/backend/tests/data/svg/ean2.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -15,8 +15,8 @@ - + 12 diff --git a/backend/tests/data/svg/ean5.svg b/backend/tests/data/svg/ean5.svg index 30fd272f..4ced2d75 100644 --- a/backend/tests/data/svg/ean5.svg +++ b/backend/tests/data/svg/ean5.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -24,8 +24,8 @@ - + 12345 diff --git a/backend/tests/data/svg/ean8_2addon.svg b/backend/tests/data/svg/ean8_2addon.svg index a61763ff..1639f733 100644 --- a/backend/tests/data/svg/ean8_2addon.svg +++ b/backend/tests/data/svg/ean8_2addon.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -30,23 +30,23 @@ - - - - - - - - + + + + + + + + 1234 - + 5670 - + 12 diff --git a/backend/tests/data/svg/ean8_5addon.svg b/backend/tests/data/svg/ean8_5addon.svg index 4d010166..01e82906 100644 --- a/backend/tests/data/svg/ean8_5addon.svg +++ b/backend/tests/data/svg/ean8_5addon.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -30,32 +30,32 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 1234 - + 5670 - + 12345 diff --git a/backend/tests/data/svg/ean8_cc_2addon_cca_4x3.svg b/backend/tests/data/svg/ean8_cc_2addon_cca_4x3.svg new file mode 100644 index 00000000..f6c85896 --- /dev/null +++ b/backend/tests/data/svg/ean8_cc_2addon_cca_4x3.svg @@ -0,0 +1,116 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9876 + + + 5430 + + + 65 + + + diff --git a/backend/tests/data/svg/ean8_cc_5addon_ccb_8x3.svg b/backend/tests/data/svg/ean8_cc_5addon_ccb_8x3.svg new file mode 100644 index 00000000..2807b850 --- /dev/null +++ b/backend/tests/data/svg/ean8_cc_5addon_ccb_8x3.svg @@ -0,0 +1,182 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9876 + + + 5430 + + + 74083 + + + diff --git a/backend/tests/data/svg/gs1_128_cc_fig12.svg b/backend/tests/data/svg/gs1_128_cc_fig12.svg new file mode 100644 index 00000000..9ade7617 --- /dev/null +++ b/backend/tests/data/svg/gs1_128_cc_fig12.svg @@ -0,0 +1,252 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (00)030123456789012340 + + + diff --git a/backend/tests/data/svg/postnet_zip.svg b/backend/tests/data/svg/postnet_zip.svg new file mode 100644 index 00000000..cef9a9d8 --- /dev/null +++ b/backend/tests/data/svg/postnet_zip.svg @@ -0,0 +1,44 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/data/svg/upca_2addon_ggs_5.2.6.6-5.svg b/backend/tests/data/svg/upca_2addon_ggs_5.2.6.6-5.svg index f7898ce9..cd62aa7f 100644 --- a/backend/tests/data/svg/upca_2addon_ggs_5.2.6.6-5.svg +++ b/backend/tests/data/svg/upca_2addon_ggs_5.2.6.6-5.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -38,31 +38,31 @@ - - - - - - - - + + + + + + + + 0 - + 12345 - + 67890 - + 5 - + 24 diff --git a/backend/tests/data/svg/upca_5addon.svg b/backend/tests/data/svg/upca_5addon.svg index ade5bb02..e0d489f7 100644 --- a/backend/tests/data/svg/upca_5addon.svg +++ b/backend/tests/data/svg/upca_5addon.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -38,40 +38,40 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 6 - + 14141 - + 23441 - + 7 - + 12345 diff --git a/backend/tests/data/svg/upca_5addon_bind3.svg b/backend/tests/data/svg/upca_5addon_bind3.svg new file mode 100644 index 00000000..ade6f752 --- /dev/null +++ b/backend/tests/data/svg/upca_5addon_bind3.svg @@ -0,0 +1,80 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + 14141 + + + 23441 + + + 7 + + + 12345 + + + diff --git a/backend/tests/data/svg/upca_5addon_small_bold.svg b/backend/tests/data/svg/upca_5addon_small_bold.svg new file mode 100644 index 00000000..35d676f4 --- /dev/null +++ b/backend/tests/data/svg/upca_5addon_small_bold.svg @@ -0,0 +1,78 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + 14141 + + + 23441 + + + 7 + + + 12345 + + + diff --git a/backend/tests/data/svg/upca_cc_2addon_cca_3x4.svg b/backend/tests/data/svg/upca_cc_2addon_cca_3x4.svg new file mode 100644 index 00000000..d8b7d2e6 --- /dev/null +++ b/backend/tests/data/svg/upca_cc_2addon_cca_3x4.svg @@ -0,0 +1,134 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + 23456 + + + 78901 + + + 2 + + + 12 + + + diff --git a/backend/tests/data/svg/upca_cc_5addon_ccb_4x4.svg b/backend/tests/data/svg/upca_cc_5addon_ccb_4x4.svg new file mode 100644 index 00000000..92a8abca --- /dev/null +++ b/backend/tests/data/svg/upca_cc_5addon_ccb_4x4.svg @@ -0,0 +1,158 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + 23456 + + + 78901 + + + 2 + + + 12121 + + + diff --git a/backend/tests/data/svg/upca_cc_5addon_ccb_4x4_bind3.svg b/backend/tests/data/svg/upca_cc_5addon_ccb_4x4_bind3.svg new file mode 100644 index 00000000..7d39e0ec --- /dev/null +++ b/backend/tests/data/svg/upca_cc_5addon_ccb_4x4_bind3.svg @@ -0,0 +1,160 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + 23456 + + + 78901 + + + 2 + + + 12121 + + + diff --git a/backend/tests/data/svg/upca_cc_5addon_ccb_4x4_notext.svg b/backend/tests/data/svg/upca_cc_5addon_ccb_4x4_notext.svg new file mode 100644 index 00000000..0fc3fda0 --- /dev/null +++ b/backend/tests/data/svg/upca_cc_5addon_ccb_4x4_notext.svg @@ -0,0 +1,138 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/data/svg/upce_2addon.svg b/backend/tests/data/svg/upce_2addon.svg index 6676ab04..d41ddf07 100644 --- a/backend/tests/data/svg/upce_2addon.svg +++ b/backend/tests/data/svg/upce_2addon.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -25,27 +25,27 @@ - - - - - - - - + + + + + + + + 1 - + 234567 - + 0 - + 12 diff --git a/backend/tests/data/svg/upce_5addon.svg b/backend/tests/data/svg/upce_5addon.svg index 8bbec68b..545e6b0f 100644 --- a/backend/tests/data/svg/upce_5addon.svg +++ b/backend/tests/data/svg/upce_5addon.svg @@ -1,13 +1,13 @@ - Zint Generated Symbol - + @@ -25,36 +25,36 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 1 - + 234567 - + 0 - + 12345 diff --git a/backend/tests/data/svg/upce_5addon_notext.svg b/backend/tests/data/svg/upce_5addon_notext.svg new file mode 100644 index 00000000..7c7f359d --- /dev/null +++ b/backend/tests/data/svg/upce_5addon_notext.svg @@ -0,0 +1,45 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/data/svg/upce_cc_2addon_cca_5x2.svg b/backend/tests/data/svg/upce_cc_2addon_cca_5x2.svg new file mode 100644 index 00000000..8c8d334e --- /dev/null +++ b/backend/tests/data/svg/upce_cc_2addon_cca_5x2.svg @@ -0,0 +1,107 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 654321 + + + 7 + + + 89 + + + diff --git a/backend/tests/data/svg/upce_cc_5addon_ccb_8x2.svg b/backend/tests/data/svg/upce_cc_5addon_ccb_8x2.svg new file mode 100644 index 00000000..0a071432 --- /dev/null +++ b/backend/tests/data/svg/upce_cc_5addon_ccb_8x2.svg @@ -0,0 +1,142 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + 876543 + + + 5 + + + 56789 + + + diff --git a/backend/tests/data/svg/upce_cc_5addon_ccb_8x2_notext.svg b/backend/tests/data/svg/upce_cc_5addon_ccb_8x2_notext.svg new file mode 100644 index 00000000..5a16d4cb --- /dev/null +++ b/backend/tests/data/svg/upce_cc_5addon_ccb_8x2_notext.svg @@ -0,0 +1,126 @@ + + + + Zint Generated Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/test_2of5.c b/backend/tests/test_2of5.c index 29add982..d6170b5d 100644 --- a/backend/tests/test_2of5.c +++ b/backend/tests/test_2of5.c @@ -280,19 +280,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_auspost.c b/backend/tests/test_auspost.c index 54263dcd..499474f2 100644 --- a/backend/tests/test_auspost.c +++ b/backend/tests/test_auspost.c @@ -196,6 +196,8 @@ static void test_encode(int index, int generate, int debug) { testStart(""); + int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise + int ret; struct item { int symbology; @@ -208,22 +210,42 @@ static void test_encode(int index, int generate, int debug) { char *expected; }; struct item data[] = { - /* 0*/ { BARCODE_AUSPOST, "119618420932573854", 0, 3, 133, "Australia Post Customer Barcoding Tech Specs Diagram 1; verified manually against tec-it", - "1000001010001010101000100010101000001010100000000000000000100000101000101000001000100000001000101000101000101000101000001000100010100" - "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" - "0000101010101000100000101010100010100000101010101000101000101000100000000000101000101000100000000000001000000010100010001010101000000" + /* 0*/ { BARCODE_AUSPOST, "96184209", 0, 3, 73, "Australia Post Customer Barcoding Tech Specs Diagram 1; verified manually against tec-it", + "1000101010100010001010100000101010001010001000001010000010001000001000100" + "1010101010101010101010101010101010101010101010101010101010101010101010101" + "0000100010000010101010001010000010101010001000101010001000100010000010000" }, - /* 1*/ { BARCODE_AUSREPLY, "12345678", 0, 3, 73, "Verified manually against tec-it", + /* 1*/ { BARCODE_AUSPOST, "3221132412345678", 0, 3, 103, "59 Custom 2 N encoding", + "1000100000101010100010001010101010101000101010101000101010101000001000100000101000000000001000000000100" + "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "0000001000100010101010101000100000101010000010001010001000000010101010001010000010001010101000100000000" + }, + /* 2*/ { BARCODE_AUSPOST, "32211324Ab #2", 0, 3, 103, "59 Custom 2 C encoding", + "1000100000101010100010001010101010101000101010101010001010100010100000101000100000000010100000100010100" + "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "0000001000100010101010101000100000101010000010101010001010100010000000100000001000101010000010000000000" + }, + /* 3*/ { BARCODE_AUSPOST, "32211324123456789012345", 0, 3, 133, "62 Custom 3 N encoding", + "1000001010001010100010001010101010101000101010101000101010101000001000100000001010101010100010101010100000100000100010101010100010100" + "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "0000101010100010101010101000100000101010000010001010001000000010101010001010001010101000101000100000001000001010000010001010100010000" + }, + /* 4*/ { BARCODE_AUSPOST, "32211324aBCd#F hIz", 0, 3, 133, "62 Custom 3 C encoding", + "1000001010001010100010001010101010101000101010000010101010100010000010100010100010100010000010000000000000100010100010101010000000100" + "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "0000101010100010101010101000100000101010000010100010100010101010001010000010001010100000100010101000000000101000001010100000000010000" + }, + /* 5*/ { BARCODE_AUSREPLY, "12345678", 0, 3, 73, "Verified manually against tec-it", "1000101010001010100010101010100000100010000000001000001000000000100010100" "1010101010101010101010101010101010101010101010101010101010101010101010101" "0000000000101000101000100000001010101000101000000000100010101000101000000" }, - /* 2*/ { BARCODE_AUSROUTE, "34567890", 0, 3, 73, "Verified manually against tec-it", + /* 6*/ { BARCODE_AUSROUTE, "34567890", 0, 3, 73, "Verified manually against tec-it", "1000000000101010101010000010001000000010101000100010101010000000101000100" "1010101010101010101010101010101010101010101010101010101010101010101010101" "0000101010000010000000101010100010100010101000100010101010001010001000000" }, - /* 3*/ { BARCODE_AUSREDIRECT, "98765432", 0, 3, 73, "Verified manually against tec-it", + /* 7*/ { BARCODE_AUSREDIRECT, "98765432", 0, 3, 73, "Verified manually against tec-it", "1000001010000010000000100010100010101010100000101010101000100010100010100" "1010101010101010101010101010101010101010101010101010101010101010101010101" "0000001010100010101010001010001000000010101000000000001010101000001010000" @@ -232,6 +254,8 @@ static void test_encode(int index, int generate, int debug) { int data_size = ARRAY_SIZE(data); char escaped[1024]; + char bwipp_buf[8192]; + char bwipp_msg[1024]; for (int i = 0; i < data_size; i++) { @@ -256,10 +280,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_bmp.c b/backend/tests/test_bmp.c index 36d1639a..40683b0b 100644 --- a/backend/tests/test_bmp.c +++ b/backend/tests/test_bmp.c @@ -158,10 +158,10 @@ static void test_print(int index, int generate, int debug) { if (data[i].whitespace_width != -1) { symbol->whitespace_width = data[i].whitespace_width; } - if (data[i].fgcolour != NULL) { + if (*data[i].fgcolour) { strcpy(symbol->fgcolour, data[i].fgcolour); } - if (data[i].bgcolour != NULL) { + if (*data[i].bgcolour) { strcpy(symbol->bgcolour, data[i].bgcolour); } diff --git a/backend/tests/test_channel.c b/backend/tests/test_channel.c index 6eaf2643..dc9fb50f 100644 --- a/backend/tests/test_channel.c +++ b/backend/tests/test_channel.c @@ -247,103 +247,103 @@ static void test_encode(int index, int generate, int debug) { /* 36*/ { -1, "7742862", 0, 1, 39, "ANSI/AIM BC12-1998 Figure F1 Channel 8 bottom", "101010101000000001111110101101010110101" }, - /* 37*/ { -1, "01", 0, 1, 19, "Edge case for initial_precalcs table; verified manually against bwipp", + /* 37*/ { -1, "01", 0, 1, 19, "Edge case for initial_precalcs table", "1010101010110110001" }, - /* 38*/ { -1, "001", 0, 1, 23, "Edge case for initial_precalcs table; verified manually against bwipp", + /* 38*/ { -1, "001", 0, 1, 23, "Edge case for initial_precalcs table", "10101010101101011000011" }, - /* 39*/ { -1, "0001", 0, 1, 27, "Edge case for initial_precalcs table; verified manually against bwipp", + /* 39*/ { -1, "0001", 0, 1, 27, "Edge case for initial_precalcs table", "101010101011010101110000011" }, - /* 40*/ { -1, "00001", 0, 1, 31, "Edge case for initial_precalcs table; verified manually against bwipp", + /* 40*/ { -1, "00001", 0, 1, 31, "Edge case for initial_precalcs table", "1010101010110101011011000000111" }, - /* 41*/ { -1, "000001", 0, 1, 35, "Edge case for initial_precalcs table; verified manually against bwipp", + /* 41*/ { -1, "000001", 0, 1, 35, "Edge case for initial_precalcs table", "10101010101101010110101100000001111" }, - /* 42*/ { -1, "0000001", 0, 1, 39, "Edge case for initial_precalcs table; verified manually against bwipp", + /* 42*/ { -1, "0000001", 0, 1, 39, "Edge case for initial_precalcs table", "101010101011010101101010111000000001111" }, - /* 43*/ { -1, "115337", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 43*/ { -1, "115337", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010101110100101001000111100011" }, - /* 44*/ { -1, "115338", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 44*/ { -1, "115338", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010101110100101001000111110001" }, - /* 45*/ { -1, "115339", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 45*/ { -1, "115339", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010101110100101001000010011111" }, - /* 46*/ { -1, "230675", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 46*/ { -1, "230675", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010100101100011001111010011001" }, - /* 47*/ { -1, "230676", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 47*/ { -1, "230676", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010100101100011001111010001011" }, - /* 48*/ { -1, "230677", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 48*/ { -1, "230677", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010100101100011001111010001101" }, - /* 49*/ { -1, "346013", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 49*/ { -1, "346013", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010100110011101010001011000111" }, - /* 50*/ { -1, "346014", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 50*/ { -1, "346014", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010100110011101010001011100011" }, - /* 51*/ { -1, "346015", 0, 1, 35, "Edge case for channel_precalcs7 table; verified manually against bwipp", + /* 51*/ { -1, "346015", 0, 1, 35, "Edge case for channel_precalcs7 table", "10101010100110011101010001011110001" }, - /* 52*/ { -1, "0119120", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 52*/ { -1, "0119120", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011010111000011000100111010011" }, - /* 53*/ { -1, "0119121", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 53*/ { -1, "0119121", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011010111000011000100111011001" }, - /* 54*/ { -1, "0119122", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 54*/ { -1, "0119122", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011010111000011000100111001011" }, - /* 55*/ { -1, "0238241", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 55*/ { -1, "0238241", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011010001011011001100011110001" }, - /* 56*/ { -1, "0238242", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 56*/ { -1, "0238242", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011010001011011001100001001111" }, - /* 57*/ { -1, "0238243", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 57*/ { -1, "0238243", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011010001011011001100001100111" }, - /* 58*/ { -1, "1072088", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 58*/ { -1, "1072088", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011001111101000101100011001001" }, - /* 59*/ { -1, "1072089", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 59*/ { -1, "1072089", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011001111101000101100011000101" }, - /* 60*/ { -1, "1072090", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 60*/ { -1, "1072090", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101011001111101000101100001010011" }, - /* 61*/ { -1, "4169234", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 61*/ { -1, "4169234", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101001101001101101111011000100001" }, - /* 62*/ { -1, "4169235", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 62*/ { -1, "4169235", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101001101001101101111011000010001" }, - /* 63*/ { -1, "4169236", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 63*/ { -1, "4169236", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101001101001101101111011000001001" }, - /* 64*/ { -1, "6075170", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 64*/ { -1, "6075170", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101000100011101010001110111001011" }, - /* 65*/ { -1, "6075171", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 65*/ { -1, "6075171", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101000100011101010001110111001101" }, - /* 66*/ { -1, "6075172", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 66*/ { -1, "6075172", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101000100011101010001110111101001" }, - /* 67*/ { -1, "7623743", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 67*/ { -1, "7623743", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101000001110010101101100101001111" }, - /* 68*/ { -1, "7623744", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 68*/ { -1, "7623744", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101000001110010101101100101100111" }, - /* 69*/ { -1, "7623745", 0, 1, 39, "Edge case for channel_precalcs8 table; verified manually against bwipp", + /* 69*/ { -1, "7623745", 0, 1, 39, "Edge case for channel_precalcs8 table", "101010101000001110010101101100101110011" }, }; @@ -376,14 +376,12 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, data[i].option_2, -1, debug)) { - ret = testUtilBwipp(symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + ret = testUtilBwipp(i, symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); diff --git a/backend/tests/test_codablock.c b/backend/tests/test_codablock.c index b9b8cb80..f0da6be4 100644 --- a/backend/tests/test_codablock.c +++ b/backend/tests/test_codablock.c @@ -440,22 +440,20 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, data[i].option_2, -1, debug)) { if (!data[i].bwipp_cmp) { - if (debug & ZINT_DEBUG_TEST_PRINT) printf("%d: %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); + if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); } else { - ret = testUtilBwipp(symbol, data[i].option_1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, data[i].option_1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_code.c b/backend/tests/test_code.c index 3c287b12..1d915ed7 100644 --- a/backend/tests/test_code.c +++ b/backend/tests/test_code.c @@ -119,29 +119,30 @@ static void test_hrt(int index, int debug) { /* 0*/ { BARCODE_CODE11, -1, "123-45", -1, "123-4552" }, // 2 checksums /* 1*/ { BARCODE_CODE11, 1, "123-45", -1, "123-455" }, // 1 checksum /* 2*/ { BARCODE_CODE11, 2, "123-45", -1, "123-45" }, // No checksums - /* 3*/ { BARCODE_CODE39, -1, "ABC1234", -1, "*ABC1234*" }, - /* 4*/ { BARCODE_CODE39, -1, "abc1234", -1, "*ABC1234*" }, // Converts to upper - /* 5*/ { BARCODE_CODE39, -1, "123456789", -1, "*123456789*" }, - /* 6*/ { BARCODE_CODE39, 1, "123456789", -1, "*1234567892*" }, // With checksum - /* 7*/ { BARCODE_EXCODE39, -1, "ABC1234", -1, "ABC1234" }, - /* 8*/ { BARCODE_EXCODE39, -1, "abc1234", -1, "abc1234" }, - /* 9*/ { BARCODE_EXCODE39, 1, "abc1234", -1, "abc1234" }, // With checksum (not displayed) - /* 10*/ { BARCODE_EXCODE39, -1, "a%\000\001$\177z\033\037!+/\\@A~", 16, "a% $ z !+/\\@A~" }, // NUL, ctrls and DEL replaced with spaces - /* 11*/ { BARCODE_LOGMARS, -1, "ABC1234", -1, "ABC1234" }, - /* 12*/ { BARCODE_LOGMARS, -1, "abc1234", -1, "ABC1234" }, // Converts to upper - /* 13*/ { BARCODE_LOGMARS, 1, "abc1234", -1, "ABC12340" }, // With checksum - /* 14*/ { BARCODE_LOGMARS, 1, "12345/ABCDE", -1, "12345/ABCDET" }, // With checksum - /* 15*/ { BARCODE_CODE93, -1, "ABC1234", -1, "ABC1234S5" }, // 2 checksums added (note check digits not shown by bwipp or tec-it) - /* 16*/ { BARCODE_CODE93, -1, "abc1234", -1, "abc1234ZG" }, - /* 17*/ { BARCODE_CODE93, -1, "A\001a\000b\177d\037e", 9, "A a b d e1R" }, // NUL, ctrls and DEL replaced with spaces - /* 18*/ { BARCODE_PZN, -1, "12345", -1, "PZN -00123458" }, // Pads with zeroes if length < 7 - /* 19*/ { BARCODE_PZN, -1, "123456", -1, "PZN -01234562" }, - /* 20*/ { BARCODE_PZN, -1, "1234567", -1, "PZN -12345678" }, - /* 21*/ { BARCODE_VIN, -1, "1FTCR10UXTPA78180", -1, "1FTCR10UXTPA78180" }, - /* 22*/ { BARCODE_VIN, 1, "2FTPX28L0XCA15511", -1, "2FTPX28L0XCA15511" }, // Include Import char - no change - /* 23*/ { BARCODE_HIBC_39, -1, "ABC1234", -1, "*+ABC1234+*" }, - /* 24*/ { BARCODE_HIBC_39, -1, "abc1234", -1, "*+ABC1234+*" }, // Converts to upper - /* 25*/ { BARCODE_HIBC_39, -1, "123456789", -1, "*+1234567890*" }, + /* 3*/ { BARCODE_CODE11, -1, "123456789012", -1, "123456789012-8" }, // First checksum 10 (A) goes to hyphen + /* 4*/ { BARCODE_CODE39, -1, "ABC1234", -1, "*ABC1234*" }, + /* 5*/ { BARCODE_CODE39, -1, "abc1234", -1, "*ABC1234*" }, // Converts to upper + /* 6*/ { BARCODE_CODE39, -1, "123456789", -1, "*123456789*" }, + /* 7*/ { BARCODE_CODE39, 1, "123456789", -1, "*1234567892*" }, // With checksum + /* 8*/ { BARCODE_EXCODE39, -1, "ABC1234", -1, "ABC1234" }, + /* 9*/ { BARCODE_EXCODE39, -1, "abc1234", -1, "abc1234" }, + /* 10*/ { BARCODE_EXCODE39, 1, "abc1234", -1, "abc1234" }, // With checksum (not displayed) + /* 11*/ { BARCODE_EXCODE39, -1, "a%\000\001$\177z\033\037!+/\\@A~", 16, "a% $ z !+/\\@A~" }, // NUL, ctrls and DEL replaced with spaces + /* 12*/ { BARCODE_LOGMARS, -1, "ABC1234", -1, "ABC1234" }, + /* 13*/ { BARCODE_LOGMARS, -1, "abc1234", -1, "ABC1234" }, // Converts to upper + /* 14*/ { BARCODE_LOGMARS, 1, "abc1234", -1, "ABC12340" }, // With checksum + /* 15*/ { BARCODE_LOGMARS, 1, "12345/ABCDE", -1, "12345/ABCDET" }, // With checksum + /* 16*/ { BARCODE_CODE93, -1, "ABC1234", -1, "ABC1234S5" }, // 2 checksums added (note check digits not shown by bwipp or tec-it) + /* 17*/ { BARCODE_CODE93, -1, "abc1234", -1, "abc1234ZG" }, + /* 18*/ { BARCODE_CODE93, -1, "A\001a\000b\177d\037e", 9, "A a b d e1R" }, // NUL, ctrls and DEL replaced with spaces + /* 19*/ { BARCODE_PZN, -1, "12345", -1, "PZN -00123458" }, // Pads with zeroes if length < 7 + /* 20*/ { BARCODE_PZN, -1, "123456", -1, "PZN -01234562" }, + /* 21*/ { BARCODE_PZN, -1, "1234567", -1, "PZN -12345678" }, + /* 22*/ { BARCODE_VIN, -1, "1FTCR10UXTPA78180", -1, "1FTCR10UXTPA78180" }, + /* 23*/ { BARCODE_VIN, 1, "2FTPX28L0XCA15511", -1, "2FTPX28L0XCA15511" }, // Include Import char - no change + /* 24*/ { BARCODE_HIBC_39, -1, "ABC1234", -1, "*+ABC1234+*" }, + /* 25*/ { BARCODE_HIBC_39, -1, "abc1234", -1, "*+ABC1234+*" }, // Converts to upper + /* 26*/ { BARCODE_HIBC_39, -1, "123456789", -1, "*+1234567890*" }, }; int data_size = ARRAY_SIZE(data); @@ -263,13 +264,13 @@ static void test_encode(int index, int generate, int debug) { /* 1*/ { BARCODE_CODE11, 1, "123-455", -1, 0, 1, 78, "1 check digit (2); verified manually against tec-it", "101100101101011010010110110010101011010101101101101101011011010100101101011001" }, - /* 2*/ { BARCODE_CODE11, 2, "123-4552", -1, 0, 1, 78, "0 check digits; verified manually against bwipp and tec-it", + /* 2*/ { BARCODE_CODE11, 2, "123-4552", -1, 0, 1, 78, "0 check digits; verified manually against tec-it", "101100101101011010010110110010101011010101101101101101011011010100101101011001" }, /* 3*/ { BARCODE_CODE11, 1, "123-45", -1, 0, 1, 70, "1 check digit; verified manually against tec-it", "1011001011010110100101101100101010110101011011011011010110110101011001" }, - /* 4*/ { BARCODE_CODE11, 2, "123-45", -1, 0, 1, 62, "0 check digits; verified manually against bwipp and tec-it", + /* 4*/ { BARCODE_CODE11, 2, "123-45", -1, 0, 1, 62, "0 check digits; verified manually against tec-it", "10110010110101101001011011001010101101010110110110110101011001" }, /* 5*/ { BARCODE_CODE39, -1, "1A", -1, 0, 1, 51, "ISO/IEC 16388:2007 Figure 1", @@ -287,10 +288,10 @@ static void test_encode(int index, int generate, int debug) { /* 9*/ { BARCODE_EXCODE39, 1, "1A", -1, 0, 1, 64, "With checksum", "1001011011010110100101011011010100101101011010010110100101101101" }, - /* 10*/ { BARCODE_EXCODE39, -1, "a%\000\001$\177z", 7, 0, 1, 207, "Verified manually against bwipp and tec-it", + /* 10*/ { BARCODE_EXCODE39, -1, "a%\000\001$\177z", 7, 0, 1, 207, "Verified manually against tec-it", "100101101101010010100100101101010010110100100101001011010110010101010010010010110010101011010010010010101101010010110100100101001010101100101101010010010010101011011001010010100100101001101101010100101101101" }, - /* 11*/ { BARCODE_EXCODE39, -1, "\033\037!+/\\@A~", -1, 0, 1, 246, "Verified manually against bwipp and tec-it", + /* 11*/ { BARCODE_EXCODE39, -1, "\033\037!+/\\@A~", -1, 0, 1, 246, "Verified manually against tec-it", "100101101101010100100100101101010010110101001001001011010110010101001001010010110101001011010010010100101101010100110100100101001011010110100101010010010010101101010011010100100100101001101010110110101001011010100100100101011010110010100101101101" }, /* 12*/ { BARCODE_LOGMARS, -1, "1A", -1, 0, 1, 63, "Verified manually against tec-it", @@ -308,19 +309,19 @@ static void test_encode(int index, int generate, int debug) { /* 16*/ { BARCODE_LOGMARS, 1, "12345/ABCDE", -1, 0, 1, 223, "MIL-STD-1189 Rev. B Section 6.2.1 check character example; verified manually against tec-it", "1000101110111010111010001010111010111000101011101110111000101010101000111010111011101000111010101000100010100010111010100010111010111010001011101110111010001010101011100010111011101011100010101010111011100010100010111011101" }, - /* 17*/ { BARCODE_CODE93, -1, "1A", -1, 0, 1, 55, "Verified manually against bwipp (includecheck) and tec-it", + /* 17*/ { BARCODE_CODE93, -1, "1A", -1, 0, 1, 55, "Verified manually against tec-it", "1010111101010010001101010001101000101001110101010111101" }, - /* 18*/ { BARCODE_CODE93, -1, "TEST93", -1, 0, 1, 91, "Verified manually against bwipp (includecheck) and tec-it", + /* 18*/ { BARCODE_CODE93, -1, "TEST93", -1, 0, 1, 91, "Verified manually against tec-it", "1010111101101001101100100101101011001101001101000010101010000101011101101001000101010111101" }, - /* 19*/ { BARCODE_CODE93, -1, "\000a\177", 3, 0, 1, 91, "Verified manually against bwipp (code93ext, includecheck) and tec-it", + /* 19*/ { BARCODE_CODE93, -1, "\000a\177", 3, 0, 1, 91, "Verified manually against tec-it", "1010111101110110101100101101001100101101010001110110101101001101011011101010010001010111101" }, - /* 20*/ { BARCODE_PZN, -1, "1234567", -1, 0, 1, 142, "Example from IFA Info Code 39 EN V2.1; verified manually against bwipp (pzn8) and tec-it", + /* 20*/ { BARCODE_PZN, -1, "1234567", -1, 0, 1, 142, "Example from IFA Info Code 39 EN V2.1; verified manually against tec-it", "1001011011010100101011011011010010101101011001010110110110010101010100110101101101001101010101100110101010100101101101101001011010100101101101" }, - /* 21*/ { BARCODE_PZN, -1, "2758089", -1, 0, 1, 142, "Example from IFA Info Check Digit Calculations EN 15 July 2019; verified manually against bwipp (pzn8) and tec-it", + /* 21*/ { BARCODE_PZN, -1, "2758089", -1, 0, 1, 142, "Example from IFA Info Check Digit Calculations EN 15 July 2019; verified manually against tec-it", "1001011011010100101011011010110010101101010010110110110100110101011010010110101010011011010110100101101010110010110101011001011010100101101101" }, /* 22*/ { BARCODE_VIN, -1, "1FTCR10UXTPA78180", -1, 0, 1, 246, "https://www.vinquery.com/img/vinbarcode/vinbarcode4.jpg", @@ -365,19 +366,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, data[i].option_2, -1, debug)) { - ret = testUtilBwipp(symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_code1.c b/backend/tests/test_code1.c index fa4fe2f8..aa82c882 100644 --- a/backend/tests/test_code1.c +++ b/backend/tests/test_code1.c @@ -167,6 +167,8 @@ static void test_encode(int index, int generate, int debug) { testStart(""); + int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise + int ret; struct item { int option_2; @@ -180,7 +182,7 @@ static void test_encode(int index, int generate, int debug) { char *expected; }; struct item data[] = { - /* 0*/ { -1, "123456789012", -1, 0, 16, 18, "Verified manually against bwipp", + /* 0*/ { -1, "123456789012", -1, 0, 16, 18, "", "100011101010111101" "111010010010100000" "110110100010001000" @@ -202,6 +204,8 @@ static void test_encode(int index, int generate, int debug) { int data_size = ARRAY_SIZE(data); char escaped[1024]; + char bwipp_buf[8192]; + char bwipp_msg[1024]; for (int i = 0; i < data_size; i++) { @@ -226,10 +230,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, data[i].option_2, -1, debug)) { + ret = testUtilBwipp(i, symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_code128.c b/backend/tests/test_code128.c index b59ebb9f..cb574048 100644 --- a/backend/tests/test_code128.c +++ b/backend/tests/test_code128.c @@ -664,22 +664,20 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { if (!data[i].bwipp_cmp) { - if (debug & ZINT_DEBUG_TEST_PRINT) printf("%d: %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); + if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); } else { - ret = testUtilBwipp(symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_code16k.c b/backend/tests/test_code16k.c index 916707a7..aececf27 100644 --- a/backend/tests/test_code16k.c +++ b/backend/tests/test_code16k.c @@ -220,6 +220,8 @@ static void test_encode(int index, int generate, int debug) { testStart(""); + int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise + int ret; struct item { int input_mode; @@ -236,7 +238,7 @@ static void test_encode(int index, int generate, int debug) { "1110010101100110111011010011110110111100100110010011000100100010001101" "1100110101000100111011110100110010010000100110100011010010001110011001" }, - /* 1*/ { UNICODE_MODE, "www.wikipedia.de", 0, 4, 70, "Verified manually against bwipp", + /* 1*/ { UNICODE_MODE, "www.wikipedia.de", 0, 4, 70, "https://commons.wikimedia.org/wiki/File:Code_16K_wikipedia.png", "1110010101000110011000011010110000110101100001101011011001100010001101" "1100110100001101011011110010110011110110101111001011010110000110011001" "1101100101001101111011110110010111100101101101001111011001100010010011" @@ -246,6 +248,8 @@ static void test_encode(int index, int generate, int debug) { int data_size = ARRAY_SIZE(data); char escaped[1024]; + char bwipp_buf[8192]; + char bwipp_msg[1024]; for (int i = 0; i < data_size; i++) { @@ -270,10 +274,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_code49.c b/backend/tests/test_code49.c index 55bf0ead..962260d4 100644 --- a/backend/tests/test_code49.c +++ b/backend/tests/test_code49.c @@ -153,6 +153,8 @@ static void test_encode(int index, int generate, int debug) { testStart(""); + int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise + int ret; struct item { int input_mode; @@ -180,6 +182,8 @@ static void test_encode(int index, int generate, int debug) { int data_size = ARRAY_SIZE(data); char escaped[1024]; + char bwipp_buf[8192]; + char bwipp_msg[1024]; for (int i = 0; i < data_size; i++) { @@ -204,10 +208,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_composite.c b/backend/tests/test_composite.c index 8485551d..726bb8a9 100644 --- a/backend/tests/test_composite.c +++ b/backend/tests/test_composite.c @@ -1225,7 +1225,7 @@ static void test_examples(int index, int generate, int debug) { for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; - if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d\n", i); + if ((debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) printf("i:%d\n", i); struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); @@ -1249,19 +1249,17 @@ static void test_examples(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d %s symbol->rows %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d %s symbol->width %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); - if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); - assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); - } + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } @@ -1393,7 +1391,7 @@ static void test_odd_numbered_numeric(int index, int generate, int debug) { for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; - if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d\n", i); + if ((debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) printf("i:%d\n", i); struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); @@ -1417,19 +1415,17 @@ static void test_odd_numbered_numeric(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d %s symbol->rows %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d %s symbol->width %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); - if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); - assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); - } + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } @@ -1549,22 +1545,20 @@ static void test_ean128_cc_shift(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d %s symbol->rows %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d %s symbol->width %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); - if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { - if (!data[i].bwipp_cmp) { - if (debug & ZINT_DEBUG_TEST_PRINT) printf("%d: %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); - } else { - ret = testUtilBwipp(symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { + if (!data[i].bwipp_cmp) { + if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); + } else { + ret = testUtilBwipp(i, symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); - assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); - } + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } @@ -2102,19 +2096,17 @@ static void test_encodation_0(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d %s symbol->rows %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d %s symbol->width %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); - if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); - assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); - } + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } @@ -2243,19 +2235,17 @@ static void test_encodation_10(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d %s symbol->rows %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d %s symbol->width %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); - if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); - assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); - } + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } @@ -2626,18 +2616,18 @@ static void test_encodation_11(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d %s symbol->rows %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d %s symbol->width %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { + if (ret < 5) { int width, row; ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, data[i].option_1, -1, -1, data[i].composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } @@ -2780,19 +2770,17 @@ static void test_addongap(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d %s symbol->rows %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d %s symbol->width %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); - if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, data[i].option_2, -1, debug)) { - ret = testUtilBwipp(symbol, data[i].option_1, data[i].option_2, -1, composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, data[i].option_2, -1, debug)) { + ret = testUtilBwipp(i, symbol, data[i].option_1, data[i].option_2, -1, composite, composite_length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); - assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); - } + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } diff --git a/backend/tests/test_emf.c b/backend/tests/test_emf.c index e2ce81a9..4e29e22b 100644 --- a/backend/tests/test_emf.c +++ b/backend/tests/test_emf.c @@ -53,7 +53,7 @@ static void test_emf(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_EANX, -1, -1, NULL, NULL, 0, "210987654321+54321" }, // #185 Byte count, font data, HeaderExtension1/2 + /* 0*/ { BARCODE_EANX, -1, -1, "", "", 0, "210987654321+54321" }, // #185 Byte count, font data, HeaderExtension1/2 /* 1*/ { BARCODE_MAXICODE, -1, 20, "E0E0E0", "700070", 0, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL..." }, // #185 Maxicode scaling }; int data_size = ARRAY_SIZE(data); @@ -66,10 +66,10 @@ static void test_emf(int index, int debug) { assert_nonnull(symbol, "Symbol not created\n"); int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - if (data[i].fgcolour != NULL) { + if (*data[i].fgcolour) { strcpy(symbol->fgcolour, data[i].fgcolour); } - if (data[i].bgcolour != NULL) { + if (*data[i].bgcolour) { strcpy(symbol->bgcolour, data[i].bgcolour); } if (data[i].scale != 0) { @@ -104,6 +104,8 @@ static void test_print(int index, int generate, int debug) { int ret; struct item { int symbology; + int input_mode; + int output_options; int whitespace_width; int option_1; int option_2; @@ -113,8 +115,14 @@ static void test_print(int index, int generate, int debug) { char* expected_file; }; struct item data[] = { - /* 0*/ { BARCODE_TELEPEN, -1, -1, -1, "147AD0", "FC9630", "123", "../data/emf/telenum_fg_bg.emf" }, - /* 1*/ { BARCODE_ULTRA, 5, -1, -1, "147AD0", "FC9630", "123", "../data/emf/ultracode_fg_bg.emf" }, + /* 0*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT, -1, -1, -1, "", "", "Égjpqy", "../data/emf/code128_egrave_bold.emf" }, + /* 1*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, "147AD0", "FC9630", "123", "../data/emf/telenum_fg_bg.emf" }, + /* 2*/ { BARCODE_ULTRA, -1, -1, 5, -1, -1, "147AD0", "FC9630", "123", "../data/emf/ultracode_fg_bg.emf" }, + /* 3*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "", "", "9780877799306+54321", "../data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf" }, + /* 4*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "", "", "012345678905+24", "../data/emf/upca_2addon_ggs_5.2.6.6-5.emf" }, + /* 5*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "", "", "0123456+12", "../data/emf/upce_2addon.emf" }, + /* 6*/ { BARCODE_UPCE, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, "", "", "0123456+12", "../data/emf/upce_2addon_small_bold.emf" }, + /* 7*/ { BARCODE_ITF14, -1, BOLD_TEXT, -1, -1, -1, "", "", "123", "../data/emf/itf14_bold.emf" }, }; int data_size = ARRAY_SIZE(data); @@ -137,14 +145,14 @@ static void test_print(int index, int generate, int debug) { struct zint_symbol* symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); + int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); if (data[i].whitespace_width != -1) { symbol->whitespace_width = data[i].whitespace_width; } - if (data[i].fgcolour != NULL) { + if (*data[i].fgcolour) { strcpy(symbol->fgcolour, data[i].fgcolour); } - if (data[i].bgcolour != NULL) { + if (*data[i].bgcolour) { strcpy(symbol->bgcolour, data[i].bgcolour); } @@ -156,9 +164,9 @@ static void test_print(int index, int generate, int debug) { assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); if (generate) { - printf(" /*%3d*/ { %s, %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\"},\n", - i, testUtilBarcodeName(data[i].symbology), data[i].whitespace_width, data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, - testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); + printf(" /*%3d*/ { %s, %s, %s, %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\"},\n", + i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), testUtilOutputOptionsName(data[i].output_options), data[i].whitespace_width, + data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); ret = rename(symbol->outfile, data[i].expected_file); assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret); if (have_inkscape) { diff --git a/backend/tests/test_gs1.c b/backend/tests/test_gs1.c index 8e2794af..54976636 100644 --- a/backend/tests/test_gs1.c +++ b/backend/tests/test_gs1.c @@ -208,18 +208,18 @@ static void test_gs1_reduce(int index, int generate, int debug) { } else { assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d %s\n", i, ret, data[i].ret, symbol->errtxt); - if (ret == 0) { + if (ret < 5) { int width, row; ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, -1, -1, -1, text, length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, -1, -1, text, length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_imail.c b/backend/tests/test_imail.c index 4e0fd18f..c8f84e0d 100644 --- a/backend/tests/test_imail.c +++ b/backend/tests/test_imail.c @@ -217,6 +217,8 @@ static void test_encode(int index, int generate, int debug) { testStart(""); + int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise + int ret; struct item { unsigned char *data; @@ -237,6 +239,8 @@ static void test_encode(int index, int generate, int debug) { int data_size = ARRAY_SIZE(data); char escaped[1024]; + char bwipp_buf[8192]; + char bwipp_msg[1024]; for (int i = 0; i < data_size; i++) { @@ -261,10 +265,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index 27fcfc69..2d3a4597 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -174,6 +174,15 @@ static void test_escape_char_process(int index, int generate, int debug) { /* 4*/ { DATA_MODE, "\\x1", ZINT_ERROR_INVALID_DATA, 0, "Error 232: Incomplete escape character in input data", "" }, /* 5*/ { DATA_MODE, "\\x1g", ZINT_ERROR_INVALID_DATA, 0, "Error 233: Corrupt escape character in input data", "" }, /* 6*/ { UNICODE_MODE, "\\xA01\\xFF", 0, 90, "(8) 104 100 0 17 100 95 100 106", "" }, + /* 7*/ { UNICODE_MODE, "\\u00A01\\u00FF", 0, 90, "(8) 104 100 0 17 100 95 100 106", "" }, + /* 8*/ { DATA_MODE, "\\xc3\\xbF", 0, 79, "(7) 104 100 35 100 31 80 106", "" }, + /* 9*/ { DATA_MODE, "\\u00fF", 0, 79, "(7) 104 100 35 100 31 80 106", "" }, + /* 10*/ { DATA_MODE, "\\u", ZINT_ERROR_INVALID_DATA, 0, "Error 235: Incomplete unicode escape character in input data", "" }, + /* 11*/ { DATA_MODE, "\\uF", ZINT_ERROR_INVALID_DATA, 0, "Error 235: Incomplete unicode escape character in input data", "" }, + /* 12*/ { DATA_MODE, "\\u0F", ZINT_ERROR_INVALID_DATA, 0, "Error 235: Incomplete unicode escape character in input data", "" }, + /* 13*/ { DATA_MODE, "\\uFG", ZINT_ERROR_INVALID_DATA, 0, "Error 235: Incomplete unicode escape character in input data", "" }, + /* 14*/ { DATA_MODE, "\\u00F", ZINT_ERROR_INVALID_DATA, 0, "Error 235: Incomplete unicode escape character in input data", "" }, + /* 15*/ { DATA_MODE, "\\u00FG", ZINT_ERROR_INVALID_DATA, 0, "Error 236: Corrupt unicode escape character in input data", "" }, }; int data_size = ARRAY_SIZE(data); @@ -210,6 +219,41 @@ static void test_escape_char_process(int index, int generate, int debug) { testFinish(); } +static void test_cap(int index, int debug) { + + testStart(""); + + unsigned int ret; + struct item { + int symbology; + unsigned cap_flag; + unsigned int expected; + }; + // s/\/\*[ 0-9]*\*\//\=printf("\/*%2d*\/", line(".") - line("'<")) + struct item data[] = { + /* 0*/ { BARCODE_CODE128, ZINT_CAP_HRT, ZINT_CAP_HRT }, + /* 1*/ { BARCODE_CODE128, ZINT_CAP_HRT | ZINT_CAP_STACKABLE | ZINT_CAP_GS1, ZINT_CAP_HRT | ZINT_CAP_STACKABLE }, + /* 2*/ { BARCODE_PDF417, ZINT_CAP_HRT | ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE, ZINT_CAP_ECI | ZINT_CAP_READER_INIT }, + /* 3*/ { BARCODE_QRCODE, ZINT_CAP_HRT | ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE, ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_FULL_MULTIBYTE }, + /* 4*/ { BARCODE_EANX_CC, ZINT_CAP_HRT | ZINT_CAP_COMPOSITE | ZINT_CAP_EXTENDABLE | ZINT_CAP_ECI | ZINT_CAP_GS1, ZINT_CAP_HRT | ZINT_CAP_COMPOSITE | ZINT_CAP_EXTENDABLE | ZINT_CAP_GS1 }, + /* 5*/ { BARCODE_HANXIN, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FULL_MULTIBYTE, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FULL_MULTIBYTE }, + /* 6*/ { BARCODE_CODE11, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE, 0 }, + /* 7*/ { BARCODE_POSTNET, ZINT_CAP_HRT | ZINT_CAP_STACKABLE | ZINT_CAP_EXTENDABLE | ZINT_CAP_COMPOSITE | ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE, 0 }, + /* 8*/ { 0, 0, 0 }, + }; + int data_size = ARRAY_SIZE(data); + + for (int i = 0; i < data_size; i++) { + + if (index != -1 && i != index) continue; + + ret = ZBarcode_Cap(data[i].symbology, data[i].cap_flag); + assert_equal(ret, data[i].expected, "i:%d ZBarcode_Cap(%s, 0x%X) 0x%X != 0x%X\n", i, testUtilBarcodeName(data[i].symbology), data[i].cap_flag, ret, data[i].expected); + } + + testFinish(); +} + // #181 Nico Gunkel OSS-Fuzz static void test_encode_file_zero_length(void) { @@ -262,14 +306,99 @@ static void test_encode_file_directory(void) { testFinish(); } +static void test_bad_args(void) { + + testStart(""); + + int ret; + char *data = "1"; + char *filename = "1.png"; + char *empty = ""; + + // These just return, no error + ZBarcode_Clear(NULL); + ZBarcode_Delete(NULL); + + ret = ZBarcode_Version(); + assert_nonzero(ret >= 20901, "ZBarcode_Version() %d <= 20901\n", ret); + + assert_zero(ZBarcode_ValidID(0), "ZBarcode_ValidID(0) non-zero\n"); + assert_zero(ZBarcode_ValidID(10), "ZBarcode_ValidID(10) non-zero\n"); // Note 10 remapped to BARCODE_EANX in ZBarcode_Encode() for tbarcode compat but not counted as valid + + ret = ZBarcode_Cap(0, ~0); + assert_zero(ret, "ZBarcode_Cap(0, ~0) ret 0x%X != 0\n", ret); + ret = ZBarcode_Cap(10, ~0); + assert_zero(ret, "ZBarcode_Cap(10, ~0) ret 0x%X != 0\n", ret); + + // NULL symbol + assert_equal(ZBarcode_Encode(NULL, data, 1), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode(NULL, data, 1) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Print(NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Print(NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Buffer(NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Buffer(NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Buffer_Vector(NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Buffer_Vector(NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_and_Print(NULL, data, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Print(NULL, data, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_and_Buffer(NULL, data, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Buffer(NULL, data, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_File(NULL, filename), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File(NULL, filename) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_File_and_Print(NULL, filename, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Print(NULL, filename, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_File_and_Buffer(NULL, filename, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Buffer(NULL, filename, 0) != ZINT_ERROR_INVALID_DATA\n"); + + struct zint_symbol *symbol = ZBarcode_Create(); + assert_nonnull(symbol, "Symbol not created\n"); + + // NULL data/filename + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode(symbol, NULL, 1), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode(symbol, NULL, 1) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode(symbol, NULL, 1) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_and_Print(symbol, NULL, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Print(symbol, NULL, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_and_Print(symbol, NULL, 1, 0) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_and_Buffer(symbol, NULL, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Buffer(symbol, NULL, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_and_Buffer(symbol, NULL, 1, 0) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_File(symbol, NULL), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File(symbol, NULL) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_File(symbol, NULL) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_File_and_Print(symbol, NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Print(symbol, NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_File_and_Print(symbol, NULL, 0) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_File_and_Buffer(symbol, NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Buffer(symbol, NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_File_and_Buffer(symbol, NULL, 0) no errtxt\n"); + + // Empty data/filename + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode(symbol, empty, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode(symbol, empty, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode(symbol, empty, 0) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_and_Print(symbol, empty, 0, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Print(symbol, empty, 0, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_and_Print(symbol, empty, 0, 0) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_and_Buffer(symbol, empty, 0, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Buffer(symbol, empty, 0, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_and_Buffer(symbol, empty, 0, 0) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_File(symbol, empty), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File(symbol, empty) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_File(symbol, empty) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_File_and_Print(symbol, empty, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Print(symbol, empty, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_File_and_Print(symbol, empty, 0) no errtxt\n"); + symbol->errtxt[0] = '\0'; + assert_equal(ZBarcode_Encode_File_and_Buffer(symbol, empty, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Buffer(symbol, empty, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_File_and_Buffer(symbol, empty, 0) no errtxt\n"); + + ZBarcode_Delete(symbol); + + testFinish(); +} + int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */ { "test_checks", test_checks, 1, 0, 1 }, { "test_input_mode", test_input_mode, 1, 0, 1 }, { "test_escape_char_process", test_escape_char_process, 1, 1, 1 }, + { "test_cap", test_cap, 1, 0, 1 }, { "test_encode_file_zero_length", test_encode_file_zero_length, 0, 0, 0 }, { "test_encode_file_directory", test_encode_file_directory, 0, 0, 0 }, + { "test_bad_args", test_bad_args, 0, 0, 0 }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); diff --git a/backend/tests/test_mailmark.c b/backend/tests/test_mailmark.c index 9aa4cb96..d4d098da 100644 --- a/backend/tests/test_mailmark.c +++ b/backend/tests/test_mailmark.c @@ -197,11 +197,72 @@ static void test_encode_vector(int index, int debug) { testFinish(); } +static void test_encode(int index, int generate, int debug) { + + testStart(""); + + int ret; + struct item { + unsigned char *data; + int ret; + + int expected_rows; + int expected_width; + char *comment; + char *expected; + }; + struct item data[] = { + /* 0*/ { "1100000000000XY11 ", 0, 3, 131, "Verified manually against tec-it", + "00000000001000000000101000000000101000000000101000000000000000101000101000001000101000000010101000000000101000000000101010001010101" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "00001000000000001000000000001000000000001000000000001000001010000000000010100000000000101010001000101000000010101000000010101000101" + }, + }; + int data_size = ARRAY_SIZE(data); + + char escaped[1024]; + + for (int i = 0; i < data_size; i++) { + + if (index != -1 && i != index) continue; + + struct zint_symbol *symbol = ZBarcode_Create(); + assert_nonnull(symbol, "Symbol not created\n"); + + int length = testUtilSetSymbol(symbol, BARCODE_MAILMARK, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); + + ret = ZBarcode_Encode(symbol, data[i].data, length); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); + + if (generate) { + printf(" /*%3d*/ { \"%s\", %s, %d, %d, \"%s\",\n", + i, testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), + testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].comment); + testUtilModulesDump(symbol, " ", "\n"); + printf(" },\n"); + } else { + if (ret < 5) { + assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); + assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); + + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + } + } + + ZBarcode_Delete(symbol); + } + + testFinish(); +} + int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */ { "test_input", test_input, 1, 0, 1 }, { "test_encode_vector", test_encode_vector, 1, 0, 1 }, + { "test_encode", test_encode, 1, 1, 1 }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); diff --git a/backend/tests/test_medical.c b/backend/tests/test_medical.c index 3b888593..d21342fe 100644 --- a/backend/tests/test_medical.c +++ b/backend/tests/test_medical.c @@ -204,6 +204,8 @@ static void test_encode(int index, int generate, int debug) { testStart(""); + int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise + int ret; struct item { int symbology; @@ -220,39 +222,41 @@ static void test_encode(int index, int generate, int debug) { /* 0*/ { BARCODE_CODABAR, -1, "A37859B", 0, 1, 72, "BS EN 798:1995 Figure 1", "101100100101100101010100101101010011010101101010010110100101010010010110" }, - /* 1*/ { BARCODE_CODABAR, -1, "A0123456789-$:/.+D", 0, 1, 186, "Verified manually against bwipp and tec-it", + /* 1*/ { BARCODE_CODABAR, -1, "A0123456789-$:/.+D", 0, 1, 186, "Verified manually against tec-it", "101100100101010100110101011001010100101101100101010101101001011010100101001010110100101101010011010101101001010101001101010110010101101011011011011010110110110110101011011011010100110010" }, - /* 2*/ { BARCODE_CODABAR, 1, "A1B", 0, 1, 43, "Verified manually against bwipp and tect-it", + /* 2*/ { BARCODE_CODABAR, 1, "A1B", 0, 1, 43, "Verified manually against tec-it", "1011001001010101100101101101101010010010110" }, - /* 3*/ { BARCODE_CODABAR, 1, "A+B", 0, 1, 43, "Verified manually against bwipp and tect-it", + /* 3*/ { BARCODE_CODABAR, 1, "A+B", 0, 1, 43, "Verified manually against tec-it", "1011001001010110110110101010011010010010110" }, - /* 4*/ { BARCODE_CODABAR, 1, "B0123456789-$:/.+B", 0, 1, 196, "Verified manually against bwipp and tec-it", + /* 4*/ { BARCODE_CODABAR, 1, "B0123456789-$:/.+B", 0, 1, 196, "Verified manually against tec-it", "1001001011010101001101010110010101001011011001010101011010010110101001010010101101001011010100110101011010010101010011010101100101011010110110110110101101101101101010110110110100101011010010010110" }, - /* 5*/ { BARCODE_PHARMA, -1, "131070", 0, 1, 78, "Verified manually against bwipp and tec-it", + /* 5*/ { BARCODE_PHARMA, -1, "131070", 0, 1, 78, "", "111001110011100111001110011100111001110011100111001110011100111001110011100111" }, - /* 6*/ { BARCODE_PHARMA, -1, "123456", 0, 1, 58, "Verified manually against bwipp and tec-it", + /* 6*/ { BARCODE_PHARMA, -1, "123456", 0, 1, 58, "", "1110011100111001001001001110010010011100100100100100100111" }, - /* 7*/ { BARCODE_PHARMA_TWO, -1, "64570080", 0, 2, 31, "Verified manually against bwipp and tec-it", + /* 7*/ { BARCODE_PHARMA_TWO, -1, "64570080", 0, 2, 31, "Verified manually against tec-it", "1010101010101010101010101010101" "1010101010101010101010101010101" }, - /* 8*/ { BARCODE_PHARMA_TWO, -1, "29876543", 0, 2, 31, "Verified manually against bwipp and tec-it", + /* 8*/ { BARCODE_PHARMA_TWO, -1, "29876543", 0, 2, 31, "Verified manually against tec-it", "0010100010001010001010001000101" "1000101010100000100000101010000" }, - /* 9*/ { BARCODE_CODE32, -1, "34567890", 0, 1, 103, "Verified manually against bwipp and tec-it", + /* 9*/ { BARCODE_CODE32, -1, "34567890", 0, 1, 103, "Verified manually against tec-it", "1001011011010101101001011010110010110101011011010010101100101101011010010101101010101100110100101101101" }, }; int data_size = ARRAY_SIZE(data); char escaped[1024]; + char bwipp_buf[8192]; + char bwipp_msg[1024]; for (int i = 0; i < data_size; i++) { @@ -277,10 +281,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, data[i].option_2, -1, debug)) { + ret = testUtilBwipp(i, symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_pcx.c b/backend/tests/test_pcx.c index 2e1b72b6..a150b5bc 100644 --- a/backend/tests/test_pcx.c +++ b/backend/tests/test_pcx.c @@ -52,16 +52,16 @@ static void test_pcx(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_CODE128, -1, -1, NULL, NULL, 0, "AIM" }, - /* 1*/ { BARCODE_QRCODE, 2, 1, NULL, NULL, 0, "1234567890" }, - /* 2*/ { BARCODE_DOTCODE, -1, -1, NULL, NULL, 0, "2741" }, - /* 3*/ { BARCODE_MAXICODE, -1, -1, NULL, NULL, 0, "1" }, - /* 4*/ { BARCODE_GRIDMATRIX, -1, -1, NULL, NULL, 0.75, "Grid Matrix" }, + /* 0*/ { BARCODE_CODE128, -1, -1, "", "", 0, "AIM" }, + /* 1*/ { BARCODE_QRCODE, 2, 1, "", "", 0, "1234567890" }, + /* 2*/ { BARCODE_DOTCODE, -1, -1, "", "", 0, "2741" }, + /* 3*/ { BARCODE_MAXICODE, -1, -1, "", "", 0, "1" }, + /* 4*/ { BARCODE_GRIDMATRIX, -1, -1, "", "", 0.75, "Grid Matrix" }, /* 5*/ { BARCODE_CODABLOCKF, -1, 20, "FFFFFF", "000000", 0, "1234567890123456789012345678901234567890" }, - /* 6*/ { BARCODE_CODE128, -1, -1, "C3C3C3", NULL, 0, "AIM" }, - /* 7*/ { BARCODE_QRCODE, 2, 1, NULL, "D2E3F4", 0, "1234567890" }, + /* 6*/ { BARCODE_CODE128, -1, -1, "C3C3C3", "", 0, "AIM" }, + /* 7*/ { BARCODE_QRCODE, 2, 1, "", "D2E3F4", 0, "1234567890" }, /* 8*/ { BARCODE_DOTCODE, -1, -1, "C2C100", "E0E1F2", 0, "2741" }, - /* 9*/ { BARCODE_ULTRA, -1, -1, NULL, NULL, 0, "ULTRACODE_123456789!" }, + /* 9*/ { BARCODE_ULTRA, -1, -1, "", "", 0, "ULTRACODE_123456789!" }, }; int data_size = ARRAY_SIZE(data); @@ -79,10 +79,10 @@ static void test_pcx(int index, int debug) { if (data[i].option_2 != -1) { symbol->option_2 = data[i].option_2; } - if (data[i].fgcolour != NULL) { + if (*data[i].fgcolour) { strcpy(symbol->fgcolour, data[i].fgcolour); } - if (data[i].bgcolour != NULL) { + if (*data[i].bgcolour) { strcpy(symbol->bgcolour, data[i].bgcolour); } if (data[i].scale != 0) { diff --git a/backend/tests/test_pdf417.c b/backend/tests/test_pdf417.c index 7da093f4..ef36de7e 100644 --- a/backend/tests/test_pdf417.c +++ b/backend/tests/test_pdf417.c @@ -637,22 +637,20 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, data[i].option_1, data[i].option_2, -1, debug)) { if (!data[i].bwipp_cmp) { - if (debug & ZINT_DEBUG_TEST_PRINT) printf("%d: %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); + if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); } else { - ret = testUtilBwipp(symbol, data[i].option_1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, data[i].option_1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } @@ -924,6 +922,14 @@ static void test_fuzz(int index, int debug) { "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "1234567890123456789012345678901234567890123456789012345678901234567", 367, -1, ZINT_ERROR_TOO_LONG }, + /*12*/ { BARCODE_MICROPDF417, + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP", + 250, -1, 0 }, // Max text + /*13*/ { BARCODE_MICROPDF417, + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ", + 251, -1, ZINT_ERROR_TOO_LONG }, }; int data_size = sizeof(data) / sizeof(struct item); diff --git a/backend/tests/test_png.c b/backend/tests/test_png.c index 8c66b4bd..a33df6a1 100644 --- a/backend/tests/test_png.c +++ b/backend/tests/test_png.c @@ -118,23 +118,49 @@ static void test_print(int index, int generate, int debug) { int ret; struct item { int symbology; + int input_mode; + int output_options; + int show_hrt; int option_1; int option_2; - unsigned char* data; - char* expected_file; + int height; + float scale; + unsigned char *data; + char *composite; + char *expected_file; + char *comment; }; struct item data[] = { - /* 0*/ { BARCODE_CODABLOCKF, 3, -1, "AAAAAAAAA", "../data/png/codablockf_3rows.png" }, - /* 1*/ { BARCODE_EANX, -1, -1, "9771384524017+12", "../data/png/ean13_2addon_ggs_5.2.2.5.1-2.png" }, - /* 2*/ { BARCODE_EANX, -1, -1, "9780877799306+54321", "../data/png/ean13_5addon_ggs_5.2.2.5.2-2.png" }, - /* 3*/ { BARCODE_UPCA, -1, -1, "012345678905+24", "../data/png/upca_2addon_ggs_5.2.6.6-5.png" }, - /* 4*/ { BARCODE_UPCA, -1, -1, "614141234417+12345", "../data/png/upca_5addon.png" }, - /* 5*/ { BARCODE_UPCE, -1, -1, "1234567+12", "../data/png/upce_2addon.png" }, - /* 6*/ { BARCODE_UPCE, -1, -1, "1234567+12345", "../data/png/upce_5addon.png" }, - /* 7*/ { BARCODE_EANX, -1, -1, "1234567+12", "../data/png/ean8_2addon.png" }, - /* 8*/ { BARCODE_EANX, -1, -1, "1234567+12345", "../data/png/ean8_5addon.png" }, - /* 9*/ { BARCODE_EANX, -1, -1, "12345", "../data/png/ean5.png" }, - /* 10*/ { BARCODE_EANX, -1, -1, "12", "../data/png/ean2.png" }, + /* 0*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT, -1, -1, -1, 0, 0, "Égjpqy", "", "../data/png/code128_egrave_bold.png", "" }, + /* 1*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT | BARCODE_BOX, -1, -1, -1, 0, 0, "Égjpqy", "", "../data/png/code128_egrave_bold_box3.png", "" }, + /* 2*/ { BARCODE_GS1_128_CC, -1, -1, -1, 3, -1, 0, 0, "[00]030123456789012340", "[02]13012345678909[37]24[10]1234567ABCDEFG", "../data/png/gs1_128_cc_fig12.png", "" }, + /* 3*/ { BARCODE_CODABLOCKF, -1, -1, -1, 3, -1, 0, 0, "AAAAAAAAA", "", "../data/png/codablockf_3rows.png", "" }, + /* 4*/ { BARCODE_EANX, -1, -1, -1, -1, -1, 0, 0, "9771384524017+12", "", "../data/png/ean13_2addon_ggs_5.2.2.5.1-2.png", "" }, + /* 5*/ { BARCODE_EANX, -1, -1, -1, -1, -1, 0, 0, "9780877799306+54321", "", "../data/png/ean13_5addon_ggs_5.2.2.5.2-2.png", "" }, + /* 6*/ { BARCODE_EANX_CC, -1, -1, -1, 1, -1, 0, 0, "123456789012+12", "[91]123456789012345678901", "../data/png/ean13_cc_2addon_cca_4x4.png", "" }, + /* 7*/ { BARCODE_EANX_CC, -1, -1, -1, 2, -1, 0, 0, "123456789012+54321", "[91]1234567890", "../data/png/ean13_cc_5addon_ccb_3x4.png", "" }, + /* 8*/ { BARCODE_EANX_CC, -1, -1, 0, 2, -1, 0, 0, "123456789012+54321", "[91]1234567890", "../data/png/ean13_cc_5addon_ccb_3x4_notext.png", "" }, + /* 9*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, 0, 0, "012345678905+24", "", "../data/png/upca_2addon_ggs_5.2.6.6-5.png", "" }, + /* 10*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, 0, 0, "614141234417+12345", "", "../data/png/upca_5addon.png", "" }, + /* 11*/ { BARCODE_UPCA, -1, -1, 0, -1, -1, 0, 0, "614141234417+12345", "", "../data/png/upca_5addon_notext.png", "" }, + /* 12*/ { BARCODE_UPCA, -1, BARCODE_BIND, -1, -1, -1, 0, 0, "614141234417+12345", "", "../data/png/upca_5addon_bind3.png", "" }, + /* 13*/ { BARCODE_UPCA_CC, -1, -1, -1, 1, -1, 0, 0, "12345678901+12", "[91]123456789", "../data/png/upca_cc_2addon_cca_3x4.png", "" }, + /* 14*/ { BARCODE_UPCA_CC, -1, -1, -1, 2, -1, 0, 0, "12345678901+12121", "[91]1234567890123", "../data/png/upca_cc_5addon_ccb_4x4.png", "" }, + /* 15*/ { BARCODE_UPCA_CC, -1, -1, 0, 2, -1, 0, 0, "12345678901+12121", "[91]1234567890123", "../data/png/upca_cc_5addon_ccb_4x4_notext.png", "" }, + /* 16*/ { BARCODE_UPCA_CC, -1, BARCODE_BIND, -1, 2, -1, 0, 0, "12345678901+12121", "[91]1234567890123", "../data/png/upca_cc_5addon_ccb_4x4_bind3.png", "" }, + /* 17*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, 0, 0, "1234567+12", "", "../data/png/upce_2addon.png", "" }, + /* 18*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, 0, 0, "1234567+12345", "", "../data/png/upce_5addon.png", "" }, + /* 19*/ { BARCODE_UPCE_CC, -1, -1, -1, 1, -1, 0, 0, "0654321+89", "[91]1", "../data/png/upce_cc_2addon_cca_5x2.png", "" }, + /* 20*/ { BARCODE_UPCE_CC, -1, -1, -1, 2, -1, 0, 0, "1876543+56789", "[91]12345", "../data/png/upce_cc_5addon_ccb_8x2.png", "" }, + /* 21*/ { BARCODE_UPCE_CC, -1, -1, 0, 2, -1, 0, 0, "1876543+56789", "[91]12345", "../data/png/upce_cc_5addon_ccb_8x2_notext.png", "" }, + /* 22*/ { BARCODE_EANX, -1, -1, -1, -1, -1, 0, 0, "1234567+12", "", "../data/png/ean8_2addon.png", "" }, + /* 23*/ { BARCODE_EANX, -1, -1, -1, -1, -1, 0, 0, "1234567+12345", "", "../data/png/ean8_5addon.png", "" }, + /* 24*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, 0, 0, "9876543+65", "[91]1234567", "../data/png/ean8_cc_2addon_cca_4x3.png", "" }, + /* 25*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, 0, 0, "9876543+74083", "[91]123456789012345678", "../data/png/ean8_cc_5addon_ccb_8x3.png", "" }, + /* 26*/ { BARCODE_EANX, -1, -1, -1, -1, -1, 0, 0, "12345", "", "../data/png/ean5.png", "" }, + /* 27*/ { BARCODE_EANX, -1, -1, -1, -1, -1, 0, 0, "12", "", "../data/png/ean2.png", "" }, + /* 28*/ { BARCODE_CODE39, -1, SMALL_TEXT, -1, -1, -1, 0, 0, "123", "", "../data/png/code39_small.png", "" }, + /* 29*/ { BARCODE_POSTNET, -1, -1, -1, -1, -1, 0, 3.5, "12345", "", "../data/png/postnet_zip.png", "300 dpi, using 1/43in X, 300 / 43 / 2 = ~3.5 scale" }, }; int data_size = ARRAY_SIZE(data); @@ -142,6 +168,7 @@ static void test_print(int index, int generate, int debug) { char* png = "out.png"; char escaped[1024]; int escaped_size = 1024; + char *text; if (generate) { if (!testUtilExists(data_dir)) { @@ -157,18 +184,28 @@ static void test_print(int index, int generate, int debug) { struct zint_symbol* symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - symbol->symbology = data[i].symbology; - if (data[i].option_1 != -1) { - symbol->option_1 = data[i].option_1; + int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); + if (data[i].show_hrt != -1) { + symbol->show_hrt = data[i].show_hrt; } - if (data[i].option_2 != -1) { - symbol->option_2 = data[i].option_2; + if (data[i].height) { + symbol->height = data[i].height; } - symbol->debug |= debug; + if (data[i].scale) { + symbol->scale = data[i].scale; + } + if (data[i].output_options & (BARCODE_BOX | BARCODE_BIND)) { + symbol->border_width = 3; + } + if (strlen(data[i].composite)) { + text = data[i].composite; + strcpy(symbol->primary, data[i].data); + } else { + text = data[i].data; + } + int text_length = strlen(text); - int length = strlen(data[i].data); - - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, text, text_length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, png); @@ -176,9 +213,10 @@ static void test_print(int index, int generate, int debug) { assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); if (generate) { - printf(" /*%3d*/ { %s, %d, %d, \"%s\", \"%s\"},\n", - i, testUtilBarcodeName(data[i].symbology), data[i].option_1, data[i].option_2, - testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); + printf(" /*%3d*/ { %s, %s, %s, %d, %d, %d, %d, %.5g, \"%s\", \"%s\", \"%s\", \"%s\" },\n", + i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), testUtilOutputOptionsName(data[i].output_options), + data[i].show_hrt, data[i].option_1, data[i].option_2, data[i].height, data[i].scale, testUtilEscape(data[i].data, length, escaped, escaped_size), + data[i].composite, data[i].expected_file, data[i].comment); ret = rename(symbol->outfile, data[i].expected_file); assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret); if (have_identify) { diff --git a/backend/tests/test_postal.c b/backend/tests/test_postal.c index 9ee1c6ec..9c5ac147 100644 --- a/backend/tests/test_postal.c +++ b/backend/tests/test_postal.c @@ -52,7 +52,7 @@ static void test_large(int index, int debug) { struct item data[] = { /* 0*/ { BARCODE_FLAT, "1", 90, 0, 1, 810 }, /* 1*/ { BARCODE_FLAT, "1", 91, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 2*/ { BARCODE_POSTNET, "1", 11, 0, 2, 185 }, + /* 2*/ { BARCODE_POSTNET, "1", 11, 0, 2, 123 }, /* 3*/ { BARCODE_POSTNET, "1", 12, ZINT_ERROR_TOO_LONG, -1, -1 }, /* 4*/ { BARCODE_FIM, "D", 1, 0, 1, 17 }, /* 5*/ { BARCODE_FIM, "D", 2, ZINT_ERROR_TOO_LONG, -1, -1 }, @@ -62,7 +62,7 @@ static void test_large(int index, int debug) { /* 9*/ { BARCODE_JAPANPOST, "1", 21, ZINT_ERROR_TOO_LONG, -1, -1 }, /* 10*/ { BARCODE_KOREAPOST, "1", 6, 0, 1, 162 }, /* 11*/ { BARCODE_KOREAPOST, "1", 7, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 12*/ { BARCODE_PLANET, "1", 13, 0, 2, 215 }, + /* 12*/ { BARCODE_PLANET, "1", 13, 0, 2, 143 }, /* 13*/ { BARCODE_PLANET, "1", 14, ZINT_ERROR_TOO_LONG, -1, -1 }, /* 14*/ { BARCODE_KIX, "1", 18, 0, 3, 143 }, /* 15*/ { BARCODE_KIX, "1", 19, ZINT_ERROR_TOO_LONG, -1, -1 }, @@ -216,9 +216,9 @@ static void test_input(int index, int debug) { struct item data[] = { /* 0*/ { BARCODE_FLAT, "1234567890", 0, 1, 90 }, /* 1*/ { BARCODE_FLAT, "A", ZINT_ERROR_INVALID_DATA, -1, -1 }, - /* 2*/ { BARCODE_POSTNET, "12345", 0, 2, 95 }, - /* 3*/ { BARCODE_POSTNET, "123457689", 0, 2, 155 }, - /* 4*/ { BARCODE_POSTNET, "12345768901", 0, 2, 185 }, + /* 2*/ { BARCODE_POSTNET, "12345", 0, 2, 63 }, + /* 3*/ { BARCODE_POSTNET, "123457689", 0, 2, 103 }, + /* 4*/ { BARCODE_POSTNET, "12345768901", 0, 2, 123 }, /* 5*/ { BARCODE_POSTNET, "1234", ZINT_ERROR_TOO_LONG, -1, -1 }, /* 6*/ { BARCODE_POSTNET, "123456", ZINT_ERROR_TOO_LONG, -1, -1 }, /* 7*/ { BARCODE_POSTNET, "123456789012", ZINT_ERROR_TOO_LONG, -1, -1 }, @@ -237,8 +237,8 @@ static void test_input(int index, int debug) { /* 20*/ { BARCODE_JAPANPOST, ",", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 21*/ { BARCODE_KOREAPOST, "123456", 0, 1, 167 }, /* 22*/ { BARCODE_KOREAPOST, "A", ZINT_ERROR_INVALID_DATA, -1, -1 }, - /* 23*/ { BARCODE_PLANET, "12345678901", 0, 2, 185 }, - /* 24*/ { BARCODE_PLANET, "1234567890123", 0, 2, 215 }, + /* 23*/ { BARCODE_PLANET, "12345678901", 0, 2, 123 }, + /* 24*/ { BARCODE_PLANET, "1234567890123", 0, 2, 143 }, /* 25*/ { BARCODE_PLANET, "1234567890", ZINT_ERROR_TOO_LONG, -1, -1 }, /* 26*/ { BARCODE_PLANET, "123456789012", ZINT_ERROR_TOO_LONG, -1, -1 }, /* 27*/ { BARCODE_PLANET, "12345678901234", ZINT_ERROR_TOO_LONG, -1, -1 }, @@ -279,6 +279,8 @@ static void test_encode(int index, int generate, int debug) { testStart(""); + int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise + int ret; struct item { int symbology; @@ -291,67 +293,81 @@ static void test_encode(int index, int generate, int debug) { char *expected; }; struct item data[] = { - /* 0*/ { BARCODE_FLAT, "1304056", 0, 1, 63, "Verified manually against bwipp and tec-it", + /* 0*/ { BARCODE_FLAT, "1304056", 0, 1, 63, "Verified manually against tec-it", "100000000001000000000000000000100000000000000000010000000001000" }, - /* 1*/ { BARCODE_POSTNET, "12345678901", 0, 2, 185, "USPS Publication 25 (2003) Exhibit 4-1", - "10000000000010010000000010000010000000010010000000010000000010000010000010000000010010000000010000000000010010000000010000010000010000000010010000000000000000000010010000010000000010010" - "10010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010" + /* 1*/ { BARCODE_POSTNET, "12345678901", 0, 2, 123, "USPS Publication 25 (2003) Exhibit 4-1", + "100000001010000010001000001010000010000010001000100000101000001000000010100000100010001000001010000000000000101000100000101" + "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" }, - /* 2*/ { BARCODE_POSTNET, "555551237", 0, 2, 155, "Verified manually against bwipp and tec-it", - "10000010000010000000010000010000000010000010000000010000010000000010000010000000000000010010000000010000010000000010010000010000000000010000000010000010010" - "10010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010" + /* 2*/ { BARCODE_POSTNET, "555551237", 0, 2, 103, "Verified manually against tec-it", + "1000100010000010001000001000100000100010000010001000000000101000001000100000101000100000001000001000101" + "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" }, /* 3*/ { BARCODE_FIM, "C", 0, 1, 17, "USPS DMM Exhibit 8.2.0 FIM C", "10100010001000101" }, - /* 4*/ { BARCODE_RM4SCC, "BX11LT1A", 0, 3, 75, "Verified manually against bwipp and tec-it", + /* 4*/ { BARCODE_RM4SCC, "BX11LT1A", 0, 3, 75, "Verified manually against tec-it", "100010001010100000000010100000101010000010100010000000101000100010100000101" "101010101010101010101010101010101010101010101010101010101010101010101010101" "001010000010000010001000100010001010000010101000000010001010001000000010101" }, - /* 5*/ { BARCODE_RM4SCC, "W1J0TR01", 0, 3, 75, "Verified manually against bwipp and tec-it", + /* 5*/ { BARCODE_RM4SCC, "W1J0TR01", 0, 3, 75, "Verified manually against tec-it", "101010000000001010100000100000101010001000100010000000101000001010101000001" "101010101010101010101010101010101010101010101010101010101010101010101010101" "000010100000100010001000100000101010100000100000100000101000100010001010001" }, - /* 6*/ { BARCODE_JAPANPOST, "12345671-2-3", 0, 3, 133, "Verified manually against bwipp and tec-it", + /* 6*/ { BARCODE_JAPANPOST, "15400233-16-4-205", 0, 3, 133, "Zip/Barcode Manual p.6 1st example; verified manually against tec-it", + "1000101000100010101000100000100000100010001010001010001000101000001010001000101000001000100010100000100010000010000010000010001010001" + "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "1010101000100010100010100000100000101000101000101000001000101000100010001000100010001000101000100000100010001000001000001000100010101" + }, + /* 7*/ { BARCODE_JAPANPOST, "350110622-1A308", 0, 3, 133, "Zip/Barcode Manual p.6 2nd example; verified manually against tec-it", + "1000001010100010100000101000101000100000001010100010100010001000101000001000100000001010100000100010000010000010000010000010100010001" + "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "1010101000100010100000101000101000100000100010101000101000001000101000100000100000101000100000001010001000001000001000001000100010101" + }, + /* 8*/ { BARCODE_JAPANPOST, "12345671-2-3", 0, 3, 133, "Verified manually against tec-it", "1000101000100010001010101000100010001010101000101000001000100010001000001010000010000010000010000010000010000010000010000010100010001" "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" "1010101000101000101000100010100010100010001010101000001000101000001000101000001000001000001000001000001000001000001000001000100010101" }, - /* 7*/ { BARCODE_KOREAPOST, "010230", 0, 1, 167, "Verified manually against tec-it", + /* 9*/ { BARCODE_KOREAPOST, "010230", 0, 1, 167, "Verified manually against tec-it", "10001000100000000000100010000000000010001000100000001000000010001000100010001000100000000000100000000001000100010001000100010001000000000001000000010001000000010001000" }, - /* 8*/ { BARCODE_PLANET, "4012345235636", 0, 2, 215, "USPS Publication 197 (2004) Exhibit 5; verified manually against bwipp and tec-it", - "10010000010010000000000010010010010010010000000010010000010000010010000000010010000010010000010000010000010010010000010000010010000000010010000010000010010000000010010010010000000010010000000010010010000000010010010" - "10010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010" + /* 10*/ { BARCODE_PLANET, "4012345235636", 0, 2, 143, "USPS Publication 197 (2004) Exhibit 4; verified manually against tec-it", + "10100010100000001010101010100000101000100010100000101000101000100010001010100010001010000010100010001010000010101010000010100000101010000010101" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" }, - /* 9*/ { BARCODE_PLANET, "40123452356", 0, 2, 185, "Verified manually against bwipp and tec-it", - "10010000010010000000000010010010010010010000000010010000010000010010000000010010000010010000010000010000010010010000010000010010000000010010000010000010010000000010010010000010000010010" - "10010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010" + /* 11*/ { BARCODE_PLANET, "40123452356", 0, 2, 123, "Verified manually against tec-it", + "101000101000000010101010101000001010001000101000001010001010001000100010101000100010100000101000100010100000101010001000101" + "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" }, - /* 10*/ { BARCODE_KIX, "2500GG30250", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 1", + /* 12*/ { BARCODE_PLANET, "5020140235635", 0, 2, 143, "USPS Publication 197 (2004) Exhibit 6; verified manually against tec-it", + "10100010001000001010101010001000000010101010101000001000101000000010101010100010001010000010100010001010000010101010000010100010001010001010001" + "10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + }, + /* 13*/ { BARCODE_KIX, "2500GG30250", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 1", "000010100000101000001010000010100010100000101000000010100000101000001010000010100000101" "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" "001010001010000000001010000010101000100010001000100000100000101000101000101000000000101" }, - /* 11*/ { BARCODE_KIX, "2130VA80430", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 2", + /* 14*/ { BARCODE_KIX, "2130VA80430", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 2", "000010100000101000001010000010101010000000100010001000100000101000001010000010100000101" "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" "001010000010001010000010000010100010001010001000001010000000101010001000100000100000101" }, - /* 12*/ { BARCODE_KIX, "1231GF156X2", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 3", + /* 15*/ { BARCODE_KIX, "1231GF156X2", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 3", "000010100000101000001010000010100010100000101000000010100000101000100010101000000000101" "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" "001000100010100010000010001000101000100010000010001000101010000000001010100000100010100" }, - /* 13*/ { BARCODE_KIX, "1231FZ13Xhs", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 4", + /* 16*/ { BARCODE_KIX, "1231FZ13Xhs", 0, 3, 87, "PostNL Handleiding KIX code Section 2.1 Example 4", "000010100000101000001010000010100010100010100000000010100000101010100000001010001000100" "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" "001000100010100010000010001000101000001010100000001000101000001010000010101000001000100" }, - /* 14*/ { BARCODE_DAFT, "DAFTTFADFATDTATFT", 0, 3, 33, "Verified manually against bwipp and tec-it", + /* 17*/ { BARCODE_DAFT, "DAFTTFADFATDTATFT", 0, 3, 33, "Verified manually against tec-it", "001010000010100010100000001000100" "101010101010101010101010101010101" "100010000010001010000010000000100" @@ -360,6 +376,8 @@ static void test_encode(int index, int generate, int debug) { int data_size = ARRAY_SIZE(data); char escaped[1024]; + char bwipp_buf[8192]; + char bwipp_msg[1024]; for (int i = 0; i < data_size; i++) { @@ -384,10 +402,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); + assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_print.c b/backend/tests/test_print.c index 4864d83f..148f6486 100644 --- a/backend/tests/test_print.c +++ b/backend/tests/test_print.c @@ -47,14 +47,15 @@ static void test_print(int index, int generate, int debug) { int symbology; int option_1; int option_2; + float scale; unsigned char *data; char *expected_file; }; struct item data[] = { - /* 0*/ { BARCODE_CODE128, -1, -1, "AIM", "code128_aim" }, - /* 1*/ { BARCODE_QRCODE, 2, 1, "1234567890", "qr_v1_m" }, - /* 2*/ { BARCODE_DOTCODE, -1, -1, "2741", "dotcode_aim_fig7" }, - /* 3*/ { BARCODE_ULTRA, -1, -1, "A", "ultracode_a" }, + /* 0*/ { BARCODE_CODE128, -1, -1, -1, "AIM", "code128_aim" }, + /* 1*/ { BARCODE_QRCODE, 2, 1, -1, "1234567890", "qr_v1_m" }, + /* 2*/ { BARCODE_DOTCODE, -1, -1, 5, "2741", "dotcode_aim_fig7" }, + /* 3*/ { BARCODE_ULTRA, -1, -1, -1, "A", "ultracode_a" }, }; int data_size = sizeof(data) / sizeof(struct item); @@ -98,16 +99,10 @@ static void test_print(int index, int generate, int debug) { struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - symbol->symbology = data[i].symbology; - if (data[i].option_1 != -1) { - symbol->option_1 = data[i].option_1; + int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); + if (data[i].scale != -1) { + symbol->scale = data[i].scale; } - if (data[i].option_2 != -1) { - symbol->option_2 = data[i].option_2; - } - symbol->debug |= debug; - - int length = strlen(data[i].data); ret = ZBarcode_Encode(symbol, data[i].data, length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); @@ -126,8 +121,9 @@ static void test_print(int index, int generate, int debug) { if (generate) { if (j == 0) { - printf(" /*%3d*/ { %s, %d, %d, \"%s\", \"%s\" },\n", - i, testUtilBarcodeName(data[i].symbology), data[i].option_1, data[i].option_2, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); + printf(" /*%3d*/ { %s, %d, %d, %.8g, \"%s\", \"%s\" },\n", + i, testUtilBarcodeName(data[i].symbology), data[i].option_1, data[i].option_2, data[i].scale, + testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); } if (strstr(TEST_PRINT_OVERWRITE_EXPECTED, exts[j])) { ret = rename(symbol->outfile, expected_file); diff --git a/backend/tests/test_ps.c b/backend/tests/test_ps.c index 14057c78..95f4922b 100644 --- a/backend/tests/test_ps.c +++ b/backend/tests/test_ps.c @@ -41,6 +41,8 @@ static void test_print(int index, int generate, int debug) { int ret; struct item { int symbology; + int input_mode; + int output_options; int whitespace_width; int option_1; int option_2; @@ -50,8 +52,15 @@ static void test_print(int index, int generate, int debug) { char *expected_file; }; struct item data[] = { - /* 0*/ { BARCODE_CODE39, -1, -1, -1, "147AD0", "FC9630", "123", "../data/eps/code39_fg_bg.eps" }, - /* 1*/ { BARCODE_ULTRA, 1, -1, -1, "147AD0", "FC9630", "123", "../data/eps/ultra_fg_bg.eps" }, + /* 0*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT, -1, -1, -1, "", "", "Égjpqy", "../data/eps/code128_egrave_bold.eps" }, + /* 1*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, "147AD0", "FC9630", "123", "../data/eps/code39_fg_bg.eps" }, + /* 2*/ { BARCODE_ULTRA, -1, 1, -1, -1, -1, "147AD0", "FC9630", "123", "../data/eps/ultra_fg_bg.eps" }, + /* 3*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "", "", "9771384524017+12", "../data/eps/ean13_2addon_ggs_5.2.2.5.1-2.eps" }, + /* 4*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "", "", "012345678905+24", "../data/eps/upca_2addon_ggs_5.2.6.6-5.eps" }, + /* 5*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "", "", "0123456+12345", "../data/eps/upce_5addon.eps" }, + /* 6*/ { BARCODE_UPCE, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, "", "", "0123456+12345", "../data/eps/upce_5addon_small_bold.eps" }, + /* 7*/ { BARCODE_CODE128, UNICODE_MODE, -1, -1, -1, -1, "", "", "A\\B)ç(D", "../data/eps/code128_escape_latin1.eps" }, + /* 8*/ { BARCODE_DBAR_LTD, -1, BOLD_TEXT, -1, -1, -1, "", "", "1501234567890", "../data/eps/dbar_ltd_24724_fig7_bold.eps" }, }; int data_size = ARRAY_SIZE(data); @@ -74,14 +83,14 @@ static void test_print(int index, int generate, int debug) { struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); + int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); if (data[i].whitespace_width != -1) { symbol->whitespace_width = data[i].whitespace_width; } - if (data[i].fgcolour != NULL) { + if (*data[i].fgcolour) { strcpy(symbol->fgcolour, data[i].fgcolour); } - if (data[i].bgcolour != NULL) { + if (*data[i].bgcolour) { strcpy(symbol->bgcolour, data[i].bgcolour); } @@ -93,9 +102,9 @@ static void test_print(int index, int generate, int debug) { assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); if (generate) { - printf(" /*%3d*/ { %s, %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\"},\n", - i, testUtilBarcodeName(data[i].symbology), data[i].whitespace_width, data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, - testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); + printf(" /*%3d*/ { %s, %s, %s, %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\"},\n", + i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), testUtilOutputOptionsName(data[i].output_options), data[i].whitespace_width, + data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); ret = rename(symbol->outfile, data[i].expected_file); assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret); if (have_inkscape) { @@ -117,10 +126,40 @@ static void test_print(int index, int generate, int debug) { testFinish(); } +void ps_convert(const unsigned char *string, unsigned char *ps_string); + +static void test_ps_convert(int index, int debug) { + + testStart(""); + + int ret; + struct item { + unsigned char *data; + unsigned char *expected; + }; + struct item data[] = { + /* 0*/ { "1\\(é)2€3", "1\\\\\\(\351\\)23" }, + }; + int data_size = ARRAY_SIZE(data); + + unsigned char converted[256]; + + for (int i = 0; i < data_size; i++) { + + if (index != -1 && i != index) continue; + + ps_convert(data[i].data, converted); + assert_zero(strcmp(converted, data[i].expected), "i:%d ps_convert(%s) %s != %s\n", i, data[i].data, converted, data[i].expected); + } + + testFinish(); +} + int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */ { "test_print", test_print, 1, 1, 1 }, + { "test_ps_convert", test_ps_convert, 1, 0, 1 }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); diff --git a/backend/tests/test_raster.c b/backend/tests/test_raster.c index d36fcf27..ae50690f 100644 --- a/backend/tests/test_raster.c +++ b/backend/tests/test_raster.c @@ -121,14 +121,14 @@ static void test_buffer(int index, int generate, int debug) { int expected_bitmap_height; }; struct item data[] = { - /* 0*/ { BARCODE_CODE11, "0000000000", "", 50, 1, 99, 198, 116 }, - /* 1*/ { BARCODE_C25STANDARD, "0000000000", "", 50, 1, 117, 234, 116 }, - /* 2*/ { BARCODE_C25INTER, "0000000000", "", 50, 1, 99, 198, 116 }, - /* 3*/ { BARCODE_C25IATA, "0000000000", "", 50, 1, 149, 298, 116 }, - /* 4*/ { BARCODE_C25LOGIC, "0000000000", "", 50, 1, 109, 218, 116 }, - /* 5*/ { BARCODE_C25IND, "0000000000", "", 50, 1, 159, 318, 116 }, - /* 6*/ { BARCODE_CODE39, "0000000000", "", 50, 1, 155, 310, 116 }, - /* 7*/ { BARCODE_EXCODE39, "0000000000", "", 50, 1, 155, 310, 116 }, + /* 0*/ { BARCODE_CODE11, "1234567890", "", 50, 1, 108, 216, 116 }, + /* 1*/ { BARCODE_C25STANDARD, "1234567890", "", 50, 1, 117, 234, 116 }, + /* 2*/ { BARCODE_C25INTER, "1234567890", "", 50, 1, 99, 198, 116 }, + /* 3*/ { BARCODE_C25IATA, "1234567890", "", 50, 1, 149, 298, 116 }, + /* 4*/ { BARCODE_C25LOGIC, "1234567890", "", 50, 1, 109, 218, 116 }, + /* 5*/ { BARCODE_C25IND, "1234567890", "", 50, 1, 159, 318, 116 }, + /* 6*/ { BARCODE_CODE39, "1234567890", "", 50, 1, 155, 310, 116 }, + /* 7*/ { BARCODE_EXCODE39, "1234567890", "", 50, 1, 155, 310, 116 }, /* 8*/ { BARCODE_EANX, "123456789012", "", 50, 1, 95, 226, 116 }, /* 9*/ { BARCODE_EANX_CHK, "1234567890128", "", 50, 1, 95, 226, 116 }, /* 10*/ { BARCODE_EANX, "123456789012+12", "", 50, 1, 122, 276, 116 }, @@ -147,41 +147,41 @@ static void test_buffer(int index, int generate, int debug) { /* 23*/ { BARCODE_EANX_CHK, "12", "", 50, 1, 20, 64, 116 }, /* 24*/ { BARCODE_GS1_128, "[01]12345678901234", "", 50, 1, 134, 268, 116 }, /* 25*/ { BARCODE_CODABAR, "A00000000B", "", 50, 1, 102, 204, 116 }, - /* 26*/ { BARCODE_CODE128, "0000000000", "", 50, 1, 90, 180, 116 }, + /* 26*/ { BARCODE_CODE128, "1234567890", "", 50, 1, 90, 180, 116 }, /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 50, 1, 135, 270, 116 }, /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 50, 1, 117, 234, 116 }, - /* 29*/ { BARCODE_CODE16K, "0000000000", "", 20, 2, 70, 162, 44 }, - /* 30*/ { BARCODE_CODE49, "0000000000", "", 20, 2, 70, 162, 44 }, - /* 31*/ { BARCODE_CODE93, "0000000000", "", 50, 1, 127, 254, 116 }, + /* 29*/ { BARCODE_CODE16K, "1234567890", "", 20, 2, 70, 162, 44 }, + /* 30*/ { BARCODE_CODE49, "1234567890", "", 20, 2, 70, 162, 44 }, + /* 31*/ { BARCODE_CODE93, "1234567890", "", 50, 1, 127, 254, 116 }, /* 32*/ { BARCODE_FLAT, "1234567890", "", 50, 1, 90, 180, 100 }, /* 33*/ { BARCODE_DBAR_OMN, "1234567890123", "", 50, 1, 96, 192, 116 }, /* 34*/ { BARCODE_DBAR_LTD, "1234567890123", "", 50, 1, 79, 158, 116 }, /* 35*/ { BARCODE_DBAR_EXP, "[01]12345678901234", "", 34, 1, 134, 268, 84 }, - /* 36*/ { BARCODE_TELEPEN, "0000000000", "", 50, 1, 208, 416, 116 }, - /* 37*/ { BARCODE_UPCA, "12345678904", "", 50, 1, 95, 226, 116 }, - /* 38*/ { BARCODE_UPCA_CHK, "123456789043", "", 50, 1, 95, 226, 116 }, - /* 39*/ { BARCODE_UPCA, "12345678904+12", "", 50, 1, 124, 276, 116 }, - /* 40*/ { BARCODE_UPCA_CHK, "123456789043+12", "", 50, 1, 124, 276, 116 }, - /* 41*/ { BARCODE_UPCA, "12345678904+12345", "", 50, 1, 151, 330, 116 }, - /* 42*/ { BARCODE_UPCA_CHK, "123456789043+12345", "", 50, 1, 151, 330, 116 }, + /* 36*/ { BARCODE_TELEPEN, "1234567890", "", 50, 1, 208, 416, 116 }, + /* 37*/ { BARCODE_UPCA, "12345678901", "", 50, 1, 95, 226, 116 }, + /* 38*/ { BARCODE_UPCA_CHK, "123456789012", "", 50, 1, 95, 226, 116 }, + /* 39*/ { BARCODE_UPCA, "12345678901+12", "", 50, 1, 124, 276, 116 }, + /* 40*/ { BARCODE_UPCA_CHK, "123456789012+12", "", 50, 1, 124, 276, 116 }, + /* 41*/ { BARCODE_UPCA, "12345678901+12345", "", 50, 1, 151, 330, 116 }, + /* 42*/ { BARCODE_UPCA_CHK, "123456789012+12345", "", 50, 1, 151, 330, 116 }, /* 43*/ { BARCODE_UPCE, "1234567", "", 50, 1, 51, 134, 116 }, /* 44*/ { BARCODE_UPCE_CHK, "12345670", "", 50, 1, 51, 134, 116 }, /* 45*/ { BARCODE_UPCE, "1234567+12", "", 50, 1, 78, 184, 116 }, /* 46*/ { BARCODE_UPCE_CHK, "12345670+12", "", 50, 1, 78, 184, 116 }, /* 47*/ { BARCODE_UPCE, "1234567+12345", "", 50, 1, 105, 238, 116 }, /* 48*/ { BARCODE_UPCE_CHK, "12345670+12345", "", 50, 1, 105, 238, 116 }, - /* 49*/ { BARCODE_POSTNET, "00000000000", "", 12, 2, 185, 370, 24 }, - /* 50*/ { BARCODE_MSI_PLESSEY, "0000000000", "", 50, 1, 127, 254, 116 }, + /* 49*/ { BARCODE_POSTNET, "12345678901", "", 12, 2, 123, 246, 24 }, + /* 50*/ { BARCODE_MSI_PLESSEY, "1234567890", "", 50, 1, 127, 254, 116 }, /* 51*/ { BARCODE_FIM, "A", "", 50, 1, 17, 34, 100 }, - /* 52*/ { BARCODE_LOGMARS, "0000000000", "", 50, 1, 191, 382, 116 }, + /* 52*/ { BARCODE_LOGMARS, "1234567890", "", 50, 1, 191, 382, 116 }, /* 53*/ { BARCODE_PHARMA, "123456", "", 50, 1, 58, 116, 100 }, /* 54*/ { BARCODE_PZN, "123456", "", 50, 1, 142, 284, 116 }, /* 55*/ { BARCODE_PHARMA_TWO, "12345678", "", 10, 2, 29, 58, 20 }, - /* 56*/ { BARCODE_PDF417, "0000000000", "", 21, 7, 103, 206, 42 }, - /* 57*/ { BARCODE_PDF417COMP, "0000000000", "", 21, 7, 69, 138, 42 }, - /* 58*/ { BARCODE_MAXICODE, "0000000000", "", 165, 33, 30, 300, 300 }, + /* 56*/ { BARCODE_PDF417, "1234567890", "", 21, 7, 103, 206, 42 }, + /* 57*/ { BARCODE_PDF417COMP, "1234567890", "", 21, 7, 69, 138, 42 }, + /* 58*/ { BARCODE_MAXICODE, "1234567890", "", 165, 33, 30, 300, 300 }, /* 59*/ { BARCODE_QRCODE, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 60*/ { BARCODE_CODE128B, "0000000000", "", 50, 1, 145, 290, 116 }, + /* 60*/ { BARCODE_CODE128B, "1234567890", "", 50, 1, 145, 290, 116 }, /* 61*/ { BARCODE_AUSPOST, "12345678901234567890123", "", 8, 3, 133, 266, 16 }, /* 62*/ { BARCODE_AUSREPLY, "12345678", "", 8, 3, 73, 146, 16 }, /* 63*/ { BARCODE_AUSROUTE, "12345678", "", 8, 3, 73, 146, 16 }, @@ -189,37 +189,37 @@ static void test_buffer(int index, int generate, int debug) { /* 65*/ { BARCODE_ISBNX, "123456789", "", 50, 1, 95, 226, 116 }, /* 66*/ { BARCODE_ISBNX, "123456789+12", "", 50, 1, 122, 276, 116 }, /* 67*/ { BARCODE_ISBNX, "123456789+12345", "", 50, 1, 149, 330, 116 }, - /* 68*/ { BARCODE_RM4SCC, "0000000000", "", 8, 3, 91, 182, 16 }, + /* 68*/ { BARCODE_RM4SCC, "1234567890", "", 8, 3, 91, 182, 16 }, /* 69*/ { BARCODE_DATAMATRIX, "ABC", "", 10, 10, 10, 20, 20 }, /* 70*/ { BARCODE_EAN14, "1234567890123", "", 50, 1, 134, 268, 116 }, - /* 71*/ { BARCODE_VIN, "00000000000000000", "", 50, 1, 246, 492, 116 }, - /* 72*/ { BARCODE_CODABLOCKF, "0000000000", "", 20, 2, 101, 242, 44 }, + /* 71*/ { BARCODE_VIN, "12345678701234567", "", 50, 1, 246, 492, 116 }, + /* 72*/ { BARCODE_CODABLOCKF, "1234567890", "", 20, 2, 101, 242, 44 }, /* 73*/ { BARCODE_NVE18, "12345678901234567", "", 50, 1, 156, 312, 116 }, - /* 74*/ { BARCODE_JAPANPOST, "0000000000", "", 8, 3, 133, 266, 16 }, + /* 74*/ { BARCODE_JAPANPOST, "1234567890", "", 8, 3, 133, 266, 16 }, /* 75*/ { BARCODE_KOREAPOST, "123456", "", 50, 1, 167, 334, 116 }, - /* 76*/ { BARCODE_DBAR_STK, "0000000000000", "", 13, 3, 50, 100, 26 }, - /* 77*/ { BARCODE_DBAR_OMNSTK, "0000000000000", "", 69, 5, 50, 100, 138 }, + /* 76*/ { BARCODE_DBAR_STK, "1234567890123", "", 13, 3, 50, 100, 26 }, + /* 77*/ { BARCODE_DBAR_OMNSTK, "1234567890123", "", 69, 5, 50, 100, 138 }, /* 78*/ { BARCODE_DBAR_EXPSTK, "[01]12345678901234", "", 71, 5, 102, 204, 142 }, - /* 79*/ { BARCODE_PLANET, "00000000000", "", 12, 2, 185, 370, 24 }, - /* 80*/ { BARCODE_MICROPDF417, "0000000000", "", 12, 6, 82, 164, 24 }, + /* 79*/ { BARCODE_PLANET, "12345678901", "", 12, 2, 123, 246, 24 }, + /* 80*/ { BARCODE_MICROPDF417, "1234567890", "", 12, 6, 82, 164, 24 }, /* 81*/ { BARCODE_USPS_IMAIL, "12345678901234567890", "", 8, 3, 129, 258, 16 }, - /* 82*/ { BARCODE_PLESSEY, "0000000000", "", 50, 1, 227, 454, 116 }, - /* 83*/ { BARCODE_TELEPEN_NUM, "0000000000", "", 50, 1, 128, 256, 116 }, - /* 84*/ { BARCODE_ITF14, "0000000000", "", 50, 1, 135, 330, 136 }, + /* 82*/ { BARCODE_PLESSEY, "1234567890", "", 50, 1, 227, 454, 116 }, + /* 83*/ { BARCODE_TELEPEN_NUM, "1234567890", "", 50, 1, 128, 256, 116 }, + /* 84*/ { BARCODE_ITF14, "1234567890", "", 50, 1, 135, 330, 136 }, /* 85*/ { BARCODE_KIX, "123456ABCDE", "", 8, 3, 87, 174, 16 }, /* 86*/ { BARCODE_AZTEC, "1234567890AB", "", 15, 15, 15, 30, 30 }, /* 87*/ { BARCODE_DAFT, "DAFTDAFTDAFTDAFT", "", 8, 3, 31, 62, 16 }, /* 88*/ { BARCODE_DPD, "0123456789012345678901234567", "", 50, 1, 189, 378, 116 }, /* 89*/ { BARCODE_MICROQR, "12345", "", 11, 11, 11, 22, 22 }, - /* 90*/ { BARCODE_HIBC_128, "0000000000", "", 50, 1, 134, 268, 116 }, - /* 91*/ { BARCODE_HIBC_39, "0000000000", "", 50, 1, 223, 446, 116 }, + /* 90*/ { BARCODE_HIBC_128, "1234567890", "", 50, 1, 123, 246, 116 }, + /* 91*/ { BARCODE_HIBC_39, "1234567890", "", 50, 1, 223, 446, 116 }, /* 92*/ { BARCODE_HIBC_DM, "ABC", "", 12, 12, 12, 24, 24 }, /* 93*/ { BARCODE_HIBC_QR, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 94*/ { BARCODE_HIBC_PDF, "0000000000", "", 27, 9, 103, 206, 54 }, - /* 95*/ { BARCODE_HIBC_MICPDF, "0000000000", "", 34, 17, 38, 76, 68 }, - /* 96*/ { BARCODE_HIBC_BLOCKF, "0000000000", "", 30, 3, 101, 242, 64 }, + /* 94*/ { BARCODE_HIBC_PDF, "1234567890", "", 24, 8, 103, 206, 48 }, + /* 95*/ { BARCODE_HIBC_MICPDF, "1234567890", "", 28, 14, 38, 76, 56 }, + /* 96*/ { BARCODE_HIBC_BLOCKF, "1234567890", "", 30, 3, 101, 242, 64 }, /* 97*/ { BARCODE_HIBC_AZTEC, "1234567890AB", "", 19, 19, 19, 38, 38 }, - /* 98*/ { BARCODE_DOTCODE, "ABC", "", 11, 11, 16, 33, 23 }, + /* 98*/ { BARCODE_DOTCODE, "ABC", "", 11, 11, 16, 32, 22 }, /* 99*/ { BARCODE_HANXIN, "1234567890AB", "", 23, 23, 23, 46, 46 }, /*100*/ { BARCODE_MAILMARK, "01000000000000000AA00AA0A", "", 10, 3, 155, 310, 20 }, /*101*/ { BARCODE_AZRUNE, "255", "", 11, 11, 11, 22, 22 }, @@ -227,25 +227,28 @@ static void test_buffer(int index, int generate, int debug) { /*103*/ { BARCODE_EANX_CC, "123456789012", "[20]01", 50, 7, 99, 234, 116 }, /*104*/ { BARCODE_EANX_CC, "123456789012+12", "[20]01", 50, 7, 126, 284, 116 }, /*105*/ { BARCODE_EANX_CC, "123456789012+12345", "[20]01", 50, 7, 153, 338, 116 }, - /*106*/ { BARCODE_GS1_128_CC, "[01]12345678901234", "[20]01", 50, 5, 145, 290, 116 }, - /*107*/ { BARCODE_DBAR_OMN_CC, "1234567890123", "[20]01", 21, 5, 100, 200, 58 }, - /*108*/ { BARCODE_DBAR_LTD_CC, "1234567890123", "[20]01", 19, 6, 79, 158, 54 }, - /*109*/ { BARCODE_DBAR_EXP_CC, "[01]12345678901234", "[20]01", 41, 5, 134, 268, 98 }, - /*110*/ { BARCODE_UPCA_CC, "12345678901", "[20]01", 50, 7, 99, 234, 116 }, - /*111*/ { BARCODE_UPCA_CC, "12345678901+12", "[20]01", 50, 7, 128, 284, 116 }, - /*112*/ { BARCODE_UPCA_CC, "12345678901+12345", "[20]01", 50, 7, 155, 338, 116 }, - /*113*/ { BARCODE_UPCE_CC, "1234567", "[20]01", 50, 9, 55, 142, 116 }, - /*114*/ { BARCODE_UPCE_CC, "1234567+12", "[20]01", 50, 9, 82, 192, 116 }, - /*115*/ { BARCODE_UPCE_CC, "1234567+12345", "[20]01", 50, 9, 109, 246, 116 }, - /*116*/ { BARCODE_DBAR_STK_CC, "0000000000000", "[20]01", 24, 9, 56, 112, 48 }, - /*117*/ { BARCODE_DBAR_OMNSTK_CC, "0000000000000", "[20]01", 80, 11, 56, 112, 160 }, - /*118*/ { BARCODE_DBAR_EXPSTK_CC, "[01]12345678901234", "[20]01", 78, 9, 102, 204, 156 }, - /*119*/ { BARCODE_CHANNEL, "00", "", 50, 1, 19, 38, 116 }, - /*120*/ { BARCODE_CODEONE, "12345678901234567890", "", 22, 22, 22, 44, 44 }, - /*121*/ { BARCODE_GRIDMATRIX, "ABC", "", 18, 18, 18, 36, 36 }, - /*122*/ { BARCODE_UPNQR, "1234567890AB", "", 77, 77, 77, 154, 154 }, - /*123*/ { BARCODE_ULTRA, "0000000000", "", 13, 13, 18, 36, 26 }, - /*124*/ { BARCODE_RMQR, "12345", "", 11, 11, 27, 54, 22 }, + /*106*/ { BARCODE_EANX_CC, "1234567", "[20]01", 50, 8, 72, 172, 116 }, + /*107*/ { BARCODE_EANX_CC, "1234567+12", "[20]01", 50, 8, 99, 226, 116 }, + /*108*/ { BARCODE_EANX_CC, "1234567+12345", "[20]01", 50, 8, 126, 280, 116 }, + /*109*/ { BARCODE_GS1_128_CC, "[01]12345678901234", "[20]01", 50, 5, 145, 290, 116 }, + /*110*/ { BARCODE_DBAR_OMN_CC, "1234567890123", "[20]01", 21, 5, 100, 200, 58 }, + /*111*/ { BARCODE_DBAR_LTD_CC, "1234567890123", "[20]01", 19, 6, 79, 158, 54 }, + /*112*/ { BARCODE_DBAR_EXP_CC, "[01]12345678901234", "[20]01", 41, 5, 134, 268, 98 }, + /*113*/ { BARCODE_UPCA_CC, "12345678901", "[20]01", 50, 7, 99, 234, 116 }, + /*114*/ { BARCODE_UPCA_CC, "12345678901+12", "[20]01", 50, 7, 128, 284, 116 }, + /*115*/ { BARCODE_UPCA_CC, "12345678901+12345", "[20]01", 50, 7, 155, 338, 116 }, + /*116*/ { BARCODE_UPCE_CC, "1234567", "[20]01", 50, 9, 55, 142, 116 }, + /*117*/ { BARCODE_UPCE_CC, "1234567+12", "[20]01", 50, 9, 82, 192, 116 }, + /*118*/ { BARCODE_UPCE_CC, "1234567+12345", "[20]01", 50, 9, 109, 246, 116 }, + /*119*/ { BARCODE_DBAR_STK_CC, "1234567890123", "[20]01", 24, 9, 56, 112, 48 }, + /*120*/ { BARCODE_DBAR_OMNSTK_CC, "1234567890123", "[20]01", 80, 11, 56, 112, 160 }, + /*121*/ { BARCODE_DBAR_EXPSTK_CC, "[01]12345678901234", "[20]01", 78, 9, 102, 204, 156 }, + /*122*/ { BARCODE_CHANNEL, "01", "", 50, 1, 19, 38, 116 }, + /*123*/ { BARCODE_CODEONE, "12345678901234567890", "", 22, 22, 22, 44, 44 }, + /*124*/ { BARCODE_GRIDMATRIX, "ABC", "", 18, 18, 18, 36, 36 }, + /*125*/ { BARCODE_UPNQR, "1234567890AB", "", 77, 77, 77, 154, 154 }, + /*126*/ { BARCODE_ULTRA, "1234567890", "", 13, 13, 18, 36, 26 }, + /*127*/ { BARCODE_RMQR, "12345", "", 11, 11, 27, 54, 22 }, }; int data_size = ARRAY_SIZE(data); @@ -254,6 +257,7 @@ static void test_buffer(int index, int generate, int debug) { for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; + if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d\n", i); struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); @@ -271,11 +275,13 @@ static void test_buffer(int index, int generate, int debug) { int length = strlen(text); ret = ZBarcode_Encode(symbol, text, length); - assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); + assert_zero(ret, "i:%d ZBarcode_Encode(%s) ret %d != 0 (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); ret = ZBarcode_Buffer(symbol, 0); - assert_zero(ret, "i:%d ZBarcode_Buffer(%d) ret %d != 0\n", i, data[i].symbology, ret); - assert_nonnull(symbol->bitmap, "i:%d ZBarcode_Buffer(%d) bitmap NULL\n", i, data[i].symbology); + assert_zero(ret, "i:%d ZBarcode_Buffer(%s) ret %d != 0 (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); + assert_nonnull(symbol->bitmap, "i:%d ZBarcode_Buffer(%s) bitmap NULL\n", i, testUtilBarcodeName(data[i].symbology)); + + if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) testUtilBitmapPrint(symbol); if (generate) { printf(" /*%3d*/ { %s, \"%s\", \"%s\", %d, %d, %d, %d, %d },\n", @@ -360,6 +366,7 @@ static void test_upcean_hrt(int index, int debug) { for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; + if ((debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) printf("i:%d\n", i); struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); @@ -386,8 +393,14 @@ static void test_upcean_hrt(int index, int debug) { assert_equal(symbol->bitmap_height, data[i].expected_bitmap_height, "i:%d (%s) symbol->bitmap_height %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->bitmap_height, data[i].expected_bitmap_height); - if (data[i].expected_text_row != -1) { - assert_nonzero(symbol->bitmap_height > data[i].expected_text_row, "i:%d symbol->bitmap_height %d <= data[i].expected_text_row %d\n", i, symbol->bitmap_height, data[i].expected_text_row); + assert_nonzero(symbol->bitmap_height > data[i].expected_text_row, "i:%d symbol->bitmap_height %d <= data[i].expected_text_row %d\n", i, symbol->bitmap_height, data[i].expected_text_row); + if (data[i].expected_text_row == -1) { /* EAN-2/5 just truncates bitmap if no text */ + assert_zero(data[i].show_hrt, "i:%d Expected text row -1 but show_hrt set\n", i); + if (i && data[i - 1].symbology == symbol->symbology && data[i - 1].show_hrt && data[i - 1].expected_text_row != -1) { + assert_nonzero(data[i].expected_bitmap_height < data[i - 1].expected_text_row, "i:%d (%s) expected_bitmap_height %d >= previous expected_text_row %d\n", + i, testUtilBarcodeName(data[i].symbology), data[i].expected_bitmap_height, data[i - 1].expected_text_row); + } + } else { int text_bits_set = 0; int row = data[i].expected_text_row; for (int column = data[i].expected_text_col; column < data[i].expected_text_col + data[i].expected_text_len; column++) { @@ -456,7 +469,7 @@ static void test_row_separator(int index, int debug) { /* 4*/ { BARCODE_CODABLOCKF, -1, -1, 3, "A", 0, 20, 2, 101, 242, 44, 19, 42, 6 }, /* 5*/ { BARCODE_CODABLOCKF, -1, -1, 4, "A", 0, 20, 2, 101, 242, 44, 18, 42, 8 }, /* 6*/ { BARCODE_CODABLOCKF, -1, -1, 5, "A", 0, 20, 2, 101, 242, 44, 21, 42, 2 }, // > 4 ignored, same as default - /* 7*/ { BARCODE_CODABLOCKF, -1, 1, -1, "A", 0, 5, 1, 46, 132, 30, 0, 20 + 2, 2 }, // CODE128 top separator, add 2 to skip over end of start char; note now includes HRT + /* 7*/ { BARCODE_CODABLOCKF, -1, 1, -1, "A", 0, 5, 1, 46, 132, 14, 0, 20 + 2, 2 }, // CODE128 top separator, add 2 to skip over end of start char; note no longer includes HRT /* 8*/ { BARCODE_CODABLOCKF, 0, -1, -1, "A", 0, 20, 2, 101, 242, 44, 21, 42, 2 }, // Border width zero, same as default }; int data_size = ARRAY_SIZE(data); @@ -474,14 +487,16 @@ static void test_row_separator(int index, int debug) { } ret = ZBarcode_Encode_and_Buffer(symbol, data[i].data, length, 0); - assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); - assert_nonnull(symbol->bitmap, "i:%d (%d) symbol->bitmap NULL\n", i, data[i].symbology); + assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); + assert_nonnull(symbol->bitmap, "i:%d (%s) symbol->bitmap NULL\n", i, testUtilBarcodeName(data[i].symbology)); - assert_equal(symbol->height, data[i].expected_height, "i:%d (%d) symbol->height %d != %d\n", i, data[i].symbology, symbol->height, data[i].expected_height); - assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%d) symbol->rows %d != %d\n", i, data[i].symbology, symbol->rows, data[i].expected_rows); - assert_equal(symbol->width, data[i].expected_width, "i:%d (%d) symbol->width %d != %d\n", i, data[i].symbology, symbol->width, data[i].expected_width); - assert_equal(symbol->bitmap_width, data[i].expected_bitmap_width, "i:%d (%d) symbol->bitmap_width %d != %d\n", i, data[i].symbology, symbol->bitmap_width, data[i].expected_bitmap_width); - assert_equal(symbol->bitmap_height, data[i].expected_bitmap_height, "i:%d (%d) symbol->bitmap_height %d != %d\n", i, data[i].symbology, symbol->bitmap_height, data[i].expected_bitmap_height); + assert_equal(symbol->height, data[i].expected_height, "i:%d (%s) symbol->height %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->height, data[i].expected_height); + assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%s) symbol->rows %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows); + assert_equal(symbol->width, data[i].expected_width, "i:%d (%s) symbol->width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width); + assert_equal(symbol->bitmap_width, data[i].expected_bitmap_width, "i:%d (%s) symbol->bitmap_width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), + symbol->bitmap_width, data[i].expected_bitmap_width); + assert_equal(symbol->bitmap_height, data[i].expected_bitmap_height, "i:%d (%s) symbol->bitmap_height %d != %d\n", i, testUtilBarcodeName(data[i].symbology), + symbol->bitmap_height, data[i].expected_bitmap_height); int j, separator_bits_set; @@ -489,18 +504,18 @@ static void test_row_separator(int index, int debug) { for (j = data[i].expected_separator_row; j < data[i].expected_separator_row + data[i].expected_separator_height; j++) { separator_bits_set = is_row_column_black(symbol, j, data[i].expected_separator_col); - assert_nonzero(separator_bits_set, "i:%d (%d) separator_bits_set (%d, %d) zero\n", i, data[i].symbology, j, data[i].expected_separator_col); + assert_nonzero(separator_bits_set, "i:%d (%s) separator_bits_set (%d, %d) zero\n", i, testUtilBarcodeName(data[i].symbology), j, data[i].expected_separator_col); } if (symbol->rows > 1) { j = data[i].expected_separator_row - 1; separator_bits_set = is_row_column_black(symbol, j, data[i].expected_separator_col + 2); // Need to add 2 to skip to 1st blank of start row character - assert_zero(separator_bits_set, "i:%d (%d) separator_bits_set (%d, %d) before non-zero\n", i, data[i].symbology, j, data[i].expected_separator_col); + assert_zero(separator_bits_set, "i:%d (%s) separator_bits_set (%d, %d) before non-zero\n", i, testUtilBarcodeName(data[i].symbology), j, data[i].expected_separator_col); } j = data[i].expected_separator_row + data[i].expected_separator_height; separator_bits_set = is_row_column_black(symbol, j, data[i].expected_separator_col + 2); // Need to add 2 to skip to 1st blank of start row character - assert_zero(separator_bits_set, "i:%d (%d) separator_bits_set (%d, %d) after non-zero\n", i, data[i].symbology, j, data[i].expected_separator_col); + assert_zero(separator_bits_set, "i:%d (%s) separator_bits_set (%d, %d) after non-zero\n", i, testUtilBarcodeName(data[i].symbology), j, data[i].expected_separator_col); ZBarcode_Delete(symbol); } @@ -645,14 +660,14 @@ static void test_output_options(int index, int debug) { /* 27*/ { BARCODE_QRCODE, 5, 6, BARCODE_BIND, 0, "A123", 0, 21, 21, 21, 62, 66, 1, 0, 0 }, /* 28*/ { BARCODE_QRCODE, 5, 6, BARCODE_BIND, 0, "A123", 0, 21, 21, 21, 62, 66, 0, 12, 0 }, /* 29*/ { BARCODE_QRCODE, 5, 6, BARCODE_BOX, 0, "A123", 0, 21, 21, 21, 86, 66, 1, 12, 0 }, - /* 30*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 43, 43, 1, 1, 1 }, // TODO: investigate +1 size - /* 31*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 43, 43, 0, 0, 0 }, // TODO: investigate +1 size - /* 32*/ { BARCODE_QRCODE, -1, 4, BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 43, 43, 1, 1, 1 }, - /* 33*/ { BARCODE_QRCODE, -1, 4, BARCODE_BIND | BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 43, 59, -1, -1, -1 }, // TODO: fix (bind/box in dotty mode) - /* 34*/ { BARCODE_QRCODE, 1, 4, BARCODE_BOX | BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 63, 59, -1, -1, -1 }, // TODO: fix (bind/box in dotty mode) + /* 30*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 42, 42, 1, 0, 0 }, + /* 31*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 42, 42, 0, 1, 1 }, + /* 32*/ { BARCODE_QRCODE, -1, 4, BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 42, 42, 1, 0, 0 }, + /* 33*/ { BARCODE_QRCODE, -1, 4, BARCODE_BIND | BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 42, 58, -1, -1, -1 }, // TODO: fix (bind/box in dotty mode) + /* 34*/ { BARCODE_QRCODE, 1, 4, BARCODE_BOX | BARCODE_DOTTY_MODE, 0, "A123", 0, 21, 21, 21, 62, 58, -1, -1, -1 }, // TODO: fix (bind/box in dotty mode) /* 35*/ { BARCODE_QRCODE, -1, -1, OUT_BUFFER_INTERMEDIATE, 0, "A123", 0, 21, 21, 21, 42, 42, 0, 2, 2 }, - /* 36*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE | OUT_BUFFER_INTERMEDIATE, 0, "A123", 0, 21, 21, 21, 43, 43, 1, 1, 1 }, // TODO: investigate +1 size - /* 37*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE | OUT_BUFFER_INTERMEDIATE, 180, "A123", 0, 21, 21, 21, 43, 43, 0, 39, 2 }, // TODO: investigate +1 size + /* 36*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE | OUT_BUFFER_INTERMEDIATE, 0, "A123", 0, 21, 21, 21, 42, 42, 1, 0, 0 }, + /* 37*/ { BARCODE_QRCODE, -1, -1, BARCODE_DOTTY_MODE | OUT_BUFFER_INTERMEDIATE, 180, "A123", 0, 21, 21, 21, 42, 42, 0, 40, 1 }, /* 38*/ { BARCODE_MAXICODE, -1, -1, -1, 0, "A123", 0, 165, 33, 30, 300, 300, 0, 0, 0 }, /* 39*/ { BARCODE_MAXICODE, -1, -1, -1, 270, "A123", 0, 165, 33, 30, 300, 300, 0, 0, 0 }, /* 40*/ { BARCODE_MAXICODE, -1, 5, -1, 0, "A123", 0, 165, 33, 30, 300, 300, 0, 0, 0 }, @@ -695,28 +710,32 @@ static void test_output_options(int index, int debug) { } ret = ZBarcode_Encode(symbol, data[i].data, length); - assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); + assert_zero(ret, "i:%d ZBarcode_Encode(%s) ret %d != 0 (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); ret = ZBarcode_Buffer(symbol, data[i].rotate_angle); - assert_equal(ret, data[i].ret, "i:%d ZBarcode_Buffer(%d) ret %d != %d\n", i, data[i].symbology, ret, data[i].ret); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Buffer(%s) ret %d != %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, data[i].ret, symbol->errtxt); if (ret < 5) { - assert_nonnull(symbol->bitmap, "i:%d (%d) symbol->bitmap NULL\n", i, data[i].symbology); + assert_nonnull(symbol->bitmap, "i:%d (%s) symbol->bitmap NULL\n", i, testUtilBarcodeName(data[i].symbology)); if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) testUtilBitmapPrint(symbol); - assert_equal(symbol->height, data[i].expected_height, "i:%d (%d) symbol->height %d != %d\n", i, data[i].symbology, symbol->height, data[i].expected_height); - assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%d) symbol->rows %d != %d\n", i, data[i].symbology, symbol->rows, data[i].expected_rows); - assert_equal(symbol->width, data[i].expected_width, "i:%d (%d) symbol->width %d != %d\n", i, data[i].symbology, symbol->width, data[i].expected_width); - assert_equal(symbol->bitmap_width, data[i].expected_bitmap_width, "i:%d (%d) symbol->bitmap_width %d != %d\n", i, data[i].symbology, symbol->bitmap_width, data[i].expected_bitmap_width); - assert_equal(symbol->bitmap_height, data[i].expected_bitmap_height, "i:%d (%d) symbol->bitmap_height %d != %d\n", i, data[i].symbology, symbol->bitmap_height, data[i].expected_bitmap_height); + assert_equal(symbol->height, data[i].expected_height, "i:%d (%s) symbol->height %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->height, data[i].expected_height); + assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%s) symbol->rows %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows); + assert_equal(symbol->width, data[i].expected_width, "i:%d (%s) symbol->width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width); + assert_equal(symbol->bitmap_width, data[i].expected_bitmap_width, "i:%d (%s) symbol->bitmap_width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), + symbol->bitmap_width, data[i].expected_bitmap_width); + assert_equal(symbol->bitmap_height, data[i].expected_bitmap_height, "i:%d (%s) symbol->bitmap_height %d != %d\n", i, testUtilBarcodeName(data[i].symbology), + symbol->bitmap_height, data[i].expected_bitmap_height); if (data[i].expected_set != -1) { + assert_nonzero(data[i].expected_set_row < data[i].expected_bitmap_height, "i:%d (%s) expected_set_row %d >= expected_bitmap_height %d\n", + i, testUtilBarcodeName(data[i].symbology), data[i].expected_set_row, data[i].expected_bitmap_height); ret = is_row_column_black(symbol, data[i].expected_set_row, data[i].expected_set_col); if (data[i].expected_set) { - assert_nonzero(ret, "i:%d (%d) is_row_column_black(%d, %d) zero\n", i, data[i].symbology, data[i].expected_set_row, data[i].expected_set_col); + assert_nonzero(ret, "i:%d (%s) is_row_column_black(%d, %d) zero\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_set_row, data[i].expected_set_col); } else { - assert_zero(ret, "i:%d (%d) is_row_column_black(%d, %d) non-zero\n", i, data[i].symbology, data[i].expected_set_row, data[i].expected_set_col); + assert_zero(ret, "i:%d (%s) is_row_column_black(%d, %d) non-zero\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_set_row, data[i].expected_set_col); } } } @@ -764,13 +783,13 @@ static void test_draw_string_wrap(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, data[i].output_options, data[i].data, -1, debug); ret = ZBarcode_Encode(symbol, data[i].data, length); - assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); + assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 (%s)\n", i, data[i].symbology, ret, symbol->errtxt); // Cheat by overwriting text strcpy(symbol->text, data[i].text); ret = ZBarcode_Buffer(symbol, 0); - assert_zero(ret, "i:%d ZBarcode_Buffer(%d) ret %d != 0\n", i, data[i].symbology, ret); + assert_zero(ret, "i:%d ZBarcode_Buffer(%d) ret %d != 0 (%s)\n", i, data[i].symbology, ret, symbol->errtxt); assert_nonnull(symbol->bitmap, "i:%d (%d) symbol->bitmap NULL\n", i, data[i].symbology); assert_equal(symbol->height, data[i].expected_height, "i:%d (%d) symbol->height %d != %d\n", i, data[i].symbology, symbol->height, data[i].expected_height); @@ -877,6 +896,7 @@ static void test_scale(int index, int debug) { int output_options; float scale; unsigned char *data; + char *composite; int expected_height; int expected_rows; @@ -890,31 +910,35 @@ static void test_scale(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_PDF417, -1, -1, -1, 0, "1", 18, 6, 103, 206, 36, 0, 36, 170, 14 }, // With no scaling - /* 1*/ { BARCODE_PDF417, -1, -1, -1, 0.6, "1", 18, 6, 103, 206 * 0.6, 36 * 0.6, 0, 36 * 0.6, 170 * 0.6 + 1, 14 * 0.6 }, // +1 set_col due to some scaling inversion difference - /* 2*/ { BARCODE_PDF417, -1, -1, -1, 1.2, "1", 18, 6, 103, 206 * 1.2, 36 * 1.2, 0, 36 * 1.2, 170 * 1.2 + 1, 14 * 1.2 }, // +1 set_col due to some scaling inversion difference - /* 3*/ { BARCODE_PDF417, -1, -1, -1, 0.5, "1", 18, 6, 103, 206 * 0.5, 36 * 0.5, 0, 36 * 0.5, 170 * 0.5, 14 * 0.5 }, - /* 4*/ { BARCODE_PDF417, -1, -1, -1, 1.0, "1", 18, 6, 103, 206 * 1.0, 36 * 1.0, 0, 36 * 1.0, 170 * 1.0, 14 * 1.0 }, - /* 5*/ { BARCODE_PDF417, -1, -1, -1, 1.5, "1", 18, 6, 103, 206 * 1.5, 36 * 1.5, 0, 36 * 1.5, 170 * 1.5, 14 * 1.5 }, - /* 6*/ { BARCODE_PDF417, -1, -1, -1, 2.0, "1", 18, 6, 103, 206 * 2.0, 36 * 2.0, 0, 36 * 2.0, 170 * 2.0, 14 * 2.0 }, - /* 7*/ { BARCODE_PDF417, -1, -1, -1, 2.5, "1", 18, 6, 103, 206 * 2.5, 36 * 2.5, 0, 36 * 2.5, 170 * 2.5, 14 * 2.5 }, - /* 8*/ { BARCODE_PDF417, -1, -1, -1, 3.0, "1", 18, 6, 103, 206 * 3.0, 36 * 3.0, 0, 36 * 3.0, 170 * 3.0, 14 * 3.0 }, - /* 9*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 0, "1", 18, 6, 103, 218, 48, 0, 48, 176, 14 }, // With no scaling - /* 10*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 0.6, "1", 18, 6, 103, 218 * 0.6, 48 * 0.6, 0, 48 * 0.6, 176 * 0.6 + 1, 14 * 0.6 }, // +1 set_col due to some scaling inversion difference - /* 11*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 1.6, "1", 18, 6, 103, 218 * 1.6, 48 * 1.6, 0, 48 * 1.6, 176 * 1.6 + 1, 14 * 1.6 }, // +1 set_col due to some scaling inversion difference - /* 12*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 1.5, "1", 18, 6, 103, 218 * 1.5, 48 * 1.5, 0, 48 * 1.5, 176 * 1.5, 14 * 1.5 }, - /* 13*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 2.5, "1", 18, 6, 103, 218 * 2.5, 48 * 2.5, 0, 48 * 2.5, 176 * 2.5, 14 * 2.5 }, - /* 14*/ { BARCODE_PDF417, -1, 3, OUT_BUFFER_INTERMEDIATE, 1.3, "1", 18, 6, 103, 206 * 1.3, 36 * 1.3, 0, 36 * 1.3, 170 * 1.3 + 1, 14 * 1.3 }, // +1 set_col due to some scaling inversion difference - /* 15*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 0, "123456789012", 50, 1, 79, 158, 116, 104, 114, 20, 2 }, // With no scaling - /* 16*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 1.5, "123456789012", 50, 1, 79, 158 * 1.5, 116 * 1.5, 104 * 1.5, 114 * 1.5, 20 * 1.5, 1 * 1.5 }, - /* 17*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 2.0, "123456789012", 50, 1, 79, 158 * 2.0, 116 * 2.0, 104 * 2.0, 114 * 2.0, 20 * 2.0, 1 * 2.0 }, - /* 18*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 3.5, "123456789012", 50, 1, 79, 158 * 3.5, 116 * 3.5, 104 * 3.5, 114 * 3.5, 20 * 3.5, 1 * 3.5 }, - /* 19*/ { BARCODE_UPCA, -1, -1, -1, 0, "12345678904", 50, 1, 95, 226, 116, 104, 114, 5, 2 }, // With no scaling - /* 20*/ { BARCODE_UPCA, -1, -1, -1, 2.5, "12345678904", 50, 1, 95, 226 * 2.5, 116 * 2.5, 104 * 2.5, 114 * 2.5, 5 * 2.5, 2 * 2.5 }, - /* 21*/ { BARCODE_UPCA, -1, -1, -1, 4.5, "12345678904", 50, 1, 95, 226 * 4.5, 116 * 4.5, 104 * 4.5, 114 * 4.5, 5 * 4.5, 2 * 4.5 }, + /* 0*/ { BARCODE_PDF417, -1, -1, -1, 0, "1", "", 18, 6, 103, 206, 36, 0, 36, 170, 14 }, // With no scaling + /* 1*/ { BARCODE_PDF417, -1, -1, -1, 0.6, "1", "", 18, 6, 103, 206 * 0.6, 36 * 0.6, 0 /*set_row*/, 36 * 0.6, 170 * 0.6 + 1, 14 * 0.6 }, // +1 set_col due to some scaling inversion difference + /* 2*/ { BARCODE_PDF417, -1, -1, -1, 1.2, "1", "", 18, 6, 103, 206 * 1.2, 36 * 1.2, 0 /*set_row*/, 36 * 1.2, 170 * 1.2 + 1, 14 * 1.2 }, // +1 set_col due to some scaling inversion difference + /* 3*/ { BARCODE_PDF417, -1, -1, -1, 0.5, "1", "", 18, 6, 103, 206 * 0.5, 36 * 0.5, 0 /*set_row*/, 36 * 0.5, 170 * 0.5, 14 * 0.5 }, + /* 4*/ { BARCODE_PDF417, -1, -1, -1, 1.0, "1", "", 18, 6, 103, 206 * 1.0, 36 * 1.0, 0 /*set_row*/, 36 * 1.0, 170 * 1.0, 14 * 1.0 }, + /* 5*/ { BARCODE_PDF417, -1, -1, -1, 1.5, "1", "", 18, 6, 103, 206 * 1.5, 36 * 1.5, 0 /*set_row*/, 36 * 1.5, 170 * 1.5, 14 * 1.5 }, + /* 6*/ { BARCODE_PDF417, -1, -1, -1, 2.0, "1", "", 18, 6, 103, 206 * 2.0, 36 * 2.0, 0 /*set_row*/, 36 * 2.0, 170 * 2.0, 14 * 2.0 }, + /* 7*/ { BARCODE_PDF417, -1, -1, -1, 2.5, "1", "", 18, 6, 103, 206 * 2.5, 36 * 2.5, 0 /*set_row*/, 36 * 2.5, 170 * 2.5, 14 * 2.5 }, + /* 8*/ { BARCODE_PDF417, -1, -1, -1, 3.0, "1", "", 18, 6, 103, 206 * 3.0, 36 * 3.0, 0 /*set_row*/, 36 * 3.0, 170 * 3.0, 14 * 3.0 }, + /* 9*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 0, "1", "", 18, 6, 103, 218, 48, 0 /*set_row*/, 48, 176, 14 }, // With no scaling + /* 10*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 0.6, "1", "", 18, 6, 103, 218 * 0.6, 48 * 0.6, 0 /*set_row*/, 48 * 0.6, 176 * 0.6 + 1, 14 * 0.6 }, // +1 set_col due to some scaling inversion difference + /* 11*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 1.6, "1", "", 18, 6, 103, 218 * 1.6, 48 * 1.6, 0 /*set_row*/, 48 * 1.6, 176 * 1.6 + 1, 14 * 1.6 }, // +1 set_col due to some scaling inversion difference + /* 12*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 1.5, "1", "", 18, 6, 103, 218 * 1.5, 48 * 1.5, 0 /*set_row*/, 48 * 1.5, 176 * 1.5, 14 * 1.5 }, + /* 13*/ { BARCODE_PDF417, -1, 3, BARCODE_BOX, 2.5, "1", "", 18, 6, 103, 218 * 2.5, 48 * 2.5, 0 /*set_row*/, 48 * 2.5, 176 * 2.5, 14 * 2.5 }, + /* 14*/ { BARCODE_PDF417, -1, 3, OUT_BUFFER_INTERMEDIATE, 1.3, "1", "", 18, 6, 103, 206 * 1.3, 36 * 1.3, 0 /*set_row*/, 36 * 1.3, 170 * 1.3 + 1, 14 * 1.3 }, // +1 set_col due to some scaling inversion difference + /* 15*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 0, "123456789012", "", 50, 1, 79, 158, 116, 104 /*set_row*/, 114, 20, 2 }, // With no scaling + /* 16*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 1.5, "123456789012", "", 50, 1, 79, 158 * 1.5, 116 * 1.5, 104 * 1.5 /*set_row*/, 114 * 1.5, 20 * 1.5, 1 * 1.5 }, + /* 17*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 2.0, "123456789012", "", 50, 1, 79, 158 * 2.0, 116 * 2.0, 104 * 2.0 /*set_row*/, 114 * 2.0, 20 * 2.0, 1 * 2.0 }, + /* 18*/ { BARCODE_DBAR_LTD, -1, -1, BOLD_TEXT, 3.5, "123456789012", "", 50, 1, 79, 158 * 3.5, 116 * 3.5, 104 * 3.5 /*set_row*/, 114 * 3.5, 20 * 3.5, 1 * 3.5 }, + /* 19*/ { BARCODE_UPCA, -1, -1, -1, 0, "12345678904", "", 50, 1, 95, 226, 116, 104 /*set_row*/, 114, 5, 2 }, // With no scaling + /* 20*/ { BARCODE_UPCA, -1, -1, -1, 2.5, "12345678904", "", 50, 1, 95, 226 * 2.5, 116 * 2.5, 104 * 2.5 /*set_row*/, 114 * 2.5, 5 * 2.5, 2 * 2.5 }, + /* 21*/ { BARCODE_UPCA, -1, -1, -1, 4.5, "12345678904", "", 50, 1, 95, 226 * 4.5, 116 * 4.5, 104 * 4.5 /*set_row*/, 114 * 4.5, 5 * 4.5, 2 * 4.5 }, + /* 22*/ { BARCODE_UPCE_CC, -1, -1, -1, 0, "1234567", "[17]010615[10]A123456\"", 50, 10, 55, 142, 116, 104 /*set_row*/, 115, 11, 2 }, // With no scaling + /* 23*/ { BARCODE_UPCE_CC, -1, -1, -1, 2.0, "1234567", "[17]010615[10]A123456\"", 50, 10, 55, 142 * 2, 116 * 2, 104 * 2 + 1 /*set_row*/, 115 * 2, 11 * 2, 2 * 2 }, // +1 set_row }; int data_size = ARRAY_SIZE(data); + char *text; + for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -922,15 +946,22 @@ static void test_scale(int index, int debug) { struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - int length = testUtilSetSymbol(symbol, data[i].symbology, UNICODE_MODE, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); + testUtilSetSymbol(symbol, data[i].symbology, UNICODE_MODE, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); if (data[i].border_width != -1) { symbol->border_width = data[i].border_width; } if (data[i].scale) { symbol->scale = data[i].scale; } + if (strlen(data[i].composite)) { + text = data[i].composite; + strcpy(symbol->primary, data[i].data); + } else { + text = data[i].data; + } + int length = strlen(text); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, text, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer(symbol, 0); @@ -948,7 +979,9 @@ static void test_scale(int index, int debug) { ret = ZBarcode_Print(symbol, 0); assert_zero(ret, "i:%d ZBarcode_Print(%d) ret %d != 0\n", i, data[i].symbology, ret); - assert_nonzero(data[i].expected_set_rows > data[i].expected_set_row, "i:%d (%d) expected_set_rows %d < expected_set_rows %d\n", + assert_nonzero(symbol->bitmap_height >= data[i].expected_set_rows, "i:%d (%d) symbol->bitmap_height %d < expected_set_rows %d\n", + i, data[i].symbology, symbol->bitmap_height, data[i].expected_set_rows); + assert_nonzero(data[i].expected_set_rows > data[i].expected_set_row, "i:%d (%d) expected_set_rows %d < expected_set_row %d\n", i, data[i].symbology, data[i].expected_set_rows, data[i].expected_set_row); for (int row = data[i].expected_set_row; row < data[i].expected_set_rows; row++) { int bits_set = 0; diff --git a/backend/tests/test_rss.c b/backend/tests/test_rss.c index 1ef07a75..899bb1d4 100644 --- a/backend/tests/test_rss.c +++ b/backend/tests/test_rss.c @@ -165,12 +165,12 @@ static void test_binary_div_modulo_divisor(int index, int generate, int debug) { assert_zero(ret, "i:%d ZBarcode_Buffer_Vector ret %d != 0\n", i, ret); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, -1, -1, -1, text, length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, -1, -1, text, length, symbol->primary, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmpRow(symbol, symbol->rows - 1, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } @@ -640,7 +640,7 @@ static void test_examples(int index, int generate, int debug) { for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; - if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d\n", i); + if ((debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) printf("i:%d\n", i); struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); @@ -664,12 +664,12 @@ static void test_examples(int index, int generate, int debug) { assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, data[i].option_2, -1, debug)) { - ret = testUtilBwipp(symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } diff --git a/backend/tests/test_svg.c b/backend/tests/test_svg.c index 049ac3da..78eb54fe 100644 --- a/backend/tests/test_svg.c +++ b/backend/tests/test_svg.c @@ -41,24 +41,48 @@ static void test_print(int index, int generate, int debug) { int ret; struct item { int symbology; + int input_mode; + int output_options; + int show_hrt; int option_1; int option_2; unsigned char *data; + char *composite; char *expected_file; }; struct item data[] = { - /* 0*/ { BARCODE_CODE128, -1, -1, "<>\"&'", "../data/svg/code128_amperands.svg" }, - /* 1*/ { BARCODE_CODABLOCKF, 3, -1, "AAAAAAAAA", "../data/svg/codablockf_3rows.svg"}, - /* 2*/ { BARCODE_EANX, -1, -1, "9771384524017+12", "../data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg" }, - /* 3*/ { BARCODE_EANX, -1, -1, "9780877799306+54321", "../data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg" }, - /* 4*/ { BARCODE_UPCA, -1, -1, "012345678905+24", "../data/svg/upca_2addon_ggs_5.2.6.6-5.svg" }, - /* 5*/ { BARCODE_UPCA, -1, -1, "614141234417+12345", "../data/svg/upca_5addon.svg" }, - /* 6*/ { BARCODE_UPCE, -1, -1, "1234567+12", "../data/svg/upce_2addon.svg" }, - /* 7*/ { BARCODE_UPCE, -1, -1, "1234567+12345", "../data/svg/upce_5addon.svg" }, - /* 8*/ { BARCODE_EANX, -1, -1, "1234567+12", "../data/svg/ean8_2addon.svg" }, - /* 9*/ { BARCODE_EANX, -1, -1, "1234567+12345", "../data/svg/ean8_5addon.svg" }, - /* 10*/ { BARCODE_EANX, -1, -1, "12345", "../data/svg/ean5.svg" }, - /* 11*/ { BARCODE_EANX, -1, -1, "12", "../data/svg/ean2.svg" }, + /* 0*/ { BARCODE_CODE128, -1, -1, -1, -1, -1, "<>\"&'", "", "../data/svg/code128_amperands.svg" }, + /* 1*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT, -1, -1, -1, "Égjpqy", "", "../data/svg/code128_egrave_bold.svg" }, + /* 2*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT | BARCODE_BOX, -1, -1, -1, "Égjpqy", "", "../data/svg/code128_egrave_bold_box3.svg" }, + /* 3*/ { BARCODE_GS1_128_CC, -1, -1, -1, 3, -1, "[00]030123456789012340", "[02]13012345678909[37]24[10]1234567ABCDEFG", "../data/svg/gs1_128_cc_fig12.svg" }, + /* 4*/ { BARCODE_CODABLOCKF, -1, -1, -1, 3, -1, "AAAAAAAAA", "", "../data/svg/codablockf_3rows.svg" }, + /* 5*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "9771384524017+12", "", "../data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg" }, + /* 6*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "9780877799306+54321", "", "../data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg" }, + /* 7*/ { BARCODE_EANX_CC, -1, -1, -1, 1, -1, "123456789012+12", "[91]123456789012345678901", "../data/svg/ean13_cc_2addon_cca_4x4.svg" }, + /* 8*/ { BARCODE_EANX_CC, -1, -1, -1, 2, -1, "123456789012+54321", "[91]1234567890", "../data/svg/ean13_cc_5addon_ccb_3x4.svg" }, + /* 9*/ { BARCODE_EANX_CC, -1, -1, 0, 2, -1, "123456789012+54321", "[91]1234567890", "../data/svg/ean13_cc_5addon_ccb_3x4_notext.svg" }, + /* 10*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "012345678905+24", "", "../data/svg/upca_2addon_ggs_5.2.6.6-5.svg" }, + /* 11*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon.svg" }, + /* 12*/ { BARCODE_UPCA, -1, BARCODE_BIND, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon_bind3.svg" }, + /* 13*/ { BARCODE_UPCA, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon_small_bold.svg" }, + /* 14*/ { BARCODE_UPCA_CC, -1, -1, -1, 1, -1, "12345678901+12", "[91]123456789", "../data/svg/upca_cc_2addon_cca_3x4.svg" }, + /* 15*/ { BARCODE_UPCA_CC, -1, -1, -1, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4.svg" }, + /* 16*/ { BARCODE_UPCA_CC, -1, -1, 0, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4_notext.svg" }, + /* 17*/ { BARCODE_UPCA_CC, -1, BARCODE_BIND, -1, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4_bind3.svg" }, + /* 18*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "1234567+12", "", "../data/svg/upce_2addon.svg" }, + /* 19*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "1234567+12345", "", "../data/svg/upce_5addon.svg" }, + /* 20*/ { BARCODE_UPCE, -1, -1, 0, -1, -1, "1234567+12345", "", "../data/svg/upce_5addon_notext.svg" }, + /* 21*/ { BARCODE_UPCE_CC, -1, -1, -1, 1, -1, "0654321+89", "[91]1", "../data/svg/upce_cc_2addon_cca_5x2.svg" }, + /* 22*/ { BARCODE_UPCE_CC, -1, -1, -1, 2, -1, "1876543+56789", "[91]12345", "../data/svg/upce_cc_5addon_ccb_8x2.svg" }, + /* 23*/ { BARCODE_UPCE_CC, -1, -1, 0, 2, -1, "1876543+56789", "[91]12345", "../data/svg/upce_cc_5addon_ccb_8x2_notext.svg" }, + /* 24*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "1234567+12", "", "../data/svg/ean8_2addon.svg" }, + /* 25*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "1234567+12345", "", "../data/svg/ean8_5addon.svg" }, + /* 26*/ { BARCODE_EANX_CC, -1, -1, -1, 1, -1, "9876543+65", "[91]1234567", "../data/svg/ean8_cc_2addon_cca_4x3.svg" }, + /* 27*/ { BARCODE_EANX_CC, -1, -1, -1, 2, -1, "9876543+74083", "[91]123456789012345678", "../data/svg/ean8_cc_5addon_ccb_8x3.svg" }, + /* 28*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "12345", "", "../data/svg/ean5.svg" }, + /* 29*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "12", "", "../data/svg/ean2.svg" }, + /* 30*/ { BARCODE_CODE39, -1, SMALL_TEXT, -1, -1, -1, "123", "", "../data/svg/code39_small.svg" }, + /* 31*/ { BARCODE_POSTNET, -1, -1, -1, -1, -1, "12345", "", "../data/svg/postnet_zip.svg" }, }; int data_size = ARRAY_SIZE(data); @@ -66,6 +90,7 @@ static void test_print(int index, int generate, int debug) { char *svg = "out.svg"; char escaped[1024]; int escaped_size = 1024; + char *text; if (generate) { if (!testUtilExists(data_dir)) { @@ -81,9 +106,22 @@ static void test_print(int index, int generate, int debug) { struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); + int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); + if (data[i].show_hrt != -1) { + symbol->show_hrt = data[i].show_hrt; + } + if (data[i].output_options & (BARCODE_BOX | BARCODE_BIND)) { + symbol->border_width = 3; + } + if (strlen(data[i].composite)) { + text = data[i].composite; + strcpy(symbol->primary, data[i].data); + } else { + text = data[i].data; + } + int text_length = strlen(text); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, text, text_length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, svg); @@ -91,9 +129,9 @@ static void test_print(int index, int generate, int debug) { assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); if (generate) { - printf(" /*%3d*/ { %s, %d, %d, \"%s\", \"%s\"},\n", - i, testUtilBarcodeName(data[i].symbology), data[i].option_1, data[i].option_2, - testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); + printf(" /*%3d*/ { %s, %s, %s, %d, %d, %d, \"%s\", \"%s\", \"%s\" },\n", + i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), testUtilOutputOptionsName(data[i].output_options), + data[i].show_hrt, data[i].option_1, data[i].option_2, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].composite, data[i].expected_file); ret = rename(symbol->outfile, data[i].expected_file); assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret); if (have_inkscape) { diff --git a/backend/tests/test_telepen.c b/backend/tests/test_telepen.c index 0ba3332a..6c83d87c 100644 --- a/backend/tests/test_telepen.c +++ b/backend/tests/test_telepen.c @@ -205,25 +205,25 @@ static void test_encode(int index, int generate, int debug) { /* 1*/ { BARCODE_TELEPEN, "ABC", -1, 0, 1, 96, "Telepen E2326U Example, same", "101010101011100010111011101110001110001110111000101011101110101011101000101000101110001010101010" }, - /* 2*/ { BARCODE_TELEPEN, "RST", -1, 0, 1, 96, "Verified manually against bwipp and tec-it", + /* 2*/ { BARCODE_TELEPEN, "RST", -1, 0, 1, 96, "Verified manually against tec-it", "101010101011100011100011100010101010111010111000111010111000101010111000111011101110001010101010" }, - /* 3*/ { BARCODE_TELEPEN, "?@", -1, 0, 1, 80, "ASCII count 127, check 0; verified manually against bwipp and tec-it", + /* 3*/ { BARCODE_TELEPEN, "?@", -1, 0, 1, 80, "ASCII count 127, check 0; verified manually against tec-it", "10101010101110001010101010101110111011101110101011101110111011101110001010101010" }, - /* 4*/ { BARCODE_TELEPEN, "\000", 1, 0, 1, 64, "Verified manually against bwipp and tec-it", + /* 4*/ { BARCODE_TELEPEN, "\000", 1, 0, 1, 64, "Verified manually against tec-it", "1010101010111000111011101110111011101110111011101110001010101010" }, - /* 5*/ { BARCODE_TELEPEN_NUM, "1234567890", -1, 0, 1, 128, "Verified manually against bwipp and tec-it", + /* 5*/ { BARCODE_TELEPEN_NUM, "1234567890", -1, 0, 1, 128, "Verified manually against tec-it", "10101010101110001010101110101110101000101010001010101110101110001011101010001000101110001010101010101011101010101110001010101010" }, - /* 6*/ { BARCODE_TELEPEN_NUM, "123456789", -1, 0, 1, 128, "Verified manually against bwipp (012345679) and tec-it (012345679)", + /* 6*/ { BARCODE_TELEPEN_NUM, "123456789", -1, 0, 1, 128, "Verified manually against tec-it (012345679)", "10101010101110001110101010111010111000100010001011101110001110001000101010001010111010100010100010111000101110101110001010101010" }, - /* 7*/ { BARCODE_TELEPEN_NUM, "123X", -1, 0, 1, 80, "Verified manually against bwipp and tec-it", + /* 7*/ { BARCODE_TELEPEN_NUM, "123X", -1, 0, 1, 80, "Verified manually against tec-it", "10101010101110001010101110101110111010111000111011101011101110001110001010101010" }, - /* 8*/ { BARCODE_TELEPEN_NUM, "1X3X", -1, 0, 1, 80, "Verified manually against bwipp and tec-it", + /* 8*/ { BARCODE_TELEPEN_NUM, "1X3X", -1, 0, 1, 80, "Verified manually against tec-it", "10101010101110001110001110001110111010111000111010111010101110001110001010101010" }, }; @@ -256,19 +256,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) { - ret = testUtilBwipp(symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_upcean.c b/backend/tests/test_upcean.c index 73bde64d..4e974c05 100644 --- a/backend/tests/test_upcean.c +++ b/backend/tests/test_upcean.c @@ -428,19 +428,17 @@ static void test_encode(int index, int generate, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - if (ret == 0) { - int width, row; - ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); - assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); - } + int width, row; + ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); + assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, data[i].option_2, -1, debug)) { - ret = testUtilBwipp(symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret); + ret = testUtilBwipp(i, symbol, -1, data[i].option_2, -1, data[i].data, length, NULL, bwipp_buf, sizeof(bwipp_buf)); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", - i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); + i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected); } } } diff --git a/backend/tests/test_vector.c b/backend/tests/test_vector.c index 7d832c8b..0e0097a4 100644 --- a/backend/tests/test_vector.c +++ b/backend/tests/test_vector.c @@ -79,7 +79,7 @@ static void test_options(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_CODE128, "123456", "7890ab", 0, "A", 0, 1, 46, 92, 118 }, + /* 0*/ { BARCODE_CODE128, "123456", "7890ab", 0, "A", 0, 1, 46, 92, 118.9 }, /* 1*/ { BARCODE_CODE128, "12345", NULL, 0, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, -1, -1 }, /* 2*/ { BARCODE_CODE128, NULL, "1234567", 0, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, -1, -1 }, /* 3*/ { BARCODE_CODE128, "12345 ", NULL, 0, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, -1, -1 }, @@ -109,9 +109,9 @@ static void test_options(int index, int debug) { if (ret < 5) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %f != %f\n", + assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->width, data[i].expected_vector_width); - assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %f != %f\n", + assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->height, data[i].expected_vector_height); } @@ -138,131 +138,133 @@ static void test_buffer_vector(int index, int generate, int debug) { float expected_vector_height; }; struct item data[] = { - /* 0*/ { BARCODE_CODE11, "0000000000", "", 50, 1, 99, 198, 118 }, - /* 1*/ { BARCODE_C25STANDARD, "0000000000", "", 50, 1, 117, 234, 118 }, - /* 2*/ { BARCODE_C25INTER, "0000000000", "", 50, 1, 99, 198, 118 }, - /* 3*/ { BARCODE_C25IATA, "0000000000", "", 50, 1, 149, 298, 118 }, - /* 4*/ { BARCODE_C25LOGIC, "0000000000", "", 50, 1, 109, 218, 118 }, - /* 5*/ { BARCODE_C25IND, "0000000000", "", 50, 1, 159, 318, 118 }, - /* 6*/ { BARCODE_CODE39, "0000000000", "", 50, 1, 155, 310, 118 }, - /* 7*/ { BARCODE_EXCODE39, "0000000000", "", 50, 1, 155, 310, 118 }, - /* 8*/ { BARCODE_EANX, "123456789012", "", 50, 1, 95, 226, 118 }, - /* 9*/ { BARCODE_EANX_CHK, "1234567890128", "", 50, 1, 95, 226, 118 }, - /* 10*/ { BARCODE_EANX, "123456789012+12", "", 50, 1, 122, 276, 118 }, - /* 11*/ { BARCODE_EANX_CHK, "1234567890128+12", "", 50, 1, 122, 276, 118 }, - /* 12*/ { BARCODE_EANX, "123456789012+12345", "", 50, 1, 149, 330, 118 }, - /* 13*/ { BARCODE_EANX_CHK, "1234567890128+12345", "", 50, 1, 149, 330, 118 }, - /* 14*/ { BARCODE_EANX, "1234567", "", 50, 1, 67, 162, 118 }, - /* 15*/ { BARCODE_EANX_CHK, "12345670", "", 50, 1, 67, 162, 118 }, - /* 16*/ { BARCODE_EANX, "1234567+12", "", 50, 1, 94, 216, 118 }, - /* 17*/ { BARCODE_EANX_CHK, "12345670+12", "", 50, 1, 94, 216, 118 }, - /* 18*/ { BARCODE_EANX, "1234567+12345", "", 50, 1, 121, 270, 118 }, - /* 19*/ { BARCODE_EANX_CHK, "12345670+12345", "", 50, 1, 121, 270, 118 }, - /* 20*/ { BARCODE_EANX, "1234", "", 50, 1, 47, 118, 118 }, - /* 21*/ { BARCODE_EANX_CHK, "1234", "", 50, 1, 47, 118, 118 }, - /* 22*/ { BARCODE_EANX, "12", "", 50, 1, 20, 64, 118 }, - /* 23*/ { BARCODE_EANX_CHK, "12", "", 50, 1, 20, 64, 118 }, - /* 24*/ { BARCODE_GS1_128, "[01]12345678901234", "", 50, 1, 134, 268, 118 }, - /* 25*/ { BARCODE_CODABAR, "A00000000B", "", 50, 1, 102, 204, 118 }, - /* 26*/ { BARCODE_CODE128, "0000000000", "", 50, 1, 90, 180, 118 }, - /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 50, 1, 135, 270, 118 }, - /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 50, 1, 117, 234, 118 }, - /* 29*/ { BARCODE_CODE16K, "0000000000", "", 20, 2, 70, 162, 44 }, - /* 30*/ { BARCODE_CODE49, "0000000000", "", 20, 2, 70, 162, 44 }, - /* 31*/ { BARCODE_CODE93, "0000000000", "", 50, 1, 127, 254, 118 }, + /* 0*/ { BARCODE_CODE11, "1234567890", "", 50, 1, 108, 216, 118.9 }, + /* 1*/ { BARCODE_C25STANDARD, "1234567890", "", 50, 1, 117, 234, 118.9 }, + /* 2*/ { BARCODE_C25INTER, "1234567890", "", 50, 1, 99, 198, 118.9 }, + /* 3*/ { BARCODE_C25IATA, "1234567890", "", 50, 1, 149, 298, 118.9 }, + /* 4*/ { BARCODE_C25LOGIC, "1234567890", "", 50, 1, 109, 218, 118.9 }, + /* 5*/ { BARCODE_C25IND, "1234567890", "", 50, 1, 159, 318, 118.9 }, + /* 6*/ { BARCODE_CODE39, "1234567890", "", 50, 1, 155, 310, 118.9 }, + /* 7*/ { BARCODE_EXCODE39, "1234567890", "", 50, 1, 155, 310, 118.9 }, + /* 8*/ { BARCODE_EANX, "123456789012", "", 50, 1, 95, 226, 116.4 }, + /* 9*/ { BARCODE_EANX_CHK, "1234567890128", "", 50, 1, 95, 226, 116.4 }, + /* 10*/ { BARCODE_EANX, "123456789012+12", "", 50, 1, 122, 276, 116.4 }, + /* 11*/ { BARCODE_EANX_CHK, "1234567890128+12", "", 50, 1, 122, 276, 116.4 }, + /* 12*/ { BARCODE_EANX, "123456789012+12345", "", 50, 1, 149, 330, 116.4 }, + /* 13*/ { BARCODE_EANX_CHK, "1234567890128+12345", "", 50, 1, 149, 330, 116.4 }, + /* 14*/ { BARCODE_EANX, "1234567", "", 50, 1, 67, 162, 116.4 }, + /* 15*/ { BARCODE_EANX_CHK, "12345670", "", 50, 1, 67, 162, 116.4 }, + /* 16*/ { BARCODE_EANX, "1234567+12", "", 50, 1, 94, 216, 116.4 }, + /* 17*/ { BARCODE_EANX_CHK, "12345670+12", "", 50, 1, 94, 216, 116.4 }, + /* 18*/ { BARCODE_EANX, "1234567+12345", "", 50, 1, 121, 270, 116.4 }, + /* 19*/ { BARCODE_EANX_CHK, "12345670+12345", "", 50, 1, 121, 270, 116.4 }, + /* 20*/ { BARCODE_EANX, "1234", "", 50, 1, 47, 118, 116.4 }, + /* 21*/ { BARCODE_EANX_CHK, "1234", "", 50, 1, 47, 118, 116.4 }, + /* 22*/ { BARCODE_EANX, "12", "", 50, 1, 20, 64, 116.4 }, + /* 23*/ { BARCODE_EANX_CHK, "12", "", 50, 1, 20, 64, 116.4 }, + /* 24*/ { BARCODE_GS1_128, "[01]12345678901234", "", 50, 1, 134, 268, 118.9 }, + /* 25*/ { BARCODE_CODABAR, "A00000000B", "", 50, 1, 102, 204, 118.9 }, + /* 26*/ { BARCODE_CODE128, "1234567890", "", 50, 1, 90, 180, 118.9 }, + /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 50, 1, 135, 270, 118.9 }, + /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 50, 1, 117, 234, 118.9 }, + /* 29*/ { BARCODE_CODE16K, "1234567890", "", 20, 2, 70, 162, 44 }, + /* 30*/ { BARCODE_CODE49, "1234567890", "", 20, 2, 70, 162, 44 }, + /* 31*/ { BARCODE_CODE93, "1234567890", "", 50, 1, 127, 254, 118.9 }, /* 32*/ { BARCODE_FLAT, "1234567890", "", 50, 1, 90, 180, 100 }, - /* 33*/ { BARCODE_DBAR_OMN, "1234567890123", "", 50, 1, 96, 192, 118 }, - /* 34*/ { BARCODE_DBAR_LTD, "1234567890123", "", 50, 1, 79, 158.0, 118.0 }, - /* 35*/ { BARCODE_DBAR_EXP, "[01]12345678901234", "", 34, 1, 134, 268, 86 }, - /* 36*/ { BARCODE_TELEPEN, "0000000000", "", 50, 1, 208, 416, 118 }, - /* 37*/ { BARCODE_UPCA, "12345678904", "", 50, 1, 95, 226, 118 }, - /* 38*/ { BARCODE_UPCA_CHK, "123456789043", "", 50, 1, 95, 226, 118 }, - /* 39*/ { BARCODE_UPCA, "12345678904+12", "", 50, 1, 124, 276, 118 }, - /* 40*/ { BARCODE_UPCA_CHK, "123456789043+12", "", 50, 1, 124, 276, 118 }, - /* 41*/ { BARCODE_UPCA, "12345678904+12345", "", 50, 1, 151, 330, 118 }, - /* 42*/ { BARCODE_UPCA_CHK, "123456789043+12345", "", 50, 1, 151, 330, 118 }, - /* 43*/ { BARCODE_UPCE, "1234567", "", 50, 1, 51, 134, 118 }, - /* 44*/ { BARCODE_UPCE_CHK, "12345670", "", 50, 1, 51, 134, 118 }, - /* 45*/ { BARCODE_UPCE, "1234567+12", "", 50, 1, 78, 184, 118 }, - /* 46*/ { BARCODE_UPCE_CHK, "12345670+12", "", 50, 1, 78, 184, 118 }, - /* 47*/ { BARCODE_UPCE, "1234567+12345", "", 50, 1, 105, 238, 118 }, - /* 48*/ { BARCODE_UPCE_CHK, "12345670+12345", "", 50, 1, 105, 238, 118 }, - /* 49*/ { BARCODE_POSTNET, "00000000000", "", 12, 2, 185, 370, 24 }, - /* 50*/ { BARCODE_MSI_PLESSEY, "0000000000", "", 50, 1, 127, 254, 118 }, + /* 33*/ { BARCODE_DBAR_OMN, "1234567890123", "", 50, 1, 96, 192, 118.9 }, + /* 34*/ { BARCODE_DBAR_LTD, "1234567890123", "", 50, 1, 79, 158, 118.9 }, + /* 35*/ { BARCODE_DBAR_EXP, "[01]12345678901234", "", 34, 1, 134, 268, 86.900002 }, + /* 36*/ { BARCODE_TELEPEN, "1234567890", "", 50, 1, 208, 416, 118.9 }, + /* 37*/ { BARCODE_UPCA, "12345678901", "", 50, 1, 95, 226, 116.4 }, + /* 38*/ { BARCODE_UPCA_CHK, "123456789012", "", 50, 1, 95, 226, 116.4 }, + /* 39*/ { BARCODE_UPCA, "12345678901+12", "", 50, 1, 124, 276, 116.4 }, + /* 40*/ { BARCODE_UPCA_CHK, "123456789012+12", "", 50, 1, 124, 276, 116.4 }, + /* 41*/ { BARCODE_UPCA, "12345678901+12345", "", 50, 1, 151, 330, 116.4 }, + /* 42*/ { BARCODE_UPCA_CHK, "123456789012+12345", "", 50, 1, 151, 330, 116.4 }, + /* 43*/ { BARCODE_UPCE, "1234567", "", 50, 1, 51, 134, 116.4 }, + /* 44*/ { BARCODE_UPCE_CHK, "12345670", "", 50, 1, 51, 134, 116.4 }, + /* 45*/ { BARCODE_UPCE, "1234567+12", "", 50, 1, 78, 184, 116.4 }, + /* 46*/ { BARCODE_UPCE_CHK, "12345670+12", "", 50, 1, 78, 184, 116.4 }, + /* 47*/ { BARCODE_UPCE, "1234567+12345", "", 50, 1, 105, 238, 116.4 }, + /* 48*/ { BARCODE_UPCE_CHK, "12345670+12345", "", 50, 1, 105, 238, 116.4 }, + /* 49*/ { BARCODE_POSTNET, "12345678901", "", 12, 2, 123, 246, 24 }, + /* 50*/ { BARCODE_MSI_PLESSEY, "1234567890", "", 50, 1, 127, 254, 118.9 }, /* 51*/ { BARCODE_FIM, "A", "", 50, 1, 17, 34, 100 }, - /* 52*/ { BARCODE_LOGMARS, "0000000000", "", 50, 1, 191, 382, 118 }, + /* 52*/ { BARCODE_LOGMARS, "1234567890", "", 50, 1, 191, 382, 118.9 }, /* 53*/ { BARCODE_PHARMA, "123456", "", 50, 1, 58, 116, 100 }, - /* 54*/ { BARCODE_PZN, "123456", "", 50, 1, 142, 284, 118 }, + /* 54*/ { BARCODE_PZN, "123456", "", 50, 1, 142, 284, 118.9 }, /* 55*/ { BARCODE_PHARMA_TWO, "12345678", "", 10, 2, 29, 58, 20 }, - /* 56*/ { BARCODE_PDF417, "0000000000", "", 21, 7, 103, 206, 42 }, - /* 57*/ { BARCODE_PDF417COMP, "0000000000", "", 21, 7, 69, 138, 42 }, - /* 58*/ { BARCODE_MAXICODE, "0000000000", "", 165, 33, 30, 74, 72 }, // Differs from raster + /* 56*/ { BARCODE_PDF417, "1234567890", "", 21, 7, 103, 206, 42 }, + /* 57*/ { BARCODE_PDF417COMP, "1234567890", "", 21, 7, 69, 138, 42 }, + /* 58*/ { BARCODE_MAXICODE, "1234567890", "", 165, 33, 30, 74, 72 }, /* 59*/ { BARCODE_QRCODE, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 60*/ { BARCODE_CODE128B, "0000000000", "", 50, 1, 145, 290, 118 }, + /* 60*/ { BARCODE_CODE128B, "1234567890", "", 50, 1, 145, 290, 118.9 }, /* 61*/ { BARCODE_AUSPOST, "12345678901234567890123", "", 8, 3, 133, 266, 16 }, /* 62*/ { BARCODE_AUSREPLY, "12345678", "", 8, 3, 73, 146, 16 }, /* 63*/ { BARCODE_AUSROUTE, "12345678", "", 8, 3, 73, 146, 16 }, /* 64*/ { BARCODE_AUSREDIRECT, "12345678", "", 8, 3, 73, 146, 16 }, - /* 65*/ { BARCODE_ISBNX, "123456789", "", 50, 1, 95, 226, 118 }, - /* 66*/ { BARCODE_ISBNX, "123456789+12", "", 50, 1, 122, 276, 118 }, - /* 67*/ { BARCODE_ISBNX, "123456789+12345", "", 50, 1, 149, 330, 118 }, - /* 68*/ { BARCODE_RM4SCC, "0000000000", "", 8, 3, 91, 182, 16 }, + /* 65*/ { BARCODE_ISBNX, "123456789", "", 50, 1, 95, 226, 116.4 }, + /* 66*/ { BARCODE_ISBNX, "123456789+12", "", 50, 1, 122, 276, 116.4 }, + /* 67*/ { BARCODE_ISBNX, "123456789+12345", "", 50, 1, 149, 330, 116.4 }, + /* 68*/ { BARCODE_RM4SCC, "1234567890", "", 8, 3, 91, 182, 16 }, /* 69*/ { BARCODE_DATAMATRIX, "ABC", "", 10, 10, 10, 20, 20 }, - /* 70*/ { BARCODE_EAN14, "1234567890123", "", 50, 1, 134, 268, 118 }, - /* 71*/ { BARCODE_VIN, "00000000000000000", "", 50, 1, 246, 492, 118 }, - /* 72*/ { BARCODE_CODABLOCKF, "0000000000", "", 20, 2, 101, 242, 44 }, - /* 73*/ { BARCODE_NVE18, "12345678901234567", "", 50, 1, 156, 312, 118 }, - /* 74*/ { BARCODE_JAPANPOST, "0000000000", "", 8, 3, 133, 266, 16 }, - /* 75*/ { BARCODE_KOREAPOST, "123456", "", 50, 1, 167, 334, 118 }, - /* 76*/ { BARCODE_DBAR_STK, "0000000000000", "", 13, 3, 50, 100, 26 }, - /* 77*/ { BARCODE_DBAR_OMNSTK, "0000000000000", "", 69, 5, 50, 100, 138 }, + /* 70*/ { BARCODE_EAN14, "1234567890123", "", 50, 1, 134, 268, 118.9 }, + /* 71*/ { BARCODE_VIN, "12345678701234567", "", 50, 1, 246, 492, 118.9 }, + /* 72*/ { BARCODE_CODABLOCKF, "1234567890", "", 20, 2, 101, 242, 44 }, + /* 73*/ { BARCODE_NVE18, "12345678901234567", "", 50, 1, 156, 312, 118.9 }, + /* 74*/ { BARCODE_JAPANPOST, "1234567890", "", 8, 3, 133, 266, 16 }, + /* 75*/ { BARCODE_KOREAPOST, "123456", "", 50, 1, 167, 334, 118.9 }, + /* 76*/ { BARCODE_DBAR_STK, "1234567890123", "", 13, 3, 50, 100, 26 }, + /* 77*/ { BARCODE_DBAR_OMNSTK, "1234567890123", "", 69, 5, 50, 100, 138 }, /* 78*/ { BARCODE_DBAR_EXPSTK, "[01]12345678901234", "", 71, 5, 102, 204, 142 }, - /* 79*/ { BARCODE_PLANET, "00000000000", "", 12, 2, 185, 370, 24 }, - /* 80*/ { BARCODE_MICROPDF417, "0000000000", "", 12, 6, 82, 164, 24 }, + /* 79*/ { BARCODE_PLANET, "12345678901", "", 12, 2, 123, 246, 24 }, + /* 80*/ { BARCODE_MICROPDF417, "1234567890", "", 12, 6, 82, 164, 24 }, /* 81*/ { BARCODE_USPS_IMAIL, "12345678901234567890", "", 8, 3, 129, 258, 16 }, - /* 82*/ { BARCODE_PLESSEY, "0000000000", "", 50, 1, 227, 454, 118 }, - /* 83*/ { BARCODE_TELEPEN_NUM, "0000000000", "", 50, 1, 128, 256, 118 }, - /* 84*/ { BARCODE_ITF14, "0000000000", "", 50, 1, 135, 330, 138 }, + /* 82*/ { BARCODE_PLESSEY, "1234567890", "", 50, 1, 227, 454, 118.9 }, + /* 83*/ { BARCODE_TELEPEN_NUM, "1234567890", "", 50, 1, 128, 256, 118.9 }, + /* 84*/ { BARCODE_ITF14, "1234567890", "", 50, 1, 135, 330, 138.89999 }, /* 85*/ { BARCODE_KIX, "123456ABCDE", "", 8, 3, 87, 174, 16 }, /* 86*/ { BARCODE_AZTEC, "1234567890AB", "", 15, 15, 15, 30, 30 }, - /* 87*/ { BARCODE_DAFT, "DAFTDAFTDAFTDAFT", "", 8, 3, 31, 62, 16 }, - /* 88*/ { BARCODE_DPD, "0123456789012345678901234567", "", 50, 1, 189, 378, 118 }, - /* 89*/ { BARCODE_MICROQR, "12345", "", 11, 11, 11, 22, 22 }, - /* 90*/ { BARCODE_HIBC_128, "0000000000", "", 50, 1, 134, 268, 118 }, - /* 91*/ { BARCODE_HIBC_39, "0000000000", "", 50, 1, 223, 446, 118 }, - /* 92*/ { BARCODE_HIBC_DM, "ABC", "", 12, 12, 12, 24, 24 }, - /* 93*/ { BARCODE_HIBC_QR, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 94*/ { BARCODE_HIBC_PDF, "0000000000", "", 27, 9, 103, 206, 54 }, - /* 95*/ { BARCODE_HIBC_MICPDF, "0000000000", "", 34, 17, 38, 76, 68 }, - /* 96*/ { BARCODE_HIBC_BLOCKF, "0000000000", "", 30, 3, 101, 242, 64 }, - /* 97*/ { BARCODE_HIBC_AZTEC, "1234567890AB", "", 19, 19, 19, 38, 38 }, - /* 98*/ { BARCODE_DOTCODE, "ABC", "", 11, 11, 16, 32, 22 }, // Differs from raster - /* 99*/ { BARCODE_HANXIN, "1234567890AB", "", 23, 23, 23, 46, 46 }, - /*100*/ { BARCODE_MAILMARK, "01000000000000000AA00AA0A", "", 10, 3, 155, 310, 20 }, - /*101*/ { BARCODE_AZRUNE, "255", "", 11, 11, 11, 22, 22 }, - /*102*/ { BARCODE_CODE32, "12345678", "", 50, 1, 103, 206, 118 }, - /*103*/ { BARCODE_EANX_CC, "123456789012", "[20]01", 50, 7, 99, 234, 118 }, - /*104*/ { BARCODE_EANX_CC, "123456789012+12", "[20]01", 50, 7, 126, 284, 118 }, - /*105*/ { BARCODE_EANX_CC, "123456789012+12345", "[20]01", 50, 7, 153, 338, 118 }, - /*106*/ { BARCODE_GS1_128_CC, "[01]12345678901234", "[20]01", 50, 5, 145, 290, 118 }, - /*107*/ { BARCODE_DBAR_OMN_CC, "1234567890123", "[20]01", 21, 5, 100, 200, 60 }, - /*108*/ { BARCODE_DBAR_LTD_CC, "1234567890123", "[20]01", 19, 6, 79, 158.0, 56.0 }, - /*109*/ { BARCODE_DBAR_EXP_CC, "[01]12345678901234", "[20]01", 41, 5, 134, 268, 100 }, - /*110*/ { BARCODE_UPCA_CC, "12345678901", "[20]01", 50, 7, 99, 234, 118 }, - /*111*/ { BARCODE_UPCA_CC, "12345678901+12", "[20]01", 50, 7, 128, 284, 118 }, - /*112*/ { BARCODE_UPCA_CC, "12345678901+12345", "[20]01", 50, 7, 155, 338, 118 }, - /*113*/ { BARCODE_UPCE_CC, "1234567", "[20]01", 50, 9, 55, 142, 118 }, - /*114*/ { BARCODE_UPCE_CC, "1234567+12", "[20]01", 50, 9, 82, 192, 118 }, - /*115*/ { BARCODE_UPCE_CC, "1234567+12345", "[20]01", 50, 9, 109, 246, 118 }, - /*116*/ { BARCODE_DBAR_STK_CC, "0000000000000", "[20]01", 24, 9, 56, 112, 48 }, - /*117*/ { BARCODE_DBAR_OMNSTK_CC, "0000000000000", "[20]01", 80, 11, 56, 112, 160 }, - /*118*/ { BARCODE_DBAR_EXPSTK_CC, "[01]12345678901234", "[20]01", 78, 9, 102, 204, 156 }, - /*119*/ { BARCODE_CHANNEL, "00", "", 50, 1, 19, 38, 118 }, - /*120*/ { BARCODE_CODEONE, "12345678901234567890", "", 22, 22, 22, 44, 44 }, - /*121*/ { BARCODE_GRIDMATRIX, "ABC", "", 18, 18, 18, 36, 36 }, - /*122*/ { BARCODE_UPNQR, "1234567890AB", "", 77, 77, 77, 154, 154 }, - /*123*/ { BARCODE_ULTRA, "0000000000", "", 13, 13, 18, 36, 26 }, - /*124*/ { BARCODE_RMQR, "12345", "", 11, 11, 27, 54, 22 }, + /* 87*/ { BARCODE_DPD, "0123456789012345678901234567", "", 50, 1, 189, 378, 118.9 }, + /* 88*/ { BARCODE_MICROQR, "12345", "", 11, 11, 11, 22, 22 }, + /* 89*/ { BARCODE_HIBC_128, "1234567890", "", 50, 1, 123, 246, 118.9 }, + /* 90*/ { BARCODE_HIBC_39, "1234567890", "", 50, 1, 223, 446, 118.9 }, + /* 91*/ { BARCODE_HIBC_DM, "ABC", "", 12, 12, 12, 24, 24 }, + /* 92*/ { BARCODE_HIBC_QR, "1234567890AB", "", 21, 21, 21, 42, 42 }, + /* 93*/ { BARCODE_HIBC_PDF, "1234567890", "", 24, 8, 103, 206, 48 }, + /* 94*/ { BARCODE_HIBC_MICPDF, "1234567890", "", 28, 14, 38, 76, 56 }, + /* 95*/ { BARCODE_HIBC_BLOCKF, "1234567890", "", 30, 3, 101, 242, 64 }, + /* 96*/ { BARCODE_HIBC_AZTEC, "1234567890AB", "", 19, 19, 19, 38, 38 }, + /* 97*/ { BARCODE_DOTCODE, "ABC", "", 11, 11, 16, 32, 22 }, + /* 98*/ { BARCODE_HANXIN, "1234567890AB", "", 23, 23, 23, 46, 46 }, + /* 99*/ { BARCODE_MAILMARK, "01000000000000000AA00AA0A", "", 10, 3, 155, 310, 20 }, + /*100*/ { BARCODE_AZRUNE, "255", "", 11, 11, 11, 22, 22 }, + /*101*/ { BARCODE_CODE32, "12345678", "", 50, 1, 103, 206, 118.9 }, + /*102*/ { BARCODE_EANX_CC, "123456789012", "[20]01", 50, 7, 99, 234, 116.4 }, + /*103*/ { BARCODE_EANX_CC, "123456789012+12", "[20]01", 50, 7, 126, 284, 116.4 }, + /*104*/ { BARCODE_EANX_CC, "123456789012+12345", "[20]01", 50, 7, 153, 338, 116.4 }, + /*105*/ { BARCODE_EANX_CC, "1234567", "[20]01", 50, 8, 72, 172, 116.4 }, + /*106*/ { BARCODE_EANX_CC, "1234567+12", "[20]01", 50, 8, 99, 226, 116.4 }, + /*107*/ { BARCODE_EANX_CC, "1234567+12345", "[20]01", 50, 8, 126, 280, 116.4 }, + /*108*/ { BARCODE_GS1_128_CC, "[01]12345678901234", "[20]01", 50, 5, 145, 290, 118.9 }, + /*109*/ { BARCODE_DBAR_OMN_CC, "1234567890123", "[20]01", 21, 5, 100, 200, 60.900002 }, + /*110*/ { BARCODE_DBAR_LTD_CC, "1234567890123", "[20]01", 19, 6, 79, 158, 56.900002 }, + /*111*/ { BARCODE_DBAR_EXP_CC, "[01]12345678901234", "[20]01", 41, 5, 134, 268, 100.9 }, + /*112*/ { BARCODE_UPCA_CC, "12345678901", "[20]01", 50, 7, 99, 234, 116.4 }, + /*113*/ { BARCODE_UPCA_CC, "12345678901+12", "[20]01", 50, 7, 128, 284, 116.4 }, + /*114*/ { BARCODE_UPCA_CC, "12345678901+12345", "[20]01", 50, 7, 155, 338, 116.4 }, + /*115*/ { BARCODE_UPCE_CC, "1234567", "[20]01", 50, 9, 55, 142, 116.4 }, + /*116*/ { BARCODE_UPCE_CC, "1234567+12", "[20]01", 50, 9, 82, 192, 116.4 }, + /*117*/ { BARCODE_UPCE_CC, "1234567+12345", "[20]01", 50, 9, 109, 246, 116.4 }, + /*118*/ { BARCODE_DBAR_STK_CC, "1234567890123", "[20]01", 24, 9, 56, 112, 48 }, + /*119*/ { BARCODE_DBAR_OMNSTK_CC, "1234567890123", "[20]01", 80, 11, 56, 112, 160 }, + /*120*/ { BARCODE_DBAR_EXPSTK_CC, "[01]12345678901234", "[20]01", 78, 9, 102, 204, 156 }, + /*121*/ { BARCODE_CHANNEL, "01", "", 50, 1, 19, 38, 118.9 }, + /*122*/ { BARCODE_CODEONE, "12345678901234567890", "", 22, 22, 22, 44, 44 }, + /*123*/ { BARCODE_GRIDMATRIX, "ABC", "", 18, 18, 18, 36, 36 }, + /*124*/ { BARCODE_UPNQR, "1234567890AB", "", 77, 77, 77, 154, 154 }, + /*125*/ { BARCODE_ULTRA, "1234567890", "", 13, 13, 18, 36, 26 }, + /*126*/ { BARCODE_RMQR, "12345", "", 11, 11, 27, 54, 22 }, }; int data_size = sizeof(data) / sizeof(struct item); @@ -295,16 +297,16 @@ static void test_buffer_vector(int index, int generate, int debug) { assert_nonnull(symbol->vector, "i:%d ZBarcode_Buffer_Vector(%d) vector NULL\n", i, data[i].symbology); if (generate) { - printf(" /*%3d*/ { %s, \"%s\", \"%s\", %d, %d, %d, %.1f, %.1f },\n", + printf(" /*%3d*/ { %s, \"%s\", \"%s\", %d, %d, %d, %.8g, %.8g },\n", i, testUtilBarcodeName(data[i].symbology), data[i].data, data[i].composite, symbol->height, symbol->rows, symbol->width, symbol->vector->width, symbol->vector->height); } else { assert_equal(symbol->height, data[i].expected_height, "i:%d (%s) symbol->height %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->height, data[i].expected_height); assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%s) symbol->rows %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows); assert_equal(symbol->width, data[i].expected_width, "i:%d (%s) symbol->width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width); - assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %f != %f\n", + assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->width, data[i].expected_vector_width); - assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %f != %f\n", + assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->height, data[i].expected_vector_height); } @@ -335,46 +337,46 @@ static void test_upcean_hrt(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_EANX, -1, "123456789012", 0, 50, 1, 95, 230.0, 118.0, 8, -1 }, // EAN-13 - /* 1*/ { BARCODE_EANX, 0, "123456789012", 0, 50, 1, 95, 230.0, 118.0, -1, -1 }, // EAN-13 - /* 2*/ { BARCODE_EANX_CHK, -1, "1234567890128", 0, 50, 1, 95, 230.0, 118.0, 8, -1 }, // EAN-13 - /* 3*/ { BARCODE_EANX_CHK, 0, "1234567890128", 0, 50, 1, 95, 230.0, 118.0, -1, -1 }, // EAN-13 - /* 4*/ { BARCODE_ISBNX, -1, "9784567890120", 0, 50, 1, 95, 230.0, 118.0, 8, -1 }, - /* 5*/ { BARCODE_ISBNX, 0, "9784567890120", 0, 50, 1, 95, 230.0, 118.0, -1, -1 }, - /* 6*/ { BARCODE_EANX, -1, "1234567", 0, 50, 1, 67, 134.0, 118.0, 48, -1 }, // EAN-8 - /* 7*/ { BARCODE_EANX, 0, "1234567", 0, 50, 1, 67, 134.0, 118.0, -1, -1 }, // EAN-8 - /* 8*/ { BARCODE_EANX, -1, "1234", 0, 50, 1, 47, 94.0, 118.0, 61, -1 }, // EAN-5 - /* 9*/ { BARCODE_EANX, 0, "1234", 0, 50, 1, 47, 94.0, 118.0, -1, -1 }, // EAN-5 - /* 10*/ { BARCODE_EANX, -1, "12", 0, 50, 1, 20, 40.0, 118.0, 34, -1 }, // EAN-2 - /* 11*/ { BARCODE_EANX, 0, "12", 0, 50, 1, 20, 40.0, 118.0, -1, -1 }, // EAN-2 - /* 12*/ { BARCODE_UPCA, -1, "12345678901", 0, 50, 1, 95, 230.0, 118.0, 8, -1 }, - /* 13*/ { BARCODE_UPCA, 0, "12345678901", 0, 50, 1, 95, 230.0, 118.0, -1, -1 }, - /* 14*/ { BARCODE_UPCA_CHK, -1, "123456789012", 0, 50, 1, 95, 230.0, 118.0, 8, -1 }, - /* 15*/ { BARCODE_UPCA_CHK, 0, "123456789012", 0, 50, 1, 95, 230.0, 118.0, -1, -1 }, - /* 16*/ { BARCODE_UPCE, -1, "1234567", 0, 50, 1, 51, 142.0, 118.0, 8, -1 }, - /* 17*/ { BARCODE_UPCE, 0, "1234567", 0, 50, 1, 51, 142.0, 118.0, -1, -1 }, - /* 18*/ { BARCODE_UPCE_CHK, -1, "12345670", 0, 50, 1, 51, 142.0, 118.0, 8, -1 }, - /* 19*/ { BARCODE_UPCE_CHK, 0, "12345670", 0, 50, 1, 51, 142.0, 118.0, -1, -1 }, - /* 20*/ { BARCODE_EANX, -1, "123456789012+12", 0, 50, 1, 122, 276.0, 118.0, 8, 70 }, // EAN-13 + EAN-2 - /* 21*/ { BARCODE_EANX, 0, "123456789012+12", 0, 50, 1, 122, 276.0, 118.0, -1, -1 }, // EAN-13 + EAN-2 - /* 22*/ { BARCODE_ISBNX, -1, "9784567890120+12", 0, 50, 1, 122, 276.0, 118.0, 8, 70 }, // ISBN + EAN-2 - /* 23*/ { BARCODE_ISBNX, 0, "9784567890120+12", 0, 50, 1, 122, 276.0, 118.0, -1, -1 }, // ISBN + EAN-2 - /* 24*/ { BARCODE_EANX, -1, "123456789012+12345", 0, 50, 1, 149, 330.0, 118.0, 8, 70 }, // EAN-13 + EAN-5 - /* 25*/ { BARCODE_EANX, 0, "123456789012+12345", 0, 50, 1, 149, 330.0, 118.0, -1, -1 }, // EAN-13 + EAN-5 - /* 26*/ { BARCODE_ISBNX, -1, "9784567890120+12345", 0, 50, 1, 149, 330.0, 118.0, 8, 70 }, // ISBN + EAN-5 - /* 27*/ { BARCODE_ISBNX, 0, "9784567890120+12345", 0, 50, 1, 149, 330.0, 118.0, -1, -1 }, // ISBN + EAN-5 - /* 28*/ { BARCODE_EANX, -1, "1234567+12", 0, 50, 1, 94, 216.0, 118.0, 48, 114 }, // EAN-8 + EAN-2 - /* 29*/ { BARCODE_EANX, 0, "1234567+12", 0, 50, 1, 94, 216.0, 118.0, -1, -1 }, // EAN-8 + EAN-2 - /* 30*/ { BARCODE_EANX, -1, "1234567+12345", 0, 50, 1, 121, 270.0, 118.0, 48, 114 }, // EAN-8 + EAN-5 - /* 31*/ { BARCODE_EANX, 0, "1234567+12345", 0, 50, 1, 121, 270.0, 118.0, -1, -1 }, // EAN-8 + EAN-5 - /* 32*/ { BARCODE_UPCA, -1, "12345678901+12", 0, 50, 1, 124, 288.0, 118.0, 8, 72 }, - /* 33*/ { BARCODE_UPCA, 0, "12345678901+12", 0, 50, 1, 124, 288.0, 118.0, -1, -1 }, - /* 34*/ { BARCODE_UPCA, -1, "12345678901+12345", 0, 50, 1, 151, 342.0, 118.0, 8, 72 }, - /* 35*/ { BARCODE_UPCA, 0, "12345678901+12345", 0, 50, 1, 151, 342.0, 118.0, -1, -1 }, - /* 36*/ { BARCODE_UPCE, -1, "1234567+12", 0, 50, 1, 78, 184.0, 118.0, 8, 66 }, - /* 37*/ { BARCODE_UPCE, 0, "1234567+12", 0, 50, 1, 78, 184.0, 118.0, -1, -1 }, - /* 38*/ { BARCODE_UPCE, -1, "1234567+12345", 0, 50, 1, 105, 238.0, 118.0, 8, 66 }, - /* 39*/ { BARCODE_UPCE, 0, "1234567+12345", 0, 50, 1, 105, 238.0, 118.0, -1, -1 }, + /* 0*/ { BARCODE_EANX, -1, "123456789012", 0, 50, 1, 95, 226, 116.4, 12, -1 }, // EAN-13 + /* 1*/ { BARCODE_EANX, 0, "123456789012", 0, 50, 1, 95, 226, 110, -1, -1 }, // EAN-13 + /* 2*/ { BARCODE_EANX_CHK, -1, "1234567890128", 0, 50, 1, 95, 226, 116.4, 12, -1 }, // EAN-13 + /* 3*/ { BARCODE_EANX_CHK, 0, "1234567890128", 0, 50, 1, 95, 226, 110, -1, -1 }, // EAN-13 + /* 4*/ { BARCODE_ISBNX, -1, "9784567890120", 0, 50, 1, 95, 226, 116.4, 12, -1 }, + /* 5*/ { BARCODE_ISBNX, 0, "9784567890120", 0, 50, 1, 95, 226, 110, -1, -1 }, + /* 6*/ { BARCODE_EANX, -1, "1234567", 0, 50, 1, 67, 162, 116.4, 48, -1 }, // EAN-8 + /* 7*/ { BARCODE_EANX, 0, "1234567", 0, 50, 1, 67, 162, 110, -1, -1 }, // EAN-8 + /* 8*/ { BARCODE_EANX, -1, "1234", 0, 50, 1, 47, 118, 116.4, 61, -1 }, // EAN-5 + /* 9*/ { BARCODE_EANX, 0, "1234", 0, 50, 1, 47, 118, 100, -1, -1 }, // EAN-5 + /* 10*/ { BARCODE_EANX, -1, "12", 0, 50, 1, 20, 64, 116.4, 34, -1 }, // EAN-2 + /* 11*/ { BARCODE_EANX, 0, "12", 0, 50, 1, 20, 64, 100, -1, -1 }, // EAN-2 + /* 12*/ { BARCODE_UPCA, -1, "12345678901", 0, 50, 1, 95, 226, 116.4, 8, -1 }, + /* 13*/ { BARCODE_UPCA, 0, "12345678901", 0, 50, 1, 95, 226, 110, -1, -1 }, + /* 14*/ { BARCODE_UPCA_CHK, -1, "123456789012", 0, 50, 1, 95, 226, 116.4, 8, -1 }, + /* 15*/ { BARCODE_UPCA_CHK, 0, "123456789012", 0, 50, 1, 95, 226, 110, -1, -1 }, + /* 16*/ { BARCODE_UPCE, -1, "1234567", 0, 50, 1, 51, 134, 116.4, 8, -1 }, + /* 17*/ { BARCODE_UPCE, 0, "1234567", 0, 50, 1, 51, 134, 110, -1, -1 }, + /* 18*/ { BARCODE_UPCE_CHK, -1, "12345670", 0, 50, 1, 51, 134, 116.4, 8, -1 }, + /* 19*/ { BARCODE_UPCE_CHK, 0, "12345670", 0, 50, 1, 51, 134, 110, -1, -1 }, + /* 20*/ { BARCODE_EANX, -1, "123456789012+12", 0, 50, 1, 122, 276.0, 116.4, 12, 70 }, // EAN-13 + EAN-2 + /* 21*/ { BARCODE_EANX, 0, "123456789012+12", 0, 50, 1, 122, 276.0, 110, -1, -1 }, // EAN-13 + EAN-2 + /* 22*/ { BARCODE_ISBNX, -1, "9784567890120+12", 0, 50, 1, 122, 276.0, 116.4, 12, 70 }, // ISBN + EAN-2 + /* 23*/ { BARCODE_ISBNX, 0, "9784567890120+12", 0, 50, 1, 122, 276.0, 110, -1, -1 }, // ISBN + EAN-2 + /* 24*/ { BARCODE_EANX, -1, "123456789012+12345", 0, 50, 1, 149, 330.0, 116.4, 12, 70 }, // EAN-13 + EAN-5 + /* 25*/ { BARCODE_EANX, 0, "123456789012+12345", 0, 50, 1, 149, 330.0, 110, -1, -1 }, // EAN-13 + EAN-5 + /* 26*/ { BARCODE_ISBNX, -1, "9784567890120+12345", 0, 50, 1, 149, 330.0, 116.4, 12, 70 }, // ISBN + EAN-5 + /* 27*/ { BARCODE_ISBNX, 0, "9784567890120+12345", 0, 50, 1, 149, 330.0, 110, -1, -1 }, // ISBN + EAN-5 + /* 28*/ { BARCODE_EANX, -1, "1234567+12", 0, 50, 1, 94, 216.0, 116.4, 48, 114 }, // EAN-8 + EAN-2 + /* 29*/ { BARCODE_EANX, 0, "1234567+12", 0, 50, 1, 94, 216.0, 110, -1, -1 }, // EAN-8 + EAN-2 + /* 30*/ { BARCODE_EANX, -1, "1234567+12345", 0, 50, 1, 121, 270.0, 116.4, 48, 114 }, // EAN-8 + EAN-5 + /* 31*/ { BARCODE_EANX, 0, "1234567+12345", 0, 50, 1, 121, 270.0, 110, -1, -1 }, // EAN-8 + EAN-5 + /* 32*/ { BARCODE_UPCA, -1, "12345678901+12", 0, 50, 1, 124, 276, 116.4, 8, 72 }, + /* 33*/ { BARCODE_UPCA, 0, "12345678901+12", 0, 50, 1, 124, 276, 110, -1, -1 }, + /* 34*/ { BARCODE_UPCA, -1, "12345678901+12345", 0, 50, 1, 151, 330, 116.4, 8, 72 }, + /* 35*/ { BARCODE_UPCA, 0, "12345678901+12345", 0, 50, 1, 151, 330, 110, -1, -1 }, + /* 36*/ { BARCODE_UPCE, -1, "1234567+12", 0, 50, 1, 78, 184.0, 116.4, 8, 66 }, + /* 37*/ { BARCODE_UPCE, 0, "1234567+12", 0, 50, 1, 78, 184.0, 110, -1, -1 }, + /* 38*/ { BARCODE_UPCE, -1, "1234567+12345", 0, 50, 1, 105, 238.0, 116.4, 8, 66 }, + /* 39*/ { BARCODE_UPCE, 0, "1234567+12345", 0, 50, 1, 105, 238.0, 110, -1, -1 }, }; int data_size = sizeof(data) / sizeof(struct item); @@ -400,16 +402,29 @@ static void test_upcean_hrt(int index, int debug) { assert_zero(ret, "i:%d ZBarcode_Buffer_Vector(%d) ret %d != 0\n", i, data[i].symbology, ret); assert_nonnull(symbol->vector, "i:%d ZBarcode_Buffer_Vector(%d) vector NULL\n", i, data[i].symbology); + assert_equal(symbol->height, data[i].expected_height, "i:%d (%s) symbol->height %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->height, data[i].expected_height); + assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%s) symbol->rows %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->rows, data[i].expected_rows); assert_equal(symbol->width, data[i].expected_width, "i:%d (%s) symbol->width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width); + + assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), symbol->vector->width, data[i].expected_vector_width); + assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), symbol->vector->height, data[i].expected_vector_height); + + if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) { + sprintf(symbol->outfile, "test_upcean_hrt%d.svg", i); + ZBarcode_Print(symbol, 0); + } + if (data[i].show_hrt) { assert_nonnull(symbol->vector->strings, "i:%d ZBarcode_Buffer_Vector(%d) vector->strings NULL\n", i, data[i].symbology); assert_equal(symbol->vector->strings->x, data[i].expected_string_x, - "i:%d (%s) symbol->vector->strings->x %f != %f\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->strings->x, data[i].expected_string_x); + "i:%d (%s) symbol->vector->strings->x %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->strings->x, data[i].expected_string_x); if (data[i].expected_addon_string_x != -1) { assert_nonnull(symbol->vector->strings->next, "i:%d ZBarcode_Buffer_Vector(%d) vector->strings->next NULL\n", i, data[i].symbology); assert_equal(symbol->vector->strings->next->x, data[i].expected_addon_string_x, - "i:%d (%s) symbol->vector->strings->next->x %f != %f\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->strings->next->x, data[i].expected_addon_string_x); + "i:%d (%s) symbol->vector->strings->next->x %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->strings->next->x, data[i].expected_addon_string_x); } } else { assert_null(symbol->vector->strings, "i:%d ZBarcode_Buffer_Vector(%d) vector->strings NULL\n", i, data[i].symbology); @@ -513,9 +528,9 @@ static void test_stacking(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_CODE128, -1, -1, -1, "A", "B", 50, 2, 46, 92, 118, -1, -1, -1 }, - /* 1*/ { BARCODE_CODE128, BARCODE_BIND, -1, -1, "A", "B", 50, 2, 46, 92, 118, 49, 0, 2 }, - /* 2*/ { BARCODE_CODE128, BARCODE_BIND, -1, 2, "A", "B", 50, 2, 46, 92, 118, 48, 0, 4 }, + /* 0*/ { BARCODE_CODE128, -1, -1, -1, "A", "B", 50, 2, 46, 92, 116.1, -1, -1, -1 }, + /* 1*/ { BARCODE_CODE128, BARCODE_BIND, -1, -1, "A", "B", 50, 2, 46, 92, 116.1, 49, 0, 2 }, + /* 2*/ { BARCODE_CODE128, BARCODE_BIND, -1, 2, "A", "B", 50, 2, 46, 92, 116.1, 48, 0, 4 }, }; int data_size = ARRAY_SIZE(data); @@ -545,7 +560,7 @@ static void test_stacking(int index, int debug) { assert_equal(symbol->width, data[i].expected_width, "i:%d (%d) symbol->width %d != %d\n", i, data[i].symbology, symbol->width, data[i].expected_width); if (data[i].expected_separator_row != -1) { - if (index != -1) { + if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) { sprintf(symbol->outfile, "test_stacking_%d.svg", i); ZBarcode_Print(symbol, 0); } @@ -592,17 +607,17 @@ static void test_output_options(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_CODE128, -1, -1, -1, "A123", 0, 50, 1, 79, 158, 118, 0, 0, 4 }, - /* 1*/ { BARCODE_CODE128, -1, 2, -1, "A123", 0, 50, 1, 79, 158, 118, 0, 0, 4 }, - /* 2*/ { BARCODE_CODE128, -1, 2, BARCODE_BIND, "A123", 0, 50, 1, 79, 158, 126, 1, 0, 4 }, - /* 3*/ { BARCODE_CODE128, -1, 2, BARCODE_BIND, "A123", 0, 50, 1, 79, 158, 126, 0, 4, 4 }, - /* 4*/ { BARCODE_CODE128, -1, 2, BARCODE_BOX, "A123", 0, 50, 1, 79, 166, 126, 1, 4, 4 }, - /* 5*/ { BARCODE_CODE128, -1, 0, BARCODE_BIND, "A123", 0, 50, 1, 79, 158, 118, 0, 0, 4 }, - /* 6*/ { BARCODE_CODE128, -1, 0, BARCODE_BOX, "A123", 0, 50, 1, 79, 158, 118, 0, 4, 4 }, - /* 7*/ { BARCODE_CODE128, -1, -1, -1, "A123", 0, 50, 1, 79, 158, 118, 0, 6, 8 }, - /* 8*/ { BARCODE_CODE128, 3, 4, BARCODE_BIND, "A123", 0, 50, 1, 79, 170, 134, 1, 6, 8 }, - /* 9*/ { BARCODE_CODE128, 3, 4, BARCODE_BIND, "A123", 0, 50, 1, 79, 170, 134, 0, 14, 8 }, - /* 10*/ { BARCODE_CODE128, 3, 4, BARCODE_BOX, "A123", 0, 50, 1, 79, 186, 134, 1, 14, 8 }, + /* 0*/ { BARCODE_CODE128, -1, -1, -1, "A123", 0, 50, 1, 79, 158, 118.9, 0, 0, 4 }, + /* 1*/ { BARCODE_CODE128, -1, 2, -1, "A123", 0, 50, 1, 79, 158, 118.9, 0, 0, 4 }, + /* 2*/ { BARCODE_CODE128, -1, 2, BARCODE_BIND, "A123", 0, 50, 1, 79, 158, 126.9, 1, 0, 4 }, + /* 3*/ { BARCODE_CODE128, -1, 2, BARCODE_BIND, "A123", 0, 50, 1, 79, 158, 126.9, 0, 4, 4 }, + /* 4*/ { BARCODE_CODE128, -1, 2, BARCODE_BOX, "A123", 0, 50, 1, 79, 166, 126.9, 1, 4, 4 }, + /* 5*/ { BARCODE_CODE128, -1, 0, BARCODE_BIND, "A123", 0, 50, 1, 79, 158, 118.9, 0, 0, 4 }, + /* 6*/ { BARCODE_CODE128, -1, 0, BARCODE_BOX, "A123", 0, 50, 1, 79, 158, 118.9, 0, 4, 4 }, + /* 7*/ { BARCODE_CODE128, -1, -1, -1, "A123", 0, 50, 1, 79, 158, 118.9, 0, 6, 8 }, + /* 8*/ { BARCODE_CODE128, 3, 4, BARCODE_BIND, "A123", 0, 50, 1, 79, 170, 134.89999, 1, 6, 8 }, + /* 9*/ { BARCODE_CODE128, 3, 4, BARCODE_BIND, "A123", 0, 50, 1, 79, 170, 134.89999, 0, 14, 8 }, + /* 10*/ { BARCODE_CODE128, 3, 4, BARCODE_BOX, "A123", 0, 50, 1, 79, 186, 134.89999, 1, 14, 8 }, /* 11*/ { BARCODE_CODE128, -1, -1, BARCODE_DOTTY_MODE, "A123", ZINT_ERROR_INVALID_OPTION, -1, -1, -1, -1, -1, -1, -1, -1 }, /* 12*/ { BARCODE_QRCODE, -1, -1, -1, "A123", 0, 21, 21, 21, 42, 42, 0, 0, 6 }, /* 13*/ { BARCODE_QRCODE, -1, 3, -1, "A123", 0, 21, 21, 21, 42, 42, 0, 0, 6 }, @@ -628,9 +643,9 @@ static void test_output_options(int index, int debug) { /* 33*/ { BARCODE_MAXICODE, 6, 5, BARCODE_BIND, "A123", 0, 165, 33, 30, 98, 92, 0, 108, 0 }, /* 34*/ { BARCODE_MAXICODE, 6, 5, BARCODE_BOX, "A123", 0, 165, 33, 30, 118, 92, 1, 108, 0 }, /* 35*/ { BARCODE_MAXICODE, -1, -1, BARCODE_DOTTY_MODE, "A123", ZINT_ERROR_INVALID_OPTION, -1, -1, -1, -1, -1, -1, -1, -1 }, - /* 36*/ { BARCODE_ITF14, -1, -1, -1, "123", 0, 50, 1, 135, 330, 138, 1, 320, 0 }, - /* 37*/ { BARCODE_ITF14, -1, 0, -1, "123", 0, 50, 1, 135, 330, 138, 1, 320, 0 }, - /* 38*/ { BARCODE_ITF14, -1, 0, BARCODE_BOX, "123", 0, 50, 1, 135, 310, 118, 0, 300, 0 }, // No zero-width/height rectangles + /* 36*/ { BARCODE_ITF14, -1, -1, -1, "123", 0, 50, 1, 135, 330, 138.89999, 1, 320, 0 }, + /* 37*/ { BARCODE_ITF14, -1, 0, -1, "123", 0, 50, 1, 135, 330, 138.89999, 1, 320, 0 }, + /* 38*/ { BARCODE_ITF14, -1, 0, BARCODE_BOX, "123", 0, 50, 1, 135, 310, 118.9, 0, 300, 0 }, // No zero-width/height rectangles }; int data_size = ARRAY_SIZE(data); @@ -660,7 +675,7 @@ static void test_output_options(int index, int debug) { if (ret < 5) { assert_nonnull(symbol->vector, "i:%d ZBarcode_Buffer_Vector(%d) vector NULL\n", i, data[i].symbology); - if (index != -1) { + if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) { sprintf(symbol->outfile, "test_output_options_%d.svg", i); ZBarcode_Print(symbol, 0); } @@ -669,9 +684,9 @@ static void test_output_options(int index, int debug) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%d) symbol->rows %d != %d\n", i, data[i].symbology, symbol->rows, data[i].expected_rows); assert_equal(symbol->width, data[i].expected_width, "i:%d (%d) symbol->width %d != %d\n", i, data[i].symbology, symbol->width, data[i].expected_width); - assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %f != %f\n", + assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->width, data[i].expected_vector_width); - assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %f != %f\n", + assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->height, data[i].expected_vector_height); if (data[i].expected_set != -1) { @@ -734,7 +749,7 @@ static void test_noncomposite_string_x(int index, int debug) { assert_equal(symbol->width, data[i].expected_width, "i:%d (%s) symbol->width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width); assert_nonnull(symbol->vector->strings, "i:%d ZBarcode_Buffer_Vector(%d) vector->strings NULL\n", i, data[i].symbology); assert_equal(symbol->vector->strings->x, data[i].expected_string_x, - "i:%d (%s) symbol->vector->strings->x %f != %f\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->strings->x, data[i].expected_string_x); + "i:%d (%s) symbol->vector->strings->x %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->strings->x, data[i].expected_string_x); ZBarcode_Delete(symbol); } @@ -760,10 +775,10 @@ static void test_upcean_whitespace_width(int index, int debug) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%2d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { BARCODE_UPCA, "12345678904+12345", 0, 151, 330.0, 5, 16.0 }, - /* 1*/ { BARCODE_UPCA, "12345678904+12345", 11, 151, 330.0 + 4 * 11, 5, 16.0 }, - /* 2*/ { BARCODE_UPCE, "1234567+12", 0, 78, 184.0, 4, 16.0 }, - /* 3*/ { BARCODE_UPCE, "1234567+12", 8, 78, 184.0 + 4 * 8, 4, 16.0 }, // Note: change from previous behaviour where if whitespace < 10 then set to 10 + /* 0*/ { BARCODE_UPCA, "12345678904+12345", 0, 151, 330.0, 5, 15.0 }, + /* 1*/ { BARCODE_UPCA, "12345678904+12345", 11, 151, 330.0 + 4 * 11, 5, 15.0 }, + /* 2*/ { BARCODE_UPCE, "1234567+12", 0, 78, 184.0, 4, 15.0 }, + /* 3*/ { BARCODE_UPCE, "1234567+12", 8, 78, 184.0 + 4 * 8, 4, 15.0 }, // Note: change from previous behaviour where if whitespace < 10 then set to 10 }; int data_size = sizeof(data) / sizeof(struct item); @@ -791,8 +806,13 @@ static void test_upcean_whitespace_width(int index, int debug) { assert_zero(ret, "i:%d ZBarcode_Buffer_Vector(%d) ret %d != 0\n", i, data[i].symbology, ret); assert_nonnull(symbol->vector, "i:%d ZBarcode_Buffer_Vector(%d) vector NULL\n", i, data[i].symbology); + if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) { + sprintf(symbol->outfile, "test_upcean_whitespace_width_%d.svg", i); + ZBarcode_Print(symbol, 0); + } + assert_equal(symbol->width, data[i].expected_width, "i:%d (%s) symbol->width %d != %d\n", i, testUtilBarcodeName(data[i].symbology), symbol->width, data[i].expected_width); - assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %f != %f\n", + assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->vector->width, data[i].expected_vector_width); assert_nonnull(symbol->vector->strings, "i:%d ZBarcode_Buffer_Vector(%d) vector->strings NULL\n", i, data[i].symbology); @@ -801,7 +821,7 @@ static void test_upcean_whitespace_width(int index, int debug) { string = string->next; } assert_equal(string_cnt, data[i].expected_string_cnt, "i:%d (%s) string_cnt %d != %d\n", i, testUtilBarcodeName(data[i].symbology), string_cnt, data[i].expected_string_cnt); - assert_equal(string->y, data[i].expected_string_y, "i:%d (%s) string->y %f != %f\n", i, testUtilBarcodeName(data[i].symbology), string->y, data[i].expected_string_y); + assert_equal(string->y, data[i].expected_string_y, "i:%d (%s) string->y %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), string->y, data[i].expected_string_y); ZBarcode_Delete(symbol); } diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index 002c00a6..208edf35 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -219,17 +219,17 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { } if (func && !ran) { - fprintf(stderr, "testRun: unknown -f func arg\n"); + fprintf(stderr, "testRun: unknown -f func arg '%s'\n", func); } } -char *testUtilBarcodeName(int symbology) { +const char *testUtilBarcodeName(int symbology) { struct item { - char *name; + const char *name; int define; int val; }; - struct item data[] = { + static const struct item data[] = { { "", -1, 0 }, { "BARCODE_CODE11", BARCODE_CODE11, 1 }, { "BARCODE_C25STANDARD", BARCODE_C25STANDARD, 2 }, @@ -377,7 +377,7 @@ char *testUtilBarcodeName(int symbology) { { "BARCODE_ULTRA", BARCODE_ULTRA, 144 }, { "BARCODE_RMQR", BARCODE_RMQR, 145 }, }; - int data_size = sizeof(data) / sizeof(struct item); + static const int data_size = sizeof(data) / sizeof(struct item); if (symbology < 0 || symbology >= data_size) { return ""; @@ -417,18 +417,18 @@ int testUtilSetSymbol(struct zint_symbol *symbol, int symbology, int input_mode, return length; } -char *testUtilErrorName(int error_number) { +const char *testUtilErrorName(int error_number) { struct item { - char *name; + const char *name; int define; int val; }; - struct item data[] = { + static const struct item data[] = { { "0", 0, 0 }, { "", -1, 1 }, { "ZINT_WARN_INVALID_OPTION", ZINT_WARN_INVALID_OPTION, 2 }, { "ZINT_WARN_USES_ECI", ZINT_WARN_USES_ECI, 3 }, - { "", -1, 4 }, + { "ZINT_WARN_NONCOMPLIANT", ZINT_WARN_NONCOMPLIANT, 4 }, { "ZINT_ERROR_TOO_LONG", ZINT_ERROR_TOO_LONG, 5 }, { "ZINT_ERROR_INVALID_DATA", ZINT_ERROR_INVALID_DATA, 6 }, { "ZINT_ERROR_INVALID_CHECK", ZINT_ERROR_INVALID_CHECK, 7 }, @@ -437,7 +437,7 @@ char *testUtilErrorName(int error_number) { { "ZINT_ERROR_FILE_ACCESS", ZINT_ERROR_FILE_ACCESS, 10 }, { "ZINT_ERROR_MEMORY", ZINT_ERROR_MEMORY, 11 }, }; - int data_size = sizeof(data) / sizeof(struct item); + static const int data_size = sizeof(data) / sizeof(struct item); if (error_number < 0 || error_number >= data_size) { return ""; @@ -449,13 +449,13 @@ char *testUtilErrorName(int error_number) { return data[error_number].name; } -char *testUtilInputModeName(int input_mode) { +const char *testUtilInputModeName(int input_mode) { struct item { - char *name; + const char *name; int define; int val; }; - struct item data[] = { + static const struct item data[] = { { "DATA_MODE", DATA_MODE, 0 }, { "UNICODE_MODE", UNICODE_MODE, 1 }, { "GS1_MODE", GS1_MODE, 2 }, @@ -468,7 +468,7 @@ char *testUtilInputModeName(int input_mode) { { "UNICODE_MODE | ESCAPE_MODE", UNICODE_MODE | ESCAPE_MODE, 9 }, { "GS1_MODE | ESCAPE_MODE", GS1_MODE | ESCAPE_MODE, 10 }, }; - int data_size = sizeof(data) / sizeof(struct item); + static const int data_size = sizeof(data) / sizeof(struct item); if (input_mode < 0 || input_mode >= data_size) { return input_mode == -1 ? "-1" : ""; @@ -480,7 +480,7 @@ char *testUtilInputModeName(int input_mode) { return data[input_mode].name; } -char *testUtilOption3Name(int option_3) { +const char *testUtilOption3Name(int option_3) { switch (option_3) { case DM_SQUARE: return "DM_SQUARE"; case DM_DMRE: return "DM_DMRE"; @@ -494,15 +494,15 @@ char *testUtilOption3Name(int option_3) { return option_3 ? "-1" : "0"; } -char *testUtilOutputOptionsName(int output_options) { +const char *testUtilOutputOptionsName(int output_options) { static char buf[512]; struct item { - char *name; + const char *name; int define; int val; }; - struct item data[] = { + static const struct item data[] = { { "BARCODE_NO_ASCII", BARCODE_NO_ASCII, 1 }, { "BARCODE_BIND", BARCODE_BIND, 2 }, { "BARCODE_BOX", BARCODE_BOX, 4 }, @@ -515,7 +515,7 @@ char *testUtilOutputOptionsName(int output_options) { { "GS1_GS_SEPARATOR", GS1_GS_SEPARATOR, 512 }, { "OUT_BUFFER_INTERMEDIATE", OUT_BUFFER_INTERMEDIATE, 1024 }, }; - int data_size = ARRAY_SIZE(data); + static int const data_size = ARRAY_SIZE(data); int set = 0; int i; @@ -1460,9 +1460,9 @@ int testUtilVerifyGhostscript(char *filename, int debug) { return system(buf); } -static char *testUtilBwippName(int symbology, int option_1, int option_2, int option_3, int *linear_row_height, int *gs1_cvt) { +static const char *testUtilBwippName(int symbology, int option_1, int option_2, int option_3, int *linear_row_height, int *gs1_cvt) { struct item { - char *name; + const char *name; int define; int val; int can_option_1; @@ -1471,7 +1471,7 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op int linear_row_height; int gs1_cvt; }; - struct item data[] = { + static const struct item data[] = { { "", -1, 0, 0, 0, 0, 0, 0, }, { "code11", BARCODE_CODE11, 1, 0, 1, 0, 0, 0, }, { "matrix2of5", BARCODE_C25STANDARD, 2, 0, 0, 0, 0, 0, }, @@ -1490,13 +1490,13 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op { "", -1, 15, 0, 0, 0, 0, 0, }, { "gs1-128", BARCODE_GS1_128, 16, 0, 0, 0, 0, 1 /*gs1_cvt*/, }, { "", -1, 17, 0, 0, 0, 0, 0, }, - { "rationalizedCodabar", BARCODE_CODABAR, 18, 0, 0, 0, 0, 0, }, + { "rationalizedCodabar", BARCODE_CODABAR, 18, 0, 1, 0, 0, 0, }, { "", -1, 19, 0, 0, 0, 0, 0, }, { "code128", BARCODE_CODE128, 20, 0, 0, 0, 0, 0, }, { "leitcode", BARCODE_DPLEIT, 21, 0, 0, 0, 0, 0, }, { "identcode", BARCODE_DPIDENT, 22, 0, 0, 0, 0, 0, }, - { "code16k", BARCODE_CODE16K, 23, 0, 0, 0, 0, 0, }, - { "code49", BARCODE_CODE49, 24, 0, 0, 0, 0, 0, }, + { "code16k", BARCODE_CODE16K, 23, 0, 0, 0, 8 /*linear_row_height*/, 0, }, + { "code49", BARCODE_CODE49, 24, 0, 0, 0, 8 /*linear_row_height*/, 0, }, { "code93", BARCODE_CODE93, 25, 0, 0, 0, 0, 0, }, { "", -1, 26, 0, 0, 0, 0, 0, }, { "", -1, 27, 0, 0, 0, 0, 0, }, @@ -1523,7 +1523,7 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op { "", -1, 48, 0, 0, 0, 0, 0, }, { "symbol", BARCODE_FIM, 49, 0, 0, 0, 0, 0, }, { "code39", BARCODE_LOGMARS, 50, 0, 1, 0, 0, 0, }, - { "pharmacode", BARCODE_PHARMA, 51, 0, 0, 0, 0, 0, }, + { "pharmacode", BARCODE_PHARMA, 51, 0, 0, 0, 1 /*linear_row_height*/, 0, }, { "pzn", BARCODE_PZN, 52, 0, 0, 0, 0, 0, }, { "pharmacode2", BARCODE_PHARMA_TWO, 53, 0, 0, 0, 0, 0, }, { "", -1, 54, 0, 0, 0, 0, 0, }, @@ -1546,14 +1546,14 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op { "datamatrix", BARCODE_DATAMATRIX, 71, 0, 0, 0, 0, 0, }, { "ean14", BARCODE_EAN14, 72, 0, 0, 0, 0, 1 /*gs1_cvt*/, }, { "code39", BARCODE_VIN, 73, 0, 0, 0, 0, 0, }, - { "codablockf", BARCODE_CODABLOCKF, 74, 1, 1, 0, 0, 0, }, + { "codablockf", BARCODE_CODABLOCKF, 74, 1, 1, 0, 10 /*linear_row_height*/, 0, }, { "sscc18", BARCODE_NVE18, 75, 0, 0, 0, 0, 1 /*gs1_cvt*/, }, { "japanpost", BARCODE_JAPANPOST, 76, 0, 0, 0, 0, 0, }, { "", BARCODE_KOREAPOST, 77, 0, 0, 0, 0, 0, }, { "", -1, 78, 0, 0, 0, 0, 0, }, { "databarstacked", BARCODE_DBAR_STK, 79, 0, 0, 0, 0, 1 /*gs1_cvt*/, }, - { "databarstackedomni", BARCODE_DBAR_OMNSTK, 80, 0, 0, 0, 0, 1, }, - { "databarexpandedstacked", BARCODE_DBAR_EXPSTK, 81, 0, 1, 0, 0, 1, }, + { "databarstackedomni", BARCODE_DBAR_OMNSTK, 80, 0, 0, 0, 33 /*linear_row_height*/, 1, }, + { "databarexpandedstacked", BARCODE_DBAR_EXPSTK, 81, 0, 1, 0, 34 /*linear_row_height*/, 1, }, { "planet", BARCODE_PLANET, 82, 0, 0, 0, 0, 0, }, { "", -1, 83, 0, 0, 0, 0, 0, }, { "micropdf417", BARCODE_MICROPDF417, 84, 0, 1, 0, 0, 0, }, @@ -1582,7 +1582,7 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op { "", -1, 107, 0, 0, 0, 0, 0, }, { "hibcmicropdf417", BARCODE_HIBC_MICPDF, 108, 0, 1, 0, 0, 0, }, { "", -1, 109, 0, 0, 0, 0, 0, }, - { "hibccodablockf", BARCODE_HIBC_BLOCKF, 110, 1, 1, 0, 0, 0, }, + { "hibccodablockf", BARCODE_HIBC_BLOCKF, 110, 1, 1, 0, 10 /*linear_row_height*/, 0, }, { "", -1, 111, 0, 0, 0, 0, 0, }, { "hibcazteccode", BARCODE_HIBC_AZTEC, 112, 0, 0, 0, 0, 0, }, { "", -1, 113, 0, 0, 0, 0, 0, }, @@ -1593,7 +1593,7 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op { "", -1, 118, 0, 0, 0, 0, 0, }, { "", -1, 119, 0, 0, 0, 0, 0, }, { "", -1, 120, 0, 0, 0, 0, 0, }, - { "mailmark", BARCODE_MAILMARK, 121, 0, 0, 0, 0, 0, }, + { "", BARCODE_MAILMARK, 121, 0, 0, 0, 0, 0, }, /* Note BWIPP mailmark is Data Matrix variant */ { "", -1, 122, 0, 0, 0, 0, 0, }, { "", -1, 123, 0, 0, 0, 0, 0, }, { "", -1, 124, 0, 0, 0, 0, 0, }, @@ -1605,13 +1605,13 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op { "ean13composite", BARCODE_EANX_CC, 130, 1, 1, 0, 72 /*linear_row_height*/, 1 /*gs1_cvt*/, }, { "gs1-128composite", BARCODE_GS1_128_CC, 131, 1, 0, 0, 36, 1, }, { "databaromnicomposite", BARCODE_DBAR_OMN_CC, 132, 1, 0, 0, 33, 1, }, - { "databarlimitedcomposite", BARCODE_DBAR_LTD_CC, 133, 1, 0, 0, 0, 1, }, - { "databarexpandedcomposite", BARCODE_DBAR_EXP_CC, 134, 1, 1, 0, 0, 1, }, + { "databarlimitedcomposite", BARCODE_DBAR_LTD_CC, 133, 1, 0, 0, 10 /*linear_row_height*/, 1, }, + { "databarexpandedcomposite", BARCODE_DBAR_EXP_CC, 134, 1, 1, 0, 34 /*linear_row_height*/, 1, }, { "upcacomposite", BARCODE_UPCA_CC, 135, 1, 1, 0, 72, 1, }, { "upcecomposite", BARCODE_UPCE_CC, 136, 1, 1, 0, 72, 1, }, { "databarstackedcomposite", BARCODE_DBAR_STK_CC, 137, 1, 0, 0, 0, 1, }, - { "databarstackedomnicomposite", BARCODE_DBAR_OMNSTK_CC, 138, 1, 0, 0, 0, 1, }, - { "databarexpandedstackedcomposite", BARCODE_DBAR_EXPSTK_CC, 139, 1, 1, 0, 0, 1, }, + { "databarstackedomnicomposite", BARCODE_DBAR_OMNSTK_CC, 138, 1, 0, 0, 33 /*linear_row_height*/, 1, }, + { "databarexpandedstackedcomposite", BARCODE_DBAR_EXPSTK_CC, 139, 1, 1, 0, 34 /*linear_row_height*/, 1, }, { "channelcode", BARCODE_CHANNEL, 140, 0, 0, 0, 0, 0, }, { "codeone", BARCODE_CODEONE, 141, 0, 0, 0, 0, 0, }, { "", BARCODE_GRIDMATRIX, 142, 0, 0, 0, 0, 0, }, @@ -1619,7 +1619,7 @@ static char *testUtilBwippName(int symbology, int option_1, int option_2, int op { "ultracode", BARCODE_ULTRA, 144, 0, 0, 0, 0, 0, }, { "rectangularmicroqrcode", BARCODE_RMQR, 145, 0, 0, 0, 0, 0, }, }; - int data_size = ARRAY_SIZE(data); + static const int data_size = ARRAY_SIZE(data); if (symbology < 0 || symbology >= data_size) { return NULL; @@ -1736,7 +1736,7 @@ static void testUtilISBNHyphenate(char *bwipp_data, int addon_posn) { #define GS_INITIAL_LEN 35 /* Length of cmd up to -q */ -int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size) { +int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size) { const char *cmd_fmt = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s' ../tools/bwipp_dump.ps"; const char *cmd_opts_fmt = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s' -so='%s' ../tools/bwipp_dump.ps"; const char *cmd_fmt2 = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%.2043s' -sd2='%s' ../tools/bwipp_dump.ps"; // If data > 2K @@ -1748,7 +1748,7 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, int max_data_len = 4 + primary_len + 1 + 1 + data_len * 4 + 32; /* 4 AI prefix + primary + '|' + leading zero + escaped data + fudge */ char cmd[max_data_len + 1024]; - char *bwipp_barcode = NULL; + const char *bwipp_barcode = NULL; char *bwipp_opts = NULL; char bwipp_data[max_data_len + 1]; char bwipp_opts_buf[512]; @@ -1764,6 +1764,7 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, int r, h; int parse; + int composite = is_composite(symbology); int upcean = is_extendable(symbology); int upca = symbology == BARCODE_UPCA || symbology == BARCODE_UPCA_CHK || symbology == BARCODE_UPCA_CC; int addon_posn; @@ -1772,20 +1773,25 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, bwipp_barcode = testUtilBwippName(symbology, option_1, option_2, option_3, &linear_row_height, &gs1_cvt); if (!bwipp_barcode) { - fprintf(stderr, "testUtilBwipp: no mapping for %s, option_1 %d, option_2 %d, option_3 %d\n", testUtilBarcodeName(symbology), option_1, option_2, option_3); + fprintf(stderr, "i:%d testUtilBwipp: no mapping for %s, option_1 %d, option_2 %d, option_3 %d\n", index, testUtilBarcodeName(symbology), option_1, option_2, option_3); return -1; } for (r = 0; r < symbol->rows; r++) { - bwipp_row_height[r] = symbol->row_height[r]; + bwipp_row_height[r] = symbol->row_height[r] ? symbol->row_height[r] : linear_row_height; + //fprintf(stderr, "bwipp_row_height[%d] %d, symbol->row_height[%d] %d\n", r, bwipp_row_height[r], r, symbol->row_height[r]); } - if (linear_row_height) { - bwipp_row_height[symbol->rows - 1] = linear_row_height; + if (symbology == BARCODE_DBAR_EXP) { + bwipp_row_height[symbol->rows - 1] = 1; + } else if (symbology == BARCODE_DBAR_OMN_CC) { + bwipp_row_height[symbol->rows - 1] = 33; + } else if (symbology == BARCODE_GS1_128_CC) { + bwipp_row_height[symbol->rows - 1] = 36; } if (is_composite(symbology)) { if (!primary) { - fprintf(stderr, "testUtilBwipp: no primary data given %s\n", testUtilBarcodeName(symbology)); + fprintf(stderr, "i:%d testUtilBwipp: no primary data given %s\n", index, testUtilBarcodeName(symbology)); return -1; } if (*primary != '[' && !upcean) { @@ -1804,6 +1810,7 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%saddongap=%d", strlen(bwipp_opts_buf) ? " " : "", option_2 > 0 ? option_2 : upca ? 9 : 7); bwipp_opts = bwipp_opts_buf; } + bwipp_row_height[symbol->rows - 1] = 72; } if (option_1 > 0) { @@ -1873,7 +1880,7 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%scolumns=%d", strlen(bwipp_opts_buf) ? " " : "", (symbol->width - 57) / 11); } bwipp_opts = bwipp_opts_buf; - } else if (symbology == BARCODE_CODE11 || symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39 || symbology == BARCODE_LOGMARS) { + } else if (symbology == BARCODE_CODE11 || symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39 || symbology == BARCODE_LOGMARS || symbology == BARCODE_CODABAR) { if (option_2 > 0) { if (option_2 == 1) { sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%sincludecheck", strlen(bwipp_opts_buf) ? " " : ""); @@ -1891,12 +1898,49 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%scolumns=%d", strlen(bwipp_opts_buf) ? " " : "", option_2); bwipp_opts = bwipp_opts_buf; } + } else if (symbology == BARCODE_POSTNET || symbology == BARCODE_PLANET || symbology == BARCODE_RM4SCC || symbology == BARCODE_JAPANPOST || symbology == BARCODE_KIX + || symbology == BARCODE_DAFT || symbology == BARCODE_USPS_IMAIL || symbology == BARCODE_AUSPOST || symbology == BARCODE_PHARMA_TWO) { + for (r = 0; r < symbol->rows; r++) bwipp_row_height[r] = 1; /* Zap */ + if (symbology == BARCODE_KIX) { + to_upper(bwipp_data); + } else if (symbology == BARCODE_USPS_IMAIL) { + char *dash = strchr(bwipp_data, '-'); + if (dash) { + memmove(dash, dash + 1, strlen(dash)); + } + } else if (symbology == BARCODE_AUSPOST) { + const char *prefix; + if (data_len == 8) { + prefix = "11"; + } else if (data_len == 13 || data_len == 16) { + prefix = "59"; + if (data_len == 16) { + sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%scustinfoenc=numeric", strlen(bwipp_opts_buf) ? " " : ""); + bwipp_opts = bwipp_opts_buf; + } + } else { + prefix = "62"; + if (data_len == 23) { + sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%scustinfoenc=numeric", strlen(bwipp_opts_buf) ? " " : ""); + bwipp_opts = bwipp_opts_buf; + } + } + memmove(bwipp_data + 2, bwipp_data, data_len + 1); + memmove(bwipp_data, prefix, 2); + } + } else if (symbology == BARCODE_FIM) { + strcpy(bwipp_data, "fima"); + bwipp_data[3] = data[0] - 'A' + 'a'; + } else if (symbology == BARCODE_CODE16K || symbology == BARCODE_CODE49) { + for (r = 0; r < symbol->rows; r++) bwipp_row_height[r] = 8; /* Change from 10 */ + sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%ssepheight=0", strlen(bwipp_opts_buf) ? " " : ""); + bwipp_opts = bwipp_opts_buf; } } } if ((option_1 != -1 || option_2 != -1 || option_3 != -1) && !bwipp_opts) { - fprintf(stderr, "testUtilBwipp: no mapping option_1 %d, option_2 %d, option_3 %d for symbology %s\n", option_1, option_2, option_3, testUtilBarcodeName(symbology)); + fprintf(stderr, "i:%d testUtilBwipp: no mapping option_1 %d, option_2 %d, option_3 %d for symbology %s\n", index, option_1, option_2, option_3, testUtilBarcodeName(symbology)); return -1; } @@ -1921,7 +1965,8 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); memcpy(cmd + GS_INITIAL_LEN, adj, sizeof(adj)); } - if (symbology == BARCODE_CODE11 || symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39 || symbology == BARCODE_PZN || symbology == BARCODE_VIN) { + if (symbology == BARCODE_CODE11 || symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39 || symbology == BARCODE_CODABAR + || symbology == BARCODE_PHARMA || symbology == BARCODE_PZN || symbology == BARCODE_CODE32 || symbology == BARCODE_VIN) { /* Ratio 3 width bar/space -> 2 width */ char adj[8] = " -sr=0.6"; memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); @@ -1933,9 +1978,16 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); memcpy(cmd + GS_INITIAL_LEN, adj, sizeof(adj)); } + if (symbology == BARCODE_FIM) { + /* Ratio 2 width bar/space -> 1 width */ + char adj[8] = " -sr=0.5"; + memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); + memcpy(cmd + GS_INITIAL_LEN, adj, sizeof(adj)); + } if (symbology == BARCODE_CODE11 || symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39 || symbology == BARCODE_HIBC_39 - || symbology == BARCODE_LOGMARS || symbology == BARCODE_PZN || symbology == BARCODE_VIN - || symbology == BARCODE_C25INTER || symbology == BARCODE_DPLEIT || symbology == BARCODE_DPIDENT || symbology == BARCODE_ITF14) { + || symbology == BARCODE_LOGMARS || symbology == BARCODE_PHARMA || symbology == BARCODE_PZN || symbology == BARCODE_CODE32 || symbology == BARCODE_VIN + || symbology == BARCODE_C25INTER || symbology == BARCODE_DPLEIT || symbology == BARCODE_DPIDENT || symbology == BARCODE_ITF14 + || symbology == BARCODE_PHARMA_TWO) { /* End sbs loop on bar */ char adj[6] = " -selb"; memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); @@ -1947,26 +1999,38 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); memcpy(cmd + GS_INITIAL_LEN, adj, sizeof(adj)); } + if (symbology == BARCODE_POSTNET || symbology == BARCODE_PLANET || symbology == BARCODE_RM4SCC || symbology == BARCODE_JAPANPOST || symbology == BARCODE_KIX + || symbology == BARCODE_DAFT || symbology == BARCODE_USPS_IMAIL || symbology == BARCODE_AUSPOST || symbology == BARCODE_PHARMA_TWO) { + /* Emulate rows with BWIPP heights. */ + char adj[5] = " -shs"; + memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); + memcpy(cmd + GS_INITIAL_LEN, adj, sizeof(adj)); + } + if (symbology == BARCODE_CODE16K || symbology == BARCODE_CODE49) { + char adj[15] = " -sxs=10 -sxe=1"; /* Strip first 10 and last zero */ + memmove(cmd + GS_INITIAL_LEN + sizeof(adj), cmd + GS_INITIAL_LEN, strlen(cmd) + 1 - GS_INITIAL_LEN); + memcpy(cmd + GS_INITIAL_LEN, adj, sizeof(adj)); + } if (symbol->debug & ZINT_DEBUG_TEST_PRINT) { - printf("testUtilBwipp: cmd %s\n", cmd); + printf("i:%d testUtilBwipp: cmd %s\n", index, cmd); } fp = popen(cmd, "r"); if (!fp) { - fprintf(stderr, "testUtilBwipp: failed to run '%s'\n", cmd); + fprintf(stderr, "i:%d testUtilBwipp: failed to run '%s'\n", index, cmd); return -1; } for (r = 0; r < symbol->rows; r++) { if (b + symbol->width > be) { - fprintf(stderr, "testUtilBwipp: row %d, width %d, row width iteration overrun (%s)\n", r, symbol->width, cmd); + fprintf(stderr, "i:%d testUtilBwipp: row %d, width %d, row width iteration overrun (%s)\n", index, r, symbol->width, cmd); pclose(fp); return -1; } cnt = fread(b, 1, symbol->width, fp); if (cnt != symbol->width) { - fprintf(stderr, "testUtilBwipp: failed to read symbol->width %d bytes, cnt %d (%s)\n", symbol->width, cnt, cmd); + fprintf(stderr, "i:%d testUtilBwipp: failed to read symbol->width %d bytes, cnt %d (%s)\n", index, symbol->width, cnt, cmd); pclose(fp); return -1; } @@ -1974,7 +2038,8 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, for (h = bwipp_row_height[r]; h > 1; h--) { /* Ignore row copies if any */ cnt = fread(b, 1, symbol->width, fp); if (cnt != symbol->width) { - fprintf(stderr, "testUtilBwipp: failed to read/ignore symbol->width %d bytes, cnt %d (%s)\n", symbol->width, cnt, cmd); + fprintf(stderr, "i:%d testUtilBwipp: failed to read/ignore symbol->width %d bytes, cnt %d, h %d, bwipp_row_height[%d] %d, symbol->row_height[%d] %d (%s)\n", + index, symbol->width, cnt, h, r, bwipp_row_height[r], r, symbol->row_height[r], cmd); pclose(fp); return -1; } @@ -1983,7 +2048,7 @@ int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, *b = '\0'; if (fgetc(fp) != EOF) { - fprintf(stderr, "testUtilBwipp: failed to read full stream (%s)\n", cmd); + fprintf(stderr, "i:%d testUtilBwipp: failed to read full stream (%s)\n", index, cmd); pclose(fp); return -1; } diff --git a/backend/tests/testcommon.h b/backend/tests/testcommon.h index 75678f5b..505680c1 100644 --- a/backend/tests/testcommon.h +++ b/backend/tests/testcommon.h @@ -77,11 +77,11 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size); extern void vector_free(struct zint_symbol *symbol); /* Free vector structures */ int testUtilSetSymbol(struct zint_symbol *symbol, int symbology, int input_mode, int eci, int option_1, int option_2, int option_3, int output_options, char *data, int length, int debug); -char *testUtilBarcodeName(int symbology); -char *testUtilErrorName(int error_number); -char *testUtilInputModeName(int input_mode); -char *testUtilOption3Name(int option_3); -char *testUtilOutputOptionsName(int output_options); +const char *testUtilBarcodeName(int symbology); +const char *testUtilErrorName(int error_number); +const char *testUtilInputModeName(int input_mode); +const char *testUtilOption3Name(int option_3); +const char *testUtilOutputOptionsName(int output_options); int testUtilDAFTConvert(const struct zint_symbol *symbol, char *buffer, int buffer_size); int testUtilIsValidUTF8(const unsigned char str[], const size_t length); char *testUtilEscape(char *buffer, int length, char *escaped, int escaped_size); @@ -111,7 +111,7 @@ int testUtilVerifyInkscape(char *filename, int debug); int testUtilHaveGhostscript(); int testUtilVerifyGhostscript(char *filename, int debug); int testUtilCanBwipp(int symbology, int option_1, int option_2, int option_3, int debug); -int testUtilBwipp(const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size); +int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size); int testUtilBwippCmp(const struct zint_symbol *symbol, char *msg, const char *bwipp_buf, const char *expected); int testUtilBwippCmpRow(const struct zint_symbol *symbol, int row, char *msg, const char *bwipp_buf, const char *expected); diff --git a/backend/tests/tools/bwipp_dump-barcode.ps.diff b/backend/tests/tools/bwipp_dump-barcode.ps.diff index 982b46d6..fe2a392c 100644 --- a/backend/tests/tools/bwipp_dump-barcode.ps.diff +++ b/backend/tests/tools/bwipp_dump-barcode.ps.diff @@ -1,5 +1,5 @@ ---- ../../../../postscriptbarcode/build/monolithic/barcode.ps 2020-09-11 07:39:13.775630088 +0100 -+++ ../tools/bwipp_dump.ps 2020-09-11 07:57:38.915196229 +0100 +--- ../../../../postscriptbarcode/build/monolithic/barcode.ps 2020-09-18 02:41:06.166708679 +0100 ++++ ../tools/bwipp_dump.ps 2020-09-18 03:56:06.144846176 +0100 @@ -29,6 +29,8 @@ % CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS % IN THE SOFTWARE. @@ -9,7 +9,7 @@ % --BEGIN TEMPLATE-- % --BEGIN RESOURCE preamble-- -@@ -25344,34 +25346,80 @@ +@@ -25403,34 +25405,80 @@ pop } ifelse @@ -109,7 +109,7 @@ end -@@ -25430,7 +25478,7 @@ +@@ -25489,7 +25537,7 @@ pop } ifelse @@ -118,7 +118,7 @@ % Get the result of encoding with ean8 and gs1-cc options (lintype) (ean8) put -@@ -25438,29 +25486,75 @@ +@@ -25497,29 +25545,75 @@ options (dontdraw) true put % Plot the linear part @@ -214,7 +214,7 @@ end -@@ -25519,34 +25613,80 @@ +@@ -25578,34 +25672,80 @@ pop } ifelse @@ -314,7 +314,7 @@ end -@@ -25620,34 +25760,80 @@ +@@ -25679,34 +25819,80 @@ /opt options >> def @@ -414,7 +414,7 @@ end -@@ -25706,7 +25892,7 @@ +@@ -25765,7 +25951,7 @@ pop } ifelse @@ -423,7 +423,7 @@ options (lintype) (databaromni) put options (linkage) true put -@@ -25717,7 +25903,7 @@ +@@ -25776,7 +25962,7 @@ linear options //databaromni exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -432,7 +432,7 @@ % Plot the separator /sepfinder { -@@ -25748,20 +25934,66 @@ +@@ -25807,20 +25993,66 @@ sep 0 [0 0 0] putinterval sep sep length 4 sub [0 0 0 0] putinterval 18 sepfinder 64 sepfinder @@ -511,7 +511,7 @@ end -@@ -25819,7 +26051,7 @@ +@@ -25878,7 +26110,7 @@ pop } ifelse @@ -520,7 +520,7 @@ options (lintype) (databarstacked) put options (linkage) true put -@@ -25830,7 +26062,7 @@ +@@ -25889,7 +26121,7 @@ linear options //databarstacked exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -529,7 +529,7 @@ % Plot the separator /sepfinder { -@@ -25858,20 +26090,52 @@ +@@ -25917,20 +26149,52 @@ sep 0 [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval 18 sepfinder @@ -594,7 +594,7 @@ end -@@ -25929,7 +26193,7 @@ +@@ -25988,7 +26252,7 @@ pop } ifelse @@ -603,7 +603,7 @@ options (lintype) (databarstackedomni) put options (linkage) true put -@@ -25940,7 +26204,7 @@ +@@ -25999,7 +26263,7 @@ linear options //databarstackedomni exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -612,7 +612,7 @@ % Plot the separator /sepfinder { -@@ -25968,20 +26232,52 @@ +@@ -26027,20 +26291,52 @@ sep 0 [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval 18 sepfinder @@ -677,7 +677,7 @@ end -@@ -26154,7 +26450,7 @@ +@@ -26213,7 +26509,7 @@ pop } ifelse @@ -686,7 +686,7 @@ options (lintype) (databarlimited) put options (linkage) true put -@@ -26165,7 +26461,7 @@ +@@ -26224,7 +26520,7 @@ linear options //databarlimited exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -695,7 +695,7 @@ % Plot the separator mark -@@ -26173,22 +26469,68 @@ +@@ -26232,22 +26528,68 @@ counttomark 1 sub array astore /sep exch def pop pop sep 0 [0 0 0] putinterval sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces @@ -778,7 +778,7 @@ end -@@ -26247,7 +26589,7 @@ +@@ -26306,7 +26648,7 @@ pop } ifelse @@ -787,7 +787,7 @@ options (lintype) (databarexpanded) put options (linkage) true put -@@ -26258,7 +26600,7 @@ +@@ -26317,7 +26659,7 @@ linear options //databarexpanded exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -796,7 +796,7 @@ % Plot the separator /sepfinder { -@@ -26287,20 +26629,60 @@ +@@ -26346,20 +26688,60 @@ 18 98 bot length 13 sub {} for 69 98 bot length 13 sub {} for ] {sepfinder} forall @@ -869,7 +869,7 @@ end -@@ -26358,7 +26740,7 @@ +@@ -26417,7 +26799,7 @@ pop } ifelse @@ -878,7 +878,7 @@ options (lintype) (databarexpandedstacked) put options (linkage) true put -@@ -26369,7 +26751,7 @@ +@@ -26428,7 +26810,7 @@ linear options //databarexpandedstacked exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -887,7 +887,7 @@ % Plot the separator /sepfinder { -@@ -26389,27 +26771,55 @@ +@@ -26448,27 +26830,55 @@ } for } bind def /sep [ bot {1 exch sub} forall ] def @@ -957,7 +957,7 @@ end -@@ -26468,7 +26878,7 @@ +@@ -26527,7 +26937,7 @@ pop } ifelse @@ -966,7 +966,7 @@ options (inkspread) (0) put options (dontdraw) true put -@@ -26495,35 +26905,87 @@ +@@ -26554,35 +26964,87 @@ linear << options {} forall >> //gs1-128 exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -1068,7 +1068,7 @@ end -@@ -27821,3 +28283,124 @@ +@@ -27880,3 +28342,176 @@ % --END ENCODER hibcazteccode-- % --END TEMPLATE-- @@ -1131,13 +1131,16 @@ +ret /pixs known { + /pixs ret /pixs get def + -+ n ret /pixx known and { % If newlines requested and have row width ++ /xs systemdict /xs known { systemdict /xs get cvi } { 0 } ifelse def ++ /xe systemdict /xe known { systemdict /xe get cvi } { 0 } ifelse def ++ ++ n xs 0 ne or xe 0 ne or ret /pixx known and { % If newlines or start/end indexes requested and have row width + /pixx ret /pixx get def -+ 0 pixx pixs length 1 sub { % For i = 0; i < pixs length; i += pixx -+ pixs exch pixx getinterval { % For j = i; j < i + pixx; j++ ++ xs pixx pixs length 1 sub xe sub { % For i = xs; i < pixs length - xe; i += pixx ++ pixs exch pixx xs sub xe sub getinterval { % For j = i; j < i + pixx - xs -xe; j++ + 1 string cvs print + } forall -+ (\n) print ++ n { (\n) print } if + } for + } { % Else dump the whole thing, no newlines + pixs { 1 string cvs print } forall @@ -1172,17 +1175,66 @@ + sbs length 1 sub + } ifelse def + -+ 0 1 limit { -+ /i exch def -+ p not { % If not preprocessed ++ % If should use bhs/bbs to emulate rows (DAFT/pharmacode2) (hacky) ++ /nosbs false def ++ /minh 999999 def ++ /midh 0 def ++ /maxh 0 def ++ /maxb 0 def ++ systemdict /hs known ret /bhs known and ret /bbs known and { ++ /bhs ret /bhs get def ++ /bbs ret /bbs get def ++ 0 1 bhs length 1 sub { ++ /i exch def ++ /h bhs i get def ++ /b bbs i get def ++ h minh lt { /minh h def } if ++ h maxh gt { /maxh h def } if ++ h minh ne h maxh ne and { /midh h def } if ++ b maxb gt { /maxb b def } if ++ } for ++ 0 1 limit { ++ /i exch def + i 2 mod 0 eq { % i is even -+ sbs i get f cvi { (1) print } repeat ++ /h bhs i 2 idiv get def ++ /b bbs i 2 idiv get def ++ h maxh eq h midh eq b maxb eq and or maxb 0 ne b maxb eq and midh 0 eq and h minh eq and or { (1) } { (0) } ifelse print % Yeah, me too + } { -+ sbs i get f cvi { (0) print } repeat ++ (0) print + } ifelse -+ } if -+ } for -+ n { (\n) print } if ++ } for ++ n { (\n) print } if ++ maxb 0 ne midh 0 eq and maxb 0 eq minh maxh eq and or { /nosbs true def } if % No tracker (pharmacode2) ++ } if ++ ++ % Process sbs ++ nosbs not { ++ 0 1 limit { ++ /i exch def ++ p not { % If not preprocessed ++ i 2 mod 0 eq { % i is even ++ sbs i get f cvi { (1) print } repeat ++ } { ++ sbs i get f cvi { (0) print } repeat ++ } ifelse ++ } if ++ } for ++ n { (\n) print } if ++ } if ++ ++ % Third row if DAFT, second row if no tracker (pharmacode2) ++ maxb 0 ne midh 0 ne or minh maxh eq or { ++ 0 1 limit { ++ /i exch def ++ i 2 mod 0 eq { % i is even ++ /b bbs i 2 idiv get def ++ b 0 eq { (1) } { (0) } ifelse print ++ } { ++ (0) print ++ } ifelse ++ } for ++ n { (\n) print } if ++ } if + } if +} ifelse + diff --git a/backend/tests/tools/bwipp_dump.ps.tar.xz b/backend/tests/tools/bwipp_dump.ps.tar.xz index 0bc4a583ed2860c71c57c35ac8e63e8837fc55f3..e6df65e22912cac3ad122c288a1001f900db2f8b 100644 GIT binary patch literal 116944 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%0Ar^Nc$aCW++l2ve9=@ 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 literal 116196 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 +# vim: set ts=4 sw=4 et : +set -e + +function run_bwipp_test() { + if [ -z "$2" ]; then + echo -e "\n$1" + ./$1 -d $(expr 128 + 16 + 32) || exit 1 + else + echo -e "\n$1 -f $2" + ./$1 -f "$2" -d $(expr 128 + 16 + 32) || exit 1 + fi +} + +run_bwipp_test "test_2of5" "encode" +run_bwipp_test "test_auspost" "encode" +run_bwipp_test "test_channel" "encode" +run_bwipp_test "test_codablock" "encode" +run_bwipp_test "test_code" "encode" +run_bwipp_test "test_code1" "encode" +run_bwipp_test "test_code128" "encode" +run_bwipp_test "test_code16k" "encode" +run_bwipp_test "test_code49" "encode" +run_bwipp_test "test_composite" +run_bwipp_test "test_gs1" "gs1_reduce" +run_bwipp_test "test_imail" "encode" +run_bwipp_test "test_medical" "encode" +run_bwipp_test "test_pdf417" "encode" +run_bwipp_test "test_postal" "encode" +run_bwipp_test "test_rss" +run_bwipp_test "test_telepen" "encode" +run_bwipp_test "test_upcean" "encode" diff --git a/backend/upcean.c b/backend/upcean.c index b8b5c29f..1aa27a56 100644 --- a/backend/upcean.c +++ b/backend/upcean.c @@ -126,6 +126,7 @@ static void upca_draw(char source[], char dest[]) { static int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) { int length; char gtin[15]; + int error_number = 0; strcpy(gtin, (char*) source); length = strlen(gtin); @@ -136,6 +137,9 @@ static int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) } else { gtin[length - 1] = '\0'; if (source[length - 1] != upc_check(gtin)) { + if (symbol->debug & ZINT_DEBUG_PRINT) { + printf("UPC-A: %s, Check digit: %c\n", gtin, upc_check(gtin)); + } strcpy(symbol->errtxt, "270: Invalid check digit"); return ZINT_ERROR_INVALID_CHECK; } @@ -143,7 +147,8 @@ static int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) } upca_draw(gtin, dest); ustrcpy(symbol->text, (unsigned char*) gtin); - return 0; + + return error_number; } /* UPC E is a zero-compressed version of UPC A */ @@ -151,6 +156,7 @@ static int upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) unsigned int i, num_system; char emode, equivalent[12], check_digit, parity[8], temp[9]; char hrt[9]; + int error_number = 0; /* Two number systems can be used - system 0 and system 1 */ if (symbol->symbology != BARCODE_UPCE_CHK) { @@ -301,7 +307,8 @@ static int upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) } } ustrcpy(symbol->text, (unsigned char*) hrt); - return 0; + + return error_number; } /* EAN-2 and EAN-5 add-on codes */ @@ -392,6 +399,7 @@ static int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[] unsigned int length, i, half_way; char parity[6]; char gtin[15]; + int error_number = 0; strcpy(parity, ""); strcpy(gtin, (char*) source); @@ -436,9 +444,9 @@ static int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[] /* stop character */ strcat(dest, "111"); - ustrcpy(symbol->text, (unsigned char*) gtin); - return 0; + + return error_number; } /* Make an EAN-8 barcode when we haven't been given the check digit */ @@ -446,6 +454,7 @@ static int 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]; + int error_number = 0; strcpy(gtin, (char*) source); length = strlen(gtin); @@ -464,7 +473,7 @@ static int ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) upca_draw(gtin, dest); ustrcpy(symbol->text, (unsigned char*) gtin); - return 0; + return error_number; } /* For ISBN(13) only */ @@ -837,12 +846,12 @@ INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_le if ((ustrlen(first_part) == 11) || (ustrlen(first_part) == 12)) { error_number = upca(symbol, first_part, (char*) dest); } else { - strcpy(symbol->errtxt, "288: Input wrong length (C6I)"); + strcpy(symbol->errtxt, "288: Input wrong length"); return ZINT_ERROR_TOO_LONG; } break; case BARCODE_UPCA_CC: - if (ustrlen(first_part) == 11) { + if (ustrlen(first_part) == 11 || ustrlen(first_part) == 12) { set_module(symbol, symbol->rows, 1); set_module(symbol, symbol->rows, 95); set_module(symbol, symbol->rows + 1, 0); @@ -891,7 +900,7 @@ INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_le break; } - if (error_number > 4) { + if (error_number >= ZINT_ERROR) { return error_number; } @@ -931,5 +940,5 @@ INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_le break; } - return 0; + return error_number; } diff --git a/backend/vector.c b/backend/vector.c index 7cea0c6a..a027e045 100644 --- a/backend/vector.c +++ b/backend/vector.c @@ -42,7 +42,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol); INTERNAL int svg_plot(struct zint_symbol *symbol); -INTERNAL int emf_plot(struct zint_symbol *symbol); +INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle); static struct zint_vector_rect *vector_plot_create_rect(float x, float y, float width, float height) { struct zint_vector_rect *rect; @@ -122,7 +122,7 @@ static int vector_plot_add_circle(struct zint_symbol *symbol, struct zint_vector } static int vector_plot_add_string(struct zint_symbol *symbol, - unsigned char *text, float x, float y, float fsize, float width, + unsigned char *text, float x, float y, float fsize, float width, int halign, struct zint_vector_string **last_string) { struct zint_vector_string *string; @@ -134,6 +134,7 @@ static int vector_plot_add_string(struct zint_symbol *symbol, string->fsize = fsize; string->length = ustrlen(text); string->rotation = 0; + string->halign = halign; string->text = (unsigned char*) malloc(sizeof (unsigned char) * (ustrlen(text) + 1)); ustrcpy(string->text, text); @@ -381,23 +382,31 @@ static void vector_reduce_rectangles(struct zint_symbol *symbol) { INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type) { int error_number; - float large_bar_height; - int textdone; - int main_width, comp_offset, addon_gap; + int large_bar_height; + int textdone = 0; + int main_width; + int comp_offset = 0; unsigned char addon[6]; + int addon_gap; + float addon_text_posn = 0.0f; + float addon_bar_height; int xoffset, yoffset, roffset, boffset; - float addon_text_posn; - int textoffset; - int default_text_posn; + float textoffset; + float default_text_posn; float row_height, row_posn; int upceanflag = 0; int addon_latch = 0; unsigned char textpart1[5], textpart2[7], textpart3[7], textpart4[2]; - int textpos; - int hide_text = 0; + float textpos; + int hide_text; int i, r; + int text_height; /* Font pixel size (so whole integers) */ + int upcae_outside_text_height; /* UPC-A/E outside digits font size */ + float digit_ascent_factor = 0.25f; /* Assuming digit ascent roughly 25% less than font size */ + float text_gap; /* Gap between barcode and text */ + float dot_overspill = 0.0f; + float dotoffset = 0.0f; - float text_height; int rect_count, last_row_start; int this_row; @@ -425,10 +434,8 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ vector->strings = NULL; large_bar_height = output_large_bar_height(symbol); - textdone = 0; main_width = symbol->width; - comp_offset = 0; if (is_extendable(symbol->symbology)) { upceanflag = output_process_upcean(symbol, &main_width, &comp_offset, addon, &addon_gap); @@ -436,51 +443,57 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ output_set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset); - addon_text_posn = 0.0f; hide_text = ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)); - if (hide_text) { - text_height = 0.0f; - textoffset = upceanflag ? 9.0f : 0.0f; + /* Note font sizes scaled by 2 so really twice these values */ + if (upceanflag) { + /* Note BOLD_TEXT ignored for UPCEAN by svg/emf/ps/qzint */ + text_height = symbol->output_options & SMALL_TEXT ? 7 : 10; + upcae_outside_text_height = symbol->output_options & SMALL_TEXT ? 6 : 7; + text_gap = -text_height * digit_ascent_factor + 0.5f; /* Negative to move close to barcode (less digit ascent, then add 0.5X) */ } else { - text_height = upceanflag ? 11.0f : 9.0f; - textoffset = 9.0f; + text_height = symbol->output_options & SMALL_TEXT ? 6 : 7; + text_gap = text_height * 0.1f; } - if (symbol->output_options & SMALL_TEXT) - text_height *= 0.8f; - vector->width = ceil(symbol->width + (xoffset + roffset)); - vector->height = ceil(symbol->height + textoffset + (yoffset + boffset)); + if (hide_text) { + textoffset = upceanflag && upceanflag != 2 && upceanflag != 5 ? 5.0f : 0.0f; /* Allow for guard bars */ + } else { + if (upceanflag) { + textoffset = text_height + 0.2f + text_gap; /* Add fudge for anti-aliasing of digits */ + } else { + textoffset = text_height * 1.25f + text_gap; /* Allow +25% for characters descending below baseline */ + } + } + + if ((symbol->symbology != BARCODE_MAXICODE) && (symbol->output_options & BARCODE_DOTTY_MODE)) { + dot_overspill = symbol->dot_size - 1.0f; /* Allow for exceeding 1X */ + if (dot_overspill < 0.0f) { + dot_overspill = 0.0f; + } else { + dotoffset = 0.1f; /* Fudge for anti-aliasing */ + } + } + + vector->width = symbol->width + dotoffset * 2.0f + dot_overspill + (xoffset + roffset); + vector->height = symbol->height + textoffset + dotoffset * 2.0f + dot_overspill + (yoffset + boffset); if (symbol->border_width > 0 && ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND))) { - default_text_posn = symbol->height + textoffset + symbol->border_width + symbol->border_width; + default_text_posn = symbol->height + text_height + text_gap + symbol->border_width + symbol->border_width; } else { - default_text_posn = symbol->height + textoffset; + default_text_posn = symbol->height + text_height + text_gap; } - row_height = 0.0f; rect_count = 0; last_row_start = 0; // Plot rectangles - most symbols created here if ((symbol->symbology != BARCODE_MAXICODE) && ((symbol->output_options & BARCODE_DOTTY_MODE) == 0)) { + row_posn = yoffset; for (r = 0; r < symbol->rows; r++) { this_row = r; last_row_start = rect_count; - if (symbol->row_height[this_row] == 0) { - row_height = large_bar_height; - } else { - row_height = symbol->row_height[this_row]; - } - row_posn = 0.0f; - for (i = 0; i < r; i++) { - if (symbol->row_height[i] == 0) { - row_posn += large_bar_height; - } else { - row_posn += symbol->row_height[i]; - } - } - row_posn += yoffset; + row_height = symbol->row_height[this_row] ? symbol->row_height[this_row] : large_bar_height; i = 0; @@ -490,7 +503,17 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ block_width++; } while (i + block_width < symbol->width && 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)) { - addon_text_posn = row_posn + 8.0f; + addon_text_posn = row_posn + text_height - text_height * digit_ascent_factor; + if (addon_text_posn < 0.0f) { + addon_text_posn = 0.0f; + } + addon_bar_height = row_height - (addon_text_posn - row_posn) + text_gap; + if (upceanflag != 12 && upceanflag != 6) { /* UPC-A/E don't descend */ + addon_bar_height += 5.0f; + } + if (addon_bar_height < 0.5f) { + addon_bar_height = 0.5f; + } addon_latch = 1; } if (module_is_set(symbol, this_row, i)) { @@ -501,11 +524,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ rectangle->colour = module_is_set(symbol, this_row, i); } } else { - if (upceanflag == 12 || upceanflag == 6) { /* UPC-A/E don't descend */ - rectangle = vector_plot_create_rect(i + xoffset, row_posn + 10.0f, block_width, row_height > 10.0f ? row_height - 10.0f : 1.0f); - } else { - rectangle = vector_plot_create_rect(i + xoffset, row_posn + 10.0f, block_width, row_height > 5.0f ? row_height - 5.0f : 1.0f); - } + rectangle = vector_plot_create_rect(i + xoffset, addon_text_posn - text_gap, block_width, addon_bar_height); } vector_plot_add_rect(symbol, rectangle, &last_rectangle); rect_count++; @@ -513,6 +532,8 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ i += block_width; } while (i < symbol->width); + + row_posn += row_height; } } @@ -551,10 +572,11 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ // Dotty mode if ((symbol->symbology != BARCODE_MAXICODE) && (symbol->output_options & BARCODE_DOTTY_MODE)) { + float dotradius = symbol->dot_size / 2.0f; for (r = 0; r < symbol->rows; r++) { for (i = 0; i < symbol->width; i++) { if (module_is_set(symbol, r, i)) { - struct zint_vector_circle *circle = vector_plot_create_circle(i + 0.5f + xoffset, r + 0.5f + yoffset, 1.0f, 0); + struct zint_vector_circle *circle = vector_plot_create_circle(i + dotradius + dotoffset + xoffset, r + dotradius + dotoffset + yoffset, symbol->dot_size, 0); vector_plot_add_circle(symbol, circle, &last_circle); } } @@ -637,98 +659,99 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ if (upceanflag) { float textwidth; + output_upcean_split_text(upceanflag, symbol->text, textpart1, textpart2, textpart3, textpart4); if (upceanflag == 6) { /* UPC-E */ - textpos = -5 + xoffset; + textpos = -5.0f + xoffset; textwidth = 6.2f; - vector_plot_add_string(symbol, textpart1, textpos, default_text_posn - 2.0f, text_height * (8.0f / 11.0f), textwidth, &last_string); - textpos = 24 + xoffset; + vector_plot_add_string(symbol, textpart1, textpos, default_text_posn, upcae_outside_text_height, textwidth, 2 /*right align*/, &last_string); + textpos = 24.0f + xoffset; textwidth = 6.0f * 8.5f; - vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, &last_string); - textpos = 55 + xoffset; + vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, 0, &last_string); + textpos = 51.0f + 3.0f + xoffset; textwidth = 6.2f; - vector_plot_add_string(symbol, textpart3, textpos, default_text_posn - 2.0f, text_height * (8.0f / 11.0f), textwidth, &last_string); + vector_plot_add_string(symbol, textpart3, textpos, default_text_posn, upcae_outside_text_height, textwidth, 1 /*left align*/, &last_string); textdone = 1; switch (ustrlen(addon)) { case 2: - textpos = 61 + xoffset + addon_gap; + textpos = 61.0f + xoffset + addon_gap; textwidth = 2.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; case 5: - textpos = 75 + xoffset + addon_gap; + textpos = 75.0f + xoffset + addon_gap; textwidth = 5.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; } } else if (upceanflag == 8) { /* EAN-8 */ - textpos = 17 + xoffset; + textpos = 17.0f + xoffset; textwidth = 4.0f * 8.5f; - vector_plot_add_string(symbol, textpart1, textpos, default_text_posn, text_height, textwidth, &last_string); - textpos = 50 + xoffset; - vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, textpart1, textpos, default_text_posn, text_height, textwidth, 0, &last_string); + textpos = 50.0f + xoffset; + vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, 0, &last_string); textdone = 1; switch (ustrlen(addon)) { case 2: - textpos = 77 + xoffset + addon_gap; + textpos = 77.0f + xoffset + addon_gap; textwidth = 2.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; case 5: - textpos = 91 + xoffset + addon_gap; + textpos = 91.0f + xoffset + addon_gap; textwidth = 5.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; } } else if (upceanflag == 12) { /* UPC-A */ - textpos = -5 + xoffset; + textpos = -5.0f + xoffset; textwidth = 6.2f; - vector_plot_add_string(symbol, textpart1, textpos, default_text_posn - 2.0f, text_height * (8.0f / 11.0f), textwidth, &last_string); - textpos = 27 + xoffset; + vector_plot_add_string(symbol, textpart1, textpos, default_text_posn, upcae_outside_text_height, textwidth, 2 /*right align*/, &last_string); + textpos = 27.0f + xoffset; textwidth = 5.0f * 8.5f; - vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, &last_string); - textpos = 68 + xoffset; - vector_plot_add_string(symbol, textpart3, textpos, default_text_posn, text_height, textwidth, &last_string); - textpos = 100 + xoffset; + vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, 0, &last_string); + textpos = 67.0f + xoffset; + vector_plot_add_string(symbol, textpart3, textpos, default_text_posn, text_height, textwidth, 0, &last_string); + textpos = 95.0f + 5.0f + xoffset; textwidth = 6.2f; - vector_plot_add_string(symbol, textpart4, textpos, default_text_posn - 2.0f, text_height * (8.0f / 11.0f), textwidth, &last_string); + vector_plot_add_string(symbol, textpart4, textpos, default_text_posn, upcae_outside_text_height, textwidth, 1 /*left align*/, &last_string); textdone = 1; switch (ustrlen(addon)) { case 2: - textpos = 107 + xoffset + addon_gap; + textpos = 105.0f + xoffset + addon_gap; textwidth = 2.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; case 5: - textpos = 121 + xoffset + addon_gap; + textpos = 119.0f + xoffset + addon_gap; textwidth = 5.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; } } else if (upceanflag == 13) { /* EAN-13 */ - textpos = -7 + xoffset; + textpos = -5.0f + xoffset; textwidth = 8.5f; - vector_plot_add_string(symbol, textpart1, textpos, default_text_posn, text_height, textwidth, &last_string); - textpos = 24 + xoffset; + vector_plot_add_string(symbol, textpart1, textpos, default_text_posn, text_height, textwidth, 2 /*right align*/, &last_string); + textpos = 24.0f + xoffset; textwidth = 6.0f * 8.5f; - vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, &last_string); - textpos = 71 + xoffset; - vector_plot_add_string(symbol, textpart3, textpos, default_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, textpart2, textpos, default_text_posn, text_height, textwidth, 0, &last_string); + textpos = 71.0f + xoffset; + vector_plot_add_string(symbol, textpart3, textpos, default_text_posn, text_height, textwidth, 0, &last_string); textdone = 1; switch (ustrlen(addon)) { case 2: - textpos = 105 + xoffset + addon_gap; + textpos = 105.0f + xoffset + addon_gap; textwidth = 2.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; case 5: - textpos = 119 + xoffset + addon_gap; + textpos = 119.0f + xoffset + addon_gap; textwidth = 5.0f * 8.5f; - vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, &last_string); + vector_plot_add_string(symbol, addon, textpos, addon_text_posn, text_height, textwidth, 0, &last_string); break; } } @@ -737,7 +760,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ if (!textdone) { /* Put normal human readable text at the bottom (and centered) */ // calculate start xoffset to center text - vector_plot_add_string(symbol, symbol->text, main_width / 2.0f + xoffset, default_text_posn, text_height, symbol->width, &last_string); + vector_plot_add_string(symbol, symbol->text, main_width / 2.0f + xoffset, default_text_posn, text_height, symbol->width, 0, &last_string); } xoffset -= comp_offset; // Restore xoffset @@ -753,12 +776,14 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ /* row binding */ if (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF) { for (r = 1; r < symbol->rows; r++) { + row_height = symbol->row_height[r - 1] ? symbol->row_height[r - 1] : large_bar_height; rectangle = vector_plot_create_rect(xoffset, (r * row_height) + yoffset - sep_height / 2, symbol->width, sep_height); vector_plot_add_rect(symbol, rectangle, &last_rectangle); } } else { for (r = 1; r < symbol->rows; r++) { /* Avoid 11-module start and 13-module stop chars */ + row_height = symbol->row_height[r - 1] ? symbol->row_height[r - 1] : large_bar_height; rectangle = vector_plot_create_rect(xoffset + 11, (r * row_height) + yoffset - sep_height / 2, symbol->width - 24, sep_height); vector_plot_add_rect(symbol, rectangle, &last_rectangle); } @@ -797,7 +822,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ vector_scale(symbol, file_type); if (file_type != OUT_EMF_FILE) { - /* Should be possible for EMF but not sure how to rotate text */ + /* EMF does its own rotation (with mixed results in various apps) */ vector_rotate(symbol, rotate_angle); } @@ -809,7 +834,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ error_number = svg_plot(symbol); break; case OUT_EMF_FILE: - error_number = emf_plot(symbol); + error_number = emf_plot(symbol, rotate_angle); break; /* case OUT_BUFFER: No more work needed */ } diff --git a/backend/zint.h b/backend/zint.h index 1bf62844..99a27952 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -48,6 +48,7 @@ extern "C" { float width; /* Suggested string width, may be 0 if none recommended */ int length; int rotation; + int halign; /* Horizontal alignment: 0 for centre (middle, 1 for left (start), 2 for right (end) */ unsigned char *text; struct zint_vector_string *next; /* Pointer to next character */ }; @@ -271,6 +272,7 @@ extern "C" { #define ZINT_WARN_INVALID_OPTION 2 #define ZINT_WARN_USES_ECI 3 #define ZINT_WARN_NONCOMPLIANT 4 +#define ZINT_ERROR 5 /* Warn/error marker, not returned */ #define ZINT_ERROR_TOO_LONG 5 #define ZINT_ERROR_INVALID_DATA 6 #define ZINT_ERROR_INVALID_CHECK 7 @@ -291,15 +293,27 @@ extern "C" { #define OUT_JPG_FILE 180 #define OUT_TIF_FILE 200 -// Debug flags -#define ZINT_DEBUG_PRINT 1 -#define ZINT_DEBUG_TEST 2 - // Warning warn #define WARN_DEFAULT 0 #define WARN_ZPL_COMPAT 1 #define WARN_FAIL_ALL 2 +// Capability flags +#define ZINT_CAP_HRT 0x0001 +#define ZINT_CAP_STACKABLE 0x0002 +#define ZINT_CAP_EXTENDABLE 0x0004 +#define ZINT_CAP_COMPOSITE 0x0008 +#define ZINT_CAP_ECI 0x0010 +#define ZINT_CAP_GS1 0x0020 +#define ZINT_CAP_DOTTY 0x0040 +#define ZINT_CAP_FIXED_RATIO 0x0100 /* Aspect ratio */ +#define ZINT_CAP_READER_INIT 0x0200 +#define ZINT_CAP_FULL_MULTIBYTE 0x0400 + +// Debug flags +#define ZINT_DEBUG_PRINT 1 +#define ZINT_DEBUG_TEST 2 + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_MSC_VER) #if defined (DLL_EXPORT) || defined(PIC) || defined(_USRDLL) #define ZINT_EXTERN __declspec(dllexport) @@ -330,6 +344,7 @@ extern "C" { ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, char *filename, int rotate_angle); ZINT_EXTERN int ZBarcode_ValidID(int symbol_id); + ZINT_EXTERN unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag); ZINT_EXTERN int ZBarcode_Version(); #ifdef __cplusplus diff --git a/backend_qt/CMakeLists.txt b/backend_qt/CMakeLists.txt index 9a34e3b2..8be5bc0e 100644 --- a/backend_qt/CMakeLists.txt +++ b/backend_qt/CMakeLists.txt @@ -5,6 +5,7 @@ project(QZint) include_directories(BEFORE "${CMAKE_SOURCE_DIR}/backend" ) set(QZint_SRCS qzint.cpp) +QT5_WRAP_CPP(QZint_SRCS qzint.h) add_library(QZint SHARED ${QZint_SRCS}) diff --git a/backend_qt/qzint.cpp b/backend_qt/qzint.cpp index d81b89b9..8dbf8ffc 100644 --- a/backend_qt/qzint.cpp +++ b/backend_qt/qzint.cpp @@ -16,6 +16,7 @@ ***************************************************************************/ /* vim: set ts=4 sw=4 et : */ +//#include #include "qzint.h" #include #include @@ -25,30 +26,36 @@ #include namespace Zint { - static const char* fontstyle = "Arial"; - static const int fontPixelSizeSmall = 8; - static const int fontPixelSizeLarge = 12; + static const char *fontStyle = "Helvetica"; + static const char *fontStyleError = "Helvetica"; + static const int fontSizeError = 14; /* Point size */ QZint::QZint() { m_symbol = BARCODE_CODE128; m_height = 0; - m_border = NO_BORDER; + m_borderType = 0; m_borderWidth = 0; + m_fontSetting = 0; m_securityLevel = -1; m_fgColor = Qt::black; m_bgColor = Qt::white; + m_cmyk = false; m_zintSymbol = NULL; m_error = 0; m_input_mode = UNICODE_MODE; - m_scale = 1.0; + m_scale = 1.0f; m_option_3 = 0; - m_hidetext = 0; - m_dot_size = 4.0 / 5.0; + m_show_hrt = 1; + m_eci = 0; + m_dotty = false; + m_dot_size = 4.0f / 5.0f; target_size_horiz = 0; target_size_vert = 0; m_option_2 = 0; m_whitespace = 0; m_gssep = false; + m_reader_init = false; + m_rotate_angle = 0; m_debug = false; } @@ -63,7 +70,7 @@ namespace Zint { m_lastError.clear(); m_zintSymbol = ZBarcode_Create(); - m_zintSymbol->output_options |= m_border; + m_zintSymbol->output_options |= m_borderType | m_fontSetting; m_zintSymbol->symbology = m_symbol; m_zintSymbol->height = m_height; m_zintSymbol->whitespace_width = m_whitespace; @@ -71,17 +78,20 @@ namespace Zint { m_zintSymbol->option_1 = m_securityLevel; m_zintSymbol->input_mode = m_input_mode; m_zintSymbol->option_2 = m_option_2; - m_zintSymbol->dot_size = m_dot_size; - if (m_hidetext) { - m_zintSymbol->show_hrt = 0; - } else { - m_zintSymbol->show_hrt = 1; + if (m_dotty) { + m_zintSymbol->output_options |= BARCODE_DOTTY_MODE; } + m_zintSymbol->dot_size = m_dot_size; + m_zintSymbol->show_hrt = m_show_hrt ? 1 : 0; + m_zintSymbol->eci = m_eci; m_zintSymbol->option_3 = m_option_3; m_zintSymbol->scale = m_scale; if (m_gssep) { m_zintSymbol->output_options |= GS1_GS_SEPARATOR; } + if (m_reader_init) { + m_zintSymbol->output_options |= READER_INIT; + } if (m_debug) { m_zintSymbol->debug |= ZINT_DEBUG_PRINT; } @@ -94,25 +104,25 @@ namespace Zint { if (m_bgColor.alpha() != 0xff) { strcat(m_zintSymbol->bgcolour, m_bgColor.name(QColor::HexArgb).toLatin1().mid(1,2)); } + if (m_cmyk) { + m_zintSymbol->output_options |= CMYK_COLOUR; + } strcpy(m_zintSymbol->primary, m_primaryMessage.toLatin1().left(127)); } void QZint::encode() { resetSymbol(); QByteArray bstr = m_text.toUtf8(); - m_error = ZBarcode_Encode_and_Buffer_Vector(m_zintSymbol, (unsigned char*) bstr.data(), bstr.length(), 0); + m_error = ZBarcode_Encode_and_Buffer_Vector(m_zintSymbol, (unsigned char *) bstr.data(), bstr.length(), 0); /* Note do our own rotation */ m_lastError = m_zintSymbol->errtxt; - switch (m_zintSymbol->output_options & (BARCODE_BIND | BARCODE_BOX)) { - case 0: m_border = NO_BORDER; - break; - case 2: m_border = BIND; - break; - case 4: m_border = BOX; - break; + if (m_error < ZINT_ERROR) { + m_borderType = m_zintSymbol->output_options & (BARCODE_BIND | BARCODE_BOX); + m_height = m_zintSymbol->height; + m_borderWidth = m_zintSymbol->border_width; + m_whitespace = m_zintSymbol->whitespace_width; + emit encoded(); } - m_borderWidth = m_zintSymbol->border_width; - m_whitespace = m_zintSymbol->whitespace_width; } int QZint::symbol() const { @@ -175,6 +185,14 @@ namespace Zint { m_scale = scale; } + bool QZint::dotty() const { + return m_dotty; + } + + void QZint::setDotty(bool dotty) { + m_dotty = dotty; + } + void QZint::setDotSize(float dot_size) { m_dot_size = dot_size; } @@ -195,12 +213,22 @@ namespace Zint { m_bgColor = bgColor; } - QZint::BorderType QZint::borderType() const { - return m_border; + void QZint::setCMYK(bool cmyk) { + m_cmyk = cmyk; } - void QZint::setBorderType(BorderType border) { - m_border = border; + int QZint::borderType() const { + return m_borderType; + } + + void QZint::setBorderType(int borderTypeIndex) { + if (borderTypeIndex == 1) { + m_borderType = BARCODE_BIND; + } else if (borderTypeIndex == 2) { + m_borderType = BARCODE_BOX; + } else { + m_borderType = 0; + } } int QZint::borderWidth() const { @@ -233,8 +261,20 @@ namespace Zint { m_securityLevel = securityLevel; } - void QZint::setHideText(bool hide) { - m_hidetext = hide; + void QZint::setFontSetting(int fontSettingIndex) { + if (fontSettingIndex == 1) { + m_fontSetting = BOLD_TEXT; + } else if (fontSettingIndex == 2) { + m_fontSetting = SMALL_TEXT; + } else if (fontSettingIndex == 3) { + m_fontSetting = SMALL_TEXT | BOLD_TEXT; + } else { + m_fontSetting = 0; + } + } + + void QZint::setShowText(bool show) { + m_show_hrt = show; } void QZint::setTargetSize(int width, int height) { @@ -246,10 +286,68 @@ namespace Zint { m_gssep = gssep; } + int QZint::rotateAngle() const { + return m_rotate_angle; + } + + void QZint::setRotateAngle(int rotateIndex) { + if (rotateIndex == 1) { + m_rotate_angle = 90; + } else if (rotateIndex == 2) { + m_rotate_angle = 180; + } else if (rotateIndex == 3) { + m_rotate_angle = 270; + } else { + m_rotate_angle = 0; + } + } + + void QZint::setECI(int ECIIndex) { + if (ECIIndex >= 1 && ECIIndex <= 11) { + m_eci = ECIIndex + 2; + } else if (ECIIndex >= 12 && ECIIndex <= 15) { + m_eci = ECIIndex + 3; + } else if (ECIIndex >= 16 && ECIIndex <= 26) { + m_eci = ECIIndex + 4; + } else if (ECIIndex == 27) { + m_eci = 899; /* 8-bit binary data TODO: support */ + } else { + m_eci = 0; + } + } + + void QZint::setReaderInit(bool reader_init) { + m_reader_init = reader_init; + } + void QZint::setDebug(bool debug) { m_debug = debug; } + bool QZint::hasHRT(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_HRT); + } + + bool QZint::isExtendable(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_EXTENDABLE); + } + + bool QZint::supportsECI(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_ECI); + } + + bool QZint::isFixedRatio(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_FIXED_RATIO); + } + + bool QZint::isDotty(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_DOTTY); + } + + bool QZint::supportsReaderInit(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_READER_INIT); + } + int QZint::getError() const { return m_error; } @@ -270,8 +368,8 @@ namespace Zint { resetSymbol(); strcpy(m_zintSymbol->outfile, filename.toLatin1().left(255)); QByteArray bstr = m_text.toUtf8(); - m_error = ZBarcode_Encode_and_Print(m_zintSymbol, (unsigned char*) bstr.data(), bstr.length(), 0); - if (m_error >= 5) { + m_error = ZBarcode_Encode_and_Print(m_zintSymbol, (unsigned char *) bstr.data(), bstr.length(), m_rotate_angle); + if (m_error >= ZINT_ERROR) { m_lastError = m_zintSymbol->errtxt; return false; } else { @@ -279,6 +377,35 @@ namespace Zint { } } + Qt::GlobalColor QZint::colourToQtColor(int colour) { + switch (colour) { + case 1: // Cyan + return Qt::cyan; + break; + case 2: // Blue + return Qt::blue; + break; + case 3: // Magenta + return Qt::magenta; + break; + case 4: // Red + return Qt::red; + break; + case 5: // Yellow + return Qt::yellow; + break; + case 6: // Green + return Qt::green; + break; + case 8: // White + return Qt::white; + break; + default: + return Qt::black; + break; + } + } + void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode mode) { struct zint_vector_rect *rect; struct zint_vector_hexagon *hex; @@ -290,140 +417,143 @@ namespace Zint { encode(); - QFont fontSmall(fontstyle); - fontSmall.setPixelSize(fontPixelSizeSmall); - QFont fontLarge(fontstyle); - fontLarge.setPixelSize(fontPixelSizeLarge); + painter.save(); - if (m_error >= 5) { - // Display error message instead of barcode - fontLarge.setPointSize(14); - painter.setFont(fontLarge); - painter.drawText(paintRect, Qt::AlignCenter, m_lastError); + if (m_error >= ZINT_ERROR) { + painter.setRenderHint(QPainter::Antialiasing); + QFont font(fontStyleError, fontSizeError); + painter.setFont(font); + painter.drawText(paintRect, Qt::AlignCenter | Qt::TextWordWrap, m_lastError); + painter.restore(); return; } - painter.save(); painter.setClipRect(paintRect, Qt::IntersectClip); qreal xtr = paintRect.x(); qreal ytr = paintRect.y(); qreal scale; - + qreal gwidth = m_zintSymbol->vector->width; qreal gheight = m_zintSymbol->vector->height; - if (paintRect.width() / gwidth < paintRect.height() / gheight) { - scale = paintRect.width() / gwidth; + if (m_rotate_angle == 90 || m_rotate_angle == 270) { + if (paintRect.width() / gheight < paintRect.height() / gwidth) { + scale = paintRect.width() / gheight; + } else { + scale = paintRect.height() / gwidth; + } } else { - scale = paintRect.height() / gheight; + if (paintRect.width() / gwidth < paintRect.height() / gheight) { + scale = paintRect.width() / gwidth; + } else { + scale = paintRect.height() / gheight; + } } - + xtr += (qreal) (paintRect.width() - gwidth * scale) / 2.0; ytr += (qreal) (paintRect.height() - gheight * scale) / 2.0; painter.setBackground(QBrush(m_bgColor)); painter.fillRect(paintRect, QBrush(m_bgColor)); - + + if (m_rotate_angle) { + painter.translate(paintRect.width() / 2.0, paintRect.height() / 2.0); // Need to rotate around centre + painter.rotate(m_rotate_angle); + painter.translate(-paintRect.width() / 2.0, -paintRect.height() / 2.0); // Undo + } + painter.translate(xtr, ytr); painter.scale(scale, scale); - + //Red square for diagnostics //painter.fillRect(QRect(0, 0, m_zintSymbol->vector->width, m_zintSymbol->vector->height), QBrush(QColor(255,0,0,255))); - QPen p; - - p.setWidth(1); - p.setColor(m_fgColor); - painter.setPen(p); - painter.setRenderHint(QPainter::Antialiasing); - // Plot rectangles rect = m_zintSymbol->vector->rectangles; - while (rect) { - if (rect->colour == -1) { - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(m_fgColor)); - } else { - switch(rect->colour) { - case 1: // Cyan - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::cyan)); - break; - case 2: // Blue - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::blue)); - break; - case 3: // Magenta - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::magenta)); - break; - case 4: // Red - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::red)); - break; - case 5: // Yellow - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::yellow)); - break; - case 6: // Green - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::green)); - break; - case 8: // White - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::white)); - break; - default: - painter.fillRect(rect->x, rect->y, rect->width, rect->height, QBrush(Qt::black)); - break; + if (rect) { + QBrush brush(Qt::SolidPattern); + while (rect) { + if (rect->colour == -1) { + brush.setColor(m_fgColor); + } else { + brush.setColor(colourToQtColor(rect->colour)); } + painter.fillRect(QRectF(rect->x, rect->y, rect->width, rect->height), brush); + rect = rect->next; } - rect = rect->next; } - + // Plot hexagons hex = m_zintSymbol->vector->hexagons; - while (hex) { - radius = hex->diameter / 2.0; - - QPainterPath pt; - pt.moveTo(hex->x, hex->y + (1.0 * radius)); - pt.lineTo(hex->x + (0.86 * radius), hex->y + (0.5 * radius)); - pt.lineTo(hex->x + (0.86 * radius), hex->y - (0.5 * radius)); - pt.lineTo(hex->x, hex->y - (1.0 * radius)); - pt.lineTo(hex->x - (0.86 * radius), hex->y - (0.5 * radius)); - pt.lineTo(hex->x - (0.86 * radius), hex->y + (0.5 * radius)); - pt.lineTo(hex->x, hex->y + (1.0 * radius)); - painter.fillPath(pt, QBrush(m_fgColor)); - - hex = hex->next; + if (hex) { + painter.setRenderHint(QPainter::Antialiasing); + QBrush brush(m_fgColor); + while (hex) { + radius = hex->diameter / 2.0; + + QPainterPath pt; + pt.moveTo(hex->x, hex->y + (1.0 * radius)); + pt.lineTo(hex->x + (0.86 * radius), hex->y + (0.5 * radius)); + pt.lineTo(hex->x + (0.86 * radius), hex->y - (0.5 * radius)); + pt.lineTo(hex->x, hex->y - (1.0 * radius)); + pt.lineTo(hex->x - (0.86 * radius), hex->y - (0.5 * radius)); + pt.lineTo(hex->x - (0.86 * radius), hex->y + (0.5 * radius)); + pt.lineTo(hex->x, hex->y + (1.0 * radius)); + painter.fillPath(pt, brush); + + hex = hex->next; + } } - + // Plot dots (circles) circle = m_zintSymbol->vector->circles; - while (circle) { - if (circle->colour) { - p.setColor(m_bgColor); - p.setWidth(0); - painter.setPen(p); - painter.setBrush(QBrush(m_bgColor)); - } else { - p.setColor(m_fgColor); - p.setWidth(0); - painter.setPen(p); - painter.setBrush(QBrush(m_fgColor)); + if (circle) { + painter.setRenderHint(QPainter::Antialiasing); + QPen p; + while (circle) { + if (circle->colour) { // Set means use background colour + p.setColor(m_bgColor); + p.setWidth(0); + painter.setPen(p); + painter.setBrush(QBrush(m_bgColor)); + } else { + p.setColor(m_fgColor); + p.setWidth(0); + painter.setPen(p); + painter.setBrush(QBrush(m_fgColor)); + } + painter.drawEllipse(QPointF(circle->x, circle->y), (double) circle->diameter / 2.0, (double) circle->diameter / 2.0); + circle = circle->next; } - painter.drawEllipse(QPointF(circle->x, circle->y), (double) circle->diameter / 2.0, (double) circle->diameter / 2.0); - circle = circle->next; } - + // Plot text string = m_zintSymbol->vector->strings; if (string) { - painter.setFont(fontLarge); + painter.setRenderHint(QPainter::Antialiasing); + bool bold = (m_zintSymbol->output_options & BOLD_TEXT) && (!isExtendable() || (m_zintSymbol->output_options & SMALL_TEXT)); + QFont font(fontStyle, -1 /*pointSize*/, bold ? QFont::Bold : -1); + while (string) { + font.setPixelSize(string->fsize); + painter.setFont(font); + QString content = QString::fromUtf8((const char *) string->text); + /* string->y is baseline of font */ + if (string->halign == 1) { /* Left align */ + painter.drawText(QPointF(string->x, string->y), content); + } else { + QFontMetrics fm(painter.fontMetrics()); + int width = fm.boundingRect(content).width(); + if (string->halign == 2) { /* Right align */ + painter.drawText(QPointF(string->x - width, string->y), content); + } else { /* Centre align */ + painter.drawText(QPointF(string->x - (width / 2.0), string->y), content); + } + } + string = string->next; + } } - QFontMetrics fm(fontLarge); - while (string) { - QString content = QString::fromUtf8((const char *) string->text, -1); - int width = fm.width(content, -1); - int height = fm.height(); - painter.drawText(string->x - (width / 2.0), string->y - height, width, height, Qt::AlignHCenter | Qt::AlignBottom, content); - string = string->next; - } - + painter.restore(); } } diff --git a/backend_qt/qzint.h b/backend_qt/qzint.h index f159ae9a..b6f0d9be 100644 --- a/backend_qt/qzint.h +++ b/backend_qt/qzint.h @@ -19,18 +19,16 @@ #define BARCODERENDER_H #include #include - #include "zint.h" namespace Zint { -class QZint +class QZint : public QObject { -private: + Q_OBJECT public: - enum BorderType{NO_BORDER=0, BIND=2, BOX=4}; enum AspectRatioMode{IgnoreAspectRatio=0, KeepAspectRatio=1, CenterBarCode=2}; public: @@ -60,6 +58,9 @@ public: float scale() const; void setScale(float scale); + bool dotty() const; + void setDotty(bool botty); + void setDotSize(float dot_size); QColor fgColor() const; @@ -68,8 +69,10 @@ public: QColor bgColor() const; void setBgColor(const QColor & bgColor); - BorderType borderType() const; - void setBorderType(BorderType border); + void setCMYK(bool cmyk); + + int borderType() const; + void setBorderType(int borderTypeIndex); int borderWidth() const; void setBorderWidth(int boderWidth); @@ -82,14 +85,30 @@ public: void setWhitespace(int whitespace); - void setHideText(bool hide); + void setFontSetting(int fontSettingIndex); + + void setShowText(bool show); void setTargetSize(int width, int height); void setGSSep(bool gssep); + int rotateAngle() const; + void setRotateAngle(int rotateIndex); + + void setECI(int ECIIndex); + + void setReaderInit(bool reader_init); + void setDebug(bool debug); + bool hasHRT(int symbology = 0) const; + bool isExtendable(int symbology = 0) const; + bool supportsECI(int symbology = 0) const; + bool isFixedRatio(int symbology = 0) const; + bool isDotty(int symbology = 0) const; + bool supportsReaderInit(int symbology = 0) const; + int getError() const; QString error_message() const; @@ -101,33 +120,43 @@ public: void render(QPainter & painter, const QRectF & paintRect, AspectRatioMode mode=IgnoreAspectRatio); +signals: + void encoded(); + private: void resetSymbol(); void encode(); + static Qt::GlobalColor colourToQtColor(int colour); private: int m_symbol; QString m_text; QString m_primaryMessage; int m_height; - BorderType m_border; + int m_borderType; int m_borderWidth; + int m_fontSetting; int m_option_2; int m_securityLevel; int m_input_mode; QColor m_fgColor; QColor m_bgColor; + bool m_cmyk; QString m_lastError; int m_error; int m_whitespace; zint_symbol * m_zintSymbol; float m_scale; int m_option_3; - bool m_hidetext; + bool m_show_hrt; + int m_eci; + int m_rotate_angle; + bool m_dotty; float m_dot_size; int target_size_horiz; int target_size_vert; bool m_gssep; + bool m_reader_init; bool m_debug; }; } diff --git a/backend_tcl/Makefile.in b/backend_tcl/Makefile.in index 47e2bcc8..88e1660c 100644 --- a/backend_tcl/Makefile.in +++ b/backend_tcl/Makefile.in @@ -65,6 +65,7 @@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ +datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ @@ -176,7 +177,7 @@ libraries: doc: -install: all install-binaries install-libraries install-doc +install: all install-binaries install-libraries install-binaries: binaries install-lib-binaries install-bin-binaries @mkdir -p $(DESTDIR)$(pkglibdir) diff --git a/backend_tcl/configure b/backend_tcl/configure old mode 100644 new mode 100755 index af12300f..d353b403 --- a/backend_tcl/configure +++ b/backend_tcl/configure @@ -1,18 +1,20 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.63 for zint 2.5.2. +# Generated by GNU Autoconf 2.69 for zint 2.9.1.9. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# # -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which @@ -20,23 +22,15 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - as_nl=' ' export as_nl @@ -44,7 +38,13 @@ export as_nl as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else @@ -55,7 +55,7 @@ else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; - case $arg in + case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; @@ -78,13 +78,6 @@ if test "${PATH_SEPARATOR+set}" != set; then } fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - # IFS # We need space, tab and new line, in precisely that order. Quoting is @@ -94,15 +87,16 @@ fi IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +as_myself= +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -114,12 +108,16 @@ if test "x$as_myself" = x; then fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' @@ -131,7 +129,293 @@ export LC_ALL LANGUAGE=C export LANGUAGE -# Required to use basename. +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr @@ -145,8 +429,12 @@ else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ @@ -166,295 +454,19 @@ $as_echo X/"$0" | } s/.*/./; q'` -# CDPATH. -$as_unset CDPATH +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell bug-autoconf@gnu.org about your system, - echo including any error possibly output before this message. - echo This can help us improve future autoconf versions. - echo Configuration will now proceed without shell functions. -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= @@ -471,9 +483,12 @@ test \$exitcode = 0") || { s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). @@ -482,29 +497,18 @@ test \$exitcode = 0") || { exit } - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then @@ -519,49 +523,29 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -570,11 +554,11 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -exec 7<&0 &1 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` @@ -589,14 +573,14 @@ cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='zint' PACKAGE_TARNAME='zint' -PACKAGE_VERSION='2.5.2' -PACKAGE_STRING='zint 2.5.2' +PACKAGE_VERSION='2.9.1.9' +PACKAGE_STRING='zint 2.9.1.9' PACKAGE_BUGREPORT='' +PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ @@ -739,6 +723,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -750,6 +735,7 @@ bindir program_transform_name prefix exec_prefix +PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION @@ -820,6 +806,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -844,8 +831,9 @@ do fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -890,8 +878,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -917,8 +904,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1073,6 +1059,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1122,8 +1117,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1139,8 +1133,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1170,17 +1163,17 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { $as_echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1189,7 +1182,7 @@ Try \`$0 --help' for more information." >&2 $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac @@ -1197,15 +1190,13 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { $as_echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; - fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 - { (exit 1); exit 1; }; } ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1214,7 +1205,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1228,8 +1219,7 @@ do [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1243,8 +1233,6 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1259,11 +1247,9 @@ test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { $as_echo "$as_me: error: working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. @@ -1302,13 +1288,11 @@ else fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1334,7 +1318,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures zint 2.5.2 to adapt to many kinds of systems. +\`configure' configures zint 2.9.1.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1348,7 +1332,7 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files @@ -1374,6 +1358,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1395,7 +1380,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of zint 2.5.2:";; + short | recursive ) echo "Configuration of zint 2.9.1.9:";; esac cat <<\_ACEOF @@ -1427,13 +1412,14 @@ Some influential environment variables: LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to the package provider. _ACEOF ac_status=$? fi @@ -1496,22 +1482,373 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -zint configure 2.5.2 -generated by GNU Autoconf 2.63 +zint configure 2.9.1.9 +generated by GNU Autoconf 2.69 -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by zint $as_me 2.5.2, which was -generated by GNU Autoconf 2.63. Invocation command line was +It was created by zint $as_me 2.9.1.9, which was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -1547,8 +1884,8 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done IFS=$as_save_IFS } >&5 @@ -1585,9 +1922,9 @@ do ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1603,13 +1940,13 @@ do -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args '$ac_arg'" + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -1621,11 +1958,9 @@ trap 'exit_status=$? { echo - cat <<\_ASBOX -## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## -## ---------------- ## -_ASBOX +## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( @@ -1634,13 +1969,13 @@ _ASBOX case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) $as_unset $ac_var ;; + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -1659,11 +1994,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - cat <<\_ASBOX -## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## -## ----------------- ## -_ASBOX +## ----------------- ##" echo for ac_var in $ac_subst_vars do @@ -1676,11 +2009,9 @@ _ASBOX echo if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## -## ------------------- ## -_ASBOX +## ------------------- ##" echo for ac_var in $ac_subst_files do @@ -1694,11 +2025,9 @@ _ASBOX fi if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## -## ----------- ## -_ASBOX +## ----------- ##" echo cat confdefs.h echo @@ -1712,46 +2041,53 @@ _ASBOX exit $exit_status ' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h + # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site @@ -1762,19 +2098,23 @@ fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue - if test -r "$ac_site_file"; then - { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; @@ -1782,7 +2122,7 @@ $as_echo "$as_me: loading cache $cache_file" >&6;} esac fi else - { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1797,11 +2137,11 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; @@ -1811,17 +2151,17 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac @@ -1833,43 +2173,20 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi - - - - - - - - - - - - - - - - - - - - - - - - +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1890,26 +2207,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # are compatible with. TEA_VERSION="3.9" - { $as_echo "$as_me:$LINENO: checking for correct TEA configuration" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 $as_echo_n "checking for correct TEA configuration... " >&6; } if test x"${PACKAGE_NAME}" = x ; then - { { $as_echo "$as_me:$LINENO: error: -The PACKAGE_NAME variable must be defined by your TEA configure.in" >&5 -$as_echo "$as_me: error: -The PACKAGE_NAME variable must be defined by your TEA configure.in" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? " +The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 fi if test x"3.9" = x ; then - { { $as_echo "$as_me:$LINENO: error: -TEA version not specified." >&5 -$as_echo "$as_me: error: -TEA version not specified." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? " +TEA version not specified." "$LINENO" 5 elif test "3.9" != "${TEA_VERSION}" ; then - { $as_echo "$as_me:$LINENO: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 $as_echo "warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6; } else - { $as_echo "$as_me:$LINENO: result: ok (TEA ${TEA_VERSION})" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 $as_echo "ok (TEA ${TEA_VERSION})" >&6; } fi @@ -1923,9 +2234,9 @@ $as_echo "ok (TEA ${TEA_VERSION})" >&6; } *win32*|*WIN32*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CYGPATH+set}" = set; then +if ${ac_cv_prog_CYGPATH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CYGPATH"; then @@ -1936,14 +2247,14 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" @@ -1951,10 +2262,10 @@ fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then - { $as_echo "$as_me:$LINENO: result: $CYGPATH" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 $as_echo "$CYGPATH" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -1992,7 +2303,7 @@ fi exec_prefix=$prefix fi - { $as_echo "$as_me:$LINENO: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 $as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;} @@ -2031,9 +2342,7 @@ for ac_dir in tclconfig "$srcdir"/tclconfig; do fi done if test -z "$ac_aux_dir"; then - { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in tclconfig \"$srcdir\"/tclconfig" >&5 -$as_echo "$as_me: error: cannot find install-sh or install.sh in tclconfig \"$srcdir\"/tclconfig" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -2063,13 +2372,13 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. no_tcl=true # Check whether --with-tcl was given. -if test "${with_tcl+set}" = set; then +if test "${with_tcl+set}" = set; then : withval=$with_tcl; with_tclconfig="${withval}" fi - { $as_echo "$as_me:$LINENO: checking for Tcl configuration" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5 $as_echo_n "checking for Tcl configuration... " >&6; } - if test "${ac_cv_c_tclconfig+set}" = set; then + if ${ac_cv_c_tclconfig+:} false; then : $as_echo_n "(cached) " >&6 else @@ -2079,7 +2388,7 @@ else case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then - { $as_echo "$as_me:$LINENO: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; @@ -2087,9 +2396,7 @@ $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory contain if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else - { { $as_echo "$as_me:$LINENO: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&5 -$as_echo "$as_me: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5 fi fi @@ -2190,13 +2497,11 @@ fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" - { { $as_echo "$as_me:$LINENO: error: Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" >&5 -$as_echo "$as_me: error: Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" "$LINENO" 5 else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" - { $as_echo "$as_me:$LINENO: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "found ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi fi @@ -2209,9 +2514,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -2222,24 +2527,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -2249,9 +2554,9 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -2262,24 +2567,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -2288,7 +2593,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -2302,9 +2607,9 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -2315,24 +2620,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -2342,9 +2647,9 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -2356,18 +2661,18 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then @@ -2386,10 +2691,10 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -2401,9 +2706,9 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -2414,24 +2719,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -2445,9 +2750,9 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -2458,24 +2763,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -2488,7 +2793,7 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -2499,57 +2804,37 @@ fi fi -test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -{ (ac_try="$ac_compiler --version >&5" +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler --version >&5") 2>&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2565,8 +2850,8 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: @@ -2582,17 +2867,17 @@ do done rm -f $ac_rmfiles -if { (ac_try="$ac_link_default" +if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -2609,7 +2894,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -2628,84 +2913,41 @@ test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi - -{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -if test -z "$ac_file"; then - $as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } - fi - fi -fi -{ $as_echo "$as_me:$LINENO: result: yes" >&5 +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } -if { (ac_try="$ac_link" +if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -2720,32 +2962,83 @@ for ac_file in conftest.exe conftest conftest.*; do esac done else - { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } fi - -rm -f conftest$ac_cv_exeext -{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then +if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2757,17 +3050,17 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" +if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -2780,31 +3073,23 @@ else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2818,37 +3103,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no + ac_compiler_gnu=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes @@ -2857,20 +3121,16 @@ else fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2881,35 +3141,11 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2920,36 +3156,12 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_compile "$LINENO"; then : - ac_c_werror_flag=$ac_save_c_werror_flag +else + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2960,42 +3172,17 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS @@ -3012,23 +3199,18 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then +if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -3080,32 +3262,9 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -3116,17 +3275,19 @@ fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { $as_echo "$as_me:$LINENO: result: none needed" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) - { $as_echo "$as_me:$LINENO: result: unsupported" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3136,15 +3297,15 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:$LINENO: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo_n "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... " >&6; } if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then - { $as_echo "$as_me:$LINENO: result: loading" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TCL_BIN_DIR}/tclConfig.sh" else - { $as_echo "$as_me:$LINENO: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi @@ -3204,14 +3365,10 @@ $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } - { $as_echo "$as_me:$LINENO: checking platform" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking platform" >&5 $as_echo_n "checking platform... " >&6; } hold_cc=$CC; CC="$TCL_CC" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3226,36 +3383,15 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : TEA_PLATFORM="unix" else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - TEA_PLATFORM="windows" + TEA_PLATFORM="windows" fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CC=$hold_cc - { $as_echo "$as_me:$LINENO: result: $TEA_PLATFORM" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEA_PLATFORM" >&5 $as_echo "$TEA_PLATFORM" >&6; } # The BUILD_$pkg is to define the correct extern storage class @@ -3296,13 +3432,13 @@ _ACEOF no_tk=true # Check whether --with-tk was given. -if test "${with_tk+set}" = set; then +if test "${with_tk+set}" = set; then : withval=$with_tk; with_tkconfig="${withval}" fi - { $as_echo "$as_me:$LINENO: checking for Tk configuration" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk configuration" >&5 $as_echo_n "checking for Tk configuration... " >&6; } - if test "${ac_cv_c_tkconfig+set}" = set; then + if ${ac_cv_c_tkconfig+:} false; then : $as_echo_n "(cached) " >&6 else @@ -3312,7 +3448,7 @@ else case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then - { $as_echo "$as_me:$LINENO: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&2;} with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; @@ -3322,9 +3458,7 @@ $as_echo "$as_me: WARNING: --with-tk argument should refer to directory containi elif test -f "${with_tkconfig}/sdl2tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else - { { $as_echo "$as_me:$LINENO: error: ${with_tkconfig} directory doesn't contain tkConfig.sh" >&5 -$as_echo "$as_me: error: ${with_tkconfig} directory doesn't contain tkConfig.sh" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "${with_tkconfig} directory doesn't contain tkConfig.sh" "$LINENO" 5 fi fi @@ -3431,31 +3565,29 @@ fi if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" - { { $as_echo "$as_me:$LINENO: error: Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh" >&5 -$as_echo "$as_me: error: Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh" "$LINENO" 5 else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" - { $as_echo "$as_me:$LINENO: result: found ${TK_BIN_DIR}/tkConfig.sh" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "found ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi fi - { $as_echo "$as_me:$LINENO: checking for existence of ${TK_BIN_DIR}/tkConfig.sh" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo_n "checking for existence of ${TK_BIN_DIR}/tkConfig.sh... " >&6; } if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then - { $as_echo "$as_me:$LINENO: result: loading" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TK_BIN_DIR}/tkConfig.sh" elif test -f "${TK_BIN_DIR}/sdl2tkConfig.sh" ; then - { $as_echo "$as_me:$LINENO: result: loading" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TK_BIN_DIR}/sdl2tkConfig.sh" else - { $as_echo "$as_me:$LINENO: result: could not find ${TK_BIN_DIR}/tkConfig.sh" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi @@ -3515,9 +3647,7 @@ $as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; } case ${TK_DEFS} in *MAC_OSX_TK*) -cat >>confdefs.h <<\_ACEOF -#define MAC_OSX_TK 1 -_ACEOF +$as_echo "#define MAC_OSX_TK 1" >>confdefs.h TEA_WINDOWINGSYSTEM="aqua" ;; @@ -3555,11 +3685,11 @@ _ACEOF if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then - { $as_echo "$as_me:$LINENO: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 $as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} prefix=${TCL_PREFIX} else - { $as_echo "$as_me:$LINENO: --prefix defaulting to /usr/local" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5 $as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} prefix=/usr/local fi @@ -3567,11 +3697,11 @@ $as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then - { $as_echo "$as_me:$LINENO: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 $as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} exec_prefix=${TCL_EXEC_PREFIX} else - { $as_echo "$as_me:$LINENO: --exec-prefix defaulting to ${prefix}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5 $as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} exec_prefix=$prefix fi @@ -3597,9 +3727,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3610,24 +3740,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -3637,9 +3767,9 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3650,24 +3780,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -3676,7 +3806,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -3690,9 +3820,9 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3703,24 +3833,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -3730,9 +3860,9 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3744,18 +3874,18 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then @@ -3774,10 +3904,10 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -3789,9 +3919,9 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3802,24 +3932,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:$LINENO: result: $CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -3833,9 +3963,9 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3846,24 +3976,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -3876,7 +4006,7 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -3887,62 +4017,42 @@ fi fi -test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -{ (ac_try="$ac_compiler --version >&5" +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler --version >&5") 2>&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3956,37 +4066,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no + ac_compiler_gnu=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes @@ -3995,20 +4084,16 @@ else fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4019,35 +4104,11 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4058,36 +4119,12 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_compile "$LINENO"; then : - ac_c_werror_flag=$ac_save_c_werror_flag +else + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4098,42 +4135,17 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS @@ -4150,23 +4162,18 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then +if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -4218,32 +4225,9 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -4254,17 +4238,19 @@ fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { $as_echo "$as_me:$LINENO: result: none needed" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) - { $as_echo "$as_me:$LINENO: result: unsupported" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -4277,14 +4263,14 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then + if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded @@ -4299,11 +4285,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -4312,78 +4294,34 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi - -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break fi - -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : break fi @@ -4395,7 +4333,7 @@ fi else ac_cv_prog_CPP=$CPP fi -{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes @@ -4406,11 +4344,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -4419,87 +4353,40 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi - -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break fi - -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + else - { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c @@ -4522,11 +4409,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- - { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -4534,7 +4421,7 @@ SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; @@ -4544,11 +4431,11 @@ esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:$LINENO: result: yes" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -4561,9 +4448,9 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then +if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then @@ -4574,24 +4461,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -4601,9 +4488,9 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then @@ -4614,24 +4501,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -4640,7 +4527,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -4659,9 +4546,9 @@ fi -{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then +if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then @@ -4672,10 +4559,10 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in @@ -4692,7 +4579,7 @@ case `"$ac_path_GREP" --version 2>&1` in $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" @@ -4707,26 +4594,24 @@ esac $ac_path_GREP_found && break 3 done done -done + done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then - { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then +if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 @@ -4740,10 +4625,10 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in @@ -4760,7 +4645,7 @@ case `"$ac_path_EGREP" --version 2>&1` in $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" @@ -4775,12 +4660,10 @@ esac $ac_path_EGREP_found && break 3 done done -done + done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then - { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP @@ -4788,21 +4671,17 @@ fi fi fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then +if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -4817,48 +4696,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no + ac_cv_header_stdc=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -4868,18 +4722,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -4889,14 +4739,10 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -4923,118 +4769,33 @@ main () return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : +if ac_fn_c_try_run "$LINENO"; then : + else - $as_echo "$as_me: program exited with status $ac_status" >&5 -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -rf conftest.dSYM -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF @@ -5054,18 +4815,14 @@ done #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then - { $as_echo "$as_me:$LINENO: checking if the compiler understands -pipe" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5 $as_echo_n "checking if the compiler understands -pipe... " >&6; } -if test "${tcl_cv_cc_pipe+set}" = set; then +if ${tcl_cv_cc_pipe+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -5076,36 +4833,15 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cc_pipe=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_cc_pipe=no + tcl_cv_cc_pipe=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$hold_cflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_cc_pipe" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_pipe" >&5 $as_echo "$tcl_cv_cc_pipe" >&6; } if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" @@ -5116,19 +4852,14 @@ $as_echo "$tcl_cv_cc_pipe" >&6; } # Common compiler flag setup #-------------------------------------------------------------------- - - { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then +if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler @@ -5136,46 +4867,34 @@ cat >>conftest.$ac_ext <<_ACEOF typedef int dummy; _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless - # there are some -arch flags. Note that *ppc* also matches - # ppc64. This check is also rather less than ideal. - case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( - *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; - esac -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -5193,30 +4912,9 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -5232,49 +4930,18 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -5289,30 +4956,9 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -5327,51 +4973,20 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; @@ -5397,24 +5012,7 @@ return use_ascii (foo) == use_ebcdic (foo); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi @@ -5426,20 +5024,10 @@ $as_echo "$ac_try_echo") >&5 ac_cv_c_bigendian=unknown fi fi -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -5459,67 +5047,33 @@ main () return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else - $as_echo "$as_me: program exited with status $ac_status" >&5 -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes + ac_cv_c_bigendian=yes fi -rm -rf conftest.dSYM -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) - cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) -cat >>confdefs.h <<\_ACEOF -#define AC_APPLE_UNIVERSAL_BUILD 1 -_ACEOF +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) - { { $as_echo "$as_me:$LINENO: error: unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -$as_echo "$as_me: error: unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac if test "${TEA_PLATFORM}" = "unix" ; then @@ -5531,109 +5085,21 @@ $as_echo "$as_me: error: unknown endianness # right (and it must appear before "-lm"). #-------------------------------------------------------------------- - { $as_echo "$as_me:$LINENO: checking for sin" >&5 -$as_echo_n "checking for sin... " >&6; } -if test "${ac_cv_func_sin+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define sin to an innocuous variant, in case declares sin. - For example, HP-UX 11i declares gettimeofday. */ -#define sin innocuous_sin - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char sin (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef sin - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sin (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_sin || defined __stub___sin -choke me -#endif - -int -main () -{ -return sin (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then - ac_cv_func_sin=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_sin=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_sin" >&5 -$as_echo "$ac_cv_func_sin" >&6; } -if test "x$ac_cv_func_sin" = x""yes; then + ac_fn_c_check_func "$LINENO" "sin" "ac_cv_func_sin" +if test "x$ac_cv_func_sin" = xyes; then : MATH_LIBS="" else MATH_LIBS="-lm" fi - { $as_echo "$as_me:$LINENO: checking for main in -lieee" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 $as_echo_n "checking for main in -lieee... " >&6; } -if test "${ac_cv_lib_ieee_main+set}" = set; then +if ${ac_cv_lib_ieee_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5645,43 +5111,18 @@ return main (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ieee_main=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_ieee_main=no + ac_cv_lib_ieee_main=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ieee_main" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 $as_echo "$ac_cv_lib_ieee_main" >&6; } -if test "x$ac_cv_lib_ieee_main" = x""yes; then +if test "x$ac_cv_lib_ieee_main" = xyes; then : MATH_LIBS="-lieee $MATH_LIBS" fi @@ -5691,18 +5132,14 @@ fi # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- - { $as_echo "$as_me:$LINENO: checking for main in -linet" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 $as_echo_n "checking for main in -linet... " >&6; } -if test "${ac_cv_lib_inet_main+set}" = set; then +if ${ac_cv_lib_inet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5714,179 +5151,26 @@ return main (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet_main=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_inet_main=no + ac_cv_lib_inet_main=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_inet_main" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 $as_echo "$ac_cv_lib_inet_main" >&6; } -if test "x$ac_cv_lib_inet_main" = x""yes; then +if test "x$ac_cv_lib_inet_main" = xyes; then : LIBS="$LIBS -linet" fi - if test "${ac_cv_header_net_errno_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for net/errno.h" >&5 -$as_echo_n "checking for net/errno.h... " >&6; } -if test "${ac_cv_header_net_errno_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_net_errno_h" >&5 -$as_echo "$ac_cv_header_net_errno_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking net/errno.h usability" >&5 -$as_echo_n "checking net/errno.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking net/errno.h presence" >&5 -$as_echo_n "checking net/errno.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: net/errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: net/errno.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: net/errno.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: net/errno.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: net/errno.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: net/errno.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: net/errno.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: net/errno.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: net/errno.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for net/errno.h" >&5 -$as_echo_n "checking for net/errno.h... " >&6; } -if test "${ac_cv_header_net_errno_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_net_errno_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_net_errno_h" >&5 -$as_echo "$ac_cv_header_net_errno_h" >&6; } - -fi -if test "x$ac_cv_header_net_errno_h" = x""yes; then + ac_fn_c_check_header_mongrel "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default" +if test "x$ac_cv_header_net_errno_h" = xyes; then : -cat >>confdefs.h <<\_ACEOF -#define HAVE_NET_ERRNO_H 1 -_ACEOF +$as_echo "#define HAVE_NET_ERRNO_H 1" >>confdefs.h fi @@ -5911,198 +5195,26 @@ fi #-------------------------------------------------------------------- tcl_checkBoth=0 - { $as_echo "$as_me:$LINENO: checking for connect" >&5 -$as_echo_n "checking for connect... " >&6; } -if test "${ac_cv_func_connect+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define connect to an innocuous variant, in case declares connect. - For example, HP-UX 11i declares gettimeofday. */ -#define connect innocuous_connect - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char connect (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef connect - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char connect (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_connect || defined __stub___connect -choke me -#endif - -int -main () -{ -return connect (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then - ac_cv_func_connect=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_connect=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 -$as_echo "$ac_cv_func_connect" >&6; } -if test "x$ac_cv_func_connect" = x""yes; then + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = xyes; then : tcl_checkSocket=0 else tcl_checkSocket=1 fi if test "$tcl_checkSocket" = 1; then - { $as_echo "$as_me:$LINENO: checking for setsockopt" >&5 -$as_echo_n "checking for setsockopt... " >&6; } -if test "${ac_cv_func_setsockopt+set}" = set; then - $as_echo_n "(cached) " >&6 + ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" +if test "x$ac_cv_func_setsockopt" = xyes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define setsockopt to an innocuous variant, in case declares setsockopt. - For example, HP-UX 11i declares gettimeofday. */ -#define setsockopt innocuous_setsockopt - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char setsockopt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef setsockopt - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char setsockopt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_setsockopt || defined __stub___setsockopt -choke me -#endif - -int -main () -{ -return setsockopt (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then - ac_cv_func_setsockopt=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_setsockopt=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_setsockopt" >&5 -$as_echo "$ac_cv_func_setsockopt" >&6; } -if test "x$ac_cv_func_setsockopt" = x""yes; then - : -else - { $as_echo "$as_me:$LINENO: checking for setsockopt in -lsocket" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 $as_echo_n "checking for setsockopt in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_setsockopt+set}" = set; then +if ${ac_cv_lib_socket_setsockopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -6120,43 +5232,18 @@ return setsockopt (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_socket_setsockopt=no + ac_cv_lib_socket_setsockopt=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_setsockopt" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 $as_echo "$ac_cv_lib_socket_setsockopt" >&6; } -if test "x$ac_cv_lib_socket_setsockopt" = x""yes; then +if test "x$ac_cv_lib_socket_setsockopt" = xyes; then : LIBS="$LIBS -lsocket" else tcl_checkBoth=1 @@ -6168,198 +5255,26 @@ fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" - { $as_echo "$as_me:$LINENO: checking for accept" >&5 -$as_echo_n "checking for accept... " >&6; } -if test "${ac_cv_func_accept+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define accept to an innocuous variant, in case declares accept. - For example, HP-UX 11i declares gettimeofday. */ -#define accept innocuous_accept - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char accept (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef accept - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char accept (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_accept || defined __stub___accept -choke me -#endif - -int -main () -{ -return accept (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then - ac_cv_func_accept=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_accept=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_accept" >&5 -$as_echo "$ac_cv_func_accept" >&6; } -if test "x$ac_cv_func_accept" = x""yes; then + ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" +if test "x$ac_cv_func_accept" = xyes; then : tcl_checkNsl=0 else LIBS=$tk_oldLibs fi fi - { $as_echo "$as_me:$LINENO: checking for gethostbyname" >&5 -$as_echo_n "checking for gethostbyname... " >&6; } -if test "${ac_cv_func_gethostbyname+set}" = set; then - $as_echo_n "(cached) " >&6 + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = xyes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define gethostbyname to an innocuous variant, in case declares gethostbyname. - For example, HP-UX 11i declares gettimeofday. */ -#define gethostbyname innocuous_gethostbyname - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostbyname (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gethostbyname - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_gethostbyname || defined __stub___gethostbyname -choke me -#endif - -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then - ac_cv_func_gethostbyname=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_gethostbyname=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 -$as_echo "$ac_cv_func_gethostbyname" >&6; } -if test "x$ac_cv_func_gethostbyname" = x""yes; then - : -else - { $as_echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then +if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -6377,43 +5292,18 @@ return gethostbyname (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_nsl_gethostbyname=no + ac_cv_lib_nsl_gethostbyname=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then +if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : LIBS="$LIBS -lnsl" fi @@ -6428,17 +5318,13 @@ fi - { $as_echo "$as_me:$LINENO: checking dirent.h" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dirent.h" >&5 $as_echo_n "checking dirent.h... " >&6; } -if test "${tcl_cv_dirent_h+set}" = set; then +if ${tcl_cv_dirent_h+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -6468,787 +5354,108 @@ closedir(d); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_dirent_h=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_dirent_h=no + tcl_cv_dirent_h=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_dirent_h" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_dirent_h" >&5 $as_echo "$tcl_cv_dirent_h" >&6; } if test $tcl_cv_dirent_h = no; then -cat >>confdefs.h <<\_ACEOF -#define NO_DIRENT_H 1 -_ACEOF +$as_echo "#define NO_DIRENT_H 1" >>confdefs.h fi # TEA specific: - if test "${ac_cv_header_errno_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for errno.h" >&5 -$as_echo_n "checking for errno.h... " >&6; } -if test "${ac_cv_header_errno_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5 -$as_echo "$ac_cv_header_errno_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking errno.h usability" >&5 -$as_echo_n "checking errno.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking errno.h presence" >&5 -$as_echo_n "checking errno.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: errno.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: errno.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: errno.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: errno.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: errno.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: errno.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: errno.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: errno.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: errno.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: errno.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: errno.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: errno.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for errno.h" >&5 -$as_echo_n "checking for errno.h... " >&6; } -if test "${ac_cv_header_errno_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_errno_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5 -$as_echo "$ac_cv_header_errno_h" >&6; } - -fi -if test "x$ac_cv_header_errno_h" = x""yes; then - : -else - -cat >>confdefs.h <<\_ACEOF -#define NO_ERRNO_H 1 -_ACEOF - -fi - - - if test "${ac_cv_header_float_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for float.h" >&5 -$as_echo_n "checking for float.h... " >&6; } -if test "${ac_cv_header_float_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5 -$as_echo "$ac_cv_header_float_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking float.h usability" >&5 -$as_echo_n "checking float.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking float.h presence" >&5 -$as_echo_n "checking float.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: float.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: float.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: float.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: float.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: float.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: float.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: float.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: float.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: float.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: float.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: float.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: float.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: float.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: float.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for float.h" >&5 -$as_echo_n "checking for float.h... " >&6; } -if test "${ac_cv_header_float_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_float_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5 -$as_echo "$ac_cv_header_float_h" >&6; } - -fi -if test "x$ac_cv_header_float_h" = x""yes; then - : -else - -cat >>confdefs.h <<\_ACEOF -#define NO_FLOAT_H 1 -_ACEOF - -fi - - - if test "${ac_cv_header_values_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for values.h" >&5 -$as_echo_n "checking for values.h... " >&6; } -if test "${ac_cv_header_values_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_values_h" >&5 -$as_echo "$ac_cv_header_values_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking values.h usability" >&5 -$as_echo_n "checking values.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking values.h presence" >&5 -$as_echo_n "checking values.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: values.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: values.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: values.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: values.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: values.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: values.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: values.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: values.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: values.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: values.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: values.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: values.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: values.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: values.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: values.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: values.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for values.h" >&5 -$as_echo_n "checking for values.h... " >&6; } -if test "${ac_cv_header_values_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_values_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_values_h" >&5 -$as_echo "$ac_cv_header_values_h" >&6; } - -fi -if test "x$ac_cv_header_values_h" = x""yes; then - : -else - -cat >>confdefs.h <<\_ACEOF -#define NO_VALUES_H 1 -_ACEOF - -fi - - - if test "${ac_cv_header_limits_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for limits.h" >&5 -$as_echo_n "checking for limits.h... " >&6; } -if test "${ac_cv_header_limits_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_limits_h" >&5 -$as_echo "$ac_cv_header_limits_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking limits.h usability" >&5 -$as_echo_n "checking limits.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking limits.h presence" >&5 -$as_echo_n "checking limits.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: limits.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: limits.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: limits.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: limits.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: limits.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: limits.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: limits.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: limits.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: limits.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: limits.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: limits.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: limits.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: limits.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: limits.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: limits.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: limits.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for limits.h" >&5 -$as_echo_n "checking for limits.h... " >&6; } -if test "${ac_cv_header_limits_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_limits_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_limits_h" >&5 -$as_echo "$ac_cv_header_limits_h" >&6; } - -fi -if test "x$ac_cv_header_limits_h" = x""yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_LIMITS_H 1 -_ACEOF + ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" +if test "x$ac_cv_header_errno_h" = xyes; then : else -cat >>confdefs.h <<\_ACEOF -#define NO_LIMITS_H 1 -_ACEOF +$as_echo "#define NO_ERRNO_H 1" >>confdefs.h fi - if test "${ac_cv_header_stdlib_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for stdlib.h" >&5 -$as_echo_n "checking for stdlib.h... " >&6; } -if test "${ac_cv_header_stdlib_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5 -$as_echo "$ac_cv_header_stdlib_h" >&6; } + ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default" +if test "x$ac_cv_header_float_h" = xyes; then : + else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking stdlib.h usability" >&5 -$as_echo_n "checking stdlib.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + +$as_echo "#define NO_FLOAT_H 1" >>confdefs.h + +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default" +if test "x$ac_cv_header_values_h" = xyes; then : + else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no +$as_echo "#define NO_VALUES_H 1" >>confdefs.h + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking stdlib.h presence" >&5 -$as_echo_n "checking stdlib.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes + ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" +if test "x$ac_cv_header_limits_h" = xyes; then : + +$as_echo "#define HAVE_LIMITS_H 1" >>confdefs.h + else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: stdlib.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: stdlib.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: stdlib.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: stdlib.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: stdlib.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: stdlib.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: stdlib.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: stdlib.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for stdlib.h" >&5 -$as_echo_n "checking for stdlib.h... " >&6; } -if test "${ac_cv_header_stdlib_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_stdlib_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5 -$as_echo "$ac_cv_header_stdlib_h" >&6; } +$as_echo "#define NO_LIMITS_H 1" >>confdefs.h fi -if test "x$ac_cv_header_stdlib_h" = x""yes; then + + + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "strtol" >/dev/null 2>&1; then - : + $EGREP "strtol" >/dev/null 2>&1; then : + else tcl_ok=0 fi rm -f conftest* - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "strtoul" >/dev/null 2>&1; then - : + $EGREP "strtoul" >/dev/null 2>&1; then : + else tcl_ok=0 fi rm -f conftest* - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "strtod" >/dev/null 2>&1; then - : + $EGREP "strtod" >/dev/null 2>&1; then : + else tcl_ok=0 fi @@ -7256,174 +5463,38 @@ rm -f conftest* if test $tcl_ok = 0; then -cat >>confdefs.h <<\_ACEOF -#define NO_STDLIB_H 1 -_ACEOF +$as_echo "#define NO_STDLIB_H 1" >>confdefs.h fi - if test "${ac_cv_header_string_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for string.h" >&5 -$as_echo_n "checking for string.h... " >&6; } -if test "${ac_cv_header_string_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5 -$as_echo "$ac_cv_header_string_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking string.h usability" >&5 -$as_echo_n "checking string.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking string.h presence" >&5 -$as_echo_n "checking string.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: string.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: string.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: string.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: string.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: string.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: string.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: string.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: string.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: string.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: string.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: string.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: string.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: string.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: string.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for string.h" >&5 -$as_echo_n "checking for string.h... " >&6; } -if test "${ac_cv_header_string_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_string_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5 -$as_echo "$ac_cv_header_string_h" >&6; } - -fi -if test "x$ac_cv_header_string_h" = x""yes; then + ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" +if test "x$ac_cv_header_string_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "strstr" >/dev/null 2>&1; then - : + $EGREP "strstr" >/dev/null 2>&1; then : + else tcl_ok=0 fi rm -f conftest* - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "strerror" >/dev/null 2>&1; then - : + $EGREP "strerror" >/dev/null 2>&1; then : + else tcl_ok=0 fi @@ -7435,430 +5506,38 @@ rm -f conftest* if test $tcl_ok = 0; then -cat >>confdefs.h <<\_ACEOF -#define NO_STRING_H 1 -_ACEOF +$as_echo "#define NO_STRING_H 1" >>confdefs.h fi - if test "${ac_cv_header_sys_wait_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for sys/wait.h" >&5 -$as_echo_n "checking for sys/wait.h... " >&6; } -if test "${ac_cv_header_sys_wait_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 -$as_echo "$ac_cv_header_sys_wait_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking sys/wait.h usability" >&5 -$as_echo_n "checking sys/wait.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_wait_h" = xyes; then : - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking sys/wait.h presence" >&5 -$as_echo_n "checking sys/wait.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: sys/wait.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: sys/wait.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for sys/wait.h" >&5 -$as_echo_n "checking for sys/wait.h... " >&6; } -if test "${ac_cv_header_sys_wait_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_sys_wait_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 -$as_echo "$ac_cv_header_sys_wait_h" >&6; } - -fi -if test "x$ac_cv_header_sys_wait_h" = x""yes; then - : else -cat >>confdefs.h <<\_ACEOF -#define NO_SYS_WAIT_H 1 -_ACEOF +$as_echo "#define NO_SYS_WAIT_H 1" >>confdefs.h fi - if test "${ac_cv_header_dlfcn_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for dlfcn.h" >&5 -$as_echo_n "checking for dlfcn.h... " >&6; } -if test "${ac_cv_header_dlfcn_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5 -$as_echo "$ac_cv_header_dlfcn_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking dlfcn.h usability" >&5 -$as_echo_n "checking dlfcn.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking dlfcn.h presence" >&5 -$as_echo_n "checking dlfcn.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for dlfcn.h" >&5 -$as_echo_n "checking for dlfcn.h... " >&6; } -if test "${ac_cv_header_dlfcn_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_dlfcn_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5 -$as_echo "$ac_cv_header_dlfcn_h" >&6; } - -fi -if test "x$ac_cv_header_dlfcn_h" = x""yes; then - : else -cat >>confdefs.h <<\_ACEOF -#define NO_DLFCN_H 1 -_ACEOF +$as_echo "#define NO_DLFCN_H 1" >>confdefs.h fi # OS/390 lacks sys/param.h (and doesn't need it, by chance). - -for ac_header in sys/param.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then + for ac_header in sys/param.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_PARAM_H 1 _ACEOF fi @@ -7888,6 +5567,8 @@ done ../backend/2of5.c ../backend/auspost.c ../backend/aztec.c + ../backend/bmp.c + ../backend/codablock.c ../backend/code128.c ../backend/code16k.c ../backend/code1.c @@ -7897,25 +5578,40 @@ done ../backend/composite.c ../backend/dllversion.c ../backend/dmatrix.c + ../backend/dotcode.c + ../backend/eci.c + ../backend/emf.c + ../backend/gb18030.c + ../backend/gb2312.c + ../backend/general_field.c + ../backend/gif.c ../backend/gridmtx.c ../backend/gs1.c + ../backend/hanxin.c ../backend/imail.c ../backend/large.c ../backend/library.c + ../backend/mailmark.c ../backend/maxicode.c ../backend/medical.c + ../backend/output.c + ../backend/pcx.c ../backend/pdf417.c ../backend/plessey.c ../backend/png.c ../backend/postal.c ../backend/ps.c ../backend/qr.c + ../backend/raster.c ../backend/reedsol.c - ../backend/render.c ../backend/rss.c + ../backend/sjis.c ../backend/svg.c ../backend/telepen.c + ../backend/tif.c + ../backend/ultra.c ../backend/upcean.c + ../backend/vector.c zint.c " for i in $vars; do @@ -7933,9 +5629,7 @@ done -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" -a ! -f "${srcdir}/sdl/$i" \ ; then - { { $as_echo "$as_me:$LINENO: error: could not find source file '$i'" >&5 -$as_echo "$as_me: error: could not find source file '$i'" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "could not find source file '$i'" "$LINENO" 5 fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir @@ -7965,9 +5659,7 @@ $as_echo "$as_me: error: could not find source file '$i'" >&2;} -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" -a ! -f "${srcdir}/sdl/$i" \ ; then - { { $as_echo "$as_me:$LINENO: error: could not find stub source file '$i'" >&5 -$as_echo "$as_me: error: could not find stub source file '$i'" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5 fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir @@ -7988,9 +5680,7 @@ $as_echo "$as_me: error: could not find stub source file '$i'" >&2;} for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then - { { $as_echo "$as_me:$LINENO: error: could not find tcl source file '${srcdir}/$i'" >&5 -$as_echo "$as_me: error: could not find tcl source file '${srcdir}/$i'" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "could not find tcl source file '${srcdir}/$i'" "$LINENO" 5 fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done @@ -8007,17 +5697,17 @@ $as_echo "$as_me: error: could not find tcl source file '${srcdir}/$i'" >&2;} #-------------------------------------------------------------------- - { $as_echo "$as_me:$LINENO: checking for Tcl public headers" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl public headers" >&5 $as_echo_n "checking for Tcl public headers... " >&6; } # Check whether --with-tclinclude was given. -if test "${with_tclinclude+set}" = set; then +if test "${with_tclinclude+set}" = set; then : withval=$with_tclinclude; with_tclinclude=${withval} fi - if test "${ac_cv_c_tclh+set}" = set; then + if ${ac_cv_c_tclh+:} false; then : $as_echo_n "(cached) " >&6 else @@ -8027,9 +5717,7 @@ else if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else - { { $as_echo "$as_me:$LINENO: error: ${with_tclinclude} directory does not contain tcl.h" >&5 -$as_echo "$as_me: error: ${with_tclinclude} directory does not contain tcl.h" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "${with_tclinclude} directory does not contain tcl.h" "$LINENO" 5 fi else list="" @@ -8078,11 +5766,9 @@ fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then - { { $as_echo "$as_me:$LINENO: error: tcl.h not found. Please specify its location with --with-tclinclude" >&5 -$as_echo "$as_me: error: tcl.h not found. Please specify its location with --with-tclinclude" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "tcl.h not found. Please specify its location with --with-tclinclude" "$LINENO" 5 else - { $as_echo "$as_me:$LINENO: result: ${ac_cv_c_tclh}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tclh}" >&5 $as_echo "${ac_cv_c_tclh}" >&6; } fi @@ -8095,17 +5781,17 @@ $as_echo "${ac_cv_c_tclh}" >&6; } - { $as_echo "$as_me:$LINENO: checking for Tk public headers" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk public headers" >&5 $as_echo_n "checking for Tk public headers... " >&6; } # Check whether --with-tkinclude was given. -if test "${with_tkinclude+set}" = set; then +if test "${with_tkinclude+set}" = set; then : withval=$with_tkinclude; with_tkinclude=${withval} fi - if test "${ac_cv_c_tkh+set}" = set; then + if ${ac_cv_c_tkh+:} false; then : $as_echo_n "(cached) " >&6 else @@ -8115,9 +5801,7 @@ else if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else - { { $as_echo "$as_me:$LINENO: error: ${with_tkinclude} directory does not contain tk.h" >&5 -$as_echo "$as_me: error: ${with_tkinclude} directory does not contain tk.h" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "${with_tkinclude} directory does not contain tk.h" "$LINENO" 5 fi else list="" @@ -8169,11 +5853,9 @@ fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then - { { $as_echo "$as_me:$LINENO: error: tk.h not found. Please specify its location with --with-tkinclude" >&5 -$as_echo "$as_me: error: tk.h not found. Please specify its location with --with-tkinclude" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "tk.h not found. Please specify its location with --with-tkinclude" "$LINENO" 5 else - { $as_echo "$as_me:$LINENO: result: ${ac_cv_c_tkh}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tkh}" >&5 $as_echo "${ac_cv_c_tkh}" >&6; } fi @@ -8187,14 +5869,14 @@ $as_echo "${ac_cv_c_tkh}" >&6; } if test "${TEA_WINDOWINGSYSTEM}" != "x11" -o "${TEA_USE_SDL}" = "yes" ; then # On Windows and Aqua, we need the X compat headers - { $as_echo "$as_me:$LINENO: checking for X11 header files" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 header files" >&5 $as_echo_n "checking for X11 header files... " >&6; } if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" fi - { $as_echo "$as_me:$LINENO: result: ${INCLUDE_DIR_NATIVE}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${INCLUDE_DIR_NATIVE}" >&5 $as_echo "${INCLUDE_DIR_NATIVE}" >&6; } fi @@ -8232,7 +5914,7 @@ $as_echo "${INCLUDE_DIR_NATIVE}" >&6; } # Check whether --enable-threads was given. -if test "${enable_threads+set}" = set; then +if test "${enable_threads+set}" = set; then : enableval=$enable_threads; tcl_ok=$enableval else tcl_ok=yes @@ -8255,39 +5937,27 @@ fi # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention -cat >>confdefs.h <<\_ACEOF -#define USE_THREAD_ALLOC 1 -_ACEOF +$as_echo "#define USE_THREAD_ALLOC 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define _REENTRANT 1 -_ACEOF +$as_echo "#define _REENTRANT 1" >>confdefs.h if test "`uname -s`" = "SunOS" ; then -cat >>confdefs.h <<\_ACEOF -#define _POSIX_PTHREAD_SEMANTICS 1 -_ACEOF +$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h fi -cat >>confdefs.h <<\_ACEOF -#define _THREAD_SAFE 1 -_ACEOF +$as_echo "#define _THREAD_SAFE 1" >>confdefs.h - { $as_echo "$as_me:$LINENO: checking for pthread_mutex_init in -lpthread" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthread... " >&6; } -if test "${ac_cv_lib_pthread_pthread_mutex_init+set}" = set; then +if ${ac_cv_lib_pthread_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8305,43 +5975,18 @@ return pthread_mutex_init (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_mutex_init=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_pthread_pthread_mutex_init=no + ac_cv_lib_pthread_pthread_mutex_init=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_pthread_pthread_mutex_init" = x""yes; then +if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no @@ -8353,18 +5998,14 @@ fi # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] - { $as_echo "$as_me:$LINENO: checking for __pthread_mutex_init in -lpthread" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for __pthread_mutex_init in -lpthread... " >&6; } -if test "${ac_cv_lib_pthread___pthread_mutex_init+set}" = set; then +if ${ac_cv_lib_pthread___pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8382,43 +6023,18 @@ return __pthread_mutex_init (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread___pthread_mutex_init=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_pthread___pthread_mutex_init=no + ac_cv_lib_pthread___pthread_mutex_init=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread___pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_pthread___pthread_mutex_init" = x""yes; then +if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no @@ -8430,18 +6046,14 @@ fi # The space is needed THREADS_LIBS=" -lpthread" else - { $as_echo "$as_me:$LINENO: checking for pthread_mutex_init in -lpthreads" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthreads... " >&6; } -if test "${ac_cv_lib_pthreads_pthread_mutex_init+set}" = set; then +if ${ac_cv_lib_pthreads_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthreads $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8459,43 +6071,18 @@ return pthread_mutex_init (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthreads_pthread_mutex_init=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_pthreads_pthread_mutex_init=no + ac_cv_lib_pthreads_pthread_mutex_init=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = x""yes; then +if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no @@ -8505,18 +6092,14 @@ fi # The space is needed THREADS_LIBS=" -lpthreads" else - { $as_echo "$as_me:$LINENO: checking for pthread_mutex_init in -lc" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5 $as_echo_n "checking for pthread_mutex_init in -lc... " >&6; } -if test "${ac_cv_lib_c_pthread_mutex_init+set}" = set; then +if ${ac_cv_lib_c_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8534,61 +6117,32 @@ return pthread_mutex_init (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_pthread_mutex_init=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_c_pthread_mutex_init=no + ac_cv_lib_c_pthread_mutex_init=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_c_pthread_mutex_init" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_c_pthread_mutex_init" = x""yes; then +if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then - { $as_echo "$as_me:$LINENO: checking for pthread_mutex_init in -lc_r" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5 $as_echo_n "checking for pthread_mutex_init in -lc_r... " >&6; } -if test "${ac_cv_lib_c_r_pthread_mutex_init+set}" = set; then +if ${ac_cv_lib_c_r_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8606,43 +6160,18 @@ return pthread_mutex_init (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_mutex_init=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_c_r_pthread_mutex_init=no + ac_cv_lib_c_r_pthread_mutex_init=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_r_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_c_r_pthread_mutex_init" = x""yes; then +if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no @@ -8653,7 +6182,7 @@ fi THREADS_LIBS=" -pthread" else TCL_THREADS=0 - { $as_echo "$as_me:$LINENO: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5 $as_echo "$as_me: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&2;} fi fi @@ -8664,18 +6193,16 @@ $as_echo "$as_me: WARNING: Do not know how to find pthread lib on your system - TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output - { $as_echo "$as_me:$LINENO: checking for building with threads" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for building with threads" >&5 $as_echo_n "checking for building with threads... " >&6; } if test "${TCL_THREADS}" = 1; then -cat >>confdefs.h <<\_ACEOF -#define TCL_THREADS 1 -_ACEOF +$as_echo "#define TCL_THREADS 1" >>confdefs.h - { $as_echo "$as_me:$LINENO: result: yes (default)" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5 $as_echo "yes (default)" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # TCL_THREADS sanity checking. See if our request for building with @@ -8683,7 +6210,7 @@ $as_echo "no" >&6; } case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then - { $as_echo "$as_me:$LINENO: WARNING: + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&5 $as_echo "$as_me: WARNING: @@ -8693,7 +6220,7 @@ $as_echo "$as_me: WARNING: ;; *) if test "${TCL_THREADS}" = "1"; then - { $as_echo "$as_me:$LINENO: WARNING: + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&5 @@ -8713,10 +6240,10 @@ $as_echo "$as_me: WARNING: #-------------------------------------------------------------------- - { $as_echo "$as_me:$LINENO: checking how to build libraries" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5 $as_echo_n "checking how to build libraries... " >&6; } # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then +if test "${enable_shared+set}" = set; then : enableval=$enable_shared; tcl_ok=$enableval else tcl_ok=yes @@ -8731,17 +6258,15 @@ fi fi if test "$tcl_ok" = "yes" ; then - { $as_echo "$as_me:$LINENO: result: shared" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: shared" >&5 $as_echo "shared" >&6; } SHARED_BUILD=1 else - { $as_echo "$as_me:$LINENO: result: static" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 $as_echo "static" >&6; } SHARED_BUILD=0 -cat >>confdefs.h <<\_ACEOF -#define STATIC_BUILD 1 -_ACEOF +$as_echo "#define STATIC_BUILD 1" >>confdefs.h fi @@ -8756,9 +6281,9 @@ _ACEOF if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then +if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then @@ -8769,24 +6294,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -8796,9 +6321,9 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then @@ -8809,24 +6334,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -8835,7 +6360,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -8850,52 +6375,47 @@ fi # Step 0.a: Enable 64 bit support? - { $as_echo "$as_me:$LINENO: checking if 64bit support is requested" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 $as_echo_n "checking if 64bit support is requested... " >&6; } # Check whether --enable-64bit was given. -if test "${enable_64bit+set}" = set; then +if test "${enable_64bit+set}" = set; then : enableval=$enable_64bit; do64bit=$enableval else do64bit=no fi - { $as_echo "$as_me:$LINENO: result: $do64bit" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 $as_echo "$do64bit" >&6; } # Step 0.b: Enable Solaris 64 bit VIS support? - { $as_echo "$as_me:$LINENO: checking if 64bit Sparc VIS support is requested" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5 $as_echo_n "checking if 64bit Sparc VIS support is requested... " >&6; } # Check whether --enable-64bit-vis was given. -if test "${enable_64bit_vis+set}" = set; then +if test "${enable_64bit_vis+set}" = set; then : enableval=$enable_64bit_vis; do64bitVIS=$enableval else do64bitVIS=no fi - { $as_echo "$as_me:$LINENO: result: $do64bitVIS" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5 $as_echo "$do64bitVIS" >&6; } # Force 64bit on with VIS - if test "$do64bitVIS" = "yes"; then + if test "$do64bitVIS" = "yes"; then : do64bit=yes fi - # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. - { $as_echo "$as_me:$LINENO: checking if compiler supports visibility \"hidden\"" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility \"hidden\"" >&5 $as_echo_n "checking if compiler supports visibility \"hidden\"... " >&6; } -if test "${tcl_cv_cc_visibility_hidden+set}" = set; then +if ${tcl_cv_cc_visibility_hidden+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) void f(void); @@ -8908,98 +6428,67 @@ f(); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_visibility_hidden=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_cc_visibility_hidden=no + tcl_cv_cc_visibility_hidden=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_cc_visibility_hidden" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 $as_echo "$tcl_cv_cc_visibility_hidden" >&6; } - if test $tcl_cv_cc_visibility_hidden = yes; then + if test $tcl_cv_cc_visibility_hidden = yes; then : -cat >>confdefs.h <<\_ACEOF -#define MODULE_SCOPE extern __attribute__((__visibility__("hidden"))) -_ACEOF +$as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define HAVE_HIDDEN 1 -_ACEOF +$as_echo "#define HAVE_HIDDEN 1" >>confdefs.h fi - # Step 0.d: Disable -rpath support? - { $as_echo "$as_me:$LINENO: checking if rpath support is requested" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 $as_echo_n "checking if rpath support is requested... " >&6; } # Check whether --enable-rpath was given. -if test "${enable_rpath+set}" = set; then +if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; doRpath=$enableval else doRpath=yes fi - { $as_echo "$as_me:$LINENO: result: $doRpath" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doRpath" >&5 $as_echo "$doRpath" >&6; } # TEA specific: Cross-compiling options for Windows/CE builds? - if test "${TEA_PLATFORM}" = windows; then + if test "${TEA_PLATFORM}" = windows; then : - { $as_echo "$as_me:$LINENO: checking if Windows/CE build is requested" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows/CE build is requested" >&5 $as_echo_n "checking if Windows/CE build is requested... " >&6; } # Check whether --enable-wince was given. -if test "${enable_wince+set}" = set; then +if test "${enable_wince+set}" = set; then : enableval=$enable_wince; doWince=$enableval else doWince=no fi - { $as_echo "$as_me:$LINENO: result: $doWince" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 $as_echo "$doWince" >&6; } fi - # Set the variable "system" to hold the name and version number # for the system. - { $as_echo "$as_me:$LINENO: checking system version" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } -if test "${tcl_cv_sys_version+set}" = set; then +if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else @@ -9009,7 +6498,7 @@ else else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then - { $as_echo "$as_me:$LINENO: WARNING: can't find uname command" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else @@ -9020,7 +6509,7 @@ $as_echo "$as_me: WARNING: can't find uname command" >&2;} fi fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_sys_version" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version @@ -9046,7 +6535,7 @@ $as_echo "$tcl_cv_sys_version" >&6; } ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g - if test "$GCC" = yes; then + if test "$GCC" = yes; then : CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" @@ -9057,14 +6546,13 @@ else CFLAGS_WARNING="" fi - CC_OBJNAME="-o \$@" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then +if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then @@ -9075,24 +6563,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:$LINENO: result: $AR" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -9102,9 +6590,9 @@ if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -9115,24 +6603,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -9141,7 +6629,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -9153,10 +6641,9 @@ fi STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" - if test "x$SHLIB_VERSION" = x; then + if test "x$SHLIB_VERSION" = x; then : SHLIB_VERSION="1.0" fi - case $system in # TEA specific: windows) @@ -9183,13 +6670,13 @@ fi ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then - { $as_echo "$as_me:$LINENO: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 $as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: Ensure latest Platform SDK is installed" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5 $as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;} do64bit="no" else - { $as_echo "$as_me:$LINENO: result: Using 64-bit $MACHINE mode" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 $as_echo " Using 64-bit $MACHINE mode" >&6; } do64bit_ok="yes" fi @@ -9197,14 +6684,10 @@ $as_echo " Using 64-bit $MACHINE mode" >&6; } if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then - { { $as_echo "$as_me:$LINENO: error: Windows/CE and 64-bit builds incompatible" >&5 -$as_echo "$as_me: error: Windows/CE and 64-bit builds incompatible" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "Windows/CE and 64-bit builds incompatible" "$LINENO" 5 fi if test "$GCC" = "yes" ; then - { { $as_echo "$as_me:$LINENO: error: Windows/CE and GCC builds incompatible" >&5 -$as_echo "$as_me: error: Windows/CE and GCC builds incompatible" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "Windows/CE and GCC builds incompatible" "$LINENO" 5 fi # First, look for one uninstalled. @@ -9215,13 +6698,13 @@ $as_echo "$as_me: error: Windows/CE and GCC builds incompatible" >&2;} no_celib=true # Check whether --with-celib was given. -if test "${with_celib+set}" = set; then +if test "${with_celib+set}" = set; then : withval=$with_celib; with_celibconfig=${withval} fi - { $as_echo "$as_me:$LINENO: checking for Windows/CE celib directory" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows/CE celib directory" >&5 $as_echo_n "checking for Windows/CE celib directory... " >&6; } - if test "${ac_cv_c_celibconfig+set}" = set; then + if ${ac_cv_c_celibconfig+:} false; then : $as_echo_n "(cached) " >&6 else @@ -9230,9 +6713,7 @@ else if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else - { { $as_echo "$as_me:$LINENO: error: ${with_celibconfig} directory doesn't contain inc directory" >&5 -$as_echo "$as_me: error: ${with_celibconfig} directory doesn't contain inc directory" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "${with_celibconfig} directory doesn't contain inc directory" "$LINENO" 5 fi fi @@ -9258,14 +6739,12 @@ $as_echo "$as_me: error: ${with_celibconfig} directory doesn't contain inc direc fi if test x"${ac_cv_c_celibconfig}" = x ; then - { { $as_echo "$as_me:$LINENO: error: Cannot find celib support library directory" >&5 -$as_echo "$as_me: error: Cannot find celib support library directory" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "Cannot find celib support library directory" "$LINENO" 5 else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` - { $as_echo "$as_me:$LINENO: result: found $CELIB_DIR" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $CELIB_DIR" >&5 $as_echo "found $CELIB_DIR" >&6; } fi fi @@ -9308,9 +6787,7 @@ $as_echo "found $CELIB_DIR" >&6; } SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then - { { $as_echo "$as_me:$LINENO: error: could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" >&5 -$as_echo "$as_me: error: could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" "$LINENO" 5 doWince="no" else # We could PATH_NOSPACE these, but that's not important, @@ -9404,9 +6881,9 @@ _ACEOF if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RC+set}" = set; then +if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then @@ -9417,24 +6894,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then - { $as_echo "$as_me:$LINENO: result: $RC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -9444,9 +6921,9 @@ if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 -{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RC+set}" = set; then +if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then @@ -9457,24 +6934,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" - $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then - { $as_echo "$as_me:$LINENO: result: $ac_ct_RC" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi @@ -9483,7 +6960,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -9500,16 +6977,12 @@ fi LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" - { $as_echo "$as_me:$LINENO: checking for cross-compile version of gcc" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5 $as_echo_n "checking for cross-compile version of gcc... " >&6; } -if test "${ac_cv_cross+set}" = set; then +if ${ac_cv_cross+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _WIN32 @@ -9524,36 +6997,15 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cross=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_cross=no + ac_cv_cross=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_cross" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5 $as_echo "$ac_cv_cross" >&6; } if test "$ac_cv_cross" = "yes"; then case "$do64bit" in @@ -9605,7 +7057,7 @@ $as_echo "$ac_cv_cross" >&6; } TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) - if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then + if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then : # AIX requires the _r compiler when gcc isn't being used case "${CC}" in @@ -9617,11 +7069,10 @@ $as_echo "$ac_cv_cross" >&6; } CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'` ;; esac - { $as_echo "$as_me:$LINENO: result: Using $CC for compiling with threads" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 $as_echo "Using $CC for compiling with threads" >&6; } fi - LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" @@ -9629,11 +7080,11 @@ fi LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker - if test "$do64bit" = yes; then + if test "$do64bit" = yes; then : - if test "$GCC" = yes; then + if test "$GCC" = yes; then : - { $as_echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC on $system" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} else @@ -9647,15 +7098,13 @@ else fi - fi - - if test "`uname -m`" = ia64; then + if test "`uname -m`" = ia64; then : # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" - if test "$GCC" = yes; then + if test "$GCC" = yes; then : CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' @@ -9664,12 +7113,11 @@ else CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi - LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' else - if test "$GCC" = yes; then + if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared -Wl,-bexpall' @@ -9679,13 +7127,11 @@ else LDFLAGS="$LDFLAGS -brtl" fi - SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi - ;; BeOS*) SHLIB_CFLAGS="-fPIC" @@ -9697,18 +7143,14 @@ fi # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- - { $as_echo "$as_me:$LINENO: checking for inet_ntoa in -lbind" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5 $as_echo_n "checking for inet_ntoa in -lbind... " >&6; } -if test "${ac_cv_lib_bind_inet_ntoa+set}" = set; then +if ${ac_cv_lib_bind_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbind $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -9726,43 +7168,18 @@ return inet_ntoa (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bind_inet_ntoa=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_bind_inet_ntoa=no + ac_cv_lib_bind_inet_ntoa=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bind_inet_ntoa" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 $as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; } -if test "x$ac_cv_lib_bind_inet_ntoa" = x""yes; then +if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then : LIBS="$LIBS -lbind -lsocket" fi @@ -9789,18 +7206,14 @@ fi SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' - { $as_echo "$as_me:$LINENO: checking for inet_ntoa in -lnetwork" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; } -if test "${ac_cv_lib_network_inet_ntoa+set}" = set; then +if ${ac_cv_lib_network_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetwork $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -9818,43 +7231,18 @@ return inet_ntoa (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_network_inet_ntoa=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_network_inet_ntoa=no + ac_cv_lib_network_inet_ntoa=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_network_inet_ntoa" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_inet_ntoa" >&5 $as_echo "$ac_cv_lib_network_inet_ntoa" >&6; } -if test "x$ac_cv_lib_network_inet_ntoa" = x""yes; then +if test "x$ac_cv_lib_network_inet_ntoa" = xyes; then : LIBS="$LIBS -lnetwork" fi @@ -9862,15 +7250,13 @@ fi HP-UX-*.11.*) # Use updated header definitions where possible -cat >>confdefs.h <<\_ACEOF -#define _XOPEN_SOURCE_EXTENDED 1 -_ACEOF +$as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library - if test "`uname -m`" = ia64; then + if test "`uname -m`" = ia64; then : SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions @@ -9883,19 +7269,14 @@ else SHLIB_SUFFIX=".sl" fi - - { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then +if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -9913,49 +7294,24 @@ return shl_load (); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_shl_load=no + ac_cv_lib_dld_shl_load=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : tcl_ok=yes else tcl_ok=no fi - if test "$tcl_ok" = yes; then + if test "$tcl_ok" = yes; then : LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' @@ -9963,8 +7319,7 @@ fi LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi - - if test "$GCC" = yes; then + if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} @@ -9979,26 +7334,24 @@ else fi - # Check to enable 64-bit flags for compiler/linker - if test "$do64bit" = "yes"; then + if test "$do64bit" = "yes"; then : - if test "$GCC" = yes; then + if test "$GCC" = yes; then : case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) - { $as_echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC on $system" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} ;; esac @@ -10011,20 +7364,17 @@ else fi - -fi - ;; +fi ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi - - if test "$GCC" = yes; then + if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" @@ -10043,26 +7393,24 @@ else LDFLAGS="$LDFLAGS -n32" fi - ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi - # Check to enable 64-bit flags for compiler/linker - if test "$do64bit" = yes; then + if test "$do64bit" = yes; then : - if test "$GCC" = yes; then + if test "$GCC" = yes; then : - { $as_echo "$as_me:$LINENO: WARNING: 64bit mode not supported by gcc" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} else @@ -10074,9 +7422,7 @@ else fi - fi - ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" @@ -10099,31 +7445,25 @@ fi else LDFLAGS="$LDFLAGS -Wl,--export-dynamic" fi - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - if test "`uname -m`" = "alpha"; then + if test "`uname -m`" = "alpha"; then : CFLAGS="$CFLAGS -mieee" fi + if test $do64bit = yes; then : - if test $do64bit = yes; then - - { $as_echo "$as_me:$LINENO: checking if compiler accepts -m64 flag" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -m64 flag" >&5 $as_echo_n "checking if compiler accepts -m64 flag... " >&6; } -if test "${tcl_cv_cc_m64+set}" = set; then +if ${tcl_cv_cc_m64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10134,63 +7474,35 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_m64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_cc_m64=no + tcl_cv_cc_m64=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_cc_m64" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_m64" >&5 $as_echo "$tcl_cv_cc_m64" >&6; } - if test $tcl_cv_cc_m64 = yes; then + if test $tcl_cv_cc_m64 = yes; then : CFLAGS="$CFLAGS -m64" do64bit_ok=yes fi - fi - # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. - if test x"${USE_COMPAT}" != x; then + if test x"${USE_COMPAT}" != x; then : CFLAGS="$CFLAGS -fno-inline" fi - ;; Lynx*) SHLIB_CFLAGS="-fPIC" @@ -10198,12 +7510,11 @@ fi CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi - ;; OpenBSD-*) arch=`arch -s` @@ -10217,11 +7528,10 @@ fi SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" @@ -10235,7 +7545,7 @@ fi CFLAGS_OPTIMIZE="-O2" ;; esac - if test "${TCL_THREADS}" = "1"; then + if test "${TCL_THREADS}" = "1"; then : # On OpenBSD: Compile with -pthread # Don't link with -lpthread @@ -10243,7 +7553,6 @@ fi CFLAGS="$CFLAGS -pthread" fi - # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots @@ -10254,13 +7563,12 @@ fi SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - if test "${TCL_THREADS}" = "1"; then + if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` @@ -10268,7 +7576,6 @@ fi LDFLAGS="$LDFLAGS -pthread" fi - ;; FreeBSD-*) # This configuration from FreeBSD Ports. @@ -10278,20 +7585,18 @@ fi TK_SHLIB_LD_EXTRAS="-Wl,-soname,\$@" SHLIB_SUFFIX=".so" LDFLAGS="" - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi - - if test "${TCL_THREADS}" = "1"; then + if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS" fi - case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. @@ -10314,23 +7619,19 @@ fi CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`" - if test $do64bit = yes; then + if test $do64bit = yes; then : case `arch` in ppc) - { $as_echo "$as_me:$LINENO: checking if compiler accepts -arch ppc64 flag" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch ppc64 flag" >&5 $as_echo_n "checking if compiler accepts -arch ppc64 flag... " >&6; } -if test "${tcl_cv_cc_arch_ppc64+set}" = set; then +if ${tcl_cv_cc_arch_ppc64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10341,63 +7642,33 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_ppc64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_cc_arch_ppc64=no + tcl_cv_cc_arch_ppc64=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_cc_arch_ppc64" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_ppc64" >&5 $as_echo "$tcl_cv_cc_arch_ppc64" >&6; } - if test $tcl_cv_cc_arch_ppc64 = yes; then + if test $tcl_cv_cc_arch_ppc64 = yes; then : CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes -fi -;; +fi;; i386) - { $as_echo "$as_me:$LINENO: checking if compiler accepts -arch x86_64 flag" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch x86_64 flag" >&5 $as_echo_n "checking if compiler accepts -arch x86_64 flag... " >&6; } -if test "${tcl_cv_cc_arch_x86_64+set}" = set; then +if ${tcl_cv_cc_arch_x86_64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10408,51 +7679,25 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_x86_64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_cc_arch_x86_64=no + tcl_cv_cc_arch_x86_64=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_cc_arch_x86_64" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_x86_64" >&5 $as_echo "$tcl_cv_cc_arch_x86_64" >&6; } - if test $tcl_cv_cc_arch_x86_64 = yes; then + if test $tcl_cv_cc_arch_x86_64 = yes; then : CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes -fi -;; +fi;; *) - { $as_echo "$as_me:$LINENO: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5 $as_echo "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};; esac @@ -10460,29 +7705,23 @@ else # Check for combined 32-bit and 64-bit fat build if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ - && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then + && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then : fat_32_64=yes fi - fi - # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' - { $as_echo "$as_me:$LINENO: checking if ld accepts -single_module flag" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5 $as_echo_n "checking if ld accepts -single_module flag... " >&6; } -if test "${tcl_cv_ld_single_module+set}" = set; then +if ${tcl_cv_ld_single_module+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10493,73 +7732,42 @@ int i; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_single_module=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_ld_single_module=no + tcl_cv_ld_single_module=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_ld_single_module" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 $as_echo "$tcl_cv_ld_single_module" >&6; } - if test $tcl_cv_ld_single_module = yes; then + if test $tcl_cv_ld_single_module = yes; then : SHLIB_LD="${SHLIB_LD} -Wl,-single_module" fi - # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \ - "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then + "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then : LDFLAGS="$LDFLAGS -prebind" fi - LDFLAGS="$LDFLAGS -headerpad_max_install_names" - { $as_echo "$as_me:$LINENO: checking if ld accepts -search_paths_first flag" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5 $as_echo_n "checking if ld accepts -search_paths_first flag... " >&6; } -if test "${tcl_cv_ld_search_paths_first+set}" = set; then +if ${tcl_cv_ld_search_paths_first+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10570,71 +7778,42 @@ int i; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_search_paths_first=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_ld_search_paths_first=no + tcl_cv_ld_search_paths_first=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_ld_search_paths_first" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5 $as_echo "$tcl_cv_ld_search_paths_first" >&6; } - if test $tcl_cv_ld_search_paths_first = yes; then + if test $tcl_cv_ld_search_paths_first = yes; then : LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi - - if test "$tcl_cv_cc_visibility_hidden" != yes; then + if test "$tcl_cv_cc_visibility_hidden" != yes; then : -cat >>confdefs.h <<\_ACEOF -#define MODULE_SCOPE __private_extern__ -_ACEOF +$as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h tcl_cv_cc_visibility_hidden=yes fi - CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. - if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then + if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then : - if test "${TEA_WINDOWINGSYSTEM}" = x11; then + if test "${TEA_WINDOWINGSYSTEM}" = x11; then : - { $as_echo "$as_me:$LINENO: checking for 64-bit X11" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit X11" >&5 $as_echo_n "checking for 64-bit X11... " >&6; } -if test "${tcl_cv_lib_x11_64+set}" = set; then +if ${tcl_cv_lib_x11_64+:} false; then : $as_echo_n "(cached) " >&6 else @@ -10643,11 +7822,7 @@ else done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -10658,52 +7833,26 @@ XrmInitialize(); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_x11_64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_lib_x11_64=no + tcl_cv_lib_x11_64=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_lib_x11_64" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_x11_64" >&5 $as_echo "$tcl_cv_lib_x11_64" >&6; } fi + if test "${TEA_WINDOWINGSYSTEM}" = aqua; then : - if test "${TEA_WINDOWINGSYSTEM}" = aqua; then - - { $as_echo "$as_me:$LINENO: checking for 64-bit Tk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit Tk" >&5 $as_echo_n "checking for 64-bit Tk... " >&6; } -if test "${tcl_cv_lib_tk_64+set}" = set; then +if ${tcl_cv_lib_tk_64+:} false; then : $as_echo_n "(cached) " >&6 else @@ -10712,11 +7861,7 @@ else done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -10727,74 +7872,44 @@ Tk_InitStubs(NULL, "", 0); return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_tk_64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_lib_tk_64=no + tcl_cv_lib_tk_64=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_lib_tk_64" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_tk_64" >&5 $as_echo "$tcl_cv_lib_tk_64" >&6; } fi - # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. - if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then + if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then : - { $as_echo "$as_me:$LINENO: Removing 64-bit architectures from compiler & linker flags" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Removing 64-bit architectures from compiler & linker flags" >&5 $as_echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;} for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done fi - fi - ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy -cat >>confdefs.h <<\_ACEOF -#define _OE_SOCKETS 1 -_ACEOF +$as_echo "#define _OE_SOCKETS 1" >>confdefs.h ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" - if test "$SHARED_BUILD" = 1; then + if test "$SHARED_BUILD" = 1; then : SHLIB_LD='ld -shared -expect_unresolved "*"' @@ -10803,28 +7918,25 @@ else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi - SHLIB_SUFFIX=".so" - if test $doRpath = yes; then + if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi - - if test "$GCC" = yes; then + if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mieee" else CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" fi - # see pthread_intro(3) for pthread support on osf1, k.furukawa - if test "${TCL_THREADS}" = 1; then + if test "${TCL_THREADS}" = 1; then : CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` - if test "$GCC" = yes; then + if test "$GCC" = yes; then : LIBS="$LIBS -lpthread -lmach -lexc" @@ -10835,9 +7947,7 @@ else fi - fi - ;; QNX-6*) # QNX RTP @@ -10850,7 +7960,7 @@ fi LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) - if test "$GCC" = yes; then + if test "$GCC" = yes; then : SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" @@ -10861,7 +7971,6 @@ else LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi - SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" @@ -10875,19 +7984,15 @@ fi # won't define thread-safe library routines. -cat >>confdefs.h <<\_ACEOF -#define _REENTRANT 1 -_ACEOF +$as_echo "#define _REENTRANT 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define _POSIX_PTHREAD_SEMANTICS 1 -_ACEOF +$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" - if test "$GCC" = yes; then + if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' @@ -10900,36 +8005,31 @@ else LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi - ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. -cat >>confdefs.h <<\_ACEOF -#define _REENTRANT 1 -_ACEOF +$as_echo "#define _REENTRANT 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define _POSIX_PTHREAD_SEMANTICS 1 -_ACEOF +$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker - if test "$do64bit" = yes; then + if test "$do64bit" = yes; then : arch=`isainfo` - if test "$arch" = "sparcv9 sparc"; then + if test "$arch" = "sparcv9 sparc"; then : - if test "$GCC" = yes; then + if test "$GCC" = yes; then : - if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then + if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then : - { $as_echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} else @@ -10941,11 +8041,10 @@ else fi - else do64bit_ok=yes - if test "$do64bitVIS" = yes; then + if test "$do64bitVIS" = yes; then : CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" @@ -10956,17 +8055,15 @@ else LDFLAGS_ARCH="-xarch=v9" fi - # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" fi - else - if test "$arch" = "amd64 i386"; then + if test "$arch" = "amd64 i386"; then : - if test "$GCC" = yes; then + if test "$GCC" = yes; then : case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) @@ -10974,7 +8071,7 @@ else CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) - { $as_echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC on $system" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};; esac @@ -10992,27 +8089,23 @@ else fi - else - { $as_echo "$as_me:$LINENO: WARNING: 64bit mode not supported for $arch" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} fi - fi - fi - SHLIB_SUFFIX=".so" - if test "$GCC" = yes; then + if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - if test "$do64bit_ok" = yes; then + if test "$do64bit_ok" = yes; then : - if test "$arch" = "sparcv9 sparc"; then + if test "$arch" = "sparcv9 sparc"; then : # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. @@ -11025,20 +8118,17 @@ fi #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" else - if test "$arch" = "amd64 i386"; then + if test "$arch" = "amd64 i386"; then : # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" fi - fi - fi - else case $system in @@ -11052,7 +8142,6 @@ else LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi - ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" @@ -11061,19 +8150,15 @@ fi SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. - { $as_echo "$as_me:$LINENO: checking for ld accepts -Bexport flag" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 $as_echo_n "checking for ld accepts -Bexport flag... " >&6; } -if test "${tcl_cv_ld_Bexport+set}" = set; then +if ${tcl_cv_ld_Bexport+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -11084,63 +8169,36 @@ int i; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then +if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_Bexport=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_ld_Bexport=no + tcl_cv_ld_Bexport=no fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_ld_Bexport" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_Bexport" >&5 $as_echo "$tcl_cv_ld_Bexport" >&6; } - if test $tcl_cv_ld_Bexport = yes; then + if test $tcl_cv_ld_Bexport = yes; then : LDFLAGS="$LDFLAGS -Wl,-Bexport" fi - CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac - if test "$do64bit" = yes -a "$do64bit_ok" = no; then + if test "$do64bit" = yes -a "$do64bit_ok" = no; then : - { $as_echo "$as_me:$LINENO: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 $as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} fi - # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" @@ -11149,7 +8207,7 @@ fi # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. - if test "$GCC" = yes; then + if test "$GCC" = yes; then : case $system in AIX-*) ;; @@ -11164,45 +8222,35 @@ fi esac fi - - if test "$tcl_cv_cc_visibility_hidden" != yes; then + if test "$tcl_cv_cc_visibility_hidden" != yes; then : -cat >>confdefs.h <<\_ACEOF -#define MODULE_SCOPE extern -_ACEOF +$as_echo "#define MODULE_SCOPE extern" >>confdefs.h fi - - if test "$SHARED_LIB_SUFFIX" = ""; then + if test "$SHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi - - if test "$UNSHARED_LIB_SUFFIX" = ""; then + if test "$UNSHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi - if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then - { $as_echo "$as_me:$LINENO: checking for SEH support in compiler" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5 $as_echo_n "checking for SEH support in compiler... " >&6; } -if test "${tcl_cv_seh+set}" = set; then +if ${tcl_cv_seh+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : tcl_cv_seh=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN @@ -11221,51 +8269,22 @@ cat >>conftest.$ac_ext <<_ACEOF } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : tcl_cv_seh=yes else - $as_echo "$as_me: program exited with status $ac_status" >&5 -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -tcl_cv_seh=no + tcl_cv_seh=no fi -rm -rf conftest.dSYM -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_seh" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5 $as_echo "$tcl_cv_seh" >&6; } if test "$tcl_cv_seh" = "no" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_NO_SEH 1 -_ACEOF +$as_echo "#define HAVE_NO_SEH 1" >>confdefs.h fi @@ -11275,16 +8294,12 @@ _ACEOF # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # - { $as_echo "$as_me:$LINENO: checking for EXCEPTION_DISPOSITION support in include files" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5 $as_echo_n "checking for EXCEPTION_DISPOSITION support in include files... " >&6; } -if test "${tcl_cv_eh_disposition+set}" = set; then +if ${tcl_cv_eh_disposition+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define WIN32_LEAN_AND_MEAN @@ -11301,42 +8316,19 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_eh_disposition=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_eh_disposition=no + tcl_cv_eh_disposition=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_eh_disposition" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5 $as_echo "$tcl_cv_eh_disposition" >&6; } if test "$tcl_cv_eh_disposition" = "no" ; then -cat >>confdefs.h <<\_ACEOF -#define EXCEPTION_DISPOSITION int -_ACEOF +$as_echo "#define EXCEPTION_DISPOSITION int" >>confdefs.h fi @@ -11344,16 +8336,12 @@ _ACEOF # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. - { $as_echo "$as_me:$LINENO: checking for winnt.h that ignores VOID define" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winnt.h that ignores VOID define" >&5 $as_echo_n "checking for winnt.h that ignores VOID define... " >&6; } -if test "${tcl_cv_winnt_ignore_void+set}" = set; then +if ${tcl_cv_winnt_ignore_void+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define VOID void @@ -11373,42 +8361,19 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_winnt_ignore_void=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_winnt_ignore_void=no + tcl_cv_winnt_ignore_void=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_winnt_ignore_void" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_winnt_ignore_void" >&5 $as_echo "$tcl_cv_winnt_ignore_void" >&6; } if test "$tcl_cv_winnt_ignore_void" = "yes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_WINNT_IGNORE_VOID 1 -_ACEOF +$as_echo "#define HAVE_WINNT_IGNORE_VOID 1" >>confdefs.h fi fi @@ -11417,16 +8382,12 @@ _ACEOF # This is used to stop gcc from printing a compiler # warning when initializing a union member. - { $as_echo "$as_me:$LINENO: checking for cast to union support" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 $as_echo_n "checking for cast to union support... " >&6; } -if test "${tcl_cv_cast_to_union+set}" = set; then +if ${tcl_cv_cast_to_union+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -11440,42 +8401,19 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cast_to_union=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_cast_to_union=no + tcl_cv_cast_to_union=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_cast_to_union" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 $as_echo "$tcl_cv_cast_to_union" >&6; } if test "$tcl_cv_cast_to_union" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_CAST_TO_UNION 1 -_ACEOF +$as_echo "#define HAVE_CAST_TO_UNION 1" >>confdefs.h fi @@ -11495,18 +8433,14 @@ _ACEOF # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary - { $as_echo "$as_me:$LINENO: checking for required early compiler flags" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5 $as_echo_n "checking for required early compiler flags... " >&6; } tcl_flags="" - if test "${tcl_cv_flag__isoc99_source+set}" = set; then + if ${tcl_cv_flag__isoc99_source+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -11517,34 +8451,10 @@ char *p = (char *)strtoll; char *q = (char *)strtoull; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=no else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _ISOC99_SOURCE 1 #include @@ -11556,56 +8466,28 @@ char *p = (char *)strtoll; char *q = (char *)strtoull; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_flag__isoc99_source=no + tcl_cv_flag__isoc99_source=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define _ISOC99_SOURCE 1 -_ACEOF +$as_echo "#define _ISOC99_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _ISOC99_SOURCE" fi - if test "${tcl_cv_flag__largefile64_source+set}" = set; then + if ${tcl_cv_flag__largefile64_source+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -11616,34 +8498,10 @@ struct stat64 buf; int i = stat64("/", &buf); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=no else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE64_SOURCE 1 #include @@ -11655,56 +8513,28 @@ struct stat64 buf; int i = stat64("/", &buf); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_flag__largefile64_source=no + tcl_cv_flag__largefile64_source=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define _LARGEFILE64_SOURCE 1 -_ACEOF +$as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" fi - if test "${tcl_cv_flag__largefile_source64+set}" = set; then + if ${tcl_cv_flag__largefile_source64+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -11715,34 +8545,10 @@ char *p = (char *)open64; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=no else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE64 1 #include @@ -11754,69 +8560,41 @@ char *p = (char *)open64; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_flag__largefile_source64=no + tcl_cv_flag__largefile_source64=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile_source64}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define _LARGEFILE_SOURCE64 1 -_ACEOF +$as_echo "#define _LARGEFILE_SOURCE64 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE_SOURCE64" fi if test "x${tcl_flags}" = "x" ; then - { $as_echo "$as_me:$LINENO: result: none" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } else - { $as_echo "$as_me:$LINENO: result: ${tcl_flags}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5 $as_echo "${tcl_flags}" >&6; } fi - { $as_echo "$as_me:$LINENO: checking for 64-bit integer type" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit integer type" >&5 $as_echo_n "checking for 64-bit integer type... " >&6; } - if test "${tcl_cv_type_64bit+set}" = set; then + if ${tcl_cv_type_64bit+:} false; then : $as_echo_n "(cached) " >&6 else tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -11827,41 +8605,16 @@ __int64 value = (__int64) 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_type_64bit=__int64 else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_type_64bit="long long" + tcl_type_64bit="long long" fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -11874,48 +8627,23 @@ switch (0) { return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_64bit=${tcl_type_64bit} -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "${tcl_cv_type_64bit}" = none ; then -cat >>confdefs.h <<\_ACEOF -#define TCL_WIDE_INT_IS_LONG 1 -_ACEOF +$as_echo "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h - { $as_echo "$as_me:$LINENO: result: using long" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using long" >&5 $as_echo "using long" >&6; } elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* - { $as_echo "$as_me:$LINENO: result: using Tcl header defaults" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using Tcl header defaults" >&5 $as_echo "using Tcl header defaults" >&6; } else @@ -11923,21 +8651,17 @@ cat >>confdefs.h <<_ACEOF #define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} _ACEOF - { $as_echo "$as_me:$LINENO: result: ${tcl_cv_type_64bit}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_64bit}" >&5 $as_echo "${tcl_cv_type_64bit}" >&6; } # Now check for auxiliary declarations - { $as_echo "$as_me:$LINENO: checking for struct dirent64" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5 $as_echo_n "checking for struct dirent64... " >&6; } -if test "${tcl_cv_struct_dirent64+set}" = set; then +if ${tcl_cv_struct_dirent64+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -11949,55 +8673,28 @@ struct dirent64 p; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_dirent64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_struct_dirent64=no + tcl_cv_struct_dirent64=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_struct_dirent64" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_dirent64" >&5 $as_echo "$tcl_cv_struct_dirent64" >&6; } if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRUCT_DIRENT64 1 -_ACEOF +$as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h fi - { $as_echo "$as_me:$LINENO: checking for struct stat64" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5 $as_echo_n "checking for struct stat64... " >&6; } -if test "${tcl_cv_struct_stat64+set}" = set; then +if ${tcl_cv_struct_stat64+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -12009,139 +8706,26 @@ struct stat64 p; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_stat64=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_struct_stat64=no + tcl_cv_struct_stat64=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:$LINENO: result: $tcl_cv_struct_stat64" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_stat64" >&5 $as_echo "$tcl_cv_struct_stat64" >&6; } if test "x${tcl_cv_struct_stat64}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRUCT_STAT64 1 -_ACEOF +$as_echo "#define HAVE_STRUCT_STAT64 1" >>confdefs.h fi - - -for ac_func in open64 lseek64 -do -as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 -$as_echo_n "checking for $ac_func... " >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then - eval "$as_ac_var=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then + for ac_func in open64 lseek64 +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF @@ -12149,17 +8733,13 @@ _ACEOF fi done - { $as_echo "$as_me:$LINENO: checking for off64_t" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5 $as_echo_n "checking for off64_t... " >&6; } - if test "${tcl_cv_type_off64_t+set}" = set; then + if ${tcl_cv_type_off64_t+:} false; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -12171,32 +8751,11 @@ off64_t offset; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_off64_t=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tcl_cv_type_off64_t=no + tcl_cv_type_off64_t=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -12204,14 +8763,12 @@ fi test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TYPE_OFF64_T 1 -_ACEOF +$as_echo "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h - { $as_echo "$as_me:$LINENO: result: yes" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi @@ -12225,10 +8782,10 @@ $as_echo "no" >&6; } - { $as_echo "$as_me:$LINENO: checking for build with symbols" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 $as_echo_n "checking for build with symbols... " >&6; } # Check whether --enable-symbols was given. -if test "${enable_symbols+set}" = set; then +if test "${enable_symbols+set}" = set; then : enableval=$enable_symbols; tcl_ok=$enableval else tcl_ok=no @@ -12238,13 +8795,13 @@ fi if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" - { $as_echo "$as_me:$LINENO: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then - { $as_echo "$as_me:$LINENO: result: yes (standard debugging)" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 $as_echo "yes (standard debugging)" >&6; } fi fi @@ -12258,18 +8815,16 @@ $as_echo "yes (standard debugging)" >&6; } if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then -cat >>confdefs.h <<\_ACEOF -#define TCL_MEM_DEBUG 1 -_ACEOF +$as_echo "#define TCL_MEM_DEBUG 1" >>confdefs.h fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then - { $as_echo "$as_me:$LINENO: result: enabled symbols mem debugging" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem debugging" >&5 $as_echo "enabled symbols mem debugging" >&6; } else - { $as_echo "$as_me:$LINENO: result: enabled $tcl_ok debugging" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 $as_echo "enabled $tcl_ok debugging" >&6; } fi fi @@ -12282,13 +8837,9 @@ $as_echo "enabled $tcl_ok debugging" >&6; } # link against the non-stubbed Tcl library. #-------------------------------------------------------------------- -cat >>confdefs.h <<\_ACEOF -#define USE_TCL_STUBS 1 -_ACEOF +$as_echo "#define USE_TCL_STUBS 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define USE_TK_STUBS 1 -_ACEOF +$as_echo "#define USE_TK_STUBS 1" >>confdefs.h #-------------------------------------------------------------------- @@ -12301,11 +8852,7 @@ _ACEOF if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_MSC_VER) && _MSC_VER >= 1400 @@ -12314,7 +8861,7 @@ print("manifest needed") _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "manifest needed" >/dev/null 2>&1; then + $EGREP "manifest needed" >/dev/null 2>&1; then : # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi" @@ -12418,7 +8965,7 @@ rm -f conftest* #-------------------------------------------------------------------- - { $as_echo "$as_me:$LINENO: checking for tclsh" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 $as_echo_n "checking for tclsh... " >&6; } if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory @@ -12445,12 +8992,12 @@ $as_echo_n "checking for tclsh... " >&6; } done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi - { $as_echo "$as_me:$LINENO: result: ${TCLSH_PROG}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${TCLSH_PROG}" >&5 $as_echo "${TCLSH_PROG}" >&6; } - { $as_echo "$as_me:$LINENO: checking for wish" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wish" >&5 $as_echo_n "checking for wish... " >&6; } if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory @@ -12477,7 +9024,7 @@ $as_echo_n "checking for wish... " >&6; } done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi - { $as_echo "$as_me:$LINENO: result: ${WISH_PROG}" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WISH_PROG}" >&5 $as_echo "${WISH_PROG}" >&6; } @@ -12531,13 +9078,13 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) $as_unset $ac_var ;; + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -12545,8 +9092,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" @@ -12568,12 +9115,23 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi else - { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi @@ -12623,14 +9181,15 @@ DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= +U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs @@ -12640,13 +9199,14 @@ LTLIBOBJS=$ac_ltlibobjs CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS="" -: ${CONFIG_STATUS=./config.status} +: "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -12656,17 +9216,18 @@ cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which @@ -12674,23 +9235,15 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - as_nl=' ' export as_nl @@ -12698,7 +9251,13 @@ export as_nl as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else @@ -12709,7 +9268,7 @@ else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; - case $arg in + case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; @@ -12732,13 +9291,6 @@ if test "${PATH_SEPARATOR+set}" != set; then } fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - # IFS # We need space, tab and new line, in precisely that order. Quoting is @@ -12748,15 +9300,16 @@ fi IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +as_myself= +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -12768,12 +9321,16 @@ if test "x$as_myself" = x; then fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' @@ -12785,7 +9342,89 @@ export LC_ALL LANGUAGE=C export LANGUAGE -# Required to use basename. +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr @@ -12799,8 +9438,12 @@ else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ @@ -12820,76 +9463,25 @@ $as_echo X/"$0" | } s/.*/./; q'` -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then @@ -12904,518 +9496,31 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by zint $as_me 2.5.2, which was -generated by GNU Autoconf 2.63. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTION]... [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_version="\\ -zint config.status 2.5.2 -configured by $0, generated by GNU Autoconf 2.63, - with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { $as_echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () { - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - $as_echo "$as_me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=' ' -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\).*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\).*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 -$as_echo "$as_me: error: could not setup config files machinery" >&2;} - { (exit 1); exit 1; }; } -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 -$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - ac_file_inputs="$ac_file_inputs '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( @@ -13449,9 +9554,504 @@ $as_echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by zint $as_me 2.9.1.9, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +zint config.status 2.9.1.9 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in @@ -13499,7 +10099,6 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= - ac_sed_dataroot=' /datarootdir/ { p @@ -13509,12 +10108,11 @@ ac_sed_dataroot=' /@docdir@/p /@infodir@/p /@localedir@/p -/@mandir@/p -' +/@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -13524,7 +10122,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; + s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF @@ -13550,27 +10148,24 @@ s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} +which seems to be undefined. Please make sure it is defined" >&2;} - rm -f "$tmp/stdin" + rm -f "$ac_tmp/stdin" case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; @@ -13580,15 +10175,12 @@ $as_echo "$as_me: error: could not create $ac_file" >&2;} done # for ac_tag -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || - { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. @@ -13609,10 +10201,10 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff --git a/backend_tcl/configure.in b/backend_tcl/configure.in index 38ef16c9..c78a1bc0 100644 --- a/backend_tcl/configure.in +++ b/backend_tcl/configure.in @@ -14,7 +14,7 @@ # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- -AC_INIT([zint], [2.9.0]) +AC_INIT([zint], [2.9.1.9]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. @@ -71,7 +71,6 @@ TEA_ADD_SOURCES([ ../backend/auspost.c ../backend/aztec.c ../backend/bmp.c - ../backend/emf.c ../backend/codablock.c ../backend/code128.c ../backend/code16k.c @@ -84,9 +83,10 @@ TEA_ADD_SOURCES([ ../backend/dmatrix.c ../backend/dotcode.c ../backend/eci.c - ../backend/gb18030.c - ../backend/gb2312.c - ../backend/general_field.c + ../backend/emf.c + ../backend/gb18030.c + ../backend/gb2312.c + ../backend/general_field.c ../backend/gif.c ../backend/gridmtx.c ../backend/gs1.c @@ -94,10 +94,10 @@ TEA_ADD_SOURCES([ ../backend/imail.c ../backend/large.c ../backend/library.c - ../backend/mailmark.c + ../backend/mailmark.c ../backend/maxicode.c ../backend/medical.c - ../backend/output.c + ../backend/output.c ../backend/pcx.c ../backend/pdf417.c ../backend/plessey.c @@ -108,11 +108,13 @@ TEA_ADD_SOURCES([ ../backend/raster.c ../backend/reedsol.c ../backend/rss.c - ../backend/sjis.c + ../backend/sjis.c ../backend/svg.c ../backend/telepen.c ../backend/tif.c + ../backend/ultra.c ../backend/upcean.c + ../backend/vector.c zint.c ]) TEA_ADD_CFLAGS([-I../backend -DNO_PNG=1 -DZINT_VERSION=PACKAGE_VERSION]) diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index 4a45dec2..e04eef44 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -156,9 +156,6 @@ static int Zint(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); static int Encode(Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); -static int is_fullmultibyte(struct zint_symbol* symbol); -static int is_stackable(const int symbology); -static int is_extendable(const int symbology); /*----------------------------------------------------------------------------*/ /* >>>> File Global Variables */ @@ -1004,15 +1001,15 @@ static int Encode(Tcl_Interp *interp, int objc, /*------------------------------------------------------------------------*/ /* >>> option_3 is set by two values depending on the symbology */ /* On wrong symbology, the option is ignored(as does the zint program)*/ - if (fFullMultiByte && is_fullmultibyte(hSymbol)) { + if (fFullMultiByte && ZBarcode_Cap(hSymbol->symbology, ZINT_CAP_FULL_MULTIBYTE)) { hSymbol->option_3 = ZINT_FULL_MULTIBYTE; - } else if (Separator && is_stackable(hSymbol->symbology)) { + } else if (Separator && ZBarcode_Cap(hSymbol->symbology, ZINT_CAP_STACKABLE)) { hSymbol->option_3 = Separator; } /*------------------------------------------------------------------------*/ /* >>> option_2 is set by two values depending on the symbology */ /* On wrong symbology, the option is ignored(as does the zint program)*/ - if (addon_gap && is_extendable(hSymbol->symbology)) { + if (addon_gap && ZBarcode_Cap(hSymbol->symbology, ZINT_CAP_EXTENDABLE)) { hSymbol->option_2 = addon_gap; } /*------------------------------------------------------------------------*/ @@ -1061,7 +1058,7 @@ static int Encode(Tcl_Interp *interp, int objc, { Tcl_SetObjResult(interp, Tcl_NewStringObj(hSymbol->errtxt, -1)); } - if( 5 <= ErrorNumber ) + if( ZINT_ERROR <= ErrorNumber ) { /* >> Encode error */ fError = 1; @@ -1131,64 +1128,3 @@ static int Encode(Tcl_Interp *interp, int objc, } return TCL_OK; } - -static int is_fullmultibyte(struct zint_symbol* symbol) { - switch (symbol->symbology) { - case BARCODE_QRCODE: - case BARCODE_MICROQR: - //case BARCODE_HIBC_QR: Note character set restricted to ASCII subset - //case BARCODE_UPNQR: Note does not use Kanji mode - case BARCODE_RMQR: - case BARCODE_HANXIN: - case BARCODE_GRIDMATRIX: - return 1; - } - return 0; -} - -/* Indicates which symbologies can have row binding - * Note: if change this must also change version in backend/common.c */ -static int is_stackable(const int symbology) { - if (symbology < BARCODE_PDF417) { - return 1; - } - - switch (symbology) { - case BARCODE_CODE128B: - case BARCODE_ISBNX: - case BARCODE_EAN14: - case BARCODE_NVE18: - case BARCODE_KOREAPOST: - case BARCODE_PLESSEY: - case BARCODE_TELEPEN_NUM: - case BARCODE_ITF14: - case BARCODE_CODE32: - case BARCODE_CODABLOCKF: - case BARCODE_HIBC_BLOCKF: - return 1; - } - - return 0; -} - -/* Indicates which symbols can have addon (EAN-2 and EAN-5) - * Note: if change this must also change version in backend/common.c */ -static int is_extendable(const int symbology) { - - switch (symbology) { - case BARCODE_EANX: - case BARCODE_EANX_CHK: - case BARCODE_UPCA: - case BARCODE_UPCA_CHK: - case BARCODE_UPCE: - case BARCODE_UPCE_CHK: - case BARCODE_ISBNX: - case BARCODE_EANX_CC: - case BARCODE_UPCA_CC: - case BARCODE_UPCE_CC: - return 1; - } - - return 0; -} - diff --git a/docs/manual.txt b/docs/manual.txt index 079d5b74..f0817730 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -50,7 +50,7 @@ matrix: A matrix symbol is one based on a (usually square) grid of elements. Examples include Data Matrix, but Maxicode and DotCode are also considered matrix symbologies. -X-dimension: The X-dimension of a symbol is size (usually the width) of the +X-dimension: The X-dimension of a symbol is the size (usually the width) of the smallest element. For a linear symbology this is the width of the smallest bar. The default size of the X-dimension in a raster image is 2 pixels. Many symbologies have a fixed width-to-height ratio where @@ -79,6 +79,7 @@ ECI: The ECI mechanism allows for multi-language data to be encoded in be useful, for example, if you need to encode Cyrillic characters, but should be used with caution as not all scanners support this method. + 2. Installing Zint ================== @@ -100,10 +101,9 @@ make install The command line program can be accessed by typing -zint {options} -d {data} +zint {options} -Notice that the data needs to be entered after all other options. Any options -given after the data will be ignored. The GUI can be accessed by typing +The GUI can be accessed by typing zint-qt @@ -140,13 +140,14 @@ line into the MacOS terminal Once homebrew is installed use the following command to install Zint. -brew install zint +brew install zint 2.4 zint tcl backend -------------------- -The tcl backend may be build using the provided TEA build on Linux, Windows, +The tcl backend may be built using the provided TEA build on Linux, Windows, Mac-OS and Android. For Windows, a MS-VC6 makefile is also available. + 3. Using Zint Barcode Studio ============================ Zint Barcode Studio is the graphical user interface for Zint. If you are @@ -169,10 +170,17 @@ removed from this text-only version) This section describes how to encode data using the command line front end program. The examples given are for the Linux platform, but the same options are available for Windows - just remember to include the executable file -extension. i.e.: +extension if ".EXE" is not in your PATHEXT environment variable, i.e.: zint.exe -d "This Text" +For compatibility with Windows the examples use double quotes to delimit data, +though on Linux single quotes are generally preferable as they stop the shell +from processing any characters such as backslash or dollar. A single quote +itself is dealt with by terminating the single-quoted text, backslashing the +single quote, and then continuing: + +zint -d 'Text containing a single quote '\'' in the middle' 4.1 Inputting data ------------------ @@ -349,8 +357,8 @@ Numeric Value | Barcode Name 4.4 Adjusting height -------------------- -The height of a linear symbol can be adjusted using the --height switch. For -example: +The height of a symbol (except those with a fixed width-to-height ratio) can be +adjusted using the --height switch. For example: zint --height=100 -d "This Text" @@ -452,8 +460,8 @@ using the default character encoding then it will take advantage of the ECI not all barcode readers support ECI mode, so this can sometimes lead to unreadable barcodes. If you are using characters beyond those supported by Latin-1 then you should check that the resulting barcode can be understood by -your target barcode reader. Zint will generate a warning message when ECI codes -have been inserted into a symbol. +your target barcode reader. Zint will generate a warning message when an ECI +code that has not been explicitly requested has been inserted into a symbol. GS1 data can be encoded in a number of symbologies. Application identifiers should be enclosed in [square brackets] followed by the data to be encoded (see @@ -469,18 +477,18 @@ Identification Code (HIBC LIC). For HIBC Provider Applications Standard (HIBC PAS), preface the data with a slash "/". The --binary option encodes the input data as given. Automatic code page -translations to ECI pages is disabled. This may be used for raw binary -or binary encrypted data. -This switch plays together with the build-in ECI logic and examples may +translations to ECI pages is disabled. This may be used for raw binary or binary +encrypted data. +This switch plays together with the built-in ECI logic and examples may be found in that section. The --fullmultibyte option uses the multibyte modes of QR Code, Micro QR Code, Rectangular Micro QR Code, Han Xin Code and Grid Matrix for binary and Latin data, maximizing density. This is achieved by using compression designed for -Kanji characters, however some decoders take blocks which are encoded this -way and interpret them as Kanji characters, typically by applying a -transformation to UTF-8 and thus causing data corruption. Symbols encoded -with this option should be checked against decoders before they are used. +Kanji/Hanzi characters, however some decoders take blocks which are encoded this +way and interpret them as Kanji/Hanzi characters, typically by applying a +transformation to UTF-8 and thus causing data corruption. Symbols encoded with +this option should be checked against decoders before they are used. The popular open-source ZXing decoder is known to exhibit this behaviour. If your data contains non ISO-Latin-1 characters, you may encode it using an @@ -538,14 +546,14 @@ ECI Code | Character Encoding Scheme 25 * | UCS-2 Unicode (High order byte first) 26 | Unicode (UTF-8) 27 | ISO-646:1991 7-bit character set -28 * | Big-5 (Taiwan) Chinese Character Set +28 * | Big5 (Taiwan) Chinese Character Set 29 *** | GB (PRC) Chinese Character Set 30 * | Korean Character Set (KSX1001:1998) -------------------------------------------------------- Three examples: Ex1: The Euro sign can be encoded in ISO-8859-15. -The Euro-Sign has the ISO-8859-15 codepoint hex A4. +The Euro sign has the ISO-8859-15 codepoint hex A4. It is encoded in UTF-8 as the hex sequence: e2 82 ac Those 3 bytes are contained in the file "utf8euro.txt" This command will generate the corresponding code: @@ -688,6 +696,7 @@ Additional options are available which are specific to certain symbologies. These may, for example, control the amount of error correction data or the size of the symbol. These options are discussed in section 6 of this guide. + 5. Using the API ================ Zint has been written using the C language and currently only has an API for @@ -733,7 +742,6 @@ code takes a string from the command line and outputs a Code 128 symbol in a PNG file named out.png (or a GIF file called out.gif if libpng is not present) in the current working directory: -#include #include int main(int argc, char **argv) { @@ -748,7 +756,6 @@ int main(int argc, char **argv) This can also be done in one stage using the ZBarcode_Encode_and_Print() function as shown in the next example: -#include #include int main(int argc, char **argv) { @@ -765,8 +772,8 @@ Input data should be Unicode (UTF-8) formatted. -------------------------------------------- The functions for encoding and printing barcodes are defined as: -int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *input, int -length); +int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, + int in_length); int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename); @@ -798,7 +805,7 @@ allow you to do this: int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle); -int ZBarcide_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, +int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle); int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, @@ -934,12 +941,12 @@ To alter these values use the syntax shown in the example below. This code has the same result as the previous example except the output is now taller and plotted in green. -#include #include #include int main(int argc, char **argv) { - struct zint_symbol *my_symbol;my_symbol = ZBarcode_Create(); + struct zint_symbol *my_symbol; + my_symbol = ZBarcode_Create(); strcpy(my_symbol->fgcolour, "00ff00"); my_symbol->height = 400; ZBarcode_Encode_and_Print(my_symbol, argv[1], 0, 0); @@ -960,9 +967,9 @@ application. In addition the errtxt value is used to give a message detailing the nature of the error. The errors generated by Zint are given in the table below: -------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- Return Value | Meaning -------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- ZINT_WARN_INVALID_OPTION | One of the values in zint_struct was set | incorrectly but Zint has made a guess at | what it should have been and generated a @@ -970,6 +977,12 @@ ZINT_WARN_INVALID_OPTION | One of the values in zint_struct was set ZINT_WARN_USES_ECI | Zint has automatically inserted an ECI | character. The symbol may not be readable | with some readers. +ZINT_WARN_NONCOMPLIANT | The symbol was created but is not compliant with + | certain standards set in its specification + | (e.g. height, GS1 AI data lengths). +ZINT_ERROR | Marks the divide between warnings and errors. + | For return values greater than or equal to + | this no symbol is generated. ZINT_ERROR_TOO_LONG | The input data is too long or too short for the | selected symbology. No symbol has been | generated. @@ -992,7 +1005,7 @@ ZINT_ERROR_FILE_ACCESS | Zint was unable to open the requested output | problem. ZINT_ERROR_MEMORY | Zint ran out of memory. This should only be a | problem with legacy systems. -------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- To catch errors use an integer variable as shown in the code below: @@ -1011,7 +1024,7 @@ int main(int argc, char **argv) /* some warning or error occurred */ printf("%s\n", my_symbol->errtxt); } - if (error >= ZINT_ERROR_TOO_LONG) + if (error >= ZINT_ERROR) { /* stop now */ ZBarcode_Delete(my_symbol); @@ -1024,14 +1037,14 @@ int main(int argc, char **argv) This code will exit with the appropriate message: -error: malformed foreground colour target +Error 653: Malformed foreground colour target 5.7 Specifying a Symbology -------------------------- Symbologies can be specified by number or by name as shown in the following table. For example -symbol->symbology= BARCODE_LOGMARS; +symbol->symbology = BARCODE_LOGMARS; means the same as @@ -1173,7 +1186,7 @@ BOLD_TEXT | Embolden the human readable text. CMYK_COLOUR | Select the CMYK colour space option for encapsulated | PostScript files. BARCODE_DOTTY_MODE | Plot a matrix symbol using dots rather than squares. -GS1_GS_SEPARATOR | Use GS instead FNC1 as GS1 separator (Data Matrix). +GS1_GS_SEPARATOR | Use GS instead of FNC1 as GS1 separator (Data Matrix) OUT_BUFFER_INTERMEDIATE | Return the bitmap buffer as ASCII values instead of | separate colour channels (OUT_BUFFER only). -------------------------------------------------------------------------------- @@ -1203,7 +1216,6 @@ my_symbol->input_mode = DATA_MODE | GS1_MODE; is not valid. Permissible escape sequences are listed in section 4.1. - 5.10 Verifying Symbology Availability ------------------------------------- An additional function available in the API is defined as: @@ -1215,11 +1227,63 @@ non-zero return value indicates that the given symbology is available. For example: if (ZBarcode_ValidID(BARCODE_PDF417) != 0) { - printf("PDF417 available"); + printf("PDF417 available\n"); } else { - printf("PDF417 not available"); + printf("PDF417 not available\n"); } +5.11 Checking Symbology Capabilities +------------------------------------ +It can be useful for frontend programs to know the capabilities of a symbology. +This can be determined using another additional function: + +unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag); + +by oring the flags below in the "cap_flag" argument and checking the return to +see which are set. + +------------------------------------------------------------------------------- +Value | Meaning +------------------------------------------------------------------------------- +ZINT_CAP_HRT | Can the symbology print Human Readable Text? +ZINT_CAP_STACKABLE | Is the symbology stackable? +ZINT_CAP_EXTENDABLE | Is the symbology extendable with add-on data? + | (i.e. is it UPC/EAN?) +ZINT_CAP_COMPOSITE | Does the symbology support composite data? + | (see 6.3 below) +ZINT_CAP_ECI | Does the symbology support Extended Channel + | Interpretations? +ZINT_CAP_GS1 | Does the symbology support GS1 data? +ZINT_CAP_DOTTY | Can the symbology be outputted as dots? +ZINT_CAP_FIXED_RATIO | Does the symbology have a fixed width-to-height + | (aspect) ratio? +ZINT_CAP_READER_INIT | Does the symbology support Reader Initialisation? +ZINT_CAP_FULL_MULTIBYTE | Is the ZINT_FULL_MULTIBYTE option applicable? +------------------------------------------------------------------------------- + +For example: + +unsigned int cap = ZBarcode_Cap(BARCODE_PDF417, ZINT_CAP_HRT | ZINT_CAP_ECI); +if (cap & ZINT_CAP_HRT) { + printf("PDF417 supports HRT\n"); +} else { + printf("PDF417 does not support HRT\n"); +} +if (cap & ZINT_CAP_ECI) { + printf("PDF417 supports ECI\n"); +} else { + printf("PDF417 does not support ECI\n"); +} + +5.11 Zint Version +----------------- +Lastly, the version of the Zint library linked to is returned by: + +int ZBarcode_Version(); + +The version parts are separated by hundreds. For instance, version "2.9.1" is +returned as "20901". + [1] This value is ignored for Australia Post 4-State Barcodes, PostNet, PLANET, USPS Intelligent Mail, RM4SCC, PDF417, Data Matrix, Maxicode, QR Code, GS1 DataBar Stacked, PDF417 and MicroPDF417 - all of which have a fixed height. @@ -1227,6 +1291,7 @@ DataBar Stacked, PDF417 and MicroPDF417 - all of which have a fixed height. [2] This value is ignored for Code 16k and Codablock-F. Special considerations apply to ITF-14 - see the specific section for that symbology. + 6. Types of Symbology ===================== 6.1 One-Dimensional Symbols @@ -1251,7 +1316,7 @@ before using these standards. 6.1.2.1 Standard Code 2 of 5 ---------------------------- -Also known as Code 2 of 5 Matrix is a self-checking code used in industrial +Also known as Code 2 of 5 Matrix this is a self-checking code used in industrial applications and photo development. Standard Code 2 of 5 will encode any length numeric input (digits 0-9). @@ -1318,7 +1383,7 @@ or encode a data string with the + character included: my_symbol->symbology = BARCODE_UPCA; -error = ZBarcode_Encode_and_Print(my_symbol, "72527270270+12345"); +error = ZBarcode_Encode_and_Print(my_symbol, "72527270270+12345", 0, 0); If your input data already includes the check digit symbology BARCODE_UPCA_CHK (35) can be used which takes a 12 digit input and validates the check digit @@ -1343,7 +1408,7 @@ or my_symbol->symbology = BARCODE_UPCE; -error = ZBarcode_Encode_and_Print(my_symbol, "1123456"); +error = ZBarcode_Encode_and_Print(my_symbol, "1123456", 0, 0); If your input data already includes the check digit symbology BARCODE_UPCE_CHK (38) can be used which takes a 7 or 8 digit input and validates the check digit @@ -1374,9 +1439,9 @@ be achieved using the API: my_symbol->symbology = BARCODE_EANX; -error = ZBarcode_Encode_and_Print(my_symbol, "54321"); +error = ZBarcode_Encode_and_Print(my_symbol, "54321", 0, 0); -error = ZBarcode_Encode_and_Print(my_symbol, "7432365+54321"); +error = ZBarcode_Encode_and_Print(my_symbol, "7432365+54321", 0, 0); All of the EAN symbols include check digits which are added by Zint. @@ -1638,7 +1703,7 @@ the vehicle industry, is to simply stack one-dimensional codes on top of each other. This can be achieved at the command prompt by giving more than one set of input data. For example -zint -d 'This' -d 'That' +zint -d "This" -d "That" will draw two Code 128 symbols, one on top of the other. The same result can be achieved using the API by executing the ZBarcode_Encode() function more than @@ -1646,9 +1711,9 @@ once on a symbol. For example: my_symbol->symbology = BARCODE_CODE128; -error = ZBarcode_Encode(my_symbol, "This"); +error = ZBarcode_Encode(my_symbol, "This", 0); -error = ZBarcode_Encode(my_symbol, "That"); +error = ZBarcode_Encode(my_symbol, "That", 0); error = ZBarcode_Print(my_symbol); @@ -1657,7 +1722,7 @@ The stacked barcode rows can be separated by row separator bars by specifying multiples of the X-dimension (minimum and default 1, maximum 4) can be set by --separator= (option_3): -zind --bind --separator=2 -d 'This' -d 'That' +zind --bind --separator=2 -d "This" -d "That" A more sophisticated method is to use some type of line indexing which indicates to the barcode reader which order the symbols should be read. This is @@ -1790,13 +1855,13 @@ This creates an EAN-13 linear component with the data "331234567890" and a 2D CC-A (see below) component with the data "(99)1234-abcd". The same results can be achieved using the API as shown below: -my_symbol->symbology = 130; +my_symbol->symbology = BARCODE_EANX_CC; my_symbol->option_1 = 1; strcpy(my_symbol->primary, "331234567890"); -ZBarcode_Encode_and_Print(my_symbol, "[99]1234-abcd"); +ZBarcode_Encode_and_Print(my_symbol, "[99]1234-abcd", 0, 0); EAN-2 and EAN-5 add-on data can be used with EAN and UPC symbols using the + symbol as described in section 6.1.3 and 5.1.4. @@ -2617,6 +2682,7 @@ and 'T' where these refer to descender, ascender, full (ascender and descender) and tracker (neither ascender nor descender) respectively. All other characters are ignored. + 7. Legal and Version Information ================================ 7.1 License @@ -2936,7 +3002,7 @@ international standards: > Uniform Symbology Specification Code One (AIM Inc., 1994) > ANSI/AIM BC12-1998 - Uniform Symbology Specification Channel Code > ANSI/AIM BC6-2000 - Uniform Symbology Specification Code 49 -> ANSI/HIBC 2.3-2009 - The Health Industry Bar Code (HIBC) Supplier Labeling +> ANSI/HIBC 2.6-2016 - The Health Industry Bar Code (HIBC) Supplier Labeling Standard > AIM ISS-X-24 - Uniform Symbology Specification Codablock F > AIMD013 (v 1.34a) – Information technology – Automaic identification and data @@ -2954,6 +3020,7 @@ international standards: > AIM ITS/04-023 International Technical Standard – Extended Channel Interpretations Part 3: Register (Released 15th July 2004) + A. Character Encoding ===================== This section is intended as a quick reference to the character sets used by diff --git a/frontend/main.c b/frontend/main.c index 0989676e..ff5c0d44 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -159,7 +159,7 @@ static void show_eci(void) { "25: ** UCS-2 Unicode (High order byte first)\n" "26: Unicode (UTF-8)\n" "27: ISO-646:1991 7-bit character set\n" - "28: ** Big-5 (Taiwan) Chinese Character Set\n" + "28: ** Big5 (Taiwan) Chinese Character Set\n" "29: ** GB (PRC) Chinese Character Set\n" "30: ** Korean Character Set (KSX1001:1998)\n" "** See note in section 4.10 of the manual\n" @@ -460,66 +460,6 @@ static int batch_process(struct zint_symbol *symbol, char *filename, int mirror_ return error_number; } -static int is_fullmultibyte(struct zint_symbol* symbol) { - switch (symbol->symbology) { - case BARCODE_QRCODE: - case BARCODE_MICROQR: - //case BARCODE_HIBC_QR: Note character set restricted to ASCII subset - //case BARCODE_UPNQR: Note does not use Kanji mode - case BARCODE_RMQR: - case BARCODE_HANXIN: - case BARCODE_GRIDMATRIX: - return 1; - } - return 0; -} - -/* Indicates which symbologies can have row binding - * Note: if change this must also change version in backend/common.c */ -static int is_stackable(const int symbology) { - if (symbology < BARCODE_PDF417) { - return 1; - } - - switch (symbology) { - case BARCODE_CODE128B: - case BARCODE_ISBNX: - case BARCODE_EAN14: - case BARCODE_NVE18: - case BARCODE_KOREAPOST: - case BARCODE_PLESSEY: - case BARCODE_TELEPEN_NUM: - case BARCODE_ITF14: - case BARCODE_CODE32: - case BARCODE_CODABLOCKF: - case BARCODE_HIBC_BLOCKF: - return 1; - } - - return 0; -} - -/* Indicates which symbols can have addon (EAN-2 and EAN-5) - * Note: if change this must also change version in backend/common.c */ -static int is_extendable(const int symbology) { - - switch (symbology) { - case BARCODE_EANX: - case BARCODE_EANX_CHK: - case BARCODE_UPCA: - case BARCODE_UPCA_CHK: - case BARCODE_UPCE: - case BARCODE_UPCE_CHK: - case BARCODE_ISBNX: - case BARCODE_EANX_CC: - case BARCODE_UPCA_CC: - case BARCODE_UPCE_CC: - return 1; - } - - return 0; -} - typedef struct { char *arg; int opt; } arg_opt; int main(int argc, char **argv) { @@ -670,11 +610,11 @@ int main(int argc, char **argv) { } if (!strcmp(long_options[option_index].name, "scale")) { my_symbol->scale = (float) (atof(optarg)); - if (my_symbol->scale < 0.01) { + if (my_symbol->scale < 0.01f) { /* Zero and negative values are not permitted */ fprintf(stderr, "Warning 105: Invalid scale value\n"); fflush(stderr); - my_symbol->scale = 1.0; + my_symbol->scale = 1.0f; } } if (!strcmp(long_options[option_index].name, "separator")) { @@ -706,11 +646,11 @@ int main(int argc, char **argv) { } if (!strcmp(long_options[option_index].name, "dotsize")) { my_symbol->dot_size = (float) (atof(optarg)); - if (my_symbol->dot_size < 0.01) { + if (my_symbol->dot_size < 0.01f) { /* Zero and negative values are not permitted */ fprintf(stderr, "Warning 106: Invalid dot radius value\n"); fflush(stderr); - my_symbol->dot_size = 4.0F / 5.0F; + my_symbol->dot_size = 4.0f / 5.0f; } } if (!strcmp(long_options[option_index].name, "border")) { @@ -989,12 +929,13 @@ int main(int argc, char **argv) { } if (data_arg_num) { - if (fullmultibyte && is_fullmultibyte(my_symbol)) { + unsigned int cap = ZBarcode_Cap(my_symbol->symbology, ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_STACKABLE | ZINT_CAP_EXTENDABLE); + if (fullmultibyte && (cap & ZINT_CAP_FULL_MULTIBYTE)) { my_symbol->option_3 = ZINT_FULL_MULTIBYTE; - } else if (separator && is_stackable(my_symbol->symbology)) { + } else if (separator && (cap & ZINT_CAP_STACKABLE)) { my_symbol->option_3 = separator; } - if (addon_gap && is_extendable(my_symbol->symbology)) { + if (addon_gap && (cap & ZINT_CAP_EXTENDABLE)) { my_symbol->option_2 = addon_gap; } @@ -1035,12 +976,12 @@ int main(int argc, char **argv) { if (ret != 0) { fprintf(stderr, "%s\n", my_symbol->errtxt); fflush(stderr); - if (error_number < 5) { + if (error_number < ZINT_ERROR) { error_number = ret; } } } - if (error_number < 5) { + if (error_number < ZINT_ERROR) { error_number = ZBarcode_Print(my_symbol, rotate_angle); if (error_number != 0) { diff --git a/frontend/tests/cmake/Modules/FindLibZint.cmake b/frontend/tests/cmake/Modules/FindLibZint.cmake new file mode 100644 index 00000000..7ef0ff36 --- /dev/null +++ b/frontend/tests/cmake/Modules/FindLibZint.cmake @@ -0,0 +1,53 @@ +# - Try to find the Zint barcode library +# Once done this will define +# +# LIBZINT_FOUND - System has Zint barcode +# LIBZINT_INCLUDE_DIRS - The Zint barcode include directory +# LIBZINT_LIBRARIES - The libraries needed to use Zint barcode +# LIBZINT_DEFINITIONS - Definitions needed to use Zint barcode +# LIBZINT_VERSION_STRING - the version of Zint barcode found + +set (LIBZINT_DEFINITIONS "") + +find_path (LIBZINT_INCLUDE_DIR NAMES zint.h) + +find_library (LIBZINT_LIBRARY NAMES zint ) + +if (LIBZINT_LIBRARY AND LIBZINT_INCLUDE_DIR) + + set (LIBZINT_INCLUDE_DIRS ${LIBZINT_INCLUDE_DIR}) + set (LIBZINT_LIBRARIES ${LIBZINT_LIBRARY}) + set (LIBZINT_DEFINITIONS "") + + if (NOT TARGET ZINT::ZINT) + + add_library (ZINT::ZINT UNKNOWN IMPORTED) + set_target_properties (ZINT::ZINT PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "${LIBZINT_DEFINITIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBZINT_INCLUDE_DIRS}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${LIBZINT_LIBRARY}" + ) + + endif () + +endif () + +if (LIBZINT_INCLUDE_DIR AND EXISTS "${LIBZINT_INCLUDE_DIR}/zint.h") + file (STRINGS "${LIBZINT_INCLUDE_DIR}/zint.h" ZINT_MAJOR_H REGEX "^#define ZINT_VERSION_MAJOR *[0-9]*") + file (STRINGS "${LIBZINT_INCLUDE_DIR}/zint.h" ZINT_MINOR_H REGEX "^#define ZINT_VERSION_MINOR *[0-9]*") + file (STRINGS "${LIBZINT_INCLUDE_DIR}/zint.h" ZINT_MICRO_H REGEX "^#define ZINT_VERSION_RELEASE *[0-9]*") + string (REGEX REPLACE "^.*VERSION_MAJOR *([0-9]*)" "\\1" ZINT_MAJOR ${ZINT_MAJOR_H}) + string (REGEX REPLACE "^.*VERSION_MINOR *([0-9]*)" "\\1" ZINT_MINOR ${ZINT_MINOR_H}) + string (REGEX REPLACE "^.*VERSION_RELEASE *([0-9]*)" "\\1" ZINT_MICRO ${ZINT_MICRO_H}) + set (LIBZINT_VERSION_STRING ${ZINT_MAJOR}.${ZINT_MINOR}.${ZINT_MICRO}) +endif() + +# handle the QUIETLY and REQUIRED arguments and set LIBZINT_FOUND to TRUE if +# all listed variables are TRUE +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibZint + REQUIRED_VARS LIBZINT_LIBRARY LIBZINT_INCLUDE_DIR + VERSION_VAR LIBZINT_VERSION_STRING) + +mark_as_advanced(LIBZINT_INCLUDE_DIR LIBZINT_LIBRARY) diff --git a/frontend_qt/grpDotCode.ui b/frontend_qt/grpDotCode.ui index e9a0fc6d..e9b9dc59 100644 --- a/frontend_qt/grpDotCode.ui +++ b/frontend_qt/grpDotCode.ui @@ -22,6 +22,19 @@ + + + + &Number of Data Columns: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + cmbDotCols + + + @@ -284,42 +297,6 @@ - - - - true - - - Dot Size: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - &Number of Data Columns: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - cmbDotCols - - - - - - - true - - - 0.8 - - - diff --git a/frontend_qt/grpGrid.ui b/frontend_qt/grpGrid.ui index 2e17b3f6..8ffb14c6 100644 --- a/frontend_qt/grpGrid.ui +++ b/frontend_qt/grpGrid.ui @@ -179,6 +179,19 @@ + + + + Full Multibyte + + + false + + + Use Hanzi multibyte encoding for binary and Latin data + + + diff --git a/frontend_qt/grpHX.ui b/frontend_qt/grpHX.ui index 39d09db9..05279122 100644 --- a/frontend_qt/grpHX.ui +++ b/frontend_qt/grpHX.ui @@ -505,6 +505,19 @@ + + + + Full Multibyte + + + false + + + Use Hanzi multibyte encoding for binary and Latin data + + + diff --git a/frontend_qt/grpMQR.ui b/frontend_qt/grpMQR.ui index 0fec8c01..15304601 100644 --- a/frontend_qt/grpMQR.ui +++ b/frontend_qt/grpMQR.ui @@ -96,6 +96,19 @@ + + + + Full Multibyte + + + false + + + Use Kanji multibyte encoding for binary and Latin data + + + diff --git a/frontend_qt/grpMaxicode.ui b/frontend_qt/grpMaxicode.ui index 1249114e..ed31b0fb 100644 --- a/frontend_qt/grpMaxicode.ui +++ b/frontend_qt/grpMaxicode.ui @@ -41,7 +41,7 @@ false - &Primary Data: + &Primary Message: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -96,7 +96,7 @@ - Primary Data Here! + Primary Message Here! diff --git a/frontend_qt/grpQR.ui b/frontend_qt/grpQR.ui index c40301e8..d7e6fa3a 100644 --- a/frontend_qt/grpQR.ui +++ b/frontend_qt/grpQR.ui @@ -321,6 +321,19 @@ + + + + Full Multibyte + + + false + + + Use Kanji multibyte encoding for binary and Latin data + + + diff --git a/frontend_qt/grpRMQR.ui b/frontend_qt/grpRMQR.ui index 64423b7d..081553bd 100644 --- a/frontend_qt/grpRMQR.ui +++ b/frontend_qt/grpRMQR.ui @@ -294,6 +294,19 @@ + + + + Full Multibyte + + + false + + + Use Kanji multibyte encoding for binary and Latin data + + + diff --git a/frontend_qt/mainWindow.ui b/frontend_qt/mainWindow.ui index ad535cc8..4147696f 100644 --- a/frontend_qt/mainWindow.ui +++ b/frontend_qt/mainWindow.ui @@ -65,6 +65,9 @@ bstyle + + Type of barcode + @@ -78,6 +81,19 @@ Type of barcode + + QComboBox::AdjustToContents + + + + + + + Filter symbologies + + + + @@ -90,10 +106,16 @@ 0 + + + 0 + 300 + + 16777215 - 350 + 300 @@ -103,7 +125,7 @@ - 1 + 0 @@ -161,7 +183,7 @@ or import from file Encode a sequence - 123.. + &123.. @@ -231,6 +253,9 @@ or import from file cmbCompType + + Type of 2D component + @@ -276,11 +301,15 @@ or import from file false - 2D &Component Data: + &2D Component Data: txtComposite + + Data to be encoded in 2D component +Remember to place [square brackets] around AI identifiers + @@ -302,7 +331,7 @@ or import from file Data to be encoded in 2D component -Remember to place [square brackets] around AI data +Remember to place [square brackets] around AI identifiers <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -322,11 +351,214 @@ p, li { white-space: pre-wrap; } - + + + + + + 40 + 16777215 + + + + EC&I: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + cmbECI + + + Set the ECI (Extended Channel Interpretation) code +(ignored if disabled) + + + + + + + + 80 + 16777215 + + + + Set the ECI (Extended Channel Interpretation) code +(ignored if disabled) + + + + None + + + + + 3: ISO-8859-1 Latin-1 + + + + + 4: ISO-8859-2 Latin-2 + + + + + 5: ISO-8859-3 Latin-3 + + + + + 6: ISO-8859-4 Latin-4 + + + + + 7: ISO-8859-5 Cyrillic + + + + + 8: ISO-8859-6 Arabic + + + + + 9: ISO-8859-7 Greek + + + + + 10: ISO-8859-8 Hebrew + + + + + 11: ISO-8859-9 Turkish + + + + + 12: ISO-8859-10 Nordic + + + + + 13: ISO-8859-11 Thai + + + + + 15: ISO-8859-13 Baltic + + + + + 16: ISO-8859-14 Celtic + + + + + 17: ISO-8859-15 Latin-9 + + + + + 18: ISO-8859-16 Latin-10 + + + + + 20: Shift-JIS + + + + + 21: Windows 1250 Latin-2 + + + + + 22: Windows 1251 Cyrillic + + + + + 23: Windows 1252 Latin-1 + + + + + 24: Windows 1256 Arabic + + + + + 25: UCS-2 (BE) + + + + + 26: UTF-8 + + + + + 27: ISO-646 ASCII + + + + + 28: Big5 (Taiwan) + + + + + 29: GB (PRC) + + + + + 30: Korean + + + + + + + + Qt::Horizontal + + + + 10 + 20 + + + + + + Process escape sequences in input data +\0 - NUL character (0x00) +\E - End of Transmission (0x04) +\a - Bell (0x07) +\b - Backspace (0x08) +\t - Horizontal Tab (0x09) +\n - Line Feed (0x0A) +\v - Vertical Tab (0x0B) +\f - Form Feed (0x0C) +\r - Carriage Return (0x0D) +\e - Escape (0x1B) +\G - Group Selector (0x1D) +\R - Record Selector (0x1E) +\\ - Backslash (0x5C) +\xNN - 8-bit character (N hex) +\uNNNN - 16-bit Unicode (N hex) + - Parse Escape Sequences + &Parse Escapes false @@ -335,8 +567,26 @@ p, li { white-space: pre-wrap; } + + Treat input as raw binary data +(ignored if disabled) + - Data (binary) &Mode + Binary &Mode + + + false + + + + + + + Create reader initialisation/programming symbol +(ignored if disabled) + + + &Reader Init false @@ -360,7 +610,21 @@ p, li { white-space: pre-wrap; } - + + + + Use default height +(ignored if disabled) + + + Auto&matic Height + + + true + + + + false @@ -374,9 +638,12 @@ p, li { white-space: pre-wrap; } heightb + + Overall symbol height + - + false @@ -390,6 +657,9 @@ p, li { white-space: pre-wrap; } + + 1 + 300 @@ -398,10 +668,10 @@ p, li { white-space: pre-wrap; } - + - B&order Width: + Border &Width: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -409,9 +679,12 @@ p, li { white-space: pre-wrap; } bwidth + + Width of boundary bars or border + - + Width of boundary bars or border @@ -430,7 +703,7 @@ p, li { white-space: pre-wrap; } - + Border &Type: @@ -441,9 +714,12 @@ p, li { white-space: pre-wrap; } btype + + Add border or box + - + Add border or box @@ -468,10 +744,10 @@ p, li { white-space: pre-wrap; } - + - Horizontal &Whitespace: + Hori&zontal Whitespace: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -479,19 +755,22 @@ p, li { white-space: pre-wrap; } spnWhitespace + + Width of whitespace on either side of barcode + - + - Width of whitespace + Width of whitespace on either side of barcode X - + &Printing Scale: @@ -502,9 +781,12 @@ p, li { white-space: pre-wrap; } spnScale + + Image scale when output to file + - + Image scale when output to file @@ -529,13 +811,79 @@ p, li { white-space: pre-wrap; } - - - - false + + + + Fo&nt Setting: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + cmbFontSetting + + + Set font characteristics + + + + + + + Set font characteristics + + + + Normal + + + + + Bold + + + + + Small + + + + + Small Bold (vector only) + + + + + + + + Show text in image +(ignored if disabled) - + Show H&uman Readable Text + + + true + + + + + + + true + + + Colour: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + fgcolor + + + Change colour of ink or paper @@ -545,17 +893,17 @@ p, li { white-space: pre-wrap; } Change ink colour - &Foreground Colour + &Foreground - + false - + @@ -565,17 +913,7 @@ p, li { white-space: pre-wrap; } Change paper colour - &Backgound Colour - - - - - - - false - - - + Ba&ckground @@ -585,54 +923,129 @@ p, li { white-space: pre-wrap; } Reset to black on white - &Reset Colours + &Reset + + + + + + + Use CMYK colour space in EPS output + + + CMY&K (EPS) + + + false + + + + + + + R&otate: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + cmbRotate + + + Rotate symbol by degrees + + + + + + + Rotate symbol by degrees + + + + 0° + + + + + 90° + + + + + 180° + + + + + 270° + + + + + + + + Use dots instead of squares for matrix symbols +(ignored if disabled) + + + &Dotty + + + false + + + + + + + false + + + &Dot Size: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + spnDotSize + + + Size of dots + + + + + + + Size of dots + + + false + + + + + + 2 + + + 0.010000000000000 + + + 20.000000000000000 + + + 0.100000000000000 + + + 0.800000000000000 - - - - true - - - Automatic Height - - - true - - - - - - - Show text in image - - - Show H&uman Readable Text - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Minimum - - - - 20 - 40 - - - - @@ -643,14 +1056,8 @@ p, li { white-space: pre-wrap; } - + - - - 100 - 0 - - About Zint @@ -659,36 +1066,7 @@ p, li { white-space: pre-wrap; } - - - - - 100 - 0 - - - - Save image to file - - - &Save - - - - - - - - 100 - 0 - - - - E&xit - - - - + Qt::Horizontal @@ -701,32 +1079,43 @@ p, li { white-space: pre-wrap; } - - - - - 100 - 0 - - + + - Copy to clipboard + Copy to clipboard as BMP + + + Copy &BMP + + + + + + + Copy to clipboard as SVG Copy S&VG - - - - - 100 - 0 - + + + + Output image to file (BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF) - &Copy BMP + &Save As… + + + + + + + Quit Zint Barcode Studio + + + E&xit diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index d6ba187d..1897aba9 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -15,7 +15,7 @@ ***************************************************************************/ /* vim: set ts=4 sw=4 et : */ -#include +//#include #include #include #include @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include "mainwindow.h" #include "datawindow.h" @@ -35,7 +37,7 @@ #include MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) - : QWidget(parent, fl), m_optionWidget(0) + : QWidget(parent, fl), m_optionWidget(NULL), m_symbology(0) { m_bc.bc.setDebug(QCoreApplication::arguments().contains("--verbose")); // Undocumented command line debug flag @@ -62,7 +64,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) "Code 2 of 5 IATA", "Code 2 of 5 Industrial", "Code 2 of 5 Interleaved", - "Code 2 of 5 Matrix", + "Code 2 of 5 Standard", "Code 32 (Italian Pharmacode)", "Code 39 (ISO 16388)", "Code 39 Extended", @@ -124,47 +126,75 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) setupUi(this); view->setScene(scene); - m_fgcolor=qRgba(settings.value("studio/ink/red", 0).toInt(), + restoreGeometry(settings.value("studio/window_geometry").toByteArray()); + + m_fgcolor.setRgb(settings.value("studio/ink/red", 0).toInt(), settings.value("studio/ink/green", 0).toInt(), settings.value("studio/ink/blue", 0).toInt(), settings.value("studio/ink/alpha", 0xff).toInt()); - m_bgcolor=qRgba(settings.value("studio/paper/red", 0xff).toInt(), + m_bgcolor.setRgb(settings.value("studio/paper/red", 0xff).toInt(), settings.value("studio/paper/green", 0xff).toInt(), settings.value("studio/paper/blue", 0xff).toInt(), settings.value("studio/paper/alpha", 0xff).toInt()); - for (int i = 0; i < metaObject()->enumerator(0).keyCount(); i++) { + int cnt = metaObject()->enumerator(0).keyCount(); + for (int i = 0; i < cnt; i++) { bstyle->addItem(metaObject()->enumerator(0).key(i)); bstyle->setItemText(i, bstyle_text[i]); } +#ifdef _WIN32 + bstyle->setMaxVisibleItems(cnt); /* Apart from increasing combo size, seems to be needed for filter to work */ +#endif +#if QT_VERSION < 0x50A00 + /* Prior to Qt 5.10 comboboxes have display issues when filtered (scrollers not accounted for), so disable */ + filter_bstyle->hide(); +#endif bstyle->setCurrentIndex(settings.value("studio/symbology", 10).toInt()); txtData->setText(settings.value("studio/data", "Your Data Here!").toString()); txtComposite->setText(settings.value("studio/composite_text", "Your Data Here!").toString()); + chkComposite->setChecked(settings.value("studio/chk_composite").toInt() ? true : false); + cmbCompType->setCurrentIndex(settings.value("studio/comp_type", 0).toInt()); + cmbECI->setCurrentIndex(settings.value("studio/appearance/eci", 0).toInt()); + chkEscape->setChecked(settings.value("studio/chk_escape").toInt() ? true : false); + chkData->setChecked(settings.value("studio/chk_data").toInt() ? true : false); + chkRInit->setChecked(settings.value("studio/chk_rinit").toInt() ? true : false); + chkAutoHeight->setChecked(settings.value("studio/appearance/autoheight", 1).toInt() ? true : false); heightb->setValue(settings.value("studio/appearance/height", 50).toInt()); - bwidth->setValue(settings.value("studio/appearance/border", 50).toInt()); + bwidth->setValue(settings.value("studio/appearance/border", 0).toInt()); spnWhitespace->setValue(settings.value("studio/appearance/whitespace", 0).toInt()); spnScale->setValue(settings.value("studio/appearance/scale", 1.0).toFloat()); btype->setCurrentIndex(settings.value("studio/appearance/border_type", 0).toInt()); + cmbFontSetting->setCurrentIndex(settings.value("studio/appearance/font_setting", 0).toInt()); + chkHRTShow->setChecked(settings.value("studio/appearance/chk_hrt_show", 1).toInt() ? true : false); + chkCMYK->setChecked(settings.value("studio/appearance/cmyk", 0).toInt() ? true : false); + cmbRotate->setCurrentIndex(settings.value("studio/appearance/rotate", 0).toInt()); + chkDotty->setChecked(settings.value("studio/appearance/dotty", 0).toInt() ? true : false); + spnDotSize->setValue(settings.value("studio/appearance/dot_size", 4.0 / 5.0).toFloat()); change_options(); + scene->addItem(&m_bc); update_preview(); connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(change_options())); connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(filter_bstyle, SIGNAL(textChanged( const QString& )), SLOT(filter_symbologies())); connect(heightb, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(bwidth, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(btype, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(cmbFontSetting, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(txtData, SIGNAL(textChanged( const QString& )), SLOT(update_preview())); connect(txtComposite, SIGNAL(textChanged()), SLOT(update_preview())); - connect(chkComposite, SIGNAL(stateChanged( int )), SLOT(composite_enable())); + connect(chkComposite, SIGNAL(stateChanged( int )), SLOT(composite_ui_set())); connect(chkComposite, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(cmbCompType, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(cmbECI, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(chkEscape, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkData, SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(chkRInit, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(spnWhitespace, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(btnAbout, SIGNAL(clicked( bool )), SLOT(about())); connect(btnSave, SIGNAL(clicked( bool )), SLOT(save())); @@ -173,16 +203,30 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) connect(btnReset, SIGNAL(clicked( bool )), SLOT(reset_view())); connect(btnMoreData, SIGNAL(clicked( bool )), SLOT(open_data_dialog())); connect(btnSequence, SIGNAL(clicked( bool )), SLOT(open_sequence_dialog())); - connect(chkHRTHide, SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(chkAutoHeight, SIGNAL(stateChanged( int )), SLOT(autoheight_clicked())); + connect(chkAutoHeight, SIGNAL(stateChanged( int )), SLOT(autoheight_ui_set())); + connect(chkAutoHeight, SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(chkHRTShow, SIGNAL(stateChanged( int )), SLOT(HRTShow_ui_set())); + connect(chkHRTShow, SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(chkCMYK, SIGNAL(stateChanged( int )), SLOT(change_cmyk())); + connect(cmbRotate, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(chkDotty, SIGNAL(stateChanged( int )), SLOT(dotty_ui_set())); + connect(chkDotty, SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(spnDotSize, SIGNAL(valueChanged( double )), SLOT(update_preview())); connect(btnCopySVG, SIGNAL(clicked( bool )), SLOT(copy_to_clipboard_svg())); connect(btnCopyBMP, SIGNAL(clicked( bool )), SLOT(copy_to_clipboard_bmp())); + + connect(&m_bc.bc, SIGNAL(encoded()), SLOT(on_encoded())); + + QShortcut *ctrl_q = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this); + connect(ctrl_q, SIGNAL(activated()), SLOT(quit_now())); } MainWindow::~MainWindow() { QSettings settings; + settings.setValue("studio/window_geometry", saveGeometry()); + settings.setValue("studio/tab_index", tabMain->currentIndex()); settings.setValue("studio/symbology", bstyle->currentIndex()); settings.setValue("studio/ink/red", m_fgcolor.red()); settings.setValue("studio/ink/green", m_fgcolor.green()); @@ -194,11 +238,26 @@ MainWindow::~MainWindow() settings.setValue("studio/paper/alpha", m_bgcolor.alpha()); settings.setValue("studio/data", txtData->text()); settings.setValue("studio/composite_text", txtComposite->toPlainText()); + settings.setValue("studio/chk_composite", chkComposite->isChecked() ? 1 : 0); + settings.setValue("studio/comp_type", cmbCompType->currentIndex()); + settings.setValue("studio/eci", cmbECI->currentIndex()); + settings.setValue("studio/chk_escape", chkEscape->isChecked() ? 1 : 0); + settings.setValue("studio/chk_data", chkData->isChecked() ? 1 : 0); + settings.setValue("studio/chk_rinit", chkRInit->isChecked() ? 1 : 0); + settings.setValue("studio/appearance/autoheight", chkAutoHeight->isChecked() ? 1 : 0); settings.setValue("studio/appearance/height", heightb->value()); settings.setValue("studio/appearance/border", bwidth->value()); settings.setValue("studio/appearance/whitespace", spnWhitespace->value()); settings.setValue("studio/appearance/scale", spnScale->value()); settings.setValue("studio/appearance/border_type", btype->currentIndex()); + settings.setValue("studio/appearance/font_setting", cmbFontSetting->currentIndex()); + settings.setValue("studio/appearance/chk_hrt_show", chkHRTShow->isChecked() ? 1 : 0); + settings.setValue("studio/appearance/chk_cmyk", chkCMYK->isChecked() ? 1 : 0); + settings.setValue("studio/appearance/rotate", cmbRotate->currentIndex()); + settings.setValue("studio/appearance/chk_dotty", chkDotty->isChecked() ? 1 : 0); + settings.setValue("studio/appearance/dot_size", spnDotSize->value()); + + save_sub_settings(settings, m_bc.bc.symbol()); } void MainWindow::resizeEvent(QResizeEvent* event) @@ -209,8 +268,8 @@ void MainWindow::resizeEvent(QResizeEvent* event) void MainWindow::reset_view() { - m_fgcolor=qRgba(0,0,0,0xff); - m_bgcolor=qRgba(0xff,0xff,0xff,0xff); + m_fgcolor.setRgb(0, 0, 0, 0xff); + m_bgcolor.setRgb(0xff, 0xff, 0xff, 0xff); update_preview(); } @@ -227,16 +286,16 @@ bool MainWindow::save() #ifdef NO_PNG suffix = settings.value("studio/default_suffix", "gif").toString(); - save_dialog.setNameFilter(tr("Encapsulated Post Script (*.eps);;Graphics Interchange Format (*.gif);;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx);;Extended Metafile (*.emf);;Tagged Image File Format (*.tif)")); + save_dialog.setNameFilter(tr("Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif);;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx);;Extended Metafile (*.emf);;Tagged Image File Format (*.tif)")); #else suffix = settings.value("studio/default_suffix", "png").toString(); - save_dialog.setNameFilter(tr("Portable Network Graphic (*.png);;Encapsulated Post Script (*.eps);;Graphics Interchange Format (*.gif);;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx);;Extended Metafile (*.emf);;Tagged Image File Format (*.tif)")); + save_dialog.setNameFilter(tr("Portable Network Graphic (*.png);;Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif);;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx);;Extended Metafile (*.emf);;Tagged Image File Format (*.tif)")); #endif if (QString::compare(suffix, "png", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter("Portable Network Graphic (*.png)"); if (QString::compare(suffix, "eps", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter("Encapsulated Post Script (*.eps)"); + save_dialog.selectNameFilter("Encapsulated PostScript (*.eps)"); if (QString::compare(suffix, "gif", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter("Graphics Interchange Format (*.gif)"); if (QString::compare(suffix, "svg", Qt::CaseInsensitive) == 0) @@ -265,7 +324,7 @@ bool MainWindow::save() } if(m_bc.bc.save_to_file(filename) == false) { - if (m_bc.bc.getError() > 4) { + if (m_bc.bc.getError() >= ZINT_ERROR) { QMessageBox::critical(this, tr("Save Error"), m_bc.bc.error_message()); return false; } else { @@ -304,11 +363,11 @@ void MainWindow::about() "\"QR Code\" is a Registered Trademark of Denso Corp.
" "\"Telepen\" is a Registered Trademark of SB Electronics." "

Currently supported standards include:
" - "EN 797:1996, EN 798:1996, EN 12323:2005, ISO/IEC 15417:2007,
" + "BS 797:1996, BS 798:1996, ISO/IEC 12323:2005, ISO/IEC 15417:2007,
" "ISO/IEC 15438:2015, ISO/IEC 16022:2006, ISO/IEC 16023:2000,
" "ISO/IEC 16388:2007, ISO/IEC 18004:2015, ISO/IEC 24723:2010,
" "ISO/IEC 24724:2011, ISO/IEC 24728:2006, ISO/IEC 24778:2008,
" - "ISO/IEC 21471:2019, ANSI-HIBC 2.3-2009, ANSI/AIM BC6-2000,
" + "ISO/IEC 21471:2019, ANSI-HIBC 2.6-2016, ANSI/AIM BC6-2000,
" "ANSI/AIM BC12-1998, AIMD014 (v 1.63), USPS-B-3200" "
").arg(zint_version).arg(QT_VERSION_STR)); } @@ -352,16 +411,103 @@ void MainWindow::on_bgcolor_clicked() } } -void MainWindow::autoheight_clicked() +void MainWindow::autoheight_ui_set() { - if (chkAutoHeight->isChecked()) { + if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { lblHeight->setEnabled(false); heightb->setEnabled(false); } else { lblHeight->setEnabled(true); heightb->setEnabled(true); } - update_preview(); +} + +void MainWindow::HRTShow_ui_set() +{ + if (chkHRTShow->isEnabled() && chkHRTShow->isChecked()) { + lblFontSetting->setEnabled(true); + cmbFontSetting->setEnabled(true); + } else { + lblFontSetting->setEnabled(false); + cmbFontSetting->setEnabled(false); + } +} + +void MainWindow::dotty_ui_set() +{ + int symbology = metaObject()->enumerator(0).value(bstyle->currentIndex()); + + if (symbology == BARCODE_DOTCODE) { + chkDotty->setEnabled(false); + lblDotSize->setEnabled(true); + spnDotSize->setEnabled(true); + } else { + if (chkDotty->isEnabled() && chkDotty->isChecked()) { + lblDotSize->setEnabled(true); + spnDotSize->setEnabled(true); + } else { + lblDotSize->setEnabled(false); + spnDotSize->setEnabled(false); + } + } +} + +void MainWindow::on_encoded() +{ + if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { + heightb->setValue(m_bc.bc.height()); + } +} + +void MainWindow::filter_symbologies() +{ + QString filter = filter_bstyle->text().simplified(); /* `simplified()` trims and reduces inner whitespace to a single space - nice! */ + QListView *view = qobject_cast(bstyle->view()); + QStandardItemModel *model = qobject_cast(bstyle->model()); + QStandardItem *item; + + if (!view || !model) { + return; + } + + /* QString::split() only introduced Qt 5.14, so too new for us to use */ + QStringList filter_list; + if (!filter.isEmpty()) { + int i, j; + for (i = 0; (j = filter.indexOf(" ", i)) != -1; i = j + 1) { + filter_list << filter.mid(i, j - i); + } + filter_list << filter.mid(i); + } + int filter_cnt = filter_list.size(); + int cnt = metaObject()->enumerator(0).keyCount(); + + if (filter_cnt) { + for (int i = 0; i < cnt; i++) { + bool hidden = view->isRowHidden(i); + bool hide = true; + for (int j = 0; j < filter_cnt; j++) { + if (bstyle->itemText(i).contains(filter_list[j], Qt::CaseInsensitive)) { + hide = false; + break; + } + } + if ((hide && !hidden) || (!hide && hidden)) { + // https://stackoverflow.com/questions/25172220/how-to-hide-qcombobox-items-instead-of-clearing-them-out + item = model->item(i); + item->setFlags(hide ? item->flags() & ~Qt::ItemIsEnabled : item->flags() | Qt::ItemIsEnabled); + view->setRowHidden(i, hide); + } + } + } else { + for (int i = 0; i < cnt; i++) { + if (view->isRowHidden(i)) { + item = model->item(i); + item->setFlags(item->flags() | Qt::ItemIsEnabled); + view->setRowHidden(i, false); + } + } + } } void MainWindow::change_print_scale() @@ -370,6 +516,12 @@ void MainWindow::change_print_scale() m_bc.bc.setScale((float)spnScale->value()); } +void MainWindow::change_cmyk() +{ + /* This value is only used when printing (saving) to file */ + m_bc.bc.setCMYK(chkCMYK->isChecked()); +} + void MainWindow::quit_now() { close(); @@ -378,16 +530,17 @@ void MainWindow::quit_now() void MainWindow::copy_to_clipboard_svg() { QClipboard *clipboard = QGuiApplication::clipboard(); - QMimeData *data = new QMimeData; QString filename = ".zint.svg"; double scale = spnScale->value(); spnScale->setValue(5); if (!m_bc.bc.save_to_file(filename)) { + spnScale->setValue(scale); return; } + QMimeData *data = new QMimeData; data->setImageData(QImage(filename)); clipboard->setMimeData(data, QClipboard::Clipboard); @@ -399,13 +552,13 @@ void MainWindow::copy_to_clipboard_svg() void MainWindow::copy_to_clipboard_bmp() { QClipboard *clipboard = QGuiApplication::clipboard(); - QMimeData *data = new QMimeData; QString filename = ".zint.bmp"; if (!m_bc.bc.save_to_file(filename)) { return; } + QMimeData *data = new QMimeData; data->setImageData(QImage(filename)); clipboard->setMimeData(data, QClipboard::Clipboard); @@ -415,13 +568,24 @@ void MainWindow::copy_to_clipboard_bmp() void MainWindow::change_options() { QUiLoader uiload; + QSettings settings; + + bool initial_load = m_symbology == 0; + int original_tab_count = tabMain->count(); + int original_tab_index = tabMain->currentIndex(); int symbology = metaObject()->enumerator(0).value(bstyle->currentIndex()); + if (m_symbology) { + save_sub_settings(settings, m_symbology); + } + if (tabMain->count()==3) tabMain->removeTab(1); chkComposite->setText(tr("Add 2D Component")); btype->setItemText(0, tr("No border")); + combobox_item_enabled(cmbFontSetting, 1, true); + cmbFontSetting->setItemText(2, tr("Small")); if (symbology == BARCODE_CODE128) { @@ -478,7 +642,6 @@ void MainWindow::change_options() connect(m_optionWidget->findChild("cmbDotCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDotStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDotGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(m_optionWidget->findChild("txtDotSize"), SIGNAL(textChanged( QString )), SLOT(update_preview())); } if (symbology == BARCODE_AZTEC) @@ -530,12 +693,12 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Code 39")); connect(m_optionWidget->findChild("radC39Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC39Check"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC39HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); if (symbology == BARCODE_EXCODE39) { + tabMain->insertTab(1,m_optionWidget,tr("Code 39 Extended")); if(m_optionWidget->findChild("radC39HIBC")->isChecked() == true) { m_optionWidget->findChild("radC39HIBC")->setChecked(false); @@ -543,8 +706,10 @@ void MainWindow::change_options() } m_optionWidget->findChild("radC39HIBC")->setEnabled(false); } - else + else { + tabMain->insertTab(1,m_optionWidget,tr("Code 39")); m_optionWidget->findChild("radC39HIBC")->setEnabled(true); + } } if (symbology == BARCODE_LOGMARS) @@ -634,6 +799,7 @@ void MainWindow::change_options() connect(m_optionWidget->findChild("radQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radQRGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radQRHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } if (symbology == BARCODE_RMQR) @@ -648,6 +814,7 @@ void MainWindow::change_options() connect(m_optionWidget->findChild("cmbRMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radRMQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radRMQRGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkRMQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } if (symbology == BARCODE_HANXIN) @@ -660,6 +827,7 @@ void MainWindow::change_options() tabMain->insertTab(1,m_optionWidget,tr("Han Xin Code")); connect(m_optionWidget->findChild("cmbHXSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbHXECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkHXFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } if (symbology == BARCODE_MICROQR) @@ -672,6 +840,7 @@ void MainWindow::change_options() tabMain->insertTab(1,m_optionWidget,tr("Micro QR Code")); connect(m_optionWidget->findChild("cmbMQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkMQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } if (symbology == BARCODE_GRIDMATRIX) @@ -684,6 +853,7 @@ void MainWindow::change_options() tabMain->insertTab(1,m_optionWidget,tr("Grid Matrix")); connect(m_optionWidget->findChild("cmbGridSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbGridECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkGridFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } if (symbology == BARCODE_MAXICODE) @@ -768,6 +938,11 @@ void MainWindow::change_options() m_optionWidget=uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("UPC-A")); + combobox_item_enabled(cmbFontSetting, 1, false); + if (cmbFontSetting->currentIndex() == 1) { + cmbFontSetting->setCurrentIndex(0); + } + cmbFontSetting->setItemText(2, tr("Small (vector only)")); connect(m_optionWidget->findChild("cmbUPCAAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } @@ -787,6 +962,11 @@ void MainWindow::change_options() } else { tabMain->insertTab(1, m_optionWidget, tr("EAN")); } + combobox_item_enabled(cmbFontSetting, 1, false); + if (cmbFontSetting->currentIndex() == 1) { + cmbFontSetting->setCurrentIndex(0); + } + cmbFontSetting->setItemText(2, tr("Small (vector only)")); connect(m_optionWidget->findChild("cmbUPCEANAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } @@ -816,23 +996,47 @@ void MainWindow::change_options() grpComposite->show(); break; default: - chkComposite->setChecked(false); grpComposite->hide(); break; } - tabMain->setCurrentIndex(0); + cmbECI->setEnabled(m_bc.bc.supportsECI(symbology)); /* Will need checking again in update_preview() as encoding mode dependent (HIBC) */ + chkRInit->setEnabled(m_bc.bc.supportsReaderInit(symbology)); /* Ditto (HIBC and GS1) */ + chkAutoHeight->setEnabled(!m_bc.bc.isFixedRatio(symbology)); + chkHRTShow->setEnabled(m_bc.bc.hasHRT(symbology)); + chkDotty->setEnabled(m_bc.bc.isDotty(symbology)); + + load_sub_settings(settings, symbology); + + composite_ui_set(); + autoheight_ui_set(); + HRTShow_ui_set(); + dotty_ui_set(); + + if (initial_load) { + tabMain->setCurrentIndex(settings.value("studio/tab_index", 0).toInt()); + } else if (original_tab_count == tabMain->count()) { + tabMain->setCurrentIndex(original_tab_index); + } else if (original_tab_count > tabMain->count()) { + tabMain->setCurrentIndex(original_tab_index == 2 ? 1 : 0); + } else { + tabMain->setCurrentIndex(original_tab_index == 1 ? 2 : 0); + } } -void MainWindow::composite_enable() +void MainWindow::composite_ui_set() { - if(chkComposite->isChecked() == true) + if (!grpComposite->isHidden() && chkComposite->isChecked()) { lblCompType->setEnabled(true); cmbCompType->setEnabled(true); lblComposite->setEnabled(true); txtComposite->setEnabled(true); - if (metaObject()->enumerator(0).value(bstyle->currentIndex())==BARCODE_CODE128) - m_optionWidget->findChild("radC128EAN")->setChecked(true); + if (metaObject()->enumerator(0).value(bstyle->currentIndex()) == BARCODE_CODE128) { + QRadioButton *radioButton = m_optionWidget->findChild("radC128EAN"); + if (radioButton) { + radioButton->setChecked(true); + } + } } else { @@ -847,7 +1051,8 @@ void MainWindow::composite_ean_check() { if (metaObject()->enumerator(0).value(bstyle->currentIndex())!=BARCODE_CODE128) return; - if(!m_optionWidget->findChild("radC128EAN")->isChecked()) + QRadioButton *radioButton = m_optionWidget->findChild("radC128EAN"); + if (radioButton && !radioButton->isChecked()) chkComposite->setChecked(false); } @@ -864,7 +1069,19 @@ void MainWindow::maxi_primary() } } -void MainWindow::upcean_addon_gap(QComboBox *comboBox, QLabel* label, int base) +// Taken from https://stackoverflow.com/questions/38915001/disable-specific-items-in-qcombobox +void MainWindow::combobox_item_enabled(QComboBox *comboBox, int index, bool enabled) +{ + QStandardItemModel *model = qobject_cast(comboBox->model()); + if (model) { + QStandardItem *item = model->item(index); + if (item) { + item->setEnabled(enabled); + } + } +} + +void MainWindow::upcean_addon_gap(QComboBox *comboBox, QLabel *label, int base) { const QRegularExpression addonRE("^[0-9X]+[+][0-9]+$"); int item_val; @@ -901,7 +1118,7 @@ void MainWindow::update_preview() QCheckBox *checkBox; //m_bc.ar=(Zint::QZint::AspectRatioMode)1; - if(chkComposite->isChecked() == true) { + if (!grpComposite->isHidden() && chkComposite->isChecked()) { m_bc.bc.setPrimaryMessage(txtData->text()); m_bc.bc.setText(txtComposite->toPlainText()); } else { @@ -919,11 +1136,8 @@ void MainWindow::update_preview() if (chkEscape->isChecked()) { m_bc.bc.setInputMode(m_bc.bc.inputMode() | ESCAPE_MODE); } - m_bc.bc.setHideText(0); - if(chkHRTHide->isChecked() == false) { - m_bc.bc.setHideText(1); - } m_bc.bc.setGSSep(false); + m_bc.bc.setDotSize(0.4f / 0.5f); switch (symbology) { @@ -1046,7 +1260,6 @@ void MainWindow::update_preview() m_bc.bc.setSymbol(BARCODE_DOTCODE); m_bc.bc.setOption2(m_optionWidget->findChild("cmbDotCols")->currentIndex()); set_gs1_mode(m_optionWidget->findChild("radDotGS1")->isChecked()); - m_bc.bc.setDotSize(m_optionWidget->findChild("txtDotSize")->text().toFloat()); break; case BARCODE_AZTEC: @@ -1196,6 +1409,9 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setSecurityLevel(item_val); } + if (m_optionWidget->findChild("chkQRFullMultibyte")->isChecked()) { + m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); + } break; case BARCODE_MICROQR: @@ -1208,6 +1424,9 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setSecurityLevel(item_val); } + if (m_optionWidget->findChild("chkMQRFullMultibyte")->isChecked()) { + m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); + } break; case BARCODE_RMQR: @@ -1223,6 +1442,9 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setSecurityLevel(item_val * 2); // Levels 2 (M) and 4 (H) only } + if (m_optionWidget->findChild("chkRMQRFullMultibyte")->isChecked()) { + m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); + } break; case BARCODE_GRIDMATRIX: @@ -1235,6 +1457,9 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setSecurityLevel(item_val); } + if (m_optionWidget->findChild("chkGridFullMultibyte")->isChecked()) { + m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); + } break; case BARCODE_MAXICODE: @@ -1282,6 +1507,9 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setSecurityLevel(item_val); } + if (m_optionWidget->findChild("chkHXFullMultibyte")->isChecked()) { + m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); + } break; case BARCODE_ULTRA: @@ -1302,22 +1530,713 @@ void MainWindow::update_preview() m_bc.bc.setSymbol(symbology); break; } + m_symbology = m_bc.bc.symbol(); - if(chkComposite->isChecked()) + /* Recheck ECI and Reader Init */ + cmbECI->setEnabled(m_bc.bc.supportsECI()); + lblECI->setEnabled(cmbECI->isEnabled()); + chkRInit->setEnabled(m_bc.bc.supportsReaderInit() && (m_bc.bc.inputMode() & 0x07) != GS1_MODE); + + if (!grpComposite->isHidden() && chkComposite->isChecked()) m_bc.bc.setSecurityLevel(cmbCompType->currentIndex()); - m_bc.bc.setBorderType((Zint::QZint::BorderType)(btype->currentIndex()*2)); - m_bc.bc.setBorderWidth(bwidth->value()); - if(chkAutoHeight->isChecked()) { + if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { m_bc.bc.setHeight(0); } else { m_bc.bc.setHeight(heightb->value()); } + m_bc.bc.setECI(cmbECI->isEnabled() ? cmbECI->currentIndex() : 0); + m_bc.bc.setReaderInit(chkRInit->isEnabled() && chkRInit->isChecked()); + m_bc.bc.setShowText(chkHRTShow->isEnabled() && chkHRTShow->isChecked()); + m_bc.bc.setBorderType(btype->currentIndex()); + m_bc.bc.setBorderWidth(bwidth->value()); m_bc.bc.setWhitespace(spnWhitespace->value()); + m_bc.bc.setFontSetting(cmbFontSetting->currentIndex()); + m_bc.bc.setRotateAngle(cmbRotate->currentIndex()); + m_bc.bc.setDotty(chkDotty->isEnabled() && chkDotty->isChecked()); + if (m_symbology == BARCODE_DOTCODE || (chkDotty->isEnabled() && chkDotty->isChecked())) { + m_bc.bc.setDotSize(spnDotSize->value()); + } m_bc.bc.setFgColor(m_fgcolor); m_bc.bc.setBgColor(m_bgcolor); + change_print_scale(); + change_cmyk(); m_bc.setSize(width - 10, height - 10); m_bc.update(); - scene->setSceneRect(0, 0, width - 10, height - 10); + scene->setSceneRect(m_bc.boundingRect()); scene->update(); } + +/* Return settings subsection name for a symbol */ +const char *MainWindow::get_setting_name(int symbology) { + struct item { + const char *name; + int define; + int val; + }; + static const struct item data[] = { + { "", -1, 0 }, + { "code11", BARCODE_CODE11, 1 }, + { "c25standard", BARCODE_C25STANDARD, 2 }, + { "c25inter", BARCODE_C25INTER, 3 }, + { "c25iata", BARCODE_C25IATA, 4 }, + { "", -1, 5 }, + { "c25logic", BARCODE_C25LOGIC, 6 }, + { "c25ind", BARCODE_C25IND, 7 }, + { "code39", BARCODE_CODE39, 8 }, + { "excode39", BARCODE_EXCODE39, 9 }, + { "", -1, 10 }, + { "", -1, 11 }, + { "", -1, 12 }, + { "eanx", BARCODE_EANX, 13 }, + { "eanx", BARCODE_EANX_CHK, 14 }, + { "", -1, 15 }, + { "code128", BARCODE_GS1_128, 16 }, + { "", -1, 17 }, + { "codabar", BARCODE_CODABAR, 18 }, + { "", -1, 19 }, + { "code128", BARCODE_CODE128, 20 }, + { "dpleit", BARCODE_DPLEIT, 21 }, + { "dpident", BARCODE_DPIDENT, 22 }, + { "code16k", BARCODE_CODE16K, 23 }, + { "code49", BARCODE_CODE49, 24 }, + { "code93", BARCODE_CODE93, 25 }, + { "", -1, 26 }, + { "", -1, 27 }, + { "flat", BARCODE_FLAT, 28 }, + { "dbar_omn", BARCODE_DBAR_OMN, 29 }, + { "dbar_ltd", BARCODE_DBAR_LTD, 30 }, + { "dbar_exp", BARCODE_DBAR_EXP, 31 }, + { "telepen", BARCODE_TELEPEN, 32 }, + { "", -1, 33 }, + { "upca", BARCODE_UPCA, 34 }, + { "upca", BARCODE_UPCA_CHK, 35 }, + { "", -1, 36 }, + { "upce", BARCODE_UPCE, 37 }, + { "upce", BARCODE_UPCE_CHK, 38 }, + { "", -1, 39 }, + { "postnet", BARCODE_POSTNET, 40 }, + { "", -1, 41 }, + { "", -1, 42 }, + { "", -1, 43 }, + { "", -1, 44 }, + { "", -1, 45 }, + { "", -1, 46 }, + { "msi_plessey", BARCODE_MSI_PLESSEY, 47 }, + { "", -1, 48 }, + { "fim", BARCODE_FIM, 49 }, + { "logmars", BARCODE_LOGMARS, 50 }, + { "pharma", BARCODE_PHARMA, 51 }, + { "pzn", BARCODE_PZN, 52 }, + { "pharma_two", BARCODE_PHARMA_TWO, 53 }, + { "", -1, 54 }, + { "pdf417", BARCODE_PDF417, 55 }, + { "pdf417", BARCODE_PDF417COMP, 56 }, + { "maxicode", BARCODE_MAXICODE, 57 }, + { "qrcode", BARCODE_QRCODE, 58 }, + { "", -1, 59 }, + { "code128", BARCODE_CODE128B, 60 }, + { "", -1, 61 }, + { "", -1, 62 }, + { "auspost", BARCODE_AUSPOST, 63 }, + { "", -1, 64 }, + { "", -1, 65 }, + { "ausreply", BARCODE_AUSREPLY, 66 }, + { "ausroute", BARCODE_AUSROUTE, 67 }, + { "ausredirect", BARCODE_AUSREDIRECT, 68 }, + { "isbnx", BARCODE_ISBNX, 69 }, + { "rm4scc", BARCODE_RM4SCC, 70 }, + { "datamatrix", BARCODE_DATAMATRIX, 71 }, + { "ean14", BARCODE_EAN14, 72 }, + { "vin", BARCODE_VIN, 73 }, + { "codablockf", BARCODE_CODABLOCKF, 74 }, + { "nve18", BARCODE_NVE18, 75 }, + { "japanpost", BARCODE_JAPANPOST, 76 }, + { "koreapost", BARCODE_KOREAPOST, 77 }, + { "", -1, 78 }, + { "dbar_stk", BARCODE_DBAR_STK, 79 }, + { "dbar_omnstk", BARCODE_DBAR_OMNSTK, 80 }, + { "dbar_expstk", BARCODE_DBAR_EXPSTK, 81 }, + { "planet", BARCODE_PLANET, 82 }, + { "", -1, 83 }, + { "micropdf417", BARCODE_MICROPDF417, 84 }, + { "usps_imail", BARCODE_USPS_IMAIL, 85 }, + { "plessey", BARCODE_PLESSEY, 86 }, + { "telepen_num", BARCODE_TELEPEN_NUM, 87 }, + { "", -1, 88 }, + { "itf14", BARCODE_ITF14, 89 }, + { "kix", BARCODE_KIX, 90 }, + { "", -1, 91 }, + { "aztec", BARCODE_AZTEC, 92 }, + { "daft", BARCODE_DAFT, 93 }, + { "", -1, 94 }, + { "", -1, 95 }, + { "dpd", BARCODE_DPD, 96 }, + { "microqr", BARCODE_MICROQR, 97 }, + { "code128", BARCODE_HIBC_128, 98 }, + { "code39", BARCODE_HIBC_39, 99 }, + { "", -1, 100 }, + { "", -1, 101 }, + { "datamatrix", BARCODE_HIBC_DM, 102 }, + { "", -1, 103 }, + { "qrcode", BARCODE_HIBC_QR, 104 }, + { "", -1, 105 }, + { "pdf417", BARCODE_HIBC_PDF, 106 }, + { "", -1, 107 }, + { "micropdf417", BARCODE_HIBC_MICPDF, 108 }, + { "", -1, 109 }, + { "codablockf", BARCODE_HIBC_BLOCKF, 110 }, + { "", -1, 111 }, + { "aztec", BARCODE_HIBC_AZTEC, 112 }, + { "", -1, 113 }, + { "", -1, 114 }, + { "dotcode", BARCODE_DOTCODE, 115 }, + { "hanxin", BARCODE_HANXIN, 116 }, + { "", -1, 117 }, + { "", -1, 118 }, + { "", -1, 119 }, + { "", -1, 120 }, + { "mailmark", BARCODE_MAILMARK, 121 }, + { "", -1, 122 }, + { "", -1, 123 }, + { "", -1, 124 }, + { "", -1, 125 }, + { "", -1, 126 }, + { "", -1, 127 }, + { "azrune", BARCODE_AZRUNE, 128 }, + { "code32", BARCODE_CODE32, 129 }, + { "eanx", BARCODE_EANX_CC, 130 }, + { "code128", BARCODE_GS1_128_CC, 131 }, + { "dbar_omn", BARCODE_DBAR_OMN_CC, 132 }, + { "dbar_ltd", BARCODE_DBAR_LTD_CC, 133 }, + { "dbar_exp", BARCODE_DBAR_EXP_CC, 134 }, + { "upca", BARCODE_UPCA_CC, 135 }, + { "upce", BARCODE_UPCE_CC, 136 }, + { "dbar_stk", BARCODE_DBAR_STK_CC, 137 }, + { "dbar_omnstk", BARCODE_DBAR_OMNSTK_CC, 138 }, + { "dbar_expstk", BARCODE_DBAR_EXPSTK_CC, 139 }, + { "channel", BARCODE_CHANNEL, 140 }, + { "codeone", BARCODE_CODEONE, 141 }, + { "gridmatrix", BARCODE_GRIDMATRIX, 142 }, + { "upnqr", BARCODE_UPNQR, 143 }, + { "ultra", BARCODE_ULTRA, 144 }, + { "rmqr", BARCODE_RMQR, 145 }, + }; + static const int data_size = sizeof(data) / sizeof(struct item); + + if (symbology < 0 || symbology >= data_size) { + return ""; + } + if (data[symbology].val != symbology || (data[symbology].define != -1 && data[symbology].define != symbology)) { // Self-check + fprintf(stderr, "MainWindow::get_setting_name: data table out of sync (%d)\n", symbology); + return ""; + } + return data[symbology].name; +} + +/* Helper to return index of selected radio button in group, checking for NULL */ +int MainWindow::get_button_group_index(const QStringList &children) { + QRadioButton *radioButton; + for (int index = 0; index < children.size(); index++) { + radioButton = m_optionWidget->findChild(children[index]); + if (radioButton && radioButton->isChecked()) { + return index; + } + } + return 0; +} + +/* Helper to set radio button in group from index in settings, checking for NULL */ +void MainWindow::set_radiobutton_from_setting(QSettings &settings, const QString &setting, const QStringList &children, int default_val) { + int index = settings.value(setting, default_val).toInt(); + QRadioButton *radioButton; + if (index >= 0 && index < children.size()) { + radioButton = m_optionWidget->findChild(children[index]); + } else { + radioButton = m_optionWidget->findChild(children[0]); + } + if (radioButton) { + radioButton->setChecked(true); + } +} + +/* Helper to return index of selected item in combobox, checking for NULL */ +int MainWindow::get_combobox_index(const QString &child) { + QComboBox *comboBox = m_optionWidget->findChild(child); + return comboBox ? comboBox->currentIndex() : 0; +} + +/* Helper to set item in combobox from index in settings, checking for NULL */ +void MainWindow::set_combobox_from_setting(QSettings &settings, const QString &setting, const QString &child, int default_val) { + QComboBox *comboBox = m_optionWidget->findChild(child); + if (comboBox) { + comboBox->setCurrentIndex(settings.value(setting, default_val).toInt()); + } +} + +/* Helper to return if checkbox checked, checking for NULL */ +int MainWindow::get_checkbox_val(const QString &child) { + QCheckBox *checkBox = m_optionWidget->findChild(child); + return checkBox && checkBox->isChecked() ? 1 : 0; +} + +/* Helper to set checkbox from settings, checking for NULL */ +void MainWindow::set_checkbox_from_setting(QSettings &settings, const QString &setting, const QString &child, int default_val) { + QCheckBox *checkBox = m_optionWidget->findChild(child); + if (checkBox) { + checkBox->setChecked(settings.value(setting, default_val).toInt() ? true : false); + } +} + +/* Helper to return text of line edit, checking for NULL */ +QString MainWindow::get_lineedit_val(const QString &child) { + QLineEdit *lineEdit = m_optionWidget->findChild(child); + return lineEdit ? lineEdit->text() : ""; +} + +/* Helper to set line edit from settings, checking for NULL */ +void MainWindow::set_lineedit_from_setting(QSettings &settings, const QString &setting, const QString &child, const char *default_val) { + QLineEdit *lineEdit = m_optionWidget->findChild(child); + if (lineEdit) { + lineEdit->setText(settings.value(setting, default_val).toString()); + } +} + +/* Save settings for an individual symbol */ +void MainWindow::save_sub_settings(QSettings &settings, int symbology) { + + const char *name = get_setting_name(symbology); + if (*name) { + settings.setValue(QString("studio/bc/%1/data").arg(name), txtData->text()); + if (!grpComposite->isHidden()) { + settings.setValue(QString("studio/bc/%1/composite_text").arg(name), txtComposite->toPlainText()); + settings.setValue(QString("studio/bc/%1/chk_composite").arg(name), chkComposite->isChecked() ? 1 : 0); + settings.setValue(QString("studio/bc/%1/comp_type").arg(name), cmbCompType->currentIndex()); + } + if (cmbECI->isEnabled()) { + settings.setValue(QString("studio/bc/%1/eci").arg(name), cmbECI->currentIndex()); + } + settings.setValue(QString("studio/bc/%1/chk_escape").arg(name), chkEscape->isChecked() ? 1 : 0); + settings.setValue(QString("studio/bc/%1/chk_data").arg(name), chkData->isChecked() ? 1 : 0); + if (chkRInit->isEnabled()) { + settings.setValue(QString("studio/bc/%1/chk_rinit").arg(name), chkRInit->isChecked() ? 1 : 0); + } + if (chkAutoHeight->isEnabled()) { + settings.setValue(QString("studio/bc/%1/appearance/autoheight").arg(name), chkAutoHeight->isChecked() ? 1 : 0); + settings.setValue(QString("studio/bc/%1/appearance/height").arg(name), heightb->value()); + } + settings.setValue(QString("studio/bc/%1/appearance/border").arg(name), bwidth->value()); + settings.setValue(QString("studio/bc/%1/appearance/whitespace").arg(name), spnWhitespace->value()); + settings.setValue(QString("studio/bc/%1/appearance/scale").arg(name), spnScale->value()); + settings.setValue(QString("studio/bc/%1/appearance/border_type").arg(name), btype->currentIndex()); + if (chkHRTShow->isEnabled()) { + settings.setValue(QString("studio/bc/%1/appearance/font_setting").arg(name), cmbFontSetting->currentIndex()); + settings.setValue(QString("studio/bc/%1/appearance/chk_hrt_show").arg(name), chkHRTShow->isChecked() ? 1 : 0); + } + settings.setValue(QString("studio/bc/%1/appearance/cmyk").arg(name), chkCMYK->isChecked() ? 1 : 0); + settings.setValue(QString("studio/bc/%1/appearance/rotate").arg(name), cmbRotate->currentIndex()); + if (symbology == BARCODE_DOTCODE || chkDotty->isEnabled()) { + settings.setValue(QString("studio/bc/%1/appearance/chk_dotty").arg(name), chkDotty->isChecked() ? 1 : 0); + settings.setValue(QString("studio/bc/%1/appearance/dot_size").arg(name), spnDotSize->value()); + } + settings.setValue(QString("studio/bc/%1/ink/red").arg(name), m_fgcolor.red()); + settings.setValue(QString("studio/bc/%1/ink/green").arg(name), m_fgcolor.green()); + settings.setValue(QString("studio/bc/%1/ink/blue").arg(name), m_fgcolor.blue()); + settings.setValue(QString("studio/bc/%1/ink/alpha").arg(name), m_fgcolor.alpha()); + settings.setValue(QString("studio/bc/%1/paper/red").arg(name), m_bgcolor.red()); + settings.setValue(QString("studio/bc/%1/paper/green").arg(name), m_bgcolor.green()); + settings.setValue(QString("studio/bc/%1/paper/blue").arg(name), m_bgcolor.blue()); + settings.setValue(QString("studio/bc/%1/paper/alpha").arg(name), m_bgcolor.alpha()); + } + + switch (symbology) { + case BARCODE_CODE128: + case BARCODE_CODE128B: + case BARCODE_GS1_128: + case BARCODE_GS1_128_CC: + case BARCODE_HIBC_128: + settings.setValue("studio/bc/code128/encoding_mode", get_button_group_index(QStringList() << "radC128Stand" << "radC128EAN" << "radC128CSup" << "radC128HIBC")); + break; + + case BARCODE_PDF417: + case BARCODE_PDF417COMP: + case BARCODE_HIBC_PDF: + settings.setValue("studio/bc/pdf417/cols", get_combobox_index("cmbPDFCols")); + settings.setValue("studio/bc/pdf417/ecc", get_combobox_index("cmbPDFECC")); + settings.setValue("studio/bc/pdf417/encoding_mode", get_button_group_index(QStringList() << "radPDFStand" << "radPDFTruncated" << "radPDFHIBC")); + break; + + case BARCODE_MICROPDF417: + case BARCODE_HIBC_MICPDF: + settings.setValue("studio/bc/micropdf417/cols", get_combobox_index("cmbMPDFCols")); + settings.setValue("studio/bc/micropdf417/encoding_mode", get_button_group_index(QStringList() << "radMPDFStand" << "radMPDFHIBC")); + break; + + case BARCODE_DOTCODE: + settings.setValue("studio/bc/dotcode/cols", get_combobox_index("cmbDotCols")); + settings.setValue("studio/bc/dotcode/encoding_mode", get_button_group_index(QStringList() << "radDotStand" << "radDotGS1")); + break; + + case BARCODE_AZTEC: + case BARCODE_HIBC_AZTEC: + settings.setValue("studio/bc/aztec/autoresizing", get_button_group_index(QStringList() << "radAztecAuto" << "radAztecSize" << "radAztecECC")); + settings.setValue("studio/bc/aztec/size", get_combobox_index("cmbAztecSize")); + settings.setValue("studio/bc/aztec/ecc", get_combobox_index("cmbAztecECC")); + settings.setValue("studio/bc/aztec/encoding_mode", get_button_group_index(QStringList() << "radAztecStand" << "radAztecGS1" << "radAztecHIBC")); + break; + + case BARCODE_MSI_PLESSEY: + settings.setValue("studio/bc/msi_plessey/check_digit", get_combobox_index("cmbMSICheck")); + break; + + case BARCODE_CODE11: + settings.setValue("studio/bc/code11/check_digit", get_button_group_index(QStringList() << "radC11TwoCheckDigits" << "radC11OneCheckDigit" << "radC11NoCheckDigits")); + break; + + case BARCODE_CODE39: + case BARCODE_HIBC_39: + settings.setValue("studio/bc/code39/check_digit", get_button_group_index(QStringList() << "radC39Stand" << "radC39Check" << "radC39HIBC")); + break; + + case BARCODE_EXCODE39: + settings.setValue("studio/bc/excode39/check_digit", get_button_group_index(QStringList() << "radC39Stand" << "radC39Check")); + break; + + case BARCODE_LOGMARS: + settings.setValue("studio/bc/logmars/check_digit", get_button_group_index(QStringList() << "radLOGMARSStand" << "radLOGMARSCheck")); + break; + + case BARCODE_CODE16K: + settings.setValue("studio/bc/code16k/row_sep_height", get_combobox_index("cmbC16kRowSepHeight")); + settings.setValue("studio/bc/code16k/encoding_mode", get_button_group_index(QStringList() << "radC16kStand" << "radC16kGS1")); + break; + + case BARCODE_CODABAR: + settings.setValue("studio/bc/codabar/chk_check_char", get_checkbox_val("chkCodabarCheck")); + break; + + case BARCODE_CODABLOCKF: + case BARCODE_HIBC_BLOCKF: + settings.setValue("studio/bc/codablockf/width", get_combobox_index("cmbCbfWidth")); + settings.setValue("studio/bc/codablockf/height", get_combobox_index("cmbCbfHeight")); + settings.setValue("studio/bc/codablockf/row_sep_height", get_combobox_index("cmbCbfRowSepHeight")); + settings.setValue("studio/bc/codablockf/encoding_mode", get_button_group_index(QStringList() << "radCbfStand" << "radCbfHIBC")); + break; + + case BARCODE_DATAMATRIX: + case BARCODE_HIBC_DM: + settings.setValue("studio/bc/datamatrix/size", get_combobox_index("cmbDM200Size")); + settings.setValue("studio/bc/datamatrix/encoding_mode", get_button_group_index(QStringList() << "radDM200Stand" << "radDM200GS1" << "radDM200HIBC")); + settings.setValue("studio/bc/datamatrix/chk_suppress_rect", get_checkbox_val("chkDMRectangle")); + settings.setValue("studio/bc/datamatrix/chk_allow_dmre", get_checkbox_val("chkDMRE")); + settings.setValue("studio/bc/datamatrix/chk_gs_sep", get_checkbox_val("chkDMGSSep")); + break; + + case BARCODE_QRCODE: + case BARCODE_HIBC_QR: + settings.setValue("studio/bc/qrcode/size", get_combobox_index("cmbQRSize")); + settings.setValue("studio/bc/qrcode/ecc", get_combobox_index("cmbQRECC")); + settings.setValue("studio/bc/qrcode/encoding_mode", get_button_group_index(QStringList() << "radDM200Stand" << "radQRGS1" << "radQRHIBC")); + settings.setValue("studio/bc/qrcode/chk_full_multibyte", get_checkbox_val("chkQRFullMultibyte")); + break; + + case BARCODE_RMQR: + settings.setValue("studio/bc/rmqr/size", get_combobox_index("cmbRMQRSize")); + settings.setValue("studio/bc/rmqr/ecc", get_combobox_index("cmbRMQRECC")); + settings.setValue("studio/bc/rmqr/encoding_mode", get_button_group_index(QStringList() << "radQRStand" << "radRMQRGS1")); + settings.setValue("studio/bc/rmqr/chk_full_multibyte", get_checkbox_val("chkRMQRFullMultibyte")); + break; + + case BARCODE_HANXIN: + settings.setValue("studio/bc/hanxin/size", get_combobox_index("cmbHXSize")); + settings.setValue("studio/bc/hanxin/ecc", get_combobox_index("cmbHXECC")); + settings.setValue("studio/bc/hanxin/chk_full_multibyte", get_checkbox_val("chkHXFullMultibyte")); + break; + + case BARCODE_MICROQR: + settings.setValue("studio/bc/microqr/size", get_combobox_index("cmbMQRSize")); + settings.setValue("studio/bc/microqr/ecc", get_combobox_index("cmbMQRECC")); + settings.setValue("studio/bc/microqr/chk_full_multibyte", get_checkbox_val("chkMQRFullMultibyte")); + break; + + case BARCODE_GRIDMATRIX: + settings.setValue("studio/bc/gridmatrix/size", get_combobox_index("cmbGridSize")); + settings.setValue("studio/bc/gridmatrix/ecc", get_combobox_index("cmbGridECC")); + settings.setValue("studio/bc/gridmatrix/chk_full_multibyte", get_checkbox_val("chkGridFullMultibyte")); + break; + + case BARCODE_MAXICODE: + settings.setValue("studio/bc/maxicode/mode", get_combobox_index("cmbMaxiMode")); + settings.setValue("studio/bc/maxicode/primary_message", get_lineedit_val("txtMaxiPrimary")); + break; + + case BARCODE_CODEONE: + settings.setValue("studio/bc/codeone/size", get_combobox_index("cmbC1Size")); + settings.setValue("studio/bc/codeone/encoding_mode", get_button_group_index(QStringList() << "radC1Stand" << "radC1GS1")); + break; + + case BARCODE_CODE49: + settings.setValue("studio/bc/code49/row_sep_height", get_combobox_index("cmbC49RowSepHeight")); + settings.setValue("studio/bc/code49/encoding_mode", get_button_group_index(QStringList() << "radC49Stand" << "radC49GS1")); + break; + + case BARCODE_DBAR_EXPSTK: + case BARCODE_DBAR_EXPSTK_CC: + settings.setValue("studio/bc/dbar_expstk/cols", get_combobox_index("cmbCols")); + break; + + case BARCODE_ULTRA: + settings.setValue("studio/bc/ultra/autoresizing", get_button_group_index(QStringList() << "radUltraAuto" << "radUltraEcc")); + settings.setValue("studio/bc/ultra/ecc", get_combobox_index("cmbUltraEcc")); + settings.setValue("studio/bc/ultra/encoding_mode", get_button_group_index(QStringList() << "radUltraStand" << "radUltraGS1")); + break; + + case BARCODE_UPCA: + case BARCODE_UPCA_CHK: + case BARCODE_UPCA_CC: + settings.setValue("studio/bc/upca/addongap", get_combobox_index("cmbUPCAAddonGap")); + break; + + case BARCODE_EANX: + case BARCODE_EANX_CHK: + case BARCODE_EANX_CC: + settings.setValue("studio/bc/eanx/addongap", get_combobox_index("cmbUPCEANAddonGap")); + break; + + case BARCODE_UPCE: + case BARCODE_UPCE_CHK: + case BARCODE_UPCE_CC: + settings.setValue("studio/bc/upce/addongap", get_combobox_index("cmbUPCEANAddonGap")); + break; + + case BARCODE_ISBNX: + settings.setValue("studio/bc/isnbx/addongap", get_combobox_index("cmbUPCEANAddonGap")); + break; + + case BARCODE_VIN: + settings.setValue("studio/bc/vin/chk_import_char_prefix", get_checkbox_val("chkVINImportChar")); + break; + } +} + +/* Load settings for an individual symbol */ +void MainWindow::load_sub_settings(QSettings &settings, int symbology) { + + const char *name = get_setting_name(symbology); + if (*name) { + const QString &data = settings.value(QString("studio/bc/%1/data").arg(name), "").toString(); + if (!data.isEmpty()) { + txtData->setText(data); + } + if (!grpComposite->isHidden()) { + const QString &composite_text = settings.value(QString("studio/bc/%1/composite_text").arg(name), "").toString(); + if (!composite_text.isEmpty()) { + txtComposite->setText(composite_text); + } + chkComposite->setChecked(settings.value(QString("studio/bc/%1/chk_composite").arg(name), 0).toInt() ? true : false); + cmbCompType->setCurrentIndex(settings.value(QString("studio/bc/%1/comp_type").arg(name), 0).toInt()); + } + if (cmbECI->isEnabled()) { + cmbECI->setCurrentIndex(settings.value(QString("studio/bc/%1/eci").arg(name), 0).toInt()); + } + chkEscape->setChecked(settings.value(QString("studio/bc/%1/chk_escape").arg(name)).toInt() ? true : false); + chkData->setChecked(settings.value(QString("studio/bc/%1/chk_data").arg(name)).toInt() ? true : false); + if (chkRInit->isEnabled()) { + chkRInit->setChecked(settings.value(QString("studio/bc/%1/chk_rinit").arg(name)).toInt() ? true : false); + } + if (chkAutoHeight->isEnabled()) { + chkAutoHeight->setChecked(settings.value(QString("studio/bc/%1/appearance/autoheight").arg(name), 1).toInt() ? true : false); + heightb->setValue(settings.value(QString("studio/bc/%1/appearance/height").arg(name), 50).toInt()); + } + bwidth->setValue(settings.value(QString("studio/bc/%1/appearance/border").arg(name), 0).toInt()); + spnWhitespace->setValue(settings.value(QString("studio/bc/%1/appearance/whitespace").arg(name), 0).toInt()); + spnScale->setValue(settings.value(QString("studio/bc/%1/appearance/scale").arg(name), 1.0).toFloat()); + btype->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/border_type").arg(name), 0).toInt()); + if (chkHRTShow->isEnabled()) { + cmbFontSetting->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/font_setting").arg(name), 0).toInt()); + chkHRTShow->setChecked(settings.value(QString("studio/bc/%1/appearance/chk_hrt_show").arg(name), 1).toInt() ? true : false); + } + chkCMYK->setChecked(settings.value(QString("studio/bc/%1/appearance/cmyk").arg(name), 0).toInt() ? true : false); + cmbRotate->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/rotate").arg(name), 0).toInt()); + if (symbology == BARCODE_DOTCODE || chkDotty->isEnabled()) { + chkDotty->setChecked(settings.value(QString("studio/bc/%1/appearance/chk_dotty").arg(name), 0).toInt() ? true : false); + spnDotSize->setValue(settings.value(QString("studio/bc/%1/appearance/dot_size").arg(name), 0.4f / 0.5f).toFloat()); + } + m_fgcolor.setRgb(settings.value(QString("studio/bc/%1/ink/red").arg(name), 0).toInt(), + settings.value(QString("studio/bc/%1/ink/green").arg(name), 0).toInt(), + settings.value(QString("studio/bc/%1/ink/blue").arg(name), 0).toInt(), + settings.value(QString("studio/bc/%1/ink/alpha").arg(name), 0xff).toInt()); + m_bgcolor.setRgb(settings.value(QString("studio/bc/%1/paper/red").arg(name), 0xff).toInt(), + settings.value(QString("studio/bc/%1/paper/green").arg(name), 0xff).toInt(), + settings.value(QString("studio/bc/%1/paper/blue").arg(name), 0xff).toInt(), + settings.value(QString("studio/bc/%1/paper/alpha").arg(name), 0xff).toInt()); + } + + switch (symbology) { + case BARCODE_CODE128: + case BARCODE_CODE128B: + case BARCODE_GS1_128: + case BARCODE_GS1_128_CC: + case BARCODE_HIBC_128: + set_radiobutton_from_setting(settings, "studio/bc/code128/encoding_mode", QStringList() << "radC128Stand" << "radC128EAN" << "radC128CSup" << "radC128HIBC"); + break; + + case BARCODE_PDF417: + case BARCODE_PDF417COMP: + case BARCODE_HIBC_PDF: + set_combobox_from_setting(settings, "studio/bc/pdf417/cols", "cmbPDFCols"); + set_combobox_from_setting(settings, "studio/bc/pdf417/ecc", "cmbPDFECC"); + set_radiobutton_from_setting(settings, "studio/bc/pdf417/encoding_mode", QStringList() << "radPDFStand" << "radPDFTruncated" << "radPDFHIBC"); + break; + + case BARCODE_MICROPDF417: + case BARCODE_HIBC_MICPDF: + set_combobox_from_setting(settings, "studio/bc/micropdf417/cols", "cmbMPDFCols"); + set_radiobutton_from_setting(settings, "studio/bc/micropdf417/encoding_mode", QStringList() << "radMPDFStand" << "radMPDFHIBC"); + break; + + case BARCODE_DOTCODE: + set_combobox_from_setting(settings, "studio/bc/dotcode/cols", "cmbDotCols"); + set_radiobutton_from_setting(settings, "studio/bc/dotcode/encoding_mode", QStringList() << "radDotStand" << "radDotGS1"); + break; + + case BARCODE_AZTEC: + case BARCODE_HIBC_AZTEC: + set_radiobutton_from_setting(settings, "studio/bc/aztec/autoresizing", QStringList() << "radAztecAuto" << "radAztecSize" << "radAztecECC"); + set_combobox_from_setting(settings, "studio/bc/aztec/size", "cmbAztecSize"); + set_combobox_from_setting(settings, "studio/bc/aztec/ecc", "cmbAztecECC"); + set_radiobutton_from_setting(settings, "studio/bc/aztec/encoding_mode", QStringList() << "radAztecStand" << "radAztecGS1" << "radAztecHIBC"); + break; + + case BARCODE_MSI_PLESSEY: + set_combobox_from_setting(settings, "studio/bc/msi_plessey/check_digit", "cmbMSICheck"); + break; + + case BARCODE_CODE11: + set_radiobutton_from_setting(settings, "studio/bc/code11/check_digit", QStringList() << "radC11TwoCheckDigits" << "radC11OneCheckDigit" << "radC11NoCheckDigits"); + break; + + case BARCODE_CODE39: + case BARCODE_HIBC_39: + set_radiobutton_from_setting(settings, "studio/bc/code39/check_digit", QStringList() << "radC39Stand" << "radC39Check" << "radC39HIBC"); + break; + + case BARCODE_EXCODE39: + set_radiobutton_from_setting(settings, "studio/bc/excode39/check_digit", QStringList() << "radC39Stand" << "radC39Check"); + break; + + case BARCODE_LOGMARS: + set_radiobutton_from_setting(settings, "studio/bc/logmars/check_digit", QStringList() << "radLOGMARSStand" << "radLOGMARSCheck"); + break; + + case BARCODE_CODE16K: + set_combobox_from_setting(settings, "studio/bc/code16k/row_sep_height", "cmbC16kRowSepHeight"); + set_radiobutton_from_setting(settings, "studio/bc/code16k/encoding_mode", QStringList() << "radC16kStand" << "radC16kGS1"); + break; + + case BARCODE_CODABAR: + set_checkbox_from_setting(settings, "studio/bc/codabar/chk_check_char", "chkCodabarCheck"); + break; + + case BARCODE_CODABLOCKF: + case BARCODE_HIBC_BLOCKF: + set_combobox_from_setting(settings, "studio/bc/codablockf/width", "cmbCbfWidth"); + set_combobox_from_setting(settings, "studio/bc/codablockf/height", "cmbCbfHeight"); + set_combobox_from_setting(settings, "studio/bc/codablockf/row_sep_height", "cmbCbfRowSepHeight"); + set_radiobutton_from_setting(settings, "studio/bc/codablockf/encoding_mode", QStringList() << "radCbfStand" << "radCbfHIBC"); + break; + + case BARCODE_DATAMATRIX: + case BARCODE_HIBC_DM: + set_combobox_from_setting(settings, "studio/bc/datamatrix/size", "cmbDM200Size"); + set_radiobutton_from_setting(settings, "studio/bc/datamatrix/encoding_mode", QStringList() << "radDM200Stand" << "radDM200GS1" << "radDM200HIBC"); + set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_suppress_rect", "chkDMRectangle"); + set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_allow_dmre", "chkDMRE"); + set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_gs_sep", "chkDMGSSep"); + break; + + case BARCODE_QRCODE: + case BARCODE_HIBC_QR: + set_combobox_from_setting(settings, "studio/bc/qrcode/size", "cmbQRSize"); + set_combobox_from_setting(settings, "studio/bc/qrcode/ecc", "cmbQRECC"); + set_radiobutton_from_setting(settings, "studio/bc/qrcode/encoding_mode", QStringList() << "radDM200Stand" << "radQRGS1" << "radQRHIBC"); + set_checkbox_from_setting(settings, "studio/bc/qrcode/chk_full_multibyte", "chkQRFullMultibyte"); + break; + + case BARCODE_RMQR: + set_combobox_from_setting(settings, "studio/bc/rmqr/size", "cmbRMQRSize"); + set_combobox_from_setting(settings, "studio/bc/rmqr/ecc", "cmbRMQRECC"); + set_radiobutton_from_setting(settings, "studio/bc/rmqr/encoding_mode", QStringList() << "radQRStand" << "radRMQRGS1"); + set_checkbox_from_setting(settings, "studio/bc/rmqr/chk_full_multibyte", "chkRMQRFullMultibyte"); + break; + + case BARCODE_HANXIN: + set_combobox_from_setting(settings, "studio/bc/hanxin/size", "cmbHXSize"); + set_combobox_from_setting(settings, "studio/bc/hanxin/ecc", "cmbHXECC"); + set_checkbox_from_setting(settings, "studio/bc/hanxin/chk_full_multibyte", "chkHXFullMultibyte"); + break; + + case BARCODE_MICROQR: + set_combobox_from_setting(settings, "studio/bc/microqr/size", "cmbMQRSize"); + set_combobox_from_setting(settings, "studio/bc/microqr/ecc", "cmbMQRECC"); + set_checkbox_from_setting(settings, "studio/bc/microqr/chk_full_multibyte", "chkMQRFullMultibyte"); + break; + + case BARCODE_GRIDMATRIX: + set_combobox_from_setting(settings, "studio/bc/gridmatrix/size", "cmbGridSize"); + set_combobox_from_setting(settings, "studio/bc/gridmatrix/ecc", "cmbGridECC"); + set_checkbox_from_setting(settings, "studio/bc/gridmatrix/chk_full_multibyte", "chkGridFullMultibyte"); + break; + + case BARCODE_MAXICODE: + set_combobox_from_setting(settings, "studio/bc/maxicode/mode", "cmbMaxiMode", 1); + set_lineedit_from_setting(settings, "studio/bc/maxicode/primary_message", "txtMaxiPrimary", "Primary Message Here!"); + break; + + case BARCODE_CODEONE: + set_combobox_from_setting(settings, "studio/bc/codeone/size", "cmbC1Size"); + set_radiobutton_from_setting(settings, "studio/bc/codeone/encoding_mode", QStringList() << "radC1Stand" << "radC1GS1"); + break; + + case BARCODE_CODE49: + set_combobox_from_setting(settings, "studio/bc/code49/row_sep_height", "cmbC49RowSepHeight"); + set_radiobutton_from_setting(settings, "studio/bc/code49/encoding_mode", QStringList() << "radC49Stand" << "radC49GS1"); + break; + + case BARCODE_DBAR_EXPSTK: + set_combobox_from_setting(settings, "studio/bc/dbar_expstk/cols", "cmbCols"); + break; + + case BARCODE_ULTRA: + set_radiobutton_from_setting(settings, "studio/bc/ultra/autoresizing", QStringList() << "radUltraAuto" << "radUltraEcc"); + set_combobox_from_setting(settings, "studio/bc/ultra/ecc", "cmbUltraEcc"); + set_radiobutton_from_setting(settings, "studio/bc/ultra/encoding_mode", QStringList() << "radUltraStand" << "radUltraGS1"); + break; + + case BARCODE_UPCA: + case BARCODE_UPCA_CHK: + case BARCODE_UPCA_CC: + set_combobox_from_setting(settings, "studio/bc/upca/addongap", "cmbUPCAAddonGap"); + break; + + case BARCODE_EANX: + case BARCODE_EANX_CHK: + case BARCODE_EANX_CC: + set_combobox_from_setting(settings, "studio/bc/eanx/addongap", "cmbUPCEANAddonGap"); + break; + + case BARCODE_UPCE: + case BARCODE_UPCE_CHK: + case BARCODE_UPCE_CC: + set_combobox_from_setting(settings, "studio/bc/upce/addongap", "cmbUPCEANAddonGap"); + break; + + case BARCODE_ISBNX: + set_combobox_from_setting(settings, "studio/bc/isbnx/addongap", "cmbUPCEANAddonGap"); + break; + + case BARCODE_VIN: + set_checkbox_from_setting(settings, "studio/bc/vin/chk_import_char_prefix", "chkVINImportChar"); + break; + } +} diff --git a/frontend_qt/mainwindow.h b/frontend_qt/mainwindow.h index 18d4bd05..e17759a4 100644 --- a/frontend_qt/mainwindow.h +++ b/frontend_qt/mainwindow.h @@ -113,7 +113,7 @@ public: }; public: - MainWindow(QWidget* parent = 0, Qt::WindowFlags fl = 0); + MainWindow(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowFlags()); ~MainWindow(); @@ -122,16 +122,37 @@ public slots: void change_options(); void on_fgcolor_clicked(); void on_bgcolor_clicked(); - void composite_enable(); + void composite_ui_set(); void composite_ean_check(); void maxi_primary(); void change_print_scale(); - void autoheight_clicked(); + void change_cmyk(); + void autoheight_ui_set(); + void HRTShow_ui_set(); + void dotty_ui_set(); + void on_encoded(); + void filter_symbologies(); protected: void resizeEvent(QResizeEvent *event); - void upcean_addon_gap(QComboBox *comboBox, QLabel* label, int base); + void combobox_item_enabled(QComboBox *comboBox, int index, bool enabled); + void upcean_addon_gap(QComboBox *comboBox, QLabel *label, int base); void set_gs1_mode(bool gs1_mode); + bool fixed_height(); + bool no_hrt(); + const char *get_setting_name(int symbology); + int get_button_group_index(const QStringList &children); + void set_radiobutton_from_setting(QSettings &settings, const QString &setting, const QStringList &children, int default_val = 0); + int get_combobox_index(const QString &child); + void set_combobox_from_setting(QSettings &settings, const QString &setting, const QString &child, int default_val = 0); + int get_checkbox_val(const QString &child); + void set_checkbox_from_setting(QSettings &settings, const QString &setting, const QString &child, int default_val = 0); + float get_doublespinbox_val(const QString &child); + void set_doublespinbox_from_setting(QSettings &settings, const QString &setting, const QString &child, float default_val = 0); + QString get_lineedit_val(const QString &child); + void set_lineedit_from_setting(QSettings &settings, const QString &setting, const QString &child, const char *default_val = ""); + void save_sub_settings(QSettings &settings, int symbology); + void load_sub_settings(QSettings &settings, int symbology); private slots: bool save(); @@ -148,6 +169,7 @@ private: BarcodeItem m_bc; QWidget *m_optionWidget; QGraphicsScene *scene; + int m_symbology; }; #endif diff --git a/tools/update_version.php b/tools/update_version.php index d49a8340..d6f57136 100644 --- a/tools/update_version.php +++ b/tools/update_version.php @@ -213,6 +213,10 @@ version_replace(1, $data_dirname . 'backend_qt/backend_qt.pro', '/^VERSION[ \t]* version_replace(1, $data_dirname . 'backend_tcl/zint.c', '/#define[ \t]+VERSION[ \t]+"/', '/[0-9.]+/', $v_str); +// backend_tcl/configure.in + +version_replace(1, $data_dirname . 'backend_tcl/configure.in', '/^AC_INIT\(\[zint\],[ \t]*\[/', '/[0-9.]+/', $v_str); + // frontend/zint.rc rc_replace($data_dirname . 'frontend/zint.rc', $rc_str); @@ -257,7 +261,15 @@ version_replace(6, $data_dirname . 'win32/vs2015/zint.vcxproj', '/ZINT_VERSION=" version_replace(1, $data_dirname . 'win32/vs2015/vsx/libzintMD.vcxproj', '/ZINT_VERSION="/', '/ZINT_VERSION="[0-9.]+"/', 'ZINT_VERSION="' . $v_str . '"'); +// win32/vs2019/libzint.vcxproj + +version_replace(2, $data_dirname . 'win32/vs2019/libzint.vcxproj', '/ZINT_VERSION="/', '/ZINT_VERSION="[0-9.]+"/', 'ZINT_VERSION="' . $v_str . '"'); + +// win32/vs2019/zint.vcxproj + +version_replace(2, $data_dirname . 'win32/vs2019/zint.vcxproj', '/ZINT_VERSION="/', '/ZINT_VERSION="[0-9.]+"/', 'ZINT_VERSION="' . $v_str . '"'); + // Leaving auto-generated files: -// backend_tcl/configure (PACKAGE_VERSION and PACKAGE_STRING) +// backend_tcl/configure (PACKAGE_VERSION and PACKAGE_STRING) - generated by autoconf from configure.in // frontend_qt/Inno_Setup_qtzint.iss (MyAppVersion) // win32/zint_cmdline_vc6/zint_cmdline_vc6.dsp (2 ZINT_VERSION's) diff --git a/win32/vs2015/libzint.vcxproj b/win32/vs2015/libzint.vcxproj index 2c9d85fd..c1fe63d9 100644 --- a/win32/vs2015/libzint.vcxproj +++ b/win32/vs2015/libzint.vcxproj @@ -114,7 +114,7 @@ Disabled - ..\extern\libpng\include;..\extern\zlib\include;%(AdditionalIncludeDirectories) + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";NO_PNG;BUILD_ZINT_DLL;ZLIB_DLL;PNG_DLL;DEBUG;%(PreprocessorDefinitions) true @@ -137,7 +137,7 @@ %(AdditionalDependencies) $(OutDir)zintd.dll - ..\extern\libpng\lib\x86;..\extern\zlib\lib\x86;%(AdditionalLibraryDirectories) + ..\..\lpng\build\Release;..\..\..\zlib;%(AdditionalLibraryDirectories) libcmtd.lib;%(IgnoreSpecificDefaultLibraries) true Windows @@ -147,7 +147,7 @@ Disabled - ..\extern\libpng\include;..\extern\zlib\include;%(AdditionalIncludeDirectories) + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) NO_PNG;WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";BUILD_ZINT_DLL;ZLIB_DLL;PNG_DLL;DEBUG;%(PreprocessorDefinitions) @@ -171,7 +171,7 @@ zlibd.lib;%(AdditionalDependencies) $(OutDir)zintd.dll - ..\extern\libpng\lib\x64;..\extern\zlib\lib\x64;%(AdditionalLibraryDirectories) + ..\..\lpng\build\Release;..\..\..\zlib;%(AdditionalLibraryDirectories) libcmtd.lib;%(IgnoreSpecificDefaultLibraries) true Windows @@ -181,7 +181,7 @@ MaxSpeed false - ..\extern\libpng\include;..\extern\zlib\include;%(AdditionalIncludeDirectories) + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";BUILD_ZINT_DLL;ZLIB_DLL;PNG_DLL;NO_PNG;%(PreprocessorDefinitions) true @@ -201,9 +201,9 @@ false - libpng16.lib;zlib.lib;%(AdditionalDependencies) + libpng16_static.lib;zlib.lib;%(AdditionalDependencies) $(OutDir)zint.dll - ..\extern\libpng\lib\x86;..\extern\zlib\lib\x86;%(AdditionalLibraryDirectories) + ..\..\..\lpng\build\Release;..\..\..\zlib;%(AdditionalLibraryDirectories) false Windows true @@ -215,7 +215,7 @@ MaxSpeed false - ..\extern\libpng\include;..\extern\zlib\include;%(AdditionalIncludeDirectories) + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";BUILD_ZINT_DLL;NO_PNG;ZLIB_DLL;PNG_DLL;%(PreprocessorDefinitions) true @@ -238,9 +238,9 @@ false - libpng16.lib;zlib.lib;%(AdditionalDependencies) + libpng16_static.lib;zlib.lib;%(AdditionalDependencies) $(OutDir)zint.dll - ..\extern\libpng\lib\x64;..\extern\zlib\lib\x64;%(AdditionalLibraryDirectories) + ..\..\..\lpng\build\Release;..\..\..\zlib;%(AdditionalLibraryDirectories) false Windows true @@ -251,7 +251,7 @@ MaxSpeed false - d:\opt\include;%(AdditionalIncludeDirectories) + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";%(PreprocessorDefinitions) true @@ -275,7 +275,7 @@ MaxSpeed false - ..\extern\libpng\include;..\extern\zlib\include;%(AdditionalIncludeDirectories) + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";%(PreprocessorDefinitions) true @@ -299,93 +299,93 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + true true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + true true diff --git a/win32/vs2015/zint.vcxproj b/win32/vs2015/zint.vcxproj index be2e2c8f..21614006 100644 --- a/win32/vs2015/zint.vcxproj +++ b/win32/vs2015/zint.vcxproj @@ -107,7 +107,7 @@ Disabled - ..\backend;%(AdditionalIncludeDirectories) + ..\..\backend;%(AdditionalIncludeDirectories) WIN32;_WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";ZINT_DLL;%(PreprocessorDefinitions) true @@ -126,7 +126,7 @@ Disabled - ..\backend;%(AdditionalIncludeDirectories) + ..\..\backend;%(AdditionalIncludeDirectories) WIN32;_WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";ZINT_DLL;%(PreprocessorDefinitions) @@ -146,7 +146,7 @@ MaxSpeed - ..\backend;%(AdditionalIncludeDirectories) + ..\..\backend;%(AdditionalIncludeDirectories) WIN32;_WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";ZINT_DLL;%(PreprocessorDefinitions) true @@ -164,7 +164,7 @@ MaxSpeed - ..\backend;%(AdditionalIncludeDirectories) + ..\..\backend;%(AdditionalIncludeDirectories) WIN32;_WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";ZINT_DLL;%(PreprocessorDefinitions) true @@ -185,7 +185,7 @@ MaxSpeed - ..\backend;%(AdditionalIncludeDirectories) + ..\..\backend;%(AdditionalIncludeDirectories) WIN32;_WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";%(PreprocessorDefinitions) true @@ -204,7 +204,7 @@ MaxSpeed - ..\backend;%(AdditionalIncludeDirectories) + ..\..\backend;%(AdditionalIncludeDirectories) WIN32;_WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";%(PreprocessorDefinitions) true @@ -224,16 +224,16 @@ - - - + + + - - + + - + diff --git a/win32/vs2019/libzint.vcxproj b/win32/vs2019/libzint.vcxproj new file mode 100644 index 00000000..fb18185e --- /dev/null +++ b/win32/vs2019/libzint.vcxproj @@ -0,0 +1,214 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {5C08DC40-8F7D-475E-AA3C-814DED735A4B} + libzint_png_qr + Win32Proj + 10.0 + + + + DynamicLibrary + v142 + MultiByte + false + + + DynamicLibrary + MultiByte + v142 + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + zint + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + zint + + + + Disabled + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";BUILD_ZINT_DLL;DEBUG;%(PreprocessorDefinitions) + true + + EnableFastChecks + true + MultiThreadedDebugDLL + false + + Level3 + ProgramDatabase + CompileAsCpp + 4018;4244;4305;%(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + + + false + + + libpng16_static.lib;zlib.lib;%(AdditionalDependencies) + $(OutDir)zint.dll + ..\..\..\lpng\build\Release;..\..\..\zlib;%(AdditionalLibraryDirectories) + libcmtd.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + MachineX86 + false + + + + + MaxSpeed + false + ..\..\..\zlib\;..\..\..\lpng\;..\..\..\lpng\build;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";BUILD_ZINT_DLL;%(PreprocessorDefinitions) + true + + MultiThreadedDLL + false + false + + Level3 + + CompileAsCpp + 4018;4244;4305;%(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + + + false + + + libpng16_static.lib;zlib.lib;%(AdditionalDependencies) + $(OutDir)zint.dll + ..\..\..\lpng\build\Release;..\..\..\zlib;%(AdditionalLibraryDirectories) + false + Windows + true + true + MachineX86 + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/win32/vs2019/zint.sln b/win32/vs2019/zint.sln new file mode 100644 index 00000000..47fd5a9b --- /dev/null +++ b/win32/vs2019/zint.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2036 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zint", "zint.vcxproj", "{3169C7FA-E52C-4BFC-B7BB-E55EBA133770}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libzint", "libzint.vcxproj", "{5C08DC40-8F7D-475E-AA3C-814DED735A4B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C246B2E9-C3A0-4505-BECA-1FDFC59C7BE5}" + ProjectSection(SolutionItems) = preProject + ..\.editorconfig = ..\.editorconfig + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3169C7FA-E52C-4BFC-B7BB-E55EBA133770}.Debug|Win32.ActiveCfg = Debug|Win32 + {3169C7FA-E52C-4BFC-B7BB-E55EBA133770}.Debug|Win32.Build.0 = Debug|Win32 + {3169C7FA-E52C-4BFC-B7BB-E55EBA133770}.Release|Win32.ActiveCfg = Release|Win32 + {3169C7FA-E52C-4BFC-B7BB-E55EBA133770}.Release|Win32.Build.0 = Release|Win32 + {5C08DC40-8F7D-475E-AA3C-814DED735A4B}.Debug|Win32.ActiveCfg = Debug|Win32 + {5C08DC40-8F7D-475E-AA3C-814DED735A4B}.Debug|Win32.Build.0 = Debug|Win32 + {5C08DC40-8F7D-475E-AA3C-814DED735A4B}.Release|Win32.ActiveCfg = Release|Win32 + {5C08DC40-8F7D-475E-AA3C-814DED735A4B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5F58D857-0A43-4DC0-AA25-1AD65E537C6A} + EndGlobalSection +EndGlobal diff --git a/win32/vs2019/zint.vcxproj b/win32/vs2019/zint.vcxproj new file mode 100644 index 00000000..c4c5448f --- /dev/null +++ b/win32/vs2019/zint.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {3169C7FA-E52C-4BFC-B7BB-E55EBA133770} + zint + Win32Proj + 10.0 + + + + Application + v142 + MultiByte + false + + + Application + v142 + MultiByte + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + + + + Disabled + ..\..\backend;%(AdditionalIncludeDirectories) + WIN32;_WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";ZINT_DLL;%(PreprocessorDefinitions) + true + + EnableFastChecks + true + MultiThreadedDebugDLL + true + + Level3 + EditAndContinue + + + true + + + + + MaxSpeed + ..\..\backend;%(AdditionalIncludeDirectories) + WIN32;_WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;ZINT_VERSION="2.9.1.9";ZINT_DLL;%(PreprocessorDefinitions) + true + + MultiThreaded + false + false + + Level3 + + + + + + + + + + + + + + + + + + {5c08dc40-8f7d-475e-aa3c-814ded735a4b} + false + + + + + + \ No newline at end of file