Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
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-прогона дали побайтно одинаковые контрольные кадры.
- name ascending;
- extension ascending;
- extension descending;
- size ascending;
- size descending;
- date ascending;
- date descending;
- left
S-, rightE+; - refresh сохранил
E+; - штатный cleanup.
В текущем общем 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 выполняет эту проверку.