Commit Graph
201 Commits
Author SHA1 Message Date
Abdessamad Derraz 505cfc044b fix: say what a platform's own check compares 2026-11-05 12:10:51 +01:00
Abdessamad Derraz f6de9a0ae3 feat: answer ES-DE, LaunchBox and Android by name 2026-11-05 12:07:25 +01:00
Abdessamad Derraz 94b5195590 fix: exit 2 on an unknown name, as for an option 2026-11-05 12:05:44 +01:00
Abdessamad Derraz 3f0dfbce31 feat: emit an error event for an unknown name 2026-11-05 11:59:02 +01:00
Abdessamad Derraz 4d46587693 fix: name a Python built without ssl or zlib 2026-11-05 11:48:50 +01:00
Abdessamad Derraz 33add072cb chore: merge installer page refresh 2026-11-04 05:52:02 +01:00
Abdessamad Derraz af2e930d32 chore: merge games on card installer mode 2026-11-03 21:06:04 +01:00
Abdessamad Derraz 52fc01109e chore: regenerate manifests after the data merges
Same files per platform. The manifests catch up with the per-system MAME
filing, the platform system join and declared_in, and name sfiii2a.zip as
missing. The games index fallback sets and the installer page samples
follow.
2026-11-03 19:05:39 +01:00
Abdessamad Derraz 2e9175a8e9 feat: install for the games on the card
--for-games reads the card's rom folders through install/games/ and keeps
what the games need: per system what its default core reads, one region
where the content proves it (crc32 and size, a disc serial, a header the
core reads), an arcade set's BIOS parents. A game not recognised gets
every BIOS of its system and is named. --required-only keeps only what
starts. The plan and the line menu open on it when the card holds games,
everything one press away. A cache keeps what reading a card found.
2026-11-03 18:51:21 +01:00
Abdessamad Derraz 6454de8772 docs: check and copy samples printed by install.py 2026-11-03 10:22:59 +01:00
Abdessamad Derraz 084bce08f9 docs: bring the installer pages up to the code 2026-11-03 10:17:47 +01:00
Abdessamad Derraz e9ef630b3a docs: regenerate the installer page samples 2026-10-28 17:23:34 +01:00
Abdessamad Derraz 57e0f306e8 chore: merge games parts and cores ticked
# Conflicts:
#	tests/test_doc_pages.py
2026-10-28 17:23:11 +01:00
Abdessamad Derraz ea214d9c01 fix: every core ticked while none narrows the run
Cores drew every box empty when no core narrows the run, read as nothing
chosen. Every core is now drawn ticked, an untick keeps the others, All
and None work as on Choose systems, and the plan, Options and line mode
say all cores or N of M cores. A run with failures counts once, the
failed files said as failed.
2026-10-28 16:51:14 +01:00
Abdessamad Derraz a4faf536dd fix: a games part is its system's card
Closes every finding of code_audit_23 and tui_audit_16: AmberELEC and
EmuELEC cards found as theirs, ArkOS cards told by bgmusic or
launchimages, counts that agree and read a copy of the right size before
calling it in place, one terminal width, line mode in the screen's order
and words, a tap shown armed, and which-pack naming the first screen.
2026-10-28 16:34:55 +01:00
Abdessamad Derraz c1a02ef24f fix: print installer page samples from install.py
The dry run, the Batocera walkthrough and the narrowing line of
wiki/installer.md were typed by hand and went stale with each list.
generate_installer_doc.py now runs install.py against the committed
lists in a sandbox, dated by each list, and the pipeline runs it at
step 7.
2026-10-28 16:22:04 +01:00
Abdessamad Derraz 297a57837f fix: pages say what the installer shows
The site, the README and the wiki take the screen's row names and the
--check pass line from install.py, and the wiki's line menu example is
written by generate_installer_doc from the function line mode runs.
which-pack describes the full screen the one-liner opens instead of a line
menu typed by hand. The systems question lays out in 80 columns under
Python 3.8, whose pty reports no width, and a test no longer reads the
host's drives.
2026-10-28 15:00:21 +01:00
Abdessamad Derraz 9314edb0be fix: one vocabulary and one count in both modes
Line mode says the screen's words for the files in place, missing or to
replace, counts the data files in its last line, names what the --from
folders hold before Enter, says Copying and the result's count once, and ends
every result with the same-choice command. Each data tree is hashed once per
run. A wrapped command reads one rule for PowerShell, a pack path keeps its
file name, folder lines keep one indent, and the systems question fits its
terminal. On the screen a tap on the focused Install row arms it, the Game
data row keeps the focus, a choice in place opens on Choose systems, a pack
holding none of the files offers no Install, and the 40x12 plan keeps its
version note.
2026-10-28 14:02:46 +01:00
Abdessamad Derraz 9911321227 fix: a card is told by what its system writes
A drive is a handheld's games part only when it holds the folders ArkOS,
AmberELEC or EmuELEC write there, and never a disk Windows or Linux calls
fixed. A data drive or a stick with a bios folder is listed with a note,
never taken under Enter. Two cards are named in the plural, and the
settle of a new screen runs from when it is drawn.
2026-10-28 13:28:01 +01:00
Abdessamad Derraz 23804a8da3 fix: one total and the same words in both modes
Commands break between shell words with a continuation the shell reads,
an option kept with its value. The 40x12 setup and plan keep a note or a
folder whole. Line mode counts files in place and missing, and names the
BIOS folder, as the screen does. The systems question fits its terminal.
2026-10-28 12:19:50 +01:00
Abdessamad Derraz 5bf29b3dab fix: find unnamed cards and fit the served copy
An ArkOS or AmberELEC games part is named on the first screen and comes
first at the folder question. Packs that lack files are said so before
any plan. The served bootstrap gives advice that fits it, and the site
build refuses a copy whose pin is not its installer.
2026-10-28 11:57:14 +01:00
Abdessamad Derraz 2e870d0692 fix: settle new screens before taking a tap
A press within 400 ms of a new screen belongs to a double tap on the
screen before and is dropped. A second tap is asked only of entries that
write files with nothing after them. The game data toggle keeps hidden
ticks, a choice in place offers no Install, and one total per plan.
2026-10-28 11:39:18 +01:00
Abdessamad Derraz 7259dbc7c4 chore: merge one choice per run and seen taps
# Conflicts:
#	install.ps1
#	install.sh
#	install/launchers/index.json
2026-10-28 06:49:39 +01:00
Abdessamad Derraz 8021db632d fix: one choice per run, taps seen before acting
Answers code_audit_20 and tui_audit_13. A tap acts on the frame it was
made on, bar entries that install, quit or open Confirm take two taps,
and Preferred regions keep their rows while open. Every check of a list
keeps the systems ticked, the plan's counts read the list the check
read, line mode leaves game data out of the choice alone, Confirm counts
copies, a pack's missing files are said before a size, and paths break
after a separator only.
2026-10-28 06:10:10 +01:00
Abdessamad Derraz 4c8e4ab157 fix: document only the https one-liner 2026-10-28 06:09:53 +01:00
Abdessamad Derraz 9e6af0aa6b feat: serve the one-line installer from the site
The site serves install.sh at /retrobios/i and install.ps1 at
/retrobios/i.ps1. generate_site.py writes both copies with the
installer address set to install.py at the commit the site is built
from (GITHUB_SHA in CI, HEAD locally), so the pinned SHA-256 and the
downloaded installer always come from one commit, including while a
deploy is still running.

Every command a user copies names the short address. The raw form
stays on the installer page as the fallback. Deploy Site now runs on
changes to install.sh and install.ps1. The install box weight keeps
the address length its ratio was fitted on, so no console page moves.
2026-10-28 05:47:38 +01:00
Abdessamad Derraz c8377de90d feat: taps follow the row, quits exit 2
code_audit_19 and tui_audit_12. A tap ticks a box and opens a choice on a
second tap of the row the screen saw tapped. One list drives the plan's game
data row, save line and data files. The version note, --offline in shown
commands, exit 2 for a chosen quit, legacy mouse reports read from bytes,
colour roles that read their words, the setup list's device column, the
copy browser, a drive two systems fit, WSL's Windows folder, and line mode
wording.
2026-10-28 03:15:07 +01:00
Abdessamad Derraz 3a5b95eb31 docs: name the terminals clicks were checked in 2026-10-27 22:00:23 +01:00
Abdessamad Derraz c9d4fbbbd8 chore: merge mouse and touch input
# Conflicts:
#	install.ps1
#	install.sh
#	install/launchers/index.json
2026-10-27 19:42:11 +01:00
Abdessamad Derraz 6e30e86d42 chore: merge main into mouse input
Pins and launcher index recomputed for the merged install.py. Mouse modes are now written before the frame, so a screen read back already takes clicks.
2026-10-27 19:29:42 +01:00
Abdessamad Derraz 7ec4d00375 chore: merge true platform list versions
# Conflicts:
#	install.ps1
#	install.py
#	install.sh
#	install/launchers/index.json
2026-10-27 19:18:57 +01:00
Abdessamad Derraz c8eb3a79e3 feat: say when the system runs another version
The installer reads the version the system states in its own file,
without running anything: batocera.version, recalbox.version (a release
only), RetroBat's system/version.info, VERSION_ID in os-release on Lakka
and EmuELEC. When it differs from the version the list was built for, a
line says so before the install and again with the result, and the new
version event carries it for the screen. An unknown version says
nothing, and the install never stops on it.
2026-10-27 19:10:44 +01:00
Abdessamad Derraz 72287e3310 feat: take clicks and taps on the full screen
Modes 1000 and 1006 only, SGR and legacy reports decoded, a hit map built from each drawn frame, action on release. Off on every way out, on the screens whose text is copied, with a pad route or RETROBIOS_NO_MOUSE.
2026-10-27 19:06:34 +01:00
Abdessamad Derraz c12cecde33 refactor: count every run line from one tally
The run header, the menu, its game data split and g, the plan, the
screen's plan and game data row and both results now divide one tally
of the list the run keeps. Case variants were counted on the run and
missing from the screen's split, g counted the whole list under a head
narrowed by c, and the result left out the data tree files. The wiki
examples come from real runs of 2026-10-27.
2026-10-27 19:01:13 +01:00
Abdessamad Derraz 230885b77f feat: paint the installer with colour roles
One table of roles from the 16 basic colours (accent, success,
warning, failure, muted, strong, selected) read by the full screen and
by the end of a line-mode run. Status words take their role from one
pattern table, the text never changes, and colour is off with NO_COLOR,
TERM dumb or unset, a terminfo entry naming fewer than 8 colours, or an
output that is not a terminal.

Colour goldens keep the escape codes, and a test strips them back to
the text goldens.
2026-10-27 18:19:26 +01:00
Abdessamad Derraz f8881e0874 docs: describe runs without questions and offline
The options and environment tables say what --no-input finds and when
it stops, and how the words name RETROBIOS_INSTALL_OFFLINE. A test holds
the options screen to leave out parallel downloads offline.
2026-10-27 16:30:24 +01:00
Abdessamad Derraz 39c2809a4b fix: polish the screens audit 11 named
Long messages scroll with their position, a small window says why the
questions come line by line, one bar rule per width, the folder a
config names sits under it and wraps whole, the help while typing a
filter lists what does not type, the plan names --core and --region,
pc finds the computer setups, rows keep sizes near their names, a
partial result counts once, a quit is said as one, the WSL browser
names drives by letter and No connection names the pack.
2026-10-27 16:27:47 +01:00
Abdessamad Derraz 0fb1047231 feat: count game data apart from BIOS files
The installer knew BIOS files from game data and no count showed it.
The plan, the line menu and the result count them apart for a list that
marks game data, the plan gets a game data row and the menu a g key,
each toggling it in one press, and one sentence says what game data is.
2026-10-27 16:03:25 +01:00
Abdessamad Derraz 992bc8ce70 fix: keep paths whole and spelled one way
A Termux run named /sdcard and /storage/emulated/0 for one storage, read
saves/<core> as a folder, split a backup path and the restore command
inside their words and named no folder for missing game data. Paths are
spelled as the BIOS folder was named, folders per core are said in
words, the result keeps paths and commands whole, and the game data line
names the folder it goes in.
2026-10-27 15:50:51 +01:00
Abdessamad Derraz 2ab01d3eec fix: ignore Ctrl-Z when no shell can resume
Started with no job-control shell, a Ctrl-Z stopped the screen and its
launcher for good. The key now stops it only when its process group is
a shell's job, and the bar says why otherwise.
2026-10-27 15:39:50 +01:00
Abdessamad Derraz 0fa4552dae fix: refuse only the axis a list lacks
The MinUI family's lists record cores and regions and no system: every
narrowing was refused with a remedy that fetched the same list. Each
option is now refused by the axis missing, with what works, and a pack
names its platform's list only when that list records the axis. Line
mode names what c chooses and skips a question with one answer, and
Options leaves out parallel downloads when nothing is downloaded.
2026-10-27 15:37:24 +01:00
Abdessamad Derraz 5704dd6793 fix: offer a drive by the folder its system reads
RetroArch's folder question numbered a Batocera SHARE drive and filled
its root. A drive is now offered by its own system's BIOS folder, one
nothing names by its bios folder, and another system's is left out and
named with the options that reach it. A list or pack card setups read
too opens on those setups, in both modes.
2026-10-27 15:19:03 +01:00
Abdessamad Derraz 19bd88131d fix: show outside text, never obey it
Pack and list paths with a control character are refused, the names a
list records, card labels, folders and events pass one filter, and a
folder a configuration names with one is not taken.
2026-10-27 14:46:14 +01:00
Abdessamad Derraz a334ace439 fix: name cards by files no menu rewrites
A KNULLI card renamed in its menu was read as a Batocera SHARE drive.
KNULLI is now named by about.info first, Batocera by its own hostname,
and a drive two systems fit is said instead of guessed. Runs without
questions see mounted cards as the screen does and stop on two setups.
The card marker table of the wiki is generated.
2026-10-27 14:40:28 +01:00
Abdessamad Derraz 6fd831fc67 fix: keep pack system names out of the terminal
A pack's system titles, names and ids are read only without control
characters, and the systems list and the same-choice line go through
screen_text. The --yes row of the option table says it implies
--no-input.
2026-10-27 12:36:15 +01:00
Abdessamad Derraz 31c574aab0 fix: line mode and screen share one decision
Answers code_audit_17 and tui_audit_10: the folder found after o, SHARE
drive roots, one same-choice command, a counted confirm step in line
mode, counts from the narrowed list, read-only advice without sudo,
systems recorded in packs, Ctrl-Z stopping the whole job, and the
wording, layout and docs items.
2026-10-27 12:24:26 +01:00
Abdessamad Derraz 77bdf7c206 fix: line mode answers in the merged tests
The TERM probe test answers the setup question, first-install keeps
its button name on one line and under 400 words, and --page of the
installer doc script is named on the page.
2026-10-27 10:19:37 +01:00
Abdessamad Derraz 8c1887fd0c chore: merge main into the audit answers 2026-10-27 09:57:16 +01:00
Abdessamad Derraz 559494ae43 fix: line mode reads the screen's decisions
Answers code_audit_16 and tui_audit_9: share drives give their bios
folder, card markers stop at mount points, a model finds its family,
the folder question quits on q, pages move by the rows drawn, and a
folder the installer proposed is created without the guard.
2026-10-27 09:55:50 +01:00
Abdessamad Derraz 9cf0f9177d chore: merge installer tables from code
# Conflicts:
#	install.ps1
#	install.sh
#	install/launchers/index.json
#	scripts/measurement_records.py
#	tests/test_install_tui.py
#	wiki/installer.md
2026-10-27 09:48:44 +01:00