⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i18npthdr.c

📁 手写识别Chinput3.0.2源代码,可以在linux下开发手写板程序
💻 C
📖 第 1 页 / 共 4 页
字号:
    /*endif*/    FrameMgrFree (fm);    XFree (reply);}static INT16 ChooseEncoding (Xi18n i18n_core,                             IMEncodingNegotiationStruct *enc_nego){    Xi18nAddressRec *address = (Xi18nAddressRec *) & i18n_core->address;    XIMEncodings *p;    int i, j;    int enc_index;    p = (XIMEncodings *) &address->encoding_list;    for (i = 0;  i < (int) p->count_encodings;  i++)    {        for (j = 0;  j < (int) enc_nego->encoding_number;  j++)        {            if (strcmp (p->supported_encodings[i],                        enc_nego->encoding[j].name) == 0)            {                enc_index = j;                break;            }            /*endif*/        }        /*endfor*/    }    /*endfor*/    return (INT16) enc_index;#if 0    return (INT16) XIM_Default_Encoding_IDX;#endif}static void EncodingNegotiatonMessageProc (XIMS ims,                                           IMProtocol *call_data,                                           unsigned char *p){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    FmStatus status;    CARD16 byte_length;    extern XimFrameRec encoding_negotiation_fr[];    extern XimFrameRec encoding_negotiation_reply_fr[];    register int i, total_size;    unsigned char *reply = NULL;    IMEncodingNegotiationStruct *enc_nego =        (IMEncodingNegotiationStruct *) &call_data->encodingnego;    CARD16 connect_id = call_data->any.connect_id;    CARD16 input_method_ID;    fm = FrameMgrInit (encoding_negotiation_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    FrameMgrGetToken (fm, input_method_ID);    /* get ENCODING STR field */    FrameMgrGetToken (fm, byte_length);    if (byte_length > 0)    {        enc_nego->encoding = (XIMStr *) malloc (sizeof (XIMStr)*10);        memset (enc_nego->encoding, 0, sizeof (XIMStr)*10);        i = 0;        while (FrameMgrIsIterLoopEnd (fm, &status) == False)        {            char *name;            int str_length;                        FrameMgrGetToken (fm, str_length);            FrameMgrSetSize (fm, str_length);            enc_nego->encoding[i].length = str_length;            FrameMgrGetToken (fm, name);            enc_nego->encoding[i].name = malloc (str_length + 1);            strncpy (enc_nego->encoding[i].name, name, str_length);            enc_nego->encoding[i].name[str_length] = '\0';            i++;        }        /*endwhile*/        enc_nego->encoding_number = i;    }    /*endif*/    /* get ENCODING INFO field */    FrameMgrGetToken (fm, byte_length);    if (byte_length > 0)    {        enc_nego->encodinginfo = (XIMStr *) malloc (sizeof (XIMStr)*10);        memset (enc_nego->encoding, 0, sizeof (XIMStr)*10);        i = 0;        while (FrameMgrIsIterLoopEnd (fm, &status) == False)        {            char *name;            int str_length;                        FrameMgrGetToken (fm, str_length);            FrameMgrSetSize (fm, str_length);            enc_nego->encodinginfo[i].length = str_length;            FrameMgrGetToken (fm, name);            enc_nego->encodinginfo[i].name = malloc (str_length + 1);            strncpy (enc_nego->encodinginfo[i].name, name, str_length);            enc_nego->encodinginfo[i].name[str_length] = '\0';            i++;        }        /*endwhile*/        enc_nego->encoding_info_number = i;    }    /*endif*/    enc_nego->enc_index = ChooseEncoding (i18n_core, enc_nego);    enc_nego->category = 0;#ifdef PROTOCOL_RICH    if (i18n_core->address.improto)    {        if (!(i18n_core->address.improto(ims, call_data)))            return;        /*endif*/    }    /*endif*/#endif  /* PROTOCOL_RICH */    FrameMgrFree (fm);    fm = FrameMgrInit (encoding_negotiation_reply_fr,                       NULL,                       _Xi18nNeedSwap (i18n_core, connect_id));    total_size = FrameMgrGetTotalSize (fm);    reply = (unsigned char *) malloc (total_size);    if (!reply)    {        _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0);        return;    }    /*endif*/    memset (reply, 0, total_size);    FrameMgrSetBuffer (fm, reply);    FrameMgrPutToken (fm, input_method_ID);    FrameMgrPutToken (fm, enc_nego->category);    FrameMgrPutToken (fm, enc_nego->enc_index);    _Xi18nSendMessage (ims,                       connect_id,                       XIM_ENCODING_NEGOTIATION_REPLY,                       0,                       reply,                       total_size);    XFree (reply);    /* free data for encoding list */    if (enc_nego->encoding)    {        for (i = 0;  i < (int) enc_nego->encoding_number;  i++)            XFree (enc_nego->encoding[i].name);        /*endfor*/        XFree (enc_nego->encoding);    }    /*endif*/    if (enc_nego->encodinginfo)    {        for (i = 0;  i < (int) enc_nego->encoding_info_number;  i++)            XFree (enc_nego->encodinginfo[i].name);        /*endfor*/        XFree (enc_nego->encodinginfo);    }    /*endif*/    FrameMgrFree (fm);}void PreeditStartReplyMessageProc (XIMS ims,                                   IMProtocol *call_data,                                   unsigned char *p){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    extern XimFrameRec preedit_start_reply_fr[];    IMPreeditCBStruct *preedit_CB =        (IMPreeditCBStruct *) &call_data->preedit_callback;    CARD16 connect_id = call_data->any.connect_id;    CARD16 input_method_ID;    fm = FrameMgrInit (preedit_start_reply_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    /* get data */    FrameMgrGetToken (fm, input_method_ID);    FrameMgrGetToken (fm, preedit_CB->icid);    FrameMgrGetToken (fm, preedit_CB->todo.return_value);    FrameMgrFree (fm);    if (i18n_core->address.improto)    {        if (!(i18n_core->address.improto (ims, call_data)))            return;        /*endif*/    }    /*endif*/}void PreeditCaretReplyMessageProc (XIMS ims,                                   IMProtocol *call_data,                                   unsigned char *p){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    extern XimFrameRec preedit_caret_reply_fr[];    IMPreeditCBStruct *preedit_CB =        (IMPreeditCBStruct *) &call_data->preedit_callback;    XIMPreeditCaretCallbackStruct *caret =        (XIMPreeditCaretCallbackStruct *) & preedit_CB->todo.caret;    CARD16 connect_id = call_data->any.connect_id;    CARD16 input_method_ID;    fm = FrameMgrInit (preedit_caret_reply_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    /* get data */    FrameMgrGetToken (fm, input_method_ID);    FrameMgrGetToken (fm, preedit_CB->icid);    FrameMgrGetToken (fm, caret->position);    FrameMgrFree (fm);    if (i18n_core->address.improto)    {        if (!(i18n_core->address.improto(ims, call_data)))            return;        /*endif*/    }    /*endif*/}void StrConvReplyMessageProc (XIMS ims,                              IMProtocol *call_data,                              unsigned char *p){    return;}static void AddQueue (Xi18nClient *client, unsigned char *p){    XIMPending *new;    XIMPending *last;    if ((new = (XIMPending *) malloc (sizeof (XIMPending))) == NULL)        return;    /*endif*/    new->p = p;    new->next = (XIMPending *) NULL;    if (!client->pending)    {        client->pending = new;    }    else    {        for (last = client->pending;  last->next;  last = last->next)            ;        /*endfor*/        last->next = new;    }    /*endif*/    return;}static void ProcessQueue (XIMS ims, CARD16 connect_id){    Xi18n i18n_core = ims->protocol;    Xi18nClient *client = (Xi18nClient *) _Xi18nFindClient (i18n_core,                                                            connect_id);    while (client->sync == False  &&  client->pending)    {        XimProtoHdr *hdr = (XimProtoHdr *) client->pending->p;        unsigned char *p1 = (unsigned char *) (hdr + 1);        IMProtocol call_data;        call_data.major_code = hdr->major_opcode;        call_data.any.minor_code = hdr->minor_opcode;        call_data.any.connect_id = connect_id;        switch (hdr->major_opcode)        {        case XIM_FORWARD_EVENT:            ForwardEventMessageProc(ims, &call_data, p1);            break;        }        /*endswitch*/        XFree (hdr);        {            XIMPending *old = client->pending;            client->pending = old->next;            XFree (old);        }    }    /*endwhile*/    return;}void _Xi18nMessageHandler (XIMS ims,                           CARD16 connect_id,                           unsigned char *p,                           Bool *delete){    XimProtoHdr	*hdr = (XimProtoHdr *)p;    unsigned char *p1 = (unsigned char *)(hdr + 1);    IMProtocol call_data;    Xi18n i18n_core = ims->protocol;    Xi18nClient *client;    client = (Xi18nClient *) _Xi18nFindClient (i18n_core, connect_id);    if (hdr == (XimProtoHdr *) NULL)        return;    /*endif*/        memset (&call_data, 0, sizeof(IMProtocol));    call_data.major_code = hdr->major_opcode;    call_data.any.minor_code = hdr->minor_opcode;    call_data.any.connect_id = connect_id;    switch (call_data.major_code)    {    case XIM_CONNECT:        ConnectMessageProc (ims, &call_data, p1);        break;    case XIM_DISCONNECT:        DisConnectMessageProc (ims, &call_data);        break;    case XIM_OPEN:        OpenMessageProc (ims, &call_data, p1);        break;    case XIM_CLOSE:        CloseMessageProc (ims, &call_data, p1);        break;    case XIM_QUERY_EXTENSION:        QueryExtensionMessageProc (ims, &call_data, p1);        break;    case XIM_GET_IM_VALUES:        GetIMValuesMessageProc (ims, &call_data, p1);        break;    case XIM_CREATE_IC:        CreateICMessageProc (ims, &call_data, p1);        break;    case XIM_SET_IC_VALUES:        SetICValuesMessageProc (ims, &call_data, p1);        break;    case XIM_GET_IC_VALUES:        GetICValuesMessageProc (ims, &call_data, p1);        break;    case XIM_SET_IC_FOCUS:        SetICFocusMessageProc (ims, &call_data, p1);        break;    case XIM_UNSET_IC_FOCUS:        UnsetICFocusMessageProc (ims, &call_data, p1);        break;    case XIM_DESTROY_IC:        DestroyICMessageProc (ims, &call_data, p1);        break;    case XIM_RESET_IC:        ResetICMessageProc (ims, &call_data, p1);        break;    case XIM_FORWARD_EVENT:        if (client->sync == True)        {            AddQueue (client, p);            *delete = False;        }        else        {            ForwardEventMessageProc (ims, &call_data, p1);        }        break;    case XIM_EXTENSION:        ExtensionMessageProc (ims, &call_data, p1);        break;    case XIM_SYNC:        break;    case XIM_SYNC_REPLY:        SyncReplyMessageProc (ims, &call_data, p1);        ProcessQueue (ims, connect_id);        break;    case XIM_TRIGGER_NOTIFY:        TriggerNotifyMessageProc (ims, &call_data, p1);        break;    case XIM_ENCODING_NEGOTIATION:        EncodingNegotiatonMessageProc (ims, &call_data, p1);        break;    case XIM_PREEDIT_START_REPLY:        PreeditStartReplyMessageProc (ims, &call_data, p1);        break;    case XIM_PREEDIT_CARET_REPLY:        PreeditCaretReplyMessageProc (ims, &call_data, p1);        break;    case XIM_STR_CONVERSION_REPLY:        StrConvReplyMessageProc (ims, &call_data, p1);        break;    }    /*endswitch*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -