82 lines
1.6 KiB
C++
Executable File
82 lines
1.6 KiB
C++
Executable File
/* Copyright (C) 2015 Graham Sanderson, All Rights Reserved */
|
|
#include "extdll.h"
|
|
#include "eiface.h"
|
|
#include "util.h"
|
|
#include "game.h"
|
|
#include "gslua.h"
|
|
|
|
#include "lua/lua.hpp"
|
|
|
|
#define MAX_LUA_LIB_FUNCS 200
|
|
|
|
extern lua_State *g_L;
|
|
extern BOOL g_bLuaInitialized;
|
|
|
|
static const luaL_Reg gsLib_METHODS[] = {
|
|
{ "_Print_Console", LUA_PrintConsole },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
// --- Init/quit ---
|
|
|
|
void LuaInit(void)
|
|
{
|
|
g_L = luaL_newstate();
|
|
g_bLuaInitialized = TRUE;
|
|
ALERT(at_console, "[HLua] Lua initialized.\n");
|
|
|
|
LuaRegisterFunctions();
|
|
|
|
if(luaL_dostring(g_L, "_Print_Console(\"[HLua::Lua] Initialization success!\");") == TRUE)
|
|
{
|
|
LuaError("[HLua] Failed initial Lua test. Stopping Lua.\n");
|
|
}
|
|
}
|
|
|
|
void LuaQuit(void)
|
|
{
|
|
lua_close(g_L);
|
|
ALERT(at_console, "[HLua] Lua shutdown.\n");
|
|
}
|
|
|
|
// --- Error functions ---
|
|
|
|
void LuaError(char *szFmt)
|
|
{
|
|
char const * szFmtC = (const char *) szFmt;
|
|
ALERT(at_error, szFmt);
|
|
g_bLuaInitialized = FALSE;
|
|
LuaQuit();
|
|
g_L = NULL;
|
|
}
|
|
|
|
void LuaCheckNull(void const *vpToCheck)
|
|
{
|
|
if (vpToCheck == NULL)
|
|
{
|
|
LuaError ("[HLua] Null pointer exception!");
|
|
}
|
|
}
|
|
|
|
// --- Binded lua functions ---
|
|
|
|
void LuaRegisterFunctions(void)
|
|
{
|
|
int i;
|
|
ALERT(at_console, "[HLua] Registering functions.\n");
|
|
for(i = 0; i < MAX_LUA_LIB_FUNCS; i++)
|
|
{
|
|
if(gsLib_METHODS[i].name == NULL && gsLib_METHODS[i].func == NULL) break;
|
|
lua_register(g_L, gsLib_METHODS[i].name, gsLib_METHODS[i].func);
|
|
}
|
|
ALERT(at_console, "[HLua] Register success, got %d functions.\n", i);
|
|
}
|
|
|
|
int LUA_PrintConsole(lua_State *L)
|
|
{
|
|
const char *szToWrite = luaL_checkstring(L, 1);
|
|
LuaCheckNull(szToWrite);
|
|
ALERT(at_console, "%s\n", szToWrite);
|
|
return 0;
|
|
}
|