Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
4.1 KiB
Sprinter Commander: локальный rename 0.2/P10
Дата: 8 сентября 2026 года.
Статус: PASS в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD D:.
Реализованный срез F6
F6 переименовывает одну текущую обычную запись внутри активного каталога.
Поддержаны как файлы, так и каталоги. Диалог начинает с текущего имени и
использует общий редактор; новое имя проходит тот же строгий validator одного
компонента DOS 8.3, что и F7.
Это пока локальный Rename, а не полный VC Move/Rename:
- межкаталожный move в пассивную панель ещё не выполняется;
- если в панели есть неоднозначная группа, команда явно отказывается от операции; единственная выбранная текущая запись допустима;
..и маркер предела DSS никогда не передаются файловой системе;- совпадающее без учёта ASCII-регистра имя считается no-op.
Низкоуровневый sc_rename_local() учитывает подтверждённое ограничение DSS
1.71: RENAME принимает два basename относительно CWD. Helper сохраняет CWD,
временно входит в активный каталог, проверяет отсутствие target через
F_FIRST, выполняет rename() и восстанавливает CWD. Таким образом
существующая запись не перезаписывается даже при иной семантике конкретной
версии DSS.
Проверка
RENRT.EXE вызывает тот же helper и проверяет:
- rename файла с побайтно неизменным содержимым;
- отказ при существующем target и сохранность обоих файлов;
- rename непустого каталога с сохранностью вложенного файла;
- CWD после успеха, collision и ошибки входа в каталог.
После UI-сценария внешний checker извлекает HDD и подтверждает окончательные имена и содержимое:
PASS: file/dir rename, no-overwrite, CWD restore и UI F6.
Контрольные состояния UI:
- диалог с исходным именем;
FINAL.BINсоздан и остался под cursor;- неизменное имя обработано как no-op;
- существующий target отвергнут;
..не переименовывается;- неоднозначная группа не превращается в rename cursor;
- штатный возврат в DSS.
Размер
Конфигурация --memory big --safe --max-allocs 3000:
| Область | После P9 + UI footer | После P10 | Изменение |
|---|---|---|---|
_CODE W2 |
9449 | 9463 | +14 |
| данные W2 | 3256 | 3256 | 0 |
| свободная куча W2 | 2143 | 2129 | -14 |
| BANK1 | 6477 | 6477 | 0 |
| BANK2 | 8303 | 10008 | +1705 |
SPRCMD.EXE |
43026 | 43040 | +14 |
В BANK2 остаётся 6376 байт, в BANK1 — 9907 байт. Межбанковый аудит чист.
Воспроизведение
make hdd-p10-rename ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p10_rename.chd \
tests/mame_p10_rename.lua artifacts/mame-p10/local 65
tests/check_p10_rename_hdd.sh build/hdd/p10_rename.chd