Files
Sprinter-SDCC/applications/Volkov/docs/p6-sort-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

5.5 KiB

Sprinter Commander: сортировки 0.2/P6

Дата: 8 сентября 2026 года.

Статус: PASS в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD D:.

Реализация

Каждая ScPanel хранит собственные sort_key и sort_descending. Доступны четыре ключа:

Комбинация Ключ
Ctrl+F3 имя
Ctrl+F4 расширение
Ctrl+F5 дата и время last-write
Ctrl+F6 размер

Выбор другого ключа включает прямой порядок; повтор текущей комбинации меняет направление. На нижней рамке каждой панели постоянно виден режим N/E/D/S и знак +/-. Refresh и переходы в каталог используют сохранённый режим этой же панели.

Порядок групп не зависит от reverse: синтетический .. всегда первый, затем идут каталоги, затем обычные файлы, а красный маркер ограничения DSS остаётся последним. Направление применяется только внутри групп. При равном основном ключе детерминированным вторичным ключом служит имя без учёта регистра. Дата сравнивается как FAT date, затем FAT time; отдельная creation date не имитируется, потому что текущий F_FIRST/F_NEXT возвращает last-write.

Shell sort по-прежнему работает непосредственно с 24-байтовыми записями EMM через sc_store_get/put и не сохраняет указатели W3. Выбранная запись после пересортировки находится по имени; cursor/top нормализуются без повторного сканирования каталога.

Автоматическая проверка

SORTRT.EXE заполняет две разные EMM-страницы намеренно перемешанными записями и пишет SORTRES.TXT. Посмертный валидатор подтвердил:

PASS: 4 sort keys, reverse, fixed groups, selection, two panels.

Проверяются восемь точных порядков, неизменность .. и >>> MORE..., сохранение BETA.TXT под курсором и отсутствие влияния режима первой панели на вторую.

Затем тот же MAME-сценарий запускает Commander, открывает SORTL и SORTR, подаёт реальные Ctrl+F3..F6, переключает активную панель и делает refresh. Два полных UI-прогона дали побайтно одинаковые контрольные кадры.

В текущем общем HDD-builder файлы fixture получают одинаковую дату при копировании дерева, поэтому точный порядок date проверяет target-проба; UI-сценарий независимо подтверждает доставку Ctrl+F5, оба состояния D+/- и обратный redraw. Этот предел fixture не выдаётся за проверку разных FAT-дат по скриншоту.

Размер

Конфигурация --memory big --safe --max-allocs 3000:

Область P5 После сортировок Изменение
_CODE W2 8870 9125 +255
данные W2 3240 3244 +4
свободная куча W2 2738 2479 -259
BANK1 4242 5137 +895
BANK2 5973 6053 +80
SPRCMD.EXE 42447 42702 +255

Рост BANK1 содержит компараторы и сохранение выбора, W2 — команды и один банковый вызов. Первоначальный вариант с восемью статусными строками давал рост W2 на 736 байт и был сокращён до общего статуса плюс компактный индикатор на рамке. Межбанковый аудит финальной сборки чистый.

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

make hdd-p6-sort ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p6_sort.chd \
  tests/mame_p6_sort.lua artifacts/mame-p6/local 90
tests/check_p6_sort_hdd.sh build/hdd/p6_sort.chd

Перед запуском требуется убедиться, что другого MAME Sprinter нет; run_mame_hdd.sh выполняет эту проверку.