2010-06-16 12:00:31 +04:00
/* dmatrix.h - Handles Data Matrix ECC 200 */
2008-11-05 11:43:13 +03:00
/*
libzint - the open source barcode library
2020-10-26 15:21:43 +03:00
Copyright ( C ) 2009 - 2020 Robin Stuart < rstuart114 @ gmail . com >
2013-05-16 21:26:38 +04:00
Redistribution and use in source and binary forms , with or without
modification , are permitted provided that the following conditions
are met :
2017-10-23 22:37:52 +03:00
1. Redistributions of source code must retain the above copyright
notice , this list of conditions and the following disclaimer .
2013-05-16 21:26:38 +04:00
2. Redistributions in binary form must reproduce the above copyright
notice , this list of conditions and the following disclaimer in the
2017-10-23 22:37:52 +03:00
documentation and / or other materials provided with the distribution .
2013-05-16 21:26:38 +04:00
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
2017-10-23 22:37:52 +03:00
without specific prior written permission .
2013-05-16 21:26:38 +04:00
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
2017-10-23 22:37:52 +03:00
OUT OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF
2013-05-16 21:26:38 +04:00
SUCH DAMAGE .
2016-02-20 12:38:03 +03:00
*/
2019-12-19 03:37:55 +03:00
/* vim: set ts=4 sw=4 et : */
2010-06-16 12:00:31 +04:00
2015-08-18 15:04:27 +03:00
/*
Containes Extended Rectangular Data Matrix ( DMRE )
2017-03-29 20:48:44 +03:00
See http : //www.dmre.info for information
2015-08-18 15:04:27 +03:00
Contact : harald . oehlmann @ eurodatacouncil . org
*/
2019-12-19 03:37:55 +03:00
# ifndef __DMATRIX_H
# define __DMATRIX_H
2010-06-16 12:00:31 +04:00
2020-10-26 15:21:43 +03:00
# define DM_NULL 0
# define DM_ASCII 1
# define DM_C40 2
# define DM_TEXT 3
# define DM_X12 4
# define DM_EDIFACT 5
# define DM_BASE256 6
2010-06-16 12:00:31 +04:00
2017-08-09 11:13:37 +03:00
static const char c40_shift [ ] = {
2016-02-20 12:38:03 +03:00
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
0 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
} ;
2017-08-09 11:13:37 +03:00
static const char c40_value [ ] = {
2016-02-20 12:38:03 +03:00
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ,
3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 ,
15 , 16 , 17 , 18 , 19 , 20 , 21 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 ,
22 , 23 , 24 , 25 , 26 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31
} ;
2017-08-09 11:13:37 +03:00
static const char text_shift [ ] = {
2016-02-20 12:38:03 +03:00
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
0 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
2 , 2 , 2 , 2 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 3 , 3 , 3 , 3
} ;
2010-06-16 12:00:31 +04:00
2017-08-09 11:13:37 +03:00
static const char text_value [ ] = {
2016-02-20 12:38:03 +03:00
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ,
3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 ,
15 , 16 , 17 , 18 , 19 , 20 , 21 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 ,
22 , 23 , 24 , 25 , 26 , 0 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 27 , 28 , 29 , 30 , 31
} ;
2015-08-18 14:53:55 +03:00
// Position in option array [symbol option value - 1]
// The position in the option array is by increasing total data codewords with square first
2017-03-29 20:48:44 +03:00
// The last comment value is the total data codewords value.
2019-02-08 19:38:49 +03:00
// The index of this array is the --vers parameter value -1 and is given as first comment value
2016-02-20 12:38:03 +03:00
2017-08-09 11:13:37 +03:00
static const unsigned short int intsymbol [ ] = {
2019-08-30 19:41:58 +03:00
/* Standard DM */
2017-03-29 20:48:44 +03:00
0 , /* 1: 10x10 , 3*/ 1 , /* 2: 12x12 , 5*/ 3 , /* 3: 14x14 , 8*/ 5 , /* 4: 16x16 , 12*/
2019-08-30 19:41:58 +03:00
7 , /* 5: 18x18 , 18*/ 9 , /* 6: 20x20 , 22*/ 12 , /* 7: 22x22 , 30*/ 15 , /* 8: 24x24 , 36*/
18 , /* 9: 26x26 , 44*/ 23 , /* 10: 32x32 , 62*/ 31 , /* 11: 36x36 , 86*/ 34 , /* 12: 40x40 ,114*/
36 , /* 13: 44x44 ,144*/ 37 , /* 14: 48x48 ,174*/ 38 , /* 15: 52x52 ,204*/ 39 , /* 16: 64x64 ,280*/
40 , /* 17: 72x72 ,368*/ 41 , /* 18: 80x80 ,456*/ 42 , /* 19: 88x88 ,576*/ 43 , /* 20: 96x96 ,696*/
44 , /* 21:104x104,816*/ 45 , /* 22:120x120,1050*/ 46 , /* 23:132x132,1304*/ 47 , /* 24:144x144,1558*/
2017-03-29 20:48:44 +03:00
2 , /* 25: 8x18 , 5*/ 4 , /* 26: 8x32 , 10*/ 6 , /* 27: 12x26 , 16*/ 10 , /* 28: 12x36 , 22*/
2019-08-30 19:41:58 +03:00
13 , /* 29: 16x36 , 32*/ 20 , /* 30: 16x48 , 49*/
2020-10-26 15:21:43 +03:00
/* DMRE */
2019-08-30 19:41:58 +03:00
8 , /* 31: 8x48 , 18*/ 11 , /* 32: 8x64 , 24*/ 14 , /* 33: 8x80 , 32*/ 16 , /* 34: 8x96 , 38*/
21 , /* 35: 8x120, 49*/ 25 , /* 36: 8x144, 63*/ 17 , /* 37: 12x64 , 43*/ 26 , /* 38: 12x88 , 64*/
24 , /* 39: 16x64 , 62*/ 19 , /* 40: 20x36 , 44*/ 22 , /* 41: 20x44 , 56*/ 30 , /* 42: 20x64 , 84*/
28 , /* 43: 22x48 , 72*/ 29 , /* 44: 24x48 , 80*/ 33 , /* 45: 24x64 ,108*/ 27 , /* 46: 26x40 , 70*/
32 , /* 47: 26x48 , 90*/ 35 , /* 48: 26x64 ,118*/
2016-02-20 12:38:03 +03:00
} ;
2016-03-03 00:12:38 +03:00
2015-08-18 15:49:35 +03:00
// Number of DM Sizes
2019-08-30 19:41:58 +03:00
# define DMSIZESCOUNT 48
2015-08-18 15:49:35 +03:00
// Number of 144x144 for special interlace
2019-08-30 19:41:58 +03:00
# define INTSYMBOL144 47
2015-08-18 15:49:35 +03:00
2016-03-03 00:12:38 +03:00
// Is the current code a DMRE code ?
// This is the case, if intsymbol index >= 30
2017-08-09 11:13:37 +03:00
static const char isDMRE [ ] = {
2019-08-30 19:41:58 +03:00
/* 0*/ 0 , /* 10x10, 3*/ 0 , /* 12x12 , 5*/ 0 , /* 8x18 , 5*/ 0 , /* 14x14 , 8*/
/* 4*/ 0 , /* 8x32 , 10*/ 0 , /* 16x16 , 12*/ 0 , /* 12x26 , 16*/ 0 , /* 18x18 , 18*/
/* 8*/ 1 , /* 8x48 , 18*/ 0 , /* 20x20 , 22*/ 0 , /* 12x36 , 22*/ 1 , /* 8x64 , 24*/
/*12*/ 0 , /* 22x22 , 30*/ 0 , /* 16x36 , 32*/ 1 , /* 8x80 , 32*/ 0 , /* 24x24 , 36*/
/*16*/ 1 , /* 8x96 , 38*/ 1 , /* 12x64 , 43*/ 0 , /* 26x26 , 44*/ 1 , /* 20x36 , 44*/
/*20*/ 0 , /* 16x48 , 49*/ 1 , /* 8x120, 49*/ 1 , /* 20x44 , 56*/ 0 , /* 32x32 , 62*/
/*24*/ 1 , /* 16x64 , 62*/ 1 , /* 8x144, 63*/ 1 , /* 12x88 , 64*/ 1 , /* 26x40 , 70*/
/*28*/ 1 , /* 22x48 , 72*/ 1 , /* 24x48 , 80*/ 1 , /* 20x64 , 84*/ 0 , /* 36x36 , 86*/
/*32*/ 1 , /* 26x48 , 90*/ 1 , /* 24x64 ,108*/ 0 , /* 40x40 ,114*/ 1 , /* 26x64 ,118*/
/*36*/ 0 , /* 44x44 ,144*/ 0 , /* 48x48 ,174*/ 0 , /* 52x52 ,204*/ 0 , /* 64x64 ,280*/
/*40*/ 0 , /* 72x72 ,368*/ 0 , /* 80x80 ,456*/ 0 , /* 88x88 ,576*/ 0 , /* 96x96 ,696*/
/*44*/ 0 , /*104x104,816*/ 0 , /*120x120,1050*/ 0 , /*132x132,1304*/ 0 /*144x144,1558*/
2016-03-03 00:12:38 +03:00
} ;
// Horizontal matrix size
2017-08-09 11:13:37 +03:00
static const unsigned short int matrixH [ ] = {
2019-08-30 19:41:58 +03:00
/* 0*/ 10 , /* 10x10 , 3*/ 12 , /* 12x12 , 5 */ 8 , /* 8x18 , 5*/ 14 , /* 14x14 , 8*/
/* 4*/ 8 , /* 8x32 , 10*/ 16 , /* 16x16 , 12*/ 12 , /* 12x26 , 16*/ 18 , /* 18x18 , 18*/
/* 8*/ 8 , /* 8x48 , 18*/ 20 , /* 20x20 , 22*/ 12 , /* 12x36 , 22*/ 8 , /* 8x64 , 24*/
/*12*/ 22 , /* 22x22 , 30*/ 16 , /* 16x36 , 32*/ 8 , /* 8x80 , 32*/ 24 , /* 24x24 , 36*/
/*16*/ 8 , /* 8x96 , 38*/ 12 , /* 12x64 , 43*/ 26 , /* 26x26 , 44*/ 20 , /* 20x36 , 44*/
/*20*/ 16 , /* 16x48 , 49*/ 8 , /* 8x120, 49*/ 20 , /* 20x44 , 56*/ 32 , /* 32x32 , 62*/
/*24*/ 16 , /* 16x64 , 62*/ 8 , /* 8x144, 63*/ 12 , /* 12x88 , 64*/ 26 , /* 26x40 , 70*/
/*28*/ 22 , /* 22x48 , 72*/ 24 , /* 24x48 , 80*/ 20 , /* 20x64 , 84*/ 36 , /* 36x36 , 86*/
/*32*/ 26 , /* 26x48 , 90*/ 24 , /* 24x64 ,108*/ 40 , /* 40x40 ,114*/ 26 , /* 26x64 ,118*/
/*36*/ 44 , /* 44x44 ,144*/ 48 , /* 48x48 ,174*/ 52 , /* 52x52 ,204*/ 64 , /* 64x64 ,280*/
/*40*/ 72 , /* 72x72 ,368*/ 80 , /* 80x80 ,456*/ 88 , /* 88x88 ,576*/ 96 , /* 96x96 ,696*/
/*44*/ 104 , /*104x104,816*/ 120 , /*120x120,1050*/ 132 , /*132x132,1304*/ 144 /*144x144,1558*/
2016-03-03 00:12:38 +03:00
} ;
2015-08-18 14:53:55 +03:00
// Vertical matrix sizes
2010-06-16 12:00:31 +04:00
2017-08-09 11:13:37 +03:00
static const unsigned short int matrixW [ ] = {
2017-03-29 20:48:44 +03:00
/* 0*/ 10 , /* 10x10 */ 12 , /* 12x12 */ 18 , /* 8x18 */ 14 , /* 14x14 */
/* 4*/ 32 , /* 8x32 */ 16 , /* 16x16 */ 26 , /* 12x26 */ 18 , /* 18x18 */
/* 8*/ 48 , /* 8x48 */ 20 , /* 20x20 */ 36 , /* 12x36 */ 64 , /* 8x64 */
2019-08-30 19:41:58 +03:00
/*12*/ 22 , /* 22x22 */ 36 , /* 16x36 */ 80 , /* 8x80 */ 24 , /* 24x24 */
/*16*/ 96 , /* 8x96 */ 64 , /* 12x64 */ 26 , /* 26x26 */ 36 , /* 20x36 */
/*20*/ 48 , /* 16x48 */ 120 , /* 8x120*/ 44 , /* 20x44 */ 32 , /* 32x32 */
/*24*/ 64 , /* 16x64 */ 144 , /* 8x144*/ 88 , /* 12x88 */ 40 , /* 26x40 */
/*28*/ 48 , /* 22x48 */ 48 , /* 24x48 */ 64 , /* 20x64 */ 36 , /* 36x36 */
/*32*/ 48 , /* 26x48 */ 64 , /* 24x64 */ 40 , /* 40x40 */ 64 , /* 26x64 */
/*36*/ 44 , /* 44x44 */ 48 , /* 48x48 */ 52 , /* 52x52 */ 64 , /* 64x64 */
/*40*/ 72 , /* 72x72 */ 80 , /* 80x80 */ 88 , /* 88x88 */ 96 , /* 96x96 */
/*44*/ 104 , /*104x104*/ 120 , /*120x120*/ 132 , /*132x132*/ 144 /*144x144*/
2016-02-20 12:38:03 +03:00
} ;
2015-08-18 14:53:55 +03:00
// Horizontal submodule size (including subfinder)
2010-06-16 12:00:31 +04:00
2017-08-09 11:13:37 +03:00
static const unsigned short int matrixFH [ ] = {
2019-08-30 19:41:58 +03:00
/* 0*/ 10 , /* 10x10 */ 12 , /* 12x12 */ 8 , /* 8x18 */ 14 , /* 14x14 */
2017-03-29 20:48:44 +03:00
/* 4*/ 8 , /* 8x32 */ 16 , /* 16x16 */ 12 , /* 12x26 */ 18 , /* 18x18 */
/* 8*/ 8 , /* 8x48 */ 20 , /* 20x20 */ 12 , /* 12x36 */ 8 , /* 8x64 */
2019-08-30 19:41:58 +03:00
/*12*/ 22 , /* 22x22 */ 16 , /* 16x36 */ 8 , /* 8x80 */ 24 , /* 24x24 */
2020-10-26 15:21:43 +03:00
/*16*/ 8 , /* 8x96 */ 12 , /* 12x64 */ 26 , /* 26x26 */ 20 , /* 20x36 */
2019-08-30 19:41:58 +03:00
/*20*/ 16 , /* 16x48 */ 8 , /* 8x120*/ 20 , /* 20x44 */ 16 , /* 32x32 */
/*24*/ 16 , /* 16x64 */ 8 , /* 8x144*/ 12 , /* 12x88 */ 26 , /* 26x40 */
/*28*/ 22 , /* 22x48 */ 24 , /* 24x48 */ 20 , /* 20x64 */ 18 , /* 36x36 */
/*32*/ 26 , /* 26x48 */ 24 , /* 24x64 */ 20 , /* 40x40 */ 26 , /* 26x64 */
/*36*/ 22 , /* 44x44 */ 24 , /* 48x48 */ 26 , /* 52x52 */ 16 , /* 64x64 */
/*40*/ 18 , /* 72x72 */ 20 , /* 80x80 */ 22 , /* 88x88 */ 24 , /* 96x96 */
2020-10-26 15:21:43 +03:00
/*44*/ 26 , /*104x104*/ 20 , /*120x120*/ 22 , /*132x132*/ 24 /*144x144*/
2016-02-20 12:38:03 +03:00
} ;
2015-08-18 14:53:55 +03:00
// Vertical submodule size (including subfinder)
2010-06-16 12:00:31 +04:00
2017-08-09 11:13:37 +03:00
static const unsigned short int matrixFW [ ] = {
2017-03-29 20:48:44 +03:00
/* 0*/ 10 , /* 10x10 */ 12 , /* 12x12 */ 18 , /* 8x18 */ 14 , /* 14x14 */
/* 4*/ 16 , /* 8x32 */ 16 , /* 16x16 */ 26 , /* 12x26 */ 18 , /* 18x18 */
/* 8*/ 24 , /* 8x48 */ 20 , /* 20x20 */ 18 , /* 12x36 */ 16 , /* 8x64 */
2019-08-30 19:41:58 +03:00
/*12*/ 22 , /* 22x22 */ 18 , /* 16x36 */ 20 , /* 8x80 */ 24 , /* 24x24 */
2020-10-26 15:21:43 +03:00
/*16*/ 24 , /* 8x96 */ 16 , /* 12x64 */ 26 , /* 26x26 */ 18 , /* 20x36 */
2019-08-30 19:41:58 +03:00
/*20*/ 24 , /* 16x48 */ 20 , /* 8x120*/ 22 , /* 20x44 */ 16 , /* 32x32 */
/*24*/ 16 , /* 16x64 */ 24 , /* 8x144*/ 22 , /* 12x88 */ 20 , /* 26x40 */
/*28*/ 24 , /* 22x48 */ 24 , /* 24x48 */ 16 , /* 20x64 */ 18 , /* 36x36 */
/*32*/ 24 , /* 26x48 */ 16 , /* 24x64 */ 20 , /* 40x40 */ 16 , /* 26x64 */
/*36*/ 22 , /* 44x44 */ 24 , /* 48x48 */ 26 , /* 52x52 */ 16 , /* 64x64 */
/*40*/ 18 , /* 72x72 */ 20 , /* 80x80 */ 22 , /* 88x88 */ 24 , /* 96x96 */
2020-10-26 15:21:43 +03:00
/*44*/ 26 , /*104x104*/ 20 , /*120x120*/ 22 , /*132x132*/ 24 /*144x144*/
2016-02-20 12:38:03 +03:00
} ;
2015-08-18 14:53:55 +03:00
// Total Data Codewords
2010-06-16 12:00:31 +04:00
2017-08-09 11:13:37 +03:00
static const unsigned short int matrixbytes [ ] = {
2017-03-29 20:48:44 +03:00
/* 0*/ 3 , /* 10x10 */ 5 , /* 12x12 */ 5 , /* 8x18 */ 8 , /* 14x14 */
/* 4*/ 10 , /* 8x32 */ 12 , /* 16x16 */ 16 , /* 12x26 */ 18 , /* 18x18 */
/* 8*/ 18 , /* 8x48 */ 22 , /* 20x20 */ 22 , /* 12x36 */ 24 , /* 8x64 */
2019-08-30 19:41:58 +03:00
/*12*/ 30 , /* 22x22 */ 32 , /* 16x36 */ 32 , /* 8x80 */ 36 , /* 24x24 */
2020-10-26 15:21:43 +03:00
/*16*/ 38 , /* 8x96 */ 43 , /* 12x64 */ 44 , /* 26x26 */ 44 , /* 20x36 */
2019-08-30 19:41:58 +03:00
/*20*/ 49 , /* 16x48 */ 49 , /* 8x120*/ 56 , /* 20x44 */ 62 , /* 32x32 */
/*24*/ 62 , /* 16x64 */ 63 , /* 8x144*/ 64 , /* 12x88 */ 70 , /* 26x40 */
/*28*/ 72 , /* 22x48 */ 80 , /* 24x48 */ 84 , /* 20x64 */ 86 , /* 36x36 */
/*32*/ 90 , /* 26x48 */ 108 , /* 24x64 */ 114 , /* 40x40 */ 118 , /* 26x64 */
/*36*/ 144 , /* 44x44 */ 174 , /* 48x48 */ 204 , /* 52x52 */ 280 , /* 64x64 */
/*40*/ 368 , /* 72x72 */ 456 , /* 80x80 */ 576 , /* 88x88 */ 696 , /* 96x96 */
2020-10-26 15:21:43 +03:00
/*44*/ 816 , /*104x104*/ 1050 , /*120x120*/ 1304 , /*132x132*/ 1558 /*144x144*/
2016-02-20 12:38:03 +03:00
} ;
2015-08-18 14:53:55 +03:00
// Data Codewords per RS-Block
2010-06-16 12:00:31 +04:00
2017-08-09 11:13:37 +03:00
static const unsigned short int matrixdatablock [ ] = {
2017-03-29 20:48:44 +03:00
/* 0*/ 3 , /* 10x10 */ 5 , /* 12x12 */ 5 , /* 8x18 */ 8 , /* 14x14 */
/* 4*/ 10 , /* 8x32 */ 12 , /* 16x16 */ 16 , /* 12x26 */ 18 , /* 18x18 */
/* 8*/ 18 , /* 8x48 */ 22 , /* 20x20 */ 22 , /* 12x36 */ 24 , /* 8x64 */
2019-08-30 19:41:58 +03:00
/*12*/ 30 , /* 22x22 */ 32 , /* 16x36 */ 32 , /* 8x80 */ 36 , /* 24x24 */
2020-10-26 15:21:43 +03:00
/*16*/ 38 , /* 8x96 */ 43 , /* 12x64 */ 44 , /* 26x26 */ 44 , /* 20x36 */
2019-08-30 19:41:58 +03:00
/*20*/ 49 , /* 16x48 */ 49 , /* 8x120*/ 56 , /* 20x44 */ 62 , /* 32x32 */
/*24*/ 62 , /* 16x64 */ 63 , /* 8x144*/ 64 , /* 12x88 */ 70 , /* 26x40 */
/*28*/ 72 , /* 22x48 */ 80 , /* 24x48 */ 84 , /* 20x64 */ 86 , /* 36x36 */
/*32*/ 90 , /* 26x48 */ 108 , /* 24x64 */ 114 , /* 40x40 */ 118 , /* 26x64 */
/*36*/ 144 , /* 44x44 */ 174 , /* 48x48 */ 102 , /* 52x52 */ 140 , /* 64x64 */
/*40*/ 92 , /* 72x72 */ 114 , /* 80x80 */ 144 , /* 88x88 */ 174 , /* 96x96 */
2020-10-26 15:21:43 +03:00
/*44*/ 136 , /*104x104*/ 175 , /*120x120*/ 163 , /*132x132*/ 156 /* 144x144*/
2016-02-20 12:38:03 +03:00
} ;
2015-08-18 14:53:55 +03:00
// ECC Codewords per RS-Block
2017-08-09 11:13:37 +03:00
static const unsigned short int matrixrsblock [ ] = {
2017-03-29 20:48:44 +03:00
/* 0*/ 5 , /* 10x10 */ 7 , /* 12x12 */ 7 , /* 8x18 */ 10 , /* 14x14 */
/* 4*/ 11 , /* 8x32 */ 12 , /* 16x16 */ 14 , /* 12x26 */ 14 , /* 18x18 */
/* 8*/ 15 , /* 8x48 */ 18 , /* 20x20 */ 18 , /* 12x36 */ 18 , /* 8x64 */
2019-08-30 19:41:58 +03:00
/*12*/ 20 , /* 22x22 */ 24 , /* 16x36 */ 22 , /* 8x80 */ 24 , /* 24x24 */
/*16*/ 28 , /* 8x96 */ 27 , /* 12x64 */ 28 , /* 26x26 */ 28 , /* 20x36 */
/*20*/ 28 , /* 16x48 */ 32 , /* 8x120*/ 34 , /* 20x44 */ 36 , /* 32x32 */
/*24*/ 36 , /* 16x64 */ 36 , /* 8x144*/ 36 , /* 12x88 */ 38 , /* 26x40 */
/*28*/ 38 , /* 22x48 */ 41 , /* 24x48 */ 42 , /* 20x64 */ 42 , /* 36x36 */
/*32*/ 42 , /* 26x48 */ 46 , /* 24x64 */ 48 , /* 40x40 */ 50 , /* 26x64 */
/*36*/ 56 , /* 44x44 */ 68 , /* 48x48 */ 42 , /* 52x52 */ 56 , /* 64x64 */
2020-10-26 15:21:43 +03:00
/*40*/ 36 , /* 72x72 */ 48 , /* 80x80 */ 56 , /* 88x88 */ 68 , /* 96x96 */
2019-08-30 19:41:58 +03:00
/*44*/ 56 , /*104x104*/ 68 , /*120x120*/ 62 , /*132x132*/ 62 /*144x144*/
2016-02-20 12:38:03 +03:00
} ;
2010-06-16 12:00:31 +04:00
2019-12-19 03:37:55 +03:00
# endif /* __DMATRIX_H */