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

📄 i18npthdr.c

📁 手写识别Chinput3.0.2源代码,可以在linux下开发手写板程序
💻 C
📖 第 1 页 / 共 4 页
字号:
    CARD16 input_method_ID;    fm = FrameMgrInit (query_extension_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    FrameMgrGetToken (fm, input_method_ID);    FrameMgrGetToken (fm, byte_length);    query_ext->extension = (XIMStr *) malloc (sizeof (XIMStr)*10);    memset (query_ext->extension, 0, sizeof (XIMStr)*10);    number = 0;    while (FrameMgrIsIterLoopEnd (fm, &status) == False)    {        char *name;        int str_length;                FrameMgrGetToken (fm, str_length);        FrameMgrSetSize (fm, str_length);        query_ext->extension[number].length = str_length;        FrameMgrGetToken (fm, name);        query_ext->extension[number].name = malloc (str_length + 1);        strncpy (query_ext->extension[number].name, name, str_length);        query_ext->extension[number].name[str_length] = (char) 0;        number++;    }    /*endwhile*/    query_ext->number = number;#ifdef PROTOCOL_RICH    if (i18n_core->address.improto)    {        if (!(i18n_core->address.improto(ims, call_data)))            return;        /*endif*/    }    /*endif*/#endif  /* PROTOCOL_RICH */    FrameMgrFree (fm);    ext_list = MakeExtensionList (i18n_core,                                  query_ext->extension,                                  number,                                  &reply_number);    for (i = 0;  i < number;  i++)        XFree (query_ext->extension[i].name);    /*endfor*/    XFree (query_ext->extension);    fm = FrameMgrInit (query_extension_reply_fr,                       NULL,                       _Xi18nNeedSwap (i18n_core, connect_id));    /* set iteration count for list of extensions */    FrameMgrSetIterCount (fm, reply_number);    /* set length of BARRAY item in ext_fr */    for (i = 0;  i < reply_number;  i++)    {        str_size = strlen (ext_list[i].name);        FrameMgrSetSize (fm, str_size);    }    /*endfor*/    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);    for (i = 0;  i < reply_number;  i++)    {        str_size = FrameMgrGetSize (fm);        FrameMgrPutToken (fm, ext_list[i].major_opcode);        FrameMgrPutToken (fm, ext_list[i].minor_opcode);        FrameMgrPutToken (fm, str_size);        FrameMgrPutToken (fm, ext_list[i].name);    }    /*endfor*/    _Xi18nSendMessage (ims,                       connect_id,                       XIM_QUERY_EXTENSION_REPLY,                       0,                       reply,                       total_size);    FrameMgrFree (fm);    XFree (reply);    for (i = 0;  i < reply_number;  i++)        XFree (ext_list[i].name);    /*endfor*/    XFree ((char *) ext_list);}static void SyncReplyMessageProc (XIMS ims,                                  IMProtocol *call_data,                                  unsigned char *p){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    extern XimFrameRec sync_reply_fr[];    CARD16 connect_id = call_data->any.connect_id;    Xi18nClient *client;    CARD16 input_method_ID;    CARD16 input_context_ID;    client = (Xi18nClient *)_Xi18nFindClient (i18n_core, connect_id);    fm = FrameMgrInit (sync_reply_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    FrameMgrGetToken (fm, input_method_ID);    FrameMgrGetToken (fm, input_context_ID);    FrameMgrFree (fm);    client->sync = False;}static void GetIMValueFromName (Xi18n i18n_core,                                CARD16 connect_id,                                char *buf,                                char *name,                                int *length){    register int i;    if (strcmp (name, XNQueryInputStyle) == 0)    {        XIMStyles *styles = (XIMStyles *) &i18n_core->address.input_styles;        *length = sizeof (CARD16)*2; 	/* count_styles, unused */        *length += styles->count_styles*sizeof (CARD32);        if (buf != NULL)        {            FrameMgr fm;            extern XimFrameRec input_styles_fr[];            unsigned char *data = NULL;            int total_size;                        fm = FrameMgrInit (input_styles_fr,                               NULL,                               _Xi18nNeedSwap (i18n_core, connect_id));            /* set iteration count for list of input_style */            FrameMgrSetIterCount (fm, styles->count_styles);            total_size = FrameMgrGetTotalSize (fm);            data = (unsigned char *) malloc (total_size);            if (!data)                return;            /*endif*/            memset (data, 0, total_size);            FrameMgrSetBuffer (fm, data);            FrameMgrPutToken (fm, styles->count_styles);            for (i = 0;  i < (int) styles->count_styles;  i++)                FrameMgrPutToken (fm, styles->supported_styles[i]);            /*endfor*/            memmove (buf, data, total_size);            FrameMgrFree (fm);        }        /*endif*/    }    /*endif*/    else if (strcmp (name, XNQueryIMValuesList) == 0) {    }}static XIMAttribute *MakeIMAttributeList (Xi18n i18n_core,                                          CARD16 connect_id,                                          CARD16 *list,                                          int *number,                                          int *length){    XIMAttribute *attrib_list;    int list_num;    XIMAttr *attr = i18n_core->address.xim_attr;    int list_len = i18n_core->address.im_attr_num;    register int i;    register int j;    int value_length;    int number_ret = 0;    *length = 0;    list_num = 0;    for (i = 0;  i < *number;  i++)    {        for (j = 0;  j < list_len;  j++)        {            if (attr[j].attribute_id == list[i])            {                list_num++;                break;            }            /*endif*/        }        /*endfor*/    }    /*endfor*/    attrib_list = (XIMAttribute *) malloc (sizeof (XIMAttribute)*list_num);    if (!attrib_list)        return NULL;    /*endif*/    memset (attrib_list, 0, sizeof (XIMAttribute)*list_num);    number_ret = list_num;    list_num = 0;    for (i = 0;  i < *number;  i++)    {        for (j = 0;  j < list_len;  j++)        {            if (attr[j].attribute_id == list[i])            {                attrib_list[list_num].attribute_id = attr[j].attribute_id;                attrib_list[list_num].name_length = attr[j].length;                attrib_list[list_num].name = attr[j].name;                attrib_list[list_num].type = attr[j].type;                GetIMValueFromName (i18n_core,                                    connect_id,                                    NULL,                                    attr[j].name,                                    &value_length);                attrib_list[list_num].value_length = value_length;                attrib_list[list_num].value = (void *) malloc (value_length);                memset(attrib_list[list_num].value, 0, value_length);                GetIMValueFromName (i18n_core,                                    connect_id,                                    attrib_list[list_num].value,                                    attr[j].name,                                    &value_length);                *length += sizeof (CARD16)*2;                *length += value_length;                *length += IMPAD (value_length);                list_num++;                break;            }            /*endif*/        }        /*endfor*/    }    /*endfor*/    *number = number_ret;    return attrib_list;}static void GetIMValuesMessageProc (XIMS ims,                                    IMProtocol *call_data,                                    unsigned char *p){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    FmStatus status;    extern XimFrameRec get_im_values_fr[];    extern XimFrameRec get_im_values_reply_fr[];    CARD16 byte_length;    int list_len, total_size;    unsigned char *reply = NULL;    int iter_count;    register int i;    register int j;    int number;    CARD16 *im_attrID_list;    XIMAttribute *im_attribute_list;    CARD16 connect_id = call_data->any.connect_id;    CARD16 input_method_ID;    /* create FrameMgr */    fm = FrameMgrInit (get_im_values_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    FrameMgrGetToken (fm, input_method_ID);    FrameMgrGetToken (fm, byte_length);    im_attrID_list = (CARD16 *) malloc (sizeof (CARD16)*20);    memset (im_attrID_list, 0, sizeof (CARD16)*20);    number = 0;    while (FrameMgrIsIterLoopEnd (fm, &status) == False)    {        FrameMgrGetToken (fm, im_attrID_list[number]);        number++;    }    FrameMgrFree (fm);#ifdef PROTOCOL_RICH    if (i18n_core->address.improto) {        IMGetIMValuesStruct *getim = (IMGetIMValuesStruct *) &call_data->getim;        char **name_list;        CARD16 name_number;        name_list = (char **) malloc (sizeof (char *)*20);        memset (name_list, 0, sizeof (char *)*20);        name_number = 0;        for (i = 0;  i < number;  i++) {            for (j = 0;  j < i18n_core->address.im_attr_num;  j++) {                if (i18n_core->address.xim_attr[j].attribute_id ==                    im_attrID_list[i]) {                    name_list[name_number++] = 			i18n_core->address.xim_attr[j].name;                    break;                }            }        }        getim->number = name_number;        getim->im_attr_list = name_list;        if (!(i18n_core->address.improto (ims, call_data))) {    	    XFree (name_list);            return;	}        XFree (name_list);    }#endif  /* PROTOCOL_RICH */    im_attribute_list = MakeIMAttributeList (i18n_core,                                             connect_id,                                             im_attrID_list,                                             &number,                                             &list_len);    if (im_attrID_list)        XFree (im_attrID_list);    /*endif*/    fm = FrameMgrInit (get_im_values_reply_fr,                       NULL,                       _Xi18nNeedSwap (i18n_core, connect_id));    iter_count = number;    /* set iteration count for list of im_attribute */    FrameMgrSetIterCount (fm, iter_count);    /* set length of BARRAY item in ximattribute_fr */    for (i = 0;  i < iter_count;  i++)        FrameMgrSetSize (fm, im_attribute_list[i].value_length);    /*endfor*/        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);    for (i = 0;  i < iter_count;  i++)    {        FrameMgrPutToken (fm, im_attribute_list[i].attribute_id);        FrameMgrPutToken (fm, im_attribute_list[i].value_length);        FrameMgrPutToken (fm, im_attribute_list[i].value);    }    /*endfor*/    _Xi18nSendMessage (ims,                       connect_id,                       XIM_GET_IM_VALUES_REPLY,                       0,                       reply,                       total_size);    FrameMgrFree (fm);    XFree (reply);    XFree (im_attribute_list);}static void CreateICMessageProc (XIMS ims,                                 IMProtocol *call_data,                                 unsigned char *p){    _Xi18nChangeIC (ims, call_data, p, True);}static void SetICValuesMessageProc (XIMS ims,                                    IMProtocol *call_data,                                    unsigned char *p){    _Xi18nChangeIC (ims, call_data, p, False);}static void GetICValuesMessageProc (XIMS ims,                                    IMProtocol *call_data,                                    unsigned char *p){    _Xi18nGetIC (ims, call_data, p);}static void SetICFocusMessageProc (XIMS ims,                                   IMProtocol *call_data,                                   unsigned char *p){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    extern XimFrameRec set_ic_focus_fr[];    IMChangeFocusStruct *setfocus;    CARD16 connect_id = call_data->any.connect_id;    CARD16 input_method_ID;    setfocus = (IMChangeFocusStruct *) &call_data->changefocus;    fm = FrameMgrInit (set_ic_focus_fr,                       (char *) p,                       _Xi18nNeedSwap (i18n_core, connect_id));    /* get data */    FrameMgrGetToken (fm, input_method_ID);    FrameMgrGetToken (fm, setfocus->icid);    FrameMgrFree (fm);    if (i18n_core->address.improto)    {        if (!(i18n_core->address.improto (ims, call_data)))            return;        /*endif*/    }

⌨️ 快捷键说明

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