Axiom Справочник языка

Встроенные функции

Функции состояния SCREEN

Программе иногда нужно узнать, что сейчас открыто и какого размера получилась поверхность: от этого зависят раскладка текста и координаты рисунка. Для этого служат SCREENISACTIVE, SCREENMODE, SCREENWIDTH и SCREENHEIGHT. Отдельно от них координату текущей графической позиции возвращает форма POINT(selector).

Что читают эти функции

Функции читают состояние окна SCREEN и не открывают его. Состояние текстового режима доступно тем же функциям, что и состояние графических режимов, а наличие графики проверяется отдельно. Аргументов у этих четырёх функций нет.

Типы результатов различаются: SCREENISACTIVE возвращает BOOLEAN, а SCREENMODE, SCREENWIDTH и SCREENHEIGHT — INTEGER. Без открытой поверхности обычная среда возвращает FALSE, 0, 0 и 0 соответственно.

SCREENISACTIVE

SCREENISACTIVE проверяет, выбран ли графический режим SCREEN: для режимов 1..10 результат равен TRUE, для текстового режима 0 — FALSE.

SCREENISACTIVE()

Проверяется именно графический SCREEN: для SCREEN 0 и CANVAS результат FALSE.

SCREENMODE

SCREENMODE сообщает номер выбранного режима. Текстовый режим имеет номер 0; тот же ноль возвращается для холста.

SCREENMODE()

SCREENWIDTH

SCREENWIDTH сообщает ширину окна в пикселях. После явного вызова SCREEN 0 ширина равна 640, а в адаптивном режиме 10 возвращается фактическая ширина выбранного окна.

SCREENWIDTH()

Функция читает текущую поверхность: после CANVAS она возвращает размеры холста в пикселях.

SCREENHEIGHT

SCREENHEIGHT сообщает высоту окна в пикселях. После явного вызова SCREEN 0 высота равна 300, а в адаптивном режиме 10 возвращается фактическая высота выбранного окна.

SCREENHEIGHT()

Как и SCREENWIDTH, функция читает текущую поверхность и после CANVAS сообщает размеры холста. Эти функции не требуют графического режима и не вызывают MB3010 из-за отсутствия окна.

POINT(selector)

Форма POINT(selector) читает координату текущей графической позиции. Её селекторы и ограничения описаны в справочнике POINT. На результат влияют настройки VIEW и WINDOW.

Адаптивное окно режима 10

Адаптивное окно сохраняет пропорцию 16:9 и помещается в рабочую область монитора, поэтому ширина и высота имеют смысл только после вызова SCREEN 10. Число текстовых столбцов и строк в этом режиме равно SCREENWIDTH() \ 8 и SCREENHEIGHT() \ 12.

Диагностика

Четыре функции состояния могут читать состояние без активной графики; отсутствие графического режима само по себе не вызывает ошибку выполнения. Для формы POINT(selector) действуют отдельные ошибки: MB3007 при неверном селекторе и MB3010 при отсутствии графического SCREEN 1..10.

Пример

SCREEN 1
PRINT SCREENISACTIVE()
PRINT SCREENMODE()
PRINT SCREENWIDTH()
PRINT SCREENHEIGHT()
SLEEP

Программа печатает признак активности графики, номер режима и фактические размеры окна. Размеры читаются после выбора режима, поэтому соответствуют уже созданной поверхности.

Переполнение координат POINT

Одноаргументная встроенная функция POINT(number) возвращает INTEGER. Если текущая логическая или преобразованная координата не помещается в этот тип, функция вызывает MB3008. Ошибку можно перехватить через TRY...CATCH; выход за диапазон не аварийно завершает служебный процесс.

SCREEN 1
PSET (2147483648, 0), 1
TRY
    PRINT POINT(2)
CATCH err
    PRINT err.Code
END TRY

Программа печатает MB3008. Двухаргументная функция POINT(x, y) по-прежнему читает цвет пикселя.

Короткие проверки функций

До открытия экрана ширина и высота равны 0. После SCREEN 0 они равны 640 и 300, а текст идёт в отдельное окно. Признак SCREENISACTIVE остаётся ложным, поскольку текстовый режим не включает графику.

Запускаемые примеры

Для ручной проверки откройте перечисленные файлы в Electron IDE.

См. также