|
Packit Service |
1d8f1c |
/******************************************************************
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
Copyright 1994, 1995 by Sun Microsystems, Inc.
|
|
Packit Service |
1d8f1c |
Copyright 1993, 1994 by Hewlett-Packard Company
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
Permission to use, copy, modify, distribute, and sell this software
|
|
Packit Service |
1d8f1c |
and its documentation for any purpose is hereby granted without fee,
|
|
Packit Service |
1d8f1c |
provided that the above copyright notice appear in all copies and
|
|
Packit Service |
1d8f1c |
that both that copyright notice and this permission notice appear
|
|
Packit Service |
1d8f1c |
in supporting documentation, and that the name of Sun Microsystems, Inc.
|
|
Packit Service |
1d8f1c |
and Hewlett-Packard not be used in advertising or publicity pertaining to
|
|
Packit Service |
1d8f1c |
distribution of the software without specific, written prior permission.
|
|
Packit Service |
1d8f1c |
Sun Microsystems, Inc. and Hewlett-Packard make no representations about
|
|
Packit Service |
1d8f1c |
the suitability of this software for any purpose. It is provided "as is"
|
|
Packit Service |
1d8f1c |
without express or implied warranty.
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL
|
|
Packit Service |
1d8f1c |
WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
|
|
Packit Service |
1d8f1c |
WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
|
Packit Service |
1d8f1c |
SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY
|
|
Packit Service |
1d8f1c |
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
|
Packit Service |
1d8f1c |
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
|
Packit Service |
1d8f1c |
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
Packit Service |
1d8f1c |
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc.
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
This version tidied and debugged by Steve Underwood May 1999
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
******************************************************************/
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#include <X11/Xlib.h>
|
|
Packit Service |
1d8f1c |
#include "IMdkit.h"
|
|
Packit Service |
1d8f1c |
#include "Xi18n.h"
|
|
Packit Service |
1d8f1c |
#include "FrameMgr.h"
|
|
Packit Service |
1d8f1c |
#include "XimFunc.h"
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nGeometryCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec geometry_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMGeometryCBStruct *geometry_CB =
|
|
Packit Service |
1d8f1c |
(IMGeometryCBStruct *) &call_data->geometry_callback;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (geometry_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, geometry_CB->icid);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_GEOMETRY,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* XIM_GEOMETRY is an asyncronous protocol,
|
|
Packit Service |
1d8f1c |
so return immediately. */
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nPreeditStartCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec preedit_start_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMPreeditCBStruct *preedit_CB =
|
|
Packit Service |
1d8f1c |
(IMPreeditCBStruct*) &call_data->preedit_callback;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (preedit_start_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage(ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, preedit_CB->icid);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_PREEDIT_START,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nPreeditDrawCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec preedit_draw_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMPreeditCBStruct *preedit_CB =
|
|
Packit Service |
1d8f1c |
(IMPreeditCBStruct *) &call_data->preedit_callback;
|
|
Packit Service |
1d8f1c |
XIMPreeditDrawCallbackStruct *draw =
|
|
Packit Service |
1d8f1c |
(XIMPreeditDrawCallbackStruct *) &preedit_CB->todo.draw;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
register int feedback_count;
|
|
Packit Service |
1d8f1c |
register int i;
|
|
Packit Service |
1d8f1c |
BITMASK32 status = 0x0;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (draw->text->length == 0)
|
|
Packit Service |
1d8f1c |
status = 0x00000001;
|
|
Packit Service |
1d8f1c |
else if (draw->text->feedback[0] == 0)
|
|
Packit Service |
1d8f1c |
status = 0x00000002;
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (preedit_draw_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* set length of preedit string */
|
|
Packit Service |
1d8f1c |
FrameMgrSetSize (fm, draw->text->length);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* set iteration count for list of feedback */
|
|
Packit Service |
1d8f1c |
for (i = 0; draw->text->feedback[i] != 0; i++)
|
|
Packit Service |
1d8f1c |
;
|
|
Packit Service |
1d8f1c |
/*endfor*/
|
|
Packit Service |
1d8f1c |
feedback_count = i;
|
|
Packit Service |
1d8f1c |
FrameMgrSetIterCount (fm, feedback_count);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, preedit_CB->icid);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->caret);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->chg_first);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->chg_length);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, status);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->text->length);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->text->string);
|
|
Packit Service |
1d8f1c |
for (i = 0; i < feedback_count; i++)
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->text->feedback[i]);
|
|
Packit Service |
1d8f1c |
/*endfor*/
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_PREEDIT_DRAW,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* XIM_PREEDIT_DRAW is an asyncronous protocol, so return immediately. */
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nPreeditCaretCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec preedit_caret_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMPreeditCBStruct *preedit_CB =
|
|
Packit Service |
1d8f1c |
(IMPreeditCBStruct*) &call_data->preedit_callback;
|
|
Packit Service |
1d8f1c |
XIMPreeditCaretCallbackStruct *caret =
|
|
Packit Service |
1d8f1c |
(XIMPreeditCaretCallbackStruct *) &preedit_CB->todo.caret;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (preedit_caret_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, preedit_CB->icid);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, caret->position);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, caret->direction);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, caret->style);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_PREEDIT_CARET,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nPreeditDoneCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec preedit_done_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMPreeditCBStruct *preedit_CB =
|
|
Packit Service |
1d8f1c |
(IMPreeditCBStruct *) &call_data->preedit_callback;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (preedit_done_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, preedit_CB->icid);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_PREEDIT_DONE,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* XIM_PREEDIT_DONE is an asyncronous protocol, so return immediately. */
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nStatusStartCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec status_start_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMStatusCBStruct *status_CB =
|
|
Packit Service |
1d8f1c |
(IMStatusCBStruct*) &call_data->status_callback;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (status_start_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, status_CB->icid);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_STATUS_START,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* XIM_STATUS_START is an asyncronous protocol, so return immediately. */
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm = (FrameMgr)0;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec status_draw_text_fr[];
|
|
Packit Service |
1d8f1c |
extern XimFrameRec status_draw_bitmap_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size = 0;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMStatusCBStruct *status_CB =
|
|
Packit Service |
1d8f1c |
(IMStatusCBStruct *) &call_data->status_callback;
|
|
Packit Service |
1d8f1c |
XIMStatusDrawCallbackStruct *draw =
|
|
Packit Service |
1d8f1c |
(XIMStatusDrawCallbackStruct *) &status_CB->todo.draw;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
register int feedback_count;
|
|
Packit Service |
1d8f1c |
register int i;
|
|
Packit Service |
1d8f1c |
BITMASK32 status = 0x0;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
switch (draw->type)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
case XIMTextType:
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (status_draw_text_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (draw->data.text->length == 0)
|
|
Packit Service |
1d8f1c |
status = 0x00000001;
|
|
Packit Service |
1d8f1c |
else if (draw->data.text->feedback[0] == 0)
|
|
Packit Service |
1d8f1c |
status = 0x00000002;
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* set length of status string */
|
|
Packit Service |
1d8f1c |
FrameMgrSetSize(fm, draw->data.text->length);
|
|
Packit Service |
1d8f1c |
/* set iteration count for list of feedback */
|
|
Packit Service |
1d8f1c |
for (i = 0; draw->data.text->feedback[i] != 0; i++)
|
|
Packit Service |
1d8f1c |
;
|
|
Packit Service |
1d8f1c |
/*endfor*/
|
|
Packit Service |
1d8f1c |
feedback_count = i;
|
|
Packit Service |
1d8f1c |
FrameMgrSetIterCount (fm, feedback_count);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, status_CB->icid);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->type);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, status);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->data.text->length);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->data.text->string);
|
|
Packit Service |
1d8f1c |
for (i = 0; i < feedback_count; i++)
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->data.text->feedback[i]);
|
|
Packit Service |
1d8f1c |
/*endfor*/
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
case XIMBitmapType:
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (status_draw_bitmap_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, status_CB->icid);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, draw->data.bitmap);
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endswitch*/
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_STATUS_DRAW,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* XIM_STATUS_DRAW is an asyncronous protocol, so return immediately. */
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nStatusDoneCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec status_done_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMStatusCBStruct *status_CB =
|
|
Packit Service |
1d8f1c |
(IMStatusCBStruct *) &call_data->status_callback;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (status_done_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, status_CB->icid);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_STATUS_DONE,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* XIM_STATUS_DONE is an asyncronous protocol, so return immediately. */
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
int _Xi18nStringConversionCallback (XIMS ims, IMProtocol *call_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
Xi18n i18n_core = ims->protocol;
|
|
Packit Service |
1d8f1c |
FrameMgr fm;
|
|
Packit Service |
1d8f1c |
extern XimFrameRec str_conversion_fr[];
|
|
Packit Service |
1d8f1c |
register int total_size;
|
|
Packit Service |
1d8f1c |
unsigned char *reply = NULL;
|
|
Packit Service |
1d8f1c |
IMStrConvCBStruct *call_back =
|
|
Packit Service |
1d8f1c |
(IMStrConvCBStruct *) &call_data->strconv_callback;
|
|
Packit Service |
1d8f1c |
XIMStringConversionCallbackStruct *strconv =
|
|
Packit Service |
1d8f1c |
(XIMStringConversionCallbackStruct *) &call_back->strconv;
|
|
Packit Service |
1d8f1c |
CARD16 connect_id = call_data->any.connect_id;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
fm = FrameMgrInit (str_conversion_fr,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
_Xi18nNeedSwap (i18n_core, connect_id));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
total_size = FrameMgrGetTotalSize (fm);
|
|
Packit Service |
1d8f1c |
reply = (unsigned char *) malloc (total_size);
|
|
Packit Service |
1d8f1c |
if (!reply)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
memset (reply, 0, total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrSetBuffer (fm, reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, connect_id);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, call_back->icid);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, strconv->position);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, strconv->direction);
|
|
Packit Service |
1d8f1c |
FrameMgrPutToken (fm, strconv->operation);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_Xi18nSendMessage (ims, connect_id,
|
|
Packit Service |
1d8f1c |
XIM_STR_CONVERSION,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
reply,
|
|
Packit Service |
1d8f1c |
total_size);
|
|
Packit Service |
1d8f1c |
FrameMgrFree (fm);
|
|
Packit Service |
1d8f1c |
XFree (reply);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* XIM_STR_CONVERSION is a syncronous protocol,
|
|
Packit Service |
1d8f1c |
so should wait here for XIM_STR_CONVERSION_REPLY. */
|
|
Packit Service |
1d8f1c |
if (i18n_core->methods.wait (ims,
|
|
Packit Service |
1d8f1c |
connect_id,
|
|
Packit Service |
1d8f1c |
XIM_STR_CONVERSION_REPLY,
|
|
Packit Service |
1d8f1c |
0) == False)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return False;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/*endif*/
|
|
Packit Service |
1d8f1c |
return True;
|
|
Packit Service |
1d8f1c |
}
|