Volkov: добавить Sprinter Commander

Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
2026-09-10 10:45:30 +03:00
parent 05bcd8197e
commit 8e389c03f8
870 changed files with 21310 additions and 25 deletions
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env python3
"""Создаёт и проверяет HDD-fixture команды F7 mkdir."""
from __future__ import annotations
import pathlib
import sys
def create(root: pathlib.Path) -> None:
panel = root / "MKTEST"
panel.mkdir(parents=True)
(panel / "KEEP.TXT").write_bytes(b"must remain\r\n")
def verify(root: pathlib.Path) -> None:
expected = [
"PASS valid DOS 8.3 components accepted",
"PASS length and dot violations rejected",
"PASS path injection and wildcard rejected",
"PASS validated component joins full path",
"PASS CWD captured before mkdir",
"PASS mkdir creates directory",
"PASS duplicate mkdir is managed error",
"PASS rmdir removes probe directory",
"PASS mkdir/rmdir preserve process CWD",
"ALL PASS",
]
failures: list[str] = []
result = root / "MKRES.TXT"
panel = root / "MKTEST"
if not result.is_file():
failures.append("нет MKRES.TXT")
else:
text = result.read_bytes().decode("cp866", errors="replace")
for line in expected:
if line not in text:
failures.append(f"нет строки результата: {line}")
if not (panel / "NEWDIR").is_dir():
failures.append("F7 не создал MKTEST/NEWDIR")
elif any((panel / "NEWDIR").iterdir()):
failures.append("NEWDIR неожиданно не пуст")
if not (panel / "KEEP.TXT").is_file() or \
(panel / "KEEP.TXT").read_bytes() != b"must remain\r\n":
failures.append("KEEP.TXT изменён")
for unwanted in ("PROBE", "TOOLONG9", "TOOLONG99"):
if (panel / unwanted).exists():
failures.append(f"остался лишний MKTEST/{unwanted}")
if failures:
for failure in failures:
print(f"FAIL: {failure}")
raise SystemExit(1)
print("PASS: validator, mkdir/error/rmdir/CWD и F7 NEWDIR.")
def main() -> None:
if len(sys.argv) != 3 or sys.argv[1] not in {"create", "verify"}:
raise SystemExit(f"usage: {sys.argv[0]} create|verify DIR")
root = pathlib.Path(sys.argv[2])
if sys.argv[1] == "create":
create(root)
else:
verify(root)
if __name__ == "__main__":
main()