Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# Sprinter Commander: выбор по маске 0.2/P8
|
||||
|
||||
Дата: 8 сентября 2026 года.
|
||||
|
||||
Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`.
|
||||
|
||||
## Реализация
|
||||
|
||||
Обычный `+` открывает `Select by mask`, обычный `-` — `Unselect by mask`.
|
||||
Начальное значение `*.*`; Enter применяет действие, Esc отменяет его без
|
||||
изменения панели. Доступны wildcard `*` и `?`, сравнение ASCII-букв не зависит
|
||||
от регистра. Как в DOS, `*.*` означает все имена файлов, включая имена без точки.
|
||||
Все групповые операции `+`, `-`, `*` игнорируют каталоги; синтетический `..` и виртуальный
|
||||
маркер DSS также не участвуют. Выбор, поставленный на каталог отдельным `Insert`, не меняется.
|
||||
|
||||
Модальный редактор не использует консольные окна или прямой VRAM. Диалог и
|
||||
поле находятся в общей EMM-модели Commander и выводятся координатными
|
||||
функциями. Реализованы insertion в позиции cursor, Backspace, Delete,
|
||||
Left/Right, Home/End, Enter и Esc. Для текущих DSS 8.3-масок ввод ограничен
|
||||
12 символами; тот же editor будет переиспользован командами F7/F6 и
|
||||
командной строкой.
|
||||
|
||||
Существующий `sc_dialog.c` вместе с новым editor перенесён из HOME в BANK2.
|
||||
Mask matcher находится в BANK1 рядом с выбором; приложение передаёт ему
|
||||
резидентный scratch-буфер copy job, пока файловая job не активна.
|
||||
|
||||
## Проверка
|
||||
|
||||
Target-часть проверяет:
|
||||
|
||||
- `*.bin` в нижнем регистре против имён верхнего регистра;
|
||||
- `?.b?n`;
|
||||
- `*.*` для файла без точки и неизменность каталога;
|
||||
- последовательное set/clear с точными count/size;
|
||||
- неизменность `..` и DSS-маркера.
|
||||
|
||||
UI-сценарий редактирует `*.*` в `*.bin`, получает три выбранных файла и
|
||||
`sel 60/003`, затем снимает `b.bin`, получая `sel 40/002`. Следующий диалог
|
||||
закрывается Esc, состояние не меняется.
|
||||
|
||||
- [диалог с `*.*`](../artifacts/mame-p8/masks/default-dialog.png);
|
||||
- [поле после редактирования в `*.bin`](../artifacts/mame-p8/masks/edited-bin-mask.png);
|
||||
- [три BIN выбраны](../artifacts/mame-p8/masks/bin-selected.png);
|
||||
- [`b.bin` снят](../artifacts/mame-p8/masks/b-unselected.png);
|
||||
- [Esc сохранил выбор](../artifacts/mame-p8/masks/cancel-preserves.png);
|
||||
- [штатный cleanup](../artifacts/mame-p8/masks/clean-dss-return.png).
|
||||
|
||||
## Размер
|
||||
|
||||
| Область | После P7 | После P8 | Изменение |
|
||||
|---|---:|---:|---:|
|
||||
| `_CODE` W2 | 9434 | 9416 | -18 |
|
||||
| данные W2 | 3256 | 3256 | 0 |
|
||||
| свободная куча W2 | 2158 | 2176 | +18 |
|
||||
| BANK1 | 6033 | 6451 | +418 |
|
||||
| BANK2 | 6213 | 7268 | +1055 |
|
||||
| `SPRCMD.EXE` | 43011 | 42993 | -18 |
|
||||
|
||||
Несмотря на новую функцию, HOME стал меньше благодаря переносу диалогов.
|
||||
Оба банка имеют более 9 КБ резерва; межбанковый аудит чистый.
|
||||
|
||||
## Воспроизведение
|
||||
|
||||
```sh
|
||||
make hdd-p8-masks ALLOCS=3000
|
||||
tests/run_mame_hdd.sh build/hdd/p7_select.chd \
|
||||
tests/mame_p7_select.lua artifacts/mame-p8/local 80
|
||||
tests/check_p7_select_hdd.sh build/hdd/p7_select.chd
|
||||
```
|
||||
Reference in New Issue
Block a user