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,