mirror of
https://git.code.sf.net/p/zint/code
synced 2026-07-31 02:19:50 +00:00
DATAMATRIX: add new options DM_B256_START and DM_C40_START to
`options_3`, allowing forcing of Base 256 or C40 mode a la BWIPP for initial no. of characters specified in `option_1`, with 0 meaning all (CLI "--dmb256=" and "--dmc40=", GUI also (apart from MAILMARK_2D, which may be added later); export masks `DM_B256_C40_START_MASK` & `DM_SQUARE_DMRE_MASK` in "zint.h" ZBarcode_Encode_File: report filename (possibly truncated) in error message on failed open GUI: uniquify some accelerators and add some child widget getter helpers to "mainwindow.cpp" backend/DEVELOPER -> backend/README, with some expansion debian/copyright: a few more fixes BWIPP/pandoc: update to latest tests/fuzz: adjust for new DATAMATRIX options
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2009-2025 Robin Stuart <rstuart114@gmail.com>
|
||||
# Copyright (C) 2019-2026 Robin Stuart <rstuart114@gmail.com>
|
||||
# Adapted from qrencode/tests/CMakeLists.txt
|
||||
# Copyright (C) 2006-2017 Kentaro Fukuchi <kentaro@fukuchi.org>
|
||||
# vim: set ts=4 sw=4 et :
|
||||
|
||||
@@ -235,7 +235,7 @@ static const struct settings_item settings[] = {
|
||||
{ 68, BARCODE_AUSREDIRECT, GDSET_F, 0, -1, 0, -1, 0, -1, 1, 8 },
|
||||
{ 69, BARCODE_ISBNX, ISBNX_ADDON_SANE_F, 0, -1, 0, -1, 0, -1, 9, 19 },
|
||||
{ 70, BARCODE_RM4SCC, KRSET_F, 0, -1, 0, -1, 0, -1, 1, 50 },
|
||||
{ 71, BARCODE_DATAMATRIX, 0, 0, -1, 0, 48, 128, 128, 1, 3550 },
|
||||
{ 71, BARCODE_DATAMATRIX, 0, 0, 20, 0, 48, 0, 238, 1, 3550 },
|
||||
{ 72, BARCODE_EAN14, NEON_F, 0, -1, 0, -1, 0, -1, 1, 13 },
|
||||
{ 73, BARCODE_VIN, ARSENIC_F, 0, -1, 0, -1, 0, -1, 17, 17 },
|
||||
{ 74, BARCODE_CODABLOCKF, 0, -1, 44, -1, 67, 4, 4, 1, 2725 },
|
||||
|
||||
+586
-383
File diff suppressed because it is too large
Load Diff
@@ -1524,9 +1524,12 @@ static void test_encode_file_directory(const testCtx *const p_ctx) {
|
||||
static void test_encode_file(const testCtx *const p_ctx) {
|
||||
int ret;
|
||||
struct zint_symbol *symbol = NULL;
|
||||
const char *data = "1";
|
||||
const char *filename = "test_encode_file_in.txt";
|
||||
const char *outfile = "test_encode_file_out.gif";
|
||||
const char data[] = "1";
|
||||
const char filename[] = "test_encode_file_in.txt";
|
||||
const char outfile[] = "test_encode_file_out.gif";
|
||||
const char long_filename[] = "test_encode_file_in_1234567890123456789012345678901234567890.txt";
|
||||
const char long_filename_errtxt[]
|
||||
= "Error 233: Unable to read input file \"test_encod...56789012345678901234567890.txt\" (";
|
||||
FILE *fp;
|
||||
|
||||
(void)p_ctx;
|
||||
@@ -1580,6 +1583,19 @@ static void test_encode_file(const testCtx *const p_ctx) {
|
||||
ZBarcode_Delete(symbol);
|
||||
}
|
||||
|
||||
{
|
||||
symbol = ZBarcode_Create();
|
||||
assert_nonnull(symbol, "Symbol not created\n");
|
||||
|
||||
strcpy(symbol->outfile, outfile);
|
||||
ret = ZBarcode_Encode_File_and_Buffer_Vector(symbol, long_filename, 0);
|
||||
assert_nonzero(ret, "ret %d == 0 (%s)\n", ret, symbol->errtxt);
|
||||
assert_zero(strncmp(symbol->errtxt, long_filename_errtxt, sizeof(long_filename_errtxt) - 1),
|
||||
"strncmp(%s, %s) != 0\n", symbol->errtxt, long_filename_errtxt);
|
||||
|
||||
ZBarcode_Delete(symbol);
|
||||
}
|
||||
|
||||
ret = testUtilRemove(filename);
|
||||
assert_zero(ret, "testUtilRemove(%s) != 0 (%d: %s)\n", filename, errno, strerror(errno));
|
||||
|
||||
@@ -1632,7 +1648,7 @@ static void test_bad_args(const testCtx *const p_ctx) {
|
||||
"Error 200: Input segments NULL",
|
||||
"Error 239: Filename NULL",
|
||||
"Error 778: No input data",
|
||||
"Error 229: Unable to read input file (", /* Excluding OS-dependent `errno` stuff */
|
||||
"Error 229: Unable to read input file \"", /* Excluding filename and OS-dependent `errno` stuff */
|
||||
"Error 771: Too many input segments (maximum 256)",
|
||||
"Error 205: No input data",
|
||||
"Error 777: Input too long",
|
||||
|
||||
@@ -463,7 +463,9 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
int debug = p_ctx->debug;
|
||||
|
||||
struct item {
|
||||
int option_1;
|
||||
int option_2;
|
||||
int option_3;
|
||||
const char *data;
|
||||
int ret;
|
||||
|
||||
@@ -478,7 +480,7 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
/* Mailmark Barcode Definition Document 15th Feb 2021 (MBDD)
|
||||
https://www.royalmailtechnical.com/rmt_docs/User_Guides_2021/Mailmark_Barcode_definition_document_20210215.pdf */
|
||||
static const struct item data[] = {
|
||||
/* 0*/ { 8, "JGB 01Z999999900000001EC1A1AA1A0SN35TQ ", 0, 24, 24, 1, "MMRLLL Section 2.4 Code Type Format 7 figure **NOT SAME**, figure switches from C40 to ASC to C40 to ASC contrary to spec",
|
||||
/* 0*/ { -1, 8, -1, "JGB 01Z999999900000001EC1A1AA1A0SN35TQ ", 0, 24, 24, 1, "MMRLLL Section 2.4 Code Type Format 7 figure **NOT SAME**, figure switches from C40 to ASC to C40 to ASC contrary to spec",
|
||||
"101010101010101010101010"
|
||||
"110000010100011001100001"
|
||||
"101001011100001011111010"
|
||||
@@ -504,7 +506,7 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
"100111100000101110001010"
|
||||
"111111111111111111111111"
|
||||
},
|
||||
/* 1*/ { 10, "JGB 01Z999999900000001EC1A1AA1A0SN35TQ ", 0, 32, 32, 1, "MMRLLL Section 2.4 Code Type Format 9 figure **NOT SAME**, figure switches as above",
|
||||
/* 1*/ { -1, 10, -1, "JGB 01Z999999900000001EC1A1AA1A0SN35TQ ", 0, 32, 32, 1, "MMRLLL Section 2.4 Code Type Format 9 figure **NOT SAME**, figure switches as above",
|
||||
"10101010101010101010101010101010"
|
||||
"11000001010001111001100100101111"
|
||||
"10100101110000101011110000000000"
|
||||
@@ -538,7 +540,7 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
"11001101100011101011101000001000"
|
||||
"11111111111111111111111111111111"
|
||||
},
|
||||
/* 2*/ { 30, "JGB 01Z999999900000001EC1A1AA1A0SN35TQ ", 0, 16, 48, 1, "MMRLLL Section 2.4 Code Type Format 29 figure **NOT SAME**, figure switches as above",
|
||||
/* 2*/ { -1, 30, -1, "JGB 01Z999999900000001EC1A1AA1A0SN35TQ ", 0, 16, 48, 1, "MMRLLL Section 2.4 Code Type Format 29 figure **NOT SAME**, figure switches as above",
|
||||
"101010101010101010101010101010101010101010101010"
|
||||
"110000010100011001101111111101100101100100011101"
|
||||
"101001011100001011100010100100011001100010101100"
|
||||
@@ -556,7 +558,7 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
"101101100011101110101010100001111111001010100010"
|
||||
"111111111111111111111111111111111111111111111111"
|
||||
},
|
||||
/* 3*/ { 30, "JGB 012100123412345678AB19XY1A 0 REFERENCE 12300AB", 0, 16, 48, 1, "MBDD Table 4 example",
|
||||
/* 3*/ { -1, 30, -1, "JGB 012100123412345678AB19XY1A 0 REFERENCE 12300AB", 0, 16, 48, 1, "MBDD Table 4 example",
|
||||
"101010101010101010101010101010101010101010101010"
|
||||
"110000010100010110001111111011100000001001111111"
|
||||
"101001011100011001110010100100010100110011111100"
|
||||
@@ -574,7 +576,7 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
"101111100001111111101010100010111101100101001100"
|
||||
"111111111111111111111111111111111111111111111111"
|
||||
},
|
||||
/* 4*/ { 10, "JGB 012100123412345678AB19XY1A 0 www.xyz.com", 0, 32, 32, 1, "MBDD Table 5 (& BWIPP) example",
|
||||
/* 4*/ { -1, 10, -1, "JGB 012100123412345678AB19XY1A 0 www.xyz.com", 0, 32, 32, 1, "MBDD Table 5 (& BWIPP) example",
|
||||
"10101010101010101010101010101010"
|
||||
"11000001010001011111111110001111"
|
||||
"10100101110001101001111111000000"
|
||||
@@ -608,7 +610,7 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
"11000011100001101111110101011100"
|
||||
"11111111111111111111111111111111"
|
||||
},
|
||||
/* 5*/ { 10, "JGB 010100000700009001B707RH1A 0SN35XX ABCDEFGHIJ1234567890ABCDEFGHIJ1234567890A", 0, 32, 32, 1, "TEC-IT example, same",
|
||||
/* 5*/ { -1, 10, -1, "JGB 010100000700009001B707RH1A 0SN35XX ABCDEFGHIJ1234567890ABCDEFGHIJ1234567890A", 0, 32, 32, 1, "TEC-IT example, same",
|
||||
"10101010101010101010101010101010"
|
||||
"11000001010001111000100110110001"
|
||||
"10100101110000101010110010100000"
|
||||
@@ -642,7 +644,75 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
"10111101100000001010110001010110"
|
||||
"11111111111111111111111111111111"
|
||||
},
|
||||
/* 6*/ { 10, "JGB 010100000700009001B707RH1A 0SN35XX é", 0, 32, 32, 1, "",
|
||||
/* 6*/ { -1, 10, -1, "JGB 010100000700009001B707RH1A 0SN35XX é", 0, 32, 32, 1, "",
|
||||
"10101010101010101010101010101010"
|
||||
"11000001010001111001101100001111"
|
||||
"10100101110000101011111110000000"
|
||||
"10101000010110011001101011000101"
|
||||
"10001100111000101111000111011110"
|
||||
"10011100011000011100101000100101"
|
||||
"11001111001000101010010010011110"
|
||||
"10100101011000111100001100101111"
|
||||
"10101111010111101100111100110100"
|
||||
"11001001100100111001110000010111"
|
||||
"11001000001001001101001111011110"
|
||||
"11010000001111111011011101101101"
|
||||
"11001000010000101001101010011010"
|
||||
"11010111000101011111111101111111"
|
||||
"10111101100011101110001100110100"
|
||||
"11111111111111111111111111111111"
|
||||
"10101010101010101010101010101010"
|
||||
"11011101100000011000000001110001"
|
||||
"11110000111100101000011000101010"
|
||||
"11001011110010011000011101110001"
|
||||
"11011111000101001011100101011100"
|
||||
"10010101101100011100010000011101"
|
||||
"10011001101011101110100111101000"
|
||||
"11101010110010111001111100100101"
|
||||
"10011011111101001000101111110100"
|
||||
"10011101010101111111111000111101"
|
||||
"11100001010010101011001010000000"
|
||||
"10011010101011111000011010001001"
|
||||
"11101001100100001101010001011000"
|
||||
"10001001100100011011110101100101"
|
||||
"11001011100001001010111101010100"
|
||||
"11111111111111111111111111111111"
|
||||
},
|
||||
/* 7*/ { 0, 10, DM_C40_START, "JGB 010100000700009001B707RH1A 0SN35XX é", 0, 32, 32, 0, "BWIPP fixes c40headerlength at 45",
|
||||
"10101010101010101010101010101010"
|
||||
"11000001010001111000000111101111"
|
||||
"10100101110000101010011111000000"
|
||||
"10101000010110011000111011000101"
|
||||
"10001100111000101111000111011110"
|
||||
"10011100011000011100101000100101"
|
||||
"11001111001000101010010010011110"
|
||||
"10100101011000111100001100101111"
|
||||
"10101111010111101100111100110100"
|
||||
"11001001100100111001110000010111"
|
||||
"11001000001001001101000111010010"
|
||||
"11010000001111111011011111100001"
|
||||
"11001000010000101001010110001010"
|
||||
"11010111000101011111111010110011"
|
||||
"10111101100011101111010010010000"
|
||||
"11111111111111111111111111111111"
|
||||
"10101010101010101010101010101010"
|
||||
"11011101100000011011100000000001"
|
||||
"11110000111100001001011110110010"
|
||||
"11001011110010011010101001010001"
|
||||
"11011111000110001011101010011000"
|
||||
"10010101101100011010001110010101"
|
||||
"10011001101111101011100011110000"
|
||||
"11101010110000011011000010101101"
|
||||
"10011011011100101100100000010110"
|
||||
"10011101010111111011000011110101"
|
||||
"11100001000100101110110101110000"
|
||||
"10011000100011011101111110110001"
|
||||
"11100100110001001010010111001100"
|
||||
"10001001110001011010101100000001"
|
||||
"11000001100010101010110110001100"
|
||||
"11111111111111111111111111111111"
|
||||
},
|
||||
/* 8*/ { 40, 10, DM_C40_START, "JGB 010100000700009001B707RH1A 0SN35XX é", 0, 32, 32, 1, "",
|
||||
"10101010101010101010101010101010"
|
||||
"11000001010001111001101100001111"
|
||||
"10100101110000101011111110000000"
|
||||
@@ -699,7 +769,7 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
assert_nonnull(symbol, "Symbol not created\n");
|
||||
|
||||
length = testUtilSetSymbol(symbol, BARCODE_MAILMARK_2D, -1 /*input_mode*/, -1 /*eci*/,
|
||||
-1 /*option_1*/, data[i].option_2, -1 /*option_3*/, -1 /*output_options*/,
|
||||
data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/,
|
||||
data[i].data, -1, debug);
|
||||
|
||||
ret = ZBarcode_Encode(symbol, TCU(data[i].data), length);
|
||||
@@ -707,8 +777,9 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
i, ret, data[i].ret, symbol->errtxt);
|
||||
|
||||
if (p_ctx->generate) {
|
||||
printf(" /*%3d*/ { %d, \"%s\", %s, %d, %d, %d, \"%s\",\n",
|
||||
i, data[i].option_2, testUtilEscape(data[i].data, length, escaped, sizeof(escaped)),
|
||||
printf(" /*%3d*/ { %d, %d, %s, \"%s\", %s, %d, %d, %d, \"%s\",\n",
|
||||
i, data[i].option_1, data[i].option_2, testUtilOption3Name(symbol->symbology, data[i].option_3),
|
||||
testUtilEscape(data[i].data, length, escaped, sizeof(escaped)),
|
||||
testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].bwipp_cmp, data[i].comment);
|
||||
testUtilModulesPrint(symbol, " ", "\n");
|
||||
printf(" },\n");
|
||||
@@ -725,15 +796,16 @@ static void test_2d_encode(const testCtx *const p_ctx) {
|
||||
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(i, symbol, -1, data[i].option_2, -1, debug)) {
|
||||
if (do_bwipp && testUtilCanBwipp(i, symbol, data[i].option_1, data[i].option_2, data[i].option_3,
|
||||
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, -1, data[i].option_2, -1, data[i].data, length, NULL, cmp_buf,
|
||||
sizeof(cmp_buf), NULL);
|
||||
ret = testUtilBwipp(i, symbol, data[i].option_1, data[i].option_2, data[i].option_3,
|
||||
data[i].data, length, NULL, cmp_buf, sizeof(cmp_buf), NULL);
|
||||
assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n",
|
||||
i, testUtilBarcodeName(symbol->symbology), ret);
|
||||
|
||||
|
||||
@@ -624,20 +624,27 @@ const char *testUtilOption3Name(int symbology, int option_3) {
|
||||
} else {
|
||||
name = (option_3 & 0xFF) ? "-1" : "0";
|
||||
}
|
||||
} else if (symbology == BARCODE_DATAMATRIX || symbology == BARCODE_HIBC_DM) {
|
||||
} else if (symbology == BARCODE_DATAMATRIX || symbology == BARCODE_HIBC_DM || symbology == BARCODE_MAILMARK_2D) {
|
||||
if (option_3 > 0) {
|
||||
if ((option_3 & 0x7F) == DM_SQUARE) {
|
||||
/* Note only catering for commonly used combinations here */
|
||||
if ((option_3 & DM_SQUARE_DMRE_MASK) == DM_SQUARE) {
|
||||
if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
||||
name = "DM_SQUARE | DM_ISO_144";
|
||||
} else {
|
||||
name = "DM_SQUARE";
|
||||
}
|
||||
} else if ((option_3 & 0x7F) == DM_DMRE) {
|
||||
} else if ((option_3 & DM_SQUARE_DMRE_MASK) == DM_DMRE) {
|
||||
if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
||||
name = "DM_DMRE | DM_ISO_144";
|
||||
} else {
|
||||
name = "DM_DMRE";
|
||||
}
|
||||
} else if ((option_3 & DM_B256_C40_START_MASK) == DM_B256_C40_START_MASK) {
|
||||
name = "DM_B256_START | DM_C40_START";
|
||||
} else if ((option_3 & DM_B256_C40_START_MASK) == DM_B256_START) {
|
||||
name = "DM_B256_START";
|
||||
} else if ((option_3 & DM_B256_C40_START_MASK) == DM_C40_START) {
|
||||
name = "DM_C40_START";
|
||||
} else if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
||||
name = "DM_ISO_144";
|
||||
} else {
|
||||
@@ -2380,7 +2387,7 @@ static const char *testUtilBwippName(int index, const struct zint_symbol *symbol
|
||||
{ "", BARCODE_AUSREDIRECT, 68, 0, 0, 0, 0, 0, },
|
||||
{ "isbn", BARCODE_ISBNX, 69, 0, 1, 0, 0, 1 /*gs1_cvt*/, },
|
||||
{ "royalmail", BARCODE_RM4SCC, 70, 0, 0, 0, 0, 0, },
|
||||
{ "datamatrix", BARCODE_DATAMATRIX, 71, 0, 1, 1, 1, 0, },
|
||||
{ "datamatrix", BARCODE_DATAMATRIX, 71, 1, 1, 1, 1, 0, },
|
||||
{ "ean14", BARCODE_EAN14, 72, 0, 0, 1 /*GS1CARET*/, 0, 1 /*gs1_cvt*/, },
|
||||
{ "code39", BARCODE_VIN, 73, 0, 0, 0, 0, 0, },
|
||||
{ "codablockf", BARCODE_CODABLOCKF, 74, 1, 1, 0, 10 /*linear_row_height*/, 0, },
|
||||
@@ -2411,7 +2418,7 @@ static const char *testUtilBwippName(int index, const struct zint_symbol *symbol
|
||||
{ "hibccode39", BARCODE_HIBC_39, 99, 0, 0, 0, 0, 0, },
|
||||
{ "", -1, 100, 0, 0, 0, 0, 0, },
|
||||
{ "", -1, 101, 0, 0, 0, 0, 0, },
|
||||
{ "hibcdatamatrix", BARCODE_HIBC_DM, 102, 0, 1, 1, 0, 0, },
|
||||
{ "hibcdatamatrix", BARCODE_HIBC_DM, 102, 1, 1, 1, 0, 0, },
|
||||
{ "", -1, 103, 0, 0, 0, 0, 0, },
|
||||
{ "hibcqrcode", BARCODE_HIBC_QR, 104, 1, 1, 1, 0, 0, },
|
||||
{ "", -1, 105, 0, 0, 0, 0, 0, },
|
||||
@@ -2428,7 +2435,7 @@ static const char *testUtilBwippName(int index, const struct zint_symbol *symbol
|
||||
{ "hanxin", BARCODE_HANXIN, 116, 0, 0, 0, 0, 0, },
|
||||
{ "", -1, 117, 0, 0, 0, 0, 0, },
|
||||
{ "", -1, 118, 0, 0, 0, 0, 0, },
|
||||
{ "mailmark", BARCODE_MAILMARK_2D, 119, 0, 1, 0, 0, 0, },
|
||||
{ "mailmark", BARCODE_MAILMARK_2D, 119, 1, 1, 1, 0, 0, },
|
||||
{ "code128", BARCODE_UPU_S10, 120, 0, 0, 0, 0, 0, },
|
||||
{ "", BARCODE_MAILMARK_4S, 121, 0, 0, 0, 0, 0, }, /* Note BWIPP mailmark is BARCODE_MAILMARK_2D above */
|
||||
{ "", -1, 122, 0, 0, 0, 0, 0, },
|
||||
@@ -3446,8 +3453,9 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int
|
||||
added_dmre = 1;
|
||||
}
|
||||
}
|
||||
if ((option_3 & 0x7F) != DM_SQUARE && symbol->width != symbol->height) {
|
||||
if ((option_3 & 0x7F) == DM_DMRE && !added_dmre) {
|
||||
if ((option_3 == -1 || (option_3 & DM_SQUARE_DMRE_MASK) != DM_SQUARE)
|
||||
&& symbol->width != symbol->height) {
|
||||
if (option_3 != -1 && (option_3 & DM_SQUARE_DMRE_MASK) == DM_DMRE && !added_dmre) {
|
||||
sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%sdmre", strlen(bwipp_opts_buf) ? " " : "");
|
||||
/*added_dmre = 1; */
|
||||
}
|
||||
@@ -3455,6 +3463,12 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int
|
||||
strlen(bwipp_opts_buf) ? " " : "");
|
||||
bwipp_opts = bwipp_opts_buf;
|
||||
}
|
||||
if (option_3 != -1 && option_1 >= 0 &&
|
||||
((option_3 & DM_B256_C40_START_MASK) == DM_C40_START
|
||||
|| (option_3 & DM_B256_C40_START_MASK) == DM_B256_C40_START_MASK)) { /* DM_C40_START trumps */
|
||||
sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%sc40headerlength=%d",
|
||||
strlen(bwipp_opts_buf) ? " " : "", option_1 ? option_1 : 9999);
|
||||
}
|
||||
if (option_3 != -1) {
|
||||
bwipp_opts = bwipp_opts_buf;
|
||||
}
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user