You've already forked rdsspy-lua-host
mirror of
https://github.com/KubaPro010/rdsspy-lua-host.git
synced 2026-02-27 02:45:21 +01:00
Compare commits
2 Commits
ebfb628ab3
...
noon-3-1-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
71e2d4c863
|
|||
|
19a5483acb
|
13
Makefile
13
Makefile
@@ -2,20 +2,11 @@ liblua:
|
|||||||
gcc -c lua/*.c
|
gcc -c lua/*.c
|
||||||
ar rcs liblua *.o
|
ar rcs liblua *.o
|
||||||
rm *.o
|
rm *.o
|
||||||
liblua-native:
|
|
||||||
gcc -c lua/*.c -march=native
|
|
||||||
ar rcs liblua.native *.o
|
|
||||||
rm *.o
|
|
||||||
|
|
||||||
build: liblua
|
build: liblua
|
||||||
gcc -O2 -shared -static -o luahost-x86.dll plugin.c liblua -lgdi32 -luser32 -lshell32 \
|
gcc -O2 -shared -static -o luahost.dll plugin.c liblua -lgdi32 -luser32 -lshell32 \
|
||||||
-Wl,--add-stdcall-alias \
|
-Wl,--add-stdcall-alias \
|
||||||
-ffunction-sections -fdata-sections
|
-ffunction-sections -fdata-sections
|
||||||
|
|
||||||
build-native: liblua
|
install: build
|
||||||
gcc -O2 -shared -static -o luahost.dll plugin.c liblua.native -lgdi32 -luser32 -lshell32 -march=native \
|
|
||||||
-Wl,--add-stdcall-alias \
|
|
||||||
-ffunction-sections -fdata-sections
|
|
||||||
|
|
||||||
install: build-native
|
|
||||||
cp luahost.dll "/c/Program Files (x86)/RDS Spy/plugins"
|
cp luahost.dll "/c/Program Files (x86)/RDS Spy/plugins"
|
||||||
@@ -548,7 +548,7 @@ local function render_menu()
|
|||||||
out = out .. string.format("%s - %s\r\n\t", rtp_types[rtp_type2+1], current_rt:sub(rtp_start2+1, rtp_start2+rtp_len2+1))
|
out = out .. string.format("%s - %s\r\n\t", rtp_types[rtp_type2+1], current_rt:sub(rtp_start2+1, rtp_start2+rtp_len2+1))
|
||||||
else out = out .. "-\r\n\t-\r\n\t" end
|
else out = out .. "-\r\n\t-\r\n\t" end
|
||||||
out = out .. string.format("RAW %d,%d,%d,%d,%d,%d\r\n", rtp_type1, rtp_start1, rtp_len1, rtp_type2, rtp_start2, rtp_len2)
|
out = out .. string.format("RAW %d,%d,%d,%d,%d,%d\r\n", rtp_type1, rtp_start1, rtp_len1, rtp_type2, rtp_start2, rtp_len2)
|
||||||
elseif current_menu == 3 then
|
elseif current_menu == 3 and not menu_extended then
|
||||||
local pi_code = tonumber(db.read_value("PI") or "0000", 16)
|
local pi_code = tonumber(db.read_value("PI") or "0000", 16)
|
||||||
local country_id = (pi_code & 0xF000) >> 12
|
local country_id = (pi_code & 0xF000) >> 12
|
||||||
local coverage_id = (pi_code & 0xF00) >> 8
|
local coverage_id = (pi_code & 0xF00) >> 8
|
||||||
@@ -563,14 +563,14 @@ local function render_menu()
|
|||||||
out = out .. string.format("Coverage: %s\r\n", pi_coverage[coverage_id+1])
|
out = out .. string.format("Coverage: %s\r\n", pi_coverage[coverage_id+1])
|
||||||
out = out .. string.format("Country: %s (%X)\r\n\r\n", country_name, ecc)
|
out = out .. string.format("Country: %s (%X)\r\n\r\n", country_name, ecc)
|
||||||
|
|
||||||
out = out .. string.format("ERT: %s\r\n\r\n", ert_display)
|
|
||||||
|
|
||||||
local oda_string = ""
|
local oda_string = ""
|
||||||
for grp, data in pairs(odas) do
|
for grp, data in pairs(odas) do
|
||||||
local ver_char = (data.version == 0) and "A" or "B"
|
local ver_char = (data.version == 0) and "A" or "B"
|
||||||
oda_string = oda_string .. string.format("%d%s - %04X | ", grp, ver_char, data.aid)
|
oda_string = oda_string .. string.format("%d%s - %04X | ", grp, ver_char, data.aid)
|
||||||
end
|
end
|
||||||
out = out .. string.format("ODA: %s\r\n", oda_string:sub(1, #oda_string-2))
|
out = out .. string.format("ODA: %s\r\n", oda_string:sub(1, #oda_string-2))
|
||||||
|
elseif current_menu == 3 and menu_extended then
|
||||||
|
out = out .. string.format("ERT: %s\r\n\r\n", ert_display)
|
||||||
elseif current_menu == 4 then
|
elseif current_menu == 4 then
|
||||||
if time_display_offset > 2 then out = out .. string.format("RDS-System time offset: %d seconds\r\n", time_display_offset)
|
if time_display_offset > 2 then out = out .. string.format("RDS-System time offset: %d seconds\r\n", time_display_offset)
|
||||||
else out = out .. string.format("RDS-System time offset: ~0\r\n") end
|
else out = out .. string.format("RDS-System time offset: ~0\r\n") end
|
||||||
|
|||||||
55
plugin.c
55
plugin.c
@@ -23,7 +23,6 @@ typedef struct {
|
|||||||
} TRDSGroup;
|
} TRDSGroup;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
// fuckass delphi
|
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
uint8_t data[255];
|
uint8_t data[255];
|
||||||
} ShortString;
|
} ShortString;
|
||||||
@@ -80,9 +79,9 @@ static const unsigned char EBU[127] = {
|
|||||||
0x00, 0x00, 0x00, 0xFD, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE6, 0x9C, 0x9F, 0x00
|
0x00, 0x00, 0x00, 0xFD, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE6, 0x9C, 0x9F, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned short console_mode = 0;
|
static uint8_t console_mode = 0;
|
||||||
static unsigned short stop_execution = 0;
|
static uint8_t stop_execution = 0;
|
||||||
static unsigned short sticky = 0;
|
static uint8_t sticky = 0;
|
||||||
static unsigned char workspaceFile[MAX_PATH] = "";
|
static unsigned char workspaceFile[MAX_PATH] = "";
|
||||||
|
|
||||||
const char* int_to_string(int value) {
|
const char* int_to_string(int value) {
|
||||||
@@ -202,35 +201,29 @@ void AppendText(const char* text) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetText(const char* text) {
|
|
||||||
if (hEditControl != NULL) SetWindowTextA(hEditControl, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
int lua_log(lua_State* localL) {
|
int lua_log(lua_State* localL) {
|
||||||
if(console_mode != 0) return luaL_error(localL, "Invalid log");
|
if(console_mode != 0) return luaL_error(localL, "Invalid log");
|
||||||
const char* data = luaL_checkstring(localL, 1);
|
AppendText(luaL_checkstring(localL, 1));
|
||||||
AppendText(data);
|
|
||||||
AppendText("\r\n");
|
AppendText("\r\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lua_set_console(lua_State* localL) {
|
int lua_set_console(lua_State* localL) {
|
||||||
if(console_mode != 1) return luaL_error(localL, "Invalid log");
|
if(console_mode != 1) return luaL_error(localL, "Invalid log");
|
||||||
const char* data = luaL_checkstring(localL, 1);
|
if (hEditControl != NULL) SetWindowTextA(hEditControl, luaL_checkstring(localL, 1));
|
||||||
SetText(data);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lua_set_console_mode(lua_State* localL) {
|
int lua_set_console_mode(lua_State* localL) {
|
||||||
if (!lua_isboolean(localL, 1)) return luaL_error(localL, "boolean expected, got %s", luaL_typename(localL, 1));
|
if (!lua_isboolean(localL, 1)) return luaL_typeerror(L, 1, lua_typename(L, LUA_TBOOLEAN));
|
||||||
int mode = lua_toboolean(localL, 1);
|
int mode = lua_toboolean(localL, 1);
|
||||||
SetText("");
|
if (hEditControl != NULL) SetWindowTextA(hEditControl, "");
|
||||||
console_mode = mode;
|
console_mode = mode;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lua_set_window_stick(lua_State* localL) {
|
int lua_set_window_stick(lua_State* localL) {
|
||||||
if (!lua_isboolean(localL, 1)) return luaL_error(localL, "boolean expected, got %s", luaL_typename(localL, 1));
|
if (!lua_isboolean(localL, 1)) return luaL_typeerror(L, 1, lua_typename(L, LUA_TBOOLEAN));
|
||||||
sticky = lua_toboolean(localL, 1);
|
sticky = lua_toboolean(localL, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -257,9 +250,7 @@ int lua_set_font_size(lua_State* localL) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int lua_MessageBox(lua_State* localL) {
|
int lua_MessageBox(lua_State* localL) {
|
||||||
const char* data = luaL_checkstring(localL, 1);
|
MessageBoxA(NULL, luaL_checkstring(localL, 1), luaL_checkstring(localL, 2), MB_OK | MB_TOPMOST);
|
||||||
const char* title = luaL_checkstring(localL, 2);
|
|
||||||
MessageBoxA(NULL, data, title, MB_OK | MB_TOPMOST);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,8 +381,7 @@ int lua_SaveString(lua_State* localL) {
|
|||||||
WritePrivateProfileStringA(section, key, value, fullPath);
|
WritePrivateProfileStringA(section, key, value, fullPath);
|
||||||
}
|
}
|
||||||
} else if(lua_isnil(localL, 1)) WritePrivateProfileStringA(section, key, value, workspaceFile);
|
} else if(lua_isnil(localL, 1)) WritePrivateProfileStringA(section, key, value, workspaceFile);
|
||||||
else luaL_typeerror(L, 1, lua_typename(L, LUA_TSTRING));
|
else return luaL_typeerror(L, 1, lua_typename(L, LUA_TSTRING));
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int lua_LoadString(lua_State* localL) {
|
int lua_LoadString(lua_State* localL) {
|
||||||
@@ -415,8 +405,7 @@ int lua_LoadString(lua_State* localL) {
|
|||||||
GetPrivateProfileStringA(section, key, defaultValue, buffer, 1024, workspaceFile);
|
GetPrivateProfileStringA(section, key, defaultValue, buffer, 1024, workspaceFile);
|
||||||
lua_pushstring(localL, buffer);
|
lua_pushstring(localL, buffer);
|
||||||
return 1;
|
return 1;
|
||||||
} else luaL_typeerror(L, 1, lua_typename(L, LUA_TSTRING));
|
} else return luaL_typeerror(L, 1, lua_typename(L, LUA_TSTRING));
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void lua_call_command(const char* Cmd, const char* Param) {
|
void lua_call_command(const char* Cmd, const char* Param) {
|
||||||
@@ -441,8 +430,8 @@ void lua_call_group() {
|
|||||||
lua_getglobal(L, "group");
|
lua_getglobal(L, "group");
|
||||||
|
|
||||||
if (lua_isfunction(L, -1)) {
|
if (lua_isfunction(L, -1)) {
|
||||||
lua_pushinteger(L, Group.RFU & 3); // TODO: find out if fuckass pira.cz meant msb or lsb, i have no clue what does "Bits: 0-1" mean
|
lua_pushinteger(L, Group.RFU & 3);
|
||||||
lua_pushboolean(L, (Group.RFU & 0x100) >> 8); // just do lsb for now i guess
|
lua_pushboolean(L, (Group.RFU & 0x100) >> 8);
|
||||||
lua_pushinteger(L, Group.Blk1);
|
lua_pushinteger(L, Group.Blk1);
|
||||||
lua_pushinteger(L, Group.Blk2);
|
lua_pushinteger(L, Group.Blk2);
|
||||||
lua_pushinteger(L, Group.Blk3);
|
lua_pushinteger(L, Group.Blk3);
|
||||||
@@ -492,7 +481,6 @@ void lua_event(int event) {
|
|||||||
|
|
||||||
__declspec(dllexport) void WINAPI RDSGroup(TRDSGroup* PRDSGroup) {
|
__declspec(dllexport) void WINAPI RDSGroup(TRDSGroup* PRDSGroup) {
|
||||||
if (PRDSGroup == NULL) return;
|
if (PRDSGroup == NULL) return;
|
||||||
|
|
||||||
Group = *PRDSGroup;
|
Group = *PRDSGroup;
|
||||||
lua_call_group();
|
lua_call_group();
|
||||||
}
|
}
|
||||||
@@ -500,21 +488,20 @@ __declspec(dllexport) void WINAPI RDSGroup(TRDSGroup* PRDSGroup) {
|
|||||||
__declspec(dllexport) void WINAPI Command(const char* Cmd, const char* Param) {
|
__declspec(dllexport) void WINAPI Command(const char* Cmd, const char* Param) {
|
||||||
if (Cmd == NULL) return;
|
if (Cmd == NULL) return;
|
||||||
if (_stricmp(Cmd, "EXIT") == 0) {
|
if (_stricmp(Cmd, "EXIT") == 0) {
|
||||||
if (hWnd != NULL) {
|
|
||||||
DestroyWindow(hWnd);
|
|
||||||
hWnd = NULL;
|
|
||||||
}
|
|
||||||
if(L != NULL) {
|
if(L != NULL) {
|
||||||
lua_close(L);
|
lua_close(L);
|
||||||
L = NULL;
|
L = NULL;
|
||||||
}
|
}
|
||||||
|
if (hWnd != NULL) {
|
||||||
|
DestroyWindow(hWnd);
|
||||||
|
hWnd = NULL;
|
||||||
|
}
|
||||||
} else if (_stricmp(Cmd, "CONFIGURE") == 0 || _stricmp(Cmd, "SHOW") == 0 || _stricmp(Cmd, "RESTORE") == 0) ShowWindow(hWnd, SW_SHOW);
|
} else if (_stricmp(Cmd, "CONFIGURE") == 0 || _stricmp(Cmd, "SHOW") == 0 || _stricmp(Cmd, "RESTORE") == 0) ShowWindow(hWnd, SW_SHOW);
|
||||||
else if (_stricmp(Cmd, "MINIMIZE") == 0) ShowWindow(hWnd, SW_HIDE);
|
else if (_stricmp(Cmd, "MINIMIZE") == 0) ShowWindow(hWnd, SW_HIDE);
|
||||||
else if (_stricmp(Cmd, "SHOWHIDE") == 0) {
|
else if (_stricmp(Cmd, "SHOWHIDE") == 0) {
|
||||||
if(IsWindowVisible(hWnd)) ShowWindow(hWnd, SW_HIDE);
|
if(IsWindowVisible(hWnd)) ShowWindow(hWnd, SW_HIDE);
|
||||||
else ShowWindow(hWnd, SW_SHOW);
|
else ShowWindow(hWnd, SW_SHOW);
|
||||||
}
|
} else if (_stricmp(Cmd, "OPENWORKSPACE") == 0) {
|
||||||
else if (_stricmp(Cmd, "OPENWORKSPACE") == 0) {
|
|
||||||
if(hWnd != NULL) {
|
if(hWnd != NULL) {
|
||||||
int value = GetPrivateProfileIntA("luahost", "Visible", 0, Param);
|
int value = GetPrivateProfileIntA("luahost", "Visible", 0, Param);
|
||||||
if(value == 1) ShowWindow(hWnd, SW_SHOW);
|
if(value == 1) ShowWindow(hWnd, SW_SHOW);
|
||||||
@@ -524,10 +511,10 @@ __declspec(dllexport) void WINAPI Command(const char* Cmd, const char* Param) {
|
|||||||
SetWindowPos(hWnd, NULL, x, y, 0, 0, SWP_NOSIZE);
|
SetWindowPos(hWnd, NULL, x, y, 0, 0, SWP_NOSIZE);
|
||||||
}
|
}
|
||||||
sticky = GetPrivateProfileIntA("luahost", "Stick", 0, Param);
|
sticky = GetPrivateProfileIntA("luahost", "Stick", 0, Param);
|
||||||
lua_call_command(Cmd, Param); // still call
|
lua_call_command(Cmd, Param);
|
||||||
} else if (_stricmp(Cmd, "SAVEWORKSPACE") == 0) {
|
} else if (_stricmp(Cmd, "SAVEWORKSPACE") == 0) {
|
||||||
if(hWnd != NULL) {
|
if(hWnd != NULL) {
|
||||||
RECT rect; // get rect
|
RECT rect;
|
||||||
if (GetWindowRect(hWnd, &rect)) {
|
if (GetWindowRect(hWnd, &rect)) {
|
||||||
WritePrivateProfileStringA("luahost", "Left", int_to_string(rect.left), Param);
|
WritePrivateProfileStringA("luahost", "Left", int_to_string(rect.left), Param);
|
||||||
WritePrivateProfileStringA("luahost", "Top", int_to_string(rect.top), Param);
|
WritePrivateProfileStringA("luahost", "Top", int_to_string(rect.top), Param);
|
||||||
@@ -537,7 +524,7 @@ __declspec(dllexport) void WINAPI Command(const char* Cmd, const char* Param) {
|
|||||||
}
|
}
|
||||||
memcpy(workspaceFile, Param, MAX_PATH);
|
memcpy(workspaceFile, Param, MAX_PATH);
|
||||||
workspaceFile[MAX_PATH-1] = 0;
|
workspaceFile[MAX_PATH-1] = 0;
|
||||||
lua_call_command(Cmd, Param); // still call
|
lua_call_command(Cmd, Param);
|
||||||
} else if (_stricmp(Cmd, "LUASCRIPT") == 0) { // custom
|
} else if (_stricmp(Cmd, "LUASCRIPT") == 0) { // custom
|
||||||
char msg_buffer[255];
|
char msg_buffer[255];
|
||||||
if (luaL_loadfile(L, Param) != LUA_OK) {
|
if (luaL_loadfile(L, Param) != LUA_OK) {
|
||||||
|
|||||||
Reference in New Issue
Block a user