Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# Sprinter Commander: однообъектный delete 0.2/P11
|
||||
|
||||
Дата: 9 сентября 2026 года.
|
||||
|
||||
Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`.
|
||||
|
||||
## Реализованный срез F8
|
||||
|
||||
`F8` удаляет одну текущую обычную запись только после модального
|
||||
подтверждения:
|
||||
|
||||
- обычный файл удаляется через `unlink()`;
|
||||
- пустой каталог — через `rmdir()`;
|
||||
- непустой каталог сохраняется и даёт управляемую ошибку;
|
||||
- `N`/`Esc` отменяют команду без изменения носителя;
|
||||
- `..` и маркер предела DSS не передаются файловой системе;
|
||||
- в срезе P11 неоднозначная выбранная группа отклонялась; начиная с P13
|
||||
выбранные файлы удаляются группой, а выбранные каталоги пропускаются.
|
||||
Это исторический контракт P11/P13; начиная с P17 каталоги выбранной группы
|
||||
удаляются рекурсивно.
|
||||
|
||||
Рекурсивное и групповое удаление намеренно не имитируются циклом вокруг
|
||||
текущего cursor. Они будут реализованы общей файловой job с определённой
|
||||
политикой частичного успеха и cancel.
|
||||
|
||||
## Проверка
|
||||
|
||||
Target-проба `DELRT.EXE` проверяет удаление обычного файла и пустого каталога
|
||||
по полным путям, отказ для непустого каталога, сохранность соседнего файла и
|
||||
неизменность CWD. UI-сценарий затем проверяет обе стороны подтверждения и
|
||||
защитные ветки. После выхода дерево извлекается из CHD и проверяется
|
||||
побайтно:
|
||||
|
||||
```text
|
||||
PASS: file/empty-dir delete, cancel, guards, nonempty и CWD.
|
||||
```
|
||||
|
||||
Контрольные состояния:
|
||||
|
||||
- [подтверждение удаления файла](../artifacts/mame-p11/delete/file-confirm.png);
|
||||
- [cancel сохранил файл](../artifacts/mame-p11/delete/cancel-preserves.png);
|
||||
- [файл удалён после подтверждения](../artifacts/mame-p11/delete/file-deleted.png);
|
||||
- [пустой каталог удалён](../artifacts/mame-p11/delete/empty-dir-deleted.png);
|
||||
- [непустой каталог сохранён](../artifacts/mame-p11/delete/nonempty-preserved.png);
|
||||
- [`..` заблокирован](../artifacts/mame-p11/delete/virtual-guard.png);
|
||||
- [неоднозначная группа заблокирована](../artifacts/mame-p11/delete/group-guard.png);
|
||||
- [штатный возврат в DSS](../artifacts/mame-p11/delete/clean-dss-return.png).
|
||||
|
||||
## Размер
|
||||
|
||||
Конфигурация `--memory big --safe --max-allocs 3000`:
|
||||
|
||||
| Область | После P10 | После P11 | Изменение |
|
||||
|---|---:|---:|---:|
|
||||
| `_CODE` W2 | 9463 | 9496 | +33 |
|
||||
| данные W2 | 3256 | 3256 | 0 |
|
||||
| свободная куча W2 | 2129 | 2096 | -33 |
|
||||
| BANK1 | 6477 | 6477 | 0 |
|
||||
| BANK2 | 10008 | 10942 | +934 |
|
||||
| `SPRCMD.EXE` | 43040 | 43073 | +33 |
|
||||
|
||||
В BANK2 остаётся 5442 байта, в BANK1 — 9907 байт. Межбанковый аудит чист.
|
||||
|
||||
## Воспроизведение
|
||||
|
||||
```sh
|
||||
make hdd-p11-delete ALLOCS=3000
|
||||
tests/run_mame_hdd.sh build/hdd/p11_delete.chd \
|
||||
tests/mame_p11_delete.lua artifacts/mame-p11/local 67
|
||||
tests/check_p11_delete_hdd.sh build/hdd/p11_delete.chd
|
||||
```
|
||||
Reference in New Issue
Block a user