Открыть сервис

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 →