From 1cf9f7e990dd9b001d3969f96c9f29e3bc1a7ce2 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Fri, 27 Jan 2023 10:45:07 +0100 Subject: [PATCH] patterns: Updated pattern language --- lib/external/pattern_language | 2 +- .../builtin/source/content/pl_visualizers.cpp | 28 +++++++++++-------- .../content/views/view_data_inspector.cpp | 2 +- .../content/views/view_pattern_editor.cpp | 8 +++--- plugins/builtin/source/ui/pattern_drawer.cpp | 2 +- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/external/pattern_language b/lib/external/pattern_language index 1fe5aa0db..b478a39e2 160000 --- a/lib/external/pattern_language +++ b/lib/external/pattern_language @@ -1 +1 @@ -Subproject commit 1fe5aa0db6277b852e60d3b622886550d901eab8 +Subproject commit b478a39e269734882f56837ae2168d643ca0cd77 diff --git a/plugins/builtin/source/content/pl_visualizers.cpp b/plugins/builtin/source/content/pl_visualizers.cpp index 87e4218aa..d607e4030 100644 --- a/plugins/builtin/source/content/pl_visualizers.cpp +++ b/plugins/builtin/source/content/pl_visualizers.cpp @@ -121,12 +121,14 @@ namespace hex::plugin::builtin { } } - void drawImageVisualizer(pl::ptrn::Pattern &pattern, pl::ptrn::Iteratable &, bool shouldReset, const std::vector &) { + void drawImageVisualizer(pl::ptrn::Pattern &, pl::ptrn::Iteratable &, bool shouldReset, const std::vector &arguments) { static ImGui::Texture texture; if (shouldReset) { + auto pattern = arguments[1].toPattern(); + std::vector data; - data.resize(pattern.getSize()); - pattern.getEvaluator()->readData(pattern.getOffset(), data.data(), data.size(), pattern.getSection()); + data.resize(pattern->getSize()); + pattern->getEvaluator()->readData(pattern->getOffset(), data.data(), data.size(), pattern->getSection()); texture = ImGui::Texture(data.data(), data.size()); } @@ -134,13 +136,14 @@ namespace hex::plugin::builtin { ImGui::Image(texture, texture.getSize()); } - void drawBitmapVisualizer(pl::ptrn::Pattern &pattern, pl::ptrn::Iteratable &, bool shouldReset, const std::vector &arguments) { + void drawBitmapVisualizer(pl::ptrn::Pattern &, pl::ptrn::Iteratable &, bool shouldReset, const std::vector &arguments) { static ImGui::Texture texture; if (shouldReset) { - auto width = arguments[1].toUnsigned(); - auto height = arguments[2].toUnsigned(); + auto pattern = arguments[1].toPattern(); + auto width = arguments[2].toUnsigned(); + auto height = arguments[3].toUnsigned(); - auto data = patternToArray(&pattern); + auto data = patternToArray(pattern); texture = ImGui::Texture(data.data(), data.size(), width, height); } @@ -148,7 +151,7 @@ namespace hex::plugin::builtin { ImGui::Image(texture, texture.getSize()); } - void drawDisassemblyVisualizer(pl::ptrn::Pattern &pattern, pl::ptrn::Iteratable &, bool shouldReset, const std::vector &arguments) { + void drawDisassemblyVisualizer(pl::ptrn::Pattern &, pl::ptrn::Iteratable &, bool shouldReset, const std::vector &arguments) { struct Disassembly { u64 address; std::vector bytes; @@ -157,9 +160,10 @@ namespace hex::plugin::builtin { static std::vector disassembly; if (shouldReset) { - auto baseAddress = arguments[1].toUnsigned(); - auto architecture = arguments[2].toUnsigned(); - auto mode = arguments[3].toUnsigned(); + auto pattern = arguments[1].toPattern(); + auto baseAddress = arguments[2].toUnsigned(); + auto architecture = arguments[3].toUnsigned(); + auto mode = arguments[4].toUnsigned(); disassembly.clear(); @@ -167,7 +171,7 @@ namespace hex::plugin::builtin { if (cs_open(static_cast(architecture), static_cast(mode), &capstone) == CS_ERR_OK) { cs_option(capstone, CS_OPT_SKIPDATA, CS_OPT_ON); - auto data = patternToArray(&pattern); + auto data = patternToArray(pattern); cs_insn *instructions = nullptr; size_t instructionCount = cs_disasm(capstone, data.data(), data.size(), baseAddress, 0, &instructions); diff --git a/plugins/builtin/source/content/views/view_data_inspector.cpp b/plugins/builtin/source/content/views/view_data_inspector.cpp index a05e6c8a4..625a16c33 100644 --- a/plugins/builtin/source/content/views/view_data_inspector.cpp +++ b/plugins/builtin/source/content/views/view_data_inspector.cpp @@ -115,7 +115,7 @@ namespace hex::plugin::builtin { const auto &patterns = runtime.getAllPatterns(); for (const auto &pattern : patterns) { - if (pattern->isHidden()) + if (pattern->getVisibility() == pl::ptrn::Visibility::Hidden) continue; this->m_workData.push_back({ diff --git a/plugins/builtin/source/content/views/view_pattern_editor.cpp b/plugins/builtin/source/content/views/view_pattern_editor.cpp index af33b4fb9..06d89964b 100644 --- a/plugins/builtin/source/content/views/view_pattern_editor.cpp +++ b/plugins/builtin/source/content/views/view_pattern_editor.cpp @@ -447,7 +447,7 @@ namespace hex::plugin::builtin { std::optional color; for (const auto &pattern : ProviderExtraData::getCurrent().patternLanguage.runtime->getPatternsAtAddress(address, id)) { - if (pattern->isHidden()) + if (pattern->getVisibility() == pl::ptrn::Visibility::Hidden) continue; if (color.has_value()) @@ -973,7 +973,7 @@ namespace hex::plugin::builtin { std::optional color; for (const auto &pattern : ProviderExtraData::getCurrent().patternLanguage.runtime->getPatternsAtAddress(address)) { - if (pattern->isHidden()) + if (pattern->getVisibility() != pl::ptrn::Visibility::Visible) continue; if (color.has_value()) @@ -989,11 +989,11 @@ namespace hex::plugin::builtin { hex::unused(data, size); auto patterns = ProviderExtraData::getCurrent().patternLanguage.runtime->getPatternsAtAddress(address); - if (!patterns.empty() && !std::all_of(patterns.begin(), patterns.end(), [](const auto &pattern) { return pattern->isHidden(); })) { + if (!patterns.empty() && !std::all_of(patterns.begin(), patterns.end(), [](const auto &pattern) { return pattern->getVisibility() == pl::ptrn::Visibility::Hidden; })) { ImGui::BeginTooltip(); for (const auto &pattern : patterns) { - if (pattern->isHidden()) + if (pattern->getVisibility() != pl::ptrn::Visibility::Visible) continue; auto tooltipColor = (pattern->getColor() & 0x00FF'FFFF) | 0x7000'0000; diff --git a/plugins/builtin/source/ui/pattern_drawer.cpp b/plugins/builtin/source/ui/pattern_drawer.cpp index 1fffebbd0..81e4fae4b 100644 --- a/plugins/builtin/source/ui/pattern_drawer.cpp +++ b/plugins/builtin/source/ui/pattern_drawer.cpp @@ -630,7 +630,7 @@ namespace hex::plugin::builtin::ui { } void PatternDrawer::draw(pl::ptrn::Pattern& pattern) { - if (pattern.isHidden()) + if (pattern.getVisibility() == pl::ptrn::Visibility::Hidden) return; pattern.accept(*this);