Комментарии:
Так как значения адресов выражаются 32-битными числами, они могут быть больше величины, представимой типом integer (31 бит). Поэтому переменные, которые содержат адреса, должны объявляться как atom.
Более быстрым, чем побайтное считывание в цикле, является чтение нескольких байтов сразу с использованием второй формы peek().
Помните, что в функцию peek() подаётся единственный аргумент, который во второй форме является двухэлементным рядом.
Пример:
Следующие записи равнозначны:
-- метод 1
s = {peek(100), peek(101), peek(102), peek(103)}
-- метод 2
s = peek({100, 4})
См. также:
poke, peek4s, peek4u, allocate, free, allocate_low, free_low, call
peek4s
Синтаксис:
a2 = peek4s(a1)
или ...
s = peek4s({a1, i})
Описание:
Выдаёт 4-х байтную (32 бита) величину со знаком в диапазоне от -2147483648 до +2147483647, считанную с машинного адреса a1, или ряд, содержащий i последовательных 4-байтных величин со знаком, начинающихся с адреса a1 в памяти.
Комментарии:
32-х битные величины, выдаваемые функцией peek4s(), могут превышать допустимые для типа integer в Euphoria (31-бит), поэтому вы должны использовать переменные типа atom.
Так как машинные адреса являются 32-х битными числами, их величина может превышать допустимую для типа integer Euphoria. Поэтому переменные, в которых записываются адреса, должны быть объявлены как atom.
Более быстрым, чем поочерёдное чтение 4-байтных величин в цикле, является чтение нескольких 4-байтных величин сразу с использованием второй формы peek4s().
Не забывайте, что peek4s() требует единственного аргумента, который во второй форме является 2-х элементным рядом.
Пример:
Следующие записи равнозначны:
-- метод 1
s = {peek4s(100), peek4s(104), peek4s(108), peek4s(112)}
-- метод 2
s = peek4s({100, 4})
См. также:
peek4u, peek, poke4, allocate, free, allocate_low, free_low, call
peek4u
Синтаксис:
a2 = peek4u(a1)
или ...
s = peek4u({a1, i})
Описание:
Выдаёт 4-х байтную (32 бита) величину без знака в диапазоне от 0 до 4294967295, расположенную по машинному адресу a1, или выдаёт ряд из i таких величин, начинающийся с адреса a1 в памяти.
Комментарии:
32-х битная величина, выдаваемая peek4u(), может превышать допустимую для типа integer в Euphoria (31 бит), поэтому вы должны использовать переменные типа atom.
Так как машинные адреса являются 32-битными числами, они также могут быть за пределами типа integer Euphoria. Переменные, в которых содержатся адреса, должны быть объявлены как тип atom.
Более быстрым является чтение нескольких 4-х байтных величин сразу с использованием второй формы peek4u(), чем поочерёдное чтение таких величин в цикле.
Не упускайте из виду, что peek4u() требует единственного аргумента, который для второй формы является 2-х элементным рядом.
Пример:
Следующие записи равнозначны:
-- метод 1
s = {peek4u(100), peek4u(104), peek4u(108), peek4u(112)}
-- метод 2
s = peek4u({100, 4})
См. также:
peek4s, peek, poke4, allocate, free, allocate_low, free_low, call
PI
Синтаксис:
include misc.e
PI
Описание:
PI (3.14159...) число Пи определено как глобальная константа.
Комментарии:
Принятое в определении число знаков Пи обеспечивает максимальную точность вычислений, возможную для типа atom в Euphoria.
Пример:
x = PI -- x будет равно 3.14159...
См. также:
sin, cos, tan
pixel
Платформа:
DOS32
Синтаксис:
pixel(x1, s)
Описание:
Включает один или несколько пикселов на пиксельно-графическом экране, начиная с точки s, где s является 2-х элементным рядом экранных координат {x, y}. Если x1 является атомом, включается один пиксел с цветом x1. Если x1 является рядом, включается ряд пикселов, начиная с точки s и вправо (возрастает x, y постоянное).
Комментарии:
Когда x1 является рядом, применяется весьма быстрый алгоритм включения пикселов на экране. Он значительно быстрее, чем поочередное включение одиночных пикселов через вызовы pixel() в цикле. Задавая сразу ряд цветов пикселов, вы заметно быстрее нарисуете их на экране.
В графическом режиме 19 процедура pixel() особенно быстрая.
Те пикселы, координаты которых уходят за пределы экрана, игнорируются интерпретатором.
Пример 1:
pixel(BLUE, {50, 60})
-- в точке {50,60} включится пиксел с цветом BLUE(синий)
Пример 2:
pixel({BLUE, GREEN, WHITE, RED}, {50,60})
-- {50,60} включится BLUE (синий)
-- {51,60} включится GREEN (зелёный)
-- {52,60} включится WHITE (белый)
-- {53,60} включится RED (красный)
См. также:
get_pixel, graphics_mode
platform
Синтаксис:
i = platform()
Описание:
Значение, выдаваемое функцией platform(), встроено в интерпретатор. Это значение показывает, с каким именно интерпретатором запущена программа, с интерпретатором для DOS32, WIN32, Linux или FreeBSD.
Комментарии:
Когда работает ex.exe, считается, что операционная система DOS32. Когда работает exw.exe, операционная система WIN32. Когда работает exu, операционная система Linux (или FreeBSD).
В библиотеке misc.e определены следующие глобальные константы:
global constant DOS32 = 1,
WIN32 = 2,
LINUX = 3,
FREEBSD = 3
Используйте функцию platform(), когда вам необходимо исполнять различный код в зависимости от операционной системы, в среде которой запущена ваша программа.
Дополнительные значения констант будут вводиться в Euphoria по мере освоения других машин и операционных систем.
Вызов функции platform() не влечёт никаких расходов. Во время компиляции просто вырабатывается соответствующая целочисленная величина: 1, 2 или 3.
Пример:
if platform() = WIN32 then
-- вызов системной подпрограммы Beep под Windows
err = c_func(Beep, {0,0})
elsif platform() = DOS32 then
-- запуск звука на встроенном динамике под DOS
sound(500)
t = time()
while time() do
end while
sound(0)
else
-- пропуск команды под Linux/FreeBSD
end if
См. также:
platformr.doc
poke
Синтаксис:
poke(a, x)
Описание:
Если x является атомом, в память по адресу a записывается один байт. Если же x является рядом, в память, начиная с адреса a, записывается последовательность байтов, представленная этим рядом.
Комментарии:
В память записываются младшие 8 битов величины x, т.е. remainder(x, 256), а не сама величина х.
Запись в память ряда байтов является значительно более быстрой, чем поочерёдная запись отдельных байтов в цикле.
Вывод в экранную память с помощью poke() может быть намного быстрее, чем стандартная запись на экран с помощью процедур puts() или printf(), но программирование такого вывода заметно сложнее. В большинстве случаев сверхвысокая скорость не требуется. Например, в редакторе ed.ex из пакета Euphoria poke() никогда не используется.