mdview2: оптимизация размера — exe 28215 → 25616 (−2599 Б)
Раунд 1 (−1411): --max-allocs 100000 в Makefile (−848 кода) + снятие
всех нулевых инициализаторов file-scope переменных (_INITIALIZER
583→24; _DATA теперь зануляется в crt0).
Раунд 2 (−1188, индексатор 11019→9839): дедупликации в mdview2_index.c:
- classify_line: копия HR-проверки → вызов is_hr_raw;
- next_line() поверх row_end() вместо 9 копий «домотать до \n»;
- inline_marker: emph_to_attr(ls, base) вычисляется один раз (at);
- set_{nowrap,blank,code,hscroll}_cur → set_cur_flags(mask): строка
code-блока делает один idx_put вместо трёх.
Проверено в MAME (README/UTF8TEST: маркеры, списки, цитаты, таблицы,
code-блоки, F8).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,16 +23,16 @@
|
||||
/* ---- Состояние кодировки/UTF (владелец — этот модуль) ------------- */
|
||||
uint8_t g_encoding = ENC_CP866; /* активная кодировка */
|
||||
|
||||
uint8_t utf_blk = 0;
|
||||
uint8_t utf_pages = 0;
|
||||
uint8_t utf_phys[MAX_PAGES] = {0};
|
||||
uint32_t utf_size = 0;
|
||||
uint8_t utf_avail = 0; /* 1 = страницы UTF-8 выделены */
|
||||
uint8_t g_utf_building = 0; /* 1 пока конвертация не дошла до конца исходника */
|
||||
uint8_t utf_blk;
|
||||
uint8_t utf_pages;
|
||||
uint8_t utf_phys[MAX_PAGES];
|
||||
uint32_t utf_size;
|
||||
uint8_t utf_avail; /* 1 = страницы UTF-8 выделены */
|
||||
uint8_t g_utf_building; /* 1 пока конвертация не дошла до конца исходника */
|
||||
|
||||
/* Приватное состояние конвертера (наружу не торчит — сброс через
|
||||
* utf_conv_reset(), чтение оригинала через cv_read). */
|
||||
static uint32_t utf_src = 0; /* позиция чтения ОРИГИНАЛА (utf-8) */
|
||||
static uint32_t utf_src; /* позиция чтения ОРИГИНАЛА (utf-8) */
|
||||
static uint8_t cv_page = 0xFF; /* orig-страница в W3 для cv_read (своя от cur_page) */
|
||||
|
||||
/* Таблицы ремапа СТАРШИХ байтов [128-255] в CP866. Индексируются (ch-0x80):
|
||||
@@ -180,9 +180,9 @@ static const uint8_t utf_cyr_to_866[96] = {
|
||||
/* Поток вывода конвертера: пишем в utf_phys чанками по странице, буфер в
|
||||
* near-памяти, флаш через один bank_write (не побайтовый swap W3). */
|
||||
static uint8_t conv_buf[256];
|
||||
static uint16_t conv_n = 0; /* байт в буфере, ещё не сброшено */
|
||||
static uint8_t conv_page = 0; /* индекс текущей страницы в utf_phys */
|
||||
static uint16_t conv_off = 0; /* уже сброшенное смещение в этой странице */
|
||||
static uint16_t conv_n; /* байт в буфере, ещё не сброшено */
|
||||
static uint8_t conv_page; /* индекс текущей страницы в utf_phys */
|
||||
static uint16_t conv_off; /* уже сброшенное смещение в этой странице */
|
||||
|
||||
static void conv_flush(void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user