From 9c3e679d188ec6c117a33ef280d81943a8e37bc8 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 1 Jun 2009 22:31:32 +0000 Subject: Lua: add touchscreen_set_mode & current_path (+ some constants) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21165 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/lua/lauxlib.c | 48 ++++++++++++++++++++++++++-------------------- apps/plugins/lua/rocklib.c | 34 +++++++++++++++++++++++++++++++- apps/plugins/lua/rocklib.h | 1 + 3 files changed, 61 insertions(+), 22 deletions(-) diff --git a/apps/plugins/lua/lauxlib.c b/apps/plugins/lua/lauxlib.c index fd71e07217..3f6d8e6f1b 100644 --- a/apps/plugins/lua/lauxlib.c +++ b/apps/plugins/lua/lauxlib.c @@ -560,24 +560,35 @@ static int errfile (lua_State *L, const char *what, int fnameindex) { return LUA_ERRFILE; } -static void make_path(char* dest, size_t dest_size, char* curfile, char* newfile) +bool get_cur_path(lua_State *L, char* dest, size_t dest_size) { - char* pos = rb->strrchr(curfile, '/'); - if(pos != NULL) + lua_Debug ar; + if(lua_getstack(L, 1, &ar)) { - unsigned int len = (unsigned int)(pos - curfile); - len = len + 1 > dest_size ? dest_size - 1 : len; - - if(len > 0) - memcpy(dest, curfile, len); - - dest[len] = '/'; - dest[len+1] = '\0'; + /* Try determining the base path of the current Lua chunk + and write it to dest. */ + lua_getinfo(L, "S", &ar); + + char* curfile = (char*) &ar.source[1]; + char* pos = rb->strrchr(curfile, '/'); + if(pos != NULL) + { + unsigned int len = (unsigned int)(pos - curfile); + len = len + 1 > dest_size ? dest_size - 1 : len; + + if(len > 0) + memcpy(dest, curfile, len); + + dest[len] = '/'; + dest[len+1] = '\0'; + + return true; + } + else + return false; } else - dest[0] = '\0'; - - strncat(dest, newfile, dest_size - strlen(dest)); + return false; } LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { @@ -590,13 +601,8 @@ LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { if(lf.f < 0) { /* Fallback */ - lua_Debug ar; - if(lua_getstack(L, 1, &ar)) { - lua_getinfo(L, "S", &ar); - - /* Try determining the base path of the current Lua chunk - and prepend it to filename in buffer. */ - make_path(buffer, sizeof(buffer), (char*)&ar.source[1], (char*)filename); + if(get_cur_path(L, buffer, sizeof(buffer))) { + strncat(buffer, filename, sizeof(buffer) - strlen(buffer)); lf.f = rb->open(buffer, O_RDONLY); } diff --git a/apps/plugins/lua/rocklib.c b/apps/plugins/lua/rocklib.c index 22e86f91b7..d501694b46 100644 --- a/apps/plugins/lua/rocklib.c +++ b/apps/plugins/lua/rocklib.c @@ -619,6 +619,15 @@ RB_WRAP(kbd_input) return 1; } +#ifdef HAVE_TOUCHSCREEN +RB_WRAP(touchscreen_set_mode) +{ + enum touchscreen_mode mode = luaL_checkint(L, 1); + rb->touchscreen_set_mode(mode); + return 0; +} +#endif + RB_WRAP(backlight_on) { (void)L; @@ -827,6 +836,18 @@ RB_WRAP(read_bmp_file) return 0; } +RB_WRAP(current_path) +{ + char buffer[MAX_PATH]; + if(get_cur_path(L, buffer, sizeof(buffer))) + { + lua_pushstring(L, buffer); + return 1; + } + else + return 0; +} + #define R(NAME) {#NAME, rock_##NAME} static const luaL_Reg rocklib[] = { @@ -901,6 +922,7 @@ static const luaL_Reg rocklib[] = R(action_userabort), #ifdef HAVE_TOUCHSCREEN R(action_get_touchscreen_press), + R(touchscreen_set_mode), #endif R(kbd_input), @@ -916,6 +938,7 @@ static const luaL_Reg rocklib[] = R(read_bmp_file), R(set_viewport), R(clear_viewport), + R(current_path), {"new_image", rli_new}, @@ -945,10 +968,19 @@ LUALIB_API int luaopen_rock(lua_State *L) RB_CONSTANT(SEEK_SET); RB_CONSTANT(SEEK_CUR); RB_CONSTANT(SEEK_END); - + RB_CONSTANT(FONT_SYSFIXED); RB_CONSTANT(FONT_UI); +#ifdef HAVE_TOUCHSCREEN + RB_CONSTANT(TOUCHSCREEN_POINT); + RB_CONSTANT(TOUCHSCREEN_BUTTON); + RB_CONSTANT(BUTTON_TOUCHSCREEN); +#endif + + RB_CONSTANT(BUTTON_REL); + RB_CONSTANT(BUTTON_REPEAT); + rli_init(L); return 1; diff --git a/apps/plugins/lua/rocklib.h b/apps/plugins/lua/rocklib.h index b5817f2f57..4a1e79cc8a 100644 --- a/apps/plugins/lua/rocklib.h +++ b/apps/plugins/lua/rocklib.h @@ -24,6 +24,7 @@ #define LUA_ROCKLIBNAME "rb" LUALIB_API int (luaopen_rock) (lua_State *L); +bool get_cur_path(lua_State *L, char* dest, size_t dest_size); #endif /* _ROCKLIB_H_ */ -- cgit v1.2.3