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

📄 i18nic.c

📁 手写识别Chinput3.0.2源代码,可以在linux下开发手写板程序
💻 C
📖 第 1 页 / 共 3 页
字号:
                /* another nested list.. possible? */            }            /*endif*/        }        else        {            ReadICValue (i18n_core,                         attrib_list[i].attribute_id,                         attrib_list[i].value_length,                         attrib_list[i].value,                         &ic_attr[ic_num],                         &number,                         _Xi18nNeedSwap (i18n_core, connect_id));            ic_num += number;        }        /*endif*/    }    /*endfor*/    for (i = 0;  i < attrib_num;  i++)        XFree (attrib_list[i].value);    /*endfor*/    XFree (attrib_list);    FrameMgrFree (fm);    changeic->preedit_attr_num = preedit_ic_num;    changeic->status_attr_num = status_ic_num;    changeic->ic_attr_num = ic_num;    changeic->preedit_attr = pre_attr;    changeic->status_attr = sts_attr;    changeic->ic_attr = ic_attr;    if (i18n_core->address.improto)    {        if (!(i18n_core->address.improto(ims, call_data)))            return;        /*endif*/    }    /*endif*/    if (create_flag == True)    {        fm = FrameMgrInit (create_ic_reply_fr,                           NULL,                           _Xi18nNeedSwap (i18n_core, connect_id));    }    else    {        fm = FrameMgrInit (set_ic_values_reply_fr,                           NULL,                           _Xi18nNeedSwap (i18n_core, connect_id));    }    /*endif*/    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, changeic->icid);    if (create_flag == True)    {        _Xi18nSendMessage (ims,                           connect_id,                           XIM_CREATE_IC_REPLY,                           0,                           reply,                           total_size);    }    else    {        _Xi18nSendMessage (ims,                           connect_id,                           XIM_SET_IC_VALUES_REPLY,                           0,                           reply,                           total_size);    }    /*endif*/    if (create_flag == True)    {        int on_key_num = i18n_core->address.on_keys.count_keys;        int off_key_num = i18n_core->address.off_keys.count_keys;        if (on_key_num == 0  &&  off_key_num == 0)        {            long mask;            if (i18n_core->address.imvalue_mask & I18N_FILTERMASK)                mask = i18n_core->address.filterevent_mask;            else                mask = DEFAULT_FILTER_MASK;            /*endif*/            /* static event flow is default */            _Xi18nSetEventMask (ims,                                connect_id,                                input_method_ID,                                changeic->icid,                                mask,                                ~mask);        }        /*endif*/    }    /*endif*/    FrameMgrFree (fm);}/* called from GetICValueMessageProc */void _Xi18nGetIC (XIMS ims, IMProtocol *call_data, unsigned char *p){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    FmStatus status;    extern XimFrameRec get_ic_values_fr[];    extern XimFrameRec get_ic_values_reply_fr[];    CARD16 byte_length;    register int total_size;    unsigned char *reply = NULL;    XICAttribute *preedit_ret = NULL;    XICAttribute *status_ret = NULL;    register int i;    register int number;    int iter_count;    CARD16 *attrID_list;    XICAttribute pre_attr[IC_SIZE];    XICAttribute sts_attr[IC_SIZE];    XICAttribute ic_attr[IC_SIZE];    CARD16 pre_count = 0;    CARD16 sts_count = 0;    CARD16 ic_count = 0;    IMChangeICStruct *getic = (IMChangeICStruct *) &call_data->changeic;    CARD16 connect_id = call_data->any.connect_id;    CARD16 input_method_ID;    memset (pre_attr, 0, sizeof (XICAttribute)*IC_SIZE);    memset (sts_attr, 0, sizeof (XICAttribute)*IC_SIZE);    memset (ic_attr, 0, sizeof (XICAttribute)*IC_SIZE);    fm = FrameMgrInit (get_ic_values_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    /* get data */    FrameMgrGetToken (fm, input_method_ID);    FrameMgrGetToken (fm, getic->icid);    FrameMgrGetToken (fm, byte_length);    attrID_list = (CARD16 *) malloc (sizeof (CARD16)*IC_SIZE);  /* bogus */    memset (attrID_list, 0, sizeof (CARD16)*IC_SIZE);    number = 0;    while (FrameMgrIsIterLoopEnd (fm, &status) == False)        FrameMgrGetToken (fm, attrID_list[number++]);    /*endwhile*/    FrameMgrFree (fm);    i = 0;    while (i < number)    {        int read_number;                if (IsNestedList (i18n_core, attrID_list[i]))        {            if (attrID_list[i] == i18n_core->address.preeditAttr_id)            {                read_number = GetICValue (i18n_core,                                          &pre_attr[pre_count],                                          &attrID_list[i],                                          number);                i += read_number + 1;                pre_count += read_number;            }            else if (attrID_list[i] == i18n_core->address.statusAttr_id)            {                read_number = GetICValue (i18n_core,                                          &sts_attr[sts_count],                                          &attrID_list[i],                                          number);                i += read_number + 1;                sts_count += read_number;            }            else            {                /* another nested list.. possible? */            }            /*endif*/        }        else        {            read_number = GetICValue (i18n_core,                                      &ic_attr[ic_count],                                      &attrID_list[i],                                      number);            i += read_number;            ic_count += read_number;        }        /*endif*/    }    /*endwhile*/    getic->preedit_attr_num = pre_count;    getic->status_attr_num = sts_count;    getic->ic_attr_num = ic_count;    getic->preedit_attr = pre_attr;    getic->status_attr = sts_attr;    getic->ic_attr = ic_attr;    if (i18n_core->address.improto)    {        if (!(i18n_core->address.improto (ims, call_data)))            return;        /*endif*/    }    /*endif*/    iter_count = getic->ic_attr_num;    preedit_ret = CreateNestedList (i18n_core->address.preeditAttr_id,                                    getic->preedit_attr,                                    getic->preedit_attr_num,                                    _Xi18nNeedSwap (i18n_core, connect_id));    if (preedit_ret)        iter_count++;    /*endif*/    status_ret = CreateNestedList (i18n_core->address.statusAttr_id,                                   getic->status_attr,                                   getic->status_attr_num,                                   _Xi18nNeedSwap (i18n_core, connect_id));    if (status_ret)        iter_count++;    /*endif*/    fm = FrameMgrInit (get_ic_values_reply_fr,                       NULL,                       _Xi18nNeedSwap (i18n_core, connect_id));    /* set iteration count for list of ic_attribute */    FrameMgrSetIterCount (fm, iter_count);    /* set length of BARRAY item in xicattribute_fr */    for (i = 0;  i < (int) getic->ic_attr_num;  i++)        FrameMgrSetSize (fm, ic_attr[i].value_length);    /*endfor*/        if (preedit_ret)        FrameMgrSetSize (fm, preedit_ret->value_length);    /*endif*/    if (status_ret)        FrameMgrSetSize (fm, status_ret->value_length);    /*endif*/    total_size = FrameMgrGetTotalSize (fm);    reply = (unsigned char *) malloc (total_size);    if (reply == NULL)    {        _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, getic->icid);    for (i = 0;  i < (int) getic->ic_attr_num;  i++)    {        FrameMgrPutToken (fm, ic_attr[i].attribute_id);        FrameMgrPutToken (fm, ic_attr[i].value_length);        FrameMgrPutToken (fm, ic_attr[i].value);    }    /*endfor*/    if (preedit_ret)    {        FrameMgrPutToken (fm, preedit_ret->attribute_id);        FrameMgrPutToken (fm, preedit_ret->value_length);        FrameMgrPutToken (fm, preedit_ret->value);    }    /*endif*/    if (status_ret)    {        FrameMgrPutToken (fm, status_ret->attribute_id);        FrameMgrPutToken (fm, status_ret->value_length);        FrameMgrPutToken (fm, status_ret->value);    }    /*endif*/    _Xi18nSendMessage (ims,                       connect_id,                       XIM_GET_IC_VALUES_REPLY,                       0,                       reply,                       total_size);    XFree (reply);    XFree (attrID_list);    for (i = 0;  i < (int) getic->ic_attr_num;  i++)    {	if (getic->ic_attr[i].name)	    XFree (getic->ic_attr[i].name);	/*endif*/        if (getic->ic_attr[i].value)            XFree (getic->ic_attr[i].value);        /*endif*/    }    /*endfor*/    for (i = 0;  i < (int) getic->preedit_attr_num;  i++)    {	if (getic->preedit_attr[i].name)	    XFree (getic->preedit_attr[i].name);	/*endif*/	if (getic->preedit_attr[i].value)	    XFree (getic->preedit_attr[i].value);	/*endif*/    }    /*endfor*/    for (i = 0;  i < (int) getic->status_attr_num;  i++)    {	if (getic->status_attr[i].name)	    XFree (getic->status_attr[i].name);	/*endif*/	if (getic->status_attr[i].value)	    XFree (getic->status_attr[i].value);	/*endif*/    }    /*endfor*/        if (preedit_ret)    {        XFree (preedit_ret->value);        XFree (preedit_ret);    }    /*endif*/    if (status_ret)    {        XFree (status_ret->value);        XFree (status_ret);    }    /*endif*/    FrameMgrFree (fm);}

⌨️ 快捷键说明

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