xref: /plan9/sys/src/libscribble/hre_internal.h (revision 12fd1c83b21b4d1deeab2b58fe2c202d2038c714)
1*80ee5cbfSDavid du Colombier /*
2*80ee5cbfSDavid du Colombier  *  hre_internal.h:   Internal Interface for Recognizer.
3*80ee5cbfSDavid du Colombier  *  Author:           James Kempf
4*80ee5cbfSDavid du Colombier  *  Created On:       Thu Nov  5 10:54:18 1992
5*80ee5cbfSDavid du Colombier  *  Last Modified By: James Kempf
6*80ee5cbfSDavid du Colombier  *  Last Modified On: Fri Sep 23 13:51:15 1994
7*80ee5cbfSDavid du Colombier  *  Update Count:     99
8*80ee5cbfSDavid du Colombier  *  Copyright (c) 1994 by Sun Microsystems Computer Company
9*80ee5cbfSDavid du Colombier  *  All rights reserved.
10*80ee5cbfSDavid du Colombier  *
11*80ee5cbfSDavid du Colombier  *  Use and copying of this software and preparation of
12*80ee5cbfSDavid du Colombier  *  derivative works based upon this software are permitted.
13*80ee5cbfSDavid du Colombier  *  Any distribution of this software or derivative works
14*80ee5cbfSDavid du Colombier  *  must comply with all applicable United States export control
15*80ee5cbfSDavid du Colombier  *  laws.
16*80ee5cbfSDavid du Colombier  *
17*80ee5cbfSDavid du Colombier  *  This software is made available as is, and Sun Microsystems
18*80ee5cbfSDavid du Colombier  *  Computer Company makes no warranty about the software, its
19*80ee5cbfSDavid du Colombier  *  performance, or its conformity to any specification
20*80ee5cbfSDavid du Colombier  */
21*80ee5cbfSDavid du Colombier 
22*80ee5cbfSDavid du Colombier /*Avoids forward reference problem.*/
23*80ee5cbfSDavid du Colombier 
24*80ee5cbfSDavid du Colombier /*
25*80ee5cbfSDavid du Colombier  * Internal view of wordset. The recognition engine uses this view to
26*80ee5cbfSDavid du Colombier  * maintain information about which recognizer object this wordset
27*80ee5cbfSDavid du Colombier  * belongs to, which file (in case it needs to be saved), and internal
28*80ee5cbfSDavid du Colombier  * data structures.
29*80ee5cbfSDavid du Colombier */
30*80ee5cbfSDavid du Colombier 
31*80ee5cbfSDavid du Colombier struct _wordset {
32*80ee5cbfSDavid du Colombier 	char* ws_pathname;		/*Path name to word set file.*/
33*80ee5cbfSDavid du Colombier 	recognizer ws_recognizer;	/*To whom it belongs.*/
34*80ee5cbfSDavid du Colombier 	void* ws_internal;		/*Internal data structures.*/
35*80ee5cbfSDavid du Colombier };
36*80ee5cbfSDavid du Colombier 
37*80ee5cbfSDavid du Colombier /*
38*80ee5cbfSDavid du Colombier  * Internal view of the recognizer struct. This view is only available
39*80ee5cbfSDavid du Colombier  * to OEM clients who implement a recognizer shared library. Clients
40*80ee5cbfSDavid du Colombier  * of the recognizer itself see it as an opaque data type. The struct
41*80ee5cbfSDavid du Colombier  * contains a function pointer for each function in the client API.
42*80ee5cbfSDavid du Colombier */
43*80ee5cbfSDavid du Colombier 
44*80ee5cbfSDavid du Colombier struct _Recognizer {
45*80ee5cbfSDavid du Colombier 	uint		recognizer_magic;
46*80ee5cbfSDavid du Colombier 	char		*recognizer_version;
47*80ee5cbfSDavid du Colombier 
48*80ee5cbfSDavid du Colombier 	rec_info	*recognizer_info;
49*80ee5cbfSDavid du Colombier 	void		*recognizer_specific;
50*80ee5cbfSDavid du Colombier 	int		(*recognizer_load_state)(struct _Recognizer*, char*, char*);
51*80ee5cbfSDavid du Colombier 	int		(*recognizer_save_state)(struct _Recognizer*, char*, char*);
52*80ee5cbfSDavid du Colombier 	char*		(*recognizer_error)(struct _Recognizer*);
53*80ee5cbfSDavid du Colombier 	wordset		(*recognizer_load_dictionary)(struct _Recognizer*, char*, char*);
54*80ee5cbfSDavid du Colombier 	int		(*recognizer_save_dictionary)(struct _Recognizer*, char*, char*, wordset);
55*80ee5cbfSDavid du Colombier 
56*80ee5cbfSDavid du Colombier 	int		(*recognizer_free_dictionary)(struct _Recognizer*, wordset);
57*80ee5cbfSDavid du Colombier 	int		(*recognizer_add_to_dictionary)(struct _Recognizer*, letterset*, wordset);
58*80ee5cbfSDavid du Colombier 	int		(*recognizer_delete_from_dictionary)(struct _Recognizer*, letterset*, wordset);
59*80ee5cbfSDavid du Colombier 	int		(*recognizer_set_context)(struct _Recognizer*,rc*);
60*80ee5cbfSDavid du Colombier 	rc*		(*recognizer_get_context)(struct _Recognizer*);
61*80ee5cbfSDavid du Colombier 
62*80ee5cbfSDavid du Colombier 	int		(*recognizer_clear)(struct _Recognizer*, bool);
63*80ee5cbfSDavid du Colombier 	int		(*recognizer_get_buffer)(struct _Recognizer*, uint*, Stroke**);
64*80ee5cbfSDavid du Colombier 
65*80ee5cbfSDavid du Colombier 	int		(*recognizer_set_buffer)(struct _Recognizer*, uint, Stroke*);
66*80ee5cbfSDavid du Colombier 	int		(*recognizer_translate)(struct _Recognizer*, uint, Stroke*, bool, int*, rec_alternative**);
67*80ee5cbfSDavid du Colombier 	rec_fn*		(*recognizer_get_extension_functions)(struct _Recognizer*);
68*80ee5cbfSDavid du Colombier 	char**		(*recognizer_get_gesture_names)(struct _Recognizer*);
69*80ee5cbfSDavid du Colombier 	xgesture	(*recognizer_set_gesture_action)(struct _Recognizer*, char*, xgesture, void*);
70*80ee5cbfSDavid du Colombier 	uint recognizer_end_magic;
71*80ee5cbfSDavid du Colombier };
72*80ee5cbfSDavid du Colombier 
73*80ee5cbfSDavid du Colombier /*
74*80ee5cbfSDavid du Colombier  * recognizer_internal_initialize - Allocate and initialize the recognizer
75*80ee5cbfSDavid du Colombier  * object. The recognition shared library has the responsibility for filling
76*80ee5cbfSDavid du Colombier  * in all the function pointers for the recognition functions. This
77*80ee5cbfSDavid du Colombier  * function must be defined as a global function within the shared
78*80ee5cbfSDavid du Colombier  * library, so it can be accessed using dlsym() when the recognizer
79*80ee5cbfSDavid du Colombier  * shared library is loaded. It returns NULL if an error occured and
80*80ee5cbfSDavid du Colombier  * sets errno to indicate what.
81*80ee5cbfSDavid du Colombier */
82*80ee5cbfSDavid du Colombier 
83*80ee5cbfSDavid du Colombier typedef recognizer (*recognizer_internal_initialize)(rec_info* ri);
84*80ee5cbfSDavid du Colombier 
85*80ee5cbfSDavid du Colombier /*Function header definition for recognizer internal initializer.*/
86*80ee5cbfSDavid du Colombier 
87*80ee5cbfSDavid du Colombier #define RECOGNIZER_INITIALIZE(_a) \
88*80ee5cbfSDavid du Colombier         recognizer __recognizer_internal_initialize(rec_info* _a)
89*80ee5cbfSDavid du Colombier 
90*80ee5cbfSDavid du Colombier /*
91*80ee5cbfSDavid du Colombier  * recognizer_internal_finalize - Deallocate and deinitialize the recognizer
92*80ee5cbfSDavid du Colombier  * object. If the recognizer has allocated any additional storage, it should
93*80ee5cbfSDavid du Colombier  * be deallocated as well. Returns 0 if successful, -1 if the argument
94*80ee5cbfSDavid du Colombier  * wasn't a recognizer or wasn't a recognizer handled by this library.
95*80ee5cbfSDavid du Colombier */
96*80ee5cbfSDavid du Colombier 
97*80ee5cbfSDavid du Colombier typedef int (*recognizer_internal_finalize)(recognizer r);
98*80ee5cbfSDavid du Colombier 
99*80ee5cbfSDavid du Colombier #define RECOGNIZER_FINALIZE(_a) \
100*80ee5cbfSDavid du Colombier        int __recognizer_internal_finalize(recognizer _a)
101*80ee5cbfSDavid du Colombier 
102*80ee5cbfSDavid du Colombier /*
103*80ee5cbfSDavid du Colombier  * The following are for creating HRE structures.
104*80ee5cbfSDavid du Colombier  */
105*80ee5cbfSDavid du Colombier 
106*80ee5cbfSDavid du Colombier recognizer			make_recognizer(rec_info* ri);
107*80ee5cbfSDavid du Colombier void 				delete_recognizer(recognizer rec);
108*80ee5cbfSDavid du Colombier 
109*80ee5cbfSDavid du Colombier RECOGNIZER_FINALIZE(_a);
110*80ee5cbfSDavid du Colombier rec_alternative*	make_rec_alternative_array(uint size);
111*80ee5cbfSDavid du Colombier rec_correlation*	make_rec_correlation(char type, uint size, void* trans, rec_confidence conf, uint ps_size);
112*80ee5cbfSDavid du Colombier 
113*80ee5cbfSDavid du Colombier rec_fn*
114*80ee5cbfSDavid du Colombier make_rec_fn_array(uint size);
115*80ee5cbfSDavid du Colombier void
116*80ee5cbfSDavid du Colombier delete_rec_fn_array(rec_fn* rf);
117*80ee5cbfSDavid du Colombier 
118*80ee5cbfSDavid du Colombier gesture*
119*80ee5cbfSDavid du Colombier initialize_gesture(gesture* g,
120*80ee5cbfSDavid du Colombier 		   char* name,
121*80ee5cbfSDavid du Colombier 		   uint nhs,
122*80ee5cbfSDavid du Colombier 		   pen_point* hspots,
123*80ee5cbfSDavid du Colombier 		   pen_rect bbox,
124*80ee5cbfSDavid du Colombier 		   xgesture cback,
125*80ee5cbfSDavid du Colombier 		   void* wsinfo);
126*80ee5cbfSDavid du Colombier gesture*
127*80ee5cbfSDavid du Colombier make_gesture_array(uint size);
128*80ee5cbfSDavid du Colombier void
129*80ee5cbfSDavid du Colombier delete_gesture_array(uint size,gesture* ga,bool delete_points_p);
130*80ee5cbfSDavid du Colombier 
131*80ee5cbfSDavid du Colombier Stroke*
132*80ee5cbfSDavid du Colombier concatenate_Strokes(int nstrokes1,
133*80ee5cbfSDavid du Colombier 			Stroke* strokes1,
134*80ee5cbfSDavid du Colombier 			int nstrokes2,
135*80ee5cbfSDavid du Colombier 			Stroke* strokes2,
136*80ee5cbfSDavid du Colombier 			int* nstrokes3,
137*80ee5cbfSDavid du Colombier 			Stroke** strokes3);
138*80ee5cbfSDavid du Colombier 
139*80ee5cbfSDavid du Colombier rec_alternative* initialize_rec_alternative(rec_alternative* ra, uint);
140*80ee5cbfSDavid du Colombier 
141*80ee5cbfSDavid du Colombier rec_element* initialize_rec_element(rec_element*, char, uint, void*, rec_confidence);
142*80ee5cbfSDavid du Colombier 
143*80ee5cbfSDavid du Colombier /*
144*80ee5cbfSDavid du Colombier  * Pathnames, etc.
145*80ee5cbfSDavid du Colombier */
146*80ee5cbfSDavid du Colombier 
147*80ee5cbfSDavid du Colombier #define REC_DEFAULT_LOCALE  	"C"
148*80ee5cbfSDavid du Colombier #define RECHOME			"RECHOME"
149*80ee5cbfSDavid du Colombier #define LANG			"LANG"
150