ANSI.SYS — драйвер устройства в семействе операционных систем DOS , который обеспечивает дополнительные функции консоли через escape-последовательности ANSI . Он частично основан на подмножестве стандарта управления текстовым терминалом , предложенного Техническим комитетом ANSI X3L2 по кодам и наборам символов («Комитет X3»).
Поскольку он не был установлен по умолчанию и был печально известен своей медлительностью, мало какое программное обеспечение использовало его преимущества и вместо этого прибегало к прямому манипулированию оборудованием IBM PC. Было создано несколько сторонних альтернатив, которые работали с разумной скоростью, например, ANSI.COM , [1] NANSI.SYS [2] и ANSIPLUS.EXE [3], чтобы попытаться изменить это. [ необходим сторонний источник ]
Чтобы использовать ANSI.SYS в DOS, в файл CONFIG.SYS (или CONFIG.NT в версиях Windows на базе Windows NT ) добавляется строка следующего содержания:
где drive: и path — это буква диска и путь к каталогу , в котором находится файл ANSI.SYS , а options — это ряд дополнительных переключателей для управления поведением. ANSI.SYS также можно загрузить в верхнюю память через DEVICEHIGH / HIDEVICE .
Используя этот драйвер, программы, которые пишут в стандартный вывод, могут записывать escape-последовательности, чтобы использовать 16 цветов текста переднего плана и 8 цветов фона, доступных в текстовом режиме, совместимом с VGA , заставлять текст мигать, изменять местоположение курсора на экране и очищать экран. Они также могут изменять видеорежим со стандартного текстового режима 80×25 на ряд различных графических режимов (например, графический режим 320×200 с текстом, отображаемым в виде пикселей, хотя ANSI.SYS не может включать и выключать отдельные пиксели).
Стандартный ANSI.SYS очень медленный, поскольку он отображает escape-последовательности в вызовы BIOS (которые удалось спроектировать так, чтобы для вывода символа на экран и перемещения курсора вправо требовалось два вызова). Несколько компаний сделали сторонние замены, такие как NANSI.SYS [2] , которые взаимодействуют напрямую с видеопамятью , аналогично большинству программ DOS, имеющих полноэкранный пользовательский интерфейс.
COMMAND.COM проверил, используется ли этот драйвер, и изменил команду CLS , чтобы использовать escape-последовательность вместо вызова BIOS. [5]
Интересной (не)возможностью ANSI.SYS является возможность переназначать любую клавишу на клавиатуре для выполнения сочетаний клавиш или макросов для сложных инструкций. Используя специальные escape-последовательности, пользователь может определить любое нажатие клавиши, имеющее сопоставление символьного кода, для имитации произвольной последовательности таких нажатий клавиш. [6] Это использовалось для создания простых троянов из текстовых файлов, пронизанных гнусными переназначениями клавиатуры, известными как «бомбы ANSI». Для защиты пользователей от этого был выпущен ряд продуктов:
ANSI.SYS появился в MS-DOS 2.0 , первой версии операционной системы, поддерживающей драйверы устройств. [11] Он поддерживался всеми последующими версиями MS-DOS. Он также присутствует во многих не-Microsoft DOS-системах, например, IBM PC DOS и DR-DOS . [12]
ANSI.SYS требовался для запуска некоторого программного обеспечения, которое использовало его функции управления курсором и цветом. [12] Его также можно было использовать для включения сложных цветовых кодов в приглашении COMMAND.COM . Эти применения были затмены использованием ANSI.SYS в BBS ; управляющие последовательности ANSI использовались для того, чтобы BBS могли отправлять текстовую графику, более сложную, чем ASCII art , и управлять курсором способами, которые использовались в ряде онлайн-игр и подобных функциях.
Большинство версий Windows не поддерживали escape-коды ANSI каким-либо полезным способом (в некоторых версиях они могли использоваться эмуляцией MSDOS). В Windows 10 поддержка подобных escape-последовательностей была встроена в консоль Win32 (текстовое окно терминала), но должна быть активирована с помощью функции Windows APISetConsoleMode
путем установки ENABLE_VIRTUAL_TERMINAL_PROCESSING
флага. [13]
CSI ( Control Sequence Introducer ) — это заполнитель для общей двухбайтовой последовательности ввода escape-символа « ESC [ » (то есть 0x1B 0x5B ). [12] Стандарт ANSI также определяет альтернативный однобайтовый код CSI 0x9B , который не поддерживается ANSI.SYS (вместо этого кода рисуется знак цента ⟨¢⟩ из CP437 ).
Стандартные драйверы DOS ANSI.SYS поддерживают только следующий подмножество escape-последовательностей ANSI: [12]
Последовательность | Эффект |
---|---|
ESC [ р А | Курсор вверх ( CUU ) |
ESC [ р Б | Курсор вниз ( CUD ) |
ESC [ c C | Курсор вперед ( CUF ) |
ESC [ c D | Курсор назад ( CUB ) |
ESC [ г ; с ж | Горизонтальное и вертикальное положение ( HVP ) |
ESC [ г ; с H | Позиция курсора ( CUP ) |
ESC [ н Дж | Стереть дисплей ( ED ) (n=0, 2 или n=0, 1, 2) [nb 1] |
ESC [ н К | Стереть в строке ( EL ) (n=0 или n=0, 1, 2) [nb 1] |
ESC [ н м | Выберите графическое представление ( SGR ) (n=0..47) |
ESC [ 6 н | Отчет о состоянии устройства ( DSR ) запрашивает позицию курсора, возвращается как отчет о позиции курсора ( CPR ): ESC [ r ; c R |
ESC [ с | Сохранить позицию курсора ( SCP ) |
ESC [ u | Восстановить позицию курсора ( RCP ) |
Также существуют некоторые escape-последовательности, специфичные для реализации ANSI.SYS . Они, как правило, не поддерживаются консолями ANSI в других операционных системах.
Последовательность | Эффект |
---|---|
ESC [ n h ESC [ ? n h ESC [ = n h ESC [ > n h [nb 2] | Установить режим экрана ( SM ) [nb 2] |
ESC [ n l ESC [ ? n l ESC [ = n l ESC [ > n l [nb 2] | Сбросить режим экрана ( RM ) [nb 2] |
ESC [ н д | Включить (n=1) или отключить (n=0) поддержку /X [nb 3] |
ESC [ Л | Вставить строку ( IL ) [nb 4] |
ESC [ М | Удалить строку ( DL ) [nb 4] |
ESC $ ) 1 | Переключить режим ввода с клавиатуры на корейский ( хангыль ) [примечание 5] |
ESC ( 2 | Переключить режим ввода с клавиатуры на английский [nb 5] |
ESC [ + | Включить вывод на консоль [nb 6] |
ESC [ - | Отключить вывод на консоль [nb 6] |
ESC [ а ; б ;... п | Переопределение ключа набора ( SKR / KR ) |
Режим | Описание | Режим | Описание |
---|---|---|---|
0 | 40 × 25 монохромный | 1 | 40 × 25 цветных |
2 | 80 × 25 монохромный | 3 | 80 × 25 цветов |
4 | 320 × 200 цветных | 5 | 320 × 200 монохромный |
6 | 640 × 200 монохромный | ||
7 | Перенос в конце строки [nb 7] | ||
13 | 320 x 200 цвет (графика) | 14 | 640 x 200 цветов (16-цветная графика) |
15 | 640 x 350 монохромный (двухцветная графика) | 16 | 640 x 350 цветов (16-цветная графика) |
17 | 640 x 480 монохромный (двухцветная графика) | 18 | 640 x 480 цветов (16-цветная графика) |
19 | 320 x 200 цветов (256-цветная графика) | ||
114 | 640 x 480 цветов (16-цветная графика) [nb 8] | 115 | 640 x 475 цветов (16-цветная графика) [nb 8] |
В некоторых реализациях DOS видеорежимы выше 7 не документированы. В многопользовательском DOS единственным допустимым аргументом в сочетании с PCTERM является 7.
{{cite book}}
: |work=
игнорируется ( помощь ) (Примечание. NWDOSTIP.TXT — это всеобъемлющая работа по Novell DOS 7 и OpenDOS 7.01, включающая описание многих недокументированных функций и внутренних компонентов. Она является частью еще более обширной коллекции MPDOSTIP.ZIP автора , которая поддерживалась до 2001 года и распространялась на многих сайтах в то время. Приведенная ссылка указывает на более старую версию файла NWDOSTIP.TXT , преобразованную в HTML .) [1]