Файл ANSI.SYS
ANSI.SYS - это драйвер устройства для клавиатуры и экрана. Он определяет функции, изменяющие вывод графики, управляющие перемещением курсора и переназначающие клавиши. Драйвер устройства ANSI.SYS поддерживает для управления экраном и клавиатурой эмуляцию управляющих последовательностей (ESC-последовательностей) терминала ANSI (первый символ в этой последовательности - это 1Bh, а следующие символы задают код, управляющий функцией клавиатуры или дисплея). Драйвер ANSI.SYS распознает ESC-последовательности через обычные вызовы функций DOS но не распознает символьный вывод непосредственно из ROM BIOS.
ANSI.SYS обеспечивает дополнительные возможности для программ, которым требуется перемещать курсор, изменять экран дисплея или назначать используемую клавиатуру. Некоторые приложения требуют обязательной загрузки ANSI.SYS.
Загрузить этот драйвер можно с помощью SETUP (или INSTALL) или отредактировав непосредственно файла CONFIG.SYS и включив в него оператор:
DEVICE = C:\NWDOS\ANSI.SYS
После этого ANSI.SYS будет загружаться при каждом запуске операционной системы.
ESC-последовательность обычно имеет следующую форму: символ ESC (1BH) в первом байте, символ [ (5BH) во втором байте, одно
или более десятичных чисел, разделенных запятой и один символ команды. Создать ESC-последовательности можно с помощью текстового редактора. Например, в EDIT код ESC можно создать с помощью Ctrl+P и клавиши Esc.
Различные типы ESC-последовательностей описываются в следующей таблице. Они используются для позиционирования курсора, стирания и изменения режима вывода. Значения y (от 1 до 50) и x в таблице представляют номера строки и столбца (от 1 до 80). Если эти значение не задаются, или задается 0, то используется значение по умолчанию.
ESC-последовательности
Команда | Последовательность | Действие |
CUP | ESC[y;xH | Позиционирование курсора в точку а заданными координатами. По умолчанию курсор помещается в левый верхний угол экрана. |
HVP | ESC[y;xf | Позиционирует курсор согласно заданным координатам. По умолчанию курсор помечается в левый верхний угол экрана. |
CUU | ESC[yA | Перемещает курсор вверх на y строк. В первой строке экрана игнорируется. |
CUD | ESC[yB | Перемещает курсор вниз на y строк. В нижней строке экрана игнорируется. |
CUF | ESC[xC | Перемещает курсор вправо без изменения позиции в строке. В крайней правой позиции игнорируется. |
CUB | ESC[xD | Перемещает курсор влево без изменения позиции в строке. В крайней левой позиции игнорируется. |
DSR | ESC[6n | Выводит отчет о состоянии устройства, возвращая последовательность CPR. |
CPR | ESC[y;xR | Сообщает позицию курсора. Позиция возвращается при вводе с клавиатуры. |
SCP | ESC[s | Сохраняет текущую позицию курсора. |
RCP | ESC[u | Восстанавливает позицию курсора. |
ED | ESC[2J | Стирает экран и перемещает курсор в его верхний левый угол. |
EL | ESC[K | Стирает строку от позиции курсора до конца строки. |
SGR | ESC[n;...;nm | Устанавливает режимы экрана. Режим задается значением n (см. ниже таблицу). |
SM | ESC[=nh1 ESC[=h1 ESC[?nh | Устанавливает режим вывода. Режим задается значением n (см. ниже таблицу). |
RM | ESC[=n1 ESC[=1 ESC[?n1 | Сбрасывает режим вывода. Режим задается значением n (см. ниже таблицу). |
KR | ESC[n;n;...np | Изменяет функцию клавиши. Нужно задать изменяемую клавишу и определить изменение. Расширенные коды клавиш можно задавать, набирая первую переменную в последовательности как 0 (NUL), за которым следует другая клавиша. Например, F10 задается с помощью 0;68;. Последняя переменная в последовательности - это код символа, присваиваемый клавише. Коды функциональных клавиш перечислены в одной из приведенных ниже таблиц.
|
В следующей таблице перечислены коды клавиш символов и функциональных клавиш F1 - F10, которые можно использовать вместе с клавишами Shift, Ctrl, Alt.
Коды клавиш
Клавиша | Код | SHIFT+код | CTRL+код | ALT+код |
F1 | 0;59 | 0;84 | 0;94 | 0;104 |
F2 | 0;60 | 0;85 | 0;95 | 0;105 |
F3 | 0;61 | 0;86 | 0;96 | 0;106 |
F4 | 0;62 | 0;87 | 0;97 | 0;107 |
F5 | 0;63 | 0;88 | 0;98 | 0;108 |
F6 | 0;64 | 0;89 | 0;99 | 0;109 |
F7 | 0;65 | 0;90 | 0;100 | 0;110 |
F8 | 0;66 | 0;91 | 0;101 | 0;111 |
F9 | 0;67 | 0;92 | 0;102 | 0;112 |
F10 | 0;68 | 0;93 | 0;103 | 0;113 |
F11 | 0;133 | 0;135 | 0;137 | 0;139 |
F12 | 0;134 | 0;136 | 0;138 | 0;140 |
HOME * | 0;71 | 55 | 0;119 | |
стрелка вверх * | 0;72 | 56 | (0;141) | |
PgUp * | 0;73 | 57 | 0;132 | |
Стрелка влево * | 0;75 | 52 | 0;115 | |
Стрелка вправо* | 0;77 | 54 | 0;116 | |
END * | 0;79 | 49 | 0;117 | |
Стрелка вниз * | 0;80 | 50 | (0;145) | |
PgDn * | 0;81 | 51 | 0;118 | |
Ins * | 0;82 | 48 | (0;146) | |
Del * | 0;83 | 46 | (0;147) | |
HOME | (224;71) | (224;71) | (224;119) | (224;151) |
Стрелка вверх | (224;72) | (224;72) | (224;141) | (224;152) |
PgUp | (224;73) | (224;73) | (224;132) | (224;153) |
Стрелка влево | (224;75) | (224;75) | (224;115) | (224;155) |
Стрелка вправо | (224;77) | (224;77) | (224;116) | (224;157) |
END | (224;79) | (224;79) | (224;117) | (224;159) |
Стрелка вниз | (224;80) | (224;80) | (224;145) | (224;154) |
PgDn | (224;81) | (224;81) | (224;118) | (224;161) |
Ins | (224;82) | (224;82) | (224;146) | (224;162) |
Del | (224;83) | (224;83) | (224;147) | (224;163) |
PRINT SCREEN | | | 0;114 | |
PAUSE/BREAK | | | 0;0 | |
BACKSPACE | 8 | 8 | 127 | (0) |
ENTER | 13 | | 10 | (0 |
TAB | 9 | 0;15 | (0;148) | (0;165) |
NULL | 0;3 | | | |
A | 97 | 65 | 1 | 0;30 |
B | 98 | 66 | 2 | 0;48 |
C | 99 | 66 | 3 | 0;46 |
D | 100 | 68 | 4 | 0;32 |
E | 101 | 69 | 5 | 0;18 |
F | 102 | 70 | 6 | 0;33 |
G | 103 | 71 | 7 | 0;34 |
H | 104 | 72 | 8 | 0;35 |
I | 105 | 73 | 9 | 0;23 |
J | 106 | 74 | 10 | 0;36 |
K | 107 | 75 | 11 | 0;37 |
L | 108 | 76 | 12 | 0;38 |
M | 109 | 77 | 13 | 0;50 |
N | 110 | 78 | 14 | 0;49 |
O | 111 | 79 | 15 | 0;24 |
P | 112 | 80 | 16 | 0;25 |
Q | 113 | 81 | 17 | 0;16 |
R | 114 | 82 | 18 | 0;19 |
S | 115 | 83 | 19 | 0;31 |
T | 116 | 84 | 20 | 0;20 |
U | 117 | 85 | 21 | 0;22 |
V | 118 | 86 | 22 | 0;47 |
W | 119 | 87 | 23 | 0;17 |
X | 120 | 88 | 24 | 0;45 |
Y | 121 | 89 | 25 | 0;21 |
Z | 122 | 90 | 26 | 0;44 |
1 | 49 | 33 | | 0;120 |
2 | 50 | 64 | 0 | 0;121 |
3 | 51 | 35 | | 0;122 |
4 | 52 | 36 | | 0;123 |
5 | 53 | 37 | | 0;124 |
6 | 54 | 94 | 30 | 0;125 |
7 | 55 | 38 | | 0;126 |
8 | 56 | 42 | | 0;126 |
9 | 57 | 40 | | 0;127 |
0 | 48 | 41 | | 0;129 |
- | 45 | 95 | 31 | 0;130 |
= | 61 | 43 | | 0;131 |
[ | 91 | 123 | 27 | 0;26 |
] | 93 | 125 | 29 | 0;27 |
| 92 | 124 | 28 | 0;43 |
; | 59 | 58 | | 0;39 |
' | 39 | 34 | | 0;40 |
, | 44 | 60 | | 0;51 |
| 46 | 62 | | 0;52 |
/ | 47 | 63 | | 0;53 |
` | 96 | 126 | | (0;41) |
ENTER (*) | 13 | | 10 | (0;166) |
/ (*) | 47 | 47 | (0;142) | (0;74) |
* (*) | 42 | (0;144) | (0;78) | |
- (*) | 45 | 45 | (0;149) | (0;164) |
+ (*) | 43 | 43 | (0;150) | (0;55) |
5 (*) | (0;76) | 53 | (0;143) | |
* - клавиши дополнительной клавиатуры |
Например, чтобы поменять местами значения клавиш и \, используйте следующую управляющую последовательность:
ESC[" ";"\"pESC["\";" "p
Значения режима вывода
Текстовые атрибуты | Основные цвета | Фоновые цвета |
0 атрибуты сброшены | 30 черный | 40 черный |
1 жирный шрифт | 31 красный | 41 красный |
4 подчеркивание | 32 зеленый | 42 зеленый |
(монохромный адаптер) | 33 желтый | 43 желтый |
5 мерцание | 34 голубой | 44 голубой |
7 обратный видеорежим | 35 малиновый | 45 малиновый |
8 скрытый текст | 36 бирюзовый | 46 бирюзовый |
| 37 белый | 47 белый |
Режимы работы экрана
Значение | Действие |
0 | 40 x 25 монохромный (текст) |
1 | 40 x 25 цветной (текст) |
2 | 80 x 25 монохромный (текст) |
3 | 80 x 25 цветной (текст) |
4 | 320 x 200 4-цветной (графика) |
5 | 320 x 200 монохромный (графика) |
6 | 640 x 200 монохромный (графика) |
7 | разрешает перенос строки |
13 | 320 x 200 цветной (графика) |
14 | 640 x 200 цветной (16-цветная графика) |
15 | 640 x 350 монохромный (2-цветная графика) |
16 | 640 x 350 цветной (16-цветная графика) |
17 | 640 x 480 монохромный (2-цветная графика) |
18 | 640 x 480 цветной (16-цветная графика) |
19 | 320 x 200 цветной (256-цветная графика) |
Например, следующая ESC-последовательность позиционирует курсор в точке 15,15 и выводит в этой точке символ x.
ESC [10;10HX
Следующая последовательность присваивает клавише F10 команду DIR C:
ESC [0;68;"DIR C:";13p