ANSI.SYS
ANSI.SYS — это драйвер устройств для операционных систем MS-DOS и совместимых с ним, предназначенный для расширенного управления выводом текста на экран. Он предоставляет возможность программам и пользовательским скриптам (например, пакетным файлам .bat) использовать ANSI-escape-последовательности для изменения цвета текста и фона, перемещения курсора, очистки экрана и задания атрибутов символов, таких как мигание или подчёркивание. Драйвер загружается в память при старте системы через файл конфигурации CONFIG.SYS и перехватывает системные вызовы, связанные с выводом на консоль, преобразуя их в управляющие команды для видеоподсистемы.
История
Драйвер ANSI.SYS был разработан компанией Microsoft для включения в состав операционной системы MS-DOS, начиная с версии 2.0 (1983 год). Его появление было связано с необходимостью стандартизации управления терминалом в среде IBM PC, где к тому времени существовало множество несовместимых реализаций. Основой для ANSI.SYS послужил стандарт ANSI X3.64 (позднее — ECMA-48), описывающий управляющие последовательности для текстовых терминалов. Однако Microsoft реализовала лишь подмножество этого стандарта, достаточное для базовых операций с цветом и курсором.
Вплоть до середины 1990-х годов ANSI.SYS оставался стандартным компонентом MS-DOS и PC-DOS (IBM). Он также включался в состав некоторых версий Windows (например, Windows 95, Windows 98) для обеспечения совместимости со старым ПО. С переходом на 32-битные операционные системы (Windows NT, OS/2, Linux) необходимость в отдельном драйвере отпала, так как управление консолью было встроено в ядро. В современных версиях Windows (начиная с Windows 10) встроенная консоль conhost.exe полностью поддерживает ANSI-escape-последовательности без использования ANSI.SYS.
Функциональность
ANSI.SYS обрабатывает управляющие последовательности, начинающиеся с символа ESC (код 27, часто обозначается как \x1b или ^[). Основные возможности драйвера включают:
Управление курсором
- Перемещение курсора в заданную позицию (строка, столбец).
- Перемещение на N строк вверх/вниз, на N столбцов влево/вправо.
- Сохранение и восстановление позиции курсора.
- Очистка экрана (полностью или от текущей позиции до конца).
Управление атрибутами текста
- Установка цвета текста (8 стандартных цветов: чёрный, красный, зелёный, жёлтый, синий, пурпурный, голубой, белый).
- Установка цвета фона (те же 8 цветов).
- Включение/отключение яркости (жирный текст), мигания, подчёркивания, инвертирования цветов.
- Сброс всех атрибутов к значениям по умолчанию.
Режимы отображения
- Переключение между 40- и 80-символьными строками.
- Выбор числа строк (25, 43, 50) — зависело от видеорежима.
- Включение/отключение режима построчного вывода (line wrap).
Синтаксис и примеры
Управляющие последовательности имеют формат ESC[<код>m (для атрибутов) или ESC[<параметры>H (для позиционирования). Например:
ESC[31m— установить красный цвет текста.ESC[42m— установить зелёный цвет фона.ESC[1;33m— установить жирный жёлтый текст.ESC[0m— сбросить все атрибуты.ESC[2J— очистить весь экран.ESC[10;20H— переместить курсор на 10-ю строку, 20-й столбец.
В пакетных файлах MS-DOS эти последовательности можно выводить с помощью команды ECHO с ключом /e (в некоторых версиях) или через утилиты, генерирующие символ ESC. Например:
`` @ECHO OFF ECHO ^[[31mКрасный текст^[[0m ``
(где ^[ — символ ESC, вводимый нажатием Ctrl+P, затем Esc).
Ограничения
- Неполная поддержка стандарта:
ANSI.SYSподдерживает только базовый набор последовательностей из ANSI X3.64. Многие расширенные возможности (например, 256-цветная палитра, настоящий жирный шрифт, символы псевдографики) не реализованы. - Зависимость от видеорежима: Драйвер работает только в текстовом режиме. В графических режимах (например, в Windows) он не функционирует.
- Конфликты с программами: Некоторые приложения (например, Norton Commander, Far Manager) использовали собственные методы управления экраном, игнорируя
ANSI.SYS, что приводило к некорректному отображению. - Производительность: Обработка каждой escape-последовательности через драйвер замедляла вывод, особенно на медленных процессорах.
Применение
ANSI.SYS активно использовался в следующих областях:
- Пакетные файлы (.bat): Создание цветных меню, интерактивных подсказок, прогресс-баров и простых текстовых интерфейсов.
- BBS (Bulletin Board System): Доски объявлений использовали ANSI-графику для оформления приветствий, меню и аватаров пользователей. В сообществе BBS сформировался целый жанр — ANSI-арт (рисование символами и цветами).
- Игры: Ранние текстовые квесты и RPG (например, «Rogue», «NetHack») могли использовать
ANSI.SYSдля цветового выделения предметов и монстров. - Демосцена: Создание анимированных текстовых эффектов (скроллеры, плазма) в среде MS-DOS.
Критика
Основные претензии к ANSI.SYS касались его нестабильности и несовместимости. При загрузке в память драйвер мог конфликтовать с другими программами, использующими прерывания BIOS (например, с некоторыми резидентными утилитами). Кроме того, отсутствие поддержки 256 цветов и других современных возможностей делало его устаревшим уже к середине 1990-х годов. В сообществе разработчиков альтернативой стал драйвер ANSI.COM (часть пакета 4DOS) и другие сторонние реализации, которые были более функциональными и стабильными.
Наследие
Несмотря на моральное устаревание, ANSI.SYS оказал значительное влияние на развитие текстовых интерфейсов. Принципы управления цветом и курсором, заложенные в нём, легли в основу современных консольных API (например, VT100-эмуляция в терминалах Linux и macOS, Console Virtual Terminal Sequences в Windows 10+). ANSI-арт до сих пор существует как форма цифрового искусства, а ретро-энтузиасты продолжают использовать ANSI.SYS в эмуляторах MS-DOS.
Источники
- MS-DOS Encyclopedia (Microsoft Press, 1988).
- Ray Duncan, «Advanced MS-DOS Programming» (Microsoft Press, 1986).
- Техническая документация Microsoft по MS-DOS 6.22 (файл
ANSI.SYS). - Спецификация ECMA-48 (Control Functions for Coded Character Sets).
- Статья «ANSI escape code» в английской Википедии.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →