mdview2: статус-бар в отдельный модуль, упростить alloc_set_storage
- mdview2_status.c: вынести статус-бар/меню/спиннер из ядра - mdview2.c: убрать retry-цикл в alloc_set_storage (fail-fast вместо ложной устойчивости — при нехватке EMM под индекс контент тоже не влезет) - mdview2.h: дополнить экспортами статус-модуля - mdview2_md.c / mdview2_raw.c: зачистка после расщепления - mdview/mdview.c: переименовать scroll_* → md_scroll_* (симметрия) - docs/fast_ram.md, docs/turboc.txt: добавить справочные доки - examples/mdview2/README.MD, READMEBG.MD: обновить описание Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+28
-12
@@ -22,6 +22,12 @@
|
||||
#define TAB_STOP 4
|
||||
#define HPAN_STEP 8u /* шаг горизонтального сдвига (←/→) */
|
||||
|
||||
/* ---- Геометрия статус-бара (строка 0): фиксированные поля и разделители ---- */
|
||||
#define SPINNER_COL 8 /* слот спиннера загрузки */
|
||||
#define DIV1_X 45 /* разделитель │ перед числами диапазона строк */
|
||||
#define DIV2_X 71 /* разделитель │ перед процентом */
|
||||
/* Числа/метка пишутся с DIVn_X+2; область между разделителями — [DIV1_X+1 .. DIV2_X-1]. */
|
||||
|
||||
/* ---- Параметры файла и памяти ------------------------------------ */
|
||||
#define PAGE_BITS 14u
|
||||
#define PAGE_SIZE (1u << PAGE_BITS) /* размер EMM-страницы: 16 КБ */
|
||||
@@ -130,7 +136,7 @@ uint32_t seg_off(uint16_t idx); /* offset исходника для ло
|
||||
void raw_seed_from(uint16_t md_top_line); /* вход в RAW: позиция по top_line */
|
||||
void raw_home(void); /* сброс в начало (смена буфера при F8 в/из UTF-8) */
|
||||
void raw_draw(void); /* перерисовать область документа в RAW */
|
||||
void raw_status_numbers(void); /* числовая зона статус-бара для RAW */
|
||||
uint8_t raw_pct(void); /* % прокрутки по байтам (для render_raw_status_numbers) */
|
||||
uint8_t raw_key(uint8_t scan); /* навигация RAW; 1 = обработано */
|
||||
void raw_screen_init(void); /* очистка экрана с нужным аттрибутом */
|
||||
void raw_renorm(void); /* выровнять позицию при смене под-режима (F3) */
|
||||
@@ -163,18 +169,29 @@ extern uint8_t g_ready; /* 1 когда первичный до
|
||||
extern uint8_t g_f8_enabled; /* можно ли сейчас переключать кодировку */
|
||||
|
||||
/* ================================================================== *
|
||||
* Отрисовка области/статус-бара/меню и прокрутка (mdview2_md.c).
|
||||
* Статус-бар (строка 0), меню (строка 31), спиннер — mdview2_status.c.
|
||||
* Атомарные части: prerender (фикс. хром, один раз) / encoding (поле кодировки)
|
||||
* / numbers (диапазон строк + %) / menu / spinner — обновляются по отдельности.
|
||||
* ================================================================== */
|
||||
void prerender_status(void); /* фикс. часть: фон, разделители, MDVIEW, имя файла (1 раз) */
|
||||
void status_encoding(void); /* только поле кодировки (col 37) */
|
||||
void render_md_status_numbers(void); /* числа MD: диапазон строк + % */
|
||||
void render_raw_status(void); /* RAW mode: метка режима */
|
||||
void render_full_status(void); /* encoding + numbers (MD) */
|
||||
void render_menu(void); /* строка меню (по смене режима/готовности) */
|
||||
uint16_t drawable_lines(void); /* число строк, готовых к показу */
|
||||
void spinner_tick(void); /* кадр спиннера загрузки */
|
||||
void spinner_show(uint8_t on); /* вкл/выкл спиннер */
|
||||
void render_percent_progress(uint8_t pct); /* показать процентный прогресс просмотра */
|
||||
|
||||
/* ================================================================== *
|
||||
* Отрисовка области MD-документа и прокрутка (mdview2_md.c).
|
||||
* ================================================================== */
|
||||
void draw_viewport_from_cache(void); /* перерисовать область документа из кэша */
|
||||
uint16_t drawable_lines(void); /* число строк, готовых к показу */
|
||||
void render_status_numbers(void); /* числовая часть статус-бара */
|
||||
void render_full_status(void); /* полная перерисовка статус-бара */
|
||||
void render_updated_status(void); /* обновить только числа статус-бара */
|
||||
void render_menu(void); /* перерисовать строку меню */
|
||||
void clamp_top(void); /* привести top_line к диапазону */
|
||||
void scroll_up(uint16_t n);
|
||||
void scroll_down(uint16_t n);
|
||||
void scroll_h(int8_t delta); /* горизонтальный сдвиг nowrap-блоков */
|
||||
void md_scroll_up(uint16_t n);
|
||||
void md_scroll_down(uint16_t n);
|
||||
void md_scroll_horizon(int8_t delta); /* горизонтальный сдвиг nowrap-блоков */
|
||||
uint8_t md_key(uint8_t scan); /* навигация MD (после загрузки); 1 = обработано */
|
||||
|
||||
/* ================================================================== *
|
||||
@@ -186,7 +203,7 @@ void show_help(void); /* модальный диалог F1 */
|
||||
* Парсер/индексатор (mdview2_index.c) и разделяемое с ним состояние.
|
||||
* Хранилище индекса (index_blk/pages/phys, n_lines/max_lines) — в ядре
|
||||
* (аллокация/doc-slot), индексатор пишет в него; cache_*-писатели и
|
||||
* progress_tick/spinner_tick ядро экспортирует индексатору.
|
||||
* progress_tick ядро экспортирует индексатору (spinner_tick — из status).
|
||||
* ================================================================== */
|
||||
#define INDEX_RECS_PER_PAGE 2048u /* 16384 / 8; запись всегда в одной странице */
|
||||
#define MAX_CACHE_LINE_LEN 255u /* кап длины контента строки в ячейках (буфер g_cells) */
|
||||
@@ -200,7 +217,6 @@ extern uint8_t g_abort; /* F10/Esc во время загруз
|
||||
uint8_t cache_reserve(uint16_t nbytes, uint8_t *out_page, uint16_t *out_off);
|
||||
void cache_commit(uint8_t page, uint16_t off, const void *buf, uint16_t len);
|
||||
void cache_dir_put(uint16_t idx, const cache_rec_t *r);
|
||||
void spinner_tick(void); /* анимация индикатора загрузки */
|
||||
void progress_tick(void); /* кооперативный шаг loading-loop (рисует/листает) */
|
||||
void index_lines(void); /* построить индекс по загруженному файлу */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user