Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/output/data/lua/LuaStateInit.lua @ 9274

Last change on this file since 9274 was 8840, checked in by landauf, 13 years ago

Exported orxout() and the output levels to lua, replaces logMessage() and cout().
Note that OutputDefinitions.h is now included in the tolua section of core, even though the file is in util. But I guess that's ok.

  • Property svn:eol-style set to native
File size: 4.5 KB
RevLine 
[5654]1-- Note: luaState is a pointer to the LuaState instance that created this lua state
2
3-- Redirect print to the C++ print function
[6746]4original_print = print
[5654]5print = function(s)
6  luaState:luaPrint(s)
7end
8
[8840]9-- Prints output to the console and the logfile
10--
11-- Accepts the following arguments:
12--   orxout("message")
13--   orxout(orxonox.level.levelname, "message")
14--   orxout(orxonox.level.levelname, "context", "message)
15orxout = function(arg1, arg2, arg3)
16  if arg1 and arg2 and arg3 then
17    luaState:luaOutput(arg1, arg2, arg3)
18  elseif arg1 and arg2 then
19    luaState:luaOutput(arg1, arg2)
20  else
21    luaState:luaOutput(arg1)
22  end
[5654]23end
24
25-- Redirect dofile in order to load with the resource manager
[6746]26original_dofile = dofile
27dofile = function(filename)
28  if not luaState:doFile(filename) then
29    error("Error propagation. Do not display")
30  end
31  -- Required because if the file returns a table, it cannot be passed through the C++ function
[6417]32  return LuaStateReturnValue -- C-injected global variable
[5654]33end
[6746]34doFile = dofile
[5654]35
36-- Create includeFile function that preparses the file according
37-- to a function provided to the LuaState constructor (in C++)
[6417]38include = function(filename)
[6746]39  if not luaState:includeFile(filename) then
40    error("Error propagation. Do not display")
41  end
42  -- Required because if the file returns a table, it cannot be passed through the C++ function
[6417]43  return LuaStateReturnValue -- C-injected global variable
[5654]44end
[5661]45
46-- Replace require function with almost similar behaviour
[6417]47-- The loaded modules are then stored with their names (where name has no .lua extension)
48-- Furthermore the ".lua" extension is appended to the moduleName parameter when looking for the file
[6746]49original_require = require
50_REQUIREDNAME = ""
51LuaStateReturnValue = true
[6417]52require = function(moduleName)
53  if not luaState:fileExists(moduleName .. ".lua") then
[8840]54    orxout(orxonox.level.internal_warning, "Warning: Lua function require() could not find file '" .. moduleName .. ".lua' ")
[5661]55    return nil
56  end
[6746]57
[5661]58  if not _LOADED then
59    _LOADED = {}
60  end
[6746]61  if not _LOADED_RETURN_VALUES then
62      _LOADED_RETURN_VALUES = {}
63  end
64
[5661]65  if not _LOADED[moduleName] then
[6746]66    -- save old value for the required name
67    local _REQUIREDNAME_OLD = _REQUIREDNAME
[5661]68    _REQUIREDNAME = moduleName
[6746]69
70    if not luaState:doFile(moduleName .. ".lua") then
71      error("Error propagation. Do not display")
72    end
73    -- LuaStateReturnValue is required because if the file returns a table,
74    -- it cannot be passed through the C++ function
75    _LOADED_RETURN_VALUES[moduleName] = LuaStateReturnValue
76    _LOADED[moduleName] = true
77
[5661]78    -- restore old value
79    _REQUIREDNAME = _REQUIREDNAME_OLD
80  end
[6746]81  local asdf = _LOADED_RETURN_VALUES[moduleName]
82  return asdf
[5661]83end
[6417]84
[6746]85
86-- Load useful tool functions (like handleDefaultArgument)
87require("Tools")
88
89
90-- Include command line debugger for lua 5.1
91-- Note: It doesn't work if the IOConsole was started. Then we replace pause() with a warning
92if _VERSION ~= "Lua 5.0"  and not luaState:usingIOConsole() then
93  require("Debugger")
94else
95  -- Fallback pause function
96  pause = function()
[8840]97    orxout(orxonox.level.internal_warning, [["Warning: debug() called in Lua, but Debugger is not active.
[6746]98Do you have the IOConsole disabled and are you using Lua version 5.1?"]])
99  end
100end
101
102-- General error handler that gets called whenever an error happens at runtime
103errorHandler = function(err)
104  if type(err) == "string" then
105    -- Simply return if the error has already been handled
106    if string.find(err, "Error propagation. Do not display") ~= nil then
107      return err
108    end
109    -- Display the error message
[8840]110    orxout(orxonox.level.internal_error, "Lua runtime error: "..err)
[6746]111  end
112
113  -- Start debugger if possible
114  if _LOADED and _LOADED["Debugger"] ~= nil then
115    pause()
116  else
117    -- Fallback: print stack trace
[8840]118    orxout(orxonox.level.internal_error, debug.traceback(""))
[6746]119  end
120  return err -- Hello Lua debugger user! Please type 'set 2' to get to the
121             -- actual position in the stack where the error occurred
122end
123
124
[6417]125-- Convenience function for console commands
126orxonox.execute = function(command)
127  orxonox.CommandExecutor:execute(command)
128end
[6536]129
130-- Convenience function for config values
131orxonox.getConfig = function(section, entry)
132  return orxonox.SettingsConfigFile:getInstance():getConfig(section, entry)
133end
134orxonox.config = function(section, entry, value)
135  return orxonox.SettingsConfigFile:getInstance():config(section, entry, value)
136end
137orxonox.tconfig = function(section, entry, value)
138  return orxonox.SettingsConfigFile:getInstance():tconfig(section, entry, value)
139end
Note: See TracBrowser for help on using the repository browser.