2012-11-02 13:09 UTC+0100 Viktor Szakats (harbour syenar.net)

* contrib/hbexpat/*.[c|h]
  * contrib/hbzebra/*.[c|h]
    * cherry picked some fixes from uncrustified code
This commit is contained in:
Viktor Szakats
2012-11-02 12:16:52 +00:00
parent d036f45792
commit 40dd9664cf
15 changed files with 578 additions and 541 deletions

View File

@@ -16,6 +16,11 @@
The license applies to all entries newer than 2009-04-28.
*/
2012-11-02 13:09 UTC+0100 Viktor Szakats (harbour syenar.net)
* contrib/hbexpat/*.[c|h]
* contrib/hbzebra/*.[c|h]
* cherry picked some fixes from uncrustified code
2012-11-02 12:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* bin/find.hb
+ added support for multiple symbols at one run, f.e.:
@@ -29,7 +34,7 @@
* src/rtl/gtsln/gtsln.c
* src/rtl/gttrm/gttrm.c
* src/rtl/hblpp.c
* 'for( ; ; )' -> '{ ;; }'
* 'for( ; ; )' -> '( ;; )'
2012-11-01 18:12 UTC+0100 Viktor Szakats (harbour syenar.net)
* contrib/hbxpp/xppopc.c
@@ -46,7 +51,7 @@
* use {;} for empty loop body
; TODO: Use one common syntax for empty blocks.
Harbour currently uses these:
{}, { ; }, {;}, {};
{}, { ; }, {;}, {};, ;
2012-11-01 17:41 UTC+0100 Viktor Szakats (harbour syenar.net)
* ChangeLog
@@ -74,7 +79,7 @@
* use {;} for empty loop body
; TODO: Use one common syntax for empty blocks.
Harbour currently uses these:
{}, { ; }, {;}, {};
{}, { ; }, {;}, {};, ;
2012-11-01 16:04 UTC+0100 Viktor Szakats (harbour syenar.net)
* contrib/hbexpat/core.c

View File

@@ -69,7 +69,7 @@
#include "expat.h"
#define HB_EXPAT_VERS( ma, mi, mu ) ( XML_MAJOR_VERSION > ma || ( XML_MAJOR_VERSION == ma && ( XML_MINOR_VERSION > mi || ( XML_MINOR_VERSION == mi && XML_MICRO_VERSION >= mu ) ) ) )
#define HB_EXPAT_VERS( ma, mi, mu ) ( XML_MAJOR_VERSION > ma || ( XML_MAJOR_VERSION == ma && ( XML_MINOR_VERSION > mi || ( XML_MINOR_VERSION == mi && XML_MICRO_VERSION >= mu ) ) ) )
#include "hbapi.h"
#include "hbapiitm.h"
@@ -107,7 +107,7 @@
typedef struct _HB_EXPAT
{
XML_Parser parser;
PHB_ITEM pVar[ _VAR_LEN_ ];
PHB_ITEM pVar[ _VAR_LEN_ ];
} HB_EXPAT, * PHB_EXPAT;
/* Skeleton wrapper for all single handler setters */
@@ -676,13 +676,14 @@ static void PHB_EXPAT_free( PHB_EXPAT hb_expat, HB_BOOL bFree )
static HB_GARBAGE_FUNC( PHB_EXPAT_release )
{
PHB_EXPAT * hb_expat_ptr = ( PHB_EXPAT * ) Cargo;
/* Check if pointer is not NULL to avoid multiple freeing */
if( hb_expat_ptr && * hb_expat_ptr )
if( hb_expat_ptr && *hb_expat_ptr )
{
PHB_EXPAT hb_expat = * hb_expat_ptr;
PHB_EXPAT hb_expat = *hb_expat_ptr;
/* set pointer to NULL to avoid multiple freeing */
* hb_expat_ptr = NULL;
*hb_expat_ptr = NULL;
/* Destroy the object */
PHB_EXPAT_free( hb_expat, HB_TRUE );
@@ -693,9 +694,9 @@ static HB_GARBAGE_FUNC( PHB_EXPAT_mark )
{
PHB_EXPAT * hb_expat_ptr = ( PHB_EXPAT * ) Cargo;
if( hb_expat_ptr && * hb_expat_ptr )
if( hb_expat_ptr && *hb_expat_ptr )
{
PHB_EXPAT hb_expat = * hb_expat_ptr;
PHB_EXPAT hb_expat = *hb_expat_ptr;
HB_UINT tmp;
for( tmp = 0; tmp < HB_SIZEOFARRAY( hb_expat->pVar ); ++tmp )
@@ -721,7 +722,7 @@ static PHB_EXPAT PHB_EXPAT_par( int iParam )
{
void ** ph = ( void ** ) hb_parptrGC( &s_gcEXPATFuncs, iParam );
return ph ? ( PHB_EXPAT ) * ph : NULL;
return ph ? ( PHB_EXPAT ) *ph : NULL;
}
static void hb_expat_setvar( PHB_EXPAT hb_expat, int iHandler, PHB_ITEM pBlock )
@@ -773,10 +774,10 @@ HB_FUNC( XML_PARSERCREATE )
XML_SetUserData( hb_expat->parser, hb_expat );
* ph = hb_expat;
*ph = hb_expat;
}
else
* ph = NULL;
*ph = NULL;
hb_retptrGC( ph );
}
@@ -809,12 +810,12 @@ HB_FUNC( XML_PARSERFREE )
{
void ** ph = ( void ** ) hb_parptrGC( &s_gcEXPATFuncs, 1 );
if( ph && * ph )
if( ph && *ph )
{
PHB_EXPAT hb_expat = ( PHB_EXPAT ) * ph;
PHB_EXPAT hb_expat = ( PHB_EXPAT ) *ph;
/* set pointer to NULL to avoid multiple freeing */
* ph = NULL;
*ph = NULL;
/* Destroy the object */
PHB_EXPAT_free( hb_expat, HB_TRUE );

View File

@@ -173,6 +173,7 @@ PHB_ZEBRA hb_zebra_create_codabar( const char * szCode, HB_SIZE nLen, int iFlags
HB_FUNC( HB_ZEBRA_CREATE_CODABAR )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_codabar( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -66,7 +66,8 @@ static const char s_code[] = {
0x09, /* 8 */
0x01, /* 9 */
0x04, /* - 10 */
0x0C}; /* Start/Stop 11 */
0x0C /* Start/Stop 11 */
};
static int _code11_charno( char ch )
{
@@ -165,6 +166,7 @@ PHB_ZEBRA hb_zebra_create_code11( const char * szCode, HB_SIZE nLen, int iFlags
HB_FUNC( HB_ZEBRA_CREATE_CODE11 )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_code11( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -161,20 +161,21 @@ static const unsigned short s_code[] = {
01657, /* FNC1 FNC1 FNC1 102 */
00413, /* Start Code A 103 */
00113, /* Start Code B 104 */
00713}; /* Start Code C 105 */
00713 /* Start Code C 105 */
};
#define CODESET_A 0
#define CODESET_B 1
#define CODESET_A 0
#define CODESET_B 1
#define START_A 103
#define START_B 104
#define START_C 105
#define START_A 103
#define START_B 104
#define START_C 105
#define SELECT_A 101
#define SELECT_B 100
#define SELECT_C 99
#define SELECT_A 101
#define SELECT_B 100
#define SELECT_C 99
#define SHIFT_AB 98
#define SHIFT_AB 98
static int _code128_charno( char ch, int iCodeSet )
@@ -390,6 +391,7 @@ PHB_ZEBRA hb_zebra_create_code128( const char * szCode, HB_SIZE nLen, int iFlags
HB_FUNC( HB_ZEBRA_CREATE_CODE128 )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_code128( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -101,7 +101,8 @@ static const HB_UCHAR s_code[] =
0x2A, /* $ */
0x8A, /* / */
0xA2, /* + */
0xA8 }; /* % */
0xA8 /* % */
};
static int _code39_charno( char ch )
{
@@ -208,6 +209,7 @@ PHB_ZEBRA hb_zebra_create_code39( const char * szCode, HB_SIZE nLen, int iFlags
HB_FUNC( HB_ZEBRA_CREATE_CODE39 )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_code39( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -103,7 +103,8 @@ static const char s_code[] = {
0x5B, /* (%) 44 */
0x6B, /* (/) 45 */
0x4C, /* (+) 46 */
0x7A}; /* Start/Stop 47 */
0x7A /* Start/Stop 47 */
};
static int _code93_charno( char ch )
{
@@ -261,6 +262,7 @@ PHB_ZEBRA hb_zebra_create_code93( const char * szCode, HB_SIZE nLen, int iFlags
HB_FUNC( HB_ZEBRA_CREATE_CODE93 )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_code93( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -60,7 +60,8 @@
PHB_BITBUFFER hb_bitbuffer_create( void )
{
PHB_BITBUFFER pBitBuffer = ( PHB_BITBUFFER ) hb_xgrab( sizeof( HB_BITBUFFER ) );
PHB_BITBUFFER pBitBuffer = ( PHB_BITBUFFER ) hb_xgrab( sizeof( HB_BITBUFFER ) );
hb_xmemset( pBitBuffer, 0, sizeof( HB_BITBUFFER ) );
return pBitBuffer;
}
@@ -106,7 +107,7 @@ void hb_bitbuffer_set( PHB_BITBUFFER pBitBuffer, HB_SIZE nPos, HB_BOOL fValue )
if( fValue )
*( pBitBuffer->pBuffer + ( nPos >> 3 ) ) |= 1 << ( nPos & 0x7 );
else
*( pBitBuffer->pBuffer + ( nPos >> 3 ) ) &= ~ ( 1 << ( nPos & 0x7 ) );
*( pBitBuffer->pBuffer + ( nPos >> 3 ) ) &= ~( 1 << ( nPos & 0x7 ) );
if( pBitBuffer->nLen <= nPos )
pBitBuffer->nLen = nPos + 1;
@@ -123,7 +124,7 @@ void hb_bitbuffer_not( PHB_BITBUFFER pBitBuffer, HB_SIZE nPos )
pBitBuffer->nAlloc = nNewAlloc;
}
* ( pBitBuffer->pBuffer + ( nPos >> 3 ) ) ^= 1 << ( nPos & 0x7 );
*( pBitBuffer->pBuffer + ( nPos >> 3 ) ) ^= 1 << ( nPos & 0x7 );
}
@@ -140,7 +141,7 @@ void hb_bitbuffer_cat_int( PHB_BITBUFFER pBitBuffer, int iValue, int iLen )
}
if( ( unsigned int ) iLen > sizeof( int ) * 8 )
iLen = sizeof( int ) * 8;
iLen = sizeof( int ) * 8;
/* TODO: optimize */
for( i = 0; i < iLen; i++ )
@@ -161,7 +162,7 @@ void hb_bitbuffer_cat_int_rev( PHB_BITBUFFER pBitBuffer, int iValue, int iLen )
}
if( ( unsigned int ) iLen > sizeof( int ) * 8 )
iLen = sizeof( int ) * 8;
iLen = sizeof( int ) * 8;
/* TODO: optimize */
for( i = iLen - 1; i >= 0; i-- )
@@ -175,7 +176,7 @@ static HB_GARBAGE_FUNC( hb_zebra_destructor )
{
PHB_ZEBRA * ppZebra = ( PHB_ZEBRA * ) Cargo;
if( * ppZebra )
if( *ppZebra )
{
hb_zebra_destroy( *ppZebra );
*ppZebra = NULL;
@@ -193,6 +194,7 @@ static const HB_GC_FUNCS s_gcZebraFuncs =
PHB_ZEBRA hb_zebraItemGet( PHB_ITEM pItem )
{
PHB_ZEBRA * ppZebra = ( PHB_ZEBRA * ) hb_itemGetPtrGC( pItem, &s_gcZebraFuncs );
return ppZebra ? *ppZebra : NULL;
}
@@ -211,7 +213,7 @@ void hb_zebraItemClear( PHB_ITEM pItem )
PHB_ZEBRA * ppZebra = ( PHB_ZEBRA * ) hb_itemGetPtrGC( pItem, &s_gcZebraFuncs );
if( ppZebra )
* ppZebra = NULL;
*ppZebra = NULL;
}
@@ -237,7 +239,8 @@ void hb_zebra_ret( PHB_ZEBRA pZebra )
PHB_ZEBRA hb_zebra_create( void )
{
PHB_ZEBRA pZebra = ( PHB_ZEBRA ) hb_xgrab( sizeof( HB_ZEBRA ) );
PHB_ZEBRA pZebra = ( PHB_ZEBRA ) hb_xgrab( sizeof( HB_ZEBRA ) );
hb_xmemset( pZebra, 0, sizeof( HB_ZEBRA ) );
return pZebra;
}
@@ -256,6 +259,7 @@ void hb_zebra_destroy( PHB_ZEBRA pZebra )
HB_FUNC( HB_ZEBRA_DESTROY )
{
PHB_ZEBRA pZebra = hb_zebra_param( 1 );
if( pZebra )
{
hb_zebraItemClear( hb_param( 1, HB_IT_POINTER ) );
@@ -267,6 +271,7 @@ HB_FUNC( HB_ZEBRA_DESTROY )
HB_FUNC( HB_ZEBRA_GETERROR )
{
PHB_ZEBRA pZebra = hb_zebra_param( 1 );
if( pZebra )
{
hb_retni( pZebra->iError );
@@ -277,6 +282,7 @@ HB_FUNC( HB_ZEBRA_GETERROR )
HB_FUNC( HB_ZEBRA_GETCODE )
{
PHB_ZEBRA pZebra = hb_zebra_param( 1 );
if( pZebra )
{
hb_retc( pZebra->szCode );

View File

@@ -55,14 +55,14 @@
#include "hbapierr.h"
#include "hbvm.h"
typedef void ( * HB_ZEBRA_CALLBACK )( void * cargo, double dX, double dY, double dWidth, double dHeight );
typedef void ( *HB_ZEBRA_CALLBACK )( void * cargo, double dX, double dY, double dWidth, double dHeight );
int hb_zebra_draw( PHB_ZEBRA pZebra, HB_ZEBRA_CALLBACK pCallback, void * cargo, double dX, double dY, double dWidth, double dHeight, int iFlags )
{
double dLast;
HB_SIZE n, nLen, nCount;
HB_BOOL fBit, fLastBit;
int i, iCol = pZebra->iCol;
double dLast;
HB_SIZE n, nLen, nCount;
HB_BOOL fBit, fLastBit;
int i, iCol = pZebra->iCol;
HB_SYMBOL_UNUSED( iFlags );
@@ -131,6 +131,7 @@ int hb_zebra_draw_codeblock( PHB_ZEBRA pZebra, PHB_ITEM pDrawBlock, double dX, d
HB_FUNC( HB_ZEBRA_DRAW )
{
PHB_ZEBRA pZebra = hb_zebra_param( 1 );
if( pZebra )
{
PHB_ITEM pDrawBlock = hb_param( 2, HB_IT_BLOCK );

View File

@@ -69,7 +69,7 @@
Online decoder:
http://www.datasymbol.com/barcode-recognition-sdk/barcode-reader/online-barcode-decoder.html
*/
*/
#include "hbzebra.h"
#include "hbapiitm.h"
@@ -81,17 +81,17 @@
#define PAIR_OF_DIGITS 130 /* 00..99 encoded as 130..229 */
#define SHIFT_EXTENDED_ASCII 235 /* Shift to extended ASCII for 1 character */
#define SIZE_COUNT 30
#define SIZE_COUNT 30
typedef struct
{
int iRow;
int iCol;
int iRegionRow;
int iRegionCol;
int iDataSize;
int iBlockSize;
int iBlockErrorSize;
int iRow;
int iCol;
int iRegionRow;
int iRegionCol;
int iDataSize;
int iBlockSize;
int iBlockErrorSize;
} DATAMATRIX_SIZE, * PDATAMATRIX_SIZE;
@@ -136,6 +136,7 @@ static int _datamatrix_isdigit( char ch )
static int _datamatrix_encode( const char * szCode, int iLen, unsigned char * pCW )
{
int i, iPos = 0;
for( i = 0; i < iLen; i++ )
{
if( _datamatrix_isdigit( szCode[ i ] ) && i < iLen - 1 && _datamatrix_isdigit( szCode[ i + 1 ] ) )
@@ -158,7 +159,7 @@ static int _datamatrix_encode( const char * szCode, int iLen, unsigned char * pC
static void _reed_solomon_encode( unsigned char * pData, int iDataLen, unsigned char * pEC, int iECLen, int * pPoly, int * pExp, int * pLog, int iMod )
{
int i, j;
int i, j;
unsigned char iM;
for( i = 0; i < iECLen; i++ )
@@ -405,7 +406,7 @@ static void _datamatrix_do_placement( PHB_BITBUFFER pBits, unsigned char * pCW,
PHB_ZEBRA hb_zebra_create_datamatrix( const char * szCode, HB_SIZE nLen, int iFlags )
{
PHB_ZEBRA pZebra;
PHB_ZEBRA pZebra;
const DATAMATRIX_SIZE * pSize;
unsigned char * pCW;
int i, j, iDataCount, iErrorSize, iLen = ( int ) nLen;
@@ -463,7 +464,7 @@ PHB_ZEBRA hb_zebra_create_datamatrix( const char * szCode, HB_SIZE nLen, int iFl
#if 0
for( i = 0; i < pSize->iDataSize + iErrorSize; i++ )
{
HB_TRACE( HB_TR_ALWAYS, ("cw=%d", pCW[ i ] ));
HB_TRACE( HB_TR_ALWAYS, ( "cw=%d", pCW[ i ] ) );
}
#endif
@@ -501,6 +502,7 @@ PHB_ZEBRA hb_zebra_create_datamatrix( const char * szCode, HB_SIZE nLen, int iFl
HB_FUNC( HB_ZEBRA_CREATE_DATAMATRIX )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_datamatrix( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -63,7 +63,7 @@ static const char s_gcode[] = { 0x72, 0x66, 0x6C, 0x42, 0x5C, 0x4E, 0x50, 0x44,
static char _ean13_checksum( const char * szCode )
{
int i, sum = 0;
int i, sum = 0;
for( i = 0; i < 12; i++ )
sum += ( szCode[ i ] - '0' ) * ( i & 1 ? 3 : 1 );
@@ -72,7 +72,7 @@ static char _ean13_checksum( const char * szCode )
static char _ean8_checksum( const char * szCode )
{
int i, sum = 0;
int i, sum = 0;
for( i = 0; i < 7; i++ )
sum += ( szCode[ i ] - '0' ) * ( i & 1 ? 1 : 3 );
@@ -81,7 +81,7 @@ static char _ean8_checksum( const char * szCode )
static char _upca_checksum( const char * szCode )
{
int i, sum = 0;
int i, sum = 0;
for( i = 0; i < 11; i++ )
sum += ( szCode[ i ] - '0' ) * ( i & 1 ? 1 : 3 );
@@ -98,32 +98,32 @@ static char _upce_checksum( const char * szCode )
szExp[ 2 ] = szCode[ 1 ];
if( szCode[ 5 ] == '0' || szCode[ 5 ] == '1' || szCode[ 5 ] == '2' )
{
szExp[ 3 ] = szCode[ 5 ];
szExp[ 4 ] = szExp[ 5 ] = szExp[ 6 ] = szExp[ 7 ] = '0';
szExp[ 8 ] = szCode[ 2 ];
szExp[ 9 ] = szCode[ 3 ];
szExp[ 3 ] = szCode[ 5 ];
szExp[ 4 ] = szExp[ 5 ] = szExp[ 6 ] = szExp[ 7 ] = '0';
szExp[ 8 ] = szCode[ 2 ];
szExp[ 9 ] = szCode[ 3 ];
szExp[ 10 ] = szCode[ 4 ];
}
else if( szCode[ 5 ] == '3' )
{
szExp[ 3 ] = szCode[ 2 ];
szExp[ 4 ] = szExp[ 5 ] = szExp[ 6 ] = szExp[ 7 ] = szExp[ 8 ] = '0';
szExp[ 9 ] = szCode[ 3 ];
szExp[ 3 ] = szCode[ 2 ];
szExp[ 4 ] = szExp[ 5 ] = szExp[ 6 ] = szExp[ 7 ] = szExp[ 8 ] = '0';
szExp[ 9 ] = szCode[ 3 ];
szExp[ 10 ] = szCode[ 4 ];
}
else if( szCode[ 5 ] == '4' )
{
szExp[ 3 ] = szCode[ 2 ];
szExp[ 4 ] = szCode[ 3 ];
szExp[ 5 ] = szExp[ 6 ] = szExp[ 7 ] = szExp[ 8 ] = szExp[ 9 ] = '0';
szExp[ 3 ] = szCode[ 2 ];
szExp[ 4 ] = szCode[ 3 ];
szExp[ 5 ] = szExp[ 6 ] = szExp[ 7 ] = szExp[ 8 ] = szExp[ 9 ] = '0';
szExp[ 10 ] = szCode[ 4 ];
}
else
{
szExp[ 3 ] = szCode[ 2 ];
szExp[ 4 ] = szCode[ 3 ];
szExp[ 5 ] = szCode[ 4 ];
szExp[ 6 ] = szExp[ 7 ] = szExp[ 8 ] = szExp[ 9 ] = '0';
szExp[ 3 ] = szCode[ 2 ];
szExp[ 4 ] = szCode[ 3 ];
szExp[ 5 ] = szCode[ 4 ];
szExp[ 6 ] = szExp[ 7 ] = szExp[ 8 ] = szExp[ 9 ] = '0';
szExp[ 10 ] = szCode[ 5 ];
}
return _upca_checksum( szExp );
@@ -131,8 +131,8 @@ static char _upce_checksum( const char * szCode )
PHB_ZEBRA hb_zebra_create_ean13( const char * szCode, HB_SIZE nLen, int iFlags )
{
PHB_ZEBRA pZebra;
int i, iLen = ( int ) nLen;
PHB_ZEBRA pZebra;
int i, iLen = ( int ) nLen;
HB_SYMBOL_UNUSED( iFlags );
@@ -386,6 +386,7 @@ PHB_ZEBRA hb_zebra_create_upce( const char * szCode, HB_SIZE nLen, int iFlags )
HB_FUNC( HB_ZEBRA_CREATE_EAN13 )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_ean13( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );
@@ -397,6 +398,7 @@ HB_FUNC( HB_ZEBRA_CREATE_EAN13 )
HB_FUNC( HB_ZEBRA_CREATE_EAN8 )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_ean8( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );
@@ -408,6 +410,7 @@ HB_FUNC( HB_ZEBRA_CREATE_EAN8 )
HB_FUNC( HB_ZEBRA_CREATE_UPCA )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_upca( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );
@@ -419,6 +422,7 @@ HB_FUNC( HB_ZEBRA_CREATE_UPCA )
HB_FUNC( HB_ZEBRA_CREATE_UPCE )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_upce( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -59,7 +59,7 @@ static const char s_code[] = { 0x0C, 0x11, 0x12, 0x03, 0x14, 0x05, 0x06, 0x18, 0
static char _itf_checksum( const char * szCode )
{
int i, sum = 0;
int i, sum = 0;
for( i = 0; szCode[ i ]; i++ )
sum += ( szCode[ i ] - '0' ) * ( i & 1 ? 1 : 3 );
@@ -83,12 +83,12 @@ PHB_ZEBRA hb_zebra_create_itf( const char * szCode, HB_SIZE nLen, int iFlags )
return pZebra;
}
}
if( ( iLen + (iFlags & HB_ZEBRA_FLAG_CHECKSUM ? 1 : 0 ) ) & 1 )
if( ( iLen + ( iFlags & HB_ZEBRA_FLAG_CHECKSUM ? 1 : 0 ) ) & 1 )
{
pZebra->szCode = ( char * ) hb_xgrab( iLen + 2 );
pZebra->szCode[ 0 ] = '0';
hb_xmemcpy( pZebra->szCode + 1, szCode, iLen );
pZebra->szCode[ iLen + 1 ] = '\0';
pZebra->szCode = ( char * ) hb_xgrab( iLen + 2 );
pZebra->szCode[ 0 ] = '0';
hb_xmemcpy( pZebra->szCode + 1, szCode, iLen );
pZebra->szCode[ iLen + 1 ] = '\0';
}
else
{
@@ -150,6 +150,7 @@ PHB_ZEBRA hb_zebra_create_itf( const char * szCode, HB_SIZE nLen, int iFlags )
HB_FUNC( HB_ZEBRA_CREATE_ITF )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_itf( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -57,7 +57,7 @@
static char _msi_checksum( const char * szCode )
{
int i, j = 1, k, sum = 0;
int i, j = 1, k, sum = 0;
/* Luhn algorithm */
for( i = ( int ) strlen( szCode ) - 1; i >= 0; i-- )
@@ -163,6 +163,7 @@ PHB_ZEBRA hb_zebra_create_msi( const char * szCode, HB_SIZE nLen, int iFlags )
HB_FUNC( HB_ZEBRA_CREATE_MSI )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_msi( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );

View File

@@ -65,14 +65,14 @@
Online decoder:
http://www.datasymbol.com/barcode-recognition-sdk/barcode-reader/online-barcode-decoder.html
*/
*/
#include "hbzebra.h"
#include "hbapiitm.h"
#include "hbapierr.h"
#define CODE_START 0x2AFF /* 17 bit width */
#define CODE_STOP 0x2517F /* 18 bit width */
#define CODE_START 0x2AFF /* 17 bit width */
#define CODE_STOP 0x2517F /* 18 bit width */
#define LATCH_TEXT 900
#define LATCH_BYTE 901
@@ -80,372 +80,376 @@
#define LATCH_NUMERIC 902
#define SHIFT_BYTE 913
#define SUBMODE_UPPER 1
#define SUBMODE_LOWER 2
#define SUBMODE_MIXED 3
#define SUBMODE_PUNCT 4
#define SUBMODE_UPPER 1
#define SUBMODE_LOWER 2
#define SUBMODE_MIXED 3
#define SUBMODE_PUNCT 4
#define MAX_COL_COUNT 30
#define MIN_ROW_COUNT 3
#define MAX_ROW_COUNT 90
#define MAX_COL_COUNT 30
#define MIN_ROW_COUNT 3
#define MAX_ROW_COUNT 90
#define MAX_CODEWORD_COUNT 928
static const short s_code[ 3 ][ 929 ] = {
{
0x03AB, 0x0F57, 0x3EAF, 0x072B, 0x1E57, 0x7CAF, 0x0315, 0x0E2B,
0x0615, 0x020A, 0x0C15, 0x040A, 0x03B5, 0x0F6B, 0x3ED7, 0x0735,
0x1E6B, 0x7CD7, 0x031A, 0x0E35, 0x061A, 0x03BA, 0x0F75, 0x3EEB,
0x073A, 0x1E75, 0x7CEB, 0x0E3A, 0x3C75, 0x0F7A, 0x3EF5, 0x1E7A,
0x7CF5, 0x3EFA, 0x5FAF, 0x074B, 0x1E97, 0x7D2F, 0x0325, 0x0E4B,
0x3C97, 0x0625, 0x1C4B, 0x0212, 0x0C25, 0x384B, 0x0412, 0x1825,
0x0812, 0x0765, 0x1ECB, 0x7D97, 0x0332, 0x0E65, 0x3CCB, 0x0632,
0x1C65, 0x78CB, 0x0C32, 0x3865, 0x0772, 0x1EE5, 0x7DCB, 0x0E72,
0x3CE5, 0x1C72, 0x78E5, 0x1EF2, 0x7DE5, 0x3CF2, 0x78F2, 0x0345,
0x0E8B, 0x3D17, 0x0645, 0x1C8B, 0x7917, 0x0222, 0x0C45, 0x388B,
0x0422, 0x1845, 0x0822, 0x1022, 0x0362, 0x0EC5, 0x3D8B, 0x0662,
0x1CC5, 0x798B, 0x0C62, 0x38C5, 0x1862, 0x3062, 0x0EE2, 0x3DC5,
0x1CE2, 0x79C5, 0x38E2, 0x3DE2, 0x0685, 0x1D0B, 0x7A17, 0x0242,
0x0C85, 0x390B, 0x0442, 0x1885, 0x710B, 0x0842, 0x3085, 0x1042,
0x6085, 0x06C2, 0x1D85, 0x7B0B, 0x0CC2, 0x3985, 0x18C2, 0x7185,
0x30C2, 0x60C2, 0x7B85, 0x71C2, 0x0282, 0x0D05, 0x3A0B, 0x0482,
0x1905, 0x720B, 0x0882, 0x3105, 0x1082, 0x6105, 0x2082, 0x0D82,
0x1982, 0x3182, 0x0502, 0x740B, 0x3205, 0x6205, 0x4102, 0x0753,
0x1EA7, 0x7D4F, 0x0329, 0x0E53, 0x3CA7, 0x0629, 0x1C53, 0x78A7,
0x0214, 0x0C29, 0x0414, 0x0769, 0x1ED3, 0x7DA7, 0x0334, 0x0E69,
0x3CD3, 0x0634, 0x1C69, 0x0C34, 0x1834, 0x0774, 0x1EE9, 0x7DD3,
0x0E74, 0x3CE9, 0x1C74, 0x3874, 0x1EF4, 0x7DE9, 0x3CF4, 0x7DF4,
0x035B, 0x0EB7, 0x3D6F, 0x065B, 0x1CB7, 0x796F, 0x022D, 0x0C5B,
0x38B7, 0x042D, 0x185B, 0x70B7, 0x082D, 0x305B, 0x0349, 0x0E93,
0x3D27, 0x036D, 0x0649, 0x1C93, 0x7927, 0x066D, 0x1CDB, 0x79B7,
0x0236, 0x0424, 0x1849, 0x7093, 0x0436, 0x186D, 0x0836, 0x0364,
0x0EC9, 0x3D93, 0x0376, 0x0664, 0x1CC9, 0x7993, 0x0676, 0x1CED,
0x79DB, 0x0C76, 0x1864, 0x1876, 0x0EE4, 0x3DC9, 0x0EF6, 0x1CE4,
0x79C9, 0x1CF6, 0x79ED, 0x38F6, 0x3DE4, 0x3DF6, 0x79E4, 0x79F6,
0x069B, 0x1D37, 0x7A6F, 0x024D, 0x0C9B, 0x3937, 0x044D, 0x189B,
0x7137, 0x084D, 0x309B, 0x104D, 0x204D, 0x0689, 0x1D13, 0x7A27,
0x06CD, 0x0C89, 0x3913, 0x0266, 0x0444, 0x399B, 0x7113, 0x0466,
0x0844, 0x3089, 0x0866, 0x30CD, 0x6089, 0x2044, 0x06C4, 0x1D89,
0x7B13, 0x06E6, 0x0CC4, 0x3989, 0x0CE6, 0x39CD, 0x7189, 0x18E6,
0x30C4, 0x60C4, 0x1DC4, 0x7B89, 0x1DE6, 0x39C4, 0x39E6, 0x71C4,
0x71E6, 0x7BE6, 0x028D, 0x0D1B, 0x3A37, 0x048D, 0x191B, 0x7237,
0x088D, 0x311B, 0x108D, 0x611B, 0x208D, 0x408D, 0x0284, 0x0D09,
0x3A13, 0x02C6, 0x0484, 0x1909, 0x7213, 0x04C6, 0x198D, 0x731B,
0x08C6, 0x1084, 0x6109, 0x10C6, 0x618D, 0x20C6, 0x0D84, 0x3B09,
0x0DC6, 0x1984, 0x7309, 0x19C6, 0x738D, 0x31C6, 0x6184, 0x61C6,
0x3BC6, 0x73C6, 0x050D, 0x1A1B, 0x7437, 0x090D, 0x321B, 0x110D,
0x621B, 0x210D, 0x410D, 0x0504, 0x1A09, 0x7413, 0x0586, 0x0904,
0x3209, 0x0986, 0x330D, 0x6209, 0x1186, 0x2104, 0x2186, 0x4104,
0x1B04, 0x1B86, 0x3386, 0x6386, 0x341B, 0x641B, 0x420D, 0x3409,
0x1204, 0x1306, 0x2306, 0x4306, 0x0351, 0x0EA3, 0x3D47, 0x0651,
0x1CA3, 0x0228, 0x0C51, 0x38A3, 0x0428, 0x1851, 0x0828, 0x1028,
0x0368, 0x0ED1, 0x3DA3, 0x0668, 0x1CD1, 0x79A3, 0x0C68, 0x38D1,
0x1868, 0x3068, 0x0EE8, 0x3DD1, 0x1CE8, 0x79D1, 0x38E8, 0x3DE8,
0x79E8, 0x06B3, 0x1D67, 0x7ACF, 0x0259, 0x0CB3, 0x3967, 0x0459,
0x18B3, 0x7167, 0x0859, 0x30B3, 0x1059, 0x60B3, 0x0691, 0x1D23,
0x7A47, 0x06D9, 0x0C91, 0x3923, 0x026C, 0x0448, 0x39B3, 0x7123,
0x046C, 0x18D9, 0x3091, 0x086C, 0x1048, 0x106C, 0x06C8, 0x1D91,
0x7B23, 0x06EC, 0x0CC8, 0x7BB3, 0x0CEC, 0x39D9, 0x7191, 0x18EC,
0x30C8, 0x30EC, 0x1DC8, 0x7B91, 0x1DEC, 0x39C8, 0x39EC, 0x71C8,
0x7BC8, 0x7BEC, 0x02BB, 0x0D77, 0x3AEF, 0x04BB, 0x1977, 0x72EF,
0x08BB, 0x3177, 0x10BB, 0x6177, 0x20BB, 0x0299, 0x0D33, 0x3A67,
0x02DD, 0x0499, 0x3B77, 0x7267, 0x04DD, 0x19BB, 0x7377, 0x08DD,
0x1099, 0x6133, 0x10DD, 0x61BB, 0x4099, 0x0288, 0x0D11, 0x3A23,
0x02CC, 0x0488, 0x1911, 0x7223, 0x02EE, 0x04CC, 0x1999, 0x7333,
0x04EE, 0x19DD, 0x73BB, 0x6111, 0x08EE, 0x10CC, 0x6199, 0x10EE,
0x4088, 0x0D88, 0x3B11, 0x0DCC, 0x1988, 0x7311, 0x0DEE, 0x19CC,
0x7399, 0x19EE, 0x73DD, 0x6188, 0x61CC, 0x3B88, 0x3BCC, 0x7388,
0x3BEE, 0x73CC, 0x053B, 0x1A77, 0x74EF, 0x093B, 0x3277, 0x113B,
0x6277, 0x213B, 0x413B, 0x0519, 0x1A33, 0x7467, 0x059D, 0x0919,
0x7677, 0x099D, 0x333B, 0x6233, 0x119D, 0x2119, 0x219D, 0x4119,
0x419D, 0x0508, 0x1A11, 0x7423, 0x058C, 0x0908, 0x3211, 0x05CE,
0x098C, 0x3319, 0x6211, 0x09CE, 0x339D, 0x2108, 0x11CE, 0x218C,
0x4108, 0x418C, 0x1B08, 0x7611, 0x1B8C, 0x3308, 0x1BCE, 0x338C,
0x6308, 0x33CE, 0x638C, 0x7708, 0x77CE, 0x0A3B, 0x3477, 0x123B,
0x6477, 0x223B, 0x423B, 0x0A19, 0x3433, 0x0B1D, 0x1219, 0x6433,
0x131D, 0x663B, 0x231D, 0x4219, 0x431D, 0x0A08, 0x3411, 0x0B0C,
0x1208, 0x6411, 0x0B8E, 0x130C, 0x6619, 0x138E, 0x671D, 0x4208,
0x238E, 0x430C, 0x438E, 0x370C, 0x378E, 0x678E, 0x6877, 0x443B,
0x6833, 0x2419, 0x4419, 0x1408, 0x160C, 0x170E, 0x4408, 0x460C,
0x06A1, 0x0250, 0x0CA1, 0x0450, 0x18A1, 0x7143, 0x0850, 0x30A1,
0x1050, 0x60A1, 0x06D0, 0x1DA1, 0x7B43, 0x0CD0, 0x39A1, 0x18D0,
0x71A1, 0x30D0, 0x60D0, 0x1DD0, 0x7BA1, 0x39D0, 0x71D0, 0x7BD0,
0x02B1, 0x0D63, 0x3AC7, 0x04B1, 0x1963, 0x08B1, 0x3163, 0x10B1,
0x6163, 0x20B1, 0x0290, 0x0D21, 0x3A43, 0x02D8, 0x0490, 0x3B63,
0x7243, 0x04D8, 0x19B1, 0x7363, 0x08D8, 0x1090, 0x6121, 0x10D8,
0x61B1, 0x4090, 0x0D90, 0x3B21, 0x0DD8, 0x1990, 0x7321, 0x19D8,
0x73B1, 0x31D8, 0x6190, 0x3B90, 0x3BD8, 0x7390, 0x73D8, 0x0573,
0x1AE7, 0x75CF, 0x0973, 0x32E7, 0x1173, 0x62E7, 0x2173, 0x4173,
0x0531, 0x1A63, 0x05B9, 0x0931, 0x3263, 0x09B9, 0x3373, 0x6263,
0x11B9, 0x2131, 0x21B9, 0x4131, 0x41B9, 0x0510, 0x1A21, 0x0598,
0x0910, 0x7663, 0x05DC, 0x0998, 0x3331, 0x6221, 0x09DC, 0x33B9,
0x2110, 0x11DC, 0x2198, 0x4110, 0x4198, 0x1B10, 0x7621, 0x1B98,
0x3310, 0x1BDC, 0x3398, 0x6310, 0x33DC, 0x6398, 0x7710, 0x7798,
0x77DC, 0x0AF7, 0x35EF, 0x12F7, 0x65EF, 0x22F7, 0x42F7, 0x0A73,
0x34E7, 0x0B7B, 0x36F7, 0x64E7, 0x137B, 0x66F7, 0x237B, 0x4273,
0x437B, 0x0A31, 0x3463, 0x0B39, 0x1231, 0x6463, 0x0BBD, 0x1339,
0x6673, 0x13BD, 0x677B, 0x4231, 0x23BD, 0x4339, 0x43BD, 0x0A10,
0x3421, 0x0B18, 0x1210, 0x6421, 0x0B9C, 0x1318, 0x6631, 0x0BDE,
0x139C, 0x6739, 0x4210, 0x13DE, 0x67BD, 0x4318, 0x23DE, 0x3610,
0x3718, 0x6610, 0x379C, 0x6718, 0x37DE, 0x679C, 0x67DE, 0x14F7,
0x69EF, 0x24F7, 0x44F7, 0x1473, 0x68E7, 0x167B, 0x6CF7, 0x267B,
0x4473, 0x467B, 0x1431, 0x6863, 0x1639, 0x2431, 0x173D, 0x2639,
0x4431, 0x273D, 0x4639, 0x473D, 0x1410, 0x6821, 0x1618, 0x6C31,
0x171C, 0x2618, 0x4410, 0x179E, 0x271C, 0x4618, 0x279E, 0x471C,
0x479E, 0x6E18, 0x6F9E, 0x48F7, 0x2C7B, 0x4C7B, 0x2C39, 0x2E3D,
0x4E3D, 0x2C18, 0x2E1C, 0x2F1E, 0x4F1E, 0x02A0, 0x04A0, 0x1941,
0x08A0, 0x10A0, 0x20A0, 0x0DA0, 0x19A0, 0x31A0, 0x61A0, 0x3BA0,
0x73A0, 0x0561, 0x0961, 0x32C3, 0x1161, 0x62C3, 0x2161, 0x4161,
0x0520, 0x1A41, 0x05B0, 0x1B61, 0x3241, 0x09B0, 0x3361, 0x11B0,
0x6361, 0x21B0, 0x4120, 0x41B0, 0x1B20, 0x7641, 0x1BB0, 0x7761,
0x33B0, 0x6320, 0x63B0, 0x7720, 0x77B0, 0x0AE3, 0x12E3, 0x22E3,
0x42E3, 0x0A61, 0x0B71, 0x36E3, 0x64C3, 0x1371, 0x66E3, 0x2371,
0x4261, 0x4371, 0x0A20, 0x0B30, 0x1220, 0x6441, 0x0BB8, 0x1330,
0x2220, 0x13B8, 0x2330, 0x4220, 0x23B8, 0x4330, 0x3620, 0x3730,
0x6620, 0x37B8, 0x6730, 0x67B8, 0x15E7, 0x25E7, 0x45E7, 0x14E3,
0x16F3, 0x6DE7, 0x26F3, 0x44E3, 0x46F3, 0x1461, 0x68C3, 0x1671,
0x6CE3, 0x1779, 0x2671, 0x4461, 0x2779, 0x4671, 0x4779, 0x1420,
0x6841, 0x1630, 0x6C61, 0x1738, 0x2630, 0x4420, 0x17BC, 0x2738,
0x4630, 0x27BC, 0x4738, 0x6C20, 0x6E30, 0x6F38, 0x6FBC, 0x2BEF,
0x4BEF, 0x29E7, 0x2DF7, 0x49E7, 0x4DF7, 0x28E3, 0x2CF3, 0x48E3,
0x2EFB, 0x4CF3, 0x4EFB, 0x2861, 0x2C71, 0x4861, 0x2E79, 0x4C71,
0x2F7D },
{
0x06AF, 0x1D5F, 0x0257, 0x0CAF, 0x395F, 0x0457, 0x18AF, 0x715F,
0x0857, 0x30AF, 0x1057, 0x60AF, 0x2057, 0x06D7, 0x1DAF, 0x7B5F,
0x026B, 0x0CD7, 0x39AF, 0x046B, 0x18D7, 0x71AF, 0x086B, 0x30D7,
0x106B, 0x60D7, 0x206B, 0x06EB, 0x1DD7, 0x7BAF, 0x0275, 0x0CEB,
0x39D7, 0x0475, 0x18EB, 0x71D7, 0x0875, 0x30EB, 0x1075, 0x60EB,
0x2075, 0x06F5, 0x1DEB, 0x7BD7, 0x027A, 0x0CF5, 0x39EB, 0x047A,
0x18F5, 0x71EB, 0x087A, 0x30F5, 0x107A, 0x60F5, 0x06FA, 0x1DF5,
0x7BEB, 0x0CFA, 0x39F5, 0x18FA, 0x71F5, 0x30FA, 0x1DFA, 0x7BF5,
0x39FA, 0x71FA, 0x0297, 0x0D2F, 0x3A5F, 0x0497, 0x192F, 0x725F,
0x0897, 0x312F, 0x1097, 0x612F, 0x2097, 0x4097, 0x02CB, 0x0D97,
0x3B2F, 0x04CB, 0x1997, 0x732F, 0x08CB, 0x3197, 0x10CB, 0x6197,
0x20CB, 0x40CB, 0x02E5, 0x0DCB, 0x3B97, 0x04E5, 0x19CB, 0x7397,
0x08E5, 0x31CB, 0x10E5, 0x61CB, 0x20E5, 0x40E5, 0x02F2, 0x0DE5,
0x3BCB, 0x04F2, 0x19E5, 0x73CB, 0x08F2, 0x31E5, 0x10F2, 0x61E5,
0x20F2, 0x0DF2, 0x3BE5, 0x19F2, 0x73E5, 0x31F2, 0x61F2, 0x3BF2,
0x73F2, 0x0517, 0x1A2F, 0x745F, 0x0917, 0x322F, 0x1117, 0x622F,
0x2117, 0x4117, 0x058B, 0x1B17, 0x762F, 0x098B, 0x3317, 0x118B,
0x6317, 0x218B, 0x418B, 0x05C5, 0x1B8B, 0x7717, 0x09C5, 0x338B,
0x11C5, 0x638B, 0x21C5, 0x41C5, 0x05E2, 0x1BC5, 0x778B, 0x09E2,
0x33C5, 0x11E2, 0x63C5, 0x21E2, 0x41E2, 0x1BE2, 0x77C5, 0x33E2,
0x63E2, 0x77E2, 0x0A17, 0x342F, 0x1217, 0x642F, 0x2217, 0x4217,
0x0B0B, 0x3617, 0x130B, 0x6617, 0x230B, 0x430B, 0x0B85, 0x370B,
0x1385, 0x670B, 0x2385, 0x4385, 0x0BC2, 0x3785, 0x13C2, 0x6785,
0x23C2, 0x43C2, 0x37C2, 0x67C2, 0x1417, 0x682F, 0x2417, 0x4417,
0x160B, 0x6C17, 0x260B, 0x460B, 0x1705, 0x6E0B, 0x2705, 0x4705,
0x1782, 0x6F05, 0x2782, 0x4782, 0x2817, 0x4817, 0x2C0B, 0x4C0B,
0x2E05, 0x4E05, 0x02A7, 0x0D4F, 0x3A9F, 0x04A7, 0x194F, 0x729F,
0x08A7, 0x314F, 0x10A7, 0x614F, 0x20A7, 0x40A7, 0x02D3, 0x0DA7,
0x3B4F, 0x04D3, 0x19A7, 0x734F, 0x08D3, 0x31A7, 0x10D3, 0x61A7,
0x20D3, 0x40D3, 0x02E9, 0x0DD3, 0x3BA7, 0x04E9, 0x19D3, 0x73A7,
0x08E9, 0x31D3, 0x10E9, 0x61D3, 0x20E9, 0x40E9, 0x02F4, 0x0DE9,
0x3BD3, 0x04F4, 0x19E9, 0x73D3, 0x08F4, 0x31E9, 0x10F4, 0x61E9,
0x20F4, 0x0DF4, 0x3BE9, 0x19F4, 0x73E9, 0x31F4, 0x61F4, 0x3BF4,
0x73F4, 0x056F, 0x1ADF, 0x0FD6, 0x096F, 0x32DF, 0x1F96, 0x116F,
0x62DF, 0x3F16, 0x216F, 0x416F, 0x0527, 0x1A4F, 0x749F, 0x05B7,
0x0927, 0x76DF, 0x09B7, 0x336F, 0x624F, 0x11B7, 0x2127, 0x21B7,
0x4127, 0x41B7, 0x0593, 0x1B27, 0x764F, 0x05DB, 0x0993, 0x3327,
0x09DB, 0x33B7, 0x6327, 0x11DB, 0x2193, 0x21DB, 0x4193, 0x41DB,
0x05C9, 0x1B93, 0x7727, 0x05ED, 0x09C9, 0x3393, 0x09ED, 0x33DB,
0x6393, 0x11ED, 0x21C9, 0x21ED, 0x41C9, 0x41ED, 0x05E4, 0x1BC9,
0x7793, 0x05F6, 0x09E4, 0x33C9, 0x09F6, 0x33ED, 0x63C9, 0x11F6,
0x21E4, 0x21F6, 0x41E4, 0x1BE4, 0x77C9, 0x1BF6, 0x33E4, 0x33F6,
0x63E4, 0x63F6, 0x77E4, 0x0A6F, 0x34DF, 0x1FA6, 0x126F, 0x64DF,
0x3F26, 0x226F, 0x7E26, 0x426F, 0x0A27, 0x344F, 0x0B37, 0x1227,
0x644F, 0x1337, 0x666F, 0x2337, 0x4227, 0x4337, 0x0B13, 0x3627,
0x0B9B, 0x1313, 0x6627, 0x139B, 0x6737, 0x239B, 0x4313, 0x439B,
0x0B89, 0x3713, 0x0BCD, 0x1389, 0x6713, 0x13CD, 0x679B, 0x23CD,
0x4389, 0x43CD, 0x0BC4, 0x3789, 0x0BE6, 0x13C4, 0x6789, 0x13E6,
0x67CD, 0x23E6, 0x43C4, 0x43E6, 0x37C4, 0x37E6, 0x67C4, 0x67E6,
0x146F, 0x68DF, 0x3F46, 0x246F, 0x7E46, 0x446F, 0x1427, 0x684F,
0x1637, 0x6C6F, 0x2637, 0x4427, 0x4637, 0x1613, 0x6C27, 0x171B,
0x2613, 0x271B, 0x4613, 0x471B, 0x1709, 0x6E13, 0x178D, 0x6F1B,
0x278D, 0x4709, 0x478D, 0x1784, 0x6F09, 0x17C6, 0x2784, 0x27C6,
0x4784, 0x47C6, 0x6F84, 0x6FC6, 0x286F, 0x7E86, 0x486F, 0x2827,
0x2C37, 0x4827, 0x4C37, 0x2C13, 0x2E1B, 0x4C13, 0x4E1B, 0x2E09,
0x2F0D, 0x4E09, 0x4F0D, 0x2F04, 0x2F86, 0x4F04, 0x4F86, 0x506F,
0x5027, 0x5837, 0x5813, 0x5C1B, 0x5C09, 0x5E0D, 0x0547, 0x1A8F,
0x751F, 0x0947, 0x328F, 0x1147, 0x628F, 0x2147, 0x4147, 0x05A3,
0x1B47, 0x768F, 0x09A3, 0x3347, 0x11A3, 0x6347, 0x21A3, 0x41A3,
0x05D1, 0x1BA3, 0x7747, 0x09D1, 0x33A3, 0x11D1, 0x63A3, 0x21D1,
0x41D1, 0x05E8, 0x1BD1, 0x77A3, 0x09E8, 0x33D1, 0x11E8, 0x63D1,
0x21E8, 0x41E8, 0x1BE8, 0x77D1, 0x33E8, 0x63E8, 0x77E8, 0x0ACF,
0x359F, 0x1FAC, 0x12CF, 0x659F, 0x3F2C, 0x22CF, 0x7E2C, 0x42CF,
0x0A47, 0x348F, 0x0B67, 0x1247, 0x648F, 0x1367, 0x66CF, 0x2367,
0x4247, 0x4367, 0x0B23, 0x3647, 0x0BB3, 0x1323, 0x6647, 0x13B3,
0x6767, 0x23B3, 0x4323, 0x43B3, 0x0B91, 0x3723, 0x0BD9, 0x1391,
0x6723, 0x13D9, 0x67B3, 0x23D9, 0x4391, 0x43D9, 0x0BC8, 0x3791,
0x0BEC, 0x13C8, 0x6791, 0x13EC, 0x67D9, 0x23EC, 0x43C8, 0x43EC,
0x37C8, 0x37EC, 0x67C8, 0x67EC, 0x15DF, 0x0FAE, 0x3F5D, 0x25DF,
0x1F2E, 0x7E5D, 0x45DF, 0x3E2E, 0x7C2E, 0x14CF, 0x699F, 0x3F4C,
0x16EF, 0x6DDF, 0x3F6E, 0x7E4C, 0x26EF, 0x44CF, 0x7E6E, 0x46EF,
0x1447, 0x688F, 0x1667, 0x2447, 0x1777, 0x6EEF, 0x4447, 0x2777,
0x4667, 0x4777, 0x1623, 0x6C47, 0x1733, 0x2623, 0x17BB, 0x2733,
0x4623, 0x27BB, 0x4733, 0x47BB, 0x1711, 0x6E23, 0x1799, 0x2711,
0x17DD, 0x2799, 0x4711, 0x27DD, 0x4799, 0x47DD, 0x1788, 0x6F11,
0x17CC, 0x2788, 0x17EE, 0x27CC, 0x4788, 0x27EE, 0x47CC, 0x47EE,
0x6F88, 0x6FCC, 0x29DF, 0x1F4E, 0x7E9D, 0x49DF, 0x3E4E, 0x7C4E,
0x28CF, 0x7E8C, 0x2CEF, 0x48CF, 0x7ECE, 0x4CEF, 0x2847, 0x2C67,
0x4847, 0x2E77, 0x4C67, 0x4E77, 0x2C23, 0x2E33, 0x4C23, 0x2F3B,
0x4E33, 0x4F3B, 0x2E11, 0x2F19, 0x4E11, 0x2F9D, 0x4F19, 0x4F9D,
0x2F08, 0x2F8C, 0x4F08, 0x2FCE, 0x4F8C, 0x4FCE, 0x51DF, 0x3E8E,
0x7C8E, 0x50CF, 0x58EF, 0x5047, 0x5867, 0x5C77, 0x5823, 0x5C33,
0x5E3B, 0x5C11, 0x5E19, 0x5F1D, 0x5E08, 0x5F0C, 0x5F8E, 0x7D0E,
0x0A87, 0x350F, 0x1287, 0x650F, 0x2287, 0x4287, 0x0B43, 0x3687,
0x1343, 0x6687, 0x2343, 0x4343, 0x0BA1, 0x3743, 0x13A1, 0x6743,
0x23A1, 0x43A1, 0x0BD0, 0x37A1, 0x13D0, 0x67A1, 0x23D0, 0x43D0,
0x37D0, 0x67D0, 0x158F, 0x6B1F, 0x3F58, 0x258F, 0x7E58, 0x458F,
0x1487, 0x690F, 0x16C7, 0x2487, 0x26C7, 0x4487, 0x46C7, 0x1643,
0x6C87, 0x1763, 0x2643, 0x2763, 0x4643, 0x4763, 0x1721, 0x6E43,
0x17B1, 0x2721, 0x27B1, 0x4721, 0x47B1, 0x1790, 0x6F21, 0x17D8,
0x2790, 0x27D8, 0x4790, 0x47D8, 0x6F90, 0x6FD8, 0x2B9F, 0x1F5C,
0x7EB9, 0x4B9F, 0x3E5C, 0x7C5C, 0x298F, 0x7E98, 0x2DCF, 0x498F,
0x7EDC, 0x4DCF, 0x2887, 0x2CC7, 0x4887, 0x2EE7, 0x4CC7, 0x4EE7,
0x2C43, 0x2E63, 0x4C43, 0x2F73, 0x4E63, 0x4F73, 0x2E21, 0x2F31,
0x4E21, 0x2FB9, 0x4F31, 0x4FB9, 0x2F10, 0x2F98, 0x4F10, 0x2FDC,
0x4F98, 0x4FDC, 0x0F5E, 0x3EBD, 0x1E5E, 0x7CBD, 0x3C5E, 0x785E,
0x539F, 0x3E9C, 0x5BDF, 0x3EDE, 0x7C9C, 0x7CDE, 0x518F, 0x59CF,
0x5DEF, 0x5087, 0x58C7, 0x5CE7, 0x5EF7, 0x5843, 0x5C63, 0x5E73,
0x5F7B, 0x5C21, 0x5E31, 0x5F39, 0x5FBD, 0x5E10, 0x5F18, 0x5F9C,
0x1E9E, 0x7D3D, 0x3C9E, 0x789E, 0x7D1C, 0x7D9E, 0x3D1E, 0x791E,
0x7A1E, 0x1507, 0x2507, 0x4507, 0x1683, 0x6D07, 0x2683, 0x4683,
0x1741, 0x6E83, 0x2741, 0x4741, 0x17A0, 0x6F41, 0x27A0, 0x47A0,
0x6FA0, 0x2B0F, 0x7EB0, 0x4B0F, 0x2907, 0x2D87, 0x4907, 0x4D87,
0x2C83, 0x2EC3, 0x4C83, 0x4EC3, 0x2E41, 0x2F61, 0x4E41, 0x4F61,
0x2F20, 0x2FB0, 0x4F20, 0x4FB0, 0x571F, 0x3EB8, 0x7CB8, 0x530F,
0x5B8F, 0x5107, 0x5987, 0x5DC7, 0x5883, 0x5CC3, 0x5EE3, 0x5C41,
0x5E61, 0x5F71, 0x5E20, 0x5F30, 0x5FB8, 0x1EBC, 0x7D79, 0x3CBC,
0x78BC, 0x7D38, 0x7DBC, 0x0EBE, 0x3D7D, 0x1CBE, 0x797D, 0x38BE,
0x70BE, 0x3D3C, 0x3DBE, 0x793C, 0x79BE, 0x1D3E, 0x7A7D, 0x393E,
0x713E, 0x7A3C, 0x7B3E, 0x3A3E, 0x723E, 0x743E, 0x2D03, 0x4D03,
0x2E81, 0x4E81, 0x2F40, 0x4F40, 0x5B07, 0x5903, 0x5D83, 0x5C81,
0x5EC1, 0x5E40, 0x5F60, 0x7D70, 0x3D78, 0x7978, 0x1D7C, 0x7AF9,
0x397C, 0x717C, 0x7A78, 0x7B7C, 0x0D7E, 0x3AFD, 0x197E, 0x72FD,
0x317E, 0x617E, 0x3A7C, 0x3B7E, 0x727C, 0x737E, 0x1A7E, 0x74FD,
0x327E, 0x627E, 0x747C, 0x767E, 0x347E, 0x647E, 0x7AF0, 0x3AF8,
0x72F8, 0x1AFC, 0x75F9, 0x32FC, 0x62FC, 0x74F8, 0x76FC, 0x34FC,
0x64FC },
{
0x07D5, 0x1FAB, 0x03CA, 0x0F95, 0x3F2B, 0x078A, 0x1F15, 0x7E2B,
0x0F0A, 0x3E15, 0x1E0A, 0x0B5F, 0x07DA, 0x1FB5, 0x135F, 0x0F9A,
0x3F35, 0x235F, 0x1F1A, 0x7E35, 0x435F, 0x3E1A, 0x0BAF, 0x375F,
0x1FBA, 0x13AF, 0x675F, 0x3F3A, 0x23AF, 0x7E3A, 0x43AF, 0x0BD7,
0x37AF, 0x13D7, 0x67AF, 0x23D7, 0x43D7, 0x0BEB, 0x37D7, 0x13EB,
0x67D7, 0x23EB, 0x43EB, 0x0BF5, 0x37EB, 0x13F5, 0x67EB, 0x23F5,
0x03D2, 0x0FA5, 0x3F4B, 0x0792, 0x1F25, 0x7E4B, 0x0F12, 0x3E25,
0x1E12, 0x7C25, 0x3C12, 0x165F, 0x0FB2, 0x3F65, 0x265F, 0x1F32,
0x7E65, 0x465F, 0x3E32, 0x7C32, 0x172F, 0x6E5F, 0x3F72, 0x272F,
0x7E72, 0x472F, 0x1797, 0x6F2F, 0x2797, 0x4797, 0x17CB, 0x6F97,
0x27CB, 0x47CB, 0x17E5, 0x6FCB, 0x27E5, 0x47E5, 0x07A2, 0x1F45,
0x7E8B, 0x0F22, 0x3E45, 0x1E22, 0x7C45, 0x3C22, 0x7822, 0x2C5F,
0x1F62, 0x7EC5, 0x4C5F, 0x3E62, 0x7C62, 0x2E2F, 0x7EE2, 0x4E2F,
0x2F17, 0x4F17, 0x2F8B, 0x4F8B, 0x2FC5, 0x4FC5, 0x0F42, 0x3E85,
0x1E42, 0x7C85, 0x3C42, 0x7842, 0x585F, 0x3EC2, 0x7CC2, 0x5C2F,
0x5E17, 0x5F0B, 0x1E82, 0x7D05, 0x3C82, 0x7882, 0x7D82, 0x3D02,
0x7902, 0x03D4, 0x0FA9, 0x3F53, 0x0794, 0x1F29, 0x7E53, 0x0F14,
0x3E29, 0x1E14, 0x7C29, 0x3C14, 0x169F, 0x0FB4, 0x3F69, 0x269F,
0x1F34, 0x7E69, 0x469F, 0x3E34, 0x7C34, 0x174F, 0x6E9F, 0x3F74,
0x274F, 0x7E74, 0x474F, 0x17A7, 0x6F4F, 0x27A7, 0x47A7, 0x17D3,
0x6FA7, 0x27D3, 0x47D3, 0x17E9, 0x6FD3, 0x27E9, 0x47E9, 0x07AD,
0x1F5B, 0x7EB7, 0x0396, 0x0F2D, 0x3E5B, 0x0716, 0x1E2D, 0x7C5B,
0x0E16, 0x3C2D, 0x1C16, 0x782D, 0x3816, 0x07A4, 0x1F49, 0x7E93,
0x07B6, 0x0F24, 0x3E49, 0x0F36, 0x3E6D, 0x7C49, 0x1E36, 0x3C24,
0x3C36, 0x7824, 0x7836, 0x2C9F, 0x1F64, 0x7EC9, 0x2EDF, 0x4C9F,
0x1F76, 0x3E64, 0x4EDF, 0x3E76, 0x7C64, 0x7C76, 0x2E4F, 0x7EE4,
0x2F6F, 0x4E4F, 0x7EF6, 0x4F6F, 0x2F27, 0x2FB7, 0x4F27, 0x4FB7,
0x2F93, 0x2FDB, 0x4F93, 0x4FDB, 0x2FC9, 0x4FC9, 0x03A6, 0x0F4D,
0x3E9B, 0x0726, 0x1E4D, 0x7C9B, 0x0E26, 0x3C4D, 0x1C26, 0x784D,
0x3826, 0x7026, 0x0F44, 0x3E89, 0x0F66, 0x1E44, 0x7C89, 0x1E66,
0x7CCD, 0x3C66, 0x7844, 0x7866, 0x589F, 0x3EC4, 0x5CDF, 0x3EE6,
0x7CC4, 0x7CE6, 0x5C4F, 0x5E6F, 0x5E27, 0x5F37, 0x5F13, 0x5F9B,
0x5F89, 0x0746, 0x1E8D, 0x7D1B, 0x0E46, 0x3C8D, 0x1C46, 0x788D,
0x3846, 0x7046, 0x1E84, 0x7D09, 0x1EC6, 0x3C84, 0x3CC6, 0x7884,
0x78C6, 0x7D84, 0x7DC6, 0x0E86, 0x3D0D, 0x1C86, 0x790D, 0x3886,
0x7086, 0x3D04, 0x3D86, 0x7904, 0x7986, 0x1D06, 0x7A0D, 0x3906,
0x7106, 0x7A04, 0x7B06, 0x3A06, 0x7206, 0x07A8, 0x1F51, 0x7EA3,
0x0F28, 0x3E51, 0x1E28, 0x7C51, 0x3C28, 0x7828, 0x2D1F, 0x1F68,
0x7ED1, 0x4D1F, 0x3E68, 0x7C68, 0x2E8F, 0x7EE8, 0x4E8F, 0x2F47,
0x4F47, 0x2FA3, 0x4FA3, 0x2FD1, 0x4FD1, 0x03AC, 0x0F59, 0x3EB3,
0x072C, 0x1E59, 0x7CB3, 0x0E2C, 0x3C59, 0x1C2C, 0x7859, 0x382C,
0x702C, 0x0F48, 0x3E91, 0x0F6C, 0x1E48, 0x7C91, 0x1E6C, 0x7CD9,
0x3C6C, 0x7848, 0x786C, 0x591F, 0x3EC8, 0x5D9F, 0x3EEC, 0x7CC8,
0x7CEC, 0x5C8F, 0x5ECF, 0x5E47, 0x5F67, 0x5F23, 0x5FB3, 0x5F91,
0x075D, 0x1EBB, 0x7D77, 0x032E, 0x0E5D, 0x3CBB, 0x062E, 0x1C5D,
0x78BB, 0x0C2E, 0x385D, 0x182E, 0x705D, 0x302E, 0x074C, 0x1E99,
0x7D33, 0x076E, 0x0E4C, 0x3C99, 0x0E6E, 0x3CDD, 0x7899, 0x1C6E,
0x384C, 0x386E, 0x704C, 0x706E, 0x1E88, 0x7D11, 0x1ECC, 0x3C88,
0x1EEE, 0x3CCC, 0x7888, 0x3CEE, 0x78CC, 0x78EE, 0x7D88, 0x7DCC,
0x7DEE, 0x034E, 0x0E9D, 0x3D3B, 0x064E, 0x1C9D, 0x793B, 0x0C4E,
0x389D, 0x184E, 0x709D, 0x304E, 0x604E, 0x0E8C, 0x3D19, 0x0ECE,
0x1C8C, 0x7919, 0x1CCE, 0x799D, 0x38CE, 0x708C, 0x70CE, 0x3D08,
0x3D8C, 0x7908, 0x3DCE, 0x798C, 0x79CE, 0x068E, 0x1D1D, 0x7A3B,
0x0C8E, 0x391D, 0x188E, 0x711D, 0x308E, 0x608E, 0x1D0C, 0x7A19,
0x1D8E, 0x390C, 0x398E, 0x710C, 0x718E, 0x7A08, 0x7B0C, 0x7B8E,
0x0D0E, 0x3A1D, 0x190E, 0x721D, 0x310E, 0x610E, 0x3A0C, 0x3B0E,
0x720C, 0x730E, 0x1A0E, 0x741D, 0x320E, 0x620E, 0x740C, 0x760E,
0x340E, 0x640E, 0x0F50, 0x3EA1, 0x1E50, 0x7CA1, 0x3C50, 0x7850,
0x3ED0, 0x7CD0, 0x5D0F, 0x5E87, 0x5F43, 0x5FA1, 0x0758, 0x1EB1,
0x7D63, 0x0E58, 0x3CB1, 0x1C58, 0x78B1, 0x3858, 0x7058, 0x1E90,
0x7D21, 0x1ED8, 0x3C90, 0x3CD8, 0x7890, 0x78D8, 0x7D90, 0x7DD8,
0x035C, 0x0EB9, 0x3D73, 0x065C, 0x1CB9, 0x7973, 0x0C5C, 0x38B9,
0x185C, 0x70B9, 0x305C, 0x605C, 0x0E98, 0x3D31, 0x0EDC, 0x1C98,
0x7931, 0x1CDC, 0x3898, 0x38DC, 0x7098, 0x70DC, 0x3D10, 0x3D98,
0x7910, 0x3DDC, 0x7998, 0x79DC, 0x06BD, 0x1D7B, 0x7AF7, 0x025E,
0x0CBD, 0x397B, 0x045E, 0x18BD, 0x717B, 0x085E, 0x30BD, 0x105E,
0x60BD, 0x205E, 0x069C, 0x1D39, 0x7A73, 0x06DE, 0x0C9C, 0x3939,
0x0CDE, 0x39BD, 0x7139, 0x18DE, 0x309C, 0x30DE, 0x609C, 0x60DE,
0x1D18, 0x7A31, 0x1D9C, 0x3918, 0x1DDE, 0x399C, 0x7118, 0x39DE,
0x719C, 0x71DE, 0x7A10, 0x7B18, 0x7B9C, 0x7BDE, 0x029E, 0x0D3D,
0x3A7B, 0x049E, 0x193D, 0x727B, 0x089E, 0x313D, 0x109E, 0x613D,
0x209E, 0x409E, 0x0D1C, 0x3A39, 0x0D9E, 0x191C, 0x7239, 0x199E,
0x733D, 0x319E, 0x611C, 0x619E, 0x3A18, 0x3B1C, 0x7218, 0x3B9E,
0x731C, 0x739E, 0x051E, 0x1A3D, 0x747B, 0x091E, 0x323D, 0x111E,
0x623D, 0x211E, 0x411E, 0x1A1C, 0x7439, 0x1B1E, 0x321C, 0x331E,
0x621C, 0x631E, 0x7418, 0x761C, 0x771E, 0x0A1E, 0x343D, 0x121E,
0x643D, 0x221E, 0x421E, 0x341C, 0x361E, 0x641C, 0x661E, 0x141E,
0x683D, 0x241E, 0x441E, 0x681C, 0x6C1E, 0x1EA0, 0x7D41, 0x3CA0,
0x78A0, 0x7DA0, 0x0EB0, 0x3D61, 0x1CB0, 0x7961, 0x38B0, 0x70B0,
0x3D20, 0x3DB0, 0x7920, 0x79B0, 0x06B8, 0x1D71, 0x7AE3, 0x0CB8,
0x3971, 0x18B8, 0x7171, 0x30B8, 0x60B8, 0x1D30, 0x7A61, 0x1DB8,
0x3930, 0x39B8, 0x7130, 0x71B8, 0x7A20, 0x7B30, 0x7BB8, 0x02BC,
0x0D79, 0x3AF3, 0x04BC, 0x1979, 0x72F3, 0x08BC, 0x3179, 0x10BC,
0x6179, 0x20BC, 0x40BC, 0x0D38, 0x3A71, 0x0DBC, 0x1938, 0x7271,
0x19BC, 0x7379, 0x31BC, 0x6138, 0x61BC, 0x3A30, 0x3B38, 0x7230,
0x3BBC, 0x7338, 0x73BC, 0x057D, 0x1AFB, 0x75F7, 0x097D, 0x32FB,
0x117D, 0x62FB, 0x217D, 0x417D, 0x053C, 0x1A79, 0x74F3, 0x05BE,
0x093C, 0x3279, 0x09BE, 0x337D, 0x6279, 0x11BE, 0x213C, 0x21BE,
0x413C, 0x41BE, 0x1A38, 0x7471, 0x1B3C, 0x3238, 0x1BBE, 0x333C,
0x6238, 0x33BE, 0x633C, 0x63BE, 0x7430, 0x7638, 0x773C, 0x77BE,
0x0A7D, 0x34FB, 0x127D, 0x64FB, 0x227D, 0x427D, 0x0A3C, 0x3479,
0x0B3E, 0x123C, 0x6479, 0x133E, 0x667D, 0x233E, 0x423C, 0x433E,
0x3438, 0x363C, 0x6438, 0x373E, 0x663C, 0x673E, 0x147D, 0x68FB,
0x247D, 0x447D, 0x143C, 0x6879, 0x163E, 0x243C, 0x263E, 0x443C,
0x463E, 0x6838, 0x6C3C, 0x6E3E, 0x287D, 0x487D, 0x283C, 0x2C3E,
0x483C, 0x4C3E, 0x3D40, 0x7940, 0x1D60, 0x7AC1, 0x3960, 0x7160,
0x7A40, 0x7B60, 0x0D70, 0x3AE1, 0x1970, 0x72E1, 0x3170, 0x6170,
0x3A60, 0x3B70, 0x7260, 0x7370, 0x0578, 0x1AF1, 0x75E3, 0x0978,
0x32F1, 0x1178, 0x62F1, 0x2178, 0x4178, 0x1A70, 0x74E1, 0x1B78,
0x76F1, 0x3378, 0x6270, 0x6378, 0x7460, 0x7670, 0x7778, 0x0AF9,
0x35F3, 0x12F9, 0x65F3, 0x22F9, 0x42F9, 0x0A78, 0x34F1, 0x0B7C,
0x36F9, 0x64F1, 0x137C, 0x2278, 0x237C, 0x4278, 0x437C, 0x3470,
0x3678, 0x6470, 0x377C, 0x6678, 0x677C, 0x15FB, 0x6BF7, 0x25FB,
0x45FB, 0x14F9, 0x69F3, 0x16FD, 0x24F9, 0x26FD, 0x44F9, 0x46FD,
0x1478, 0x68F1, 0x167C, 0x2478, 0x177E, 0x267C, 0x4478, 0x277E,
0x467C, 0x477E, 0x6870, 0x6C78, 0x6E7C, 0x6F7E, 0x29FB, 0x49FB,
0x28F9, 0x2CFD, 0x48F9, 0x4CFD, 0x2878, 0x2C7C, 0x4878, 0x2E7E,
0x4C7C, 0x4E7E, 0x51FB, 0x50F9, 0x58FD, 0x5078, 0x587C, 0x5C7E,
0x3AC0, 0x72C0, 0x1AE0, 0x75C1, 0x32E0, 0x62E0, 0x74C0, 0x76E0,
0x0AF0, 0x35E1, 0x12F0, 0x65E1, 0x22F0, 0x42F0, 0x34E0, 0x36F0,
0x64E0, 0x66F0, 0x15F1, 0x6BE3, 0x25F1, 0x45F1, 0x14F0, 0x69E1,
0x16F8, 0x6DF1, 0x26F8, 0x44F0, 0x46F8, 0x68E0, 0x6CF0, 0x6EF8,
0x2BF3, 0x4BF3, 0x29F1, 0x2DF9, 0x49F1, 0x4DF9, 0x28F0, 0x2CF8,
0x48F0, 0x2EFC, 0x4CF8, 0x4EFC, 0x53F3, 0x51F1, 0x59F9, 0x50F0,
0x58F8, 0x5CFC, 0x35C0, 0x65C0, 0x15E0, 0x6BC1, 0x25E0, 0x45E0,
0x69C0, 0x6DE0, 0x2BE1, 0x4BE1, 0x29E0, 0x2DF0, 0x49E0, 0x4DF0,
0x57E3 }};
{
0x03AB, 0x0F57, 0x3EAF, 0x072B, 0x1E57, 0x7CAF, 0x0315, 0x0E2B,
0x0615, 0x020A, 0x0C15, 0x040A, 0x03B5, 0x0F6B, 0x3ED7, 0x0735,
0x1E6B, 0x7CD7, 0x031A, 0x0E35, 0x061A, 0x03BA, 0x0F75, 0x3EEB,
0x073A, 0x1E75, 0x7CEB, 0x0E3A, 0x3C75, 0x0F7A, 0x3EF5, 0x1E7A,
0x7CF5, 0x3EFA, 0x5FAF, 0x074B, 0x1E97, 0x7D2F, 0x0325, 0x0E4B,
0x3C97, 0x0625, 0x1C4B, 0x0212, 0x0C25, 0x384B, 0x0412, 0x1825,
0x0812, 0x0765, 0x1ECB, 0x7D97, 0x0332, 0x0E65, 0x3CCB, 0x0632,
0x1C65, 0x78CB, 0x0C32, 0x3865, 0x0772, 0x1EE5, 0x7DCB, 0x0E72,
0x3CE5, 0x1C72, 0x78E5, 0x1EF2, 0x7DE5, 0x3CF2, 0x78F2, 0x0345,
0x0E8B, 0x3D17, 0x0645, 0x1C8B, 0x7917, 0x0222, 0x0C45, 0x388B,
0x0422, 0x1845, 0x0822, 0x1022, 0x0362, 0x0EC5, 0x3D8B, 0x0662,
0x1CC5, 0x798B, 0x0C62, 0x38C5, 0x1862, 0x3062, 0x0EE2, 0x3DC5,
0x1CE2, 0x79C5, 0x38E2, 0x3DE2, 0x0685, 0x1D0B, 0x7A17, 0x0242,
0x0C85, 0x390B, 0x0442, 0x1885, 0x710B, 0x0842, 0x3085, 0x1042,
0x6085, 0x06C2, 0x1D85, 0x7B0B, 0x0CC2, 0x3985, 0x18C2, 0x7185,
0x30C2, 0x60C2, 0x7B85, 0x71C2, 0x0282, 0x0D05, 0x3A0B, 0x0482,
0x1905, 0x720B, 0x0882, 0x3105, 0x1082, 0x6105, 0x2082, 0x0D82,
0x1982, 0x3182, 0x0502, 0x740B, 0x3205, 0x6205, 0x4102, 0x0753,
0x1EA7, 0x7D4F, 0x0329, 0x0E53, 0x3CA7, 0x0629, 0x1C53, 0x78A7,
0x0214, 0x0C29, 0x0414, 0x0769, 0x1ED3, 0x7DA7, 0x0334, 0x0E69,
0x3CD3, 0x0634, 0x1C69, 0x0C34, 0x1834, 0x0774, 0x1EE9, 0x7DD3,
0x0E74, 0x3CE9, 0x1C74, 0x3874, 0x1EF4, 0x7DE9, 0x3CF4, 0x7DF4,
0x035B, 0x0EB7, 0x3D6F, 0x065B, 0x1CB7, 0x796F, 0x022D, 0x0C5B,
0x38B7, 0x042D, 0x185B, 0x70B7, 0x082D, 0x305B, 0x0349, 0x0E93,
0x3D27, 0x036D, 0x0649, 0x1C93, 0x7927, 0x066D, 0x1CDB, 0x79B7,
0x0236, 0x0424, 0x1849, 0x7093, 0x0436, 0x186D, 0x0836, 0x0364,
0x0EC9, 0x3D93, 0x0376, 0x0664, 0x1CC9, 0x7993, 0x0676, 0x1CED,
0x79DB, 0x0C76, 0x1864, 0x1876, 0x0EE4, 0x3DC9, 0x0EF6, 0x1CE4,
0x79C9, 0x1CF6, 0x79ED, 0x38F6, 0x3DE4, 0x3DF6, 0x79E4, 0x79F6,
0x069B, 0x1D37, 0x7A6F, 0x024D, 0x0C9B, 0x3937, 0x044D, 0x189B,
0x7137, 0x084D, 0x309B, 0x104D, 0x204D, 0x0689, 0x1D13, 0x7A27,
0x06CD, 0x0C89, 0x3913, 0x0266, 0x0444, 0x399B, 0x7113, 0x0466,
0x0844, 0x3089, 0x0866, 0x30CD, 0x6089, 0x2044, 0x06C4, 0x1D89,
0x7B13, 0x06E6, 0x0CC4, 0x3989, 0x0CE6, 0x39CD, 0x7189, 0x18E6,
0x30C4, 0x60C4, 0x1DC4, 0x7B89, 0x1DE6, 0x39C4, 0x39E6, 0x71C4,
0x71E6, 0x7BE6, 0x028D, 0x0D1B, 0x3A37, 0x048D, 0x191B, 0x7237,
0x088D, 0x311B, 0x108D, 0x611B, 0x208D, 0x408D, 0x0284, 0x0D09,
0x3A13, 0x02C6, 0x0484, 0x1909, 0x7213, 0x04C6, 0x198D, 0x731B,
0x08C6, 0x1084, 0x6109, 0x10C6, 0x618D, 0x20C6, 0x0D84, 0x3B09,
0x0DC6, 0x1984, 0x7309, 0x19C6, 0x738D, 0x31C6, 0x6184, 0x61C6,
0x3BC6, 0x73C6, 0x050D, 0x1A1B, 0x7437, 0x090D, 0x321B, 0x110D,
0x621B, 0x210D, 0x410D, 0x0504, 0x1A09, 0x7413, 0x0586, 0x0904,
0x3209, 0x0986, 0x330D, 0x6209, 0x1186, 0x2104, 0x2186, 0x4104,
0x1B04, 0x1B86, 0x3386, 0x6386, 0x341B, 0x641B, 0x420D, 0x3409,
0x1204, 0x1306, 0x2306, 0x4306, 0x0351, 0x0EA3, 0x3D47, 0x0651,
0x1CA3, 0x0228, 0x0C51, 0x38A3, 0x0428, 0x1851, 0x0828, 0x1028,
0x0368, 0x0ED1, 0x3DA3, 0x0668, 0x1CD1, 0x79A3, 0x0C68, 0x38D1,
0x1868, 0x3068, 0x0EE8, 0x3DD1, 0x1CE8, 0x79D1, 0x38E8, 0x3DE8,
0x79E8, 0x06B3, 0x1D67, 0x7ACF, 0x0259, 0x0CB3, 0x3967, 0x0459,
0x18B3, 0x7167, 0x0859, 0x30B3, 0x1059, 0x60B3, 0x0691, 0x1D23,
0x7A47, 0x06D9, 0x0C91, 0x3923, 0x026C, 0x0448, 0x39B3, 0x7123,
0x046C, 0x18D9, 0x3091, 0x086C, 0x1048, 0x106C, 0x06C8, 0x1D91,
0x7B23, 0x06EC, 0x0CC8, 0x7BB3, 0x0CEC, 0x39D9, 0x7191, 0x18EC,
0x30C8, 0x30EC, 0x1DC8, 0x7B91, 0x1DEC, 0x39C8, 0x39EC, 0x71C8,
0x7BC8, 0x7BEC, 0x02BB, 0x0D77, 0x3AEF, 0x04BB, 0x1977, 0x72EF,
0x08BB, 0x3177, 0x10BB, 0x6177, 0x20BB, 0x0299, 0x0D33, 0x3A67,
0x02DD, 0x0499, 0x3B77, 0x7267, 0x04DD, 0x19BB, 0x7377, 0x08DD,
0x1099, 0x6133, 0x10DD, 0x61BB, 0x4099, 0x0288, 0x0D11, 0x3A23,
0x02CC, 0x0488, 0x1911, 0x7223, 0x02EE, 0x04CC, 0x1999, 0x7333,
0x04EE, 0x19DD, 0x73BB, 0x6111, 0x08EE, 0x10CC, 0x6199, 0x10EE,
0x4088, 0x0D88, 0x3B11, 0x0DCC, 0x1988, 0x7311, 0x0DEE, 0x19CC,
0x7399, 0x19EE, 0x73DD, 0x6188, 0x61CC, 0x3B88, 0x3BCC, 0x7388,
0x3BEE, 0x73CC, 0x053B, 0x1A77, 0x74EF, 0x093B, 0x3277, 0x113B,
0x6277, 0x213B, 0x413B, 0x0519, 0x1A33, 0x7467, 0x059D, 0x0919,
0x7677, 0x099D, 0x333B, 0x6233, 0x119D, 0x2119, 0x219D, 0x4119,
0x419D, 0x0508, 0x1A11, 0x7423, 0x058C, 0x0908, 0x3211, 0x05CE,
0x098C, 0x3319, 0x6211, 0x09CE, 0x339D, 0x2108, 0x11CE, 0x218C,
0x4108, 0x418C, 0x1B08, 0x7611, 0x1B8C, 0x3308, 0x1BCE, 0x338C,
0x6308, 0x33CE, 0x638C, 0x7708, 0x77CE, 0x0A3B, 0x3477, 0x123B,
0x6477, 0x223B, 0x423B, 0x0A19, 0x3433, 0x0B1D, 0x1219, 0x6433,
0x131D, 0x663B, 0x231D, 0x4219, 0x431D, 0x0A08, 0x3411, 0x0B0C,
0x1208, 0x6411, 0x0B8E, 0x130C, 0x6619, 0x138E, 0x671D, 0x4208,
0x238E, 0x430C, 0x438E, 0x370C, 0x378E, 0x678E, 0x6877, 0x443B,
0x6833, 0x2419, 0x4419, 0x1408, 0x160C, 0x170E, 0x4408, 0x460C,
0x06A1, 0x0250, 0x0CA1, 0x0450, 0x18A1, 0x7143, 0x0850, 0x30A1,
0x1050, 0x60A1, 0x06D0, 0x1DA1, 0x7B43, 0x0CD0, 0x39A1, 0x18D0,
0x71A1, 0x30D0, 0x60D0, 0x1DD0, 0x7BA1, 0x39D0, 0x71D0, 0x7BD0,
0x02B1, 0x0D63, 0x3AC7, 0x04B1, 0x1963, 0x08B1, 0x3163, 0x10B1,
0x6163, 0x20B1, 0x0290, 0x0D21, 0x3A43, 0x02D8, 0x0490, 0x3B63,
0x7243, 0x04D8, 0x19B1, 0x7363, 0x08D8, 0x1090, 0x6121, 0x10D8,
0x61B1, 0x4090, 0x0D90, 0x3B21, 0x0DD8, 0x1990, 0x7321, 0x19D8,
0x73B1, 0x31D8, 0x6190, 0x3B90, 0x3BD8, 0x7390, 0x73D8, 0x0573,
0x1AE7, 0x75CF, 0x0973, 0x32E7, 0x1173, 0x62E7, 0x2173, 0x4173,
0x0531, 0x1A63, 0x05B9, 0x0931, 0x3263, 0x09B9, 0x3373, 0x6263,
0x11B9, 0x2131, 0x21B9, 0x4131, 0x41B9, 0x0510, 0x1A21, 0x0598,
0x0910, 0x7663, 0x05DC, 0x0998, 0x3331, 0x6221, 0x09DC, 0x33B9,
0x2110, 0x11DC, 0x2198, 0x4110, 0x4198, 0x1B10, 0x7621, 0x1B98,
0x3310, 0x1BDC, 0x3398, 0x6310, 0x33DC, 0x6398, 0x7710, 0x7798,
0x77DC, 0x0AF7, 0x35EF, 0x12F7, 0x65EF, 0x22F7, 0x42F7, 0x0A73,
0x34E7, 0x0B7B, 0x36F7, 0x64E7, 0x137B, 0x66F7, 0x237B, 0x4273,
0x437B, 0x0A31, 0x3463, 0x0B39, 0x1231, 0x6463, 0x0BBD, 0x1339,
0x6673, 0x13BD, 0x677B, 0x4231, 0x23BD, 0x4339, 0x43BD, 0x0A10,
0x3421, 0x0B18, 0x1210, 0x6421, 0x0B9C, 0x1318, 0x6631, 0x0BDE,
0x139C, 0x6739, 0x4210, 0x13DE, 0x67BD, 0x4318, 0x23DE, 0x3610,
0x3718, 0x6610, 0x379C, 0x6718, 0x37DE, 0x679C, 0x67DE, 0x14F7,
0x69EF, 0x24F7, 0x44F7, 0x1473, 0x68E7, 0x167B, 0x6CF7, 0x267B,
0x4473, 0x467B, 0x1431, 0x6863, 0x1639, 0x2431, 0x173D, 0x2639,
0x4431, 0x273D, 0x4639, 0x473D, 0x1410, 0x6821, 0x1618, 0x6C31,
0x171C, 0x2618, 0x4410, 0x179E, 0x271C, 0x4618, 0x279E, 0x471C,
0x479E, 0x6E18, 0x6F9E, 0x48F7, 0x2C7B, 0x4C7B, 0x2C39, 0x2E3D,
0x4E3D, 0x2C18, 0x2E1C, 0x2F1E, 0x4F1E, 0x02A0, 0x04A0, 0x1941,
0x08A0, 0x10A0, 0x20A0, 0x0DA0, 0x19A0, 0x31A0, 0x61A0, 0x3BA0,
0x73A0, 0x0561, 0x0961, 0x32C3, 0x1161, 0x62C3, 0x2161, 0x4161,
0x0520, 0x1A41, 0x05B0, 0x1B61, 0x3241, 0x09B0, 0x3361, 0x11B0,
0x6361, 0x21B0, 0x4120, 0x41B0, 0x1B20, 0x7641, 0x1BB0, 0x7761,
0x33B0, 0x6320, 0x63B0, 0x7720, 0x77B0, 0x0AE3, 0x12E3, 0x22E3,
0x42E3, 0x0A61, 0x0B71, 0x36E3, 0x64C3, 0x1371, 0x66E3, 0x2371,
0x4261, 0x4371, 0x0A20, 0x0B30, 0x1220, 0x6441, 0x0BB8, 0x1330,
0x2220, 0x13B8, 0x2330, 0x4220, 0x23B8, 0x4330, 0x3620, 0x3730,
0x6620, 0x37B8, 0x6730, 0x67B8, 0x15E7, 0x25E7, 0x45E7, 0x14E3,
0x16F3, 0x6DE7, 0x26F3, 0x44E3, 0x46F3, 0x1461, 0x68C3, 0x1671,
0x6CE3, 0x1779, 0x2671, 0x4461, 0x2779, 0x4671, 0x4779, 0x1420,
0x6841, 0x1630, 0x6C61, 0x1738, 0x2630, 0x4420, 0x17BC, 0x2738,
0x4630, 0x27BC, 0x4738, 0x6C20, 0x6E30, 0x6F38, 0x6FBC, 0x2BEF,
0x4BEF, 0x29E7, 0x2DF7, 0x49E7, 0x4DF7, 0x28E3, 0x2CF3, 0x48E3,
0x2EFB, 0x4CF3, 0x4EFB, 0x2861, 0x2C71, 0x4861, 0x2E79, 0x4C71,
0x2F7D
},
{
0x06AF, 0x1D5F, 0x0257, 0x0CAF, 0x395F, 0x0457, 0x18AF, 0x715F,
0x0857, 0x30AF, 0x1057, 0x60AF, 0x2057, 0x06D7, 0x1DAF, 0x7B5F,
0x026B, 0x0CD7, 0x39AF, 0x046B, 0x18D7, 0x71AF, 0x086B, 0x30D7,
0x106B, 0x60D7, 0x206B, 0x06EB, 0x1DD7, 0x7BAF, 0x0275, 0x0CEB,
0x39D7, 0x0475, 0x18EB, 0x71D7, 0x0875, 0x30EB, 0x1075, 0x60EB,
0x2075, 0x06F5, 0x1DEB, 0x7BD7, 0x027A, 0x0CF5, 0x39EB, 0x047A,
0x18F5, 0x71EB, 0x087A, 0x30F5, 0x107A, 0x60F5, 0x06FA, 0x1DF5,
0x7BEB, 0x0CFA, 0x39F5, 0x18FA, 0x71F5, 0x30FA, 0x1DFA, 0x7BF5,
0x39FA, 0x71FA, 0x0297, 0x0D2F, 0x3A5F, 0x0497, 0x192F, 0x725F,
0x0897, 0x312F, 0x1097, 0x612F, 0x2097, 0x4097, 0x02CB, 0x0D97,
0x3B2F, 0x04CB, 0x1997, 0x732F, 0x08CB, 0x3197, 0x10CB, 0x6197,
0x20CB, 0x40CB, 0x02E5, 0x0DCB, 0x3B97, 0x04E5, 0x19CB, 0x7397,
0x08E5, 0x31CB, 0x10E5, 0x61CB, 0x20E5, 0x40E5, 0x02F2, 0x0DE5,
0x3BCB, 0x04F2, 0x19E5, 0x73CB, 0x08F2, 0x31E5, 0x10F2, 0x61E5,
0x20F2, 0x0DF2, 0x3BE5, 0x19F2, 0x73E5, 0x31F2, 0x61F2, 0x3BF2,
0x73F2, 0x0517, 0x1A2F, 0x745F, 0x0917, 0x322F, 0x1117, 0x622F,
0x2117, 0x4117, 0x058B, 0x1B17, 0x762F, 0x098B, 0x3317, 0x118B,
0x6317, 0x218B, 0x418B, 0x05C5, 0x1B8B, 0x7717, 0x09C5, 0x338B,
0x11C5, 0x638B, 0x21C5, 0x41C5, 0x05E2, 0x1BC5, 0x778B, 0x09E2,
0x33C5, 0x11E2, 0x63C5, 0x21E2, 0x41E2, 0x1BE2, 0x77C5, 0x33E2,
0x63E2, 0x77E2, 0x0A17, 0x342F, 0x1217, 0x642F, 0x2217, 0x4217,
0x0B0B, 0x3617, 0x130B, 0x6617, 0x230B, 0x430B, 0x0B85, 0x370B,
0x1385, 0x670B, 0x2385, 0x4385, 0x0BC2, 0x3785, 0x13C2, 0x6785,
0x23C2, 0x43C2, 0x37C2, 0x67C2, 0x1417, 0x682F, 0x2417, 0x4417,
0x160B, 0x6C17, 0x260B, 0x460B, 0x1705, 0x6E0B, 0x2705, 0x4705,
0x1782, 0x6F05, 0x2782, 0x4782, 0x2817, 0x4817, 0x2C0B, 0x4C0B,
0x2E05, 0x4E05, 0x02A7, 0x0D4F, 0x3A9F, 0x04A7, 0x194F, 0x729F,
0x08A7, 0x314F, 0x10A7, 0x614F, 0x20A7, 0x40A7, 0x02D3, 0x0DA7,
0x3B4F, 0x04D3, 0x19A7, 0x734F, 0x08D3, 0x31A7, 0x10D3, 0x61A7,
0x20D3, 0x40D3, 0x02E9, 0x0DD3, 0x3BA7, 0x04E9, 0x19D3, 0x73A7,
0x08E9, 0x31D3, 0x10E9, 0x61D3, 0x20E9, 0x40E9, 0x02F4, 0x0DE9,
0x3BD3, 0x04F4, 0x19E9, 0x73D3, 0x08F4, 0x31E9, 0x10F4, 0x61E9,
0x20F4, 0x0DF4, 0x3BE9, 0x19F4, 0x73E9, 0x31F4, 0x61F4, 0x3BF4,
0x73F4, 0x056F, 0x1ADF, 0x0FD6, 0x096F, 0x32DF, 0x1F96, 0x116F,
0x62DF, 0x3F16, 0x216F, 0x416F, 0x0527, 0x1A4F, 0x749F, 0x05B7,
0x0927, 0x76DF, 0x09B7, 0x336F, 0x624F, 0x11B7, 0x2127, 0x21B7,
0x4127, 0x41B7, 0x0593, 0x1B27, 0x764F, 0x05DB, 0x0993, 0x3327,
0x09DB, 0x33B7, 0x6327, 0x11DB, 0x2193, 0x21DB, 0x4193, 0x41DB,
0x05C9, 0x1B93, 0x7727, 0x05ED, 0x09C9, 0x3393, 0x09ED, 0x33DB,
0x6393, 0x11ED, 0x21C9, 0x21ED, 0x41C9, 0x41ED, 0x05E4, 0x1BC9,
0x7793, 0x05F6, 0x09E4, 0x33C9, 0x09F6, 0x33ED, 0x63C9, 0x11F6,
0x21E4, 0x21F6, 0x41E4, 0x1BE4, 0x77C9, 0x1BF6, 0x33E4, 0x33F6,
0x63E4, 0x63F6, 0x77E4, 0x0A6F, 0x34DF, 0x1FA6, 0x126F, 0x64DF,
0x3F26, 0x226F, 0x7E26, 0x426F, 0x0A27, 0x344F, 0x0B37, 0x1227,
0x644F, 0x1337, 0x666F, 0x2337, 0x4227, 0x4337, 0x0B13, 0x3627,
0x0B9B, 0x1313, 0x6627, 0x139B, 0x6737, 0x239B, 0x4313, 0x439B,
0x0B89, 0x3713, 0x0BCD, 0x1389, 0x6713, 0x13CD, 0x679B, 0x23CD,
0x4389, 0x43CD, 0x0BC4, 0x3789, 0x0BE6, 0x13C4, 0x6789, 0x13E6,
0x67CD, 0x23E6, 0x43C4, 0x43E6, 0x37C4, 0x37E6, 0x67C4, 0x67E6,
0x146F, 0x68DF, 0x3F46, 0x246F, 0x7E46, 0x446F, 0x1427, 0x684F,
0x1637, 0x6C6F, 0x2637, 0x4427, 0x4637, 0x1613, 0x6C27, 0x171B,
0x2613, 0x271B, 0x4613, 0x471B, 0x1709, 0x6E13, 0x178D, 0x6F1B,
0x278D, 0x4709, 0x478D, 0x1784, 0x6F09, 0x17C6, 0x2784, 0x27C6,
0x4784, 0x47C6, 0x6F84, 0x6FC6, 0x286F, 0x7E86, 0x486F, 0x2827,
0x2C37, 0x4827, 0x4C37, 0x2C13, 0x2E1B, 0x4C13, 0x4E1B, 0x2E09,
0x2F0D, 0x4E09, 0x4F0D, 0x2F04, 0x2F86, 0x4F04, 0x4F86, 0x506F,
0x5027, 0x5837, 0x5813, 0x5C1B, 0x5C09, 0x5E0D, 0x0547, 0x1A8F,
0x751F, 0x0947, 0x328F, 0x1147, 0x628F, 0x2147, 0x4147, 0x05A3,
0x1B47, 0x768F, 0x09A3, 0x3347, 0x11A3, 0x6347, 0x21A3, 0x41A3,
0x05D1, 0x1BA3, 0x7747, 0x09D1, 0x33A3, 0x11D1, 0x63A3, 0x21D1,
0x41D1, 0x05E8, 0x1BD1, 0x77A3, 0x09E8, 0x33D1, 0x11E8, 0x63D1,
0x21E8, 0x41E8, 0x1BE8, 0x77D1, 0x33E8, 0x63E8, 0x77E8, 0x0ACF,
0x359F, 0x1FAC, 0x12CF, 0x659F, 0x3F2C, 0x22CF, 0x7E2C, 0x42CF,
0x0A47, 0x348F, 0x0B67, 0x1247, 0x648F, 0x1367, 0x66CF, 0x2367,
0x4247, 0x4367, 0x0B23, 0x3647, 0x0BB3, 0x1323, 0x6647, 0x13B3,
0x6767, 0x23B3, 0x4323, 0x43B3, 0x0B91, 0x3723, 0x0BD9, 0x1391,
0x6723, 0x13D9, 0x67B3, 0x23D9, 0x4391, 0x43D9, 0x0BC8, 0x3791,
0x0BEC, 0x13C8, 0x6791, 0x13EC, 0x67D9, 0x23EC, 0x43C8, 0x43EC,
0x37C8, 0x37EC, 0x67C8, 0x67EC, 0x15DF, 0x0FAE, 0x3F5D, 0x25DF,
0x1F2E, 0x7E5D, 0x45DF, 0x3E2E, 0x7C2E, 0x14CF, 0x699F, 0x3F4C,
0x16EF, 0x6DDF, 0x3F6E, 0x7E4C, 0x26EF, 0x44CF, 0x7E6E, 0x46EF,
0x1447, 0x688F, 0x1667, 0x2447, 0x1777, 0x6EEF, 0x4447, 0x2777,
0x4667, 0x4777, 0x1623, 0x6C47, 0x1733, 0x2623, 0x17BB, 0x2733,
0x4623, 0x27BB, 0x4733, 0x47BB, 0x1711, 0x6E23, 0x1799, 0x2711,
0x17DD, 0x2799, 0x4711, 0x27DD, 0x4799, 0x47DD, 0x1788, 0x6F11,
0x17CC, 0x2788, 0x17EE, 0x27CC, 0x4788, 0x27EE, 0x47CC, 0x47EE,
0x6F88, 0x6FCC, 0x29DF, 0x1F4E, 0x7E9D, 0x49DF, 0x3E4E, 0x7C4E,
0x28CF, 0x7E8C, 0x2CEF, 0x48CF, 0x7ECE, 0x4CEF, 0x2847, 0x2C67,
0x4847, 0x2E77, 0x4C67, 0x4E77, 0x2C23, 0x2E33, 0x4C23, 0x2F3B,
0x4E33, 0x4F3B, 0x2E11, 0x2F19, 0x4E11, 0x2F9D, 0x4F19, 0x4F9D,
0x2F08, 0x2F8C, 0x4F08, 0x2FCE, 0x4F8C, 0x4FCE, 0x51DF, 0x3E8E,
0x7C8E, 0x50CF, 0x58EF, 0x5047, 0x5867, 0x5C77, 0x5823, 0x5C33,
0x5E3B, 0x5C11, 0x5E19, 0x5F1D, 0x5E08, 0x5F0C, 0x5F8E, 0x7D0E,
0x0A87, 0x350F, 0x1287, 0x650F, 0x2287, 0x4287, 0x0B43, 0x3687,
0x1343, 0x6687, 0x2343, 0x4343, 0x0BA1, 0x3743, 0x13A1, 0x6743,
0x23A1, 0x43A1, 0x0BD0, 0x37A1, 0x13D0, 0x67A1, 0x23D0, 0x43D0,
0x37D0, 0x67D0, 0x158F, 0x6B1F, 0x3F58, 0x258F, 0x7E58, 0x458F,
0x1487, 0x690F, 0x16C7, 0x2487, 0x26C7, 0x4487, 0x46C7, 0x1643,
0x6C87, 0x1763, 0x2643, 0x2763, 0x4643, 0x4763, 0x1721, 0x6E43,
0x17B1, 0x2721, 0x27B1, 0x4721, 0x47B1, 0x1790, 0x6F21, 0x17D8,
0x2790, 0x27D8, 0x4790, 0x47D8, 0x6F90, 0x6FD8, 0x2B9F, 0x1F5C,
0x7EB9, 0x4B9F, 0x3E5C, 0x7C5C, 0x298F, 0x7E98, 0x2DCF, 0x498F,
0x7EDC, 0x4DCF, 0x2887, 0x2CC7, 0x4887, 0x2EE7, 0x4CC7, 0x4EE7,
0x2C43, 0x2E63, 0x4C43, 0x2F73, 0x4E63, 0x4F73, 0x2E21, 0x2F31,
0x4E21, 0x2FB9, 0x4F31, 0x4FB9, 0x2F10, 0x2F98, 0x4F10, 0x2FDC,
0x4F98, 0x4FDC, 0x0F5E, 0x3EBD, 0x1E5E, 0x7CBD, 0x3C5E, 0x785E,
0x539F, 0x3E9C, 0x5BDF, 0x3EDE, 0x7C9C, 0x7CDE, 0x518F, 0x59CF,
0x5DEF, 0x5087, 0x58C7, 0x5CE7, 0x5EF7, 0x5843, 0x5C63, 0x5E73,
0x5F7B, 0x5C21, 0x5E31, 0x5F39, 0x5FBD, 0x5E10, 0x5F18, 0x5F9C,
0x1E9E, 0x7D3D, 0x3C9E, 0x789E, 0x7D1C, 0x7D9E, 0x3D1E, 0x791E,
0x7A1E, 0x1507, 0x2507, 0x4507, 0x1683, 0x6D07, 0x2683, 0x4683,
0x1741, 0x6E83, 0x2741, 0x4741, 0x17A0, 0x6F41, 0x27A0, 0x47A0,
0x6FA0, 0x2B0F, 0x7EB0, 0x4B0F, 0x2907, 0x2D87, 0x4907, 0x4D87,
0x2C83, 0x2EC3, 0x4C83, 0x4EC3, 0x2E41, 0x2F61, 0x4E41, 0x4F61,
0x2F20, 0x2FB0, 0x4F20, 0x4FB0, 0x571F, 0x3EB8, 0x7CB8, 0x530F,
0x5B8F, 0x5107, 0x5987, 0x5DC7, 0x5883, 0x5CC3, 0x5EE3, 0x5C41,
0x5E61, 0x5F71, 0x5E20, 0x5F30, 0x5FB8, 0x1EBC, 0x7D79, 0x3CBC,
0x78BC, 0x7D38, 0x7DBC, 0x0EBE, 0x3D7D, 0x1CBE, 0x797D, 0x38BE,
0x70BE, 0x3D3C, 0x3DBE, 0x793C, 0x79BE, 0x1D3E, 0x7A7D, 0x393E,
0x713E, 0x7A3C, 0x7B3E, 0x3A3E, 0x723E, 0x743E, 0x2D03, 0x4D03,
0x2E81, 0x4E81, 0x2F40, 0x4F40, 0x5B07, 0x5903, 0x5D83, 0x5C81,
0x5EC1, 0x5E40, 0x5F60, 0x7D70, 0x3D78, 0x7978, 0x1D7C, 0x7AF9,
0x397C, 0x717C, 0x7A78, 0x7B7C, 0x0D7E, 0x3AFD, 0x197E, 0x72FD,
0x317E, 0x617E, 0x3A7C, 0x3B7E, 0x727C, 0x737E, 0x1A7E, 0x74FD,
0x327E, 0x627E, 0x747C, 0x767E, 0x347E, 0x647E, 0x7AF0, 0x3AF8,
0x72F8, 0x1AFC, 0x75F9, 0x32FC, 0x62FC, 0x74F8, 0x76FC, 0x34FC,
0x64FC
},
{
0x07D5, 0x1FAB, 0x03CA, 0x0F95, 0x3F2B, 0x078A, 0x1F15, 0x7E2B,
0x0F0A, 0x3E15, 0x1E0A, 0x0B5F, 0x07DA, 0x1FB5, 0x135F, 0x0F9A,
0x3F35, 0x235F, 0x1F1A, 0x7E35, 0x435F, 0x3E1A, 0x0BAF, 0x375F,
0x1FBA, 0x13AF, 0x675F, 0x3F3A, 0x23AF, 0x7E3A, 0x43AF, 0x0BD7,
0x37AF, 0x13D7, 0x67AF, 0x23D7, 0x43D7, 0x0BEB, 0x37D7, 0x13EB,
0x67D7, 0x23EB, 0x43EB, 0x0BF5, 0x37EB, 0x13F5, 0x67EB, 0x23F5,
0x03D2, 0x0FA5, 0x3F4B, 0x0792, 0x1F25, 0x7E4B, 0x0F12, 0x3E25,
0x1E12, 0x7C25, 0x3C12, 0x165F, 0x0FB2, 0x3F65, 0x265F, 0x1F32,
0x7E65, 0x465F, 0x3E32, 0x7C32, 0x172F, 0x6E5F, 0x3F72, 0x272F,
0x7E72, 0x472F, 0x1797, 0x6F2F, 0x2797, 0x4797, 0x17CB, 0x6F97,
0x27CB, 0x47CB, 0x17E5, 0x6FCB, 0x27E5, 0x47E5, 0x07A2, 0x1F45,
0x7E8B, 0x0F22, 0x3E45, 0x1E22, 0x7C45, 0x3C22, 0x7822, 0x2C5F,
0x1F62, 0x7EC5, 0x4C5F, 0x3E62, 0x7C62, 0x2E2F, 0x7EE2, 0x4E2F,
0x2F17, 0x4F17, 0x2F8B, 0x4F8B, 0x2FC5, 0x4FC5, 0x0F42, 0x3E85,
0x1E42, 0x7C85, 0x3C42, 0x7842, 0x585F, 0x3EC2, 0x7CC2, 0x5C2F,
0x5E17, 0x5F0B, 0x1E82, 0x7D05, 0x3C82, 0x7882, 0x7D82, 0x3D02,
0x7902, 0x03D4, 0x0FA9, 0x3F53, 0x0794, 0x1F29, 0x7E53, 0x0F14,
0x3E29, 0x1E14, 0x7C29, 0x3C14, 0x169F, 0x0FB4, 0x3F69, 0x269F,
0x1F34, 0x7E69, 0x469F, 0x3E34, 0x7C34, 0x174F, 0x6E9F, 0x3F74,
0x274F, 0x7E74, 0x474F, 0x17A7, 0x6F4F, 0x27A7, 0x47A7, 0x17D3,
0x6FA7, 0x27D3, 0x47D3, 0x17E9, 0x6FD3, 0x27E9, 0x47E9, 0x07AD,
0x1F5B, 0x7EB7, 0x0396, 0x0F2D, 0x3E5B, 0x0716, 0x1E2D, 0x7C5B,
0x0E16, 0x3C2D, 0x1C16, 0x782D, 0x3816, 0x07A4, 0x1F49, 0x7E93,
0x07B6, 0x0F24, 0x3E49, 0x0F36, 0x3E6D, 0x7C49, 0x1E36, 0x3C24,
0x3C36, 0x7824, 0x7836, 0x2C9F, 0x1F64, 0x7EC9, 0x2EDF, 0x4C9F,
0x1F76, 0x3E64, 0x4EDF, 0x3E76, 0x7C64, 0x7C76, 0x2E4F, 0x7EE4,
0x2F6F, 0x4E4F, 0x7EF6, 0x4F6F, 0x2F27, 0x2FB7, 0x4F27, 0x4FB7,
0x2F93, 0x2FDB, 0x4F93, 0x4FDB, 0x2FC9, 0x4FC9, 0x03A6, 0x0F4D,
0x3E9B, 0x0726, 0x1E4D, 0x7C9B, 0x0E26, 0x3C4D, 0x1C26, 0x784D,
0x3826, 0x7026, 0x0F44, 0x3E89, 0x0F66, 0x1E44, 0x7C89, 0x1E66,
0x7CCD, 0x3C66, 0x7844, 0x7866, 0x589F, 0x3EC4, 0x5CDF, 0x3EE6,
0x7CC4, 0x7CE6, 0x5C4F, 0x5E6F, 0x5E27, 0x5F37, 0x5F13, 0x5F9B,
0x5F89, 0x0746, 0x1E8D, 0x7D1B, 0x0E46, 0x3C8D, 0x1C46, 0x788D,
0x3846, 0x7046, 0x1E84, 0x7D09, 0x1EC6, 0x3C84, 0x3CC6, 0x7884,
0x78C6, 0x7D84, 0x7DC6, 0x0E86, 0x3D0D, 0x1C86, 0x790D, 0x3886,
0x7086, 0x3D04, 0x3D86, 0x7904, 0x7986, 0x1D06, 0x7A0D, 0x3906,
0x7106, 0x7A04, 0x7B06, 0x3A06, 0x7206, 0x07A8, 0x1F51, 0x7EA3,
0x0F28, 0x3E51, 0x1E28, 0x7C51, 0x3C28, 0x7828, 0x2D1F, 0x1F68,
0x7ED1, 0x4D1F, 0x3E68, 0x7C68, 0x2E8F, 0x7EE8, 0x4E8F, 0x2F47,
0x4F47, 0x2FA3, 0x4FA3, 0x2FD1, 0x4FD1, 0x03AC, 0x0F59, 0x3EB3,
0x072C, 0x1E59, 0x7CB3, 0x0E2C, 0x3C59, 0x1C2C, 0x7859, 0x382C,
0x702C, 0x0F48, 0x3E91, 0x0F6C, 0x1E48, 0x7C91, 0x1E6C, 0x7CD9,
0x3C6C, 0x7848, 0x786C, 0x591F, 0x3EC8, 0x5D9F, 0x3EEC, 0x7CC8,
0x7CEC, 0x5C8F, 0x5ECF, 0x5E47, 0x5F67, 0x5F23, 0x5FB3, 0x5F91,
0x075D, 0x1EBB, 0x7D77, 0x032E, 0x0E5D, 0x3CBB, 0x062E, 0x1C5D,
0x78BB, 0x0C2E, 0x385D, 0x182E, 0x705D, 0x302E, 0x074C, 0x1E99,
0x7D33, 0x076E, 0x0E4C, 0x3C99, 0x0E6E, 0x3CDD, 0x7899, 0x1C6E,
0x384C, 0x386E, 0x704C, 0x706E, 0x1E88, 0x7D11, 0x1ECC, 0x3C88,
0x1EEE, 0x3CCC, 0x7888, 0x3CEE, 0x78CC, 0x78EE, 0x7D88, 0x7DCC,
0x7DEE, 0x034E, 0x0E9D, 0x3D3B, 0x064E, 0x1C9D, 0x793B, 0x0C4E,
0x389D, 0x184E, 0x709D, 0x304E, 0x604E, 0x0E8C, 0x3D19, 0x0ECE,
0x1C8C, 0x7919, 0x1CCE, 0x799D, 0x38CE, 0x708C, 0x70CE, 0x3D08,
0x3D8C, 0x7908, 0x3DCE, 0x798C, 0x79CE, 0x068E, 0x1D1D, 0x7A3B,
0x0C8E, 0x391D, 0x188E, 0x711D, 0x308E, 0x608E, 0x1D0C, 0x7A19,
0x1D8E, 0x390C, 0x398E, 0x710C, 0x718E, 0x7A08, 0x7B0C, 0x7B8E,
0x0D0E, 0x3A1D, 0x190E, 0x721D, 0x310E, 0x610E, 0x3A0C, 0x3B0E,
0x720C, 0x730E, 0x1A0E, 0x741D, 0x320E, 0x620E, 0x740C, 0x760E,
0x340E, 0x640E, 0x0F50, 0x3EA1, 0x1E50, 0x7CA1, 0x3C50, 0x7850,
0x3ED0, 0x7CD0, 0x5D0F, 0x5E87, 0x5F43, 0x5FA1, 0x0758, 0x1EB1,
0x7D63, 0x0E58, 0x3CB1, 0x1C58, 0x78B1, 0x3858, 0x7058, 0x1E90,
0x7D21, 0x1ED8, 0x3C90, 0x3CD8, 0x7890, 0x78D8, 0x7D90, 0x7DD8,
0x035C, 0x0EB9, 0x3D73, 0x065C, 0x1CB9, 0x7973, 0x0C5C, 0x38B9,
0x185C, 0x70B9, 0x305C, 0x605C, 0x0E98, 0x3D31, 0x0EDC, 0x1C98,
0x7931, 0x1CDC, 0x3898, 0x38DC, 0x7098, 0x70DC, 0x3D10, 0x3D98,
0x7910, 0x3DDC, 0x7998, 0x79DC, 0x06BD, 0x1D7B, 0x7AF7, 0x025E,
0x0CBD, 0x397B, 0x045E, 0x18BD, 0x717B, 0x085E, 0x30BD, 0x105E,
0x60BD, 0x205E, 0x069C, 0x1D39, 0x7A73, 0x06DE, 0x0C9C, 0x3939,
0x0CDE, 0x39BD, 0x7139, 0x18DE, 0x309C, 0x30DE, 0x609C, 0x60DE,
0x1D18, 0x7A31, 0x1D9C, 0x3918, 0x1DDE, 0x399C, 0x7118, 0x39DE,
0x719C, 0x71DE, 0x7A10, 0x7B18, 0x7B9C, 0x7BDE, 0x029E, 0x0D3D,
0x3A7B, 0x049E, 0x193D, 0x727B, 0x089E, 0x313D, 0x109E, 0x613D,
0x209E, 0x409E, 0x0D1C, 0x3A39, 0x0D9E, 0x191C, 0x7239, 0x199E,
0x733D, 0x319E, 0x611C, 0x619E, 0x3A18, 0x3B1C, 0x7218, 0x3B9E,
0x731C, 0x739E, 0x051E, 0x1A3D, 0x747B, 0x091E, 0x323D, 0x111E,
0x623D, 0x211E, 0x411E, 0x1A1C, 0x7439, 0x1B1E, 0x321C, 0x331E,
0x621C, 0x631E, 0x7418, 0x761C, 0x771E, 0x0A1E, 0x343D, 0x121E,
0x643D, 0x221E, 0x421E, 0x341C, 0x361E, 0x641C, 0x661E, 0x141E,
0x683D, 0x241E, 0x441E, 0x681C, 0x6C1E, 0x1EA0, 0x7D41, 0x3CA0,
0x78A0, 0x7DA0, 0x0EB0, 0x3D61, 0x1CB0, 0x7961, 0x38B0, 0x70B0,
0x3D20, 0x3DB0, 0x7920, 0x79B0, 0x06B8, 0x1D71, 0x7AE3, 0x0CB8,
0x3971, 0x18B8, 0x7171, 0x30B8, 0x60B8, 0x1D30, 0x7A61, 0x1DB8,
0x3930, 0x39B8, 0x7130, 0x71B8, 0x7A20, 0x7B30, 0x7BB8, 0x02BC,
0x0D79, 0x3AF3, 0x04BC, 0x1979, 0x72F3, 0x08BC, 0x3179, 0x10BC,
0x6179, 0x20BC, 0x40BC, 0x0D38, 0x3A71, 0x0DBC, 0x1938, 0x7271,
0x19BC, 0x7379, 0x31BC, 0x6138, 0x61BC, 0x3A30, 0x3B38, 0x7230,
0x3BBC, 0x7338, 0x73BC, 0x057D, 0x1AFB, 0x75F7, 0x097D, 0x32FB,
0x117D, 0x62FB, 0x217D, 0x417D, 0x053C, 0x1A79, 0x74F3, 0x05BE,
0x093C, 0x3279, 0x09BE, 0x337D, 0x6279, 0x11BE, 0x213C, 0x21BE,
0x413C, 0x41BE, 0x1A38, 0x7471, 0x1B3C, 0x3238, 0x1BBE, 0x333C,
0x6238, 0x33BE, 0x633C, 0x63BE, 0x7430, 0x7638, 0x773C, 0x77BE,
0x0A7D, 0x34FB, 0x127D, 0x64FB, 0x227D, 0x427D, 0x0A3C, 0x3479,
0x0B3E, 0x123C, 0x6479, 0x133E, 0x667D, 0x233E, 0x423C, 0x433E,
0x3438, 0x363C, 0x6438, 0x373E, 0x663C, 0x673E, 0x147D, 0x68FB,
0x247D, 0x447D, 0x143C, 0x6879, 0x163E, 0x243C, 0x263E, 0x443C,
0x463E, 0x6838, 0x6C3C, 0x6E3E, 0x287D, 0x487D, 0x283C, 0x2C3E,
0x483C, 0x4C3E, 0x3D40, 0x7940, 0x1D60, 0x7AC1, 0x3960, 0x7160,
0x7A40, 0x7B60, 0x0D70, 0x3AE1, 0x1970, 0x72E1, 0x3170, 0x6170,
0x3A60, 0x3B70, 0x7260, 0x7370, 0x0578, 0x1AF1, 0x75E3, 0x0978,
0x32F1, 0x1178, 0x62F1, 0x2178, 0x4178, 0x1A70, 0x74E1, 0x1B78,
0x76F1, 0x3378, 0x6270, 0x6378, 0x7460, 0x7670, 0x7778, 0x0AF9,
0x35F3, 0x12F9, 0x65F3, 0x22F9, 0x42F9, 0x0A78, 0x34F1, 0x0B7C,
0x36F9, 0x64F1, 0x137C, 0x2278, 0x237C, 0x4278, 0x437C, 0x3470,
0x3678, 0x6470, 0x377C, 0x6678, 0x677C, 0x15FB, 0x6BF7, 0x25FB,
0x45FB, 0x14F9, 0x69F3, 0x16FD, 0x24F9, 0x26FD, 0x44F9, 0x46FD,
0x1478, 0x68F1, 0x167C, 0x2478, 0x177E, 0x267C, 0x4478, 0x277E,
0x467C, 0x477E, 0x6870, 0x6C78, 0x6E7C, 0x6F7E, 0x29FB, 0x49FB,
0x28F9, 0x2CFD, 0x48F9, 0x4CFD, 0x2878, 0x2C7C, 0x4878, 0x2E7E,
0x4C7C, 0x4E7E, 0x51FB, 0x50F9, 0x58FD, 0x5078, 0x587C, 0x5C7E,
0x3AC0, 0x72C0, 0x1AE0, 0x75C1, 0x32E0, 0x62E0, 0x74C0, 0x76E0,
0x0AF0, 0x35E1, 0x12F0, 0x65E1, 0x22F0, 0x42F0, 0x34E0, 0x36F0,
0x64E0, 0x66F0, 0x15F1, 0x6BE3, 0x25F1, 0x45F1, 0x14F0, 0x69E1,
0x16F8, 0x6DF1, 0x26F8, 0x44F0, 0x46F8, 0x68E0, 0x6CF0, 0x6EF8,
0x2BF3, 0x4BF3, 0x29F1, 0x2DF9, 0x49F1, 0x4DF9, 0x28F0, 0x2CF8,
0x48F0, 0x2EFC, 0x4CF8, 0x4EFC, 0x53F3, 0x51F1, 0x59F9, 0x50F0,
0x58F8, 0x5CFC, 0x35C0, 0x65C0, 0x15E0, 0x6BC1, 0x25E0, 0x45E0,
0x69C0, 0x6DE0, 0x2BE1, 0x4BE1, 0x29E0, 0x2DF0, 0x49E0, 0x4DF0,
0x57E3
}
};
static const unsigned short s_rs0[] = {
27, 917 };
@@ -716,7 +720,7 @@ static int _pdf417_encode_byte( const char * szCode, int iLen, int * pCW, int iP
HB_LONGLONG ill;
int i;
HB_TRACE( HB_TR_DEBUG, ("encode byte len=%d", iLen));
HB_TRACE( HB_TR_DEBUG, ( "encode byte len=%d", iLen ) );
if( iLen == 0 )
return iPos;
@@ -772,16 +776,16 @@ static int _pdf417_encode_byte( const char * szCode, int iLen, int * pCW, int iP
static int _pdf417_encode_text_add( int * pCW, int iPos, int * i1, int * i2, int no )
{
* i1 = * i2;
* i2 = no;
HB_TRACE( HB_TR_DEBUG, ("text halfcodeword %d", no));
if( * i1 != -1 )
*i1 = *i2;
*i2 = no;
HB_TRACE( HB_TR_DEBUG, ( "text halfcodeword %d", no ) );
if( *i1 != -1 )
{
if( iPos >= MAX_CODEWORD_COUNT )
return -1;
pCW[ iPos++ ] = * i1 * 30 + * i2;
* i1 = -1;
* i2 = -1;
pCW[ iPos++ ] = *i1 * 30 + *i2;
*i1 = -1;
*i2 = -1;
}
return iPos;
}
@@ -790,12 +794,12 @@ static int _pdf417_encode_text( const char * szCode, int iLen, int * pCW, int iP
{
int i, j, i1, i2, no, iSubMode;
HB_TRACE( HB_TR_DEBUG, ("encode text len=%d", iLen));
HB_TRACE( HB_TR_DEBUG, ( "encode text len=%d", iLen ) );
iSubMode = SUBMODE_UPPER;
i1 = i2 = -1;
for( i = 0; i < iLen; i++ )
{
HB_TRACE( HB_TR_DEBUG, ("submode=%d char=%c", iSubMode, szCode[ i ] ));
HB_TRACE( HB_TR_DEBUG, ( "submode=%d char=%c", iSubMode, szCode[ i ] ) );
if( iSubMode == SUBMODE_UPPER )
{
if( ( no = _pdf417_upperno( szCode[ i ] ) ) != -1 )
@@ -1013,7 +1017,7 @@ static int _pdf417_encode_numeric( const char * szCode, int iLen, int * pCW, int
HB_LONGLONG ill;
int i, j, k;
HB_TRACE( HB_TR_DEBUG, ("encode numeric len=%d", iLen));
HB_TRACE( HB_TR_DEBUG, ( "encode numeric len=%d", iLen ) );
if( iLen == 0 )
return iPos;
@@ -1047,13 +1051,13 @@ static int _pdf417_encode_numeric( const char * szCode, int iLen, int * pCW, int
static int _pdf417_encode( const char * szCode, int iLen, int * pCW )
{
int i, j, iMode, iPos, iStart;
int i, j, iMode, iPos, iStart;
/*
Byte: 6 bytes -> 5 CW 1.2
Text: 2 characters -> 1 CW 2
Numeric: 44 digits -> 15 CW 2.933333
*/
*/
iMode = LATCH_TEXT;
iStart = 0;
iPos = 1; /* 0 is reserved for length */
@@ -1067,7 +1071,7 @@ static int _pdf417_encode( const char * szCode, int iLen, int * pCW )
Digit in textmode uses 0.5 CW, in numeric mode 0.3409 CW.
To save 2 CW + average remainig space in text mode we must
have 2.5 / (0.5-0.3409) = 15.71 digits
*/
*/
for( j = i + 1; j < iLen && _pdf417_isdigit( szCode[ j ] ); j++ );
if( j - i >= 16 )
{
@@ -1190,32 +1194,32 @@ static void _pdf417_reed_solomon( int * pCW, int iLen, int iLevel )
switch( iLevel )
{
case 1:
coef = s_rs1;
break;
coef = s_rs1;
break;
case 2:
coef = s_rs2;
break;
coef = s_rs2;
break;
case 3:
coef = s_rs3;
break;
coef = s_rs3;
break;
case 4:
coef = s_rs4;
break;
coef = s_rs4;
break;
case 5:
coef = s_rs5;
break;
coef = s_rs5;
break;
case 6:
coef = s_rs6;
break;
coef = s_rs6;
break;
case 7:
coef = s_rs7;
break;
coef = s_rs7;
break;
case 8:
coef = s_rs8;
break;
coef = s_rs8;
break;
default:
coef = s_rs0;
break;
coef = s_rs0;
break;
}
for( i = 0; i < iECLen; i++ )
@@ -1295,12 +1299,12 @@ PHB_ZEBRA hb_zebra_create_pdf417( const char * szCode, HB_SIZE nLen, int iFlags,
{
iColCount = ( iDataCount + _pdf417_ec_size( iLevel ) + iRowCount - 1 ) / iRowCount;
/* w:h aspect ration is less than 2:1 for defaul 3x module height */
HB_TRACE( HB_TR_DEBUG, ("iDataCount=%d iRowCount=%d iColCount=%d", iDataCount, iRowCount, iColCount));
HB_TRACE( HB_TR_DEBUG, ( "iDataCount=%d iRowCount=%d iColCount=%d", iDataCount, iRowCount, iColCount ) );
if( ( _pdf417_width( iColCount, iFlags ) < iRowCount * 3 * 2 || iColCount == 1 ) &&
iColCount <= MAX_COL_COUNT &&
iColCount * iRowCount <= MAX_CODEWORD_COUNT ) /* This should solve 928 (= 29 columns * 32 rows) problem */
{
HB_TRACE( HB_TR_DEBUG, ("tinka"));
HB_TRACE( HB_TR_DEBUG, ( "tinka" ) );
break;
}
iRowCount++;
@@ -1336,9 +1340,9 @@ PHB_ZEBRA hb_zebra_create_pdf417( const char * szCode, HB_SIZE nLen, int iFlags,
pZebra->szCode = hb_strdup( "" );
pZebra->pBits = hb_bitbuffer_create();
HB_TRACE( HB_TR_DEBUG, ("iColCount=%d iRowCount=%d ECCount=%d", iColCount, iRowCount, _pdf417_ec_size( iLevel )));
HB_TRACE( HB_TR_DEBUG, ( "iColCount=%d iRowCount=%d ECCount=%d", iColCount, iRowCount, _pdf417_ec_size( iLevel ) ) );
for( i = 0; i < iCount; i++ )
HB_TRACE( HB_TR_DEBUG, ("%d", pCW[ i ]));
HB_TRACE( HB_TR_DEBUG, ( "%d", pCW[ i ] ) );
for( i = 0; i < iRowCount; i++ )
@@ -1381,6 +1385,7 @@ PHB_ZEBRA hb_zebra_create_pdf417( const char * szCode, HB_SIZE nLen, int iFlags,
HB_FUNC( HB_ZEBRA_CREATE_PDF417 )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_pdf417( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ), hb_parni( 3 ) ) );

View File

@@ -56,24 +56,24 @@
JIS-X-0510 QR Code standard in Japaneese language :)
http://sourceforge.jp/projects/qrcode/docs/qrcode_specification_ja/en/1/qrcode_specification_ja.pdf
http://en.wikipedia.org/wiki/QR_Code
http://www.denso-wave.com/qrcode/index-e.html
http://www.itsc.org.sg/pdf/synthesis08/Three_QR_Code.pdf
http://www.qrme.co.uk/qr-code-resources/understanding-a-qr-code.html
http://www.swetake.com/qr/index-e.html
http://www.codeproject.com/KB/cs/qrcode.aspx
http://sourceforge.jp/projects/reedsolomon
http://twit88.com/home/
http://qrcode.sourceforge.jp/
http://zxing.org/w/decode.jspx Online decoder
http://blog.qr4.nl/Online-QR-Code_Decoder.aspx Online decoder (not all codes are decoded)
http://www.thonky.com/qr-code-tutorial/ Tutorial
http://code.google.com/p/zxing/ Java library
http://goqr.me/ Online encode
http://www.pclviewer.com/rs2/calculator.html Reed-solomon ECC calculator
http://raidenii.net/files/datasheets/misc/qr_code.pdf
http://en.wikipedia.org/wiki/QR_Code
http://www.denso-wave.com/qrcode/index-e.html
http://www.itsc.org.sg/pdf/synthesis08/Three_QR_Code.pdf
http://www.qrme.co.uk/qr-code-resources/understanding-a-qr-code.html
http://www.swetake.com/qr/index-e.html
http://www.codeproject.com/KB/cs/qrcode.aspx
http://sourceforge.jp/projects/reedsolomon
http://twit88.com/home/
http://qrcode.sourceforge.jp/
http://zxing.org/w/decode.jspx Online decoder
http://blog.qr4.nl/Online-QR-Code_Decoder.aspx Online decoder (not all codes are decoded)
http://www.thonky.com/qr-code-tutorial/ Tutorial
http://code.google.com/p/zxing/ Java library
http://goqr.me/ Online encode
http://www.pclviewer.com/rs2/calculator.html Reed-solomon ECC calculator
http://raidenii.net/files/datasheets/misc/qr_code.pdf
*/
*/
#include "hbzebra.h"
#include "hbapi.h"
@@ -84,21 +84,21 @@ http://raidenii.net/files/datasheets/misc/qr_code.pdf
typedef struct
{
unsigned char uiCount;
unsigned char uiData;
unsigned char uiECC;
unsigned char uiCount;
unsigned char uiData;
unsigned char uiECC;
} QRBLOCKPARAM;
typedef struct
{
unsigned int uiECC;
QRBLOCKPARAM block[ 2 ];
unsigned int uiECC;
QRBLOCKPARAM block[ 2 ];
} QRLEVEL, * PQRLEVEL;
typedef struct
{
unsigned int uiTotal; /* total number of codewords */
QRLEVEL level[ 4 ];
unsigned int uiTotal; /* total number of codewords */
QRLEVEL level[ 4 ];
} QRVERSION, * PQRVERSION;
static const QRVERSION s_version[] =
@@ -266,12 +266,12 @@ static const QRVERSION s_version[] =
};
static const unsigned char s_rev[256] =
static const unsigned char s_rev[ 256 ] =
{
#define R2(n) n, n + 2*64, n + 1*64, n + 3*64
#define R4(n) R2(n), R2(n + 2*16), R2(n + 1*16), R2(n + 3*16)
#define R6(n) R4(n), R4(n + 2*4 ), R4(n + 1*4 ), R4(n + 3*4 )
R6(0), R6(2), R6(1), R6(3)
#define R2( n ) n, n + 2 * 64, n + 1 * 64, n + 3 * 64
#define R4( n ) R2( n ), R2( n + 2 * 16 ), R2( n + 1 * 16 ), R2( n + 3 * 16 )
#define R6( n ) R4( n ), R4( n + 2 * 4 ), R4( n + 1 * 4 ), R4( n + 3 * 4 )
R6( 0 ), R6( 2 ), R6( 1 ), R6( 3 )
};
@@ -357,7 +357,8 @@ static unsigned char * s_align[ 40 ] = {
s_align37,
s_align38,
s_align39,
s_align40 };
s_align40
};
#ifdef DEBUG_CODE
@@ -369,26 +370,26 @@ static int _qr_check_version_table( void )
for( iV = 1; iV <= 40; iV++ )
{
pQRVersion = & s_version[ iV - 1 ];
pQRVersion = &s_version[ iV - 1 ];
for( iL = 0; iL < 4; iL++ )
{
uiSumE = ( unsigned int ) ( pQRVersion->level[ iL ].block[ 0 ].uiCount ) * ( pQRVersion->level[ iL ].block[ 0 ].uiECC ) +
( unsigned int ) ( pQRVersion->level[ iL ].block[ 1 ].uiCount ) * ( pQRVersion->level[ iL ].block[ 1 ].uiECC );
if( uiSumE != pQRVersion->level[ iL ].uiECC )
return iV + 10000 + (iL + 1) * 1000;
return iV + 10000 + ( iL + 1 ) * 1000;
uiSumD = ( unsigned int ) ( pQRVersion->level[ iL ].block[ 0 ].uiCount ) * ( pQRVersion->level[ iL ].block[ 0 ].uiData ) +
( unsigned int ) ( pQRVersion->level[ iL ].block[ 1 ].uiCount ) * ( pQRVersion->level[ iL ].block[ 1 ].uiData );
if( uiSumD + uiSumE != pQRVersion->uiTotal )
return iV + 20000 + (iL + 1) * 1000;
return iV + 20000 + ( iL + 1 ) * 1000;
if( pQRVersion->level[ iL ].block[ 1 ].uiCount > 0 )
{
if( pQRVersion->level[ iL ].block[ 0 ].uiData > pQRVersion->level[ iL ].block[ 1 ].uiData )
return iV + 30000 + (iL + 1) * 1000;
return iV + 30000 + ( iL + 1 ) * 1000;
if( pQRVersion->level[ iL ].block[ 0 ].uiECC != pQRVersion->level[ iL ].block[ 1 ].uiECC )
return iV + 40000 + (iL + 1) * 1000;
return iV + 40000 + ( iL + 1 ) * 1000;
}
}
}
@@ -397,7 +398,7 @@ static int _qr_check_version_table( void )
HB_FUNC( _QR_CHECK_VERSION_TABLE )
{
hb_retni( _qr_check_version_table() );
hb_retni( _qr_check_version_table() );
}
#endif
@@ -451,13 +452,13 @@ static int _qr_format_crc( int iLevel, int iMask )
#ifdef DEBUG_CODE
HB_FUNC( _QR_VERSION_CRC )
{
hb_retni( _qr_version_crc( hb_parni( 1 ) ) );
hb_retni( _qr_version_crc( hb_parni( 1 ) ) );
}
HB_FUNC( _QR_FORMAT_CRC )
{
hb_retni( _qr_format_crc( hb_parni( 1 ), hb_parni( 2 ) ) );
hb_retni( _qr_format_crc( hb_parni( 1 ), hb_parni( 2 ) ) );
}
#endif
@@ -471,7 +472,7 @@ static int _qr_versionlength( int iVersion )
static int _qr_fixed( int iVersion, int iRow, int iCol )
{
int iLength = _qr_versionlength( iVersion );
unsigned char * pi, *pj;
unsigned char * pi, * pj;
/* position detection markers and versino info */
if( iRow < 9 && iCol < 9 )
@@ -573,12 +574,12 @@ static PHB_BITBUFFER _qr_interlace( PHB_BITBUFFER pData, unsigned char * pECC, i
#ifdef DEBUG_CODE
if( uiDst != pVersion->uiTotal )
{
HB_TRACE( HB_TR_ALWAYS, ("ERROR!!! uiDst:%d pVersion->uiTotal:%d", uiDst, pVersion->uiTotal) ) ;
HB_TRACE( HB_TR_ALWAYS, ( "ERROR!!! uiDst:%d pVersion->uiTotal:%d", uiDst, pVersion->uiTotal ) );
}
for( uiPos = 0; uiPos < pVersion->uiTotal; uiPos++ )
{
HB_TRACE( HB_TR_ALWAYS, ("interlaced:%3d %02X", ( int ) s_rev[ ( unsigned char ) pRetBuf[ uiPos ] ], ( int ) s_rev[ ( unsigned char ) pRetBuf[ uiPos ] ]) ) ;
HB_TRACE( HB_TR_ALWAYS, ( "interlaced:%3d %02X", ( int ) s_rev[ ( unsigned char ) pRetBuf[ uiPos ] ], ( int ) s_rev[ ( unsigned char ) pRetBuf[ uiPos ] ] ) );
}
#endif
return pRet;
@@ -680,7 +681,7 @@ static int _qr_dataencode( const char * szCode, HB_SIZE nSize, PHB_BITBUFFER pDa
return 0; /* Too large */
#ifdef DEBUG_CODE
HB_TRACE( HB_TR_ALWAYS, ("iMode:%d iLen:%" HB_PFS "d iDataLen:%d iVersion:%d", iMode, iLen, iDataLen, iVersion) ) ;
HB_TRACE( HB_TR_ALWAYS, ( "iMode:%d iLen:%" HB_PFS "d iDataLen:%d iVersion:%d", iMode, iLen, iDataLen, iVersion ) );
#endif
/* Encode */
@@ -734,7 +735,7 @@ static int _qr_dataencode( const char * szCode, HB_SIZE nSize, PHB_BITBUFFER pDa
#ifdef DEBUG_CODE
for( m = 0; m < iDataLen; m++ )
{
HB_TRACE( HB_TR_ALWAYS, ("data:%3d %02X", s_rev[ *( hb_bitbuffer_buffer( pData ) + m ) ], s_rev[ *( hb_bitbuffer_buffer( pData ) + m ) ] ) );
HB_TRACE( HB_TR_ALWAYS, ( "data:%3d %02X", s_rev[ *( hb_bitbuffer_buffer( pData ) + m ) ], s_rev[ *( hb_bitbuffer_buffer( pData ) + m ) ] ) );
}
#endif
return iVersion;
@@ -743,7 +744,7 @@ static int _qr_dataencode( const char * szCode, HB_SIZE nSize, PHB_BITBUFFER pDa
static void _reed_solomon_encode( unsigned char * pData, int iDataLen, unsigned char * pECC, int iECCLen, int * pPoly, int * pExp, int * pLog, int iMod )
{
int i, j;
int i, j;
unsigned char iM;
for( i = 0; i < iECCLen; i++ )
@@ -820,7 +821,7 @@ static unsigned char * _qr_checksum( PHB_BITBUFFER pData, int iVersion, int iLev
#ifdef DEBUG_CODE
for( i = 0; i <= iECCLen; i++ )
{
HB_TRACE( HB_TR_ALWAYS, ("POLY[%3d %02X]:%3d %02X", i, i, pPoly[ i ], pPoly[ i ]) ) ;
HB_TRACE( HB_TR_ALWAYS, ( "POLY[%3d %02X]:%3d %02X", i, i, pPoly[ i ], pPoly[ i ] ) );
}
#endif
@@ -835,9 +836,9 @@ static unsigned char * _qr_checksum( PHB_BITBUFFER pData, int iVersion, int iLev
pDataBuf += pLevel->block[ 0 ].uiData;
for( i = 0; i < iECCLen / 2; i++ )
{
ui2 = pECCPtr[ i ];
pECCPtr[ i ] = pECCPtr[ iECCLen - 1 - i ];
pECCPtr[ iECCLen - 1 - i ] = ui2;
ui2 = pECCPtr[ i ];
pECCPtr[ i ] = pECCPtr[ iECCLen - 1 - i ];
pECCPtr[ iECCLen - 1 - i ] = ui2;
}
pECCPtr += iECCLen;
}
@@ -848,9 +849,9 @@ static unsigned char * _qr_checksum( PHB_BITBUFFER pData, int iVersion, int iLev
pDataBuf += pLevel->block[ 1 ].uiData;
for( i = 0; i < iECCLen / 2; i++ )
{
ui2 = pECCPtr[ i ];
pECCPtr[ i ] = pECCPtr[ iECCLen - 1 - i ];
pECCPtr[ iECCLen - 1 - i ] = ui2;
ui2 = pECCPtr[ i ];
pECCPtr[ i ] = pECCPtr[ iECCLen - 1 - i ];
pECCPtr[ iECCLen - 1 - i ] = ui2;
}
pECCPtr += iECCLen;
}
@@ -863,7 +864,7 @@ static unsigned char * _qr_checksum( PHB_BITBUFFER pData, int iVersion, int iLev
iECCLen = pLevel->block[ 0 ].uiECC * ( pLevel->block[ 0 ].uiCount + pLevel->block[ 1 ].uiCount );
for( i = 0; i < iECCLen; i++ )
{
HB_TRACE( HB_TR_ALWAYS, ("ecc:%3d %02X", ( int )( unsigned char ) pECC[ i ], ( int )( unsigned char ) pECC[ i ]) ) ;
HB_TRACE( HB_TR_ALWAYS, ( "ecc:%3d %02X", ( int ) ( unsigned char ) pECC[ i ], ( int ) ( unsigned char ) pECC[ i ] ) );
}
#endif
return pECC;
@@ -1164,7 +1165,7 @@ static int _qr_mask( PHB_BITBUFFER pBits, int iVersion )
_qr_mask_pattern( pBits, iVersion, i );
iPenalty = _qr_penalty( pBits, iVersion );
#ifdef DEBUG_CODE
HB_TRACE( HB_TR_ALWAYS, ("mask:%d penalty:%d", i, iPenalty) );
HB_TRACE( HB_TR_ALWAYS, ( "mask:%d penalty:%d", i, iPenalty ) );
#endif
if( i == 0 || iPenalty < iPenaltyMin )
{
@@ -1174,9 +1175,9 @@ static int _qr_mask( PHB_BITBUFFER pBits, int iVersion )
_qr_mask_pattern( pBits, iVersion, i );
}
#ifdef DEBUG_CODE
HB_TRACE( HB_TR_ALWAYS, ("mask:%d", iMaskMin) );
HB_TRACE( HB_TR_ALWAYS, ( "mask:%d", iMaskMin ) );
// iMaskMin = 0;
HB_TRACE( HB_TR_ALWAYS, ("mask applied:%d", iMaskMin) );
HB_TRACE( HB_TR_ALWAYS, ( "mask applied:%d", iMaskMin ) );
#endif
_qr_mask_pattern( pBits, iVersion, iMaskMin );
return iMaskMin;
@@ -1224,9 +1225,9 @@ static void _qr_draw_version_format( PHB_BITBUFFER pBits, int iVersion, int iLev
/* _qr_fixed() test code */
for( i = 0; i < iLen; i++ )
{
int j;
for( j = 0; j < iLen; j++ )
hb_bitbuffer_set( pBits, i * iLen + j, _qr_fixed( iVersion, i, j ) );
int j;
for( j = 0; j < iLen; j++ )
hb_bitbuffer_set( pBits, i * iLen + j, _qr_fixed( iVersion, i, j ) );
}
#endif
}
@@ -1265,14 +1266,14 @@ PHB_ZEBRA hb_zebra_create_qrcode( const char * szCode, HB_SIZE nLen, int iFlags
}
#ifdef DEBUG_CODE
HB_TRACE( HB_TR_ALWAYS, ("qr1 iLevel:%d", iLevel) );
HB_TRACE( HB_TR_ALWAYS, ( "qr1 iLevel:%d", iLevel ) );
#endif
pData = hb_bitbuffer_create();
iVersion = _qr_dataencode( szCode, nLen, pData, iLevel );
#ifdef DEBUG_CODE
HB_TRACE( HB_TR_ALWAYS, ("qr3 iVersion:%d", iVersion) );
HB_TRACE( HB_TR_ALWAYS, ( "qr3 iVersion:%d", iVersion ) );
#endif
if( iVersion == 0 )
@@ -1298,7 +1299,7 @@ PHB_ZEBRA hb_zebra_create_qrcode( const char * szCode, HB_SIZE nLen, int iFlags
iMask = _qr_mask( pZebra->pBits, iVersion );
_qr_draw_version_format(pZebra->pBits, iVersion, iLevel, iMask );
_qr_draw_version_format( pZebra->pBits, iVersion, iLevel, iMask );
return pZebra;
}
@@ -1306,6 +1307,7 @@ PHB_ZEBRA hb_zebra_create_qrcode( const char * szCode, HB_SIZE nLen, int iFlags
HB_FUNC( HB_ZEBRA_CREATE_QRCODE )
{
PHB_ITEM pItem = hb_param( 1, HB_IT_STRING );
if( pItem )
{
hb_zebra_ret( hb_zebra_create_qrcode( hb_itemGetCPtr( pItem ), hb_itemGetCLen( pItem ), hb_parni( 2 ) ) );