Комментарии:
Ввод из файла с использованием функции 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
...
instance
Платформа:
WIN32
Синтаксис:
include misc.e
i = instance()
Описание:
Выдаёт идентификатор текущей программы.
Комментарии:
Этот идентификатор представляет собой число, вырабатываемое операционной системой, и может быть подан в различные функции Windows, выдающие сведения о текущей исполняемой программе, т.е. о вашей программе. Каждый раз, когда пользователь запускает вашу программу, будет вырабатываться другой идентификатор экземпляра (образца) программы.
В языке Си это первый аргумент при вызове функции WinMain().
На платформах DOS32 и Linux/FreeBSD instance() всегда выдаёт 0.
См. также:
platform.doc
int_to_bits
Синтаксис:
include machine.e
s = int_to_bits(a, i)
Описание:
Выдаёт i младших битов атома a как ряд единиц и нулей. В этом ряде младшие значащие биты идут первыми. Для отрицательных чисел выдаётся двоичное дополнение.
Комментарии:
, , and/or/xor/not
Вы можете использовать индексирование, сечение, операторы and/or/xor/not для обработки выходного ряда, т.е. манипулировать рядами битов по своему усмотрению. При необходмости могут быть легко осуществлены обычные и циклические сдвиги битов, а также другие преобразования.
Пример:
s = int_to_bits(177, 8)
-- s будет равно {1,0,0,0,1,1,0,1} -- "обратный" порядок
См. также:
bits_to_int, and_bits, or_bits, xor_bits, not_bits, операции на рядах
int_to_bytes
Синтаксис:
include machine.e
s = int_to_bytes(a)
Описание:
Преобразует целое в ряд, состоящий из 4 байтов. Эти байты идут в порядке, предусмотренном на машинах 386+, т.е. младший значащий байт идет первым.
Комментарии:
Вы можете воспользоваться этой процедурой перед засылкой 4 байтов в память при работе с программой на машинном языке.
Целое может быть отрицательным. При этом будут выданы отрицательные значения для величин байтов, но после засылки их в память вы получите правильное представление (двоичное дополнение), принятое на машинах 386+.
Эта функция будет правильно преобразовывать целочисленные величины, включая 32-битные и менее. Для больших величин преобразуются только младшие 32 бита. Тип целых в Euphoria может иметь величину не более 31 бита, так что объявляйте ваши переменные как атом, если вам нужны более широкие пределы величин.
Пример 1:
s = int_to_bytes(999)
-- s будет равно {231, 3, 0, 0}
Пример 2:
s = int_to_bytes(-999)
-- s будет равно {-231, -4, -1, -1}
См. также:
bytes_to_int, int_to_bits, bits_to_int, peek, poke, poke4
integer
Синтаксис:
i = integer(x)
Описание:
Выдаёт 1, если x является целым в пределах от -1073741824 до +1073741823. В противном случае выдаёт 0.
Комментарии:
Данная команда служит для объявления переменной типа integer. Вы можете также использовать её и как функцию для проверки, какого типа объект перед вами, не целое ли это число.
Пример 1:
integer z
z = -1
Пример 2:
if integer(y/x) then
puts(SCREEN, "y кратно x")
end if
См. также:
atom, sequence, floor
length
Синтаксис:
i = length(s)
Описание:
Выдаёт длину ряда s. Переменная s должна быть именно типа ряд. В случае, если s является атомом, возникает ошибка времени исполнения с остановкой программы и выводом сообщения.
Комментарии:
Значение текущей длины каждого ряда сохраняется интерпретатором во внутреннем формате для осуществления быстрого доступа.
Пример 1:
length({{1,2}, {3,4}, {5,6}}) -- 3