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

📄 xicwrap.c

📁 早期freebsd实现
💻 C
字号:
/* * $XConsortium: XICWrap.c,v 11.7 91/05/30 13:10:36 rws Exp $ *//* * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, *                      and Nippon Telegraph and Telephone Corporation * Copyright 1991 by the Massachusetts Institute of Technology * Copyright 1991 by the Open Software Foundation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of OMRON, NTT Software, NTT, Open * Software Foundation and M.I.T. not be used in advertising or  * publicity pertaining to distribution of the software without specific,  * written prior permission. OMRON, NTT Software, NTT, Open Software * Foundation and M.I.T. make no representations about the suitability of this * software for any purpose.  It is provided "as is" without express or * implied warranty. * * OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION AND M.I.T.  * DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT  * SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATIONN OR M.I.T. BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *  *	Authors: Li Yuhong		OMRON Corporation *		 Tatsuya Kato		NTT Software Corporation *		 Hiroshi Kuribayashi	OMRON Coproration *		 Muneiyoshi Suzuki	Nippon Telegraph and Telephone Co. *  *		 M. Collins		OSF   */				#define NEED_EVENTS#include "Xlibint.h"#include "Xlcint.h"#if NeedVarargsPrototypes# include <stdarg.h># define Va_start(a,b) va_start(a,b)#else# include <varargs.h># define Va_start(a,b) va_start(a)#endifstatic int_XIMNestedListToNestedList(nlist, list)    XIMArg *nlist;   /* This is the new list */    XIMArg *list;    /* The original list */{    register XIMArg *ptr = list;    while (ptr->name) {	if (!strcmp(ptr->name, XNVaNestedList)) {	    nlist += _XIMNestedListToNestedList(nlist, (XIMArg *)ptr->value);	} else {	    nlist->name = ptr->name;	    nlist->value = ptr->value;	    ptr++;	    nlist++;	}    }    return ptr - list;}static void_XIMCountNestedList(args, total_count)    XIMArg *args;    int *total_count;{    for (; args->name; args++) {	if (!strcmp(args->name, XNVaNestedList))	    _XIMCountNestedList((XIMArg *)args->value, total_count);	else	    ++(*total_count);    }}#if NeedVarargsPrototypesstatic void_XIMCountVaList(va_list var, int *total_count)#elsestatic void_XIMCountVaList(var, total_count)    va_list var;    int *total_count;#endif{    char *attr;    *total_count = 0;    for (attr = va_arg(var, char*); attr; attr = va_arg(var, char*)) {	if (!strcmp(attr, XNVaNestedList)) {	    _XIMCountNestedList(va_arg(var, XIMArg*), total_count);	} else {	    va_arg(var, XIMArg*);	    ++(*total_count);	}    }}#if NeedVarargsPrototypesstatic void_XIMVaToNestedList(va_list var, int max_count, XIMArg **args_return)#elsestatic void_XIMVaToNestedList(var, max_count, args_return)    va_list var;    int max_count;    XIMArg **args_return;#endif{    XIMArg *args;    char   *attr;    if (max_count <= 0) {	*args_return = (XIMArg *)NULL;	return;    }    args = (XIMArg *)Xmalloc((unsigned)(max_count + 1) * sizeof(XIMArg));    *args_return = args;    if (!args) return;    for (attr = va_arg(var, char*); attr; attr = va_arg(var, char*)) {	if (!strcmp(attr, XNVaNestedList)) {	    args += _XIMNestedListToNestedList(args, va_arg(var, XIMArg*));	} else {	    args->name = attr;	    args->value = va_arg(var, XPointer);	    args++;	}    }    args->name = (char*)NULL;}/*ARGSUSED*/#if NeedVarargsPrototypesXVaNestedListXVaCreateNestedList(int dummy, ...)#elseXVaNestedListXVaCreateNestedList(dummy, va_alist)    int dummy;    va_dcl#endif{    va_list		var;    XIMArg		*args = NULL;    int			total_count;    Va_start(var, dummy);    _XIMCountVaList(var, &total_count);    va_end(var);    Va_start(var, dummy);    _XIMVaToNestedList(var, total_count, &args);    va_end(var);    return (XVaNestedList)args;}#if NeedVarargsPrototypeschar *XGetIMValues(XIM im, ...)#else				/* NeedVarargsPrototypes */char *XGetIMValues(im, va_alist)    XIM im;    va_dcl#endif				/* NeedVarargsPrototypes */{    va_list var;    int     total_count;    XIMArg *args;    char   *ret;    /*     * so count the stuff dangling here     */    Va_start(var, im);    _XIMCountVaList(var, &total_count);    va_end(var);    /*     * now package it up so we can send it along     */    Va_start(var, im);    _XIMVaToNestedList(var, total_count, &args);    va_end(var);    ret = (*im->methods->get_values) (im, args);    if (args) Xfree((char *)args);    return ret;}/* * Create an input context within the input method,  * and return a pointer to the input context. */#if NeedVarargsPrototypesXICXCreateIC(XIM im, ...)#elseXICXCreateIC(im, va_alist)    XIM im;		/* specified the attached input method */    va_dcl		/* specified variable length argment list */#endif{    va_list var;    int     total_count;    XIMArg *args;    XIC     ic;      /*     * so count the stuff dangling here     */    Va_start(var, im);    _XIMCountVaList(var, &total_count);    va_end(var);    /*     * now package it up so we can send it along     */    Va_start(var, im);    _XIMVaToNestedList(var, total_count, &args);    va_end(var);    ic = (XIC) (*im->methods->create_ic) (im, args);    if (args) Xfree((char *)args);    if (ic) {	ic->core.next = im->core.ic_chain;	im->core.ic_chain = ic;    }    return ic;}/* * Free the input context. */voidXDestroyIC(ic)    XIC ic;{    XIM im = ic->core.im;    XIC *prev;    (*ic->methods->destroy) (ic);    if (im) {	for (prev = &im->core.ic_chain; *prev; prev = &(*prev)->core.next) {	    if (*prev == ic) {		*prev = ic->core.next;		break;	    }	}    }    Xfree ((char *) ic);}#if NeedVarargsPrototypeschar *XGetICValues(XIC ic, ...)#elsechar *XGetICValues(ic, va_alist)    XIC ic;    va_dcl#endif{     va_list var;    int     total_count;    XIMArg *args;    char   *ret;    if (!ic->core.im)	return (char *) NULL;    /*     * so count the stuff dangling here     */    Va_start(var, ic);    _XIMCountVaList(var, &total_count);    va_end(var);    /*     * now package it up so we can send it along     */    Va_start(var, ic);    _XIMVaToNestedList(var, total_count, &args);    va_end(var);    ret = (*ic->methods->get_values) (ic, args);    if (args) Xfree((char *)args);    return ret;}#if NeedVarargsPrototypeschar *XSetICValues(XIC ic, ...)#elsechar *XSetICValues(ic, va_alist)    XIC ic;    va_dcl#endif{    va_list var;    int     total_count;    XIMArg *args;    char   *ret;    if (!ic->core.im)	return (char *) NULL;    /*     * so count the stuff dangling here     */    Va_start(var, ic);    _XIMCountVaList(var, &total_count);    va_end(var);    /*     * now package it up so we can send it along     */    Va_start(var, ic);    _XIMVaToNestedList(var, total_count, &args);    va_end(var);    ret = (*ic->methods->set_values) (ic, args);    if (args) Xfree((char *)args);    return ret;}/* * Require the input manager to focus the focus window attached to the ic * argument. */voidXSetICFocus(ic)    XIC ic;{  if (ic->core.im)      (*ic->methods->set_focus) (ic);}/* * Require the input manager to unfocus the focus window attached to the ic * argument. */voidXUnsetICFocus(ic)    XIC ic;{  if (ic->core.im)      (*ic->methods->unset_focus) (ic);}/* * Return the XIM associated with the input context. */XIMXIMOfIC(ic)    XIC ic;{    return ic->core.im;}char *XmbResetIC(ic)    XIC ic;{    if (ic->core.im)	return (*ic->methods->mb_reset)(ic);    return (char *)NULL;}wchar_t *XwcResetIC(ic)    XIC ic;{    if (ic->core.im)	return (*ic->methods->wc_reset)(ic);    return (wchar_t *)NULL;}intXmbLookupString(ic, ev, buffer, nbytes, keysym, status)    XIC ic;    register XKeyEvent *ev;    char *buffer;    int nbytes;    KeySym *keysym;    Status *status;{    if (ic->core.im)	return (*ic->methods->mb_lookup_string) (ic, ev, buffer, nbytes,						 keysym, status);    return XLookupNone;}intXwcLookupString(ic, ev, buffer, nchars, keysym, status)    XIC ic;    register XKeyEvent *ev;    wchar_t *buffer;    int nchars;    KeySym *keysym;    Status *status;{    if (ic->core.im)	return (*ic->methods->wc_lookup_string) (ic, ev, buffer, nchars,						 keysym, status);    return XLookupNone;}

⌨️ 快捷键说明

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