Lua: More conversion to lua::parameters

This commit is contained in:
Ilari Liusvaara 2014-01-26 19:10:52 +02:00
parent b7ea7bb2c7
commit 1800453c4f
17 changed files with 166 additions and 195 deletions

View file

@ -52,18 +52,18 @@ namespace
int32_t thickness;
};
lua::fnptr gui_box(lua_func_misc, "gui.box", [](lua::state& L, const std::string& fname) -> int {
lua::fnptr2 gui_box(lua_func_misc, "gui.box", [](lua::state& L, lua::parameters& P) -> int {
if(!lua_render_ctx)
return 0;
uint32_t thickness = 1;
int32_t x = L.get_numeric_argument<int32_t>(1, fname.c_str());
int32_t y = L.get_numeric_argument<int32_t>(2, fname.c_str());
uint32_t width = L.get_numeric_argument<uint32_t>(3, fname.c_str());
uint32_t height = L.get_numeric_argument<uint32_t>(4, fname.c_str());
L.get_numeric_argument<uint32_t>(5, thickness, fname.c_str());
auto poutline1 = lua_get_fb_color(L, 6, fname, 0xFFFFFFU);
auto poutline2 = lua_get_fb_color(L, 7, fname, 0x808080U);
auto pfill = lua_get_fb_color(L, 8, fname, 0xC0C0C0U);
auto x = P.arg<int32_t>();
auto y = P.arg<int32_t>();
auto width = P.arg<uint32_t>();
auto height = P.arg<uint32_t>();
uint32_t thickness = P.arg_opt<uint32_t>(1);
auto poutline1 = P.color(0xFFFFFFU);
auto poutline2 = P.color(0x808080U);
auto pfill = P.color(0xC0C0C0U);
lua_render_ctx->queue->create_add<render_object_box>(x, y, width, height, poutline1, poutline2,
pfill, thickness);
return 0;

View file

@ -59,17 +59,16 @@ namespace
framebuffer::color fill;
};
lua::fnptr gui_rectangle(lua_func_misc, "gui.circle", [](lua::state& L, const std::string& fname)
lua::fnptr2 gui_rectangle(lua_func_misc, "gui.circle", [](lua::state& L, lua::parameters& P)
-> int {
if(!lua_render_ctx)
return 0;
uint32_t thickness = 1;
int32_t x = L.get_numeric_argument<int32_t>(1, fname.c_str());
int32_t y = L.get_numeric_argument<int32_t>(2, fname.c_str());
uint32_t radius = L.get_numeric_argument<uint32_t>(3, fname.c_str());
L.get_numeric_argument<uint32_t>(4, thickness, fname.c_str());
auto poutline = lua_get_fb_color(L, 5, fname, 0xFFFFFFU);
auto pfill = lua_get_fb_color(L, 6, fname, -1);
auto x = P.arg<int32_t>();
auto y = P.arg<int32_t>();
auto radius = P.arg<uint32_t>();
uint32_t thickness = P.arg_opt<uint32_t>(1);
auto poutline = P.color(0xFFFFFFU);
auto pfill = P.color(-1);
lua_render_ctx->queue->create_add<render_object_circle>(x, y, radius, poutline, pfill, thickness);
return 0;
});

View file

@ -49,29 +49,26 @@ namespace
lua_gui_set_gap<&lua_render_context::top_gap, true> dtg("gui.delta_top_gap");
lua_gui_set_gap<&lua_render_context::bottom_gap, true> dbg("gui.delta_bottom_gap");
lua::fnptr gui_repaint(lua_func_misc, "gui.repaint", [](lua::state& L, const std::string& fname)
-> int {
lua::fnptr2 gui_repaint(lua_func_misc, "gui.repaint", [](lua::state& L, lua::parameters& P) -> int {
lua_requests_repaint = true;
return 0;
});
lua::fnptr gui_sfupd(lua_func_misc, "gui.subframe_update", [](lua::state& L, const std::string& fname)
-> int {
lua_requests_subframe_paint = L.get_bool(1, fname.c_str());
lua::fnptr2 gui_sfupd(lua_func_misc, "gui.subframe_update", [](lua::state& L, lua::parameters& P) -> int {
lua_requests_subframe_paint = P.arg<bool>();
return 0;
});
lua::fnptr gui_color(lua_func_misc, "gui.color", [](lua::state& L, const std::string& fname)
-> int {
if(L.type(1) == LUA_TSTRING) {
L.pushnumber(lua_get_fb_color(L, 1, fname).asnumber());
lua::fnptr2 gui_color(lua_func_misc, "gui.color", [](lua::state& L, lua::parameters& P) -> int {
if(P.is_string()) {
framebuffer::color c(P.arg<std::string>());
L.pushnumber(c.asnumber());
return 1;
}
int64_t a = 256;
int64_t r = L.get_numeric_argument<uint32_t>(1, fname.c_str());
int64_t g = L.get_numeric_argument<uint32_t>(2, fname.c_str());
int64_t b = L.get_numeric_argument<uint32_t>(3, fname.c_str());
L.get_numeric_argument<int64_t>(4, a, fname.c_str());
int64_t r = P.arg<int64_t>();
int64_t g = P.arg<int64_t>();
int64_t b = P.arg<int64_t>();
int64_t a = P.arg_opt<int64_t>(256);
if(a > 0)
L.pushnumber(((256 - a) << 24) | (r << 16) | (g << 8) | b);
else
@ -79,10 +76,9 @@ namespace
return 1;
});
lua::fnptr gui_status(lua_func_misc, "gui.status", [](lua::state& L, const std::string& fname)
-> int {
std::string name = L.get_string(1, fname.c_str());
std::string value = L.get_string(2, fname.c_str());
lua::fnptr2 gui_status(lua_func_misc, "gui.status", [](lua::state& L, lua::parameters& P) -> int {
auto name = P.arg<std::string>();
auto value = P.arg<std::string>();
auto& w = platform::get_emustatus();
if(value == "")
w.erase("L[" + name + "]");
@ -91,12 +87,10 @@ namespace
return 1;
});
lua::fnptr gui_rainbow(lua_func_misc, "gui.rainbow", [](lua::state& L, const std::string& fname)
-> int {
int64_t basecolor = 0x00FF0000;
int64_t step = L.get_numeric_argument<uint64_t>(1, fname.c_str());
int64_t steps = L.get_numeric_argument<int64_t>(2, fname.c_str());
basecolor = lua_get_fb_color(L, 3, fname).asnumber();
lua::fnptr2 gui_rainbow(lua_func_misc, "gui.rainbow", [](lua::state& L, lua::parameters& P) -> int {
int64_t step = P.arg<int64_t>();
int64_t steps = P.arg<int64_t>();
auto basecolor = P.color(0x00FF0000).asnumber();
if(!steps)
throw std::runtime_error("Expected nonzero steps for gui.rainbow");
basecolor = framebuffer::color_rotate_hue(basecolor, step, steps);
@ -104,17 +98,15 @@ namespace
return 1;
});
lua::fnptr gui_killframe(lua_func_misc, "gui.kill_frame", [](lua::state& L, const std::string& fname)
-> int {
lua::fnptr2 gui_killframe(lua_func_misc, "gui.kill_frame", [](lua::state& L, lua::parameters& P) -> int {
if(lua_kill_frame)
*lua_kill_frame = true;
});
lua::fnptr gui_setscale(lua_func_misc, "gui.set_video_scale", [](lua::state& L, const std::string& fname)
-> int {
lua::fnptr2 gui_setscale(lua_func_misc, "gui.set_video_scale", [](lua::state& L, lua::parameters& P) -> int {
if(lua_hscl && lua_vscl) {
uint32_t h = L.get_numeric_argument<uint32_t>(1, fname.c_str());
uint32_t v = L.get_numeric_argument<uint32_t>(2, fname.c_str());
auto h = P.arg<uint32_t>();
auto v = P.arg<uint32_t>();
*lua_hscl = h;
*lua_vscl = v;
}

View file

@ -37,15 +37,14 @@ namespace
uint32_t length;
};
lua::fnptr gui_crosshair(lua_func_misc, "gui.crosshair", [](lua::state& L, const std::string& fname)
lua::fnptr2 gui_crosshair(lua_func_misc, "gui.crosshair", [](lua::state& L, lua::parameters& P)
-> int {
if(!lua_render_ctx)
return 0;
uint32_t length = 10;
int32_t x = L.get_numeric_argument<int32_t>(1, fname.c_str());
int32_t y = L.get_numeric_argument<int32_t>(2, fname.c_str());
L.get_numeric_argument<uint32_t>(3, length, fname.c_str());
auto pcolor = lua_get_fb_color(L, 4, fname, 0xFFFFFFU);
auto x = P.arg<int32_t>();
auto y = P.arg<int32_t>();
auto length = P.arg_opt<uint32_t>(10);
auto pcolor = P.color(0xFFFFFFU);
lua_render_ctx->queue->create_add<render_object_crosshair>(x, y, pcolor, length);
return 0;
});

View file

@ -90,14 +90,14 @@ nodraw2:
framebuffer::color color;
};
lua::fnptr gui_pixel(lua_func_misc, "gui.line", [](lua::state& L, const std::string& fname) -> int {
lua::fnptr2 gui_pixel(lua_func_misc, "gui.line", [](lua::state& L, lua::parameters& P) -> int {
if(!lua_render_ctx)
return 0;
int32_t x1 = L.get_numeric_argument<int32_t>(1, fname.c_str());
int32_t y1 = L.get_numeric_argument<int32_t>(2, fname.c_str());
int32_t x2 = L.get_numeric_argument<int32_t>(3, fname.c_str());
int32_t y2 = L.get_numeric_argument<int32_t>(4, fname.c_str());
auto pcolor = lua_get_fb_color(L, 5, fname, 0xFFFFFFU);
auto x1 = P.arg<int32_t>();
auto y1 = P.arg<int32_t>();
auto x2 = P.arg<int32_t>();
auto y2 = P.arg<int32_t>();
auto pcolor = P.color(0xFFFFFFU);
lua_render_ctx->queue->create_add<render_object_line>(x1, x2, y1, y2, pcolor);
return 0;
});

View file

@ -29,12 +29,12 @@ namespace
framebuffer::color color;
};
lua::fnptr gui_pixel(lua_func_misc, "gui.pixel", [](lua::state& L, const std::string& fname) -> int {
lua::fnptr2 gui_pixel(lua_func_misc, "gui.pixel", [](lua::state& L, lua::parameters& P) -> int {
if(!lua_render_ctx)
return 0;
int32_t x = L.get_numeric_argument<int32_t>(1, fname.c_str());
int32_t y = L.get_numeric_argument<int32_t>(2, fname.c_str());
auto pcolor = lua_get_fb_color(L, 3, fname, 0xFFFFFFU);
auto x = P.arg<int32_t>();
auto y = P.arg<int32_t>();
auto pcolor = P.color(0xFFFFFFU);
lua_render_ctx->queue->create_add<render_object_pixel>(x, y, pcolor);
return 0;
});

View file

@ -47,18 +47,17 @@ namespace
int32_t thickness;
};
lua::fnptr gui_rectangle(lua_func_misc, "gui.rectangle", [](lua::state& L, const std::string& fname)
lua::fnptr2 gui_rectangle(lua_func_misc, "gui.rectangle", [](lua::state& L, lua::parameters& P)
-> int {
if(!lua_render_ctx)
return 0;
uint32_t thickness = 1;
int32_t x = L.get_numeric_argument<int32_t>(1, fname.c_str());
int32_t y = L.get_numeric_argument<int32_t>(2, fname.c_str());
uint32_t width = L.get_numeric_argument<uint32_t>(3, fname.c_str());
uint32_t height = L.get_numeric_argument<uint32_t>(4, fname.c_str());
L.get_numeric_argument<uint32_t>(5, thickness, fname.c_str());
auto poutline = lua_get_fb_color(L, 6, fname, 0xFFFFFFU);
auto pfill = lua_get_fb_color(L, 7, fname, -1);
auto x = P.arg<int32_t>();
auto y = P.arg<int32_t>();
auto width = P.arg<uint32_t>();
auto height = P.arg<uint32_t>();
auto thickness = P.arg_opt<uint32_t>(1);
auto poutline = P.color(0xFFFFFFU);
auto pfill = P.color(-1);
lua_render_ctx->queue->create_add<render_object_rectangle>(x, y, width, height, poutline, pfill,
thickness);
return 0;

View file

@ -30,33 +30,22 @@ namespace
bool vdbl;
};
int internal_gui_text(lua::state& L, const std::string& fname, bool hdbl, bool vdbl)
template<bool hdbl, bool vdbl>
int internal_gui_text(lua::state& L, lua::parameters& P)
{
if(!lua_render_ctx)
return 0;
int32_t _x = L.get_numeric_argument<int32_t>(1, fname.c_str());
int32_t _y = L.get_numeric_argument<int32_t>(2, fname.c_str());
auto fg = lua_get_fb_color(L, 4, fname, 0xFFFFFFU);
auto bg = lua_get_fb_color(L, 5, fname, -1);
std::string text = L.get_string(3, fname.c_str());
auto _x = P.arg<int32_t>();
auto _y = P.arg<int32_t>();
auto text = P.arg<std::string>();
auto fg = P.color(0xFFFFFFU);
auto bg = P.color(-1);
lua_render_ctx->queue->create_add<render_object_text>(_x, _y, text, fg, bg, hdbl, vdbl);
return 0;
}
lua::fnptr gui_text(lua_func_misc, "gui.text", [](lua::state& L, const std::string& fname) -> int {
return internal_gui_text(L, fname, false, false);
});
lua::fnptr gui_textH(lua_func_misc, "gui.textH", [](lua::state& L, const std::string& fname) -> int {
return internal_gui_text(L, fname, true, false);
});
lua::fnptr gui_textV(lua_func_misc, "gui.textV", [](lua::state& L, const std::string& fname) -> int {
return internal_gui_text(L, fname, false, true);
});
lua::fnptr gui_textHV(lua_func_misc, "gui.textHV", [](lua::state& L, const std::string& fname)
-> int {
return internal_gui_text(L, fname, true, true);
});
lua::fnptr2 gui_text(lua_func_misc, "gui.text", internal_gui_text<false, false>);
lua::fnptr2 gui_textH(lua_func_misc, "gui.textH", internal_gui_text<true, false>);
lua::fnptr2 gui_textV(lua_func_misc, "gui.textV", internal_gui_text<false, true>);
lua::fnptr2 gui_textHV(lua_func_misc, "gui.textHV", internal_gui_text<true, true>);
}

View file

@ -11,6 +11,7 @@ public:
{
return ikey.getname();
}
static int create(lua::state& L, lua::parameters& P);
private:
keyboard::invbind ikey;
};
@ -60,6 +61,7 @@ public:
else
return a->get_name();
}
static int create(lua::state& L, lua::parameters& P);
private:
lua_command_binding* a;
lua_command_binding* b;
@ -89,11 +91,9 @@ lua_command_bind::~lua_command_bind()
namespace
{
lua::fnptr input_bindings(lua_func_misc, "list_bindings", [](lua::state& L, const std::string& fname)
-> int {
std::string target;
if(!L.isnoneornil(1))
target = L.get_string(1, fname.c_str());
lua::fnptr2 input_bindings(lua_func_misc, "list_bindings", [](lua::state& L, lua::parameters& P) -> int {
auto target = P.arg_opt<std::string>("");
L.newtable();
for(auto key : lsnes_mapper.get_bindings()) {
std::string _key = key;
@ -121,45 +121,47 @@ namespace
return 1;
});
lua::fnptr get_alias(lua_func_misc, "get_alias", [](lua::state& L, const std::string& fname) -> int {
std::string name = L.get_string(1, fname.c_str());
lua::fnptr2 get_alias(lua_func_misc, "get_alias", [](lua::state& L, lua::parameters& P) -> int {
auto name = P.arg<std::string>();
std::string a = lsnes_cmd.get_alias_for(name);
if(a != "")
L.pushlstring(a.c_str(), a.length());
L.pushlstring(a);
else
L.pushnil();
return 1;
});
lua::fnptr set_alias(lua_func_misc, "set_alias", [](lua::state& L, const std::string& fname) -> int {
std::string name = L.get_string(1, fname.c_str());
std::string value;
if(L.type(2) != LUA_TNIL)
value = L.get_string(2, fname.c_str());
lua::fnptr2 set_alias(lua_func_misc, "set_alias", [](lua::state& L, lua::parameters& P) -> int {
auto name = P.arg<std::string>();
auto value = P.arg_opt<std::string>("");
lsnes_cmd.set_alias_for(name, value);
refresh_alias_binds();
return 0;
});
lua::fnptr create_ibind(lua_func_misc, "create_ibind", [](lua::state& L, const std::string& fname)
-> int {
std::string name = L.get_string(1, fname.c_str());
std::string command = L.get_string(2, fname.c_str());
lua_inverse_bind* b = lua::_class<lua_inverse_bind>::create(L, name, command);
return 1;
});
lua::fnptr create_cmd(lua_func_misc, "create_command", [](lua::state& L, const std::string& fname)
-> int {
if(L.type(2) != LUA_TFUNCTION)
throw std::runtime_error("Argument 2 of create_command must be function");
if(L.type(3) != LUA_TFUNCTION && L.type(3) != LUA_TNIL && L.type(3) != LUA_TNONE)
throw std::runtime_error("Argument 2 of create_command must be function or nil");
std::string name = L.get_string(1, fname.c_str());
lua_command_bind* b = lua::_class<lua_command_bind>::create(L, name, 2, 3);
return 1;
});
lua::_class<lua_inverse_bind> class_inverse_bind(lua_class_bind, "INVERSEBIND", {}, {});
lua::_class<lua_command_bind> class_command_bind(lua_class_bind, "COMMANDBIND", {}, {});
lua::_class<lua_inverse_bind> class_inverse_bind(lua_class_bind, "INVERSEBIND", {
{"new", lua_inverse_bind::create},
}, {});
lua::_class<lua_command_bind> class_command_bind(lua_class_bind, "COMMANDBIND", {
{"new", lua_command_bind::create},
}, {});
}
int lua_inverse_bind::create(lua::state& L, lua::parameters& P)
{
auto name = P.arg<std::string>();
auto command = P.arg<std::string>();
lua_inverse_bind* b = lua::_class<lua_inverse_bind>::create(L, name, command);
return 1;
}
int lua_command_bind::create(lua::state& L, lua::parameters& P)
{
auto name = P.arg<std::string>();
if(!P.is_function())
P.expected("function");
if(!P.is_function(3) && P.is_novalue(3))
P.expected("function or nil", 3);
lua_command_bind* b = lua::_class<lua_command_bind>::create(L, name, 2, 3);
return 1;
}

View file

@ -146,13 +146,10 @@ exit:
return 1;
}
lua::fnptr iconv_byteU(lua_func_bit, "_lsnes_string_byteU", [](lua::state& L, const std::string& fname)
-> int {
std::string _str = L.get_string(1, fname.c_str());
size_t i = 1;
L.get_numeric_argument<size_t>(2, i, fname.c_str());
size_t j = i;
L.get_numeric_argument<size_t>(3, j, fname.c_str());
lua::fnptr2 iconv_byteU(lua_func_bit, "_lsnes_string_byteU", [](lua::state& L, lua::parameters& P) -> int {
auto _str = P.arg<std::string>();
size_t i = P.arg_opt<size_t>(1);
size_t j = P.arg_opt<size_t>(i);
std::u32string str = utf8::to32(_str);
if(i == 0) i = 1;
size_t p = 0;
@ -163,11 +160,10 @@ exit:
return p;
});
lua::fnptr iconv_charU(lua_func_bit, "_lsnes_string_charU", [](lua::state& L, const std::string& fname)
-> int {
lua::fnptr2 iconv_charU(lua_func_bit, "_lsnes_string_charU", [](lua::state& L, lua::parameters& P) -> int {
std::u32string str;
for(int i = 1; L.type(i) == LUA_TNUMBER; i++) {
uint32_t cp = L.get_numeric_argument<uint32_t>(i, fname.c_str());
while(P.more()) {
auto cp = P.arg<uint32_t>();
//Surrogates are not valid unicode.
if((cp & 0xD800) == 0xD800)
throw std::runtime_error("Invalid character");

View file

@ -253,12 +253,10 @@ namespace
}
}
void load_chunk(lua::state& L, const std::string& fname)
void load_chunk(lua::state& L, lua::parameters& P)
{
std::string file2;
std::string file1 = L.get_string(1, fname.c_str());
if(L.type(2) != LUA_TNIL && L.type(2) != LUA_TNONE)
file2 = L.get_string(2, fname.c_str());
auto file1 = P.arg<std::string>();
auto file2 = P.arg_opt<std::string>("");
std::string absfilename = zip::resolverel(file1, file2);
std::istream& file = zip::openrel(file1, file2);
std::string chunkname;
@ -291,13 +289,13 @@ namespace
{
}
lua::fnptr loadfile2(lua_func_load, "loadfile2", [](lua::state& L, const std::string& fname) -> int {
load_chunk(L, fname);
lua::fnptr2 loadfile2(lua_func_load, "loadfile2", [](lua::state& L, lua::parameters& P) -> int {
load_chunk(L, P);
return 1;
});
lua::fnptr dofile2(lua_func_load, "dofile2", [](lua::state& L, const std::string& fname) -> int {
load_chunk(L, fname);
lua::fnptr2 dofile2(lua_func_load, "dofile2", [](lua::state& L, lua::parameters& P) -> int {
load_chunk(L, P);
int old_sp = lua_gettop(L.handle());
lua_call(L.handle(), 0, LUA_MULTRET);
int new_sp = lua_gettop(L.handle());

View file

@ -28,23 +28,21 @@ namespace
}
}
lua::fnptr rboolean(lua_func_misc, "random.boolean", [](lua::state& L, const std::string& fname)
-> int {
lua::fnptr2 rboolean(lua_func_misc, "random.boolean", [](lua::state& L, lua::parameters& P) -> int {
L.pushboolean(randnum() % 2);
return 1;
});
lua::fnptr rinteger(lua_func_misc, "random.integer", [](lua::state& L, const std::string& fname)
-> int {
int64_t low = 0;
lua::fnptr2 rinteger(lua_func_misc, "random.integer", [](lua::state& L, lua::parameters& P) -> int {
auto low = P.arg<int64_t>();
int64_t high = 0;
if(L.type(2) == LUA_TNUMBER) {
low = L.get_numeric_argument<int64_t>(1, fname.c_str());
high = L.get_numeric_argument<int64_t>(2, fname.c_str());
if(P.is_number()) {
high = P.arg<uint64_t>();
if(low > high)
throw std::runtime_error("random.integer: high > low");
} else {
high = L.get_numeric_argument<int64_t>(1, fname.c_str()) - 1;
high = low - 1;
low = 0;
if(high < 0)
throw std::runtime_error("random.integer: high > low");
}
@ -53,8 +51,7 @@ namespace
return 1;
});
lua::fnptr rfloat(lua_func_misc, "random.float", [](lua::state& L, const std::string& fname)
-> int {
lua::fnptr2 rfloat(lua_func_misc, "random.float", [](lua::state& L, lua::parameters& P) -> int {
double _bits = 0;
uint64_t* bits = (uint64_t*)&_bits;
*bits = randnum() & 0xFFFFFFFFFFFFFULL;
@ -63,11 +60,12 @@ namespace
return 1;
});
lua::fnptr ramong(lua_func_misc, "random.among", [](lua::state& L, const std::string& fname)
{
lua::fnptr2 ramong(lua_func_misc, "random.among", [](lua::state& L, lua::parameters& P) -> int {
unsigned args = 1;
while(L.type(args) != LUA_TNONE)
while(P.more()) {
P.skip();
args++;
}
args--;
if(!args) {
L.pushnil();
@ -78,10 +76,10 @@ namespace
return 1;
});
lua::fnptr ramongt(lua_func_misc, "random.amongtable", [](lua::state& L, const std::string& fname)
lua::fnptr2 ramongt(lua_func_misc, "random.amongtable", [](lua::state& L, lua::parameters& P)
{
if(L.type(1) != LUA_TTABLE)
throw std::runtime_error("random.amongtable: First argument must be table");
if(!P.is_table())
P.expected("table");
uint64_t size = 0;
L.pushnil();
while(L.next(1)) {

View file

@ -4,15 +4,15 @@
namespace
{
lua::fnptr lua_gui_screenshot(lua_func_misc, "gui.screenshot", [](lua::state& L,
const std::string& fname) -> int {
std::string fn = L.get_string(1, fname.c_str());
lua::fnptr2 lua_gui_screenshot(lua_func_misc, "gui.screenshot", [](lua::state& L,
lua::parameters& P) -> int {
auto fn = P.arg<std::string>();
take_screenshot(fn);
return 0;
});
lua::fnptr lua_gui_screenshot_b(lua_func_misc, "gui.screenshot_bitmap", [](lua::state& L,
const std::string& fname) -> int {
lua::fnptr2 lua_gui_screenshot_b(lua_func_misc, "gui.screenshot_bitmap", [](lua::state& L,
lua::parameters& P) -> int {
framebuffer::raw& _fb = render_get_latest_screen();
try {
auto osize = std::make_pair(_fb.get_width(), _fb.get_height());

View file

@ -3,9 +3,9 @@
namespace
{
lua::fnptr ss(lua_func_misc, "settings.set", [](lua::state& L, const std::string& fname) -> int {
std::string name = L.get_string(1, fname.c_str());
std::string value = L.get_string(2, fname.c_str());
lua::fnptr2 ss(lua_func_misc, "settings.set", [](lua::state& L, lua::parameters& P) -> int {
auto name = P.arg<std::string>();
auto value = P.arg<std::string>();
try {
lsnes_vsetc.set(name, value);
} catch(std::exception& e) {
@ -17,8 +17,8 @@ namespace
return 1;
});
lua::fnptr sg(lua_func_misc, "settings.get", [](lua::state& L, const std::string& fname) -> int {
std::string name = L.get_string(1, fname.c_str());
lua::fnptr2 sg(lua_func_misc, "settings.get", [](lua::state& L, lua::parameters& P) -> int {
auto name = P.arg<std::string>();
try {
std::string value = lsnes_vsetc.get(name);
L.pushlstring(value.c_str(), value.length());

View file

@ -3,9 +3,8 @@
namespace
{
lua::fnptr enumerate(lua_func_misc, "subtitle.byindex", [](lua::state& L, const std::string& fname)
-> int {
uint64_t n = L.get_numeric_argument<uint64_t>(1, fname.c_str());
lua::fnptr2 enumerate(lua_func_misc, "subtitle.byindex", [](lua::state& L, lua::parameters& P) -> int {
auto n = P.arg<uint64_t>();
uint64_t j = 0;
for(auto i : get_subtitles()) {
if(j == n) {
@ -18,25 +17,25 @@ namespace
return 0;
});
lua::fnptr sget(lua_func_misc, "subtitle.get", [](lua::state& L, const std::string& fname) -> int {
uint64_t frame = L.get_numeric_argument<uint64_t>(1, fname.c_str());
uint64_t length = L.get_numeric_argument<uint64_t>(2, fname.c_str());
lua::fnptr2 sget(lua_func_misc, "subtitle.get", [](lua::state& L, lua::parameters& P) -> int {
auto frame = P.arg<uint64_t>();
auto length = P.arg<uint64_t>();
std::string x = get_subtitle_for(frame, length);
L.pushstring(x.c_str());
return 1;
});
lua::fnptr sset(lua_func_misc, "subtitle.set", [](lua::state& L, const std::string& fname) -> int {
uint64_t frame = L.get_numeric_argument<uint64_t>(1, fname.c_str());
uint64_t length = L.get_numeric_argument<uint64_t>(2, fname.c_str());
std::string text = L.get_string(3, fname.c_str());
lua::fnptr2 sset(lua_func_misc, "subtitle.set", [](lua::state& L, lua::parameters& P) -> int {
auto frame = P.arg<uint64_t>();
auto length = P.arg<uint64_t>();
std::string text = P.arg<std::string>();
set_subtitle_for(frame, length, text);
return 0;
});
lua::fnptr sdel(lua_func_misc, "subtitle.delete", [](lua::state& L, const std::string& fname) -> int {
uint64_t frame = L.get_numeric_argument<uint64_t>(1, fname.c_str());
uint64_t length = L.get_numeric_argument<uint64_t>(2, fname.c_str());
lua::fnptr2 sdel(lua_func_misc, "subtitle.delete", [](lua::state& L, lua::parameters& P) -> int {
auto frame = P.arg<uint64_t>();
auto length = P.arg<uint64_t>();
set_subtitle_for(frame, length, "");
return 0;
});

View file

@ -64,6 +64,8 @@ gui.palette_new=classes.PALETTE.new;
gui.font_new = classes.CUSTOMFONT.new;
gui.loadfont = classes.CUSTOMFONT.load;
iconv_new = classes.ICONV.new;
create_ibind = classes.INVERSEBIND.new;
create_command = classes.COMMANDBIND.new;
local do_arg_err = function(what, n, name)
error("Expected "..what.." as argument #"..n.." of "..name);

View file

@ -98,12 +98,10 @@ namespace
file_open = NULL;
}
lua::fnptr lua_enumerate_zip(lua_func_zip, "zip.enumerate", [](lua::state& L, const std::string& fname)
-> int {
std::string filename = L.get_string(1, fname.c_str());
bool invert = false;
if(L.type(2) != LUA_TNONE && L.type(2) != LUA_TNIL)
invert = L.toboolean(2);
lua::fnptr2 lua_enumerate_zip(lua_func_zip, "zip.enumerate", [](lua::state& L, lua::parameters& P) -> int {
auto filename = P.arg<std::string>();
auto invert = P.arg_opt<bool>(false);
zip::reader r(filename);
L.newtable();
size_t idx = 1;