Full DFHack::Console to lua binding.
Signed-off-by: Warmist <Warmist@gmail.com>develop
							parent
							
								
									3106606a4e
								
							
						
					
					
						commit
						e47d05eeb4
					
				| @ -0,0 +1,13 @@ | |||||||
|  | #ifndef LUA_CONSOLE_H | ||||||
|  | #define LUA_CONSOLE_H | ||||||
|  | #include <dfhack/Console.h> | ||||||
|  | #include "luamain.h" | ||||||
|  | 
 | ||||||
|  | namespace lua | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | void RegisterConsole(lua::state &st, DFHack::Console *c); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
| @ -0,0 +1,137 @@ | |||||||
|  | #include "lua_Console.h" | ||||||
|  | //TODO error management. Using lua error? or something other?
 | ||||||
|  | static DFHack::Console* GetConsolePtr(lua::state &st) | ||||||
|  | { | ||||||
|  | 	int t=st.gettop(); | ||||||
|  | 	st.getglobal("Console"); | ||||||
|  | 	st.getfield("__pointer"); | ||||||
|  | 	DFHack::Console* c=static_cast<DFHack::Console*>(lua_touserdata(st,-1)); | ||||||
|  | 	st.settop(t); | ||||||
|  | 	return c; | ||||||
|  | } | ||||||
|  | static int lua_Console_print(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	int t=st.gettop(); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->print("%s",st.as<string>(t).c_str()); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int lua_Console_printerr(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	int t=st.gettop(); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->printerr("%s",st.as<string>(t).c_str()); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int lua_Console_clear(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->clear(); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | static int lua_Console_gotoxy(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->gotoxy(st.as<int>(1,1),st.as<int>(1,2)); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | static int lua_Console_color(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->color( static_cast<DFHack::Console::color_value>(st.as<int>(-1,1)) ); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | static int lua_Console_reset_color(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->reset_color(); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | static int lua_Console_cursor(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->cursor(st.as<bool>(1)); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | static int lua_Console_msleep(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->msleep(st.as<unsigned>(1)); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | static int lua_Console_get_columns(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	st.push(c->get_columns()); | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  | static int lua_Console_get_rows(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	st.push(c->get_rows()); | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  | static int lua_Console_lineedit(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	string ret; | ||||||
|  | 	int i=c->lineedit(st.as<string>(1),ret); | ||||||
|  | 	st.push(ret); | ||||||
|  | 	st.push(i); | ||||||
|  | 	return 2;// dunno if len is needed...
 | ||||||
|  | } | ||||||
|  | static int lua_Console_history_add(lua_State *S) | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->history_add(st.as<string>(1)); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | /*static int lua_Console_history_clear(lua_State *S) //TODO someday add this
 | ||||||
|  | { | ||||||
|  | 	lua::state st(S); | ||||||
|  | 	DFHack::Console* c=GetConsolePtr(st); | ||||||
|  | 	c->history_clear(); | ||||||
|  | 	return 0; | ||||||
|  | }*/ | ||||||
|  | const luaL_Reg lua_console_func[]= | ||||||
|  | { | ||||||
|  | 	{"print",lua_Console_print}, | ||||||
|  | 	{"printerr",lua_Console_printerr}, | ||||||
|  | 	{"clear",lua_Console_clear}, | ||||||
|  | 	{"gotoxy",lua_Console_gotoxy}, | ||||||
|  | 	{"color",lua_Console_color}, | ||||||
|  | 	{"reset_color",lua_Console_reset_color}, | ||||||
|  | 	{"cursor",lua_Console_cursor}, | ||||||
|  | 	{"msleep",lua_Console_msleep}, | ||||||
|  | 	{"get_columns",lua_Console_get_columns}, | ||||||
|  | 	{"get_rows",lua_Console_get_rows}, | ||||||
|  | 	{"lineedit",lua_Console_lineedit}, | ||||||
|  | 	{"history_add",lua_Console_history_add}, | ||||||
|  | 	//{"history_clear",lua_Console_history_clear},
 | ||||||
|  | 	{NULL,NULL} | ||||||
|  | }; | ||||||
|  | void lua::RegisterConsole(lua::state &st, DFHack::Console *c) | ||||||
|  | { | ||||||
|  | 	st.newtable(); | ||||||
|  | 
 | ||||||
|  | 	st.pushlightuserdata(c); | ||||||
|  | 	st.setfield("__pointer"); | ||||||
|  | 	 | ||||||
|  | 	lua::RegFunctionsLocal(st, lua_console_func); | ||||||
|  | 	//TODO add color consts
 | ||||||
|  | 	st.setglobal("Console"); | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue