# Sprinter Commander: групповое удаление файлов 0.2/P13 Дата: 9 сентября 2026 года. Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`. Это исторический контракт P13. Начиная с P17 выбранные каталоги не пропускаются, а удаляются рекурсивно после одного общего подтверждения; новый контракт и актуальные артефакты описаны в [p17-tree-delete-results.md](p17-tree-delete-results.md). Текущий P13 fixture оставлен как регрессия file-only группы. ## Контракт первого группового среза F8 Если в активной панели есть выбранные записи, F8: 1. Считает выбранные обычные файлы и выбранные каталоги отдельно. 2. Если выбранных файлов нет, не открывает подтверждение и сообщает, что рекурсивное удаление каталогов ещё не реализовано. 3. Показывает одно подтверждение для всей группы файлов. 4. После подтверждения проходит EMM-store в порядке панели и удаляет только выбранные записи без `FA_DIREC`. 5. Останавливается на первой ошибке. Уже удалённые файлы не восстанавливаются; итог сообщает `deleted/total`, число пропущенных каталогов и errno. 6. После хотя бы одного успешного удаления перечитывает активную панель. Выбранные каталоги не удаляются и не обходятся рекурсивно. Это согласуется с контрактом групповых `+`, `-`, `*`: групповые файловые команды отделяют файлы от каталогов. При отсутствии выбора сохранён однообъектный F8 из P11: файл удаляется через `unlink()`, пустой каталог — через `rmdir()`. ## Проверка HDD-fixture содержит два выбранных файла, один невыбранный файл, выбранный пустой каталог и выбранный непустой каталог. Сценарий сначала отменяет групповое подтверждение, затем повторяет операцию с подтверждением. После refresh отдельно выбирается только каталог: F8 обязан отказать без диалога и без изменения носителя. После чистого выхода MAME дерево извлекается из CHD и проверяется побайтно: ```text PASS: selected files deleted; selected directories and KEEP preserved. ``` Контрольные состояния: - [два файла и два каталога выбраны](../artifacts/mame-p13/group-delete/selected-files-and-dirs.png); - [одно подтверждение группы](../artifacts/mame-p13/group-delete/group-confirm.png); - [отмена сохранила группу](../artifacts/mame-p13/group-delete/cancel-preserves.png); - [файлы удалены, каталоги сохранены](../artifacts/mame-p13/group-delete/files-deleted-dirs-preserved.png); - [directory-only группа отклонена](../artifacts/mame-p13/group-delete/directory-only-refused.png); - [штатный возврат в DSS](../artifacts/mame-p13/group-delete/clean-dss-return.png). ## Компоновка и размер Конфигурация `--memory big --safe --max-allocs 3000`: | Область | После P12 | После P13 | Изменение | |---|---:|---:|---:| | `_CODE` W2 | 9496 | 9496 | 0 | | данные W2 | 3256 | 3256 | 0 | | свободная куча W2 | 2096 | 2096 | 0 | | BANK1 | 6477 | 6477 | 0 | | BANK2 | 12256 | 13267 | +1011 | | `SPRCMD.EXE` | 43073 | 43073 | 0 | В BANK2 остаётся 3117 байт. HOME и размер EXE не выросли; межбанковый аудит чист. ## Воспроизведение ```sh make hdd-p13-group-delete ALLOCS=3000 tests/run_mame_hdd.sh build/hdd/p13_group_delete.chd \ tests/mame_p13_group_delete.lua artifacts/mame-p13/local 58 tests/check_p13_group_delete_hdd.sh build/hdd/p13_group_delete.chd ```