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
+14 -2
View File
@@ -215,6 +215,7 @@ static uint16_t g_last_prog; /* n_lines на последнем
/* Кодировки (ENC_*) и g_encoding — в mdview2.h / mdview2_enc.c. */
const uint8_t *g_remap; /* extern: активная таблица ремапа (CP1251/KOI8), 0 = без ремапа (CP866)*/
uint8_t g_scratch_phys; /* extern: EMM-страница под ремап-буфер строки для win_rest */
static uint8_t g_scratch_blk; /* handle scratch-блока: нужен для освобождения при exit */
/* UTF-8 набор (utf_blk/utf_pages/utf_phys/utf_size/utf_avail, конвертер и его
* состояние) — в mdview2_enc.c; разделяемые символы и API — в mdview2.h.
@@ -562,6 +563,7 @@ static void unload_file(void)
}
if (orig_file_blk) { mem_free_block(orig_file_blk); orig_file_blk = 0; }
if (utf_blk) { mem_free_block(utf_blk); utf_blk = 0; }
if (g_scratch_blk) { mem_free_block(g_scratch_blk); g_scratch_blk = 0; }
file_blk = 0;
}
@@ -1108,8 +1110,18 @@ int main(int argc, char **argv)
cputs("\n\r\n\r");
exit(-1);
}
/* Scratch-страница под ремап-буфер строки (win_rest_remap). */
g_scratch_phys = mem_get_page(mem_alloc_pages(1), 0);
/* Scratch-страница под ремап-буфер строки (win_rest_remap). Handle
* сохраняем отдельно: физический номер страницы нельзя передавать
* mem_free_block(), а on_exit() обязан вернуть EMM системе. */
g_scratch_blk = mem_alloc_pages(1);
if (g_scratch_blk == 0) {
spinner_show(0);
clrscr_attr(ATTR_RESET);
textattr(ATTR_RESET);
cputs("MDView: scratch page allocation failed\n\r");
exit(-1);
}
g_scratch_phys = mem_get_page(g_scratch_blk, 0);
/* Оба набора пока не построены (страховка к инициализатору g_doc). */
g_doc[DOC_8BIT].built = 0;