File:  [local] / rpl / modules / motif / motif.rplc
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Tue Jul 4 19:11:02 2017 UTC (6 years, 11 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Commit initial.

    1: #define __RPLC_MAIN
    2: #include "src/rplexternals.h"
    3: #include "motif.h"
    4: 
    5: libraryName(motif);
    6: 
    7: exportExternalFunctions(
    8:         XSynchronize,
    9:         XtAddCallback,
   10:         XtAppInitialize,
   11:         XtAppMainLoop,
   12:         XtAppExitMainLoop,
   13:         XtCreatePopupShell,
   14:         XtCreateWidget,
   15:         XtDestroyWidget,
   16:         XtPopdown,
   17:         XtPopup,
   18:         XtRealizeWidget,
   19:         XtRemoveAllCallbacks,
   20:         XtRemoveCallback);
   21: 
   22: declareSubroutine(onLoading)
   23:     declareInteger(i);
   24: 
   25:     notice(stdout, "\nMotif library V1R1 for RPL/2 (C) 2017 BERTRAND Joel\n");
   26:     notice(stdout, "Motif library loaded.\n\n");
   27: 
   28:     nombre_widgets = 256;
   29:     widgets = sys_malloc(nombre_widgets * size(Widget));
   30:     presence_widget = sys_malloc(nombre_widgets * size(char));
   31: 
   32:     loop(i = 0, i < nombre_widgets, i++)
   33:         presence_widget[i] = 0;
   34:     endLoop
   35: 
   36:     nombre_callbacks = 256;
   37:     callbacks = sys_malloc(nombre_callbacks * size(callbackArg));
   38:     presence_callback = sys_malloc(nombre_callbacks * size(char));
   39:     
   40:     loop(i = 0, i < nombre_callbacks, i++)
   41:         presence_callback[i] = 0;
   42:     endLoop
   43: 
   44:     // Création des variables spécifiques
   45: 
   46:     declareObject(variable);
   47:     declareObject(value);
   48: 
   49: #define createVariable(var) createVariable2(var, var)
   50: #define createVariable2(var, val) \
   51:         do { \
   52:             createNameObject(variable); \
   53:             setSymbolicName(variable, #var); \
   54:             createIntegerObject(value); \
   55:             setInteger(value, val); \
   56:             pushOnStack(variable); \
   57:             pushOnStack(value); \
   58:             intrinsic(over); \
   59:             intrinsic(save); \
   60:             intrinsic(parameter); \
   61:         } while(0)
   62: 
   63:     createVariable2(XmFalse, 0);
   64:     createVariable2(XmTrue, 1);
   65: 
   66:     createVariable(XmATTACH_NONE);
   67:     createVariable(XmATTACH_FORM);
   68:     createVariable(XmATTACH_OPPOSITE_FORM);
   69:     createVariable(XmATTACH_WIDGET);
   70:     createVariable(XmATTACH_OPPOSITE_WIDGET);
   71:     createVariable(XmATTACH_POSITION);
   72:     createVariable(XmATTACH_SELF);
   73: 
   74:     createVariable(XmALIGNMENT_BEGINNING);
   75:     createVariable(XmALIGNMENT_CENTER);
   76:     createVariable(XmALIGNMENT_END);
   77: 
   78:     createVariable(XmHORIZONTAL);
   79:     createVariable(XmVERTICAL);
   80: 
   81:     createVariable(XtGrabNone);
   82:     createVariable(XtGrabNonexclusive);
   83:     createVariable(XtGrabExclusive);
   84: 
   85:     createVariable(XmSTRING);
   86: endSubroutine
   87: 
   88: declareSubroutine(onClosing)
   89:     // Destruction des variables spécifiques
   90:     declareInteger(i);
   91: 
   92:     declareObject(variable);
   93: 
   94: #define purgeVariable(var) \
   95:         do { \
   96:             createNameObject(variable); \
   97:             setName(variable, #var); \
   98:             pushOnStack(variable); \
   99:             intrinsic(dup); \
  100:             intrinsic(variable); \
  101:             intrinsic(purge); \
  102:         } while(0)
  103: 
  104:     purgeVariable(XmFalse);
  105:     purgeVariable(XmTrue);
  106: 
  107:     purgeVariable(XmATTACH_NONE);
  108:     purgeVariable(XmATTACH_FORM);
  109:     purgeVariable(XmATTACH_OPPOSITE_FORM);
  110:     purgeVariable(XmATTACH_WIDGET);
  111:     purgeVariable(XmATTACH_OPPOSITE_WIDGET);
  112:     purgeVariable(XmATTACH_POSITION);
  113:     purgeVariable(XmATTACH_SELF);
  114: 
  115:     purgeVariable(XmALIGNMENT_BEGINNING);
  116:     purgeVariable(XmALIGNMENT_CENTER);
  117:     purgeVariable(XmALIGNMENT_END);
  118: 
  119:     purgeVariable(XmHORIZONTAL);
  120:     purgeVariable(XmVERTICAL);
  121: 
  122:     purgeVariable(XtGrabNone);
  123:     purgeVariable(XtGrabNonexclusive);
  124:     purgeVariable(XtGrabExclusive);
  125: 
  126:     purgeVariable(XmSTRING);
  127: 
  128:     sys_free(widgets);
  129:     sys_free(presence_widget);
  130: 
  131:     loop(i = 0, i < nombre_callbacks, i++)
  132:         if (presence_callback[i] ne 0) then
  133:             freeObject(callbacks[i].s_objet);
  134:         endIf
  135:     endLoop
  136:     
  137:     sys_free(callbacks);
  138:     sys_free(presence_callback);
  139: 
  140:     notice(stdout, "Motif library unloaded.\n\n");
  141: endSubroutine
  142: 
  143: declareExternalFunction(XtDestroyWidget)
  144:     HEADER
  145:     FUNCTION
  146:     END
  147: endExternalFunction
  148: 
  149: declareExternalFunction(XtRemoveCallback)
  150:     HEADER
  151:     FUNCTION
  152:     END
  153: endExternalFunction
  154: 
  155: declareExternalFunction(XtRemoveAllCallbacks)
  156:     HEADER
  157:     FUNCTION
  158:     END
  159: endExternalFunction
  160: 
  161: /*
  162: XmStringCreateLtoR
  163: XmCreateRadioBox
  164: XtVaSetValues
  165: XmStringFree
  166: XmTextFieldSetString
  167: XtManageChild
  168: XtSetSensitive
  169: XtVaGetValues
  170: XtAncetre
  171: */
  172: 
  173: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>