diff --git a/Makefile b/Makefile index 81b8f3e..01ae0fb 100644 --- a/Makefile +++ b/Makefile @@ -31,9 +31,10 @@ 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 -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) $(IPC_O) syscalls.dll: $(ALL_O) $(CC) -shared -T dll.lds --entry _DllStartup -o $@ $(ALL_O) $(LIBS) @@ -54,6 +55,8 @@ 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 ## headers @@ -62,3 +65,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/IPC/IPC_msg.h: src/syscalls.h +src/IPC/ipc.h: src/syscalls.h diff --git a/src/IPC/IPC_msg.c b/src/IPC/IPC_msg.c index dff2676..50e1aec 100644 --- a/src/IPC/IPC_msg.c +++ b/src/IPC/IPC_msg.c @@ -36,6 +36,7 @@ static int syscalls_newindexIPC_msg(lua_State* L) if (!index_i) { const char* index = luaL_checkstring(L, 2); + if (strcmp(index, "size") == 0) { r->datalen = val; @@ -76,7 +77,7 @@ static bool compare_ipc_msg(ksys_ipc_msg* a, ksys_ipc_msg* b) a->datalen ); } - else + else // длина сообщений не совпадает, занчитт они зразу не могут быть равны { return false; } diff --git a/src/IPC/IPC_msg.h b/src/IPC/IPC_msg.h index 0b0d954..0f911c4 100644 --- a/src/IPC/IPC_msg.h +++ b/src/IPC/IPC_msg.h @@ -7,13 +7,13 @@ #define syscalls_IPC_msg_metatable_name "syscalls IPC_msg metatable" #define syscalls_IPC_msg_name "IPC_msg" -int syscalls_newSystemColors(lua_State* L); +int syscalls_newIPC_msg(lua_State* L); -ksys_colors_table_t* syscalls_pushSystemColors(lua_State* L); +ksys_colors_table_t* syscalls_pushIPC_msg(lua_State* L); /** * Register SystemColors lib */ -void syscalls_register_SystemColors(lua_State* L); +void syscalls_register_IPC_msg(lua_State* L); #endif // _SYSCALLS_IPC_MSG_H_ diff --git a/src/IPC/ipc.c b/src/IPC/ipc.c index 0bec3f8..668d0d8 100644 --- a/src/IPC/ipc.c +++ b/src/IPC/ipc.c @@ -17,7 +17,7 @@ inline static enum SendIPCErrors send_ipc(int pid, ksys_ipc_msg* msg) asm_inline( "int $0x40" : "=a"(ret) - : "a"(60), "b"(1), "c"(pid), "d"(msg), "S"(sizeof(ksys_ipc_msg) + msg->datalen) + : "a"(60), "b"(2), "c"(pid), "d"(msg), "S"(sizeof(ksys_ipc_msg) + msg->datalen) ); return ret; @@ -28,10 +28,9 @@ int syscalls_DefineIPCBuffer(lua_State* L) uint32_t len = luaL_checkinteger(L, 1); ksys_ipc_buffer* buffer; - define_ipc(buffer, len); - return 1; + return 0; } int syscalls_SendIPCMessage(lua_State* L) @@ -39,7 +38,7 @@ int syscalls_SendIPCMessage(lua_State* L) lua_pushinteger( L, send_ipc( - lua_checkinteger(L, 1), + luaL_checkinteger(L, 1), luaL_checkudata(L, 1, syscalls_IPC_msg_metatable_name) ) ); diff --git a/src/syscalls.c b/src/syscalls.c index 3855795..523e14a 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -9,13 +9,14 @@ #include "syscalls.h" #include "scancodes.h" -#include "ARP_entry.h" +#include "ARP_entry.h" #include "systemColors.h" #include "sockets/socket_lua.h" #include "debug/debug.h" #include "graphic.h" - +#include "IPC/ipc.h" +#include "IPC/IPC_msg.h" /* Режим ввода с клавиатуры @@ -1636,6 +1637,8 @@ static const luaL_Reg syscallsLib[] = { { "Done", syscalls_Done }, { "DefineBreakpoint", syscalls_DefineBreakpoint }, { "UndefBreakpoint", syscalls_UndefBreakpoint }, + { "DefineIPCBuffer", syscalls_DefineIPCBuffer }, + { "SendIPCMessage", syscalls_SendIPCMessage }, { NULL, NULL } }; @@ -1835,6 +1838,7 @@ LUALIB_API int luaopen_syscalls(lua_State* L) syscalls_push_buttons(L); syscalls_push_connectionStatus(L); syscalls_push_graphic(L); + syscalls_register_IPC_msg(L); syscalls_register_ARPEntry(L); syscalls_register_SystemColors(L);