#include <stdio.h>
#include "common.h"
static const char DAFTSET[] = "FADT";
static const char KRSET[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static const char KASUTSET[] = "1234567890-abcdefgh";
static const char CHKASUTSET[] = "0123456789-abcdefgh";
#define SHKASUTSET_F (IS_NUM_F | IS_MNS_F | IS_UPR_F)
static const char PNTable[10][5] = {
{'L','L','S','S','S'}, {'S','S','S','L','L'}, {'S','S','L','S','L'}, {'S','S','L','L','S'}, {'S','L','S','S','L'},
{'S','L','S','L','S'}, {'S','L','L','S','S'}, {'L','S','S','S','L'}, {'L','S','S','L','S'}, {'L','S','L','S','S'}
};
static const char PLTable[10][5] = {
{'S','S','L','L','L'}, {'L','L','L','S','S'}, {'L','L','S','L','S'}, {'L','L','S','S','L'}, {'L','S','L','L','S'},
{'L','S','L','S','L'}, {'L','S','S','L','L'}, {'S','L','L','L','S'}, {'S','L','L','S','L'}, {'S','L','S','L','L'}
};
static const char RoyalValues[36][2] = {
{ 1, 1 }, { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 0 }, { 2, 1 }, { 2, 2 }, { 2, 3 }, { 2, 4 },
{ 2, 5 }, { 2, 0 }, { 3, 1 }, { 3, 2 }, { 3, 3 }, { 3, 4 }, { 3, 5 }, { 3, 0 }, { 4, 1 }, { 4, 2 },
{ 4, 3 }, { 4, 4 }, { 4, 5 }, { 4, 0 }, { 5, 1 }, { 5, 2 }, { 5, 3 }, { 5, 4 }, { 5, 5 }, { 5, 0 },
{ 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 }, { 0, 0 }
};
static const char RoyalTable[36][4] = {
{'3','3','0','0'}, {'3','2','1','0'}, {'3','2','0','1'}, {'2','3','1','0'}, {'2','3','0','1'}, {'2','2','1','1'},
{'3','1','2','0'}, {'3','0','3','0'}, {'3','0','2','1'}, {'2','1','3','0'}, {'2','1','2','1'}, {'2','0','3','1'},
{'3','1','0','2'}, {'3','0','1','2'}, {'3','0','0','3'}, {'2','1','1','2'}, {'2','1','0','3'}, {'2','0','1','3'},
{'1','3','2','0'}, {'1','2','3','0'}, {'1','2','2','1'}, {'0','3','3','0'}, {'0','3','2','1'}, {'0','2','3','1'},
{'1','3','0','2'}, {'1','2','1','2'}, {'1','2','0','3'}, {'0','3','1','2'}, {'0','3','0','3'}, {'0','2','1','3'},
{'1','1','2','2'}, {'1','0','3','2'}, {'1','0','2','3'}, {'0','1','3','2'}, {'0','1','2','3'}, {'0','0','3','3'}
};
static const char FlatTable[10][4] = {
{'0','5','0','4'}, { "18" }, {'0','1','1','7'}, {'0','2','1','6'}, {'0','3','1','5'},
{'0','4','1','4'}, {'0','5','1','3'}, {'0','6','1','2'}, {'0','7','1','1'}, {'0','8','1','0'}
};
static const char KoreaTable[10][10] = {
{'1','3','1','3','1','5','0','6','1','3'}, {'0','7','1','3','1','3','1','3','1','3'},
{'0','4','1','7','1','3','1','3','1','3'}, {'1','5','0','6','1','3','1','3','1','3'},
{'0','4','1','3','1','7','1','3','1','3'}, { "17171313" },
{'1','3','1','5','0','6','1','3','1','3'}, {'0','4','1','3','1','3','1','7','1','3'},
{ "17131713" }, { "13171713" }
};
static const char JapanTable[19][3] = {
{'1','1','4'}, {'1','3','2'}, {'3','1','2'}, {'1','2','3'}, {'1','4','1'},
{'3','2','1'}, {'2','1','3'}, {'2','3','1'}, {'4','1','1'}, {'1','4','4'},
{'4','1','4'}, {'3','2','4'}, {'3','4','2'}, {'2','3','4'}, {'4','3','2'},
{'2','4','3'}, {'4','2','3'}, {'4','4','1'}, {'1','1','1'}
};
static int usps_set_height(struct zint_symbol *symbol, const int no_errtxt) {
int error_number = 0;
if ((symbol->output_options & COMPLIANT_HEIGHT) || symbol->symbology == BARCODE_CEPNET) {
symbol->row_height[0] = 3.2249999f;
symbol->row_height[1] = 2.1500001f;
} else {
symbol->row_height[0] = 6.0f;
symbol->row_height[1] = 6.0f;
}
if (symbol->height) {
const float h_ratio = symbol->row_height[1] / (symbol->row_height[0] + symbol->row_height[1]);
symbol->row_height[1] = z_stripf(symbol->height * h_ratio);
if (symbol->row_height[1] < 0.5f) {
symbol->row_height[1] = 0.5f;
symbol->row_height[0] = z_stripf(0.5f / h_ratio - 0.5f);
} else {
symbol->row_height[0] = z_stripf(symbol->height - symbol->row_height[1]);
}
}
symbol->height = z_stripf(symbol->row_height[0] + symbol->row_height[1]);
if (symbol->output_options & COMPLIANT_HEIGHT) {
if (symbol->height < 4.6f || symbol->height > 9.0f) {
error_number = ZINT_WARN_NONCOMPLIANT;
if (!no_errtxt) {
z_errtxt(0, symbol, 498, "Height not compliant with standards");
}
}
}
return error_number;
}
static int postnet_enc(struct zint_symbol *symbol, const unsigned char source[], char *d, const int length) {
int i, sum, check_digit;
int error_number = 0;
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 38) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 480, "Input length %d too long (maximum 38)", length);
}
if (symbol->symbology == BARCODE_CEPNET) {
if (length != 8) {
error_number = z_errtxtf(ZINT_WARN_NONCOMPLIANT, symbol, 780,
"Input length %d wrong (should be 8 digits)", length);
}
} else {
if (length != 5 && length != 9 && length != 11) {
error_number = z_errtxtf(ZINT_WARN_NONCOMPLIANT, symbol, 479,
"Input length %d is not standard (should be 5, 9 or 11 digits)", length);
}
}
if ((i = z_not_sane(NEON_F, source, length))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 481,
"Invalid character at position %d in input (digits only)", i);
}
sum = 0;
*d++ = 'L';
for (i = 0; i < length; i++, d += 5) {
const int val = source[i] - '0';
memcpy(d, PNTable[val], 5);
sum += val;
}
check_digit = (10 - (sum % 10)) % 10;
memcpy(d, PNTable[check_digit], 5);
d += 5;
if (symbol->debug & ZINT_DEBUG_PRINT) printf("Check digit: %d\n", check_digit);
memcpy(d, "L", 2);
if (content_segs && z_ct_cpy_cat(symbol, source, length, (char) z_itoc(check_digit), NULL , 0)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}
INTERNAL int zint_postnet(struct zint_symbol *symbol, unsigned char source[], int length) {
char height_pattern[256] = {0};
unsigned int loopey, h;
int writer;
int error_number, warn_number;
error_number = postnet_enc(symbol, source, height_pattern, length);
if (error_number >= ZINT_ERROR) {
return error_number;
}
writer = 0;
h = (int) strlen(height_pattern);
for (loopey = 0; loopey < h; loopey++) {
if (height_pattern[loopey] == 'L') {
z_set_module(symbol, 0, writer);
}
z_set_module(symbol, 1, writer);
writer += 2;
}
warn_number = usps_set_height(symbol, error_number );
symbol->rows = 2;
symbol->width = writer - 1;
return error_number ? error_number : warn_number;
}
static int planet_enc(struct zint_symbol *symbol, const unsigned char source[], char *d, const int length) {
int i, sum, check_digit;
int error_number = 0;
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 38) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 482, "Input length %d too long (maximum 38)", length);
}
if (length != 11 && length != 13) {
error_number = z_errtxtf(ZINT_WARN_NONCOMPLIANT, symbol, 478,
"Input length %d is not standard (should be 11 or 13 digits)", length);
}
if ((i = z_not_sane(NEON_F, source, length))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 483,
"Invalid character at position %d in input (digits only)", i);
}
sum = 0;
*d++ = 'L';
for (i = 0; i < length; i++, d += 5) {
const int val = source[i] - '0';
memcpy(d, PLTable[val], 5);
sum += val;
}
check_digit = (10 - (sum % 10)) % 10;
memcpy(d, PLTable[check_digit], 5);
d += 5;
if (symbol->debug & ZINT_DEBUG_PRINT) printf("Check digit: %d\n", check_digit);
memcpy(d, "L", 2);
if (content_segs && z_ct_cpy_cat(symbol, source, length, (char) z_itoc(check_digit), NULL , 0)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}
INTERNAL int zint_planet(struct zint_symbol *symbol, unsigned char source[], int length) {
char height_pattern[256] = {0};
unsigned int loopey, h;
int writer;
int error_number, warn_number;
error_number = planet_enc(symbol, source, height_pattern, length);
if (error_number >= ZINT_ERROR) {
return error_number;
}
writer = 0;
h = (int) strlen(height_pattern);
for (loopey = 0; loopey < h; loopey++) {
if (height_pattern[loopey] == 'L') {
z_set_module(symbol, 0, writer);
}
z_set_module(symbol, 1, writer);
writer += 2;
}
warn_number = usps_set_height(symbol, error_number );
symbol->rows = 2;
symbol->width = writer - 1;
return error_number ? error_number : warn_number;
}
INTERNAL int zint_koreapost(struct zint_symbol *symbol, unsigned char source[], int length) {
int total, i, check, zeroes, error_number = 0;
unsigned char local_source[8];
char dest[80];
char *d = dest;
int posns[6];
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 6) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 484, "Input length %d too long (maximum 6)", length);
}
if ((i = z_not_sane(NEON_F, source, length))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 485,
"Invalid character at position %d in input (digits only)", i);
}
zeroes = 6 - length;
memset(local_source, '0', zeroes);
memcpy(local_source + zeroes, source, length);
total = 0;
for (i = 0; i < 6; i++) {
posns[i] = z_ctoi(local_source[i]);
total += posns[i];
}
check = 10 - (total % 10);
if (check == 10) {
check = 0;
}
local_source[6] = z_itoc(check);
for (i = 5; i >= 0; i--) {
const char *const entry = KoreaTable[posns[i]];
memcpy(d, entry, 10);
d += entry[8] ? 10 : 8;
}
memcpy(d, KoreaTable[check], 10);
d += KoreaTable[check][8] ? 10 : 8;
z_expand(symbol, dest, d - dest);
z_hrt_cpy_nochk(symbol, local_source, 7);
if (content_segs && z_ct_cpy(symbol, local_source, 7)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}
INTERNAL int zint_fim(struct zint_symbol *symbol, unsigned char source[], int length) {
int error_number = 0;
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 1) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 486, "Input length %d too long (maximum 1)", length);
}
z_to_upper(source, length);
switch ((char) source[0]) {
case 'A':
z_expand(symbol, "111515111", 9);
break;
case 'B':
z_expand(symbol, "13111311131", 11);
break;
case 'C':
z_expand(symbol, "11131313111", 11);
break;
case 'D':
z_expand(symbol, "1111131311111", 13);
break;
case 'E':
z_expand(symbol, "1317131", 7);
break;
default:
return z_errtxt(ZINT_ERROR_INVALID_DATA, symbol, 487,
"Invalid character in input (\"A\", \"B\", \"C\", \"D\" or \"E\" only)");
break;
}
if (symbol->output_options & COMPLIANT_HEIGHT) {
const float min_height = 12.7388535f;
const float default_height = 20.0f;
const float max_height = 31.0559006f;
error_number = z_set_height(symbol, min_height, default_height, max_height, 0 );
} else {
(void) z_set_height(symbol, 0.0f, 50.0f, 0.0f, 1 );
}
if (content_segs && z_ct_cpy(symbol, source, length)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}
INTERNAL int zint_daft_set_height(struct zint_symbol *symbol, const float min_height, const float max_height) {
int error_number = 0;
if (symbol->height) {
const float t_ratio = z_stripf(symbol->row_height[1] / z_stripf(symbol->row_height[0] * 2
+ symbol->row_height[1]));
symbol->row_height[1] = z_stripf(symbol->height * t_ratio);
if (symbol->row_height[1] < 0.5f) {
symbol->row_height[1] = 0.5f;
symbol->row_height[0] = z_stripf(0.25f / t_ratio - 0.25f);
} else {
symbol->row_height[0] = z_stripf(z_stripf(symbol->height - symbol->row_height[1]) / 2.0f);
}
if (symbol->row_height[0] < 0.5f) {
symbol->row_height[0] = 0.5f;
symbol->row_height[1] = z_stripf(t_ratio / (1.0f - t_ratio));
}
}
symbol->row_height[2] = symbol->row_height[0];
symbol->height = z_stripf(z_stripf(symbol->row_height[0] + symbol->row_height[1]) + symbol->row_height[2]);
if (symbol->output_options & COMPLIANT_HEIGHT) {
if ((min_height && symbol->height < min_height) || (max_height && symbol->height > max_height)) {
error_number = z_errtxt(ZINT_WARN_NONCOMPLIANT, symbol, 499, "Height not compliant with standards");
}
}
return error_number;
}
static int rm4scc_enc(struct zint_symbol *symbol, const int *posns, char *d, const int length) {
int i;
int top, bottom, row, column, check_digit;
top = 0;
bottom = 0;
*d++ = '1';
for (i = 0; i < length; i++, d += 4) {
const int p = posns[i];
memcpy(d, RoyalTable[p], 4);
top += RoyalValues[p][0];
bottom += RoyalValues[p][1];
}
row = (top % 6) - 1;
column = (bottom % 6) - 1;
if (row == -1) {
row = 5;
}
if (column == -1) {
column = 5;
}
check_digit = (6 * row) + column;
memcpy(d, RoyalTable[check_digit], 4);
d += 4;
if (symbol->debug & ZINT_DEBUG_PRINT) printf("Check digit: %d\n", check_digit);
memcpy(d, "0", 2);
return KRSET[check_digit];
}
INTERNAL int zint_rm4scc(struct zint_symbol *symbol, unsigned char source[], int length) {
int i;
char height_pattern[210];
int posns[50];
int loopey, h;
int writer;
char check_digit;
int error_number = 0;
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 50) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 488, "Input length %d too long (maximum 50)", length);
}
z_to_upper(source, length);
if ((i = z_not_sane_lookup(KRSET, 36, source, length, posns))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 489,
"Invalid character at position %d in input (alphanumerics only)", i);
}
check_digit = rm4scc_enc(symbol, posns, height_pattern, length);
writer = 0;
h = (int) strlen(height_pattern);
for (loopey = 0; loopey < h; loopey++) {
if (height_pattern[loopey] == '1' || height_pattern[loopey] == '0') {
z_set_module(symbol, 0, writer);
}
z_set_module(symbol, 1, writer);
if (height_pattern[loopey] == '2' || height_pattern[loopey] == '0') {
z_set_module(symbol, 2, writer);
}
writer += 2;
}
if (symbol->output_options & COMPLIANT_HEIGHT) {
const float min_height = 6.47952747f;
const float max_height = 10.8062992f;
symbol->row_height[0] = 3.16417313f;
symbol->row_height[1] = 2.16496062f;
error_number = zint_daft_set_height(symbol, min_height, max_height);
} else {
symbol->row_height[0] = 3.0f;
symbol->row_height[1] = 2.0f;
(void) zint_daft_set_height(symbol, 0.0f, 0.0f);
}
symbol->rows = 3;
symbol->width = writer - 1;
if (content_segs && z_ct_cpy_cat(symbol, source, length, check_digit, NULL , 0)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}
INTERNAL int zint_kix(struct zint_symbol *symbol, unsigned char source[], int length) {
char height_pattern[75];
char *d = height_pattern;
int posns[18];
int loopey;
int writer, i, h;
int error_number = 0;
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 18) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 490, "Input length %d too long (maximum 18)", length);
}
z_to_upper(source, length);
if ((i = z_not_sane_lookup(KRSET, 36, source, length, posns))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 491,
"Invalid character at position %d in input (alphanumerics only)", i);
}
for (i = 0; i < length; i++, d += 4) {
memcpy(d, RoyalTable[posns[i]], 4);
}
writer = 0;
h = d - height_pattern;
for (loopey = 0; loopey < h; loopey++) {
if (height_pattern[loopey] == '1' || height_pattern[loopey] == '0') {
z_set_module(symbol, 0, writer);
}
z_set_module(symbol, 1, writer);
if (height_pattern[loopey] == '2' || height_pattern[loopey] == '0') {
z_set_module(symbol, 2, writer);
}
writer += 2;
}
if (symbol->output_options & COMPLIANT_HEIGHT) {
const float min_height = 6.47952747f;
const float max_height = 10.8062992f;
symbol->row_height[0] = 3.16417313f;
symbol->row_height[1] = 2.16496062f;
error_number = zint_daft_set_height(symbol, min_height, max_height);
} else {
symbol->row_height[0] = 3.0f;
symbol->row_height[1] = 2.0f;
(void) zint_daft_set_height(symbol, 0.0f, 0.0f);
}
symbol->rows = 3;
symbol->width = writer - 1;
if (content_segs && z_ct_cpy(symbol, source, length)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}
INTERNAL int zint_daft(struct zint_symbol *symbol, unsigned char source[], int length) {
int i;
int posns[576];
int loopey;
int writer;
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 576) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 492, "Input length %d too long (maximum 576)", length);
}
z_to_upper(source, length);
if ((i = z_not_sane_lookup(DAFTSET, 4, source, length, posns))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 493,
"Invalid character at position %d in input (\"D\", \"A\", \"F\" and \"T\" only)", i);
}
writer = 0;
for (loopey = 0; loopey < length; loopey++) {
if (posns[loopey] == 1 || posns[loopey] == 0) {
z_set_module(symbol, 0, writer);
}
z_set_module(symbol, 1, writer);
if (posns[loopey] == 2 || posns[loopey] == 0) {
z_set_module(symbol, 2, writer);
}
writer += 2;
}
if (symbol->option_2 >= 50 && symbol->option_2 <= 900) {
const float t_ratio = symbol->option_2 / 1000.0f;
if (symbol->height < 0.5f) {
symbol->height = 8.0f;
}
symbol->row_height[1] = z_stripf(symbol->height * t_ratio);
symbol->row_height[0] = z_stripf((symbol->height - symbol->row_height[1]) / 2.0f);
} else {
symbol->row_height[0] = 3.0f;
symbol->row_height[1] = 2.0f;
}
(void) zint_daft_set_height(symbol, 0.0f, 0.0f);
symbol->rows = 3;
symbol->width = writer - 1;
if (content_segs && z_ct_cpy(symbol, source, length)) {
return ZINT_ERROR_MEMORY;
}
return 0;
}
INTERNAL int zint_flat(struct zint_symbol *symbol, unsigned char source[], int length) {
int i, error_number = 0;
char dest[512];
char *d = dest;
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 128) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 494, "Input length %d too long (maximum 128)", length);
}
if ((i = z_not_sane(NEON_F, source, length))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 495,
"Invalid character at position %d in input (digits only)", i);
}
for (i = 0; i < length; i++) {
const char *const entry = FlatTable[source[i] - '0'];
memcpy(d, entry, 4);
d += entry[2] ? 4 : 2;
}
z_expand(symbol, dest, d - dest);
if (content_segs && z_ct_cpy(symbol, source, length)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}
INTERNAL int zint_japanpost(struct zint_symbol *symbol, unsigned char source[], int length) {
int error_number = 0, h;
char pattern[69];
char *d = pattern;
int writer, loopey, inter_posn, i, sum, check;
char check_char;
unsigned char inter[20 + 1];
const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS;
if (length > 20) {
return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 496, "Input length %d too long (maximum 20)", length);
}
z_to_upper(source, length);
if ((i = z_not_sane(SHKASUTSET_F, source, length))) {
return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 497,
"Invalid character at position %d in input (alphanumerics and \"-\" only)", i);
}
memset(inter, 'd', 20);
inter[20] = '\0';
i = 0;
inter_posn = 0;
do {
if (z_isdigit(source[i]) || source[i] == '-') {
inter[inter_posn] = source[i];
inter_posn++;
} else {
if (source[i] <= 'J') {
inter[inter_posn] = 'a';
inter[inter_posn + 1] = source[i] - 'A' + '0';
} else if (source[i] <= 'T') {
inter[inter_posn] = 'b';
inter[inter_posn + 1] = source[i] - 'K' + '0';
} else {
inter[inter_posn] = 'c';
inter[inter_posn + 1] = source[i] - 'U' + '0';
}
inter_posn += 2;
}
i++;
} while (i < length && inter_posn < 20);
if (i != length || inter[20] != '\0') {
return z_errtxt(ZINT_ERROR_TOO_LONG, symbol, 477,
"Input too long, requires too many symbol characters (maximum 20)");
}
memcpy(d, "13", 2);
d += 2;
sum = 0;
for (i = 0; i < 20; i++, d += 3) {
memcpy(d, JapanTable[z_posn(KASUTSET, inter[i])], 3);
sum += z_posn(CHKASUTSET, inter[i]);
}
check = 19 - (sum % 19);
if (check == 19) {
check = 0;
}
if (check <= 9) {
check_char = check + '0';
} else if (check == 10) {
check_char = '-';
} else {
check_char = (check - 11) + 'a';
}
memcpy(d, JapanTable[z_posn(KASUTSET, check_char)], 3);
d += 3;
if (symbol->debug & ZINT_DEBUG_PRINT) printf("Check: %d, char: %c\n", check, check_char);
memcpy(d, "31", 2);
d += 2;
writer = 0;
h = d - pattern;
for (loopey = 0; loopey < h; loopey++) {
if (pattern[loopey] == '2' || pattern[loopey] == '1') {
z_set_module(symbol, 0, writer);
}
z_set_module(symbol, 1, writer);
if (pattern[loopey] == '3' || pattern[loopey] == '1') {
z_set_module(symbol, 2, writer);
}
writer += 2;
}
symbol->rows = 3;
symbol->width = writer - 1;
if (symbol->output_options & COMPLIANT_HEIGHT) {
const float min_height = 4.85714293f;
const float max_height = 7.19999981f;
symbol->row_height[0] = 2.0f;
symbol->row_height[1] = 2.0f;
error_number = zint_daft_set_height(symbol, min_height, max_height);
} else {
symbol->row_height[0] = 3.0f;
symbol->row_height[1] = 2.0f;
(void) zint_daft_set_height(symbol, 0.0f, 0.0f);
}
if (content_segs && z_ct_cpy(symbol, source, length)) {
return ZINT_ERROR_MEMORY;
}
return error_number;
}