From d6b784814feb908f275db58021b2044a151abe1a Mon Sep 17 00:00:00 2001 From: Egor00f Date: Mon, 7 Apr 2025 19:22:59 +0500 Subject: [PATCH] add more files... && create sockaddr struct --- .vscode/settings.json | 4 +- Makefile | 65 +++--- doc/manual.md | 114 +++++++++++ src/graphic.c | 181 +++++++++++++++++ src/graphic.h | 88 ++++++++ src/socket.c | 204 ------------------- src/sockets/optstruct.c | 0 src/sockets/sockaddr.c | 49 +++++ src/sockets/sockaddr.h | 12 ++ src/sockets/socket.c | 155 ++++++++++++++ src/sockets/socket.h | 91 +++++++++ src/sockets/socket_lua.c | 246 ++++++++++++++++++++++ src/{socket.h => sockets/socket_lua.h} | 11 +- src/syscalls.c | 269 +------------------------ src/syscalls.h | 2 +- src/systemColors.c | 3 - 16 files changed, 993 insertions(+), 501 deletions(-) create mode 100644 src/graphic.c create mode 100644 src/graphic.h delete mode 100644 src/socket.c create mode 100644 src/sockets/optstruct.c create mode 100644 src/sockets/sockaddr.c create mode 100644 src/sockets/sockaddr.h create mode 100644 src/sockets/socket.c create mode 100644 src/sockets/socket.h create mode 100644 src/sockets/socket_lua.c rename src/{socket.h => sockets/socket_lua.h} (60%) diff --git a/.vscode/settings.json b/.vscode/settings.json index cb5a3d1..574b473 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,8 @@ "editor.insertSpaces": false, "files.associations": { "stdlib.h": "c", - "ksys.h": "c" + "ksys.h": "c", + "socket.h": "c" }, "cSpell.words": [ "ksys", @@ -11,6 +12,7 @@ "LUALIB_API", "luaL_newlib", "metatable", + "tonumber", "luaL_newmetatable", "luaL_setmetatable", "lua_createtable", diff --git a/Makefile b/Makefile index a5b5588..db0bb50 100644 --- a/Makefile +++ b/Makefile @@ -1,35 +1,38 @@ LUA_V = 54 -CC=kos32-gcc -LD=kos32-ld -STRIP=kos32-strip -OBJCOPY=kos32-objcopy -STD=-std=gnu99 -CFLAGS=$(SYSCFLAGS) -O2 -Wall -Wextra $(STD) $(MYCFLAGS) -LDFLAGS=$(SYSLDFLAGS) $(MYLDFLAGS) -LIBS=$(SYSLIBS) $(MYLIBS) $(TOOLCHAIN_PATH)/mingw32/lib/lua$(LUA_V).dll.a +CC = kos32-gcc +LD = kos32-ld +STRIP = kos32-strip +OBJCOPY = kos32-objcopy +STD = -std=gnu11 +CFLAGS = $(SYSCFLAGS) -O2 -Wall -Wextra $(STD) $(MYCFLAGS) +LDFLAGS = $(SYSLDFLAGS) $(MYLDFLAGS) +LIBS = $(SYSLIBS) $(MYLIBS) $(TOOLCHAIN_PATH)/mingw32/lib/lua$(LUA_V).dll.a ifeq ($(OS), Windows_NT) - TOOLCHAIN_PATH=C:/MinGW/msys/1.0/home/autobuild/tools/win32 + TOOLCHAIN_PATH = C:/MinGW/msys/1.0/home/autobuild/tools/win32 else - TOOLCHAIN_PATH=/home/autobuild/tools/win32 + TOOLCHAIN_PATH = /home/autobuild/tools/win32 endif -KOLIBRIOS_REPO=../kolibrios +KOLIBRIOS_REPO = ../kolibrios -SDK_DIR=$(KOLIBRIOS_REPO)/contrib/sdk -NewLib_DIR=$(SDK_DIR)/sources/newlib -SYSCFLAGS=-fno-ident -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -I$(NewLib_DIR)/libc/include -I$(abspath .)/lua/src -SYSLDFLAGS=--image-base 0 -Tapp-dynamic.lds -SYSLIBS=-nostdlib -L $(SDK_DIR)/lib -L$(TOOLCHAIN_PATH)/lib -L$(TOOLCHAIN_PATH)/mingw32/lib -lgcc -lc.dll -ldll -MYCFLAGS= -MYLDFLAGS= -MYLIBS= -MYOBJS= +SDK_DIR = $(KOLIBRIOS_REPO)/contrib/sdk +NewLib_DIR = $(SDK_DIR)/sources/newlib +SYSCFLAGS = -fno-ident -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -I$(NewLib_DIR)/libc/include -I$(abspath .)/lua/src +SYSLDFLAGS = --image-base 0 -Tapp-dynamic.lds +SYSLIBS = -nostdlib -L $(SDK_DIR)/lib -L$(TOOLCHAIN_PATH)/lib -L$(TOOLCHAIN_PATH)/mingw32/lib -lgcc -lc.dll -ldll +MYCFLAGS = +MYLDFLAGS = +MYLIBS = +MYOBJS = -ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o + +Socket_O = src/sockets/socket.o src/sockets/socket_lua.o src/sockets/sockaddr.o + +ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) syscalls.dll: $(ALL_O) $(CC) -shared -T dll.lds --entry _DllStartup -o $@ $(ALL_O) $(LIBS) @@ -37,11 +40,21 @@ syscalls.dll: $(ALL_O) clean: rm -f $(ALL_O) syscalls.dll +# Depends -src/syscalls.o: src/syscalls.c src/syscalls.h src/systemColors.h src/ARP_entry.h src/scancodes.h -src/ARP_entry.o: src/ARP_entry.c src/ARP_entry.h src/debug.h -src/systemColors.o: src/systemColors.c src/systemColors.h src/debug.h -src/socket.o: src/socket.c src/socket.h +## Sources -src/socket.h: src/syscalls.h +src/syscalls.o: src/syscalls.c src/syscalls.h src/systemColors.h src/ARP_entry.h src/scancodes.h src/sockets/socket_lua.h src/graphic.h +src/ARP_entry.o: src/ARP_entry.c src/ARP_entry.h src/debug.h +src/systemColors.o: src/systemColors.c src/systemColors.h src/debug.h +src/sockets/socket.o: src/sockets/socket.c src/sockets/socket.h +src/sockets/socket_lua.o: src/sockets/socket_lua.c src/sockets/socket_lua.h +src/sockets/sockaddr.o: src/sockets/sockaddr.c src/sockets/sockaddr.h +src/graphic.o: src/graphic.c src/graphic.h + +## headers + +src/graphic.h: src/syscalls.h +src/sockets/socket_lua.h: src/syscalls.h src/sockets/socket.h +src/sockets/sockaddr.h: src/sockets/socket.h src/syscalls.h diff --git a/doc/manual.md b/doc/manual.md index e69de29..de3f666 100644 --- a/doc/manual.md +++ b/doc/manual.md @@ -0,0 +1,114 @@ +# Manual + +```lua +local syscalls = require("syscalls") +``` + + + +## Events + +```lua +syscalls.Event. +``` + + + +## Graphic + + + +## Sockets + +### OpenSocket + +```lua +local socket, err = syscalls.OpenSocket() + +if err then + print("Error", err) +else + print("Ok") +end +``` + +### CloseSocket(socket) + +### PairSocket() + +```lua +local first, second = PairSocket() + +if first then + print("OK") +else + print("Error:", second) +end +``` + +### Bind(socket, address) + +### Listen(socket, backlog) + +### Connect() + +### Accept + +### Receive + +## SetSocketOption + +### GetSocketOption + +### Socket types + +```lua +syscalls.SOCK. +``` + ++ `STREAM` ++ `RAW` ++ `DGRAM` + +### Address families + +```lua +syscalls.AF. +``` + ++ `UNSPEC` ++ `LOCAL` ++ `INET` ++ `INET4` ++ `INET6` + +### IP options + +```lua +syscalls.IP. +``` + ++ `TTL` + +### IP protocols + +```lua +syscalls.IPPROTO. +``` + ++ `IP` ++ `ICMP` ++ `TCP` ++ `UDP` ++ `RAW` + +### Socket options + +```lua +syscalls.SO. +``` + ++ `BINDTODEVICE` ++ `NONBLOCK` + + diff --git a/src/graphic.c b/src/graphic.c new file mode 100644 index 0000000..fe6681c --- /dev/null +++ b/src/graphic.c @@ -0,0 +1,181 @@ +#include "graphic.h" + +/* + Кеш размера экрана. + + Нужно для того чтобы не вызывать систменое прерывание лишний раз (другие функции тоже используют это значение) + + Сомневаюсь что в размер экрана в колибри вообще может меняться без перезагрузки + + обновляется функцией syscalls_updateScreenSize +*/ +static ksys_pos_t syscalls_screenSizeCache = { 0 }; + +inline void syscalls_updateScreenSize() +{ + syscalls_screenSizeCache = _ksys_screen_size(); +} + +int syscalls_drawLine(lua_State* L) +{ + _ksys_draw_line( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + luaL_checkinteger(L, 3), + luaL_checkinteger(L, 4), + luaL_checkinteger(L, 5)); + + return 0; +} + + +static void syscall_drawText(const char* text, uint32_t x, uint32_t y, ksys_color_t color, enum TextScale size, uint32_t len, bool fillBackground, ksys_color_t backgroundColor) +{ + enum DrawTextEncoding + { + cp866_6x9 = 0, + cp866_8x16 = 1, + utf8 = 3, + utf16 = 4 + }; + + enum scale + { + scale_x1 = 0, + scale_x2 = 1, + scale_x3 = 2, + scale_x4 = 3, + scale_x5 = 4, + scale_x6 = 5, + scale_x7 = 6, + scale_x8 = 7 + }; + + color &= 0x00FFFFFF; + + color |= (fillBackground << 30); + + switch (size) + { + case TextScale_SIZE_6x9: + color |= (cp866_8x16 << 28) | (scale_x1 << 24); + break; + case TextScale_SIZE_8x16: + color |= (cp866_8x16 << 28); + break; + case TextScale_SIZE_12x18: + color |= (cp866_6x9 << 28) | (scale_x2 << 24); + break; + case TextScale_SIZE_16x32: + color |= (cp866_8x16 << 28) | (scale_x2 << 24); + break; + case TextScale_SIZE_18x27: + color |= (cp866_6x9 << 28) | (scale_x3 << 24); + break; + case TextScale_SIZE_24x36: + color |= (cp866_6x9 << 28) | (scale_x4 << 24); + break; + case TextScale_SIZE_24x48: + color |= (cp866_8x16 << 28) | (scale_x3 << 24); + break; + case TextScale_SIZE_30x45: + color |= (cp866_6x9 << 28) | (scale_x5 << 24); + break; + case TextScale_SIZE_36x54: + color |= (cp866_6x9 << 28) | (scale_x6 << 24); + break; + case TextScale_SIZE_40x80: + color |= (cp866_8x16 << 28) | (scale_x5 << 24); + break; + case TextScale_SIZE_42x63: + color |= (cp866_6x9 << 28) | (scale_x7 << 24); + break; + case TextScale_SIZE_48x72: + color |= (cp866_6x9 << 28) | (scale_x8 << 24); + break; + case TextScale_SIZE_48x96: + color |= (cp866_8x16 << 28) | (scale_x6 << 24); + break; + case TextScale_SIZE_56x112: + color |= (cp866_8x16 << 28) | (scale_x7 << 24); + break; + case TextScale_SIZE_64x128: + color |= (cp866_8x16 << 28) | (scale_x8 << 24); + break; + default: + break; + }; + + if (len <= 0) + color |= (1 << 31); + + asm_inline( + "int $0x40" ::"a"(4), + "b"((x << 16) | y), + "c"(color), + "d"(text), + "S"(len), + "D"(backgroundColor)); +} + +int syscalls_drawText(lua_State* L) +{ + syscall_drawText( + luaL_checkstring(L, 1), + luaL_checkinteger(L, 2), + luaL_checkinteger(L, 3), + luaL_checkinteger(L, 4), + luaL_optinteger(L, 5, TextScale_SIZE_8x16), + luaL_optinteger(L, 6, 0), + luaL_optinteger(L, 7, 0), + luaL_optinteger(L, 8, 0)); + + return 0; +} + +int syscalls_drawRectangle(lua_State* L) +{ + _ksys_draw_bar( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + luaL_checkinteger(L, 3), + luaL_checkinteger(L, 4), + luaL_checkinteger(L, 5)); + + return 0; +} + +int syscalls_ReadPoint(lua_State* L) +{ + ksys_color_t color; + + if (syscalls_screenSizeCache.val == 0) + syscalls_updateScreenSize(); + + uint32_t x = luaL_checkinteger(L, 1); + uint32_t y = luaL_checkinteger(L, 2); + + asm_inline( + "int $ 0x40" + : "=a"(color) + : "a"(35), "b"(x * syscalls_screenSizeCache.x + y)); + + lua_pushinteger(L, color); + + return 1; +} + +int syscalls_screenSize(lua_State* L) +{ + syscalls_updateScreenSize(); + + lua_createtable(L, 0, 2); + + lua_pushinteger(L, syscalls_screenSizeCache.x); + lua_setfield(L, -2, "x"); + + lua_pushinteger(L, syscalls_screenSizeCache.y); + lua_setfield(L, -2, "y"); + + return 1; +} diff --git a/src/graphic.h b/src/graphic.h new file mode 100644 index 0000000..049a76a --- /dev/null +++ b/src/graphic.h @@ -0,0 +1,88 @@ +#ifndef __GRAPHIC_H__ +#define __GRAPHIC_H__ + +#include +#include "syscalls.h" + +enum TextScale +{ + TextScale_SIZE_6x9, // 1x 6x9 + TextScale_SIZE_8x16, // 1x 8x16 + TextScale_SIZE_12x18, // 2x 6x9 + TextScale_SIZE_16x32, // 2x 8x16 + TextScale_SIZE_18x27, // 3x 6x9 + TextScale_SIZE_24x36, // 4x 6x9 + TextScale_SIZE_24x48, // 3x 8x16 + TextScale_SIZE_30x45, // 5x 6x9 + TextScale_SIZE_32x64, // 4x 8x16 + TextScale_SIZE_36x54, // 6x 6x9 + TextScale_SIZE_40x80, // 5x 8x16 + TextScale_SIZE_42x63, // 7x 6x9 + TextScale_SIZE_48x72, // 8x 6x9 + TextScale_SIZE_48x96, // 6x 8x16 + TextScale_SIZE_56x112, // 7x 8x16 + TextScale_SIZE_64x128 // 8x 8x16 +}; + +int syscalls_drawLine(lua_State* L); +int syscalls_drawText(lua_State* L); +int syscalls_drawRectangle(lua_State* L); +int syscalls_ReadPoint(lua_State* L); +int syscalls_screenSize(lua_State* L); + +inline void syscalls_push_textSizes(lua_State* L) +{ + lua_newtable(L); + + lua_pushinteger(L, TextScale_SIZE_6x9); + lua_setfield(L, -2, "6x9"); + + lua_pushinteger(L, TextScale_SIZE_8x16); + lua_setfield(L, -2, "8x16"); + + lua_pushinteger(L, TextScale_SIZE_12x18); + lua_setfield(L, -2, "12x18"); + + lua_pushinteger(L, TextScale_SIZE_16x32); + lua_setfield(L, -2, "16x32"); + + lua_pushinteger(L, TextScale_SIZE_18x27); + lua_setfield(L, -2, "18x27"); + + lua_pushinteger(L, TextScale_SIZE_24x36); + lua_setfield(L, -2, "24x36"); + + lua_pushinteger(L, TextScale_SIZE_24x48); + lua_setfield(L, -2, "24x48"); + + lua_pushinteger(L, TextScale_SIZE_30x45); + lua_setfield(L, -2, "30x45"); + + lua_pushinteger(L, TextScale_SIZE_32x64); + lua_setfield(L, -2, "32x64"); + + lua_pushinteger(L, TextScale_SIZE_36x54); + lua_setfield(L, -2, "36x54"); + + lua_pushinteger(L, TextScale_SIZE_40x80); + lua_setfield(L, -2, "40x80"); + + lua_pushinteger(L, TextScale_SIZE_42x63); + lua_setfield(L, -2, "42x63"); + + lua_pushinteger(L, TextScale_SIZE_48x72); + lua_setfield(L, -2, "48x72"); + + lua_pushinteger(L, TextScale_SIZE_48x96); + lua_setfield(L, -2, "48x96"); + + lua_pushinteger(L, TextScale_SIZE_56x112); + lua_setfield(L, -2, "56x112"); + + lua_pushinteger(L, TextScale_SIZE_64x128); + lua_setfield(L, -2, "64x128"); + + lua_setfield(L, -2, "textSize"); +} + +#endif // __GRAPHIC_H__ \ No newline at end of file diff --git a/src/socket.c b/src/socket.c deleted file mode 100644 index 0f79201..0000000 --- a/src/socket.c +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include "socket.h" - -int syscalls_OpenSocket(lua_State* L) -{ - int32_t socketNum; - uint32_t errorCode; - - uint32_t family = luaL_checkinteger(L, 1); - uint32_t type = luaL_checkinteger(L, 2); - uint32_t protocol = luaL_checkinteger(L, 3); - - asm_inline( - "int $0x40" - :"=a"(socketNum), "=b"(errorCode) - : "a"(77), "b"(0), "c"(family), "d"(type), "S"(protocol) - ); - - if (socketNum == -1) - { - lua_pushnil(L); // Push socketNum - lua_pushnumber(L, socketNum); // Push error Code - } - else - { - lua_pushnumber(L, socketNum); // Push socketNum - lua_pushnil(L); // Push error code - } - - return 2; -} - -int syscalls_CloseSocket(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - uint32_t socketNum = luaL_checkinteger(L, 1); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(1), "c"(socketNum)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_Bind(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - - uint32_t socketNum = luaL_checkinteger(L, 1); - uint32_t sockaddr = luaL_checkinteger(L, 2); - uint32_t sockaddrLen = luaL_checkinteger(L, 3); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(2), "c"(socketNum), "d"(sockaddr), "S"(sockaddrLen)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_Listen(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - - uint32_t socketNum = luaL_checkinteger(L, 1); - uint32_t backlog = luaL_checkinteger(L, 2); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(3), "c"(socketNum), "d"(backlog)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_Connect(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - - uint32_t socketNum = luaL_checkinteger(L, 1); - uint32_t sockaddr = luaL_checkinteger(L, 2); - uint32_t sockaddrLen = luaL_checkinteger(L, 3); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(4), "c"(socketNum), "d"(sockaddr), "S"(sockaddrLen)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_Accept(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - - uint32_t socketNum = luaL_checkinteger(L, 1); - uint32_t sockaddr = luaL_checkinteger(L, 2); - uint32_t sockaddrLen = luaL_checkinteger(L, 3); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(5), "c"(socketNum), "d"(sockaddr), "S"(sockaddrLen)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_Send(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - - uint32_t socketNum = luaL_checkinteger(L, 1); - uint32_t buffer = luaL_checkinteger(L, 2); - uint32_t bufferLen = luaL_checkinteger(L, 3); - uint32_t flags = luaL_checkinteger(L, 4); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(6), "c"(socketNum), "d"(buffer), "S"(bufferLen), "D"(flags)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_Receive(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - - uint32_t socketNum = luaL_checkinteger(L, 1); - uint32_t buffer = luaL_checkinteger(L, 2); - uint32_t bufferLen = luaL_checkinteger(L, 3); - uint32_t flags = luaL_checkinteger(L, 4); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(7), "c"(socketNum), "d"(buffer), "S"(bufferLen), "D"(flags)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_GetSocketOptions(lua_State* L) -{ - uint32_t eax; - uint32_t errorCode; - - uint32_t socketNum = luaL_checkinteger(L, 1); - uint32_t optstruct = luaL_checkinteger(L, 2); - - asm_inline( - "int $0x40" - : "=a"(eax), "=b"(errorCode) - : "a"(77), "b"(8), "c"(socketNum), "d"(optstruct)); - - syscalls_ReturnIntegerValueOrNil(eax, errorCode, L); - - return 1; -} - -int syscalls_GetPairSocket(lua_State* L) -{ - int firstSocketNum; - int secondSocketNum; - - asm_inline( - "int $0x40" - : "=a"(firstSocketNum), "=b"(secondSocketNum) - : "a"(77), "b"(9)); - - if (firstSocketNum == -1) - { - lua_pushnil(L); - lua_pushinteger(L, secondSocketNum); - } - else - { - lua_pushinteger(L, firstSocketNum); - lua_pushinteger(L, secondSocketNum); - } - - return 2; -} diff --git a/src/sockets/optstruct.c b/src/sockets/optstruct.c new file mode 100644 index 0000000..e69de29 diff --git a/src/sockets/sockaddr.c b/src/sockets/sockaddr.c new file mode 100644 index 0000000..6e2b1ec --- /dev/null +++ b/src/sockets/sockaddr.c @@ -0,0 +1,49 @@ +#include "sockaddr.h" +#include "../debug.h" + +struct sockaddr* syscalls_push_sockaddr(lua_State* L) +{ + DEBUG_LINE("push sockaddr struct"); + + struct sockaddr* colorsTable = lua_newuserdata(L, sizeof(struct sockaddr)); + luaL_setmetatable(L, syscalls_sockaddr_metatable_name); + + return colorsTable; +} + +static int syscalls_sockaddr_new(lua_State* L) +{ + struct sockaddr* add = syscalls_push_sockaddr(L); + + add->sin_addr = luaL_checkinteger(L, 1); + add->sin_family = luaL_checkinteger(L, 1); + add->sin_port = luaL_checkinteger(L, 1); + + return 1; +} + +static int syscalls_sockaddr_tonumber(lua_State* L) +{ + lua_pushinteger(L, luaL_checkudata(L, 1, syscalls_sockaddr_metatable_name)); + return 1; +} + +static const luaL_Reg syscalls_sockaddr_m[] = { + {"__tonumber", syscalls_sockaddr_tonumber}, + {NULL, NULL} +}; + +static const luaL_Reg syscalls_sockaddr_lib[] = { + {NULL, NULL} +}; + +void syscalls_register_sockaddr(lua_State* L) +{ + luaL_newlib(L, syscalls_sockaddr_lib); + lua_setfield(L, -2, "SystemColors"); + + luaL_newmetatable(L, syscalls_sockaddr_metatable_name); + luaL_setfuncs(L, syscalls_sockaddr_m, 0); + + lua_pop(L, 1); +} diff --git a/src/sockets/sockaddr.h b/src/sockets/sockaddr.h new file mode 100644 index 0000000..d69f6cc --- /dev/null +++ b/src/sockets/sockaddr.h @@ -0,0 +1,12 @@ +#ifndef __SOCKADDR_H__ +#define __SOCKADDR_H__ + +#include "../syscalls.h" +#include "socket.h" + +#define syscalls_sockaddr_metatable_name "sockaddr metatable" + +void syscalls_register_sockaddr(lua_State* L); +struct sockaddr* syscalls_push_sockaddr(lua_State* L); + +#endif // __SOCKADDR_H__ \ No newline at end of file diff --git a/src/sockets/socket.c b/src/sockets/socket.c new file mode 100644 index 0000000..ab5099a --- /dev/null +++ b/src/sockets/socket.c @@ -0,0 +1,155 @@ +#include "socket.h" + +static void _conv_socket_err() { + switch (errno) { + case 1: errno = ENOBUFS; break; + case 2: errno = EINPROGRESS; break; + case 4: errno = EOPNOTSUPP; break; + case 6: errno = EWOULDBLOCK; break; + case 9: errno = ENOTCONN; break; + case 10: errno = EALREADY; break; + case 11: errno = EINVAL; break; + case 12: errno = EMSGSIZE; break; + case 18: errno = ENOMEM; break; + case 20: errno = EADDRINUSE; break; + case 61: errno = ECONNREFUSED; break; + case 52: errno = ECONNRESET; break; + case 56: errno = EISCONN; break; + case 60: errno = ETIMEDOUT; break; + case 54: errno = ECONNABORTED; break; + default: errno = 0; break; + } +} + +int socket(int domain, int type, int protocol) +{ + int socket; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(socket) + : "a"(75), "b"(0), "c"(domain), "d"(type), "S"(protocol) + ); + _conv_socket_err(); + return socket; +} + +int close(int socket) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(1), "c"(socket) + ); + _conv_socket_err(); + return status; +} + +int bind(int socket, const struct sockaddr* addres, int addres_len) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(2), "c"(socket), "d"(addres), "S"(addres_len) + ); + _conv_socket_err(); + return status; +} + +int listen(int socket, int backlog) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(3), "c"(socket), "d"(backlog) + ); + _conv_socket_err(); + return status; +} + +int connect(int socket, const struct sockaddr* address, int socket_len) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(4), "c"(socket), "d"(address), "S"(socket_len) + ); + _conv_socket_err(); + return status; +} + +int accept(int socket, const struct sockaddr* address, int address_len) +{ + int new_socket; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(new_socket) + : "a"(75), "b"(5), "c"(socket), "d"(address), "S"(address_len) + ); + _conv_socket_err(); + return new_socket; +} + +int send(int socket, const void* message, size_t msg_len, int flag) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(6), "c"(socket), "d"(message), "S"(msg_len), "D"(flag) + ); + _conv_socket_err(); + return status; +} + +int recv(int socket, void* buffer, size_t buff_len, int flag) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(7), "c"(socket), "d"(buffer), "S"(buff_len), "D"(flag) + ); + _conv_socket_err(); + return status; +} + +int setsockopt(int socket, const optstruct* opt) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(8), "c"(socket), "d"(opt) + ); + _conv_socket_err(); + return status; +} + +int getsockopt(int socket, optstruct* opt) +{ + int status; + asm_inline( + "int $0x40" + :"=b"(errno), "=a"(status) + : "a"(75), "b"(9), "c"(socket), "d"(opt) + ); + _conv_socket_err(); + return status; +} + +int socketpair(int* socket1, int* socket2) +{ + asm_inline( + "int $0x40" + :"=b"(*socket2), "=a"(*socket1) + : "a"(75), "b"(10) + ); + errno = *socket2; + _conv_socket_err(); + return *socket1; +} + diff --git a/src/sockets/socket.h b/src/sockets/socket.h new file mode 100644 index 0000000..c3f396c --- /dev/null +++ b/src/sockets/socket.h @@ -0,0 +1,91 @@ +/* Copyright (C) 2019-2021 Logaev Maxim (turbocat2001), GPLv2 */ + +#ifndef _SOCKET_H_ +#define _SOCKET_H_ + +#include +#include +#include + +// Socket Types +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +// IP protocols +#define IPPROTO_IP 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#define IPPROTO_RAW 255 + +// IP options +#define IP_TTL 2 + +// Address families +#define AF_UNSPEC 0 +#define AF_LOCAL 1 +#define AF_INET 2 // Default INET=IPv4 +#define AF_INET4 2 // IPv4 +#define AF_INET6 10 // IPv6 + +#define PF_UNSPEC AF_UNSPEC +#define PF_LOCAL AF_LOCAL +#define PF_INET4 AF_INET4 +#define PF_INET6 AF_INET6 + +// internal definition +#define AI_SUPPORTED 0x40F + +// for system function 76 +#define API_ETH (0 << 16) +#define API_IPv4 (1 << 16) +#define API_ICMP (2 << 16) +#define API_UDP (3 << 16) +#define API_TCP (4 << 16) +#define API_ARP (5 << 16) +#define API_PPPOE (6 << 16) + +// Socket flags for user calls +#define MSG_NOFLAG 0 +#define MSG_PEEK 0x02 +#define MSG_DONTWAIT 0x40 + +// Socket levels +#define SOL_SOCKET 0xffff + +// Socket options +#define SO_BINDTODEVICE (1 << 9) +#define SO_NONBLOCK (1 << 31) + +#define PORT(X) (X << 8) + +#pragma pack(push, 1) +struct sockaddr { + unsigned short sin_family; + unsigned short sin_port; + unsigned int sin_addr; + unsigned long long sin_zero; +}; + +typedef struct { + unsigned int level; + unsigned int optionname; + unsigned int optlenght; + unsigned char options; +} optstruct; +#pragma pack(pop) + +int socket(int domain, int type, int protocol); +int close(int socket); +int bind(int socket, const struct sockaddr* addres, int addres_len); +int listen(int socket, int backlog); +int connect(int socket, const struct sockaddr* address, int socket_len); +int accept(int socket, const struct sockaddr* address, int address_len); +int send(int socket, const void* message, size_t msg_len, int flag); +int recv(int socket, void* buffer, size_t buff_len, int flag); +int setsockopt(int socket, const optstruct* opt); +int getsockopt(int socket, optstruct* opt); +int socketpair(int* socket1, int* socket2); + +#endif //_SOCKET_H_ \ No newline at end of file diff --git a/src/sockets/socket_lua.c b/src/sockets/socket_lua.c new file mode 100644 index 0000000..ac07853 --- /dev/null +++ b/src/sockets/socket_lua.c @@ -0,0 +1,246 @@ +#include +#include "socket_lua.h" +#include "socket.h" + +int syscalls_OpenSocket(lua_State* L) +{ + int socketNum = socket( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + luaL_checkinteger(L, 3) + ); + + if (socketNum != -1) + { + lua_pushnumber(L, socketNum); // Push socketNum + lua_pushnil(L); // Push error code + } + else + { + lua_pushnil(L); // Push socketNum + lua_pushnumber(L, errno); // Push error Code + } + + return 2; +} + +int syscalls_CloseSocket(lua_State* L) +{ + int ret = close(luaL_checkinteger(L, 1)); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_Bind(lua_State* L) +{ + int ret = bind( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + sizeof(struct sockaddr) + ); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_Listen(lua_State* L) +{ + int ret = listen( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2) + ); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_Connect(lua_State* L) +{ + int ret = connect( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + sizeof(struct sockaddr) + ); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_Accept(lua_State* L) +{ + int ret = accept( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + sizeof(struct sockaddr) + ); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_Send(lua_State* L) +{ + int ret = send( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + luaL_checkinteger(L, 3), + luaL_checkinteger(L, 4) + ); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_Receive(lua_State* L) +{ + int ret = recv( + luaL_checkinteger(L, 1), + luaL_checkinteger(L, 2), + luaL_checkinteger(L, 3), + luaL_checkinteger(L, 4) + ); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + + +int syscalls_SetSocketOption(lua_State* L) +{ + int ret = setsockopt(luaL_checkinteger(L, 1), luaL_checkinteger(L, 2)); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_GetSocketOption(lua_State* L) +{ + int ret = getsockopt(luaL_checkinteger(L, 1), luaL_checkinteger(L, 2)); + + syscalls_ReturnIntegerValueOrNil(ret, errno, L); + + return 1; +} + +int syscalls_PairSocket(lua_State* L) +{ + int firstSocketNum; + int secondSocketNum; + + int ret = socketpair(&firstSocketNum, &secondSocketNum); + + if (ret == -1) + { + lua_pushnil(L); + lua_pushinteger(L, errno); + } + else + { + lua_pushinteger(L, firstSocketNum); + lua_pushinteger(L, secondSocketNum); + } + + return 2; +} + +inline static void syscalls_socket_types(lua_State* L) +{ + lua_createtable(L, 0, 0); + + lua_pushinteger(L, SOCK_STREAM); + lua_setfield(L, -2, "STREAM"); + + lua_pushinteger(L, SOCK_RAW); + lua_setfield(L, -2, "RAW"); + + lua_pushinteger(L, SOCK_DGRAM); + lua_setfield(L, -2, "DGRAM"); + + lua_setfield(L, -2, "SOCK"); +} + +inline static void syscalls_socket_ipproto(lua_State* L) +{ + lua_createtable(L, 0, 0); + + + lua_pushinteger(L, IPPROTO_IP); + lua_setfield(L, -2, "IP"); + + lua_pushinteger(L, IPPROTO_ICMP); + lua_setfield(L, -2, "ICMP"); + + lua_pushinteger(L, IPPROTO_TCP); + lua_setfield(L, -2, "TCP"); + + lua_pushinteger(L, IPPROTO_UDP); + lua_setfield(L, -2, "UDP"); + + lua_pushinteger(L, IPPROTO_RAW); + lua_setfield(L, -2, "RAW"); + + lua_setfield(L, -2, "IPPROTO"); +} + +inline static void syscalls_socket_ip(lua_State* L) +{ + lua_createtable(L, 0, 0); + + lua_pushinteger(L, IP_TTL); + lua_setfield(L, -2, "TTL"); + + lua_setfield(L, -2, "IP"); +} + +inline static void syscalls_socket_AF(lua_State* L) +{ + lua_createtable(L, 0, 0); + + lua_pushinteger(L, AF_UNSPEC); + lua_setfield(L, -2, "UNSCPEC"); + + lua_pushinteger(L, AF_LOCAL); + lua_setfield(L, -2, "LOCAL"); + + lua_pushinteger(L, AF_INET); + lua_setfield(L, -2, "INET"); + + lua_pushinteger(L, AF_INET4); + lua_setfield(L, -2, "INET4"); + + lua_pushinteger(L, AF_INET6); + lua_setfield(L, -2, "INET6"); + + lua_setfield(L, -2, "AF"); +} + +inline static void syscalls_socket_options(lua_State* L) +{ + lua_createtable(L, 0, 0); + + lua_pushinteger(L, SO_BINDTODEVICE); + lua_setfield(L, -2, "BINDTODEVICE"); + + lua_pushinteger(L, SO_NONBLOCK); + lua_setfield(L, -2, "NONBLOCK"); + + lua_setfield(L, -2, "SO"); +} + +void syscalls_register_socket(lua_State* L) +{ + syscalls_socket_types(L); + syscalls_socket_ipproto(L); + syscalls_socket_ip(L); + syscalls_socket_AF(L); + syscalls_socket_options(L); +} diff --git a/src/socket.h b/src/sockets/socket_lua.h similarity index 60% rename from src/socket.h rename to src/sockets/socket_lua.h index ef14a98..ac30041 100644 --- a/src/socket.h +++ b/src/sockets/socket_lua.h @@ -1,7 +1,7 @@ #ifndef __SOCKET_H__ #define __SOCKET_H__ -#include "syscalls.h" +#include "../syscalls.h" int syscalls_OpenSocket(lua_State* L); int syscalls_CloseSocket(lua_State* L); @@ -11,8 +11,11 @@ int syscalls_Connect(lua_State* L); int syscalls_Accept(lua_State* L); int syscalls_Send(lua_State* L); int syscalls_Receive(lua_State* L); -int syscalls_GetSocketOptions(lua_State* L); -int syscalls_GetPairSocket(lua_State* L); +int syscalls_SetSocketOption(lua_State* L); +int syscalls_GetSocketOption(lua_State* L); +int syscalls_PairSocket(lua_State* L); + +void syscalls_register_socket(lua_State* L); -#endif // __SOCKET_H__ \ No newline at end of file +#endif // __SOCKET_H__ diff --git a/src/syscalls.c b/src/syscalls.c index 4d415a5..8bb91b1 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -12,7 +12,8 @@ #include "ARP_entry.h" #include "systemColors.h" -#include "socket.h" +#include "sockets/socket_lua.h" +#include "graphic.h" /* @@ -22,27 +23,6 @@ */ static ksys_key_input_mode_t syscalls_KeyInputState = KSYS_KEY_INPUT_MODE_ASCII; -/* - Кеш размера экрана. - - Нужно для того чтобы не вызывать систменое прерывание лишний раз (другие функции тоже используют это значение) - - Сомневаюсь что в размер экрана в колибри вообще может меняться без перезагрузки - - обновляется функцией syscalls_updateScreenSize -*/ -static ksys_pos_t syscalls_screenSizeCache = { 0 }; - - -/* - функции для того чтобы возвращаемые значения функций были болле-мение едиообразны -*/ - - - - - - static int syscalls_createWindow(lua_State* L) { @@ -57,6 +37,7 @@ static int syscalls_createWindow(lua_State* L) { uint32_t borderColor = luaL_checkinteger(L, 5); uint32_t titleColor = luaL_checkinteger(L, 8); + asm_inline( "int $0x40" ::"a"(0), "b"((x << 16) | ((w - 1) & 0xFFFF)), @@ -415,25 +396,6 @@ static int syscalls_getButton(lua_State* L) return 2; } -static void syscalls_updateScreenSize() -{ - syscalls_screenSizeCache = _ksys_screen_size(); -} - -static int syscalls_screenSize(lua_State* L) -{ - syscalls_updateScreenSize(); - - lua_createtable(L, 0, 2); - - lua_pushinteger(L, syscalls_screenSizeCache.x); - lua_setfield(L, -2, "x"); - - lua_pushinteger(L, syscalls_screenSizeCache.y); - lua_setfield(L, -2, "y"); - - return 1; -} /* Backgound @@ -473,173 +435,7 @@ static int syscalls_getCPUClock(lua_State* L) return 1; } -static int syscalls_drawLine(lua_State* L) -{ - _ksys_draw_line( - luaL_checkinteger(L, 1), - luaL_checkinteger(L, 2), - luaL_checkinteger(L, 3), - luaL_checkinteger(L, 4), - luaL_checkinteger(L, 5)); - return 0; -} - -enum TextScale -{ - TextScale_SIZE_6x9, // 1x 6x9 - TextScale_SIZE_8x16, // 1x 8x16 - TextScale_SIZE_12x18, // 2x 6x9 - TextScale_SIZE_16x32, // 2x 8x16 - TextScale_SIZE_18x27, // 3x 6x9 - TextScale_SIZE_24x36, // 4x 6x9 - TextScale_SIZE_24x48, // 3x 8x16 - TextScale_SIZE_30x45, // 5x 6x9 - TextScale_SIZE_32x64, // 4x 8x16 - TextScale_SIZE_36x54, // 6x 6x9 - TextScale_SIZE_40x80, // 5x 8x16 - TextScale_SIZE_42x63, // 7x 6x9 - TextScale_SIZE_48x72, // 8x 6x9 - TextScale_SIZE_48x96, // 6x 8x16 - TextScale_SIZE_56x112, // 7x 8x16 - TextScale_SIZE_64x128 // 8x 8x16 -}; - -static void syscall_drawText(const char* text, uint32_t x, uint32_t y, ksys_color_t color, enum TextScale size, uint32_t len, bool fillBackground, ksys_color_t backgroundColor) -{ - enum DrawTextEncoding - { - cp866_6x9 = 0, - cp866_8x16 = 1, - utf8 = 3, - utf16 = 4 - }; - - enum scale - { - scale_x1 = 0, - scale_x2 = 1, - scale_x3 = 2, - scale_x4 = 3, - scale_x5 = 4, - scale_x6 = 5, - scale_x7 = 6, - scale_x8 = 7 - }; - - color &= 0x00FFFFFF; - - color |= (fillBackground << 30); - - switch (size) - { - case TextScale_SIZE_6x9: - color |= (cp866_8x16 << 28) | (scale_x1 << 24); - break; - case TextScale_SIZE_8x16: - color |= (cp866_8x16 << 28); - break; - case TextScale_SIZE_12x18: - color |= (cp866_6x9 << 28) | (scale_x2 << 24); - break; - case TextScale_SIZE_16x32: - color |= (cp866_8x16 << 28) | (scale_x2 << 24); - break; - case TextScale_SIZE_18x27: - color |= (cp866_6x9 << 28) | (scale_x3 << 24); - break; - case TextScale_SIZE_24x36: - color |= (cp866_6x9 << 28) | (scale_x4 << 24); - break; - case TextScale_SIZE_24x48: - color |= (cp866_8x16 << 28) | (scale_x3 << 24); - break; - case TextScale_SIZE_30x45: - color |= (cp866_6x9 << 28) | (scale_x5 << 24); - break; - case TextScale_SIZE_36x54: - color |= (cp866_6x9 << 28) | (scale_x6 << 24); - break; - case TextScale_SIZE_40x80: - color |= (cp866_8x16 << 28) | (scale_x5 << 24); - break; - case TextScale_SIZE_42x63: - color |= (cp866_6x9 << 28) | (scale_x7 << 24); - break; - case TextScale_SIZE_48x72: - color |= (cp866_6x9 << 28) | (scale_x8 << 24); - break; - case TextScale_SIZE_48x96: - color |= (cp866_8x16 << 28) | (scale_x6 << 24); - break; - case TextScale_SIZE_56x112: - color |= (cp866_8x16 << 28) | (scale_x7 << 24); - break; - case TextScale_SIZE_64x128: - color |= (cp866_8x16 << 28) | (scale_x8 << 24); - break; - default: - break; - }; - - if (len <= 0) - color |= (1 << 31); - - asm_inline( - "int $0x40" ::"a"(4), - "b"((x << 16) | y), - "c"(color), - "d"(text), - "S"(len), - "D"(backgroundColor)); -} - -static int syscalls_drawText(lua_State* L) -{ - syscall_drawText( - luaL_checkstring(L, 1), - luaL_checkinteger(L, 2), - luaL_checkinteger(L, 3), - luaL_checkinteger(L, 4), - luaL_optinteger(L, 5, TextScale_SIZE_8x16), - luaL_optinteger(L, 6, 0), - luaL_optinteger(L, 7, 0), - luaL_optinteger(L, 8, 0)); - - return 0; -} - -static int syscalls_drawRectangle(lua_State* L) -{ - _ksys_draw_bar( - luaL_checkinteger(L, 1), - luaL_checkinteger(L, 2), - luaL_checkinteger(L, 3), - luaL_checkinteger(L, 4), - luaL_checkinteger(L, 5)); - - return 0; -} - -static int syscalls_ReadPoint(lua_State* L) -{ - ksys_color_t color; - - if (syscalls_screenSizeCache.val == 0) - syscalls_updateScreenSize(); - - uint32_t x = luaL_checkinteger(L, 1); - uint32_t y = luaL_checkinteger(L, 2); - - asm_inline( - "int $ 0x40" - : "=a"(color) - : "a"(35), "b"(x * syscalls_screenSizeCache.x + y)); - - lua_pushnumber(L, color); - - return 1; -} static int syscalls_getSystemColors(lua_State* L) { @@ -1854,11 +1650,13 @@ static const luaL_Reg syscallsLib[] = { {"Accept", syscalls_Accept}, {"Send", syscalls_Send}, {"Receive", syscalls_Receive}, - {"GetSocketOptions", syscalls_GetSocketOptions}, - {"GetPairSocket", syscalls_GetPairSocket}, + { "SetSocketOption", syscalls_SetSocketOption }, + { "GetSocketOption", syscalls_GetSocketOption }, + {"PairSocket", syscalls_PairSocket}, /* Debug */ {"DebugPuts", syscalls_DebugPuts}, { "DebugPutc", syscalls_DebugPutc }, + {"SetMessageArea", syscalls_SetMessageArea}, {NULL, NULL} }; @@ -2043,60 +1841,7 @@ static inline void syscalls_push_connectionStatus(lua_State* L) lua_setfield(L, -2, "connectionStatus"); } -inline void syscalls_push_textSizes(lua_State* L) -{ - lua_newtable(L); - lua_pushinteger(L, TextScale_SIZE_6x9); - lua_setfield(L, -2, "6x9"); - - lua_pushinteger(L, TextScale_SIZE_8x16); - lua_setfield(L, -2, "8x16"); - - lua_pushinteger(L, TextScale_SIZE_12x18); - lua_setfield(L, -2, "12x18"); - - lua_pushinteger(L, TextScale_SIZE_16x32); - lua_setfield(L, -2, "16x32"); - - lua_pushinteger(L, TextScale_SIZE_18x27); - lua_setfield(L, -2, "18x27"); - - lua_pushinteger(L, TextScale_SIZE_24x36); - lua_setfield(L, -2, "24x36"); - - lua_pushinteger(L, TextScale_SIZE_24x48); - lua_setfield(L, -2, "24x48"); - - lua_pushinteger(L, TextScale_SIZE_30x45); - lua_setfield(L, -2, "30x45"); - - lua_pushinteger(L, TextScale_SIZE_32x64); - lua_setfield(L, -2, "32x64"); - - lua_pushinteger(L, TextScale_SIZE_36x54); - lua_setfield(L, -2, "36x54"); - - lua_pushinteger(L, TextScale_SIZE_40x80); - lua_setfield(L, -2, "40x80"); - - lua_pushinteger(L, TextScale_SIZE_42x63); - lua_setfield(L, -2, "42x63"); - - lua_pushinteger(L, TextScale_SIZE_48x72); - lua_setfield(L, -2, "48x72"); - - lua_pushinteger(L, TextScale_SIZE_48x96); - lua_setfield(L, -2, "48x96"); - - lua_pushinteger(L, TextScale_SIZE_56x112); - lua_setfield(L, -2, "56x112"); - - lua_pushinteger(L, TextScale_SIZE_64x128); - lua_setfield(L, -2, "64x128"); - - lua_setfield(L, -2, "textSize"); -} LUALIB_API int luaopen_syscalls(lua_State* L) { diff --git a/src/syscalls.h b/src/syscalls.h index 1232827..19f8d6a 100644 --- a/src/syscalls.h +++ b/src/syscalls.h @@ -37,7 +37,7 @@ inline void syscalls_ReturnTrueOrNil(LUA_INTEGER value, lua_State* L) } else { - lua_pushboolean(L, true); + lua_pushboolean(L, 1); } } diff --git a/src/systemColors.c b/src/systemColors.c index a301d11..d619479 100644 --- a/src/systemColors.c +++ b/src/systemColors.c @@ -3,9 +3,6 @@ #include #include - -static int syscalls_SystemColors_m_index; - int syscalls_newSystemColors(lua_State* L) { ksys_colors_table_t* colorsTable = syscalls_pushSystemColors(L);