#include "src/rplexternals.h" #include "motif.h" declareExternalFunction(XtAddCallback) declareObject(widget); declareObject(callbackName); declareObject(callbackProc); declareObject(subList); declareObject(procStatus); string type; String callback; 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 // Adding a copy of expression in a list. dupObject(callbackProc); createListObject(subList); createObject(procStatus); objectContainer(procStatus) = address(procStatus(rpl_arguments)); insertObjectIntoList(subList, callbackProc); insertObjectIntoList(subList, procStatus); insertObjectIntoList(callbacksList, subList); XtAddCallback(target((Widget *) objectContainer(widget)), callback, rplCallback, (XtPointer) subList); orElse executionError("Application not initialized"); returnOnError(); endIf END endExternalFunction // vim: ts=4