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

4.5 KiB

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.

PASS: 3 selected files copied; selected directory skipped; no temp.

Контрольные состояния:

Компоновка и размер

Конфигурация --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 байт запаса, а размер файла не вырос. Межбанковый аудит чист.

Воспроизведение

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