This is Callbacks.c in view mode; [Download] [Up]
#if ( !defined(lint) && !defined(SABER))
static char PCN_rcsid[] = "$Header: /ufs/comp/mei/PROJ_PCN/onprofile/IFModel/Xsw/Callbacks.c,v 1.1 1992/04/17 18:21:13 mei Exp $";
#endif
/******************************************************************************
* *
* Copyright (C) The Aerospace Corporation 1991 *
* *
* This software was developed by The Aerospace Corporation as a *
* research endeavor for the United States Air Force *
* Space Systems Division. The current version of the Gauge *
* computer program is available for release to you for *
* educational and research purposes only. It is not *
* to be used for commercial purposes. *
* *
* In addition, the following conditions shall apply. *
* *
* 1) The computer software and documentation were designed to *
* satisfy internal Aerospace requirements only. *
* The software is provided ``as is,'' and The Aerospace Corporation *
* makes no warranty, expressed or implied, as to it accuracy, *
* functioning, or fitness for a particular purpose. *
* *
* 2) The Aerospace Corporation and its personnel are not *
* responsible for providing technical support or general assistance *
* with respect to the software. *
* *
* 3) Neither The Aerospace Corporation nor its personnel shall be *
* liable for claims, losses, or damages arising out of or connected *
* with the use of this software. *
* Your sole and exclusive remedy shall be to request a replacement *
* copy of the program. *
* *
******************************************************************************/
#include "Xsw.h"
#include "Callbacks.h"
static Boolean CvtStringToCallback();
typedef struct callbackstruct callback;
struct callbackstruct {
XtCallbackProc function;
char * name;
callback * next;
XtPointer data;
};
static callback * GetCallback();
static callback Callbacks = {
NULL, NULL, NULL, NULL };
void XswRegisterCallback(name, function, data)
char * name;
XtCallbackProc function;
XtPointer data;
{
callback * call;
if (Callbacks.next == NULL) {
XtSetTypeConverter(XtRString, XtRCallback,
CvtStringToCallback, NULL, 0,
XtCacheNone, NULL);
}
call = GetCallback(name);
if (call == NULL) {
call = &Callbacks;
while (call->next != NULL) call = call->next;
call->next = (callback *)XtMalloc(sizeof(callback));
call->next->function = function;
call->next->name = name;
call->next->data = data;
call->next->next = NULL;
} else {
call->function = function;
call->data = data;
}
}
static callback *
GetCallback(name)
char * name;
{
callback * call;
call = &Callbacks;
while (call->next != NULL) {
if (!strcmp(call->next->name, name))
return call->next;
call = call->next;
}
return NULL;
}
/* ARGSUSED */
static Boolean
CvtStringToCallback(display, args, nargs,
fromVal, toVal, converter_data)
Display* display;
XrmValuePtr args, fromVal, toVal;
int *nargs;
XtPointer* converter_data;
{
static XtCallbackRec *callback_list;
callback * call;
call = GetCallback((char *)fromVal->addr);
if (call == NULL) {
XtStringConversionWarning((char *) fromVal->addr, "Callback");
return False;
}
else {
callback_list = (XtCallbackRec *)XtCalloc(2, sizeof(XtCallbackRec));
callback_list[0].callback = call->function;
callback_list[0].closure = call->data;
callback_list[1].callback = (XtCallbackProc) NULL;
callback_list[1].closure = (XPointer) NULL;
DONE(XtCallbackRec *, callback_list);
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.