#include <X11/Xos.h>
#include <X11/extensions/xtraplib.h>
#include <X11/extensions/xtraplibp.h>
int XEAddRequestCB(XETC *tc, CARD8 req, void_function func, BYTE *data)
{
if (!tc->values.req_cb)
{
if ((tc->values.req_cb =
(XETrapCB *)XtCalloc(256L,sizeof(XETrapCB))) == NULL)
{
return(False);
}
}
tc->values.req_cb[req].func = func;
tc->values.req_cb[req].data = data;
return(True);
}
int XEAddRequestCBs(XETC *tc, ReqFlags req_flags, void_function func,
BYTE *data)
{
int i;
int status = True;
for (i=0; i<=255L; i++)
{
if (BitIsTrue(req_flags, i))
{
status = XEAddRequestCB(tc, (CARD8)i, func, data);
}
}
return(status);
}
int XEAddEventCB(XETC *tc, CARD8 evt, void_function func, BYTE *data)
{
if (!tc->values.evt_cb)
{
if ((tc->values.evt_cb =
(XETrapCB *)XtCalloc(XETrapCoreEvents,sizeof(XETrapCB))) == NULL)
{
return(False);
}
}
tc->values.evt_cb[evt].func = func;
tc->values.evt_cb[evt].data = data;
return(True);
}
int XEAddEventCBs(XETC *tc, EventFlags evt_flags, void_function func,
BYTE *data)
{
int i;
int status = True;
for (i=KeyPress; i<=MotionNotify; i++)
{
if (BitIsTrue(evt_flags, i))
{
status = XEAddEventCB(tc, (CARD8)i, func, data);
}
}
return(status);
}
void XERemoveRequestCB(XETC *tc, CARD8 req)
{
if (!tc->values.req_cb)
{
return;
}
tc->values.req_cb[req].func = (void_function)NULL;
tc->values.req_cb[req].data = (BYTE *)NULL;
return;
}
void XERemoveRequestCBs(XETC *tc, ReqFlags req_flags)
{
int i;
for (i=0; i<=255L; i++)
{
if (BitIsTrue(req_flags, i))
{
XERemoveRequestCB(tc, (CARD8)i);
}
}
}
void XERemoveAllRequestCBs(XETC *tc)
{
if (!tc->values.req_cb)
{
return;
}
XtFree((XtPointer)tc->values.req_cb);
}
void XERemoveEventCB(XETC *tc, CARD8 evt)
{
if (!tc->values.evt_cb)
{
return;
}
tc->values.evt_cb[evt].func = (void_function)NULL;
tc->values.evt_cb[evt].data = (BYTE *)NULL;
return;
}
void XERemoveEventCBs(XETC *tc, EventFlags evt_flags)
{
int i;
for (i=KeyPress; i<=MotionNotify; i++)
{
if (BitIsTrue(evt_flags, i))
{
XERemoveEventCB(tc, (CARD8)i);
}
}
}
void XERemoveAllEventCBs(XETC *tc)
{
if (!tc->values.evt_cb)
{
return;
}
XtFree((XtPointer)tc->values.evt_cb);
}