ellipse

Платформа: DOS32
Синтаксис: include graphics.e
ellipse(i1, i2, s1, s2)
Описание: Чертит эллипс цвета i1 на графическом экране. Эллипс будет вписан в прямоугольник, определенный диагональными точками s1 {x1, y1} и s2 {x2, y2}. Если прямоугольник равносторонний, эллипс становится кругом. Эллипс будет заполненным, когда i2 равно 1. Не заполненным, когда i2 равно 0.
Пример:
ellipse(MAGENTA, 0, {10, 10}, {20, 20})

-- будет начерчена пурпурная окружность
-- вписанная в квадрат с вершинами в точках: 
--        {10, 10}, {10, 20}, {20, 20}, {20, 10}.

Пример программы: demo\dos32\sb.ex
См. также: polygon, draw_line

equal

Синтаксис: i = equal(x1, x2)
Описание: Сравнивает два Euphoria-обекта для проверки их идентичности. Выдает 1 (истина), если объекты идентичны, 0 (ложь), если имеется отличие.
Комментарии: Эта операция эквивалентна выражению: compare(x1, x2) = 0
Пример 1:
if equal(PI, 3.14) then
    puts(1, "дайте мне более подходящую величину для PI!\n")
end if

Пример 2:
if equal(name, "George") or equal(name, "GEORGE") then
    puts(1, "name is George\n")
end if

См. также: compare, оператор равенства (=)

find

Синтаксис: i = find(x, s)
Описание: Ищет x как элемент s. В случае успеха выдает индекс первого элемента s, который совпадает с x. При неудаче выдает 0.
Пример 1:
location = find(11, {5, 8, 11, 2, 3})
-- location будет равно 3

Пример 2:
names = {"fred", "rob", "george", "mary", ""}
location = find("mary", names)
-- location будет равно 4

См. также: match, compare

float32_to_atom

Синтаксис: include machine.e
a1 = float32_to_atom(s)
Описание: Преобразует ряд, состоящий из 4 байтов, в атом. Эти 4 байта должны содержать число с плавающей точкой в 32-битном формате по стандарту IEEE.
Комментарии: Любое число с плавающей точкой в 32-битном формате по стандарту IEEE может быть преобразовано в атом.
Пример:
f = repeat(0, 4)
fn = open("numbers.dat", "rb") -- читать в двоичном режиме
f[1] = getc(fn)
f[2] = getc(fn)
f[3] = getc(fn)
f[4] = getc(fn)
a = float32_to_atom(f)

См. также: float64_to_atom, atom_to_float32

float64_to_atom

Синтаксис: include machine.e
a1 = float64_to_atom(s)
Описание: Преобразует ряд, состоящий из 8 байтов, в атом. Эти 8 байтов должны содержать число с плавающей точкой в 64-битном формате по стандарту IEEE.
Комментарии: Любое число с плавающей точкой в 64-битном формате по стандарту IEEE может быть преобразовано в атом.
Пример:
f = repeat(0, 8)
fn = open("numbers.dat", "rb")  -- читать в двоичном режиме
for i = 1 to 8 do
    f[i] = getc(fn)
end for
a = float64_to_atom(f)

См. также: float32_to_atom, atom_to_float64

floor

Синтаксис: x2 = floor(x1)
Описание: Выдает наибольшее целое, меньшее или равное x1. (Округляет вниз до целого.)
Комментарии: Эта функция может быть применена к атому или ко всем элементам ряда.
Пример:
y = floor({0.5, -1.6, 9.99, 100})
-- y равно {0, -2, 9, 100}

См. также: remainder

flush

Синтаксис: include file.e
flush(fn)
Описание: Когда вы записываете данные в файл, обычно Euphoria сначала размещает данные в буфере, организованном в оперативной памяти, пока не будет накоплен достаточно большой объем этих данных. Этот сравнительно большой объем данных может быть затем очень эффективно записан на диск. Иногда у вас может возникнуть необходимость форсировать, ускорить, немедленный вывод данных на диск, хотя оптимальный буфер еще не заполнен. Чтобы делать это, предназначена процедура flush(fn), где fn является номером файла, который был открыт вами для записи или дополнения.
Комментарии: Когда файл закрывается, (см. close()), все данные, остающиеся в буфере, выводятся в файл именно таким образом, как работает процедура flush(). Когда программа прерывается, во все открытые файлы выводятся данные, остающиеся в буфере, и файлы закрываются автоматически.

Используйте flush(), когда другому процессу необходимо видеть данные уже записанными на диск, но вы еще не готовы закрыть файл.

Пример:
f = open("logfile", "w")
puts(f, "Record#1\n")
puts(1, "Press Enter when ready\n")

flush(f)  -- Форсируется вывод "Record #1" в "logfile" на диске.
          -- Без этого в "logfile"  окажется 
          -- 0 символов, когда мы прекратим ввод с клавиатуры.

s = gets(0) -- ожидание ввода с клавиатуры

См. также: close, lock_file

free

Синтаксис: include machine.e
free(a)
Описание: Освобождает ранее занятый блок памяти, ориентируясь по начальному адресу этого блока, т.е. адресу, полученному от функции allocate() при подготовке блока к использованию.
Комментарии: Не пренебрегайте функцией free() для освобождения и повторного использования программой блоков памяти, занятых вами помимо автоматического распределения во время прогона программы. Это снизит вероятность нехваток оперативной памяти или чрезмерного обмена с дисковой виртуальной. Не обращайтесь по тем адресам, которые были освобождены. Когда ваша программа завершается, вся занятая память будет возвращена в систему автоматически, если это не было сделано раньше.

Не вызывайте free(), чтобы освободить память, занятую в нижних адресах с помощью allocate_low(). Для этого имеется специальная функция free_low().

Пример программы: demo\dos32\callmach.ex
См. также: allocate, free_low

free_console

Платформа: WIN32, Linux
Синтаксис: include dll.e
free_console()
Описание: Освобождает (удаляет) любое консольное окно, связанное с вашей программой.
Комментарии: Euphoria создаст консольное текстовое окно при первой же попытке вашей программы напечатать что-то на экране, прочитать что-то с клавиатуры или при иной потребности в консоли (окно, похожее на окно приглашения DOS). Под WIN32 это окно автоматически исчезнет, когда ваша программа завершается, но вы можете вызывать free_console(), чтобы быстрее удалять окно по мере необходимости. Под Linux текстовая консоль имеется всегда, но окно xterm будет исчезать в конце прогона программы при выводе Euphoria приглашения "Press Enter".

Под Linux процедура free_console() восстанавливает исходные параметры терминала, приводя экран в нормальное состояние.

В окне Linux xterm вызов процедуры free_console(), без печати на экран или чтения с клавиатуры, подавляет обычное приглашение "Press Enter", выдаваемое Euphoria при окончании прогона программы.

После удаления консольного окна вы можете создать новое, напечатав что-то на экране или даже просто вызвав clear_screen(), position() или любую процедуру, которой окно необходимо.

Когда вы используете трассировку или в вашей программе обнаружена ошибка, Euphoria автоматически создаст консольное окно, чтобы вывести трассировочную информацию, сообщение об ошибке и т.д.

Имеется процедура WIN32 API, FreeConsole(), которая выполняет операции, похожие на free_console(). Вы должны использовать free_console(), так как она дает интерпретатору Euphoria знать, что консоли в данный момент нет.

См. также: clear_screen, platform.doc

free_low

Платформа: DOS32
Синтаксис: include machine.e
free_low(i)
Описание: Освобождает ранее занятый блок стандартной памяти по адресу, определенному при его выделении с помощью функции allocate_low().
Комментарии: Не пренебрегайте free_low() для освобождения и повторного использования программой блоков стандартной памяти, занятых вами помимо автоматического распределения памяти во время прогона. Это снизит вероятность нехваток стандартной памяти. Не обращайтесь по адресам, которые были освобождены. Когда ваша программа завершается, вся занятая память будет возвращена в систему, если вы не сделали этого раньше.

Не вызывайте free_low(), чтобы освободить память, которая была занята с помощью функции allocate(). Для этого имеется процедура free().

Пример программы: demo\dos32\dosint.ex
См. также: allocate_low, dos_interrupt, free

get

Синтаксис: include get.e
s = get(fn)
Описание: Вводит из файла fn доступную для чтения строку символов, представляющую Euphoria-объект. Преобразует строку в численную величину данного объекта. s будет являться 2-элементным рядом: {состояние ошибки, величина}. Коды состояния ошибки:
    GET_SUCCESS -- объект прочитан успешно
    GET_EOF     -- файл закончился до прочтения объекта
    GET_FAIL    -- объект синтаксически некорректен
get() может считывать Euphoria-объекты произвольной сложности. Вы можете иметь длинные ряды величин в скобках и разделенных запятыми, например, {23, {49, 57}, 0.5, -1, 99, 'A', "john"}. Единственный вызов get() будет читать данные в этом входном ряде и выдавать его величину как результат.

Каждый последующий вызов get() находит место, где остановился предыдущий. Например, серия из 5 вызовов get() будет нужна для прочтения объекта:

99 5.2 {1,2,3} "Hello" -1

Начиная с шестого вызова get(), во всех последующих вы будете получать состояние ошибки GET_EOF. Если у вас будет что-либо вроде:

{1, 2, xxx}

во входном потоке, вы получите состояние ошибки GET_FAIL, так как xxx не является Euphoria-объектом.

Составные объекты "высшего уровня" во входном потоке должны быть отделены друг от друга одним или более символов "пробела" (пробел, знак табуляции, \r или \n). Эти "пробелы" игнорируются Euphoria внутри объектов высшего уровня. Вызов get() будет читать один входной объект высшего уровня плюс один добавочный символ ("пробела").

Комментарии: Комбинация процедур print() и get() очень удобна для записи Euphoria-объектов на диск и последующего их чтения. Эта техника может быть использована для организации базы данных как одного или нескольких больших рядов Euphoria, размещенных в дисковых файлах. Ряды могут быть считаны в память, обновлены и затем записаны на диск после каждой завершенной серии транзакций. Не забывайте выводить символ "пробела" (используя puts()) после каждого вызова print().

Выдаваемые данные имеют маловыразительный числовой формат, в котором строки представлены кодами ASCII, независимо от того, что вы получаете состояние ошибки GET_SUCCESS (выдача_успешная).

Пример: Предположим, ваша программа предлагает пользователю ввести числа с клавиатуры.
-- если пользователь наберет 77.5, get(0) будет выдано:

{GET_SUCCESS, 77.5}

-- но в результате действия gets(0) будет выдано:

"77.5\n"

Пример программы: demo\mydata.ex
См. также: print, value, gets, getc, prompt_number, prompt_string

get_active_page

Платформа: DOS32
Синтаксис: include image.e
i = get_active_page()
Описание: Большинство видеоплат в некоторых видеорежимах имеет множественные страницы памяти. Это позволяет вам записывать экранную информацию на одну страницу, в то время как отображается другая страница. get_active_page() выдает номер текущей страницы, на которую экранная информация записывается.
Комментарии: По умолчанию номер активной и отображаемой страницы один и тот же и равен 0.

video_config() покажет вам, сколько страниц доступно в текущем видеорежиме.

См. также: set_active_page, get_display_page, video_config

get_all_palette

Платформа: DOS32
Синтаксис: include image.e
s = get_all_palette()
Описание: Заносит в ряд интенсивности полного набора цветов в текущем видеорежиме. Ряд s имеет следующую форму:

{{r,g,b}, {r,g,b}, ..., {r,g,b}}

Каждый элемент содержит характеристику интенсивности цвета {красный, зеленый, синий} для соответствующего номера цвета, начиная с номера 0. Величины для красного, зеленого и синего будут в пределах от 0 до 63.

Комментарии: Эта функция может применяться, чтобы получить данные о палитре, необходимые для процедуры save_bitmap(). Не забудьте умножить эначения составляющих цветов на 4 перед вызовом save_bitmap(), так как save_bitmap() ожидает величин в пределах от 0 до 255.
См. также: palette, all_palette, read_bitmap, save_bitmap, save_screen

get_bytes

Синтаксис: include get.e
s = get_bytes(fn, i)
Описание: Читает следующие i байтов из файла номер fn. Выдает байты в виде ряда. Ряд будет иметь длину i, исключая случаи, когда в файле для чтения остается меньше, чем i байтов.
Комментарии: Когда i > 0 и length(s) < i, это означает, что вы достигли конца файла. В конечном итоге для s будет выдан пустой ряд. Эта функция обычно используется с файлами, открытыми в двоичном режиме, "rb". Данный прием позволяет избежать путаницы текстового режима, для которого "r" пребразует пары CR LF в LF.
Пример:

include get.e
integer fn
fn = open("temp", "rb")  -- существующий файл
sequence whole_file
whole_file = {}
sequence chunk

while 1 do
    chunk = get_bytes(fn, 100) -- читает 100 байтов за один раз
    whole_file &= chunk -- chunk может быть пустым, это правильно
    if length(chunk) < 100 then
        exit
    end if
end while

close(fn)
? length(whole_file) -- выведет размер прочитанного файла "temp",
                     -- этот размер должен совпадать
                     -- с размером, получаемым по команде DIR
См. также: getc, gets

get_display_page

Платформа: DOS32
Синтаксис: include image.e
i = get_display_page()
Описание: Большинство видеоплат в некоторых видеорежимах имеет множественные страницы памяти. Это позволяет вам записывать экранную информацию на одну страницу, в то время как отображается другая страница. get_display_page() выдает номер текущей страницы, которая отображается на мониторе.
Комментарии: По умолчанию номер активной и отображаемой страницы один и тот же и равен 0.

video_config() покажет вам, сколько страниц доступно в текущем видеорежиме.

См. также: set_display_page, get_active_page, video_config

get_key

Синтаксис: i = get_key()
Описание: Выдает код клавиши, которая была нажата пользователем, без ожидания нажатия. Выдает -1, если ни одна из клавиш не была нажата. Специальные коды выдаются для функциональных клавиш, клавиш со стрелками и т.д.
Комментарии: Операционная система может хранить некоторое не слишком большое количество нажатий на клавиши в своем буфере клавиатуры. get_key() будет выдавать данные из буфера о каждом следующем нажатии на клавишу или -1, если буфер пуст.

Запустите программу key.bat, чтобы увидеть, какие коды генерируются при нажатии на каждую из клавиш именно вашей клавиатуры, так как возможны отличия.

См. также: wait_key, getc

get_mouse

Платформа: DOS32, Linux
Синтаксис: include mouse.e
x1 = get_mouse()
Описание: Выдает данные о последнем мышином событии по форме: {event, x, y} или выдает -1, если никаких событий с момента последнего вызова get_mouse() не было.

В файле mouse.e определены глобальные константы для следующих возможных мышиных событий:

    global constant MOVE = 1,
               LEFT_DOWN = 2,
                 LEFT_UP = 4,
              RIGHT_DOWN = 8,
                RIGHT_UP = 16,
             MIDDLE_DOWN = 32,
               MIDDLE_UP = 64
x и y являются координатами курсора мыши на момент произошедшего события. get_mouse() выдает немедленно или -1, или событие. Функция не ожидает событий. Вы должны проверять обстановку на мыши достаточно часто, чтобы избежать пропуска событий. Когда случается очередное событие, данные о предыдущем теряются, если вы не успели прочитать их. На практике несложно отследить практически все события. Потеря события MOVE в общем случае не очень критична, так как следующее MOVE покажет вам, где находится курсор мыши.

Иногда будет выдаваться информация о нескольких событиях. Например, если мышь передвигается с нажатой левой кнопкой, get_mouse() будет выдавать величину события LEFT_DOWN+MOVE, т.е. 2+1 или 3. По этой причине вы должны проверять информацию и выделять частные события с помощью and_bits(). Просмотрите примеры ниже, чтобы уяснить детали.

Комментарии: В графических режимах, в которых на ширине экрана укладывается 320 пикселов, вам необходимо будет делить значение координаты x на 2, чтобы получать правильную позицию курсора на экране. (Странная особенность DOS.)

В текстовых режимах DOS32 вам необходимо масштабировать x и y координаты, чтобы получить позицию по строкам и колонкам. Под Linux масштабирование не требуется - x и y соответствуют строке и колонке на экране, с (1,1) слева вверху.

Чтобы использовать get_mouse() под DOS32, вам необходим загруженный драйвер DOS для программной связи с подключенной к порту мышью. Под Linux должен исполняться GPM Server.

Под Linux в окне xterm события движений мыши не отслеживаются, это возможно только на текстовой консоли.

Под Linux события LEFT_UP, RIGHT_UP и MIDDLE_UP неотличимы одно от другого.

Вы можете вызывать get_mouse() в большинстве текстовых и графических режимов.

Первый вызов get_mouse(), который вы делаете, включает курсор мыши или подсвечивает позицию символа.

DOS в общем случае не обеспечивает использование мыши в SVGA графических режимах (более чем 640x480 пикселов). Это ограничение снято в Windows 95 (DOS 7.0). Graeme Burke, Peter Blue и другие распространяют процедуры для мыши, которые решают проблемы, связанные с использованием мыши в SVGA. Посетите в Интернет страницу Euphoria Архив файлов.

Координаты x и y, выдаваемые процедурой, будут совпадать с положением острия курсора мыши или могут относиться к ближайшему пикселу, на который это острие указывает. Проверьте это, если вы пытаетесь прочесть цвет пиксела с помощью функции get_pixel(). Может оказаться, что вам нужны координаты x-1, y-1 вместо x, y.

Пример 1: Выданные величины:
{2, 100, 50}
говорят о том, что левая кнопка была нажата, когда курсор мыши находился на экране в точке с координатами x=100, y=50.
Пример 2: Чтобы проверить LEFT_DOWN, т.е. не нажата ли левая кнопка, напишите программу наподобие следующей:
object event

while 1 do
    event = get_mouse()
    if sequence(event) then
        if and_bits(event[1], LEFT_DOWN) then
            -- левая кнопка была нажата
            exit
        end if
    end if
end while

См. также: mouse_events, mouse_pointer, and_bits

get_pixel

Платформа: DOS32
Синтаксис: x = get_pixel(s)
Описание: Когда s является 2-х элементным рядом экранных координат {x, y}, get_pixel() выдает номер цвета (малое целое) пиксела на гафическом экране в этой точке.

Когда s является 3-х элементным рядом формы: {x, y, n} get_pixel() выдает ряд из n цветов для точек, начиная с {x, y} и с шагом 1 вправо, {x+1, y}, {x+2, y} и т.д.

Точки за пределами экрана имеют непредсказуемые значения цветов.

Комментарии: Когда n определена, для чтения цветов пикселов используется очень быстрый алгоритм. Он значительно быстрее, чем поочередный вызов get_pixel() для чтения цвета каждого следующего пиксела.
Пример:
object x

x = get_pixel({30,40})
-- x дает значение цвета в точке x=30, y=40

x = get_pixel({30,40,100})
-- x дает ряд из 100 значений цвета, представляющих
-- строчку пикселов, начинающуюся в точке {30,40} и идущую вправо

См. также: pixel, graphics_mode, get_position

get_position

Синтаксис: include graphics.e
s = get_position()
Описание: Выдает текущую строку и колонку позиции, в которой находится курсор, как 2-х элементный ряд вида {строка, колонка}.
Комментарии: get_position() работает в обоих режимах - текстовом и графическом. В графических режимах курсор не будет виден, но get_position() будет выдавать строку и колонку, в которых появится следующий символ.

Система координат, в которой отображаются символы, отличается от той, в которой отображаются пикселы. Пикселы отображаются так, что верхний левый находится в точке (x=0,y=0) и первая координата управляет горизонтальным положением, слева направо. Для символов же первая координата управляет вертикальным положением, сверху вниз, а верхний левый находится в позиции 1,1. В графических режимах вы можете одновременно выводить на экран и пикселы, и текст. get_position() выдает текущие строку и колонку для выводимого вами текста, а не для пиксела, который вы собираетесь включить. Соответствующая функция для получения текущей позиции пиксела отсутствует, но ее нетрудно получить из стандартных процедур черчения.

См. также: position, get_pixel

get_screen_char

Платформа: DOS32, Linux
Синтаксис: include image.e
s = get_screen_char(i1, i2)
Описание: Выдает 2-элементный ряд s, в форме {код ascii, атрибуты} для символа на экране в строке i1, колонке i2. s состоит из двух атомов. Первый дает код ASCII для символа. Второй содержит информацию о цветах фона и символа и, возможно, другие данные, описывающие появление символа на экране.
Комментарии: С помощью get_screen_char() и put_screen_char() вы можете запоминать и выводить на экран символ с его атрибутами.
Пример:
-- запоминает в s символ и атрибуты в верхнем левом углу экрана
s = get_screen_char(1,1) 
-- выводит из s символ и атрибуты в позицию строка 25, колонка 10
put_screen_char(25, 10, {s})
См. также: put_screen_char, save_text_image

get_vector

Платформа: DOS32
Синтаксис: include machine.e
s = get_vector(i)
Описание: Выдает текущий дальний адрес защищенного режима для обработчика прерывания номер i. s будет 2-х элементным рядом: {16-битный сегмент, 32-битное смещение}.
Пример:
s = get_vector(#1C)
-- s будет содержать дальний адрес обработчика
-- прерывания от таймера, например: {59, 808}

Пример программы: demo\dos32\hardint.ex
См. также: set_vector, lock_memory

getc

Синтаксис: i = getc(fn)
Описание: Считывает и выдает следующий символ (байт) из файла или с устройства fn. Код символа будет иметь величину от 0 до 255. -1 выдается при достижении конца файла.
Комментарии: Ввод из файла с использованием getc() буферизируется, т.е. getc() не обращается к диску за каждым очередным символом. Напротив, большой блок символов сразу считывается в буфер, но из памяти буфера символы выдаются по одному.

Когда getc() читает с клавиатуры, никакие символы не будут видны, пока пользователь не нажмет Enter. Заметьте, что набранное пользователем на клавиатуре сочетание control-Z трактуется операционной системой как "конец файла". В этом случае вместо кода символа будет выдана -1.

См. также: gets, get_key, wait_key, open

getenv

Синтаксис: x = getenv(s)
Описание: Выдает значение переменной окружения DOS. Если заданная в s переменная не определена, выдает -1.
Комментарии: Так как функция может выдавать или ряд, или атом (-1), переменная, которой присваивается ее значение, должна быть объявлена как объект.
Пример:
e = getenv("EUDIR")
-- e будет "C:\EUPHORIA" -- или возможно D:, E: и т.д.

См. также: command_line

gets

Синтаксис: x = gets(fn)
Описание: Получает следующий ряд (одну строку, включая '\n') символов из файла или с устройства fn. Коды символов будут иметь величины от 0 до 255. Атом -1 выдается при достижении конца файла.
Комментарии: Так как функция выдает или ряд, или атом (-1), вы должны объявить как объект переменную, которой будет присвоено значение функции.

После чтения строки текста с клавиатуры вы обычно должны вывести символ окончания строки \n , т.е. выполнить puts(1, '\n'), прежде чем печатать что-либо другое, иначе печать не начнется от левого края экрана. Только при достижении конца последней строки экрана операционная система автоматически произведет прокрутку экрана и переведет курсор в начало строки.

Последняя строка файла может не иметь символа перевода строки '\n' в конце.

Заметьте, что когда ваша программа читает с клавиатуры, набранное пользователем на клавиатуре сочетание control-Z трактуется операционной системой как "конец файла". В этом случае вместо кода символа будет выдана -1.

В режимах SVGA DOS может устанавливать неверную позицию курсора после вызова gets(0) для чтения с клавиатуры. Вы должны установить ее сами, применив процедуру position().

Пример 1:
sequence buffer
object line
integer fn

-- читает текстовый файл в ряд
fn = open("myfile.txt", "r")
if fn = -1 then
    puts(1, "Не могу открыть myfile.txt\n")
    abort(1)
end if

buffer = {}
while 1 do
    line = gets(fn)
    if atom(line) then
        exit   -- -1 выдана в конце файла
    end if
    buffer = append(buffer, line)
end while

Пример 2:
object line

puts(1, "What is your name?\n")
line = gets(0)  -- читает стандартный вход (клавиатуру)
line = line[1..length(line)-1] -- удаляет символ \n в конце
puts(1, '\n')   -- необходимо
puts(1, line & " is a nice name.\n")

См. также: getc, puts, open

graphics_mode

Платформа: DOS32
Синтаксис: include graphics.e
i1 = graphics_mode(i2)
Описание: Включает видеорежим i2. Просмотрите файл graphics.e, в котором имеется список доступных под управлением Euphoria графических и текстовых видеорежимов. Если заданный режим включен успешно, i1 устанавливается в 0, в противном случае i1 устанавливается в 1.
Комментарии: Некоторые видеорежимы называются текстовыми, потому что в них может отображаться только текст и псевдографика. Другие видеорежимы называются графическими, потому что в них вы можете включить отдельные элементы разрешения экрана (пикселы), вычертить линии, эллипсы и т.д. и одновременно напечатать текст.

Для более четкого возвращения в среду операционной системы обычно целесообразно перед завершением вашей программы перейти из графического режима в стандартный текстовый режим. Это можно сделать, выполнив graphics_mode(-1). Если графическая программа приводит ваш экран в какое-то необычное беспорядочное состояние, вы можете очистить его с помощью команды DOS CLS, а также запустив ex или ed.

Некоторые видеоплаты иногда могут быть не в состоянии обеспечить вполне правильную работу в отдельных режимах SVGA, хотя при программном включении этого режима вы и получили величину i1, соответствующую успешному включению. Данную ошибку крайне трудно выявить без тестирования программы на конкретном оборудовании, так как стандартизация режимов SVGA и параметров новейших видеоплат далека от завершения.

На платформах WIN32 и Linux Euphoria исполняет graphics_mode(), для любого i2 выводя обычную текстовую консоль, если этой консоли еще нет. Функция всегда выдает 0, не имеет значения, какое i2 в нее подано.

Пример:
if graphics_mode(18) then
    puts(SCREEN, "необходима VGA графика!\n")
    abort(1)
end if
draw_line(BLUE, {{0,0}, {50,50}})

См. также: text_rows, video_config

 

... продолжение от H до O