static void copyfromdata(lua_State *L) { lua_getfield(L, LUA_REGISTRYINDEX, PROXYCACHE); lua_pushvalue(L, 1); // PROXYCACHE, table if (lua_rawget(L, -2) != LUA_TUSERDATA) { luaL_error(L, "Invalid proxy table %p", lua_topointer(L, 1)); } struct proxy * p = lua_touserdata(L, -1); lua_pop(L, 2); copytable(L, 1, p); lua_pushnil(L); lua_setmetatable(L, 1); // remove metatable }
int main(int argc,char **argv) #endif { int x=0; int a=0; RDArsrc *mainrsrc=NULL; char valid_args=TRUE; char *copyfrommodule=NULL; char *copyfromname=NULL; char *copytomodule=NULL; char *copytoname=NULL; if(InitializeSubsystems(argc,argv,module,"DEFINE TABLES")) { return; } mainrsrc=RDArsrcNEW(module,"DEFINE TABLES"); x=0; if(modlst!=NULL) freeapplib(modlst); modlst=APPlibNEW(); addlstrsrc(mainrsrc,"MODULE LIST",&x,TRUE,domodulelist, modlst->numlibs,&modlst->libs,NULL); x=0; if(tblavl!=NULL) { freeapplib(tblavl); tblavl=NULL; } tblavl=APPlibNEW(); addlstrsrc(mainrsrc,"TABLES AVAILABLE",&x,TRUE,setvaluesx, tblavl->numlibs,&tblavl->libs,NULL); addstdrsrc(mainrsrc,"TITLE 1",VARIABLETEXT,0,NULL,FALSE); addstdrsrc(mainrsrc,"TITLE 2",VARIABLETEXT,0,NULL,FALSE); addsctrsrc(mainrsrc,"DESCRIPTION",0,NULL,FALSE); getvrtentries(mainrsrc); if(argc<4) { if(argc>1) { for(x=0;x<modlst->numlibs;++x) { if(!RDAstrcmp(modlst->libs[x],argv[1])) break; } if(x>=modlst->numlibs) x=0; FINDRSCSETINT(mainrsrc,"MODULE LIST",x); domodulelist(mainrsrc); } if(argc>2) { for(x=0;x<tblavl->numlibs;++x) { if(!RDAstrcmp(tblavl->libs[x],argv[2])) break; } if(x>=tblavl->numlibs) x=0; FINDRSCSETINT(mainrsrc,"TABLES AVAILABLE",x); setvaluesx(mainrsrc); } addbtnrsrc(mainrsrc,"ADD",TRUE,newtable,NULL); addbtnrsrc(mainrsrc,"SELECT",TRUE,oktable,NULL); addbtnrsrc(mainrsrc,"PRINT",TRUE,print_tablescb,NULL); addrfexrsrc(mainrsrc,"QUIT",TRUE,quitdfvir,NULL); addbtnrsrc(mainrsrc,"DELETE",TRUE,deletevirtest,NULL); addbtnrsrc(mainrsrc,"HELP",TRUE,screenhelp,NULL); addbtnrsrc(mainrsrc,"PRINT RESOURCES",TRUE,printrsrcs,NULL); APPmakescrn(mainrsrc,TRUE,quitdfvir,NULL,TRUE); } else if(argc>3 && !RDAstrcmp(argv[3],"-c")) { for(a=4;a<argc;) { if(!RDAstrcmp(argv[a],"-copy")) { if(argc>(a+2)) { copytomodule=stralloc(argv[a+1]); copytoname=stralloc(argv[a+2]); a+=3; copyfrommodule=stralloc(argv[1]); copyfromname=stralloc(argv[2]); } else { valid_args=FALSE; break; } } else { valid_args=FALSE; break; } } if(valid_args==TRUE) { copytable(NULL,copyfrommodule,copyfromname,copytomodule,copytoname); } else { print_help(); } if(copyfrommodule!=NULL) Rfree(copyfrommodule); if(copyfromname!=NULL) Rfree(copyfromname); if(copytomodule!=NULL) Rfree(copytomodule); if(copytoname!=NULL) Rfree(copytoname); } else { print_help(); } }