void
SlapVhoCloneParamList
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 src_param_list,
        ANSC_HANDLE*                dst_param_list
    )
{
    PSLAP_PARAMETER_LIST            src_list = (PSLAP_PARAMETER_LIST)src_param_list;
    PSLAP_PARAMETER_LIST            dst_list = (PSLAP_PARAMETER_LIST)*dst_param_list;
    ULONG                           ii       = 0;

    if ( !dst_list )
    {
        dst_list =
            (PSLAP_PARAMETER_LIST)AnscAllocateMemory
                (
                    sizeof(SLAP_PARAMETER_LIST)
                );

        if ( dst_list )
        {
            dst_list->ParamCount = 0;
        }
    }
    else
    {
        SlapCleanParamList(dst_list);
    }

    if ( dst_list )
    {
        dst_list->ParamCount = src_list->ParamCount;

        for ( ii = 0; ii < src_list->ParamCount; ii++ )
        {
            SlapCloneVariable
                (
                    (&src_list->ParamArray[ii]),
                    (&dst_list->ParamArray[ii])
                );
        }
    }

    *dst_param_list = dst_list;

    return;
}
ANSC_STATUS
DslhVarroNotifyValueChanged
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus        = ANSC_STATUS_SUCCESS;
    PDSLH_VAR_RECORD_OBJECT         pMyObject           = (PDSLH_VAR_RECORD_OBJECT      )hThisObject;
    PDSLH_OBJ_RECORD_OBJECT         pObjRecord          = (PDSLH_OBJ_RECORD_OBJECT      )pMyObject->hDslhObjRecord;
    PDSLH_CPE_CONTROLLER_OBJECT     pDslhCpeController  = (PDSLH_CPE_CONTROLLER_OBJECT  )pObjRecord->hDslhCpeController;
    PCCC_MBI_INTERFACE              pDslhMbiIf          = (PCCC_MBI_INTERFACE           )pDslhCpeController->GetInterfaceByName((ANSC_HANDLE)pDslhCpeController, CCC_MBI_INTERFACE_NAME);
    PDSLH_VAR_ENTITY_OBJECT         pVarEntity          = (PDSLH_VAR_ENTITY_OBJECT      )pMyObject->hDslhVarEntity;
    PSLAP_VARIABLE                  pNewValue           = (PSLAP_VARIABLE               )NULL;
    char*                           pParamFullName      = NULL;
    char*                           pAccessList         = NULL;

    if ( !pDslhMbiIf )
    {
        AnscTraceError(("DslhVarroNotifyValueChanged: pDslhMbiIf is NULL\n"));

        return ANSC_STATUS_FAILURE;
    }

    pParamFullName = pMyObject->GetFullName((ANSC_HANDLE)pMyObject);

    if ( pMyObject->TempParamValue )
    {
        SlapAllocVariable(pNewValue);

        if ( !pNewValue )
        {
            returnStatus = ANSC_STATUS_RESOURCES;

            return returnStatus;
        }
        
        SlapCloneVariable(pMyObject->TempParamValue, pNewValue);
    }
    else
    {
        /* New value has to be present all the time. Get current value */
        pNewValue = pMyObject->GetValue((ANSC_HANDLE)pMyObject);
    }
	if(pNewValue != NULL)
	{
		pNewValue->ReqSenderID = pMyObject->ReqSenderID;
	}
    pAccessList = AnscCloneString(pMyObject->AccessList);

    returnStatus =
        pDslhMbiIf->SendParameterValueChangeSignal
            (
                (void*)pDslhMbiIf->hOwnerContext,
                pParamFullName,
                pMyObject->OldParamValue,
                pNewValue,
                pAccessList
            );

    if ( pNewValue )
    {
        SlapFreeVariable(pNewValue);
    }

    if ( pParamFullName )
    {
        AnscFreeMemory(pParamFullName);
    }

    if ( pAccessList )
    {
        AnscFreeMemory(pAccessList);
    }

    return returnStatus;
}
SLAP_VARIABLE*
SlapScoGalGetVariable
    (
        ANSC_HANDLE                 hThisObject,
        SLAP_PARAMETER_LIST*        param_list
    )
{
    ANSC_STATUS                     returnStatus    = ANSC_STATUS_SUCCESS;
    PSLAP_SCO_GALLERY_OBJECT        pMyObject       = (PSLAP_SCO_GALLERY_OBJECT)hThisObject;
    PANSC_ATOM_TABLE_OBJECT         pAtoVariable    = (PANSC_ATOM_TABLE_OBJECT )pMyObject->hAtoVariable;
    PANSC_ATOM_DESCRIPTOR           pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR   )NULL;
    PSLAP_VARIABLE                  pGalVariable    = (PSLAP_VARIABLE          )NULL;
    PSLAP_VARIABLE                  pReturnedVar    = (PSLAP_VARIABLE          )NULL;

    if ( !param_list || (param_list->ParamCount < 1) )
    {
        return  NULL;
    }
    else if ( param_list->ParamArray[0].Syntax != SLAP_VAR_SYNTAX_string )
    {
        return  NULL;
    }
    else if ( !param_list->ParamArray[0].Variant.varString )
    {
        return  NULL;
    }

    pAtomDescriptor =
        (PANSC_ATOM_DESCRIPTOR)pAtoVariable->GetAtomByName
            (
                (ANSC_HANDLE)pAtoVariable,
                param_list->ParamArray[0].Variant.varString
            );

    if ( !pAtomDescriptor )
    {
        return  NULL;
    }
    else
    {
        pGalVariable = (PSLAP_VARIABLE)pAtomDescriptor->hContext;
    }

    if ( !pGalVariable )
    {
        return  NULL;
    }
    else
    {
        pReturnedVar = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE));

        if ( !pReturnedVar )
        {
            return  NULL;
        }
        else
        {
            SlapInitVariable (pReturnedVar);
            SlapCloneVariable(pGalVariable, pReturnedVar);
        }
    }

    return  pReturnedVar;
}
ANSC_STATUS
SlapScoGalAddVariable
    (
        ANSC_HANDLE                 hThisObject,
        SLAP_PARAMETER_LIST*        param_list
    )
{
    ANSC_STATUS                     returnStatus    = ANSC_STATUS_SUCCESS;
    PSLAP_SCO_GALLERY_OBJECT        pMyObject       = (PSLAP_SCO_GALLERY_OBJECT)hThisObject;
    PANSC_ATOM_TABLE_OBJECT         pAtoVariable    = (PANSC_ATOM_TABLE_OBJECT )pMyObject->hAtoVariable;
    PANSC_ATOM_DESCRIPTOR           pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR   )NULL;
    PSLAP_VARIABLE                  pGalVariable    = (PSLAP_VARIABLE          )NULL;
    PSLAP_VARIABLE                  pTbsVariable    = (PSLAP_VARIABLE          )NULL;

    if ( !param_list || (param_list->ParamCount < 2) )
    {
        return  ANSC_STATUS_BAD_PARAMETER;
    }
    else if ( param_list->ParamArray[0].Syntax != SLAP_VAR_SYNTAX_string )
    {
        return  ANSC_STATUS_BAD_PARAMETER;
    }
    else if ( !param_list->ParamArray[0].Variant.varString )
    {
        return  ANSC_STATUS_BAD_PARAMETER;
    }
    else
    {
        pTbsVariable = &param_list->ParamArray[1];
        pGalVariable = NULL;
    }

    pAtomDescriptor =
        (PANSC_ATOM_DESCRIPTOR)pAtoVariable->GetAtomByName
            (
                (ANSC_HANDLE)pAtoVariable,
                param_list->ParamArray[0].Variant.varString
            );

    if ( pAtomDescriptor )
    {
        return  ANSC_STATUS_COLLISION;
    }
    else
    {
        pGalVariable = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE));

        if ( !pGalVariable )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            SlapInitVariable (pGalVariable);
            SlapCloneVariable(pTbsVariable, pGalVariable);
        }
    }

    pAtoVariable->AddAtomByName
        (
            (ANSC_HANDLE)pAtoVariable,
            param_list->ParamArray[0].Variant.varString,
            0,
            (ANSC_HANDLE)pGalVariable
        );

    returnStatus =
        pMyObject->JoinGallery
            (
                (ANSC_HANDLE)pMyObject,
                pGalVariable
            );

    return  returnStatus;
}
ANSC_STATUS
SlapScoStdInvokeDispatch
    (
        ANSC_HANDLE                 hThisObject,
        char*                       method_name,
        SLAP_PARAMETER_LIST*        params_in,
        SLAP_PARAMETER_LIST**       params_out,
        SLAP_VARIABLE**             return_var
    )
{
    ANSC_STATUS                     returnStatus      = ANSC_STATUS_SUCCESS;
    PSLAP_SCO_STANDARD_OBJECT       pMyObject         = (PSLAP_SCO_STANDARD_OBJECT)hThisObject;
    PSLAP_OLA_INTERFACE             pSlapOlaIf        = (PSLAP_OLA_INTERFACE      )pMyObject->hSlapOlaIf;
    PSLAP_METHOD_DESCRIPTOR         pMethodDescriptor = (PSLAP_METHOD_DESCRIPTOR  )NULL;
    PSLAP_PARAMETER_LIST            pOutputParamList  = (PSLAP_PARAMETER_LIST     )NULL;
    PSLAP_VARIABLE                  pReturnedVar      = (PSLAP_VARIABLE           )NULL;
    void*                           pfnTargetMethod   = (void*                    )NULL;

    /*
     * First of all, we need to verify the input parameters are valid of course. We do expect the
     * caller to allocate the memory for params_in even if there's no input parameters. We will be
     * responsible for allocating params_out and return_var.
     */
    if ( !method_name || !params_in || !params_out || !return_var )
    {
        return  ANSC_STATUS_BAD_PARAMETER;
    }
    else
    {
        *params_out = NULL;
        *return_var = NULL;

        pMethodDescriptor =
            (PSLAP_METHOD_DESCRIPTOR)pSlapOlaIf->GetMethodDescriptor
                (
                    pSlapOlaIf->hOwnerContext,
                    method_name,
                    params_in
                );
    }

    /*
     * Ooops! There're no method has been associated with the specified method name or no matched
     * parameter list has been identified. Note that above we always match the number of the input
     * parameters with the existing method descriptors. The caller must make sure the number of
     * input parameters is accurate.
     */
    if ( !pMethodDescriptor )
    {
        return  ANSC_STATUS_CANT_FIND;
    }
    else
    {
        pfnTargetMethod = *(void**)((ULONG)pMyObject + pMethodDescriptor->MethodOffset);
    }

    /*
     * We shall always perform data type conversion on all input parameters unless the method
     * descriptor indicates that the input parameters should be passed in without any translation.
     * However only internal basic SLAP functions may specify that. Derived service objects MUST
     * NEVER attempt it.
     */
    if ( !(pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI) )
    {
        returnStatus =
            pMyObject->ConvertParams
                (
                    (ANSC_HANDLE)pMyObject,
                    pMethodDescriptor->ParamListI,
                    params_in
                );

        if ( returnStatus != ANSC_STATUS_SUCCESS )
        {
            goto  EXIT1;
        }
    }

    /*
     * Now it comes the hardest and most time-consuming part: making sensible calls into the target
     * object methods. Apparently, we have two choices:
     *
     *  (1) We can require all the derived service objects MUST override this member
     *      function. Within the overrided function, the drived object shall map the
     *      method name to the desired function call and arrange the function parameters.
     *
     *  (2) We can invoke the target method calls directly since we're supposed to have
     *      everything we need to arrange the function parameters. However this means we
     *      MUST enumerate all possible calling scenarios, which can be extremely boring
     *      and weird (that's how I feel somehow).
     *
     * Guess which option we're going to choose...
     */
    if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passReturnVar )
    {
        if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI )
        {
            if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO )
            {
                pOutputParamList = NULL;
                pReturnedVar     =
                    ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                        (
                            (ANSC_HANDLE)pMyObject,
                            params_in,
                            params_out
                        );

                pOutputParamList = *params_out;
            }
            else
            {
                pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST));

                if ( !pOutputParamList )
                {
                    returnStatus = ANSC_STATUS_RESOURCES;

                    goto  EXIT1;
                }
                else
                {
                    SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList);
                }

                switch ( pMethodDescriptor->ParamListO->ParamCount )
                {
                    case    0 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in
                                    );

                            break;

                    case    1 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool
                                    );

                            break;

                    case    2 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool
                                    );

                            break;

                    case    3 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool
                                    );

                            break;

                    case    4 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool
                                    );

                            break;

                    case    5 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool
                                    );

                            break;

                    case    6 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool,
                                        &pOutputParamList->ParamArray[5].Variant.varBool
                                    );

                            break;

                    case    7 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool,
                                        &pOutputParamList->ParamArray[5].Variant.varBool,
                                        &pOutputParamList->ParamArray[6].Variant.varBool
                                    );

                            break;

                    case    8 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool,
                                        &pOutputParamList->ParamArray[5].Variant.varBool,
                                        &pOutputParamList->ParamArray[6].Variant.varBool,
                                        &pOutputParamList->ParamArray[7].Variant.varBool
                                    );

                            break;

                    default :

                            returnStatus = ANSC_STATUS_INTERNAL_ERROR;

                            goto  EXIT2;

                            break;
                }
            }
        }
        else
        {
            if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO )
            {
                pOutputParamList = NULL;

                switch ( pMethodDescriptor->ParamListI->ParamCount )
                {
                    case    0 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_out
                                    );

                            break;

                    case    1 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        params_out
                                    );

                            break;

                    case    2 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        params_out
                                    );

                            break;

                    case    3 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        params_out
                                    );

                            break;

                    case    4 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        params_out
                                    );

                            break;

                    case    5 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        params_out
                                    );

                            break;

                    case    6 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 5),
                                        params_out
                                    );

                            break;

                    case    7 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 5),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 6),
                                        params_out
                                    );

                            break;

                    case    8 :

                            pReturnedVar =
                                ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 5),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 6),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 7),
                                        params_out
                                    );

                            break;

                    default :

                            returnStatus = ANSC_STATUS_INTERNAL_ERROR;

                            goto  EXIT1;

                            break;
                }

                pOutputParamList = *params_out;
            }
            else
            {
                pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST));

                if ( !pOutputParamList )
                {
                    returnStatus = ANSC_STATUS_RESOURCES;

                    goto  EXIT1;
                }
                else
                {
                    SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList);
                }

                switch ( pMethodDescriptor->ParamListI->ParamCount )
                {
                    case    0 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput0
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    1 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput1
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    2 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput2
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    3 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput3
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    4 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput4
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    5 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput5
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    6 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput6
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    7 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput7
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    8 :

                            pReturnedVar =
                                (PSLAP_VARIABLE)pMyObject->InvokeFixInput8
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    default :

                            returnStatus = ANSC_STATUS_INTERNAL_ERROR;

                            goto  EXIT2;

                            break;
                }
            }
        }

        *params_out = pOutputParamList;
        *return_var = pReturnedVar;
    }
    else
    {
        pReturnedVar = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE));

        if ( !pReturnedVar )
        {
            returnStatus = ANSC_STATUS_RESOURCES;

            goto  EXIT1;
        }
        else
        {
            SlapCloneVariable(pMethodDescriptor->ReturnVar, pReturnedVar);
        }

        if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI )
        {
            if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO )
            {
                pOutputParamList              = NULL;
                pReturnedVar->Variant.varBool =
                    ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                        (
                            (ANSC_HANDLE)pMyObject,
                            params_in,
                            params_out
                        );

                pOutputParamList = *params_out;
            }
            else
            {
                pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST));

                if ( !pOutputParamList )
                {
                    returnStatus = ANSC_STATUS_RESOURCES;

                    goto  EXIT1;
                }
                else
                {
                    SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList);
                }

                switch ( pMethodDescriptor->ParamListO->ParamCount )
                {
                    case    0 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in
                                    );

                            break;

                    case    1 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool
                                    );

                            break;

                    case    2 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool
                                    );

                            break;

                    case    3 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool
                                    );

                            break;

                    case    4 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool
                                    );

                            break;

                    case    5 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool
                                    );

                            break;

                    case    6 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool,
                                        &pOutputParamList->ParamArray[5].Variant.varBool
                                    );

                            break;

                    case    7 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool,
                                        &pOutputParamList->ParamArray[5].Variant.varBool,
                                        &pOutputParamList->ParamArray[6].Variant.varBool
                                    );

                            break;

                    case    8 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_in,
                                        &pOutputParamList->ParamArray[0].Variant.varBool,
                                        &pOutputParamList->ParamArray[1].Variant.varBool,
                                        &pOutputParamList->ParamArray[2].Variant.varBool,
                                        &pOutputParamList->ParamArray[3].Variant.varBool,
                                        &pOutputParamList->ParamArray[4].Variant.varBool,
                                        &pOutputParamList->ParamArray[5].Variant.varBool,
                                        &pOutputParamList->ParamArray[6].Variant.varBool,
                                        &pOutputParamList->ParamArray[7].Variant.varBool
                                    );

                            break;

                    default :

                            returnStatus = ANSC_STATUS_INTERNAL_ERROR;

                            goto  EXIT2;

                            break;
                }
            }
        }
        else
        {
            if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO )
            {
                pOutputParamList = NULL;

                switch ( pMethodDescriptor->ParamListI->ParamCount )
                {
                    case    0 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        params_out
                                    );

                            break;

                    case    1 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        params_out
                                    );

                            break;

                    case    2 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        params_out
                                    );

                            break;

                    case    3 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        params_out
                                    );

                            break;

                    case    4 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        params_out
                                    );

                            break;

                    case    5 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        params_out
                                    );

                            break;

                    case    6 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 5),
                                        params_out
                                    );

                            break;

                    case    7 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 5),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 6),
                                        params_out
                                    );

                            break;

                    case    8 :

                            pReturnedVar->Variant.varBool =
                                ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod)
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 0),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 1),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 2),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 3),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 4),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 5),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 6),
                                        SlapResolveInvokeParam(pMethodDescriptor, params_in, 7),
                                        params_out
                                    );

                            break;

                    default :

                            returnStatus = ANSC_STATUS_INTERNAL_ERROR;

                            goto  EXIT1;

                            break;
                }

                pOutputParamList = *params_out;
            }
            else
            {
                pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST));

                if ( !pOutputParamList )
                {
                    returnStatus = ANSC_STATUS_RESOURCES;

                    goto  EXIT1;
                }
                else
                {
                    SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList);
                }

                switch ( pMethodDescriptor->ParamListI->ParamCount )
                {
                    case    0 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput0
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    1 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput1
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    2 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput2
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    3 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput3
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    4 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput4
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    5 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput5
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    6 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput6
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    7 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput7
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    case    8 :

                            pReturnedVar->Variant.varBool =
                                (SLAP_BOOL)pMyObject->InvokeFixInput8
                                    (
                                        (ANSC_HANDLE)pMyObject,
                                        (ANSC_HANDLE)pMethodDescriptor,
                                        params_in,
                                        pOutputParamList
                                    );

                            break;

                    default :

                            returnStatus = ANSC_STATUS_INTERNAL_ERROR;

                            goto  EXIT2;

                            break;
                }
            }
        }

        *params_out = pOutputParamList;
        *return_var = pReturnedVar;
    }

    returnStatus = ANSC_STATUS_SUCCESS;

    goto  EXIT1;


    /******************************************************************
                GRACEFUL ROLLBACK PROCEDURES AND EXIT DOORS
    ******************************************************************/

EXIT2:

    if ( pOutputParamList )
    {
        SlapFreeParamList(pOutputParamList);
    }

    if ( pReturnedVar )
    {
        SlapFreeVariable(pReturnedVar);
    }

EXIT1:

    return  returnStatus;
}