File:  [local] / rpl / modules / motif / XtRemoveCallback.rplc
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Sun Jul 30 21:59:41 2017 UTC (6 years, 9 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_35, rpl-4_1_34, rpl-4_1_33, rpl-4_1_32, rpl-4_1_31, rpl-4_1_30, rpl-4_1_29, rpl-4_1_28, rpl-4_1_27, HEAD
Ajout d'une série de patches pour gérer les instructions de type A->B
dans les bibliothèques externes.

    1: #include "src/rplexternals.h"
    2: #include "motif.h"
    3: 
    4: declareExternalFunction(XtRemoveCallback)
    5:     declareObject(widget);
    6:     declareObject(callback);
    7:     declareObject(callbackFromList);
    8:     declareDaisyChain(current);
    9:     declareDaisyChain(previous);
   10:     declareDaisyChain(next);
   11: 
   12:     HEADER
   13:         declareHelpString("Remove callback from a widget\n"
   14:                 "    2: widget\n"
   15:                 "    1: callback\n");
   16:         numberOfArguments(2);
   17:     FUNCTION
   18:         if (initializationDone eq true) then
   19:             pullFromStack(callback, external);
   20:             returnOnError(freeObject(callback));
   21: 
   22:             pullFromStack(widget, external);
   23:             returnOnError(freeObject(callback); freeObject(widget));
   24: 
   25:             ifIsExternal(widget, WIDGET) then
   26:             orElse
   27:                 executionError("Type mismatch error");
   28:                 returnOnError(freeObject(callback); freeObject(widget));
   29:             endIf
   30: 
   31:             ifIsExternal(callback, CALLBACK) then
   32:             orElse
   33:                 executionError("Type mismatch error");
   34:                 returnOnError(freeObject(callback); freeObject(widget));
   35:             endIf
   36: 
   37:             current = lCallbacks;
   38:             nullify(previous);
   39: 
   40:             repeatWhile(not nullified(current))
   41:                 callbackFromList = fetchElementFromDaisyChain(current);
   42: 
   43:                 if (((objectContainer(sXtCallback, callbackFromList))->widget
   44:                         eq target(objectContainer(Widget, widget))) and
   45:                         (callback eq callbackFromList)) then
   46:                     break;
   47:                 endIf
   48: 
   49:                 previous = current;
   50:                 nextElementOfDaisyChain(current);
   51:             endWhile
   52: 
   53:             if (nullified(current)) then
   54:                 executionError("Callback not found");
   55:                 returnOnError(freeObject(callback); freeObject(widget));
   56:             endIf
   57: 
   58:             if (callbackFromList eq fetchElementFromDaisyChain(lCallbacks)) then
   59:                 next = current;
   60:                 nextElementOfDaisyChain(next);
   61:                 lCallbacks = next;
   62: 
   63:                 freeObject(callbackFromList);
   64:                 free(current);
   65:             orElse
   66:                 previous->next = current->next;
   67: 
   68:                 freeObject(callbackFromList);
   69:                 free(current);
   70:             endIf
   71:         orElse
   72:             executionError("Application not initialized");
   73:             returnOnError();
   74:         endIf
   75:     END
   76: endExternalFunction
   77: 
   78: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>