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

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

Читать бесплатно W Cat - Язык программирования Euphoria. Справочное руководство. Жанр: Программирование издательство неизвестно, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

Когда вы задаёте характеристики Си-функции, аргумент x1 должен представлять собой адрес системной библиотеки, содержащей эту Си-функцию. Адрес библиотеки вы должны получить, заранее вызвав функцию open_dll(). Аргумент x2 задаёт имя Си-функции, которая вас интересует. Если define_c_proc() не находит заданную Си-функцию, в качестве номера она выдаёт -1. На платформе Windows вы можете перед именем функции добавить символ '+'. Он показывает Euphoria, что для вызова Си-функции предусмотрены правила соглашения cdecl. По умолчанию Euphoria считает, что подпрограммы Си вызываются по правилам соглашения stdcall.

Когда вы задаёте характеристики подпрограммы машинного кода, аргумент x1 должен быть пустым рядом, "" или {}, а x2 - содержать адрес подпрограммы машинного кода. Байты машинного кода должны быть заранее размещены в участке памяти, выделенном функцией allocate(), которая и выдаёт адрес, используемый далее для размещения подпрограммы машинного кода и задания её характеристик. На платформе Windows подпрограммы машинного кода обычно следуют правилам соглашения stdcall, но если вам вместо этого необходимо использование правил cdecl, вы можете записать x2 как ряд {'+', адрес} вместо подачи значения адреса как атома.

Аргумент s1 представляет собой список типов аргументов функции (подпрограммы). Полный список типов Си, содержащий их определения, находится в библиотеке dll.e и показан выше. Эти же типы могут быть использованы при назначении типов аргументов для подпрограммы машинного кода.

Си-функция, характеристики которой вы задаёте с использованием define_c_proc(), может быть создана с помощью транслятора с Euphoria на Си. В этом случае вы сможете подавать в неё данные типов Euphoria. Полный список типов Euphoria с их определениями находится в библиотеке dll.e и показан выше.

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

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

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

В настоящее время не существует метода подачи в Си-функцию структуры Си по величине. Вы можете подать как аргумент лишь указатель на структуру

Заданная вами Си-функция может выдавать величину, но эта величина будет игнорироваться. Если вы заинтересованы в получении и использовании величины, выдаваемой Си-функцией, вам следует обратиться к паре подпрограмм define_c_func() и c_func().

Пример:

atom user32

integer ShowWindow

-- Открываем системную библиотеку user32.dll - в ней находится Си-функция ShowWindow.

user32 = open_dll("user32.dll")

-- Си-функция требует 2-х аргументов, оба типа C int.

ShowWindow = define_c_proc(user32, "ShowWindow", {C_INT, C_INT})

-- Если бы ShowWindow работала по правилам cdecl,

-- мы записали бы здесь "+ShowWindow"

if ShowWindow = -1 then

puts(1, "ShowWindow не найдена!n")

end if

См. также:

c_proc, define_c_func, c_func, open_dll, platform_r.htm

define_c_var

Платформа:

WIN32, Linux, FreeBSD

Синтаксис:

include dll.e

a1 = define_c_var(a2, s)

Описание:

Выдаёт адрес переменной Си, загруженной в память. Аргумент a2 является адресом общей библиотеки .so Linux, FreeBSD или .dll Windows, выданным функцией open_dll(). Ряд s задает имя глобальной переменной Си, определенной внутри системной библиотеки. В переменной a1 будет содержаться значение адреса переменной s в памяти.

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

Как только вы получили адрес переменной Си, и если вы знаете её тип, вы можете далее использовать подпрограммы peek() и poke(), чтобы считывать или записывать в памяти величину этой переменной.

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

euphoria/demo/linux/mylib.exu

См. также:

c_proc, define_c_func, c_func, open_dll, platform_r.htm

dir

Синтаксис:

include file.e

x = dir(st)

Описание:

Выдаёт информацию о каталоге или о файле с именем st. Если такой каталог или файл не существует, выдаёт -1. Под Windows и DOS st может содержать символы догадок * и ?, что позволяет получать данные о нескольких файлах с похожими именами.

Выдаваемая информация похожа на ту, которую вы получаете по команде DIR под DOS. Ряд, формируемый функцией, содержит вложенные ряды (записи), каждый из которых описывает один файл или подкаталог.

Если в st задано имя каталога (директории, папки, фолдера), вы можете получить записи для "." и "..", точно так же, как и по команде DIR под DOS. Если же в st задано имя файла, тогда x будет иметь только одну запись, т.е. length(x) будет равна 1. Если в st содержатся символы догадок (шаблоны), вы можете получить многочисленные записи.

Каждая запись содержит имя, атрибуты файла и его размер, а также год, месяц, день, час, минуту и секунду последнего изменения. Вы можете обращаться к элементам записи с помощью следующих констант, определенных в библиотеке file.e:

global constant D_NAME = 1, -- имя

D_ATTRIBUTES = 2, -- атрибуты

D_SIZE = 3, -- размер

D_YEAR = 4, -- год

D_MONTH = 5, -- месяц

D_DAY = 6, -- день

D_HOUR = 7, -- час

D_MINUTE = 8, -- минута

D_SECOND = 9 -- секунда

Элемент атрибутов является строковым рядом, содержащим символы, выбранные из следующего перечня:

'd' -- каталог

'r' -- файл только для чтения

'h' -- скрытый файл

's' -- системный файл

'v' -- метка тома

'a' -- файл, подлежащий архивированию

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

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

Каталог высшего уровня, корневой, т.е. c:, не содержит записей "." или "..".

Данная функция часто используется просто для проверки, существует ли заданный файл или каталог.

На платформе WIN32 в st могут содержаться длинные имена файлов или каталогов в любом месте полного пути.

На платформах Linux/FreeBSD в настоящее время доступен только атрибут 'd'.

DOS32: Имя файла, выдаваемое в элементе D_NAME, будет стандартным DOS-именем формата 8.3 (посетите Web-страницу Архива файлов, если вас интересует лучшее решение).

WIN32: Имя файла, выдаваемое в элементе D_NAME, будет длинным именем.

Пример:

d = dir(current_dir())

-- ряд d мог бы быть, например, равным:

{

{".", "d", 0 1994, 1, 18, 9, 30, 02},

{"..", "d", 0 1994, 1, 18, 9, 20, 14},

{"fred", "ra", 2350, 1994, 1, 22, 17, 22, 40},

{"sub", "d", 0, 1993, 9, 20, 8, 50, 12}

}

-- тогда d[3][D_NAME] было бы "fred"

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

binsearch.ex

См. также:

wildcard_file, current_dir, open

display_image

Платформа:

DOS32

Синтаксис:

include image.e

display_image(s1, s2)

Описание:

Выводит в точке s1 на пиксельном экране 2-мерный ряд пикселов, описание которых содержится в s2. Аргумент s1 - двухэлементный ряд вида {x, y}. Аргумент s2 содержит ряды, каждый из которых представляет горизонтальную строчку значений цветов пикселов, которые необходимо включить на экране. Первый пиксел первого ряда расположен в точке s1. Это верхний левый пиксел. Все остальные пикселы расположены правее или ниже этого первого.

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

Ряд s2 может быть результатом предшествовавшего вызова save_image() или вызова read_bitmap(), или тем, что секундой ранее вы рисовали в своем воображении.

Ряды (строчки) изображения могут быть разной длины.

Пример:

display_image({20,30}, {{7,5,9,4,8},

{2,4,1,2},

{1,0,1,0,4,6,1},

{5,5,5,5,5,5}})

-- Процедура выведет на экран небольшое изображение, состоящее

-- из 4-х горизонтальных рядов пикселов. Первый пиксел (цвет номер 7)

-- будет включен в точке {20,30}. Верхний ряд состоит из 5 пикселов.

-- Последний (нижний) ряд состоит из 6 пикселов цвета номер 5

-- и заканчивается в точке {25,33}.

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

demodos32bitmap.ex

См. также:

save_image, read_bitmap, display_text_image

display_text_image

Синтаксис:

include image.e

display_text_image(s1, s2)

Описание:

Выводит на экран 2-мерный ряд символов c заданными атрибутами, начиная с заданной экранной позиции. Аргумент s1 является двухэлементным рядом, содержащим координаты начальной экранной позиции - строка s1[1], колонка s1[2]. Аргумент s2 состоит из вложенных рядов, каждый из которых является строкой выводимых символов и их атрибутов. Верхний левый символ выводится в позиции s1. Другие символы появляются правее и ниже этой позиции. Атрибут следует за символом и своим кодом указывает цвет символа и цвет фона на котором символ должен быть отображён. Под DOS32 атрибут представляет собой сумму номера цвета и умноженного на 16 номера цвета фона.

Перейти на страницу:

W Cat читать все книги автора по порядку

W Cat - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

Отзывы читателей о книге Язык программирования Euphoria. Справочное руководство, автор: W Cat. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


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