mode устанавливает или запрашивает режим отображения в командном окне инструкций Scilab

## Синтаксис

                mode(k)
                k = mode()

## Аргументы

k

целое число от -1 до 6: выбранный или текущий режим исполнения / отображения на экране.

## Описание

`mode(k)` позволяет выбрать как информация отображается в командном окне в ходе выполнения инструкций Scilab. Если эти инструкции включают в себя инструкцию `mode`, то последующие инструкции в том же окружении будут отображаться в соответствии с новым режимом. Точка с запятой, поставленная в конце любой инструкции всегда прекращает отображение результатов работы, несмотря ни на какой текущий режим исполнения.

### Контекст

`mode(..)` и другие инструкции могут быть использованы и исполнены в различном контексте:

- Функции (F): функция, написанная на языке Scilab, может включать в себя инструкции `mode`. Будучи скомпилированной и вызванной, действия внутренней инструкции `mode` отмечены буквой F в таблице, приведённой ниже. По умолчанию инструкции в функциях запускаются в режиме молчания `mode(-1)` какой бы ни был текущий режим в вызывающем окружении.

- Сценарии (S): инструкции Scilab, написанные в файле (обычно с расширением .sce) вне определения любой функции может включать в себя инструкции `mode`. Когда такой файл запущен с помощью `exec(filename)` или `exec(filename, mode_k)`, то результаты инструкции `mode` в исполняемом файле помечены буквой S в таблице, приведённой ниже. По умолчанию сценарии запускаются в режиме `mode(3)` какой бы ни был текущий режим в вызывающем окружении. Это переписывается с помощью опции `mode_k`.

- Командное окно (C): инструкции Scilab, напрямую вводимые в командном окне, всегда отображаются после ввода. Результаты текущего режима инструкции `mode` или любого последующего режима, введённого в командном окне, помечены буквой C в таблице, приведённой ниже. По умолчанию результаты работы инструкций отображаются в командном окне в режиме `mode(2)`.

- execstr(T): эта функция принимает матрицу текста `T`. Каждый элемент исполняется как последовательность инструкций Scilab, который может содержать инструкцию `mode`. Результаты любой последующей инструкции `mode`, встреченной в матрице, помечены буквой T ("текст") в таблице, приведённой ниже. По умолчанию все инструкции исполняются в режиме молчания `mode(-1)` какой бы ни был текущий режим в вызывающем окружении запускающего `execstr()`.

- Обратные вызовы (K): обратный вызов является уникальной строкой в которой написаны инструкции Scilab. Эта строка назначается для интерактивного компонента, такого как пункт в меню, флажок и т.д. Инструкции исполняются при активации компонента через воздействие: выбор меню, установку или снятие флажка и т.д. Обратный вызов может содержать инструкции `mode`. Инструкции обратного вызова всегда исполняются непосредственно на уровне командного окна. Результаты их работы остаются в командном окне после того, как обратный вызов будет завершён. Результаты работы инструкции `mode`, используемые в обратном вызове, отмечены буквой K в таблице, приведённой ниже.

### Характеристики

режим # | -1 | 0 | 1 | 2 | 3 | 4 | 6
--- | --- | --- | --- | --- | --- | --- | ---
Инструкции отображения [a] | C | C | C S | C | C S | C S | C S K
Результаты отображения [b] |  | всегда | всегда | всегда | всегда | всегда | всегда
Шаг за шагом [s] |  |  |  |  |  | S F K | S F T K
Кратко [c] | C++ | + | ++ |  | SFT + | CK++ SFT+ | S+
Комментарии | [d] |  | [e] | [f] | [g] | [h] | [h,i]

### Комментарии

[a]: | В нормальном режиме инструкции отображаются в предложением о вводе `-->`, идущим впереди. В пошаговом режиме вместо этого используется `>>`.
[b]: | указывает, что точка с запятой в конце не поставлена.
[c]: | "+" означает: нет дополнительной пустой строки после результатов. "++" означает: нет дополнительной пустой строки ни после выполненных инструкций, ни после результатов.
[d]: | По умолчанию режим молчания в функциях и с `execstr()`.
[e]: | `mode(5)` эквивалентно `mode(1)`, но не должен быть использован.
[f]: | Режим работы по умолчанию в командном окне.
[g]: | По умолчанию режим работы `exec()`.
[h]: | Любой комментарий `//` отображается без предложения о вводе и без остановки на нём. Некоторые паразитные предложения о вводе `-->` и дополнительные пустые строки могут иногда отображаться (программная ошибка). Обратный вызов всегда делается уникальной строкой инструкций, как если бы они были определены и запущены одной строкой. Следовательно, оба доступных пошаговых режима исполнения могут быть активированы, но бесполезны в любом обратном вызове.
[i]: | `mode(7)` делает то же самое, но не должен быть использован.
[s]: | Пошаговый режим останавливается после каждой строки инструкций и ждёт нажатия пользователем клавиш `<ввод>` или `p<ввод>`, чтобы продолжить работу. Нажатие клавиши `p` вводит режим паузы. Эти режимы могут быть использованы например в демонстрационных примерах или режиме необработанной отладки.

Режим в вызывающем окружении никогда не меняется после использования `mode(..)` в вызывающей функции, в исполняемом сценарии .sce или в качестве ввода `execstr()` после того, как выполнение завершится и вернёт результат. Когда инструкция `mode(k)` используется в обратном вызове, то она исполняется, она становится и остаётся актуальным режимом отображения в командном окне после завершения обратного вызова.
Вывод специально отображаемый функциями наподобие `disp()` или `mprinf()` никогда не отменяется, даже в режиме `mode(-1)`.
`mode(5)`, `mode(7)` и другие незарегистрированные значения могут приниматься, но не должны использоваться: они могут быть удалены или переопределены в будущем.

## Примеры

В функции:

    function example_mode( level_mode )
       disp(mode());
       mode(level_mode)
       a = 3
    endfunction
    mode(2)
    example_mode(0)
    mode()
    example_mode(1)
    example_mode(2)

В инструкции `exec(script, mode)`:

    ins = [
        "mprintf(""Режим исполнения по умолчанию: %d\n"", mode())"
        "mode(i)"
        "mprintf(""Новый активный режим: %d\n"", mode())"
        "// Новый комментарий"
        "a = rand(2,4)"
        "b = %pi;"
        "c = %s;"
        ];
    fn = TMPDIR + "\test_mode.sce";
    mputl(ins, fn);
    //
    mode(2)
    i = 1;
    exec(fn)
    mode()
    exec(fn, 0)
    i = 3; // инструкции отображаются
    exec(fn, 3)
    i = 4; // инструкции отображаются + пошаговый режим. "p<ввод>" вводит режим паузы
    exec(fn, 4)

With `execstr()`:

    ins = [
        "mprintf(""Режим исполнения по умолчанию: %d\n"", mode())"
        "mode(1)        // Введение компактного режима"
        "mprintf(""Новый активный режим: %d\n"", mode())"
        "a = rand(2,4)"
        "b = 1"
        "c = %pi"
        ];
    mode(2)
    execstr(ins)
    mode()       // Восстановлен исходный режим

В обратном вызове (в данном случае меню):

    mode(2)
    uimenu("parent",0,"Label","mode_test",..
           "callback", "disp(mode()); mode(1); a = rand(2,4), pwd(),");
    // Щёлкните по меню "mode_test" и посмотрите что отобразится в командном окне
    mode()
    delmenu mode_test

## Смотрите также

- exec
- execstr
- точка с запятой
- debug
- pause
- getscilabmode
- режим выдачи предупреждений
- funcprot
- ieee

## История

6.0

- `mode(4)` теперь выполняется пошагово и может быть приостановлен в сценариях и в функциях.
- Для/внутри сценариев `mode(4)` теперь отображает каждую строчку инструкций и отображает результаты компактно. Он может использоваться для демонстрационных примеров.
- Обратные вызовы всегда исполнялись в режиме молчания `mode(-1)`. Теперь они исполняются по умолчанию в текущем режиме `mode()`.