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

📄 xcric.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
Bool_XipCreateDefIC(im)    XipIM im;{    im->default_ic = (XipIC)Xcalloc(1, sizeof(XipICRec));    if (im->default_ic == NULL) {	return False;    }    im->default_ic->core.im = (XIM)im;    im->default_mask = _XipReadRdb(im->core.display, im->default_ic,				(unsigned long)0,				im->core.rdb, im->core.res_name,				im->core.res_class);    return True;}/* * Create an input context within the input method,  * and return a pointer the input context ti the caller. */XIC_XipCreateIC(supim, args)    XIM supim;    XIMArg *args;{    XipIM		im = (XipIM)supim;    XipIC		ic;    ximCreateICReq	req;    ximCreateICReply	reply;    ximEventReply	reply1;    unsigned long	mask;    extern Bool		_XipBackEndFilter();#ifdef	XML    char		*p, **nls_list, **l;    unsigned int	i, n = 0;    XLocale		xlc;#endif	/* XML */    /*     * If im is not specified or the file descripter is not available,     * return NULL.     */    if (im->fd < 0) {	return(NULL);    }    if ((ic = (XipIC)Xcalloc(1, sizeof(XipICRec))) == NULL) {	return(NULL);    }    mask = im->default_mask;    if (mask)	bcopy((char *)&im->default_ic->values, (char *)&ic->values,	      sizeof(struct _ICValues));    ic->methods = (XICMethods) &ic_methods;    ic->prototype_filter = _XipBackEndFilter;    ic->core.im = supim;    (void)_XipICSetValues(ic, args, &mask);    req.reqType = XIM_CreateIC;    req.length = sz_ximCreateICReq + strlen(im->client_data);    if ((_XipWriteToIM(im, (char *)&req, sz_ximCreateICReq) < 0) ||	(_XipWriteToIM(im, im->client_data, strlen(im->client_data)) < 0) ||	(_XipFlushToIM(im) < 0)) {	return(NULL);    }    if (im->core.rdb && ic->values.res_name && ic->values.res_class) {	mask |= _XipReadRdb(im->core.display, ic, mask, im->core.rdb,			 ic->values.res_name, ic->values.res_class);    }	#ifdef	XML    if (im->xlc != NULL) {#endif	/* XML */	ic->mb = _XlcDupLocale(im->xlc);	ic->wc = _XlcDupLocale(im->xlc);#ifdef	XML	ic->xlc_num = 0;	ic->mb_temp = NULL;	ic->wc_temp = NULL;	n = strlen(im->xlc->xlc_db->lc_name) + 1;	if ((p = Xmalloc(n)) == NULL) return(NULL);	strcpy(p, im->xlc->xlc_db->lc_name);	p[n - 1] = 0;	ic->values.using_language = p;	mask |= (1 << ICUsingLanguage);    } else {	ic->mb = NULL;	ic->wc = NULL;	ic->xlc_num = 0;	if ((ic->mb_temp = (XLocale*)Xmalloc(sizeof(XLocale) * 32)) == NULL) {	    return(NULL);	}	if ((ic->wc_temp = (XLocale*)Xmalloc(sizeof(XLocale) * 32)) == NULL) {	    return(NULL);	}	_XlcListLocale(&nls_list);	for (l = nls_list; *l; l++) {	    xlc = _XlcMakeLocale(*l);	    if (!xlc)		continue;	    ic->mb_temp[ic->xlc_num] = xlc;	    ic->wc_temp[ic->xlc_num] = _XlcDupLocale(xlc);	    n += strlen(ic->mb_temp[ic->xlc_num]->xlc_db->lc_name) + 1;	    ic->xlc_num++;	}	Xfree((char *)nls_list);	if ((p = Xmalloc(n)) == NULL) return(NULL);	p[0] = '\0';	for (i = 0; i < ic->xlc_num; i++) {	    strcat(p, ic->mb_temp[i]->xlc_db->lc_name);	    strcat(p, ";");	}	p[n - 1] = '\0';	ic->values.using_language = p;	mask |= (1 << ICUsingLanguage);    }#endif /* XML */    /*     * Attempt to send IC data to the input manager. If sending failed,     * free IC structure and return NULL.     */    _XipSendICValues(ic, mask);    ic->max_of_ct = ic->max_of_wc = 0;    ic->ct_buf = NULL;    ic->wc_buf = NULL;    for (;;) {	if ((_XipReadFromIM(im, (char *)&reply1, sz_ximEventReply) < 0) ||	    (reply1.state == 0xffff)) {	    goto _err_ret;	}	if (reply1.detail == XIM_CALLBACK) {	    /*	     * Call the callback routines.	     */	    if (_XipCallCallbacks(ic) < 0) {		goto _err_ret;	    }	} else if (reply1.detail == XIM_IC) {	    if (_XipReadFromIM(im, (char *)&reply, sz_ximCreateICReply) < 0) {		goto _err_ret;	    }	    if (reply.state != 0) {		goto _err_ret;	    }	    ic->icid = reply.xic;	    break;	} else {	    break;	}    }    /*     * Attempt to get current IC data from the input manager.     */    _XipReceiveICValues(ic, (unsigned long)ICAllMask);#ifdef	XML    if (ic->xlc_num > 0) {	for (i = 0; i < ic->xlc_num; i++) {	    if (!strcmp(ic->values.current_language,			ic->mb_temp[i]->xlc_db->lc_name)) {		ic->mb = ic->mb_temp[i];		ic->wc = ic->wc_temp[i];		break;	    }	}	if (ic->mb == NULL) {	    ic->mb = ic->mb_temp[0];	    ic->wc = ic->wc_temp[0];	}    }#endif	/* XML */    return((XIC)ic);_err_ret:    if (ic->mb) _XlcFreeLocale(ic->mb);    if (ic->wc) _XlcFreeLocale(ic->wc);#ifdef  XML    if (ic->xlc_num > 0) {	for (i = 0; i < ic->xlc_num; i++) {	    _XlcFreeLocale(ic->mb_temp[i]);	    _XlcFreeLocale(ic->wc_temp[i]);	}    }    if (ic->mb_temp) Xfree(ic->mb_temp);    if (ic->wc_temp) Xfree(ic->wc_temp);    if (ic->values.using_language) Xfree(ic->values.using_language);#endif  /* XML */    Xfree((char *)ic);    return(NULL);}/* * Reset the input context.  */wchar_t *_XipwcResetIC(ic)    XIC ic;		/* specified the input context to reset*/{    XipIM im = ipIMofIC((XipIC)ic);    ximResetICReq	req;    ximEventReply	reply;    /*     * If im is not specified or the file descripter is not available,     * return NULL.     */    if (im->fd < 0) {	return((wchar_t *)NULL);    }    req.reqType = XIM_ResetIC;    req.length = sz_ximResetICReq;    req.xic = ((XipIC)ic)->icid;    if ((_XipWriteToIM(im, (char *)&req, sz_ximResetICReq) >= 0) &&	(_XipFlushToIM(im) >= 0)) {	for (;;) {	    if ((_XipReadFromIM(im, (char *)&reply, sz_ximEventReply) < 0) ||		(reply.state == 0xffff)) {		return((wchar_t *)NULL);	    }	    if (reply.detail == XIM_CALLBACK) {		/*		 * Call the callback routines.		 */		if (_XipCallCallbacks(ic) < 0) {		    return((wchar_t *)NULL);		}	    } else {		break;	    }	}    }    return((wchar_t *)NULL);}char *_XipmbResetIC(ic)    XIC ic;		/* specified the input context to reset*/{    XipIM im = ipIMofIC((XipIC)ic);    ximResetICReq	req;    ximEventReply	reply;    /*     * If im is not specified or the file descripter is not available,     * return NULL.     */    if (im->fd < 0) {	return(NULL);    }    req.reqType = XIM_ResetIC;    req.length = sz_ximResetICReq;    req.xic = ((XipIC)ic)->icid;    if ((_XipWriteToIM(im, (char *)&req, sz_ximResetICReq) >= 0) &&	(_XipFlushToIM(im) >= 0)) {	for (;;) {	    if ((_XipReadFromIM(im, (char *)&reply, sz_ximEventReply) < 0) ||		(reply.state == 0xffff)) {		return(NULL);	    }	    if (reply.detail == XIM_CALLBACK) {		/*		 * Call the callback routines.		 */		if (_XipCallCallbacks(ic) < 0) {		    return(NULL);		}	    } else {		break;	    }	}    }    return(NULL);}#ifdef	XMLvoid_XipChangeLocale(ic, lc_name)    XipIC ic;    char *lc_name;{    XLocale xlc;    int i;    for (i = 0; i < ic->xlc_num; i++) {	if ((!strcmp(lc_name, ic->mb_temp[i]->lc_lang)) ||	    (!strcmp(lc_name, ic->mb_temp[i]->xlc_db->lc_name))) {	    ic->mb = ic->mb_temp[i];	    ic->wc = ic->wc_temp[i];	    return;	}    }    xlc = _XlcMakeLocale(lc_name);    if (xlc) {	ic->mb = ic->mb_temp[ic->xlc_num] = xlc;	ic->wc = ic->wc_temp[ic->xlc_num] = _XlcDupLocale(xlc);	ic->xlc_num++;    }}#endif	/* XML */

⌨️ 快捷键说明

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