/* *********************************************************************** */ /* * Recognition project header * */ /* *********************************************************************** */ #ifndef AMS_MG_INCLUDED #define AMS_MG_INCLUDED #include "bastypes.h" #include "cgr_ver.h" #ifdef DLLEXP #define __cdecl #endif #if (defined(__PSION32__) || defined(__WINS__) || defined(__MARM__)) #include #ifdef __cdecl #undef __cdecl #endif #define __cdecl GLDEF_C #endif /* __PSION32__ */ /******* Definitions *********************************************/ #define ON 1 #define OFF 0 #ifdef PEGASUS #define ERR_MSG_EMPMACRO #define err_msg(s) {} #endif #ifdef PG_DEBUG_ON #define PG_DEBUG ON // Moved to Compiler's params #else #define PG_DEBUG OFF #endif #ifndef PG_DEBUG_MAC #define PG_DEBUG_MAC OFF #endif #define USE_ORTOGRAPH OFF #define USE_CHUNK_PROCESSOR OFF #define USE_POSTPROC OFF #if !defined(FOR_GERMAN) && !defined(FOR_FRENCH) && !defined(FOR_INTERNATIONAL) && !defined(FOR_ENGLISH) #error Languge selection error! #endif #if HWR_SYSTEM == MACINTOSH #ifndef EXTERN_VOCABULARY #define EXTERN_VOCABULARY ON #endif #else #define EXTERN_VOCABULARY OFF #endif #if EXTERN_VOCABULARY #define PS_VOC OFF #define AIRUS_VOC OFF #else #define PS_VOC ON #define AIRUS_VOC OFF #endif #define SUCCESS 0 #define UNSUCCESS 1 /******* Definitions *********************************************/ #define NUM_RW 32 /* Size of recognized str*/ #define XRINP_SIZE 160 /* Len of corr matrix */ #define w_lim 32 /* Len of char strings */ #define MAX_DICT 15 #define CS_ALPHA 0x0001 /* Letter enabled */ #define CS_NUMBER 0x0002 /* Number enabled */ #define CS_MATH 0x0004 /* Mathematic sym's en */ #define CS_LPUNCT 0x0008 /* Leading punctuation */ #define CS_EPUNCT 0x0010 /* Ending punctuation */ #define CS_OTHER 0x0020 /* Any other symbols */ #define WW_RESTRICTED 0x0001 /* Writing way -- Restricted set */ #define WW_GENERAL 0x0002 /* Writing way -- Mixed */ #define WW_BLOCK 0x0004 /* Writing way -- HandPrint */ #define WW_PALMER 0x0008 /* Writing way -- Palmer */ #define EL_ENGLISH 0x0001 /* Enabled language -- English */ #define EL_GERMAN 0x0002 /* Enabled language -- German */ #define EL_FRENCH 0x0004 /* Enabled language -- French */ #define EL_SWEDISH 0x0008 /* Enabled language -- Swedish */ #if !PG_DEBUG #define HWR_USE_VAR(a) a #else #define HWR_USE_VAR(a) #endif /* ---- XRW_ALGS definitions -------------------------------------------- */ #define XRWALG_XRWS 1 /* Main upper level recognition algorithm */ #define XRWALG_XR_SPL 2 /* Separated letter recognition algorithm */ #define XRWALG_XRSL 3 /* Single letter recognition algorithm */ #define XRWALG_XRLWS 4 /* Combined recognition algorithm */ #define XRWALG_XRLW 5 /* Word recognition algorithm */ #define XRWALG_EXP 16 /* Experimental routines */ #define XRWALG_CMP 17 /* Get aliases for given CMP word in RC */ #define XRWM_VOC 0x0001 /* Xrws takes symbols from VOC */ #define XRWM_CS 0x0002 /* Xrws takes symbols from CharSet*/ #define XRWM_TRIAD 0x0004 /* Symbols from charset verified by triads */ #define XRWM_LD 0x0008 /* Symbols are generated by LexDB */ #define XRWM_BLOCK 0x0010 /* Fast 'BLOCK' matrix counting */ #define XRWM_MWORD 0x0020 /* Multiword dict recognition */ #define XRWM_NONUMFILTER 0x0040 /* Disable CheckPure num filter */ #define XRWM_NOSSPENL 0x0080 /* Disable Sources penalties */ #define XRCM_CACHE 0x0001 /* Use cache in counting of matrix */ #define XRCM_SEPLET 0x0002 /* Recognition of separated-letter word */ #if defined( FOR_GERMAN) #define XCM_DEFAULT 0x0027 /* Default capitalization flags */ #else #define XCM_DEFAULT 0x0037 /* Default capitalization flags */ #endif #define XCM_FL_DEFSIZE 0x0001 /* First letter in accordance with voc/charset */ #define XCM_FL_TRYCAPS 0x0002 /* Use capitals vars for first letter from voc/cs*/ #define XCM_AL_DEFSIZE 0x0005 /* All letters in accordance with voc/cs */ #define XCM_AL_TRYCAPS 0x000A /* Use capitals vars for all letters from voc/cs */ #define XCM_AL_TRYS4C 0x0015 /* Try also small vars for capitals form voc/cs */ #define XCM_AL_RETC4AV 0x0020 /* Return capitalization for all answer variants */ /* ----------- Load utilities command definitions ----------------------- */ #define TR_REQUEST 1 /* Request to load beg triads */ #define DTI_DTE_REQUEST 0x0001 /* Operation on DTI requested */ #define DTI_XRT_REQUEST 0x0002 /* Operation on XRT requested */ #define DTI_PDF_REQUEST 0x0004 /* Operation on PDF requested */ #define DTI_PICT_REQUEST 0x0008 /* Operation on PICT requested*/ /* ----------- Low level modes & values --------------------------------- */ /* Possible values of the "rec_mode" field of "rc_type" structure. */ /* May be combined (using OR): */ #define RECM_TEXT 1 #define RECM_FORMULA 2 #define RECM_ALL (RECM_TEXT|RECM_FORMULA) /* Constants - values of the "low_mode" field in "rc_type" structure: Only one flag from each group (excluding LMOD_CHECK_PUNCTN) may be set! Flags concerning BORDER have effect only when LMOD_FREE_TEXT is set. When LMOD_BOX_EDIT is set, the border fields in "rc" must contain predefined value for the line borders. Flag LMOD_CHECK_PUNCTN has no effect in LMOD_BOX_EDIT mode. */ #define LMOD_BOX_EDIT (_USHORT)0x0001 #define LMOD_FREE_TEXT (_USHORT)0x0002 #define LMOD_BORDER_TEXT (_USHORT)0x0010 #define LMOD_BORDER_NUMBER (_USHORT)0x0020 #define LMOD_BORDER_GENERAL (LMOD_BORDER_TEXT|LMOD_BORDER_NUMBER) #define LMOD_NO_BORDER_DECISION (_USHORT)0 #define LMOD_BORDER_ONLY (_USHORT)0x0040 #define LMOD_SEPARATE_LET (_USHORT)0x0400 #define LMOD_SMALL_CAPS (_USHORT)0x0800 #define LMOD_CHECK_PUNCTN (_USHORT)0x8000 #define CB_NUM_VERTEX 10 /* -------------- XRinp section ----------------------------------------- */ #define XRB_ST_ELEM 0x01 /* Tail flag of starting element */ #define XRB_EN_ELEM 0x02 /* Tail flag of ending element */ /* ------- Learning info flags definitions for LearningHandleConfig field - */ #define kLDRC 0x0001 /* write RC to learning info */ #define kLDTrace 0x0002 /* write Trace to learning info */ #define kLDXRdata 0x0004 /* write XRdata to learning info */ #define kLDRWS 0x0008 /* write RWS to learning info */ #define kLDRWGPPD 0x0010 /* write RWG PDD to learning info */ #define kLDRecWrd 0x0020 /* write rec words to learning info */ #define kLDORT 0x0040 /* write poliakov's data to learning info */ /* ---------------------------------------------------------------------- */ /* ------- Learning info flags definitions for fOrto field ------------ */ #define kORTO_UPPER 0x0001 /* use ortograph in upper level */ #define kORTO_POSTP 0x0002 /* use ortograph as a postrocessing */ #define kORTO_EMPTY 0x0004 /* use an empty data base */ #define kORTO_LEARN 0x0008 /* perform learning */ /* -------------------------------------------------------------------- */ /* ----------------- Upper level defines -------------------------------- */ #define XRWG_FCASECHANGE 0x80 /* Flag of case-of-letter change in alias */ #define XRLV_DATA_SAVE 0x01 /* Save not-finished state for the word */ #define XRLV_DATA_USE 0x02 /* Use not-finished state for the word */ /* ----------- System yield function ------------------------------------- */ typedef _INT (__cdecl *RecYield_type)(p_VOID); /********** Structure definitions *******************************/ /* ----------------- Lower level structures ----------------------------- */ typedef struct { _SHORT x; _SHORT y; }PS_point_type, _PTR p_PS_point_type; typedef p_PS_point_type _TRACE ; typedef struct { _SHORT left; _SHORT top; _SHORT right; _SHORT bottom; } _RECT, _PTR p_RECT; typedef struct { // p_VOID trace_in; // Reserved for future use // p_VOID trace_out; // _SHORT num_points_in; // _SHORT num_points_out; _RECT box; _SHORT extr_depth; _SHORT size_in; _SHORT dn_pos_in; _SHORT size_sure_in; _SHORT pos_sure_in; _SHORT size_out; _SHORT dn_pos_out; _SHORT size_sure_out; _SHORT pos_sure_out; }stroka_data, _PTR p_stroka_data; /* --------------------------------------------------------------------- */ /* Structure containing control variables for postprocessing */ /* applicability: */ typedef struct { _SHORT nMinWeight; /* Min. weight of 1st variant */ /* for postproc. to be applied. */ _SHORT nMaxDist; /* Max. weight distance between */ /* two first variants for post- */ /* proc. to be applied. */ } POST_CONTROLS, _PTR p_POST_CONTROLS; /* ----------------- Global Rec Context --------------------------------- */ typedef struct { _SHORT algorithm; /* Upper level recognition algorithm */ _SHORT enabled_cs; /* Inluded parts of symbol set (anmleo) */ _SHORT enabled_ww; /* Enabled ways of writing (Handprint/Palmer/Mixed) (bpg) */ _SHORT enabled_languages; /* Allowed languages to use from DTI prototypes (egf)*/ _SHORT xrw_mode; /* Xrws mode v/c/t/b .... */ _SHORT corr_mode; /* Corr matr modes - s/c ... */ _SHORT xrw_min_wlen; /* Min Num let in word to read */ _SHORT xrw_max_wlen; /* Max Num let in word to read */ _SHORT xrw_tag_size; /* Number of TAG buffers */ _SHORT xrw_chr_size; /* Number of character buffers */ _SHORT bad_distance; /* CutOff distance of XRW modules */ _SHORT answer_level; _SHORT sure_level; _SHORT answer_allow; _SHORT bad_amnesty; _SHORT caps_mode; _SHORT use_len_limits; _SHORT fly_learn; _SHORT use_vars_inf; _SHORT lrn_class_level; _SHORT lrn_min_class; _SHORT lrn_learn_suff; _SHORT lrn_vocvar_rew; p_VOID dtiptr; /* Handle to Xr database */ p_VOID vocptr[MAX_DICT]; /* Handle to vocabularies */ p_VOID tr_ptr; /* Handle to character filters */ p_UCHAR alpha_charset; p_UCHAR num_charset; p_UCHAR math_charset; p_UCHAR lpunct_charset; p_UCHAR epunct_charset; p_UCHAR other_charset; _USHORT low_mode; /* See possible values above (LMOD_...).*/ _USHORT rec_mode; /* See possible values above (RECM_...).*/ _USHORT lmod_border_used; /* See possible values above (LMOD_BORDER...).*/ _SHORT ii; /* Number of points in trajectory */ _SHORT n_str; /* Number of strokes in trajectory */ _TRACE trace; /* Trajectory */ _RECT trace_rect; /* Box of the trajectory */ _SHORT slope; /* Slope of the trajectory */ _UCHAR curv_bord[CB_NUM_VERTEX*2]; /* Curved border of the trace */ _UCHAR fl_fil; _UCHAR fl_post; _UCHAR ws_handle; _USHORT LearningHandleConfig; _USHORT FakeRecognition; /* recognize just first point of a tajectory */ _UCHAR fl_chunk; // CHUNK_PROCESSOR _UCHAR fl_chunk_let; // CHUNK_PROCESSOR _SHORT fOrto; // ORTOGRAPH p_VOID pDB; _CHAR cmp_word[w_lim]; stroka_data stroka; /* new data structure for baseline */ _SHORT BoxEditSamllHeight; _SHORT BoxEditBase; _SHORT fReject; // REJECT POST_CONTROLS postCtrl; RecYield_type pFuncYield; // Callback Yield fuction p_VOID FY_param; // Parameter for FuncYield p_VOID p_ws_wi; // Pointer to struct with ws info for cur word _INT f_xd_data; // Flags controlling saving of xd data p_VOID p_xd_data; // Pointer to XRLV data structure saved for continuing recognition p_VOID pXrc; // The Bear XRc for this context p_VOID hSeg; // handle to multiseg data void *pvFactoid; unsigned char *szPrefix; unsigned char *szSuffix; } rc_type, _PTR p_rc_type; /* -------------- XRinp section ----------------------------------------- */ typedef struct { _UCHAR type; //64 direction:1b:type:2b:width:3b: _UCHAR attrib; // bit field _UCHAR penalty; //16 max value _UCHAR height; //16 _UCHAR shift; //16 _UCHAR orient; //32 _UCHAR depth; //16 _UCHAR iSpc; // Spc net out }xrinp_type, _PTR p_xrinp_type; typedef struct { xrinp_type xr; _SHORT hotpoint; _SHORT begpoint; _SHORT endpoint; _SHORT box_left; _SHORT box_up; _SHORT box_right; _SHORT box_down; _UCHAR location; }xrd_el_type, _PTR p_xrd_el_type; typedef xrd_el_type xrd_type[XRINP_SIZE]; typedef xrd_type _PTR p_xrd_type; typedef struct { _INT len; // Real filled length _INT size; // Allocated size (in els) p_xrd_type xrd; // Pointer to array of xrd_el's }xrdata_type, _PTR p_xrdata_type; /* ----------- Rec Words Structure --------------------------------------- */ typedef struct { _UCHAR word[w_lim]; _UCHAR nvar[w_lim]; /* Number of variants + CapsChange falg */ _UCHAR linp[w_lim]; /* Lengths of letter-correspondent xr strings */ _SHORT weight; _SHORT src_id; _SHORT attr; }rec_w_type, _PTR p_rec_w_type; /* ----------- Symbol Graph definitions ---------------------------------- */ typedef struct { /* Type, defining base of graph */ _UCHAR type; /* Graph type (word/letter/number */ _INT size; /* Number of elements in RWS array */ p_VOID rws_mem; /* Pointer to RWS memory */ p_VOID ppd_mem; /* Pointer to PPD allocation */ _BOOL bReversePass; /* For ppd in upper level -- flag of reverse rwg */ } RWG_type, _PTR p_RWG_type; /* --------------------- Prototypes ---------------------------- */ _INT AllocXrdata(p_xrdata_type xrdata, _INT size); _INT FreeXrdata(p_xrdata_type xrdata); _INT PreprocessTrajectory(p_rc_type rc); #if !defined(ERR_MSG_EMPMACRO) && !defined(err_msg) _VOID err_msg(_STR); #endif #endif /* AMS_MG_INCLUDED */ /* ************************************************************************* */ /* * End of all * */ /* ************************************************************************* */ //