diff options
Diffstat (limited to 'Examples/lua/import.lua')
-rw-r--r-- | Examples/lua/import.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Examples/lua/import.lua b/Examples/lua/import.lua new file mode 100644 index 0000000..b2a40b0 --- /dev/null +++ b/Examples/lua/import.lua @@ -0,0 +1,42 @@ +-- 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
\ No newline at end of file |