Mercurial > kinput2.yaz
diff lib/imlib/improto.c @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/imlib/improto.c Mon Mar 08 04:44:30 2010 +0900 @@ -0,0 +1,289 @@ +#ifndef lint +static char *rcsid = "$Id: improto.c,v 1.5 1994/05/31 07:54:04 ishisone Exp $"; +#endif +/* + * Copyright (c) 1994 Software Research Associates, Inc. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, 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 name of Software Research Associates not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. Software Research + * Associates makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied + * warranty. + * + * Author: Makoto Ishisone, Software Research Associates, Inc., Japan + */ + +#include "im.h" +#include "IMProtoP.h" + +/* + * This library contains interface functions between imlib and + * IMProtocol widget. + */ + +/*- IMRegisterConnection: register connection to the protocol widget -*/ +void +IMRegisterConnection(conn) +IMConnection *conn; +{ + IMProtocolWidget ipw = (IMProtocolWidget)conn->proto_widget; + + conn->next = ipw->imp.connection_list; + ipw->imp.connection_list = conn; +} + +/*- IMUnregisterConnection: unregister connection from the protocol widget -*/ +void +IMUnregisterConnection(conn) +IMConnection *conn; +{ + IMProtocolWidget ipw = (IMProtocolWidget)conn->proto_widget; + IMConnection *p, *q; + + p = ipw->imp.connection_list; + q = NULL; + while (p != NULL) { + if (p == conn) { + if (q == NULL) { + ipw->imp.connection_list = p->next; + } else { + q->next = p->next; + } + /* + * If there are no connections, and the no-more-connections + * flag is set to true, destroy the protocol widget. + */ + if (ipw->imp.connection_list == NULL && + ipw->imp.no_more_connections == True) { + DPRINT(("IMProtocolWidget no longer necessary. killing..\n")); + XtDestroyWidget((Widget)ipw); + } + return; + } + q = p; + p = p->next; + } +} + +/*- IMConnectionList: get connection list -*/ +IMConnection * +IMConnectionList(w) +Widget w; +{ + IMProtocolWidget ipw = (IMProtocolWidget)w; + + return ipw->imp.connection_list; +} + +/*- IMPushQueue: push connection to the scheduler queue -*/ +void +IMPushQueue(conn) +IMConnection *conn; +{ + Widget w = conn->proto_widget; + + conn->queue_next = IM_QUEUE(w); + IM_QUEUE(w) = conn; +} + +/*- IMPopQueue: pop connection from the scheduler queue */ +IMConnection * +IMPopQueue(w) +Widget w; +{ + IMConnection *conn; + + conn = IM_QUEUE(w); + if (conn != NULL) { + IM_QUEUE(w) = conn->queue_next; + conn->queue_next = NULL; + } + return conn; +} + +/*- IMQueueEmpty: returns true if the scheduler queue is empty -*/ +int +IMQueueEmpty(w) +Widget w; +{ + return(IM_QUEUE(w) == NULL); +} + +/*- IMDefaultForeground: get default foreground color -*/ +Pixel +IMDefaultForeground(w) +Widget w; +{ + IMProtocolWidget ipw = (IMProtocolWidget)w; + + return ipw->imp.foreground; +} + +/*- IMDefaultBackground: get default background color -*/ +Pixel +IMDefaultBackground(w) +Widget w; +{ + IMProtocolWidget ipw = (IMProtocolWidget)w; + + return ipw->core.background_pixel; +} + +/*- IMDefaultFontSet: get default font set -*/ +char * +IMDefaultFontSet(imp) +IMIM *imp; +{ + IMProtocolWidget ipw = (IMProtocolWidget)imp->connection->proto_widget; + + return ipw->imp.default_fontlist; +} + +/*- IMFontBank: get font bank for the specified IM -*/ +FontBank +IMFontBank(imp) +IMIM *imp; +{ + IMProtocolWidget ipw = (IMProtocolWidget)imp->connection->proto_widget; + + return ipw->imp.font_bank; +} + +/*- IMStatusWidth: get default status width -*/ +int +IMStatusWidth(w) +Widget w; +{ + IMProtocolWidget ipw = (IMProtocolWidget)w; + + return ipw->imp.status_width; +} + +/*- IMInitHash: initialize IM/IC hash table -*/ +void +IMInitHash(w) +Widget w; +{ + IMIM **impp; + IMIC **icpp; + int i; + + impp = IM_IMHASH(w); + icpp = IM_ICHASH(w); + for (i = 0; i < IM_HASH_SIZE; i++) impp[i] = NULL; + for (i = 0; i < IC_HASH_SIZE; i++) icpp[i] = NULL; + IM_LASTIMID(w) = IM_LASTICID(w) = 0; +} + +/*- IMIMHash: get IM hash table -*/ +IMIM ** +IMIMHash(w) +Widget w; +{ + return IM_IMHASH(w); +} + +/*- IMICHash: get IC hash table -*/ +IMIC ** +IMICHash(w) +Widget w; +{ + return IM_ICHASH(w); +} + +/*- IMNextIMID: return next IMID (it might be used, though) -*/ +unsigned int +IMNextIMID(w) +Widget w; +{ + long id = IM_LASTIMID(w) + 1; /* use long int to avoid overflow */ + + if (id > 65535L) id = 1; + IM_LASTIMID(w) = (unsigned int)id; + return (unsigned int)id; +} + +/*- IMNextICID: return next ICID (it might be used, though) -*/ +unsigned int +IMNextICID(w) +Widget w; +{ + long id = IM_LASTICID(w) + 1; /* use long int to avoid overflow */ + + if (id > 65535L) id = 1; + IM_LASTICID(w) = (unsigned int)id; + return (unsigned int)id; +} + +/*- IMCtextAtom: get COMPOUND_TEXT atom -*/ +Atom +IMCtextAtom(w) +Widget w; +{ + return ATOM_CTEXT(w); +} + +/*- IMKi2CommAtom: get _KINPUT2_COMM atom -*/ +Atom +IMKi2CommAtom(w) +Widget w; +{ + return ATOM_KI2COMM(w); +} + +/*- IMXConnectAtom: get _XIM_XCONNECT atom -*/ +Atom +IMXConnectAtom(w) +Widget w; +{ + return ATOM_XCONNECT(w); +} + +/*- IMProtocolAtom: get _XIM_PROTOCOL atom -*/ +Atom +IMProtocolAtom(w) +Widget w; +{ + return ATOM_PROTOCOL(w); +} + +/*- IMMoreDataAtom: get _XIM_MOREDATA atom -*/ +Atom +IMMoreDataAtom(w) +Widget w; +{ + return ATOM_MOREDATA(w); +} + +/*- IMTriggerKeys: get trigger key list -*/ +IMTriggerKey * +IMTriggerKeys(imp, num_triggersp) +IMIM *imp; +int *num_triggersp; +{ + IMProtocolWidget ipw = (IMProtocolWidget)imp->connection->proto_widget; + + *num_triggersp = ipw->imp.num_trigger_keys; + return ipw->imp.trigger_keys; +} + +/*- getConverter: look up converter for the specified locale -*/ +IMConverter * +IMGetConverter(w, locale) +Widget w; +char *locale; +{ + IMProtocolWidget ipw = (IMProtocolWidget)w; + IMConverter *conv = &ipw->imp.converter; + int i; + + for (i = 0; i < conv->num_locales; i++) { + if (!strcmp(conv->supported_locales[i], locale)) return conv; + } + return NULL; +}