Compare commits

...

13 Commits

Author SHA1 Message Date
79a79c5409 Merge branch 'main' into add-ipc 2025-05-02 13:43:03 +05:00
105f80a8f6 delete lua && add background funcs 2025-05-02 13:13:56 +05:00
1c77f25017 use ld instead gcc 2025-04-27 14:58:40 +05:00
a4042c34d4 Merge branch 'update-lua' 2025-04-27 12:03:33 +05:00
37ae2a28a9 add core version and library version 2025-04-26 19:57:15 +02:00
e6cc79ee8b make build for different lua versions 2025-04-26 22:43:31 +05:00
5319af9056 delete lua 2025-04-26 22:42:45 +05:00
63359cb028 update lua 2025-04-26 21:44:24 +05:00
68e8b3417e fix GetKey function
зачем то добавлялся к символу перевод на новую строку, хотя должен быть это 0. Наверное опечатка. теперь исправил
2025-04-25 20:37:15 +02:00
008485e004 сделал нормальные имена полей таблиц, возвращаемых некоторыми функциями(и получаемых в аргументах) && create and use macro LUA_PUSH_INTEGER_FILED for push enums 2025-04-16 20:23:27 +05:00
14ef5e42a8 update manual.md 2025-04-16 15:49:54 +05:00
9ca0d8d658 update manual 2025-04-16 08:59:49 +02:00
186fbe426e Update manual
Add more funcs
2025-04-16 08:41:11 +02:00
14 changed files with 522 additions and 61 deletions

3
.gitmodules vendored
View File

@@ -1,3 +0,0 @@
[submodule "lua"]
path = lua
url = https://git.kolibrios.org/lua/lua.git

View File

@@ -1,20 +1,42 @@
{
"configurations": [
{
"name": "Release",
"name": "Windows Lua5.4",
"includePath": [
"${workspaceFolder}/lua/src",
"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": []
"defines": [
"SYSCALLS_VERSION_A",
"SYSCALLS_VERSION_B",
"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": [
"${workspaceFolder}/lua/src",
"/home/autobuild/tools/win32/include",
"/home/autobuild/tools/win32/include/lua5.4",
"${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include"
],
"defines": [
"SYSCALLS_VERSION_A",
"SYSCALLS_VERSION_B",
"SYSCALLS_VERSION_C",
"NDEBUG"
]
}

View File

@@ -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",

View File

@@ -1,13 +1,18 @@
LUA_V = 54
LUA_V = 5.4
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
STRIP = kos32-strip
OBJCOPY = kos32-objcopy
STD = -std=gnu11
CFLAGS = $(SYSCFLAGS) -O2 -Wall -Wextra $(STD) $(MYCFLAGS)
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) $(TOOLCHAIN_PATH)/mingw32/lib/lua$(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
@@ -21,9 +26,8 @@ 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
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
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)
SYSLIBS = -L $(SDK_DIR)/lib -lgcc -lc.dll -ldll
MYCFLAGS =
MYLDFLAGS =
MYLIBS =
@@ -33,11 +37,12 @@ MYOBJS =
Socket_O = src/sockets/socket.o src/sockets/socket_lua.o src/sockets/sockaddr.o
IPC_O = src/IPC/ipc.o src/IPC/IPC_msg.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) $(IPC_O)
ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) $(Debug_O) $(Version_O) $(IPC_O) src/background/background.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
@@ -46,7 +51,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
@@ -54,9 +59,12 @@ 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/IPC/ipc.o: src/IPC/ipc.c src/IPC/ipc.h src/IPC/IPC_msg.h
src/IPC/IPC_msg.o: src/IPC/IPC_msg.c src/IPC/IPC_msg.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
@@ -67,3 +75,6 @@ src/debug/debug.h: src/syscalls.h
src/debug/registers.h: src/syscalls.h
src/IPC/IPC_msg.h: src/syscalls.h
src/IPC/ipc.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

1
lua

repo.diff.submodule_deleted%!(EXTRA template.HTML=lua, template.HTML=eae2ea0aaa)

129
src/background/background.c Normal file
View File

@@ -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;
}

View File

@@ -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__

View File

@@ -17,6 +17,9 @@
#include "graphic.h"
#include "IPC/ipc.h"
#include "IPC/IPC_msg.h"
#include "version/coreversion.h"
#include "version/library_version.h"
#include "background/background.h"
/*
Режим ввода с клавиатуры
@@ -107,7 +110,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 +411,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());
@@ -506,7 +478,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
@@ -1495,7 +1467,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 +1479,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},
@@ -1779,6 +1756,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);
@@ -1793,6 +1772,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

View File

@@ -4,8 +4,9 @@
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <sys/ksys.h>
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__

13
src/version/coreversion.c Normal file
View File

@@ -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;
}

View File

@@ -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__

View File

@@ -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__

202
src/version/version_type.c Normal file
View File

@@ -0,0 +1,202 @@
#include "version_type.h"
#include <string.h>
#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);
}

View File

@@ -0,0 +1,28 @@
#ifndef __VERSION_TYPE_H__
#define __VERSION_TYPE_H__
#include <sys/ksys.h>
#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__