Книга: Язык программирования Euphoria. Справочное руководство

от E до G

от E до G

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}.

Пример программы:

demodos32sb.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, "его имя - Georgen")
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

См. также:

find_from, match, match_from, compare

find_from

Синтаксис:

i1 = find_from(x, s, i2)

Описание:

Ищет объект x как элемент ряда s, начиная поиск с индекса (номера) i2. В случае первого же успеха выдаёт индекс (номер) текущего элемента в ряде s, который совпадает по величине с x, и прекращает дальнейший поиск. При неудаче поиска выдаёт 0. Индекс i2 может иметь любую величину в диапазоне от 1 до длины ряда s плюс 1 - аналогично первому индексу сечения (отрезка) ряда s.

Пример 1:

location = find_from(11, {11, 8, 11, 2, 3}, 2)
-- индекс location будет равен 3

Пример 2:

names = {"mary", "rob", "george", "mary", ""}
location = find_from("mary", names, 3)
-- индекс location будет равен 4

См. также:

find, match, match_from, compare

float32_to_atom

Синтаксис:

include machine.e

a1 = float32_to_atom(s)

Описание:

Преобразует ряд, состоящий из 4 байтов, в атом. Считается, что эти 4 байта должны содержать число с плавающей точкой в 32-битном формате по стандарту IEEE.

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

Любая 4-х байтовая величина, выражающая 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.

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

Любая 8-ми байтовая величина, выражающая 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 (округляет вниз до целого, то есть, отбрасывая дробную часть у положительных чисел или считая дробную часть за полную -1 у отрицательных чисел).

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

Эта функция может быть применена к атому или ко всем элементам ряда.

Пример:

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#1n")
puts(1, "По готовности нажмите Entern")
flush(f) -- Команда выталкивает "Record #1" в файл "logfile" на диске.
-- Без этой команды "logfile" будет ещё пустым,
-- когда мы уже закончим ввод с клавиатуры.
s = gets(0) -- ожидание ввода с клавиатуры

См. также:

close, lock_file

free

Синтаксис:

include machine.e

free(a)

Описание:

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

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

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

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

Пример программы:

democallmach.ex

См. также:

allocate, free_low

free_console

Платформа:

WIN32, Linux, FreeBSD

Синтаксис:

include dll.e

free_console()

Описание:

Закрывает (удаляет) консольное окно, связанное с вашей программой (если оно существует).

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

Эта процедура используется, если вы получаете нежелательное сообщение "Press Enter" в конце исполнения вашей программы на платформах Windows или Linux/FreeBSD.

См. также:

clear_screen, platform_r.htm

free_low

Платформа:

DOS32

Синтаксис:

include machine.e

free_low(i)

Описание:

Освобождает ранее занятый участок стандартной памяти. Аргумент i представляет собой начальный адрес участка, который был вами получен при выделении участка с помощью функции allocate_low().

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

Процедуру free_low() следует использовать для возвращения участков стандартной памяти в резерв программы во время её работы. Это снизит вероятность исчерпания стандартной памяти. Не обращайтесь к тем участкам памяти, которые были освобождены. Когда ваша программа завершается, вся занятая ею память, включая резервы программы, возвращается в распоряжение операционной системы.

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

Пример программы:

demodos32dosint.ex

См. также:

allocate_low, dos_interrupt, free

get

Синтаксис:

include get.e

s = get(fn)

Описание:

Считывает из файла fn строковое (текстовое) представление объекта Euphoria. Преобразует строковое представление в численное значение данного объекта, которое может быть затем присвоено переменной. Выдаваемый функцией ряд является 2-х элементным рядом вида: {результат чтения, значение объекта}.

Коды, обозначающие результат чтения (константы определены в файле get.e):

GET_SUCCESS -- объект прочитан успешно (0)
GET_EOF -- файл закончился до прочтения объекта (-1)

GET_FAIL -- объект синтаксически некорректен (1)

Функция 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} или {1+1, 2*2, 3-2},

то вы получите результат чтения GET_FAIL, так как xxx не является строковым представлением объекта Euphoria, а выражения на входе функции get() не допускаются.

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

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

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

Выдаваемые данные всегда имеют маловыразительный числовой формат, в котором строки представлены кодами ASCII.

Если результат чтения НЕ соответствует состоянию GET_SUCCESS (объект прочитан успешно), значение объекта не имеет смысла.

Пример:

Предположим, ваша программа предлагает пользователю ввести числа с клавиатуры.

-- если пользователь наберёт 77.5, функция get(0) выдаст:
{GET_SUCCESS, 77.5}, точнее {0, 77.5}
-- в то время как функция gets(0) выдала бы результат, эквивалентный:
"77.5n"

Пример программы:

demomydata.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}}

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

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

Эта функция может применяться, чтобы получить данные о палитре, необходимые для процедуры 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, это означает, что вы достигли конца файла. В конечном итоге функция выдаёт пустой ряд.

Эта функция обычно используется с файлами, открытыми на чтение в двоичном режиме, "rb". Данный приём позволяет избежать путаницы текстового режима "r", в котором DOS пребразует пары управляющих символов 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 -- отрывок может быть пустым, это нормально
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

Синтаксис:

include mouse.e

x1 = get_mouse()

Описание:

Выдаёт данные о последнем мышином событии по форме: {событие, 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, чтобы получить позицию по строкам и колонкам.

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

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

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

DOS в общем случае не обеспечивает использование мыши в графических режимах SVGA (экраны с числом пикселов более 640x480). Это ограничение снято в Windows 95 (DOS 7.0). Грэм Барки, Питер Блю и другие программисты распространяют подпрограммы для мыши, которые решают проблемы, связанные с использованием мыши в 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() выдаёт текущие строку и колонку для выводимого вами текста, а не для пиксела, который вы собираетесь включить. Соответствующая функция для получения текущей позиции пиксела в языке Euphoria отсутствует.

См. также:

position, get_pixel

get_screen_char

Синтаксис:

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}

Пример программы:

demodos32hardint.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)

Описание:

Считывает и выдаёт очередной ряд символов из файла или с устройства fn (одну строку, включая 'n'). Коды символов будут иметь величины от 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.txtn")
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, "Как вас зовут?n")
line = gets(0) -- читает стандартный вход (клавиатуру)
line = line[1..length(line)-1] -- удаляет символ n в конце
puts(1, 'n') -- необходимо
puts(1, line & " - хорошее имя.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.exe или редактор ed.

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

На платформах WIN32 и Linux/FreeBSD 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

...

Оглавление книги


Генерация: 0.037. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз