#define __RPLC_MAIN #include "src/rplexternals.h" #include "motif.h" libraryName(motif); exportExternalFunctions( XSynchronize, XtAddCallback, XtAppExitMainLoop, XtAppInitialize, XtAppMainLoop, XtCreatePopupShell, XtCreateManagedWidget, XtCreateWidget, XtDestroyWidget, XtPopdown, XtPopup, XtRealizeWidget, XtRemoveCallback); declareSubroutine(onLoading) notice(stdout, "\nMotif library V2R1 for RPL/2 (C) 2017 BERTRAND Joel\n"); notice(stdout, "Motif library loaded.\n\n"); // Création des variables spécifiques declareObject(variable); declareObject(value); #define createVariable(var) createVariable2(var, var) #define createVariable2(var, val) \ do { \ createNameObject(variable); \ setSymbolicName(variable, #var); \ createIntegerObject(value); \ setInteger(value, val); \ pushOnStack(variable); \ pushOnStack(value); \ intrinsic(over); \ intrinsic(save); \ intrinsic(parameter); \ } while(0) createVariable2(XmFalse, 0); createVariable2(XmTrue, 1); createVariable(XmATTACH_NONE); createVariable(XmATTACH_FORM); createVariable(XmATTACH_OPPOSITE_FORM); createVariable(XmATTACH_WIDGET); createVariable(XmATTACH_OPPOSITE_WIDGET); createVariable(XmATTACH_POSITION); createVariable(XmATTACH_SELF); createVariable(XmALIGNMENT_BEGINNING); createVariable(XmALIGNMENT_CENTER); createVariable(XmALIGNMENT_END); createVariable(XmHORIZONTAL); createVariable(XmVERTICAL); createVariable(XtGrabNone); createVariable(XtGrabNonexclusive); createVariable(XtGrabExclusive); createVariable(XmSTRING); setFalse(initializationDone); nullify(lCallbacks); endSubroutine declareSubroutine(onClosing) // 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 { \ createNameObject(variable); \ setName(variable, #var); \ pushOnStack(variable); \ intrinsic(dup); \ intrinsic(variable); \ intrinsic(purge); \ } while(0) purgeVariable(XmFalse); purgeVariable(XmTrue); purgeVariable(XmATTACH_NONE); purgeVariable(XmATTACH_FORM); purgeVariable(XmATTACH_OPPOSITE_FORM); purgeVariable(XmATTACH_WIDGET); purgeVariable(XmATTACH_OPPOSITE_WIDGET); purgeVariable(XmATTACH_POSITION); purgeVariable(XmATTACH_SELF); purgeVariable(XmALIGNMENT_BEGINNING); purgeVariable(XmALIGNMENT_CENTER); purgeVariable(XmALIGNMENT_END); purgeVariable(XmHORIZONTAL); purgeVariable(XmVERTICAL); purgeVariable(XtGrabNone); purgeVariable(XtGrabNonexclusive); purgeVariable(XtGrabExclusive); purgeVariable(XmSTRING); notice(stdout, "Motif library unloaded.\n\n"); endSubroutine // vim: ts=4