/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */
#ifdef XP_MAC
#ifdef MOZ_NGLAYOUT

#error "nsMacRepository.h became obsolete when the shared lib conversion was completed."

// The Mac NGLayout is not based on shared libraries yet.
// All the DLLs are built as static libraries and we present them as
// shared libraries by redefining PR_LoadLibrary(), PR_UnloadLibrary()
// and PR_FindSymbol() below.
//
// If you add or remove shared libraries on other platforms, you must
//	- Add the library name to the defines below.
//	- Rename the "NSGetFactory" and "NSCanUnload" procs for the Mac:
//    just append the library name to the function name.
//	- Add the library and its procs to the static list below.


typedef struct MacLibrary
{
	char *			name;
	nsFactoryProc	factoryProc;
	nsCanUnloadProc	unloadProc;
} MacLibrary;

// library names
#define WIDGET_DLL		"WIDGET_DLL"
#define GFXWIN_DLL		"GFXWIN_DLL"
#define VIEW_DLL		"VIEW_DLL"
#define WEB_DLL			"WEB_DLL"
#define PLUGIN_DLL		"PLUGIN_DLL"
#define PREF_DLL		"PREF_DLL"
#define PARSER_DLL		"PARSER_DLL"
#define DOM_DLL    		"DOM_DLL"
#define LAYOUT_DLL		"LAYOUT_DLL"
#define NETLIB_DLL		"NETLIB_DLL"
#define EDITOR_DLL		"EDITOR_DLL"

#ifdef IMPL_MAC_REPOSITORY

extern "C" nsresult		NSGetFactory_WIDGET_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_GFXWIN_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_VIEW_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_WEB_DLL(const nsCID &, nsIFactory **);
//extern "C" nsresult		NSGetFactory_PLUGIN_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_PREF_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_PARSER_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_DOM_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_LAYOUT_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_NETLIB_DLL(const nsCID &, nsIFactory **);
extern "C" nsresult		NSGetFactory_EDITOR_DLL(const nsCID &, nsIFactory **);

extern "C" PRBool		NSCanUnload_PREF_DLL(void);

// library list
static MacLibrary	libraries[] = {
#if 0
	WIDGET_DLL,		NSGetFactory_WIDGET_DLL,	NULL,
	GFXWIN_DLL,		NSGetFactory_GFXWIN_DLL,	NULL,
	VIEW_DLL,		NSGetFactory_VIEW_DLL,		NULL,
	WEB_DLL,		NSGetFactory_WEB_DLL,		NULL,
	//PLUGIN_DLL,		NSGetFactory_PLUGIN_DLL,	NULL,
	PREF_DLL,		NSGetFactory_PREF_DLL,		NSCanUnload_PREF_DLL,
	PARSER_DLL,		NSGetFactory_PARSER_DLL,	NULL,
	DOM_DLL,		NSGetFactory_DOM_DLL,		NULL,
	LAYOUT_DLL,		NSGetFactory_LAYOUT_DLL,	NULL,
	NETLIB_DLL,		NSGetFactory_NETLIB_DLL,	NULL,
	//EDITOR_DLL,		NSGetFactory_EDITOR_DLL,	NULL,		// FIX ME
#endif
	NULL
};

static void* FindMacSymbol(char* libName, const char *symbolName)
{
	MacLibrary * macLib;

	for (macLib = libraries; ; macLib ++)
	{
		if (macLib->name == NULL)
			return NULL;

		if (PL_strcmp(macLib->name, libName) == 0)
			break;
	}

	if (PL_strcmp(symbolName, "NSGetFactory") == 0) {
		return macLib->factoryProc;
	}
	else if (PL_strcmp(symbolName, "NSCanUnload") == 0) {
		return macLib->unloadProc;
	}
	return NULL;
}

#define PR_LoadLibrary(libName)			(PRLibrary *)libName
#define PR_UnloadLibrary(lib)			lib = NULL
#define PR_FindSymbol(lib, symbolName)	FindMacSymbol((char*)lib, symbolName)

#endif // IMPL_MAC_REPOSITORY

#endif // MOZ_NGLAYOUT
#endif // XP_MAC
