From 3a33b30c077fa76664b5cc892153ef2be915ad10 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Tue, 30 Jun 2026 23:00:22 +0300 Subject: [PATCH] =?UTF-8?q?mdview2:=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D0=BA?= =?UTF-8?q?-=D0=BA=D1=8D=D1=88=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81?= =?UTF-8?q?=D0=B0=20=D0=B2=20file-scope=20+=20=D1=81=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B8=D0=BD=D0=B5=D0=BB=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=20force-=D1=84=D0=BB=D0=B0=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit render_full_status форсирует перерисовку чисел через local_loading=UCHAR_MAX (сентинел), а не отдельным force_redraw в условии. Отдельный 4-й терм + запись флага опрокидывали render_md_status_numbers в IX-стек-фрейм (все локали в память, +68 Б). Вынос local_* в file-scope разгрузил регистровый аллокатор SDCC — функция осталась на регистрах. Итог даже меньше базы (28215 Б). Co-Authored-By: Claude Opus 4.8 --- examples/mdview2/mdview2_status.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/mdview2/mdview2_status.c b/examples/mdview2/mdview2_status.c index 0424c19..ea899f8 100644 --- a/examples/mdview2/mdview2_status.c +++ b/examples/mdview2/mdview2_status.c @@ -79,15 +79,16 @@ void status_encoding(void) bios_write_until(enc_name(g_encoding), 8, 0); } +static uint16_t local_total = UINT_MAX; +static uint16_t local_last = UINT_MAX; +static uint8_t local_loading = UCHAR_MAX; +static uint8_t local_pct = UCHAR_MAX; + /* Числовая часть (MD): "L a-b / total" между разделителями + "pct%" справа. * Перезаписывает ТОЛЬКО области между/после разделителей, сами │ и фикс. * хром не трогает. */ void render_md_status_numbers(void) { - static uint16_t local_total = UINT_MAX; - static uint16_t local_last = UINT_MAX; - static uint8_t local_loading = UCHAR_MAX; - uint16_t total = drawable_lines(); uint16_t last = top_line + VIEW_H; if (last > total) @@ -113,12 +114,12 @@ void render_md_status_numbers(void) /* Полное обновление переменной части (MD): кодировка + числа. */ void render_full_status(void) { + local_loading = UCHAR_MAX; status_encoding(); render_md_status_numbers(); } void render_percent_progress(uint8_t pct) { - static uint8_t local_pct = UCHAR_MAX; if (local_pct != pct) { local_pct = pct; gotoxy(DIV2_X + 2, 0);