aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/io/ifilesystem.cpp
blob: 9d12b22e15e2c17446e3245ce1489db80616f07d (plain)
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);//
}