#include "src/rplexternals.h" #include "motif.h" declareExternalFunction(XtAddCallback) declareObject(widget); declareObject(callbackName); declareObject(callbackProc); sXtCallback *sCallback; string type; String callback; struct_liste_chainee *tmp; HEADER declareHelpString("Add callback to a widget\n" " 3: widget\n" " 2: callback name (XmNactivateCallback)\n" " 1: expression\n"); numberOfArguments(3); FUNCTION if (initializationDone eq true) then pullFromStack(callbackProc, unknown); returnOnError(freeObject(callbackProc)); pullFromStack(callbackName, string); returnOnError(freeObject(callbackProc); freeObject(callbackName)); pullFromStack(widget, external); returnOnError(freeObject(callbackProc); freeObject(callbackName); freeObject(widget)); ifIsExternal(widget, WIDGET) then orElse executionError("Type mismatch error"); returnOnError(freeObject(callbackProc); freeObject(callbackName); freeObject(widget)); endIf getString(callbackName, type); if (strcmp(type, "XmNactivateCallback") eq 0) then callback = XmNactivateCallback; orElse executionError("Unknown callback type"); returnOnError(freeObject(callbackProc); freeObject(callbackName); freeObject(widget)); endIf sCallback = allocate(size(sXtCallback)); sCallback->status = procStatus(rpl_arguments); sCallback->callback = callbackProc; sCallback->widget = target((Widget *) objectContainer(widget)); XtAddCallback(target((Widget *) objectContainer(widget)), callback, rplCallback, (XtPointer) sCallback); tmp = allocate(size(struct_liste_chainee)); tmp->suivant = lCallbacks; tmp->donnee = (void *) sCallback; lCallbacks = tmp; orElse executionError("Application not initialized"); returnOnError(); endIf END endExternalFunction // vim: ts=4