<?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="fr" xml:id="exec">
    <refnamediv>
        <refname>exec</refname>
        <refpurpose>exécution d'un script (fichier de commandes)  </refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Séquence d'appel</title>
        <synopsis>
            exec(path [,mode])
            exec(fun [,mode])
            ierr = exec(path, 'errcatch' [,mode])
            ierr = exec(fun, 'errcatch' [,mode])
            [ierr, errormsg] = exec(..., 'errcatch' [,mode])
            [ierr, errormsg, callstack] = exec(..., 'errcatch' [,mode])
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Paramètres</title>
        <variablelist>
            <varlistentry>
                <term>path</term>
                <listitem>
                    <para>chaîne de caractères, le chemin du script à exécuter.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>mode</term>
                <listitem>
                    <para>entier, précisant le mode d'exécution (voir plus bas).
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>fun</term>
                <listitem>
                    <para>identificateur d'une fonction scilab.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ierr</term>
                <listitem>
                    <para>entier, 0 ou numéro d'erreur.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>errormsg</term>
                <listitem>
                    <para>
                        message d'erreur en cas d'erreur et que le d'argument <literal>'errcatch'</literal> est spécifié.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>callstack</term>
                <listitem>
                    <para>
                        pile d'appel en cas d'erreur et que le d'argument <literal>'errcatch'</literal> est spécifié.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Description</title>
        <para>
            <code>exec(path [,mode])</code> exécute séquentiellement les instructions
            Scilab contenues dans le fichier spécifié par <varname>path</varname> avec le
            mode d'exécution optionnel <varname>mode</varname> .
        </para>
        <para>
            Les différentes valeurs de <varname>mode</varname> sont :
        </para>
        <variablelist>
            <varlistentry>
                <term>0</term>
                <listitem>
                    <para>valeur par défaut</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>-1</term>
                <listitem>
                    <para>rien n'est affiché</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>1</term>
                <listitem>
                    <para>chaque ligne de commande est affichée</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>2</term>
                <listitem>
                    <para>
                        l'invite de commande <literal>--&gt;</literal> est affiché
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>3</term>
                <listitem>
                    <para>lignes de commandes + invite de commande</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>4</term>
                <listitem>
                    <para>pause dans l'exécution au début de chaque ligne. L'exécution
                        reprend après un appui sur la touche entrée/return.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>7</term>
                <listitem>
                    <para>pause + invite + affichage : ce mode est utile pour les démonstrations.</para>
                </listitem>
            </varlistentry>
        </variablelist>
        <para>
            <code>exec(fun [,mode])</code> exécute la fonction <varname>fun</varname> comme
            un script : aucun argument n'est utilisé en entrée ou en sortie, et
            l'exécution se fait dans l'environnement courant (les variables
            créées dans la fonction sont conservées après l'exécution). Cette méthode d'exécution des
            scripts permet aussi de stocker des scripts comme des fonctions dans des
            bibliothèques.
        </para>
        <para>
            Si une erreur se produit pendant l'exécution, si la chaîne de
            caractères <literal>'errcatch'</literal> est présente, <function>exec</function> ne
            produit pas de message d'erreur, mais stoppe l'exécution du
            script et renvoie une valeur de <varname>ierr</varname> égale au numéro de
            l'erreur. Si la chaîne <literal>'errcatch'</literal> n'est pas présente,
            la gestion habituelle des erreurs est utilisée.
        </para>
    </refsection>
    <refsection>
        <title>REMARQUES</title>
        <para>
            Les scripts peuvent maintenant contenir des définitions de fonctions en
            ligne (voir <link linkend="function">fonction</link>).
        </para>
        <para>
            <function>exec</function> prend en charge les fichiers encodés aux formats ANSI/ASCII et UTF-8.
        </para>
        <para>La longueur des lignes des fichiers est limitée à 4096 caractères.</para>
    </refsection>
    <refsection>
        <title>Exemples</title>
        <programlisting role="example">
    <![CDATA[
// création d'un script
mputl('a=1;b=2',TMPDIR+'/myscript')

// on l'exécute
exec(TMPDIR+'/myscript')
whos -name "a "

// création d'une function
function y=foo(x),a=x+1;y=a^2,endfunction
clear a b

// appel à la fonction
foo(1)

// a est une variable créée dans l'environnement de la fonction foo
// elle est détruite à la sortie de la fonction.
whos -name "a "

x=1 // on crée la variable x pour qu'elle soit connue à l'exécution de foo
exec(foo)

// a et y ont été créées dans l'environnement courant
whos -name "a "
whos -name "y "

//errormsg
mputl('acosd(''d'');', TMPDIR+'/myscript')
[_ b] = exec(TMPDIR+'/myscript', 'errcatch')
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>Voir aussi</title>
        <simplelist type="inline">
            <member>
                <link linkend="exec">exec</link>
            </member>
            <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>
