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