diff --git a/src/c/lnative.c b/src/c/lnative.c index 32df7be..61430d2 100644 --- a/src/c/lnative.c +++ b/src/c/lnative.c @@ -16,6 +16,49 @@ #include #include +void logn (const char *message) { + FILE *file; + + file = fopen("lupi.log", "a"); + + if (file == NULL) { + return; + } else { + fputs(message, file); + fputs("\n", file); + fclose(file); + } +} + +void logi (int message) { + FILE *file; + + file = fopen("lupi.log", "a"); + + if (file == NULL) { + return; + } else { + char str[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + sprintf(str, "%d", message); + fputs(str, file); + fclose(file); + } +} + +void logm (const char *message) { + FILE *file; + + file = fopen("lupi.log", "a"); + + if (file == NULL) { + return; + } else { + fputs(message, file); + fclose(file); + } +} + + static int l_sleep (lua_State *L) { unsigned int t = lua_tonumber(L, 1); usleep(t); @@ -73,14 +116,20 @@ static int l_fs_spaceUsed (lua_State *L) { static int l_fs_open (lua_State *L) { const char* fname = lua_tostring(L, 1); const char* mode = lua_tostring(L, 2); + logm("Open file: "); + logn(fname); int m = 0; if(mode[0] == 'r') m = O_RDONLY; else if(mode[0] == 'w') m = O_WRONLY | O_CREAT /*| O_DIRECT*/; else if(mode[0] == 'a') m = O_WRONLY | O_APPEND | O_CREAT /*| O_DIRECT*/; else return 0; int fd = open(fname, m, 644); - if(fd == -1) return 0; + if(fd == -1) return 0; + logm("FD "); + logi(fd); + logm(" for "); + logn(fname); lua_pushnumber(L, fd); return 1; } @@ -145,8 +194,10 @@ static int l_fs_list (lua_State *L) { lua_newtable(L); int n = 1; while ((ent = readdir(dir)) != NULL) { //TODO: Check if it should be freed - lua_pushstring(L, ent->d_name); - lua_rawseti(L, -2, n++); + if(strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0) { + lua_pushstring(L, ent->d_name); + lua_rawseti(L, -2, n++); + } } closedir(dir); } else { @@ -213,11 +264,18 @@ static int l_fs_size (lua_State *L) { } static int l_fs_read (lua_State *L) { - int fd = lua_tonumber(L, 1); - int count = lua_tonumber(L, 2); + unsigned int fd = lua_tonumber(L, 1); + unsigned int count = lua_tonumber(L, 2); void* buf = malloc(count); size_t res = read(fd, buf, count); - if(res != -1) { + logm("read("); + logi(fd); + logm(") bytes:"); + logi(res); + logm(" of "); + logi(count); + logn(""); + if(res > 0) { lua_pushlstring(L, buf, res); free(buf); return 1; @@ -267,6 +325,7 @@ void luanative_start(lua_State *L) { pushctuple(L, "fs_write", l_fs_write); pushctuple(L, "fs_spaceTotal", l_fs_spaceTotal); pushctuple(L, "fs_rename", l_fs_rename); + pushctuple(L, "fs_list", l_fs_list); pushctuple(L, "fs_lastModified", l_fs_lastModified); pushctuple(L, "fs_remove", l_fs_remove); pushctuple(L, "fs_close", l_fs_close); diff --git a/src/lua/core/computer.lua b/src/lua/core/computer.lua index 9510301..3287952 100644 --- a/src/lua/core/computer.lua +++ b/src/lua/core/computer.lua @@ -10,10 +10,21 @@ function api.pushSignal(...) --FIXME: ASAP: Implement end +function api.pullSignal(timeout) + if type(timeout) == "number" then + native.sleep(timeout * 1000000); + end + --print(debug.traceback()) +end + +function api.uptime() + return native.uptime() +end + function api.beep(freq, time) - if not freq then freq = 1000 end - if not time then time = 0.2 end - native.beep(freq, time * 1000) + if not freq then freq = 1000 end + if not time then time = 0.2 end + native.beep(freq, time * 1000) end return computer \ No newline at end of file diff --git a/src/lua/core/filesystem.lua b/src/lua/core/filesystem.lua index 9da216c..12e52cc 100644 --- a/src/lua/core/filesystem.lua +++ b/src/lua/core/filesystem.lua @@ -144,6 +144,9 @@ function filesystem.register(basePath) return native.fs_size(realpath(path)) end function fs.read(handle, count) --FIXME: Hudgeread, fix in general + if count == math.huge then + count = 4294967295 + end checkArg(1, handle, "number") checkArg(2, count, "number") return native.fs_read(handle, count) diff --git a/src/lua/core/textgpu.lua b/src/lua/core/textgpu.lua index ff44433..d49cd38 100644 --- a/src/lua/core/textgpu.lua +++ b/src/lua/core/textgpu.lua @@ -110,7 +110,7 @@ function textgpu.start() checkArg(3, w, "number") checkArg(4, h, "number") checkArg(5, ch, "string") - ch = ch:sub(1, 1):rep(w) + ch = ch:sub(1, 1):rep(math.floor(w)) for i=1, h do gpu.set(x, y + i - 1, ch) end @@ -122,6 +122,7 @@ function textgpu.start() gpu.setBackground(0x000000) modules.component.api.register(nil, "gpu", gpu) + modules.component.api.register(nil, "screen", {getKeyboards = function() return {} end}) --verry dummy screen, TODO: make it better deadhooks[#deadhooks + 1] = function() io.write("\x1b[?25h") --Enable cursor on quit