5. Приложение 1. Функции IPX

5.1. Функции для работы с сокетами

IPXOpenSocket - открыть сокет

На входе: BX = 00h.
AL = Тип сокета:
00h - короткоживущий;
FFh - долгоживущий.
DX = Запрашиваемый номер сокета или 0000h, если требуется получить динамический номер сокета.
Примечание. Байты номера сокета находятся в перевернутом виде.
На выходе: AL = Код завершения:
00h - сокет открыт;
FFh - этот сокет уже был открыт раньше;
FEh - переполнилась таблица сокетов.
DX = Присвоенный номер сокета.

IPXCloseSocket - закрыть сокет

На входе: BX = 01h.
DX = Номер закрываемого сокета.
На выходе: Регистры не используются.

5.2. Функции для работы с сетевыми адресами

IPXGetLocalTaget - получить непосредственный адрес

На входе: BX = 02h.
ES:SI = Указатель на буфер длиной 12 байт, содержащий полный сетевой адрес станции, на которую будет послан пакет.
ES:DI = Указатель на буфер длиной 6 байт, в который будет запи-сан непосредственный адрес, т. е. адрес той станции, которой будет передан пакет. Это может быть адрес моста.
На выходе: AL = Код завершения:
00h - непосредственный адрес был успешно вычислен;
FAh - непосредственный адрес вычислить невозможно, так как к указанной станции нет ни одного пути доступа по сети.
CX = Время пересылки пакета до станции назначения (только если AL равен 0) в тиках системного таймера. Тики таймера следуют с периодом примерно 1/18 секунды.

IPXGetInternetworkAddress - получить собственный адрес

На входе: BX = 09h.
ES:DI = Указатель на буфер длиной 10 байт, в который будет записан адрес станции, на которой работает данная программа. Адрес состоит из номера сети Network и адреса станции в сети Node.
На выходе: Регистры не используются.

5.3. Прием и передача пакетов

IPXListenForPacket - принять IPX-пакет

На входе: BX = 04h.
ES:DI = Указатель на заполненный блок ECB. Необходимо заполнить поля:
ESRAddress;
Socket;
FragmentCnt;
указатели на буферы фрагментов Address;
размеры фрагментов Size.
На выходе: Регистры не используются.

IPXSendPacket - передать IPX-пакет

На входе: BX = 03h.
ES:DI = Указатель на заполненный блок ECB. Необходимо заполнить поля:
ESRAddress;
Socket;
ImmAddress;
FragmentCnt;
указатели на буферы фрагментов Address;
размеры фрагментов Size.В заголовке пакета IPX необходимо заполнить поля:
PacketType;
DestNetwork;
DestNode;
DestSocket.
На выходе: Регистры не используются.

5.4. Другие функции IPX и AES

IPXDisconnectFromTaget - отключиться от партнера

На входе: BX = 0Bh.
ES:SI = Указатель на структуру, содержащую сетевой адрес станции:
struct NetworkAddress {
 unsigned char Network[4];
 unsigned char Node[6];
 unsigned char Socket[2];
}
На выходе: Регистры не используются.

IPXSceduleIPXEvent - отложить событие

На входе: BX = 05h.
AX = Время задержки в тиках таймера
ES:SI = Указатель на блок ECB.
На выходе: Регистры не используются.

IPXGetIntervalMarker - получить интервальный маркер

На входе: BX = 08h.
На выходе: AX = Интервальный маркер.

IPXCancelEvent - отменить событие

На входе: BX = 06h.
ES:SI = Указатель на блок ECB.
На выходе: AL = Код завершения:
00h - функция выполнена без ошибок;
F9h - обработка ECB не может быть отменена;
FFh - указанный ECB не используется.

IPXRelinquishControl - выделить время драйверу IPX

На входе: BX = 0Ah.
На выходе: Регистры не используются.