Часть II - Библиотечные подпрограммы
1. Введение
Здесь вы найдете описание большого числа библиотечных подпрограмм.
Некоторые из них встроены непосредственно в интерпретаторы
ex.exe,
exw.exe и
exu.
Другие написаны на Euphoria и вы должны подключить к своей программе
один или несколько библиотечных файлов с расширением .e из
каталога euphoria\include, чтобы
воспользоваться этими внешними подпрограммами. Там, где такое подключение
необходимо, соответствующий библиотечный файл отмечен в графе
"Синтаксис" описания подпрограммы. Разумеется, библиотечный файл
требует только однократного подключения к вашей программе.
Редактор выделяет пурпурным цветом те подпрограммы, которые встроены
в интерпретатор и не требуют никаких библиотечных файлов.
Вы можете определить свои собственные подпрограммы под именами встроенных,
но интерпретатор будет выводить в этом случае предупредительное сообщение,
которое может быть вами заблокировано.
Для обозначения рода объекта, который
может быть подан в подпрограмму или выдан ею, в данном руководстве
используются следующие сокращения, собственно к языку Euphoria не
относящиеся:
Часть подпрограмм доступна в среде только одной из двух или трех
операционных систем. Такие подпрограммы обозначены словами
"Платформа: DOS32" или
"Платформа: WIN32" или
"Платформа: Linux"
в их описании
и (DOS32) или
(WIN32) или
(Linux)
в некоторых других случаях.
Сообщения об ошибках времени прогона обычно являются результатом
того, что в одну из подпрограмм подан аргумент с недопустимым
значением величины.
2. Подпрограммы области проекта
2.1 Предопределенные типы
С помощью предопределенных типов вы можете не только объявлять
переменные вашей программы, но и вызывать эти типы подобно
обычным функциям, чтобы проверить, относится ли полученная
в результате вычислений величина к ожидаемому типу.
integer |
- |
проверяет, относится ли объект к типу integer - целое |
atom |
- |
проверяет, относится ли объект к типу atom - атом |
sequence |
- |
проверяет, относится ли объект к типу sequence - ряд |
object |
- |
проверяет, относится ли объект к типу object - объект (всегда истина) |
2.2 Манипуляции с рядами
length |
- |
выдает длину ряда |
repeat |
- |
повторяет объект n раз, чтобы сформировать ряд длины n |
reverse |
- |
оборачивает ряд |
append |
- |
добавляет новый элемент в конец ряда |
prepend |
- |
прибавляет новый элемент в начало ряда |
2.3 Поиск и сортировка
compare |
- |
сравнивает два объекта |
equal |
- |
проверяет, являются ли два объекта идентичными |
find |
- |
отыскивает объект в ряде |
match |
- |
отыскивает ряд как отрезок в другом ряде |
sort |
- |
сортирует элементы ряда в порядке возрастания |
custom_sort |
- |
сортирует элементы ряда, базируясь на иной, заданной вами,
функции сравнения |
2.4 Поиск по образцам
lower |
- |
преобразует атом или ряд к нижнему регистру |
upper |
- |
преобразует атом или ряд к верхнему регистру |
wildcard_match |
- |
отыскивает по образцу, возможно, содержащему символы догадок ? и * |
wildcard_file |
- |
отыскивает имя файла по образцу, возможно, с символами догадок |
2.5 Математика
Данные подпрограммы могут быть применены к отдельным атомам или к рядам
величин. См. Часть I - Ядро языка -
Действия с рядами.
sqrt |
- |
вычисляет квадратный корень объекта |
rand |
- |
выдает случайные числа |
sin |
- |
вычисляет синус угла |
arcsin |
- |
вычисляет угол для данного синуса |
cos |
- |
вычисляет косинус угла |
arccos |
- |
вычисляет угол для данного косинуса |
tan |
- |
вычисляет тангенс угла |
arctan |
- |
вычисляет угол для данного тангенса |
log |
- |
вычисляет натуральный логарифм |
floor |
- |
округляет вниз до ближайшего целого |
remainder |
- |
вычисляет остаток от деления двух чисел |
power |
- |
возводит число в заданную степень |
PI |
- |
число PI (пи) (3.14159...) |
2.6 Битовые логические операции
Данные подпрограммы трактуют числа как наборы битов,
и выполняют логические операции над соответствующими
битами двоичного представления чисел. Мы не предлагаем
подпрограмм для сдвигов битов влево или вправо, так
как вы можете получить такой же эффект, выполняя
умножение или деление на необходимые степени двойки.
and_bits |
- |
выполняет логическое AND - И над соответствующими битами |
or_bits |
- |
выполняет логическое OR - ИЛИ над соответствующими битами |
xor_bits |
- |
выполняет логическое XOR - исключающее ИЛИ над соответствующими битами |
not_bits |
- |
выполняет логическое NOT - НЕ над всеми битами |
2.7 Операции ввода/вывода в файл и на устройство
Чтобы произвести операции ввода/вывода в файл или на устройство вы должны
сначала открыть файл или устройство для этих операций, а уже затем
применять подпрограммы, описываемые ниже, для ввода и вывода (записи и
чтения). По окончании операций чтения или записи вы должны закрыть
файл или устройство. Подпрограмма open()
выдаст вам номер файла, который вы должны использовать как первый
аргумент в других подпрограммах ввода/вывода.
Вполне определенные файлы/устройства открыты для вас автоматически
(на манер текстовых файлов):
-
0 - стандартный ввод
-
1 - стандартный вывод
-
2 - стандартная ошибка
Если вы не переопределили их направление в
командной строке, стандартный ввод производится
с клавиатуры, стандартный вывод и стандартная ошибка поступают на экран.
Когда вы пишете что-либо на экране, запись выполняется немедленно без
какой бы то ни было буферизации. Если же вы пишете в файл, символы сначала
поступают в буфер, пока их не накопится достаточно для быстрой записи в
файл. Когда вы применяете к файлу или устройству процедуры
close() или
flush(), все находящиеся в буфере
символы, даже если буфер не заполнен, немедленно выводятся. Ввод
из файлов также производится через буфер. Когда ваша программа
завершается, все файлы, остававшиеся к этому моменту открытыми,
закрываются автоматически.
-
Примечание:
-
Если при исполнении программы (написанной на Euphoria или любом другом языке)
имелись файлы, открытые на запись, а вы, не выходя из программы, произвели
сброс и перезагрузку компьютера (по любой причине, например, при исчезновении
питания в силовой сети), необходимо немедленно по окончании загрузки
запустить программу scandisk для исправления возможных в таких
ситуациях повреждений файловой системы на тех дисках, куда выполнялась
запись в момент сброса вашей машины.
open |
- |
открывает файл или устройство |
close |
- |
закрывает файл или устройство |
flush |
- |
выводит данные из буфера в файл или на устройство |
lock_file |
- |
запирает файл или устройство |
unlock_file |
- |
отпирает файл или устройство |
print |
- |
печатает объект Euphoria,
сохраняя {,,}, чтобы показать его структуру |
? x |
- |
короткий вариант для print(1, x) |
sprint |
- |
выдает отпечатанный объект Euphoria в виде символьного ряда |
printf |
- |
выполняет форматированную печать в файл или на устройство |
sprintf |
- |
форматированная печать в символьный ряд |
puts |
- |
выводит символьный ряд в файл или на устройство |
getc |
- |
читает следующий символ из файла или с устройства |
gets |
- |
читает следующую строку из файла или с устройства |
get_bytes |
- |
читает следующие n байтов
из файла или с устройства |
prompt_string |
- |
приглашает пользователя к вводу строки символов |
get_key |
- |
проверяет, какая клавиша нажата на клавиатуре,
не ждет нажатия |
wait_key |
- |
ждет нажатия на клавишу |
get |
- |
читает представление любого объекта Euphoria из файла |
prompt_number |
- |
приглашает пользователя к вводу числа |
value |
- |
читает представление любого объекта Euphoria из строки |
seek |
- |
переходит на заданную байтовую позицию в открытом файле |
where |
- |
выдает текущую байтовую позицию в открытом файле |
current_dir |
- |
выдает имя текущего каталога |
chdir |
- |
делает заданный каталог текущим |
dir |
- |
выдает полную информацию по всем файлам в каталоге |
walk_dir |
- |
рекурсивно проходит все файлы в каталоге, обрабатывая их |
allow_break |
- |
разрешает прерывание вашей программы по нажатию клавиш control-c/control-Break или
запрещает его |
check_break |
- |
проверяет, были или нет нажаты клавиши control-c или control-Break |
2.8 Поддержка мыши (DOS32 и Linux)
get_mouse |
- |
выдает информацию о мышиных событиях (щелчки, движения) |
mouse_events |
- |
выбирает мышиные события для отслеживания |
mouse_pointer |
- |
отображает или скрывает курсор мыши |
2.9 Операционная система
time |
- |
выдает число секунд, прошедших от фиксированного момента в прошлом |
tick_rate |
- |
устанавливает число прерываний от таймера в секунду (DOS32) |
date |
- |
выдает текущие год, месяц, день, час, минуту, секунду и т.д. |
command_line |
- |
выдает командную строку, которой запущена данная программа |
getenv |
- |
получает значение переменной окружения |
system |
- |
исполняет командную строку операционной системы |
system_exec |
- |
исполняет дочернюю программу и получает код ее завершения |
abort |
- |
прерывает исполнение программы |
sleep |
- |
приостанавливает исполнение программы на заданное время |
platform |
- |
определяет, в среде какой операционной системы исполняется программа |
2.10 Специальные машинно-зависимые подпрограммы
machine_func |
- |
специализированные внутренние операции с выдачей величины |
machine_proc |
- |
специализированные внутренние операции без выдачи величины |
2.11 Отладка
trace |
- |
динамически включает и выключает трассировку |
profile |
- |
динамически включает и выключает профилирование |
2.12 Графика и звук
Следущие подпрограммы позволяют вам отображать информацию на экране.
Экран PC может быть включен в разнообразные графические режимы.
Просмотрите комментарии в начале файла
include\graphics.e, чтобы составить представление
о перечне графических режимов, поддерживаемых Euphoria.
Все доступные графические режимы могут быть разделены на два
основных типа. Текстовые режимы
делят экран на строки, в каждой из которых может быть размещено
определенное число символов.
Пиксельно-графические режимы
делят экран на множество рядов точек, или "пикселов". Каждый пиксел
может иметь различные цвета. В тектовых режимах вы можете отображать
только текст и так называемую псевдографику, выбирая для каждого символа
цвета фона и переднего плана. В пиксельно-графических режимах вы
можете отображать произвольные геометрические фигуры, а одновременно
и текст.
Для DOS32 мы включили подпрограмму, которая может генерировать звуки
на встроенном громкоговорителе вашего PC.
Чтобы извлекать из своего PC практически любые необходимые вам звуки,
получите библиотеку Sound Blaster, разработанную
Джекусом Дешенесом. Она доступна на
Web-странице Euphoria.
Нижеследующие подпрограммы работают во всех
текстовых и пиксельно-графических режимах:
clear_screen |
- |
очищает экран |
position |
- |
устанавливает курсор на заданной строке в заданную колонку |
get_position |
- |
выдает текущие строку и колонку, где находится курсор |
graphics_mode |
- |
включает новый пиксельно-графический или текстовый режим (DOS32) |
video_config |
- |
выдает параметры текущего режима |
scroll |
- |
прокручивает текст вверх или вниз |
wrap |
- |
управляет поведением строки при достижении ею правой границы экрана |
text_color |
- |
устанавливает цвет символов текста |
bk_color |
- |
устанавливает цвет фона |
palette |
- |
изменяет оттенок цвета одного из номеров (DOS32) |
all_palette |
- |
изменяет цвета всех номеров цвета (DOS32) |
get_all_palette |
- |
выдает величины интенсивностей для всех цветов текущей палитры (DOS32) |
read_bitmap |
- |
читает биткарту (.bmp-файл) и выдает палитру и двухмерный
ряд пикселов |
save_bitmap |
- |
создает биткарту (.bmp-файл), заданную палитрой и двухмерным
рядом пикселов |
get_active_page |
- |
выдает номер текущей активной страницы экрана (на которую ведется запись)(DOS32) |
set_active_page |
- |
изменяет номер текущей активной страницы экрана (DOS32) |
get_display_page |
- |
выдает номер текущей отображаемой страницы экрана (DOS32) |
set_display_page |
- |
изменяет номер текущей отображаемой страницы экрана (DOS32) |
sound |
- |
генерирует звук на встроенном динамике PC (DOS32) |
Нижеследующие подпрограммы работают только
в текстовых режимах:
cursor |
- |
задает форму курсора |
text_rows |
- |
устанавливает число строк на текстовом экране |
get_screen_char |
- |
получает один символ с экрана (DOS32, Linux) |
put_screen_char |
- |
выводит один или более символов на экран (DOS32, Linux) |
save_text_image |
- |
сохраняет в ряде прямоугольный участок текстового экрана (DOS32, Linux) |
display_text_image |
- |
выводит изображение текста на текстовый экран (DOS32, Linux) |
Нижеследующие подпрограммы работают только
в пиксельно-графических режимах (DOS32):
pixel |
- |
устанавливает цвет пиксела или ряда пикселов |
get_pixel |
- |
читает цвет пиксела или ряда пикселов |
draw_line |
- |
соединяет последовательности графических точек линией |
polygon |
- |
вычерчивает n-стороннюю фигуру |
ellipse |
- |
вычерчивает эллипс или круг |
save_screen |
- |
записывает содержимое экрана в биткарту (.bmp-файл) |
save_image |
- |
записывает прямоугольный участок экрана в ряд |
display_image |
- |
выводит записанное изображение на экран |
2.13 Интерфейс машинного уровня
Мы сгруппировали здесь ряд подпрограмм, которые пригодятся вам, если вы
решите поработать со своей машиной на уровне машинных кодов.
Этот интерфейс низкого уровня позволяет вам читать и записывать
данные и код непосредственно в память. Вы можете также разработать
свои собственные подпрограммы в кодах машин 386+ и вызывать их
на исполнение.
Некоторые из подпрограмм, перечисленных ниже, не являются безопасными,
в том смысле, что Euphoria не сможет защитить вас при некорректном
их использовании. Вы рискуете "подвесить" свою программу или даже
операционную систему, если сделаете что-то не так, как следовало бы.
Под DOS32, если вы обратитесь к негодным адресам в памяти, это еще
может безопасно отлавливаться расширителем DOS CauseWay, и вы получите
сообщение об ошибке на экране плюс распечатку информации на машинной
тарабарщине в файле cw.err.
Под WIN32 операционная система выдаст вам обычную свою табличку о
прерывании прогона вашей программы со скупым диагностическим сообщением
плюс информацию из регистров процессора. Под Linux в типовом случае
вы получите нарушение сегментации.
-
Примечание:
-
Чтобы помочь программистам в этих рискованных занятиях, мы
прилагаем библиотечный файл safe.e,
как отладочную замену файла machine.e.
Если вы скопируете
include\safe.e в каталог, содержащий
вашу программу, и переименуете safe.e
как machine.e в этом вашем рабочем
каталоге, ваша программа будет исполняться с использованием более
безопасного, но и более медленного, варианта обычных подпрограмм
низкого уровня.
safe.e может отловить многие
ошибки, в том числе, и такие как запись в память по негодным адресам.
Просмотрите комментарии в начале файла safe.e, чтобы получить полную
инструкцию по его использованию.
При работе с пакетами вроде Win32Lib, в которых не применяется функция
Euphoria allocate(), вы ограничены в возможностях safe.e.
Эти подпрограммы интерфейса машинного уровня очень важны для более
продвинутого программирования, так как они позволяют
Euphoria-программистам получить доступ ко всем ресурсам,
заложенным на низком уровне в ваше оборудование и вашу операционную
систему. В некоторых особо ответственных случаях данная возможность
может иметь решающее значение.
Подпрограммы в машинных кодах могут быть написаны вручную или же
получены путем дизассемблирования выходных файлов компиляторов
C или некоторых других языков.
Пит Эберлейн написал "мини-ассемблер" для использования с Euphoria.
Просмотрите Архив файлов.
Не забывайте, что ваш машинный код будет исполняться в 32-разрядном
защищенном режиме. Просмотрите файл
demo\dos32\callmach.ex, чтобы
получить более конкретное представление о деталях этого дела.
peek |
- |
читает один или более байтов из памяти |
peek4s |
- |
читает 4-х байтную величину со знаком из памяти |
peek4u |
- |
читает 4-х байтную величину без знака из памяти |
poke |
- |
записывает один или более байтов в память |
poke4 |
- |
записывает 4-х байтную величину в память |
mem_copy |
- |
копирует блок памяти |
mem_set |
- |
устанавливает все байты блока памяти в заданное значение |
call |
- |
вызывает подпрограмму, написанную в машинных кодах |
dos_interrupt |
- |
вызывает подпрограмму обработки прерывания DOS (DOS32) |
allocate |
- |
выделяет блок памяти |
free |
- |
освобождает блок памяти |
allocate_low |
- |
выделяет блок нижней памяти (адреса менее 1Mb) (DOS32) |
free_low |
- |
освобождает блок памяти, выделенный allocate_low (DOS32) |
allocate_string |
- |
выделяет память под строку с 0-концом |
register_block |
- |
регистрирует в списке безопасных блоков блок памяти, выделенный
внешней подпрограммой |
unregister_block |
- |
вычеркивает из списка безопасных внешний блок (см. выше) |
get_vector |
- |
выдает адрес обработчика прерывания (DOS32) |
set_vector |
- |
устанавливает адрес обработчика прерывания (DOS32) |
lock_memory |
- |
предохраняет участок памяти от перенесения на диск при
работе виртуальной памяти (DOS32) |
int_to_bytes |
- |
преобразует целое в 4 байта |
bytes_to_int |
- |
преобразует 4 байта в целое |
int_to_bits |
- |
преобразует целое в ряд битов |
bits_to_int |
- |
преобразует ряд битов в целое |
atom_to_float64 |
- |
преобразует атом в ряд из 8 байтов в 64-битном
формате IEEE для чисел с плавающей точкой |
atom_to_float32 |
- |
преобразует атом в ряд из 4 байтов в 32-битном
формате IEEE для чисел с плавающей точкой |
float64_to_atom |
- |
преобразует в атом ряд из 8 байтов в 64-битном формате IEEE для
чисел с плавающей точкой |
float32_to_atom |
- |
преобразует в атом ряд из 4 байтов в 32-битном формате IEEE для
чисел с плавающей точкой |
set_rand |
- |
устанавливает датчик случайных чисел так, что он будет
выдавать серии чисел с восстанавливаемым порядком |
use_vesa |
- |
переключает Euphoria в режим выполнения рекомендаций
графического стандарта VESA (DOS32) |
crash_file |
- |
определяет файл для записи диагностической информации,
если Euphoria обнаруживает ошибку в вашей программе. |
crash_message |
- |
определяет сообщение об ошибке, которое будет выводиться,
если Euphoria обнаруживает ошибку в вашей программе |
2.14 Динамические вызовы
Данные подпрограммы позволяют вам вызывать процедуры и функции Euphoria
с использованием вместо обычного имени уникального целого числа, известного
как идентификатор подпрограммы.
routine_id |
- |
присваивает уникальный идентификационный номер подпрограмме Euphoria |
call_proc |
- |
вызывает процедуру Euphoria с использованием ее идентификационного номера |
call_func |
- |
вызывает функцию Euphoria с использованием ее идентификационного номера |
2.15 Вызовы функций C (WIN32 и Linux)
Просмотрите файл
platform.doc
, где подробно описано программирование на Euphoria для
операционных систем WIN32 и Linux.
open_dll |
- |
открывает динамически подключаемую библиотеку Windows (.dll-файл)
или общую библиотеку Linux (.so-файл) |
define_c_proc |
- |
определяет функцию C типа VOID (не выдает величины), необходимую,
когда ваша программа будет игнорировать выдаваемую величину |
define_c_func |
- |
определяет функцию C, которая выдает величину, подлежащую учету и
использованию в вашей программе |
define_c_var |
- |
получает адрес в памяти для переменной C. |
c_proc |
- |
вызывает функцию C, игнорируя любую выдаваемую ею величину |
c_func |
- |
вызывает функцию C и получает выдаваемую ею величину |
call_back |
- |
получает 32-битный машинный адрес подпрограммы Euphoria для
использования в качестве адреса обратного вызова |
message_box |
- |
выводит диалоговое окно для получения от пользователя
ответа Да/Нет/Сброс |
free_console |
- |
удаляет консольное текстовое окно |
instance |
- |
получает для текущей программы ее идентификатор и состояние |
... продолжение
3. Алфавитный список всех подпрограмм, от A до B
|