diff mupdf-source/thirdparty/zint/backend/zint.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/zint/backend/zint.h	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,496 @@
+/*  zint.h - definitions for libzint */
+/*
+    libzint - the open source barcode library
+    Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. Neither the name of the project nor the names of its contributors
+       may be used to endorse or promote products derived from this software
+       without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+/* SPDX-License-Identifier: BSD-3-Clause */
+
+/*
+ * Version: 2.13.0.9 (dev) (see "zintconfig.h")
+ *
+ * For documentation, see "../docs/manual.txt" or "../docs/manual.html" or online at
+ * https://zint.org.uk/manual/
+ */
+
+#ifndef ZINT_H
+#define ZINT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+    /* Vector elements - see vector header `zint_vector` below */
+    struct zint_vector_rect {
+        float x, y;         /* Top left */
+        float height, width;
+        int colour;         /* -1 for foreground, 1-8 for Cyan, Blue, Magenta, Red, Yellow, Green, Black, White */
+        struct zint_vector_rect *next; /* Pointer to next rectangle */
+    };
+
+    struct zint_vector_hexagon {
+        float x, y;         /* Centre */
+        float diameter;     /* Short (minimal) diameter (i.e. diameter of inscribed circle) */
+        int rotation;       /* 0, 90, 180, 270 degrees, where 0 has apex at top, i.e. short diameter is horizontal */
+        struct zint_vector_hexagon *next; /* Pointer to next hexagon */
+    };
+
+    struct zint_vector_string {
+        float x, y;         /* x is relative to halign (i.e. centre, left, right), y is relative to baseline */
+        float fsize;        /* Font size */
+        float width;        /* Rendered width estimate */
+        int length;         /* Number of characters (bytes) */
+        int rotation;       /* 0, 90, 180, 270 degrees */
+        int halign;         /* Horizontal alignment: 0 for centre, 1 for left, 2 for right (end) */
+        unsigned char *text; /* UTF-8, NUL-terminated */
+        struct zint_vector_string *next; /* Pointer to next string */
+    };
+
+    struct zint_vector_circle {
+        float x, y;         /* Centre */
+        float diameter;     /* Circle diameter. Does not include width (if any) */
+        float width;        /* Width of circle perimeter (circumference). 0 for fill (disc) */
+        int colour;         /* Zero for draw with foreground colour (else draw with background colour (legacy)) */
+        struct zint_vector_circle *next; /* Pointer to next circle */
+    };
+
+    /* Vector header */
+    struct zint_vector {
+        float width, height; /* Width, height of barcode image (including text, whitespace) */
+        struct zint_vector_rect *rectangles; /* Pointer to first rectangle */
+        struct zint_vector_hexagon *hexagons; /* Pointer to first hexagon */
+        struct zint_vector_string *strings; /* Pointer to first string */
+        struct zint_vector_circle *circles; /* Pointer to first circle */
+    };
+
+    /* Structured Append info (see `symbol->structapp` below) - ignored unless `zint_structapp.count` is non-zero */
+    struct zint_structapp {
+        int index;          /* Position in Structured Append sequence, 1-based. Must be <= `count` */
+        int count;          /* Number of symbols in Structured Append sequence. Set >= 2 to add SA Info */
+        char id[32];        /* Optional ID to distinguish sequence, ASCII, NUL-terminated unless max 32 long */
+    };
+
+    /* Main symbol structure */
+    struct zint_symbol {
+        int symbology;      /* Symbol to use (see BARCODE_XXX below) */
+        float height;       /* Barcode height in X-dimensions (ignored for fixed-width barcodes) */
+        float scale;        /* Scale factor when printing barcode, i.e. adjusts X-dimension. Default 1 */
+        int whitespace_width; /* Width in X-dimensions of whitespace to left & right of barcode */
+        int whitespace_height; /* Height in X-dimensions of whitespace above & below the barcode */
+        int border_width;   /* Size of border in X-dimensions */
+        int output_options; /* Various output parameters (bind, box etc, see below) */
+        char fgcolour[16];  /* Foreground as hexadecimal RGB/RGBA or decimal "C,M,Y,K" string, NUL-terminated */
+        char bgcolour[16];  /* Background as hexadecimal RGB/RGBA or decimal "C,M,Y,K" string, NUL-terminated */
+        char *fgcolor;      /* Pointer to fgcolour (alternate spelling) */
+        char *bgcolor;      /* Pointer to bgcolour (alternate spelling) */
+        char outfile[256];  /* Name of file to output to, NUL-terminated. Default "out.png" ("out.gif" if no PNG) */
+        char primary[128];  /* Primary message data (MaxiCode, Composite), NUL-terminated */
+        int option_1;       /* Symbol-specific options (see "../docs/manual.txt") */
+        int option_2;       /* Symbol-specific options */
+        int option_3;       /* Symbol-specific options */
+        int show_hrt;       /* Show (1) or hide (0) Human Readable Text (HRT). Default 1 */
+        int input_mode;     /* Encoding of input data (see DATA_MODE etc below). Default DATA_MODE */
+        int eci;            /* Extended Channel Interpretation. Default 0 (none) */
+        float dpmm;         /* Resolution of output in dots per mm (BMP/EMF/PCX/PNG/TIF only). Default 0 (none) */
+        float dot_size;     /* Size of dots used in BARCODE_DOTTY_MODE. Default 0.8 */
+        float text_gap;     /* Gap between barcode and text (HRT) in X-dimensions. Default 1 */
+        float guard_descent; /* Height in X-dimensions that EAN/UPC guard bars descend. Default 5 */
+        struct zint_structapp structapp; /* Structured Append info. Default structapp.count 0 (none) */
+        int warn_level;     /* Affects error/warning value returned by Zint API (see WARN_XXX below) */
+        int debug;          /* Debugging flags */
+        unsigned char text[256]; /* Human Readable Text (HRT) (if any), UTF-8, NUL-terminated (output only) */
+        int rows;           /* Number of rows used by the symbol (output only) */
+        int width;          /* Width of the generated symbol (output only) */
+        unsigned char encoded_data[200][144]; /* Encoded data (output only). Allows for rows of 1152 modules */
+        float row_height[200]; /* Heights of rows (output only). Allows for 200 row DotCode */
+        char errtxt[100];   /* Error message if an error or warning occurs, NUL-terminated (output only) */
+        unsigned char *bitmap; /* Stored bitmap image (raster output only) */
+        int bitmap_width;   /* Width of bitmap image (raster output only) */
+        int bitmap_height;  /* Height of bitmap image (raster output only) */
+        unsigned char *alphamap; /* Array of alpha values used (raster output only) */
+        struct zint_vector *vector; /* Pointer to vector header (vector output only) */
+        unsigned char *memfile; /* Pointer to in-memory file buffer if BARCODE_MEMORY_FILE (output only) */
+        int memfile_size;   /* Length of in-memory file buffer (output only) */
+    };
+
+    /* Segment for use with `ZBarcode_Encode_Segs()` below */
+    struct zint_seg {
+        unsigned char *source; /* Data to encode */
+        int length;         /* Length of `source`. If 0, `source` must be NUL-terminated */
+        int eci;            /* Extended Channel Interpretation */
+    };
+
+/* Symbologies (`symbol->symbology`) */
+    /* Tbarcode 7 codes */
+#define BARCODE_CODE11          1   /* Code 11 */
+#define BARCODE_C25STANDARD     2   /* 2 of 5 Standard (Matrix) */
+#define BARCODE_C25MATRIX       2   /* Legacy */
+#define BARCODE_C25INTER        3   /* 2 of 5 Interleaved */
+#define BARCODE_C25IATA         4   /* 2 of 5 IATA */
+#define BARCODE_C25LOGIC        6   /* 2 of 5 Data Logic */
+#define BARCODE_C25IND          7   /* 2 of 5 Industrial */
+#define BARCODE_CODE39          8   /* Code 39 */
+#define BARCODE_EXCODE39        9   /* Extended Code 39 */
+#define BARCODE_EANX            13  /* EAN (European Article Number) */
+#define BARCODE_EANX_CHK        14  /* EAN + Check Digit */
+#define BARCODE_GS1_128         16  /* GS1-128 */
+#define BARCODE_EAN128          16  /* Legacy */
+#define BARCODE_CODABAR         18  /* Codabar */
+#define BARCODE_CODE128         20  /* Code 128 */
+#define BARCODE_DPLEIT          21  /* Deutsche Post Leitcode */
+#define BARCODE_DPIDENT         22  /* Deutsche Post Identcode */
+#define BARCODE_CODE16K         23  /* Code 16k */
+#define BARCODE_CODE49          24  /* Code 49 */
+#define BARCODE_CODE93          25  /* Code 93 */
+#define BARCODE_FLAT            28  /* Flattermarken */
+#define BARCODE_DBAR_OMN        29  /* GS1 DataBar Omnidirectional */
+#define BARCODE_RSS14           29  /* Legacy */
+#define BARCODE_DBAR_LTD        30  /* GS1 DataBar Limited */
+#define BARCODE_RSS_LTD         30  /* Legacy */
+#define BARCODE_DBAR_EXP        31  /* GS1 DataBar Expanded */
+#define BARCODE_RSS_EXP         31  /* Legacy */
+#define BARCODE_TELEPEN         32  /* Telepen Alpha */
+#define BARCODE_UPCA            34  /* UPC-A */
+#define BARCODE_UPCA_CHK        35  /* UPC-A + Check Digit */
+#define BARCODE_UPCE            37  /* UPC-E */
+#define BARCODE_UPCE_CHK        38  /* UPC-E + Check Digit */
+#define BARCODE_POSTNET         40  /* USPS (U.S. Postal Service) POSTNET */
+#define BARCODE_MSI_PLESSEY     47  /* MSI Plessey */
+#define BARCODE_FIM             49  /* Facing Identification Mark */
+#define BARCODE_LOGMARS         50  /* LOGMARS */
+#define BARCODE_PHARMA          51  /* Pharmacode One-Track */
+#define BARCODE_PZN             52  /* Pharmazentralnummer */
+#define BARCODE_PHARMA_TWO      53  /* Pharmacode Two-Track */
+#define BARCODE_CEPNET          54  /* Brazilian CEPNet Postal Code */
+#define BARCODE_PDF417          55  /* PDF417 */
+#define BARCODE_PDF417COMP      56  /* Compact PDF417 (Truncated PDF417) */
+#define BARCODE_PDF417TRUNC     56  /* Legacy */
+#define BARCODE_MAXICODE        57  /* MaxiCode */
+#define BARCODE_QRCODE          58  /* QR Code */
+#define BARCODE_CODE128AB       60  /* Code 128 (Suppress Code Set C) */
+#define BARCODE_CODE128B        60  /* Legacy */
+#define BARCODE_AUSPOST         63  /* Australia Post Standard Customer */
+#define BARCODE_AUSREPLY        66  /* Australia Post Reply Paid */
+#define BARCODE_AUSROUTE        67  /* Australia Post Routing */
+#define BARCODE_AUSREDIRECT     68  /* Australia Post Redirection */
+#define BARCODE_ISBNX           69  /* ISBN */
+#define BARCODE_RM4SCC          70  /* Royal Mail 4-State Customer Code */
+#define BARCODE_DATAMATRIX      71  /* Data Matrix (ECC200) */
+#define BARCODE_EAN14           72  /* EAN-14 */
+#define BARCODE_VIN             73  /* Vehicle Identification Number */
+#define BARCODE_CODABLOCKF      74  /* Codablock-F */
+#define BARCODE_NVE18           75  /* NVE-18 (SSCC-18) */
+#define BARCODE_JAPANPOST       76  /* Japanese Postal Code */
+#define BARCODE_KOREAPOST       77  /* Korea Post */
+#define BARCODE_DBAR_STK        79  /* GS1 DataBar Stacked */
+#define BARCODE_RSS14STACK      79  /* Legacy */
+#define BARCODE_DBAR_OMNSTK     80  /* GS1 DataBar Stacked Omnidirectional */
+#define BARCODE_RSS14STACK_OMNI 80  /* Legacy */
+#define BARCODE_DBAR_EXPSTK     81  /* GS1 DataBar Expanded Stacked */
+#define BARCODE_RSS_EXPSTACK    81  /* Legacy */
+#define BARCODE_PLANET          82  /* USPS PLANET */
+#define BARCODE_MICROPDF417     84  /* MicroPDF417 */
+#define BARCODE_USPS_IMAIL      85  /* USPS Intelligent Mail (OneCode) */
+#define BARCODE_ONECODE         85  /* Legacy */
+#define BARCODE_PLESSEY         86  /* UK Plessey */
+
+    /* Tbarcode 8 codes */
+#define BARCODE_TELEPEN_NUM     87  /* Telepen Numeric */
+#define BARCODE_ITF14           89  /* ITF-14 */
+#define BARCODE_KIX             90  /* Dutch Post KIX Code */
+#define BARCODE_AZTEC           92  /* Aztec Code */
+#define BARCODE_DAFT            93  /* DAFT Code */
+#define BARCODE_DPD             96  /* DPD Code */
+#define BARCODE_MICROQR         97  /* Micro QR Code */
+
+    /* Tbarcode 9 codes */
+#define BARCODE_HIBC_128        98  /* HIBC (Health Industry Barcode) Code 128 */
+#define BARCODE_HIBC_39         99  /* HIBC Code 39 */
+#define BARCODE_HIBC_DM         102 /* HIBC Data Matrix */
+#define BARCODE_HIBC_QR         104 /* HIBC QR Code */
+#define BARCODE_HIBC_PDF        106 /* HIBC PDF417 */
+#define BARCODE_HIBC_MICPDF     108 /* HIBC MicroPDF417 */
+#define BARCODE_HIBC_BLOCKF     110 /* HIBC Codablock-F */
+#define BARCODE_HIBC_AZTEC      112 /* HIBC Aztec Code */
+
+    /* Tbarcode 10 codes */
+#define BARCODE_DOTCODE         115 /* DotCode */
+#define BARCODE_HANXIN          116 /* Han Xin (Chinese Sensible) Code */
+
+    /* Tbarcode 11 codes */
+#define BARCODE_MAILMARK_2D     119 /* Royal Mail 2D Mailmark (CMDM) (Data Matrix) */
+#define BARCODE_UPU_S10         120 /* Universal Postal Union S10 */
+#define BARCODE_MAILMARK_4S     121 /* Royal Mail 4-State Mailmark */
+#define BARCODE_MAILMARK        121 /* Legacy */
+
+    /* Zint specific */
+#define BARCODE_AZRUNE          128 /* Aztec Runes */
+#define BARCODE_CODE32          129 /* Code 32 */
+#define BARCODE_EANX_CC         130 /* EAN Composite */
+#define BARCODE_GS1_128_CC      131 /* GS1-128 Composite */
+#define BARCODE_EAN128_CC       131 /* Legacy */
+#define BARCODE_DBAR_OMN_CC     132 /* GS1 DataBar Omnidirectional Composite */
+#define BARCODE_RSS14_CC        132 /* Legacy */
+#define BARCODE_DBAR_LTD_CC     133 /* GS1 DataBar Limited Composite */
+#define BARCODE_RSS_LTD_CC      133 /* Legacy */
+#define BARCODE_DBAR_EXP_CC     134 /* GS1 DataBar Expanded Composite */
+#define BARCODE_RSS_EXP_CC      134 /* Legacy */
+#define BARCODE_UPCA_CC         135 /* UPC-A Composite */
+#define BARCODE_UPCE_CC         136 /* UPC-E Composite */
+#define BARCODE_DBAR_STK_CC     137 /* GS1 DataBar Stacked Composite */
+#define BARCODE_RSS14STACK_CC   137 /* Legacy */
+#define BARCODE_DBAR_OMNSTK_CC  138 /* GS1 DataBar Stacked Omnidirectional Composite */
+#define BARCODE_RSS14_OMNI_CC   138 /* Legacy */
+#define BARCODE_DBAR_EXPSTK_CC  139 /* GS1 DataBar Expanded Stacked Composite */
+#define BARCODE_RSS_EXPSTACK_CC 139 /* Legacy */
+#define BARCODE_CHANNEL         140 /* Channel Code */
+#define BARCODE_CODEONE         141 /* Code One */
+#define BARCODE_GRIDMATRIX      142 /* Grid Matrix */
+#define BARCODE_UPNQR           143 /* UPNQR (Univerzalnega Plačilnega Naloga QR) */
+#define BARCODE_ULTRA           144 /* Ultracode */
+#define BARCODE_RMQR            145 /* Rectangular Micro QR Code (rMQR) */
+#define BARCODE_BC412           146 /* IBM BC412 (SEMI T1-95) */
+#define BARCODE_DXFILMEDGE      147 /* DX Film Edge Barcode on 35mm and APS films */
+#define BARCODE_LAST            147 /* Max barcode number marker, not barcode */
+
+/* Output options (`symbol->output_options`) */
+#define BARCODE_BIND_TOP        0x00001 /* Boundary bar above the symbol only (not below), does not affect stacking */
+                                        /* Note: value was once used by the legacy (never-used) BARCODE_NO_ASCII */
+#define BARCODE_BIND            0x00002 /* Boundary bars above & below the symbol and between stacked symbols */
+#define BARCODE_BOX             0x00004 /* Box around symbol */
+#define BARCODE_STDOUT          0x00008 /* Output to stdout */
+#define READER_INIT             0x00010 /* Reader Initialisation (Programming) */
+#define SMALL_TEXT              0x00020 /* Use smaller font */
+#define BOLD_TEXT               0x00040 /* Use bold font */
+#define CMYK_COLOUR             0x00080 /* CMYK colour space (Encapsulated PostScript and TIF) */
+#define BARCODE_DOTTY_MODE      0x00100 /* Plot a matrix symbol using dots rather than squares */
+#define GS1_GS_SEPARATOR        0x00200 /* Use GS instead of FNC1 as GS1 separator (Data Matrix) */
+#define OUT_BUFFER_INTERMEDIATE 0x00400 /* Return ASCII values in bitmap buffer (OUT_BUFFER only) */
+#define BARCODE_QUIET_ZONES     0x00800 /* Add compliant quiet zones (additional to any specified whitespace) */
+                                        /* Note: CODE16K, CODE49, CODABLOCKF, ITF14, EAN/UPC have default quiet zones
+                                         */
+#define BARCODE_NO_QUIET_ZONES  0x01000 /* Disable quiet zones, notably those with defaults as listed above */
+#define COMPLIANT_HEIGHT        0x02000 /* Warn if height not compliant, or use standard height (if any) as default */
+#define EANUPC_GUARD_WHITESPACE 0x04000 /* Add quiet zone indicators ("<"/">") to HRT whitespace (EAN/UPC) */
+#define EMBED_VECTOR_FONT       0x08000 /* Embed font in vector output - currently only for SVG output */
+#define BARCODE_MEMORY_FILE     0x10000 /* Write output to in-memory buffer `memfile` instead of to `outfile` */
+
+/* Input data types (`symbol->input_mode`) */
+#define DATA_MODE               0       /* Binary */
+#define UNICODE_MODE            1       /* UTF-8 */
+#define GS1_MODE                2       /* GS1 */
+/* The following may be OR-ed with above */
+#define ESCAPE_MODE             0x0008  /* Process escape sequences */
+#define GS1PARENS_MODE          0x0010  /* Process parentheses as GS1 AI delimiters (instead of square brackets) */
+#define GS1NOCHECK_MODE         0x0020  /* Do not check validity of GS1 data (except that printable ASCII only) */
+#define HEIGHTPERROW_MODE       0x0040  /* Interpret `height` as per-row rather than as overall height */
+#define FAST_MODE               0x0080  /* Use faster if less optimal encodation or other shortcuts if available */
+                                        /* Note: affects DATAMATRIX, MICROPDF417, PDF417, QRCODE & UPNQR only */
+#define EXTRA_ESCAPE_MODE       0x0100  /* Process special symbology-specific escape sequences as well as others */
+                                        /* Note: currently Code 128 only */
+
+/* Data Matrix specific options (`symbol->option_3`) */
+#define DM_SQUARE               100     /* Only consider square versions on automatic symbol size selection */
+#define DM_DMRE                 101     /* Consider DMRE versions on automatic symbol size selection */
+#define DM_ISO_144              128     /* Use ISO instead of "de facto" format for 144x144 (i.e. don't skew ECC) */
+
+/* QR, Han Xin, Grid Matrix specific options (`symbol->option_3`) */
+#define ZINT_FULL_MULTIBYTE     200     /* Enable Kanji/Hanzi compression for Latin-1 & binary data */
+
+/* Ultracode specific option (`symbol->option_3`) */
+#define ULTRA_COMPRESSION       128     /* Enable Ultracode compression (experimental) */
+
+/* Warning and error conditions (API return values) */
+#define ZINT_WARN_HRT_TRUNCATED     1   /* Human Readable Text was truncated (max 199 bytes) */
+#define ZINT_WARN_INVALID_OPTION    2   /* Invalid option given but overridden by Zint */
+#define ZINT_WARN_USES_ECI          3   /* Automatic ECI inserted by Zint */
+#define ZINT_WARN_NONCOMPLIANT      4   /* Symbol created not compliant with standards */
+#define ZINT_ERROR                  5   /* Warn/error marker, not returned */
+#define ZINT_ERROR_TOO_LONG         5   /* Input data wrong length */
+#define ZINT_ERROR_INVALID_DATA     6   /* Input data incorrect */
+#define ZINT_ERROR_INVALID_CHECK    7   /* Input check digit incorrect */
+#define ZINT_ERROR_INVALID_OPTION   8   /* Incorrect option given */
+#define ZINT_ERROR_ENCODING_PROBLEM 9   /* Internal error (should not happen) */
+#define ZINT_ERROR_FILE_ACCESS      10  /* Error opening output file */
+#define ZINT_ERROR_MEMORY           11  /* Memory allocation (malloc) failure */
+#define ZINT_ERROR_FILE_WRITE       12  /* Error writing to output file */
+#define ZINT_ERROR_USES_ECI         13  /* Error counterpart of warning if WARN_FAIL_ALL set (see below) */
+#define ZINT_ERROR_NONCOMPLIANT     14  /* Error counterpart of warning if WARN_FAIL_ALL set */
+#define ZINT_ERROR_HRT_TRUNCATED    15  /* Error counterpart of warning if WARN_FAIL_ALL set */
+
+/* Warning level (`symbol->warn_level`) */
+#define WARN_DEFAULT            0  /* Default behaviour */
+#define WARN_FAIL_ALL           2  /* Treat warning as error */
+
+/* Capability flags (ZBarcode_Cap() `cap_flag`) */
+#define ZINT_CAP_HRT                0x0001  /* Prints Human Readable Text? */
+#define ZINT_CAP_STACKABLE          0x0002  /* Is stackable? */
+#define ZINT_CAP_EANUPC             0x0004  /* Is EAN/UPC? */
+#define ZINT_CAP_EXTENDABLE         0x0004  /* Legacy */
+#define ZINT_CAP_COMPOSITE          0x0008  /* Can have composite data? */
+#define ZINT_CAP_ECI                0x0010  /* Supports Extended Channel Interpretations? */
+#define ZINT_CAP_GS1                0x0020  /* Supports GS1 data? */
+#define ZINT_CAP_DOTTY              0x0040  /* Can be output as dots? */
+#define ZINT_CAP_QUIET_ZONES        0x0080  /* Has default quiet zones? */
+#define ZINT_CAP_FIXED_RATIO        0x0100  /* Has fixed width-to-height (aspect) ratio? */
+#define ZINT_CAP_READER_INIT        0x0200  /* Supports Reader Initialisation? */
+#define ZINT_CAP_FULL_MULTIBYTE     0x0400  /* Supports full-multibyte option? */
+#define ZINT_CAP_MASK               0x0800  /* Is mask selectable? */
+#define ZINT_CAP_STRUCTAPP          0x1000  /* Supports Structured Append? */
+#define ZINT_CAP_COMPLIANT_HEIGHT   0x2000  /* Has compliant height? */
+
+/* The largest amount of data that can be encoded is 4350 4-byte UTF-8 chars in Han Xin Code */
+#define ZINT_MAX_DATA_LEN       17400
+/* Maximum number of segments allowed for (`seg_count`) */
+#define ZINT_MAX_SEG_COUNT      256
+
+/* Debug flags (`symbol->debug`) */
+#define ZINT_DEBUG_PRINT        0x0001  /* Print debug info (if any) to stdout */
+#define ZINT_DEBUG_TEST         0x0002  /* For internal test use only */
+
+#ifdef _WIN32
+#  if defined(DLL_EXPORT) || defined(PIC) || defined(_USRDLL)
+#    define ZINT_EXTERN __declspec(dllexport)
+#  elif defined(ZINT_DLL)
+#    define ZINT_EXTERN __declspec(dllimport)
+#  else
+#    define ZINT_EXTERN extern
+#  endif
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#  define ZINT_EXTERN extern __attribute__((__visibility__("default")))
+#else
+#  define ZINT_EXTERN extern
+#endif
+
+    /* Create and initialize a symbol structure */
+    ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void);
+
+    /* Free any output buffers that may have been created and initialize output fields */
+    ZINT_EXTERN void ZBarcode_Clear(struct zint_symbol *symbol);
+
+    /* Free any output buffers that may have been created and reset all fields to defaults */
+    ZINT_EXTERN void ZBarcode_Reset(struct zint_symbol *symbol);
+
+    /* Free a symbol structure, including any output buffers */
+    ZINT_EXTERN void ZBarcode_Delete(struct zint_symbol *symbol);
+
+
+    /* Encode a barcode. If `length` is 0, `source` must be NUL-terminated */
+    ZINT_EXTERN int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int length);
+
+    /* Encode a barcode with multiple ECI segments */
+    ZINT_EXTERN int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[],
+                        const int seg_count);
+
+    /* Encode a barcode using input data from file `filename` */
+    ZINT_EXTERN int ZBarcode_Encode_File(struct zint_symbol *symbol, const char *filename);
+
+    /* Output a previously encoded symbol to file `symbol->outfile` */
+    ZINT_EXTERN int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle);
+
+
+    /* Encode and output a symbol to file `symbol->outfile` */
+    ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, const unsigned char *source, int length,
+                        int rotate_angle);
+
+    /* Encode a symbol with multiple ECI segments and output to file `symbol->outfile` */
+    ZINT_EXTERN int ZBarcode_Encode_Segs_and_Print(struct zint_symbol *symbol, const struct zint_seg segs[],
+                        const int seg_count, int rotate_angle);
+
+    /* Encode a symbol using input data from file `filename` and output to file `symbol->outfile` */
+    ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, const char *filename,
+                        int rotate_angle);
+
+
+    /* Output a previously encoded symbol to memory as raster (`symbol->bitmap`) */
+    ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle);
+
+    /* Encode and output a symbol to memory as raster (`symbol->bitmap`) */
+    ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, const unsigned char *source, int length,
+                        int rotate_angle);
+
+    /* Encode a symbol with multiple ECI segments and output to memory as raster (`symbol->bitmap`) */
+    ZINT_EXTERN int ZBarcode_Encode_Segs_and_Buffer(struct zint_symbol *symbol, const struct zint_seg segs[],
+                        const int seg_count, int rotate_angle);
+
+    /* Encode a symbol using input data from file `filename` and output to memory as raster (`symbol->bitmap`) */
+    ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, const char *filename,
+                        int rotate_angle);
+
+
+    /* Output a previously encoded symbol to memory as vector (`symbol->vector`) */
+    ZINT_EXTERN int ZBarcode_Buffer_Vector(struct zint_symbol *symbol, int rotate_angle);
+
+    /* Encode and output a symbol to memory as vector (`symbol->vector`) */
+    ZINT_EXTERN int ZBarcode_Encode_and_Buffer_Vector(struct zint_symbol *symbol, const unsigned char *source,
+                        int length, int rotate_angle);
+
+    /* Encode a symbol with multiple ECI segments and output to memory as vector (`symbol->vector`) */
+    ZINT_EXTERN int ZBarcode_Encode_Segs_and_Buffer_Vector(struct zint_symbol *symbol, const struct zint_seg segs[],
+                        const int seg_count, int rotate_angle);
+
+    /* Encode a symbol using input data from file `filename` and output to memory as vector (`symbol->vector`) */
+    ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, const char *filename,
+                        int rotate_angle);
+
+
+    /* Is `symbol_id` a recognized symbology? */
+    ZINT_EXTERN int ZBarcode_ValidID(int symbol_id);
+
+    /* Copy BARCODE_XXX name of `symbol_id` into `name` buffer, NUL-terminated.
+       Returns 0 if valid, 1 if not valid */
+    ZINT_EXTERN int ZBarcode_BarcodeName(int symbol_id, char name[32]);
+
+    /* Return the capability flags for symbology `symbol_id` that match `cap_flag` */
+    ZINT_EXTERN unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag);
+
+
+    /* Return default X-dimension in mm for symbology `symbol_id`. Returns 0 on error (invalid `symbol_id`) */
+    ZINT_EXTERN float ZBarcode_Default_Xdim(int symbol_id);
+
+    /* Return the scale to use for `symbol_id` for non-zero X-dimension `x_dim_mm` at `dpmm` dots per mm for
+       `filetype`. If `dpmm` zero defaults to 12. If `filetype` NULL/empty, defaults to "GIF". Returns 0 on error */
+    ZINT_EXTERN float ZBarcode_Scale_From_XdimDp(int symbol_id, float x_dim_mm, float dpmm, const char *filetype);
+
+    /* Reverse of `ZBarcode_Scale_From_XdimDp()` above to estimate the X-dimension or dpmm given non-zero `scale` and
+       non-zero `x_dim_mm_or_dpmm`. Return value bound to dpmm max not X-dimension max. Returns 0 on error */
+    ZINT_EXTERN float ZBarcode_XdimDp_From_Scale(int symbol_id, float scale, float x_dim_mm_or_dpmm,
+                        const char *filetype);
+
+
+    /* Whether Zint built without PNG support */
+    ZINT_EXTERN int ZBarcode_NoPng(void);
+
+    /* Return the version of Zint linked to */
+    ZINT_EXTERN int ZBarcode_Version(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+/* vim: set ts=4 sw=4 et : */
+#endif /* ZINT_H */