0
1
mirror of https://github.com/radio95-rnt/rds95.git synced 2026-02-26 20:33:53 +01:00

massive lua api refactor

This commit is contained in:
2026-01-20 19:50:04 +01:00
parent 97f9b3069c
commit 53c9169330
15 changed files with 976 additions and 776 deletions

View File

@@ -6,25 +6,25 @@ local USERDATA_ERT_OFFSET = 0
local function init_ert()
if _Ert_oda_id == nil then
_Ert_oda_id = register_oda(13, false, 0x6552, 1)
set_oda_handler(_Ert_oda_id, function ()
if string.byte(get_userdata_offset(USERDATA_ERT_OFFSET+258, 1)) == 1 then
local new_data = get_userdata_offset(USERDATA_ERT_OFFSET, 128)
local new_segments = string.byte(get_userdata_offset(USERDATA_ERT_OFFSET+128, 1))
set_userdata_offset(USERDATA_ERT_OFFSET+129, 128, new_data)
set_userdata_offset(USERDATA_ERT_OFFSET+257, 1, string.char(new_segments))
set_userdata_offset(USERDATA_ERT_OFFSET+258, 1, string.char(0))
_Ert_oda_id = ext.register_oda(13, false, 0x6552, 1)
ext.set_oda_handler(_Ert_oda_id, function ()
if string.byte(userdata.get_offset(USERDATA_ERT_OFFSET+258, 1)) == 1 then
local new_data = userdata.get_offset(USERDATA_ERT_OFFSET, 128)
local new_segments = string.byte(userdata.get_offset(USERDATA_ERT_OFFSET+128, 1))
userdata.set_offset(USERDATA_ERT_OFFSET+129, 128, new_data)
userdata.set_offset(USERDATA_ERT_OFFSET+257, 1, string.char(new_segments))
userdata.set_offset(USERDATA_ERT_OFFSET+258, 1, string.char(0))
_Ert_state = 0
end
local segments = string.byte(get_userdata_offset(USERDATA_ERT_OFFSET+257, 1))
local segments = string.byte(userdata.get_offset(USERDATA_ERT_OFFSET+257, 1))
if segments == 0 then return false, 0, 0, 0 end
if _Ert_state >= segments then _Ert_state = 0 end
local b = _Ert_state & 31
local chunk = get_userdata_offset(USERDATA_ERT_OFFSET + 129 + _Ert_state * 4, 4)
local chunk = userdata.get_offset(USERDATA_ERT_OFFSET + 129 + _Ert_state * 4, 4)
local c = (string.byte(chunk, 1) << 8) | string.byte(chunk, 2)
local d = (string.byte(chunk, 3) << 8) | string.byte(chunk, 4)
@@ -36,16 +36,16 @@ end
function unregister_ert()
if _Ert_oda_id ~= nil then
unregister_oda(_Ert_oda_id)
ext.unregister_oda(_Ert_oda_id)
_Ert_oda_id = nil
end
end
function set_rds_ert(ert)
function rds.ext.set_ert(ert)
if #ert == 0 then
set_userdata_offset(USERDATA_ERT_OFFSET, 128, "")
set_userdata_offset(USERDATA_ERT_OFFSET+128, 1, string.char(0))
set_userdata_offset(USERDATA_ERT_OFFSET+258, 1, string.char(1))
userdata.set_offset(USERDATA_ERT_OFFSET, 128, "")
userdata.set_offset(USERDATA_ERT_OFFSET+128, 1, string.char(0))
userdata.set_offset(USERDATA_ERT_OFFSET+258, 1, string.char(1))
return
end
@@ -55,33 +55,31 @@ function set_rds_ert(ert)
local padding = (4 - (#data % 4)) % 4
data = data .. string.rep("\0", padding)
set_userdata_offset(USERDATA_ERT_OFFSET, 128, data)
userdata.set_offset(USERDATA_ERT_OFFSET, 128, data)
local segments = #data // 4
if segments > 32 then segments = 32 end
set_userdata_offset(USERDATA_ERT_OFFSET+128, 1, string.char(segments))
userdata.set_offset(USERDATA_ERT_OFFSET+128, 1, string.char(segments))
if string.byte(get_userdata_offset(USERDATA_ERT_OFFSET+257, 1)) == 0 then
if string.byte(userdata.get_offset(USERDATA_ERT_OFFSET+257, 1)) == 0 then
init_ert()
set_userdata_offset(USERDATA_ERT_OFFSET+129, 128, data)
set_userdata_offset(USERDATA_ERT_OFFSET+257, 1, string.char(segments))
userdata.set_offset(USERDATA_ERT_OFFSET+129, 128, data)
userdata.set_offset(USERDATA_ERT_OFFSET+257, 1, string.char(segments))
_Ert_state = 0
else set_userdata_offset(USERDATA_ERT_OFFSET+258, 1, string.char(1)) end
else userdata.set_offset(USERDATA_ERT_OFFSET+258, 1, string.char(1)) end
if _Ert_oda_id == nil then init_ert() end
end
function get_rds_ert()
local segments = string.byte(get_userdata_offset(USERDATA_ERT_OFFSET+128, 1))
function rds.ext.get_ert()
local segments = string.byte(userdata.get_offset(USERDATA_ERT_OFFSET+128, 1))
if segments == 0 then return "" end
local data = get_userdata_offset(USERDATA_ERT_OFFSET, 128)
local data = userdata.get_offset(USERDATA_ERT_OFFSET, 128)
return data:match("^(.-)[\r%z]*") or ""
end
local _old_on_state_ert = on_state
function on_state()
if string.byte(get_userdata_offset(USERDATA_ERT_OFFSET+257, 1)) ~= 0 then init_ert() end
if type(_old_on_state_ert) == "function" then _old_on_state_ert() end
end
table.insert(on_states, function ()
if string.byte(userdata.get_offset(USERDATA_ERT_OFFSET+257, 1)) ~= 0 then init_ert() end
end)