180ee5cbfSDavid du Colombier /* 280ee5cbfSDavid du Colombier * scribble.h: User-Level API for Handwriting Recognition 380ee5cbfSDavid du Colombier * Author: James Kempf 480ee5cbfSDavid du Colombier * Created On: Mon Nov 2 14:01:25 1992 580ee5cbfSDavid du Colombier * Last Modified By: Sape Mullender 680ee5cbfSDavid du Colombier * Last Modified On: Fri Aug 25 10:24:50 EDT 2000 780ee5cbfSDavid du Colombier * Copyright (c) 1994 by Sun Microsystems Computer Company 880ee5cbfSDavid du Colombier * All rights reserved. 980ee5cbfSDavid du Colombier * 1080ee5cbfSDavid du Colombier * Use and copying of this software and preparation of 1180ee5cbfSDavid du Colombier * derivative works based upon this software are permitted. 1280ee5cbfSDavid du Colombier * Any distribution of this software or derivative works 1380ee5cbfSDavid du Colombier * must comply with all applicable United States export control 1480ee5cbfSDavid du Colombier * laws. 1580ee5cbfSDavid du Colombier * 1680ee5cbfSDavid du Colombier * This software is made available as is, and Sun Microsystems 1780ee5cbfSDavid du Colombier * Computer Company makes no warranty about the software, its 1880ee5cbfSDavid du Colombier * performance, or its conformity to any specification 1980ee5cbfSDavid du Colombier */ 2080ee5cbfSDavid du Colombier 2180ee5cbfSDavid du Colombier /* 2280ee5cbfSDavid du Colombier * Opaque type for the recognizer. The toolkit must access through 2380ee5cbfSDavid du Colombier * appropriate access functions. 2480ee5cbfSDavid du Colombier */ 25*76783259SDavid du Colombier #pragma incomplete struct _Recognizer 2680ee5cbfSDavid du Colombier typedef struct _Recognizer* recognizer; 2780ee5cbfSDavid du Colombier 2880ee5cbfSDavid du Colombier /* 2980ee5cbfSDavid du Colombier * Opaque type for recognizers to implement dictionaries. 3080ee5cbfSDavid du Colombier */ 3180ee5cbfSDavid du Colombier 3280ee5cbfSDavid du Colombier typedef struct _wordset *wordset; 3380ee5cbfSDavid du Colombier typedef struct rc rc; 3480ee5cbfSDavid du Colombier typedef struct rec_correlation rec_correlation; 3580ee5cbfSDavid du Colombier typedef struct rec_alternative rec_alternative; 3680ee5cbfSDavid du Colombier typedef struct rec_element rec_element; 3780ee5cbfSDavid du Colombier typedef struct gesture gesture; 3880ee5cbfSDavid du Colombier typedef uint wchar_t; 3980ee5cbfSDavid du Colombier 4080ee5cbfSDavid du Colombier /* Scalar Type Definitions */ 4180ee5cbfSDavid du Colombier 4280ee5cbfSDavid du Colombier /* For better readibility.*/ 4380ee5cbfSDavid du Colombier 4480ee5cbfSDavid du Colombier typedef int bool; 4580ee5cbfSDavid du Colombier 4680ee5cbfSDavid du Colombier #define true 1 4780ee5cbfSDavid du Colombier #define false 0 4880ee5cbfSDavid du Colombier 4980ee5cbfSDavid du Colombier /*For pointers to extra functions on recognizer.*/ 5080ee5cbfSDavid du Colombier 5180ee5cbfSDavid du Colombier typedef void (*rec_fn)(); 5280ee5cbfSDavid du Colombier 5380ee5cbfSDavid du Colombier /* 5480ee5cbfSDavid du Colombier * rec_confidence is an integer between 0-100 giving the confidence of the 5580ee5cbfSDavid du Colombier * recognizer in a particular result. 5680ee5cbfSDavid du Colombier */ 5780ee5cbfSDavid du Colombier 5880ee5cbfSDavid du Colombier typedef uchar rec_confidence; 5980ee5cbfSDavid du Colombier 6080ee5cbfSDavid du Colombier /**************** RECOGNIZER CONFIGURATION INFORMATION *******************/ 6180ee5cbfSDavid du Colombier 6280ee5cbfSDavid du Colombier /* 6380ee5cbfSDavid du Colombier * Recognizer information. Gives the locale, category of the character 6480ee5cbfSDavid du Colombier * set returned by the recognizer, and any subsets to which the 6580ee5cbfSDavid du Colombier * recognition can be limited. The locale and category should be 6680ee5cbfSDavid du Colombier * suitable for the setlocale(3). Those recognizers which don't do text 6780ee5cbfSDavid du Colombier * can simply report a blank locale and category, and report the 6880ee5cbfSDavid du Colombier * graphics types they recognize in the subset. 6980ee5cbfSDavid du Colombier */ 7080ee5cbfSDavid du Colombier 7180ee5cbfSDavid du Colombier typedef struct { 7280ee5cbfSDavid du Colombier char* ri_locale; /*The locale of the character set.*/ 7380ee5cbfSDavid du Colombier char* ri_name; /*Complete pathname to the recognizer.*/ 7480ee5cbfSDavid du Colombier char** ri_subset; /*Null terminated list of subsets supported*/ 7580ee5cbfSDavid du Colombier } rec_info; 7680ee5cbfSDavid du Colombier 7780ee5cbfSDavid du Colombier /*These define a set of common character subset names.*/ 7880ee5cbfSDavid du Colombier 7980ee5cbfSDavid du Colombier #define GESTURE "GESTURE" /* gestures only */ 8080ee5cbfSDavid du Colombier #define MATHSET "MATHSET" /* %^*()_+={}<>,/. */ 8180ee5cbfSDavid du Colombier #define MONEYSET "MONEYSET" /* $, maybe cent, pound, and yen */ 8280ee5cbfSDavid du Colombier #define WHITESPACE "WHITESPACE" /* gaps are recognized as space */ 8380ee5cbfSDavid du Colombier #define KANJI_JIS1 "KANJI_JIS1" /* the JIS1 kanji only */ 8480ee5cbfSDavid du Colombier #define KANJI_JIS1_PLUS "KANJI_JIS1_PLUS" /* JIS1 plus some JIS2 */ 8580ee5cbfSDavid du Colombier #define KANJI_JIS2 "KANJI_JIS2" /* the JIS1 + JIS2 kanji */ 8680ee5cbfSDavid du Colombier #define HIRIGANA "HIRIGANA" /* the hirigana */ 8780ee5cbfSDavid du Colombier #define KATAKANA "KATAKANA" /* the katakana */ 8880ee5cbfSDavid du Colombier #define UPPERCASE "UPPERCASE" /* upper case alphabetics, no digits */ 8980ee5cbfSDavid du Colombier #define LOWERCASE "LOWERCASE" /* lower case alphabetics, no digits */ 9080ee5cbfSDavid du Colombier #define DIGITS "DIGITS" /* digits 0-9 only */ 9180ee5cbfSDavid du Colombier #define PUNCTUATION "PUNCTUATION" /* \!-;'"?()&., */ 9280ee5cbfSDavid du Colombier #define NONALPHABETIC "NONALPHABETIC" /* all nonalphabetics, no digits */ 9380ee5cbfSDavid du Colombier #define ASCII "ASCII" /* the ASCII character set */ 9480ee5cbfSDavid du Colombier #define ISO_LATIN12 "ISO_LATIN12" /* The ISO Latin 12 characters */ 9580ee5cbfSDavid du Colombier 9680ee5cbfSDavid du Colombier 9780ee5cbfSDavid du Colombier /******************** RECOGNITION INPUT STRUCTURES ***********************/ 9880ee5cbfSDavid du Colombier 9980ee5cbfSDavid du Colombier /* 10080ee5cbfSDavid du Colombier * WINDOW SYSTEM INTERFACE 10180ee5cbfSDavid du Colombier */ 10280ee5cbfSDavid du Colombier 10380ee5cbfSDavid du Colombier /*Bounding box. Structurally identical to Rectangle.*/ 10480ee5cbfSDavid du Colombier 10580ee5cbfSDavid du Colombier typedef Rectangle pen_rect; 10680ee5cbfSDavid du Colombier 10780ee5cbfSDavid du Colombier 10880ee5cbfSDavid du Colombier /* 10980ee5cbfSDavid du Colombier * RECOGNITION CONTEXT 11080ee5cbfSDavid du Colombier */ 11180ee5cbfSDavid du Colombier 11280ee5cbfSDavid du Colombier /* Structure for reporting writing area geometric constraints. */ 11380ee5cbfSDavid du Colombier 11480ee5cbfSDavid du Colombier typedef struct { 11580ee5cbfSDavid du Colombier pen_rect pr_area; 11680ee5cbfSDavid du Colombier short pr_row, pr_col; 11780ee5cbfSDavid du Colombier } pen_frame; 11880ee5cbfSDavid du Colombier 11980ee5cbfSDavid du Colombier /* 12080ee5cbfSDavid du Colombier * Structure for describing a set of letters to constrain recognition. 12180ee5cbfSDavid du Colombier * ls_type is the same as the re_type field for rec_element below. 12280ee5cbfSDavid du Colombier */ 12380ee5cbfSDavid du Colombier 12480ee5cbfSDavid du Colombier typedef struct _letterset { 12580ee5cbfSDavid du Colombier char ls_type; 12680ee5cbfSDavid du Colombier union _ls_set { 12780ee5cbfSDavid du Colombier char* aval; 12880ee5cbfSDavid du Colombier wchar_t* wval; 12980ee5cbfSDavid du Colombier } ls_set; 13080ee5cbfSDavid du Colombier } letterset; 13180ee5cbfSDavid du Colombier 13280ee5cbfSDavid du Colombier /********************* RECOGNITION RETURN VALUES *************************/ 13380ee5cbfSDavid du Colombier 13480ee5cbfSDavid du Colombier 13580ee5cbfSDavid du Colombier /*Different types in union. "Other" indicates a cast is needed.*/ 13680ee5cbfSDavid du Colombier 13780ee5cbfSDavid du Colombier #define REC_NONE 0x0 /*No return value*/ 13880ee5cbfSDavid du Colombier #define REC_GESTURE 0x1 /*Gesture.*/ 13980ee5cbfSDavid du Colombier #define REC_ASCII 0x2 /*Array of 8 bit ASCII*/ 14080ee5cbfSDavid du Colombier #define REC_VAR 0x4 /*Array of variable width characters. */ 14180ee5cbfSDavid du Colombier #define REC_WCHAR 0x8 /*Array of Unicode (wide) characters. */ 14280ee5cbfSDavid du Colombier #define REC_OTHER 0x10 /*Undefined type.*/ 14380ee5cbfSDavid du Colombier #define REC_CORR 0x20 /*rec_correlation struct*/ 14480ee5cbfSDavid du Colombier 14580ee5cbfSDavid du Colombier /* 14680ee5cbfSDavid du Colombier * Recognition elements. A recognition element is a structure having a 14780ee5cbfSDavid du Colombier * confidence level member, and a union, along with a flag indicating 14880ee5cbfSDavid du Colombier * the union type. The union contains a pointer to the result. This 14980ee5cbfSDavid du Colombier * is the basic recognition return value, corresponding to one 15080ee5cbfSDavid du Colombier * recognized word, letter, or group of letters. 15180ee5cbfSDavid du Colombier */ 15280ee5cbfSDavid du Colombier 15380ee5cbfSDavid du Colombier struct rec_element { 15480ee5cbfSDavid du Colombier char re_type; /*Union type flag.*/ 15580ee5cbfSDavid du Colombier union { 15680ee5cbfSDavid du Colombier gesture * gval; /*Gesture.*/ 15780ee5cbfSDavid du Colombier char* aval; /*ASCII and variable width.*/ 15880ee5cbfSDavid du Colombier wchar_t* wval; /*Unicode.*/ 15980ee5cbfSDavid du Colombier rec_correlation* rcval; /*rec_correlation*/ 16080ee5cbfSDavid du Colombier } re_result; 16180ee5cbfSDavid du Colombier rec_confidence re_conf; /*Confidence (0-100).*/ 16280ee5cbfSDavid du Colombier }; 16380ee5cbfSDavid du Colombier 16480ee5cbfSDavid du Colombier /* 16580ee5cbfSDavid du Colombier * Recognition alternative. The recognition alternative gives 16680ee5cbfSDavid du Colombier * a translated element for a particular segmentation, and 16780ee5cbfSDavid du Colombier * a pointer to an array of alternatives for the next position 16880ee5cbfSDavid du Colombier * in the segmentation thread. 16980ee5cbfSDavid du Colombier */ 17080ee5cbfSDavid du Colombier 17180ee5cbfSDavid du Colombier struct rec_alternative { 17280ee5cbfSDavid du Colombier rec_element ra_elem; /*the translated element*/ 17380ee5cbfSDavid du Colombier uint ra_nalter; /*number of next alternatives*/ 17480ee5cbfSDavid du Colombier rec_alternative* ra_next; /*the array of next alternatives*/ 17580ee5cbfSDavid du Colombier }; 17680ee5cbfSDavid du Colombier 17780ee5cbfSDavid du Colombier /************************** GESTURES **************************/ 17880ee5cbfSDavid du Colombier 17980ee5cbfSDavid du Colombier /* 18080ee5cbfSDavid du Colombier * Gestures. The toolkit initializes the recognizer with a 18180ee5cbfSDavid du Colombier * set of gestures having appropriate callbacks. 18280ee5cbfSDavid du Colombier * When a gesture is recognized, it is returned as part of a 18380ee5cbfSDavid du Colombier * recognition element. The recognizer fills in the bounding 18480ee5cbfSDavid du Colombier * box and hotspots. The toolkit fills in any additional values, 18580ee5cbfSDavid du Colombier * such as the current window, and calls the callback. 18680ee5cbfSDavid du Colombier */ 18780ee5cbfSDavid du Colombier 18880ee5cbfSDavid du Colombier struct gesture { 18980ee5cbfSDavid du Colombier char* g_name; /*The gesture's name.*/ 19080ee5cbfSDavid du Colombier uint g_nhs; /*Number of hotspots.*/ 19180ee5cbfSDavid du Colombier pen_point* g_hspots; /*The hotspots.*/ 19280ee5cbfSDavid du Colombier pen_rect g_bbox; /*The bounding box.*/ 19380ee5cbfSDavid du Colombier void (*g_action)(gesture*); /*Pointer to execution function.*/ 19480ee5cbfSDavid du Colombier void* g_wsinfo; /*For toolkit to fill in.*/ 19580ee5cbfSDavid du Colombier }; 19680ee5cbfSDavid du Colombier 19780ee5cbfSDavid du Colombier typedef void (*xgesture)(gesture*); 19880ee5cbfSDavid du Colombier 19980ee5cbfSDavid du Colombier /* 20080ee5cbfSDavid du Colombier * Recognition correlation. A recognition correlation is a recognition 20180ee5cbfSDavid du Colombier * of the stroke input along with a correlation between the stroke 20280ee5cbfSDavid du Colombier * input and the recognized text. The rec_correlation struct contains 20380ee5cbfSDavid du Colombier * a pointer to an arrray of pointers to strokes, and 20480ee5cbfSDavid du Colombier * two arrays of integers, giving the starting point and 20580ee5cbfSDavid du Colombier * stopping point of each corresponding recogition element returned 20680ee5cbfSDavid du Colombier * in the strokes. 20780ee5cbfSDavid du Colombier */ 20880ee5cbfSDavid du Colombier 20980ee5cbfSDavid du Colombier struct rec_correlation { 21080ee5cbfSDavid du Colombier rec_element ro_elem; /*The recognized alternative.*/ 21180ee5cbfSDavid du Colombier uint ro_nstrokes; /*Number of strokes.*/ 21280ee5cbfSDavid du Colombier Stroke* ro_strokes; /*Array of strokes.*/ 21380ee5cbfSDavid du Colombier uint* ro_start; /*Starting index of points.*/ 21480ee5cbfSDavid du Colombier uint* ro_stop; /*Stopping index of points.*/ 21580ee5cbfSDavid du Colombier }; 21680ee5cbfSDavid du Colombier 21780ee5cbfSDavid du Colombier /* 21880ee5cbfSDavid du Colombier * ADMINISTRATION 21980ee5cbfSDavid du Colombier */ 22080ee5cbfSDavid du Colombier 22180ee5cbfSDavid du Colombier /* 22280ee5cbfSDavid du Colombier * recognizer_load - If directory is not NULL, then use it as a pathname 22380ee5cbfSDavid du Colombier * to find the recognizer. Otherwise, use the default naming conventions 22480ee5cbfSDavid du Colombier * to find the recognizer having file name name. The subset argument 22580ee5cbfSDavid du Colombier * contains a null-terminated array of names for character subsets which 22680ee5cbfSDavid du Colombier * the recognizer should translate. 22780ee5cbfSDavid du Colombier */ 22880ee5cbfSDavid du Colombier 22980ee5cbfSDavid du Colombier recognizer recognizer_load(char*, char*, char**); 23080ee5cbfSDavid du Colombier 23180ee5cbfSDavid du Colombier /* 23280ee5cbfSDavid du Colombier * recognizer_unload - Unload the recognizer. 23380ee5cbfSDavid du Colombier */ 23480ee5cbfSDavid du Colombier 23580ee5cbfSDavid du Colombier int recognizer_unload(recognizer); 23680ee5cbfSDavid du Colombier 23780ee5cbfSDavid du Colombier /* 23880ee5cbfSDavid du Colombier * recognizer_get_info-Get a pointer to a rec_info 23980ee5cbfSDavid du Colombier * giving the locale and subsets supported by the recognizer, and shared 24080ee5cbfSDavid du Colombier * library pathname. 24180ee5cbfSDavid du Colombier */ 24280ee5cbfSDavid du Colombier 24380ee5cbfSDavid du Colombier const rec_info* recognizer_get_info(recognizer); 24480ee5cbfSDavid du Colombier 24580ee5cbfSDavid du Colombier /* 24680ee5cbfSDavid du Colombier * recognizer_manager_version-Return the version number string of the 24780ee5cbfSDavid du Colombier * recognition manager. 24880ee5cbfSDavid du Colombier */ 24980ee5cbfSDavid du Colombier 25080ee5cbfSDavid du Colombier const char* recognizer_manager_version(recognizer); 25180ee5cbfSDavid du Colombier 25280ee5cbfSDavid du Colombier /* 25380ee5cbfSDavid du Colombier * recognizer_load_state-Get any recognizer state associated with name 25480ee5cbfSDavid du Colombier * in dir. Note that name may not be simple file name, since 25580ee5cbfSDavid du Colombier * there may be more than one file involved. Return 0 if successful, 25680ee5cbfSDavid du Colombier * -1 if not. 25780ee5cbfSDavid du Colombier */ 25880ee5cbfSDavid du Colombier 25980ee5cbfSDavid du Colombier int recognizer_load_state(recognizer, char*, char*); 26080ee5cbfSDavid du Colombier 26180ee5cbfSDavid du Colombier /* 26280ee5cbfSDavid du Colombier * recognizer_save_state-Save any recognizer state to name 26380ee5cbfSDavid du Colombier * in dir. Note that name may not be a simple file name, since 26480ee5cbfSDavid du Colombier * there may be more than one file involved. Return 0 if successful, 26580ee5cbfSDavid du Colombier * -1 if not. 26680ee5cbfSDavid du Colombier */ 26780ee5cbfSDavid du Colombier 26880ee5cbfSDavid du Colombier int recognizer_save_state(recognizer, char*, char*); 26980ee5cbfSDavid du Colombier 27080ee5cbfSDavid du Colombier /* 27180ee5cbfSDavid du Colombier * recognizer_error-Return the last error message, or NULL if none. 27280ee5cbfSDavid du Colombier */ 27380ee5cbfSDavid du Colombier 27480ee5cbfSDavid du Colombier char* recognizer_error(recognizer); 27580ee5cbfSDavid du Colombier 27680ee5cbfSDavid du Colombier /* 27780ee5cbfSDavid du Colombier * DICTIONARIES 27880ee5cbfSDavid du Colombier */ 27980ee5cbfSDavid du Colombier 28080ee5cbfSDavid du Colombier /* recognizer_load_dictionary-Load a dictionary from the directory 28180ee5cbfSDavid du Colombier * dir and file name. Return the dictionary pointer if successful, 28280ee5cbfSDavid du Colombier * otherwise NULL. 28380ee5cbfSDavid du Colombier */ 28480ee5cbfSDavid du Colombier 28580ee5cbfSDavid du Colombier wordset recognizer_load_dictionary(recognizer, char*, char*); 28680ee5cbfSDavid du Colombier 28780ee5cbfSDavid du Colombier /* recoginzer_save_dictionary-Save the dictionary to the file. Return 0 28880ee5cbfSDavid du Colombier * successful, -1 if error occurs. 28980ee5cbfSDavid du Colombier */ 29080ee5cbfSDavid du Colombier 29180ee5cbfSDavid du Colombier int recognizer_save_dictionary(recognizer, char*, char*, wordset); 29280ee5cbfSDavid du Colombier 29380ee5cbfSDavid du Colombier /* 29480ee5cbfSDavid du Colombier * recognizer_free_dictionary-Free the dictionary. Return 0 if successful, 29580ee5cbfSDavid du Colombier * -1 if error occurs. 29680ee5cbfSDavid du Colombier */ 29780ee5cbfSDavid du Colombier 29880ee5cbfSDavid du Colombier int recognizer_free_dictionary(recognizer, wordset); 29980ee5cbfSDavid du Colombier 30080ee5cbfSDavid du Colombier /* 30180ee5cbfSDavid du Colombier * recognizer_add_to_dictionary-Add the word to the dictionary. Return 0 30280ee5cbfSDavid du Colombier * if successful, -1 if error occurs. 30380ee5cbfSDavid du Colombier */ 30480ee5cbfSDavid du Colombier 30580ee5cbfSDavid du Colombier int recognizer_add_to_dictionary(recognizer, letterset*, wordset); 30680ee5cbfSDavid du Colombier 30780ee5cbfSDavid du Colombier /* 30880ee5cbfSDavid du Colombier * recognizer_delete_from_dictionary-Delete the word from the dictionary. 30980ee5cbfSDavid du Colombier * Return 0 if successful, -1 if error occurs. 31080ee5cbfSDavid du Colombier */ 31180ee5cbfSDavid du Colombier 31280ee5cbfSDavid du Colombier int recognizer_delete_from_dictionary(recognizer, letterset*, wordset); 31380ee5cbfSDavid du Colombier 31480ee5cbfSDavid du Colombier /* 31580ee5cbfSDavid du Colombier * TRANSLATION 31680ee5cbfSDavid du Colombier */ 31780ee5cbfSDavid du Colombier 31880ee5cbfSDavid du Colombier /* recognizer_set/get_context - Set/get the recognition context for 31980ee5cbfSDavid du Colombier * subsequent buffering and translation. recognizer_set_context() 32080ee5cbfSDavid du Colombier * returns -1 if an error occurs, otherwise 0. recognizer_get_context() 32180ee5cbfSDavid du Colombier * returns NULL if no context has been set. The context is copied to avoid 32280ee5cbfSDavid du Colombier * potential memory deallocation problems. 32380ee5cbfSDavid du Colombier */ 32480ee5cbfSDavid du Colombier 32580ee5cbfSDavid du Colombier int recognizer_set_context(recognizer, rc*); 32680ee5cbfSDavid du Colombier rc* recognizer_get_context(recognizer); 32780ee5cbfSDavid du Colombier 32880ee5cbfSDavid du Colombier /* recognizer_clear - Set stroke buffer to NULL and clear the context. 32980ee5cbfSDavid du Colombier * Returns -1 if an error occurred, otherwise 0. Both the context and the 33080ee5cbfSDavid du Colombier * stroke buffer are deallocated. If delete_points_p is true, delete the 33180ee5cbfSDavid du Colombier * points also. 33280ee5cbfSDavid du Colombier */ 33380ee5cbfSDavid du Colombier 33480ee5cbfSDavid du Colombier int recognizer_clear(recognizer, bool); 33580ee5cbfSDavid du Colombier 33680ee5cbfSDavid du Colombier /* recognizer_get/set_buffer - Get/set the stroke buffer. The stroke buffer 33780ee5cbfSDavid du Colombier * is copied to avoid potential memory allocation problems. Returns -1 if 33880ee5cbfSDavid du Colombier * an error occurs, otherwise 0. 33980ee5cbfSDavid du Colombier */ 34080ee5cbfSDavid du Colombier 34180ee5cbfSDavid du Colombier int recognizer_get_buffer(recognizer, uint*, Stroke**); 34280ee5cbfSDavid du Colombier int recognizer_set_buffer(recognizer, uint, Stroke*); 34380ee5cbfSDavid du Colombier 34480ee5cbfSDavid du Colombier /* recognizer_translate - Copy the strokes argument into the stroke buffer and 34580ee5cbfSDavid du Colombier * translate the buffer. If correlate_p is true, then provide stroke 34680ee5cbfSDavid du Colombier * correlations as well. If either nstrokes is 0 or strokes is NULL, then 34780ee5cbfSDavid du Colombier * just translate the stroke buffer and return the translation. Return an 34880ee5cbfSDavid du Colombier * array of alternative translation segmentations in the ret pointer and the 34980ee5cbfSDavid du Colombier * number of alternatives in nret, or NULL and 0 if there is no translation. 35080ee5cbfSDavid du Colombier * The direction of segmentation is as specified by the rc_direction field in 35180ee5cbfSDavid du Colombier * the buffered recognition context. Returns -1 if an error occurred, 35280ee5cbfSDavid du Colombier * otherwise 0. 35380ee5cbfSDavid du Colombier */ 35480ee5cbfSDavid du Colombier 35580ee5cbfSDavid du Colombier int recognizer_translate(recognizer, uint, Stroke*, bool, 35680ee5cbfSDavid du Colombier int*, rec_alternative**); 35780ee5cbfSDavid du Colombier 35880ee5cbfSDavid du Colombier /* 35980ee5cbfSDavid du Colombier * recognizer_get_extension_functions-Return a null terminated array 36080ee5cbfSDavid du Colombier * of functions providing extended functionality. Their interfaces 36180ee5cbfSDavid du Colombier * will change depending on the recognizer. 36280ee5cbfSDavid du Colombier */ 36380ee5cbfSDavid du Colombier 36480ee5cbfSDavid du Colombier rec_fn* recognizer_get_extension_functions(recognizer); 36580ee5cbfSDavid du Colombier 36680ee5cbfSDavid du Colombier /* 36780ee5cbfSDavid du Colombier * GESTURE SUPPORT 36880ee5cbfSDavid du Colombier */ 36980ee5cbfSDavid du Colombier 37080ee5cbfSDavid du Colombier /* 37180ee5cbfSDavid du Colombier * recognizer_get_gesture_names - Return a null terminated array of 37280ee5cbfSDavid du Colombier * character strings containing the gesture names. 37380ee5cbfSDavid du Colombier */ 37480ee5cbfSDavid du Colombier 37580ee5cbfSDavid du Colombier char** recognizer_get_gesture_names(recognizer); 37680ee5cbfSDavid du Colombier 37780ee5cbfSDavid du Colombier /* 37880ee5cbfSDavid du Colombier * recognizer_set_gesture_action-Set the action function associated with the 37980ee5cbfSDavid du Colombier * name. 38080ee5cbfSDavid du Colombier */ 38180ee5cbfSDavid du Colombier 38280ee5cbfSDavid du Colombier xgesture recognizer_set_gesture_action(recognizer, char*, xgesture, void*); 38380ee5cbfSDavid du Colombier 38480ee5cbfSDavid du Colombier /* 38580ee5cbfSDavid du Colombier * The following functions are for deleting data structures returned 38680ee5cbfSDavid du Colombier * by the API functions. 38780ee5cbfSDavid du Colombier */ 38880ee5cbfSDavid du Colombier 38980ee5cbfSDavid du Colombier void delete_rec_alternative_array(uint, rec_alternative*, bool); 39080ee5cbfSDavid du Colombier void delete_rec_correlation(rec_correlation*, bool); 39180ee5cbfSDavid du Colombier 39280ee5cbfSDavid du Colombier /* 39380ee5cbfSDavid du Colombier * These are used by clients to create arrays for passing to API 39480ee5cbfSDavid du Colombier * functions. 39580ee5cbfSDavid du Colombier */ 39680ee5cbfSDavid du Colombier 39780ee5cbfSDavid du Colombier Stroke* make_Stroke_array(uint); 39880ee5cbfSDavid du Colombier void delete_Stroke_array(uint, Stroke*, bool); 39980ee5cbfSDavid du Colombier 40080ee5cbfSDavid du Colombier pen_point* make_pen_point_array(uint); 40180ee5cbfSDavid du Colombier void delete_pen_point_array(pen_point*); 40280ee5cbfSDavid du Colombier 40380ee5cbfSDavid du Colombier Stroke* copy_Stroke_array(uint, Stroke*); 40480ee5cbfSDavid du Colombier 40580ee5cbfSDavid du Colombier /*Extension function interfaces and indices.*/ 40680ee5cbfSDavid du Colombier 40780ee5cbfSDavid du Colombier #define LI_ISA_LI 0 /*Is this a li recognizer?.*/ 40880ee5cbfSDavid du Colombier #define LI_TRAIN 1 /*Train recognizer*/ 40980ee5cbfSDavid du Colombier #define LI_CLEAR 2 /* ari's clear-state extension fn. */ 41080ee5cbfSDavid du Colombier #define LI_GET_CLASSES 3 /* ari's get-classes extension fn. */ 41180ee5cbfSDavid du Colombier #define LI_NUM_EX_FNS 4 /*Number of extension functions*/ 41280ee5cbfSDavid du Colombier 41380ee5cbfSDavid du Colombier typedef bool (*li_isa_li)(recognizer r); 41480ee5cbfSDavid du Colombier typedef int (*li_recognizer_train)(recognizer, rc*, uint, 41580ee5cbfSDavid du Colombier Stroke*, rec_element*, bool); 41680ee5cbfSDavid du Colombier typedef int (*li_recognizer_clearState)(recognizer); 41780ee5cbfSDavid du Colombier typedef int (*li_recognizer_getClasses)(recognizer, char ***, int *); 418