GUI: fix foreground/background picker invocations (broken

[f3a982c1dd])
AZTEC/CODE16K/CODEONE/DATAMATRIX/DBAR_EXP/GRIDMATRIX/HANXIN
/MAILMARK_4S/PDF417/MSI_PLESSEY/QRCODE/RMQR/TIF/ULTRA/USPS_IMAIL:
  lessen storage of some tables by using least integral size
  required (saves ~3K); reformat some tables, comments
AUSPOST/AZTEC: remove unnecessary int casts on array indexing
CODE11/CODE39: move start/stop chars into one entry in tables to
  save a few bytes; some reformatting, comments
CODEONE: add `c1_` prefixes
common: more precise compiler/version checks
composite: add `cc_` prefixes; UINT -> unsigned short; use
  `sizeof()` instead of `strlen()` for `in_linear_comp` static;
  some reformatting, comments
EMF: use table instead of string for `ultra_chars[]`
GIF: remove unnecessary cast
library: use `sizeof()` instead of `strlen()` for static;
  add `consts` to `escape_char_process()` & use unsigned for `ch`
DBAR: use `dbar_`, `dbar_ltd_`, `dbar_exp_` prefixes
docs: update pandoc version
This commit is contained in:
gitlost 2024-05-27 23:19:45 +01:00
parent 0a00d04ccc
commit eb035a6372
43 changed files with 722 additions and 641 deletions

View File

@ -1,7 +1,7 @@
/* auspost.c - Handles Australia Post 4-State Barcode */ /* auspost.c - Handles Australia Post 4-State Barcode */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2022 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -91,7 +91,7 @@ static char *aus_rs_error(char data_pattern[], char *d) {
rs_encode(&rs, triple_writer, triple, result); rs_encode(&rs, triple_writer, triple, result);
for (reader = 4; reader > 0; reader--, d += 3) { for (reader = 4; reader > 0; reader--, d += 3) {
memcpy(d, AusBarTable[(int) result[reader - 1]], 3); memcpy(d, AusBarTable[result[reader - 1]], 3);
} }
return d; return d;

View File

@ -1,7 +1,7 @@
/* aztec.c - Handles Aztec 2D Symbols */ /* aztec.c - Handles Aztec 2D Symbols */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2009-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -41,6 +41,7 @@
#define AZTEC_MAP_SIZE 22801 /* AztecMap Version 32 151 x 151 */ #define AZTEC_MAP_SIZE 22801 /* AztecMap Version 32 151 x 151 */
#define AZTEC_MAP_POSN_MAX 20039 /* Maximum position index in AztecMap */ #define AZTEC_MAP_POSN_MAX 20039 /* Maximum position index in AztecMap */
/* Count number of consecutive (. SP) or (, SP) Punct mode doubles for comparison against Digit mode encoding */
static int az_count_doubles(const unsigned char source[], int i, const int length) { static int az_count_doubles(const unsigned char source[], int i, const int length) {
int c = 0; int c = 0;
@ -52,6 +53,7 @@ static int az_count_doubles(const unsigned char source[], int i, const int lengt
return c; return c;
} }
/* Count number of consecutive full stops or commas (can be encoded in Punct or Digit mode) */
static int az_count_dotcomma(const unsigned char source[], int i, const int length) { static int az_count_dotcomma(const unsigned char source[], int i, const int length) {
int c = 0; int c = 0;
@ -63,6 +65,7 @@ static int az_count_dotcomma(const unsigned char source[], int i, const int leng
return c; return c;
} }
/* Count number of consecutive `chr`s */
static int az_count_chr(const unsigned char source[], int i, const int length, const unsigned char chr) { static int az_count_chr(const unsigned char source[], int i, const int length, const unsigned char chr) {
int c = 0; int c = 0;
@ -74,6 +77,7 @@ static int az_count_chr(const unsigned char source[], int i, const int length, c
return c; return c;
} }
/* Return mode following current, or 'E' if none */
static char az_get_next_mode(const char encode_mode[], const int src_len, int i) { static char az_get_next_mode(const char encode_mode[], const int src_len, int i) {
int current_mode = encode_mode[i]; int current_mode = encode_mode[i];
@ -87,6 +91,7 @@ static char az_get_next_mode(const char encode_mode[], const int src_len, int i)
} }
} }
/* Same as `bin_append_posn()`, except check for buffer overflow first */
static int az_bin_append_posn(const int arg, const int length, char *binary, const int bin_posn) { static int az_bin_append_posn(const int arg, const int length, char *binary, const int bin_posn) {
if (bin_posn + length > AZTEC_BIN_CAPACITY) { if (bin_posn + length > AZTEC_BIN_CAPACITY) {
@ -95,6 +100,7 @@ static int az_bin_append_posn(const int arg, const int length, char *binary, con
return bin_append_posn(arg, length, binary, bin_posn); return bin_append_posn(arg, length, binary, bin_posn);
} }
/* Determine encoding modes and encode */
static int aztec_text_process(const unsigned char source[], int src_len, int bp, char binary_string[], const int gs1, static int aztec_text_process(const unsigned char source[], int src_len, int bp, char binary_string[], const int gs1,
const int eci, char *p_current_mode, int *data_length, const int debug_print) { const int eci, char *p_current_mode, int *data_length, const int debug_print) {
@ -112,7 +118,7 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
if (source[i] >= 128) { if (source[i] >= 128) {
encode_mode[i] = 'B'; encode_mode[i] = 'B';
} else { } else {
encode_mode[i] = AztecModes[(int) source[i]]; encode_mode[i] = AztecModes[source[i]];
} }
} }
@ -618,15 +624,13 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
if (reduced_source[i] == ' ') { if (reduced_source[i] == ' ') {
if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* SP */ if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* SP */
} else { } else {
if (!(bp = az_bin_append_posn(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string, bp))) if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0;
return 0;
} }
} else if (reduced_encode_mode[i] == 'L') { } else if (reduced_encode_mode[i] == 'L') {
if (reduced_source[i] == ' ') { if (reduced_source[i] == ' ') {
if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* SP */ if (!(bp = az_bin_append_posn(1, 5, binary_string, bp))) return 0; /* SP */
} else { } else {
if (!(bp = az_bin_append_posn(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string, bp))) if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0;
return 0;
} }
} else if (reduced_encode_mode[i] == 'M') { } else if (reduced_encode_mode[i] == 'M') {
if (reduced_source[i] == ' ') { if (reduced_source[i] == ' ') {
@ -634,8 +638,7 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
} else if (reduced_source[i] == 13) { } else if (reduced_source[i] == 13) {
if (!(bp = az_bin_append_posn(14, 5, binary_string, bp))) return 0; /* CR */ if (!(bp = az_bin_append_posn(14, 5, binary_string, bp))) return 0; /* CR */
} else { } else {
if (!(bp = az_bin_append_posn(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string, bp))) if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0;
return 0;
} }
} else if ((reduced_encode_mode[i] == 'P') || (reduced_encode_mode[i] == 'p')) { } else if ((reduced_encode_mode[i] == 'P') || (reduced_encode_mode[i] == 'p')) {
if (gs1 && (reduced_source[i] == '[')) { if (gs1 && (reduced_source[i] == '[')) {
@ -656,8 +659,7 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
} else if (reduced_source[i] == '.') { } else if (reduced_source[i] == '.') {
if (!(bp = az_bin_append_posn(19, 5, binary_string, bp))) return 0; /* Full stop */ if (!(bp = az_bin_append_posn(19, 5, binary_string, bp))) return 0; /* Full stop */
} else { } else {
if (!(bp = az_bin_append_posn(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string, bp))) if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 5, binary_string, bp))) return 0;
return 0;
} }
} else if (reduced_encode_mode[i] == 'D') { } else if (reduced_encode_mode[i] == 'D') {
if (reduced_source[i] == ' ') { if (reduced_source[i] == ' ') {
@ -667,8 +669,7 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
} else if (reduced_source[i] == '.') { } else if (reduced_source[i] == '.') {
if (!(bp = az_bin_append_posn(13, 4, binary_string, bp))) return 0; /* Full stop */ if (!(bp = az_bin_append_posn(13, 4, binary_string, bp))) return 0; /* Full stop */
} else { } else {
if (!(bp = az_bin_append_posn(AztecSymbolChar[(int) reduced_source[i]], 4, binary_string, bp))) if (!(bp = az_bin_append_posn(AztecSymbolChar[reduced_source[i]], 4, binary_string, bp))) return 0;
return 0;
} }
} }
} }

View File

@ -33,8 +33,8 @@
#ifndef Z_AZTEC_H #ifndef Z_AZTEC_H
#define Z_AZTEC_H #define Z_AZTEC_H
static const short AztecCompactMap[] = {
/* 27 x 27 data grid */ /* 27 x 27 data grid */
static const short AztecCompactMap[729] = {
609, 608, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, /* 0 */ 609, 608, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, /* 0 */
607, 606, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, /* 1 */ 607, 606, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, /* 1 */
605, 604, 409, 408, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 460, 461, /* 2 */ 605, 604, 409, 408, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 460, 461, /* 2 */
@ -84,56 +84,61 @@ static const short AztecMapCore[15][15] = {
{ 0, 0, 20029, 20028, 20027, 20026, 20025, 0, 20024, 20023, 20022, 20021, 20020, 0, 0, }, { 0, 0, 20029, 20028, 20027, 20026, 20025, 0, 20024, 20023, 20022, 20021, 20020, 0, 0, },
}; };
static const char AztecSymbolChar[128] = {
/* From Table 2 */ /* From Table 2 */
0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 14, 15, 16, 17, 18, 19, static const char AztecSymbolChar[128] = {
20, 21, 22, 23, 24, 25, 26, 15, 16, 17, 18, 19, 1, 6, 7, 8, 9, 10, 11, 12, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 14, 15,
13, 14, 15, 16, 0, 18, 0, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 21, 22, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 15, 16, 17, 18, 19,
23, 24, 25, 26, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 18, 0, 20,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27, 21, 28, 22, 23, 24, 2, 3, 4, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 21, 22, 23, 24, 25, 26,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
25, 26, 27, 29, 25, 30, 26, 27 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27, 21, 28, 22, 23,
24, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 25, 30, 26, 27
}; };
static const char AztecModes[129] = "BMMMMMMMMMMMMXBBBBBBBBBBBBBMMMMMXPPPPPPPPPPPXPXPDDDDDDDDDDPPPPPP" static const char AztecModes[128] = {
"MUUUUUUUUUUUUUUUUUUUUUUUUUUPMPMMMLLLLLLLLLLLLLLLLLLLLLLLLLLPMPMM"; 'B', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'X', 'B', 'B',
'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'M', 'M', 'M', 'M', 'M',
'X', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'X', 'P', 'X', 'P',
'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'P', 'P', 'P', 'P', 'P', 'P',
'M', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U',
'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'P', 'M', 'P', 'M', 'M',
'M', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'P', 'M', 'P', 'M', 'M'
};
static const short AztecSizes[32] = {
/* Codewords per symbol */ /* Codewords per symbol */
21, 48, 60, 88, 120, 156, 196, 240, 230, 272, 316, 364, 416, 470, 528, 588, 652, 720, 790, static const short AztecSizes[32] = {
864, 940, 1020, 920, 992, 1066, 1144, 1224, 1306, 1392, 1480, 1570, 1664 21, 48, 60, 88, 120, 156, 196, 240, 230, 272, 316, 364, 416, 470, 528, 588,
652, 720, 790, 864, 940, 1020, 920, 992, 1066, 1144, 1224, 1306, 1392, 1480, 1570, 1664
}; };
static const short AztecCompactSizes[4] = { static const short AztecCompactSizes[4] = {
17, 40, 51, 64 /* 64 data blocks (Mode Message max) but 76 altogether */ 17, 40, 51, 64 /* 64 data blocks (Mode Message max) but 76 altogether */
}; };
static const short Aztec10DataSizes[32] = {
/* Data bits per symbol maximum with 10% error correction */ /* Data bits per symbol maximum with 10% error correction */
96, 246, 408, 616, 840, 1104, 1392, 1704, 2040, 2420, 2820, 3250, 3720, 4200, 4730, static const short Aztec10DataSizes[32] = {
5270, 5840, 6450, 7080, 7750, 8430, 9150, 9900, 10680, 11484, 12324, 13188, 14076, 96, 246, 408, 616, 840, 1104, 1392, 1704, 2040, 2420, 2820, 3250, 3720, 4200, 4730, 5270,
15000, 15948, 16920, 17940 5840, 6450, 7080, 7750, 8430, 9150, 9900, 10680, 11484, 12324, 13188, 14076, 15000, 15948, 16920, 17940
}; };
static const short Aztec23DataSizes[32] = {
/* Data bits per symbol maximum with 23% error correction */ /* Data bits per symbol maximum with 23% error correction */
84, 204, 352, 520, 720, 944, 1184, 1456, 1750, 2070, 2410, 2780, 3180, 3590, 4040, static const short Aztec23DataSizes[32] = {
4500, 5000, 5520, 6060, 6630, 7210, 7830, 8472, 9132, 9816, 10536, 11280, 12036, 84, 204, 352, 520, 720, 944, 1184, 1456, 1750, 2070, 2410, 2780, 3180, 3590, 4040, 4500,
12828, 13644, 14472, 15348 5000, 5520, 6060, 6630, 7210, 7830, 8472, 9132, 9816, 10536, 11280, 12036, 12828, 13644, 14472, 15348
}; };
static const short Aztec36DataSizes[32] = {
/* Data bits per symbol maximum with 36% error correction */ /* Data bits per symbol maximum with 36% error correction */
66, 168, 288, 432, 592, 776, 984, 1208, 1450, 1720, 2000, 2300, 2640, 2980, 3350, static const short Aztec36DataSizes[32] = {
3740, 4150, 4580, 5030, 5500, 5990, 6500, 7032, 7584, 8160, 8760, 9372, 9996, 10656, 66, 168, 288, 432, 592, 776, 984, 1208, 1450, 1720, 2000, 2300, 2640, 2980, 3350, 3740,
11340, 12024, 12744 4150, 4580, 5030, 5500, 5990, 6500, 7032, 7584, 8160, 8760, 9372, 9996, 10656, 11340, 12024, 12744
}; };
static const short Aztec50DataSizes[32] = {
/* Data bits per symbol maximum with 50% error correction */ /* Data bits per symbol maximum with 50% error correction */
48, 126, 216, 328, 456, 600, 760, 936, 1120, 1330, 1550, 1790, 2050, 2320, 2610, static const short Aztec50DataSizes[32] = {
2910, 3230, 3570, 3920, 4290, 4670, 5070, 5484, 5916, 6360, 6828, 7308, 7800, 8316, 48, 126, 216, 328, 456, 600, 760, 936, 1120, 1330, 1550, 1790, 2050, 2320, 2610, 2910,
8844, 9384, 9948 3230, 3570, 3920, 4290, 4670, 5070, 5484, 5916, 6360, 6828, 7308, 7800, 8316, 8844, 9384, 9948
}; };
static const short AztecCompact10DataSizes[4] = { static const short AztecCompact10DataSizes[4] = {
@ -152,16 +157,17 @@ static const short AztecCompact50DataSizes[4] = {
36, 102, 176, 280 36, 102, 176, 280
}; };
/* Reference grid offsets */
static const char AztecOffset[32] = { static const char AztecOffset[32] = {
66, 64, 62, 60, 57, 55, 53, 51, 49, 47, 45, 42, 40, 38, 36, 34, 32, 30, 28, 25, 23, 21, 66, 64, 62, 60, 57, 55, 53, 51, 49, 47, 45, 42, 40, 38, 36, 34,
19, 17, 15, 13, 10, 8, 6, 4, 2, 0 32, 30, 28, 25, 23, 21, 19, 17, 15, 13, 10, 8, 6, 4, 2, 0
}; };
static const char AztecCompactOffset[4] = { static const char AztecCompactOffset[4] = {
6, 4, 2, 0 6, 4, 2, 0
}; };
static const short AztecMapGridYOffsets[] = { static const unsigned char AztecMapGridYOffsets[8] = {
27, 43, 59, 75, 91, 107, 123, 139 27, 43, 59, 75, 91, 107, 123, 139
}; };

View File

@ -43,18 +43,15 @@ static const char SILVER[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd";
#define ARSENIC_F (IS_NUM_F | IS_ARS_F) /* ARSENIC "0123456789ABCDEFGHJKLMNPRSTUVWXYZ" */ #define ARSENIC_F (IS_NUM_F | IS_ARS_F) /* ARSENIC "0123456789ABCDEFGHJKLMNPRSTUVWXYZ" */
static const char C11Table[11][6] = { static const char C11Table[11 + 1][6] = {
{'1','1','1','1','2','1'}, {'2','1','1','1','2','1'}, {'1','2','1','1','2','1'}, {'2','2','1','1','1','1'}, {'1','1','1','1','2','1'}, {'2','1','1','1','2','1'}, {'1','2','1','1','2','1'}, {'2','2','1','1','1','1'},
{'1','1','2','1','2','1'}, {'2','1','2','1','1','1'}, {'1','2','2','1','1','1'}, {'1','1','1','2','2','1'}, {'1','1','2','1','2','1'}, {'2','1','2','1','1','1'}, {'1','2','2','1','1','1'}, {'1','1','1','2','2','1'},
{'2','1','1','2','1','1'}, {'2','1','1','1','1','1'}, {'1','1','2','1','1','1'} {'2','1','1','2','1','1'}, {'2','1','1','1','1','1'}, {'1','1','2','1','1','1'},
{'1','1','2','2','1','1'} /* Start character (full 6), Stop character (first 5) */
}; };
/* Code 39 tables checked against ISO/IEC 16388:2007 */ /* Code 39 character assignments (ISO/IEC 16388:2007 Table 1 and Table A.1) */
static const char C39Table[43 + 1][10] = {
/* Incorporates Table A1 */
static const char C39Table[43][10] = {
/* Code 39 character assignments (Table 1) */
{'1','1','1','2','2','1','2','1','1','1'}, {'2','1','1','2','1','1','1','1','2','1'}, {'1','1','1','2','2','1','2','1','1','1'}, {'2','1','1','2','1','1','1','1','2','1'},
{'1','1','2','2','1','1','1','1','2','1'}, {'2','1','2','2','1','1','1','1','1','1'}, {'1','1','2','2','1','1','1','1','2','1'}, {'2','1','2','2','1','1','1','1','1','1'},
{'1','1','1','2','2','1','1','1','2','1'}, {'2','1','1','2','2','1','1','1','1','1'}, {'1','1','1','2','2','1','1','1','2','1'}, {'2','1','1','2','2','1','1','1','1','1'},
@ -76,11 +73,12 @@ static const char C39Table[43][10] = {
{'1','2','1','1','1','1','2','1','2','1'}, {'2','2','1','1','1','1','2','1','1','1'}, {'1','2','1','1','1','1','2','1','2','1'}, {'2','2','1','1','1','1','2','1','1','1'},
{'1','2','2','1','1','1','2','1','1','1'}, {'1','2','1','2','1','2','1','1','1','1'}, {'1','2','2','1','1','1','2','1','1','1'}, {'1','2','1','2','1','2','1','1','1','1'},
{'1','2','1','2','1','1','1','2','1','1'}, {'1','2','1','1','1','2','1','2','1','1'}, {'1','2','1','2','1','1','1','2','1','1'}, {'1','2','1','1','1','2','1','2','1','1'},
{'1','1','1','2','1','2','1','2','1','1'} {'1','1','1','2','1','2','1','2','1','1'},
{'1','2','1','1','2','1','2','1','1','1'} /* Start character (full 10), Stop character (first 9) */
}; };
/* Encoding the full ASCII character set in Code 39 (ISO/IEC 16388:2007 Table A.2) */
static const char EC39Ctrl[128][2] = { static const char EC39Ctrl[128][2] = {
/* Encoding the full ASCII character set in Code 39 (Table A2) */
{'%','U'}, {'$','A'}, {'$','B'}, {'$','C'}, {'$','D'}, {'$','E'}, {'$','F'}, {'$','G'}, {'$','H'}, {'$','I'}, {'%','U'}, {'$','A'}, {'$','B'}, {'$','C'}, {'$','D'}, {'$','E'}, {'$','F'}, {'$','G'}, {'$','H'}, {'$','I'},
{'$','J'}, {'$','K'}, {'$','L'}, {'$','M'}, {'$','N'}, {'$','O'}, {'$','P'}, {'$','Q'}, {'$','R'}, {'$','S'}, {'$','J'}, {'$','K'}, {'$','L'}, {'$','M'}, {'$','N'}, {'$','O'}, {'$','P'}, {'$','Q'}, {'$','R'}, {'$','S'},
{'$','T'}, {'$','U'}, {'$','V'}, {'$','W'}, {'$','X'}, {'$','Y'}, {'$','Z'}, {'%','A'}, {'%','B'}, {'%','C'}, {'$','T'}, {'$','U'}, {'$','V'}, {'$','W'}, {'$','X'}, {'$','Y'}, {'$','Z'}, {'%','A'}, {'%','B'}, {'%','C'},
@ -96,6 +94,7 @@ static const char EC39Ctrl[128][2] = {
{'+','X'}, {'+','Y'}, {'+','Z'}, {'%','P'}, {'%','Q'}, {'%','R'}, {'%','S'}, {'%','T'} {'+','X'}, {'+','Y'}, {'+','Z'}, {'%','P'}, {'%','Q'}, {'%','R'}, {'%','S'}, {'%','T'}
}; };
/* Code 93 ANSI/AIM BC5-1995 Table 3 */
static const char C93Ctrl[128][2] = { static const char C93Ctrl[128][2] = {
{'b','U'}, {'a','A'}, {'a','B'}, {'a','C'}, {'a','D'}, {'a','E'}, {'a','F'}, {'a','G'}, {'a','H'}, {'a','I'}, {'b','U'}, {'a','A'}, {'a','B'}, {'a','C'}, {'a','D'}, {'a','E'}, {'a','F'}, {'a','G'}, {'a','H'}, {'a','I'},
{'a','J'}, {'a','K'}, {'a','L'}, {'a','M'}, {'a','N'}, {'a','O'}, {'a','P'}, {'a','Q'}, {'a','R'}, {'a','S'}, {'a','J'}, {'a','K'}, {'a','L'}, {'a','M'}, {'a','N'}, {'a','O'}, {'a','P'}, {'a','Q'}, {'a','R'}, {'a','S'},
@ -112,6 +111,7 @@ static const char C93Ctrl[128][2] = {
{'d','X'}, {'d','Y'}, {'d','Z'}, {'b','P'}, {'b','Q'}, {'b','R'}, {'b','S'}, {'b','T'} {'d','X'}, {'d','Y'}, {'d','Z'}, {'b','P'}, {'b','Q'}, {'b','R'}, {'b','S'}, {'b','T'}
}; };
/* Code 93 ANSI/AIM BC5-1995 Table 2 */
static const char C93Table[47][6] = { static const char C93Table[47][6] = {
{'1','3','1','1','1','2'}, {'1','1','1','2','1','3'}, {'1','1','1','3','1','2'}, {'1','1','1','4','1','1'}, {'1','3','1','1','1','2'}, {'1','1','1','2','1','3'}, {'1','1','1','3','1','2'}, {'1','1','1','4','1','1'},
{'1','2','1','1','1','3'}, {'1','2','1','2','1','2'}, {'1','2','1','3','1','1'}, {'1','1','1','1','1','4'}, {'1','2','1','1','1','3'}, {'1','2','1','2','1','2'}, {'1','2','1','3','1','1'}, {'1','1','1','1','1','4'},
@ -127,8 +127,8 @@ static const char C93Table[47][6] = {
{'3','1','2','1','1','1'}, {'3','1','1','1','2','1'}, {'1','2','2','2','1','1'} {'3','1','2','1','1','1'}, {'3','1','1','1','2','1'}, {'1','2','2','2','1','1'}
}; };
/* *********************** CODE 11 ******************** */ /* Code 11 */
INTERNAL int code11(struct zint_symbol *symbol, unsigned char source[], int length) { /* Code 11 */ INTERNAL int code11(struct zint_symbol *symbol, unsigned char source[], int length) {
int i; int i;
int h, c_digit, c_weight, c_count, k_digit, k_weight, k_count; int h, c_digit, c_weight, c_count, k_digit, k_weight, k_count;
@ -170,7 +170,7 @@ INTERNAL int code11(struct zint_symbol *symbol, unsigned char source[], int leng
k_count = 0; k_count = 0;
/* start character */ /* start character */
memcpy(d, "112211", 6); memcpy(d, C11Table[11], 6);
d += 6; d += 6;
/* Draw main body of barcode */ /* Draw main body of barcode */
@ -223,7 +223,7 @@ INTERNAL int code11(struct zint_symbol *symbol, unsigned char source[], int leng
} }
/* Stop character */ /* Stop character */
memcpy(d, "11221", 5); memcpy(d, C11Table[11], 5);
d += 5; d += 5;
expand(symbol, dest, d - dest); expand(symbol, dest, d - dest);
@ -274,7 +274,7 @@ INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int leng
} }
/* Start character */ /* Start character */
memcpy(d, "1211212111", 10); memcpy(d, C39Table[43], 10);
d += 10; d += 10;
for (i = 0; i < length; i++, d += 10) { for (i = 0; i < length; i++, d += 10) {
@ -303,7 +303,7 @@ INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int leng
} }
/* Stop character */ /* Stop character */
memcpy(d, "121121211", 9); memcpy(d, C39Table[43], 9);
d += 9; d += 9;
if ((symbol->symbology == BARCODE_LOGMARS) || (symbol->symbology == BARCODE_HIBC_39)) { if ((symbol->symbology == BARCODE_LOGMARS) || (symbol->symbology == BARCODE_HIBC_39)) {
@ -844,7 +844,7 @@ INTERNAL int vin(struct zint_symbol *symbol, unsigned char source[], int length)
char output_check; char output_check;
int sum; int sum;
int i; int i;
static const int weight[17] = {8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2}; static const char weight[17] = { 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 };
/* Check length */ /* Check length */
if (length != 17) { if (length != 17) {
@ -900,7 +900,7 @@ INTERNAL int vin(struct zint_symbol *symbol, unsigned char source[], int length)
} }
/* Start character */ /* Start character */
memcpy(d, "1211212111", 10); memcpy(d, C39Table[43], 10);
d += 10; d += 10;
/* Import character 'I' prefix? */ /* Import character 'I' prefix? */
@ -915,7 +915,7 @@ INTERNAL int vin(struct zint_symbol *symbol, unsigned char source[], int length)
} }
/* Stop character */ /* Stop character */
memcpy(d, "121121211", 9); memcpy(d, C39Table[43], 9);
d += 9; d += 9;
expand(symbol, dest, d - dest); expand(symbol, dest, d - dest);

View File

@ -1,7 +1,7 @@
/* code1.c - USS Code One */ /* code1.c - USS Code One */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2009-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -461,7 +461,7 @@ static int c1_c40text_cnt(const int current_mode, const int gs1, unsigned char i
cnt += 2; cnt += 2;
input -= 128; input -= 128;
} }
if ((current_mode == C1_C40 && c40_shift[input]) || (current_mode == C1_TEXT && text_shift[input])) { if ((current_mode == C1_C40 && c1_c40_shift[input]) || (current_mode == C1_TEXT && c1_text_shift[input])) {
cnt += 1; cnt += 1;
} }
@ -689,11 +689,11 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], int len
const char *ct_shift, *ct_value; const char *ct_shift, *ct_value;
if (current_mode == C1_C40) { if (current_mode == C1_C40) {
ct_shift = c40_shift; ct_shift = c1_c40_shift;
ct_value = c40_value; ct_value = c1_c40_value;
} else { } else {
ct_shift = text_shift; ct_shift = c1_text_shift;
ct_value = text_value; ct_value = c1_text_value;
} }
if (debug_print) fputs(current_mode == C1_C40 ? "C40 " : "TEXT ", stdout); if (debug_print) fputs(current_mode == C1_C40 ? "C40 " : "TEXT ", stdout);

View File

@ -1,7 +1,7 @@
/* code1.h - Lookup info for USS Code One */ /* code1.h - Lookup info for USS Code One */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2009-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -33,67 +33,96 @@
#ifndef Z_CODE1_H #ifndef Z_CODE1_H
#define Z_CODE1_H #define Z_CODE1_H
static const char c40_shift[] = { /* C40 shift to use per ASCII character (Table 11) */
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, static const char c1_c40_shift[128] = {
0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 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, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
2, 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, 0, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
}; };
static const char c40_value[] = { /* C40 ASCII values (Table 11) */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, static const char c1_c40_value[128] = {
3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
15, 16, 17, 18, 19, 20, 21, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
22, 23, 24, 25, 26, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
21, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 22, 23, 24, 25, 26,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
}; };
static const char text_shift[] = { /* Text shift to use per ASCII character (Table 11) */
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, static const char c1_text_shift[128] = {
0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 3, 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, 0, 3, 3, 3, 3, 3 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
3, 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, 0, 3, 3, 3, 3, 3
}; };
static const char text_value[] = { /* Text ASCII values (Table 11) */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, static const char c1_text_value[128] = {
3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
15, 16, 17, 18, 19, 20, 21, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
22, 23, 24, 25, 26, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 27, 28, 29, 30, 31 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
21, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 22, 23, 24, 25, 26,
0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 27, 28, 29, 30, 31
}; };
static const unsigned short c1_height[] = { /* Height in X-dims per version A-H (Table 2) */
static const unsigned char c1_height[8] = {
16, 22, 28, 40, 52, 70, 104, 148 16, 22, 28, 40, 52, 70, 104, 148
}; };
static const unsigned short c1_width[] = { /* Width in X-dims per version A-H (Table 2) */
static const unsigned char c1_width[8] = {
18, 22, 32, 42, 54, 76, 98, 134 18, 22, 32, 42, 54, 76, 98, 134
}; };
static const unsigned short c1_data_length[] = { /* Data codewords per version A-H (Table 14) */
static const unsigned short c1_data_length[8] = {
10, 19, 44, 91, 182, 370, 732, 1480 10, 19, 44, 91, 182, 370, 732, 1480
}; };
static const unsigned short c1_ecc_length[] = { /* EC codewords per version A-H (Table 14) */
static const unsigned short c1_ecc_length[8] = {
10, 16, 26, 44, 70, 140, 280, 560 10, 16, 26, 44, 70, 140, 280, 560
}; };
static const unsigned short c1_blocks[] = { /* Number of codewords to divide into odd/even blocks for EC per version A-H */
static const unsigned char c1_blocks[8] = {
1, 1, 1, 1, 1, 2, 4, 8 1, 1, 1, 1, 1, 2, 4, 8
}; };
static const unsigned short c1_data_blocks[] = { /* Data blocks per version A-H (Table 14) */
static const unsigned char c1_data_blocks[8] = {
10, 19, 44, 91, 182, 185, 183, 185 10, 19, 44, 91, 182, 185, 183, 185
}; };
static const unsigned short c1_ecc_blocks[] = { /* EC blocks per version A-H (Table 14) */
static const unsigned char c1_ecc_blocks[8] = {
10, 16, 26, 44, 70, 70, 70, 70 10, 16, 26, 44, 70, 70, 70, 70
}; };
static const unsigned short c1_grid_width[] = { /* Number of block columns per version A-H */
static const unsigned char c1_grid_width[8] = {
4, 5, 7, 9, 12, 17, 22, 30 4, 5, 7, 9, 12, 17, 22, 30
}; };
static const unsigned short c1_grid_height[] = { /* Number of block rows per version A-H */
static const unsigned char c1_grid_height[8] = {
5, 7, 10, 15, 21, 30, 46, 68 5, 7, 10, 15, 21, 30, 46, 68
}; };

View File

@ -1,7 +1,7 @@
/* code16k.c - Handles Code 16k stacked symbology */ /* code16k.c - Handles Code 16k stacked symbology */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -41,18 +41,18 @@
/* Note using C128Table with extra entry at 106 (Triple Shift) for C16KTable */ /* Note using C128Table with extra entry at 106 (Triple Shift) for C16KTable */
static const char C16KStartStop[8][4] = {
/* EN 12323 Table 3 and Table 4 - Start patterns and stop patterns */ /* EN 12323 Table 3 and Table 4 - Start patterns and stop patterns */
static const char C16KStartStop[8][4] = {
{'3','2','1','1'}, {'2','2','2','1'}, {'2','1','2','2'}, {'1','4','1','1'}, {'3','2','1','1'}, {'2','2','2','1'}, {'2','1','2','2'}, {'1','4','1','1'},
{'1','1','3','2'}, {'1','2','3','1'}, {'1','1','1','4'}, {'3','1','1','2'} {'1','1','3','2'}, {'1','2','3','1'}, {'1','1','1','4'}, {'3','1','1','2'}
}; };
/* EN 12323 Table 5 - Start and stop values defining row numbers */ /* EN 12323 Table 5 - Start and stop values defining row numbers */
static const int C16KStartValues[16] = { static const unsigned char C16KStartValues[16] = {
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7
}; };
static const int C16KStopValues[16] = { static const unsigned char C16KStopValues[16] = {
0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3
}; };

View File

@ -551,10 +551,9 @@ INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height,
} }
/* Prevent inlining of `stripf()` which can optimize away its effect */ /* Prevent inlining of `stripf()` which can optimize away its effect */
#if defined(__GNUC__) || defined(__clang__) #if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
__attribute__((__noinline__)) __attribute__((__noinline__))
#endif #elif defined(_MSC_VER) && _MSC_VER >= 1310 /* MSVC 2003 (VC++ 7.1) */
#if defined(_MSC_VER) && _MSC_VER >= 1310 /* MSVC 2003 (VC++ 7.1) */
__declspec(noinline) __declspec(noinline)
#endif #endif
/* Removes excess precision from floats - see https://stackoverflow.com/q/503436 */ /* Removes excess precision from floats - see https://stackoverflow.com/q/503436 */

View File

@ -123,7 +123,7 @@ typedef unsigned __int64 uint64_t;
#define ustrcat(target, source) strcat((char *) (target), (const char *) (source)) #define ustrcat(target, source) strcat((char *) (target), (const char *) (source))
#define ustrncat(target, source, count) strncat((char *) (target), (const char *) (source), (count)) #define ustrncat(target, source, count) strncat((char *) (target), (const char *) (source), (count))
#if (defined(_MSC_VER) && _MSC_VER == 1200) || defined(ZINT_IS_C89) /* VC6 or C89 */ #if (defined(_MSC_VER) && _MSC_VER <= 1200) || defined(ZINT_IS_C89) /* VC6 or C89 */
# define ceilf (float) ceil # define ceilf (float) ceil
# define floorf (float) floor # define floorf (float) floor
# define fmodf (float) fmod # define fmodf (float) fmod
@ -136,7 +136,7 @@ typedef unsigned __int64 uint64_t;
#ifdef _MSC_VER #ifdef _MSC_VER
# pragma warning(disable: 4244) /* conversion from int to float */ # pragma warning(disable: 4244) /* conversion from int to float */
# if _MSC_VER != 1200 /* VC6 */ # if _MSC_VER > 1200 /* VC6 */
# pragma warning(disable: 4996) /* function or variable may be unsafe */ # pragma warning(disable: 4996) /* function or variable may be unsafe */
# endif # endif
#endif #endif
@ -144,17 +144,17 @@ typedef unsigned __int64 uint64_t;
/* Is float integral value? (https://stackoverflow.com/a/40404149) */ /* Is float integral value? (https://stackoverflow.com/a/40404149) */
#define isfintf(arg) (fmodf(arg, 1.0f) == 0.0f) #define isfintf(arg) (fmodf(arg, 1.0f) == 0.0f)
#if (defined(__GNUC__) || defined(__clang__)) && !defined(ZINT_TEST) && !defined(__MINGW32__) #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(ZINT_TEST) && !defined(__MINGW32__)
# define INTERNAL __attribute__ ((visibility ("hidden"))) # define INTERNAL __attribute__((__visibility__("hidden")))
#elif defined(ZINT_TEST) #elif defined(ZINT_TEST)
# define INTERNAL ZINT_EXTERN /* The test suite references INTERNAL functions, so they need to be exported */ # define INTERNAL ZINT_EXTERN /* The test suite references INTERNAL functions, so they need to be exported */
#else #else
# define INTERNAL # define INTERNAL
#endif #endif
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__MINGW32__) #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__MINGW32__)
# define INTERNAL_DATA_EXTERN __attribute__ ((visibility ("hidden"))) extern # define INTERNAL_DATA_EXTERN __attribute__((__visibility__("hidden"))) extern
# define INTERNAL_DATA __attribute__ ((visibility ("hidden"))) # define INTERNAL_DATA __attribute__((__visibility__("hidden")))
#else #else
# define INTERNAL_DATA_EXTERN extern # define INTERNAL_DATA_EXTERN extern
# define INTERNAL_DATA # define INTERNAL_DATA

View File

@ -56,7 +56,6 @@
#include "gs1.h" #include "gs1.h"
#include "general_field.h" #include "general_field.h"
#define UINT unsigned short
#include "composite.h" #include "composite.h"
INTERNAL int gs1_128_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_mode, INTERNAL int gs1_128_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_mode,
@ -73,7 +72,7 @@ INTERNAL int dbar_ltd_cc(struct zint_symbol *symbol, unsigned char source[], int
INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows);
INTERNAL int dbar_date(const unsigned char source[], const int length, const int src_posn); INTERNAL int dbar_date(const unsigned char source[], const int length, const int src_posn);
static int _min(const int first, const int second) { static int cc_min(const int first, const int second) {
if (first <= second) if (first <= second)
return first; return first;
@ -82,23 +81,23 @@ static int _min(const int first, const int second) {
} }
/* gets bit in bitString at bitPos */ /* gets bit in bitString at bitPos */
static int getBit(const UINT *bitStr, const int bitPos) { static int cc_getBit(const unsigned short *bitStr, const int bitPos) {
return !!(bitStr[bitPos >> 4] & (0x8000 >> (bitPos & 15))); return !!(bitStr[bitPos >> 4] & (0x8000 >> (bitPos & 15)));
} }
/* converts bit string to base 928 values, codeWords[0] is highest order */ /* converts bit string to base 928 values, codeWords[0] is highest order */
static int encode928(const UINT bitString[], UINT codeWords[], const int bitLng) { static int cc_encode928(const unsigned short bitString[], unsigned short codeWords[], const int bitLng) {
int i, j, b, cwNdx, cwLng; int i, j, b, cwNdx, cwLng;
for (cwNdx = cwLng = b = 0; b < bitLng; b += 69, cwNdx += 7) { for (cwNdx = cwLng = b = 0; b < bitLng; b += 69, cwNdx += 7) {
const int bitCnt = _min(bitLng - b, 69); const int bitCnt = cc_min(bitLng - b, 69);
int cwCnt; int cwCnt;
cwLng += cwCnt = bitCnt / 10 + 1; cwLng += cwCnt = bitCnt / 10 + 1;
for (i = 0; i < cwCnt; i++) for (i = 0; i < cwCnt; i++)
codeWords[cwNdx + i] = 0; /* init 0 */ codeWords[cwNdx + i] = 0; /* init 0 */
for (i = 0; i < bitCnt; i++) { for (i = 0; i < bitCnt; i++) {
if (getBit(bitString, b + bitCnt - i - 1)) { if (cc_getBit(bitString, b + bitCnt - i - 1)) {
for (j = 0; j < cwCnt; j++) for (j = 0; j < cwCnt; j++)
codeWords[cwNdx + j] += pwr928[i][j + 7 - cwCnt]; codeWords[cwNdx + j] += cc_pwr928[i][j + 7 - cwCnt];
} }
} }
for (i = cwCnt - 1; i > 0; i--) { for (i = cwCnt - 1; i > 0; i--) {
@ -117,8 +116,8 @@ static void cc_a(struct zint_symbol *symbol, const char source[], const int cc_w
int LeftRAPStart, RightRAPStart, CentreRAPStart, StartCluster; int LeftRAPStart, RightRAPStart, CentreRAPStart, StartCluster;
int LeftRAP, RightRAP, CentreRAP, Cluster; int LeftRAP, RightRAP, CentreRAP, Cluster;
int loop; int loop;
UINT codeWords[28] = {0}; unsigned short codeWords[28] = {0};
UINT bitStr[13] = {0}; unsigned short bitStr[13] = {0};
char pattern[580]; char pattern[580];
int bp = 0; int bp = 0;
const int debug_print = symbol->debug & ZINT_DEBUG_PRINT; const int debug_print = symbol->debug & ZINT_DEBUG_PRINT;
@ -140,7 +139,7 @@ static void cc_a(struct zint_symbol *symbol, const char source[], const int cc_w
} }
/* encode codeWords from bitStr */ /* encode codeWords from bitStr */
cwCnt = encode928(bitStr, codeWords, bitlen); cwCnt = cc_encode928(bitStr, codeWords, bitlen);
switch (cc_width) { switch (cc_width) {
case 2: case 2:
@ -191,9 +190,9 @@ static void cc_a(struct zint_symbol *symbol, const char source[], const int cc_w
break; break;
} }
rows = ccaVariants[variant]; rows = cc_aVariants[variant];
k = ccaVariants[17 + variant]; k = cc_aVariants[17 + variant];
offset = ccaVariants[34 + variant]; offset = cc_aVariants[34 + variant];
/* Reed-Solomon error correction */ /* Reed-Solomon error correction */
@ -201,9 +200,9 @@ static void cc_a(struct zint_symbol *symbol, const char source[], const int cc_w
total = (codeWords[i] + rsCodeWords[k - 1]) % 929; total = (codeWords[i] + rsCodeWords[k - 1]) % 929;
for (j = k - 1; j >= 0; j--) { for (j = k - 1; j >= 0; j--) {
if (j == 0) { if (j == 0) {
rsCodeWords[j] = (929 - (total * ccaCoeffs[offset + j]) % 929) % 929; rsCodeWords[j] = (929 - (total * cc_aCoeffs[offset + j]) % 929) % 929;
} else { } else {
rsCodeWords[j] = (rsCodeWords[j - 1] + 929 - (total * ccaCoeffs[offset + j]) % 929) % 929; rsCodeWords[j] = (rsCodeWords[j - 1] + 929 - (total * cc_aCoeffs[offset + j]) % 929) % 929;
} }
} }
} }
@ -220,10 +219,10 @@ static void cc_a(struct zint_symbol *symbol, const char source[], const int cc_w
} }
/* Place data into table */ /* Place data into table */
LeftRAPStart = aRAPTable[variant]; LeftRAPStart = cc_aRAPTable[variant];
CentreRAPStart = aRAPTable[variant + 17]; CentreRAPStart = cc_aRAPTable[variant + 17];
RightRAPStart = aRAPTable[variant + 34]; RightRAPStart = cc_aRAPTable[variant + 34];
StartCluster = aRAPTable[variant + 51] / 3; StartCluster = cc_aRAPTable[variant + 51] / 3;
LeftRAP = LeftRAPStart; LeftRAP = LeftRAPStart;
CentreRAP = CentreRAPStart; CentreRAP = CentreRAPStart;
@ -652,7 +651,7 @@ static void cc_c(struct zint_symbol *symbol, const char source[], const int cc_w
} }
} }
static int calc_padding_cca(const int binary_length, const int cc_width) { static int cc_a_calc_padding(const int binary_length, const int cc_width) {
int target_bitsize = 0; int target_bitsize = 0;
switch (cc_width) { switch (cc_width) {
@ -704,7 +703,7 @@ static int calc_padding_cca(const int binary_length, const int cc_width) {
return target_bitsize; return target_bitsize;
} }
static int calc_padding_ccb(const int binary_length, const int cc_width) { static int cc_b_calc_padding(const int binary_length, const int cc_width) {
int target_bitsize = 0; int target_bitsize = 0;
switch (cc_width) { switch (cc_width) {
@ -778,7 +777,7 @@ static int calc_padding_ccb(const int binary_length, const int cc_width) {
return target_bitsize; return target_bitsize;
} }
static int calc_padding_ccc(const int binary_length, int *p_cc_width, const int linear_width, int *p_ecc_level) { static int cc_c_calc_padding(const int binary_length, int *p_cc_width, const int linear_width, int *p_ecc_level) {
int target_bitsize = 0; int target_bitsize = 0;
int byte_length, codewords_used, ecc_level, ecc_codewords, rows; int byte_length, codewords_used, ecc_level, ecc_codewords, rows;
int codewords_total, target_codewords, target_bytesize; int codewords_total, target_codewords, target_bytesize;
@ -1136,13 +1135,13 @@ static int cc_binary_string(struct zint_symbol *symbol, const unsigned char sour
switch (cc_mode) { switch (cc_mode) {
case 1: case 1:
target_bitsize = calc_padding_cca(bp, *p_cc_width); target_bitsize = cc_a_calc_padding(bp, *p_cc_width);
break; break;
case 2: case 2:
target_bitsize = calc_padding_ccb(bp, *p_cc_width); target_bitsize = cc_b_calc_padding(bp, *p_cc_width);
break; break;
case 3: case 3:
target_bitsize = calc_padding_ccc(bp, p_cc_width, linear_width, p_ecc_level); target_bitsize = cc_c_calc_padding(bp, p_cc_width, linear_width, p_ecc_level);
break; break;
} }
@ -1173,13 +1172,13 @@ static int cc_binary_string(struct zint_symbol *symbol, const unsigned char sour
switch (cc_mode) { switch (cc_mode) {
case 1: case 1:
target_bitsize = calc_padding_cca(bp, *p_cc_width); target_bitsize = cc_a_calc_padding(bp, *p_cc_width);
break; break;
case 2: case 2:
target_bitsize = calc_padding_ccb(bp, *p_cc_width); target_bitsize = cc_b_calc_padding(bp, *p_cc_width);
break; break;
case 3: case 3:
target_bitsize = calc_padding_ccc(bp, p_cc_width, linear_width, p_ecc_level); target_bitsize = cc_c_calc_padding(bp, p_cc_width, linear_width, p_ecc_level);
break; break;
} }
@ -1214,7 +1213,8 @@ static int cc_binary_string(struct zint_symbol *symbol, const unsigned char sour
} }
/* Calculate the width of the linear part (primary) */ /* Calculate the width of the linear part (primary) */
static int linear_dummy_run(int input_mode, unsigned char *source, const int length, const int debug, char *errtxt) { static int cc_linear_dummy_run(int input_mode, unsigned char *source, const int length, const int debug,
char *errtxt) {
struct zint_symbol dummy = {0}; struct zint_symbol dummy = {0};
int error_number; int error_number;
int linear_width; int linear_width;
@ -1235,9 +1235,8 @@ static int linear_dummy_run(int input_mode, unsigned char *source, const int len
return linear_width; return linear_width;
} }
static const char in_linear_comp[] = " in linear component";
INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int length) { INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int length) {
static const char in_linear_comp[] = " in linear component";
int error_number, cc_mode, cc_width = 0, ecc_level = 0; int error_number, cc_mode, cc_width = 0, ecc_level = 0;
int j, i, k; int j, i, k;
/* Allow for 8 bits + 5-bit latch per char + 1000 bits overhead/padding */ /* Allow for 8 bits + 5-bit latch per char + 1000 bits overhead/padding */
@ -1273,10 +1272,10 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l
if (symbol->symbology == BARCODE_GS1_128_CC) { if (symbol->symbology == BARCODE_GS1_128_CC) {
/* Do a test run of encoding the linear component to establish its width */ /* Do a test run of encoding the linear component to establish its width */
linear_width = linear_dummy_run(symbol->input_mode, (unsigned char *) symbol->primary, pri_len, linear_width = cc_linear_dummy_run(symbol->input_mode, (unsigned char *) symbol->primary, pri_len,
symbol->debug, symbol->errtxt); symbol->debug, symbol->errtxt);
if (linear_width == 0) { if (linear_width == 0) {
if (strlen(symbol->errtxt) + strlen(in_linear_comp) < sizeof(symbol->errtxt)) { if (strlen(symbol->errtxt) + sizeof(in_linear_comp) <= sizeof(symbol->errtxt)) {
strcat(symbol->errtxt, in_linear_comp); strcat(symbol->errtxt, in_linear_comp);
} }
return ZINT_ERROR_INVALID_DATA; return ZINT_ERROR_INVALID_DATA;
@ -1445,7 +1444,7 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l
if (error_number) { if (error_number) {
strcpy(symbol->errtxt, linear->errtxt); strcpy(symbol->errtxt, linear->errtxt);
if (strlen(symbol->errtxt) + strlen(in_linear_comp) < sizeof(symbol->errtxt)) { if (strlen(symbol->errtxt) + sizeof(in_linear_comp) <= sizeof(symbol->errtxt)) {
strcat(symbol->errtxt, in_linear_comp); strcat(symbol->errtxt, in_linear_comp);
} }
if (error_number >= ZINT_ERROR) { if (error_number >= ZINT_ERROR) {

View File

@ -1,7 +1,7 @@
/* composite.c - Tables for UCC.EAN Composite Symbols */ /* composite.c - Tables for UCC.EAN Composite Symbols */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2022 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -34,7 +34,7 @@
#define Z_COMPOSITE_H #define Z_COMPOSITE_H
/* CC-A component coefficients from ISO/IEC 24728:2006 Annex F */ /* CC-A component coefficients from ISO/IEC 24728:2006 Annex F */
static const unsigned short ccaCoeffs[30] = { static const unsigned short cc_aCoeffs[30] = {
/* k = 4 */ /* k = 4 */
522, 568, 723, 809, 522, 568, 723, 809,
@ -52,14 +52,14 @@ static const unsigned short ccaCoeffs[30] = {
}; };
/* rows, error codewords, k-offset of valid CC-A sizes from ISO/IEC 24723:2006 Table 9 */ /* rows, error codewords, k-offset of valid CC-A sizes from ISO/IEC 24723:2006 Table 9 */
static const char ccaVariants[51] = { static const char cc_aVariants[51] = {
5, 6, 7, 8, 9, 10, 12, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, 5, 6, 7, 8, 9, 10, 12, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7,
4, 4, 5, 5, 6, 6, 7, 4, 5, 6, 7, 7, 4, 5, 6, 7, 8, 4, 4, 5, 5, 6, 6, 7, 4, 5, 6, 7, 7, 4, 5, 6, 7, 8,
0, 0, 4, 4, 9, 9, 15, 0, 4, 9, 15, 15, 0, 4, 9, 15, 22 0, 0, 4, 4, 9, 9, 15, 0, 4, 9, 15, 15, 0, 4, 9, 15, 22
}; };
/* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24723:2006 tables 10 and 11 */ /* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24723:2006 tables 10 and 11 */
static const char aRAPTable[68] = { static const char cc_aRAPTable[68] = {
39, 1, 32, 8, 14, 43, 20, 11, 1, 5, 15, 21, 40, 43, 46, 34, 29, 39, 1, 32, 8, 14, 43, 20, 11, 1, 5, 15, 21, 40, 43, 46, 34, 29,
0, 0, 0, 0, 0, 0, 0, 43, 33, 37, 47, 1, 20, 23, 26, 14, 9, 0, 0, 0, 0, 0, 0, 0, 43, 33, 37, 47, 1, 20, 23, 26, 14, 9,
19, 33, 12, 40, 46, 23, 52, 23, 13, 17, 27, 33, 52, 3, 6, 46, 41, 19, 33, 12, 40, 46, 23, 52, 23, 13, 17, 27, 33, 52, 3, 6, 46, 41,
@ -69,7 +69,7 @@ static const char aRAPTable[68] = {
/* Row Address Patterns are as defined in pdf417.h */ /* Row Address Patterns are as defined in pdf417.h */
/* Generated by tools/gen_pwr928_table.php */ /* Generated by tools/gen_pwr928_table.php */
static const UINT pwr928[69][7] = { static const unsigned short cc_pwr928[69][7] = {
{ 0, 0, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 1, },
{ 0, 0, 0, 0, 0, 0, 2, }, { 0, 0, 0, 0, 0, 0, 2, },
{ 0, 0, 0, 0, 0, 0, 4, }, { 0, 0, 0, 0, 0, 0, 4, },

View File

@ -1,7 +1,7 @@
/* dmatrix.c Handles Data Matrix ECC 200 symbols */ /* dmatrix.c Handles Data Matrix ECC 200 symbols */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2009-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
developed from and including some functions from: developed from and including some functions from:
IEC16022 bar code generation IEC16022 bar code generation
@ -930,7 +930,7 @@ static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[]
/* Not possible to unlatch a full EDF edge to something else */ /* Not possible to unlatch a full EDF edge to something else */
if (previous == NULL || previous->endMode != DM_EDIFACT) { if (previous == NULL || previous->endMode != DM_EDIFACT) {
static const int c40text_modes[] = { DM_C40, DM_TEXT }; static const char c40text_modes[] = { DM_C40, DM_TEXT };
if (z_isdigit(source[from]) && from + 1 < length && z_isdigit(source[from + 1])) { if (z_isdigit(source[from]) && from + 1 < length && z_isdigit(source[from + 1])) {
dm_addEdge(symbol, source, length, edges, DM_ASCII, from, 2, previous, 0); dm_addEdge(symbol, source, length, edges, DM_ASCII, from, 2, previous, 0);
@ -1886,7 +1886,7 @@ static int dm_ecc200(struct zint_symbol *symbol, struct zint_seg segs[], const i
} }
/* ecc code */ /* ecc code */
if (symbolsize == INTSYMBOL144 && !(symbol->option_3 & DM_ISO_144)) { if (symbolsize == DMINTSYMBOL144 && !(symbol->option_3 & DM_ISO_144)) {
skew = 1; skew = 1;
} }
dm_ecc(binary, bytes, datablock, rsblock, skew); dm_ecc(binary, bytes, datablock, rsblock, skew);

View File

@ -1,7 +1,7 @@
/* dmatrix.h - Handles Data Matrix ECC 200 */ /* dmatrix.h - Handles Data Matrix ECC 200 */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2009-2022 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -46,198 +46,211 @@
#define DM_EDIFACT 5 #define DM_EDIFACT 5
#define DM_BASE256 6 #define DM_BASE256 6
static const char dm_c40_shift[] = { /* C40 shift to use per ASCII character (Table C.1) */
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, static const char dm_c40_shift[128] = {
0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 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, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
2, 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, 0, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
}; };
static const char dm_c40_value[] = { /* C40 ASCII values (Table C.1) */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, static const char dm_c40_value[128] = {
3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
15, 16, 17, 18, 19, 20, 21, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
22, 23, 24, 25, 26, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
21, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 22, 23, 24, 25, 26,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
}; };
static const char dm_text_shift[] = { /* Text shift to use per ASCII character (Table C.2) */
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, static const char dm_text_shift[128] = {
0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 3, 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, 0, 3, 3, 3, 3, 3 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
3, 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, 0, 3, 3, 3, 3, 3
}; };
static const char dm_text_value[] = { /* Text ASCII values (Table C.2) */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, static const char dm_text_value[128] = {
3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
15, 16, 17, 18, 19, 20, 21, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
22, 23, 24, 25, 26, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 27, 28, 29, 30, 31 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
}; 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
21, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
/* Position in option array [symbol option value - 1] 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 22, 23, 24, 25, 26,
The position in the option array is by increasing total data codewords with square first 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
The last comment value is the total data codewords value. 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 27, 28, 29, 30, 31
The index of this array is the --vers parameter value -1 and is given as first comment value */
static const unsigned short dm_intsymbol[] = {
/* Standard DM */
0, /* 1: 10x10 , 3*/ 1, /* 2: 12x12 , 5*/ 3, /* 3: 14x14 , 8*/ 5, /* 4: 16x16 , 12*/
7, /* 5: 18x18 , 18*/ 9, /* 6: 20x20 , 22*/ 12, /* 7: 22x22 , 30*/ 15, /* 8: 24x24 , 36*/
18, /* 9: 26x26 , 44*/ 23, /* 10: 32x32 , 62*/ 31, /* 11: 36x36 , 86*/ 34, /* 12: 40x40 ,114*/
36, /* 13: 44x44 ,144*/ 37, /* 14: 48x48 ,174*/ 38, /* 15: 52x52 ,204*/ 39, /* 16: 64x64 ,280*/
40, /* 17: 72x72 ,368*/ 41, /* 18: 80x80 ,456*/ 42, /* 19: 88x88 ,576*/ 43, /* 20: 96x96 ,696*/
44, /* 21:104x104,816*/ 45, /* 22:120x120,1050*/46, /* 23:132x132,1304*/47, /* 24:144x144,1558*/
2, /* 25: 8x18 , 5*/ 4, /* 26: 8x32 , 10*/ 6, /* 27: 12x26 , 16*/ 10, /* 28: 12x36 , 22*/
13, /* 29: 16x36 , 32*/ 20, /* 30: 16x48 , 49*/
/* DMRE */
8, /* 31: 8x48 , 18*/ 11, /* 32: 8x64 , 24*/ 14, /* 33: 8x80 , 32*/ 16, /* 34: 8x96 , 38*/
21, /* 35: 8x120, 49*/ 25, /* 36: 8x144, 63*/ 17, /* 37: 12x64 , 43*/ 26, /* 38: 12x88 , 64*/
24, /* 39: 16x64 , 62*/ 19, /* 40: 20x36 , 44*/ 22, /* 41: 20x44 , 56*/ 30, /* 42: 20x64 , 84*/
28, /* 43: 22x48 , 72*/ 29, /* 44: 24x48 , 80*/ 33, /* 45: 24x64 ,108*/ 27, /* 46: 26x40 , 70*/
32, /* 47: 26x48 , 90*/ 35, /* 48: 26x64 ,118*/
}; };
/* Number of DM Sizes */ /* Number of DM Sizes */
#define DMSIZESCOUNT 48 #define DMSIZESCOUNT 48
/* Number of 144x144 for special interlace */ /* Number of 144x144 for special interlace */
#define INTSYMBOL144 47 #define DMINTSYMBOL144 47
/* Is the current code a DMRE code ? /* Total data codewords (Table 7) in ascending order */
This is the case, if dm_intsymbol index >= 30 */ static const unsigned short dm_matrixbytes[DMSIZESCOUNT] = {
/* 0*/ 3 /*10x10*/, 5 /*12x12*/, 5 /*8x18*/, 8 /*14x14*/,
/* 4*/ 10 /*8x32*/, 12 /*16x16*/, 16 /*12x26*/, 18 /*18x18*/,
/* 8*/ 18 /*8x48*/, 22 /*20x20*/, 22 /*12x36*/, 24 /*8x64*/,
/*12*/ 30 /*22x22*/, 32 /*16x36*/, 32 /*8x80*/, 36 /*24x24*/,
/*16*/ 38 /*8x96*/, 43 /*12x64*/, 44 /*26x26*/, 44 /*20x36*/,
/*20*/ 49 /*16x48*/, 49 /*8x120*/, 56 /*20x44*/, 62 /*32x32*/,
/*24*/ 62 /*16x64*/, 63 /*8x144*/, 64 /*12x88*/, 70 /*26x40*/,
/*28*/ 72 /*22x48*/, 80 /*24x48*/, 84 /*20x64*/, 86 /*36x36*/,
/*32*/ 90 /*26x48*/, 108 /*24x64*/, 114 /*40x40*/, 118 /*26x64*/,
/*36*/ 144 /*44x44*/, 174 /*48x48*/, 204 /*52x52*/, 280 /*64x64*/,
/*40*/ 368 /*72x72*/, 456 /*80x80*/, 576 /*88x88*/, 696 /*96x96*/,
/*44*/ 816 /*104x104*/, 1050 /*120x120*/, 1304 /*132x132*/, 1558 /*144x144*/
};
static const char dm_isDMRE[] = { /* Index into `dm_matrixbytes` array in `symbol->option_2` (CLI `--vers`) order,
/* 0*/ 0, /* 10x10, 3*/ 0, /* 12x12 , 5*/ 0, /* 8x18 , 5*/ 0, /* 14x14 , 8*/ i.e. square symbols first, then standard rectangular, then DMRE.
/* 4*/ 0, /* 8x32 , 10*/ 0, /* 16x16 , 12*/ 0, /* 12x26 , 16*/ 0, /* 18x18 , 18*/ The bracketed comment value is the total data codewords value. */
/* 8*/ 1, /* 8x48 , 18*/ 0, /* 20x20 , 22*/ 0, /* 12x36 , 22*/ 1, /* 8x64 , 24*/ static const unsigned char dm_intsymbol[DMSIZESCOUNT] = {
/*12*/ 0, /* 22x22 , 30*/ 0, /* 16x36 , 32*/ 1, /* 8x80 , 32*/ 0, /* 24x24 , 36*/ /* Standard DM square */
/*16*/ 1, /* 8x96 , 38*/ 1, /* 12x64 , 43*/ 0, /* 26x26 , 44*/ 1, /* 20x36 , 44*/ /* 1-4*/ 0 /*10x10 (3)*/, 1 /*12x12 (5)*/, 3 /*14x14 (8)*/, 5 /*16x16 (12)*/,
/*20*/ 0, /* 16x48 , 49*/ 1, /* 8x120, 49*/ 1, /* 20x44 , 56*/ 0, /* 32x32 , 62*/ /* 5-8*/ 7 /*18x18 (18)*/, 9 /*20x20 (22)*/, 12 /*22x22 (30)*/, 15 /*24x24 (36)*/,
/*24*/ 1, /* 16x64 , 62*/ 1, /* 8x144, 63*/ 1, /* 12x88 , 64*/ 1, /* 26x40 , 70*/ /* 9-12*/ 18 /*26x26 (44)*/, 23 /*32x32 (62)*/, 31 /*36x36 (86)*/, 34 /*40x40 (114)*/,
/*28*/ 1, /* 22x48 , 72*/ 1, /* 24x48 , 80*/ 1, /* 20x64 , 84*/ 0, /* 36x36 , 86*/ /*13-16*/ 36 /*44x44 (144)*/, 37 /*48x48 (174)*/, 38 /*52x52 (204)*/, 39 /*64x64 (280)*/,
/*32*/ 1, /* 26x48 , 90*/ 1, /* 24x64 ,108*/ 0, /* 40x40 ,114*/ 1, /* 26x64 ,118*/ /*17-20*/ 40 /*72x72 (368)*/, 41 /*80x80 (456)*/, 42 /*88x88 (576)*/, 43 /*96x96 (696)*/,
/*36*/ 0, /* 44x44 ,144*/ 0, /* 48x48 ,174*/ 0, /* 52x52 ,204*/ 0, /* 64x64 ,280*/ /*21-24*/ 44 /*104x104 (816)*/, 45 /*120x120 (1050)*/, 46 /*132x132 (1304)*/, 47 /*144x144 (1558)*/,
/*40*/ 0, /* 72x72 ,368*/ 0, /* 80x80 ,456*/ 0, /* 88x88 ,576*/ 0, /* 96x96 ,696*/
/*44*/ 0, /*104x104,816*/ 0, /*120x120,1050*/0, /*132x132,1304*/0 /*144x144,1558*/ /* Standard DM rectangular */
/*25-28*/ 2 /*8x18 (5)*/, 4 /*8x32 (10)*/, 6 /*12x26 (16)*/, 10 /*12x36 (22)*/,
/*29-30*/ 13 /*16x36 (32)*/, 20 /*16x48 (49)*/,
/* DMRE */
/*31-34*/ 8 /*8x48 (18)*/, 11 /*8x64 (24)*/, 14 /*8x80 (32)*/, 16 /*8x96 (38)*/,
/*35-38*/ 21 /*8x120 (49)*/, 25 /*8x144 (63)*/, 17 /*12x64 (43)*/, 26 /*12x88 (64)*/,
/*39-42*/ 24 /*16x64 (62)*/, 19 /*20x36 (44)*/, 22 /*20x44 (56)*/, 30 /*20x64 (84)*/,
/*43-46*/ 28 /*22x48 (72)*/, 29 /*24x48 (80)*/, 33 /*24x64 (108)*/, 27 /*26x40 (70)*/,
/*47-48*/ 32 /*26x48 (90)*/, 35 /*26x64 (118)*/
};
/* Following arrays in total data codewords order (`dm_matrixbytes`) */
/* Whether the version is DMRE */
static const char dm_isDMRE[DMSIZESCOUNT] = {
/* 0*/ 0 /*10x10 (3)*/, 0 /*12x12 (5)*/, 0 /*8x18 (5)*/, 0 /*14x14 (8)*/,
/* 4*/ 0 /*8x32 (10)*/, 0 /*16x16 (12)*/, 0 /*12x26 (16)*/, 0 /*18x18 (18)*/,
/* 8*/ 1 /*8x48 (18)*/, 0 /*20x20 (22)*/, 0 /*12x36 (22)*/, 1 /*8x64 (24)*/,
/*12*/ 0 /*22x22 (30)*/, 0 /*16x36 (32)*/, 1 /*8x80 (32)*/, 0 /*24x24 (36)*/,
/*16*/ 1 /*8x96 (38)*/, 1 /*12x64 (43)*/, 0 /*26x26 (44)*/, 1 /*20x36 (44)*/,
/*20*/ 0 /*16x48 (49)*/, 1 /*8x120 (49)*/, 1 /*20x44 (56)*/, 0 /*32x32 (62)*/,
/*24*/ 1 /*16x64 (62)*/, 1 /*8x144 (63)*/, 1 /*12x88 (64)*/, 1 /*26x40 (70)*/,
/*28*/ 1 /*22x48 (72)*/, 1 /*24x48 (80)*/, 1 /*20x64 (84)*/, 0 /*36x36 (86)*/,
/*32*/ 1 /*26x48 (90)*/, 1 /*24x64 (108)*/, 0 /*40x40 (114)*/, 1 /*26x64 (118)*/,
/*36*/ 0 /*44x44 (144)*/, 0 /*48x48 (174)*/, 0 /*52x52 (204)*/, 0 /*64x64 (280)*/,
/*40*/ 0 /*72x72 (368)*/, 0 /*80x80 (456)*/, 0 /*88x88 (576)*/, 0 /*96x96 (696)*/,
/*44*/ 0 /*104x104 (816)*/, 0 /*120x120 (1050)*/, 0 /*132x132 (1304)*/, 0 /*144x144 (1558)*/
}; };
/* Horizontal matrix size */ /* Horizontal matrix size */
static const unsigned char dm_matrixH[DMSIZESCOUNT] = {
static const unsigned short dm_matrixH[] = { /* 0*/ 10 /*10x10*/, 12 /*12x12 */, 8 /*8x18*/, 14 /*14x14*/,
/* 0*/ 10, /* 10x10 , 3*/ 12, /* 12x12 , 5 */ 8, /* 8x18 , 5*/ 14, /* 14x14 , 8*/ /* 4*/ 8 /*8x32*/, 16 /*16x16*/, 12 /*12x26*/, 18 /*18x18*/,
/* 4*/ 8, /* 8x32 , 10*/ 16, /* 16x16 , 12*/ 12, /* 12x26 , 16*/ 18, /* 18x18 , 18*/ /* 8*/ 8 /*8x48*/, 20 /*20x20*/, 12 /*12x36*/, 8 /*8x64*/,
/* 8*/ 8, /* 8x48 , 18*/ 20, /* 20x20 , 22*/ 12, /* 12x36 , 22*/ 8, /* 8x64 , 24*/ /*12*/ 22 /*22x22*/, 16 /*16x36*/, 8 /*8x80*/, 24 /*24x24*/,
/*12*/ 22, /* 22x22 , 30*/ 16, /* 16x36 , 32*/ 8, /* 8x80 , 32*/ 24, /* 24x24 , 36*/ /*16*/ 8 /*8x96*/, 12 /*12x64*/, 26 /*26x26*/, 20 /*20x36*/,
/*16*/ 8, /* 8x96 , 38*/ 12, /* 12x64 , 43*/ 26, /* 26x26 , 44*/ 20, /* 20x36 , 44*/ /*20*/ 16 /*16x48*/, 8 /*8x120*/, 20 /*20x44*/, 32 /*32x32*/,
/*20*/ 16, /* 16x48 , 49*/ 8, /* 8x120, 49*/ 20, /* 20x44 , 56*/ 32, /* 32x32 , 62*/ /*24*/ 16 /*16x64*/, 8 /*8x144*/, 12 /*12x88*/, 26 /*26x40*/,
/*24*/ 16, /* 16x64 , 62*/ 8, /* 8x144, 63*/ 12, /* 12x88 , 64*/ 26, /* 26x40 , 70*/ /*28*/ 22 /*22x48*/, 24 /*24x48*/, 20 /*20x64*/, 36 /*36x36*/,
/*28*/ 22, /* 22x48 , 72*/ 24, /* 24x48 , 80*/ 20, /* 20x64 , 84*/ 36, /* 36x36 , 86*/ /*32*/ 26 /*26x48*/, 24 /*24x64*/, 40 /*40x40*/, 26 /*26x64*/,
/*32*/ 26, /* 26x48 , 90*/ 24, /* 24x64 ,108*/ 40, /* 40x40 ,114*/ 26, /* 26x64 ,118*/ /*36*/ 44 /*44x44*/, 48 /*48x48*/, 52 /*52x52*/, 64 /*64x64*/,
/*36*/ 44, /* 44x44 ,144*/ 48, /* 48x48 ,174*/ 52, /* 52x52 ,204*/ 64, /* 64x64 ,280*/ /*40*/ 72 /*72x72*/, 80 /*80x80*/, 88 /*88x88*/, 96 /*96x96*/,
/*40*/ 72, /* 72x72 ,368*/ 80, /* 80x80 ,456*/ 88, /* 88x88 ,576*/ 96, /* 96x96 ,696*/ /*44*/ 104 /*104x104*/, 120 /*120x120*/, 132 /*132x132*/, 144 /*144x144*/
/*44*/104, /*104x104,816*/ 120,/*120x120,1050*/132,/*132x132,1304*/144 /*144x144,1558*/
}; };
/* Vertical matrix sizes */ /* Vertical matrix sizes */
static const unsigned char dm_matrixW[DMSIZESCOUNT] = {
static const unsigned short dm_matrixW[] = { /* 0*/ 10 /*10x10*/, 12 /*12x12*/, 18 /*8x18*/, 14 /*14x14*/,
/* 0*/ 10, /* 10x10 */ 12, /* 12x12 */ 18, /* 8x18 */ 14, /* 14x14 */ /* 4*/ 32 /*8x32*/, 16 /*16x16*/, 26 /*12x26*/, 18 /*18x18*/,
/* 4*/ 32, /* 8x32 */ 16, /* 16x16 */ 26, /* 12x26 */ 18, /* 18x18 */ /* 8*/ 48 /*8x48*/, 20 /*20x20*/, 36 /*12x36*/, 64 /*8x64*/,
/* 8*/ 48, /* 8x48 */ 20, /* 20x20 */ 36, /* 12x36 */ 64, /* 8x64 */ /*12*/ 22 /*22x22*/, 36 /*16x36*/, 80 /*8x80*/, 24 /*24x24*/,
/*12*/ 22, /* 22x22 */ 36, /* 16x36 */ 80, /* 8x80 */ 24, /* 24x24 */ /*16*/ 96 /*8x96*/, 64 /*12x64*/, 26 /*26x26*/, 36 /*20x36*/,
/*16*/ 96, /* 8x96 */ 64, /* 12x64 */ 26, /* 26x26 */ 36, /* 20x36 */ /*20*/ 48 /*16x48*/, 120 /*8x120*/, 44 /*20x44*/, 32 /*32x32*/,
/*20*/ 48, /* 16x48 */120, /* 8x120*/ 44, /* 20x44 */ 32, /* 32x32 */ /*24*/ 64 /*16x64*/, 144 /*8x144*/, 88 /*12x88*/, 40 /*26x40*/,
/*24*/ 64, /* 16x64 */144, /* 8x144*/ 88, /* 12x88 */ 40, /* 26x40 */ /*28*/ 48 /*22x48*/, 48 /*24x48*/, 64 /*20x64*/, 36 /*36x36*/,
/*28*/ 48, /* 22x48 */ 48, /* 24x48 */ 64, /* 20x64 */ 36, /* 36x36 */ /*32*/ 48 /*26x48*/, 64 /*24x64*/, 40 /*40x40*/, 64 /*26x64*/,
/*32*/ 48, /* 26x48 */ 64, /* 24x64 */ 40, /* 40x40 */ 64, /* 26x64 */ /*36*/ 44 /*44x44*/, 48 /*48x48*/, 52 /*52x52*/, 64 /*64x64*/,
/*36*/ 44, /* 44x44 */ 48, /* 48x48 */ 52, /* 52x52 */ 64, /* 64x64 */ /*40*/ 72 /*72x72*/, 80 /*80x80*/, 88 /*88x88*/, 96 /*96x96*/,
/*40*/ 72, /* 72x72 */ 80, /* 80x80 */ 88, /* 88x88 */ 96, /* 96x96 */ /*44*/ 104 /*104x104*/, 120 /*120x120*/, 132 /*132x132*/, 144 /*144x144*/
/*44*/104, /*104x104*/120, /*120x120*/ 132, /*132x132*/144 /*144x144*/
}; };
/* Horizontal submodule size (including subfinder) */ /* Horizontal submodule size (including subfinder) - see Table 7 Data region H + 2 */
static const unsigned char dm_matrixFH[DMSIZESCOUNT] = {
static const unsigned short dm_matrixFH[] = { /* 0*/ 10 /*10x10*/, 12 /*12x12*/, 8 /*8x18*/, 14 /*14x14*/,
/* 0*/ 10, /* 10x10 */ 12, /* 12x12 */ 8, /* 8x18 */ 14, /* 14x14 */ /* 4*/ 8 /*8x32*/, 16 /*16x16*/, 12 /*12x26*/, 18 /*18x18*/,
/* 4*/ 8, /* 8x32 */ 16, /* 16x16 */ 12, /* 12x26 */ 18, /* 18x18 */ /* 8*/ 8 /*8x48*/, 20 /*20x20*/, 12 /*12x36*/, 8 /*8x64*/,
/* 8*/ 8, /* 8x48 */ 20, /* 20x20 */ 12, /* 12x36 */ 8, /* 8x64 */ /*12*/ 22 /*22x22*/, 16 /*16x36*/, 8 /*8x80*/, 24 /*24x24*/,
/*12*/ 22, /* 22x22 */ 16, /* 16x36 */ 8, /* 8x80 */ 24, /* 24x24 */ /*16*/ 8 /*8x96*/, 12 /*12x64*/, 26 /*26x26*/, 20 /*20x36*/,
/*16*/ 8, /* 8x96 */ 12, /* 12x64 */ 26, /* 26x26 */ 20, /* 20x36 */ /*20*/ 16 /*16x48*/, 8 /*8x120*/, 20 /*20x44*/, 16 /*32x32*/,
/*20*/ 16, /* 16x48 */ 8, /* 8x120*/ 20, /* 20x44 */ 16, /* 32x32 */ /*24*/ 16 /*16x64*/, 8 /*8x144*/, 12 /*12x88*/, 26 /*26x40*/,
/*24*/ 16, /* 16x64 */ 8, /* 8x144*/ 12, /* 12x88 */ 26, /* 26x40 */ /*28*/ 22 /*22x48*/, 24 /*24x48*/, 20 /*20x64*/, 18 /*36x36*/,
/*28*/ 22, /* 22x48 */ 24, /* 24x48 */ 20, /* 20x64 */ 18, /* 36x36 */ /*32*/ 26 /*26x48*/, 24 /*24x64*/, 20 /*40x40*/, 26 /*26x64*/,
/*32*/ 26, /* 26x48 */ 24, /* 24x64 */ 20, /* 40x40 */ 26, /* 26x64 */ /*36*/ 22 /*44x44*/, 24 /*48x48*/, 26 /*52x52*/, 16 /*64x64*/,
/*36*/ 22, /* 44x44 */ 24, /* 48x48 */ 26, /* 52x52 */ 16, /* 64x64 */ /*40*/ 18 /*72x72*/, 20 /*80x80*/, 22 /*88x88*/, 24 /*96x96*/,
/*40*/ 18, /* 72x72 */ 20, /* 80x80 */ 22, /* 88x88 */ 24, /* 96x96 */ /*44*/ 26 /*104x104*/, 20 /*120x120*/, 22 /*132x132*/, 24 /*144x144*/
/*44*/ 26, /*104x104*/ 20, /*120x120*/ 22, /*132x132*/ 24 /*144x144*/
}; };
/* Vertical submodule size (including subfinder) */ /* Vertical submodule size (including subfinder) - see Table 7 Data region W + 2 */
static const unsigned char dm_matrixFW[DMSIZESCOUNT] = {
static const unsigned short dm_matrixFW[] = { /* 0*/ 10 /*10x10*/, 12 /*12x12*/, 18 /*8x18*/, 14 /*14x14*/,
/* 0*/ 10, /* 10x10 */ 12, /* 12x12 */ 18, /* 8x18 */ 14, /* 14x14 */ /* 4*/ 16 /*8x32*/, 16 /*16x16*/, 26 /*12x26*/, 18 /*18x18*/,
/* 4*/ 16, /* 8x32 */ 16, /* 16x16 */ 26, /* 12x26 */ 18, /* 18x18 */ /* 8*/ 24 /*8x48*/, 20 /*20x20*/, 18 /*12x36*/, 16 /*8x64*/,
/* 8*/ 24, /* 8x48 */ 20, /* 20x20 */ 18, /* 12x36 */ 16, /* 8x64 */ /*12*/ 22 /*22x22*/, 18 /*16x36*/, 20 /*8x80*/, 24 /*24x24*/,
/*12*/ 22, /* 22x22 */ 18, /* 16x36 */ 20, /* 8x80 */ 24, /* 24x24 */ /*16*/ 24 /*8x96*/, 16 /*12x64*/, 26 /*26x26*/, 18 /*20x36*/,
/*16*/ 24, /* 8x96 */ 16, /* 12x64 */ 26, /* 26x26 */ 18, /* 20x36 */ /*20*/ 24 /*16x48*/, 20 /*8x120*/, 22 /*20x44*/, 16 /*32x32*/,
/*20*/ 24, /* 16x48 */ 20, /* 8x120*/ 22, /* 20x44 */ 16, /* 32x32 */ /*24*/ 16 /*16x64*/, 24 /*8x144*/, 22 /*12x88*/, 20 /*26x40*/,
/*24*/ 16, /* 16x64 */ 24, /* 8x144*/ 22, /* 12x88 */ 20, /* 26x40 */ /*28*/ 24 /*22x48*/, 24 /*24x48*/, 16 /*20x64*/, 18 /*36x36*/,
/*28*/ 24, /* 22x48 */ 24, /* 24x48 */ 16, /* 20x64 */ 18, /* 36x36 */ /*32*/ 24 /*26x48*/, 16 /*24x64*/, 20 /*40x40*/, 16 /*26x64*/,
/*32*/ 24, /* 26x48 */ 16, /* 24x64 */ 20, /* 40x40 */ 16, /* 26x64 */ /*36*/ 22 /*44x44*/, 24 /*48x48*/, 26 /*52x52*/, 16 /*64x64*/,
/*36*/ 22, /* 44x44 */ 24, /* 48x48 */ 26, /* 52x52 */ 16, /* 64x64 */ /*40*/ 18 /*72x72*/, 20 /*80x80*/, 22 /*88x88*/, 24 /*96x96*/,
/*40*/ 18, /* 72x72 */ 20, /* 80x80 */ 22, /* 88x88 */ 24, /* 96x96 */ /*44*/ 26 /*104x104*/, 20 /*120x120*/, 22 /*132x132*/, 24 /*144x144*/
/*44*/ 26, /*104x104*/ 20, /*120x120*/ 22, /*132x132*/ 24 /*144x144*/
};
/* Total Data Codewords */
static const unsigned short dm_matrixbytes[] = {
/* 0*/ 3, /* 10x10 */ 5, /* 12x12 */ 5, /* 8x18 */ 8, /* 14x14 */
/* 4*/ 10, /* 8x32 */ 12, /* 16x16 */ 16, /* 12x26 */ 18, /* 18x18 */
/* 8*/ 18, /* 8x48 */ 22, /* 20x20 */ 22, /* 12x36 */ 24, /* 8x64 */
/*12*/ 30, /* 22x22 */ 32, /* 16x36 */ 32, /* 8x80 */ 36, /* 24x24 */
/*16*/ 38, /* 8x96 */ 43, /* 12x64 */ 44, /* 26x26 */ 44, /* 20x36 */
/*20*/ 49, /* 16x48 */ 49, /* 8x120*/ 56, /* 20x44 */ 62, /* 32x32 */
/*24*/ 62, /* 16x64 */ 63, /* 8x144*/ 64, /* 12x88 */ 70, /* 26x40 */
/*28*/ 72, /* 22x48 */ 80, /* 24x48 */ 84, /* 20x64 */ 86, /* 36x36 */
/*32*/ 90, /* 26x48 */ 108, /* 24x64 */ 114, /* 40x40 */ 118, /* 26x64 */
/*36*/ 144, /* 44x44 */ 174, /* 48x48 */ 204, /* 52x52 */ 280, /* 64x64 */
/*40*/ 368, /* 72x72 */ 456, /* 80x80 */ 576, /* 88x88 */ 696, /* 96x96 */
/*44*/ 816, /*104x104*/1050, /*120x120*/1304, /*132x132*/1558 /*144x144*/
}; };
/* Data Codewords per RS-Block */ /* Data Codewords per RS-Block */
static const unsigned char dm_matrixdatablock[DMSIZESCOUNT] = {
static const unsigned short dm_matrixdatablock[] = { /* 0*/ 3 /*10x10*/, 5 /*12x12*/, 5 /*8x18*/, 8 /*14x14*/,
/* 0*/ 3, /* 10x10 */ 5, /* 12x12 */ 5, /* 8x18 */ 8, /* 14x14 */ /* 4*/ 10 /*8x32*/, 12 /*16x16*/, 16 /*12x26*/, 18 /*18x18*/,
/* 4*/ 10, /* 8x32 */ 12, /* 16x16 */ 16, /* 12x26 */ 18, /* 18x18 */ /* 8*/ 18 /*8x48*/, 22 /*20x20*/, 22 /*12x36*/, 24 /*8x64*/,
/* 8*/ 18, /* 8x48 */ 22, /* 20x20 */ 22, /* 12x36 */ 24, /* 8x64 */ /*12*/ 30 /*22x22*/, 32 /*16x36*/, 32 /*8x80*/, 36 /*24x24*/,
/*12*/ 30, /* 22x22 */ 32, /* 16x36 */ 32, /* 8x80 */ 36, /* 24x24 */ /*16*/ 38 /*8x96*/, 43 /*12x64*/, 44 /*26x26*/, 44 /*20x36*/,
/*16*/ 38, /* 8x96 */ 43, /* 12x64 */ 44, /* 26x26 */ 44, /* 20x36 */ /*20*/ 49 /*16x48*/, 49 /*8x120*/, 56 /*20x44*/, 62 /*32x32*/,
/*20*/ 49, /* 16x48 */ 49, /* 8x120*/ 56, /* 20x44 */ 62, /* 32x32 */ /*24*/ 62 /*16x64*/, 63 /*8x144*/, 64 /*12x88*/, 70 /*26x40*/,
/*24*/ 62, /* 16x64 */ 63, /* 8x144*/ 64, /* 12x88 */ 70, /* 26x40 */ /*28*/ 72 /*22x48*/, 80 /*24x48*/, 84 /*20x64*/, 86 /*36x36*/,
/*28*/ 72, /* 22x48 */ 80, /* 24x48 */ 84, /* 20x64 */ 86, /* 36x36 */ /*32*/ 90 /*26x48*/, 108 /*24x64*/, 114 /*40x40*/, 118 /*26x64*/,
/*32*/ 90, /* 26x48 */ 108, /* 24x64 */ 114, /* 40x40 */ 118, /* 26x64 */ /*36*/ 144 /*44x44*/, 174 /*48x48*/, 102 /*52x52*/, 140 /*64x64*/,
/*36*/ 144, /* 44x44 */ 174, /* 48x48 */ 102, /* 52x52 */ 140, /* 64x64 */ /*40*/ 92 /*72x72*/, 114 /*80x80*/, 144 /*88x88*/, 174 /*96x96*/,
/*40*/ 92, /* 72x72 */ 114, /* 80x80 */ 144, /* 88x88 */ 174, /* 96x96 */ /*44*/ 136 /*104x104*/, 175 /*120x120*/, 163 /*132x132*/, 156 /*144x144*/
/*44*/ 136, /*104x104*/ 175, /*120x120*/ 163, /*132x132*/ 156 /* 144x144*/
}; };
/* ECC Codewords per RS-Block */ /* ECC Codewords per RS-Block */
static const unsigned char dm_matrixrsblock[DMSIZESCOUNT] = {
static const unsigned short dm_matrixrsblock[] = { /* 0*/ 5 /*10x10*/, 7 /*12x12*/, 7 /*8x18*/, 10 /*14x14*/,
/* 0*/ 5, /* 10x10 */ 7, /* 12x12 */ 7, /* 8x18 */ 10, /* 14x14 */ /* 4*/ 11 /*8x32*/, 12 /*16x16*/, 14 /*12x26*/, 14 /*18x18*/,
/* 4*/ 11, /* 8x32 */ 12, /* 16x16 */ 14, /* 12x26 */ 14, /* 18x18 */ /* 8*/ 15 /*8x48*/, 18 /*20x20*/, 18 /*12x36*/, 18 /*8x64*/,
/* 8*/ 15, /* 8x48 */ 18, /* 20x20 */ 18, /* 12x36 */ 18, /* 8x64 */ /*12*/ 20 /*22x22*/, 24 /*16x36*/, 22 /*8x80*/, 24 /*24x24*/,
/*12*/ 20, /* 22x22 */ 24, /* 16x36 */ 22, /* 8x80 */ 24, /* 24x24 */ /*16*/ 28 /*8x96*/, 27 /*12x64*/, 28 /*26x26*/, 28 /*20x36*/,
/*16*/ 28, /* 8x96 */ 27, /* 12x64 */ 28, /* 26x26 */ 28, /* 20x36 */ /*20*/ 28 /*16x48*/, 32 /*8x120*/, 34 /*20x44*/, 36 /*32x32*/,
/*20*/ 28, /* 16x48 */ 32, /* 8x120*/ 34, /* 20x44 */ 36, /* 32x32 */ /*24*/ 36 /*16x64*/, 36 /*8x144*/, 36 /*12x88*/, 38 /*26x40*/,
/*24*/ 36, /* 16x64 */ 36, /* 8x144*/ 36, /* 12x88 */ 38, /* 26x40 */ /*28*/ 38 /*22x48*/, 41 /*24x48*/, 42 /*20x64*/, 42 /*36x36*/,
/*28*/ 38, /* 22x48 */ 41, /* 24x48 */ 42, /* 20x64 */ 42, /* 36x36 */ /*32*/ 42 /*26x48*/, 46 /*24x64*/, 48 /*40x40*/, 50 /*26x64*/,
/*32*/ 42, /* 26x48 */ 46, /* 24x64 */ 48, /* 40x40 */ 50, /* 26x64 */ /*36*/ 56 /*44x44*/, 68 /*48x48*/, 42 /*52x52*/, 56 /*64x64*/,
/*36*/ 56, /* 44x44 */ 68, /* 48x48 */ 42, /* 52x52 */ 56, /* 64x64 */ /*40*/ 36 /*72x72*/, 48 /*80x80*/, 56 /*88x88*/, 68 /*96x96*/,
/*40*/ 36, /* 72x72 */ 48, /* 80x80 */ 56, /* 88x88 */ 68, /* 96x96 */ /*44*/ 56 /*104x104*/, 68 /*120x120*/, 62 /*132x132*/, 62 /*144x144*/
/*44*/ 56, /*104x104*/ 68, /*120x120*/ 62, /*132x132*/ 62 /*144x144*/
}; };
/* vim: set ts=4 sw=4 et : */ /* vim: set ts=4 sw=4 et : */

View File

@ -368,7 +368,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) {
recordcount++; recordcount++;
if (symbol->symbology == BARCODE_ULTRA) { if (symbol->symbology == BARCODE_ULTRA) {
static const char ultra_chars[] = "0CBMRYGKW"; static const char ultra_chars[] = { '0', 'C', 'B', 'M', 'R', 'Y', 'G', 'K', 'W' };
for (i = 0; i < 9; i++) { for (i = 0; i < 9; i++) {
out_le_u32(emr_createbrushindirect_colour[i].type, 0x00000027); /* EMR_CREATEBRUSHINDIRECT */ out_le_u32(emr_createbrushindirect_colour[i].type, 0x00000027); /* EMR_CREATEBRUSHINDIRECT */
out_le_u32(emr_createbrushindirect_colour[i].size, 24); out_le_u32(emr_createbrushindirect_colour[i].size, 24);

View File

@ -420,7 +420,7 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf)
} }
/* Image Descriptor */ /* Image Descriptor */
/* Image separator character = ',' */ /* Image separator character = ',' */
outbuf[0] = 0x2c; outbuf[0] = ',';
/* "Image Left" */ /* "Image Left" */
outbuf[1] = 0x00; outbuf[1] = 0x00;
outbuf[2] = 0x00; outbuf[2] = 0x00;
@ -448,7 +448,7 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf)
strcpy(symbol->errtxt, "613: Insufficient memory for LZW buffer"); strcpy(symbol->errtxt, "613: Insufficient memory for LZW buffer");
return ZINT_ERROR_MEMORY; return ZINT_ERROR_MEMORY;
} }
fm_write((const char *) State.pOut, 1, State.OutPosCur, State.fmp); fm_write(State.pOut, 1, State.OutPosCur, State.fmp);
free(State.pOut); free(State.pOut);
/* GIF terminator */ /* GIF terminator */

View File

@ -137,7 +137,7 @@ static void gm_define_mode(char *mode, const unsigned int ddata[], const int len
}; };
/* Cost of switching modes from k to j - see AIMD014 Rev. 1.63 Table 9 Type conversion codes */ /* Cost of switching modes from k to j - see AIMD014 Rev. 1.63 Table 9 Type conversion codes */
static const unsigned int switch_costs[GM_NUM_MODES][GM_NUM_MODES] = { static const unsigned char switch_costs[GM_NUM_MODES][GM_NUM_MODES] = {
/* H N L U M B */ /* H N L U M B */
/*H*/ { 0, (13 + 2) * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, (13 + 9) * GM_MULT }, /*H*/ { 0, (13 + 2) * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, (13 + 9) * GM_MULT },
/*N*/ { 10 * GM_MULT, 0, 10 * GM_MULT, 10 * GM_MULT, 10 * GM_MULT, (10 + 9) * GM_MULT }, /*N*/ { 10 * GM_MULT, 0, 10 * GM_MULT, 10 * GM_MULT, 10 * GM_MULT, (10 + 9) * GM_MULT },
@ -148,7 +148,7 @@ static void gm_define_mode(char *mode, const unsigned int ddata[], const int len
}; };
/* Final end-of-data cost - see AIMD014 Rev. 1.63 Table 9 Type conversion codes */ /* Final end-of-data cost - see AIMD014 Rev. 1.63 Table 9 Type conversion codes */
static const unsigned int eod_costs[GM_NUM_MODES] = { static const unsigned char eod_costs[GM_NUM_MODES] = {
/* H N L U M B */ /* H N L U M B */
13 * GM_MULT, 10 * GM_MULT, 5 * GM_MULT, 5 * GM_MULT, 10 * GM_MULT, 4 * GM_MULT 13 * GM_MULT, 10 * GM_MULT, 5 * GM_MULT, 5 * GM_MULT, 10 * GM_MULT, 4 * GM_MULT
}; };

View File

@ -364,7 +364,7 @@ static void hx_define_mode(char *mode, const unsigned int ddata[], const int len
}; };
/* Cost of switching modes from k to j */ /* Cost of switching modes from k to j */
static const unsigned int switch_costs[HX_NUM_MODES][HX_NUM_MODES] = { static const unsigned char switch_costs[HX_NUM_MODES][HX_NUM_MODES] = {
/* N T B 1 2 D F */ /* N T B 1 2 D F */
/*N*/ { 0, (10 + 4) * HX_MULT, (10 + 4 + 13) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, 10 * HX_MULT }, /*N*/ { 0, (10 + 4) * HX_MULT, (10 + 4 + 13) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, 10 * HX_MULT },
/*T*/ { (6 + 4) * HX_MULT, 0, (6 + 4 + 13) * HX_MULT, (6 + 4) * HX_MULT, (6 + 4) * HX_MULT, (6 + 4) * HX_MULT, 6 * HX_MULT }, /*T*/ { (6 + 4) * HX_MULT, 0, (6 + 4 + 13) * HX_MULT, (6 + 4) * HX_MULT, (6 + 4) * HX_MULT, (6 + 4) * HX_MULT, 6 * HX_MULT },
@ -376,7 +376,7 @@ static void hx_define_mode(char *mode, const unsigned int ddata[], const int len
}; };
/* Final end-of-data costs */ /* Final end-of-data costs */
static const unsigned int eod_costs[HX_NUM_MODES] = { static const unsigned char eod_costs[HX_NUM_MODES] = {
/* N T B 1 2 D F */ /* N T B 1 2 D F */
10 * HX_MULT, 6 * HX_MULT, 0, 12 * HX_MULT, 12 * HX_MULT, 15 * HX_MULT, 0 10 * HX_MULT, 6 * HX_MULT, 0, 12 * HX_MULT, 12 * HX_MULT, 15 * HX_MULT, 0
}; };

View File

@ -40,8 +40,8 @@
/* The following lookup tables were generated using the code in Appendix C */ /* The following lookup tables were generated using the code in Appendix C */
static const unsigned short AppxD_I[1287] = {
/* Appendix D Table 1 - 5 of 13 characters */ /* Appendix D Table 1 - 5 of 13 characters */
static const unsigned short AppxD_I[1287] = {
0x001F, 0x1F00, 0x002F, 0x1E80, 0x0037, 0x1D80, 0x003B, 0x1B80, 0x003D, 0x1780, 0x001F, 0x1F00, 0x002F, 0x1E80, 0x0037, 0x1D80, 0x003B, 0x1B80, 0x003D, 0x1780,
0x003E, 0x0F80, 0x004F, 0x1E40, 0x0057, 0x1D40, 0x005B, 0x1B40, 0x005D, 0x1740, 0x003E, 0x0F80, 0x004F, 0x1E40, 0x0057, 0x1D40, 0x005B, 0x1B40, 0x005D, 0x1740,
0x005E, 0x0F40, 0x0067, 0x1CC0, 0x006B, 0x1AC0, 0x006D, 0x16C0, 0x006E, 0x0EC0, 0x005E, 0x0F40, 0x0067, 0x1CC0, 0x006B, 0x1AC0, 0x006D, 0x16C0, 0x006E, 0x0EC0,
@ -173,8 +173,8 @@ static const unsigned short AppxD_I[1287] = {
0x08E2, 0x064C, 0x0554, 0x04E4, 0x0358, 0x02E8, 0x01F0 0x08E2, 0x064C, 0x0554, 0x04E4, 0x0358, 0x02E8, 0x01F0
}; };
static const unsigned short AppxD_II[78] = {
/* Appendix D Table II - 2 of 13 characters */ /* Appendix D Table II - 2 of 13 characters */
static const unsigned short AppxD_II[78] = {
0x0003, 0x1800, 0x0005, 0x1400, 0x0006, 0x0C00, 0x0009, 0x1200, 0x000A, 0x0A00, 0x0003, 0x1800, 0x0005, 0x1400, 0x0006, 0x0C00, 0x0009, 0x1200, 0x000A, 0x0A00,
0x000C, 0x0600, 0x0011, 0x1100, 0x0012, 0x0900, 0x0014, 0x0500, 0x0018, 0x0300, 0x000C, 0x0600, 0x0011, 0x1100, 0x0012, 0x0900, 0x0014, 0x0500, 0x0018, 0x0300,
0x0021, 0x1080, 0x0022, 0x0880, 0x0024, 0x0480, 0x0028, 0x0280, 0x0030, 0x0180, 0x0021, 0x1080, 0x0022, 0x0880, 0x0024, 0x0480, 0x0028, 0x0280, 0x0030, 0x0180,
@ -185,14 +185,15 @@ static const unsigned short AppxD_II[78] = {
0x0801, 0x1002, 0x1001, 0x0802, 0x0404, 0x0208, 0x0110, 0x00A0 0x0801, 0x1002, 0x1001, 0x0802, 0x0404, 0x0208, 0x0110, 0x00A0
}; };
static const unsigned short AppxD_IV[130] = {
/* Appendix D Table IV - Bar-to-Character Mapping (reverse lookup) */ /* Appendix D Table IV - Bar-to-Character Mapping (reverse lookup) */
67, 6, 78, 16, 86, 95, 34, 40, 45, 113, 117, 121, 62, 87, 18, 104, 41, 76, 57, 119, 115, 72, 97, static const unsigned char AppxD_IV[130] = {
2, 127, 26, 105, 35, 122, 52, 114, 7, 24, 82, 68, 63, 94, 44, 77, 112, 70, 100, 39, 30, 107, 67, 6, 78, 16, 86, 95, 34, 40, 45, 113, 117, 121, 62, 87, 18, 104, 41, 76, 57, 119,
15, 125, 85, 10, 65, 54, 88, 20, 106, 46, 66, 8, 116, 29, 61, 99, 80, 90, 37, 123, 51, 25, 84, 115, 72, 97, 2, 127, 26, 105, 35, 122, 52, 114, 7, 24, 82, 68, 63, 94, 44, 77, 112,
129, 56, 4, 109, 96, 28, 36, 47, 11, 71, 33, 102, 21, 9, 17, 49, 124, 79, 64, 91, 42, 69, 53, 70, 100, 39, 30, 107, 15, 125, 85, 10, 65, 54, 88, 20, 106, 46, 66, 8, 116, 29, 61,
60, 14, 1, 27, 103, 126, 75, 89, 50, 120, 19, 32, 110, 92, 111, 130, 59, 31, 12, 81, 43, 55, 99, 80, 90, 37, 123, 51, 25, 84, 129, 56, 4, 109, 96, 28, 36, 47, 11, 71, 33, 102,
5, 74, 22, 101, 128, 58, 118, 48, 108, 38, 98, 93, 23, 83, 13, 73, 3 21, 9, 17, 49, 124, 79, 64, 91, 42, 69, 53, 60, 14, 1, 27, 103, 126, 75, 89, 50,
120, 19, 32, 110, 92, 111, 130, 59, 31, 12, 81, 43, 55, 5, 74, 22, 101, 128, 58, 118,
48, 108, 38, 98, 93, 23, 83, 13, 73, 3
}; };
/*************************************************************************** /***************************************************************************

View File

@ -711,7 +711,8 @@ INTERNAL void strip_bom_test(unsigned char *source, int *input_length) {
#endif #endif
/* Helper to convert base octal, decimal, hexadecimal escape sequence */ /* Helper to convert base octal, decimal, hexadecimal escape sequence */
static int esc_base(struct zint_symbol *symbol, unsigned char *input_string, int length, int in_posn, int base) { static int esc_base(struct zint_symbol *symbol, const unsigned char *input_string, const int length,
const int in_posn, const unsigned char base) {
int c1, c2, c3; int c1, c2, c3;
int min_len = base == 'x' ? 2 : 3; int min_len = base == 'x' ? 2 : 3;
@ -743,14 +744,14 @@ static int esc_base(struct zint_symbol *symbol, unsigned char *input_string, int
} }
/* Helper to parse escape sequences. If `escaped_string` NULL, calculates length only */ /* Helper to parse escape sequences. If `escaped_string` NULL, calculates length only */
static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_string, int *p_length, static int escape_char_process(struct zint_symbol *symbol, const unsigned char *input_string, int *p_length,
unsigned char *escaped_string) { unsigned char *escaped_string) {
/* NUL EOT BEL BS HT LF VT FF CR ESC GS RS \ */ /* NUL EOT BEL BS HT LF VT FF CR ESC GS RS \ */
static const char escs[] = { '0', 'E', 'a', 'b', 't', 'n', 'v', 'f', 'r', 'e', 'G', 'R', '\\', '\0' }; static const char escs[] = { '0', 'E', 'a', 'b', 't', 'n', 'v', 'f', 'r', 'e', 'G', 'R', '\\', '\0' };
static const char vals[] = { 0x00, 0x04, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1B, 0x1D, 0x1E, 0x5C }; static const char vals[] = { 0x00, 0x04, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1B, 0x1D, 0x1E, 0x5C };
const int length = *p_length; const int length = *p_length;
int in_posn = 0, out_posn = 0; int in_posn = 0, out_posn = 0;
int ch; unsigned char ch;
int val; int val;
int i; int i;
unsigned long unicode; unsigned long unicode;
@ -886,7 +887,7 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
} }
#ifdef ZINT_TEST /* Wrapper for direct testing (also used by `testUtilZXingCPPCmp()` in "tests/testcommon.c") */ #ifdef ZINT_TEST /* Wrapper for direct testing (also used by `testUtilZXingCPPCmp()` in "tests/testcommon.c") */
INTERNAL int escape_char_process_test(struct zint_symbol *symbol, unsigned char *input_string, int *p_length, INTERNAL int escape_char_process_test(struct zint_symbol *symbol, const unsigned char *input_string, int *p_length,
unsigned char *escaped_string) { unsigned char *escaped_string) {
return escape_char_process(symbol, input_string, p_length, escaped_string); return escape_char_process(symbol, input_string, p_length, escaped_string);
} }
@ -1235,7 +1236,7 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[
if (error_number) { if (error_number) {
static const char in_2d_comp[] = " in 2D component"; static const char in_2d_comp[] = " in 2D component";
if (is_composite(symbol->symbology) if (is_composite(symbol->symbology)
&& strlen(symbol->errtxt) + strlen(in_2d_comp) < sizeof(symbol->errtxt)) { && strlen(symbol->errtxt) + sizeof(in_2d_comp) <= sizeof(symbol->errtxt)) {
strcat(symbol->errtxt, in_2d_comp); strcat(symbol->errtxt, in_2d_comp);
} }
error_number = error_tag(symbol, error_number, NULL); error_number = error_tag(symbol, error_number, NULL);

View File

@ -72,11 +72,11 @@ static const unsigned char mailmark_data_symbol_even[30] = {
0x33, 0x35, 0x36, 0x39, 0x3A, 0x3C 0x33, 0x35, 0x36, 0x39, 0x3A, 0x3C
}; };
static const unsigned short mailmark_extender_group_c[22] = { static const unsigned char mailmark_extender_group_c[22] = {
3, 5, 7, 11, 13, 14, 16, 17, 19, 0, 1, 2, 4, 6, 8, 9, 10, 12, 15, 18, 20, 21 3, 5, 7, 11, 13, 14, 16, 17, 19, 0, 1, 2, 4, 6, 8, 9, 10, 12, 15, 18, 20, 21
}; };
static const unsigned short mailmark_extender_group_l[26] = { static const unsigned char mailmark_extender_group_l[26] = {
2, 5, 7, 8, 13, 14, 15, 16, 21, 22, 23, 0, 1, 3, 4, 6, 9, 10, 11, 12, 17, 18, 19, 20, 24, 25 2, 5, 7, 8, 13, 14, 15, 16, 21, 22, 23, 0, 1, 3, 4, 6, 9, 10, 11, 12, 17, 18, 19, 20, 24, 25
}; };

View File

@ -507,7 +507,7 @@ static void pdf_textprocess_minimal(short *chainemc, int *p_mclength, const unsi
} }
for (i = *p_i; i < indexliste && PDF_REAL_MODE(liste[1][i]) == PDF_TEX; i++) { for (i = *p_i; i < indexliste && PDF_REAL_MODE(liste[1][i]) == PDF_TEX; i++) {
static const int newtables[5] = { 0, T_ALPHA, T_LOWER, T_MIXED, T_PUNCT }; static const unsigned char newtables[5] = { 0, T_ALPHA, T_LOWER, T_MIXED, T_PUNCT };
const int newtable = newtables[liste[1][i]]; const int newtable = newtables[liste[1][i]];
const int from = liste[2][i]; const int from = liste[2][i];
for (j = 0; j < liste[0][i]; j++) { for (j = 0; j < liste[0][i]; j++) {
@ -1202,7 +1202,7 @@ static int pdf_enc(struct zint_symbol *symbol, struct zint_seg segs[], const int
int structapp_cp = 0; int structapp_cp = 0;
int error_number; int error_number;
const int debug_print = symbol->debug & ZINT_DEBUG_PRINT; const int debug_print = symbol->debug & ZINT_DEBUG_PRINT;
static const int ecc_num_cws[] = { 2, 4, 8, 16, 32, 64, 128, 256, 512 }; static const short ecc_num_cws[] = { 2, 4, 8, 16, 32, 64, 128, 256, 512 };
if (segs_length(segs, seg_count) > PDF_MAX_LEN) { if (segs_length(segs, seg_count) > PDF_MAX_LEN) {
strcpy(symbol->errtxt, "463: Input string too long"); strcpy(symbol->errtxt, "463: Input string too long");

View File

@ -1,7 +1,7 @@
/* plessey.c - Handles Plessey and MSI Plessey */ /* plessey.c - Handles Plessey and MSI Plessey */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -123,7 +123,7 @@ INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], int len
/* Modulo 10 check digit - Luhn algorithm /* Modulo 10 check digit - Luhn algorithm
See https://en.wikipedia.org/wiki/Luhn_algorithm */ See https://en.wikipedia.org/wiki/Luhn_algorithm */
static char msi_check_digit_mod10(const unsigned char source[], const int length) { static char msi_check_digit_mod10(const unsigned char source[], const int length) {
static const int vals[2][10] = { static const char vals[2][10] = {
{ 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 }, /* Doubled and digits summed */ { 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 }, /* Doubled and digits summed */
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, /* Single */ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, /* Single */
}; };

View File

@ -339,7 +339,7 @@ static void qr_define_mode(char mode[], const unsigned int ddata[], const int le
/* Returns mode indicator based on version and mode */ /* Returns mode indicator based on version and mode */
static int qr_mode_indicator(const int version, const int mode) { static int qr_mode_indicator(const int version, const int mode) {
static const int mode_indicators[6][QR_NUM_MODES] = { static const char mode_indicators[6][QR_NUM_MODES] = {
/*N A B K */ /*N A B K */
{ 1, 2, 4, 8, }, /* QRCODE */ { 1, 2, 4, 8, }, /* QRCODE */
{ 1, 2, 3, 4, }, /* RMQR */ { 1, 2, 3, 4, }, /* RMQR */
@ -373,7 +373,7 @@ static int qr_mode_bits(const int version) {
/* Return character count indicator bits based on version and mode */ /* Return character count indicator bits based on version and mode */
static int qr_cci_bits(const int version, const int mode) { static int qr_cci_bits(const int version, const int mode) {
static const int cci_bits[7][QR_NUM_MODES] = { static const char cci_bits[7][QR_NUM_MODES] = {
/* N A B K */ /* N A B K */
{ 10, 9, 8, 8, }, /* QRCODE */ { 10, 9, 8, 8, }, /* QRCODE */
{ 12, 11, 16, 10, }, { 12, 11, 16, 10, },
@ -383,7 +383,7 @@ static int qr_cci_bits(const int version, const int mode) {
{ 5, 4, 4, 3, }, { 5, 4, 4, 3, },
{ 6, 5, 5, 4, } { 6, 5, 5, 4, }
}; };
static const unsigned short *rmqr_ccis[QR_NUM_MODES] = { static const unsigned char *rmqr_ccis[QR_NUM_MODES] = {
rmqr_numeric_cci, rmqr_alphanum_cci, rmqr_byte_cci, rmqr_kanji_cci, rmqr_numeric_cci, rmqr_alphanum_cci, rmqr_byte_cci, rmqr_kanji_cci,
}; };
int mode_index = posn(qr_mode_types, (const char) mode); int mode_index = posn(qr_mode_types, (const char) mode);

View File

@ -1,7 +1,7 @@
/* qr.h Data for QR Code, Micro QR Code and rMQR */ /* qr.h Data for QR Code, Micro QR Code and rMQR */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2022 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2024 Robin Stuart <rstuart114@gmail.com>
Copyright (C) 2006 Kentaro Fukuchi <fukuchi@megaui.net> Copyright (C) 2006 Kentaro Fukuchi <fukuchi@megaui.net>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
@ -34,46 +34,53 @@
#ifndef Z_QR_H #ifndef Z_QR_H
#define Z_QR_H #define Z_QR_H
/* From ISO/IEC 18004:2015 Table 5 Encoding/decoding table for Alphanumeric mode */ /* From ISO/IEC 18004:2015 Table 5 - Encoding/decoding table for Alphanumeric mode */
static const char qr_alphanumeric[59] = { static const signed char qr_alphanumeric[59] = {
36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, /* SP-/ */ 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, /* SP-/ */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, /* 0-? */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, /* 0-? */
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /* @-O */ -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /* @-O */
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 /* P-Z */ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 /* P-Z */
}; };
/* From ISO/IEC 18004:2015 Table 7 */ /* From ISO/IEC 18004:2015 Table 7 - Number of symbol characters and input data capacity for QR Code */
static const unsigned short qr_data_codewords_L[] = { static const unsigned short qr_data_codewords_L[40] = {
19, 34, 55, 80, 108, 136, 156, 194, 232, 274, 324, 370, 428, 461, 523, 589, 647, 19, 34, 55, 80, 108, 136, 156, 194, 232, 274,
721, 795, 861, 932, 1006, 1094, 1174, 1276, 1370, 1468, 1531, 1631, 324, 370, 428, 461, 523, 589, 647, 721, 795, 861,
1735, 1843, 1955, 2071, 2191, 2306, 2434, 2566, 2702, 2812, 2956 932, 1006, 1094, 1174, 1276, 1370, 1468, 1531, 1631, 1735,
1843, 1955, 2071, 2191, 2306, 2434, 2566, 2702, 2812, 2956
}; };
static const unsigned short qr_data_codewords_M[] = { static const unsigned short qr_data_codewords_M[40] = {
16, 28, 44, 64, 86, 108, 124, 154, 182, 216, 254, 290, 334, 365, 415, 453, 507, 16, 28, 44, 64, 86, 108, 124, 154, 182, 216,
563, 627, 669, 714, 782, 860, 914, 1000, 1062, 1128, 1193, 1267, 254, 290, 334, 365, 415, 453, 507, 563, 627, 669,
1373, 1455, 1541, 1631, 1725, 1812, 1914, 1992, 2102, 2216, 2334 714, 782, 860, 914, 1000, 1062, 1128, 1193, 1267, 1373,
1455, 1541, 1631, 1725, 1812, 1914, 1992, 2102, 2216, 2334
}; };
static const unsigned short qr_data_codewords_Q[] = { static const unsigned short qr_data_codewords_Q[40] = {
13, 22, 34, 48, 62, 76, 88, 110, 132, 154, 180, 206, 244, 261, 295, 325, 367, 13, 22, 34, 48, 62, 76, 88, 110, 132, 154,
397, 445, 485, 512, 568, 614, 664, 718, 754, 808, 871, 911, 180, 206, 244, 261, 295, 325, 367, 397, 445, 485,
985, 1033, 1115, 1171, 1231, 1286, 1354, 1426, 1502, 1582, 1666 512, 568, 614, 664, 718, 754, 808, 871, 911, 985,
1033, 1115, 1171, 1231, 1286, 1354, 1426, 1502, 1582, 1666
}; };
static const unsigned short qr_data_codewords_H[] = { static const unsigned short qr_data_codewords_H[40] = {
9, 16, 26, 36, 46, 60, 66, 86, 100, 122, 140, 158, 180, 197, 223, 253, 283, 9, 16, 26, 36, 46, 60, 66, 86, 100, 122,
313, 341, 385, 406, 442, 464, 514, 538, 596, 628, 661, 701, 140, 158, 180, 197, 223, 253, 283, 313, 341, 385,
745, 793, 845, 901, 961, 986, 1054, 1096, 1142, 1222, 1276 406, 442, 464, 514, 538, 596, 628, 661, 701, 745,
793, 845, 901, 961, 986, 1054, 1096, 1142, 1222, 1276
}; };
static const unsigned short qr_total_codewords[] = { /* From ISO/IEC 18004:2015 Table 1 - Codeword capacity of all versions of QRCode */
26, 44, 70, 100, 134, 172, 196, 242, 292, 346, 404, 466, 532, 581, 655, 733, 815, static const unsigned short qr_total_codewords[40] = {
901, 991, 1085, 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,
2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706
}; };
static const unsigned short rmqr_height[] = { /* From ISO/IEC 23941:2022 Table 1 - Codeword capacity of all versions of rMQR symbols */
static const unsigned char rmqr_height[32] = {
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
@ -82,7 +89,7 @@ static const unsigned short rmqr_height[] = {
17, 17, 17, 17, 17 17, 17, 17, 17, 17
}; };
static const unsigned short rmqr_width[] = { static const unsigned char rmqr_width[32] = {
43, 59, 77, 99, 139, 43, 59, 77, 99, 139,
43, 59, 77, 99, 139, 43, 59, 77, 99, 139,
27, 43, 59, 77, 99, 139, 27, 43, 59, 77, 99, 139,
@ -91,7 +98,8 @@ static const unsigned short rmqr_width[] = {
43, 59, 77, 99, 139 43, 59, 77, 99, 139
}; };
static const unsigned short rmqr_data_codewords_M[] = { /* From ISO/IEC 23941:2022 Table 6 - Number of data codewords and input data capacity for rMQR */
static const unsigned char rmqr_data_codewords_M[32] = {
6, 12, 20, 28, 44, /* R7x */ 6, 12, 20, 28, 44, /* R7x */
12, 21, 31, 42, 63, /* R9x */ 12, 21, 31, 42, 63, /* R9x */
7, 19, 31, 43, 57, 84, /* R11x */ 7, 19, 31, 43, 57, 84, /* R11x */
@ -100,7 +108,7 @@ static const unsigned short rmqr_data_codewords_M[] = {
39, 56, 78, 100, 152 /* R17x */ 39, 56, 78, 100, 152 /* R17x */
}; };
static const unsigned short rmqr_data_codewords_H[] = { static const unsigned char rmqr_data_codewords_H[32] = {
3, 7, 10, 14, 24, /* R7x */ 3, 7, 10, 14, 24, /* R7x */
7, 11, 17, 22, 33, /* R9x */ 7, 11, 17, 22, 33, /* R9x */
5, 11, 15, 23, 29, 42, /* R11x */ 5, 11, 15, 23, 29, 42, /* R11x */
@ -109,11 +117,13 @@ static const unsigned short rmqr_data_codewords_H[] = {
21, 28, 38, 56, 76 /* R17x */ 21, 28, 38, 56, 76 /* R17x */
}; };
static const short rmqr_fixed_height_upper_bound[] = { /* Highest index in `rmqr_total_codewords` for each given row (R7x, R9x etc) */
static const signed char rmqr_fixed_height_upper_bound[7] = {
-1, 4, 9, 15, 21, 26, 31 -1, 4, 9, 15, 21, 26, 31
}; };
static const unsigned short rmqr_total_codewords[] = { /* From ISO/IEC 23941:2022 Table 1 - Codeword capacity of all versions of rMQR symbols */
static const unsigned char rmqr_total_codewords[32] = {
13, 21, 32, 44, 68, /* R7x */ 13, 21, 32, 44, 68, /* R7x */
21, 33, 49, 66, 99, /* R9x */ 21, 33, 49, 66, 99, /* R9x */
15, 31, 47, 67, 89, 132, /* R11x */ 15, 31, 47, 67, 89, 132, /* R11x */
@ -122,8 +132,8 @@ static const unsigned short rmqr_total_codewords[] = {
61, 88, 122, 160, 232 /* R17x */ 61, 88, 122, 160, 232 /* R17x */
}; };
/* From ISO/IEC 23941:2022 Table 3 - Number of bits of character count indicator */
static const unsigned short rmqr_numeric_cci[] = { static const unsigned char rmqr_numeric_cci[32] = {
4, 5, 6, 7, 7, 4, 5, 6, 7, 7,
5, 6, 7, 7, 8, 5, 6, 7, 7, 8,
4, 6, 7, 7, 8, 8, 4, 6, 7, 7, 8, 8,
@ -132,7 +142,7 @@ static const unsigned short rmqr_numeric_cci[] = {
7, 8, 8, 8, 9 7, 8, 8, 8, 9
}; };
static const unsigned short rmqr_alphanum_cci[] = { static const unsigned char rmqr_alphanum_cci[32] = {
3, 5, 5, 6, 6, 3, 5, 5, 6, 6,
5, 5, 6, 6, 7, 5, 5, 6, 6, 7,
4, 5, 6, 6, 7, 7, 4, 5, 6, 6, 7, 7,
@ -141,7 +151,7 @@ static const unsigned short rmqr_alphanum_cci[] = {
6, 7, 7, 8, 8 6, 7, 7, 8, 8
}; };
static const unsigned short rmqr_byte_cci[] = { static const unsigned char rmqr_byte_cci[32] = {
3, 4, 5, 5, 6, 3, 4, 5, 5, 6,
4, 5, 5, 6, 6, 4, 5, 5, 6, 6,
3, 5, 5, 6, 6, 7, 3, 5, 5, 6, 6, 7,
@ -150,7 +160,7 @@ static const unsigned short rmqr_byte_cci[] = {
6, 6, 7, 7, 8 6, 6, 7, 7, 8
}; };
static const unsigned short rmqr_kanji_cci[] = { static const unsigned char rmqr_kanji_cci[32] = {
2, 3, 4, 5, 5, 2, 3, 4, 5, 5,
3, 4, 5, 5, 6, 3, 4, 5, 5, 6,
2, 4, 5, 5, 6, 6, 2, 4, 5, 5, 6, 6,
@ -159,27 +169,37 @@ static const unsigned short rmqr_kanji_cci[] = {
5, 6, 6, 6, 7 5, 6, 6, 6, 7
}; };
static const char qr_blocks_L[] = { /* From ISO/IEC 18004:2015 Table 9 - Error correction characteristics for QR Code */
1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, static const char qr_blocks_L[40] = {
12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25 1, 1, 1, 1, 1, 2, 2, 2, 2, 4,
4, 4, 4, 4, 6, 6, 6, 6, 7, 8,
8, 9, 9, 10, 12, 12, 12, 13, 14, 15,
16, 17, 18, 19, 19, 20, 21, 22, 24, 25
}; };
static const char qr_blocks_M[] = { static const char qr_blocks_M[40] = {
1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5,
21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49 5, 8, 9, 9, 10, 10, 11, 13, 14, 16,
17, 17, 18, 20, 21, 23, 25, 26, 28, 29,
31, 33, 35, 37, 38, 40, 43, 45, 47, 49
}; };
static const char qr_blocks_Q[] = { static const char qr_blocks_Q[40] = {
1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8,
27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68 8, 10, 12, 16, 12, 17, 16, 18, 21, 20,
23, 23, 25, 27, 29, 34, 34, 35, 38, 40,
43, 45, 48, 51, 53, 56, 59, 62, 65, 68
}; };
static const char qr_blocks_H[] = { static const char qr_blocks_H[40] = {
1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8,
32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81 11, 11, 16, 16, 18, 16, 19, 21, 25, 25,
25, 34, 30, 32, 35, 37, 40, 42, 45, 48,
51, 54, 57, 60, 63, 66, 70, 74, 77, 81
}; };
static const char rmqr_blocks_M[] = { /* From ISO/IEC 23941:2022 Table 8 - Error correction characteristics for rMQR */
static const char rmqr_blocks_M[32] = {
1, 1, 1, 1, 1, /* R7x */ 1, 1, 1, 1, 1, /* R7x */
1, 1, 1, 1, 2, /* R9x */ 1, 1, 1, 1, 2, /* R9x */
1, 1, 1, 1, 2, 2, /* R11x */ 1, 1, 1, 1, 2, 2, /* R11x */
@ -188,7 +208,7 @@ static const char rmqr_blocks_M[] = {
1, 2, 2, 3, 4 /* R17x */ 1, 2, 2, 3, 4 /* R17x */
}; };
static const char rmqr_blocks_H[] = { static const char rmqr_blocks_H[32] = {
1, 1, 1, 1, 2, /* R7x */ 1, 1, 1, 1, 2, /* R7x */
1, 1, 2, 2, 3, /* R9x */ 1, 1, 2, 2, 3, /* R9x */
1, 1, 2, 2, 2, 3, /* R11x */ 1, 1, 2, 2, 2, 3, /* R11x */
@ -197,21 +217,28 @@ static const char rmqr_blocks_H[] = {
2, 2, 3, 4, 6 /* R17x */ 2, 2, 3, 4, 6 /* R17x */
}; };
static const unsigned short qr_sizes[] = { /* From ISO/IEC 18004:2015 Table 1 - Codeword capacity of all versions of QRCode */
21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, static const unsigned char qr_sizes[40] = {
101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177 21, 25, 29, 33, 37, 41, 45, 49, 53, 57,
61, 65, 69, 73, 77, 81, 85, 89, 93, 97,
101, 105, 109, 113, 117, 121, 125, 129, 133, 137,
141, 145, 149, 153, 157, 161, 165, 169, 173, 177
}; };
static const char micro_qr_sizes[] = { static const char micro_qr_sizes[4] = {
11, 13, 15, 17 11, 13, 15, 17
}; };
static const char qr_align_loopsize[] = { /* No. of entries in `qr_table_e1` (Table E.1) per version */
0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 static const char qr_align_loopsize[40] = {
0, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 6, 6, 6,
6, 6, 6, 6, 7, 7, 7, 7, 7, 7
}; };
/* Table E1 - Row/column coordinates of center module of alignment patterns */ /* Table E.1 - Row/column coordinates of center module of alignment patterns */
static const unsigned short qr_table_e1[] = { static const unsigned char qr_table_e1[40 * 7] = {
6, 18, 0, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 0,
6, 22, 0, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0,
6, 26, 0, 0, 0, 0, 0, 6, 26, 0, 0, 0, 0, 0,
@ -253,8 +280,8 @@ static const unsigned short qr_table_e1[] = {
6, 30, 58, 86, 114, 142, 170 6, 30, 58, 86, 114, 142, 170
}; };
/* Table D1 - Column coordinates of centre module of alignment patterns */ /* Table D.1 - Column coordinates of centre module of alignment patterns */
static const unsigned short rmqr_table_d1[] = { static const unsigned char rmqr_table_d1[20] = {
21, 0, 0, 0, 21, 0, 0, 0,
19, 39, 0, 0, 19, 39, 0, 0,
25, 51, 0, 0, 25, 51, 0, 0,
@ -262,30 +289,32 @@ static const unsigned short rmqr_table_d1[] = {
27, 55, 83, 111 27, 55, 83, 111
}; };
static const unsigned int qr_annex_c[] = {
/* Format information bit sequences */ /* Format information bit sequences */
0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, 0x77c4, 0x72f3, 0x7daa, 0x789d, static const unsigned short qr_annex_c[32] = {
0x662f, 0x6318, 0x6c41, 0x6976, 0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b, 0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, 0x77c4, 0x72f3,
0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976, 0x1689, 0x13be, 0x1ce7, 0x19d0,
0x0762, 0x0255, 0x0d0c, 0x083b, 0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183,
0x2eda, 0x2bed
}; };
static const unsigned int qr_annex_d[] = {
/* Version information bit sequences */ /* Version information bit sequences */
static const unsigned int qr_annex_d[34] = {
0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, 0x0f928, 0x10b78, 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, 0x0f928, 0x10b78,
0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, 0x177ec, 0x18ec4, 0x191e1, 0x1afab,
0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b,
0x2542e, 0x26a64, 0x27541, 0x28c69 0x2542e, 0x26a64, 0x27541, 0x28c69
}; };
static const unsigned int qr_annex_c1[] = {
/* Micro QR Code format information */ /* Micro QR Code format information */
0x4445, 0x4172, 0x4e2b, 0x4b1c, 0x55ae, 0x5099, 0x5fc0, 0x5af7, 0x6793, 0x62a4, 0x6dfd, 0x68ca, 0x7678, 0x734f, static const unsigned short qr_annex_c1[32] = {
0x7c16, 0x7921, 0x06de, 0x03e9, 0x0cb0, 0x0987, 0x1735, 0x1202, 0x1d5b, 0x186c, 0x2508, 0x203f, 0x2f66, 0x2a51, 0x34e3, 0x4445, 0x4172, 0x4e2b, 0x4b1c, 0x55ae, 0x5099, 0x5fc0, 0x5af7, 0x6793, 0x62a4,
0x31d4, 0x3e8d, 0x3bba 0x6dfd, 0x68ca, 0x7678, 0x734f, 0x7c16, 0x7921, 0x06de, 0x03e9, 0x0cb0, 0x0987,
0x1735, 0x1202, 0x1d5b, 0x186c, 0x2508, 0x203f, 0x2f66, 0x2a51, 0x34e3, 0x31d4,
0x3e8d, 0x3bba
}; };
static const unsigned int rmqr_format_info_left[] = {
/* rMQR format information for finder pattern side */ /* rMQR format information for finder pattern side */
static const unsigned int rmqr_format_info_left[64] = {
0x1FAB2, 0x1E597, 0x1DBDD, 0x1C4F8, 0x1B86C, 0x1A749, 0x19903, 0x18626, 0x17F0E, 0x1602B, 0x1FAB2, 0x1E597, 0x1DBDD, 0x1C4F8, 0x1B86C, 0x1A749, 0x19903, 0x18626, 0x17F0E, 0x1602B,
0x15E61, 0x14144, 0x13DD0, 0x122F5, 0x11CBF, 0x1039A, 0x0F1CA, 0x0EEEF, 0x0D0A5, 0x0CF80, 0x15E61, 0x14144, 0x13DD0, 0x122F5, 0x11CBF, 0x1039A, 0x0F1CA, 0x0EEEF, 0x0D0A5, 0x0CF80,
0x0B314, 0x0AC31, 0x0927B, 0x08D5E, 0x07476, 0x06B53, 0x05519, 0x04A3C, 0x036A8, 0x0298D, 0x0B314, 0x0AC31, 0x0927B, 0x08D5E, 0x07476, 0x06B53, 0x05519, 0x04A3C, 0x036A8, 0x0298D,
@ -295,8 +324,8 @@ static const unsigned int rmqr_format_info_left[] = {
0x23F7D, 0x22058, 0x21E12, 0x20137 0x23F7D, 0x22058, 0x21E12, 0x20137
}; };
static const unsigned int rmqr_format_info_right[] = {
/* rMQR format information for subfinder pattern side */ /* rMQR format information for subfinder pattern side */
static const unsigned int rmqr_format_info_right[64] = {
0x20A7B, 0x2155E, 0x22B14, 0x23431, 0x248A5, 0x25780, 0x269CA, 0x276EF, 0x28FC7, 0x290E2, 0x20A7B, 0x2155E, 0x22B14, 0x23431, 0x248A5, 0x25780, 0x269CA, 0x276EF, 0x28FC7, 0x290E2,
0x2AEA8, 0x2B18D, 0x2CD19, 0x2D23C, 0x2EC76, 0x2F353, 0x30103, 0x31E26, 0x3206C, 0x33F49, 0x2AEA8, 0x2B18D, 0x2CD19, 0x2D23C, 0x2EC76, 0x2F353, 0x30103, 0x31E26, 0x3206C, 0x33F49,
0x343DD, 0x35CF8, 0x362B2, 0x37D97, 0x384BF, 0x39B9A, 0x3A5D0, 0x3BAF5, 0x3C661, 0x3D944, 0x343DD, 0x35CF8, 0x362B2, 0x37D97, 0x384BF, 0x39B9A, 0x3A5D0, 0x3BAF5, 0x3C661, 0x3D944,

View File

@ -1,7 +1,7 @@
/* rss.c - GS1 DataBar (formerly Reduced Space Symbology) */ /* rss.c - GS1 DataBar (formerly Reduced Space Symbology) */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2008-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2008-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -390,35 +390,35 @@ INTERNAL int dbar_omn_cc(struct zint_symbol *symbol, unsigned char source[], int
data_group[2] = 4; data_group[2] = 4;
} }
v_odd[0] = (data_character[0] - g_sum_table[data_group[0]]) / t_table[data_group[0]]; v_odd[0] = (data_character[0] - dbar_g_sum_table[data_group[0]]) / dbar_t_table[data_group[0]];
v_even[0] = (data_character[0] - g_sum_table[data_group[0]]) % t_table[data_group[0]]; v_even[0] = (data_character[0] - dbar_g_sum_table[data_group[0]]) % dbar_t_table[data_group[0]];
v_odd[1] = (data_character[1] - g_sum_table[data_group[1]]) % t_table[data_group[1]]; v_odd[1] = (data_character[1] - dbar_g_sum_table[data_group[1]]) % dbar_t_table[data_group[1]];
v_even[1] = (data_character[1] - g_sum_table[data_group[1]]) / t_table[data_group[1]]; v_even[1] = (data_character[1] - dbar_g_sum_table[data_group[1]]) / dbar_t_table[data_group[1]];
v_odd[3] = (data_character[3] - g_sum_table[data_group[3]]) % t_table[data_group[3]]; v_odd[3] = (data_character[3] - dbar_g_sum_table[data_group[3]]) % dbar_t_table[data_group[3]];
v_even[3] = (data_character[3] - g_sum_table[data_group[3]]) / t_table[data_group[3]]; v_even[3] = (data_character[3] - dbar_g_sum_table[data_group[3]]) / dbar_t_table[data_group[3]];
v_odd[2] = (data_character[2] - g_sum_table[data_group[2]]) / t_table[data_group[2]]; v_odd[2] = (data_character[2] - dbar_g_sum_table[data_group[2]]) / dbar_t_table[data_group[2]];
v_even[2] = (data_character[2] - g_sum_table[data_group[2]]) % t_table[data_group[2]]; v_even[2] = (data_character[2] - dbar_g_sum_table[data_group[2]]) % dbar_t_table[data_group[2]];
/* Use DataBar subset width algorithm */ /* Use DataBar subset width algorithm */
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if ((i == 0) || (i == 2)) { if ((i == 0) || (i == 2)) {
getRSSwidths(widths, v_odd[i], modules_odd[data_group[i]], 4, widest_odd[data_group[i]], 1); getRSSwidths(widths, v_odd[i], dbar_modules_odd[data_group[i]], 4, dbar_widest_odd[data_group[i]], 1);
data_widths[0][i] = widths[0]; data_widths[0][i] = widths[0];
data_widths[2][i] = widths[1]; data_widths[2][i] = widths[1];
data_widths[4][i] = widths[2]; data_widths[4][i] = widths[2];
data_widths[6][i] = widths[3]; data_widths[6][i] = widths[3];
getRSSwidths(widths, v_even[i], modules_even[data_group[i]], 4, widest_even[data_group[i]], 0); getRSSwidths(widths, v_even[i], dbar_modules_even[data_group[i]], 4, dbar_widest_even[data_group[i]], 0);
data_widths[1][i] = widths[0]; data_widths[1][i] = widths[0];
data_widths[3][i] = widths[1]; data_widths[3][i] = widths[1];
data_widths[5][i] = widths[2]; data_widths[5][i] = widths[2];
data_widths[7][i] = widths[3]; data_widths[7][i] = widths[3];
} else { } else {
getRSSwidths(widths, v_odd[i], modules_odd[data_group[i]], 4, widest_odd[data_group[i]], 0); getRSSwidths(widths, v_odd[i], dbar_modules_odd[data_group[i]], 4, dbar_widest_odd[data_group[i]], 0);
data_widths[0][i] = widths[0]; data_widths[0][i] = widths[0];
data_widths[2][i] = widths[1]; data_widths[2][i] = widths[1];
data_widths[4][i] = widths[2]; data_widths[4][i] = widths[2];
data_widths[6][i] = widths[3]; data_widths[6][i] = widths[3];
getRSSwidths(widths, v_even[i], modules_even[data_group[i]], 4, widest_even[data_group[i]], 1); getRSSwidths(widths, v_even[i], dbar_modules_even[data_group[i]], 4, dbar_widest_even[data_group[i]], 1);
data_widths[1][i] = widths[0]; data_widths[1][i] = widths[0];
data_widths[3][i] = widths[1]; data_widths[3][i] = widths[1];
data_widths[5][i] = widths[2]; data_widths[5][i] = widths[2];
@ -429,10 +429,10 @@ INTERNAL int dbar_omn_cc(struct zint_symbol *symbol, unsigned char source[], int
checksum = 0; checksum = 0;
/* Calculate the checksum */ /* Calculate the checksum */
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
checksum += checksum_weight[i] * data_widths[i][0]; checksum += dbar_checksum_weight[i] * data_widths[i][0];
checksum += checksum_weight[i + 8] * data_widths[i][1]; checksum += dbar_checksum_weight[i + 8] * data_widths[i][1];
checksum += checksum_weight[i + 16] * data_widths[i][2]; checksum += dbar_checksum_weight[i + 16] * data_widths[i][2];
checksum += checksum_weight[i + 24] * data_widths[i][3]; checksum += dbar_checksum_weight[i + 24] * data_widths[i][3];
} }
checksum %= 79; checksum %= 79;
@ -462,8 +462,8 @@ INTERNAL int dbar_omn_cc(struct zint_symbol *symbol, unsigned char source[], int
total_widths[i + 36] = data_widths[7 - i][2]; total_widths[i + 36] = data_widths[7 - i][2];
} }
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
total_widths[i + 10] = finder_pattern[i + (5 * c_left)]; total_widths[i + 10] = dbar_finder_pattern[i + (5 * c_left)];
total_widths[i + 31] = finder_pattern[(4 - i) + (5 * c_right)]; total_widths[i + 31] = dbar_finder_pattern[(4 - i) + (5 * c_right)];
} }
/* Put this data into the symbol */ /* Put this data into the symbol */
@ -720,24 +720,24 @@ INTERNAL int dbar_ltd_cc(struct zint_symbol *symbol, unsigned char source[], int
right_group = 0; right_group = 0;
} }
left_odd = (int) (left_character / t_even_ltd[left_group]); left_odd = (int) (left_character / dbar_ltd_t_even[left_group]);
left_even = (int) (left_character % t_even_ltd[left_group]); left_even = (int) (left_character % dbar_ltd_t_even[left_group]);
right_odd = (int) (right_character / t_even_ltd[right_group]); right_odd = (int) (right_character / dbar_ltd_t_even[right_group]);
right_even = (int) (right_character % t_even_ltd[right_group]); right_even = (int) (right_character % dbar_ltd_t_even[right_group]);
getRSSwidths(widths, left_odd, modules_odd_ltd[left_group], 7, widest_odd_ltd[left_group], 1); getRSSwidths(widths, left_odd, dbar_ltd_modules_odd[left_group], 7, dbar_ltd_widest_odd[left_group], 1);
for (i = 0; i <= 6; i++) { for (i = 0; i <= 6; i++) {
left_widths[i * 2] = widths[i]; left_widths[i * 2] = widths[i];
} }
getRSSwidths(widths, left_even, modules_even_ltd[left_group], 7, widest_even_ltd[left_group], 0); getRSSwidths(widths, left_even, dbar_ltd_modules_even[left_group], 7, dbar_ltd_widest_even[left_group], 0);
for (i = 0; i <= 6; i++) { for (i = 0; i <= 6; i++) {
left_widths[i * 2 + 1] = widths[i]; left_widths[i * 2 + 1] = widths[i];
} }
getRSSwidths(widths, right_odd, modules_odd_ltd[right_group], 7, widest_odd_ltd[right_group], 1); getRSSwidths(widths, right_odd, dbar_ltd_modules_odd[right_group], 7, dbar_ltd_widest_odd[right_group], 1);
for (i = 0; i <= 6; i++) { for (i = 0; i <= 6; i++) {
right_widths[i * 2] = widths[i]; right_widths[i * 2] = widths[i];
} }
getRSSwidths(widths, right_even, modules_even_ltd[right_group], 7, widest_even_ltd[right_group], 0); getRSSwidths(widths, right_even, dbar_ltd_modules_even[right_group], 7, dbar_ltd_widest_even[right_group], 0);
for (i = 0; i <= 6; i++) { for (i = 0; i <= 6; i++) {
right_widths[i * 2 + 1] = widths[i]; right_widths[i * 2 + 1] = widths[i];
} }
@ -748,13 +748,13 @@ INTERNAL int dbar_ltd_cc(struct zint_symbol *symbol, unsigned char source[], int
#if defined(_MSC_VER) && _MSC_VER == 1900 && defined(_WIN64) /* MSVC 2015 x64 */ #if defined(_MSC_VER) && _MSC_VER == 1900 && defined(_WIN64) /* MSVC 2015 x64 */
checksum %= 89; /* Hack to get around optimizer bug */ checksum %= 89; /* Hack to get around optimizer bug */
#endif #endif
checksum += checksum_weight_ltd[i] * left_widths[i]; checksum += dbar_ltd_checksum_weight[i] * left_widths[i];
checksum += checksum_weight_ltd[i + 14] * right_widths[i]; checksum += dbar_ltd_checksum_weight[i + 14] * right_widths[i];
} }
checksum %= 89; checksum %= 89;
for (i = 0; i < 14; i++) { for (i = 0; i < 14; i++) {
check_elements[i] = finder_pattern_ltd[i + (checksum * 14)]; check_elements[i] = dbar_ltd_finder_pattern[i + (checksum * 14)];
} }
total_widths[0] = 1; total_widths[0] = 1;
@ -1350,16 +1350,16 @@ INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int
} else { } else {
group = 5; group = 5;
} }
v_odd = (vs - g_sum_exp[group - 1]) / t_even_exp[group - 1]; v_odd = (vs - dbar_exp_g_sum[group - 1]) / dbar_exp_t_even[group - 1];
v_even = (vs - g_sum_exp[group - 1]) % t_even_exp[group - 1]; v_even = (vs - dbar_exp_g_sum[group - 1]) % dbar_exp_t_even[group - 1];
if (debug_print) printf("%s%d", i == 0 || (i & 1) ? " " : ",", vs); if (debug_print) printf("%s%d", i == 0 || (i & 1) ? " " : ",", vs);
getRSSwidths(widths, v_odd, modules_odd_exp[group - 1], 4, widest_odd_exp[group - 1], 0); getRSSwidths(widths, v_odd, dbar_exp_modules_odd[group - 1], 4, dbar_exp_widest_odd[group - 1], 0);
char_widths[i][0] = widths[0]; char_widths[i][0] = widths[0];
char_widths[i][2] = widths[1]; char_widths[i][2] = widths[1];
char_widths[i][4] = widths[2]; char_widths[i][4] = widths[2];
char_widths[i][6] = widths[3]; char_widths[i][6] = widths[3];
getRSSwidths(widths, v_even, modules_even_exp[group - 1], 4, widest_even_exp[group - 1], 1); getRSSwidths(widths, v_even, dbar_exp_modules_even[group - 1], 4, dbar_exp_widest_even[group - 1], 1);
char_widths[i][1] = widths[0]; char_widths[i][1] = widths[0];
char_widths[i][3] = widths[1]; char_widths[i][3] = widths[1];
char_widths[i][5] = widths[2]; char_widths[i][5] = widths[2];
@ -1372,9 +1372,9 @@ INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int
elements in the data characters. */ elements in the data characters. */
checksum = 0; checksum = 0;
for (i = 0; i < data_chars; i++) { for (i = 0; i < data_chars; i++) {
int row = weight_rows[(((data_chars - 2) / 2) * 21) + i]; int row = dbar_exp_weight_rows[(((data_chars - 2) / 2) * 21) + i];
for (j = 0; j < 8; j++) { for (j = 0; j < 8; j++) {
checksum += (char_widths[i][j] * checksum_weight_exp[(row * 8) + j]); checksum += (char_widths[i][j] * dbar_exp_checksum_weight[(row * 8) + j]);
} }
} }
@ -1397,15 +1397,15 @@ INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int
c_group = 5; c_group = 5;
} }
c_odd = (check_char - g_sum_exp[c_group - 1]) / t_even_exp[c_group - 1]; c_odd = (check_char - dbar_exp_g_sum[c_group - 1]) / dbar_exp_t_even[c_group - 1];
c_even = (check_char - g_sum_exp[c_group - 1]) % t_even_exp[c_group - 1]; c_even = (check_char - dbar_exp_g_sum[c_group - 1]) % dbar_exp_t_even[c_group - 1];
getRSSwidths(widths, c_odd, modules_odd_exp[c_group - 1], 4, widest_odd_exp[c_group - 1], 0); getRSSwidths(widths, c_odd, dbar_exp_modules_odd[c_group - 1], 4, dbar_exp_widest_odd[c_group - 1], 0);
check_widths[0] = widths[0]; check_widths[0] = widths[0];
check_widths[2] = widths[1]; check_widths[2] = widths[1];
check_widths[4] = widths[2]; check_widths[4] = widths[2];
check_widths[6] = widths[3]; check_widths[6] = widths[3];
getRSSwidths(widths, c_even, modules_even_exp[c_group - 1], 4, widest_even_exp[c_group - 1], 1); getRSSwidths(widths, c_even, dbar_exp_modules_even[c_group - 1], 4, dbar_exp_widest_even[c_group - 1], 1);
check_widths[1] = widths[0]; check_widths[1] = widths[0];
check_widths[3] = widths[1]; check_widths[3] = widths[1];
check_widths[5] = widths[2]; check_widths[5] = widths[2];
@ -1421,7 +1421,7 @@ INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int
for (i = 0; i < codeblocks; i++) { for (i = 0; i < codeblocks; i++) {
k = p + i; k = p + i;
for (j = 0; j < 5; j++) { for (j = 0; j < 5; j++) {
elements[(21 * i) + j + 10] = finder_pattern_exp[((finder_sequence[k] - 1) * 5) + j]; elements[(21 * i) + j + 10] = dbar_exp_finder_pattern[((dbar_exp_finder_sequence[k] - 1) * 5) + j];
} }
} }

View File

@ -1,7 +1,7 @@
/* rss.h - Data tables for Reduced Space Symbology */ /* rss.h - Data tables for Reduced Space Symbology */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2007-2022 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2007-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -34,31 +34,31 @@
#define Z_RSS_H #define Z_RSS_H
/* RSS-14 Tables */ /* RSS-14 Tables */
static const unsigned short g_sum_table[9] = { static const unsigned short dbar_g_sum_table[9] = {
0, 161, 961, 2015, 2715, 0, 336, 1036, 1516 0, 161, 961, 2015, 2715, 0, 336, 1036, 1516
}; };
static const char t_table[9] = { static const char dbar_t_table[9] = {
1, 10, 34, 70, 126, 4, 20, 48, 81 1, 10, 34, 70, 126, 4, 20, 48, 81
}; };
static const char modules_odd[9] = { static const char dbar_modules_odd[9] = {
12, 10, 8, 6, 4, 5, 7, 9, 11 12, 10, 8, 6, 4, 5, 7, 9, 11
}; };
static const char modules_even[9] = { static const char dbar_modules_even[9] = {
4, 6, 8, 10, 12, 10, 8, 6, 4 4, 6, 8, 10, 12, 10, 8, 6, 4
}; };
static const char widest_odd[9] = { static const char dbar_widest_odd[9] = {
8, 6, 4, 3, 1, 2, 4, 6, 8 8, 6, 4, 3, 1, 2, 4, 6, 8
}; };
static const char widest_even[9] = { static const char dbar_widest_even[9] = {
1, 3, 5, 6, 8, 7, 5, 3, 1 1, 3, 5, 6, 8, 7, 5, 3, 1
}; };
static const char finder_pattern[45] = { static const char dbar_finder_pattern[45] = {
3, 8, 2, 1, 1, 3, 8, 2, 1, 1,
3, 5, 5, 1, 1, 3, 5, 5, 1, 1,
3, 3, 7, 1, 1, 3, 3, 7, 1, 1,
@ -70,8 +70,8 @@ static const char finder_pattern[45] = {
1, 3, 9, 1, 1 1, 3, 9, 1, 1
}; };
static const char checksum_weight[32] = {
/* Table 5 */ /* Table 5 */
static const char dbar_checksum_weight[32] = {
1, 3, 9, 27, 2, 6, 18, 54, 1, 3, 9, 27, 2, 6, 18, 54,
4, 12, 36, 29, 8, 24, 72, 58, 4, 12, 36, 29, 8, 24, 72, 58,
16, 48, 65, 37, 32, 17, 51, 74, 16, 48, 65, 37, 32, 17, 51, 74,
@ -79,33 +79,33 @@ static const char checksum_weight[32] = {
}; };
/* RSS Limited Tables */ /* RSS Limited Tables */
static const unsigned short t_even_ltd[7] = { static const unsigned short dbar_ltd_t_even[7] = {
28, 728, 6454, 203, 2408, 1, 16632 28, 728, 6454, 203, 2408, 1, 16632
}; };
static const char modules_odd_ltd[7] = { static const char dbar_ltd_modules_odd[7] = {
17, 13, 9, 15, 11, 19, 7 17, 13, 9, 15, 11, 19, 7
}; };
static const char modules_even_ltd[7] = { static const char dbar_ltd_modules_even[7] = {
9, 13, 17, 11, 15, 7, 19 9, 13, 17, 11, 15, 7, 19
}; };
static const char widest_odd_ltd[7] = { static const char dbar_ltd_widest_odd[7] = {
6, 5, 3, 5, 4, 8, 1 6, 5, 3, 5, 4, 8, 1
}; };
static const char widest_even_ltd[7] = { static const char dbar_ltd_widest_even[7] = {
3, 4, 6, 4, 5, 1, 8 3, 4, 6, 4, 5, 1, 8
}; };
static const char checksum_weight_ltd[28] = {
/* Table 7 */ /* Table 7 */
static const char dbar_ltd_checksum_weight[28] = {
1, 3, 9, 27, 81, 65, 17, 51, 64, 14, 42, 37, 22, 66, 1, 3, 9, 27, 81, 65, 17, 51, 64, 14, 42, 37, 22, 66,
20, 60, 2, 6, 18, 54, 73, 41, 34, 13, 39, 28, 84, 74 20, 60, 2, 6, 18, 54, 73, 41, 34, 13, 39, 28, 84, 74
}; };
static const char finder_pattern_ltd[1246] = { static const char dbar_ltd_finder_pattern[1246] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1,
@ -198,32 +198,32 @@ static const char finder_pattern_ltd[1246] = {
}; };
/* RSS Expanded Tables */ /* RSS Expanded Tables */
static const unsigned short g_sum_exp[5] = { static const unsigned short dbar_exp_g_sum[5] = {
0, 348, 1388, 2948, 3988 0, 348, 1388, 2948, 3988
}; };
static const unsigned short t_even_exp[5] = { static const unsigned char dbar_exp_t_even[5] = {
4, 20, 52, 104, 204 4, 20, 52, 104, 204
}; };
static const char modules_odd_exp[5] = { static const char dbar_exp_modules_odd[5] = {
12, 10, 8, 6, 4 12, 10, 8, 6, 4
}; };
static const char modules_even_exp[5] = { static const char dbar_exp_modules_even[5] = {
5, 7, 9, 11, 13 5, 7, 9, 11, 13
}; };
static const char widest_odd_exp[5] = { static const char dbar_exp_widest_odd[5] = {
7, 5, 4, 3, 1 7, 5, 4, 3, 1
}; };
static const char widest_even_exp[5] = { static const char dbar_exp_widest_even[5] = {
2, 4, 5, 6, 8 2, 4, 5, 6, 8
}; };
static const unsigned short checksum_weight_exp[184] = {
/* Table 14 */ /* Table 14 */
static const unsigned char dbar_exp_checksum_weight[184] = {
1, 3, 9, 27, 81, 32, 96, 77, 1, 3, 9, 27, 81, 32, 96, 77,
20, 60, 180, 118, 143, 7, 21, 63, 20, 60, 180, 118, 143, 7, 21, 63,
189, 145, 13, 39, 117, 140, 209, 205, 189, 145, 13, 39, 117, 140, 209, 205,
@ -249,8 +249,8 @@ static const unsigned short checksum_weight_exp[184] = {
45, 135, 194, 160, 58, 174, 100, 89 45, 135, 194, 160, 58, 174, 100, 89
}; };
static const char finder_pattern_exp[60] = {
/* Table 15 */ /* Table 15 */
static const char dbar_exp_finder_pattern[60] = {
1, 8, 4, 1, 1, 1, 8, 4, 1, 1,
1, 1, 4, 8, 1, 1, 1, 4, 8, 1,
3, 6, 4, 1, 1, 3, 6, 4, 1, 1,
@ -265,8 +265,8 @@ static const char finder_pattern_exp[60] = {
1, 1, 9, 2, 2 1, 1, 9, 2, 2
}; };
static const char finder_sequence[198] = {
/* Table 16 */ /* Table 16 */
static const char dbar_exp_finder_sequence[198] = {
1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0,
1, 6, 3, 8, 0, 0, 0, 0, 0, 0, 0, 1, 6, 3, 8, 0, 0, 0, 0, 0, 0, 0,
@ -279,7 +279,7 @@ static const char finder_sequence[198] = {
1, 2, 3, 4, 5, 8, 7, 10, 9, 12, 11 1, 2, 3, 4, 5, 8, 7, 10, 9, 12, 11
}; };
static const char weight_rows[210] = { static const char dbar_exp_weight_rows[210] = {
0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 5, 6, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 9, 10, 3, 4, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 3, 4, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

View File

@ -349,7 +349,7 @@ static void test_input(const testCtx *const p_ctx) {
/* 57*/ { UNICODE_MODE, "aééééébcdeééé", -1, 0, 244, 1, "(22) 104 65 100 100 73 73 73 73 73 100 66 100 67 100 68 100 69 73 73 73 83 106", "StartB a Latch é (5) Shift b Shift c Shift d Shift e é (3)" }, /* 57*/ { UNICODE_MODE, "aééééébcdeééé", -1, 0, 244, 1, "(22) 104 65 100 100 73 73 73 73 73 100 66 100 67 100 68 100 69 73 73 73 83 106", "StartB a Latch é (5) Shift b Shift c Shift d Shift e é (3)" },
/* 58*/ { UNICODE_MODE, "aééééébcdefééé", -1, 0, 255, 1, "(23) 104 65 100 100 73 73 73 73 73 100 100 66 67 68 69 70 100 100 73 73 73 67 106", "StartB a Latch é (5) Unlatch b c d e f Latch é (3)" }, /* 58*/ { UNICODE_MODE, "aééééébcdefééé", -1, 0, 255, 1, "(23) 104 65 100 100 73 73 73 73 73 100 100 66 67 68 69 70 100 100 73 73 73 67 106", "StartB a Latch é (5) Unlatch b c d e f Latch é (3)" },
/* 59*/ { DATA_MODE, "\200\200\200\200\200\101\060\060\060\060\101\200", -1, 0, 222, 1, "(20) 103 101 101 64 64 64 64 64 101 101 33 99 0 0 101 33 101 64 73 106", "StartA Latch PAD (4) Unlatch A CodeC 00 00 CodeA A FNC4 PAD" }, /* 59*/ { DATA_MODE, "\200\200\200\200\200\101\060\060\060\060\101\200", -1, 0, 222, 1, "(20) 103 101 101 64 64 64 64 64 101 101 33 99 0 0 101 33 101 64 73 106", "StartA Latch PAD (4) Unlatch A CodeC 00 00 CodeA A FNC4 PAD" },
/* 60*/ { UNICODE_MODE, "ÁÁÁÁÁÁ99999999999999", -1, 0, 211, 0, "(19) 104 100 100 33 33 33 33 33 33 99 99 99 99 99 99 99 99 63 106", "Okapi code129/extended-mode-exit-before-code-set-c.png (chose different solution); BWIPP different encodation" }, /* 60*/ { UNICODE_MODE, "ÁÁÁÁÁÁ99999999999999", -1, 0, 211, 0, "(19) 104 100 100 33 33 33 33 33 33 99 99 99 99 99 99 99 99 63 106", "Okapi code128/extended-mode-exit-before-code-set-c.png (chose different solution); BWIPP different encodation" },
/* 61*/ { UNICODE_MODE, "ÁÁÁÁÁÁ99999999999999Á", -1, 0, 233, 0, "(21) 104 100 100 33 33 33 33 33 33 99 99 99 99 99 99 99 99 100 33 91 106", "Above with trailing non-shifted (as still latched) extended; BWIPP different encodation" }, /* 61*/ { UNICODE_MODE, "ÁÁÁÁÁÁ99999999999999Á", -1, 0, 233, 0, "(21) 104 100 100 33 33 33 33 33 33 99 99 99 99 99 99 99 99 100 33 91 106", "Above with trailing non-shifted (as still latched) extended; BWIPP different encodation" },
/* 62*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "@g(\302\302\302\302\3025555\302\302\302\302\302\302\302\302", -1, 0, 277, 0, "(25) 104 32 71 8 100 100 34 34 34 34 34 99 55 55 100 34 34 34 34 34 34 34 34 25 106", "Okapi code128/extended-mode-with-short-embedded-code-set-c.png (chose different solution); BWIPP different encodation" }, /* 62*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "@g(\302\302\302\302\3025555\302\302\302\302\302\302\302\302", -1, 0, 277, 0, "(25) 104 32 71 8 100 100 34 34 34 34 34 99 55 55 100 34 34 34 34 34 34 34 34 25 106", "Okapi code128/extended-mode-with-short-embedded-code-set-c.png (chose different solution); BWIPP different encodation" },
/* 63*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "@g(\302\302\302\302\302555555\302\302\302\302\302\302\302", -1, 0, 277, 0, "(25) 104 32 71 8 100 100 34 34 34 34 34 99 55 55 55 100 34 34 34 34 34 34 34 76 106", "Above with extra 55 instead of \xC2; BWIPP different encodation" }, /* 63*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "@g(\302\302\302\302\302555555\302\302\302\302\302\302\302", -1, 0, 277, 0, "(25) 104 32 71 8 100 100 34 34 34 34 34 99 55 55 55 100 34 34 34 34 34 34 34 76 106", "Above with extra 55 instead of \xC2; BWIPP different encodation" },

View File

@ -42,7 +42,7 @@
# endif # endif
# if defined(__clang__) # if defined(__clang__)
# pragma GCC diagnostic ignored "-Wformat-non-iso" # pragma GCC diagnostic ignored "-Wformat-non-iso"
# elif defined(__GNUC__) # elif defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
# pragma GCC diagnostic ignored "-Wformat" /* Doesn't seem to be way to only avoid non-ISO warnings */ # pragma GCC diagnostic ignored "-Wformat" /* Doesn't seem to be way to only avoid non-ISO warnings */
# endif # endif
#elif (defined(__WORDSIZE) && __WORDSIZE == 32) || (defined(ULONG_MAX) && ULONG_MAX <= 0xFFFFFFFF) \ #elif (defined(__WORDSIZE) && __WORDSIZE == 32) || (defined(ULONG_MAX) && ULONG_MAX <= 0xFFFFFFFF) \

View File

@ -64,7 +64,7 @@ static const char *testFunc = NULL;
/* Visual C++ 6 doesn't support variadic args to macros, so make do with functions, which have inferior behaviour, /* Visual C++ 6 doesn't support variadic args to macros, so make do with functions, which have inferior behaviour,
e.g. don't exit on failure, `assert_equal()` type-specific */ e.g. don't exit on failure, `assert_equal()` type-specific */
#if (defined(_MSC_VER) && _MSC_VER == 1200) || defined(ZINT_IS_C89) /* VC6 or C89 */ #if (defined(_MSC_VER) && _MSC_VER <= 1200) || defined(ZINT_IS_C89) /* VC6 or C89 */
#include <stdarg.h> #include <stdarg.h>
void assert_zero(int exp, const char *fmt, ...) { void assert_zero(int exp, const char *fmt, ...) {
assertionNum++; assertionNum++;
@ -3895,7 +3895,7 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source,
return 0; return 0;
} }
INTERNAL int escape_char_process_test(struct zint_symbol *symbol, unsigned char *input_string, int *length, INTERNAL int escape_char_process_test(struct zint_symbol *symbol, const unsigned char *input_string, int *length,
unsigned char *escaped_string); unsigned char *escaped_string);
#include "../gs1.h" #include "../gs1.h"

View File

@ -65,7 +65,7 @@ extern "C" {
#define testutil_pclose(stream) pclose(stream) #define testutil_pclose(stream) pclose(stream)
#endif #endif
#if defined(__clang__) || defined(__GNUC__) #if defined(__GNUC__)
# pragma GCC diagnostic ignored "-Wpedantic" # pragma GCC diagnostic ignored "-Wpedantic"
# pragma GCC diagnostic ignored "-Woverlength-strings" # pragma GCC diagnostic ignored "-Woverlength-strings"
#elif defined(_MSC_VER) #elif defined(_MSC_VER)
@ -105,7 +105,7 @@ typedef struct s_testFunction {
void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size); void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size);
int testContinue(const testCtx *const p_ctx, const int i); int testContinue(const testCtx *const p_ctx, const int i);
#if (defined(_MSC_VER) &&_MSC_VER == 1200) || defined(ZINT_IS_C89) /* VC6 or C89 */ #if (defined(_MSC_VER) &&_MSC_VER <= 1200) || defined(ZINT_IS_C89) /* VC6 or C89 */
void assert_zero(int exp, const char *fmt, ...); void assert_zero(int exp, const char *fmt, ...);
void assert_nonzero(int exp, const char *fmt, ...); void assert_nonzero(int exp, const char *fmt, ...);
void assert_null(const void *exp, const char *fmt, ...); void assert_null(const void *exp, const char *fmt, ...);

View File

@ -115,7 +115,7 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, const unsigned char *pix
(void) out_colour_get_rgb(symbol->bgcolour, &bg[0], &bg[1], &bg[2], &bg[3]); (void) out_colour_get_rgb(symbol->bgcolour, &bg[0], &bg[1], &bg[2], &bg[3]);
if (symbol->symbology == BARCODE_ULTRA) { if (symbol->symbology == BARCODE_ULTRA) {
static const int ultra_chars[8] = { 'W', 'C', 'B', 'M', 'R', 'Y', 'G', 'K' }; static const unsigned char ultra_chars[8] = { 'W', 'C', 'B', 'M', 'R', 'Y', 'G', 'K' };
if (symbol->output_options & CMYK_COLOUR) { if (symbol->output_options & CMYK_COLOUR) {
static const unsigned char ultra_cmyks[8][4] = { static const unsigned char ultra_cmyks[8][4] = {

View File

@ -2,9 +2,9 @@
/* Generate mod 928 powers table for `encode928()` in "composite.c" */ /* Generate mod 928 powers table for `encode928()` in "composite.c" */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2020-2024 Robin Stuart <rstuart114@gmail.com>
*/ */
/* vim: set ts=4 sw=4 et : */ /* SPDX-License-Identifier: BSD-3-Clause */
/* The functions "getBit", "init928" and "encode928" are copyright BSI and are /* The functions "getBit", "init928" and "encode928" are copyright BSI and are
released with permission under the following terms: released with permission under the following terms:
@ -35,7 +35,7 @@ for ($j = 1; $j < 69; $j++) {
$pwr928[$j][0] = $cw[0] = (2 * $cw[0]) + (int)($v / 928); $pwr928[$j][0] = $cw[0] = (2 * $cw[0]) + (int)($v / 928);
} }
printf("static const UINT pwr928[69][7] = {\n"); printf("static const unsigned short cc_pwr928[69][7] = {\n");
for ($i = 0; $i < 69; $i++) { for ($i = 0; $i < 69; $i++) {
printf(" { "); printf(" { ");
for ($j = 0; $j < 7; $j++) { for ($j = 0; $j < 7; $j++) {
@ -44,3 +44,5 @@ for ($i = 0; $i < 69; $i++) {
printf("},\n"); printf("},\n");
} }
printf("};\n"); printf("};\n");
/* vim: set ts=4 sw=4 et : */

View File

@ -1,7 +1,7 @@
/* ultra.c - Ultracode */ /* ultra.c - Ultracode */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2020-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2020-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -58,11 +58,11 @@ static const char ult_colour[] = "0CBMRYGKW";
/* Max size and min cols adjusted to BWIPP values as updated 2021-07-14 /* Max size and min cols adjusted to BWIPP values as updated 2021-07-14
https://github.com/bwipp/postscriptbarcode/commit/4255810845fa8d45c6192dd30aee1fdad1aaf0cc */ https://github.com/bwipp/postscriptbarcode/commit/4255810845fa8d45c6192dd30aee1fdad1aaf0cc */
static const int ult_maxsize[] = {37, 84, 161, 282}; static const short ult_maxsize[] = { 37, 84, 161, 282 };
static const int ult_mincols[] = {5, 13, 22, 29}; static const char ult_mincols[] = { 5, 13, 22, 29 };
static const int ult_kec[] = {0, 1, 2, 4, 6, 8}; /* Value K(EC) from Table 12 */ static const char ult_kec[] = { 0, 1, 2, 4, 6, 8 }; /* Value K(EC) from Table 12 */
/* Taken from BWIPP - change in DCCU/DCCL tiles for revision 2 2021-09-28 */ /* Taken from BWIPP - change in DCCU/DCCL tiles for revision 2 2021-09-28 */
static const unsigned short ult_dccu[2][32] = { static const unsigned short ult_dccu[2][32] = {
@ -95,7 +95,7 @@ static const unsigned short ult_dccl[2][32] = {
}, },
}; };
static const int ult_tiles[] = { static const unsigned short ult_tiles[] = {
013135, 013136, 013153, 013156, 013163, 013165, 013513, 013515, 013516, 013531, /* 0-9 */ 013135, 013136, 013153, 013156, 013163, 013165, 013513, 013515, 013516, 013531, /* 0-9 */
013535, 013536, 013561, 013563, 013565, 013613, 013615, 013616, 013631, 013635, /* 10-19 */ 013535, 013536, 013561, 013563, 013565, 013613, 013615, 013616, 013631, 013635, /* 10-19 */
013636, 013651, 013653, 013656, 015135, 015136, 015153, 015163, 015165, 015313, /* 20-29 */ 013636, 013651, 013653, 013656, 015135, 015136, 015153, 015163, 015165, 015313, /* 20-29 */

View File

@ -1,7 +1,7 @@
/* zint.h - definitions for libzint */ /* zint.h - definitions for libzint */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2009-2023 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -378,7 +378,7 @@ extern "C" {
# define ZINT_EXTERN extern # define ZINT_EXTERN extern
# endif # endif
#elif defined(__GNUC__) && __GNUC__ >= 4 #elif defined(__GNUC__) && __GNUC__ >= 4
# define ZINT_EXTERN extern __attribute__((visibility("default"))) # define ZINT_EXTERN extern __attribute__((__visibility__("default")))
#else #else
# define ZINT_EXTERN extern # define ZINT_EXTERN extern
#endif #endif

View File

@ -1,11 +1,11 @@
% docs/README 2024-03-03 % docs/README 2024-05-27
For generation of "docs/manual.pdf" and "docs/manual.txt" from "manual.pmd" using a recent version of pandoc For generation of "docs/manual.pdf" and "docs/manual.txt" from "manual.pmd" using a recent version of pandoc
On Ubuntu/Debian (tested on Ubuntu 22.04) On Ubuntu/Debian (tested on Ubuntu 22.04)
wget https://github.com/jgm/pandoc/releases/download/3.1.12.2/pandoc-3.1.12.2-1-amd64.deb wget https://github.com/jgm/pandoc/releases/download/3.2/pandoc-3.2-1-amd64.deb
sudo dpkg -i pandoc-3.1.12.2-1-amd64.deb sudo dpkg -i pandoc-3.2-1-amd64.deb
sudo apt install python3-pip sudo apt install python3-pip
pip install pandoc-tablenos --user pip install pandoc-tablenos --user
export PATH=~/.local/bin:"$PATH" export PATH=~/.local/bin:"$PATH"
@ -20,9 +20,9 @@ On Ubuntu/Debian (tested on Ubuntu 22.04)
On Fedora (tested on Fedora Linux 38 (Workstation Edition)) On Fedora (tested on Fedora Linux 38 (Workstation Edition))
wget https://github.com/jgm/pandoc/releases/download/3.1.12.2/pandoc-3.1.12.2-linux-amd64.tar.gz wget https://github.com/jgm/pandoc/releases/download/3.2/pandoc-3.2-linux-amd64.tar.gz
tar xf pandoc-3.1.12.2-linux-amd64.tar.gz tar xf pandoc-3.2-linux-amd64.tar.gz
sudo mv -i pandoc-3.1.12.2/bin/pandoc /usr/local/bin sudo mv -i pandoc-3.2/bin/pandoc /usr/local/bin
sudo dnf install python3-pip sudo dnf install python3-pip
pip install pandoc-tablenos --user pip install pandoc-tablenos --user
export PATH=~/.local/bin:"$PATH" export PATH=~/.local/bin:"$PATH"

View File

@ -332,7 +332,7 @@
<h1 class="title">Zint Barcode Generator and Zint Barcode Studio User <h1 class="title">Zint Barcode Generator and Zint Barcode Studio User
Manual</h1> Manual</h1>
<p class="author">Version 2.13.0.9</p> <p class="author">Version 2.13.0.9</p>
<p class="date">March 2024</p> <p class="date">May 2024</p>
</header> </header>
<nav id="TOC" role="doc-toc"> <nav id="TOC" role="doc-toc">
<ul> <ul>

View File

@ -1,6 +1,6 @@
% Zint Barcode Generator and Zint Barcode Studio User Manual % Zint Barcode Generator and Zint Barcode Studio User Manual
% Version 2.13.0.9 % Version 2.13.0.9
% March 2024 % May 2024
# 1. Introduction # 1. Introduction

View File

@ -1,6 +1,6 @@
Zint Barcode Generator and Zint Barcode Studio User Manual Zint Barcode Generator and Zint Barcode Studio User Manual
Version 2.13.0.9 Version 2.13.0.9
March 2024 May 2024
******************************************************************************* *******************************************************************************
* For reference the following is a text-only version of the Zint manual, * * For reference the following is a text-only version of the Zint manual, *
@ -4814,7 +4814,7 @@ configured barcode is displayed once the "Generate" button is pressed.
Annex D. Man Page ZINT(1) Annex D. Man Page ZINT(1)
% ZINT(1) Version 2.13.0.9 % % March 2024 % ZINT(1) Version 2.13.0.9 % % May 2024
NAME NAME

View File

@ -1,6 +1,6 @@
.\" Automatically generated by Pandoc 3.1.12.2 .\" Automatically generated by Pandoc 3.2
.\" .\"
.TH "ZINT" "1" "March 2024" "Version 2.13.0.9" "" .TH "ZINT" "1" "May 2024" "Version 2.13.0.9" ""
.SH NAME .SH NAME
\f[CR]zint\f[R] \- encode data as a barcode image \f[CR]zint\f[R] \- encode data as a barcode image
.SH SYNOPSIS .SH SYNOPSIS

View File

@ -1,6 +1,6 @@
% ZINT(1) Version 2.13.0.9 % ZINT(1) Version 2.13.0.9
% %
% March 2024 % May 2024
# NAME # NAME

View File

@ -32,7 +32,7 @@
# include "../getopt/getopt.h" # include "../getopt/getopt.h"
# ifdef _MSC_VER # ifdef _MSC_VER
# include "zint.h" # include "zint.h"
# if _MSC_VER != 1200 /* VC6 */ # if _MSC_VER > 1200 /* VC6 */
# pragma warning(disable: 4996) /* function or variable may be unsafe */ # pragma warning(disable: 4996) /* function or variable may be unsafe */
# endif # endif
# else # else

View File

@ -45,7 +45,6 @@ static int utf8_to_wchar(const char *str, wchar_t *out) {
decode_utf8(&state, &codepoint, *str++); decode_utf8(&state, &codepoint, *str++);
} while (*str && state != 0 && state != 12); } while (*str && state != 0 && state != 12);
if (state != 0) { if (state != 0) {
fprintf(stderr, "utf8_to_wchar: warning: invalid UTF-8\n");
return 0; return 0;
} }
*out++ = codepoint; *out++ = codepoint;

View File

@ -355,6 +355,8 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl)
connect(btnSave, SIGNAL(clicked(bool)), SLOT(save())); connect(btnSave, SIGNAL(clicked(bool)), SLOT(save()));
connect(spnScale, SIGNAL(valueChanged(double)), SLOT(update_preview())); connect(spnScale, SIGNAL(valueChanged(double)), SLOT(update_preview()));
connect(btnExit, SIGNAL(clicked(bool)), SLOT(quit_now())); connect(btnExit, SIGNAL(clicked(bool)), SLOT(quit_now()));
connect(fgcolor, SIGNAL(clicked(bool)), SLOT(fgcolor_clicked()));
connect(bgcolor, SIGNAL(clicked(bool)), SLOT(bgcolor_clicked()));
connect(btnReset, SIGNAL(clicked(bool)), SLOT(reset_colours())); connect(btnReset, SIGNAL(clicked(bool)), SLOT(reset_colours()));
connect(btnReverse, SIGNAL(clicked(bool)), SLOT(reverse_colours())); connect(btnReverse, SIGNAL(clicked(bool)), SLOT(reverse_colours()));
connect(btnMoreData, SIGNAL(clicked(bool)), SLOT(open_data_dialog())); connect(btnMoreData, SIGNAL(clicked(bool)), SLOT(open_data_dialog()));