Files
Sprinter-SDCC/applications/Volkov/docs/p12-group-copy-results.md
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

79 lines
4.5 KiB
Markdown

# Sprinter Commander: групповое копирование файлов 0.2/P12
Дата: 9 сентября 2026 года.
Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`.
Примечание: документ фиксирует исторический срез P12, где directory roots
ещё пропускались. Начиная с P16 текущий F5 копирует их рекурсивно; fixture и
checker P12 обновлены как регрессия нового контракта, а исходные кадры ниже
оставлены для истории этапа.
## Контракт первого группового среза
Если в активной панели нет выбора, F5 сохраняет проверенное поведение
однофайлового PoC. При ненулевом выборе F5:
1. Считает выбранные обычные файлы и отдельно выбранные каталоги.
2. Последовательно копирует только файлы в порядке текущей сортировки панели.
3. Для каждого файла использует прежний crash-safe `temp -> commit` и общую
4-КБ EMM-страницу W3.
4. Проверяет Esc между блоками и файлами.
5. При cancel/error удаляет только незавершённый temp; уже завершённые файлы
сохраняются.
6. Останавливается на первой ошибке и сообщает `copied/total`, число
пропущенных каталогов и errno.
7. Перечитывает passive panel один раз после завершённых копий.
Выбранные каталоги намеренно игнорируются до появления рекурсивной job. Это
не меняет их флаг выбора и согласуется с правилом: групповые `+`, `-`, `*`
работают только над файлами.
Overwrite по-прежнему запрещён. Повторный запуск поверх уже скопированных
файлов останавливается на первом `EEXIST`; существующие targets не меняются.
## Проверка
HDD-fixture содержит выбранный вручную `ADIR` и три файла размером 10, 4097
и 0 байт. После первого F5 внешний checker подтверждает три побайтно точные
копии, отсутствие каталога и temp. Второй F5 проверяет управляемую остановку
на существующем `A.BIN`.
```text
PASS: 3 selected files copied; selected directory skipped; no temp.
```
Контрольные состояния:
- [каталог и три файла выбраны](../artifacts/mame-p12/group-copy/selected-files-and-dir.png);
- [скопировано 3/3, один каталог пропущен](../artifacts/mame-p12/group-copy/copied-and-skipped-dir.png);
- [повтор остановлен на EEXIST](../artifacts/mame-p12/group-copy/repeat-stops-eexist.png);
- [passive panel перечитана](../artifacts/mame-p12/group-copy/passive-refreshed.png);
- [штатный возврат в DSS](../artifacts/mame-p12/group-copy/clean-dss-return.png).
## Компоновка и размер
Конфигурация `--memory big --safe --max-allocs 3000`:
| Область | После P11 | После P12 | Изменение |
|---|---:|---:|---:|
| `_CODE` W2 | 9496 | 9496 | 0 |
| данные W2 | 3256 | 3256 | 0 |
| свободная куча W2 | 2096 | 2096 | 0 |
| BANK1 | 6477 | 6477 | 0 |
| BANK2 | 10942 | 12256 | +1314 |
| `SPRCMD.EXE` | 43073 | 43073 | 0 |
Пробный перенос обработчика в новый BANK3 увеличивал EXE ровно на 16384
байта при 2823 байтах полезного кода. Поэтому P12 оставлен в BANK2: там ещё
4128 байт запаса, а размер файла не вырос. Межбанковый аудит чист.
## Воспроизведение
```sh
make hdd-p12-group-copy ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p12_group_copy.chd \
tests/mame_p12_group_copy.lua artifacts/mame-p12/local 57
tests/check_p12_group_copy_hdd.sh build/hdd/p12_group_copy.chd
```