summaryrefslogtreecommitdiffstats
path: root/apps/plugins/lua
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2009-06-01 22:31:32 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2009-06-01 22:31:32 +0000
commit9c3e679d188ec6c117a33ef280d81943a8e37bc8 (patch)
tree5f012e940b9f0bb4540806e9744eab1bf88ad91b /apps/plugins/lua
parent82eea9ed69886a4eaf41a1124b292635ca60fe9a (diff)
downloadrockbox-9c3e679d188ec6c117a33ef280d81943a8e37bc8.tar.gz
rockbox-9c3e679d188ec6c117a33ef280d81943a8e37bc8.zip
Lua: add touchscreen_set_mode & current_path (+ some constants)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21165 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/lua')
-rw-r--r--apps/plugins/lua/lauxlib.c48
-rw-r--r--apps/plugins/lua/rocklib.c34
-rw-r--r--apps/plugins/lua/rocklib.h1
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_ */