/* * mdview2.h — общие определения и интерфейс между модулями mdview2. * * Монолит mdview2.c расщепляется инкрементально; первый отделённый модуль — * RAW-просмотр (mdview2_raw.c). Здесь живут разделяемые константы экрана/ * атрибутов, extern-объявления нужных RAW символов из mdview2.c и API RAW. */ #ifndef MDVIEW2_H #define MDVIEW2_H #include #include /* COLOR(), COLOR_* */ #include "mdview2_conf.h" /* WITH_RAW / WITH_HEX — выбор опциональных модулей */ /* ---- Геометрия экрана -------------------------------------------- */ #define SCREEN_W 80 #define SCREEN_H 32 #define VIEW_TOP_ROW 1 #define VIEW_H 30 /* видимая область: строки 1..30 включительно */ #define MENU_ROW 31 #define TAB_STOP 4 /* ---- Параметры файла и памяти ------------------------------------ */ #define PAGE_BITS 14u #define PAGE_SIZE (1u << PAGE_BITS) /* размер EMM-страницы: 16 КБ */ #define PAGE_MASK ((uint16_t)(PAGE_SIZE - 1u)) #define MAX_PAGES 8 /* 8 страниц × 16 КБ = 128 КБ */ #define MAX_FILE ((uint32_t)MAX_PAGES * PAGE_SIZE) #define FILE_BUF ((char *)0xC000) /* окно W3, куда мапится текущая EMM-страница */ /* ---- Палитра атрибутов ------------------------------------------- */ #define ATTR_RESET COLOR(COLOR_LIGHTGRAY, COLOR_BLACK) #define ATTR_TEXT COLOR(COLOR_LIGHTGRAY, COLOR_BLUE) #define ATTR_TEXT_TITLE1 COLOR(COLOR_YELLOW, COLOR_BLUE) #define ATTR_TEXT_TITLE2 COLOR(COLOR_LIGHTBLUE, COLOR_BLUE) #define ATTR_TEXT_TITLE3 COLOR(COLOR_LIGHTGREEN, COLOR_BLUE) #define ATTR_TEXT_TITLE4 COLOR(COLOR_LIGHTGREEN, COLOR_BLUE) #define ATTR_TEXT_BOLD COLOR(COLOR_LIGHTRED, COLOR_BLUE) #define ATTR_TEXT_ITALIC COLOR(COLOR_LIGHTGREEN, COLOR_BLUE) #define ATTR_TEXT_UNDERSORE COLOR(COLOR_LIGHTMAGENTA, COLOR_BLUE) #define ATTR_TEXT_CODE COLOR(COLOR_WHITE, COLOR_BLUE) #define ATTR_TEXT_STRIKE COLOR(COLOR_DARKGRAY, COLOR_BLUE) #define ATTR_LIST_MARKER COLOR(COLOR_LIGHTCYAN, COLOR_BLUE) #define ATTR_QUOTE_MARKER COLOR(COLOR_CYAN, COLOR_BLUE) #define ATTR_HR COLOR(COLOR_CYAN, COLOR_BLUE) #define ATTR_BOX COLOR(COLOR_CYAN, COLOR_BLUE) #define ATTR_TRUNC COLOR(COLOR_YELLOW, COLOR_BLUE) #define ATTR_BAR COLOR(COLOR_BLACK, COLOR_LIGHTCYAN) #define ATTR_BAR_SPINNER COLOR(COLOR_WHITE, COLOR_LIGHTCYAN) #define ATTR_MENU_T COLOR(COLOR_BLACK, COLOR_LIGHTCYAN) #define ATTR_MENU_K COLOR(COLOR_YELLOW, COLOR_BLACK) /* ---- Атрибуты диалога справки ------------------------------------ */ #define ATTR_HELP_BG COLOR(COLOR_LIGHTGRAY, COLOR_BLACK) #define ATTR_HELP_BDR COLOR(COLOR_WHITE, COLOR_BLACK) #define ATTR_HELP_TIT COLOR(COLOR_YELLOW, COLOR_BLACK) #define ATTR_HELP_HDR COLOR(COLOR_WHITE, COLOR_BLACK) /* ---- Режимы просмотра -------------------------------------------- */ #define VIEW_MD 0 /* markdown с форматированием (по умолчанию) */ #define VIEW_RAW_WRAP 1 /* RAW: длинные строки переносятся кратно 80 */ #define VIEW_RAW_HSCROLL 2 /* RAW: длинные строки в одну, гориз. скролл */ /* ================================================================== * * Разделяемые символы mdview2.c, используемые модулем RAW. * ================================================================== */ extern uint8_t g_view; /* активный режим просмотра (VIEW_*) */ extern uint32_t file_size; /* размер активного буфера документа */ extern const uint8_t *g_remap; /* таблица ремапа [128-255] (0 = нет) */ extern uint8_t g_scratch_phys; /* scratch EMM-страница для win_rest */ char fb(uint32_t p); /* байт активного буфера (W3-маппинг) */ void win_rest(uint8_t row, uint8_t col, uint8_t h, uint8_t w, uint8_t page, uint16_t off); void fill_row(uint8_t y, uint8_t attr); uint32_t seg_off(uint16_t idx); /* offset исходника для логической строки idx */ /* ================================================================== * * API модуля RAW (mdview2_raw.c). * ================================================================== */ 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_key(uint8_t scan); /* навигация RAW; 1 = обработано */ void raw_screen_init(void); /* очистка экрана с нужным аттрибутом */ void raw_renorm(void); /* выровнять позицию при смене под-режима (F3) */ #endif /* MDVIEW2_H */