1: #define __RPLC_MAIN
2: #include "src/rplexternals.h"
3: #include "motif.h"
4:
5: libraryName(motif);
6:
7: exportExternalFunctions(
8: XSynchronize,
9: XStoreName,
10: XtAddCallback,
11: XtAppExitMainLoop,
12: XtAppInitialize,
13: XtAppMainLoop,
14: XtCreatePopupShell,
15: XtCreateManagedWidget,
16: XtCreateWidget,
17: XtDestroyWidget,
18: XtPopdown,
19: XtPopup,
20: XtRealizeWidget,
21: XtRemoveCallback);
22:
23: declareSubroutine(onLoading)
24: notice(stdout, "\nMotif library V2R1 for RPL/2 (C) 2017 BERTRAND Joel\n");
25: notice(stdout, "Motif library loaded.\n\n");
26:
27: // Création des variables spécifiques
28:
29: declareObject(variable);
30: declareObject(value);
31:
32: #define createVariable(var) createVariable2(var, var)
33: #define createVariable2(var, val) \
34: do { \
35: createNameObject(variable); \
36: setSymbolicName(variable, #var); \
37: createIntegerObject(value); \
38: setInteger(value, val); \
39: pushOnStack(variable); \
40: pushOnStack(value); \
41: intrinsic(over); \
42: intrinsic(save); \
43: intrinsic(parameter); \
44: } while(0)
45:
46: createVariable2(XmFalse, 0);
47: createVariable2(XmTrue, 1);
48:
49: createVariable(XmATTACH_NONE);
50: createVariable(XmATTACH_FORM);
51: createVariable(XmATTACH_OPPOSITE_FORM);
52: createVariable(XmATTACH_WIDGET);
53: createVariable(XmATTACH_OPPOSITE_WIDGET);
54: createVariable(XmATTACH_POSITION);
55: createVariable(XmATTACH_SELF);
56:
57: createVariable(XmALIGNMENT_BEGINNING);
58: createVariable(XmALIGNMENT_CENTER);
59: createVariable(XmALIGNMENT_END);
60:
61: createVariable(XmHORIZONTAL);
62: createVariable(XmVERTICAL);
63:
64: createVariable(XtGrabNone);
65: createVariable(XtGrabNonexclusive);
66: createVariable(XtGrabExclusive);
67:
68: createVariable(XmSTRING);
69:
70: setFalse(initializationDone);
71: nullify(lCallbacks);
72: endSubroutine
73:
74: declareSubroutine(onClosing)
75: // Destruction des variables spécifiques et des callbacks
76: declareObject(variable);
77: declareDaisyChain(current);
78: declareDaisyChain(next);
79:
80: current = lCallbacks;
81:
82: repeatWhile(not nullified(current))
83: next = nextElementOfDaisyChain(current);
84: variable = fetchElementFromDaisyChain(current);
85: freeObject(variable);
86: free(current);
87: current = next;
88: endWhile
89:
90: nullify(lCallbacks);
91:
92: #define purgeVariable(var) \
93: do { \
94: createNameObject(variable); \
95: setName(variable, #var); \
96: pushOnStack(variable); \
97: intrinsic(dup); \
98: intrinsic(variable); \
99: intrinsic(purge); \
100: } while(0)
101:
102: purgeVariable(XmFalse);
103: purgeVariable(XmTrue);
104:
105: purgeVariable(XmATTACH_NONE);
106: purgeVariable(XmATTACH_FORM);
107: purgeVariable(XmATTACH_OPPOSITE_FORM);
108: purgeVariable(XmATTACH_WIDGET);
109: purgeVariable(XmATTACH_OPPOSITE_WIDGET);
110: purgeVariable(XmATTACH_POSITION);
111: purgeVariable(XmATTACH_SELF);
112:
113: purgeVariable(XmALIGNMENT_BEGINNING);
114: purgeVariable(XmALIGNMENT_CENTER);
115: purgeVariable(XmALIGNMENT_END);
116:
117: purgeVariable(XmHORIZONTAL);
118: purgeVariable(XmVERTICAL);
119:
120: purgeVariable(XtGrabNone);
121: purgeVariable(XtGrabNonexclusive);
122: purgeVariable(XtGrabExclusive);
123:
124: purgeVariable(XmSTRING);
125:
126: notice(stdout, "Motif library unloaded.\n\n");
127: endSubroutine
128:
129: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>