matvar_t *ConvertSciVarToMatVar(types::InternalType* pIT, const char *name, int matfile_version)
{
    switch (pIT->getType())
    {
        case types::GenericType::ScilabDouble:
        {
            return GetDoubleMatVar(pIT->getAs<types::Double>(), name, matfile_version);
        }
        break;
        case types::InternalType::ScilabInt8:
        case types::InternalType::ScilabUInt8:
        case types::InternalType::ScilabInt16:
        case types::InternalType::ScilabUInt16:
        case types::InternalType::ScilabInt32:
        case types::InternalType::ScilabUInt32:
#ifdef __SCILAB_INT64__
        case types::InternalType::ScilabInt64:
        case types::InternalType::ScilabUInt64:
#endif
        {
            return GetIntegerMatVar(pIT, name);
        }
        break;
        case types::InternalType::ScilabString:
        {
            return GetCharMatVar(pIT->getAs<types::String>(), name);
        }
        break;
        case types::InternalType::ScilabSparse:
        {
            return GetSparseMatVar(pIT->getAs<types::Sparse>(), name);
        }
        break;
        case types::InternalType::ScilabCell:
        {
            return GetCellMatVar(pIT->getAs<types::Cell>(), name, matfile_version);
        }
        break;
        case types::InternalType::ScilabStruct:
        {
            return GetStructMatVar(pIT->getAs<types::Struct>(), name, matfile_version);
        }
        break;
        case types::InternalType::ScilabMList:
        {
            return GetMListMatVar(pIT->getAs<types::MList>(), name, matfile_version);
        }
        break;
        default:
            break;
    }
    Scierror(999, "Do not known how to get variable of type %d\n", pIT->getType());
    return NULL;
}
matvar_t* GetIntegerVariable(void *pvApiCtx, int iVar, const char *name, int * parent, int item_position)
{
    types::GatewayStruct* pStr = (types::GatewayStruct*)pvApiCtx;
    types::typed_list in = *pStr->m_pIn;

    if (in[iVar - 1]->isInt() == false)
    {
        Scierror(999, _("%s: Wrong type for first input argument: Integer matrix expected.\n"), "GetIntegerVariable");
        return NULL;
    }

    types::InternalType* pIT = in[iVar - 1]->getAs<types::InternalType>();

    return GetIntegerMatVar(pIT, name);
}