1 /******************************************************************
3 Copyright 1994, 1995 by Sun Microsystems, Inc.
4 Copyright 1993, 1994 by Hewlett-Packard Company
6 Permission to use, copy, modify, distribute, and sell this software
7 and its documentation for any purpose is hereby granted without fee,
8 provided that the above copyright notice appear in all copies and
9 that both that copyright notice and this permission notice appear
10 in supporting documentation, and that the name of Sun Microsystems, Inc.
11 and Hewlett-Packard not be used in advertising or publicity pertaining to
12 distribution of the software without specific, written prior permission.
13 Sun Microsystems, Inc. and Hewlett-Packard make no representations about
14 the suitability of this software for any purpose. It is provided "as is"
15 without express or implied warranty.
17 SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL
18 WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
20 SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY
21 SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
22 RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
23 CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
24 IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
26 Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc.
28 This version tidied and debugged by Steve Underwood May 1999
30 ******************************************************************/
38 int _Xi18nGeometryCallback (XIMS ims, IMProtocol *call_data)
40 Xi18n i18n_core = ims->protocol;
42 extern XimFrameRec geometry_fr[];
43 register int total_size;
44 unsigned char *reply = NULL;
45 IMGeometryCBStruct *geometry_CB =
46 (IMGeometryCBStruct *) &call_data->geometry_callback;
47 CARD16 connect_id = call_data->any.connect_id;
49 fm = FrameMgrInit (geometry_fr,
51 _Xi18nNeedSwap (i18n_core, connect_id));
53 total_size = FrameMgrGetTotalSize (fm);
54 reply = (unsigned char *) malloc (total_size);
57 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
61 memset (reply, 0, total_size);
62 FrameMgrSetBuffer (fm, reply);
64 FrameMgrPutToken (fm, connect_id);
65 FrameMgrPutToken (fm, geometry_CB->icid);
67 _Xi18nSendMessage (ims,
76 /* XIM_GEOMETRY is an asyncronous protocol,
77 so return immediately. */
81 int _Xi18nPreeditStartCallback (XIMS ims, IMProtocol *call_data)
83 Xi18n i18n_core = ims->protocol;
85 extern XimFrameRec preedit_start_fr[];
86 register int total_size;
87 unsigned char *reply = NULL;
88 IMPreeditCBStruct *preedit_CB =
89 (IMPreeditCBStruct*) &call_data->preedit_callback;
90 CARD16 connect_id = call_data->any.connect_id;
92 fm = FrameMgrInit (preedit_start_fr,
94 _Xi18nNeedSwap (i18n_core, connect_id));
95 total_size = FrameMgrGetTotalSize (fm);
96 reply = (unsigned char *) malloc (total_size);
99 _Xi18nSendMessage(ims, connect_id, XIM_ERROR, 0, 0, 0);
103 memset (reply, 0, total_size);
104 FrameMgrSetBuffer (fm, reply);
106 FrameMgrPutToken (fm, connect_id);
107 FrameMgrPutToken (fm, preedit_CB->icid);
109 _Xi18nSendMessage (ims,
121 int _Xi18nPreeditDrawCallback (XIMS ims, IMProtocol *call_data)
123 Xi18n i18n_core = ims->protocol;
125 extern XimFrameRec preedit_draw_fr[];
126 register int total_size;
127 unsigned char *reply = NULL;
128 IMPreeditCBStruct *preedit_CB =
129 (IMPreeditCBStruct *) &call_data->preedit_callback;
130 XIMPreeditDrawCallbackStruct *draw =
131 (XIMPreeditDrawCallbackStruct *) &preedit_CB->todo.draw;
132 CARD16 connect_id = call_data->any.connect_id;
133 register int feedback_count;
135 BITMASK32 status = 0x0;
137 if (draw->text->length == 0)
139 else if (draw->text->feedback[0] == 0)
143 fm = FrameMgrInit (preedit_draw_fr,
145 _Xi18nNeedSwap (i18n_core, connect_id));
147 /* set length of preedit string */
148 FrameMgrSetSize (fm, draw->text->length);
150 /* set iteration count for list of feedback */
151 for (i = 0; draw->text->feedback[i] != 0; i++)
155 FrameMgrSetIterCount (fm, feedback_count);
157 total_size = FrameMgrGetTotalSize (fm);
158 reply = (unsigned char *) malloc (total_size);
161 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
165 memset (reply, 0, total_size);
166 FrameMgrSetBuffer (fm, reply);
168 FrameMgrPutToken (fm, connect_id);
169 FrameMgrPutToken (fm, preedit_CB->icid);
170 FrameMgrPutToken (fm, draw->caret);
171 FrameMgrPutToken (fm, draw->chg_first);
172 FrameMgrPutToken (fm, draw->chg_length);
173 FrameMgrPutToken (fm, status);
174 FrameMgrPutToken (fm, draw->text->length);
175 FrameMgrPutToken (fm, draw->text->string);
176 for (i = 0; i < feedback_count; i++)
177 FrameMgrPutToken (fm, draw->text->feedback[i]);
180 _Xi18nSendMessage (ims,
189 /* XIM_PREEDIT_DRAW is an asyncronous protocol, so return immediately. */
193 int _Xi18nPreeditCaretCallback (XIMS ims, IMProtocol *call_data)
195 Xi18n i18n_core = ims->protocol;
197 extern XimFrameRec preedit_caret_fr[];
198 register int total_size;
199 unsigned char *reply = NULL;
200 IMPreeditCBStruct *preedit_CB =
201 (IMPreeditCBStruct*) &call_data->preedit_callback;
202 XIMPreeditCaretCallbackStruct *caret =
203 (XIMPreeditCaretCallbackStruct *) &preedit_CB->todo.caret;
204 CARD16 connect_id = call_data->any.connect_id;
206 fm = FrameMgrInit (preedit_caret_fr,
208 _Xi18nNeedSwap (i18n_core, connect_id));
210 total_size = FrameMgrGetTotalSize (fm);
211 reply = (unsigned char *) malloc (total_size);
214 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
218 memset (reply, 0, total_size);
219 FrameMgrSetBuffer (fm, reply);
221 FrameMgrPutToken (fm, connect_id);
222 FrameMgrPutToken (fm, preedit_CB->icid);
223 FrameMgrPutToken (fm, caret->position);
224 FrameMgrPutToken (fm, caret->direction);
225 FrameMgrPutToken (fm, caret->style);
227 _Xi18nSendMessage (ims,
239 int _Xi18nPreeditDoneCallback (XIMS ims, IMProtocol *call_data)
241 Xi18n i18n_core = ims->protocol;
243 extern XimFrameRec preedit_done_fr[];
244 register int total_size;
245 unsigned char *reply = NULL;
246 IMPreeditCBStruct *preedit_CB =
247 (IMPreeditCBStruct *) &call_data->preedit_callback;
248 CARD16 connect_id = call_data->any.connect_id;
250 fm = FrameMgrInit (preedit_done_fr,
252 _Xi18nNeedSwap (i18n_core, connect_id));
254 total_size = FrameMgrGetTotalSize (fm);
255 reply = (unsigned char *) malloc (total_size);
258 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
262 memset (reply, 0, total_size);
263 FrameMgrSetBuffer (fm, reply);
265 FrameMgrPutToken (fm, connect_id);
266 FrameMgrPutToken (fm, preedit_CB->icid);
268 _Xi18nSendMessage (ims,
277 /* XIM_PREEDIT_DONE is an asyncronous protocol, so return immediately. */
281 int _Xi18nStatusStartCallback (XIMS ims, IMProtocol *call_data)
283 Xi18n i18n_core = ims->protocol;
285 extern XimFrameRec status_start_fr[];
286 register int total_size;
287 unsigned char *reply = NULL;
288 IMStatusCBStruct *status_CB =
289 (IMStatusCBStruct*) &call_data->status_callback;
290 CARD16 connect_id = call_data->any.connect_id;
292 fm = FrameMgrInit (status_start_fr,
294 _Xi18nNeedSwap (i18n_core, connect_id));
295 total_size = FrameMgrGetTotalSize (fm);
296 reply = (unsigned char *) malloc (total_size);
299 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
303 memset (reply, 0, total_size);
304 FrameMgrSetBuffer (fm, reply);
306 FrameMgrPutToken (fm, connect_id);
307 FrameMgrPutToken (fm, status_CB->icid);
309 _Xi18nSendMessage (ims,
318 /* XIM_STATUS_START is an asyncronous protocol, so return immediately. */
322 int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data)
324 Xi18n i18n_core = ims->protocol;
325 FrameMgr fm = (FrameMgr)0;
326 extern XimFrameRec status_draw_text_fr[];
327 extern XimFrameRec status_draw_bitmap_fr[];
328 register int total_size = 0;
329 unsigned char *reply = NULL;
330 IMStatusCBStruct *status_CB =
331 (IMStatusCBStruct *) &call_data->status_callback;
332 XIMStatusDrawCallbackStruct *draw =
333 (XIMStatusDrawCallbackStruct *) &status_CB->todo.draw;
334 CARD16 connect_id = call_data->any.connect_id;
335 register int feedback_count;
337 BITMASK32 status = 0x0;
342 fm = FrameMgrInit (status_draw_text_fr,
344 _Xi18nNeedSwap (i18n_core, connect_id));
346 if (draw->data.text->length == 0)
348 else if (draw->data.text->feedback[0] == 0)
352 /* set length of status string */
353 FrameMgrSetSize(fm, draw->data.text->length);
354 /* set iteration count for list of feedback */
355 for (i = 0; draw->data.text->feedback[i] != 0; i++)
359 FrameMgrSetIterCount (fm, feedback_count);
361 total_size = FrameMgrGetTotalSize (fm);
362 reply = (unsigned char *) malloc (total_size);
365 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
369 memset (reply, 0, total_size);
370 FrameMgrSetBuffer (fm, reply);
372 FrameMgrPutToken (fm, connect_id);
373 FrameMgrPutToken (fm, status_CB->icid);
374 FrameMgrPutToken (fm, draw->type);
375 FrameMgrPutToken (fm, status);
376 FrameMgrPutToken (fm, draw->data.text->length);
377 FrameMgrPutToken (fm, draw->data.text->string);
378 for (i = 0; i < feedback_count; i++)
379 FrameMgrPutToken (fm, draw->data.text->feedback[i]);
384 fm = FrameMgrInit (status_draw_bitmap_fr,
386 _Xi18nNeedSwap (i18n_core, connect_id));
388 total_size = FrameMgrGetTotalSize (fm);
389 reply = (unsigned char *) malloc (total_size);
392 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
396 memset (reply, 0, total_size);
397 FrameMgrSetBuffer (fm, reply);
399 FrameMgrPutToken (fm, connect_id);
400 FrameMgrPutToken (fm, status_CB->icid);
401 FrameMgrPutToken (fm, draw->data.bitmap);
405 _Xi18nSendMessage (ims,
414 /* XIM_STATUS_DRAW is an asyncronous protocol, so return immediately. */
418 int _Xi18nStatusDoneCallback (XIMS ims, IMProtocol *call_data)
420 Xi18n i18n_core = ims->protocol;
422 extern XimFrameRec status_done_fr[];
423 register int total_size;
424 unsigned char *reply = NULL;
425 IMStatusCBStruct *status_CB =
426 (IMStatusCBStruct *) &call_data->status_callback;
427 CARD16 connect_id = call_data->any.connect_id;
429 fm = FrameMgrInit (status_done_fr,
431 _Xi18nNeedSwap (i18n_core, connect_id));
433 total_size = FrameMgrGetTotalSize (fm);
434 reply = (unsigned char *) malloc (total_size);
437 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
441 memset (reply, 0, total_size);
442 FrameMgrSetBuffer (fm, reply);
444 FrameMgrPutToken (fm, connect_id);
445 FrameMgrPutToken (fm, status_CB->icid);
447 _Xi18nSendMessage (ims,
456 /* XIM_STATUS_DONE is an asyncronous protocol, so return immediately. */
460 int _Xi18nStringConversionCallback (XIMS ims, IMProtocol *call_data)
462 Xi18n i18n_core = ims->protocol;
464 extern XimFrameRec str_conversion_fr[];
465 register int total_size;
466 unsigned char *reply = NULL;
467 IMStrConvCBStruct *call_back =
468 (IMStrConvCBStruct *) &call_data->strconv_callback;
469 XIMStringConversionCallbackStruct *strconv =
470 (XIMStringConversionCallbackStruct *) &call_back->strconv;
471 CARD16 connect_id = call_data->any.connect_id;
473 fm = FrameMgrInit (str_conversion_fr,
475 _Xi18nNeedSwap (i18n_core, connect_id));
477 total_size = FrameMgrGetTotalSize (fm);
478 reply = (unsigned char *) malloc (total_size);
481 _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
485 memset (reply, 0, total_size);
486 FrameMgrSetBuffer (fm, reply);
488 FrameMgrPutToken (fm, connect_id);
489 FrameMgrPutToken (fm, call_back->icid);
490 FrameMgrPutToken (fm, strconv->position);
491 FrameMgrPutToken (fm, strconv->direction);
492 FrameMgrPutToken (fm, strconv->operation);
494 _Xi18nSendMessage (ims, connect_id,
502 /* XIM_STR_CONVERSION is a syncronous protocol,
503 so should wait here for XIM_STR_CONVERSION_REPLY. */
504 if (i18n_core->methods.wait (ims,
506 XIM_STR_CONVERSION_REPLY,