TODO Items
-----------------------------------------------------------------

after version 0.5:
  o libdmtx:   Move SetRangeLimit and SetScanRegion into library
  o libdmtx:   Use new Edifact decode function that doesn't assume full triplet
  o libdmtx:   Check ProcessEndOfSymbolTriplet() for same problem fixed in Edifact
  o libdmtx:   Rewrite encoder(s) to not need "twothirdsbits" tracking (fixes multiple bugs)
  o libdmtx:   Allow choice of edge-drop condition passed to MatrixRegionAlignEdge()
  o libdmtx:   Implement image mask to track scan progress and avoid rescanned pixels
  o libdmtx:   Implement consistent and robust error handling (errno.h + custom)
  o libdmtx:   Rename outputIdx to outputLength? (Count pad codewords instead of pointer)
  o libdmtx:   Implement --auto-fast option using algorithm from spec (lighter & faster?)
  o libdmtx:   Implement overlap detection to avoid rescanning in successfully decoded regions
  o libdmtx:   Implement structured append symbols
  o dmtxread:  Write fully structured debug barcode dump from dmtxread (currently just mapping grid)
  o dmtxread:  Print out image representing "unstretched" barcode
  o dmtxread:  Print color weights based on direction
  o dmtxread:  Change dmtxread to print out dump of both failed and successful barcodes if requested
  o dmtxread:  Change dmtxread to print out mis-read modules somehow ... additive, subtractive?
               - Build color vector that describes jump from background to foreground color
               - When module is determined to be "off" then add half of color vector
               - When module is determined to be "on" then subtract half of color vector
               - resulting image should clearly show misread modules
  o dmtxread:  Change dmtxread to print out trail left by scanning logic (future)
  o dmtxread:  JPEG reading support
  o dmtxread:  Print character values (not just codewords) from --codewords (-c) option
  o dmtxwrite: Print character values (not just codewords) from --format=c (-fc) option
  o dmtxwrite: Verbose messages describing encoding process
  o testsuite: Generate metrics in reproducible format to enable historical tracking
  o testsuite: Investigate option of embedding decoded text into PNG test image comments
  o testsuite: Tests should compare scanned results to embedded PNG comments
  o testsuite: Implement exhaustive comparison between --auto-fast and --auto-best
  o testsuite: 'make test' writes metrics file
  o testsuite: 'make test' confirms performance
  o project:   Devise approach for recurring tasks (enabling $Id$, checking SVN commits)

version 0.5: (13-Apr-2008)
  x libdmtx:   Rework encoding and decoding API for consistency and intuitiveness
  x libdmtx:   Handle region detection and region decoding as separate tasks
  x libdmtx:   Pass found regions back to calling app before attempting decode
  x libdmtx:   Image mask approach (for performance and multi-barcode scans)
  x libdmtx:   Remove "2" from functions named *MatrixRegion2*() (whoops)
  x libdmtx:   Fix TestForEndOfSymbolEdifact() to handle special cases correctly
  x libdmtx:   Roll scan pattern into core library (inward breadth-first cross)
  x libdmtx:   Replace dmtxScanLine() with dmtxScanPixel()
  x libdmtx:   Implement 4-direction weighted module decisions (eliminates thresholds)
  x libdmtx:   Error correction using libfec (thanks Florian!)
  x dmtxread:  Add ability to scan portion of image
  x dmtxread:  Add --diagnose option that dumps image with embedded scan infomation
  x dmtxread:  Added Z rotation angle (in degrees) to verbose output
  x dmtxwrite: Move ASCII and codeword output to separate --preview option
  x dmtxwrite: Added -R option for setting image print resolution in dpi (PNG only)
  x project:   Remove gltest and simpletest from default build target
  x project:   Update Subversion to be keyword friendly ($Id$)
  x project:   Updated documentation to reflect API and option changes
  x testsuite: Moved all public images to common directory with single copyright file

version 0.4: (07-Dec-2008)
  x libdmtx:   Remove arbitrary sz scaling (100.0) since it doesn't matter anyway
  x libdmtx:   Fix 4 bottom-right modules in sizes where they are not used (thanks Matthias R.!)
  x libdmtx:   Replace callback references with preprocessor macros
  x libdmtx:   Implement remaining encodation schemes for encoding (X12, Base 256, etc...)
  x libdmtx:   Implement remaining encodation schemes for decoding (X12, Base 256, etc...)
  x libdmtx:   Implement --auto-best option for best possible encoding efficiency
  x libdmtx:   Implement multi-region symbols
  x libdmtx:   Read and write rectangle shaped barcodes
  x libdmtx:   Use GNU autotools (autoconf, automake, libtool)
  x libdmtx:   New region detection overhaul
  x libdmtx:   Fix chcon error in Makefile (right answer might be to use autoconf)
  x bindings:  Include initial version of Python bindings from pydmtx project (thanks Dan!)
  x bindings:  Add decoding functionality through Python
  x bindings:  Expose new encoding functionality through Python
  x dmtxread:  Fix dmtxread crash when same barcode is found more than 16 times
  x dmtxread:  Verbose messages describing traits of detected barcodes
  x dmtxread:  --codewords option to print codewords instead of decoded message
  x dmtxread:  --newline option to insert newline character at end of output
  x dmtxwrite: Additional output formats (PNG, ASCII, codewords)
  x testsuite: 'make test' executes regression tests for encodation
  x testsuite: Add marathon images to project (thanks John!)

version 0.3: (15-Oct-2006)
  x Use preprocessor to pull code into one big file before compiling
  x Update Makefile to handle monolithic approach; add targets for test, util, tarball
  x Rename DmtxInfo struct and variables to DmtxDecode (for consistency with DmtxEncode)
  x Merge placement logic into single implementation for both encoding and decoding
  x Deploy codebase to SourceForge CVS
  x Add revision control keywords to source files
  x Implement remaining encodation schemes in dmtxdecode.c (X12, Base 256, etc...)
  x Create separate file for callback functions (allows them to be optional)
  x Move PNG (and other format) logic and dependencies to dmtxread, dmtxwrite, etc...
  x Fix the regressions (crash bugs) introduced during v0.2 structural rework
  x Add multi-page TIFF capabilities to dmtxread
  x Move pure decode calls from dmtxScanLine into a dmtxdecode.c function
  x Sample module color from more than one pixel location
  x Rename DmtxVector3 to DmtxColor3 and merge into dmtxcolor.c
  x Fix LoadPngImage() in dmtxread.c to return image count
  x Add package/build dependencies to INSTALL file
  x Build coding style test scripts
  x Replace current calibration size estimate with new approach
  x Size step size dynamically according to pixel size
  x Improved dmtxwrite (fixed bugs, implemented -o option)
  x Increase dmtxread default scanline count (feasible because of better stability)
  x Add man page for dmtxwrite

version 0.2: (11-Jun-2006)
  x Move dmtxCapturePixel routine to library code
  x Initial restructuring of code for architectural goodness
  x Improve API for real-world use (and not just dumping results to STDOUT)
  x Add "dmtxread" command line utility
  x Add "dmtxwrite" command line utility
  x Implement error detection
  x Create "simpletest.c" for full-circle processing
  x Use libpng(3) in library to read Data Matrix images
  x Slap together some basic documentation

version 0.1: (22-Apr-2006)
  x Cycle texture images with right-click
  x Complete PlotPoint so it handles floating rows and columns
  x Implement right and left directions of FollowEdge
  x Call right and left edge following scans started from vertical step scans
  x Implement 2D vector and matrix functions
  x Trace lines with actual line object (2D ray)
  x Turn corners when encountering the end of a followed line
  x Build 2d transformation to wrap around region, assuming parallelogram
  x Display pane 4 with reverse-transformed image capture
  x Enhance dmtxCapturePixel to use "area averaging" instead of nearest neighbor
  x Figure out why squares are 3 pixels off (to start: draw white gl lines over follower paths)
  x Add callback function for PlotEventPoint(x, y, event_type)
  x Improve follower logic (weighted line fit)
  x dmtxGetPixel: do averaged interpolation followed by a tMin/tMid/tMax cutoff
  x Add in de-skew transformation
  x Refactor vector libraries to consistently list target parameter first
  x Calibrate based on calibration lines
  x Shrink-fit transformation around region


future versions:
------------------------------------------------------------------------------
  o libdmtx:   Capture high-level design in documentation (data flow, module analogies)
  o libdmtx:   Try bi-linear approximation (instead of linear) in follower edge detection
  o libdmtx:   Implement fixed point math functions for use on mobile platforms
  o libdmtx:   Port to Windows?
  o libdmtx:   Add calibration functionality to remove spherical distortion


perhaps never:
---------------------------------------------------------------------------
  o libdmtx:   Implement pre-ECC200 Data Matrix standards (big effort/low demand)


Website:
---------------------------------------------------------------------------
  o Explore using single background image instead of split
  o Add what we currently do, don't do, would like to do in the future
  o Add http://hosted-projects.com/trac/hudora/public/wiki/huBarcode to resources page
