/* * _conio.h — внутренние состояние и хелперы conio. * * НЕ публичный заголовок: живёт рядом с исходниками. После сплита * «1 функция = 1 модуль» каждый элемент лежит в своём модуле, чтобы * приложение тянуло из архива только то, что реально вызывает: * * _g_text_attr.c — g_text_attr (текущий атрибут, KEEP_EXIST_ATTR) * _pc_place.c — pc_place (курсор col:row; global — читают тесты) * _pc_raw_mode.c — pc_raw_mode (режим управляющих символов putch) * _get_cursor.c — чтение курсора BIOS → pc_place * _set_cursor.c — запись pc_place → курсор BIOS * _putch_wrchar.c — воркер вывода mode-0 (BS/TAB/LF/CR интерпретируются) * _putch_wrchar_raw.c — воркер mode-1 (всё как глифы) * _bios_putchar.c — быстрый вывод через ESTEX PUTCHAR (без атрибута) */ #ifndef _CONIO_INTERNAL_H #define _CONIO_INTERNAL_H #include /* two_bytes, KEEP_EXIST_ATTR */ #include /* g_text_attr (текущий атрибут) и pc_raw_mode объявлены в ПУБЛИЧНОМ * conio.h (нужны inline-аксессорам textcolor/textattr/…, 2026-07-10). */ /* Позиция курсора: .byte.low = col, .byte.high = row. * Поддерживается gotoxy/wherex/wherey/wherexy и воркерами putch. */ extern two_bytes pc_place; /* Прочитать курсор BIOS (rst 8, $8E) в pc_place. */ void _get_cursor(void); /* Установить курсор BIOS (rst 8, $84) из pc_place. */ void _set_cursor(void); /* Быстрый вывод символа через ESTEX PUTCHAR ($5B) — атрибут не * трогается, CR/LF/скролл делает ESTEX. */ char _bios_putchar(char ch); /* Воркеры вывода в (pc_place) атрибутом attr; курсор BIOS НЕ трогают — * вызывающий делает _get_cursor()/_set_cursor() один раз на операцию. */ void _putch_wrchar(char ch, uint8_t attr); void _putch_wrchar_raw(char ch, uint8_t attr); #endif