mirror of
https://github.com/Stichting-MINIX-Research-Foundation/xsrc.git
synced 2025-09-14 07:07:44 -04:00
176 lines
4.5 KiB
C
176 lines
4.5 KiB
C
/* $XFree86: xc/lib/XTrap/XECallBcks.c,v 1.1 2001/11/02 23:29:27 dawes Exp $ */
|
||
/*****************************************************************************
|
||
Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA
|
||
|
||
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 Digital not be
|
||
used in advertising or publicity pertaining to distribution of the
|
||
software without specific, written prior permission.
|
||
|
||
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||
DIGITAL 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.
|
||
|
||
*****************************************************************************/
|
||
/*
|
||
*
|
||
* CONTRIBUTORS:
|
||
*
|
||
* Dick Annicchiarico
|
||
* Robert Chesler
|
||
* Dan Coutu
|
||
* Gene Durso
|
||
* Marc Evans
|
||
* Alan Jamison
|
||
* Mark Henry
|
||
* Ken Miller
|
||
*
|
||
*/
|
||
/*
|
||
* This file contains XETrap Callback initilization routines.
|
||
* The callback data hang off of the TC and are freed as part of the
|
||
* XEFreeTC routine.
|
||
*/
|
||
|
||
#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)
|
||
{ /* This is the first time for this particular TC, need to malloc */
|
||
if ((tc->values.req_cb =
|
||
(XETrapCB *)XtCalloc(256L,sizeof(XETrapCB))) == NULL)
|
||
{
|
||
/* XtCalloc already reported the error */
|
||
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)
|
||
{ /* This is the first time for this particular TC, need to malloc */
|
||
if ((tc->values.evt_cb =
|
||
(XETrapCB *)XtCalloc(XETrapCoreEvents,sizeof(XETrapCB))) == NULL)
|
||
{
|
||
/* XtCalloc already reported the error */
|
||
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)
|
||
{ /* We gotta problem! CB struct not allocated! */
|
||
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)
|
||
{ /* We gotta problem! CB struct not allocated! */
|
||
return;
|
||
}
|
||
XtFree((XtPointer)tc->values.req_cb);
|
||
}
|
||
|
||
void XERemoveEventCB(XETC *tc, CARD8 evt)
|
||
{
|
||
if (!tc->values.evt_cb)
|
||
{ /* We gotta problem! CB struct not allocated! */
|
||
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)
|
||
{ /* We gotta problem! CB struct not allocated! */
|
||
return;
|
||
}
|
||
XtFree((XtPointer)tc->values.evt_cb);
|
||
}
|