From f332d8a9e1642390b1eddaff1ae0105935c1ad9b Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Tue, 9 Sep 2025 16:20:53 +0200 Subject: [PATCH] add Toolkit getConfigPath and getConfigFilePath --- .../src/main/java/de/unixwork/ui/Toolkit.java | 31 +++++++++++++++++++ .../java/de/unixwork/ui/ToolkitFuncs.java | 9 ++++++ 2 files changed, 40 insertions(+) diff --git a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java index 8a8dbc5..abf7868 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java +++ b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java @@ -620,4 +620,35 @@ public class Toolkit { throw new RuntimeException(e); } } + + public static String getConfigPath() { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try { + MemorySegment cstr = (MemorySegment)ui.getappdir.invoke(); + if(cstr == MemorySegment.NULL) { + return null; + } + long len = (long)ui.strlen.invoke(cstr); + cstr = cstr.reinterpret(len+1); + return cstr.getString(0); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public static String getConfigFilePath(String fileName) { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try(Arena arena = Arena.ofConfined()) { + MemorySegment fileNameCstr = arena.allocateFrom(fileName); + MemorySegment cstr = (MemorySegment)ui.configfile.invoke(fileNameCstr); + if(cstr == MemorySegment.NULL) { + return null; + } + long len = (long)ui.strlen.invoke(cstr); + cstr = cstr.reinterpret(len+1); + return cstr.getString(0); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } } diff --git a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java index 19a4bcb..4eabb3b 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java @@ -78,6 +78,9 @@ public class ToolkitFuncs { public MethodHandle ui_malloc; public MethodHandle ui_free; + public MethodHandle getappdir; + public MethodHandle configfile; + // some libc stuff public MethodHandle malloc; public MethodHandle free; @@ -170,6 +173,9 @@ public class ToolkitFuncs { MemorySegment ui_malloc_addr = lib.find("ui_malloc").orElseThrow(); MemorySegment ui_free_addr = lib.find("ui_free").orElseThrow(); + MemorySegment getappdir_addr = lib.find("getappdir").orElseThrow(); + MemorySegment configfile_addr = lib.find("configfile").orElseThrow(); + MemorySegment malloc_addr = lib.find("malloc").orElseThrow(); MemorySegment free_addr = lib.find("free").orElseThrow(); MemorySegment strlen_addr = lib.find("strlen").orElseThrow(); @@ -244,6 +250,9 @@ public class ToolkitFuncs { call_mainthread = linker.downcallHandle(call_mainthread_addr, sigv_mm); + getappdir = linker.downcallHandle(getappdir_addr, sigm); + configfile = linker.downcallHandle(configfile_addr, sigm_m); + ui_malloc = linker.downcallHandle(ui_malloc_addr, sigm_ml); ui_free = linker.downcallHandle(ui_free_addr, sigv_mm); -- 2.47.3