/***************************************************************************************
 *
 *  WRITEPAD(r): Handwriting Recognition Engine (HWRE) and components.
 *  Copyright (c) 2001-2016 PhatWare (r) Corp. All rights reserved.
 *
 *  Licensing and other inquires: <developer@phatware.com>
 *  Developer: Stan Miasnikov, et al. (c) PhatWare Corp. <http://www.phatware.com>
 *
 *  WRITEPAD HWRE is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 *  AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 *  INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 *  FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL PHATWARE CORP.
 *  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL,
 *  INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
 *  INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, SAVINGS
 *  OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR NOT PHATWARE CORP.
 *  HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 *  ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 *  POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 *  See the GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with WritePad.  If not, see <http://www.gnu.org/licenses/>.
 *
 **************************************************************************************/

#include  "hwr_sys.h"
#include  "const.h"
#include  "def.h"

/************************** Global variables **************************/

ROM_DATA _SHORT  sqrtab[LENTH_S] = {0,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,
                                    4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,
                                    6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
                                    8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
                                    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
                                    11,11,11,11,11,11,11
                                   } ;

ROM_DATA _ULONG bit[32] = { 0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,
                            0x400,0x800,0x1000,0x2000,0x4000,0x8000,0x10000L,
                            0x20000L,0x40000L,0x80000L,0x100000L,0x200000L,0x400000L,
                            0x800000L,0x1000000L,0x2000000L,0x4000000L,0x8000000L,
                            0x10000000L,0x20000000L,0x40000000L,0x80000000L
                          };
ROM_DATA _SHORT  quad[LENTH_Q]=
{
	0,    1,    4,    9,   16,   25,   36,   49,
	64,   81,  100,  121,  144,  169,  196,  225,
	256,  289,  324,  361,  400,  441,  484,  529,
	576,  625,  676,  729,  784,  841,  900,  961,
	1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521,
	1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209,
	2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025,
	3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969
} ;
ROM_DATA _SHORT  eps0[LENTH_E]=
{
	0,    0,    0,    0,    0,    0,    0,    0,
	0,    1,    3,    5,    8,   11,   15,   20,
	25,   30,   36,   42,   48,   55,   62,   69,
	77,   85,   92,  101,  109,  117,  126,  135,
	135,  135,  135,  135,  135,  135,  135,  135,
	135,  135,  135,  135,  135,  135,  135,  135,
	135,  135,  135,  135,  135,  135,  135,  135,
	135,  135,  135,  135,  135,  135,  135,  135
} ;
ROM_DATA _SHORT  eps1[LENTH_E]=
{
	0,    0,    0,    0,    0,    0,    9,   30,
	54,   78,  100,  118,  134,  146,  157,  165,
	172,  177,  181,  184,  187,  189,  190,  192,
	193,  193,  194,  194,  195,  195,  195,  195,
	195,  195,  195,  195,  195,  195,  195,  195,
	195,  195,  195,  195,  195,  195,  195,  195,
	195,  195,  195,  195,  195,  195,  195,  195,
	195,  195,  195,  195,  195,  195,  195,  195
} ;

ROM_DATA _SHORT  eps2[LENTH_E] =
{
	0,    1,    9,   26,   44,   59,   71,   80,
	87,   92,   95,   98,   98,   98,   98,   98,
	98,   98,   98,   98,   98,   98,   98,   98,
	98,   98,   98,   98,   98,   98,   98,   98,
	98,   98,   98,   98,   98,   98,   98,   98,
	98,   98,   98,   98,   98,   98,   98,   98,
	98,   98,   98,   98,   98,   98,   98,   98,
	98,   98,   98,   98,   98,   98,   98,   98
} ;
ROM_DATA _SHORT  eps3[LENTH_E]=
{
	9,   27,   46,   61,   74,   84,   91,   96,
	96,   96,   96,   96,   96,   96,   96,   96,
	96,   96,   96,   96,   96,   96,   96,   96,
	96,   96,   96,   96,   96,   96,   96,   96,
	96,   96,   96,   96,   96,   96,   96,   96,
	96,   96,   96,   96,   96,   96,   96,   96,
	96,   96,   96,   96,   96,   96,   96,   96,
	96,   96,   96,   96,   96,   96,   96,   96
} ;

#if  HWR_SYSTEM==HWR_DOS /* ||  HWR_SYSTEM==HWR_WINDOWS */
SPECL   speclGlobal[SPECVAL]= {0} ;        /* Event describing structures array */
#endif

ROM_DATA _SHORT  nbcut0 = 10  ;      /* Utmost radius of intersection   */
/* search                          */
ROM_DATA _SHORT  nbcut1 = 95 ;       /* A square of utmost radius of    */
/* intersection search             */
ROM_DATA _SHORT  nbcut2 = 2   ;

/*******************  Low level constants *****************************/

ROM_DATA CONSTS   const1 =
{
	(_SHORT)HORDA  ,         /* Normalization chord               */
	(_SHORT)DLT0   ,         /*                                   */
	(_SHORT)NSR    ,         /*                                   */
	(_SHORT)J_STEP ,         /* Initial steps of search  for      */
	(_SHORT)I_STEP ,         /* intersectons                      */
	(_SHORT)EPS_Y ,          /* Vicinity of pointing out extremums*/
	(_SHORT)EPS_X,           /* and preliminary search for        */
	/* shelves                           */
	(_SHORT)EPS_PY ,         /* Maximum horizontal and vertical   */
	(_SHORT)EPS_PX ,         /* size of "points" .                */
	(_SHORT)EPS_ST ,         /* Maximum length of a stroke.       */
	/* (_SHORT)EPSA_ST , */        /* Maximum slope of a stroke.        */
	/* (_SHORT)EPSR_ST , */        /* Stroke maximum integral curvature */
	/* (_SHORT)EPSX_SH , */        /* Minimum horizontal shelves        */
	/*                   */        /* size .                            */
	/* (_SHORT)EPSY_SH , */        /* Half maximum vertical shelf       */
	/*                   */        /* size                              */
	/* (_SHORT)EPSL_SH , */        /* Maximum height of shelves gluing  */
	/* (_SHORT)EPS_SM ,  */        /* Vicinity  of ending extremums     */
	/* marks                             */
	(_SHORT)A0 ,             /*                                   */
	(_SHORT)B0 ,             /*                                   */
	(_SHORT)LF0 ,            /*                                   */
	(_SHORT)LZ0 ,            /*                                   */
	(_SHORT)A1 ,             /*                                   */
	(_SHORT)B1 ,             /*                                   */
	(_SHORT)LF1 ,            /*                                   */
	(_SHORT)LZ1 ,            /*                                   */
	(_SHORT)A2 ,             /*                                   */
	(_SHORT)B2 ,             /*                                   */
	(_SHORT)LF2 ,            /*                                   */
	(_SHORT)LZ2 ,            /*                                   */
	(_SHORT)A3 ,             /*                                   */
	(_SHORT)B3 ,             /*                                   */
	(_SHORT)LF3 ,            /*                                   */
	(_SHORT)LZ3              /*                                   */
	/* (_SHORT)EPS_F  */
} ;

#if PG_DEBUG || (defined(FORMULA) && !DEMO)
/******************  Interface variables    ******************************/

_SHORT PG_line_s = 1;              /* line mumber in DEBUG window */
_SHORT mpr;                        /* print mask                  */

_CHAR *code_name[] =               /* codes                            */
{
	"_NO_CODE",                     /*       are described              */
	"_ZZ_", "_UU_", "_IU_", "_GU_", /*                      here        */
	" _O_", "_GD_", "_ID_", "_UD_", /*                                  */
	"_UUL_","_UUR_","_UDL_","_UDR_",/*                                  */
	"_XT_", "_ANl", "_DF_ ", "_ST_",/*                                  */
	"_ANr","_ZZZ_","_Z_","_FF_",    /*                                  */
	"_DUR_","_CUR_","_CUL_","_DUL_",/*                                  */
	"_DDR_","_CDR_","_CDL_","_DDL_",/*                                  */
	"_GUs_","_GDs_","_Gl_","_Gr_",  /*                                  */
	"_UUC_","_UDC_",                /*                                  */
	"_TS_", "_TZ_", "_BR_", "_BL",
	"_BSS", "_AN_UR", "_AN_UL",
	"NO NAME DEFINED",
	"NO NAME DEFINED",
	"NO NAME DEFINED",
	"NO NAME DEFINED",
	"NO NAME DEFINED",
	"NO NAME DEFINED",
	"NO NAME DEFINED",
	"NO NAME DEFINED",
	"NO NAME DEFINED"
};                               /*                                  */
_CHAR *dist_name[] =               /* heights and directions           */
{
	"   ", "US1_", "US2_", "UE1_", "UE2_", "UI1_", "UI2_",
	"MD_", "DI1_", "DI2_", "DE1_", "DE2_", "DS1_", "DS2_",
	"   ", "   ",
	"f_  ","fUS1_","fUS2_","fUE1_","fUE2_","fUI1_","fUI2_",
	"fMD_","fDI1_","fDI2_","fDE1_","fDE2_","fDS1_","fDS2_",
	"   ", "   ",
	"b_  ","bUS1_","bUS2_","bUE1_","bUE2_","bU1_","bU2_",
	"bMD_","bDI1_","bDI2_","bDE1_","bDE2_","bDS1_","bDS2_"
};                               /*                                  */
#if 0
p_CHAR links_name[] =           /* array of link's names            */
{
	"ARC_UNKNOWN", "ARC_LEFT", "ARC_RIGHT", "ARC_UP", "ARC_DOWN",
	"ARC_UP_LEFT", "ARC_DOWN_LEFT", "ARC_UP_RIGHT", "ARC_DOWN_RIGHT",
	"ARC_LINE_VERT", "ARC_LINE_HOR", "ARC_LINE_SLASH", "ARC_LINE_BACKSLASH",
	"ARC_S_LIKE", "ARC_Z_LIKE", "ARC_SHORT"
};
#else
p_CHAR links_name[] =           /* array of link's names            */
{
	"LINK_UNKNOWN",
	"LINK_HCR_CCW", "LINK_LCR_CCW", "LINK_MCR_CCW", "LINK_SCR_CCW", "LINK_TCR_CCW",
	"LINK_LINE",
	"LINK_TCR_CW",  "LINK_SCR_CW",  "LINK_MCR_CW",  "LINK_LCR_CW",  "LINK_HCR_CW",
	"LINK_HS_LIKE", "LINK_S_LIKE",  "LINK_Z_LIKE",  "LINK_HZ_LIKE"
};
#endif
#endif /* PG_DEBUG... */

/***************************************************************************/
