<?xml version="1.0" encoding="UTF-8"?>
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="ru" xml:id="exec">
    <refnamediv>
        <refname>exec</refname>
        <refpurpose>исполнение файла-сценария</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Синтаксис</title>
        <synopsis>exec(path [,mode])
            exec(fun [,mode])
            ierr = exec(path, 'errcatch' [,mode])
            ierr = exec(fun, 'errcatch' [,mode])
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Аргументы</title>
        <variablelist>
            <varlistentry>
                <term>path</term>
                <listitem>
                    <para>
                        строка, путь к файлу-сценарию.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>mode</term>
                <listitem>
                    <para>
                        целочисленный скаляр, режим исполнения (см. ниже).
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>fun</term>
                <listitem>
                    <para>Scilab-функция.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ierr</term>
                <listitem>
                    <para>целое число, 0 либо номер ошибки.</para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Описание</title>
        <para>
            <code>exec(path [,mode])</code> исполняет последовательно
            Scilab-инструкции, содержащиеся в файле, указанном в пути
            <varname>path</varname>, в режиме исполнения, указанным
            необязательным аргументом <varname>mode</varname>.
        </para>
        <para>
            Режим исполнения <varname>mode</varname> имеет следующие
            значения:
        </para>
        <variablelist>
            <varlistentry>
                <term>0</term>
                <listitem>
                    <para>
                        значение по умолчанию.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>-1</term>
                <listitem>
                    <para>
                        вывод на экран не производится.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>1</term>
                <listitem>
                    <para>
                        отображает каждую командную строку.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>2</term>
                <listitem>
                    <para>
                        на экран выводится строка приглашения <literal>--&gt;</literal>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>3</term>
                <listitem>
                    <para>
                        отображения командных строк + строки приглашения.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>4</term>
                <listitem>
                    <para>
                        останавливается перед каждой строкой
                        приглашения. Исполнение возобновляется после
                        возврата каретки.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>7</term>
                <listitem>
                    <para>
                        остановки + строки приглашения + вывод на экран командных строк: режим, полезный для демонстраций.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
        <para>
            <code>exec(fun [,mode])</code> исполняет функцию <varname>fun</varname> как файл-сценарий: ни входного, ни выходного аргумента, ни особого окружения переменных. Этот метод исполнения сценария позволяет хранить сценарии в виде функций в библиотеках.
        </para>
        <para>
            Если во время исполнения произойдёт ошибка, и если будет
            указан флаг <literal>'errcatch'</literal>, то  функция
            <function>exec</function> не будет выдавать сообщения об
            ошибке, прервёт исполнение инструкций и вернёт номер ошибки
            <varname>ierr</varname>. Если же флаг
            <literal>'errcatch'</literal> не будет указан, то будет
            работать стандартная обработка ошибок.
        </para>
    </refsection>
    <refsection>
        <title>Примечания</title>
        <para>
            Теперь файлы для функции <function>exec</function> можно использовать для определения функций, используя синтаксис определения функции в строке (см. <link linkend="function">function</link>).
        </para>
        <para>
            Функция <function>exec</function> поддерживает файлы с кодировкой ANSI/ASCII и UTF-8.
        </para>
        <para>
            Длина каждой строки в файле ограничена 4096 символами.
        </para>
    </refsection>
    <refsection>
        <title>Примеры</title>
        <programlisting role="example"><![CDATA[
// создадим файл-сценарий
mputl('a=1;b=2',TMPDIR+'/myscript')
// выполним его
exec(TMPDIR+'/myscript')
whos -name "a "
// создадим функцию
deff('y=foo(x)','a=x+1;y=a^2')
clear a b
// вызовем функцию
foo(1)
// a - переменная, созданная в окружении функции foo;
// она будет уничтожена после возврата из foo
whos -name "a "
x=1 //создадим x чтобы его узнал сценарий foo
exec(foo)
// a и y созданы в текущем окружении
whos -name "a "
whos -name "y "
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>Смотрите также</title>
        <simplelist type="inline">
            <member>
                <link linkend="execstr">execstr</link>
            </member>
            <member>
                <link linkend="evstr">evstr</link>
            </member>
            <member>
                <link linkend="mode">mode</link>
            </member>
            <member>
                <link linkend="chdir">chdir</link>
            </member>
            <member>
                <link linkend="pwd">pwd</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
