int luax_init() { GStatBuf st; const char *config_lua; const char *cardpeekrc_lua; LUA_STATE= x_lua_begin(); luaopen_bytes(LUA_STATE); luaopen_asn1(LUA_STATE); luaopen_bit(LUA_STATE); luaopen_card(LUA_STATE); luaopen_log(LUA_STATE); luaopen_crypto(LUA_STATE); luaopen_nodes(LUA_STATE); luaopen_iconv(LUA_STATE); luaopen_ui(LUA_STATE); lua_newtable(LUA_STATE); lua_setglobal(LUA_STATE,"cardpeek"); config_lua = path_config_get_string(PATH_CONFIG_FILE_CONFIG_LUA); cardpeekrc_lua = path_config_get_string(PATH_CONFIG_FILE_CARDPEEK_RC); if (chdir(path_config_get_string(PATH_CONFIG_FOLDER_CARDPEEK))==-1) { log_printf(LOG_ERROR,"Could not change to directory '%s'",path_config_get_string(PATH_CONFIG_FOLDER_CARDPEEK)); return -1; } if (g_stat(config_lua,&st)==0) { log_printf(LOG_DEBUG,"Loading configuration script %s",config_lua); run_file(LUA_STATE,config_lua); } if (g_stat(cardpeekrc_lua,&st)==0) { log_printf(LOG_DEBUG,"Running user configuration script %s",cardpeekrc_lua); run_file(LUA_STATE,cardpeekrc_lua); } return 0; }
int sys_start(int argc, char *argv[]) { int status; const char* f; lua_State *L; if (argc<2) { printf("%s: <filename.lua>\n", argv[0]); return 1; } s_init(); log_print("sound> initialized\n"); L = lua_open(); /*luaopen_base(L);*/ luaL_openlibs(L); luaopen_sys(L); luaopen_log(L); luaopen_mat4(L); luaopen_quat(L); luaopen_vec3(L); luaopen_event(L); luaopen_image(L); luaopen_render(L); luaopen_shader(L); luaopen_sound(L); luaopen_net(L); luaopen_util(L); luaopen_font(L); luaopen_md2(L); //luaopen_blender(L); lua_getglobal(L, "package"); if (LUA_TTABLE != lua_type(L, 1)) { log_print("lua> 'package' is not a table\n"); return 1; } lua_getfield(L, 1, "path"); if (LUA_TSTRING != lua_type(L, 2)) { log_print("lua> 'package.path' is not a string\n"); lua_pop(L, 1); return 1; } lua_pop(L, 1); #if defined(__IPHONE__) f = full_path(); #else f = "."; #endif /* package.path = f .. "/?.lua" */ lua_pushlstring(L, f, strlen(f)); lua_pushliteral(L, "/?.lua"); lua_concat(L, 2); lua_setfield(L, 1, "path"); lua_bootstrap(L, f); #if defined(__IPHONE__) f = full_path_to_file(argv[1]); #else f = argv[1]; #endif log_print("lua> initialized\n"); printf("lua> loading %s\n", f); if (luaL_loadfile(L,f)==0) { /* function runme = file_content */ lua_setglobal(L, "runme"); lua_getglobal(L, "runme"); status = lua_pcall(L,0,LUA_MULTRET,0); assert(0 == report(L, status)); if (lua_gettop(L) > 0) { status = lua_toboolean(L, -1); if (!status) { printf("lua> %s returned false\n", f); sys_quit(); } } log_print("lua> loaded\n"); } else { printf("lua> unable to load %s\n",f); report(L, status); sys_quit(); } lua_state = L; /* TODO: Double check this stuff some day when bored. */ return status > 0 ? false : true; }