1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#include "ifilesystem.hpp"
using namespace irr;
using namespace io;
extern IrrlichtDevice* device;
// io.list()
int listfilesin(lua_State *L){
IFileSystem *fs = device->getFileSystem();
IFileList *fl = fs->createFileList();
unsigned long fc = fl->getFileCount();
unsigned long i;
const char *path;
lua_newtable(L);
for(i = 0; i < fc; i++){
path = fl->getFileName(i).c_str();
lua_pushnumber(L,i + 1);
lua_pushstring(L,path);
lua_settable(L,-3);
}
return 1;
}
// io.cd("directory")
int changedirectory(lua_State *L){
IFileSystem *fs = device->getFileSystem();
const char *dir = lua_tostring(L,-1);
lua_pop(L,1);
fs->changeWorkingDirectoryTo(path(dir));
return 0;
}
// io.log("text",level)
// io.log("text",level[,"hint"])
int logmessage(lua_State *L){
ILogger *log = device->getLogger();
const char *hint_c = "";
const char *text_c = "";
int nargs = lua_gettop(L);
if(nargs > 2){
hint_c = lua_tostring(L,-1);
lua_pop(L,1);//"text",level
}
ELOG_LEVEL ll = (ELOG_LEVEL)lua_tointeger(L,-1);//"text",level
lua_pop(L,1);//"text"
text_c = lua_tostring(L,-1);//"text"
lua_pop(L,1);//
log->log(text_c,hint_c,ll);
return 0;
}
//io.set_log_level(level)
int setloglevel(lua_State *L){
ILogger *log = device->getLogger();
ELOG_LEVEL ll = (ELOG_LEVEL)lua_tointeger(L,-1);
log->setLogLevel(ll);
return 0;
}
static const luaL_reg ifilesystem_f[] = {
{"log", logmessage},
{"set_log_level", setloglevel},
{"list", listfilesin},
{"cd", changedirectory},
{0,0},
};
static const luaL_reg ifilesystem_m[] = {
{0,0},
};
void ifilesystem_register(lua_State* L){
luaL_newmetatable(L, "io.ifilesystem");//{m_iguibutton}
lua_newtable(L);//{m_iguibutton},{}
luaL_register(L,NULL,ifilesystem_m);
lua_setfield(L,-2,"__index");//{m_iguibutton}
lua_pop(L,1);
printf("set io global\n");
lua_getglobal(L,"io");//{io}
luaL_register(L,NULL,ifilesystem_f);
lua_pushnumber(L,ELL_DEBUG);
lua_setfield(L,-2,"LOG_DEBUG");
lua_pushnumber(L,ELL_INFORMATION);
lua_setfield(L,-2,"LOG_INFO");
lua_pushnumber(L,ELL_WARNING);
lua_setfield(L,-2,"LOG_WARN");
lua_pushnumber(L,ELL_ERROR);
lua_setfield(L,-2,"LOG_ERROR");
lua_pushnumber(L,ELL_NONE);
lua_setfield(L,-2,"LOG_NONE");
lua_pop(L,1);//
}
|