Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
6.0.2 - Русский

Change language to:
English - Français - 日本語 - Português -

Please note that the recommended version of Scilab is 2024.0.0. This page might be outdated.
However, this page did not exist in the previous stable version.

Справка Scilab >> API Scilab > legacy > optionals > get optional argument (Scilab gateway)

get optional argument (Scilab gateway)

Syntax

int getOptionals(void* _pvCtx, char* fname, rhs_opts opts[])

Arguments

_pvCtx

Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h

fname

Name of the calling function.

opts

structure array of optional argument

Description

A C gateway functions which use optional arguments.

Examples

In this example, the C interface function can take several optional arguments and prints theirs dimensions if exists.

#include "api_scilab.h"
#include "sciprint.h"
#include "sciprint.h"
#include "sciprint.h"

int sci_use_optional(char * fname)
{
    SciErr sciErr;

    char* pstName = NULL;
    int iAge = 0;
    int iDL = 0;

    static rhs_opts opts[] =
    {
        { -1, "age", -1, 0, 0, NULL},
        { -1, "drivinglicense", -1, 0, 0, NULL},
        { -1, "name", -1, 0, 0, NULL},
        { -1, NULL, -1, 0, 0, NULL}
    };

    int nopt = NumOpt();

    CheckInputArgument(pvApiCtx, 0, nopt);
    CheckOutputArgument(pvApiCtx, 0, 1);

    if (getOptionals(pvApiCtx, fname, opts) == 0)
    {
        //Error
        return 1;
    }

    if (opts[0].iPos != -1)
    {//age
        double dblAge = 0;
        getScalarDouble(pvApiCtx, opts[0].piAddr, &dblAge);
        iAge = (int)dblAge;
    }
    else
    {
        iAge = 77;
    }

    if (opts[1].iPos != -1)
    {//drivinglicense
        getScalarBoolean(pvApiCtx, opts[1].piAddr, &iDL);
    }
    else
    {
        iDL = 0;
    }

    if (opts[2].iPos != -1)
    {//Name
        getAllocatedSingleString(pvApiCtx, opts[2].piAddr, &pstName);
    }
    else
    {
        pstName = strdup("John Doe");
    }

    sciprint("Read information: \n");
    sciprint("\tName: \t\t\t%s\n", pstName);
    sciprint("\tAge: \t\t\t%d\n", iAge);
    sciprint("\tDriving licence: \t%s\n", iDL ? "Yes" : "No");
    //no return value
    AssignOutputVariable(pvApiCtx, 0) = 1;
    return 0;
}

Scilab test script

use_optional();
use_optional(name = "M. Puffin");
use_optional(age = 25, name = "M. Puffin");
use_optional(drivinglicense = %t, age = 25, name = "M. Puffin");

History

ВерсияОписание
5.5.0 This function added in Scilab 5.5.0
Report an issue
<< optionals optionals polynomial >>

Copyright (c) 2022-2023 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Feb 14 15:05:28 CET 2019