mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Additional changes to a4844ca
This commit is contained in:
parent
a4844ca924
commit
1b235dbae8
@ -103,14 +103,12 @@ void CMeasureScript::ReadOptions(CConfigParser& parser, const WCHAR* section)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!m_Initialized ||
|
if (!m_Initialized ||
|
||||||
wcscmp(scriptFile.c_str(), m_ScriptFile.c_str()) != 0)
|
wcscmp(scriptFile.c_str(), m_LuaScript.GetFile().c_str()) != 0)
|
||||||
{
|
{
|
||||||
UninitializeLuaScript();
|
UninitializeLuaScript();
|
||||||
|
|
||||||
lua_State* L = LuaManager::GetState();
|
lua_State* L = LuaManager::GetState();
|
||||||
m_ScriptFile = scriptFile;
|
if (m_LuaScript.Initialize(scriptFile))
|
||||||
|
|
||||||
if (m_LuaScript.Initialize(m_ScriptFile.c_str()))
|
|
||||||
{
|
{
|
||||||
bool hasInitializeFunction = m_LuaScript.IsFunction(g_InitializeFunctionName);
|
bool hasInitializeFunction = m_LuaScript.IsFunction(g_InitializeFunctionName);
|
||||||
m_HasUpdateFunction = m_LuaScript.IsFunction(g_UpdateFunctionName);
|
m_HasUpdateFunction = m_LuaScript.IsFunction(g_UpdateFunctionName);
|
||||||
|
@ -47,8 +47,6 @@ private:
|
|||||||
int m_ValueType;
|
int m_ValueType;
|
||||||
|
|
||||||
std::wstring m_StringValue;
|
std::wstring m_StringValue;
|
||||||
|
|
||||||
std::wstring m_ScriptFile;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -56,24 +56,21 @@ void LuaManager::Finalize()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LuaManager::ReportErrors(lua_State* L)
|
void LuaManager::ReportErrors(lua_State* L, const std::wstring& file)
|
||||||
{
|
{
|
||||||
const char* error = lua_tostring(L, -1);
|
const char* error = lua_tostring(L, -1);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
const char* pos = error + 4; // Skip the drive
|
// Skip "[string ...]".
|
||||||
|
const char* pos = strchr(error, ':');
|
||||||
// Get rid of everything up to the filename
|
if (pos)
|
||||||
while (*pos != ':')
|
|
||||||
{
|
{
|
||||||
if (*pos == '\\')
|
error = pos;
|
||||||
{
|
|
||||||
error = pos + 1;
|
|
||||||
}
|
|
||||||
++pos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LogWithArgs(LOG_ERROR, L"Script: %S", error);
|
std::wstring str(file, file.find_last_of(L'\\') + 1);
|
||||||
|
str += ConvertToWide(error);
|
||||||
|
LogWithArgs(LOG_ERROR, L"Script: %s", str.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LuaManager::PushWide(lua_State* L, const WCHAR* str)
|
void LuaManager::PushWide(lua_State* L, const WCHAR* str)
|
||||||
|
@ -34,7 +34,7 @@ public:
|
|||||||
|
|
||||||
static lua_State* GetState() { return c_State; }
|
static lua_State* GetState() { return c_State; }
|
||||||
|
|
||||||
static void ReportErrors(lua_State* L);
|
static void ReportErrors(lua_State* L, const std::wstring& file);
|
||||||
|
|
||||||
static void PushWide(lua_State* L, const WCHAR* str);
|
static void PushWide(lua_State* L, const WCHAR* str);
|
||||||
static std::wstring ToWide(lua_State* L, int narg);
|
static std::wstring ToWide(lua_State* L, int narg);
|
||||||
|
@ -39,14 +39,14 @@ LuaScript::~LuaScript()
|
|||||||
Uninitialize();
|
Uninitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LuaScript::Initialize(const WCHAR* scriptFile)
|
bool LuaScript::Initialize(const std::wstring& scriptFile)
|
||||||
{
|
{
|
||||||
assert(!IsInitialized());
|
assert(!IsInitialized());
|
||||||
|
|
||||||
lua_State* L = LuaManager::GetState();
|
lua_State* L = LuaManager::GetState();
|
||||||
|
|
||||||
// Load file into a buffer as luaL_loadfile does not support Unicode paths.
|
// Load file into a buffer as luaL_loadfile does not support Unicode paths.
|
||||||
FILE* file = _wfopen(scriptFile, L"rb");
|
FILE* file = _wfopen(scriptFile.c_str(), L"rb");
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -59,8 +59,7 @@ bool LuaScript::Initialize(const WCHAR* scriptFile)
|
|||||||
fseek(file, 0, SEEK_SET);
|
fseek(file, 0, SEEK_SET);
|
||||||
fread(fileData, fileSize, 1, file);
|
fread(fileData, fileSize, 1, file);
|
||||||
|
|
||||||
std::string scriptName = ConvertToUTF8(wcsrchr(scriptFile, L'\\') + 1);
|
int load = luaL_loadbuffer(L, fileData, fileSize, "");
|
||||||
int load = luaL_loadbuffer(L, fileData, fileSize, scriptName.c_str());
|
|
||||||
delete [] fileData;
|
delete [] fileData;
|
||||||
|
|
||||||
if (load == 0)
|
if (load == 0)
|
||||||
@ -93,17 +92,18 @@ bool LuaScript::Initialize(const WCHAR* scriptFile)
|
|||||||
int result = lua_pcall(L, 0, 0, 0);
|
int result = lua_pcall(L, 0, 0, 0);
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
{
|
{
|
||||||
|
m_File = scriptFile;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LuaManager::ReportErrors(L);
|
LuaManager::ReportErrors(L, scriptFile);
|
||||||
Uninitialize();
|
Uninitialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LuaManager::ReportErrors(L);
|
LuaManager::ReportErrors(L, scriptFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -117,6 +117,7 @@ void LuaScript::Uninitialize()
|
|||||||
{
|
{
|
||||||
luaL_unref(L, LUA_GLOBALSINDEX, m_Ref);
|
luaL_unref(L, LUA_GLOBALSINDEX, m_Ref);
|
||||||
m_Ref = LUA_NOREF;
|
m_Ref = LUA_NOREF;
|
||||||
|
m_File.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +168,7 @@ void LuaScript::RunFunction(const char* funcName)
|
|||||||
|
|
||||||
if (lua_pcall(L, 0, 0, 0))
|
if (lua_pcall(L, 0, 0, 0))
|
||||||
{
|
{
|
||||||
LuaManager::ReportErrors(L);
|
LuaManager::ReportErrors(L, m_File);
|
||||||
}
|
}
|
||||||
|
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
@ -193,7 +194,7 @@ int LuaScript::RunFunctionWithReturn(const char* funcName, double& numValue, std
|
|||||||
|
|
||||||
if (lua_pcall(L, 0, 1, 0))
|
if (lua_pcall(L, 0, 1, 0))
|
||||||
{
|
{
|
||||||
LuaManager::ReportErrors(L);
|
LuaManager::ReportErrors(L, m_File);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -230,7 +231,7 @@ void LuaScript::RunString(const char* str)
|
|||||||
// Load the string as a Lua chunk
|
// Load the string as a Lua chunk
|
||||||
if (luaL_loadstring(L, str))
|
if (luaL_loadstring(L, str))
|
||||||
{
|
{
|
||||||
LuaManager::ReportErrors(L);
|
LuaManager::ReportErrors(L, m_File);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push our table onto the stack
|
// Push our table onto the stack
|
||||||
@ -241,7 +242,7 @@ void LuaScript::RunString(const char* str)
|
|||||||
|
|
||||||
if (lua_pcall(L, 0, 0, 0))
|
if (lua_pcall(L, 0, 0, 0))
|
||||||
{
|
{
|
||||||
LuaManager::ReportErrors(L);
|
LuaManager::ReportErrors(L, m_File);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,11 +27,12 @@ public:
|
|||||||
LuaScript();
|
LuaScript();
|
||||||
~LuaScript();
|
~LuaScript();
|
||||||
|
|
||||||
bool Initialize(const WCHAR* scriptFile);
|
bool Initialize(const std::wstring& scriptFile);
|
||||||
void Uninitialize();
|
void Uninitialize();
|
||||||
|
|
||||||
bool IsInitialized() { return m_Ref != LUA_NOREF; }
|
bool IsInitialized() { return m_Ref != LUA_NOREF; }
|
||||||
|
|
||||||
int GetRef() { return m_Ref; }
|
int GetRef() { return m_Ref; }
|
||||||
|
const std::wstring& GetFile() { return m_File; }
|
||||||
|
|
||||||
bool IsFunction(const char* funcName);
|
bool IsFunction(const char* funcName);
|
||||||
void RunFunction(const char* funcName);
|
void RunFunction(const char* funcName);
|
||||||
@ -40,6 +41,8 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
int m_Ref;
|
int m_Ref;
|
||||||
|
|
||||||
|
std::wstring m_File;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user