1 /*
2 
3 Copyright 1991, 1998  The Open Group
4 
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
9 documentation.
10 
11 The above copyright notice and this permission notice shall be included
12 in all copies or substantial portions of the Software.
13 
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 OTHER DEALINGS IN THE SOFTWARE.
21 
22 Except as contained in this notice, the name of The Open Group shall
23 not be used in advertising or otherwise to promote the sale, use or
24 other dealings in this Software without prior written authorization
25 from The Open Group.
26 
27 */
28 
29 /*
30  * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
31  *                      and Nippon Telegraph and Telephone Corporation
32  * Copyright 1991 by the Open Software Foundation
33  * Copyright 1993 by the TOSHIBA Corp.
34  * Copyright 1993, 1994 by Sony Corporation
35  * Copyright 1993, 1994 by the FUJITSU LIMITED
36  *
37  * Permission to use, copy, modify, distribute, and sell this software and its
38  * documentation for any purpose is hereby granted without fee, provided that
39  * the above copyright notice appear in all copies and that both that
40  * copyright notice and this permission notice appear in supporting
41  * documentation, and that the names of OMRON, NTT Software, NTT, Open
42  * Software Foundation, and Sony Corporation not be used in advertising
43  * or publicity pertaining to distribution of the software without specific,
44  * written prior permission. OMRON, NTT Software, NTT, Open Software
45  * Foundation, and Sony Corporation  make no representations about the
46  * suitability of this software for any purpose.  It is provided "as is"
47  * without express or implied warranty.
48  *
49  * OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY
50  * CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
51  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
52  * SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY
53  * CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
54  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
55  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
56  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
57  *
58  *	Authors: Li Yuhong		OMRON Corporation
59  *		 Tatsuya Kato		NTT Software Corporation
60  *		 Hiroshi Kuribayashi	OMRON Coproration
61  *		 Muneiyoshi Suzuki	Nippon Telegraph and Telephone Co.
62  *
63  *		 M. Collins		OSF
64  *		 Katsuhisa Yano		TOSHIBA Corp.
65  *               Makoto Wakamatsu       Sony Corporation
66  *               Takashi Fujiwara	FUJITSU LIMITED
67  */
68 
69 
70 #ifndef	_XLCINT_H_
71 #define	_XLCINT_H_
72 
73 #ifndef _XP_PRINT_SERVER_
74 
75 #include <X11/Xresource.h>
76 #include <X11/Xutil.h>
77 #include <stdarg.h>
78 
79 typedef Bool (*XFilterEventProc)(
80     Display*		/* display */,
81     Window		/* window */,
82     XEvent*		/* event */,
83     XPointer		/* client_data */
84 );
85 
86 typedef struct _XIMFilter {
87     struct _XIMFilter *next;
88     Window window;
89     unsigned long event_mask;
90     int start_type, end_type;
91     XFilterEventProc filter;
92     XPointer client_data;
93 } XFilterEventRec, *XFilterEventList;
94 
95 typedef struct {
96     char    *name;
97     XPointer value;
98 } XIMArg;
99 
100 #ifdef offsetof
101 #define XOffsetOf(s_type,field) offsetof(s_type,field)
102 #else
103 #define XOffsetOf(s_type,field) ((unsigned int)&(((s_type*)NULL)->field))
104 #endif
105 
106 #define XIMNumber(arr) ((unsigned int) (sizeof(arr) / sizeof(arr[0])))
107 
108 /*
109  * define secondary data structs which are part of Input Methods
110  * and Input Context
111  */
112 typedef struct {
113     const char		*resource_name;		/* Resource string */
114     XrmQuark		xrm_name;		/* Resource name quark */
115     int			resource_size;		/* Size in bytes of data */
116     long		resource_offset;	/* Offset from base */
117     unsigned short 	mode;			/* Read Write Permission */
118     unsigned short 	id;			/* Input Method Protocol */
119 } XIMResource, *XIMResourceList;
120 
121 /*
122  * data block describing the visual attributes associated with
123  * an input context
124  */
125 typedef struct {
126     XRectangle		area;
127     XRectangle		area_needed;
128     XPoint		spot_location;
129     Colormap		colormap;
130     Atom		std_colormap;
131     unsigned long	foreground;
132     unsigned long	background;
133     Pixmap		background_pixmap;
134     XFontSet            fontset;
135     int	       		line_spacing;
136     Cursor		cursor;
137     XICCallback		start_callback;
138     XICCallback		done_callback;
139     XICCallback		draw_callback;
140     XICCallback		caret_callback;
141     XIMPreeditState	preedit_state;
142     XICCallback		state_notify_callback;
143 } ICPreeditAttributes, *ICPreeditAttributesPtr;
144 
145 typedef struct {
146     XRectangle		area;
147     XRectangle		area_needed;
148     Colormap		colormap;
149     Atom		std_colormap;
150     unsigned long	foreground;
151     unsigned long	background;
152     Pixmap		background_pixmap;
153     XFontSet            fontset;
154     int	       		line_spacing;
155     Cursor		cursor;
156     XICCallback		start_callback;
157     XICCallback		done_callback;
158     XICCallback		draw_callback;
159 } ICStatusAttributes, *ICStatusAttributesPtr;
160 
161 #endif /* !_XP_PRINT_SERVER_ */
162 
163 /*
164  * Methods for Xrm parsing
165  */
166 
167 /* The state is a pointer to an object created by the locale's
168    init_parse_info function (default: _XrmDefaultInitParseInfo). */
169 
170 /* Sets the state to the initial state.
171    Initiates a sequence of calls to the XmbCharProc. */
172 typedef void (*XmbInitProc)(
173     XPointer		state
174 );
175 
176 /* Transforms one multibyte character, starting at str, and return a 'char'
177    in the same parsing class (not a wide character!). Returns the number of
178    consumed bytes in *lenp. */
179 typedef char (*XmbCharProc)(
180     XPointer		state,
181     const char *	str,
182     int*		lenp
183 );
184 
185 /* Terminates a sequence of calls to the XmbCharProc. */
186 typedef void (*XmbFinishProc)(
187     XPointer		state
188 );
189 
190 /* Returns the name of the state's locale, as a static string. */
191 typedef const char* (*XlcNameProc)(
192     XPointer		state
193 );
194 
195 /* Frees the state, which was allocated by the locale's init_parse_info
196    function. */
197 typedef void (*XrmDestroyProc)(
198     XPointer		state
199 );
200 
201 /* Set of methods for Xrm parsing. */
202 typedef struct {
203     XmbInitProc		mbinit;
204     XmbCharProc		mbchar;
205     XmbFinishProc	mbfinish;
206     XlcNameProc		lcname;
207     XrmDestroyProc	destroy;
208 } XrmMethodsRec;
209 typedef const XrmMethodsRec *XrmMethods;
210 
211 #ifndef _XP_PRINT_SERVER_
212 
213 typedef struct _XLCd *XLCd; /* need forward reference */
214 
215 /*
216  * define an LC, it's methods, and data.
217  */
218 
219 typedef void (*XCloseLCProc)(
220     XLCd		/* lcd */
221 );
222 
223 typedef char* (*XlcMapModifiersProc)(
224     XLCd		/* lcd */,
225     _Xconst char*	/* user_mods */,
226     _Xconst char*	/* prog_mods */
227 );
228 
229 typedef XOM (*XOpenOMProc)(
230     XLCd		/* lcd */,
231     Display*		/* display */,
232     XrmDatabase		/* rdb */,
233     _Xconst char*	/* res_name */,
234     _Xconst char*	/* res_class */
235 );
236 
237 typedef XIM (*XOpenIMProc)(
238     XLCd		/* lcd */,
239     Display*		/* display */,
240     XrmDatabase		/* rdb */,
241     char*		/* res_name */,
242     char*		/* res_class */
243 );
244 
245 typedef Bool (*XRegisterIMInstantiateCBProc)(
246     XLCd		/* lcd */,
247     Display*		/* display */,
248     XrmDatabase		/* rdb */,
249     char*		/* res_name */,
250     char*		/* res_class */,
251     XIDProc		/* callback */,
252     XPointer		/* client_data */
253 );
254 
255 typedef Bool (*XUnregisterIMInstantiateCBProc)(
256     XLCd		/* lcd */,
257     Display*		/* display */,
258     XrmDatabase		/* rdb */,
259     char*		/* res_name */,
260     char*		/* res_class */,
261     XIDProc		/* callback */,
262     XPointer		/* client_data */
263 );
264 
265 typedef XrmMethods (*XrmInitParseInfoProc)(
266     XLCd		/* lcd */,
267     XPointer*		/* state */
268 );
269 
270 typedef int (*XmbTextPropertyToTextListProc)(
271     XLCd		lcd,
272     Display*		display,
273     const XTextProperty* text_prop,
274     char***		list_return,
275     int*		count_return
276 );
277 
278 typedef int (*XwcTextPropertyToTextListProc)(
279     XLCd		lcd,
280     Display*		display,
281     const XTextProperty* text_prop,
282     wchar_t***		list_return,
283     int*		count_return
284 );
285 
286 typedef int (*XmbTextListToTextPropertyProc)(
287     XLCd		lcd,
288     Display*		display,
289     char**		list,
290     int			count,
291     XICCEncodingStyle	style,
292     XTextProperty*	text_prop_return
293 );
294 
295 typedef int (*XwcTextListToTextPropertyProc)(
296     XLCd		lcd,
297     Display*		display,
298     wchar_t**		list,
299     int			count,
300     XICCEncodingStyle	style,
301     XTextProperty*	text_prop_return
302 );
303 
304 typedef void (*XwcFreeStringListProc)(
305     XLCd		lcd,
306     wchar_t**		list
307 );
308 
309 typedef const char* (*XDefaultStringProc)(
310     XLCd		lcd
311 );
312 
313 typedef struct {
314     XCloseLCProc			close;
315     XlcMapModifiersProc			map_modifiers;
316     XOpenOMProc				open_om;
317     XOpenIMProc				open_im;
318     XrmInitParseInfoProc		init_parse_info;
319     XmbTextPropertyToTextListProc	mb_text_prop_to_list;
320     XwcTextPropertyToTextListProc	wc_text_prop_to_list;
321     XmbTextPropertyToTextListProc	utf8_text_prop_to_list;
322     XmbTextListToTextPropertyProc	mb_text_list_to_prop;
323     XwcTextListToTextPropertyProc	wc_text_list_to_prop;
324     XmbTextListToTextPropertyProc	utf8_text_list_to_prop;
325     XwcFreeStringListProc		wc_free_string_list;
326     XDefaultStringProc			default_string;
327     XRegisterIMInstantiateCBProc	register_callback;
328     XUnregisterIMInstantiateCBProc	unregister_callback;
329 } XLCdMethodsRec, *XLCdMethods;
330 
331 
332 typedef struct {
333     char*		name;			/* name of this LC */
334     char*		modifiers;		/* modifiers of locale */
335 } XLCdCoreRec, *XLCdCore;
336 
337 
338 typedef struct _XLCd {
339     XLCdMethods		methods;		/* methods of this LC */
340     XLCdCore		core;			/* data of this LC */
341     XPointer		opaque;			/* LDX specific data */
342 } XLCdRec;
343 
344 typedef int XlcPosition;
345 
346 #define XlcHead		0
347 #define XlcTail		-1
348 
349 typedef struct {
350     char *name;
351     XPointer value;
352 } XlcArg, *XlcArgList;
353 
354 typedef struct _XlcResource {
355     const char *name;
356     XrmQuark xrm_name;
357     int size;
358     int offset;
359     unsigned long mask;
360 } XlcResource, *XlcResourceList;
361 
362 #define XlcCreateMask	(1L<<0)
363 #define XlcDefaultMask	(1L<<1)
364 #define XlcGetMask	(1L<<2)
365 #define XlcSetMask	(1L<<3)
366 #define XlcIgnoreMask	(1L<<4)
367 
368 #define XlcNumber(arr)	(sizeof(arr) / sizeof(arr[0]))
369 
370 typedef Status (*XCloseOMProc)(
371     XOM			/* om */
372 );
373 
374 typedef char* (*XSetOMValuesProc)(
375     XOM			/* om */,
376     XlcArgList		/* args */,
377     int			/* num_args */
378 );
379 
380 typedef char* (*XGetOMValuesProc)(
381     XOM			/* om */,
382     XlcArgList		/* args */,
383     int			/* num_args */
384 );
385 
386 typedef XOC (*XCreateOCProc)(
387     XOM			/* om */,
388     XlcArgList		/* args */,
389     int			/* num_args */
390 );
391 
392 typedef struct _XOMMethodsRec {
393     XCloseOMProc	close;
394     XSetOMValuesProc	set_values;
395     XGetOMValuesProc	get_values;
396     XCreateOCProc	create_oc;
397 } XOMMethodsRec, *XOMMethods;
398 
399 typedef struct _XOMCoreRec {
400     XLCd lcd;				/* lcd */
401     Display *display;			/* display */
402     XrmDatabase rdb;			/* database */
403     char *res_name;			/* resource name */
404     char *res_class;			/* resource class */
405     XOC oc_list;			/* xoc list */
406     XlcResourceList resources;		/* xom resources */
407     int num_resources;			/* number of xom resources */
408     XOMCharSetList required_charset;	/* required charset list */
409     XOMOrientation orientation_list;	/* orientation list */
410     Bool directional_dependent;		/* directional-dependent */
411     Bool contextual_drawing;		/* contextual drawing */
412     Bool context_dependent;		/* context-dependent drawing */
413 } XOMCoreRec, *XOMCore;
414 
415 typedef struct _XOM {
416     XOMMethods methods;
417     XOMCoreRec core;
418 } XOMRec;
419 
420 typedef void (*XDestroyOCProc)(
421     XOC			/* oc */
422 );
423 
424 typedef char* (*XSetOCValuesProc)(
425     XOC			/* oc */,
426     XlcArgList		/* args */,
427     int			/* num_args */
428 );
429 
430 typedef char* (*XGetOCValuesProc)(
431     XOC			/* oc */,
432     XlcArgList		/* args */,
433     int			/* num_args */
434 );
435 
436 /*
437  * X Font Sets are an instantiable object, so we define it, the
438  * object itself, a method list and data
439  */
440 
441 /*
442  * XFontSet object method list
443  */
444 
445 typedef int (*XmbTextEscapementProc)(
446     XFontSet		/* font_set */,
447     _Xconst char*	/* text */,
448     int			/* text_len */
449 );
450 
451 typedef int (*XmbTextExtentsProc)(
452     XFontSet		/* font_set */,
453     _Xconst char*	/* text */,
454     int			/* text_len */,
455     XRectangle*		/* overall_ink_extents */,
456     XRectangle*		/* overall_logical_extents */
457 );
458 
459 typedef Status (*XmbTextPerCharExtentsProc)(
460     XFontSet		/* font_set */,
461     _Xconst char*	/* text */,
462     int			/* text_len */,
463     XRectangle*		/* ink_extents_buffer */,
464     XRectangle*		/* logical_extents_buffer */,
465     int			/* buffer_size */,
466     int*		/* num_chars */,
467     XRectangle*		/* max_ink_extents */,
468     XRectangle*		/* max_logical_extents */
469 );
470 
471 typedef int (*XmbDrawStringProc)(
472     Display*		/* display */,
473     Drawable		/* drawable */,
474     XFontSet		/* font_set */,
475     GC			/* gc */,
476     int			/* x */,
477     int			/* y */,
478     _Xconst char*	/* text */,
479     int			/* text_len */
480 );
481 
482 typedef void (*XmbDrawImageStringProc)(
483     Display*		/* display */,
484     Drawable		/* drawable */,
485     XFontSet		/* font_set */,
486     GC			/* gc */,
487     int			/* x */,
488     int			/* y */,
489     _Xconst char*	/* text */,
490     int			/* text_len */
491 );
492 
493 typedef int (*XwcTextEscapementProc)(
494     XFontSet		/* font_set */,
495     _Xconst wchar_t*	/* text */,
496     int			/* text_len */
497 );
498 
499 typedef int (*XwcTextExtentsProc)(
500     XFontSet		/* font_set */,
501     _Xconst wchar_t*	/* text */,
502     int			/* text_len */,
503     XRectangle*		/* overall_ink_extents */,
504     XRectangle*		/* overall_logical_extents */
505 );
506 
507 typedef Status (*XwcTextPerCharExtentsProc)(
508     XFontSet		/* font_set */,
509     _Xconst wchar_t*	/* text */,
510     int			/* text_len */,
511     XRectangle*		/* ink_extents_buffer */,
512     XRectangle*		/* logical_extents_buffer */,
513     int			/* buffer_size */,
514     int*		/* num_chars */,
515     XRectangle*		/* max_ink_extents */,
516     XRectangle*		/* max_logical_extents */
517 );
518 
519 typedef int (*XwcDrawStringProc)(
520     Display*		/* display */,
521     Drawable		/* drawable */,
522     XFontSet		/* font_set */,
523     GC			/* gc */,
524     int			/* x */,
525     int			/* y */,
526     _Xconst wchar_t*	/* text */,
527     int			/* text_len */
528 );
529 
530 typedef void (*XwcDrawImageStringProc)(
531     Display*		/* display */,
532     Drawable		/* drawable */,
533     XFontSet		/* font_set */,
534     GC			/* gc */,
535     int			/* x */,
536     int			/* y */,
537     _Xconst wchar_t*	/* text */,
538     int			/* text_len */
539 );
540 
541 typedef struct {
542     XDestroyOCProc 		destroy;
543     XSetOCValuesProc 		set_values;
544     XGetOCValuesProc 		get_values;
545 
546     /* multi-byte text drawing methods */
547 
548     XmbTextEscapementProc	mb_escapement;
549     XmbTextExtentsProc		mb_extents;
550     XmbTextPerCharExtentsProc	mb_extents_per_char;
551     XmbDrawStringProc		mb_draw_string;
552     XmbDrawImageStringProc	mb_draw_image_string;
553 
554     /* wide character text drawing methods */
555 
556     XwcTextEscapementProc	wc_escapement;
557     XwcTextExtentsProc		wc_extents;
558     XwcTextPerCharExtentsProc	wc_extents_per_char;
559     XwcDrawStringProc		wc_draw_string;
560     XwcDrawImageStringProc	wc_draw_image_string;
561 
562     /* UTF-8 text drawing methods */
563 
564     XmbTextEscapementProc	utf8_escapement;
565     XmbTextExtentsProc		utf8_extents;
566     XmbTextPerCharExtentsProc	utf8_extents_per_char;
567     XmbDrawStringProc		utf8_draw_string;
568     XmbDrawImageStringProc	utf8_draw_image_string;
569 } XOCMethodsRec, *XOCMethods;
570 
571 
572 /*
573  * XOC independent data
574  */
575 
576 typedef struct {
577     XOM om;				/* XOM */
578     XOC next;				/* next XOC */
579     XlcResourceList resources;		/* xoc resources */
580     int num_resources;			/* number of xoc resources */
581     char *base_name_list;     		/* base font name list */
582     Bool om_automatic;			/* OM Automatic */
583     XOMFontInfo font_info;		/* font info */
584     XFontSetExtents font_set_extents;  	/* font set extents */
585     char *default_string;     		/* default string */
586     XOMCharSetList missing_list;	/* missing charset list */
587     XOrientation orientation;		/* orientation */
588     char *res_name;			/* resource name */
589     char *res_class;			/* resource class */
590 } XOCCoreRec, *XOCCore;
591 
592 typedef struct _XOC {
593     XOCMethods methods;
594     XOCCoreRec core;
595 } XOCRec;
596 
597 
598 /*
599  * X Input Managers are an instantiable object, so we define it, the
600  * object itself, a method list and data.
601  */
602 
603 /*
604  * an Input Manager object method list
605  */
606 typedef struct {
607     Status (*close)(
608 	XIM
609 	);
610     char* (*set_values)(
611 	XIM, XIMArg*
612 	);
613     char* (*get_values)(
614 	XIM, XIMArg*
615 	);
616     XIC (*create_ic)(
617 	XIM, XIMArg*
618 	);
619     int (*ctstombs)(
620 	XIM, char*, int, char*, int, Status *
621 	);
622     int (*ctstowcs)(
623 	XIM, char*, int, wchar_t*, int, Status *
624 	);
625     int (*ctstoutf8)(
626 	XIM, char*, int, char*, int, Status *
627 	);
628 } XIMMethodsRec, *XIMMethods;
629 
630 /*
631  * Input Manager LC independent data
632  */
633 typedef struct {
634     XLCd		lcd;			/* LC of this input method */
635     XIC			ic_chain;		/* list of ICs for this IM */
636 
637     Display *		display;               	/* display */
638     XrmDatabase 	rdb;
639     char *		res_name;
640     char *		res_class;
641 
642     XIMValuesList	*im_values_list;
643     XIMValuesList	*ic_values_list;
644     XIMStyles		*styles;
645     XIMCallback		 destroy_callback;
646     char *		im_name;		/* XIMMODIFIER name */
647     XIMResourceList	im_resources;		/* compiled IM resource list */
648     unsigned int	im_num_resources;
649     XIMResourceList	ic_resources;		/* compiled IC resource list */
650     unsigned int	ic_num_resources;
651     Bool		visible_position;
652 } XIMCoreRec, *XIMCore;
653 
654 
655 
656 /*
657  * An X Input Manager (IM).  Implementations may need to extend this data
658  * structure to accommodate additional data, state information etc.
659  */
660 typedef struct _XIM {
661     XIMMethods		methods;		/* method list of this IM */
662     XIMCoreRec		core;			/* data of this IM */
663 } XIMRec;
664 
665 
666 
667 /*
668  * X Input Contexts (IC) are an instantiable object, so we define it, the
669  * object itself, a method list and data for this object
670  */
671 
672 /*
673  * Input Context method list
674  */
675 typedef struct {
676     void (*destroy)(
677 	XIC
678 	);
679     void (*set_focus)(
680 	XIC
681 	);
682     void (*unset_focus)(
683 	XIC
684 	);
685     char* (*set_values)(
686 	XIC, XIMArg*
687 	);
688     char* (*get_values)(
689 	XIC, XIMArg*
690 	);
691     char* (*mb_reset)(
692 	XIC
693 	);
694     wchar_t* (*wc_reset)(
695 	XIC
696 	);
697     char* (*utf8_reset)(
698 	XIC
699 	);
700     int (*mb_lookup_string)(
701 	XIC, XKeyEvent*, char*, int, KeySym*, Status*
702 	);
703     int (*wc_lookup_string)(
704 	XIC, XKeyEvent*, wchar_t*, int, KeySym*, Status*
705 	);
706     int (*utf8_lookup_string)(
707 	XIC, XKeyEvent*, char*, int, KeySym*, Status*
708 	);
709 } XICMethodsRec, *XICMethods;
710 
711 
712 /*
713  * Input Context LC independent data
714  */
715 typedef struct {
716     XIM			im;			/* XIM this IC belongs too */
717     XIC			next;			/* linked list of ICs for IM */
718 
719     Window		client_window;		/* window IM can use for */
720 						/* display or subwindows */
721     XIMStyle		input_style;		/* IM's input style */
722     Window		focus_window;		/* where key events go */
723     unsigned long	filter_events;		/* event mask from IM */
724     XICCallback		geometry_callback;	/* client callback */
725     char *		res_name;
726     char *		res_class;
727 
728     XICCallback		destroy_callback;
729     XICCallback		string_conversion_callback;
730     XIMStringConversionText	 string_conversion;
731     XIMResetState	reset_state;
732     XIMHotKeyTriggers  *hotkey;
733     XIMHotKeyState	hotkey_state;
734 
735     ICPreeditAttributes	preedit_attr;		/* visuals of preedit area */
736     ICStatusAttributes	status_attr;		/* visuals of status area */
737 } XICCoreRec, *XICCore;
738 
739 
740 /*
741  * an Input Context.  Implementations may need to extend this data
742  * structure to accommodate additional data, state information etc.
743  */
744 typedef struct _XIC {
745     XICMethods		methods;		/* method list of this IC */
746     XICCoreRec		core;			/* data of this IC */
747 } XICRec;
748 
749 
750 /* If the argument 'name' is appropriate for this loader, it instantiates an
751    XLCd object with appropriate locale methods and returns it. May return
752    NULL; in this case, the remaining loaders are tried. */
753 typedef XLCd (*XLCdLoadProc)(
754     const char*		name
755 );
756 
757 _XFUNCPROTOBEGIN
758 
759 extern XLCd _XOpenLC(
760     char*		name
761 );
762 
763 extern void _XCloseLC(
764     XLCd		lcd
765 );
766 
767 extern XLCd _XlcCurrentLC (void);
768 
769 extern Bool _XlcValidModSyntax(
770     const char*		mods,
771     const char* const *	valid
772 );
773 
774 extern char *_XlcDefaultMapModifiers(
775     XLCd		lcd,
776     _Xconst char*		user_mods,
777     _Xconst char*		prog_mods
778 );
779 
780 extern void _XIMCompileResourceList(
781     XIMResourceList	/* res */,
782     unsigned int	/* num_res */
783 );
784 
785 extern void _XCopyToArg(
786     XPointer		/* src */,
787     XPointer*		/* dst */,
788     unsigned int	/* size */
789 );
790 
791 extern char ** _XParseBaseFontNameList(
792     char*		/* str */,
793     int*		/* num */
794 );
795 
796 extern XrmMethods _XrmInitParseInfo(
797 	XPointer*	statep
798 );
799 
800 extern void _XRegisterFilterByMask(
801     Display*		/* dpy */,
802     Window		/* window */,
803     unsigned long	/* event_mask */,
804     Bool (*)(
805 	     Display*	/* display */,
806 	     Window	/* window */,
807 	     XEvent*	/* event */,
808 	     XPointer	/* client_data */
809 	     )		/* filter */,
810     XPointer		/* client_data */
811 );
812 
813 extern void _XRegisterFilterByType(
814     Display*		/* dpy */,
815     Window		/* window */,
816     int			/* start_type */,
817     int			/* end_type */,
818     Bool (*)(
819 	     Display*	/* display */,
820 	     Window	/* window */,
821 	     XEvent*	/* event */,
822 	     XPointer	/* client_data */
823 	     )		/* filter */,
824     XPointer		/* client_data */
825 );
826 
827 extern void _XUnregisterFilter(
828     Display*		/* dpy */,
829     Window		/* window */,
830     Bool (*)(
831 	     Display*	/* display */,
832 	     Window	/* window */,
833 	     XEvent*	/* event */,
834 	     XPointer	/* client_data */
835 	     )		/* filter */,
836     XPointer		/* client_data */
837 );
838 
839 extern void _XlcCountVaList(
840     va_list		var,
841     int*		count_return
842 );
843 
844 extern void _XlcVaToArgList(
845     va_list		var,
846     int			count,
847     XlcArgList*		args_return
848 );
849 
850 
851 extern void _XlcCopyFromArg(
852     char *		src,
853     char *		dst,
854     int			size
855 );
856 
857 extern void _XlcCopyToArg(
858     char *		src,
859     char **		dst,
860     int			size
861 );
862 
863 extern void _XlcCompileResourceList(
864     XlcResourceList	resources,
865     int			num_resources
866 );
867 
868 extern char *_XlcGetValues(
869     XPointer		base,
870     XlcResourceList	resources,
871     int			num_resources,
872     XlcArgList		args,
873     int			num_args,
874     unsigned long	mask
875 );
876 
877 extern char *_XlcSetValues(
878     XPointer		base,
879     XlcResourceList	resources,
880     int			num_resources,
881     XlcArgList		args,
882     int			num_args,
883     unsigned long	mask
884 );
885 
886 /* documented in i18n/Framework.PS */
887 extern void _XlcInitLoader (void);
888 
889 extern void _XlcDeInitLoader (void);
890 
891 /* documented in i18n/Framework.PS */
892 /* Returns True on success, False on failure. */
893 extern Bool _XlcAddLoader(
894     XLCdLoadProc	proc,
895     XlcPosition		position
896 );
897 
898 /* documented in i18n/Framework.PS */
899 extern void _XlcRemoveLoader(
900     XLCdLoadProc	proc
901 );
902 
903 /* Registers UTF-8 converters for a non-UTF-8 locale. */
904 extern void _XlcAddUtf8Converters(
905     XLCd		lcd
906 );
907 
908 /* Registers UTF-8 converters for a UTF-8 locale. */
909 extern void _XlcAddUtf8LocaleConverters(
910     XLCd		lcd
911 );
912 
913 /* Registers GB18030 converters for a GB18030 locale. */
914 extern void _XlcAddGB18030LocaleConverters(
915     XLCd		lcd
916 );
917 
918 /* The default locale loader. Assumes an ASCII encoding. */
919 extern XLCd _XlcDefaultLoader(
920     const char*		name
921 );
922 
923 /* The generic locale loader. Suitable for all encodings except UTF-8.
924    Uses an XLC_LOCALE configuration file. */
925 extern XLCd _XlcGenericLoader(
926     const char*		name
927 );
928 
929 /* The UTF-8 locale loader. Suitable for UTF-8 encoding.
930    Uses an XLC_LOCALE configuration file. */
931 extern XLCd _XlcUtf8Loader(
932     const char*		name
933 );
934 
935 extern XLCd _XlcDynamicLoad(
936     const char*		name
937 );
938 
939 /* The old dynamic loader. */
940 extern XLCd _XlcDynamicLoader(
941     const char*		name
942 );
943 
944 extern Bool _XInitDefaultIM(
945     XLCd		lcd
946 );
947 
948 extern Bool _XInitDefaultOM(
949     XLCd		lcd
950 );
951 
952 extern Bool _XInitDynamicIM(
953     XLCd		lcd
954 );
955 
956 extern Bool _XInitDynamicOM(
957     XLCd		lcd
958 );
959 
960 _XFUNCPROTOEND
961 
962 #endif /* !_XP_PRINT_SERVER_ */
963 
964 #endif	/* _XLCINT_H_ */
965