#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#undef  __CRT__NO_INLINE
#define __CRT__NO_INLINE
#include <wspiapi.h>

FARPROC WINAPI
WspiapiLoad (WORD wFunction)
{
  static WINBOOL isinit = FALSE;
  static WSPIAPI_FUNCTION rgtGlobal[] = WSPIAPI_FUNCTION_ARRAY;
  static const int iNumGlobal = (sizeof(rgtGlobal) / sizeof(WSPIAPI_FUNCTION));
  HMODULE hlib = NULL;
  WSPIAPI_FUNCTION rgtLocal[] = WSPIAPI_FUNCTION_ARRAY;
  FARPROC fScratch = NULL;
  int i = 0;

  if (isinit)
    return rgtGlobal[wFunction].pfAddress;

  for (;;)
    {
	CHAR systemdir[MAX_PATH + 1], path[MAX_PATH + 8];

	if (GetSystemDirectoryA (systemdir, MAX_PATH) == 0)
	  break;
	strcpy (path, systemdir);
	strcat (path, "\\ws2_32");
	hlib = LoadLibraryA (path);
	if(hlib != NULL)
	  {
	    fScratch = GetProcAddress (hlib, "getaddrinfo");
	    if (!fScratch)
	      {
		FreeLibrary (hlib);
		hlib = NULL;
	      }
	  }
	if (hlib != NULL)
	  break;
	strcpy (path, systemdir);
	strcat (path, "\\wship6");
	hlib = LoadLibraryA (path);
	if (hlib != NULL)
	  {
	    if ((fScratch = GetProcAddress (hlib, "getaddrinfo")) == NULL)
	      {
		FreeLibrary (hlib);
		hlib = NULL;
	      }
	  }
	break;
    }
  if (hlib != NULL)
    {
	for (i = 0; i < iNumGlobal; i++)
	  {
	    if ((rgtLocal[i].pfAddress = GetProcAddress (hlib, rgtLocal[i].pszName)) == NULL)
	      {
		FreeLibrary (hlib);
		hlib = NULL;
		break;
	      }
	  }
	if (hlib != NULL)
	  {
	    for (i = 0; i < iNumGlobal; i++)
	      rgtGlobal[i].pfAddress = rgtLocal[i].pfAddress;
	  }
    }
  isinit = TRUE;
  return rgtGlobal[wFunction].pfAddress;
}
