GS1: update for new AI 4309 with latlong validator, plus new GS1

syntax dictionary format (pre-release)
iso4217: new currency code 925
This commit is contained in:
gitlost 2022-07-14 20:44:48 +01:00
parent 930f458979
commit a48434c19c
10 changed files with 962 additions and 864 deletions

View File

@ -21,6 +21,7 @@ Changes
in filenames in filenames
- Add symbology BC412 (beta) - Add symbology BC412 (beta)
- backend: use alloca() (z_alloca()) for both Unix and Windows - backend: use alloca() (z_alloca()) for both Unix and Windows
- GS1: new AI 4309 with latlong checker, new currency code 925
Bugs Bugs
---- ----

View File

@ -1172,6 +1172,42 @@ static int couponposoffer(const unsigned char *data, int data_len, int offset, i
return 1; return 1;
} }
/* Check WSG 84 latitude, longitude */
static int latlong(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
int *p_err_posn, char err_msg[50], const int length_only) {
(void)max;
data_len -= offset;
if (data_len < min || (data_len && data_len < 20)) {
return 0;
}
if (!length_only && data_len) {
const unsigned char *d = data + offset;
const unsigned char *const de = d + (data_len > max ? max : data_len);
uint64_t lat = 0, lng = 0;
for (; d < de; d++) {
if (de - d > 10) {
lat *= 10;
lat += *d - '0';
} else {
lng *= 10;
lng += *d - '0';
}
}
if (lat > 1800000000 || lng > 3600000000) {
*p_err_no = 3;
*p_err_posn = d - 1 - data + 1 - 10 * (lat > 1800000000);
sprintf(err_msg, "Invalid %s", lat > 1800000000 ? "latitude" : "longitude");
return 0;
}
}
return 1;
}
/* Generated by "php backend/tools/gen_gs1_linter.php > backend/gs1_lint.h" */ /* Generated by "php backend/tools/gen_gs1_linter.php > backend/gs1_lint.h" */
#include "gs1_lint.h" #include "gs1_lint.h"

View File

@ -1,10 +1,10 @@
/* /*
* GS1 AI checker generated by "backend/tools/gen_gs1_lint.php" from * GS1 AI checker generated by "backend/tools/gen_gs1_lint.php" from
* https://raw.githubusercontent.com/bwipp/postscriptbarcode/master/contrib/development/gs1-format-spec.txt * standards/GS1/gs1-syntax-dictionary-2022-07-11.txt
*/ */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2021 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2021-2022 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
@ -31,9 +31,10 @@
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. SUCH DAMAGE.
*/ */
/* SPDX-License-Identifier: BSD-3-Clause */
#ifndef GS1_LINT_H #ifndef Z_GS1_LINT_H
#define GS1_LINT_H #define Z_GS1_LINT_H
/* N18,csum,key (Used by SSCC) */ /* N18,csum,key (Used by SSCC) */
static int n18_csum_key(const unsigned char *data, const int data_len, static int n18_csum_key(const unsigned char *data, const int data_len,
@ -57,8 +58,8 @@ static int n14_csum_key(const unsigned char *data, const int data_len,
&& key(data, data_len, 0, 14, 14, p_err_no, p_err_posn, err_msg, 0); && key(data, data_len, 0, 14, 14, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..20 (Used by BATCH/LOT, SERIAL, CPV, PCN...) */ /* X..20 (Used by BATCH/LOT, SERIAL, CPV, PCN...) */
static int x1__20(const unsigned char *data, const int data_len, static int x__20(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 20 return data_len >= 1 && data_len <= 20
&& cset82(data, data_len, 0, 1, 20, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 20, p_err_no, p_err_posn, err_msg);
@ -80,29 +81,29 @@ static int n2(const unsigned char *data, const int data_len,
&& numeric(data, data_len, 0, 2, 2, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 2, 2, p_err_no, p_err_posn, err_msg);
} }
/* X1..28 (Used by TPX) */ /* X..28 (Used by TPX) */
static int x1__28(const unsigned char *data, const int data_len, static int x__28(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 28 return data_len >= 1 && data_len <= 28
&& cset82(data, data_len, 0, 1, 28, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 28, p_err_no, p_err_posn, err_msg);
} }
/* X1..30 (Used by ADDITIONAL ID, CUST. PART NO., SECONDARY SERIAL, REF. TO SOURCE...) */ /* X..30 (Used by ADDITIONAL ID, CUST. PART NO., SECONDARY SERIAL, REF. TO SOURCE...) */
static int x1__30(const unsigned char *data, const int data_len, static int x__30(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 30 return data_len >= 1 && data_len <= 30
&& cset82(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg);
} }
/* N1..6 (Used by MTO VARIANT) */ /* N..6 (Used by MTO VARIANT) */
static int n1__6(const unsigned char *data, const int data_len, static int n__6(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 6 return data_len >= 1 && data_len <= 6
&& numeric(data, data_len, 0, 1, 6, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 1, 6, p_err_no, p_err_posn, err_msg);
} }
/* N13,csum,key X0..17 (Used by GDTI) */ /* N13,csum,key [X..17] (Used by GDTI) */
static int n13_csum_key_x0__17(const unsigned char *data, const int data_len, static int n13_csum_key__x__17_(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 13 && data_len <= 30 return data_len >= 13 && data_len <= 30
&& csum(data, data_len, 0, 13, 13, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && csum(data, data_len, 0, 13, 13, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -113,8 +114,8 @@ static int n13_csum_key_x0__17(const unsigned char *data, const int data_len,
&& cset82(data, data_len, 13, 0, 17, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 13, 0, 17, p_err_no, p_err_posn, err_msg);
} }
/* N13,csum,key N0..12 (Used by GCN) */ /* N13,csum,key [N..12] (Used by GCN) */
static int n13_csum_key_n0__12(const unsigned char *data, const int data_len, static int n13_csum_key__n__12_(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 13 && data_len <= 25 return data_len >= 13 && data_len <= 25
&& csum(data, data_len, 0, 13, 13, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && csum(data, data_len, 0, 13, 13, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -125,8 +126,8 @@ static int n13_csum_key_n0__12(const unsigned char *data, const int data_len,
&& numeric(data, data_len, 13, 0, 12, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 13, 0, 12, p_err_no, p_err_posn, err_msg);
} }
/* N1..8 (Used by VAR. COUNT, COUNT) */ /* N..8 (Used by VAR. COUNT, COUNT) */
static int n1__8(const unsigned char *data, const int data_len, static int n__8(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 8 return data_len >= 1 && data_len <= 8
&& numeric(data, data_len, 0, 1, 8, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 1, 8, p_err_no, p_err_posn, err_msg);
@ -139,15 +140,15 @@ static int n6(const unsigned char *data, const int data_len,
&& numeric(data, data_len, 0, 6, 6, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 6, 6, p_err_no, p_err_posn, err_msg);
} }
/* N1..15 (Used by AMOUNT, PRICE) */ /* N..15 (Used by AMOUNT, PRICE) */
static int n1__15(const unsigned char *data, const int data_len, static int n__15(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 15 return data_len >= 1 && data_len <= 15
&& numeric(data, data_len, 0, 1, 15, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 1, 15, p_err_no, p_err_posn, err_msg);
} }
/* N3,iso4217 N1..15 (Used by AMOUNT, PRICE) */ /* N3,iso4217 N..15 (Used by AMOUNT, PRICE) */
static int n3_iso4217_n1__15(const unsigned char *data, const int data_len, static int n3_iso4217_n__15(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 4 && data_len <= 18 return data_len >= 4 && data_len <= 18
&& iso4217(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && iso4217(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -163,8 +164,8 @@ static int n4(const unsigned char *data, const int data_len,
&& numeric(data, data_len, 0, 4, 4, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 4, 4, p_err_no, p_err_posn, err_msg);
} }
/* X1..30,key (Used by GINC, GIAI - ASSEMBLY, GIAI) */ /* X..30,key (Used by GINC, GIAI - ASSEMBLY, GIAI) */
static int x1__30_key(const unsigned char *data, const int data_len, static int x__30_key(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 30 return data_len >= 1 && data_len <= 30
&& key(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && key(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -194,8 +195,8 @@ static int n13_csum_key(const unsigned char *data, const int data_len,
&& key(data, data_len, 0, 13, 13, p_err_no, p_err_posn, err_msg, 0); && key(data, data_len, 0, 13, 13, p_err_no, p_err_posn, err_msg, 0);
} }
/* N3,iso3166 X1..9 (Used by SHIP TO POST) */ /* N3,iso3166 X..9 (Used by SHIP TO POST) */
static int n3_iso3166_x1__9(const unsigned char *data, const int data_len, static int n3_iso3166_x__9(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 4 && data_len <= 12 return data_len >= 4 && data_len <= 12
&& iso3166(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && iso3166(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -213,24 +214,24 @@ static int n3_iso3166(const unsigned char *data, const int data_len,
&& iso3166(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 0); && iso3166(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 0);
} }
/* N3..15,iso3166list (Used by COUNTRY - INITIAL PROCESS, COUNTRY - DISASSEMBLY) */ /* N..15,iso3166list (Used by COUNTRY - INITIAL PROCESS, COUNTRY - DISASSEMBLY) */
static int n3__15_iso3166list(const unsigned char *data, const int data_len, static int n__15_iso3166list(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 3 && data_len <= 15 return data_len >= 1 && data_len <= 15
&& iso3166list(data, data_len, 0, 3, 15, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && iso3166list(data, data_len, 0, 1, 15, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
&& numeric(data, data_len, 0, 3, 15, p_err_no, p_err_posn, err_msg) && numeric(data, data_len, 0, 1, 15, p_err_no, p_err_posn, err_msg)
&& iso3166list(data, data_len, 0, 3, 15, p_err_no, p_err_posn, err_msg, 0); && iso3166list(data, data_len, 0, 1, 15, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..3 (Used by ORIGIN SUBDIVISION, AQUATIC SPECIES) */ /* X..3 (Used by ORIGIN SUBDIVISION, AQUATIC SPECIES) */
static int x1__3(const unsigned char *data, const int data_len, static int x__3(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 3 return data_len >= 1 && data_len <= 3
&& cset82(data, data_len, 0, 1, 3, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 3, p_err_no, p_err_posn, err_msg);
} }
/* X1..35,pcenc (Used by SHIP TO COMP, SHIP TO NAME, RTN TO COMP, RTN TO NAME...) */ /* X..35,pcenc (Used by SHIP TO COMP, SHIP TO NAME, RTN TO COMP, RTN TO NAME...) */
static int x1__35_pcenc(const unsigned char *data, const int data_len, static int x__35_pcenc(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 35 return data_len >= 1 && data_len <= 35
&& pcenc(data, data_len, 0, 1, 35, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && pcenc(data, data_len, 0, 1, 35, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -238,8 +239,8 @@ static int x1__35_pcenc(const unsigned char *data, const int data_len,
&& pcenc(data, data_len, 0, 1, 35, p_err_no, p_err_posn, err_msg, 0); && pcenc(data, data_len, 0, 1, 35, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..70,pcenc (Used by SHIP TO ADD1, SHIP TO ADD2, SHIP TO SUB, SHIP TO LOC...) */ /* X..70,pcenc (Used by SHIP TO ADD1, SHIP TO ADD2, SHIP TO SUB, SHIP TO LOC...) */
static int x1__70_pcenc(const unsigned char *data, const int data_len, static int x__70_pcenc(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 70 return data_len >= 1 && data_len <= 70
&& pcenc(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && pcenc(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -256,7 +257,16 @@ static int x2_iso3166alpha2(const unsigned char *data, const int data_len,
&& iso3166alpha2(data, data_len, 0, 2, 2, p_err_no, p_err_posn, err_msg, 0); && iso3166alpha2(data, data_len, 0, 2, 2, p_err_no, p_err_posn, err_msg, 0);
} }
/* N1,yesno (Used by DANGEROUS GOODS, AUTH LEAVE, SIG REQUIRED) */ /* N20,latlong (Used by SHIP TO GEO) */
static int n20_latlong(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len == 20
&& latlong(data, data_len, 0, 20, 20, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
&& numeric(data, data_len, 0, 20, 20, p_err_no, p_err_posn, err_msg)
&& latlong(data, data_len, 0, 20, 20, p_err_no, p_err_posn, err_msg, 0);
}
/* N1,yesno (Used by DANGEROUS GOODS, AUTH TO LEAVE, SIG REQUIRED) */
static int n1_yesno(const unsigned char *data, const int data_len, static int n1_yesno(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len == 1 return data_len == 1
@ -265,7 +275,7 @@ static int n1_yesno(const unsigned char *data, const int data_len,
&& yesno(data, data_len, 0, 1, 1, p_err_no, p_err_posn, err_msg, 0); && yesno(data, data_len, 0, 1, 1, p_err_no, p_err_posn, err_msg, 0);
} }
/* N6,yymmd0 N4,hhmm (Used by NBEF DEL DT., NAFT DEL DT.) */ /* N6,yymmd0 N4,hhmm (Used by NOT BEF DEL DT, NOT AFT DEL DT) */
static int n6_yymmd0_n4_hhmm(const unsigned char *data, const int data_len, static int n6_yymmd0_n4_hhmm(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len == 10 return data_len == 10
@ -305,22 +315,22 @@ static int n6_yymmdd_n4_hhmm(const unsigned char *data, const int data_len,
&& hhmm(data, data_len, 6, 4, 4, p_err_no, p_err_posn, err_msg, 0); && hhmm(data, data_len, 6, 4, 4, p_err_no, p_err_posn, err_msg, 0);
} }
/* N1..4 (Used by ACTIVE POTENCY) */ /* N..4 (Used by ACTIVE POTENCY) */
static int n1__4(const unsigned char *data, const int data_len, static int n__4(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 4 return data_len >= 1 && data_len <= 4
&& numeric(data, data_len, 0, 1, 4, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 1, 4, p_err_no, p_err_posn, err_msg);
} }
/* X1..12 (Used by CATCH AREA) */ /* X..12 (Used by CATCH AREA) */
static int x1__12(const unsigned char *data, const int data_len, static int x__12(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 12 return data_len >= 1 && data_len <= 12
&& cset82(data, data_len, 0, 1, 12, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 12, p_err_no, p_err_posn, err_msg);
} }
/* N6,yymmdd N0..6,yymmdd (Used by HARVEST DATE) */ /* N6,yymmdd [N6],yymmdd (Used by HARVEST DATE) */
static int n6_yymmdd_n0__6_yymmdd(const unsigned char *data, const int data_len, static int n6_yymmdd__n6__yymmdd(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 6 && data_len <= 12 return data_len >= 6 && data_len <= 12
&& yymmdd(data, data_len, 0, 6, 6, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && yymmdd(data, data_len, 0, 6, 6, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -331,22 +341,22 @@ static int n6_yymmdd_n0__6_yymmdd(const unsigned char *data, const int data_len,
&& yymmdd(data, data_len, 6, 0, 6, p_err_no, p_err_posn, err_msg, 0); && yymmdd(data, data_len, 6, 0, 6, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..10 (Used by FISHING GEAR TYPE) */ /* X..10 (Used by FISHING GEAR TYPE) */
static int x1__10(const unsigned char *data, const int data_len, static int x__10(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 10 return data_len >= 1 && data_len <= 10
&& cset82(data, data_len, 0, 1, 10, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 10, p_err_no, p_err_posn, err_msg);
} }
/* X1..2 (Used by PROD METHOD) */ /* X..2 (Used by PROD METHOD) */
static int x1__2(const unsigned char *data, const int data_len, static int x__2(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 2 return data_len >= 1 && data_len <= 2
&& cset82(data, data_len, 0, 1, 2, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 2, p_err_no, p_err_posn, err_msg);
} }
/* N3,iso3166999 X1..27 (Used by PROCESSOR # s) */ /* N3,iso3166999 X..27 (Used by PROCESSOR # 0, PROCESSOR # 1, PROCESSOR # 2, PROCESSOR # 3...) */
static int n3_iso3166999_x1__27(const unsigned char *data, const int data_len, static int n3_iso3166999_x__27(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 4 && data_len <= 30 return data_len >= 4 && data_len <= 30
&& iso3166999(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && iso3166999(data, data_len, 0, 3, 3, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -367,8 +377,8 @@ static int n1_x1_x1_x1_importeridx(const unsigned char *data, const int data_len
&& importeridx(data, data_len, 3, 1, 1, p_err_no, p_err_posn, err_msg, 0); && importeridx(data, data_len, 3, 1, 1, p_err_no, p_err_posn, err_msg, 0);
} }
/* X2 X1..28 (Used by CERT # s) */ /* X2 X..28 (Used by CERT # 1, CERT # 2, CERT # 3, CERT # 4...) */
static int x2_x1__28(const unsigned char *data, const int data_len, static int x2_x__28(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 3 && data_len <= 30 return data_len >= 3 && data_len <= 30
&& cset82(data, data_len, 0, 2, 2, p_err_no, p_err_posn, err_msg) && cset82(data, data_len, 0, 2, 2, p_err_no, p_err_posn, err_msg)
@ -394,8 +404,8 @@ static int n4_nonzero_n5_nonzero_n3_nonzero_n1_winding_n1(const unsigned char *d
&& numeric(data, data_len, 13, 1, 1, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 13, 1, 1, p_err_no, p_err_posn, err_msg);
} }
/* N1,zero N13,csum,key X0..16 (Used by GRAI) */ /* N1,zero N13,csum,key [X..16] (Used by GRAI) */
static int n1_zero_n13_csum_key_x0__16(const unsigned char *data, const int data_len, static int n1_zero_n13_csum_key__x__16_(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 14 && data_len <= 30 return data_len >= 14 && data_len <= 30
&& zero(data, data_len, 0, 1, 1, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && zero(data, data_len, 0, 1, 1, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -421,8 +431,8 @@ static int n14_csum_n4_pieceoftotal(const unsigned char *data, const int data_le
&& pieceoftotal(data, data_len, 14, 4, 4, p_err_no, p_err_posn, err_msg, 0); && pieceoftotal(data, data_len, 14, 4, 4, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..34,iban (Used by IBAN) */ /* X..34,iban (Used by IBAN) */
static int x1__34_iban(const unsigned char *data, const int data_len, static int x__34_iban(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 34 return data_len >= 1 && data_len <= 34
&& iban(data, data_len, 0, 1, 34, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && iban(data, data_len, 0, 1, 34, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -430,8 +440,8 @@ static int x1__34_iban(const unsigned char *data, const int data_len,
&& iban(data, data_len, 0, 1, 34, p_err_no, p_err_posn, err_msg, 0); && iban(data, data_len, 0, 1, 34, p_err_no, p_err_posn, err_msg, 0);
} }
/* N8,yymmddhh N0..4,mmoptss (Used by PROD TIME) */ /* N8,yymmddhh [N..4],mmoptss (Used by PROD TIME) */
static int n8_yymmddhh_n0__4_mmoptss(const unsigned char *data, const int data_len, static int n8_yymmddhh__n__4__mmoptss(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 8 && data_len <= 12 return data_len >= 8 && data_len <= 12
&& yymmddhh(data, data_len, 0, 8, 8, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && yymmddhh(data, data_len, 0, 8, 8, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -442,15 +452,15 @@ static int n8_yymmddhh_n0__4_mmoptss(const unsigned char *data, const int data_l
&& mmoptss(data, data_len, 8, 0, 4, p_err_no, p_err_posn, err_msg, 0); && mmoptss(data, data_len, 8, 0, 4, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..50 (Used by OPTSEN) */ /* X..50 (Used by OPTSEN) */
static int x1__50(const unsigned char *data, const int data_len, static int x__50(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 50 return data_len >= 1 && data_len <= 50
&& cset82(data, data_len, 0, 1, 50, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 50, p_err_no, p_err_posn, err_msg);
} }
/* C1..30,key (Used by CPID) */ /* Y..30,key (Used by CPID) */
static int c1__30_key(const unsigned char *data, const int data_len, static int y__30_key(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 30 return data_len >= 1 && data_len <= 30
&& key(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && key(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -458,8 +468,8 @@ static int c1__30_key(const unsigned char *data, const int data_len,
&& key(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg, 0); && key(data, data_len, 0, 1, 30, p_err_no, p_err_posn, err_msg, 0);
} }
/* N1..12,nozeroprefix (Used by CPID SERIAL) */ /* N..12,nozeroprefix (Used by CPID SERIAL) */
static int n1__12_nozeroprefix(const unsigned char *data, const int data_len, static int n__12_nozeroprefix(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 12 return data_len >= 1 && data_len <= 12
&& nozeroprefix(data, data_len, 0, 1, 12, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && nozeroprefix(data, data_len, 0, 1, 12, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -467,8 +477,8 @@ static int n1__12_nozeroprefix(const unsigned char *data, const int data_len,
&& nozeroprefix(data, data_len, 0, 1, 12, p_err_no, p_err_posn, err_msg, 0); && nozeroprefix(data, data_len, 0, 1, 12, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..25,csumalpha,key (Used by GMN) */ /* X..25,csumalpha,key (Used by GMN) */
static int x1__25_csumalpha_key(const unsigned char *data, const int data_len, static int x__25_csumalpha_key(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 25 return data_len >= 1 && data_len <= 25
&& csumalpha(data, data_len, 0, 1, 25, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && csumalpha(data, data_len, 0, 1, 25, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -487,22 +497,22 @@ static int n18_csum(const unsigned char *data, const int data_len,
&& csum(data, data_len, 0, 18, 18, p_err_no, p_err_posn, err_msg, 0); && csum(data, data_len, 0, 18, 18, p_err_no, p_err_posn, err_msg, 0);
} }
/* N1..10 (Used by SRIN) */ /* N..10 (Used by SRIN) */
static int n1__10(const unsigned char *data, const int data_len, static int n__10(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 10 return data_len >= 1 && data_len <= 10
&& numeric(data, data_len, 0, 1, 10, p_err_no, p_err_posn, err_msg); && numeric(data, data_len, 0, 1, 10, p_err_no, p_err_posn, err_msg);
} }
/* X1..25 (Used by REF NO.) */ /* X..25 (Used by REF NO.) */
static int x1__25(const unsigned char *data, const int data_len, static int x__25(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 25 return data_len >= 1 && data_len <= 25
&& cset82(data, data_len, 0, 1, 25, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 25, p_err_no, p_err_posn, err_msg);
} }
/* X1..70,couponcode */ /* X..70,couponcode */
static int x1__70_couponcode(const unsigned char *data, const int data_len, static int x__70_couponcode(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 70 return data_len >= 1 && data_len <= 70
&& couponcode(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && couponcode(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -510,8 +520,8 @@ static int x1__70_couponcode(const unsigned char *data, const int data_len,
&& couponcode(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 0); && couponcode(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..70,couponposoffer */ /* X..70,couponposoffer */
static int x1__70_couponposoffer(const unsigned char *data, const int data_len, static int x__70_couponposoffer(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 70 return data_len >= 1 && data_len <= 70
&& couponposoffer(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 1 /*length_only*/) && couponposoffer(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 1 /*length_only*/)
@ -519,15 +529,15 @@ static int x1__70_couponposoffer(const unsigned char *data, const int data_len,
&& couponposoffer(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 0); && couponposoffer(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg, 0);
} }
/* X1..70 (Used by PRODUCT URL) */ /* X..70 (Used by PRODUCT URL) */
static int x1__70(const unsigned char *data, const int data_len, static int x__70(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 70 return data_len >= 1 && data_len <= 70
&& cset82(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 70, p_err_no, p_err_posn, err_msg);
} }
/* X1..90 (Used by INTERNAL) */ /* X..90 (Used by INTERNAL) */
static int x1__90(const unsigned char *data, const int data_len, static int x__90(const unsigned char *data, const int data_len,
int *p_err_no, int *p_err_posn, char err_msg[50]) { int *p_err_no, int *p_err_posn, char err_msg[50]) {
return data_len >= 1 && data_len <= 90 return data_len >= 1 && data_len <= 90
&& cset82(data, data_len, 0, 1, 90, p_err_no, p_err_posn, err_msg); && cset82(data, data_len, 0, 1, 90, p_err_no, p_err_posn, err_msg);
@ -549,7 +559,7 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
return n14_csum_key(data, data_len, p_err_no, p_err_posn, err_msg); return n14_csum_key(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 10 || ai == 21 || ai == 22) { if (ai == 10 || ai == 21 || ai == 22) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if ((ai >= 11 && ai <= 13) || (ai >= 15 && ai <= 17)) { if ((ai >= 11 && ai <= 13) || (ai >= 15 && ai <= 17)) {
return n6_yymmd0(data, data_len, p_err_no, p_err_posn, err_msg); return n6_yymmd0(data, data_len, p_err_no, p_err_posn, err_msg);
@ -558,43 +568,43 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
return n2(data, data_len, p_err_no, p_err_posn, err_msg); return n2(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 30 || ai == 37) { if (ai == 30 || ai == 37) {
return n1__8(data, data_len, p_err_no, p_err_posn, err_msg); return n__8(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 90) { if (ai == 90) {
return x1__30(data, data_len, p_err_no, p_err_posn, err_msg); return x__30(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai >= 91) { if (ai >= 91) {
return x1__90(data, data_len, p_err_no, p_err_posn, err_msg); return x__90(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} else if (ai < 300) { } else if (ai < 300) {
if (ai == 235) { if (ai == 235) {
return x1__28(data, data_len, p_err_no, p_err_posn, err_msg); return x__28(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 240 || ai == 241 || ai == 250 || ai == 251) { if (ai == 240 || ai == 241 || ai == 250 || ai == 251) {
return x1__30(data, data_len, p_err_no, p_err_posn, err_msg); return x__30(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 242) { if (ai == 242) {
return n1__6(data, data_len, p_err_no, p_err_posn, err_msg); return n__6(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 243 || ai == 254) { if (ai == 243 || ai == 254) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 253) { if (ai == 253) {
return n13_csum_key_x0__17(data, data_len, p_err_no, p_err_posn, err_msg); return n13_csum_key__x__17_(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 255) { if (ai == 255) {
return n13_csum_key_n0__12(data, data_len, p_err_no, p_err_posn, err_msg); return n13_csum_key__n__12_(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} else if (ai < 500) { } else if (ai < 500) {
if (ai == 400 || ai == 403) { if (ai == 400 || ai == 403) {
return x1__30(data, data_len, p_err_no, p_err_posn, err_msg); return x__30(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 401) { if (ai == 401) {
return x1__30_key(data, data_len, p_err_no, p_err_posn, err_msg); return x__30_key(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 402) { if (ai == 402) {
return n17_csum_key(data, data_len, p_err_no, p_err_posn, err_msg); return n17_csum_key(data, data_len, p_err_no, p_err_posn, err_msg);
@ -603,25 +613,25 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
return n13_csum_key(data, data_len, p_err_no, p_err_posn, err_msg); return n13_csum_key(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 420) { if (ai == 420) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 421) { if (ai == 421) {
return n3_iso3166_x1__9(data, data_len, p_err_no, p_err_posn, err_msg); return n3_iso3166_x__9(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 422 || ai == 424 || ai == 426) { if (ai == 422 || ai == 424 || ai == 426) {
return n3_iso3166(data, data_len, p_err_no, p_err_posn, err_msg); return n3_iso3166(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 423 || ai == 425) { if (ai == 423 || ai == 425) {
return n3__15_iso3166list(data, data_len, p_err_no, p_err_posn, err_msg); return n__15_iso3166list(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 427) { if (ai == 427) {
return x1__3(data, data_len, p_err_no, p_err_posn, err_msg); return x__3(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} else if (ai < 800) { } else if (ai < 800) {
if (ai >= 710 && ai <= 715) { if (ai >= 710 && ai <= 715) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} else if (ai < 3200) { } else if (ai < 3200) {
@ -675,10 +685,10 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
} else if (ai < 4000) { } else if (ai < 4000) {
if ((ai >= 3900 && ai <= 3909) || (ai >= 3920 && ai <= 3929)) { if ((ai >= 3900 && ai <= 3909) || (ai >= 3920 && ai <= 3929)) {
return n1__15(data, data_len, p_err_no, p_err_posn, err_msg); return n__15(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if ((ai >= 3910 && ai <= 3919) || (ai >= 3930 && ai <= 3939)) { if ((ai >= 3910 && ai <= 3919) || (ai >= 3930 && ai <= 3939)) {
return n3_iso4217_n1__15(data, data_len, p_err_no, p_err_posn, err_msg); return n3_iso4217_n__15(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai >= 3940 && ai <= 3943) { if (ai >= 3940 && ai <= 3943) {
return n4(data, data_len, p_err_no, p_err_posn, err_msg); return n4(data, data_len, p_err_no, p_err_posn, err_msg);
@ -690,19 +700,22 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
} else if (ai < 4400) { } else if (ai < 4400) {
if (ai == 4300 || ai == 4301 || ai == 4310 || ai == 4311 || ai == 4320) { if (ai == 4300 || ai == 4301 || ai == 4310 || ai == 4311 || ai == 4320) {
return x1__35_pcenc(data, data_len, p_err_no, p_err_posn, err_msg); return x__35_pcenc(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if ((ai >= 4302 && ai <= 4306) || (ai >= 4312 && ai <= 4316)) { if ((ai >= 4302 && ai <= 4306) || (ai >= 4312 && ai <= 4316)) {
return x1__70_pcenc(data, data_len, p_err_no, p_err_posn, err_msg); return x__70_pcenc(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 4307 || ai == 4317) { if (ai == 4307 || ai == 4317) {
return x2_iso3166alpha2(data, data_len, p_err_no, p_err_posn, err_msg); return x2_iso3166alpha2(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 4308 || ai == 4319) { if (ai == 4308 || ai == 4319) {
return x1__30(data, data_len, p_err_no, p_err_posn, err_msg); return x__30(data, data_len, p_err_no, p_err_posn, err_msg);
}
if (ai == 4309) {
return n20_latlong(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 4318) { if (ai == 4318) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai >= 4321 && ai <= 4323) { if (ai >= 4321 && ai <= 4323) {
return n1_yesno(data, data_len, p_err_no, p_err_posn, err_msg); return n1_yesno(data, data_len, p_err_no, p_err_posn, err_msg);
@ -720,40 +733,40 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
return n13(data, data_len, p_err_no, p_err_posn, err_msg); return n13(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7002) { if (ai == 7002) {
return x1__30(data, data_len, p_err_no, p_err_posn, err_msg); return x__30(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7003) { if (ai == 7003) {
return n6_yymmdd_n4_hhmm(data, data_len, p_err_no, p_err_posn, err_msg); return n6_yymmdd_n4_hhmm(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7004) { if (ai == 7004) {
return n1__4(data, data_len, p_err_no, p_err_posn, err_msg); return n__4(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7005) { if (ai == 7005) {
return x1__12(data, data_len, p_err_no, p_err_posn, err_msg); return x__12(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7006) { if (ai == 7006) {
return n6_yymmdd(data, data_len, p_err_no, p_err_posn, err_msg); return n6_yymmdd(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7007) { if (ai == 7007) {
return n6_yymmdd_n0__6_yymmdd(data, data_len, p_err_no, p_err_posn, err_msg); return n6_yymmdd__n6__yymmdd(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7008) { if (ai == 7008) {
return x1__3(data, data_len, p_err_no, p_err_posn, err_msg); return x__3(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7009) { if (ai == 7009) {
return x1__10(data, data_len, p_err_no, p_err_posn, err_msg); return x__10(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7010) { if (ai == 7010) {
return x1__2(data, data_len, p_err_no, p_err_posn, err_msg); return x__2(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai >= 7020 && ai <= 7022) { if (ai >= 7020 && ai <= 7022) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7023) { if (ai == 7023) {
return x1__30_key(data, data_len, p_err_no, p_err_posn, err_msg); return x__30_key(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai >= 7030 && ai <= 7039) { if (ai >= 7030 && ai <= 7039) {
return n3_iso3166999_x1__27(data, data_len, p_err_no, p_err_posn, err_msg); return n3_iso3166999_x__27(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7040) { if (ai == 7040) {
return n1_x1_x1_x1_importeridx(data, data_len, p_err_no, p_err_posn, err_msg); return n1_x1_x1_x1_importeridx(data, data_len, p_err_no, p_err_posn, err_msg);
@ -762,10 +775,10 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
} else if (ai < 7300) { } else if (ai < 7300) {
if (ai >= 7230 && ai <= 7239) { if (ai >= 7230 && ai <= 7239) {
return x2_x1__28(data, data_len, p_err_no, p_err_posn, err_msg); return x2_x__28(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 7240) { if (ai == 7240) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} else if (ai < 8100) { } else if (ai < 8100) {
@ -774,13 +787,13 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
return n4_nonzero_n5_nonzero_n3_nonzero_n1_winding_n1(data, data_len, p_err_no, p_err_posn, err_msg); return n4_nonzero_n5_nonzero_n3_nonzero_n1_winding_n1(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8002 || ai == 8012) { if (ai == 8002 || ai == 8012) {
return x1__20(data, data_len, p_err_no, p_err_posn, err_msg); return x__20(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8003) { if (ai == 8003) {
return n1_zero_n13_csum_key_x0__16(data, data_len, p_err_no, p_err_posn, err_msg); return n1_zero_n13_csum_key__x__16_(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8004) { if (ai == 8004) {
return x1__30_key(data, data_len, p_err_no, p_err_posn, err_msg); return x__30_key(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8005) { if (ai == 8005) {
return n6(data, data_len, p_err_no, p_err_posn, err_msg); return n6(data, data_len, p_err_no, p_err_posn, err_msg);
@ -789,49 +802,49 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
return n14_csum_n4_pieceoftotal(data, data_len, p_err_no, p_err_posn, err_msg); return n14_csum_n4_pieceoftotal(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8007) { if (ai == 8007) {
return x1__34_iban(data, data_len, p_err_no, p_err_posn, err_msg); return x__34_iban(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8008) { if (ai == 8008) {
return n8_yymmddhh_n0__4_mmoptss(data, data_len, p_err_no, p_err_posn, err_msg); return n8_yymmddhh__n__4__mmoptss(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8009) { if (ai == 8009) {
return x1__50(data, data_len, p_err_no, p_err_posn, err_msg); return x__50(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8010) { if (ai == 8010) {
return c1__30_key(data, data_len, p_err_no, p_err_posn, err_msg); return y__30_key(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8011) { if (ai == 8011) {
return n1__12_nozeroprefix(data, data_len, p_err_no, p_err_posn, err_msg); return n__12_nozeroprefix(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8013) { if (ai == 8013) {
return x1__25_csumalpha_key(data, data_len, p_err_no, p_err_posn, err_msg); return x__25_csumalpha_key(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8017 || ai == 8018) { if (ai == 8017 || ai == 8018) {
return n18_csum(data, data_len, p_err_no, p_err_posn, err_msg); return n18_csum(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8019) { if (ai == 8019) {
return n1__10(data, data_len, p_err_no, p_err_posn, err_msg); return n__10(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8020) { if (ai == 8020) {
return x1__25(data, data_len, p_err_no, p_err_posn, err_msg); return x__25(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} else if (ai < 8200) { } else if (ai < 8200) {
if (ai == 8110) { if (ai == 8110) {
return x1__70_couponcode(data, data_len, p_err_no, p_err_posn, err_msg); return x__70_couponcode(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8111) { if (ai == 8111) {
return n4(data, data_len, p_err_no, p_err_posn, err_msg); return n4(data, data_len, p_err_no, p_err_posn, err_msg);
} }
if (ai == 8112) { if (ai == 8112) {
return x1__70_couponposoffer(data, data_len, p_err_no, p_err_posn, err_msg); return x__70_couponposoffer(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} else if (ai < 8300) { } else if (ai < 8300) {
if (ai == 8200) { if (ai == 8200) {
return x1__70(data, data_len, p_err_no, p_err_posn, err_msg); return x__70(data, data_len, p_err_no, p_err_posn, err_msg);
} }
} }
@ -840,4 +853,4 @@ static int gs1_lint(const int ai, const unsigned char *data, const int data_len,
return 0; return 0;
} }
#endif /* GS1_LINT_H */ #endif /* Z_GS1_LINT_H */

View File

@ -3,7 +3,7 @@
*/ */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2021 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2021-2022 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
@ -30,9 +30,10 @@
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. SUCH DAMAGE.
*/ */
/* SPDX-License-Identifier: BSD-3-Clause */
#ifndef ISO4217_H #ifndef Z_ISO4217_H
#define ISO4217_H #define Z_ISO4217_H
/* Whether ISO 4217-1 numeric */ /* Whether ISO 4217-1 numeric */
static int iso4217_numeric(int cc) { static int iso4217_numeric(int cc) {
@ -51,7 +52,7 @@ static int iso4217_numeric(int cc) {
0x45, 0x00, 0x00, 0x01, 0x00, 0x10, 0x11, 0x11, 0x45, 0x00, 0x00, 0x01, 0x00, 0x10, 0x11, 0x11,
0x00, 0x11, 0x11, 0x00, 0x81, 0x00, 0x04, 0x04, 0x00, 0x11, 0x11, 0x00, 0x81, 0x00, 0x04, 0x04,
0x04, 0x01, 0x00, 0x14, 0x00, 0x00, 0x44, 0x00, 0x04, 0x01, 0x00, 0x14, 0x00, 0x00, 0x44, 0x00,
0x20, 0x00, 0x00, 0x80, 0x7F, 0xB5, 0xFD, 0xFB, 0x20, 0x00, 0x00, 0xA0, 0x7F, 0xB5, 0xFD, 0xFB,
0xBF, 0xBF, 0x3F, 0x47, 0xA4, 0xBF, 0xBF, 0x3F, 0x47, 0xA4,
}; };
int b = cc >> 3; int b = cc >> 3;
@ -62,4 +63,4 @@ static int iso4217_numeric(int cc) {
return codes[b] & (1 << (cc & 0x7)) ? 1 : 0; return codes[b] & (1 << (cc & 0x7)) ? 1 : 0;
} }
#endif /* ISO4217_H */ #endif /* Z_ISO4217_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2021 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2021-2022 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
@ -27,7 +27,7 @@
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. SUCH DAMAGE.
*/ */
/* vim: set ts=4 sw=4 et : */ /* SPDX-License-Identifier: BSD-3-Clause */
#include "testcommon.h" #include "testcommon.h"
#include "../iso4217.h" #include "../iso4217.h"
@ -38,7 +38,7 @@ static void test_numeric(int index) {
int data; int data;
int ret; int ret;
}; };
// s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
struct item data[] = { struct item data[] = {
/* 0*/ { -1, 0 }, /* 0*/ { -1, 0 },
/* 1*/ { 0, 0 }, /* 1*/ { 0, 0 },
@ -350,82 +350,84 @@ static void test_numeric(int index) {
/*307*/ { 900, 0 }, /*307*/ { 900, 0 },
/*308*/ { 901, 1 }, /*308*/ { 901, 1 },
/*309*/ { 902, 0 }, /*309*/ { 902, 0 },
/*310*/ { 926, 0 }, /*310*/ { 924, 0 },
/*311*/ { 927, 1 }, /*311*/ { 925, 1 },
/*312*/ { 928, 1 }, /*312*/ { 926, 0 },
/*313*/ { 929, 1 }, /*313*/ { 927, 1 },
/*314*/ { 930, 1 }, /*314*/ { 928, 1 },
/*315*/ { 931, 1 }, /*315*/ { 929, 1 },
/*316*/ { 932, 1 }, /*316*/ { 930, 1 },
/*317*/ { 933, 1 }, /*317*/ { 931, 1 },
/*318*/ { 934, 1 }, /*318*/ { 932, 1 },
/*319*/ { 935, 0 }, /*319*/ { 933, 1 },
/*320*/ { 936, 1 }, /*320*/ { 934, 1 },
/*321*/ { 937, 0 }, /*321*/ { 935, 0 },
/*322*/ { 938, 1 }, /*322*/ { 936, 1 },
/*323*/ { 939, 0 }, /*323*/ { 937, 0 },
/*324*/ { 940, 1 }, /*324*/ { 938, 1 },
/*325*/ { 941, 1 }, /*325*/ { 939, 0 },
/*326*/ { 942, 0 }, /*326*/ { 940, 1 },
/*327*/ { 943, 1 }, /*327*/ { 941, 1 },
/*328*/ { 944, 1 }, /*328*/ { 942, 0 },
/*329*/ { 945, 0 }, /*329*/ { 943, 1 },
/*330*/ { 946, 1 }, /*330*/ { 944, 1 },
/*331*/ { 947, 1 }, /*331*/ { 945, 0 },
/*332*/ { 948, 1 }, /*332*/ { 946, 1 },
/*333*/ { 949, 1 }, /*333*/ { 947, 1 },
/*334*/ { 950, 1 }, /*334*/ { 948, 1 },
/*335*/ { 951, 1 }, /*335*/ { 949, 1 },
/*336*/ { 952, 1 }, /*336*/ { 950, 1 },
/*337*/ { 953, 1 }, /*337*/ { 951, 1 },
/*338*/ { 954, 0 }, /*338*/ { 952, 1 },
/*339*/ { 955, 1 }, /*339*/ { 953, 1 },
/*340*/ { 956, 1 }, /*340*/ { 954, 0 },
/*341*/ { 957, 1 }, /*341*/ { 955, 1 },
/*342*/ { 958, 1 }, /*342*/ { 956, 1 },
/*343*/ { 959, 1 }, /*343*/ { 957, 1 },
/*344*/ { 960, 1 }, /*344*/ { 958, 1 },
/*345*/ { 961, 1 }, /*345*/ { 959, 1 },
/*346*/ { 962, 1 }, /*346*/ { 960, 1 },
/*347*/ { 963, 1 }, /*347*/ { 961, 1 },
/*348*/ { 964, 1 }, /*348*/ { 962, 1 },
/*349*/ { 965, 1 }, /*349*/ { 963, 1 },
/*350*/ { 966, 0 }, /*350*/ { 964, 1 },
/*351*/ { 967, 1 }, /*351*/ { 965, 1 },
/*352*/ { 968, 1 }, /*352*/ { 966, 0 },
/*353*/ { 969, 1 }, /*353*/ { 967, 1 },
/*354*/ { 970, 1 }, /*354*/ { 968, 1 },
/*355*/ { 971, 1 }, /*355*/ { 969, 1 },
/*356*/ { 972, 1 }, /*356*/ { 970, 1 },
/*357*/ { 973, 1 }, /*357*/ { 971, 1 },
/*358*/ { 974, 0 }, /*358*/ { 972, 1 },
/*359*/ { 975, 1 }, /*359*/ { 973, 1 },
/*360*/ { 976, 1 }, /*360*/ { 974, 0 },
/*361*/ { 977, 1 }, /*361*/ { 975, 1 },
/*362*/ { 978, 1 }, /*362*/ { 976, 1 },
/*363*/ { 979, 1 }, /*363*/ { 977, 1 },
/*364*/ { 980, 1 }, /*364*/ { 978, 1 },
/*365*/ { 981, 1 }, /*365*/ { 979, 1 },
/*366*/ { 982, 0 }, /*366*/ { 980, 1 },
/*367*/ { 983, 0 }, /*367*/ { 981, 1 },
/*368*/ { 984, 1 }, /*368*/ { 982, 0 },
/*369*/ { 985, 1 }, /*369*/ { 983, 0 },
/*370*/ { 986, 1 }, /*370*/ { 984, 1 },
/*371*/ { 987, 0 }, /*371*/ { 985, 1 },
/*372*/ { 988, 0 }, /*372*/ { 986, 1 },
/*373*/ { 989, 0 }, /*373*/ { 987, 0 },
/*374*/ { 990, 1 }, /*374*/ { 988, 0 },
/*375*/ { 991, 0 }, /*375*/ { 989, 0 },
/*376*/ { 992, 0 }, /*376*/ { 990, 1 },
/*377*/ { 993, 0 }, /*377*/ { 991, 0 },
/*378*/ { 994, 1 }, /*378*/ { 992, 0 },
/*379*/ { 995, 0 }, /*379*/ { 993, 0 },
/*380*/ { 996, 0 }, /*380*/ { 994, 1 },
/*381*/ { 997, 1 }, /*381*/ { 995, 0 },
/*382*/ { 998, 0 }, /*382*/ { 996, 0 },
/*383*/ { 999, 1 }, /*383*/ { 997, 1 },
/*384*/ { 1000, 0 }, /*384*/ { 998, 0 },
/*385*/ { 2000, 0 }, /*385*/ { 999, 1 },
/*386*/ { 1000, 0 },
/*387*/ { 2000, 0 },
}; };
int data_size = ARRAY_SIZE(data); int data_size = ARRAY_SIZE(data);
int i, ret; int i, ret;
@ -445,7 +447,7 @@ static void test_numeric(int index) {
/* Binary chop version: Whether ISO 4217 numeric */ /* Binary chop version: Whether ISO 4217 numeric */
static int bc_iso4217_numeric(int cc) { static int bc_iso4217_numeric(int cc) {
static const short codes[179] = { static const short codes[180] = {
/*ALL*/ 8, /*DZD*/ 12, /*ARS*/ 32, /*AUD*/ 36, /*BSD*/ 44, /*BHD*/ 48, /*BDT*/ 50, /*AMD*/ 51, /*BBD*/ 52, /*BMD*/ 60, /*ALL*/ 8, /*DZD*/ 12, /*ARS*/ 32, /*AUD*/ 36, /*BSD*/ 44, /*BHD*/ 48, /*BDT*/ 50, /*AMD*/ 51, /*BBD*/ 52, /*BMD*/ 60,
/*BTN*/ 64, /*BOB*/ 68, /*BWP*/ 72, /*BZD*/ 84, /*SBD*/ 90, /*BND*/ 96, /*MMK*/ 104, /*BIF*/ 108, /*KHR*/ 116, /*CAD*/ 124, /*BTN*/ 64, /*BOB*/ 68, /*BWP*/ 72, /*BZD*/ 84, /*SBD*/ 90, /*BND*/ 96, /*MMK*/ 104, /*BIF*/ 108, /*KHR*/ 116, /*CAD*/ 124,
/*CVE*/ 132, /*KYD*/ 136, /*LKR*/ 144, /*CLP*/ 152, /*CNY*/ 156, /*COP*/ 170, /*KMF*/ 174, /*CRC*/ 188, /*HRK*/ 191, /*CUP*/ 192, /*CVE*/ 132, /*KYD*/ 136, /*LKR*/ 144, /*CLP*/ 152, /*CNY*/ 156, /*COP*/ 170, /*KMF*/ 174, /*CRC*/ 188, /*HRK*/ 191, /*CUP*/ 192,
@ -458,12 +460,12 @@ static int bc_iso4217_numeric(int cc) {
/*PYG*/ 600, /*PEN*/ 604, /*PHP*/ 608, /*QAR*/ 634, /*RUB*/ 643, /*RWF*/ 646, /*SHP*/ 654, /*SAR*/ 682, /*SCR*/ 690, /*SLL*/ 694, /*PYG*/ 600, /*PEN*/ 604, /*PHP*/ 608, /*QAR*/ 634, /*RUB*/ 643, /*RWF*/ 646, /*SHP*/ 654, /*SAR*/ 682, /*SCR*/ 690, /*SLL*/ 694,
/*SGD*/ 702, /*VND*/ 704, /*SOS*/ 706, /*ZAR*/ 710, /*SSP*/ 728, /*SZL*/ 748, /*SEK*/ 752, /*CHF*/ 756, /*SYP*/ 760, /*THB*/ 764, /*SGD*/ 702, /*VND*/ 704, /*SOS*/ 706, /*ZAR*/ 710, /*SSP*/ 728, /*SZL*/ 748, /*SEK*/ 752, /*CHF*/ 756, /*SYP*/ 760, /*THB*/ 764,
/*TOP*/ 776, /*TTD*/ 780, /*AED*/ 784, /*TND*/ 788, /*UGX*/ 800, /*MKD*/ 807, /*EGP*/ 818, /*GBP*/ 826, /*TZS*/ 834, /*USD*/ 840, /*TOP*/ 776, /*TTD*/ 780, /*AED*/ 784, /*TND*/ 788, /*UGX*/ 800, /*MKD*/ 807, /*EGP*/ 818, /*GBP*/ 826, /*TZS*/ 834, /*USD*/ 840,
/*UYU*/ 858, /*UZS*/ 860, /*WST*/ 882, /*YER*/ 886, /*TWD*/ 901, /*UYW*/ 927, /*VES*/ 928, /*MRU*/ 929, /*STN*/ 930, /*CUC*/ 931, /*UYU*/ 858, /*UZS*/ 860, /*WST*/ 882, /*YER*/ 886, /*TWD*/ 901, /*SLE*/ 925, /*UYW*/ 927, /*VES*/ 928, /*MRU*/ 929, /*STN*/ 930,
/*ZWL*/ 932, /*BYN*/ 933, /*TMT*/ 934, /*GHS*/ 936, /*SDG*/ 938, /*UYI*/ 940, /*RSD*/ 941, /*MZN*/ 943, /*AZN*/ 944, /*RON*/ 946, /*CUC*/ 931, /*ZWL*/ 932, /*BYN*/ 933, /*TMT*/ 934, /*GHS*/ 936, /*SDG*/ 938, /*UYI*/ 940, /*RSD*/ 941, /*MZN*/ 943, /*AZN*/ 944,
/*CHE*/ 947, /*CHW*/ 948, /*TRY*/ 949, /*XAF*/ 950, /*XCD*/ 951, /*XOF*/ 952, /*XPF*/ 953, /*XBA*/ 955, /*XBB*/ 956, /*XBC*/ 957, /*RON*/ 946, /*CHE*/ 947, /*CHW*/ 948, /*TRY*/ 949, /*XAF*/ 950, /*XCD*/ 951, /*XOF*/ 952, /*XPF*/ 953, /*XBA*/ 955, /*XBB*/ 956,
/*XBD*/ 958, /*XAU*/ 959, /*XDR*/ 960, /*XAG*/ 961, /*XPT*/ 962, /*XTS*/ 963, /*XPD*/ 964, /*XUA*/ 965, /*ZMW*/ 967, /*SRD*/ 968, /*XBC*/ 957, /*XBD*/ 958, /*XAU*/ 959, /*XDR*/ 960, /*XAG*/ 961, /*XPT*/ 962, /*XTS*/ 963, /*XPD*/ 964, /*XUA*/ 965, /*ZMW*/ 967,
/*MGA*/ 969, /*COU*/ 970, /*AFN*/ 971, /*TJS*/ 972, /*AOA*/ 973, /*BGN*/ 975, /*CDF*/ 976, /*BAM*/ 977, /*EUR*/ 978, /*MXV*/ 979, /*SRD*/ 968, /*MGA*/ 969, /*COU*/ 970, /*AFN*/ 971, /*TJS*/ 972, /*AOA*/ 973, /*BGN*/ 975, /*CDF*/ 976, /*BAM*/ 977, /*EUR*/ 978,
/*UAH*/ 980, /*GEL*/ 981, /*BOV*/ 984, /*PLN*/ 985, /*BRL*/ 986, /*CLF*/ 990, /*XSU*/ 994, /*USN*/ 997, /*XXX*/ 999, /*MXV*/ 979, /*UAH*/ 980, /*GEL*/ 981, /*BOV*/ 984, /*PLN*/ 985, /*BRL*/ 986, /*CLF*/ 990, /*XSU*/ 994, /*USN*/ 997, /*XXX*/ 999,
}; };
int s = 0, e = ARRAY_SIZE(codes) - 1; int s = 0, e = ARRAY_SIZE(codes) - 1;
@ -510,3 +512,5 @@ int main(int argc, char *argv[]) {
return 0; return 0;
} }
/* vim: set ts=4 sw=4 et : */

View File

@ -1,6 +1,6 @@
--- /home/mburke/code/bwipp/postscriptbarcode/build/monolithic/barcode.ps 2022-07-08 18:34:14.221029287 +0100 --- /home/mburke/code/bwipp/postscriptbarcode/build/monolithic/barcode.ps 2022-07-14 20:00:40.532978330 +0100
+++ backend/tests/tools/bwipp_dump.ps 2022-07-08 18:29:43.830028306 +0100 +++ backend/tests/tools/bwipp_dump.ps 2022-07-14 20:17:25.203302237 +0100
@@ -15706,8 +15706,8 @@ @@ -16606,8 +16606,8 @@
} bind } bind
/fime { /fime {
/sbs [2.25 6.75 2.25 15.75 2.25 6.75 2.25] def /sbs [2.25 6.75 2.25 15.75 2.25 6.75 2.25] def
@ -11,7 +11,7 @@
} bind } bind
>> def >> def
@@ -27194,34 +27194,80 @@ @@ -28094,34 +28094,80 @@
pop pop
} ifelse } ifelse
@ -111,7 +111,7 @@
end end
@@ -27281,7 +27327,7 @@ @@ -28181,7 +28227,7 @@
pop pop
} ifelse } ifelse
@ -120,7 +120,7 @@
% Get the result of encoding with ean8 and gs1-cc % Get the result of encoding with ean8 and gs1-cc
options (lintype) (ean8) put options (lintype) (ean8) put
@@ -27289,29 +27335,75 @@ @@ -28189,29 +28235,75 @@
options (dontdraw) true put options (dontdraw) true put
% Plot the linear part % Plot the linear part
@ -216,7 +216,7 @@
end end
@@ -27371,34 +27463,80 @@ @@ -28271,34 +28363,80 @@
pop pop
} ifelse } ifelse
@ -316,7 +316,7 @@
end end
@@ -27473,34 +27611,80 @@ @@ -28373,34 +28511,80 @@
/opt options /opt options
>> def >> def
@ -416,7 +416,7 @@
end end
@@ -27560,7 +27744,7 @@ @@ -28460,7 +28644,7 @@
pop pop
} ifelse } ifelse
@ -425,7 +425,7 @@
options (lintype) (databaromni) put options (lintype) (databaromni) put
options (linkage) true put options (linkage) true put
@@ -27571,7 +27755,7 @@ @@ -28471,7 +28655,7 @@
linear options //databaromni exec linear options //databaromni exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -434,7 +434,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -27602,20 +27786,66 @@ @@ -28502,20 +28686,66 @@
sep 0 [0 0 0] putinterval sep 0 [0 0 0] putinterval
sep sep length 4 sub [0 0 0 0] putinterval sep sep length 4 sub [0 0 0 0] putinterval
18 sepfinder 64 sepfinder 18 sepfinder 64 sepfinder
@ -513,7 +513,7 @@
end end
@@ -27674,7 +27904,7 @@ @@ -28574,7 +28804,7 @@
pop pop
} ifelse } ifelse
@ -522,7 +522,7 @@
options (lintype) (databarstacked) put options (lintype) (databarstacked) put
options (linkage) true put options (linkage) true put
@@ -27685,7 +27915,7 @@ @@ -28585,7 +28815,7 @@
linear options //databarstacked exec linear options //databarstacked exec
dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
dup (pixy) get /linheight exch def dup (pixy) get /linheight exch def
@ -531,7 +531,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -27713,20 +27943,52 @@ @@ -28613,20 +28843,52 @@
sep 0 [ 0 0 0 0 ] putinterval sep 0 [ 0 0 0 0 ] putinterval
sep sep length 4 sub [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval
18 sepfinder 18 sepfinder
@ -596,7 +596,7 @@
end end
@@ -27785,7 +28047,7 @@ @@ -28685,7 +28947,7 @@
pop pop
} ifelse } ifelse
@ -605,7 +605,7 @@
options (lintype) (databarstackedomni) put options (lintype) (databarstackedomni) put
options (linkage) true put options (linkage) true put
@@ -27796,7 +28058,7 @@ @@ -28696,7 +28958,7 @@
linear options //databarstackedomni exec linear options //databarstackedomni exec
dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
dup (pixy) get /linheight exch def dup (pixy) get /linheight exch def
@ -614,7 +614,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -27824,20 +28086,52 @@ @@ -28724,20 +28986,52 @@
sep 0 [ 0 0 0 0 ] putinterval sep 0 [ 0 0 0 0 ] putinterval
sep sep length 4 sub [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval
18 sepfinder 18 sepfinder
@ -679,7 +679,7 @@
end end
@@ -28012,7 +28306,7 @@ @@ -28912,7 +29206,7 @@
pop pop
} ifelse } ifelse
@ -688,7 +688,7 @@
options (lintype) (databarlimited) put options (lintype) (databarlimited) put
options (linkage) true put options (linkage) true put
@@ -28023,7 +28317,7 @@ @@ -28923,7 +29217,7 @@
linear options //databarlimited exec linear options //databarlimited exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -697,7 +697,7 @@
% Plot the separator % Plot the separator
mark mark
@@ -28031,22 +28325,68 @@ @@ -28931,22 +29225,68 @@
counttomark 1 sub array astore /sep exch def pop pop counttomark 1 sub array astore /sep exch def pop pop
sep 0 [0 0 0] putinterval sep 0 [0 0 0] putinterval
sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces
@ -780,7 +780,7 @@
end end
@@ -28106,7 +28446,7 @@ @@ -29006,7 +29346,7 @@
pop pop
} ifelse } ifelse
@ -789,7 +789,7 @@
options (lintype) (databarexpanded) put options (lintype) (databarexpanded) put
options (linkage) true put options (linkage) true put
@@ -28117,7 +28457,7 @@ @@ -29017,7 +29357,7 @@
linear options //databarexpanded exec linear options //databarexpanded exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -798,7 +798,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -28146,20 +28486,60 @@ @@ -29046,20 +29386,60 @@
18 98 bot length 13 sub {} for 18 98 bot length 13 sub {} for
69 98 bot length 13 sub {} for 69 98 bot length 13 sub {} for
] {sepfinder} forall ] {sepfinder} forall
@ -871,7 +871,7 @@
end end
@@ -28218,7 +28598,7 @@ @@ -29118,7 +29498,7 @@
pop pop
} ifelse } ifelse
@ -880,7 +880,7 @@
options (lintype) (databarexpandedstacked) put options (lintype) (databarexpandedstacked) put
options (linkage) true put options (linkage) true put
@@ -28229,7 +28609,7 @@ @@ -29129,7 +29509,7 @@
linear options //databarexpandedstacked exec linear options //databarexpandedstacked exec
dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
dup (pixy) get /linheight exch def dup (pixy) get /linheight exch def
@ -889,7 +889,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -28255,21 +28635,49 @@ @@ -29155,21 +29535,49 @@
19 98 bot length 13 sub {} for 19 98 bot length 13 sub {} for
70 98 bot length 13 sub {} for 70 98 bot length 13 sub {} for
] {sepfinder} forall ] {sepfinder} forall
@ -952,7 +952,7 @@
end end
@@ -28329,7 +28737,7 @@ @@ -29229,7 +29637,7 @@
pop pop
} ifelse } ifelse
@ -961,7 +961,7 @@
options (inkspread) (0) put options (inkspread) (0) put
options (dontdraw) true put options (dontdraw) true put
@@ -28356,35 +28764,87 @@ @@ -29256,35 +29664,87 @@
linear << options {} forall >> //gs1-128 exec linear << options {} forall >> //gs1-128 exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -1063,7 +1063,7 @@
end end
@@ -29934,3 +30394,189 @@ @@ -30834,3 +31294,189 @@
% --END ENCODER hibcazteccode-- % --END ENCODER hibcazteccode--
% --END TEMPLATE-- % --END TEMPLATE--

View File

@ -2,8 +2,10 @@
/* Generate GS1 verify include "backend/gs1_lint.h" for "backend/gs1.c" */ /* Generate GS1 verify include "backend/gs1_lint.h" for "backend/gs1.c" */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2021 <rstuart114@gmail.com> Copyright (C) 2021-2022 <rstuart114@gmail.com>
*/ */
/* SPDX-License-Identifier: BSD-3-Clause */
/* To create "backend/gs1_lint.h" (from project directory): /* To create "backend/gs1_lint.h" (from project directory):
* *
* php backend/tools/gen_gs1_lint.php > backend/gs1_lint.h * php backend/tools/gen_gs1_lint.php > backend/gs1_lint.h
@ -12,8 +14,12 @@
* *
* php backend/tools/gen_gs1_lint.php -f <local-path>/gs1-format-spec.txt backend/gs1_lint.h * php backend/tools/gen_gs1_lint.php -f <local-path>/gs1-format-spec.txt backend/gs1_lint.h
* *
*************************************************************************************************
* NOTE: for up-to-update version requires syntax dictionary that will be available from
* https://github.com/gs1/gs1-syntax-dictionary
* on its release. For now this generator should only be run by someone with a pre-release copy!!!
*************************************************************************************************
*/ */
/* vim: set ts=4 sw=4 et : */
$basename = basename(__FILE__); $basename = basename(__FILE__);
$dirname = dirname(__FILE__); $dirname = dirname(__FILE__);
@ -22,8 +28,11 @@ $dirdirname = basename(dirname($dirname)) . '/' . basename($dirname);
$opts = getopt('c:f:h:l:t:'); $opts = getopt('c:f:h:l:t:');
$print_copyright = isset($opts['c']) ? (bool) $opts['c'] : true; $print_copyright = isset($opts['c']) ? (bool) $opts['c'] : true;
$file = isset($opts['f']) ? $opts['f'] : if (!isset($opts['f'])) { // TODO: temporary hack
'https://raw.githubusercontent.com/bwipp/postscriptbarcode/master/contrib/development/gs1-format-spec.txt'; exit("$basename:" . __LINE__
. " ERROR: For now this generator must only be run locally with a pre-release syntax dictionary" . PHP_EOL);
}
$file = $opts['f'];
$print_h_guard = isset($opts['h']) ? (bool) $opts['h'] : true; $print_h_guard = isset($opts['h']) ? (bool) $opts['h'] : true;
$use_length_only = isset($opts['l']) ? (bool) $opts['l'] : true; $use_length_only = isset($opts['l']) ? (bool) $opts['l'] : true;
$tab = isset($opts['t']) ? $opts['t'] : ' '; $tab = isset($opts['t']) ? $opts['t'] : ' ';
@ -31,6 +40,9 @@ $tab = isset($opts['t']) ? $opts['t'] : ' ';
if (($get = file_get_contents($file)) === false) { if (($get = file_get_contents($file)) === false) {
exit("$basename:" . __LINE__ . " ERROR: Could not read file \"$file\"" . PHP_EOL); exit("$basename:" . __LINE__ . " ERROR: Could not read file \"$file\"" . PHP_EOL);
} }
// Strip to last 2 directories TODO: temporary hack
$stripped_dir = dirname($file);
$stripped_file = basename(dirname($stripped_dir)) . '/' . basename($stripped_dir) . '/' . basename($file);
$lines = explode("\n", $get); $lines = explode("\n", $get);
@ -44,12 +56,14 @@ foreach ($lines as $line) {
if ($line === '' || $line[0] === '#') { if ($line === '' || $line[0] === '#') {
continue; continue;
} }
if (!preg_match('/^([0-9]+(?:-[0-9]+)?) +([ *] )([NXC][0-9.][ NXC0-9.,a-z=|]*)(?:# (.+))?$/', $line, $matches)) { if (!preg_match('/^([0-9]+(?:-[0-9]+)?) +([ *] )([NXYC][0-9.][ NXYC0-9.,a-z=|\[\]]*)(?:# (.+))?$/', $line, $matches)) {
exit("$basename:" . __LINE__ . " ERROR: Could not parse line $line_no" . PHP_EOL); exit("$basename:" . __LINE__ . " ERROR: Could not parse line $line_no" . PHP_EOL);
} }
$ai = $matches[1]; $ai = $matches[1];
$fixed = trim($matches[2]); $fixed = trim($matches[2]);
$spec = preg_replace('/ +dlpkey[=0-9,|]*/', '', trim($matches[3])); // Strip Digital Link primary key info $spec = preg_replace('/ +req=[0-9,n]*/', '', trim($matches[3])); // Strip mandatory association info
$spec = preg_replace('/ +ex=[0-9,n]*/', '', $spec); // Strip invalid pairings info
$spec = preg_replace('/ +dlpkey[=0-9,|]*/', '', $spec); // Strip Digital Link primary key info
$comment = isset($matches[4]) ? trim($matches[4]) : ''; $comment = isset($matches[4]) ? trim($matches[4]) : '';
if (isset($spec_ais[$spec])) { if (isset($spec_ais[$spec])) {
@ -108,22 +122,38 @@ foreach ($lines as $line) {
foreach ($parts as $part) { foreach ($parts as $part) {
$checkers = explode(',', $part); $checkers = explode(',', $part);
$validator = array_shift($checkers); $validator = array_shift($checkers);
if (!preg_match('/^([NXC])([0-9]+)?(\.\.[0-9|]+)?$/', $validator, $matches)) { if (preg_match('/^([NXYC])([0-9]+)?(\.\.[0-9|]+)?$/', $validator, $matches)) {
if (count($matches) === 3) {
$min = $max = (int) $matches[2];
} else {
$min = $matches[2] === '' ? 1 : (int) $matches[2];
$max = (int) substr($matches[3], 2);
}
if ($matches[1] === 'N') {
$validator = "numeric";
} elseif ($matches[1] === 'X') {
$validator = "cset82";
} else {
$validator = "cset39";
}
} else if (preg_match('/^\[([NXYC])([1-9]+)?(\.\.[0-9|]+)?\]$/', $validator, $matches)) {
if (count($matches) === 3) {
$min = 0;
$max = (int) $matches[2];
} else {
$min = $matches[2] === '' ? 0 : (int) $matches[2];
$max = (int) substr($matches[3], 2);
}
if ($matches[1] === 'N') {
$validator = "numeric";
} elseif ($matches[1] === 'X') {
$validator = "cset82";
} else {
$validator = "cset39";
}
} else {
exit("$basename:" . __LINE__ . " ERROR: Could not parse validator \"$validator\" line $line_no" . PHP_EOL); exit("$basename:" . __LINE__ . " ERROR: Could not parse validator \"$validator\" line $line_no" . PHP_EOL);
} }
if (count($matches) === 3) {
$min = $max = (int) $matches[2];
} else {
$min = $matches[2] === '' ? 1 : (int) $matches[2];
$max = (int) substr($matches[3], 2);
}
if ($matches[1] === 'N') {
$validator = "numeric";
} elseif ($matches[1] === 'X') {
$validator = "cset82";
} else {
$validator = "cset39";
}
$spec_parts[$spec][] = array($min, $max, $validator, $checkers); $spec_parts[$spec][] = array($min, $max, $validator, $checkers);
} }
} }
@ -196,7 +226,7 @@ foreach ($spec_ais as $spec => $ais) {
print <<<EOD print <<<EOD
/* /*
* GS1 AI checker generated by "$dirdirname/$basename" from * GS1 AI checker generated by "$dirdirname/$basename" from
* $file * $stripped_file
*/ */
EOD; EOD;
@ -205,7 +235,7 @@ if ($print_copyright) {
print <<<'EOD' print <<<'EOD'
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2021 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2021-2022 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
@ -232,6 +262,7 @@ print <<<'EOD'
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. SUCH DAMAGE.
*/ */
/* SPDX-License-Identifier: BSD-3-Clause */
EOD; EOD;
@ -239,8 +270,8 @@ EOD;
if ($print_h_guard) { if ($print_h_guard) {
print <<<'EOD' print <<<'EOD'
#ifndef GS1_LINT_H #ifndef Z_GS1_LINT_H
#define GS1_LINT_H #define Z_GS1_LINT_H
EOD; EOD;
@ -249,7 +280,7 @@ EOD;
// Print the spec validator/checkers functions // Print the spec validator/checkers functions
foreach ($spec_parts as $spec => $spec_part) { foreach ($spec_parts as $spec => $spec_part) {
$spec_funcs[$spec] = $spec_func = str_replace(array(' ', '.', ','), '_', strtolower($spec)); $spec_funcs[$spec] = $spec_func = str_replace(array(' ', '.', ',', '[', ']'), '_', strtolower($spec));
$comment = ''; $comment = '';
if (isset($spec_comments[$spec])) { if (isset($spec_comments[$spec])) {
$comment = ' (Used by'; $comment = ' (Used by';
@ -437,7 +468,9 @@ EOD;
if ($print_h_guard) { if ($print_h_guard) {
print <<<'EOD' print <<<'EOD'
#endif /* GS1_LINT_H */ #endif /* Z_GS1_LINT_H */
EOD; EOD;
} }
/* vim: set ts=4 sw=4 et : */

View File

@ -2,13 +2,14 @@
/* Generate ISO 4217 include "backend/iso4217.h" for "backend/gs1.c" */ /* Generate ISO 4217 include "backend/iso4217.h" for "backend/gs1.c" */
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2021 <rstuart114@gmail.com> Copyright (C) 2021-2022 <rstuart114@gmail.com>
*/ */
/* SPDX-License-Identifier: BSD-3-Clause */
/* To create "backend/iso4217.h" (from project directory): /* To create "backend/iso4217.h" (from project directory):
* *
* php backend/tools/gen_iso4217_h.php > backend/iso4217.h * php backend/tools/gen_iso4217_h.php > backend/iso4217.h
*/ */
/* vim: set ts=4 sw=4 et : */
$basename = basename(__FILE__); $basename = basename(__FILE__);
$dirname = dirname(__FILE__); $dirname = dirname(__FILE__);
@ -33,12 +34,12 @@ $numeric = array(
/*PYG*/ 600, /*PEN*/ 604, /*PHP*/ 608, /*QAR*/ 634, /*RUB*/ 643, /*RWF*/ 646, /*SHP*/ 654, /*SAR*/ 682, /*SCR*/ 690, /*SLL*/ 694, /*PYG*/ 600, /*PEN*/ 604, /*PHP*/ 608, /*QAR*/ 634, /*RUB*/ 643, /*RWF*/ 646, /*SHP*/ 654, /*SAR*/ 682, /*SCR*/ 690, /*SLL*/ 694,
/*SGD*/ 702, /*VND*/ 704, /*SOS*/ 706, /*ZAR*/ 710, /*SSP*/ 728, /*SZL*/ 748, /*SEK*/ 752, /*CHF*/ 756, /*SYP*/ 760, /*THB*/ 764, /*SGD*/ 702, /*VND*/ 704, /*SOS*/ 706, /*ZAR*/ 710, /*SSP*/ 728, /*SZL*/ 748, /*SEK*/ 752, /*CHF*/ 756, /*SYP*/ 760, /*THB*/ 764,
/*TOP*/ 776, /*TTD*/ 780, /*AED*/ 784, /*TND*/ 788, /*UGX*/ 800, /*MKD*/ 807, /*EGP*/ 818, /*GBP*/ 826, /*TZS*/ 834, /*USD*/ 840, /*TOP*/ 776, /*TTD*/ 780, /*AED*/ 784, /*TND*/ 788, /*UGX*/ 800, /*MKD*/ 807, /*EGP*/ 818, /*GBP*/ 826, /*TZS*/ 834, /*USD*/ 840,
/*UYU*/ 858, /*UZS*/ 860, /*WST*/ 882, /*YER*/ 886, /*TWD*/ 901, /*UYW*/ 927, /*VES*/ 928, /*MRU*/ 929, /*STN*/ 930, /*CUC*/ 931, /*UYU*/ 858, /*UZS*/ 860, /*WST*/ 882, /*YER*/ 886, /*TWD*/ 901, /*SLE*/ 925, /*UYW*/ 927, /*VES*/ 928, /*MRU*/ 929, /*STN*/ 930,
/*ZWL*/ 932, /*BYN*/ 933, /*TMT*/ 934, /*GHS*/ 936, /*SDG*/ 938, /*UYI*/ 940, /*RSD*/ 941, /*MZN*/ 943, /*AZN*/ 944, /*RON*/ 946, /*CUC*/ 931, /*ZWL*/ 932, /*BYN*/ 933, /*TMT*/ 934, /*GHS*/ 936, /*SDG*/ 938, /*UYI*/ 940, /*RSD*/ 941, /*MZN*/ 943, /*AZN*/ 944,
/*CHE*/ 947, /*CHW*/ 948, /*TRY*/ 949, /*XAF*/ 950, /*XCD*/ 951, /*XOF*/ 952, /*XPF*/ 953, /*XBA*/ 955, /*XBB*/ 956, /*XBC*/ 957, /*RON*/ 946, /*CHE*/ 947, /*CHW*/ 948, /*TRY*/ 949, /*XAF*/ 950, /*XCD*/ 951, /*XOF*/ 952, /*XPF*/ 953, /*XBA*/ 955, /*XBB*/ 956,
/*XBD*/ 958, /*XAU*/ 959, /*XDR*/ 960, /*XAG*/ 961, /*XPT*/ 962, /*XTS*/ 963, /*XPD*/ 964, /*XUA*/ 965, /*ZMW*/ 967, /*SRD*/ 968, /*XBC*/ 957, /*XBD*/ 958, /*XAU*/ 959, /*XDR*/ 960, /*XAG*/ 961, /*XPT*/ 962, /*XTS*/ 963, /*XPD*/ 964, /*XUA*/ 965, /*ZMW*/ 967,
/*MGA*/ 969, /*COU*/ 970, /*AFN*/ 971, /*TJS*/ 972, /*AOA*/ 973, /*BGN*/ 975, /*CDF*/ 976, /*BAM*/ 977, /*EUR*/ 978, /*MXV*/ 979, /*SRD*/ 968, /*MGA*/ 969, /*COU*/ 970, /*AFN*/ 971, /*TJS*/ 972, /*AOA*/ 973, /*BGN*/ 975, /*CDF*/ 976, /*BAM*/ 977, /*EUR*/ 978,
/*UAH*/ 980, /*GEL*/ 981, /*BOV*/ 984, /*PLN*/ 985, /*BRL*/ 986, /*CLF*/ 990, /*XSU*/ 994, /*USN*/ 997, /*XXX*/ 999, /*MXV*/ 979, /*UAH*/ 980, /*GEL*/ 981, /*BOV*/ 984, /*PLN*/ 985, /*BRL*/ 986, /*CLF*/ 990, /*XSU*/ 994, /*USN*/ 997, /*XXX*/ 999,
); );
$numeric_tab = array(); $numeric_tab = array();
@ -68,7 +69,7 @@ if ($print_copyright) {
print <<<'EOD' print <<<'EOD'
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2021 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2021-2022 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
@ -95,6 +96,7 @@ print <<<'EOD'
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. SUCH DAMAGE.
*/ */
/* SPDX-License-Identifier: BSD-3-Clause */
EOD; EOD;
@ -102,8 +104,8 @@ EOD;
if ($print_h_guard) { if ($print_h_guard) {
print <<<'EOD' print <<<'EOD'
#ifndef ISO4217_H #ifndef Z_ISO4217_H
#define ISO4217_H #define Z_ISO4217_H
EOD; EOD;
} }
@ -139,7 +141,9 @@ EOD;
if ($print_h_guard) { if ($print_h_guard) {
print <<<'EOD' print <<<'EOD'
#endif /* ISO4217_H */ #endif /* Z_ISO4217_H */
EOD; EOD;
} }
/* vim: set ts=4 sw=4 et : */