Compare commits
1 Commits
105f80a8f6
...
add-excamp
Author | SHA1 | Date | |
---|---|---|---|
7fd94fc4c6 |
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -0,0 +1,3 @@
|
||||
[submodule "lua"]
|
||||
path = lua
|
||||
url = https://git.kolibrios.org/lua/lua.git
|
||||
|
30
.vscode/c_cpp_properties.json
vendored
30
.vscode/c_cpp_properties.json
vendored
@@ -1,42 +1,20 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Windows Lua5.4",
|
||||
"name": "Release",
|
||||
"includePath": [
|
||||
"C:/MinGW/msys/1.0/home/autobuild/tools/win32/include",
|
||||
"C:/MinGW/msys/1.0/home/autobuild/tools/win32/include/lua5.4",
|
||||
"${workspaceFolder}/lua/src",
|
||||
"${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include"
|
||||
],
|
||||
"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"
|
||||
]
|
||||
"defines": []
|
||||
},
|
||||
{
|
||||
"name": "Debug",
|
||||
"includePath": [
|
||||
"/home/autobuild/tools/win32/include",
|
||||
"/home/autobuild/tools/win32/include/lua5.4",
|
||||
"${workspaceFolder}/lua/src",
|
||||
"${workspaceFolder}/../kolibrios/contrib/sdk/sources/newlib/libc/include"
|
||||
],
|
||||
"defines": [
|
||||
"SYSCALLS_VERSION_A",
|
||||
"SYSCALLS_VERSION_B",
|
||||
"SYSCALLS_VERSION_C",
|
||||
"NDEBUG"
|
||||
]
|
||||
}
|
||||
|
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -7,9 +7,7 @@
|
||||
"socket.h": "c",
|
||||
"graphic.h": "c",
|
||||
"syscalls.h": "c",
|
||||
"registers.h": "c",
|
||||
"version_type.h": "c",
|
||||
"library_version.h": "c"
|
||||
"registers.h": "c"
|
||||
},
|
||||
"cSpell.words": [
|
||||
"syscalls",
|
||||
|
31
Makefile
31
Makefile
@@ -1,18 +1,13 @@
|
||||
|
||||
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)
|
||||
LUA_V = 54
|
||||
|
||||
CC = kos32-gcc
|
||||
LD = kos32-ld
|
||||
STRIP = kos32-strip
|
||||
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)
|
||||
CFLAGS = $(SYSCFLAGS) -O2 -Wall -Wextra $(STD) $(MYCFLAGS)
|
||||
LDFLAGS = $(SYSLDFLAGS) $(MYLDFLAGS)
|
||||
LIBS = $(SYSLIBS) $(MYLIBS) -llua$(LUA_V).dll
|
||||
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
|
||||
@@ -26,8 +21,9 @@ 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)
|
||||
SYSLIBS = -L $(SDK_DIR)/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$(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 =
|
||||
@@ -36,12 +32,11 @@ 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) $(Version_O) src/background/background.o
|
||||
ALL_O = src/syscalls.o src/ARP_entry.o src/systemColors.o src/graphic.o $(Socket_O) $(Debug_O)
|
||||
|
||||
syscalls.dll: $(ALL_O)
|
||||
$(LD) -shared -T dll.lds --entry _DllStartup $(LDFLAGS) -o $@ $(ALL_O) $(LIBS)
|
||||
$(CC) -shared -T dll.lds --entry _DllStartup -o $@ $(ALL_O) $(LIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(ALL_O) syscalls.dll
|
||||
@@ -50,7 +45,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/version/library_version.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
|
||||
@@ -58,10 +53,7 @@ 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.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
|
||||
src/debug/registers.o: src/debug/registers.c src/debug/registers.h src/syscalls.h
|
||||
|
||||
## headers
|
||||
|
||||
@@ -70,6 +62,3 @@ 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
|
||||
src/background/background.h: src/syscalls.h
|
||||
|
@@ -1,3 +1,7 @@
|
||||
# Syscalls
|
||||
|
||||
Syscalls library for Lua
|
||||
|
||||
## Examples
|
||||
|
||||
you can find it in tests folder
|
||||
|
1
lua
Submodule
1
lua
Submodule
repo.diff.submodule_added%!(EXTRA template.HTML=lua, template.HTML=eae2ea0aaa)
@@ -1,129 +0,0 @@
|
||||
#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;
|
||||
}
|
@@ -1,33 +0,0 @@
|
||||
#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__
|
@@ -15,9 +15,7 @@
|
||||
#include "sockets/socket_lua.h"
|
||||
#include "debug/debug.h"
|
||||
#include "graphic.h"
|
||||
#include "version/coreversion.h"
|
||||
#include "version/library_version.h"
|
||||
#include "background/background.h"
|
||||
|
||||
|
||||
/*
|
||||
Режим ввода с клавиатуры
|
||||
@@ -108,7 +106,7 @@ static int syscalls_SetSkin(lua_State* L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int syscalls_GetSkinTitleArea(lua_State* L)
|
||||
static int syscalls_GetSkinTilteArea(lua_State* L)
|
||||
{
|
||||
ksys_pos_t leftRight, topBottom;
|
||||
|
||||
@@ -409,6 +407,37 @@ 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());
|
||||
@@ -476,7 +505,7 @@ static int syscalls_getKey(lua_State* L)
|
||||
{
|
||||
char s[2];
|
||||
s[0] = a.code;
|
||||
s[1] = '\0';
|
||||
s[1] = '\n';
|
||||
lua_pushstring(L, s);
|
||||
}
|
||||
else
|
||||
@@ -1465,7 +1494,7 @@ static const luaL_Reg syscallsLib[] = {
|
||||
{"SetWindowTitle", syscalls_setWindowTitle},
|
||||
{"GetSkinHeight", syscalls_getSkinHeight},
|
||||
{"SetSkin", syscalls_SetSkin},
|
||||
{"GetSkinTitleArea", syscalls_GetSkinTitleArea},
|
||||
{"GetSkinTitleArea", syscalls_GetSkinTilteArea},
|
||||
/* Buttons funcs*/
|
||||
{"DefineButton", syscalls_defineButton},
|
||||
{"DeleteButton", syscalls_deleteButton},
|
||||
@@ -1477,16 +1506,11 @@ static const luaL_Reg syscallsLib[] = {
|
||||
{"CheckEvent", syscalls_checkEvent},
|
||||
{"WaitEventTimeout", syscalls_waitEventTimeout},
|
||||
/* Background funcs */
|
||||
{ "BackgroundSetSize", syscalls_backgroundSetSize },
|
||||
{ "BackgroundPutPixel", syscalls_backgroundPutPixel },
|
||||
{ "BackgroundRedraw", syscalls_backgroundRedraw },
|
||||
{ "BackgroundSetDrawMode", syscalls_backgroundSetDrawMode },
|
||||
{ "BackgroundGetDrawMode", syscalls_backgroundGetDrawMode },
|
||||
{ "BackgroundOpenMap", syscalls_backgroundOpenMap },
|
||||
{ "BackgroundCloseMap", syscalls_backgroundCloseMap },
|
||||
{ "BackgroundRedrawArea", syscalls_backgroundRedrawArea },
|
||||
{"BackgroundSetSize", syscalls_backgroundSetSize},
|
||||
{"BackgroundPutPixel", syscalls_backgroundPutPixel},
|
||||
{"BackgroundRedraw", syscalls_backgroundRedraw},
|
||||
/* system funcs */
|
||||
{ "GetRamSize", syscalls_getRamSize },
|
||||
{"GetRamSize", syscalls_getRamSize},
|
||||
{"GetFreeRam", syscalls_getFreeRam},
|
||||
{"GetCPUClock", syscalls_getCPUClock},
|
||||
{"ShutdownPowerOff", syscalls_shutdownPowerOff},
|
||||
@@ -1751,8 +1775,6 @@ 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);
|
||||
@@ -1765,7 +1787,6 @@ 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
|
||||
|
||||
|
@@ -4,9 +4,8 @@
|
||||
#include <lua.h>
|
||||
#include <lualib.h>
|
||||
#include <lauxlib.h>
|
||||
#include <sys/ksys.h>
|
||||
|
||||
static inline void syscalls_ReturnIntegerOrNil(LUA_INTEGER value, lua_State* L)
|
||||
inline void syscalls_ReturnIntegerOrNil(LUA_INTEGER value, lua_State* L)
|
||||
{
|
||||
if (value == -1)
|
||||
{
|
||||
@@ -18,7 +17,7 @@ static inline void syscalls_ReturnIntegerOrNil(LUA_INTEGER value, lua_State* L)
|
||||
}
|
||||
}
|
||||
|
||||
static inline void syscalls_ReturnIntegerValueOrNil(LUA_INTEGER cond, LUA_INTEGER value, lua_State* L)
|
||||
inline void syscalls_ReturnIntegerValueOrNil(LUA_INTEGER cond, LUA_INTEGER value, lua_State* L)
|
||||
{
|
||||
if (cond == -1)
|
||||
{
|
||||
@@ -30,7 +29,7 @@ static inline void syscalls_ReturnIntegerValueOrNil(LUA_INTEGER cond, LUA_INTEGE
|
||||
}
|
||||
}
|
||||
|
||||
static inline void syscalls_ReturnTrueOrNil(LUA_INTEGER value, lua_State* L)
|
||||
inline void syscalls_ReturnTrueOrNil(LUA_INTEGER value, lua_State* L)
|
||||
{
|
||||
if (value == -1)
|
||||
{
|
||||
@@ -42,7 +41,7 @@ static inline void syscalls_ReturnTrueOrNil(LUA_INTEGER value, lua_State* L)
|
||||
}
|
||||
}
|
||||
|
||||
static inline void syscalls_ReturnStringOrNil(LUA_INTEGER cond, const char* value, lua_State* L)
|
||||
inline void syscalls_ReturnStringOrNil(LUA_INTEGER cond, const char* value, lua_State* L)
|
||||
{
|
||||
if (cond == -1)
|
||||
{
|
||||
@@ -58,23 +57,4 @@ static inline void syscalls_ReturnStringOrNil(LUA_INTEGER cond, const char* valu
|
||||
#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__
|
||||
|
@@ -1,13 +0,0 @@
|
||||
#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;
|
||||
}
|
@@ -1,8 +0,0 @@
|
||||
#ifndef __CORE_VERSION_H__
|
||||
#define __CORE_VERSION_H__
|
||||
|
||||
#include "version_type.h"
|
||||
|
||||
int syscalls_GetCoreVersion(lua_State *L);
|
||||
|
||||
#endif // __CORE_VERSION_H__
|
@@ -1,17 +0,0 @@
|
||||
#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__
|
@@ -1,202 +0,0 @@
|
||||
#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);
|
||||
}
|
@@ -1,28 +0,0 @@
|
||||
#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__
|
145
tests/calc.lua
Normal file
145
tests/calc.lua
Normal file
@@ -0,0 +1,145 @@
|
||||
local syscalls = require("syscalls")
|
||||
|
||||
local systemColors = syscalls.GetSystemColors()
|
||||
local skinHeight = syscalls.GetSkinHeight()
|
||||
|
||||
local display = "0"
|
||||
local ans = "0"
|
||||
|
||||
local buttons = {
|
||||
{"1", "2", "3", "+", "-"},
|
||||
{"4", "5", "6", "*", "/"},
|
||||
{"7", "8", "9", "%", ""},
|
||||
{"0", ".", "Ans", "="}
|
||||
}
|
||||
|
||||
local function DrawDisplay()
|
||||
syscalls.DrawText(
|
||||
display,
|
||||
20,
|
||||
20 + skinHeight,
|
||||
systemColors.workText
|
||||
)
|
||||
end
|
||||
|
||||
local function redraw()
|
||||
syscalls.StartRedraw()
|
||||
|
||||
syscalls.CreateWindow(
|
||||
100,
|
||||
100,
|
||||
200,
|
||||
256,
|
||||
"lua example Calc",
|
||||
systemColors.workArea,
|
||||
syscalls.windowStyle.WithSkinFixSizes
|
||||
)
|
||||
|
||||
DrawDisplay()
|
||||
|
||||
--local t = syscalls.ThreadInfo()
|
||||
|
||||
local i = 2
|
||||
local h = math.floor(150 / #buttons)
|
||||
|
||||
for rowN, row in pairs(buttons) do
|
||||
|
||||
local w = math.floor(200 / #row)
|
||||
|
||||
for col, v in pairs(row) do
|
||||
|
||||
local x = math.floor((col-1) * w)
|
||||
local y = math.floor((rowN-1) * h + 50 + skinHeight)
|
||||
|
||||
syscalls.DefineButton(
|
||||
x,
|
||||
y,
|
||||
w,
|
||||
h,
|
||||
i,
|
||||
systemColors.workButton
|
||||
)
|
||||
|
||||
syscalls.DrawText(
|
||||
v,
|
||||
x,
|
||||
y,
|
||||
systemColors.workButtonText
|
||||
)
|
||||
|
||||
i=i+1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
syscalls.EndRedraw()
|
||||
end
|
||||
|
||||
local function CheckButton(ButtonID)
|
||||
local i = 2
|
||||
for k, v in pairs(buttons) do
|
||||
for j, s in pairs(v) do
|
||||
if ButtonID ~= i then
|
||||
i = i + 1
|
||||
else
|
||||
return s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
local function checkInput(s)
|
||||
if s == "=" then
|
||||
display = assert(load( "return " .. display))()
|
||||
ans = display
|
||||
elseif s == "Ans" then
|
||||
display = display .. ans
|
||||
elseif s then
|
||||
if display == "0" then
|
||||
display = s
|
||||
else
|
||||
display = display .. s
|
||||
end
|
||||
end
|
||||
|
||||
syscalls.DrawRectangle(20, 20 + skinHeight, 200, 30, systemColors.workArea)
|
||||
DrawDisplay()
|
||||
end
|
||||
|
||||
-- main
|
||||
|
||||
redraw()
|
||||
|
||||
local exit = false
|
||||
while not exit do
|
||||
local event = syscalls.WaitEvent()
|
||||
|
||||
if event == syscalls.Event.Redraw then
|
||||
redraw()
|
||||
elseif event == syscalls.Event.Button then
|
||||
local ButtonID = syscalls.GetButton()
|
||||
|
||||
if ButtonID == syscalls.buttons.close then
|
||||
exit = true
|
||||
else
|
||||
local s = CheckButton(ButtonID)
|
||||
|
||||
checkInput(s)
|
||||
end
|
||||
elseif event == syscalls.Event.Key then
|
||||
local key, a = syscalls.GetKey()
|
||||
|
||||
key = key:sub(1, 1)
|
||||
|
||||
for _, row in pairs(buttons) do
|
||||
for _, v in pairs(row) do
|
||||
if v == key then
|
||||
checkInput(key)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user