/*
 * Copyright (c) 1999, 2000
 *	Politecnico di Torino.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that: (1) source code distributions
 * retain the above copyright notice and this paragraph in its entirety, (2)
 * distributions including binary code include the above copyright notice and
 * this paragraph in its entirety in the documentation or other materials
 * provided with the distribution, and (3) all advertising materials mentioning
 * features or use of this software display the following acknowledgement:
 * ``This product includes software developed by the Politecnico
 * di Torino, and its contributors.'' Neither the name of
 * the University nor the names of its contributors may be used to endorse
 * or promote products derived from this software without specific prior
 * written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

#if defined(WIN32)
#include <signal.h>
#include <stdio.h>
#include <windows.h>

void *GetAdapterFromList(void *device, int index)
{
	DWORD  dwVersion;
	DWORD  dwWindowsMajorVersion;
	char  *Adapter95;
	WCHAR *Adapter;
	int    i;

	dwVersion             = GetVersion();
	dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
	if (dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4) {    // Windows '95
		Adapter95 = device;
		for (i = 0; i < index - 1; i++) {
			while (*Adapter95++ != 0)
				;
			if (*Adapter95 == 0)
				return NULL;
		}
		return Adapter95;
	} else {
		Adapter = (WCHAR *)device;
		for (i = 0; i < index - 1; i++) {
			while (*Adapter++ != 0)
				;
			if (*Adapter == 0)
				return NULL;
		}
		return Adapter;
	}
}

void PrintDeviceList(const char *device)
{
	DWORD        dwVersion;
	DWORD        dwWindowsMajorVersion;
	const WCHAR *t;
	const char  *t95;
	int          i       = 0;
	int          DescPos = 0;
	char        *Desc;
	int          n = 1;

	dwVersion             = GetVersion();
	dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
	if (dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4) {    // Windows '95
		t95 = (char *)device;

		while (*(t95 + DescPos) != 0 || *(t95 + DescPos - 1) != 0)
			DescPos++;

		Desc = (char *)t95 + DescPos + 1;
		printf("\n"
		       "Interface\tDevice\t\t\t\t\tDescription\n"
		       "-------------------------------------------\n");
		printf("%d ", n++);

		while (!(t95[i] == 0 && t95[i - 1] == 0)) {
			if (t95[i] == 0) {
				putchar(' ');
				putchar('(');
				while (*Desc != 0) {
					putchar(*Desc);
					Desc++;
				}
				Desc++;
				putchar(')');
				putchar('\n');
			} else
				putchar(t95[i]);

			if ((t95[i] == 0) && (t95[i + 1] != 0)) {
				printf("%d ", n++);
			}

			i++;
		}
		putchar('\n');
	} else {    // Windows NT
		t = (WCHAR *)device;
		while (*(t + DescPos) != 0 || *(t + DescPos - 1) != 0)
			DescPos++;

		DescPos <<= 1;
		Desc = (char *)t + DescPos + 2;
		printf("\n"
		       "Interface\tDevice\t\t\t\t\tDescription\n"
		       "----------------------------------------------------------------------------\n");
		printf("%d ", n++);
		while (!(t[i] == 0 && t[i - 1] == 0)) {
			if (t[i] == 0) {
				putchar(' ');
				putchar('(');
				while (*Desc != 0) {
					putchar(*Desc);
					Desc++;
				}
				Desc++;
				putchar(')');
				putchar('\n');
			} else
				putchar(t[i]);

			if (t[i] == 0 && t[i + 1] != 0)
				printf("%d ", n++);

			i++;
		}
		putchar('\n');
	}
}
#endif /* WIN32 */
