📄 i18nic.c
字号:
/* 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 + -