Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

689 lines
30 KiB

/******************************Module*Header*******************************\
* Module Name: recogp.h
*
* Contains all the API for the full functionality of the recognizer for
* training, testing, tuning.
*
* Created: 18-Feb-1996 16:34:00
* Copyright (c) 1996 Microsoft Corporation
\**************************************************************************/
#ifndef _INC_RECOGP
#define _INC_RECOGP
#include "recog.h" // Contains just recognizer stuff.
#ifndef _WIN32
#ifndef RC_INVOKED
#pragma pack(1)
#endif /* RC_INVOKED */
#endif //!_WIN32
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**************************************************************************\
* Old API declerations from recog.h
* This stuff should go away as soon as we can convert all to code
* to work directly with the new API.
\**************************************************************************/
/* Special Symbol Values potentially returned by HwxGetResults. */
#define SYV_NULL 0x00000000L // Filler when list is not full
/* Possible High Words of SYVs */
#define SYVHI_FIRST 0 // first valid value
#define SYVHI_SPECIAL 0
#define SYVHI_ANSI 1
#define SYVHI_GESTURE 2
#define SYVHI_KANJI 3 // This is the only one actually used
#define SYVHI_SHAPE 4
#define SYVHI_UNICODE 5
#define SYVHI_VKEY 6
#define SYVHI_LAST 6 // last valid value
/* Used in HwxInput in the STROKEINFO structure */
#define PDK_UP 0x0000 // PDK_NULL alias
#define PDK_DOWN 0x0001 // pentip switch ON due to contact
#define PDK_TRANSITION 0x0010 // set by GetPenHwData
#define PDK_TIPMASK 0x0001 // mask for testing PDK_DOWN
// General HRC API return values (HRCR_xx):
#define HRCR_COMPLETE 3 // finished recognition
#define HRCR_OK 1 // success
#define HRCR_ERROR (-1) // invalid param or unspecified error
#define HRCR_MEMERR (-2) // memory error
// SYV macros:
#define FIsSpecial(syv) (HIWORD((syv))==SYVHI_SPECIAL)
#define FIsAnsi(syv) (HIWORD((syv))==SYVHI_ANSI)
#define FIsGesture(syv) (HIWORD((syv))==SYVHI_GESTURE)
#define FIsKanji(syv) (HIWORD((syv))==SYVHI_KANJI)
#define FIsShape(syv) (HIWORD((syv))==SYVHI_SHAPE)
#define FIsUniCode(syv) (HIWORD((syv))==SYVHI_UNICODE)
#define FIsVKey(syv) (HIWORD((syv))==SYVHI_VKEY)
#define ChSyvToAnsi(syv) ((BYTE) (LOBYTE(LOWORD((syv)))))
#define WSyvToKanji(syv) ((WORD) (LOWORD((syv))))
#define SyvToUnicode(syv) ((WORD) (LOWORD((syv))))
#define SyvCharacterToSymbol(c) ((LONG)(unsigned char)(c) | 0x00010000)
#define SyvKanjiToSymbol(c) ((LONG)(UINT)(c) | 0x00030000)
typedef LONG SYV; // Symbol Value
typedef SYV FAR* PSYV; // ptr to SYV
DECLARE_HANDLE(HINKSET); // handle to an inkset
typedef HINKSET FAR* LPHINKSET;
typedef struct tagSTROKEINFO // 1.0 stroke header
{
UINT cPnt; // count of points in stroke
UINT cbPnts; // size of stroke in bytes
UINT wPdk; // state of stroke
DWORD dwTick; // time at beginning of stroke
} STROKEINFO, *PSTROKEINFO, FAR *LPSTROKEINFO;
typedef struct tagBOXRESULTS // 2.0
{
UINT indxBox; // zero-based index in guide structure where char was written
HINKSET hinksetBox; // unused
SYV rgSyv[1]; // variable-sized array of characters returned
} BOXRESULTS, *PBOXRESULTS, FAR *LPBOXRESULTS;
/* Passed in to HwxSetGuide. Specifies where the boxes are on the screen */
typedef struct tagGUIDE // 1.0 guide structure
{
int xOrigin; // left edge of first box (screen coord)
int yOrigin; // top edge of first box (screen coord)
int cxBox; // width of a single box
int cyBox; // height of a single box
int cxBase; // in-box x-margin to guideline
int cyBase; // in-box y offset from top to baseline
int cHorzBox; // count of boxed columns
int cVertBox; // count of boxed rows
int cyMid; // 0 or distance from baseline to midline
} GUIDE, *PGUIDE, FAR *LPGUIDE;
//////////////////
// Mappings to deal with names that changed during cleanup.
//////////////////
#define ALC_COMMON_KANJI ALC_KANJI_COMMON
#define ALC_RARE_KANJI ALC_KANJI_RARE
#define ALC_COMMON_HANGUL ALC_HANGUL_COMMON
#define ALC_RARE_HANGUL ALC_HANGUL_RARE
/**************************************************************************\
* END Old API declerations from recog.h
\**************************************************************************/
// Gesture sets for EnableGestureSetHRC (bit flags):
#define GST_SEL 0x00000001L // sel & lasso
#define GST_CLIP 0x00000002L // cut copy paste
#define GST_WHITE 0x00000004L // sp tab ret
#define GST_KKCONVERT 0x00000008L // kkconvert
#define GST_EDIT 0x00000010L // insert correct undo clear
#define GST_SYS 0x00000017L // all of the above
#define GST_CIRCLELO 0x00000100L // lowercase circle
#define GST_CIRCLEUP 0x00000200L // uppercase circle
#define GST_CIRCLE 0x00000300L // all circle
#define GST_ALL 0x00000317L // all of the above
// SetWordlistCoercionHRC options:
#define SCH_FIRST 0 // first valid value /* ;Internal */
#define SCH_NONE 0 // turn off coercion
#define SCH_ADVISE 1 // macro is hint only
#define SCH_FORCE 2 // some result is forced from macro
#define SCH_LAST 2 // last value /* ;Internal */
// SetInternationalHRC options:
#define SSH_FIRST 1 // first valid value /* ;Internal */
#define SSH_RD 1 // to right and down (English)
#define SSH_RU 2 // to right and up
#define SSH_LD 3 // to left and down (Hebrew)
#define SSH_LU 4 // to left and up
#define SSH_DL 5 // down and to the left (Chinese)
#define SSH_DR 6 // down and to the right (Chinese)
#define SSH_UL 7 // up and to the left
#define SSH_UR 8 // up and to the right
#define SSH_LAST 8 // last valid value /* ;Internal */
#define SIH_ALLANSICHAR 1 // use all ANSI
// ConfigRecognizer and ConfigHREC options:
#define WCR_RECOGNAME 0 // ConfigRecognizer 1.0
#define WCR_QUERY 1
#define WCR_CONFIGDIALOG 2
#define WCR_DEFAULT 3
#define WCR_RCCHANGE 4
#define WCR_VERSION 5
#define WCR_TRAIN 6
#define WCR_TRAINSAVE 7
#define WCR_TRAINMAX 8
#define WCR_TRAINDIRTY 9
#define WCR_TRAINCUSTOM 10
#define WCR_QUERYLANGUAGE 11
#define WCR_USERCHANGE 12
// Misc RC Definitions:
#define CL_NULL 0
#define CL_MINIMUM 1 // minimum confidence level
#define CL_MAXIMUM 100 // max (require perfect recog)
#define cwRcReservedMax 8 // rc.rgwReserved[cwRcReservedMax]
#define ENUM_MINIMUM 1
#define ENUM_MAXIMUM 4096
#define HKP_SETHOOK 0 // SetRecogHook()
#define HKP_UNHOOK 0xFFFF
#define HWR_FIRST 0 // first valid value /* ;Internal */
#define HWR_RESULTS 0
#define HWR_APPWIDE 1
#define HWR_LAST 1 // last valid value /* ;Internal */
#define iSycNull (-1)
#define MAXDICTIONARIES 16 // rc.rglpdf[MAXDICTIONARIES]
#define wPntAll (UINT)0xFFFF
#define cbRcLanguageMax 44 // rc.lpLanguage[cbRcLanguageMax]
#define cbRcUserMax 32 // rc.lpUser[cbRcUserMax]
#define cbRcrgbfAlcMax 32 // rc.rgbfAlc[cbRcrgbfAlcMax]
#define RC_WDEFAULT 0xffff
#define RC_LDEFAULT 0xffffffffL
#define RC_WDEFAULTFLAGS 0x8000
#define RC_LDEFAULTFLAGS 0x80000000L
// ALC macros:
#define MpAlcB(lprc,i) ((lprc)->rgbfAlc[((i) & 0xff) >> 3])
#define MpIbf(i) ((BYTE)(1 << ((i) & 7)))
#define SetAlcBitAnsi(lprc,i) do {MpAlcB(lprc,i) |= MpIbf(i);} while (0)
#define ResetAlcBitAnsi(lprc,i) do {MpAlcB(lprc,i) &= ~MpIbf(i);} while (0)
#define IsAlcBitAnsi(lprc, i) ((MpAlcB(lprc,i) & MpIbf(i)) != 0)
// Intervals:
typedef struct tagABSTIME // 2.0 absolute date/time
{
DWORD sec; // number of seconds since 1/1/1970, ret by CRTlib time() fn
UINT ms; // additional offset in ms, 0..999
} ABSTIME, *PABSTIME, FAR *LPABSTIME;
// difference of two absolute times (at2 > at1 for positive result):
#define dwDiffAT(at1, at2)\
(1000L*((at2).sec - (at1).sec) - (DWORD)(at1).ms + (DWORD)(at2).ms)
// comparison of two absolute times (TRUE if at1 < at2):
#define FLTAbsTime(at1, at2)\
((at1).sec < (at2).sec || ((at1).sec == (at2).sec && (at1).ms < (at2).ms))
#define FLTEAbsTime(at1, at2)\
((at1).sec < (at2).sec || ((at1).sec == (at2).sec && (at1).ms <= (at2).ms))
#define FEQAbsTime(at1, at2)\
((at1).sec == (at2).sec && (at1).ms == (at2).ms)
// test if abstime is within an interval:
#define FAbsTimeInInterval(at, lpi)\
(FLTEAbsTime((lpi)->atBegin, at) && FLTEAbsTime(at, (lpi)->atEnd))
// test if interval (lpiT) is within an another interval (lpiS):
#define FIntervalInInterval(lpiT, lpiS)\
(FLTEAbsTime((lpiS)->atBegin, (lpiT)->atBegin)\
&& FLTEAbsTime((lpiT)->atEnd, (lpiS)->atEnd))
// test if interval (lpiT) intersects another interval (lpiS):
#define FIntervalXInterval(lpiT, lpiS)\
(!(FLTAbsTime((lpiT)->atEnd, (lpiS)->atBegin)\
|| FLTAbsTime((lpiS)->atEnd, (lpiT)->atBegin)))
// duration of an LPINTERVAL in ms:
#define dwDurInterval(lpi) dwDiffAT((lpi)->atBegin, (lpi)->atEnd)
// fill a pointer to an ABSTIME structure from a count of seconds and ms:
#define MakeAbsTime(lpat, isec, ims) do {\
(lpat)->sec = isec + ((ims) / 1000);\
(lpat)->ms = (ims) % 1000;\
} while (0)
// This should not be used any more.
/*
#define SYV_UNKNOWN 0x00000001L
#define SYV_EMPTY 0x00000003L // no longer used
#define SYV_BEGINOR 0x00000010L // no longer used
#define SYV_ENDOR 0x00000011L // no longer used
#define SYV_OR 0x00000012L // no longer used
#define SYV_SOFTNEWLINE 0x00000020L // no longer used
#define SYV_SPACENULL 0x00010000L // no longer used
*/
// SYV values for gestures:
/* Not used any more
#define SYV_SELECTFIRST 0x0002FFC0L // . means circle in following
#define SYV_LASSO 0x0002FFC1L // lasso o-tap
#define SYV_SELECTLEFT 0x0002FFC2L // no glyph
#define SYV_SELECTRIGHT 0x0002FFC3L // no glyph
#define SYV_SELECTLAST 0x0002FFCFL // 16 SYVs reserved for selection
#define SYV_CLEARCHAR 0x0002FFD2L // d.
#define SYV_HELP 0x0002FFD3L // no glyph
#define SYV_KKCONVERT 0x0002FFD4L // k.
#define SYV_CLEAR 0x0002FFD5L // d.
#define SYV_INSERT 0x0002FFD6L // ^.
#define SYV_CONTEXT 0x0002FFD7L // m.
#define SYV_EXTENDSELECT 0x0002FFD8L // no glyph
#define SYV_UNDO 0x0002FFD9L // u.
#define SYV_COPY 0x0002FFDAL // c.
#define SYV_CUT 0x0002FFDBL // x.
#define SYV_PASTE 0x0002FFDCL // p.
#define SYV_CLEARWORD 0x0002FFDDL // no glyph
#define SYV_USER 0x0002FFDEL // reserved
#define SYV_CORRECT 0x0002FFDFL // check.
#define SYV_BACKSPACE 0x00020008L // no glyph
#define SYV_TAB 0x00020009L // t.
#define SYV_RETURN 0x0002000DL // n.
#define SYV_SPACE 0x00020020L // s.
*/
// Application specific gestures, Circle a-z and Circle A-Z:
/* Not used any more
#define SYV_APPGESTUREMASK 0x00020000L
#define SYV_CIRCLEUPA 0x000224B6L // map into Unicode space
#define SYV_CIRCLEUPZ 0x000224CFL // for circled letters
#define SYV_CIRCLELOA 0x000224D0L
#define SYV_CIRCLELOZ 0x000224E9L
*/
// SYV definitions for shapes:
/* Not used any more
#define SYV_SHAPELINE 0x00040001L
#define SYV_SHAPEELLIPSE 0x00040002L
#define SYV_SHAPERECT 0x00040003L
#define SYV_SHAPEMIN SYV_SHAPELINE // alias
#define SYV_SHAPEMAX SYV_SHAPERECT // alias
*/
/* Not used any more
#define FIsSelectGesture(syv) \
((syv) >= SYVSELECTFIRST && (syv) <= SYVSELECTLAST)
#define FIsStdGesture(syv) \
( \
FIsSelectGesture(syv) \
|| (syv)==SYV_CLEAR \
|| (syv)==SYV_HELP \
|| (syv)==SYV_EXTENDSELECT \
|| (syv)==SYV_UNDO \
|| (syv)==SYV_COPY \
|| (syv)==SYV_CUT \
|| (syv)==SYV_PASTE \
|| (syv)==SYV_CLEARWORD \
|| (syv)==SYV_KKCONVERT \
|| (syv)==SYV_USER \
|| (syv)==SYV_CORRECT \
)
#define FIsAnsiGesture(syv) \
( \
(syv) == SYV_BACKSPACE \
|| (syv) == SYV_TAB \
|| (syv) == SYV_RETURN \
|| (syv) == SYV_SPACE \
)
*/
// GetPenDataAttributes options (GPA_xx):
#define GPA_FIRST 1 // first valid value /* ;Internal */
#define GPA_MAXLEN 1 // length of longest stroke
#define GPA_POINTS 2 // total number of points
#define GPA_PDTS 3 // PDTS_xx bits
#define GPA_RATE 4 // get sampling rate
#define GPA_RECTBOUND 5 // bounding rect of all points
#define GPA_RECTBOUNDINK 6 // ditto, adj for fat ink
#define GPA_SIZE 7 // size of pendata in bytes
#define GPA_STROKES 8 // total number of strokes
#define GPA_TIME 9 // absolute time at creation of pendata
#define GPA_USER 10 // number of user bytes available: 0, 1, 2, 4
#define GPA_VERSION 11 // version number of pendata
#define GPA_LAST 11 // last valid value /* ;Internal */
#define GPA_VERCHKINTERNAL 98 // to validate pendata /* ;Internal */
#define GPA_TICKREFINTERNAL 99 // to get tickref /* ;Internal */
// GetStrokeAttributes options (GSA_xx):
#define GSA_FIRST 1 // first valid value /* ;Internal */
#define GSA_PENTIP 1 // get stroke pentip (color, width, nib)
#define GSA_PENTIPCLASS 2 // same as GSA_PENTIP
#define GSA_USER 3 // get stroke user value
#define GSA_USERCLASS 4 // get stroke's class user value
#define GSA_TIME 5 // get time of stroke
#define GSA_SIZE 6 // get size of stroke in points and bytes
#define GSA_SELECT 7 // get selection status of stroke
#define GSA_DOWN 8 // get up/down state of stroke
#define GSA_RECTBOUND 9 // get the bounding rectangle of the stroke
#define GSA_LAST 9 // last valid value /* ;Internal */
// GetStrokeTableAttributes options (GSA_xx):
#define GSA_PENTIPTABLE 10 // get table-indexed pentip
#define GSA_SIZETABLE 11 // get count of Stroke Class Table entries
#define GSA_USERTABLE 12 // get table-indexed user value
// General PenData API return values (PDR_xx):
#define PDR_NOHIT 3 // hit test failed
#define PDR_HIT 2 // hit test succeeded
#define PDR_OK 1 // success
#define PDR_CANCEL 0 // callback cancel or impasse
#define PDR_ERROR (-1) // parameter or unspecified error
#define PDR_PNDTERR (-2) // bad pendata
#define PDR_VERSIONERR (-3) // pendata version error
#define PDR_COMPRESSED (-4) // pendata is compressed
#define PDR_STRKINDEXERR (-5) // stroke index error
#define PDR_PNTINDEXERR (-6) // point index error
#define PDR_MEMERR (-7) // memory error
#define PDR_INKSETERR (-8) // bad inkset
#define PDR_ABORT (-9) // pendata has become invalid, e.g.
#define PDR_NA (-10) // option not available (pw kernel)
#define PDR_USERDATAERR (-16) // user data error
#define PDR_SCALINGERR (-17) // scale error
#define PDR_TIMESTAMPERR (-18) // timestamp error
#define PDR_OEMDATAERR (-19) // OEM data error
#define PDR_SCTERR (-20) // SCT error (full)
// PenData Scaling (PDTS):
#define PDTS_FIRST 0 // first valid value /* ;Internal */
#define PDTS_LOMETRIC 0 // 0.01mm
#define PDTS_HIMETRIC 1 // 0.001mm
#define PDTS_HIENGLISH 2 // 0.001"
#define PDTS_STANDARDSCALE 2 // PDTS_HIENGLISH alias
#define PDTS_DISPLAY 3 // display pixel
#define PDTS_ARBITRARY 4 // app-specific scaling
#define PDTS_SCALEMASK 0x000F // scaling values in low nibble
#define PDTS_LAST 4 // last valid value /* ;Internal */
#define PDTS_SCALEMAX 3 // largest scaling type /* ;Internal */
#define MAXOEMDATAWORDS 6 // rgwOemData[MAXOEMDATAWORDS]
// Handwriting Recognizer:
// GetResultsHRC options:
#define GRH_FIRST 0 // first valid value /* ;Internal */
#define GRH_ALL 0 // get all results
#define GRH_GESTURE 1 // get only gesture results
#define GRH_NONGESTURE 2 // get all but gesture results
#define GRH_LAST 2 // last valid value /* ;Internal */
// system wordlist for AddWordsHWL:
#define HWL_SYSTEM ((HWL)1) // magic value means system wordlist
// TrainHREC options:
#define TH_FIRST 0 // first valid value /* ;Internal */
#define TH_QUERY 0 // query the user if conflict
#define TH_FORCE 1 // ditto no query
#define TH_SUGGEST 2 // abandon training if conflict
#define TH_LAST 2 // last valid value /* ;Internal */
// Return values for WCR_TRAIN Function
#define TRAIN_NONE 0x0000
#define TRAIN_DEFAULT 0x0001
#define TRAIN_CUSTOM 0x0002
#define TRAIN_BOTH (TRAIN_DEFAULT | TRAIN_CUSTOM)
// Control values for TRAINSAVE
#define TRAIN_FIRST 0 // first valid value /* ;Internal */
#define TRAIN_SAVE 0 // save changes that have been made
#define TRAIN_REVERT 1 // discard changes that have been made
#define TRAIN_RESET 2 // use factory settings
#define TRAIN_LAST 3 // last valid value /* ;Internal */
// ConfigHREC options:
#define WCR_PWVERSION 13 // ver of PenWin recognizer supports
#define WCR_GETALCPRIORITY 14 // get recognizer's ALC priority
#define WCR_SETALCPRIORITY 15 // set recognizer's ALC priority
#define WCR_GETANSISTATE 16 // get ALLANSICHAR state
#define WCR_SETANSISTATE 17 // set ALLANSICHAR if T
#define WCR_GETHAND 18 // get writing hand
#define WCR_SETHAND 19 // set writing hand
#define WCR_GETDIRECTION 20 // get writing direction
#define WCR_SETDIRECTION 21 // set writing direction
#define WCR_INITRECOGNIZER 22 // init recognizer and set user name
#define WCR_CLOSERECOGNIZER 23 // close recognizer
#define WCR_LAST 23 // last valid std value /* ;Internal */
#define WCR_PRIVATE 1024
// sub-functions of WCR_USERCHANGE
#define CRUC_FIRST 0 // first valid value /* ;Internal */
#define CRUC_NOTIFY 0 // user name change
#define CRUC_REMOVE 1 // user name deleted
#define CRUC_LAST 1 // last valid value /* ;Internal */
// Word List Types:
#define WLT_FIRST 0 // first valid value /* ;Internal */
#define WLT_STRING 0 // one string
#define WLT_STRINGTABLE 1 // array of strings
#define WLT_EMPTY 2 // empty wordlist
#define WLT_WORDLIST 3 // handle to a wordlist
#define WLT_LAST 3 // last valid value /* ;Internal */
// RC Direction:
#define RCD_FIRST 0 // first valid value /* ;Internal */
#define RCD_DEFAULT 0 // def none
#define RCD_LR 1 // left to right like English
#define RCD_RL 2 // right to left like Arabic
#define RCD_TB 3 // top to bottom like Japanese
#define RCD_BT 4 // bottom to top like some Chinese
#define RCD_LAST 4 // last valid value /* ;Internal */
// ProcessHRC time constants:
#define PH_DEFAULT 0xFFFFFFFEL // reasonable time
#define PH_MIN 0xFFFFFFFDL // minimum time
//////////////////////////////////////////////////////////////////////////////
/****** Typedefs ************************************************************/
typedef int CL; // Confidence Level
typedef UINT HKP; // Hook Parameter
typedef int REC; // recognition result
// ;Internal comment: DECLARE_HANDLE32 is not defined in 32-bit windows.h
#ifndef DECLARE_HANDLE32
#define DECLARE_HANDLE32(name)\
struct name##__ { int unused; };\
typedef const struct name##__ FAR* name
#endif //!DECLARE_HANDLE32
DECLARE_HANDLE(HPENDATA); // handle to ink
DECLARE_HANDLE(HREC); // handle to recognizer
typedef ALC FAR* LPALC; // ptr to ALC
typedef SYV FAR* LPSYV; // ptr to SYV
// Pointer Types:
typedef LPVOID LPOEM; // alias
typedef HPENDATA FAR* LPHPENDATA; // ptr to HPENDATA
// Structures:
#define cbABSTIME32 (4+4) /* ;Internal */
typedef struct tagPENDATAHEADER // 1.0 main pen data header
{
UINT wVersion; // pen data format version
UINT cbSizeUsed; // size of pendata mem block in bytes
UINT cStrokes; // number of strokes (incl up-strokes)
UINT cPnt; // count of all points
UINT cPntStrokeMax; // length (in points) of longest stroke
RECT rectBound; // bounding rect of all down points
UINT wPndts; // PDTS_xx bits
int nInkWidth; // ink width in pixels
DWORD rgbInk; // ink color
}
PENDATAHEADER, FAR *LPPENDATAHEADER, FAR *LPPENDATA;
#define cbPENDATAHEADER32 (4+4+4+4+4+16+4+4+4) /* ;Internal */
#define cbSTROKEINFO32 (4+4+4+4) /* ;Internal */
typedef struct tagOEMPENINFO // 1.0 OEM pen/tablet hdwe info
{
UINT wPdt; // pen data type
UINT wValueMax; // largest val ret by device
UINT wDistinct; // number of distinct readings possible
}
OEMPENINFO, FAR *LPOEMPENINFO;
#define cbOEMPENINFO32 (4+4+4) /* ;Internal */
typedef struct tagPENINFO // 1.0 pen/tablet hdwe info
{
UINT cxRawWidth; // max x coord and tablet width in 0.001"
UINT cyRawHeight; // ditto y, height
UINT wDistinctWidth; // number of distinct x values tablet ret
UINT wDistinctHeight; // ditto y
int nSamplingRate; // samples / second
int nSamplingDist; // min distance to move before generating event
LONG lPdc; // Pen Device Capabilities
int cPens; // number of pens supported
int cbOemData; // width of OEM data packet
OEMPENINFO rgoempeninfo[MAXOEMDATAWORDS]; // supported OEM data types
UINT rgwReserved[7]; // for internal use
UINT fuOEM; // which OEM data, timing, PDK_xx to report
}
PENINFO, FAR *LPPENINFO;
#define cbPENINFO32 (4+4+4+4+4+4+4+4+4+cbOEMPENINFO32*MAXOEMDATAWORDS+4*7+4) /* ;Internal */
// Handwriting Recognizer:
DECLARE_HANDLE32(HRCRESULT); // HRC result
DECLARE_HANDLE32(HWL); // Handwriting wordlist
typedef HRCRESULT FAR *LPHRCRESULT;
typedef HWL FAR *LPHWL;
typedef struct tagINTERVAL // 2.0 interval structure for inksets
{
ABSTIME atBegin; // begining of 1-ms granularity interval
ABSTIME atEnd; // 1 ms past end of interval
}
INTERVAL, FAR *LPINTERVAL;
#define cbINTERVAL32 (cbABSTIME32*2) /* ;Internal */
#define cbBOXRESULTS32 (4+4+4) /* ;Internal */
#define cbGUIDE32 (4+4+4+4+4+4+4+4+4) /* ;Internal */
#define HRCR_NORESULTS 4 // No possible results to be found
#define HRCR_GESTURE 2 // recognized gesture
#define HRCR_INCOMPLETE 0 // recognizer is processing input
#define HRCR_INVALIDGUIDE (-3) // invalid GUIDE struct
#define HRCR_INVALIDPNDT (-4) // invalid pendata
#define HRCR_UNSUPPORTED (-5) // recognizer does not support feature
#define HRCR_CONFLICT (-6) // training conflict
#define HRCR_HOOKED (-8) // hookasaurus ate the result
// PenData:
LPPENDATA WINAPI BeginEnumStrokes(HPENDATA);
LPPENDATA WINAPI EndEnumStrokes(HPENDATA);
HPENDATA WINAPI CreatePenData(LPPENINFO, int, UINT, UINT);
BOOL WINAPI GetPenDataStroke(LPPENDATA, UINT, LPPOINT FAR*,
LPVOID FAR*, LPSTROKEINFO);
HPENDATA WINAPI AddPointsPenData(HPENDATA, LPPOINT, LPVOID, LPSTROKEINFO);
BOOL WINAPI DestroyPenData(HPENDATA);
HPENDATA WINAPI DuplicatePenData(HPENDATA, UINT);
int WINAPI GetPenDataAttributes(HPENDATA, LPVOID, UINT);
BOOL WINAPI GetPenDataInfo(HPENDATA, LPPENDATAHEADER, LPPENINFO, DWORD);
int WINAPI GetStrokeAttributes(HPENDATA, UINT, LPVOID, UINT);
// Parameter to GetPrivateRecInfoHRC
#define PRI_WEIGHT (WPARAM) 0
#define PRI_GUIDE (WPARAM) 1
#define PRI_GLYPHSYM (WPARAM) 2
#define PRI_SIGMA (WPARAM) 3
// Private version of HwxConfig used to load recognizer databases from files instead
// of resources.
BOOL WINAPI HwxConfigEx(wchar_t *pLocale, wchar_t *pLocaleDir, wchar_t *pRecogDir);
// Private API for training/tuning
int WINAPI GetPrivateRecInfoHRC(HRC, WPARAM, LPARAM);
int WINAPI SetPrivateRecInfoHRC(HRC, WPARAM, LPARAM);
// Handwriting Recognizer:
int WINAPI AddPenDataHRC(HRC, HPENDATA);
int WINAPI AddPenInputHRC(HRC, LPPOINT, LPVOID, UINT, LPSTROKEINFO);
int WINAPI AddWordsHWL(HWL, LPSTR, UINT);
HRC WINAPI CreateCompatibleHRC(HRC, HREC);
HWL WINAPI CreateHWL(HREC, LPSTR, UINT, DWORD);
HINKSET WINAPI CreateInksetHRCRESULT(HRCRESULT, UINT, UINT);
HPENDATA WINAPI CreatePenDataHRC(HRC);
int WINAPI DestroyHRC(HRC);
int WINAPI DestroyHRCRESULT(HRCRESULT);
int WINAPI DestroyHWL(HWL);
int WINAPI EnableGestureSetHRC(HRC, SYV, BOOL);
int WINAPI EnableSystemDictionaryHRC(HRC, BOOL);
int WINAPI EndPenInputHRC(HRC);
int WINAPI GetAlphabetHRC(HRC, LPALC, LPBYTE);
int WINAPI GetAlphabetPriorityHRC(HRC, LPALC, LPBYTE);
int WINAPI GetAlternateWordsHRCRESULT(HRCRESULT, UINT, UINT,
LPHRCRESULT, UINT);
int WINAPI GetBoxMappingHRCRESULT(HRCRESULT, UINT, UINT, UINT FAR*);
int WINAPI GetBoxResultsHRC(HRC, UINT, UINT, UINT, LPBOXRESULTS, BOOL);
int WINAPI GetGuideHRC(HRC, LPGUIDE, UINT FAR*);
int WINAPI GetHotspotsHRCRESULT(HRCRESULT, UINT, LPPOINT, UINT);
HREC WINAPI GetHRECFromHRC(HRC);
int WINAPI GetInternationalHRC(HRC, UINT FAR*, LPSTR, UINT FAR*,
UINT FAR*);
int WINAPI GetMaxResultsHRC(HRC);
int WINAPI GetResultsHRC(HRC, UINT, LPHRCRESULT, UINT);
int WINAPI GetSymbolCountHRCRESULT(HRCRESULT);
int WINAPI GetSymbolsHRCRESULT(HRCRESULT, UINT, LPSYV, UINT);
int WINAPI GetWordlistHRC(HRC, LPHWL);
int WINAPI GetWordlistCoercionHRC(HRC);
int WINAPI ReadHWL(HWL, HFILE);
int WINAPI SetAlphabetHRC(HRC, ALC, LPBYTE);
int WINAPI SetAlphabetPriorityHRC(HRC, ALC, LPBYTE);
int WINAPI SetAbortHRC(HRC, DWORD *);
int WINAPI SetBoxAlphabetHRC(HRC, LPALC, UINT);
int WINAPI SetGuideHRC(HRC, LPGUIDE, UINT);
int WINAPI SetInternationalHRC(HRC, UINT, LPCSTR, UINT, UINT);
int WINAPI SetMaxResultsHRC(HRC, UINT);
int WINAPI SetPartialHRC(HRC, DWORD);
int WINAPI SetWordlistCoercionHRC(HRC, UINT);
int WINAPI SetWordlistHRC(HRC, HWL);
int WINAPI TrainHREC(HREC, LPSYV, UINT, HPENDATA, UINT);
int WINAPI WriteHWL(HWL, HFILE);
int WINAPI ProcessHRC(HRC, DWORD);
HREC WINAPI InstallRecognizer(LPSTR);
// Inksets:
BOOL WINAPI AddInksetInterval(HINKSET, LPINTERVAL);
HINKSET WINAPI CreateInkset(UINT);
BOOL WINAPI DestroyInkset(HINKSET);
int WINAPI GetInksetInterval(HINKSET, UINT, LPINTERVAL);
int WINAPI GetInksetIntervalCount(HINKSET);
// Symbol Values:
int WINAPI CharacterToSymbol(LPSTR, int, LPSYV);
BOOL WINAPI SymbolToCharacter(LPSYV, int, LPSTR, LPINT);
UINT WINAPI ConfigRecognizer(UINT, WPARAM, LPARAM);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#ifndef _WIN32
#ifndef RC_INVOKED
#pragma pack()
#endif /* RC_INVOKED */
#endif //!_WIN32
#endif /* #define _INC_RECOGP */