François 300e871aed Help screen, explore→set-connector-type Enter, settype UI polish.
- New `screen_help.cpp` (`screen_idx = 6`). Left column: menu of 13
  topics (Overview, Dashboard, Console, Palette, Explore,
  Connect/plug, set-connector-type, Signal types, NC pins, Analyze,
  Scripting, Save/restore, Quitting). Centre column: paragraphs of
  the focused topic, word-wrapped via `paragraph()` and scrollable.
  Right column: standard help panel.
- `help` bare → opens the screen; `help <name>` keeps the existing
  textual command-help behaviour for scripts.
- Dashboard `[h]` shortcut opens the screen, and the dashboard help
  panel (both the loaded and the no-system branch) lists it.
- Console: title gets the standard breadcrumb (`essim → console —
  type commands, read textual output`). Module/connection counters
  moved off (they live on the dashboard now).
- Explore Enter on a part jumps to `set-connector-type` with the
  exact-match index pre-computed in the filtered list (avoids the
  substring-match collision where `J20` would land on the wrong
  row when J200/J21 also matched).
- set-connector-type screen: bind `focused_entry` to `selected` on
  both menus so the cursor `>` tracks the selected row when state
  is pre-seeded from outside. Right column drops its strict
  `size(WIDTH, EQUAL, 40)` in favour of `flex`, and the `new type`
  input uses `xflex` so it actually stretches across the column.
- Esc on `set-connector-type` honours `screen_back_idx` — when
  entered via Enter on a part in `explore`, Esc returns to explore;
  otherwise it returns to the dashboard like every other screen.
  Standalone command entries explicitly reset the back-link.
- Net-member rows in the explore detail pane carry a
  `module\tsignal` payload so Enter opens the popup scoped to the
  peer module rather than mis-firing on the locally selected one.
  Same scheme for local-pin rows.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 10:31:09 +02:00
2025-03-21 18:47:49 +01:00
2025-03-21 18:51:19 +01:00
2026-05-08 20:38:30 +02:00

essim — system digital twin

Interactive simulator for the inter-card connections inside a system. Built around a domain model of modules → parts → pins / signals → connections, with importers for Mentor Graphics, Altium and ODS pinout sheets, a TUI shell with scripting, snapshots and BFS net analysis.

Status: early work-in-progress.

Quick start

cmake -S . -B build
cmake --build build -j
./build/essim

Requirements:

  • A C++17 compiler.
  • CMake 3.14+.
  • System packages: libzip and pugixml (Arch: pacman -S libzip pugixml).
  • FTXUI (v6.1.9) and doctest (v2.4.11) are fetched at configure time via FetchContent.

Inside the shell, type help for the live command list — or read the auto-generated reference at doc/user/commands.md. A worked bring-up script is at test/system.essim; load it with source test/system.essim.

Tests

./build/essim_tests
# or
ctest --test-dir build

Skip building tests entirely:

cmake -S . -B build -DBUILD_TESTING=OFF

Documentation

  • doc/user/ — user guide, command reference, scripting.
  • doc/api/ — auto-generated C++ API reference.
  • DESIGN.md — implementation notes (domain conventions, TUI internals, gotchas).
  • doc/README.md — how the doc pipeline is wired.

Regenerate auto-generated parts after substantive code changes:

cmake --build build --target doc      # needs doxygen + python3

Project layout

src/system/   domain model (Module/Part/Pin/Signal, Connection, Transform, …)
src/imports/  Mentor / Altium / ODS netlist importers
src/tui/      FTXUI shell (commands, screens, completion, history)
tests/        doctest suite
doc/          api/ + user/ Markdown trees, Doxyfile.in, gen_api_md.py
test/         sample netlists + system.essim bring-up script

Full layout & rationale in DESIGN.md.

Licence

Copyright (c) 2026 François Dausseur

Licensed under the European Union Public Licence (EUPL), Version 1.2 — the "Licence". You may not use this work except in compliance with the Licence. You may obtain a copy of the Licence in the LICENSE file or at https://joinup.ec.europa.eu/software/page/eupl.

Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Licence for the specific language governing permissions and limitations under the Licence.

SPDX-License-Identifier: EUPL-1.2

Description
Embedded System Simulation
Readme EUPL-1.2 3.8 MiB
Languages
C++ 98.2%
CMake 1.8%