Files
Sprinter-SDCC/examples/mdview2/Makefile
T
snark13 c0dd1621e6 mdview2: расщепление монолита на модули (6 файлов, размер-нейтрально)
Вынос подсистем из mdview2.c в отдельные C-модули для читаемости и
навигации. mdview2.c: 2740 → 1062 строк (-61%); ядро теперь чистая
инфраструктура (cache-пул, EMM/fb, загрузка файла, doc-slot, loading-loop,
build_doc, main).

Модули (через EXTRA_SRCS, общий интерфейс в mdview2.h):
- mdview2_help.c   — диалог справки F1
- mdview2_table.c  — выровненная отрисовка таблиц
- mdview2_enc.c    — кодировки CP866/CP1251/KOI8R + UTF-8 конвертер
- mdview2_view.c   — отрисовка области/статус-бара/меню + прокрутка
- mdview2_index.c  — парсер/индексатор markdown (сердце приложения)
  (mdview2_raw.c был выделен ранее)

Чистый перенос static→extern; приватное состояние подсистем осталось
приватным. Размер: exe 28090 → 28112 (+22 Б / +0.08% — codegen-шум на
двух сильно связанных модулях enc/index). Сборка чистая, smoke-тест ОК.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 10:53:04 +03:00

51 lines
2.4 KiB
Makefile

# Build mdview2.exe — Markdown viewer for Sprinter (render-cache version).
#
# Фаза 0: скаффолдинг — копия mdview.c как baseline, без изменений
# логики. План — docs/mdview2-plan.md.
#
# small memory mode: code in W1, data/stack/heap in W2 (32 KB total).
# W3 stays free for the file buffer (EMM-mapped).
PROJ_ROOT := $(abspath $(CURDIR)/../..)
EXAMPLE := mdview2
EXTRA_SRCS := mdview2_raw.c mdview2_help.c mdview2_table.c mdview2_enc.c mdview2_view.c mdview2_index.c
MEMORY := small
include $(PROJ_ROOT)/app.mk
# ------------------------------------------------------------------
# Образ дискеты: только mdview2.exe + README.MD (перекодированный
# из UTF-8 в CP866 — рабочую кодировку Sprinter).
#
# README.MD хранится в репозитории в UTF-8; iconv -c конвертирует
# его в CP866, отбрасывая символы без аналога в целевой кодировке.
# Результат кладётся в .disk_tmp/README.MD, чтобы make_disk.py
# использовал правильное имя файла на диске.
#
# iconv -c возвращает ненулевой код, если хоть один символ отброшен
# (даже с -c) — это ОЖИДАЕМО при потере символов без аналога в CP866,
# не ошибка конвертации; вывод при этом всё равно корректно записан.
# Поэтому код возврата iconv игнорируется (|| true).
# ------------------------------------------------------------------
DISK_TMP := .disk_tmp
README_DISK := $(DISK_TMP)/README.MD
$(DISK_TMP):
mkdir -p $@
$(README_DISK): README.MD | $(DISK_TMP)
iconv -c -f UTF-8 -t CP866 README.MD > $@ || true
# UTF8TEST.MD кладётся на диск КАК ЕСТЬ (в UTF-8, без перекодировки) —
# это тестовый вход для проверки UTF-8 рендеринга (Фаза 2 кодировок).
floppy: $(EXAMPLE).exe $(README_DISK)
python3 $(MAKE_DISK) $(FLOPPY_IMG) $(EXAMPLE).exe $(README_DISK) UTF8TEST.MD
@echo
@echo "Floppy ready: $(FLOPPY_IMG)"
@echo "Run: cd $(MAME_DIR) && ./run_mame.sh"
clean:
rm -rf .sprinter-cc-* $(EXAMPLE).exe $(DISK_TMP)
.PHONY: all clean floppy run