diff options
Diffstat (limited to 'src/lua/tolua_rg.c')
-rw-r--r-- | src/lua/tolua_rg.c | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/src/lua/tolua_rg.c b/src/lua/tolua_rg.c deleted file mode 100644 index 4337e9f9..00000000 --- a/src/lua/tolua_rg.c +++ /dev/null @@ -1,243 +0,0 @@ -/* tolua: register functions -** Support code for Lua bindings. -** Written by Waldemar Celes -** TeCGraf/PUC-Rio -** Jul 1998 -** $Id: tolua_rg.c,v 1.2 2001/11/26 23:00:27 darkgod Exp $ -*/ - -/* This code is free software; you can redistribute it and/or modify it. -** The software provided hereunder is on an "as is" basis, and -** the author has no obligation to provide maintenance, support, updates, -** enhancements, or modifications. -*/ - -#include <stdio.h> - -#include "tolua.h" -#include "tolua_rg.h" -#include "tolua_tm.h" -#include "tolua_tt.h" - -void tolua_globalvar (lua_State* L, char* name, lua_CFunction get, lua_CFunction set) -{ - lua_newtable(L); - lua_pushstring(L,".get"); - lua_pushcfunction(L,get); - lua_settable(L,-3); - if (set) - { - lua_pushstring(L,".set"); - lua_pushcfunction(L,set); - lua_settable(L,-3); - } - lua_pushvalue(L,-1); /* duplicate top */ - lua_setglobal(L,name); - toluaI_tm_global(L,lua_gettop(L)); - lua_pop(L,1); -} - -static int toluaI_const_global_array (lua_State* L) -{ - lua_error(L,"value of const array cannot be changed"); - return 0; -} - - -void tolua_globalarray (lua_State* L,char* name, lua_CFunction get, lua_CFunction set) -{ - int tag = lua_newtag(L); - lua_newtable(L); - lua_settag(L,tag); - lua_setglobal(L,name); - - lua_pushcfunction(L,get); - lua_settagmethod(L,tag,"gettable"); - if (set) - lua_pushcfunction(L,set); - else - lua_pushcfunction(L,toluaI_const_global_array); - lua_settagmethod(L,tag,"settable"); -} - -void tolua_tablevar -(lua_State* L, char* table, char* name, lua_CFunction get, lua_CFunction set) -{ - lua_getglobal(L,table); - - lua_pushstring(L,".get"); - lua_gettable(L,-2); - lua_pushstring(L,name); - lua_pushcfunction(L,get); - lua_settable(L,-3); - lua_pop(L,1); - if (set) - { - lua_pushstring(L,".set"); - lua_gettable(L,-2); - lua_pushstring(L,name); - lua_pushcfunction(L,set); - lua_settable(L,-3); - lua_pop(L,1); - } - - lua_pop(L,1); -} - -static int toluaI_get_array (lua_State* L) -{ - void* self = tolua_getuserdata(L,1,0); - const char* field = tolua_getstring(L,2,0); - - if (!field) - tolua_error(L,"invalid 'field' in accessing array"); - if (!self) - { - static char msg[BUFSIZ]; - sprintf(msg,"invalid 'self' in accessing array '%s'",field); - tolua_error(L,msg); - } - toluaI_getregistry(L,"tolua_tbl_itype"); - lua_pushnumber(L,lua_tag(L,1)); - lua_gettable(L,-2); - lua_getglobal(L,lua_tostring(L,-1)); - lua_pushstring(L,".array"); - lua_gettable(L,-2); - lua_pushvalue(L,2); /* field */ - lua_gettable(L,-2); - lua_pushstring(L,".self"); - lua_pushvalue(L,1); /* self */ - lua_rawset(L,-3); - return 1; -} - -static int toluaI_const_array (lua_State* L) -{ - lua_error(L,"value of const field cannot be changed"); - return 0; -} - -void tolua_tablearray -(lua_State* L, char* table, char* name, lua_CFunction get, lua_CFunction set) -{ - int tag = lua_newtag(L); - lua_getglobal(L,table); - lua_pushstring(L,".array"); - lua_rawget(L,-2); - lua_pushstring(L,name); - lua_newtable(L); - lua_settag(L,tag); - lua_settable(L,-3); - lua_pop(L,2); - - lua_pushcfunction(L,get); - lua_settagmethod(L,tag,"gettable"); - if (set) - lua_pushcfunction(L,set); - else - lua_pushcfunction(L,toluaI_const_array); - lua_settagmethod(L,tag,"settable"); - - tolua_tablevar(L,table,name,toluaI_get_array,NULL); -} - -void tolua_module (lua_State* L, char* name) -{ - lua_getglobal(L,name); - if (!lua_istable(L,-1)) - { - lua_newtable(L); - lua_pushstring(L,".get"); - lua_newtable(L); - lua_settable(L,-3); - lua_pushstring(L,".set"); - lua_newtable(L); - lua_settable(L,-3); - lua_pushvalue(L,-1); /* duplicate top */ - lua_setglobal(L,name); - toluaI_tm_module(L,lua_gettop(L)); - lua_pop(L,1); - } - lua_pop(L,1); -} - -void tolua_cclass (lua_State* L, char* name, char* base) -{ - int t; - lua_newtable(L); - lua_pushstring(L,".get"); - lua_newtable(L); - lua_settable(L,-3); - lua_pushstring(L,".set"); - lua_newtable(L); - lua_settable(L,-3); - lua_pushstring(L,".array"); - lua_newtable(L); - lua_settable(L,-3); - if (*base != 0) - { - lua_pushstring(L,".base"); - lua_getglobal(L,base); - lua_rawset(L,-3); - } - lua_pushvalue(L,-1); /* duplicate top */ - lua_setglobal(L,name); - t = lua_gettop(L); - toluaI_tm_class(L,t,name); - toluaI_tt_class(L,t,name,base); - lua_pop(L,1); -} - - -void tolua_function (lua_State* L, char* parent, char* name, lua_CFunction func) -{ - if (parent==NULL) - { - lua_pushcfunction(L,func); - lua_setglobal(L,name); - } - else - { - lua_getglobal(L,parent); - lua_pushstring(L,name); - lua_pushcfunction(L,func); - lua_settable(L,-3); - lua_pop(L,1); - } -} - -void tolua_constant (lua_State* L, char* parent, char* name, long value) -{ - if (parent==NULL) - { - lua_pushnumber(L,value); - lua_setglobal(L,name); - } - else - { - lua_getglobal(L,parent); - lua_pushstring(L,name); - lua_pushnumber(L,value); - lua_settable(L,-3); - lua_pop(L,1); - } -} - -void toluaI_setregistry (lua_State* L, char* field) -{ - lua_getregistry(L); - lua_insert(L,-2); - lua_pushstring(L,field); - lua_insert(L,-2); - lua_settable(L,-3); - lua_pop(L,1); -} - -void toluaI_getregistry (lua_State* L, char* field) -{ - lua_getregistry(L); - lua_pushstring(L,field); - lua_gettable(L,-2); - lua_insert(L,-2); - lua_pop(L,1); -} |