8e389c03f8
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
72 lines
3.9 KiB
Markdown
72 lines
3.9 KiB
Markdown
# Sprinter Commander: создание каталога 0.2/P9
|
|
|
|
Дата: 8 сентября 2026 года.
|
|
|
|
Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`.
|
|
|
|
## Контракт
|
|
|
|
- `F7` открывает общий координатный редактор и принимает один компонент
|
|
DOS 8.3 длиной до 12 символов;
|
|
- разрешены база до 8 и расширение до 3 символов, одна необязательная точка,
|
|
ASCII-буквы/цифры, допустимая DOS-пунктуация и CP866-байты `80h..FFh`;
|
|
- пустое имя, `.`/`..`, разделители пути, пробелы, wildcard, лишние точки и
|
|
превышение 8.3 отвергаются до вызова DSS;
|
|
- полный путь строится в уже принадлежащем `ScApp` scratch-буфере;
|
|
- `mkdir()` получает полный путь и не меняет глобальный CWD DSS;
|
|
- после успеха перечитывается только активная панель;
|
|
- существующий каталог и невалидное имя дают управляемое сообщение, `Esc`
|
|
закрывает редактор без файловой операции.
|
|
|
|
Валидатор вынесен в отдельный банковый модуль `sc_name.c`. Сам Commander
|
|
размещает редактор, оркестрацию F7 и валидатор в BANK2; HOME/W2 содержит
|
|
только dispatch и банковые трамплины.
|
|
|
|
## Проверка
|
|
|
|
Target-проба `MKRT.EXE` проверяет допустимые и запрещённые имена, построение
|
|
полного пути, реальный цикл `mkdir`/duplicate/`rmdir` и неизменность CWD.
|
|
После MAME дерево извлекается из CHD: внешний checker подтверждает созданный
|
|
`MKTEST/NEWDIR`, неизменный `KEEP.TXT` и отсутствие пробных каталогов.
|
|
|
|
```text
|
|
PASS: validator, mkdir/error/rmdir/CWD и F7 NEWDIR.
|
|
```
|
|
|
|
UI-сценарий отдельно подтверждает:
|
|
|
|
- [пустой редактор F7](../artifacts/mame-p9/mkdir/dialog-empty.png);
|
|
- [создание и refresh активной панели](../artifacts/mame-p9/mkdir/created.png);
|
|
- [управляемую ошибку повторного имени](../artifacts/mame-p9/mkdir/duplicate-error.png);
|
|
- [отказ для имени длиннее 8.3](../artifacts/mame-p9/mkdir/invalid-name.png);
|
|
- [вход в созданный каталог](../artifacts/mame-p9/mkdir/entered-newdir.png);
|
|
- [штатный возврат в DSS](../artifacts/mame-p9/mkdir/clean-dss-return.png).
|
|
|
|
## Размер
|
|
|
|
Конфигурация `--memory big --safe --max-allocs 3000`:
|
|
|
|
| Область | После P8 | После P9 и уточнения group select | Изменение |
|
|
|---|---:|---:|---:|
|
|
| `_CODE` W2 | 9416 | 9449 | +33 |
|
|
| данные W2 | 3256 | 3256 | 0 |
|
|
| свободная куча W2 | 2176 | 2143 | -33 |
|
|
| BANK1 | 6451 | 6477 | +26 |
|
|
| BANK2 | 7268 | 8156 | +888 |
|
|
| `SPRCMD.EXE` | 42993 | 43026 | +33 |
|
|
|
|
Оба банка сохраняют более 8 КБ резерва. Межбанковый аудит чист.
|
|
|
|
Общий `size-check` по всему C-Compiler пока ожидаемо отмечает посторонний
|
|
новый `hello3` и намеренный рост `openenv` после постоянной проверки
|
|
`O_RDONLY`; эталон размеров из Commander не обновлялся.
|
|
|
|
## Воспроизведение
|
|
|
|
```sh
|
|
make hdd-p9-mkdir ALLOCS=3000
|
|
tests/run_mame_hdd.sh build/hdd/p9_mkdir.chd \
|
|
tests/mame_p9_mkdir.lua artifacts/mame-p9/local 70
|
|
tests/check_p9_mkdir_hdd.sh build/hdd/p9_mkdir.chd
|
|
```
|