Annotation of rpl/modules/motif/XtAddCallback.rplc, revision 1.2
1.1 bertrand 1: #include "src/rplexternals.h"
2: #include "motif.h"
3:
4: declareExternalFunction(XtAddCallback)
5: declareObject(widget);
6: declareObject(callbackName);
7: declareObject(callbackProc);
8: declareObject(subList);
9: declareObject(procStatus);
10:
11: string type;
12:
13: String callback;
14:
15: HEADER
16: declareHelpString("Add callback to a widget\n"
17: " 3: widget\n"
18: " 2: callback name (XmNactivateCallback)\n"
19: " 1: expression\n");
20: numberOfArguments(3);
21: FUNCTION
22: if (initializationDone eq true) then
23: pullFromStack(callbackProc, unknown);
24: returnOnError(freeObject(callbackProc));
25:
26: pullFromStack(callbackName, string);
27: returnOnError(freeObject(callbackProc); freeObject(callbackName));
28:
29: pullFromStack(widget, external);
30: returnOnError(freeObject(callbackProc); freeObject(callbackName);
31: freeObject(widget));
32:
33: ifIsExternal(widget, WIDGET) then
34: orElse
35: executionError("Type mismatch error");
36: returnOnError(freeObject(callbackProc);
37: freeObject(callbackName); freeObject(widget));
38: endIf
39:
40: getString(callbackName, type);
41:
42: if (strcmp(type, "XmNactivateCallback") eq 0) then
43: callback = XmNactivateCallback;
44: orElse
45: executionError("Unknown callback type");
46: returnOnError(freeObject(callbackProc);
47: freeObject(callbackName); freeObject(widget));
48: endIf
49:
50: // Adding a copy of expression in a list.
51:
52: dupObject(callbackProc);
53:
54: createListObject(subList);
55: createObject(procStatus);
56:
57: objectContainer(procStatus) = address(procStatus(rpl_arguments));
58:
59: insertObjectIntoList(subList, callbackProc);
60: insertObjectIntoList(subList, procStatus);
61: insertObjectIntoList(callbacksList, subList);
62:
63: XtAddCallback(target((Widget *) objectContainer(widget)),
64: callback, rplCallback, (XtPointer) subList);
65: orElse
66: executionError("Application not initialized");
67: returnOnError();
68: endIf
69: END
70: endExternalFunction
71:
72: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>