From d0e8204e8917d189c7365c03af473e18766cc637 Mon Sep 17 00:00:00 2001 From: pixel Date: Wed, 10 Dec 2003 02:59:31 +0000 Subject: LUALUALUALUALUALUALUALUALUA --- lib/BLua.cc | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-------- lib/Buffer.cc | 7 +++++-- lib/LuaHandle.cc | 4 ++-- 3 files changed, 62 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/BLua.cc b/lib/BLua.cc index 36cc566..7c91bb1 100644 --- a/lib/BLua.cc +++ b/lib/BLua.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: BLua.cc,v 1.10 2003-12-08 15:12:56 pixel Exp $ */ +/* $Id: BLua.cc,v 1.11 2003-12-10 02:59:31 pixel Exp $ */ #include @@ -42,6 +42,8 @@ class LuaStatics : public Base { static int xorB(lua_State *); static int notB(lua_State *); static int hex(lua_State *); + static int shl(lua_State *); + static int shr(lua_State *); }; std::map Lua::lualist; @@ -58,7 +60,7 @@ int LuaStatics::trueluapanic(lua_State * L) throw (GeneralException) { int LuaStatics::andB(lua_State * _L) { Lua * L = Lua::find(_L); int n = L->gettop(); - int a, b; + Uint32 a, b; if ((n != 2) && !L->isnumber(1) && !L->isnumber(2)) { L->error("Incorrect arguments to function `andB'"); @@ -75,7 +77,7 @@ int LuaStatics::andB(lua_State * _L) { int LuaStatics::orB(lua_State * _L) { Lua * L = Lua::find(_L); int n = L->gettop(); - int a, b; + Uint32 a, b; if ((n != 2) && !L->isnumber(1) && !L->isnumber(2)) { L->error("Incorrect arguments to function `orB'"); @@ -92,7 +94,7 @@ int LuaStatics::orB(lua_State * _L) { int LuaStatics::xorB(lua_State * _L) { Lua * L = Lua::find(_L); int n = L->gettop(); - int a, b; + Uint32 a, b; if ((n != 2) && !L->isnumber(1) && !L->isnumber(2)) { L->error("Incorrect arguments to function `xorB'"); @@ -109,7 +111,7 @@ int LuaStatics::xorB(lua_State * _L) { int LuaStatics::notB(lua_State * _L) { Lua * L = Lua::find(_L); int n = L->gettop(); - int x; + Uint32 x; if ((n != 1) && !L->isnumber()) { L->error("Incorrect arguments to function `notB'"); @@ -122,6 +124,46 @@ int LuaStatics::notB(lua_State * _L) { return 1; } +int LuaStatics::shl(lua_State * _L) { + Lua * L = Lua::find(_L); + int n = L->gettop(); + Uint32 a, b; + + if ((n > 2) && !L->isnumber(1) && ((n == 2) && !L->isnumber(2))) { + L->error("Incorrect arguments to function `shl'"); + } + + a = L->tonumber(1); + if (n == 2) + b = L->tonumber(2); + else + b = 1; + + L->push((lua_Number) (a << b)); + + return 1; +} + +int LuaStatics::shr(lua_State * _L) { + Lua * L = Lua::find(_L); + int n = L->gettop(); + Uint32 a, b; + + if ((n > 2) && !L->isnumber(1) && ((n == 2) && !L->isnumber(2))) { + L->error("Incorrect arguments to function `shr'"); + } + + a = L->tonumber(1); + if (n == 2) + b = L->tonumber(2); + else + b = 1; + + L->push((lua_Number) (a >> b)); + + return 1; +} + int LuaStatics::hex(lua_State * _L) { Lua * L = Lua::find(_L); int n = L->gettop(); @@ -133,7 +175,7 @@ int LuaStatics::hex(lua_State * _L) { } x = L->tonumber(1); - String fmt = n == 2 ? L->tostring() : "%x"; + String fmt = n == 2 ? L->tostring() : "%02x"; r.set(fmt.to_charp(), x); L->push(r); @@ -149,6 +191,8 @@ Lua::Lua() : L(lua_open()) { declarefunc("orB", LuaStatics::orB); declarefunc("xorB", LuaStatics::xorB); declarefunc("notB", LuaStatics::notB); + declarefunc("shl", LuaStatics::shl); + declarefunc("shr", LuaStatics::shr); declarefunc("hex", LuaStatics::hex); } @@ -331,6 +375,8 @@ lua_Number Lua::tonumber(int i) { } String Lua::tostring(int i) { + if (isnil(i)) + return String(); return String(lua_tostring(L, i)); } @@ -475,7 +521,7 @@ void LuaObject::push(Lua * L) throw (GeneralException) { void LuaObject::pushme(Lua * L, void * o) { L->push("__obj"); L->push(o); - L->settable(); + L->settable(-3, true); } void * LuaObject::getme(Lua * L, int i) { @@ -483,7 +529,7 @@ void * LuaObject::getme(Lua * L, int i) { if (L->istable(i)) { L->push("__obj"); - L->gettable(i); + L->gettable(i, true); if (!(r = L->touserdata())) { L->error("Lua object already destroyed, or table is not an object."); } @@ -519,7 +565,7 @@ int LuaStatics::destructor(lua_State * _L) { delete b; L->push("__obj"); L->push((void *) 0); - L->settable(); + L->settable(-3, true); printm(M_INFO, "Destructing an object from LUA\n"); return 0; } diff --git a/lib/Buffer.cc b/lib/Buffer.cc index 061064c..414d97c 100644 --- a/lib/Buffer.cc +++ b/lib/Buffer.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: Buffer.cc,v 1.20 2003-12-04 04:09:02 pixel Exp $ */ +/* $Id: Buffer.cc,v 1.21 2003-12-10 02:59:31 pixel Exp $ */ #include #ifdef HAVE_CONFIG_H @@ -88,7 +88,10 @@ bool Buffer::CanWrite() const { } String Buffer::GetName() const { - return "Buffer"; + if (seekable) + return "Buffer"; + else + return "Fifo"; } Buffer Buffer::operator=(const Buffer & b) { diff --git a/lib/LuaHandle.cc b/lib/LuaHandle.cc index 373066f..5d558d1 100644 --- a/lib/LuaHandle.cc +++ b/lib/LuaHandle.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: LuaHandle.cc,v 1.7 2003-12-07 04:44:38 pixel Exp $ */ +/* $Id: LuaHandle.cc,v 1.8 2003-12-10 02:59:31 pixel Exp $ */ #include "LuaHandle.h" @@ -476,7 +476,7 @@ int sLuaHandle::setz(lua_State * _L) { h->SetZ(z); - return 1; + return 0; } int sLuaHandle::seek(lua_State * _L) { -- cgit v1.2.3