ТаблицейБлоками.

Оптимизация и спасение IBM PC: Представление MS-DOS в цвете

Последняя модификация: 10.08.2014 г

Страница загружена с адреса: http://comp.site3k.ru/ibmpc/chaptr16.html

Моя студия веб-дизайна

Глава 16: Представление MS-DOS в цвете и другие возможности Ansi.sys.

  1. Задание цвета
  2. Вывод таблиц
  3. Назначение объявлений
  4. Определение "горячих" клавиш
  5. Макрокоманды редактора командной строки

Задание цвета.

Прежде всего, для представления MS-DOS в цвете требуется посредством соответствующего указания в файле Config.sys, загрузить в оперативную память драйвер Ansi.sys, после чего, с помощью так называемых “эскейп-последовательностей”, можно менять цвет символов и фона.

Главным компонентом эскейп-последовательности является символ ¬ эмитирующий нажатие клавиши ESCAPE. Драйвер Ansi.sys перехватывает все команды, начинающиеся с этого символа, и принимает соответствующие меры.

После символа эскейп, задаются параметры, общего вида [S; … Sm – где m – сообщает драйверу о необходимости изменить цвет, а S – является режимом отображения и может иметь следующие значения:

0 – отменить все ранее заданные режимы и установить режимы по умолчанию (серые буквы на черном фоне).

1 – увеличить яркость.

4 – подчеркнуть символы.

5 – сделать символы мигающими.

8 – отключить вывод (невидимые на черном фоне, черные буквы), что можно применять вместо набора команд:

@Echo off

… > nul

или команды

CTTY NUL

Однако набор “Echo” – единственный кто предупредит в случае ошибки.

Для задания цвета символов и фона применяется две цифры (двухзначное число), первая из которых (десятки) определяет объект, а вторая (единицы) – его цвет.

Тройка в десятках соответствует символам.

Четверка в десятках соответствует фону.

Сами цвета, кодируются следующим образом:

0 – черный

1 – красный

2 – зеленый

3 – рыжий либо желтый (в зависимости от яркости)

4 – синий

5 – сиреневый

6 – бирюзовый

7 – серебристый (белый)

Например, число 31 означает буквы красного цвета, а команда

←[1;5;31;40m (или ←[5;31;1;40m – порядок кодировки значения не имеет) означает: “Выводить изображение в виде мигающих надписей светящихся красным неоновым светом на черном фоне”.

Установленный режим действует от места задания, до места смены новой эскейп-последовательностью. На ранее выведенное изображение действие не распространяется, что снимает все ограничения на комбинирование цвета. Если же, сочетание цветов нежелательно, после задания режима, применяется команда CLS, очищающая экран от прежних изображений.

При задании режима, немаловажным фактом является и то, что сама управляющая последовательность, при активном драйвере Ansi.sys на экран не выводится, а значит и не занимает места, вследствие чего, например, слово “Del”, в надписи “Pres Del to Enter Setup” можно выделить более ярким цветом (или вообще, другим цветом), не нарушая логический строй фразы. Строка:

←[37;40mPres ←[1mDel ←[0;37;40mto Enter Setup – при выводе на экран, будет выглядеть именно так, как выглядит при загрузке компьютера, без всяких [S; …Sm (при чем, параметры 37;40 принимаются MS-DOS по умолчанию и в большинстве случаев их указание не обязательно).

Кроме того, последовательность ←[J очищает экран, подобно команде CLS.

В задании команды содержащей эскейп-последовательность существует только одна сложность – отсутствие клавиши вводящей знак , однако, для ее ввода существует два простых способа:

  1. Ввод управляющего кода посредством команды Prompt. Клавиша Escape, нажатие которой эмитирует символ генерирует код 27. Этот же код, при выводе, генерирует команда Prompt $E. Вследствие чего, управление цветом обеспечивается командой “PROMPT $E[ … $P$G” где $E введет нужный символ, а $P$G восстановит нормальный вид командной строки (теперь уже с новым цветом).
  2. Создать и вывести на экран, содержащий требуемую команду, текстовой файл.

Ввести в текстовой файл символ можно, воспользовавшись либо встроенным редактором Volcov Commander, позволяющим вводить управляющие кода непосредственно после нажатия клавиши ALT, либо встроеным редактором Norton Commander, позволяюжим применять ALT для ввода управляющих кодов после нажатия CTRL+Q, либо MS-DOS-редактором Edit.com, входящим в состав Windows и позволяющим применять ALT для этой же цели, после нажатия CTRL+P. В любом из них, при нажатом ALT, на калькуляторной клавиатуре набирается цифра 27, которая после отпускания ALT, модифицируется в .

Выведение на экран текстовой команды осуществляется либо исполнением файла, если он сохранен как .Bat-файл (при этом, перед командой ←[S … , в одной строке с ней, следует ввести команду ECHO, иначе компьютер сделает замечание, что команда указана не верно), либо командами типа:

Copy 1 con

Tyre 1

More 1

Где 1 является именем файла (для простоты, его можно так и назвать).

Вывод таблиц.

Драйвер Ansi.sys позволяет создавать не только разноцветные надписи, но и всевозможные таблицы. Для этого употребимо либо сочетание различных цветов фона, либо символы псевдографики кода ASCII (шрифта Terminal). Применение псевдографики позволяет создавать таблицы и быз драйверы ANSI, хотя и в монохромном режиме.

Для введения псевдографики имеются два способа:

  1. Открыть в программе “Таблица символов” шрифт Terminal и скопировав нужный символ в буфер обмена, вставить его в документ.
  2. Второй способ заключается в непосредственном введении кодов данного символа. Поскольку кода псевдографики не являются управляющими, больших трудностей с их вводом не возникает. Однако воспользоваться для этого, придется, опять MS-DOS-редактором и клавишей ALT (но уже без нажатия CTRL+P).
Кодировка псевдографики в коде ASCII поддерживаемом Windows 98:

218

195

192

201

204

200

179

196

194

197

193

203

206

202

186

205

191

180

217

187

185

188

176

177

214

199

211

213

198

212

178

219

210

215

208

209

216

207

221

222

183

182

189

184

181

190

223

220

Назначение объявлений.

Не менее полезна возможность создания с помощью ANSI.sys стационарных обьявлений (панелей), для чего используются следующие эскейп-последовательности, включаемые в переменную PROMPT:

$E[S - заносит в память текущую позицию курсора

$E[U - возращает курсор в сохраненную в памяти позицию

$E[строка;столбецF - перемещает курсор в указанное положение

$E[K - очищает строку от текущей позиции, заполняя фоновым цветом (прописная "k"очищает до текущей позицыи).

Используя эти команды, удобно выводить на экран короткую справку. Команда:

PROMPT $E[S $E[1;1F $E[0;46;30m $E[K $D $T $H$H$H $E[34mЖми $E[37mF12 $E[34mдля запуска Volcov Commander $E[U $E[40;33m $P$G 

написанная в одну строчку, запоминает позицыю курсора ($E[S), переведит его в левый верхний угол ($E[1;1F), определяет будующий цвет ($E[0;46;30m)1, заполняет этим цветом всю строку ($E[K), сообщает дату и время ($D $T), удаляя секунды и отделяющее их от минут двоеточие ($H$H$H), сменив цвет текста, выводит справку о "горячей" клавише, выделив название клавиши белым цветом ($E[37m), возвращает курсор в запомненную позицыю ($E[U), и со следующей от нее строки, рыжим цветом на черном фоне ($E[40;33m), выводит стандартное системное приглашение ($P$G), перемещающееся по мере заполнения экрана, в то время как, строка объявления жестко закреплена в указаной ей позицыи.

Такую команду удобно помещать в Autoexec.bat.

Определение "горячих" клавиш.

Обрабатываемые драйвером Ansi.sys эскейп-последовательности предоставляют неплохую возможность переназначения клавиш и создания сложных команд, исполняемых по одному нажатию. Учитывая что, все прелести этого драйвера реализуются лишь в DOS, а также, учитывая что, все работающие в DOS, предпочитают общатся с DOS через файловых менеджеров, эта возможность не столь ценна, как возможность управления цветом, но иногда и она может оказатся полезной.

Определяется горячая клавиша (как правило, с помощью команды ECHO), последовательностью вида:

←[0;код;"команда";13p

где код является кодом опроса назначаемой клавиши или сочетания клавиш, а команда - команда выполняемая по их нажатию (ноль, точки с запятой, кавычки и 13p обязательны).

Коды опроса и ASCII-коды для клавиш и сочетаний представлены в таблицах, для удобства ориентации, разделенных на группы. Двойные значения в одной ячейки указывают на изменение символа при нажатии Shift.

Коды опроса и коды ASCII для цыфр, знаков припинания и спецыальных клавиш
Символ Key CapКод опросаShift+Код опросаShift+Код ASCIICtrl+Код опросаCtrl+Код ASCIIAlt+Код опросаКод ASCII
Esc1127127127
1     !2233  12049
2     @33643012150
3     No4435  12251
4     $5536  12352
5     %5537  12453
6     ^779473012554
7     &8838  12655
8     *9942  12756
9     (101040  12857
0     )111141  12958
-     _12295123113045
=     +131343  13161
Backspace1414814127148
Tab1515014801659
Enter28281328102813
[      {262612326272691
]     }272712527292793
;     :393958  3959
‘     “404034  4039
     ~4141126  4196
\     |434312443284392
,     <515160  5144
.     >525262  5246
/     ?535363  5347

Кодировка алфавита:
Символ Key CapКод опросаShift+Код опросаShift+Код ASCIICtrl+Код опросаCtrl+Код ASCIIAlt+Код опросаКод ASCII
Q161681161716113
W171787172317119
E18186918518101
R191982191819114
T202084202020116
Y212189212521121
U222285222122117
I23237323923105
O242479241524111
P252580251625112
A3030653013097
S313183311931115
D32326832432100
F33337033633102
G34347134734103
H35357235835104
J363674361036106
K373775371137107
L383876381238108
Z444490442644122
X454588452445120
C4646674634699
V474786472247118
B4848664824898
N494978491449110
M505077501350109

Коды опроса и коды ASCII для функциональных клавиш
Символ Key CapКод опросаShift+Код опросаShift+Код ASCIICtrl+Код опросаCtrl+Код ASCIIAlt+Код опросаКод ASCII
F1598409401040
F2608509501050
F3618609601060
F4628709701070
F5638809801080
F6648909901090
F76590010001100
F86691010101110
F96792010201120
106893010301130
F11133135013701390
F12134136013801400

Коды опроса и ASCII для клавиш цыфровой клавиатуры при отключеном Num Lock.
Символ Key Cap Код опросаShift+Код опросаShift+Код ASCIICtrl+Код опросаCtrl+Код ASCIIAlt+Код опросаКод ASCII
*55554215005042
Home7171551190 0
Up7272561410 0
PgUp7373571320 0
Minus74744514207445
Left7575521150 0
57676531430 0
Right7777541160 0
Plus78784314407843
End7979491170 0
Down8080501450 0
PgDwn8181511180 0
Ins8282481460 0
Del8383461470 0
/22422447149016447
Enter224224132241016613

Коды опроса и ASCII для клавиш находящихся между цыфровой и основной клавиатурой.
Символ Key Cap Код опросаShift+Код опросаShift+Код ASCIICtrl+Код опросаCtrl+Код ASCIIAlt+Код опросаКод ASCII
Home7171224119224151224
Up7272224141224152224
PgUp7373224132224153224
Left7575224115224155224
Right7777224116224157224
End7979224117224159224
Down8080224145224160224
PgDown8181224118224161224
Insert8282224146224162224
Del8383224147224163224

Макрокоманды редактора командной строки.

Возможность назначения команд, подобную "горячим" клавишам Ansi.sys предоставляет, так же входящий в комплект поставки Windows, редактор командной строки DosKey. И хотя он не может назначать макрос функцыанальным клавишам, а после набора макроса, всегда требуется нажимать Enter, DosKey имеет перед Ansi.sys некоторые преимущества.

  1. Позволяет создавать команды длинной в две строки.
  2. Позволят включать в команду шаблоны (* и ?), переменные и заменяемые параметры, аналогичные заменяемым параметрам bat-файлов.
  3. Позволяет объединять команды в одну строку (потому они и называются макросами - макрокомандами).
  4. Хоть и на простейшем уровне, но все же, проверяет условия выполнения команд, без чего создание макросов не имело бы смысла.
  5. Как и с любой правильно написанной програмой, работать с ним удобней чем с драйвером.

Назначается макрокоманда вызовом DosKey с параметром МАКРОС=КОМАНДА где МАКРОС - имя создаваемого или заменяемого макроса, а команда - закрепляемая за ним команда.

$T используется в макросах DosKey в качестве резделителя команд

$1 - $9 в качестве заменяемых параметров

$* глобальный заменяемый параметр, при исполнении заменяющийся всей строкой идущей за именем макроса

Таким образом, простейший макрос

DosKey pkz=pkzip $* $T if exist $1* copy $1* A:

заменяет команду pkz на pkzip, вставляет все введенные после нее параметры (выполняет архивацию), при необходимости добавляет расширение (звездочка после $1) и, убедившись что, архив действительно создан (ведь могло быть и так, что указанных к архивации файлов не оказалось в заданном каталоге), делает его резервную копию на дискете. Применен этот макрос, может быть, например, командой

Pkz D:\Arhiv\Январь -Prex C:\Моидок~1\*.doc

Ее расшифровка даст следующие результаты:

Pkzip D:\Arhiv\Январь.zip -Prex C:\Моидок~1\*.doc

If exist D:\Arhiv\Январь.zip copy D:\Arhiv\Январь.zip A:

Если процедура, назначаемая в макросе вполне стандартна, то в него можно перенести большее количество аргументов командной строки, и тогда, для ее выполнения, достаточно будет ввести только одно слово. Но, если уж назначать макросы и "горячие" клавиши, то делать это следует в NDOS. Макрокоманды NDOS (называемые синонимами - ALIAS) работают даже внутри файловых менеджеров и по своим возможностям не уступают Bat-файлам. И это при том, что он сам управляет цветом, редактирует командную строку и выполняет еще десятки функцый, иными средствами невыполнимых.

Способности NDOS в отношении макрокоманд демонстрирует следующий пример: Если после загрузки через Autoexec.bat команды (в одну строку)

alias del `iff isdir %1 then^inkey Это каталог. Удалить (Y/N)? %%YES^iff %YES%==Y then^*del /y /X /S /Z %1^endiff^else Inkey Обработать вложеные каталоги (Y/N)? %%KAT^iff %KAT%==Y then^*del /y /x /s /z %&^else *del /y /z %&^endiff^endiff`  

ввести команду "DEL имя", NDOS проверит чем является удаляемый обьект и, если это каталог, выдаст запрос на его удаление (и удалит, по нажатию "Y"), а если нет, спросит, обрабатявать ли вложенные кталоги. При положительном ответе, файлы соответствующие указаному имени (именам) или шаблону, будут удалены из текущего и всех вложеных каталогов, не взирая ни на какие атрибуты, а при обнаружении пустых каталогов, будут удалятся и они. Таким образом, командой

DEL С:\*.exe *.com *.bat

можно легко (но только после подтверждения этого решения), уничтожить все програмы на диске С. Обычное удаление, при этом, будет проводится командой *DEL (со звездочкой) либо командой DEL, но с ответом "N" на запрос об обработке вложенных каталогов (на самом деле, достаточно нажать любую клавишу, кроме "Y").

 

< Глава 15. Глава 16. Глава 17. >

 

Комментарии к странице

 

 

 


На главную страницу сайта