void lua_sr_kemi_register_modules(lua_State *L) { int n; int i; sr_kemi_module_t *kmods; n = sr_kemi_modules_size_get(); kmods = sr_kemi_modules_get(); for(i=1; i<n; i++) { lua_sr_kemi_register_module(L, &kmods[i].mname, i); } }
SQInteger sqlang_open_KSR(HSQUIRRELVM J) { SQRegFunction *_sr_crt_J_KSRMethods = NULL; sr_kemi_module_t *emods = NULL; int emods_size = 0; int i; int k; int n; char mname[128]; char malias[256]; _sr_J_KSRMethods = malloc(SR_SQLANG_KSR_METHODS_SIZE * sizeof(SQRegFunction)); if(_sr_J_KSRMethods==NULL) { LM_ERR("no more pkg memory\n"); return 0; } memset(_sr_J_KSRMethods, 0, SR_SQLANG_KSR_METHODS_SIZE * sizeof(SQRegFunction)); emods_size = sr_kemi_modules_size_get(); emods = sr_kemi_modules_get(); n = 0; _sr_crt_J_KSRMethods = _sr_J_KSRMethods; if(emods_size==0 || emods[0].kexp==NULL) { LM_ERR("no kemi exports registered\n"); return 0; } sq_pushroottable(J); /* stack[1] */ sq_pushstring(J, "KSR", -1); /* stack[2] */ sq_newtable(J); /* stack[3] */ for(i=0; emods[0].kexp[i].func!=NULL; i++) { LM_DBG("exporting KSR.%s(...)\n", emods[0].kexp[i].fname.s); _sr_crt_J_KSRMethods[i].name = emods[0].kexp[i].fname.s; _sr_crt_J_KSRMethods[i].f = sr_kemi_sqlang_export_associate(&emods[0].kexp[i]); if(_sr_crt_J_KSRMethods[i].f == NULL) { LM_ERR("failed to associate kemi function with sqlang export\n"); free(_sr_J_KSRMethods); _sr_J_KSRMethods = NULL; goto error; } _sr_crt_J_KSRMethods[i].nparamscheck = 0; snprintf(malias, 254, "%s", emods[0].kexp[i].fname.s); sqlang_register_global_func(J, _sr_crt_J_KSRMethods[i].f, malias); n++; } /* special modules - pv.get(...) can return int or str */ sq_pushstring(J, "pv", -1); /* stack[4] */ sq_newtable(J); /* stack[5] */ i=0; while(_sr_kemi_pv_J_Map[i].name!=0) { snprintf(malias, 254, "%s", _sr_kemi_pv_J_Map[i].name); sqlang_register_global_func(J, _sr_kemi_pv_J_Map[i].f, malias); i++; } sq_newslot(J, -3, SQFalse); sq_pushstring(J, "x", -1); /* stack[4] */ sq_newtable(J); /* stack[5] */ i=0; while(_sr_kemi_x_J_Map[i].name!=0) { snprintf(malias, 254, "%s", _sr_kemi_x_J_Map[i].name); sqlang_register_global_func(J, _sr_kemi_x_J_Map[i].f, malias); i++; } sq_newslot(J, -3, SQFalse); /* registered kemi modules */ if(emods_size>1) { for(k=1; k<emods_size; k++) { n++; _sr_crt_J_KSRMethods = _sr_J_KSRMethods + n; snprintf(mname, 128, "%s", emods[k].kexp[0].mname.s); sq_pushstring(J, mname, -1); /* stack[4] */ sq_newtable(J); /* stack[5] */ for(i=0; emods[k].kexp[i].func!=NULL; i++) { LM_DBG("exporting %s.%s(...)\n", mname, emods[k].kexp[i].fname.s); _sr_crt_J_KSRMethods[i].name = emods[k].kexp[i].fname.s; _sr_crt_J_KSRMethods[i].f = sr_kemi_sqlang_export_associate(&emods[k].kexp[i]); if(_sr_crt_J_KSRMethods[i].f == NULL) { LM_ERR("failed to associate kemi function with func export\n"); free(_sr_J_KSRMethods); _sr_J_KSRMethods = NULL; goto error; } _sr_crt_J_KSRMethods[i].nparamscheck = 0; snprintf(malias, 256, "%s", _sr_crt_J_KSRMethods[i].name); sqlang_register_global_func(J, _sr_crt_J_KSRMethods[i].f, malias); n++; } sq_newslot(J, -3, SQFalse); LM_DBG("initializing kemi sub-module: %s (%s)\n", mname, emods[k].kexp[0].mname.s); } } sq_newslot(J, -3, SQFalse); sq_pop(J ,1); /* pops the root table */ LM_DBG("module 'KSR' has been initialized\n"); return 1; error: sq_pop(J ,1); /* pops the root table */ return 0; }
void lua_sr_kemi_register_libs(lua_State *L) { luaL_Reg *_sr_crt_KSRMethods = NULL; sr_kemi_module_t *emods = NULL; int emods_size = 0; int i; int k; int n; char mname[128]; #if 0 /* dynamic lookup on function name */ lua_sr_kemi_register_core(L); lua_sr_kemi_register_modules(L); #endif _sr_KSRMethods = malloc(SR_LUA_KSR_METHODS_SIZE * sizeof(luaL_Reg)); if(_sr_KSRMethods==NULL) { LM_ERR("no more pkg memory\n"); return; } memset(_sr_KSRMethods, 0, SR_LUA_KSR_METHODS_SIZE * sizeof(luaL_Reg)); emods_size = sr_kemi_modules_size_get(); emods = sr_kemi_modules_get(); n = 0; _sr_crt_KSRMethods = _sr_KSRMethods; if(emods_size==0 || emods[0].kexp==NULL) { LM_ERR("no kemi exports registered\n"); return; } for(i=0; emods[0].kexp[i].func!=NULL; i++) { LM_DBG("exporting KSR.%s(...)\n", emods[0].kexp[i].fname.s); _sr_crt_KSRMethods[i].name = emods[0].kexp[i].fname.s; _sr_crt_KSRMethods[i].func = sr_kemi_lua_export_associate(&emods[0].kexp[i]); if(_sr_crt_KSRMethods[i].func == NULL) { LM_ERR("failed to associate kemi function with lua export\n"); free(_sr_KSRMethods); _sr_KSRMethods = NULL; return; } n++; } luaL_openlib(L, "KSR", _sr_crt_KSRMethods, 0); /* special modules - pv.get(...) can return int or str */ luaL_openlib(L, "KSR.pv", _sr_pv_Map, 0); luaL_openlib(L, "KSR.x", _sr_kemi_x_Map, 0); /* registered kemi modules */ if(emods_size>1) { for(k=1; k<emods_size; k++) { n++; _sr_crt_KSRMethods += n; snprintf(mname, 128, "KSR.%s", emods[k].kexp[0].mname.s); for(i=0; emods[k].kexp[i].func!=NULL; i++) { LM_DBG("exporting %s.%s(...)\n", mname, emods[k].kexp[i].fname.s); _sr_crt_KSRMethods[i].name = emods[k].kexp[i].fname.s; _sr_crt_KSRMethods[i].func = sr_kemi_lua_export_associate(&emods[k].kexp[i]); if(_sr_crt_KSRMethods[i].func == NULL) { LM_ERR("failed to associate kemi function with func export\n"); free(_sr_KSRMethods); _sr_KSRMethods = NULL; return; } n++; } luaL_openlib(L, mname, _sr_crt_KSRMethods, 0); LM_DBG("initializing kemi sub-module: %s (%s)\n", mname, emods[k].kexp[0].mname.s); } } LM_DBG("module 'KSR' has been initialized\n"); }