Комментарии:
Если Си-функция не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.
Если в качестве аргумента вы подаёте величину, которая содержит дробную часть, в то время как Си-функция ожидает целочисленный тип Си, аргумент будет округлен в сторону нуля, т.е. 5.9 будет подано как 5, а -5.9 будет подано как -5.
Функция Си может входить в состав библиотеки .dll или .so, созданной транслятором с Euphoria на Си. В этом случае выдаваемая ею величина могла бы быть типа атом или ряд Euphoria. Но функции Си и функции машинного кода могут выдавать только целочисленные величины или, в более общем случае, атомы (числа с плавающей точкой по стандарту IEEE).
Пример:
atom user32, hwnd, ps, hdc
integer BeginPaint
-- открыть user32.dll - она содержит Си-функцию BeginPaint
user32 = open_dll("user32.dll")
-- Си-функция BeginPaint принимает аргументы типа C int и
-- типа C pointer, и выдаёт величину типа C int в качестве результата:
BeginPaint = define_c_func(user32, "BeginPaint",
{C_INT, C_POINTER}, C_INT)
-- вызвать BeginPaint, подавая hwnd и ps в качестве аргументов,
-- присвоить результат hdc:
hdc = c_func(BeginPaint, {hwnd, ps})
См. также:
c_proc, define_c_func, open_dll, platform_r.htm
c_proc
Платформа:
WIN32, Linux, FreeBSD
Синтаксис:
c_proc(i, s)
Описание:
Вызывает Си-функцию или процедуру машинного кода, используя идентификатор (номер) процедуры i. Аргумент i должен быть разрешенным идентификатором процедуры, выданным функцией define_c_proc(). Аргумент s является рядом длины n, содержащим величины аргументов вызываемой Си-функции (процедуры), где n - число аргументов, требуемых Си-функцией (процедурой).
Комментарии:
Если Си-функция не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.
Если в качестве аргумента вы подаёте величину, которая содержит дробную часть, в то время как Си-функция ожидает целочисленный тип Си, аргумент будет округлен в сторону нуля, т.е. 5.9 будет подано как 5, а -5.9 будет подано как -5.
Функция Си может входить в состав библиотеки .dll или .so, созданной транслятором с Euphoria на Си.
Пример:
atom user32, hwnd, rect
integer GetClientRect
-- открыть user32.dll - здесь содержится Си-функция GetClientRect
user32 = open_dll("user32.dll")
-- GetClientRect - это Си-функция типа VOID, у которой два аргумента - типа C int
-- и типа C pointer:
GetClientRect = define_c_proc(user32, "GetClientRect",
{C_INT, C_POINTER})
-- подать hwnd и rect в качестве аргументов
c_proc(GetClientRect, {hwnd, rect})
См. также:
c_func, call, define_c_proc, open_dll, platform_r.htm
call_func
Синтаксис:
x = call_func(i, s)
Описание:
Вызывает определенную программистом Euphoria-функцию с идентификатором (номером) подпрограммы i. Аргумент i должен быть разрешенным идентификатором (номером), выданным routine_id(). Аргумент s является рядом длины n, содержащим аргументы занумерованной функции, где n - число аргументов, требуемых функцией номер i. Переменная x будет содержать результат, выданный функцией номер i.
Комментарии:
Если функция номер i не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.
Пример программы:
democsort.ex
См. также:
call_proc, routine_id
call_proc
Синтаксис:
call_proc(i, s)
Описание:
Вызывает определенную программистом Euphoria-процедуру с идентификатором (номером) подпрограммы i. Аргумент i должен быть разрешенным идентификатором (номером), выданным routine_id(). Аргумент s является рядом длины n, содержащим аргументы занумерованной процедуры, где n - число аргументов, требуемых процедурой номер i.
Комментарии:
Если процедура номер i не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.
Пример:
global integer foo_id
procedure x()
call_proc(foo_id, {1, "Hello Worldn"})
end procedure
procedure foo(integer a, sequence s)
puts(a, s)
end procedure
foo_id = routine_id("foo")
x()
См. также:
call_func, routine_id
chdir
Синтаксис:
include file.e
i = chdir(s)
Описание:
Изменяет текущий каталог (директорию, фолдер, папку) по пути, который задан рядом s. Аргумент s должен содержать имя каталога, существующего на данной машине. В случае успешного изменения каталога chdir() выдаёт 1. Если перейти в заданный каталог не удалось, chdir() выдаёт 0.
Комментарии:
Переходя в необходимый вам каталог и делая его текущим, вы можете затем обращаться к файлам в этом каталоге, указывая только имя файла, без упоминания полного пути к этому файлу.
Функция current_dir() выдаёт имя текущего каталога.
Под DOS32 и WIN32 текущий каталог является общим для всех программ и процессов, исполняемых в одной оболочке (т.е. под управлением одного и того же или единственного экземпляра интерпретатора команд ОС).
Под Linux/FreeBSD дочерние программы могут изменять текущий каталог для своих нужд, но эти изменения не будут относиться к текущему каталогу родительской программы.
Пример:
if chdir("c:\euphoria") then
f = open("readme.doc", "r")
else
puts(1, "Ошибка: отсутствует каталог euphoria?n")
end if
См. также:
current_dir
check_break
Синтаксис:
include file.e
i = check_break()
Описание:
Выдаёт число нажатий сочетания клавиш control-c или control-Break, имевших место с момента последнего вызова check_break(), или с начала программы, если этот вызов первый.
Комментарии:
Данная функция полезна, если в вашей программе была исполнена команда allow_break(0), которая запрещает прерывание вашей программы по нажатию сочетания клавиш control-c и control-Break. Вы можете использовать check_break(), чтобы выяснить, не нажимал ли всё-таки пользователь одно из этих аварийных сочетаний клавиш. Затем вы можете сделать всё то, что требуется для аккуратного и безошибочного завершения вашей программы без малейшего риска потери данных и повреждений файловой системы на диске.
В этих условиях ни control-c, ни control-Break не будут выданы как управляющие символы в операционную систему, если даже вы читаете состояние клавиатуры. Вы сможете только обнаружить, что нажатия состоялись, вызвав check_break().
Пример:
k = get_key()
if check_break() then
temp = graphics_mode(-1)
puts(1, "Программа завершается ...")
save_all_user_data()
abort(1)
end if
См. также:
allow_break, get_key
clear_screen
Синтаксис:
clear_screen()
Описание:
Очищает экран, заполняя его текущим фоновым цветом (этот цвет может быть также задан с помощью bk_color()) и устанавливая курсор в левый верхний угол экрана.
Комментарии:
Процедура работает во всех текстовых и пиксельных режимах.
См. также:
bk_color, graphics_mode
close
Синтаксис:
close(fn)
Описание:
Закрывает файл или устройство, завершив вывод символов, если они ещё оставались в буфере к данному моменту.
Комментарии:
Когда ваша программа заканчивается при нормальном её течении, все открытые файлы и устройства закрываются автоматически, если не были закрыты ранее с помощью команды close(fn).
См. также:
open, flush
command_line
Синтаксис:
s = command_line()
Описание:
Выдаёт ряд, состоящий из строк, в котором каждая строка является словом, введённым в командную строку, с которой была запущена ваша программа. В первом слове будет путь к интерпретатору Euphoria ex.exe, exw.exe или exu, или к вашему связанному исполняемому файлу. В следующем слове будет или имя вашего Euphoria .ex файла, или (опять же) путь к вашему связанному исполняемому файлу. Затем будут идти все те дополнительные слова, которые были введены вами. Вы можете использовать эти слова в вашей программе, например, задавая тот или иной режим её работы. Серии слов можно забирать в кавычки, чтобы тем самым превратить серию слов в единственный аргумент.
Комментарии:
Собственно интерпретаторы Euphoria не используют никаких аргументов командной строки. Но вы можете использовать любые аргументы по своему усмотрению для своих собственных программ.
Если вы преобразовали вашу программу к виду .exe с помощью биндера или транслятора, вы найдете, что аргументы командной строки остались теми же самыми, за исключением первых двух, хотя ваш пользователь уже не вводит "ex" в командной строке (см. примеры ниже).
Пример 1:
-- Пользователь вводит: ex myprog myfile.dat 12345 "the end"
cmd = command_line()
-- cmd будет равно:
{"C:EUPHORIABINEX.EXE",
"myprog",
"myfile.dat",
"12345",
"the end"}
Пример 2:
-- Ваша программа окутана, её имя "myprog.exe",
-- и помещена в каталог c:myfiles