Blame util/IMdkit/i18nClbk.c

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
}