files
syscalls/src/background/background.c

130 lines
1.7 KiB
C

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