// ===================================================
// Листинг 1. Программа для обнаружения драйвера
// протокола IPX/SPX и определения его версии
//
// Файл ipxver.c
//
// (C) A. 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

		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);
}