Функции работы со связными портами

С помощью связных портов различные задачи и процессы, одновременно работающие в Амиге, общаются между собой В ARexx-e порты используются чрезвычайно интенсивно как для посылки сообщений операционной системе, так и для общения с другими ARexx-программами. ARexx-контроль над связными портами значительно беднее, нежели чем в языке С. Тем не менее, имеющиеся функции могут оказаться весьма и весьма полезными.

Необходимо иметь в виду, что в описании функций все ссылки на т.н. "пакеты" (которые по сути являются С-шными структурами RexxMsg) представляют собой 32-разрядные адреса, записываемые с помощью hex-строк (например '7acf 54е2'х).


CLOSEPORT()
res = CLOSEPORT(<имя>)

Закрыть порт, идентифицированный по его "имени". Можно закрывать только порты, открытые в этой же ARexx-программе с помощью функции OPENPORT(). Возвращается булевское значение TRUE в случае успешного закрытия порта.


GETARG()
res = GETARG(<пакет>[,номер])

Функция выуживает команду, имя функции или строку аргументов из полученного пакета. "Пакет" должен быть адресом, возвращенным функцией GETPKT(). Если определен "номер" аргумента, то возвращается только аргумент в этой позиции ("номер" аргумента не должен превышать общее число аргументов "пакета").


GETPKT()
res = GETPKT(<имя>)

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


OPENPORT()
res = OPENPORT(<имя>)

Функция создает оющедоступный (public) связной порт и присваивает ему "имя" (регистр букв "имени" должен учитываться при последующих обращениях к порту!). Возвращается адрес созданного порта, либо ноль '0000 0000'х в случае какой-либо неудачи (например, если мало памяти).


REPLY()
res = REPLY(<пакет>,<код>)

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


TYPEPKT()
res = TYPEPKT(<пакет>[,<опция>])

Функция информирует о типе полученного "пакета". В случае отсутствия "опции" возвращается упакованное четырехбайтовое значение, распаковав которое можно получить требуемую информацию почти так же, как и явно использовав некоторую "опцию". Сначала рассмотрим вызов TYPEPKT() без "опции":

В случае спецификации опции 'A' (Arguments) функция возвратит число аргументов пакета. Опция 'С' (Command) возвратит TRUE, если пакет был вызван в качестве команды, либо - FALSE в противном случае. Опция 'F' (Function) возвратит TRUE, если пакет был вызван в качестве функции.

Следует учесть, что ARexx-программы для интерпретатора текущей версии (1.15) не следует рассматривать в качестве надежного "хозяина" для других ARexx-процессов; в силу этого вызовы портов других ARexx-процессов должны быть вызовами команд, а не функций (по умолчанию строка аргументов для этого случая должна быть единственной).


WAITPKT()
res = WAITPKT(<имя>])

Функция ожидает прихода пакета в указанный "именем" связной порт (порт должен быть открыт на момент исполнения WAITPKT()). После получения пакета следует использовать функции GETPKT() и REPLY().


Сайт создан в системе uCoz