Zint and libzint
----------------
Zint is a suite of programs to allow easy encoding of data in any of the
wide range of public domain barcode standards and to allow integration of
this capability into your own programs.

Zint is able to encode data in the following formats:

Code 11, Standard Code 2 of 5, IATA Code 2 of 5, Industrial Code 2 of 5,
Interleaved Code 2 of 5, Code 2 of 5 Data Logic, ITF-14, Deutche Post
Leitcode, Deutche Post Identcode, UPC-A, UPC-E, EAN-2, EAN-5, EAN-8,
EAN-13, UK Plessey, MSI Plessey, Telepen Alpha, Telepen Numeric, Code 39,
Extended Code 39, Code 93, PZN, Code 23, LOGMARS, Codabar, Pharmacode, Code
128, EAN-128, NVE-18, Code 16k, PDF417, MicroPDF417, Two-Track Pharmacode,
PostNet, PLANET, Australia Post 4-State Symbols, RM4SCC, USPS OneCode, GS1
DataBar, DataBar-14, DataBar Limited, DataBar Extended, DataBar Stacked,
Composite Symbology, Data Matrix, QR Code, Maxicode, Aztec Code, EAN-13,
Micro QR, Korea Post Barcode, HIBC Code 128, HIBC Code 39, HIBC Data Matrix,
HIBC PDF417, HIBC MicroPDF417, HIBC QR Code, HIBC Aztec Code, Japanese Postal
Code, Code 49, Channel Code, Code One, Grid Matrix, FIM and Flattermarken,
Codablock-F, DotCode, Han Xin Code, rMQR and Ultracode.

Output can be saved as BMP, EPS, GIF, PCX, TIF, EMF, PNG or SVG. 

PROJECT HISTORY
---------------

Version 2.5.0:
Support for DotCode and Han Xin code. ECI code processing. Output to BMP, GIF
and PCX. Added bold and small text options. Reintroduction of Codablock-F.
Many minor fixes and improvements.

Version 2.5.1:
Numerous bugfixes, especially with Data Matrix thanks to extensive testing
by brunt@SF

Version 2.6.0:
Update front end to Qt5. Output to EMF and TIF. Copy to clipboard. Update
to latest draft of DMRE. Usual bugfixes.

Version 2.6.1:
Library bugfixes: EDIFACT unlatch in Data Matrix, Add UPNQR, Improved Aztec
data compression, Detect Code 128 data too long, Make error codes consistent.
GUI improvements: Additional clipboard options, remove border width bug,
remove changing background colour bug, remember more settings and make GUI
more consistent with user expectations. All windows now resizable and more
information given when batch processing.

Version 2.6.2:
Further bugfixes in Aztec and DotCode. Expand escape sequence support
to API and GUI. Handle UTF BOM. Bugfix raster images of Maxicode.

Version 2.6.3:
New symbology Royal Mail 4-state Mailmark. Added North America VIN verification.
Bugfixes for TIF and EMF output and escape character handling.

Version 2.6.4:
Fixed bugs: EMF output, maxicode plot/content
Datamatrix DMRE updated to the ISO/IEC29158 version. This is incompatible in the way,
that the old -vers numbers for DMRE are re-assigned.
The separator of GS1-datamatrix may be switched from FNC1 to GS.
GS1 field length check AI 8009 and 7230 to 7239 currected.

Version 2.6.5:
Fixed bugs:
backend/main.c was missing
Maxicode bullseye rastering for scale = 0.5
Crash in uto to eci.
eci ISO 8859-16 table missing data line
upce check for 7 digit input (causes crash) and BARCODE_UPCE_CHK -> BARCODE_UPCE mapping removed
US imail check for invalid barcode identifier and allow 0/5/9/11 length zip
maxicode code set correction
cmake flags for debugging and sanitize options
unit tests for the changes, with a simple test suite based on qrencode/tests

Version 2.6.6:
Fixed bugs:
Ticket 161: PDF row size may be set
Ticket 155: PDF numeric compaction
Ticket 164: crash due to call of svg_plot withnull vector
Ticket 119: Crash on bullseye raster drawing
qtzint: Micro-QR version option choice corrected (+1 missing).
Datamatrix: code corruption when ECI was encoded and base256 encoding was automatically chosen.

Version 2.6.7 2019-10-07:

Changes:
Ticket 127: Allow to code ECI 3 if explicitly given for debug purposes.
***Incompatible change**
"--eci 3" now leads to included ECI information.
"--eci 0" may now be used to not include any ECI information.
The default of the parameter changed from 3 to 0.

Fixed bugs:
Ticket 146, 165: fix wrong encoding of RSS composite codes

Version 2.7.0 2019-12-05:
Changes:
- Automatic height option added to qzint
- DotCode in line with new specification
- New GS1 AIs 7240, 235, 417, 7040, 8026, updated checks for 7007, 8008
- New Symbology rMQR
- QR and Qridmatrix optimisation for GB2312
- removed depreciated interface for gLabels program. Please use current interface.

Fixed bugs:
- Many improvements in composite codes
- SVG output corrected for messages containing "<" and "&".
- GS1-128 and RSS may only be used with GS1 contents
- Han Xin chinese character handling

Version 2.7.1 2020-02-01:
Changes:
- QR encoding optimized to get smaller code matrix results
- PDF417: remove obsolete codeword number option in qzint.
  Option removed in qtzint.
- Removed annex B (3 digit country codes) and annex C (GS1 General Specification)
  from the manual. This material may be found elsewhere.
- MAC homebrew remark added to the documentation
- Correct cmake file to match BSD-3-clause licence
Bugs:
- Correct uninitialized warning in gridmatrix.call
- do not export internal functions
- raster painting of UPC-A bound check
- pdf417 documentation corrected: change flag -security to -secure
- Dot Code encoding ECI number corrected
- Corrected postscript plotting error
- Datamatrix: corrected possible buffer overrun in 3 characters to 2 byte
  encodings.
- In 2.7.0 removed interface "ZBarcode_Render" still declared
- vc6 make was missing (trivial) resource.h

Version 2.8.0 2020-04-10:
Changes:
(New) Tests for auspost, codablock, composite, dotcode, general, telepen, upcean,
  all output formats, 
- QR, Han Xin, Grid Matrix: the multi byte compaction schemes (ex: Kanji)
  are used by some decoders as codepage information (Ex: GB2312) and output
  may be translated to UTF-8. This may destroy the data in a not controlable
  manner.
  In consequence, multibyte compaction schemes are disabled by default.
  The new option --fullmultibyte (option_3 = ZINT_FULL_MULTIBYTE) enables this
  optimisation.
- Add new symbology "Ultra Code" with the ability to output colour codes.
Bugs:
- Ticket 181 penetration test found many bugs:
  - Auspost: null bytes in content caused segfault
  - Codablock: data 0x1a..0x1f caused segfault
  - Dotcode: overrun in binary mode, overrun in codeword_array buffer
      Correct encoding of HT/FS/GS/RS when shifting to code set B
  - empty or unreadable input file
  - telepen: buffer overflow
  - EANUCC: buffer overflow on multiple + (multiple extension bars)
  - Maxicode: index overrun on numeric compaction
  - CodeOne: Simple i indexing not sp + i in C1_ASCII numeric latch loop.
  - Aztec: free memory
- Ticket 183: Databar stacked separator correction
- Ticket 182: Output bitmap type was char, where some targets assigned 0
  if pixel colour >127 (e.g. negative). API change to use unsigned char.
- HanXin: wrong codepage, gb2312 instead gb18030.
- PDF417: corrected alloced sizes to max characters
- Ticket 189: FNC1 encodation fixed (FLG(0) missing after FLG(n))
- PCX format: added missing bytes_per_line if bitmap width is odd.

Version 2.9.0 2020-07-31:
Changes:
- Dotcode: adopt to AIM DOC Revision 4
- New option "-separator=" for zint to specify the separator height of stacked
  symbologies.
- make internal routines invisible by a static function definition.
- CODE11: make adding check digits an option, selectable to 2 (default as now),
  1 or none
- LOGMARS restrict max length to 30 per MIL-STD-1189 Rev. B; make check digit
  optional
- CODE39/EXCODE39: max length now 85
- VIN code extended to international licence plates
- CODABAR: 3 data characters minimum (plus start/stop), check digit option added
- Channel Code: performance improvement
- QT GUI: 
  - GRIDMATRIX/HX/MQR/QRCODE/RMQR: allow separate selection of size/ECC
  - add DAFT and VIN Symbolgies
  - Separarator option for DATAMATRIX
  - Ticket 162: parse escape sequences
  - gui element reassigments
- UPC/EAN/ITF-14 Composite: Ticket 72: new option --addongap (default:9) to set
  the gap between code and composite.
- TCL Backend: The following symbology names were renamed:
  - Matrix2of5 -> Standard2of5
  - PDF417Trunc -> PDF417Compact
  - RSS14Stacked -> GS1DataBarStacked
  - RSS14Stacked -> GS1DataBarStacked
  - RSS14StackedOmni -> GS1DataBarSstackedOmni
  - RSS14ExpandedStacked -> GS1DataBarExpandedStacked
  - OneCode -> USPSIntelligentMail
  - EAN128-CC -> GS1-128-CC
  - RSS14-CC -> GS1DataBarOmni-CC
  - RSSLimited-CC -> GS1DataBarLimited-CC
  - RSSExpandedStacked-CC -> GS1DataBarExpanded-CC
  - RSSEXPanded-CC -> GS1DataBarExpanded-CC
  - RSS14Stacked-CC -> GS1DataBarStacked-CC
  - RSS14Omni-CC -> GS1DataBarStackedOmni-CC
  - RSSExpandedStacked-CC -> GS1DataBarExpandedStacked-CC
  *** Potential incompatibility ***
- API Symbol names changed but old names preserved in zint.h
  - BARCODE_C25MATRIX -> BARCODE_C25STANDARD
  - BARCODE_EAB128_CC -> BARCODE_GS1_128
  - BARCODE_RSS14 -> BARCODE_DBAR_OMN
  - BARCODE_RSS_LTD -> BARCODE_DBAR_LTD
  - BARCODE_RSS_EXP -> BARCODE_DBAR_EXP
  - BARCODE_PDF417TRUNC -> BARCODE_PDF417COMP
  - BARCODE_RSS14STACK -> BARCODE_DBAR_STK
  - BARCODE_RSS14STACK_OMNI -> BARCODE_DBAR_OMNSTK
  - BARCODE_RSS_EXPSTACK -> BARCODE_DBAR_EXPSTK
  - BARCODE_ONECODE -> BARCODE_USPS_IMAIL
  - BARCODE_EAN128_CC -> BARCODE_GS1_128_CC
  - BARCODE_RSS14_CC -> BARCODE_DBAR_OMN_CC
  - BARCODE_RSS_LTD_CC -> BARCODE_DBAR_LTD_CC
  - BARCODE_RSS_EXP_CC -> BARCODE_DBAR_EXP_CC
  - BARCODE_RSS14STACK_CC -> BARCODE_DBAR_STK_CC
  - BARCODE_RSS_EXPSTACK_CC -> BARCODE_DBAR_EXPSTK_CC
  
Bugs:
- Ticket 185 EMF export corrections
  - fine scaling by the use of float arithmetic
  - full header (extension1&2) with correct size field
- Ticket 190: Aztec buffer overrun fixed
- Ticket 191 suppress clang-tidy warnings: raster.c, composite.c, qr.c
- Ultracode internal encoding bugs, ECI 899
- GS1 data: exclude DEL character
- Ticket 192: missing malloc.h include for Windows compilers.
- Correct GS1 AI 253 & 255 length from 14 to 13
- Codablock F changes:
  - FNC4 may not be split over rows.
  - Use Code128 routine for one line Codablock FIM
  - Correct column range to 9 ... 62
  - allow new options: row count and column count, border_width and HIBC mode
  - pad correctly empty and last row
  - separator length correction
- Code128 changes:
  - Correctly encode CodeA charset with control-character only data
  - Improve coding of Extended ASCII (FNC4)
  - Checksum calculation overflow protection
  - EAN128 may reduce length
- Check for incomplete escape sequences on data specification: "\" without
  following character.
- Code16K fixes: remove extended ASCII latch, pad character
- Restructuring to have common code centralized:
  - Code128 routines for Codablock&Code16K
  - output.c has common routines from raster.c and symbologies.
- HIBC_39: restrict max length to 68 otherwise to avoid overrun
- Code One: protect agains overrun
- Telepen: allow DEL
- GS1 Databar/ GS1-128 Composite:
  - Separator bar corrections
  - Ticket 200: spurious additional row
  - Correct names in GUI
- Compact PDF417:
  - Add missing stop pattern.
  - Rename in GUI: "PDF417 Truncated" to "Compact PDF417".
- PDF417: Optimize text compaction mode switch.
- Human readable representation: Code128, Code39, Code93 special characters
  are shown by a blank.
- ITF14: Ticket 201: allow bind option

Version 2.9.1 2020-08-04:
Changes:
- Ticket 122: Implement transparency support
  - Ticket 129: -nobackground option added
  - -fg and -bg may contain an alpha channel
  - structure zint_symbol may now contain an alpha channel as output
- Added DPD Symbology
- Add support for Unicode escape characters
Bugs:
- EMF text colour does not change
- Fix QPainterPath dependency for Visual Studio

Version 2.9.2 not released jet:
Changes:
- Command line switches -d or -i for code data may now be at any position.
- Add rotation for vector formats (excluding emf)
- Change double to float for performance in many internal places
- Ticket 197: Allow scaling in substeps.
  Warn if scaling < 0.5 as pixels are lost.
- Ticket 197: add output option to bypass time-intensive buffer_plot()
  (OUT_BUFFER_INTERMEDIATE)
- Reduce BMP size by using 1 bit per pixel (except Ultracode)

Bugs:
- Code16k selects GS1 mode by default in GUI
- Ultracode: use white pixels instead background for white modules.
- EMF: fix Ultracode colours.
- Ultracode: fix count of codewords when using reader init mode

CONTACT US
----------
The home of Zint is:

	<http://www.sourceforge.net/projects/zint>

The code is now also mirrored at:

        <https://github.com/woo-j/zint>

For feature requests or bug reports please either join the mailing list at

	<https://lists.sourceforge.net/lists/listinfo/zint-barcode>
	
or add a ticket on the project's SourceForge.


BEFORE POSTING TO THE LIST
--------------------------
Please note the following points...
* Zint is primarily developed for Linux. While we have some experience of
  using Zint on Windows we may be unable to resolve problems if they are
  specific to other operating systems. We cannot provide support for using
  Zint with commercial packages such as MS Office or Crystal Reports.
* Always ensure you are using the latest version of Zint before posting bug
  reports - the bug you are reporting may have been fixed already.
* Please remember to state what operating system you are using and include
  enough information to allow us to reproduce the error - including input
  data if appropriate.
* Please DO NOT post messages asking for us to change the license
  arrangements. You will be ignored.
* Please remember that Zint is developed by volunteers. While we attempt to
  answer all messages within a week, this is highly dependant on external
  circumstances.
