Разработчику библиотеки может понадобиться вызов crash_routine() в библиотеке. Это позволит более упорядоченно обращаться с данными, закрывая файлы, отпирая запертые файлы, высвобождая ресурсы и т.п. Но разработчик главной программы может иметь и свои собственные crash_routine(). И все аварийные функции будут отработаны Euphoria, если первая вызванная (последняя назначенная) и все последующие выдадут 0.
Аварийная функция не может продолжить исполнение программы из точки останова, исправив ошибку. Но других ограничений на то, что она может делать, практически не существует. Она не может и не должна возвращаться вспять по программе, но она может перезапустить эту программу, например, с откорректированными аргументами командной строки.
Если во время исполнения аварийной функции случится другая ошибка, снова вызывается распечатка отладочной информации, но имя файла в этом случае будет уже ex_crash.err, а не ex.err. С этого момента запрещаются любые новые вызовы аврийных функций, а вы остаётесь наедине с ex.err и ex_crash.err, чтобы с ними в руках попытаться найти причину всех несчастий.
Пример:
function crash(object x)
-- в случае пожара ...
-- (под Linux) отправить сообщение e-mail, содержащее файл ex.err
system("mail -s \"crash!\" myname@xxx.com < ex.err > /dev/null", 2)
return 0
end function
crash_routine(routine_id("crash"))
См. также:
abort, crash_file, crash_message, отладка и профилирование
current_dir
Синтаксис:
include file.e
s = current_dir()
Описание:
Выдаёт имя текущего рабочего каталога (директории, папки, фолдера).
Комментарии:
После имени текущего каталога не будет ни косой черты, ни обратной косой черты, за исключением случая под DOS/Windows, в корневом каталоге диска, где вы получите, например, C:\
Пример:
sequence s
s = current_dir()
-- s будет равно "C:\EUPHORIA\DOC", если вы находитесь в этом каталоге
См. также:
dir, chdir, getenv
cursor
Платформа:
WIN32, DOS3 2
Синтаксис:
include graphics.e
cursor(i)
Описание:
Задаёт форму курсора. Библиотека graphics.eсодержит глобальные константы:
global constant NO_CURSOR = #2000,
UNDERLINE_CURSOR = #0607,
THICK_UNDERLINE_CURSOR = #0507,
HALF_BLOCK_CURSOR = #0407,
BLOCK_CURSOR = #0007
Вторая и четвертая шестнадцатиричные цифры (слева) дают номера верхнего и нижнего рядов пикселов в изображении курсора. От первой цифры зависит, будет курсор видимым или нет. Например, #0407 включает с 4-го по 7-ой ряд пикселов.
Комментарии:
В пиксельных экранных режимах курсор не отображается, только в текстовых.
Пример:
cursor(BLOCK_CURSOR)
См. также:
graphics_mode, text_rows
custom_sort
Синтаксис:
include sort.e
s2 = custom_sort(i, s1)
Описание:
Сортирует элементы ряда s1, используя заданную сравнивающую функцию с номером(идентификатором) i. Выдаёт отсортированный ряд.
Комментарии:
Заданная вами заказная сравнивающая функция должна быть функцией двух аргументов наподобие Euphoria-функции compare(). Она должна сравнивать два объекта и выдавать -1, 0 или +1.
Пример программы:
demo\csort.e x
См. также:
sort, compare, routine_id
date
Синтаксис:
s = date()
Описание:
Выдаёт ряд со следующей информацией:
{год, -- начиная с 1900
месяц, -- январь = 1
день, -- день месяца, начиная с 1
час, -- от 0 до 23
минута, -- от 0 до 59
секунда, -- от 0 до 59
день недели, -- воскресенье = 1
день года} -- 1 января = 1
Пример:
now = date()
-- now равно: {95,3,24,23,47,38,6,83}
-- т.е. пятница, 24 марта 1995 года, 23 часа 47 минут 38 секунд, 83-ий день года
Комментарии:
Величина, выдаваемая для года, является числом лет, начиная с 1900, а не последними 2-мя цифрами года. В 2000 году эта величина составила 100. В 2001 это было 101 и т.д. Естественно, часы и календарь вашего компьютера должны быть правильно установлены на текущие время и дату.
См. также:
time
define_c_func
Синтаксис:
include dll.e
i1 = define_c_func(x1, x2, s1, i2)
Описание:
Выдаёт номер(идентификатор) подпрограммы для заданной Си-функции или же функции машинного кода. Аргументами служат характеристики заданной функции. Выданный номерi1 используется далее в качестве первого аргумента при вызове подпрограммы c_func(), которая и запускает заданную внешнюю функцию на исполнение из Euphoria.
Когда вы задаёте характеристики Си-функции, аргумент x1 должен представлять собой адрес системной библиотеки, содержащей эту Си-функцию. Адрес библиотеки вы должны получить, заранее вызвав функцию open_dll(). Аргумент x2 задаёт имя Си-функции, которая вас интересует. Если define_c_func() не находит заданную Си-функцию, в качестве номера она выдаёт -1. На платформе Windows вы можете перед именем функции добавить символ '+'. Он показывает Euphoria, что для вызова Си-функции предусмотрены правила соглашения cdecl. По умолчанию Euphoria считает, что подпрограммы Си вызываются по правилам соглашения stdcall.
Читать дальше