--- rpl/modules/motif/motif.rplc 2017/07/04 21:13:37 1.2 +++ rpl/modules/motif/motif.rplc 2017/08/23 12:21:59 1.11 @@ -6,41 +6,26 @@ libraryName(motif); exportExternalFunctions( XSynchronize, + XStoreName, + XmSetIcon, XtAddCallback, + XtAppExitMainLoop, XtAppInitialize, XtAppMainLoop, - XtAppExitMainLoop, XtCreatePopupShell, + XtCreateManagedWidget, XtCreateWidget, XtDestroyWidget, + XtOpenApplication, XtPopdown, XtPopup, XtRealizeWidget, - XtRemoveAllCallbacks, XtRemoveCallback); declareSubroutine(onLoading) - declareInteger(i); - notice(stdout, "\nMotif library V2R1 for RPL/2 (C) 2017 BERTRAND Joel\n"); notice(stdout, "Motif library loaded.\n\n"); - nombre_widgets = 256; - widgets = sys_malloc(nombre_widgets * size(Widget)); - presence_widget = sys_malloc(nombre_widgets * size(char)); - - loop(i = 0, i < nombre_widgets, i++) - presence_widget[i] = 0; - endLoop - - nombre_callbacks = 256; - callbacks = sys_malloc(nombre_callbacks * size(callbackArg)); - presence_callback = sys_malloc(nombre_callbacks * size(char)); - - loop(i = 0, i < nombre_callbacks, i++) - presence_callback[i] = 0; - endLoop - // Création des variables spécifiques declareObject(variable); @@ -83,13 +68,28 @@ declareSubroutine(onLoading) createVariable(XtGrabExclusive); createVariable(XmSTRING); + + setFalse(initializationDone); + nullify(lCallbacks); endSubroutine declareSubroutine(onClosing) - // Destruction des variables spécifiques - declareInteger(i); - + // Destruction des variables spécifiques et des callbacks declareObject(variable); + declareDaisyChain(current); + declareDaisyChain(next); + + current = lCallbacks; + + repeatWhile(not nullified(current)) + next = nextElementOfDaisyChain(current); + variable = fetchElementFromDaisyChain(current); + freeObject(variable); + free(current); + current = next; + endWhile + + nullify(lCallbacks); #define purgeVariable(var) \ do { \ @@ -125,49 +125,7 @@ declareSubroutine(onClosing) purgeVariable(XmSTRING); - sys_free(widgets); - sys_free(presence_widget); - - loop(i = 0, i < nombre_callbacks, i++) - if (presence_callback[i] ne 0) then - freeObject(callbacks[i].s_objet); - endIf - endLoop - - sys_free(callbacks); - sys_free(presence_callback); - notice(stdout, "Motif library unloaded.\n\n"); endSubroutine -declareExternalFunction(XtDestroyWidget) - HEADER - FUNCTION - END -endExternalFunction - -declareExternalFunction(XtRemoveCallback) - HEADER - FUNCTION - END -endExternalFunction - -declareExternalFunction(XtRemoveAllCallbacks) - HEADER - FUNCTION - END -endExternalFunction - -/* -XmStringCreateLtoR -XmCreateRadioBox -XtVaSetValues -XmStringFree -XmTextFieldSetString -XtManageChild -XtSetSensitive -XtVaGetValues -XtAncetre -*/ - // vim: ts=4