Локальные сети персональных компьютеров Использование протоколов IPX, SPX, NETBIOS


Точка входа API драйвера IPX/SPX - часть 2


Frolov, 1993 // ===================================================

#include <stdio.h> #include <stdlib.h> #include "ipx.h"

void main(void) {

// Точка входа в IPX/SPX API, переменная находится // в файле ipxdrv.asm и инициализируется функцией ipx_init().

extern far char *ipxspx_drv_entry;

// Структура для вызова API IPX

struct IPXSPX_REGS iregs;

unsigned error; unsigned spx_ver; unsigned spx_max_connections, spx_avail_connections;

printf("\n*Детектор IPX/SPX*, (C) Фролов А., 1993\n\n");

// Проверяем наличие драйвера IPX и определяем // адрес точки входа его API

if(ipx_init() == 0xff) printf("IPX загружен! "); else { printf("IPX не загружен!\n"); exit(-1); } printf("Точка входа в IPX API - %Fp\n",ipxspx_drv_entry);

// Проверяем доступность протокола SPX

error = NO_ERRORS;

// Вызываем функцию проверки доступности SPX // Здесь мы вызываем API драйвера IPX/SPX

iregs.bx = SPX_CMD_INSTALL_CHECK; iregs.ax = 0; ipxspx_entry( (void far *)&iregs );

if(iregs.ax == 0x00) error = ERR_NO_SPX; if(iregs.ax != 0xff) error = UNKNOWN_ERROR;

if(error != NO_ERRORS) { printf("SPX не загружен!\n"); exit(-1); }

// Запоминаем параметры IPX/SPX

spx_ver = iregs.bx; spx_max_connections = iregs.cx; spx_avail_connections = iregs.dx;

printf("SPX загружен! "); printf("Версия SPX: %d.%d\n", (spx_ver>>8) & 0xff, spx_ver & 0xff); printf("Всего соединений: %d, ", spx_max_connections); printf("из них доступно: %d\n", spx_avail_connections);

exit(0); }

Далее расположен исходный текст модуля инициализации IPX (листинг 2).

В этом модуле находится функция ipxspx_entry(), необходимая для вызова драйвера IPX/SPX. Ее имя начинается с символа "_", что необходимо для выполнения соглашения об именах в языке Си.

Здесь же имеется функция ipx_init(), которая проверяет наличие драйвера в системе, получает адрес API драйвера и сохраняет его в области памяти _ipxspx_drv_entry.




- Начало -  - Назад -  - Вперед -