From 527b069653bf06661b8a9650e1f5eb2c6e7cc2bf Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 27 Jul 2009 16:06:51 +0000 Subject: Lua: implement the ^ and % operators git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22070 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/lua/rockaux.c | 49 ++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 19 deletions(-) (limited to 'apps/plugins/lua/rockaux.c') diff --git a/apps/plugins/lua/rockaux.c b/apps/plugins/lua/rockaux.c index 95f2ab169b..ea95f232ab 100644 --- a/apps/plugins/lua/rockaux.c +++ b/apps/plugins/lua/rockaux.c @@ -31,29 +31,41 @@ int errno = 0; char *strerror(int errnum) { (void) errnum; - - DEBUGF("strerror()\n"); - + + DEBUGF("strerror(%d)\n", errnum); + return NULL; } -long floor(long x) +long rb_pow(long x, long n) { - (void) x; - - DEBUGF("floor()\n"); - - return 0; -} + long pow = 1; + unsigned long u; -long pow(long x, long y) -{ - (void) x; - (void) y; - - DEBUGF("pow()\n"); - - return 0; + if(n <= 0) + { + if(n == 0 || x == 1) + return 1; + + if(x != -1) + return x != 0 ? 1/x : 0; + + n = -n; + } + + u = n; + while(1) + { + if(u & 01) + pow *= x; + + if(u >>= 1) + x *= x; + else + break; + } + + return pow; } int strcoll(const char * str1, const char * str2) @@ -91,4 +103,3 @@ const char* get_current_path(lua_State *L, int level) return NULL; } - -- cgit v1.2.3