-- import
-- the lua 5.0 loading mechanism is rather poor & relies upon the loadlib() fn
-- the lua 5.1 loading mechanism is simplicity itself
-- for now we need a bridge which will use the correct verion

function import_5_0(module)
	-- imports the file into the program
	-- for a module 'example'
	-- this must load 'example.dll' or 'example.so'
	-- and look for the fn 'Example_Init()' (note the capitalisation)
	if rawget(_G,module)~=nil then return end -- module appears to be loaded
		
	-- capitialising the first letter
	local c=string.upper(string.sub(module,1,1))
	local fnname=c..string.sub(module,2).."_Init"
	
	local suffix,lib
	-- note: as there seems to be no way in lua to determine the platform
	-- we will try loading all possible names
	-- providing one works, we can load
	for _,suffix in pairs{".dll",".so"} do
		lib=loadlib(module..suffix,fnname)
		if lib then -- found
			break
		end
	end
	assert(lib,"error loading module:"..module)
	
	lib() -- execute the function: initalising the lib
	local m=rawget(_G,module)	-- gets the module object
	assert(m~=nil,"no module table found")
end

function import_5_1(module)
	require(module)
end

if string.sub(_VERSION,1,7)=='Lua 5.0' then
	import=import_5_0
else
	import=import_5_1
end