KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » W Cat - Язык программирования Euphoria. Справочное руководство

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн W Cat, "Язык программирования Euphoria. Справочное руководство" бесплатно, без регистрации.
Перейти на страницу:

Выдаёт 1, если x является атомом, иначе выдаёт 0.

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

Данная команда, в основном, служит для объявления переменных типа atom. Но вы можете также применять её подобно вызову функции, чтобы определить, не является ли объект атомом.

Пример 1:


atom a

a = 5.99


Пример 2:


object line


line = gets(0)

if atom(line) then

puts(SCREEN, "конец файлаn")

end if


См. также:

sequence, object, integer, атомы и ряды


atom_to_float32


Синтаксис:

include machine.e

s = atom_to_float32(a1)

Описание:

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

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

Атомы Euphoria могут иметь величины, соответствующие 64-битным числам с плавающей точкой стандарта IEEE, так что вы можете потерять точность при преобразовании их к 32-битным числам (16 значащих цифр против 7). Диапазон показателей экспонент также намного шире для 64-битных чисел, чем в 32-битном формате (308 против 38), поэтому некоторые атомы могут оказаться слишком большими или слишком маленькими для представления их в 32-битном формате. В этом случае вы получите одну из специальных 32-битных величин: inf или -inf (бесконечность или -бесконечность). Чтобы избежать этих ограничений, вы можете применить atom_to_float64().

Целочисленные величины также могут быть преобразованы в 32-битный формат с плавающей точкой.

Пример:


fn = open("numbers.dat", "wb")

puts(fn, atom_to_float32(157.82)) -- запись 4-х байтов в файл


См. также:

atom_to_float64, float32_to_atom


atom_to_float64


Синтаксис:

include machine.e

s = atom_to_float64(a1)

Описание:

Преобразует атом Euphoria в ряд, состоящий из 8 однобайтовых величин. Эти 8 байтов содержат представление числа с плавающей точкой в 64-битном формате по стандарту IEEE.

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

Все атомы Euphoria имеют величины, которые могут быть представлены как 64-битные числа с плавающей точкой в формате по стандарту IEEE, поэтому вы можете преобразовать любой атом в 64-битный формат без всяких потерь точности.

Целочисленные величины также могут быть преобразованы в 64-битный формат с плавающей точкой.

Пример:


fn = open("numbers.dat", "wb")

puts(fn, atom_to_float64(157.82)) -- запись 8 байтов в файл


См. также:

atom_to_float32, float64_to_atom


bits_to_int


Синтаксис:

include machine.e

a = bits_to_int(s)

Описание:

Преобразует ряд, состоящий из единиц и нулей, дающих двоичное представление числа, в положительное десятичное число. Младший значащий "бит" должен быть первым членом ряда, s[1].

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

Если вывести ряд s на печать, то младшие биты будут находиться слева, то есть в "инверсном" порядке по отношению к обычной форме записи, принятой для многоразрядных чисел, но это соглашение удобно, так как позволяет иметь возрастающие индексы для доступа к битам по мере возрастания веса битов.

Пример:


a = bits_to_int({1,1,1,0,1})

-- a равно 23 (двоичное 10111)


См. также:

int_to_bits, операции на рядах


bk_color


Синтаксис:

include graphics.e

bk_color(i)

Описание:

Устанавливает цвет фона в один из 16 стандартных цветов. В пиксельных режимах весь экран перекрашивается немедленно. В текстовых режимах любые новые символы, которые вы печатаете, будут появляться на фоне с новым цветом. В некоторых текстовых режимах для фона доступны только 8 различных цветов.

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

16 стандартных цветов определены как константы в файле graphics.e.

В пиксельных режимах цвет 0, который обычно соответствует чёрному (BLACK), будет установлен в то самое значение палитры {r,g,b}, что и цвет номера i.

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

В текстовых режимах для того, чтобы восстановить исходный цвет фона, когда ваша программа заканчивается, т.е. 0 - ЧЁРНЫЙ, вы должны вызвать процедуру bk_color(0). Если курсор находится на нижней строке экрана, целесообразно напечатать что-нибудь перед остановкой вашей программы. Напечатайте хотя бы 'n', и этого может быть достаточно.

Пример:


bk_color(BLACK)


См. также:

text_color, palette


bytes_to_int


Синтаксис:

include machine.e

a = bytes_to_int(s)

Описание:

Преобразует 4-х элементный ряд, состоящий из байтов, в атом. Элементы ряда s должны находиться в порядке, предусмотренном для 32-битных целых чисел на машинах 386+, т.е. младший значащий байт первый - s[1].

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

Результат может быть больше, чем допускает тип integer, поэтому вы должны присваивать его значение атому.

Ряд s будет обычно содержать положительные величины, которые ранее были прочитаны оператором peek() из 4-х последовательных ячеек памяти.

Пример:


atom int32


int32 = bytes_to_int({37,1,0,0})

-- int32 равно 37 + 256*1 = 293


См. также:

int_to_bytes, bits_to_int, peek, peek4s, peek4u, poke


...

от C до D


call


Синтаксис:

call(a)

Описание:

Вызывает подпрограмму на машинном языке, участок памяти с кодом которой начинается по адресу a. Подпрограмма должна запомнить содержимое всех регистров, которые она использует, а затем восстановить их в первоначальное состояние. Для обратной передачи управления интерпретатору Euphoria в этой подпрограмме должна быть предусмотрена инструкция RET (#C3).

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

Вы можете подготовить участок памяти для подпрограммы и затем по этому адресу разместить байты машинного кода. Вы можете подготовить другие участки памяти для данных и параметров, которыми машинный код может оперировать. Адреса этих других участков могут быть размещены в машинном коде.

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

democallmach.ex

См. также:

allocate, free, peek, poke, poke4, c_proc, define_c_proc


call_back


Платформа:

WIN32, Linux, FreeBSD

Синтаксис:

include dll.e

a = call_back(i)

или

a = call_back({i1, i})

Описание:

Выдаёт машинный адрес для Euphoria-подпрограммы по её идентификатору (номеру) i. Этот адрес может затем использоваться или Windows, или внешней функцией Си (из динамически подгружаемой библиотеки (.dll) Windows или общей библиотеки (.so) Linux/FreeBSD) как 32-битный "обратный" адрес для вызова вашей Euphoria-подпрограммы. Под Windows вы можете также задать i1, доопределив тем самым формат (соглашение о форме) вызова Си для вашей подпрограммы. Если i1 записано как '+', будет применён формат cdecl. По умолчанию применяется формат stdcall. На платформах Linux и FreeBSD следует использовать только первую форму (без i1), так как там, в отличие от Windows, действует лишь стандартный формат, stdcall.

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

Вы можете установить столько "обратных" подпрограмм, сколько вам нужно, но все они должны быть Euphoria-функциями (или типами) с числом аргументов от 0 до 9. Если ваша подпрограмма не расчитана на выдачу какого-то результата (являлась бы фактически процедурой), просто (скажем так) задайте return 0, а вызывающая функция Си может игнорировать результат.

Когда ваша подпрограмма вызвана, все аргументы будут 32-битными числами без знака (положительными), поэтому вы должны объявить каждый аргумент в вашей подпрограмме как atom, независимо от вашего желания устроить более жесткий контроль. Ваша подпрограмма должна выдавать 32-битную целочисленную величину.

Вы можете также использовать адрес обратного вызова, чтобы задать подпрограмму Euphoria в качестве обработчика исключения в функции signal() под Linux/FreeBSD, когда, например, вам необходимо принять сигнал SIGTERM и произвести аккуратное завершение вашей программы. Да, действительно, иногда некоторые серверы Web выдают сигнал SIGTERM тому процессу CGI, который захватил слишком много машинного времени, и ваша программа должна быть готовой к такому повороту событий.

Подпрограмма обратного вызова, использующая соглашение cdecl и выдающая результат с плавающей точкой, может не работать с exw. Это происходит из-за особенностей компилятора Watcom C (с ним строится exw), который в формате cdecl нестандартным образом обходится с результатами, имеющими тип с плавающей точкой.

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

demowin32window.exw, demolinuxqsort.exu

См. также:

routine_id, platform_r.htm


c_func


Платформа:

WIN32, Linux, FreeBSD

Синтаксис:

x = c_func(i, s)

Описание:

Вызывает Си-функцию, или функцию машинного кода, или транслированную/ компилированную функцию Euphoria, имеющую идентификатор (номер) функции i. Аргумент i должен быть разрешённым номером, выданным функцией define_c_func(). Аргумент s является рядом длины n, содержащим значения аргументов занумерованной функции, где n - число аргументов, требуемых функцией номер i. В переменной x будет содержаться результат, выданный Си-функцией.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*