Annotation of rpl/modules/motif/XtRemoveCallback.rplc, revision 1.1

1.1     ! bertrand    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 ((((sXtCallback *) objectContainer(callbackFromList))->widget
        !            44:                        eq target((Widget *) objectContainer(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>