| -- 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 version |
| |
| 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 |
| |
| -- capitalising 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: initialising 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 |