add more files... && create sockaddr struct
This commit is contained in:
269
src/syscalls.c
269
src/syscalls.c
@@ -12,7 +12,8 @@
|
||||
#include "ARP_entry.h"
|
||||
|
||||
#include "systemColors.h"
|
||||
#include "socket.h"
|
||||
#include "sockets/socket_lua.h"
|
||||
#include "graphic.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -22,27 +23,6 @@
|
||||
*/
|
||||
static ksys_key_input_mode_t syscalls_KeyInputState = KSYS_KEY_INPUT_MODE_ASCII;
|
||||
|
||||
/*
|
||||
Кеш размера экрана.
|
||||
|
||||
Нужно для того чтобы не вызывать систменое прерывание лишний раз (другие функции тоже используют это значение)
|
||||
|
||||
Сомневаюсь что в размер экрана в колибри вообще может меняться без перезагрузки
|
||||
|
||||
обновляется функцией syscalls_updateScreenSize
|
||||
*/
|
||||
static ksys_pos_t syscalls_screenSizeCache = { 0 };
|
||||
|
||||
|
||||
/*
|
||||
функции для того чтобы возвращаемые значения функций были болле-мение едиообразны
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static int syscalls_createWindow(lua_State* L)
|
||||
{
|
||||
@@ -57,6 +37,7 @@ static int syscalls_createWindow(lua_State* L)
|
||||
{
|
||||
uint32_t borderColor = luaL_checkinteger(L, 5);
|
||||
uint32_t titleColor = luaL_checkinteger(L, 8);
|
||||
|
||||
asm_inline(
|
||||
"int $0x40" ::"a"(0),
|
||||
"b"((x << 16) | ((w - 1) & 0xFFFF)),
|
||||
@@ -415,25 +396,6 @@ static int syscalls_getButton(lua_State* L)
|
||||
return 2;
|
||||
}
|
||||
|
||||
static void syscalls_updateScreenSize()
|
||||
{
|
||||
syscalls_screenSizeCache = _ksys_screen_size();
|
||||
}
|
||||
|
||||
static int syscalls_screenSize(lua_State* L)
|
||||
{
|
||||
syscalls_updateScreenSize();
|
||||
|
||||
lua_createtable(L, 0, 2);
|
||||
|
||||
lua_pushinteger(L, syscalls_screenSizeCache.x);
|
||||
lua_setfield(L, -2, "x");
|
||||
|
||||
lua_pushinteger(L, syscalls_screenSizeCache.y);
|
||||
lua_setfield(L, -2, "y");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
Backgound
|
||||
@@ -473,173 +435,7 @@ static int syscalls_getCPUClock(lua_State* L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int syscalls_drawLine(lua_State* L)
|
||||
{
|
||||
_ksys_draw_line(
|
||||
luaL_checkinteger(L, 1),
|
||||
luaL_checkinteger(L, 2),
|
||||
luaL_checkinteger(L, 3),
|
||||
luaL_checkinteger(L, 4),
|
||||
luaL_checkinteger(L, 5));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum TextScale
|
||||
{
|
||||
TextScale_SIZE_6x9, // 1x 6x9
|
||||
TextScale_SIZE_8x16, // 1x 8x16
|
||||
TextScale_SIZE_12x18, // 2x 6x9
|
||||
TextScale_SIZE_16x32, // 2x 8x16
|
||||
TextScale_SIZE_18x27, // 3x 6x9
|
||||
TextScale_SIZE_24x36, // 4x 6x9
|
||||
TextScale_SIZE_24x48, // 3x 8x16
|
||||
TextScale_SIZE_30x45, // 5x 6x9
|
||||
TextScale_SIZE_32x64, // 4x 8x16
|
||||
TextScale_SIZE_36x54, // 6x 6x9
|
||||
TextScale_SIZE_40x80, // 5x 8x16
|
||||
TextScale_SIZE_42x63, // 7x 6x9
|
||||
TextScale_SIZE_48x72, // 8x 6x9
|
||||
TextScale_SIZE_48x96, // 6x 8x16
|
||||
TextScale_SIZE_56x112, // 7x 8x16
|
||||
TextScale_SIZE_64x128 // 8x 8x16
|
||||
};
|
||||
|
||||
static void syscall_drawText(const char* text, uint32_t x, uint32_t y, ksys_color_t color, enum TextScale size, uint32_t len, bool fillBackground, ksys_color_t backgroundColor)
|
||||
{
|
||||
enum DrawTextEncoding
|
||||
{
|
||||
cp866_6x9 = 0,
|
||||
cp866_8x16 = 1,
|
||||
utf8 = 3,
|
||||
utf16 = 4
|
||||
};
|
||||
|
||||
enum scale
|
||||
{
|
||||
scale_x1 = 0,
|
||||
scale_x2 = 1,
|
||||
scale_x3 = 2,
|
||||
scale_x4 = 3,
|
||||
scale_x5 = 4,
|
||||
scale_x6 = 5,
|
||||
scale_x7 = 6,
|
||||
scale_x8 = 7
|
||||
};
|
||||
|
||||
color &= 0x00FFFFFF;
|
||||
|
||||
color |= (fillBackground << 30);
|
||||
|
||||
switch (size)
|
||||
{
|
||||
case TextScale_SIZE_6x9:
|
||||
color |= (cp866_8x16 << 28) | (scale_x1 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_8x16:
|
||||
color |= (cp866_8x16 << 28);
|
||||
break;
|
||||
case TextScale_SIZE_12x18:
|
||||
color |= (cp866_6x9 << 28) | (scale_x2 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_16x32:
|
||||
color |= (cp866_8x16 << 28) | (scale_x2 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_18x27:
|
||||
color |= (cp866_6x9 << 28) | (scale_x3 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_24x36:
|
||||
color |= (cp866_6x9 << 28) | (scale_x4 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_24x48:
|
||||
color |= (cp866_8x16 << 28) | (scale_x3 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_30x45:
|
||||
color |= (cp866_6x9 << 28) | (scale_x5 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_36x54:
|
||||
color |= (cp866_6x9 << 28) | (scale_x6 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_40x80:
|
||||
color |= (cp866_8x16 << 28) | (scale_x5 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_42x63:
|
||||
color |= (cp866_6x9 << 28) | (scale_x7 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_48x72:
|
||||
color |= (cp866_6x9 << 28) | (scale_x8 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_48x96:
|
||||
color |= (cp866_8x16 << 28) | (scale_x6 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_56x112:
|
||||
color |= (cp866_8x16 << 28) | (scale_x7 << 24);
|
||||
break;
|
||||
case TextScale_SIZE_64x128:
|
||||
color |= (cp866_8x16 << 28) | (scale_x8 << 24);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
|
||||
if (len <= 0)
|
||||
color |= (1 << 31);
|
||||
|
||||
asm_inline(
|
||||
"int $0x40" ::"a"(4),
|
||||
"b"((x << 16) | y),
|
||||
"c"(color),
|
||||
"d"(text),
|
||||
"S"(len),
|
||||
"D"(backgroundColor));
|
||||
}
|
||||
|
||||
static int syscalls_drawText(lua_State* L)
|
||||
{
|
||||
syscall_drawText(
|
||||
luaL_checkstring(L, 1),
|
||||
luaL_checkinteger(L, 2),
|
||||
luaL_checkinteger(L, 3),
|
||||
luaL_checkinteger(L, 4),
|
||||
luaL_optinteger(L, 5, TextScale_SIZE_8x16),
|
||||
luaL_optinteger(L, 6, 0),
|
||||
luaL_optinteger(L, 7, 0),
|
||||
luaL_optinteger(L, 8, 0));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int syscalls_drawRectangle(lua_State* L)
|
||||
{
|
||||
_ksys_draw_bar(
|
||||
luaL_checkinteger(L, 1),
|
||||
luaL_checkinteger(L, 2),
|
||||
luaL_checkinteger(L, 3),
|
||||
luaL_checkinteger(L, 4),
|
||||
luaL_checkinteger(L, 5));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int syscalls_ReadPoint(lua_State* L)
|
||||
{
|
||||
ksys_color_t color;
|
||||
|
||||
if (syscalls_screenSizeCache.val == 0)
|
||||
syscalls_updateScreenSize();
|
||||
|
||||
uint32_t x = luaL_checkinteger(L, 1);
|
||||
uint32_t y = luaL_checkinteger(L, 2);
|
||||
|
||||
asm_inline(
|
||||
"int $ 0x40"
|
||||
: "=a"(color)
|
||||
: "a"(35), "b"(x * syscalls_screenSizeCache.x + y));
|
||||
|
||||
lua_pushnumber(L, color);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int syscalls_getSystemColors(lua_State* L)
|
||||
{
|
||||
@@ -1854,11 +1650,13 @@ static const luaL_Reg syscallsLib[] = {
|
||||
{"Accept", syscalls_Accept},
|
||||
{"Send", syscalls_Send},
|
||||
{"Receive", syscalls_Receive},
|
||||
{"GetSocketOptions", syscalls_GetSocketOptions},
|
||||
{"GetPairSocket", syscalls_GetPairSocket},
|
||||
{ "SetSocketOption", syscalls_SetSocketOption },
|
||||
{ "GetSocketOption", syscalls_GetSocketOption },
|
||||
{"PairSocket", syscalls_PairSocket},
|
||||
/* Debug */
|
||||
{"DebugPuts", syscalls_DebugPuts},
|
||||
{ "DebugPutc", syscalls_DebugPutc },
|
||||
{"SetMessageArea", syscalls_SetMessageArea},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -2043,60 +1841,7 @@ static inline void syscalls_push_connectionStatus(lua_State* L)
|
||||
lua_setfield(L, -2, "connectionStatus");
|
||||
}
|
||||
|
||||
inline void syscalls_push_textSizes(lua_State* L)
|
||||
{
|
||||
lua_newtable(L);
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_6x9);
|
||||
lua_setfield(L, -2, "6x9");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_8x16);
|
||||
lua_setfield(L, -2, "8x16");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_12x18);
|
||||
lua_setfield(L, -2, "12x18");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_16x32);
|
||||
lua_setfield(L, -2, "16x32");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_18x27);
|
||||
lua_setfield(L, -2, "18x27");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_24x36);
|
||||
lua_setfield(L, -2, "24x36");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_24x48);
|
||||
lua_setfield(L, -2, "24x48");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_30x45);
|
||||
lua_setfield(L, -2, "30x45");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_32x64);
|
||||
lua_setfield(L, -2, "32x64");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_36x54);
|
||||
lua_setfield(L, -2, "36x54");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_40x80);
|
||||
lua_setfield(L, -2, "40x80");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_42x63);
|
||||
lua_setfield(L, -2, "42x63");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_48x72);
|
||||
lua_setfield(L, -2, "48x72");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_48x96);
|
||||
lua_setfield(L, -2, "48x96");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_56x112);
|
||||
lua_setfield(L, -2, "56x112");
|
||||
|
||||
lua_pushinteger(L, TextScale_SIZE_64x128);
|
||||
lua_setfield(L, -2, "64x128");
|
||||
|
||||
lua_setfield(L, -2, "textSize");
|
||||
}
|
||||
|
||||
LUALIB_API int luaopen_syscalls(lua_State* L)
|
||||
{
|
||||
|
Reference in New Issue
Block a user