Blame util/IMdkit/i18nClbk.c

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