/*
 * _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 <conio.h>      /* two_bytes, KEEP_EXIST_ATTR */
#include <stdint.h>

/* 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
