Files
Sprinter-SDCC/applications/Volkov/docs/commander-roadmap.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

42 KiB
Raw Blame History

Sprinter Commander: план разработки

Статус: рабочий план

Связанные документы: требования, архитектура, клавиши и команды, платформенные пробы P1, экранный backend P2, результаты P2.1, результаты P2.2, результаты skeleton P2, результаты файловых панелей P3, результаты копирования P4.1, результаты запуска EXE P4.2, результаты P5, результаты F7/P9, результаты F6/P10, результаты F8/P11, результаты group-copy/P12, результаты group-delete/P13, результаты стандартных цветов/P14, результаты recursive copy/P15, результаты recursive group-copy/P16, результаты recursive group-delete/P17, результаты сохранения метаданных/P18, результаты conflict-policy/P19, UI-ориентир VC

Текущее состояние:

  • P0 — завершена первая редакция документации;
  • P1 — обязательные платформенные примитивы подтверждены в MAME 0.287; проверка на реальном Sprinter ожидается;
  • P2.1 — ядро координатного экранного backend прошло MAME 0.287;
  • P2 — многоцветный двухпанельный skeleton прошёл полный MAME-сценарий, включая scroll, диалоги и повторный cleanup; аппаратная проверка ожидается;
  • P2.2 — системная многоцветная палитра прошла отдельный MAME-тест; аппаратная проверка ожидается;
  • P3 — реальные две панели, EMM-store с границей 640/641, сортировка, навигация, синтетическая .. и предел DSS 35 прошли диагностические и интеграционные MAME-тесты; аппаратная проверка ожидается.
  • P4 — безопасное однофайловое копирование через EMM/W3 и запуск .EXE с полным восстановлением окружения прошли HDD-сценарии MAME; аппаратная проверка ожидается.
  • P5 — завершён в MAME: пройдены 20 последовательных copy со всеми граничными размерами, 100 refresh, три lifecycle, ENOSPC, readonly, ошибки read/rename/ENOENT, отмена перед commit, смена носителя, отсутствующий EXE и реальный mdview2. Аппаратный smoke-тест остаётся внешней проверкой.
  • 0.2 — начат: независимые сортировки name/ext/size/date и reverse, выбор Insert, *, +/- с масками, F7 mkdir и локальный F6 rename реализованы и прошли target/UI-сценарии MAME; следующим идёт расширение файловой job и рекурсивная обработка каталогов. Групповые F5 и F8 уже обрабатывают файлы и выбранные directory roots; для F8 каталоги удаляются после файлов обратным проходом очереди. F5 сохраняет FAT date/time и файловые атрибуты R/H/S/A. Conflict-policy overwrite/skip/rename и all, readonly re-prompt, backup/rollback выполнены; P5/P18 повторно пройдены. Также досрочно реализован стандартный fallback цветов имён без файла конфигурации.

1. Целевые результаты

Проект делится на три продуктовых рубежа:

  1. PoC 0.1 — доказана работа архитектуры на Sprinter.
  2. Рабочая версия 0.4 — Commander пригоден для повседневных файловых операций.
  3. Полная версия 1.0 — реализован основной набор возможностей VC 4.99 с адаптацией к Sprinter.

Dos Navigator задаёт идеи для расширяемости, но не объём версии 1.0.

Вся линейка до 1.0 включительно использует одну EMM-страницу на панель и жёсткий предел 640 показываемых записей. Его снятие — отдельная архитектурная задача 2.0+.

2. Допущения для оценки

Оценки приведены для одного разработчика, знакомого с текущим Sprinter C-Compiler и имеющего доступ к MAME. Один рабочий день означает день сосредоточенной разработки, а не календарный день.

В оценку входят:

  • реализация;
  • целевые тесты;
  • анализ .asm/.map при платформенной проблеме;
  • MAME-прогон;
  • обновление документации.

В оценку не входят:

  • исправление неизвестных дефектов DSS;
  • разработка отсутствующего архиватора;
  • длительное ожидание доступа к реальному железу;
  • перенос стороннего editor/viewer;
  • создание графического режима интерфейса.

Ожидаемая точность оценки:

  • PoC: -20% / +40%;
  • этапы после PoC: -25% / +60%;
  • архивы и editor: оцениваются повторно после исследования доступных программ.

3. Сводный план

Этап Результат Оценка
P0 Спецификация и архитектура 23 дня
P1 Проверенные платформенные примитивы 35 дней
P2 Запускаемый двухпанельный skeleton 45 дней
P3 Полноценная навигация по двум панелям 57 дней
P4 Копирование одного файла и EXEC 57 дней
P5 Стабилизация PoC 35 дней
0.2 Безопасное файловое ядро 57 недель
0.4 Рабочая оболочка и внешние инструменты 46 недель
0.6 Поиск, дерево и расширенные панели 57 недель
0.8 Виртуальные источники и архивы 610 недель
1.0 Надёжность, производительность, релиз 58 недель

PoC требует ориентировочно 22–32 рабочих дня. Полная версия 1.0 — примерно 29–44 рабочих недели с учётом PoC. После исследования P1 оценки должны быть пересмотрены по фактической скорости разработки.

4. Зависимости этапов

P0 documentation
  |
  v
P1 platform probes
  |
  +------> EXEC probe -------------------+
  |                                      |
  v                                      v
P2 app/screen/input skeleton          P4 EXEC
  |                                      ^
  v                                      |
P3 panel/store/filesystem --------> P4 copy
  |                                      |
  +------------------+-------------------+
                     v
                P5 PoC hardening
                     |
                     v
              0.2 safe file core
                     |
          +----------+-----------+
          v                      v
   0.4 shell/helpers       0.6 search/tree
          +----------+-----------+
                     v
            0.8 virtual sources
                     |
                     v
                  1.0
                     |
                     v
          2.0+ dynamic panel store

0.6 допускается начинать после стабилизации интерфейса панелей 0.2, но релиз 0.8 требует законченных 0.4 и 0.6.

5. Фаза P0 — проектирование

Цель

Превратить общую идею Commander в набор контрактов, по которым можно писать и проверять код без постоянного возврата к исходникам VC.

Работы

  • зафиксировать границы PoC и версии 1.0;
  • определить компоновку экрана;
  • определить ScDirEntry, ScPanel, события и команды;
  • выбрать режим памяти и владение EMM;
  • описать безопасное копирование;
  • описать запуск дочерней программы;
  • определить клавиши PoC и будущий keymap;
  • составить acceptance tests;
  • зафиксировать лицензионное правило для референсов.

Артефакты

  • docs/commander-requirements.md;
  • docs/commander-architecture.md;
  • docs/commander-keymap.md;
  • docs/commander-roadmap.md.

Критерий выхода

Нет неизвестного продуктового решения, мешающего начать платформенные тесты. Непроверенные технические детали перечислены как задачи P1, а не скрыты в предположениях архитектуры.

6. Фаза P1 — платформенные пробы

Цель

Получить минимальные воспроизводимые программы для всех примитивов, от которых зависит PoC.

P1.1. Каталоги и пути

Проверить:

  • getcwd, абсолютные и относительные пути;
  • chdir между двумя каталогами и дисками;
  • шаблон для перечисления всех файлов;
  • возвращает ли DSS . и ..;
  • конец fnext() и значение errno;
  • имя корня и переход к родителю;
  • максимальную практическую длину пути;
  • поведение при смене/отсутствии носителя.

Результат: таблица фактического поведения и тестовый .exe.

P1.2. EMM

Проверить:

  • выделение блока из трёх страниц;
  • получение всех физических страниц;
  • чтение/запись начала и конца каждой страницы;
  • сохранение W3 вокруг bank_read/bank_write;
  • повторное выделение/освобождение;
  • понятную ошибку при нехватке памяти.

Результат: подтверждённая схема трёх страниц PoC.

P1.3. Экран

На базе существующего теста winrest проверить app-local wrapper:

  • полный экран 80x32;
  • вывод с ненулевого offset;
  • частичный диапазон строк;
  • все используемые атрибуты;
  • восстановление после смены видеорежима;
  • сохранность IX и W3.

Результат: утверждённый ABI sc_platform_winrest().

P1.4. Клавиатура

Записать фактические ascii, scan, kbd_mod_state для клавиш из commander-keymap.md. Отдельно проверить быстрое отпускание Ctrl после Ctrl+PgUp и Ctrl+R.

Результат: тестовая таблица и список подтверждённых комбинаций.

P1.5. EXEC

Проверить:

  • формат параметров ESTEX EXEC;
  • требуется ли отдельный WAIT;
  • возврат к вызывающей программе;
  • состояние W1/W2/W3 после возврата;
  • состояние видеорежима и CWD;
  • коды ошибок отсутствующего и повреждённого .EXE;
  • взаимодействие с открытым загрузочным fd multi-bank программы.

Результат: app-local wrapper и отдельный repro.

P1.6. Информация о диске и метаданные

DSKINFO подтверждён в P1. ATTRIB, получение и установка даты/времени не блокируют базовый PoC и проверяются перед реализацией соответствующих операций версии 0.2.

Критерий выхода P1

  • Все обязательные wrappers имеют воспроизводимый тест.
  • Необъяснённых регистровых соглашений нет.
  • Известно минимальное число требуемых страниц и fd.
  • Архитектура обновлена по результатам проб.

Критерий достигнут для MAME 0.287 / BIOS 3.06. Подтверждены EMM, DSKINFO, F_FIRST/F_NEXT, полный и частичный WINREST, клавиши PoC, EXEC обоих режимов, WAIT=0x5A, восстановление W1/W2/W3 и повторный EMM-тест после child. Фактические значения и скриншоты приведены в p1-platform-probes.md.

Расширенные отрицательные случаи не блокируют skeleton P2 и перенесены к этапам, где появится использующий их код:

  • переходы между дисками, корень, длинный путь и смена носителя — P3/P5;
  • исчерпание EMM — P5;
  • отсутствующий/повреждённый EXE и multi-bank loader fd — P4/P5;
  • ATTRIB и изменение даты/времени — версия 0.2.

7. Фаза P2 — skeleton приложения

Цель

Получить запускаемое приложение с двумя пустыми панелями, экранной моделью и управлением, но без чтения каталога.

Работы

  1. Создать Makefile, src/, include/, banks/, tests/.
  2. Добавить ScApp и init/cleanup.
  3. Настроить сборку --memory big --safe.
  4. Выделить EMM-блок и получить три страницы.
  5. Зафиксировать прошедший P2.1 coordinate-screen probe: полный и частичный WINREST, RDCHAR, оба направления прямоугольного SCROLL, 1000 операций и сохранение W3.
  6. Реализовать sc_video_system на WINREST/WRCHAR/SCROLL; не использовать BIOS window descriptors и прямой доступ к VRAM.
  7. Реализовать screen buffer и полный/частичный present через sc_video.
  8. Добавить sc_glyphs.h с CP866-глифами и test рамок, стрелок и block- элементов.
  9. Реализовать прямоугольный scroll одной панели в обоих направлениях; синхронно сдвигать экранную EMM-модель и проверять границы прямоугольника.
  10. Нарисовать две панели и нижнюю строку клавиш.
  11. Реализовать ScKeyEvent, ScCommand и главный цикл.
  12. Реализовать Tab, навигационные команды-заглушки и подтверждение F10.
  13. Добавить единый message dialog.
  14. Настроить первый интерактивный MAME-тест со скриншотом.
  15. Подключить прошедший P2.2 модуль темы: сохранить затрагиваемые записи четырёх планов, задать одинаковые normal/FLASH-пары и восстановить их при cleanup. Повторить тот же тест на реальном Sprinter.

Критерий выхода P2

  • SPRCMD.EXE собирается в big.
  • Экран соответствует схеме 80x32.
  • Tab меняет активную рамку.
  • Однострочный scroll не двигает рамку, соседнюю панель и общие строки.
  • Все соединения рамок, стрелки и block-элементы отображаются ожидаемыми CP866-глифами.
  • Экран остаётся читаемым во времени с подключённым многоцветным профилем.
  • Диалог F10 работает в обоих направлениях.
  • Выход освобождает EMM; повторные запуски не уменьшают свободную память.
  • В .map есть зафиксированный запас HOME и банков.

MAME-часть этих критериев достигнута 6 сентября 2026 года. Текущий skeleton имеет 7 276 байт heap в HOME, пока не использует W1-банки и дважды подряд восстановил число свободных EMM-страниц после выхода. Отдельный sc_theme сохранил/установил/восстановил четыре палитровых плана. Подробный сценарий и кадры: p2-skeleton-results.md.

Аппаратный прогон остаётся внешним gate. Многоцветная тема P2.2 прошла MAME; на реальном Sprinter она проверяется вместе с остальными критериями P2.

8. Фаза P3 — панели и каталог

Цель

Реализовать независимую навигацию по настоящей файловой системе.

Работы

  • ScDirEntry и build-time проверка размера 24 байта;
  • EMM store get/put/clear;
  • scan настоящего каталога;
  • синтетический ..;
  • сортировка каталогов и файлов;
  • panel renderer;
  • cursor/top и постраничная навигация;
  • вход в каталог, parent, refresh;
  • сохранение позиции по имени;
  • отдельные пути панелей;
  • предупреждение о пределе 640 записей и отдельный красный маркер ограничения DSS после ошибки 35;
  • отображение ошибок носителя.

Порядок реализации

  1. Одна панель, маленький каталог.
  2. Пустой каталог и корень.
  3. Сортировка.
  4. Прокрутка за 27 строк.
  5. Вторая независимая панель.
  6. Большой каталог и предел страницы.
  7. Ошибки и восстановление CWD.

Критерий выхода P3

  • Выполнены REQ-PANEL, REQ-NAV и REQ-FS PoC.
  • Сто переходов/refresh не меняют EMM free pages.
  • Каталог на пределе не повреждает screen page.
  • Перемещение курсора не вызывает ffirst/fnext.
  • После ошибки обе панели остаются управляемыми.

9. Фаза P4 — копирование и запуск

P4.1. Копирование

Порядок работ:

  1. Проверка выбранной записи и построение путей.
  2. Проверка отсутствия конечного имени.
  3. Генерация temp с O_EXCL.
  4. Зарезервировать четвёртую EMM-страницу как рабочую область copy job.
  5. Добавить симметричные операции bank_read_page()/bank_write_page() для файлового обмена через W3 без полноразмерного буфера в W2.
  6. Копирование логическими блоками 4096 байт; возможное увеличение блока — только после измерения отзывчивости и скорости.
  7. 32-битный прогресс.
  8. Отмена через Esc.
  9. Cleanup на каждой точке ошибки.
  10. Повторная проверка конечного имени.
  11. Rename temp и refresh пассивной панели.
  12. Тесты размеров и побайтовое сравнение.

P4.2. EXEC

Порядок работ:

  1. Запуск минимального дочернего .EXE.
  2. Восстановление видеорежима и экрана.
  3. Восстановление CWD.
  4. Refresh панелей.
  5. Обработка ошибки запуска.
  6. Запуск существующего viewer как интеграционный тест.

Критерий выхода P4

  • Выполнены REQ-COPY и REQ-EXEC.
  • Большой файл копируется без 16-битного переполнения.
  • Cancel/error не оставляют temp.
  • Существующий файл не изменяется.
  • После дочерней программы Commander продолжает принимать команды.

10. Фаза P5 — стабилизация PoC 0.1

Обязательная матрица

Область Сценарии
Каталог пустой, один файл, 27/28, synthetic 640/641, DSS >512 физических записей
Навигация границы, repeat, две разные глубины каталогов
Файлы 0, 1, 4095, 4096, 65535, 65536, более 1 МБ
Ошибки ENOENT, EACCES/readonly, ENOSPC, смена носителя
Copy cleanup cancel в начале/середине/конце, ошибка read/write/rename
EXEC успех, отсутствующий файл, плохой EXE, возврат с другим экраном
Ресурсы 100 refresh, 20 copy, повторные запуск/выход
Экран полный redraw, dirty rows, диалог, возврат из EXE

Артефакты релиза PoC

  • SPRCMD.EXE;
  • Makefile с floppy, hdd и run;
  • MAME-тесты и контрольные скриншоты;
  • test files с известными размерами/checksum;
  • отчёт размеров HOME/банков;
  • список известных ограничений;
  • инструкция запуска.

Release gate 0.1

Все десять критериев раздела 10 требований выполнены. Наличие известной ошибки, способной повредить чужой файл или потерять EMM-блок, блокирует релиз.

Release gate выполнен в MAME 0.288 / BIOS 3.06 / DSS 1.71.57. Сводка, команды воспроизведения и ограничения зафиксированы в p5-stability-results.md и poc-0.1-release.md. Проверка на реальном Sprinter не подменяется MAME и остаётся обязательным последующим smoke-тестом.

11. Версия 0.2 — безопасное файловое ядро

Цель

Сделать Commander пригодным для реальной работы с файлами без viewer/editor.

Функции

  • одна EMM-страница на панель и предел 640 записей сохраняются;
  • Insert, *, +/- и маски выбора — выполнены;
  • сортировки name/ext/size/date и reverse — выполнены и проверены в MAME;
  • последовательная очередь выбранных файлов F5 — выполнена;
  • рекурсивное копирование одного каталога и группы directory roots — выполнено; traversal hardening для больших деревьев остаётся;
  • F6 local rename — выполнено; межкаталожный/group move остаётся в работе;
  • F7 mkdir — выполнено и проверено в MAME;
  • F8 single file/empty-directory delete и recursive group delete выбранных файлов и каталогов — выполнены, включая runtime-cancel; защитная policy остаётся;
  • cancel между файлами и блоками;
  • overwrite/skip/rename и варианты all — выполнены для файлов, включая backup/rollback и readonly re-prompt; merge существующих каталогов позже;
  • проверка свободного места;
  • сохранение даты, времени и атрибутов обычных файлов — выполнено и проверено exact FAT-тестом; метаданные каталогов не входят в P18;
  • защита readonly при overwrite — выполнена; delete/move policy остаётся;
  • подсчёт итогов выбранной группы;
  • переключение дисков минимум через диалог.

Внутренние работы

  • сохранить одностраничный store и добавить к ScPanel ключ и направление сортировки;
  • расширить ScJob очередью и стеком каталогов;
  • сохранить crash-safe temp/commit модель;
  • добавить единый policy object для ошибок;
  • определить поведение при частично успешной группе.

Критерий выхода 0.2

  • Неделя dogfood без повреждения данных.
  • Рекурсивные операции проходят дерево глубиной не менее 16 уровней.
  • Рекурсивная job обрабатывает более 640 файлов суммарно в нескольких каталогах, не превращая саму панель в многостраничную.
  • Cancel оставляет уже завершённые файлы в определённом документированном состоянии и не оставляет temp.
  • Все разрушительные команды требуют подтверждения.

12. Версия 0.4 — рабочая оболочка

Функции

  • однострочная командная строка;
  • история команд и каталогов;
  • интерактивный полноэкранный pseudo-shell по Ctrl+O;
  • вставка имени/пути активной и пассивной панели;
  • запуск .EXE с параметрами;
  • file associations;
  • пользовательское меню;
  • F3 через отдельный viewer;
  • F4 через отдельный editor;
  • F9 и базовое меню;
  • режимы панелей Brief/Details по образцу VC;
  • конфигурационный файл;
  • сохранение путей, sort mode и палитры;
  • цветовые правила по расширениям; без файла: каталоги белые, EXE жёлтые, остальные файлы светло-серые;
  • Ctrl+U, Ctrl+O, root;
  • полноценный drive dialog;
  • краткая встроенная помощь.

Протокол helper-программ

До реализации F3/F4 фиксируется небольшой контракт:

  • полный путь передаётся аргументом;
  • код возврата различает успех, отмену и ошибку;
  • helper не обязан восстанавливать экран;
  • Commander всегда восстанавливает режим и перечитывает затронутую панель;
  • для editor предусматривается признак изменения файла.

Критерий выхода 0.4

Commander можно использовать как основную оболочку DSS для навигации, операций, запуска программ, просмотра и редактирования файлов.

13. Версия 0.6 — возможности VC-класса

Функции

  • quick search по текущей панели;
  • постоянные фильтры/маски панели;
  • quick-view panel;
  • info panel;
  • размеры каталогов;
  • сравнение каталогов;
  • поиск файлов по имени;
  • поиск текста в файлах, если скорость приемлема;
  • виртуальная панель результатов поиска;
  • дерево каталогов;
  • история посещённых каталогов;
  • descriptions (description.ion/настраиваемое имя), если формат выбран;
  • изменение атрибутов и времени через UI.

Архитектурный gate

Перед началом поиска должен быть стабилен интерфейс ScSource. Результаты поиска не должны притворяться настоящим каталогом с помощью специальных проверок по всему UI: они реализуются как отдельный source kind.

Критерий выхода 0.6

Поиск и дерево работают на объёмах, превышающих near-memory, а возврат из виртуальной панели не теряет прежнее состояние настоящей панели.

14. Версия 0.8 — виртуальные источники и архивы

Обязательные исследования

  • какие архиваторы реально существуют для Sprinter;
  • можно ли получить листинг без распаковки;
  • достаточно ли внешнего процесса и list-файла;
  • какие форматы стоит поддерживать первыми;
  • сколько памяти требует нативный decoder;
  • разрешает ли лицензия включать выбранную реализацию.

Предпочтительная последовательность

  1. Внешний архиватор по шаблону команды.
  2. Просмотр архива как read-only SC_SOURCE_ARCHIVE.
  3. Извлечение выбранных файлов.
  4. Копирование файла в архив, если внешний инструмент поддерживает.
  5. Только затем — нативный decoder для одного востребованного формата.

Дополнительные функции

  • мышь;
  • локализация строк через resource file;
  • расширенная помощь;
  • bookmarks;
  • protocol внешних plugin/helper-программ;
  • сохранённые наборы конфигурации.

Критерий выхода 0.8

Архивная и поисковая панели используют тот же panel UI без специальных ветвей в renderer и навигации. Ошибка внешнего архиватора не повреждает исходный архив.

15. Версия 1.0 — релизная стабилизация

К этому этапу уже должны быть закончены все назначенные функции 0.2–0.8. Отдельно проверяются три обязательных релизных контракта:

  • командная строка и интерактивный полноэкранный pseudo-shell по Ctrl+O;
  • сортировка каждой панели по имени, расширению, размеру и дате, по возрастанию и убыванию;
  • подсветка по типу файла с настраиваемыми цветами и заданным поведением при отсутствии конфигурации.

Предел панели 640 записей в 1.0 остаётся штатным документированным ограничением.

Надёжность

  • проверка всех cleanup-path;
  • защита от двойного освобождения;
  • тесты нехватки EMM;
  • тесты предела файловых дескрипторов;
  • смена и извлечение носителя;
  • read-only и disk full;
  • повреждённые каталоги/архивы;
  • отмена каждой длительной операции;
  • безопасное обновление конфигурации через temp/rename.

Производительность

  • профилирование чтения больших каталогов;
  • профилирование сортировок EMM;
  • минимизация переключений W3;
  • группировка dirty rows;
  • размер блока copy по фактическим измерениям;
  • размер HOME и каждого банка;
  • время холодного запуска и возврата из helper.

Совместимость

  • MAME 0.287 / BIOS 3.06;
  • реальный Sprinter Sp2000;
  • DSS 1.71.57;
  • floppy и HDD;
  • минимум две конфигурации доступной EMM;
  • CP866 и Rus/Lat состояние клавиатуры.

Документация релиза

  • руководство пользователя;
  • полный keymap;
  • описание конфигурации;
  • восстановление после прерванной операции;
  • ограничения файловой системы;
  • лицензии и благодарности;
  • руководство сборки;
  • архитектурная памятка для добавления source/job/bank.

Release gate 1.0

  • Нет известных дефектов потери или скрытой порчи данных.
  • Все обязательные функции требований 1.0 реализованы; перенос любой из них требует нового явного решения о составе релиза.
  • Пройдены автоматические MAME-тесты и ручной hardware checklist.
  • Размеры HOME/банков имеют документированный запас.
  • Чистая сборка воспроизводима штатной командой проекта.

16. Версия 2.0+

Первый архитектурный рубеж после 1.0 — просмотр каталогов, содержащих более 640 записей. Перед реализацией сравниваются два варианта.

Вариант A: потоковые логические страницы. Рекомендуемый первый шаг:

  • в EMM по-прежнему находится только текущая страница и не более 640 строк;
  • виртуальные <<< PAGE n и >>> PAGE n занимают места в этом лимите;
  • при переходе каталог сканируется заново до требуемой логической позиции;
  • каталоги и файлы отбираются двумя проходами, чтобы каталоги оставались первыми во всём потоке;
  • сортировка выполняется только внутри текущей страницы и так обозначается в UI;
  • изменение каталога между проходами сбрасывает просмотр на первую страницу.

Текущий DSS API F_FIRST/F_NEXT не принимает ключ или направление сортировки. Незавершённые итераторы двух панелей не сохраняются: каждый переход заканчивает перебор либо начинает новый.

Платформенная предпосылка варианта A: стабильный DSS 1.71 не умеет перейти за 512-ю физическую FAT-запись и возвращает код 35. Потоковые страницы становятся реализуемыми только после перехода на расширенный режим F_FIRST (B=0x80/0x81) из экспериментальной ветки beta_cdfs либо после эквивалентного исправления DSS. До этого >>> MORE... является только информирующим маркером, а не переходом на страницу 2. Детали: dss-large-directories.md.

Вариант B: динамический EMM-store. Он нужен, только если потребуются глобальная сортировка и произвольный переход между страницами:

  • выбор модели 1024, 2048 или динамического предела по результатам замеров;
  • выделение и освобождение динамической цепочки EMM-страниц;
  • межстраничная сортировка или индекс без полной копии списка в W2;
  • определённое поведение при нехватке EMM на части каталога;
  • нагрузочные тесты многостраничных списков и отмены во время scan/sort.

Для обоих вариантов виртуальные записи имеют отдельный тип и не участвуют в выделении, файловых операциях и сортировке. Точный номер версии после 1.0 фиксируется отдельным release gate; базовый релиз 1.0 от этого не зависит.

Прочий backlog, не влияющий на релиз 1.0:

  • нативные архивные codecs;
  • FTP/serial/network source при наличии транспорта;
  • disk image source;
  • сравнение и синхронизация деревьев;
  • макросы;
  • очередь нескольких jobs;
  • background copy, только если появится безопасная модель многозадачности;
  • интеграция viewer/editor в банки Commander;
  • дополнительные режимы экрана.

DOS-специфические функции DN — CD player, modem terminal, disk recovery, spreadsheet, games и desktop окон — остаются отдельными приложениями.

17. Правило изменения плана

После каждого release gate обновляются:

  1. Фактическое время этапа.
  2. Размер HOME и банков.
  3. Число обязательных EMM-страниц.
  4. Открытые платформенные риски.
  5. Состав следующей версии.

Новая функция не добавляется в текущий этап без одного из решений:

  • она устраняет блокирующий риск текущего release gate;
  • она дешевле сейчас из-за уже изменяемого интерфейса;
  • другая функция того же объёма явно исключается из этапа.

Такой обмен фиксируется в этом документе, чтобы PoC и 1.0 не расширялись неуправляемо.