From 186fbe426e47d8e4eb35bf1073735e744481f6d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80?= Date: Wed, 16 Apr 2025 08:41:11 +0200 Subject: [PATCH 01/11] Update manual Add more funcs --- doc/manual.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/doc/manual.md b/doc/manual.md index 3ee2a47..97df9fb 100644 --- a/doc/manual.md +++ b/doc/manual.md @@ -8,6 +8,17 @@ local syscalls = require("syscalls") ## Events +### `WaitEvent()` + +Endless wait event + +### `WaitEventTimeout(timeout)` + +Wait timeout 1/100 sec + +return event or nil + +### Events list ```lua syscalls.Event. ``` @@ -73,6 +84,55 @@ textSize, textLen, backgroundColor, encoding are optional. return color +## Buttons + +### `GetButton()` + +return pressed button or nil + +### buttons + +button's ids that defined default by window with skin + +```lua +syscalls.buttons. +``` + ++ `close` ++ `minimize` + +## SystemColors + +### SystemColors type + + + +### `GetSystemColors()` + +return SystemColors + +### `SetSytemColors(SystemColors)` + +## Threads + +### `ThreadInfo(pid)` + +return table: +```lua +{ + name: string, + pid: number, + cpu_usage: number, + memused: number, + winXPos: number, + winYPos: number, + winXSize: number, + winYPos: number, + slotState: number, + windowState: number +} +``` + ## Sockets ### `OpenSocket(domain, type, protocol)` From 9ca0d8d658e97cf37a2747a460e481dc36ba88a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80?= Date: Wed, 16 Apr 2025 08:59:49 +0200 Subject: [PATCH 02/11] update manual --- doc/manual.md | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/doc/manual.md b/doc/manual.md index 97df9fb..ed49911 100644 --- a/doc/manual.md +++ b/doc/manual.md @@ -78,7 +78,7 @@ textSize, textLen, backgroundColor, encoding are optional. ### `DrawLine(x1, y1, x2, y2)` -### `DrawRectangle(x, y, w, h color)` +### `DrawRectangle(x, y, widht, height, color)` ### `ReadPoint(x, y)` @@ -86,10 +86,17 @@ return color ## Buttons +### `DefineButton(x, y, widht, height, id, color)` + +### `DeleteButton(id)` + ### `GetButton()` return pressed button or nil +### `SetButtonStyle(style)` + + ### buttons button's ids that defined default by window with skin @@ -101,11 +108,48 @@ syscalls.buttons. + `close` + `minimize` +### ButtonStyles + +```lua +syscalls.buttonStyle. +``` + ## SystemColors ### SystemColors type +userdata +#### Fields + ++ frameArea ++ grabBar ++ grabBarButton ++ grabButtonText ++ grabText ++ workArea ++ workButton ++ workButton ++ workButtonText + workGraph ++ workText + +#### Constructor + +```lua +syscalls.SystemColors.new( + frameArea, + grabBar, + grabBarButton, + grabButtonText, + grabText, + workArea, + workButton, + workButton, + workButtonText, + workGraph, + workText +) +``` ### `GetSystemColors()` From 14ef5e42a87a1ebe89aa15944eb566dc9926a464 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Wed, 16 Apr 2025 15:49:54 +0500 Subject: [PATCH 03/11] update manual.md --- doc/manual.md | 277 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 260 insertions(+), 17 deletions(-) diff --git a/doc/manual.md b/doc/manual.md index ed49911..008b973 100644 --- a/doc/manual.md +++ b/doc/manual.md @@ -1,13 +1,22 @@ # Manual +This is KolibriOS lua syscalls library. Usually you shouldn't use this library + +Better if you read before [KolibriOS syscalls wiki](http://wiki.kolibrios.org/wiki/) + +include: ```lua local syscalls = require("syscalls") ``` - - ## Events +### `SetEventMask(newMask)` + +### `CheckEvent()` + +check event + ### `WaitEvent()` Endless wait event @@ -16,9 +25,10 @@ Endless wait event Wait timeout 1/100 sec -return event or nil +return event or `nil` ### Events list + ```lua syscalls.Event. ``` @@ -32,6 +42,62 @@ syscalls.Event. + `IPC` + `Debug` +## Window + +### `CreateWindow(x, y, width, height, workColor, style, borderColor, titleColor)` + +Define window + +`borderColor` and `borderColor` only for `FixSizes` and `CanChangeSizes` (without skin styles) style. + +### `StartRedraw()` + +Start window redraw. Just call it before `CreateWindow` + +### `EndRedraw()` + +End window redraw. Just call it after you done redraw window. + +### `ChangeWindow(newX, newY, newWidth, newHeight)` + +### `FocusWindow(slot)` + +### `UnfocusWindow(slot)` + +### `SetWindowTitle(newTitle)` + +### `GetSkinHeight()` + +return skin height. + +### `SetSkin(path)` + +return error code + +### `GetSkinTitleArea()` + +return table: +```lua +{ + Left: number, + Right: number, + Top: number, + Bottom: number +} +``` + +### Style + +```lua +syscalls.windowStyle. +``` + ++ `FixSizes` ++ `NoDraw` (you must draw window manually) ++ `CanChangeSizes` ++ `WithSkin` (usually use it) ++ `WithSkinFixSizes` (with skin, but window size fixed) + ## Graphic ### Text encoding @@ -92,7 +158,7 @@ return color ### `GetButton()` -return pressed button or nil +return pressed button or `nil` ### `SetButtonStyle(style)` @@ -106,7 +172,7 @@ syscalls.buttons. ``` + `close` -+ `minimize` ++ `minimization` ### ButtonStyles @@ -114,6 +180,94 @@ syscalls.buttons. syscalls.buttonStyle. ``` +## Keyboard + +### `GetKey()` + +return: ++ nil if buffer empty ++ if hotkey return second number ++ if key pressed and key input mode is ascii return string(1 char), else return scancode + +example: + +```lua +local key, hotkey = syscalls.GetKey() + +if key then + print("key pressed") +end + +if hotkey then + print(hotkey pressed) +end +``` + +### `SetKeyInputMode(mode)` + +by default is `ASCII` + +### `GetKeyInputMode()` + +return key input mode. + +isn't syscall + +### Scancodes + +```lua +syscalls.scancode. +``` + ++ `A` ++ `B` ++ `C` ++ `D` ++ `E` ++ `F` ++ `G` ++ `H` ++ `J` ++ `K` ++ `L` ++ `M` ++ `O` ++ `P` ++ `Q` ++ `S` ++ `T` ++ `U` ++ `W` ++ `X` ++ `Y` ++ `Z` ++ `1` ++ `2` ++ `3` ++ `4` ++ `5` ++ `6` ++ `7` ++ `8` ++ `9` ++ `F1` ++ `F2` ++ `F3` ++ `F4` ++ `F5` ++ `F6` ++ `F7` ++ `F8` ++ `F9` ++ `F10` ++ `F11` ++ `F12` ++ `LeftShift` ++ `RightShift` ++ `LeftAlt` ++ `RightAlt` ++ `Tab` + ## SystemColors ### SystemColors type @@ -122,16 +276,21 @@ userdata #### Fields -+ frameArea -+ grabBar -+ grabBarButton -+ grabButtonText -+ grabText -+ workArea -+ workButton -+ workButton -+ workButtonText + workGraph -+ workText +```lua +{ + frameArea: number, + grabBar: number, + grabBarButton: number, + grabButtonText: number + grabText: number, + workArea: number, + workButton: number, + workButton: number, + workButtonText: number, + workGraph: number, + workText: number +} +``` #### Constructor @@ -155,7 +314,7 @@ syscalls.SystemColors.new( return SystemColors -### `SetSytemColors(SystemColors)` +### `SetSystemColors(SystemColors)` ## Threads @@ -173,10 +332,29 @@ return table: winXSize: number, winYPos: number, slotState: number, - windowState: number + windowState: number, + slotNumWindowStack: number, + posInWindowStack: number, + keyInputMode: number } ``` +### `KillBySlot(slot)` + +### Slot states + +```lua +syscalls.slotState. +``` + ++ `Running` ++ `Suspended` ++ `SuspendedWaitEvent` ++ `NormalTerm` ++ `ExceptTerm` ++ `WaitEvent` ++ `Free` + ## Sockets ### `OpenSocket(domain, type, protocol)` @@ -274,4 +452,69 @@ syscalls.SO. + `BINDTODEVICE` + `NONBLOCK` +## Debug + +### Registers type + +```lua +{ + eax: number + ebx: number, + esp: number, + esi: number, + edi: number, + eip: number, + eflags: number +} +``` + +### `DebugPutc(char)` + +Put char to debug board + +### `DebugPuts(text)` + +Put string to debug board + +### `GetRegisters(pid)` + +The process must be loaded for debugging (as stated in the general description). + +return registers table + +### `SetRegisters(pid, registers)` + +The process must be loaded for debugging (as stated in the general description). + +### `Disconnect(pid)` + +The process must be loaded for debugging (as stated in the general description). + +If the process was suspended, it resumes execution. + +### `Stop(pid)` + +The process must be loaded for debugging (as stated in the general description). + +### `Continue(pid)` + +The process must be loaded for debugging (as stated in the general description). + +### `ReadFromMem(pid, bytes, pointer, buffer)` + +The process must be loaded for debugging (as stated in the general description). + +return or `nil` + +### `WriteToMem(pid, bytes, pointer, buffer)` + +The process must be loaded for debugging (as stated in the general description). + +return or `nil` + +### `Done(pid)` + +### `DefineBreakpoint(pid, index, condition, len)` + +### `UndefBreakpoint(pid, index, condition, len)` From 008485e004d04d054354d725f82121d49ad650d4 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Wed, 16 Apr 2025 20:23:27 +0500 Subject: [PATCH 04/11] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9?= =?UTF-8?q?=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86,=20=D0=B2=D0=BE=D0=B7?= =?UTF-8?q?=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=BC=D0=B8=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=D0=BC=D0=B8(=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20?= =?UTF-8?q?=D0=B2=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=85)=20&&=20create=20and=20use=20macro=20LUA=5FPUSH=5FINTEGE?= =?UTF-8?q?R=5FFILED=20for=20push=20enums?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/debug/debug.c | 13 +-- src/debug/registers.c | 2 +- src/graphic.h | 62 ++++------ src/scancodes.h | 265 ++++++++++++++---------------------------- src/syscalls.c | 237 +++++++++++++++---------------------- src/syscalls.h | 4 + 6 files changed, 214 insertions(+), 369 deletions(-) diff --git a/src/debug/debug.c b/src/debug/debug.c index 28d46f5..bdb246b 100644 --- a/src/debug/debug.c +++ b/src/debug/debug.c @@ -37,9 +37,8 @@ int syscalls_SetMessageArea(lua_State* L) int syscalls_GetRegisters(lua_State* L) { - struct registers* r = syscalls_pushRegisters(L); - uint32_t pid = luaL_checkinteger(L, 1); + struct registers* r = syscalls_pushRegisters(L); asm_inline( "int $0x40" @@ -59,7 +58,7 @@ int syscalls_SetRegisters(lua_State* L) :: "a"(69), "b"(2), "c"(pid), "d"(sizeof(struct registers)), "S"(r) ); - return 1; + return 0; } int syscalls_Disconnect(lua_State* L) @@ -71,7 +70,7 @@ int syscalls_Disconnect(lua_State* L) :: "a"(69), "b"(3), "c"(pid) ); - return 1; + return 0; } int syscalls_Stop(lua_State* L) @@ -83,7 +82,7 @@ int syscalls_Stop(lua_State* L) :: "a"(69), "b"(4), "c"(pid) ); - return 1; + return 0; } int syscalls_Continue(lua_State* L) @@ -95,7 +94,7 @@ int syscalls_Continue(lua_State* L) :: "a"(69), "b"(5), "c"(pid) ); - return 1; + return 0; } int syscalls_ReadFromMem(lua_State* L) @@ -151,7 +150,7 @@ int syscalls_Done(lua_State* L) :: "a"(69), "b"(8), "c"(pid) ); - return 1; + return 0; } int syscalls_DefineBreakpoint(lua_State* L) diff --git a/src/debug/registers.c b/src/debug/registers.c index f153e05..bb52f4a 100644 --- a/src/debug/registers.c +++ b/src/debug/registers.c @@ -83,7 +83,7 @@ static int syscalls_newindexRegisters(lua_State* L) luaL_error(L, "wrong index: %s", index); } - return 1; + return 0; } static int syscalls_eqRegisters(lua_State* L) diff --git a/src/graphic.h b/src/graphic.h index 84574a2..df8dace 100644 --- a/src/graphic.h +++ b/src/graphic.h @@ -45,53 +45,37 @@ inline void syscalls_push_textSizes(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, TextScale_SIZE_6x9); - lua_setfield(L, -2, "6x9"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_6x9, "6x9"); - lua_pushinteger(L, TextScale_SIZE_8x16); - lua_setfield(L, -2, "8x16"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_8x16, "8x16"); - lua_pushinteger(L, TextScale_SIZE_12x18); - lua_setfield(L, -2, "12x18"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_12x18, "12x18"); - lua_pushinteger(L, TextScale_SIZE_16x32); - lua_setfield(L, -2, "16x32"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_16x32, "16x32"); - lua_pushinteger(L, TextScale_SIZE_18x27); - lua_setfield(L, -2, "18x27"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_18x27, "18x27"); - lua_pushinteger(L, TextScale_SIZE_24x36); - lua_setfield(L, -2, "24x36"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_24x36, "24x36"); - lua_pushinteger(L, TextScale_SIZE_24x48); - lua_setfield(L, -2, "24x48"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_24x48, "24x48"); - lua_pushinteger(L, TextScale_SIZE_30x45); - lua_setfield(L, -2, "30x45"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_30x45, "30x45"); - lua_pushinteger(L, TextScale_SIZE_32x64); - lua_setfield(L, -2, "32x64"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_32x64, "32x64"); - lua_pushinteger(L, TextScale_SIZE_36x54); - lua_setfield(L, -2, "36x54"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_36x54, "36x54"); - lua_pushinteger(L, TextScale_SIZE_40x80); - lua_setfield(L, -2, "40x80"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_40x80, "40x80"); - lua_pushinteger(L, TextScale_SIZE_42x63); - lua_setfield(L, -2, "42x63"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_42x63, "42x63"); - lua_pushinteger(L, TextScale_SIZE_48x72); - lua_setfield(L, -2, "48x72"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_48x72, "48x72"); - lua_pushinteger(L, TextScale_SIZE_48x96); - lua_setfield(L, -2, "48x96"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_48x96, "48x96"); - lua_pushinteger(L, TextScale_SIZE_56x112); - lua_setfield(L, -2, "56x112"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_56x112, "56x112"); - lua_pushinteger(L, TextScale_SIZE_64x128); - lua_setfield(L, -2, "64x128"); + LUA_PUSH_INTEGER_FIELD(L, TextScale_SIZE_64x128, "64x128"); lua_setfield(L, -2, "textSize"); } @@ -100,21 +84,17 @@ inline void syscalls_push_Encoding(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, cp866); - lua_setfield(L, -2, "cp866"); + LUA_PUSH_INTEGER_FIELD(L, cp866, "cp866"); - lua_pushinteger(L, cp866_8x16); - lua_setfield(L, -2, "cp866_8x16"); + LUA_PUSH_INTEGER_FIELD(L, cp866_8x16, "cp866_8x16"); - lua_pushinteger(L, utf8); - lua_setfield(L, -2, "utf8"); + LUA_PUSH_INTEGER_FIELD(L, utf8, "utf8"); - lua_pushinteger(L, utf16); - lua_setfield(L, -2, "utf16"); + LUA_PUSH_INTEGER_FIELD(L, utf16, "utf16"); lua_setfield(L, -2, "Encoding"); } #define syscalls_push_graphic(L) syscalls_push_textSizes(L); syscalls_push_Encoding(L); -#endif // __GRAPHIC_H__ +#endif // __GRAPHIC_H_ \ No newline at end of file diff --git a/src/scancodes.h b/src/scancodes.h index a582ab4..9d6f83e 100644 --- a/src/scancodes.h +++ b/src/scancodes.h @@ -8,270 +8,183 @@ static inline void syscalls_register_scancodes(lua_State* L) { - lua_newtable(L); + lua_newtable(L); - lua_pushinteger(L, KSYS_SCANCODE_0); - lua_setfield(L, -2, "0"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_0, "0"); - lua_pushinteger(L, KSYS_SCANCODE_1); - lua_setfield(L, -2, "1"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_1, "1"); - lua_pushinteger(L, KSYS_SCANCODE_2); - lua_setfield(L, -2, "2"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_2, "2"); - lua_pushinteger(L, KSYS_SCANCODE_3); - lua_setfield(L, -2, "3"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_3, "3"); - lua_pushinteger(L, KSYS_SCANCODE_4); - lua_setfield(L, -2, "4"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_4, "5"); - lua_pushinteger(L, KSYS_SCANCODE_5); - lua_setfield(L, -2, "6"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_5, "6"); - lua_pushinteger(L, KSYS_SCANCODE_7); - lua_setfield(L, -2, "7"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_7, "7"); - lua_pushinteger(L, KSYS_SCANCODE_8); - lua_setfield(L, -2, "8"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_8, "8"); - lua_pushinteger(L, KSYS_SCANCODE_9); - lua_setfield(L, -2, "9"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_9, "9"); - lua_pushinteger(L, KSYS_SCANCODE_A); - lua_setfield(L, -2, "A"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_A, "A"); - lua_pushinteger(L, KSYS_SCANCODE_B); - lua_setfield(L, -2, "B"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_B, "B"); - lua_pushinteger(L, KSYS_SCANCODE_C); - lua_setfield(L, -2, "C"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_C, "C"); - lua_pushinteger(L, KSYS_SCANCODE_D); - lua_setfield(L, -2, "D"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_D, "D"); - lua_pushinteger(L, KSYS_SCANCODE_E); - lua_setfield(L, -2, "E"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_E, "E"); - lua_pushinteger(L, KSYS_SCANCODE_F); - lua_setfield(L, -2, "F"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F, "F"); - lua_pushinteger(L, KSYS_SCANCODE_G); - lua_setfield(L, -2, "G"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_G, "G"); - lua_pushinteger(L, KSYS_SCANCODE_H); - lua_setfield(L, -2, "H"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_H, "H"); - lua_pushinteger(L, KSYS_SCANCODE_J); - lua_setfield(L, -2, "J"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_J, "J"); - lua_pushinteger(L, KSYS_SCANCODE_K); - lua_setfield(L, -2, "K"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_K, "K"); - lua_pushinteger(L, KSYS_SCANCODE_L); - lua_setfield(L, -2, "L"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_L, "L"); - lua_pushinteger(L, KSYS_SCANCODE_M); - lua_setfield(L, -2, "M"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_M, "M"); - lua_pushinteger(L, KSYS_SCANCODE_N); - lua_setfield(L, -2, "N"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_N, "N"); - lua_pushinteger(L, KSYS_SCANCODE_O); - lua_setfield(L, -2, "O"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_O, "O"); - lua_pushinteger(L, KSYS_SCANCODE_P); - lua_setfield(L, -2, "P"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_P, "P"); - lua_pushinteger(L, KSYS_SCANCODE_Q); - lua_setfield(L, -2, "Q"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_Q, "Q"); - lua_pushinteger(L, KSYS_SCANCODE_R); - lua_setfield(L, -2, "R"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_R, "R"); - lua_pushinteger(L, KSYS_SCANCODE_S); - lua_setfield(L, -2, "S"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_S, "S"); - lua_pushinteger(L, KSYS_SCANCODE_T); - lua_setfield(L, -2, "T"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_T, "T"); - lua_pushinteger(L, KSYS_SCANCODE_U); - lua_setfield(L, -2, "U"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_U, "U"); - lua_pushinteger(L, KSYS_SCANCODE_V); - lua_setfield(L, -2, "V"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_V, "V"); - lua_pushinteger(L, KSYS_SCANCODE_W); - lua_setfield(L, -2, "W"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_W, "W"); - lua_pushinteger(L, KSYS_SCANCODE_X); - lua_setfield(L, -2, "X"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_X, "X"); - lua_pushinteger(L, KSYS_SCANCODE_Y); - lua_setfield(L, -2, "Y"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_Y, "Y"); - lua_pushinteger(L, KSYS_SCANCODE_Z); - lua_setfield(L, -2, "Z"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_Z, "Z"); - lua_pushinteger(L, KSYS_SCANCODE_F1); - lua_setfield(L, -2, "F1"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F1, "F1"); - lua_pushinteger(L, KSYS_SCANCODE_F2); - lua_setfield(L, -2, "F2"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F2, "F2"); - lua_pushinteger(L, KSYS_SCANCODE_F3); - lua_setfield(L, -2, "F3"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F3, "F3"); - lua_pushinteger(L, KSYS_SCANCODE_F4); - lua_setfield(L, -2, "F4"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F4, "F4"); - lua_pushinteger(L, KSYS_SCANCODE_F5); - lua_setfield(L, -2, "F5"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F5, "F5"); - lua_pushinteger(L, KSYS_SCANCODE_F6); - lua_setfield(L, -2, "F6"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F6, "F6"); - lua_pushinteger(L, KSYS_SCANCODE_F7); - lua_setfield(L, -2, "F7"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F7, "F7"); - lua_pushinteger(L, KSYS_SCANCODE_F8); - lua_setfield(L, -2, "F8"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F8, "F8"); - lua_pushinteger(L, KSYS_SCANCODE_F9); - lua_setfield(L, -2, "F9"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F9, "F9"); - lua_pushinteger(L, KSYS_SCANCODE_F10); - lua_setfield(L, -2, "F10"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F10, "F10"); - lua_pushinteger(L, KSYS_SCANCODE_F11); - lua_setfield(L, -2, "F11"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F11, "F11"); - lua_pushinteger(L, KSYS_SCANCODE_F12); - lua_setfield(L, -2, "F12"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_F12, "F12"); - lua_pushinteger(L, KSYS_SCANCODE_LSHIFT); - lua_setfield(L, -2, "LeftShift"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_LSHIFT, "LeftShift"); - lua_pushinteger(L, KSYS_SCANCODE_RSHIFT); - lua_setfield(L, -2, "RightShift"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_RSHIFT, "RightShift"); - lua_pushinteger(L, KSYS_SCANCODE_BACKSLASH); - lua_setfield(L, -2, "Backslash"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_BACKSLASH, "Backslash"); - lua_pushinteger(L, KSYS_SCANCODE_COMMA); - lua_setfield(L, -2, "Comma"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_COMMA, "Comma"); - lua_pushinteger(L, KSYS_SCANCODE_SLASH); - lua_setfield(L, -2, "Slash"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_SLASH, "Slash"); - lua_pushinteger(L, KSYS_SCANCODE_LALT); - lua_setfield(L, -2, "LeftAlt"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_LALT, "LeftAlt"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_RALT); - lua_setfield(L, -2, "RightAlt"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_RALT, "RightAlt"); - lua_pushinteger(L, KSYS_SCANCODE_LCTRL); - lua_setfield(L, -2, "LeftCtrl"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_LCTRL, "LeftCtrl"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_RCTRL); - lua_setfield(L, -2, "RightCtrl"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_RCTRL, "RightCtrl"); - lua_pushinteger(L, KSYS_SCANCODE_CAPSLOCK); - lua_setfield(L, -2, "CapsLock"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_CAPSLOCK, "CapsLock"); - lua_pushinteger(L, KSYS_SCANCODE_NUMLOCK); - lua_setfield(L, -2, "NumLock"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMLOCK, "NumLock"); - lua_pushinteger(L, KSYS_SCANCODE_POINT); - lua_setfield(L, -2, "Point"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_POINT, "Point"); - lua_pushinteger(L, KSYS_SCANCODE_ENTER); - lua_setfield(L, -2, "Enter"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_ENTER, "Enter"); - lua_pushinteger(L, KSYS_SCANCODE_ESC); - lua_setfield(L, -2, "Esc"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_ESC, "Esc"); - lua_pushinteger(L, KSYS_SCANCODE_TAB); - lua_setfield(L, -2, "Tab"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_TAB, "Tab"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_HOME); - lua_setfield(L, -2, "Home"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_HOME, "Home"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_PGUP); - lua_setfield(L, -2, "PageUp"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_PGUP, "PageUp"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_PGDOWN); - lua_setfield(L, -2, "PageDown"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_PGDOWN, "PageDown"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_END); - lua_setfield(L, -2, "End"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_END, "End"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_UP); - lua_setfield(L, -2, "Up"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_UP, "Up"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_DOWN); - lua_setfield(L, -2, "Down"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_DOWN, "Down"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_LEFT); - lua_setfield(L, -2, "Left"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_LEFT, "Left"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_RIGHT); - lua_setfield(L, -2, "Right"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_RIGHT, "Right"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_DELETE); - lua_setfield(L, -2, "Delete"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_DELETE, "Delete"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_INSERT); - lua_setfield(L, -2, "Insert"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_INSERT, "Insert"); - lua_pushinteger(L, KSYS_SCANCODE_MINUS); - lua_setfield(L, -2, "Minus"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_MINUS, "Minus"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_NUMPAD_ENTER); - lua_setfield(L, -2, "NumpadEnter"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_NUMPAD_ENTER, "NumpadEnter"); - lua_pushinteger(L, KSYS_SCANCODE_EXT_NUMPAD_DIV); - lua_setfield(L, -2, "NumpadDiv"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_EXT_NUMPAD_DIV, "NumpadDiv"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_MULT); - lua_setfield(L, -2, "NumpadMult"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_MULT, "NumpadMult"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_MINUS); - lua_setfield(L, -2, "NumpadMinus"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_MINUS, "NumpadMinus"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_PLUS); - lua_setfield(L, -2, "NumpadPlus"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_PLUS, "NumpadPlus"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_0); - lua_setfield(L, -2, "Numpad_0"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_0, "Numpad_0"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_1); - lua_setfield(L, -2, "Numpad_1"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_1, "Numpad_1"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_2); - lua_setfield(L, -2, "Numpad_2"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_2, "Numpad_2"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_3); - lua_setfield(L, -2, "Numpad_3"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_3, "Numpad_3"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_4); - lua_setfield(L, -2, "Numpad_4"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_4, "Numpad_4"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_5); - lua_setfield(L, -2, "Numpad_5"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_5, "Numpad_5"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_6); - lua_setfield(L, -2, "Numpad_6"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_6, "Numpad_6"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_7); - lua_setfield(L, -2, "Numpad_7"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_7, "Numpad_7"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_8); - lua_setfield(L, -2, "Numpad_8"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_8, "Numpad_8"); - lua_pushinteger(L, KSYS_SCANCODE_NUMPAD_9); - lua_setfield(L, -2, "Numpad_9"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SCANCODE_NUMPAD_9, "Numpad_9"); - lua_setfield(L, -2, "scancode"); + lua_setfield(L, -2, "scancode"); } #endif // _SYSCALLS_ENUM_SCANCODES_ diff --git a/src/syscalls.c b/src/syscalls.c index 3855795..c544f69 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -95,6 +95,7 @@ static int syscalls_endRedraw(lua_State* L) static int syscalls_SetSkin(lua_State* L) { unsigned ret; + asm_inline( "int $0x40" : "=a"(ret) @@ -139,34 +140,39 @@ static int syscalls_SetWorkArea(lua_State* L) uint32_t bottom = luaL_checkinteger(L, 4); asm_inline( - "int $0x40" ::"a"(48), "b"(6), "c"(left * 65536 + right), "d"(top * 65536 + bottom)); + "int $0x40" :: + "a"(48), + "b"(6), + "c"((left << 16) | right), + "d"((top << 16) | bottom) + ); return 0; } static int syscalls_GetWorkArea(lua_State* L) { - ksys_pos_t leftlright; - ksys_pos_t toplbottom; + ksys_pos_t leftAndRight; + ksys_pos_t topAndBottom; asm_inline( "int $0x40" - :"=a"(leftlright), "=b"(toplbottom) + :"=a"(leftAndRight), "=b"(topAndBottom) : "a"(48), "b"(5) ); lua_createtable(L, 0, 4); - lua_pushinteger(L, leftlright.x); + lua_pushinteger(L, leftAndRight.x); lua_setfield(L, -2, "Left"); - lua_pushinteger(L, leftlright.y); + lua_pushinteger(L, leftAndRight.y); lua_setfield(L, -2, "Right"); - lua_pushinteger(L, toplbottom.x); + lua_pushinteger(L, topAndBottom.x); lua_setfield(L, -2, "Top"); - lua_pushinteger(L, toplbottom.y); + lua_pushinteger(L, topAndBottom.y); lua_setfield(L, -2, "Bottom"); return 1; @@ -195,6 +201,7 @@ static int syscalls_deleteButton(lua_State* L) static int syscalls_SetButtonsStyle(lua_State* L) { uint32_t style = luaL_checkinteger(L, 1); + asm_inline( "int $0x40" ::"a"(48), "b"(1), "c"(style)); @@ -228,7 +235,7 @@ static int syscalls_WindowMsg(lua_State* L) asm_inline( "int $0x40" - :"=a"(ret) + : "=a"(ret) : "a"(72), "b"(1), "c"(event), "d"(code) ); @@ -246,50 +253,49 @@ static int syscalls_threadInfo(lua_State* L) lua_createtable(L, 0, 13); lua_pushstring(L, t.name); - lua_setfield(L, -2, "name"); + lua_setfield(L, -2, "Name"); lua_pushinteger(L, t.cpu_usage); - lua_setfield(L, -2, "cpu_usage"); + lua_setfield(L, -2, "CpuUsage"); lua_pushinteger(L, t.memused); - lua_setfield(L, -2, "memused"); + lua_setfield(L, -2, "MemUsed"); lua_pushinteger(L, t.pid); - lua_setfield(L, -2, "pid"); + lua_setfield(L, -2, "PID"); lua_pushinteger(L, t.key_input_mode); - lua_setfield(L, -2, "keyInputMode"); + lua_setfield(L, -2, "KeyInputMode"); lua_pushinteger(L, t.pos_in_window_stack); - lua_setfield(L, -2, "posInWindowStack"); + lua_setfield(L, -2, "PosInWindowStack"); lua_pushinteger(L, t.slot_num_window_stack); - lua_setfield(L, -2, "slotNumWindowStack"); + lua_setfield(L, -2, "SlotNumWindowStack"); lua_pushinteger(L, t.slot_state); - lua_setfield(L, -2, "slotState"); + lua_setfield(L, -2, "SlotState"); lua_pushinteger(L, t.window_state); - lua_setfield(L, -2, "windowState"); + lua_setfield(L, -2, "WindowState"); lua_pushinteger(L, t.winx_size); - lua_setfield(L, -2, "winXSize"); + lua_setfield(L, -2, "WinXSize"); lua_pushinteger(L, t.winy_size); - lua_setfield(L, -2, "winYSize"); + lua_setfield(L, -2, "WinYSize"); lua_pushinteger(L, t.winx_start); - lua_setfield(L, -2, "winXPos"); + lua_setfield(L, -2, "WinXPos"); lua_pushinteger(L, t.winy_start); - lua_setfield(L, -2, "winYPos"); + lua_setfield(L, -2, "WinYPos"); return 1; } static int syscalls_KillBySlot(lua_State* L) { - _ksys_kill_by_slot( luaL_checkinteger(L, 1)); @@ -319,7 +325,10 @@ static int syscalls_checkEvent(lua_State* L) static int syscalls_waitEventTimeout(lua_State* L) { - lua_pushinteger(L, _ksys_wait_event_timeout(luaL_checkinteger(L, 1))); + lua_pushinteger( + L, + _ksys_wait_event_timeout(luaL_checkinteger(L, 1)) + ); return 1; } @@ -688,7 +697,7 @@ static int syscalls_getMouseEvents(lua_State* L) createMouseState(state, L); lua_pushboolean(L, state & (1 << 8)); - lua_setfield(L, -2, "getMouseEvents"); + lua_setfield(L, -2, "LeftButtonPressed"); lua_pushboolean(L, state & (1 << 9)); lua_setfield(L, -2, "RightButtonPressed"); @@ -756,13 +765,13 @@ static int syscalls_GetMouseSettings(lua_State* L) lua_createtable(L, 0, 3); lua_pushinteger(L, getMouseSettings(KSYS_MOUSE_GET_SPEED)); - lua_setfield(L, -2, "speed"); + lua_setfield(L, -2, "Speed"); lua_pushinteger(L, getMouseSettings(KSYS_MOUSE_GET_SENS)); - lua_setfield(L, -2, "sensitivity"); + lua_setfield(L, -2, "Sensitivity"); lua_pushinteger(L, getMouseSettings(KSYS_MOUSE_GET_DOUBLE_CLICK_DELAY)); - lua_setfield(L, -2, "doubleClickDelay"); + lua_setfield(L, -2, "DoubleClickDelay"); return 1; } @@ -825,7 +834,7 @@ static int syscalls_SetMouseSettings(lua_State* L) luaL_checktype(L, 1, LUA_TTABLE); lua_getfield(L, 1, "Speed"); - lua_getfield(L, 1, "Sens"); + lua_getfield(L, 1, "Sensitivity"); lua_getfield(L, 1, "DoubleClickDelay"); _ksys_set_mouse_settings(KSYS_MOUSE_GET_SPEED, luaL_checkinteger(L, -3)); @@ -985,10 +994,7 @@ static int syscalls_GetTXByteCount(lua_State* L) : "=a"(num), "=b"(NUM) : "a"(74), "b"(8 | device << 8)); - if (num == -1) - lua_pushnil(L); - else - lua_pushinteger(L, (uint64_t)(num | NUM << 31)); + syscalls_ReturnIntegerValueOrNil(num, num | NUM << 31, L); return 1; } @@ -1004,10 +1010,7 @@ static int syscalls_GetRXByteCount(lua_State* L) : "=a"(num), "=b"(NUM) : "a"(74), "b"(9 | device << 8)); - if (num == -1) - lua_pushnil(L); - else - lua_pushinteger(L, (uint64_t)(num | NUM << 31)); + syscalls_ReturnIntegerValueOrNil(num, num | NUM << 31, L); return 1; } @@ -1023,10 +1026,7 @@ static int syscalls_GetTXErrorPacketCount(lua_State* L) : "=a"(num), "=b"(NUM) : "a"(74), "b"(11 | device << 8)); - if (num == -1) - lua_pushnil(L); - else - lua_pushinteger(L, (uint64_t)(num | NUM << 31)); + syscalls_ReturnIntegerValueOrNil(num, num | NUM << 31, L); return 1; } @@ -1042,10 +1042,7 @@ static int syscalls_GetTXDropPacketCount(lua_State* L) : "=a"(num), "=b"(NUM) : "a"(74), "b"(12 | device << 8)); - if (num == -1) - lua_pushnil(L); - else - lua_pushinteger(L, (uint64_t)(num | NUM << 31)); + syscalls_ReturnIntegerValueOrNil(num, num | NUM << 31, L); return 1; } @@ -1061,10 +1058,7 @@ static int syscalls_GetTXMissPacketCount(lua_State* L) : "=a"(num), "=b"(NUM) : "a"(74), "b"(13 | device << 8)); - if (num == -1) - lua_pushnil(L); - else - lua_pushinteger(L, (uint64_t)(num | NUM << 31)); + syscalls_ReturnIntegerValueOrNil(num, num | NUM << 31, L); return 1; } @@ -1080,10 +1074,7 @@ static int syscalls_GetRXErrorPacketCount(lua_State* L) : "=a"(num), "=b"(NUM) : "a"(74), "b"(14 | device << 8)); - if (num == -1) - lua_pushnil(L); - else - lua_pushinteger(L, (uint64_t)(num | NUM << 31)); + syscalls_ReturnIntegerValueOrNil(num, num | NUM << 31, L); return 1; } @@ -1124,10 +1115,10 @@ enum ConnectionStatus { NoConnect = 0, Unknown = 1, - Mb10 = 4, // 10Mb - Mb100 = 5, // 100Mb - Gb = 6, // 1Gb - FullDuplex = 0b10 // + Mb10 = 4, // 10Mb + Mb100 = 5, // 100Mb + Gb = 6, // 1Gb + FullDuplex = 0b10 // }; static int syscalls_GetConnectionStatus(lua_State* L) @@ -1144,6 +1135,7 @@ static int syscalls_GetConnectionStatus(lua_State* L) lua_pushnil(L); else lua_pushinteger(L, num & 0x101); + lua_pushinteger(L, (num & FullDuplex) != 0); return 2; @@ -1420,7 +1412,7 @@ static int syscalls_ReadARPEntry(lua_State* L) if (eax == -1) lua_pushnil(L); else - memcpy(syscalls_pushARPEntry(L), &buffer, sizeof(struct ARP_entry)); + memcpy(syscalls_pushARPEntry(L), &buffer, sizeof(struct ARP_entry)); // не самый лучший вариант реализации, но если если запушить в луа это раньше то как потом запушить nil? хз может потому будут идеи более адекватной реализации return 1; } @@ -1539,8 +1531,8 @@ static const luaL_Reg syscallsLib[] = { /* keyboard funcs */ {"SetKeyInputMode", syscalls_setKeyInputMode}, {"GetKeyInputMode", syscalls_getKeyInputMode}, - {"getKey", syscalls_getKey}, - {"getControlKeyState", syscalls_getControlKeyState}, + {"GetKey", syscalls_getKey}, + {"GetControlKeyState", syscalls_getControlKeyState}, {"SetHotkey", syscalls_SetHotkey}, {"DeleteHotkey", syscalls_DeleteHotkey}, {"LockNormalInput", syscalls_LockNormalInput}, @@ -1643,35 +1635,25 @@ static inline void syscalls_push_events(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, KSYS_EVENT_NONE); - lua_setfield(L, -2, "None"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_NONE, "None"); - lua_pushinteger(L, KSYS_EVENT_REDRAW); - lua_setfield(L, -2, "Redraw"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_REDRAW, "Redraw"); - lua_pushinteger(L, KSYS_EVENT_KEY); - lua_setfield(L, -2, "Key"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_KEY, "Key"); - lua_pushinteger(L, KSYS_EVENT_BUTTON); - lua_setfield(L, -2, "Button"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_BUTTON, "Button"); - lua_pushinteger(L, KSYS_EVENT_DESKTOP); - lua_setfield(L, -2, "Desktop"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_DESKTOP, "Desktop"); - lua_pushinteger(L, KSYS_EVENT_MOUSE); - lua_setfield(L, -2, "Mouse"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_MOUSE, "Mouse"); - lua_pushinteger(L, KSYS_EVENT_IPC); - lua_setfield(L, -2, "IPC"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_IPC, "IPC"); - lua_pushinteger(L, KSYS_EVENT_NETWORK); - lua_setfield(L, -2, "Network"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_NETWORK, "Network"); - lua_pushinteger(L, KSYS_EVENT_DEBUG); - lua_setfield(L, -2, "Debug"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_DEBUG, "Debug"); - lua_pushinteger(L, KSYS_EVENT_IRQBEGIN); - lua_setfield(L, -2, "IRQBegin"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_EVENT_IRQBEGIN, "IRQBegin"); lua_setfield(L, -2, "Event"); } @@ -1680,20 +1662,15 @@ static inline void syscalls_push_buttonCodes(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, KSYS_MOUSE_LBUTTON_PRESSED); - lua_setfield(L, -2, "LeftButton"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_MOUSE_LBUTTON_PRESSED, "LeftButton"); - lua_pushinteger(L, KSYS_MOUSE_RBUTTON_PRESSED); - lua_setfield(L, -2, "RightButton"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_MOUSE_RBUTTON_PRESSED, "RightButton"); - lua_pushinteger(L, KSYS_MOUSE_MBUTTON_PRESSED); - lua_setfield(L, -2, "MiddleButton"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_MOUSE_MBUTTON_PRESSED, "MiddleButton"); - lua_pushinteger(L, KSYS_MOUSE_4BUTTON_PRESSED); - lua_setfield(L, -2, "Button4"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_MOUSE_4BUTTON_PRESSED, "Button4"); - lua_pushinteger(L, KSYS_MOUSE_5BUTTON_PRESSED); - lua_setfield(L, -2, "Button5"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_MOUSE_5BUTTON_PRESSED, "Button5"); lua_setfield(L, -2, "mouseButtons"); } @@ -1702,26 +1679,19 @@ static inline void syscalls_push_slotStates(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, KSYS_SLOT_STATE_RUNNING); - lua_setfield(L, -2, "Running"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SLOT_STATE_RUNNING, "Running"); - lua_pushinteger(L, KSYS_SLOT_STATE_SUSPENDED); - lua_setfield(L, -2, "Suspended"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SLOT_STATE_SUSPENDED, "Suspended"); - lua_pushinteger(L, KSYS_SLOT_STATE_SUSPENDED_WAIT_EVENT); - lua_setfield(L, -2, "SuspendedWaitEvent"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SLOT_STATE_SUSPENDED_WAIT_EVENT, "SuspendedWaitEvent"); - lua_pushinteger(L, KSYS_SLOT_STATE_NORMAL_TERM); - lua_setfield(L, -2, "NormalTerm"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SLOT_STATE_NORMAL_TERM, "NormalTerm"); - lua_pushinteger(L, KSYS_SLOT_STATE_EXCEPT_TERM); - lua_setfield(L, -2, "ExceptTerm"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SLOT_STATE_EXCEPT_TERM, "ExceptTerm"); - lua_pushinteger(L, KSYS_SLOT_STATE_EXCEPT_TERM); - lua_setfield(L, -2, "WaitEvent"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SLOT_STATE_EXCEPT_TERM, "WaitEvent"); - lua_pushinteger(L, KSYS_SLOT_STATE_WAIT_EVENT); - lua_setfield(L, -2, "Free"); + LUA_PUSH_INTEGER_FIELD(L, KSYS_SLOT_STATE_WAIT_EVENT, "Free"); lua_setfield(L, -2, "slotState"); } @@ -1730,21 +1700,15 @@ static inline void syscalls_push_hotkey_states(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, 0); - lua_setfield(L, -2, "hotkeyNoOne"); + LUA_PUSH_INTEGER_FIELD(L, 0, "NoOne"); - lua_pushinteger(L, 1); - lua_setfield(L, -2, "hotkeyOnlyOne"); + LUA_PUSH_INTEGER_FIELD(L, 1, "OnlyOne"); - lua_pushinteger(L, 2); - lua_setfield(L, -2, "hotkeyBoth"); + LUA_PUSH_INTEGER_FIELD(L, 2, "Both"); - lua_pushinteger(L, 4); - lua_setfield(L, -2, "hotkeyLeftOnly"); - - lua_pushinteger(L, 5); - lua_setfield(L, -2, "hotkeyRightOnly"); + LUA_PUSH_INTEGER_FIELD(L, 4, "LeftOnly"); + LUA_PUSH_INTEGER_FIELD(L, 5, "RightOnly"); lua_setfield(L, -2, "hotkeyStates"); } @@ -1753,12 +1717,9 @@ static inline void syscalls_push_buttonsStyle(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, 0); - lua_setfield(L, -2, "ButtonStyleFlat"); - - lua_pushinteger(L, 1); - lua_setfield(L, -2, "ButtonStyleVolume"); + LUA_PUSH_INTEGER_FIELD(L, 0, "Flat"); + LUA_PUSH_INTEGER_FIELD(L, 1, "Volume"); lua_setfield(L, -2, "buttonStyle"); } @@ -1767,20 +1728,15 @@ static inline void syscalls_push_windowStyles(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, 0); - lua_setfield(L, -2, "FixSizes"); + LUA_PUSH_INTEGER_FIELD(L, 0, "FixSizes"); - lua_pushinteger(L, 1); - lua_setfield(L, -2, "NoDraw"); + LUA_PUSH_INTEGER_FIELD(L, 1, "NoDraw"); - lua_pushinteger(L, 2); - lua_setfield(L, -2, "CanChangeSizes"); + LUA_PUSH_INTEGER_FIELD(L, 2, "CanChangeSizes"); - lua_pushinteger(L, 3); - lua_setfield(L, -2, "WithSkin"); + LUA_PUSH_INTEGER_FIELD(L, 3, "WithSkin"); - lua_pushinteger(L, 4); - lua_setfield(L, -2, "WithSkinFixSizes"); + LUA_PUSH_INTEGER_FIELD(L, 4, "WithSkinFixSizes"); lua_setfield(L, -2, "windowStyle"); } @@ -1789,11 +1745,9 @@ static inline void syscalls_push_buttons(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, 0xffff); - lua_setfield(L, -2, "minimization"); + LUA_PUSH_INTEGER_FIELD(L, 0xffff, "minimization"); - lua_pushinteger(L, 1); - lua_setfield(L, -2, "close"); + LUA_PUSH_INTEGER_FIELD(L, 1, "close"); lua_setfield(L, -2, "buttons"); } @@ -1802,20 +1756,15 @@ static inline void syscalls_push_connectionStatus(lua_State* L) { lua_newtable(L); - lua_pushinteger(L, NoConnect); - lua_setfield(L, -2, "no"); + LUA_PUSH_INTEGER_FIELD(L, NoConnect, "No"); - lua_pushinteger(L, Unknown); - lua_setfield(L, -2, "unknown"); + LUA_PUSH_INTEGER_FIELD(L, Unknown, "Unknown"); - lua_pushinteger(L, Mb10); - lua_setfield(L, -2, "10Mb"); + LUA_PUSH_INTEGER_FIELD(L, Mb10, "10Mb"); - lua_pushinteger(L, Mb100); - lua_setfield(L, -2, "100Mb"); + LUA_PUSH_INTEGER_FIELD(L, Mb100, "100Mb"); - lua_pushinteger(L, Gb); - lua_setfield(L, -2, "1Gb"); + LUA_PUSH_INTEGER_FIELD(L, Gb, "1GB"); lua_setfield(L, -2, "connectionStatus"); } diff --git a/src/syscalls.h b/src/syscalls.h index 0888c58..16b2755 100644 --- a/src/syscalls.h +++ b/src/syscalls.h @@ -53,4 +53,8 @@ inline void syscalls_ReturnStringOrNil(LUA_INTEGER cond, const char* value, lua_ } } +#define LUA_PUSH_INTEGER_FIELD(L, val, name) lua_pushinteger(L, val); lua_setfield(L, -2, name); +#define LUA_PUSH_STRING_FIELD(L, val, name) lua_pushstring(L, val); lua_setfield(L, -2, name); +#define LUA_PUSH_NUMBER_FIELD(L, val, name) lua_pushnumber(L, val); lua_setfield(L, -2, name); + #endif // __SYSCALLS_H__ From 68e8b3417ea04f9910460f88bda5a12a0ab1b301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80?= Date: Fri, 25 Apr 2025 20:37:15 +0200 Subject: [PATCH 05/11] fix GetKey function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit зачем то добавлялся к символу перевод на новую строку, хотя должен быть это 0. Наверное опечатка. теперь исправил --- src/syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/syscalls.c b/src/syscalls.c index c544f69..9c7fc0b 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -505,7 +505,7 @@ static int syscalls_getKey(lua_State* L) { char s[2]; s[0] = a.code; - s[1] = '\n'; + s[1] = '\0'; lua_pushstring(L, s); } else From 63359cb028c0188fed27d4af3e0e817669e5ab35 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Sat, 26 Apr 2025 21:44:24 +0500 Subject: [PATCH 06/11] update lua --- Makefile | 2 +- lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 81b8f3e..6dc7034 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -LUA_V = 54 +LUA_V = 5.4 CC = kos32-gcc LD = kos32-ld diff --git a/lua b/lua index eae2ea0..7d5b022 160000 --- a/lua +++ b/lua @@ -1 +1 @@ -Subproject commit eae2ea0aaa2c4d0ad9e9c5c6594f9b2378971ced +Subproject commit 7d5b022b1ae7c4195d6abcabde22855f1aa997d3 From 5319af905686fa1abcd16aa7bdecb3b476df0a53 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Sat, 26 Apr 2025 22:42:45 +0500 Subject: [PATCH 07/11] delete lua --- .gitmodules | 3 --- lua | 1 - 2 files changed, 4 deletions(-) delete mode 160000 lua diff --git a/.gitmodules b/.gitmodules index 3129a53..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "lua"] - path = lua - url = https://git.kolibrios.org/lua/lua.git diff --git a/lua b/lua deleted file mode 160000 index 7d5b022..0000000 --- a/lua +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7d5b022b1ae7c4195d6abcabde22855f1aa997d3 From e6cc79ee8b2c35c978794de18906dfb15b4c1659 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Sat, 26 Apr 2025 22:43:31 +0500 Subject: [PATCH 08/11] make build for different lua versions --- .vscode/c_cpp_properties.json | 2 -- Makefile | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 936f463..9ab557c 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -3,7 +3,6 @@ { "name": "Release", "includePath": [ - "${workspaceFolder}/lua/src", "${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include" ], "defines": [] @@ -11,7 +10,6 @@ { "name": "Debug", "includePath": [ - "${workspaceFolder}/lua/src", "${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include" ], "defines": [ diff --git a/Makefile b/Makefile index 6dc7034..6d6afb6 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ 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 +LIBS = $(SYSLIBS) $(MYLIBS) -llua$(LUA_V).dll.a ifeq ($(OS), Windows_NT) TOOLCHAIN_PATH = C:/MinGW/msys/1.0/home/autobuild/tools/win32 @@ -21,7 +21,7 @@ KOLIBRIOS_REPO = $(abspath ../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 +SYSCFLAGS = -fno-ident -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -I$(NewLib_DIR)/libc/include -I$(TOOLCHAIN_PATH)/include/lua$(LUA_V) 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 = From 37ae2a28a9cadf20129ba38ce471a567db78ae22 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Fri, 25 Apr 2025 23:25:01 +0500 Subject: [PATCH 09/11] add core version and library version --- .vscode/c_cpp_properties.json | 9 +- .vscode/settings.json | 4 +- Makefile | 17 ++- src/syscalls.c | 6 +- src/version/coreversion.c | 13 +++ src/version/coreversion.h | 8 ++ src/version/library_version.h | 17 +++ src/version/version_type.c | 202 ++++++++++++++++++++++++++++++++++ src/version/version_type.h | 28 +++++ 9 files changed, 297 insertions(+), 7 deletions(-) create mode 100644 src/version/coreversion.c create mode 100644 src/version/coreversion.h create mode 100644 src/version/library_version.h create mode 100644 src/version/version_type.c create mode 100644 src/version/version_type.h diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 936f463..a6c77da 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -6,7 +6,11 @@ "${workspaceFolder}/lua/src", "${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include" ], - "defines": [] + "defines": [ + "SYSCALLS_VERSION_A", + "SYSCALLS_VERSION_B", + "SYSCALLS_VERSION_C" + ] }, { "name": "Debug", @@ -15,6 +19,9 @@ "${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include" ], "defines": [ + "SYSCALLS_VERSION_A", + "SYSCALLS_VERSION_B", + "SYSCALLS_VERSION_C", "NDEBUG" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 805b389..844e796 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,9 @@ "socket.h": "c", "graphic.h": "c", "syscalls.h": "c", - "registers.h": "c" + "registers.h": "c", + "version_type.h": "c", + "library_version.h": "c" }, "cSpell.words": [ "syscalls", diff --git a/Makefile b/Makefile index 81b8f3e..a842386 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,8 @@ LUA_V = 54 +SYSCALLS_VER_A = 2 +SYSCALLS_VER_B = 0 +SYSCALLS_VER_C = 0 +SYSCALLS_VER = $(SYSCALLS_VER_C).$(SYSCALLS_VER_B).$(SYSCALLS_VER_A) CC = kos32-gcc LD = kos32-ld @@ -21,7 +25,7 @@ KOLIBRIOS_REPO = $(abspath ../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 +SYSCFLAGS = -fno-ident -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -I$(NewLib_DIR)/libc/include -I$(abspath .)/lua/src -DSYSCALLS_VERSION_A=$(SYSCALLS_VER_A) -DSYSCALLS_VERSION_B=$(SYSCALLS_VER_B) -DSYSCALLS_VERSION_C=$(SYSCALLS_VER_C) 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 = @@ -32,8 +36,9 @@ MYOBJS = Socket_O = src/sockets/socket.o src/sockets/socket_lua.o src/sockets/sockaddr.o Debug_O = src/debug/debug.o src/debug/registers.o +Version_O = src/version/coreversion.o src/version/version_type.o -ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) $(Debug_O) +ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) $(Debug_O) $(Version_O) syscalls.dll: $(ALL_O) $(CC) -shared -T dll.lds --entry _DllStartup -o $@ $(ALL_O) $(LIBS) @@ -45,7 +50,7 @@ clean: ## Sources -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/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/version/library_version.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 @@ -53,7 +58,9 @@ 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 src/debug/debug.o: src/debug/debug.c src/debug/debug.h src/debug/registers.h -src/debug/registers.o: src/debug/registers.c src/debug/registers.h src/syscalls.h +src/debug/registers.o: src/debug/registers.c src/debug/registers.h src/syscalls.h src/debug.h +src/version/coreversion.o: src/version/coreversion.c src/version/coreversion.h +src/version/version_type.o: src/version/version_type.c src/version/version_type.h src/debug.h ## headers @@ -62,3 +69,5 @@ src/sockets/socket_lua.h: src/syscalls.h src/sockets/socket.h src/sockets/sockaddr.h: src/sockets/socket.h src/syscalls.h src/debug/debug.h: src/syscalls.h src/debug/registers.h: src/syscalls.h +src/version/coreversion.h: src/version/version_type.h +src/version/version_type.h: src/syscalls.h diff --git a/src/syscalls.c b/src/syscalls.c index 9c7fc0b..ceb555b 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -15,7 +15,8 @@ #include "sockets/socket_lua.h" #include "debug/debug.h" #include "graphic.h" - +#include "version/coreversion.h" +#include "version/library_version.h" /* Режим ввода с клавиатуры @@ -1775,6 +1776,8 @@ LUALIB_API int luaopen_syscalls(lua_State* L) { luaL_newlib(L, syscallsLib); + syscalls_push_library_version(L); + syscalls_push_events(L); syscalls_push_slotStates(L); syscalls_register_scancodes(L); @@ -1787,6 +1790,7 @@ LUALIB_API int luaopen_syscalls(lua_State* L) syscalls_register_ARPEntry(L); syscalls_register_SystemColors(L); + syscalls_register_Version(L); _ksys_set_event_mask(7); // set default event mask diff --git a/src/version/coreversion.c b/src/version/coreversion.c new file mode 100644 index 0000000..a50d712 --- /dev/null +++ b/src/version/coreversion.c @@ -0,0 +1,13 @@ +#include "coreversion.h" + +int syscalls_GetCoreVersion(lua_State* L) +{ + struct core_version* ver = syscalls_pushVersion(L); + + asm_inline( + "int $0x40" + ::"a"(18), "b"(13), "c"(ver) + ); + + return 1; +} \ No newline at end of file diff --git a/src/version/coreversion.h b/src/version/coreversion.h new file mode 100644 index 0000000..cfa3782 --- /dev/null +++ b/src/version/coreversion.h @@ -0,0 +1,8 @@ +#ifndef __CORE_VERSION_H__ +#define __CORE_VERSION_H__ + +#include "version_type.h" + +int syscalls_GetCoreVersion(lua_State *L); + +#endif // __CORE_VERSION_H__ diff --git a/src/version/library_version.h b/src/version/library_version.h new file mode 100644 index 0000000..f2f5067 --- /dev/null +++ b/src/version/library_version.h @@ -0,0 +1,17 @@ +#ifndef __LIBRARY_VERSION_H__ +#define __LIBRARY_VERSION_H__ + +#include "../syscalls.h" + +inline void syscalls_push_library_version(lua_State* L) +{ + lua_createtable(L, 0, 3); + + LUA_PUSH_INTEGER_FIELD(L, SYSCALLS_VERSION_A, "a"); + LUA_PUSH_INTEGER_FIELD(L, SYSCALLS_VERSION_B, "b"); + LUA_PUSH_INTEGER_FIELD(L, SYSCALLS_VERSION_C, "c"); + + lua_setfield(L, -2, "version"); +} + +#endif // __LIBRARY_VERSION_H__ \ No newline at end of file diff --git a/src/version/version_type.c b/src/version/version_type.c new file mode 100644 index 0000000..ff8394a --- /dev/null +++ b/src/version/version_type.c @@ -0,0 +1,202 @@ +#include "version_type.h" +#include +#include "../debug.h" + +static int syscalls_indexVersion(lua_State* L) +{ + struct core_version* r = luaL_checkudata(L, 1, syscalls_Version_metatable_name); + const char* index = luaL_checkstring(L, 2); + + if (strcmp(index, "a") == 0) + { + lua_pushinteger(L, r->a); + } + else if (strcmp(index, "b") == 0) + { + lua_pushinteger(L, r->b); + } + else if (strcmp(index, "c") == 0) + { + lua_pushinteger(L, r->c); + } + else if (strcmp(index, "d") == 0) + { + lua_pushinteger(L, r->d); + } + else if (strcmp(index, "rev") == 0) + { + lua_pushinteger(L, r->revision); + } + else + { + lua_pushnil(L); + } + + return 1; +} + +static int syscalls_newindexVersion(lua_State* L) +{ + struct core_version* r = luaL_checkudata(L, 1, syscalls_Version_metatable_name); + const char* index = luaL_checkstring(L, 2); + uint32_t val = luaL_checkinteger(L, 3); + + if (strcmp(index, "a") == 0) + { + r->a = val; + } + else if (strcmp(index, "b") == 0) + { + r->b = val; + } + else if (strcmp(index, "c") == 0) + { + r->c = val; + } + else if (strcmp(index, "d") == 0) + { + r->d = val; + } + else if (strcmp(index, "rev") == 0) + { + r->revision = val; + } + else + { + luaL_error(L, "wrong index: %s", index); + } + + return 0; +} + +static int syscalls_eqVersion(lua_State* L) +{ + lua_pushboolean( + L, + memcmp( + luaL_checkudata(L, 1, syscalls_Version_metatable_name), + luaL_checkudata(L, 2, syscalls_Version_metatable_name), + sizeof(struct core_version) + ) + ); + + return 1; +} + +static int syscalls_ltVersion(lua_State* L) +{ + struct core_version* a = luaL_checkudata(L, 1, syscalls_Version_metatable_name); + struct core_version* b = luaL_checkudata(L, 2, syscalls_Version_metatable_name); + + bool r; + + if (a->a < b->a) + r = true; + else if (a->b < b->b) + r = true; + else if (a->c < b->c) + r = true; + else if (a->d < b->d) + r = true; + else if (a->revision < b->revision) + r = true; + else + r = false; + + lua_pushboolean(L, r); + + return 1; +} + +static int syscalls_leVersion(lua_State* L) +{ + struct core_version* a = luaL_checkudata(L, 1, syscalls_Version_metatable_name); + struct core_version* b = luaL_checkudata(L, 2, syscalls_Version_metatable_name); + + bool r; + + if (a->a <= b->a) + r = true; + else if (a->b <= b->b) + r = true; + else if (a->c <= b->c) + r = true; + else if (a->d <= b->d) + r = true; + else if (a->revision <= b->revision) + r = true; + else + r = false; + + lua_pushboolean(L, r); + return 1; +} + +static int syscalls_tostringVersion(lua_State* L) +{ + // AAA.BBB.CCC.DDD.RRRRRRRRRRRRR + // +1 на конце на всякий случай + char buff[4 + 4 + 4 + 4 + 13 + 1]; + struct core_version* a = luaL_checkudata(L, 1, syscalls_Version_metatable_name); + + sprintf(buff, "%d.%d.%d.%d.%d", a->a, a->b, a->c, a->d, a->revision); + + lua_pushstring(L, buff); + + return 1; +} + +static const luaL_Reg syscalls_Version_m[] = { + {"__index", syscalls_indexVersion}, + {"__newindex", syscalls_newindexVersion}, + {"__eq", syscalls_eqVersion}, + {"__lt", syscalls_ltVersion}, + {"__le", syscalls_ltVersion}, + {"__tostring", syscalls_tostringVersion}, + {NULL, NULL} +}; + +struct core_version* syscalls_pushVersion(lua_State* L) +{ + DEBUG_LINE("push Version entry"); + + struct core_version* entry = lua_newuserdata(L, sizeof(struct core_version)); + + luaL_setmetatable(L, syscalls_Version_metatable_name); + + return entry; +} + +static int syscalls_newVersion(lua_State* L) +{ + struct core_version* r = syscalls_pushVersion(L); + memset(r, 0, sizeof(struct core_version)); + + r->a = luaL_checkinteger(L, 1); + r->b = luaL_checkinteger(L, 2); + r->c = luaL_checkinteger(L, 3); + r->d = luaL_checkinteger(L, 4); + r->revision = luaL_checkinteger(L, 5); + + return 1; +} + +static const luaL_Reg syscalls_Version_lib[] = { + {"new", syscalls_newVersion}, + {NULL, NULL} +}; + +void syscalls_register_Version(lua_State* L) +{ + DEBUG_LINE("register Version entry"); + + luaL_newlib(L, syscalls_Version_lib); + + lua_setfield(L, -2, syscalls_Version_name); + + + luaL_newmetatable(L, syscalls_Version_metatable_name); + luaL_setfuncs(L, syscalls_Version_m, 0); + + lua_pop(L, 1); +} diff --git a/src/version/version_type.h b/src/version/version_type.h new file mode 100644 index 0000000..9fe66d7 --- /dev/null +++ b/src/version/version_type.h @@ -0,0 +1,28 @@ +#ifndef __VERSION_TYPE_H__ +#define __VERSION_TYPE_H__ + +#include +#include "../syscalls.h" + +// sub library name +#define syscalls_Version_name "CoreVersion" +#define syscalls_Version_metatable_name "Version table" +#define syscalls_Version_metatable_name "Version metatable" + +struct core_version +{ + uint8_t a; + uint8_t b; + uint8_t c; + uint8_t d; + uint8_t zero; + uint32_t revision; + + uint32_t unused; +}; + +struct core_version* syscalls_pushVersion(lua_State* L); + +void syscalls_register_Version(lua_State* L); + +#endif // __VERSION_TYPE_H__ From 1c77f250173c7f6d1a1fb0080f92cf992e845352 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Sun, 27 Apr 2025 14:58:40 +0500 Subject: [PATCH 10/11] use ld instead gcc --- .vscode/c_cpp_properties.json | 6 +++++- Makefile | 7 +++---- lua | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) create mode 160000 lua diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 29a8a02..0c0c109 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -1,8 +1,10 @@ { "configurations": [ { - "name": "Release", + "name": "Windows Lua5.4", "includePath": [ + "C:/MinGW/msys/1.0/home/autobuild/tools/win32/include", + "C:/MinGW/msys/1.0/home/autobuild/tools/win32/include/lua5.4", "${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include" ], "defines": [ @@ -14,6 +16,8 @@ { "name": "Debug", "includePath": [ + "/home/autobuild/tools/win32/include", + "/home/autobuild/tools/win32/include/lua5.4", "${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include" ], "defines": [ diff --git a/Makefile b/Makefile index cc2c473..cff78f1 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ OBJCOPY = kos32-objcopy STD = -std=gnu11 CFLAGS = $(SYSCFLAGS) -O2 -Wall -Wextra $(STD) $(MYCFLAGS) -DSYSCALLS_VERSION_A=$(SYSCALLS_VER_A) -DSYSCALLS_VERSION_B=$(SYSCALLS_VER_B) -DSYSCALLS_VERSION_C=$(SYSCALLS_VER_C) LDFLAGS = $(SYSLDFLAGS) $(MYLDFLAGS) -LIBS = $(SYSLIBS) $(MYLIBS) -llua$(LUA_V).dll.a +LIBS = $(SYSLIBS) $(MYLIBS) -llua$(LUA_V).dll ifeq ($(OS), Windows_NT) TOOLCHAIN_PATH = C:/MinGW/msys/1.0/home/autobuild/tools/win32 @@ -27,8 +27,7 @@ KOLIBRIOS_REPO = $(abspath ../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$(TOOLCHAIN_PATH)/include/lua$(LUA_V) -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 +SYSLIBS = -L $(SDK_DIR)/lib -lgcc -lc.dll -ldll MYCFLAGS = MYLDFLAGS = MYLIBS = @@ -42,7 +41,7 @@ Version_O = src/version/coreversion.o src/version/version_type.o ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) $(Debug_O) $(Version_O) syscalls.dll: $(ALL_O) - $(CC) -shared -T dll.lds --entry _DllStartup -o $@ $(ALL_O) $(LIBS) + $(LD) -shared -T dll.lds --entry _DllStartup $(LDFLAGS) -o $@ $(ALL_O) $(LIBS) clean: rm -f $(ALL_O) syscalls.dll diff --git a/lua b/lua new file mode 160000 index 0000000..eae2ea0 --- /dev/null +++ b/lua @@ -0,0 +1 @@ +Subproject commit eae2ea0aaa2c4d0ad9e9c5c6594f9b2378971ced From 105f80a8f6e5f952772346e87787455f0e19dba8 Mon Sep 17 00:00:00 2001 From: Egor00f Date: Fri, 2 May 2025 13:13:56 +0500 Subject: [PATCH 11/11] delete lua && add background funcs --- .vscode/c_cpp_properties.json | 13 ++++ Makefile | 4 +- lua | 1 - src/background/background.c | 129 ++++++++++++++++++++++++++++++++++ src/background/background.h | 33 +++++++++ src/syscalls.c | 49 ++++--------- src/syscalls.h | 28 ++++++-- 7 files changed, 214 insertions(+), 43 deletions(-) delete mode 160000 lua create mode 100644 src/background/background.c create mode 100644 src/background/background.h diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 0c0c109..5997ecc 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -13,6 +13,19 @@ "SYSCALLS_VERSION_C" ] }, + { + "name": "Windows Lua5.3", + "includePath": [ + "C:/MinGW/msys/1.0/home/autobuild/tools/win32/include", + "C:/MinGW/msys/1.0/home/autobuild/tools/win32/include/lua5.3", + "${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include" + ], + "defines": [ + "SYSCALLS_VERSION_A", + "SYSCALLS_VERSION_B", + "SYSCALLS_VERSION_C" + ] + }, { "name": "Debug", "includePath": [ diff --git a/Makefile b/Makefile index cff78f1..f1868a4 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ Socket_O = src/sockets/socket.o src/sockets/socket_lua.o src/sockets/sockaddr.o Debug_O = src/debug/debug.o src/debug/registers.o Version_O = src/version/coreversion.o src/version/version_type.o -ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) $(Debug_O) $(Version_O) +ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) $(Debug_O) $(Version_O) src/background/background.o syscalls.dll: $(ALL_O) $(LD) -shared -T dll.lds --entry _DllStartup $(LDFLAGS) -o $@ $(ALL_O) $(LIBS) @@ -61,6 +61,7 @@ src/debug/debug.o: src/debug/debug.c src/debug/debug.h src/debug/registers.h src/debug/registers.o: src/debug/registers.c src/debug/registers.h src/syscalls.h src/debug.h src/version/coreversion.o: src/version/coreversion.c src/version/coreversion.h src/version/version_type.o: src/version/version_type.c src/version/version_type.h src/debug.h +src/background/background.o: src/background/background.c src/background/background.h ## headers @@ -71,3 +72,4 @@ src/debug/debug.h: src/syscalls.h src/debug/registers.h: src/syscalls.h src/version/coreversion.h: src/version/version_type.h src/version/version_type.h: src/syscalls.h +src/background/background.h: src/syscalls.h diff --git a/lua b/lua deleted file mode 160000 index eae2ea0..0000000 --- a/lua +++ /dev/null @@ -1 +0,0 @@ -Subproject commit eae2ea0aaa2c4d0ad9e9c5c6594f9b2378971ced diff --git a/src/background/background.c b/src/background/background.c new file mode 100644 index 0000000..d68563b --- /dev/null +++ b/src/background/background.c @@ -0,0 +1,129 @@ +#include "background.h" + +static ksys_pos_t sizes; + +int syscalls_backgroundGetSize(lua_State* L) +{ + asm_inline( + "int $0x40" + :"=a"(sizes) + : "a"(39), "b"(1) + ); + + syscalls_push_pos_t(L, sizes); + + return 1; +} + +int syscalls_backgroundSetSize(lua_State* L) +{ + sizes = syscalls_check_pos_t(L, 1); + + _ksys_bg_set_size( + sizes.x, + sizes.y + ); + + return 0; +} + +int syscalls_backgroundPutPixel(lua_State* L) +{ + uint32_t x = luaL_checkinteger(L, 1); + uint32_t y = luaL_checkinteger(L, 2); + + _ksys_bg_put_pixel( + x, + y, + sizes.x, + luaL_checkinteger(L, 3) + ); + + return 0; +} + +ksys_color_t background_read_point(ksys_pos_t pos, uint16_t w) +{ + ksys_color_t color; + + asm_inline( + "int $0x40" + :"=a"(color) + : "a"(39), "b"(2), "c"((pos.x + pos.y * w) * 3) + ); + + return color; +} + +int syscalls_backgroundReadPoint(lua_State* L) +{ + lua_pushinteger( + L, + background_read_point(syscalls_check_pos_t(L, 1), sizes.x) + ); + + return 1; +} + +int syscalls_backgroundRedraw(lua_State* L) +{ + _ksys_bg_redraw(); + + return 0; +} + +int syscalls_backgroundSetDrawMode(lua_State* L) +{ + _ksys_bg_set_mode(luaL_checkinteger(L, 1)); + + return 0; +} + +int syscalls_backgroundGetDrawMode(lua_State* L) +{ + enum KSYS_BG_MODES mode; + + asm_inline( + "int $0x40" + :"=a"(mode) + : "a"(39), "b"(4) + ); + + lua_pushinteger(L, mode); + + return 1; +} + +int syscalls_backgroundOpenMap(lua_State* L) +{ + lua_pushinteger( + L, + _ksys_bg_get_map() + ); + + return 1; +} + +int syscalls_backgroundCloseMap(lua_State* L) +{ + if (_ksys_bg_close_map(luaL_checkinteger(L, 1)) == 0) + { + lua_pushnil(L); + } + else + { + lua_pushboolean(L, true); + } + + return 1; +} + +int syscalls_backgroundRedrawArea(lua_State* L) +{ + _ksys_bg_redraw_bar( + syscalls_check_pos_t(L, 1), + syscalls_check_pos_t(L, 3) + ); + + return 0; +} diff --git a/src/background/background.h b/src/background/background.h new file mode 100644 index 0000000..6168827 --- /dev/null +++ b/src/background/background.h @@ -0,0 +1,33 @@ +#ifndef __BACKGROUND_H__ +#define __BACKGROUND_H__ + +#include "../syscalls.h" + +int syscalls_backgroundSetSize(lua_State* L); + +int syscalls_backgroundPutPixel(lua_State* L); + +int syscalls_backgroundRedraw(lua_State* L); + +int syscalls_backgroundSetDrawMode(lua_State* L); + +int syscalls_backgroundGetDrawMode(lua_State* L); + +int syscalls_backgroundOpenMap(lua_State* L); + +int syscalls_backgroundCloseMap(lua_State* L); + +int syscalls_backgroundRedrawArea(lua_State* L); + +inline syscalls_push_BackgroundDrawMode(lua_State* L) +{ + lua_createtable(L, 0, 2); + + LUA_PUSH_INTEGER_FIELD(L, KSYS_BG_MODE_PAVE, "Pave"); + + LUA_PUSH_INTEGER_FIELD(L, KSYS_BG_MODE_STRETCH, "Stretch"); + + lua_setfield(L, -2, "DrawMode"); +} + +#endif // __BACKGROUND_H__ diff --git a/src/syscalls.c b/src/syscalls.c index ceb555b..c8531ba 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -17,6 +17,7 @@ #include "graphic.h" #include "version/coreversion.h" #include "version/library_version.h" +#include "background/background.h" /* Режим ввода с клавиатуры @@ -107,7 +108,7 @@ static int syscalls_SetSkin(lua_State* L) return 1; } -static int syscalls_GetSkinTilteArea(lua_State* L) +static int syscalls_GetSkinTitleArea(lua_State* L) { ksys_pos_t leftRight, topBottom; @@ -408,37 +409,6 @@ static int syscalls_getButton(lua_State* L) } -/* - Backgound -*/ - -static int syscalls_backgroundSetSize(lua_State* L) -{ - _ksys_bg_set_size( - luaL_checkinteger(L, 1), - luaL_checkinteger(L, 2)); - - return 0; -} - -static int syscalls_backgroundPutPixel(lua_State* L) -{ - _ksys_bg_put_pixel( - luaL_checkinteger(L, 1), - luaL_checkinteger(L, 2), - luaL_checkinteger(L, 3), - luaL_checkinteger(L, 4)); - - return 0; -} - -static int syscalls_backgroundRedraw(lua_State* L) -{ - _ksys_bg_redraw(); - - return 0; -} - static int syscalls_getCPUClock(lua_State* L) { lua_pushinteger(L, _ksys_get_cpu_clock()); @@ -1495,7 +1465,7 @@ static const luaL_Reg syscallsLib[] = { {"SetWindowTitle", syscalls_setWindowTitle}, {"GetSkinHeight", syscalls_getSkinHeight}, {"SetSkin", syscalls_SetSkin}, - {"GetSkinTitleArea", syscalls_GetSkinTilteArea}, + {"GetSkinTitleArea", syscalls_GetSkinTitleArea}, /* Buttons funcs*/ {"DefineButton", syscalls_defineButton}, {"DeleteButton", syscalls_deleteButton}, @@ -1507,11 +1477,16 @@ static const luaL_Reg syscallsLib[] = { {"CheckEvent", syscalls_checkEvent}, {"WaitEventTimeout", syscalls_waitEventTimeout}, /* Background funcs */ - {"BackgroundSetSize", syscalls_backgroundSetSize}, - {"BackgroundPutPixel", syscalls_backgroundPutPixel}, - {"BackgroundRedraw", syscalls_backgroundRedraw}, + { "BackgroundSetSize", syscalls_backgroundSetSize }, + { "BackgroundPutPixel", syscalls_backgroundPutPixel }, + { "BackgroundRedraw", syscalls_backgroundRedraw }, + { "BackgroundSetDrawMode", syscalls_backgroundSetDrawMode }, + { "BackgroundGetDrawMode", syscalls_backgroundGetDrawMode }, + { "BackgroundOpenMap", syscalls_backgroundOpenMap }, + { "BackgroundCloseMap", syscalls_backgroundCloseMap }, + { "BackgroundRedrawArea", syscalls_backgroundRedrawArea }, /* system funcs */ - {"GetRamSize", syscalls_getRamSize}, + { "GetRamSize", syscalls_getRamSize }, {"GetFreeRam", syscalls_getFreeRam}, {"GetCPUClock", syscalls_getCPUClock}, {"ShutdownPowerOff", syscalls_shutdownPowerOff}, diff --git a/src/syscalls.h b/src/syscalls.h index 16b2755..2931d3d 100644 --- a/src/syscalls.h +++ b/src/syscalls.h @@ -4,8 +4,9 @@ #include #include #include +#include -inline void syscalls_ReturnIntegerOrNil(LUA_INTEGER value, lua_State* L) +static inline void syscalls_ReturnIntegerOrNil(LUA_INTEGER value, lua_State* L) { if (value == -1) { @@ -17,7 +18,7 @@ inline void syscalls_ReturnIntegerOrNil(LUA_INTEGER value, lua_State* L) } } -inline void syscalls_ReturnIntegerValueOrNil(LUA_INTEGER cond, LUA_INTEGER value, lua_State* L) +static inline void syscalls_ReturnIntegerValueOrNil(LUA_INTEGER cond, LUA_INTEGER value, lua_State* L) { if (cond == -1) { @@ -29,7 +30,7 @@ inline void syscalls_ReturnIntegerValueOrNil(LUA_INTEGER cond, LUA_INTEGER value } } -inline void syscalls_ReturnTrueOrNil(LUA_INTEGER value, lua_State* L) +static inline void syscalls_ReturnTrueOrNil(LUA_INTEGER value, lua_State* L) { if (value == -1) { @@ -41,7 +42,7 @@ inline void syscalls_ReturnTrueOrNil(LUA_INTEGER value, lua_State* L) } } -inline void syscalls_ReturnStringOrNil(LUA_INTEGER cond, const char* value, lua_State* L) +static inline void syscalls_ReturnStringOrNil(LUA_INTEGER cond, const char* value, lua_State* L) { if (cond == -1) { @@ -57,4 +58,23 @@ inline void syscalls_ReturnStringOrNil(LUA_INTEGER cond, const char* value, lua_ #define LUA_PUSH_STRING_FIELD(L, val, name) lua_pushstring(L, val); lua_setfield(L, -2, name); #define LUA_PUSH_NUMBER_FIELD(L, val, name) lua_pushnumber(L, val); lua_setfield(L, -2, name); +static inline ksys_pos_t syscalls_check_pos_t(lua_State* L, int index) +{ + ksys_pos_t pos; + + pos.x = luaL_checkinteger(L, index); + pos.y = luaL_checkinteger(L, index + 1); + + return pos; +} + +static inline void syscalls_push_pos_t(lua_State* L, ksys_pos_t pos) +{ + lua_createtable(L, 0, 2); + + LUA_PUSH_INTEGER_FIELD(L, pos.x, "x"); + + LUA_PUSH_INTEGER_FIELD(L, pos.y, "y"); +} + #endif // __SYSCALLS_H__