/**
 * D bindings to Tcl/Tk
 *
 * License:
 *     MIT. See LICENSE for full details.
 */
module tcltk.tclplatdecls;

import tcltk.tcl;

version (Windows)
{
	import core.stdc.stddef : wchar_t;
}

version (OSX)
{
	import tcltk.tcl : Tcl_Interp;
}

version (Windows)
{
	// wchar_t is used here in lieu of TCHAR.
	extern(C) const(wchar_t)* Tcl_WinUtfToTChar(const(char)* str, int len, Tcl_DString* dsPtr) nothrow;
	extern(C) const(char)* Tcl_WinTCharToUtf(const(wchar_t)* str, int len, Tcl_DString* dsPtr) nothrow;
}

version (OSX)
{
	extern(C) int Tcl_MacOSXOpenBundleResources(Tcl_Interp* interp, const(char)* bundleName, int hasResourceFile, int maxPathLen, const(char)* libraryPath) nothrow;
	extern(C) int Tcl_MacOSXOpenVersionedBundleResources(Tcl_Interp* interp, const(char)* bundleName, const(char)* bundleVersion, int hasResourceFile, int maxPathLen, const(char)* libraryPath) nothrow;
}

struct TclPlatStubs
{
	int magic;
	void* hooks;

	version (Windows)
	{
		// wchar_t is used here in lieu of TCHAR.
		extern(C) const(wchar_t)* function(const(char)* str, int len, Tcl_DString* dsPtr) nothrow tcl_WinUtfToTChar;
		extern(C) const(char)* function(const(wchar_t)* str, int len, Tcl_DString* dsPtr) nothrow tcl_WinTCharToUtf;
	}

	version (OSX)
	{
		extern(C) int function(Tcl_Interp* interp, const(char)* bundleName, int hasResourceFile, int maxPathLen, const(char)* libraryPath) nothrow tcl_MacOSXOpenBundleResources;
		extern(C) int function(Tcl_Interp* interp, const(char)* bundleName, const(char)* bundleVersion, int hasResourceFile, int maxPathLen, const(char)* libraryPath) nothrow tcl_MacOSXOpenVersionedBundleResources;
	}
}

extern(C) shared const(TclPlatStubs)* tclPlatStubsPtr;