Утилита группы TOOLS

8.7. Утилиты группы TOOLS

Группа TOOLS содержит утилиты, дополняющие командный язык DOS и способные полностью заменить некоторые команды системы или по крайней мере существенно пополнить реализуемые ими функции.

 

8.7.1. Утилита Batch Enhancer (BE)

Эта утилита является великолепным дополнением к средствам разработки командных файлов. Она способна сделать их интерактивными, (с цветным оконным пользовательским интерфейсом) и выдающими различные звуковые сигналы.

BE поддерживает семейство из семнадцати специальных команд, а именно:

 

 

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

Возможности BE по установке цветов могут быть реализованы только тогда, когда к DOS подключен драйвер ANSI.SYS. В табл. 8.4 сведены все доступные цвета, соответствующие палитре CGA-дисплея в текстовом режиме. Этот режим является основным и для более совершенных дисплейных адаптеров. Допустимость использования цвета по тому или иному назначению отмечена символом +. Слово Bright означает «светло-».

 

Таблица 8.4

Цвета и их использование

 

 

При отображении перечисленных цветов на монохромную шкалу яркости полезно знать следующее. Восемь цветов первой группы размещены в порядке увеличения яркости. Каждый цвет второй группы светлее соответствующего ему цвета первой группы, но темнее следующего цвета первой группы.

Утилита BE вызывается в одном из двух форматов:

BE команда [аргументы] [переключатели]

или

BE  file

Здесь:

команда                     — одна из поддерживаемых утилитой команд;

аргументы                — последовательность аргументов команды, разделенных по крайней мере одним пробелом;

переключатели          — последовательность переключателей команды, каждому из которых пред­шествует символ /;

file                                          — текстовый файл со сценарием, каждая строка которого имеет  вид:

команда [аргументы] [переключатели]

где понятия команда, аргументы и переключатели имеют тот же смысл. Строкой сценария может быть также метка, заданная в том виде, как это принято в командных файлах.

В первом формате утилита исполняет единственную заданную команду, а во втором — после­довательность команд, записанных в сценарии. Если требуется выполнить подряд несколько команд BE, то второй формат предпочтительнее, так как скорость выполнения последовательности команд в таком режиме существенно выше.

Приведенные форматы запуска утилиты справедливы для большинства команд. Исключения состоят в следующем:

1) команды EXIT и JUMP могут задаваться только в сценариях;

2) команда GOTO в командной строке утилиты задается иначе, чем определено первым форматом.

Таким образом, все команды, за исключением EXIT и JUMP, могут указываться как в командной строке BE, так и в сценариях. Формат задания одноименных команд для командной строки и сценария одинаков, кроме команды GOTO.

Теперь кратко рассмотрим все поддерживаемые утилитой команды, но не в алфавитном порядке, а в том, который соответствует функциональному назначению команд и облегчает их изучение.

Команда SA служит для установки режима отображения информации, а также цветов, в соответствии с которыми меняется содержимое экрана и которые в дальнейшем будут исполь­зоваться по умолчанию.

Специфика текстового режима работы видеосистемы в отличие от графического режима состоит в том, что само по себе изменение атрибутов (режима отображения информации и цветов) на экране никак не проявляется до тех пор, пока не будет осуществлен вывод символов или произведена очистка экрана. Новые атрибуты будут действовать только на символы, выво­димые после их установки. Атрибуты имеющейся на экране информации остаются неизменными. Все это объясняется тем, что в текстовом режиме атрибуты связываются с каждым символом в отдельности, а не со всем экраном. При выполнении команды SA наблюдается другой эффект: сразу после смены атрибутов все содержимое экрана дисплея немедленно приводится в соот­ветствие со сделанными переопределениями. С этой целью модифицируется вся видеопамять.

Как обычно, новые атрибуты будут действовать вплоть до их смены следующей командой SA или CLS. Команды BE, обеспечивающие вывод информации на экран дисплея, могут временно переопределять атрибуты, если текущие атрибуты в данный момент не подходят. После выпол­нения таких команд текущие атрибуты будут продолжать /действовать.

Команда SA имеет две независимые и отменяющие действие друг друга формы:

SA {NORMAL| UNDERLINE | REVERSE} [/N]

и

SA color [/N] [/CIS]

Первая форма команды устанавливает режим отображения информации, определяемый за­данным аргументом:

NORMAL       — отменить действующий режим и обеспечить вывод символов со стандартными цветами (обычно белые символы на черном фоне);

UNDERLINE            — обеспечить подчеркивание выводимых символов (действует только на MDA-экране);

REVERSE                 — проинвертировать стандартные цвета (обычно обеспечивает вывод черных символов на белом фоне);

Вторая форма команды служит для смены цветов и задания одного из режимов отображения символов. Единственный обязательный аргумент color (цвет) в данном случае имеет следующий формат и является общим для всех команд BE, выводящих информацию на экран дисплея:

[BRIGHTI BLINKING] fg [ON bg]

Здесь:

BRIGHT                    — повысить интенсивность цвета символов, тем самым сделав его более светлым (синонимом в командах BE для BRIGHT является BOLD);

BLINKING               — обеспечить мерцание символов;

fg                                 — выводить символы цветом с заданным посредством fg наименованием;

bg                                — установить в качестве фонового цвет с заданным посредством bg наименованием.

Область допустимых значений для fg и bg совпадает с наименованиями цветов, способных быть только фоновыми (см. табл. 8.4).

Переключатели интерпретируются следующим образом:

/N                    — цвет каймы экрана не устанавливать;

/CLS               — после смены режима отображения символов и цветов очистить экран, в результате чего курсор установится в его начало, а сам экран окажется заполненным фоновым цветом.

Пример:

    SA BLINKING YELLOW ON RED /N /CLS — установить посредством мерцания выделение текста, выводимого желтыми символами на красном экране без изменения цвета его каймы.

Команда CLS служит для очистки экрана и установки новых атрибутов, используемых в дальнейшем по умолчанию. Она имеет формат:

CLS [color]

Если аргумент не задан, то экран заполняется фоновым цветом. В противном случае осуще­ствляется смена текущих атрибутов (аналогично команде SA) и заполнение экрана новым фоновым цветом.

Команда ASK предназначена для разработки интерактивных командных файлов, путем орга­низации разветвлений в них в соответствии с ответом пользователя на выданный запрос. Она имеет следующий формат:

ASK "string" [kl] [DEFAULT=key] [TIMEOUT = nl [ADJUST=m] [color] [/DEBUG]

Здесь:

string                           — текстовое сообщение (вопрос, или запрос), выводимое на экран дисплея (часто указывается "", т.е. отсутствие вопроса, или " " для выдачи пробела, а сам вопрос предварительно выводится другой, более удобной командой). Если в сообщении пробелы и запятые отсутствуют, то кавычки можно опустить;

kl                                 — последовательность символов пишущей машинки;

DEFAULT = key       — значение по умолчанию, где key — единственный символ, содержащийся в kl;

TIMEOUT = n           — максимальная длительность паузы, равная п секундам, в течение которой утилита ждет ответа пользователя;

ADJUST = m             — число, которое добавляется к стандартно сгенерированному коду возврата, обеспечивая его сдвиг.

По команде ASK на экран, начиная с текущей его позиции, указываемой курсором, выводится сообщение string цветом color и BE ждет ответа пользователя, состоящего в нажатии одной клавиши пишущей машинки. Допустимые ответы специфицированы последовательностью сим­волов kl. Пусть она имеет вид kik2...kr. Тогда, если пользователь нажал клавишу ki (i= l,...,r), утилита выработает код возврата i, который можно использовать для организации разветвлений в командном файле по DOS-команде IF (см. п. 5.9.4). Ответ пользователя отображается вслед за сообщением тем же цветом color. Когда последовательность kl опущена, команда ASK становится аналогичной DOS-команде PAUSE, но нажать для продолжения работы можно будет только клавишу Enter или Esc.

Если аргумент DEFAULT указан, то по истечении паузы, заданной посредством TIMEOUT, или в результате нажатия клавиши Enter автоматически вырабатывается ответ key.

Когда аргумент TIMEOUT не специфицирован, то ответ пользователя или нажатие клавиши Enter будет ожидаться сколь угодно долго.

Если задан аргумент ADJUST, то вместо (' будет сгенерирован код возврата i + m.

Переключатель /DEBUG служит для отладки командных файлов, обеспечивая отображение кода возврата на экране дисплея. Он допустим во всех командах BE, вырабатывающих коды возврата.

Пример:

ASK "Ответьте Y или N" NY DEFAULT=Y BRIGHT YELLOW — запросить у пользователя один из двух ответов (Y или N), а в случае нажатия клавиши Enter сгенерировать ответ Y; вопрос и ответ отобразить желтым цветом; в случае ответа N выработать код возврата 1, a Y — 2.

Команда MONTHDAY обеспечивает выдачу в качестве кода возврата текущего дня месяца (число от 1 до 31) и задается в формате

MONTHDAY [/DEBUG]

Команда WEEKDAY служит для выдачи в качестве кода возврата текущего дня недели (число от 1 до 7, причем нумерация начинается с воскресенья) и выдается в форме

WEEKDAY [/DEBUG]

Команда SHIFTSTATE предназначена для определения удержания на клавиатуре в нажатом состоянии некоторых клавиш путем выдачи соответствующего кода возврата, что позволяет организовать разветвление в командных файлах без их явной параметризации и ответов на вопросы. Команда задается в формате

SHIFTSTATE [/DEBUG]

Генерируются следующие коды возврата:

1 — для правой клавиши Shift;

2 — для левой клавиши Shift;

4 — для левой или правой клавиши Ctrl;

8 — для левой или правой клавиши Alt.

Чтобы команда сработала требуемым образом, утилита должна ее выполнять на фоне нажатой клавиши из приведенного списка или их комбинации. В последнем случае коды возврата отдельных клавиш суммируются.

Если во время выполнения команды не зафиксировано нажатое состояние ни одной из перечисленных клавиш, то вырабатывается нулевой код возврата.

Команда JUMP обеспечивает разветвление в сценарии по нескольким направлениям, в зависимости от выработанного предыдущей командой кода возврата. По сути JUMP является аналогом оператора CASE в развитых языках программирования. Данная команда имеет следующий формат

JUMP label1 [, label2]... /DEFAULT:label

Выполнение команды сводится к тому, что управление передается на метку labeli, если код возврата предыдущей команды равен i. Переключателем /DEFAULT может быть специфицирована метка, переход к которой осуществляется в том случае, когда код возврата недоступен. При отсутствии этого переключателя и недоступности кода возврата команда JUMP просто пропу­скается.

Команда EXIT служит для немедленного прекращения выполнения сценария. Она задается без аргументов и переключателей.

Команда REBOOT предназначена для вызова процедуры «теплой» перезагрузки DOS (тот же эффект достигается нажатием комбинации клавиш Ctrl-Alt-Del). REBOOT полезна в командных файлах, изменяющих конфигурацию системы, для установки которой требуется перезагрузиться. Формат команды таков:

REBOOT /V[ERIFY]

Единственный переключатель специфицирует выдачу сообщения пользователю на подтвер­ждение выполнения перезагрузки DOS. При отсутствии переключателя перезапуск системы производится немедленно.

Команда TRIGGER служит для приостановки выполнения командного файла до наступления указанного времени суток. Она задается в следующем формате:

TRIGGER чч:мм [AM | РМ]

Здесь чч — часы, а мм — минуты. Время может специфицироваться в 24- или в 12-часовом формате. В последнем случае необходимо указать AM (до полудня) или РМ (после полудня).

Для продолжения выполнения командного файла до наступления указанного времени следует нажать комбинацию клавиш Ctrl-Break или Ctrl-C.

Команда GOTO обеспечивает выполнение сценария не с начала, а с заданной метки, и имеет нижеприведенный формат при непосредственном вызове утилиты BE:

file [GOTO] label

Здесь:

file                   — спецификация файла со сценарием;

label                 — метка, заданная внутри этого файла.

Внутри файла со сценарием команда GOTO специфицируется так же, как в командном файле.

Команда ВЕЕР предназначена для выдачи звуковых сигналов и даже проигрывания простеньких мелодий. Она задается в виде

ВЕЕР [/Dn] [/Fm] [/Rp] [/Wq]

или

BEEP file [/E]

Если указано только наименование команды (ВЕЕР), то выдается короткий стандартный звуковой сигнал.

Каждая команда ВЕЕР обеспечивает выдачу единственного, возможно, несколько раз повто­ренного с заданными паузами тона. Чтобы сгенерировать мелодию, необходимо выполнить несколько команд ВЕЕР или создать файл с партитурой и вызвать его данной командой. Этот файл должен быть текстовым, а каждая его строка должна иметь следующий формат:

[/Dn] /Fm [/Rp] [/Wq]; комментарий

Комментарий здесь — это любая последовательность символов, возможно, содержащая сим­волы, заключенные в кавычки.

Переключатели интерпретируются следующим образом:

/Fт                 — установить частоту т звукового сигнала в Гц;

/Dп                  — установить длительность п сигнала в тиках (1/18 с);

/Rр                  — повторить сигнал р раз;

/Wq                 — осуществить задержку в выдаче повторяющихся сигналов, равную q тикам;

                    — во время обработки строки партитуры отображать на экране заключенным в кавычки фрагмент комментария.

Соответствие нот частотам представлено в табл. 8.5.

 

Таблица  8.5

Таблица   частот  (звукоряд)

Пример:

BEEP /D36 /F500

Команда DELAY осуществляет задержку выполнения командного файла на п тиков и имеет формат

DELAY п

Команда PR1NTCHAR служит для отображения на экране, начиная с текущей его позиции, заданного символа или последовательности одинаковых символов. Эта команда указывается в виде:

PRINTCHAR символ п [color]

Здесь:

символ             выводимый цветом color символ;

п                      — число повторений символа (до 80).

Пример:

PRINTCHAR #10 RED ON BLUE

Команда ROWCOL предназначена для смены текущей позиции на экране и, возможно, ото­бражения, начиная с нее, заданной последовательности символов. Она имеет следующий формат.

ROWCOL row col ["string"] [color]

Здесь:

row                 номер строки (начиная с нуля);

col                    номер позиции в строке (начиная с нуля);

string               — подлежащая отображению последовательность символов (кавычки можно о     пустить, если она не содержит ни пробелов, ни запятых). Для ее вывода используется цвет cofor.

Если аргумент "string" не задан, то просто меняется текущая позиция экрана.

Пример:

ROWCOL 2 20 "ПРЕДУПРЕЖДЕНИЕ" RED ON BLUE

Команда BOX служит для вывода на экран дисплея прямоугольной рамки, возможно, указанного цвета, и задается в виде:

BOX top left bottom right [SINGLE | DOUBLE] [color]

Здесь:

top и left                      — номер строки и позиции в ней, где следует разместить левый верхний угол рамки (начиная с нуля);

bottom и right             — номер строки и позиции в ней, где следует разместить правый нижний угол рамки (также начиная с нуля);

SINGLE                     — одинарная рамка;

DOUBLE                   — двойная рамка (принимается по умолчанию).

После вывода рамки весь экран остается доступным, адресация его элементов не изменяется, а область внутри рамки сохраняется в неизменном виде.

Пример:

    BOX 10 20 30 60 RED ON BLUE

Команда WINDOW обеспечивает открытие окна и имеет формат:

WINDOW top left bottom right [color] [EXPLODE] [SHADOW]

Здесь:

top, left, bottom и right            — координаты двойной рамки, ограничивающей окно;

cotor                                       — цвета, которыми отображается рамка и которые становятся текущими для окна (но только для него!);

EXPLODE                             — указание на открытие окна с имитацией эффекта его развертывания, т.е. плавного маштабирования (синоним — ZOOM);

SHADOW                             — указание на то, что окно должно иметь тень.

Роль окна в данном случае заключается в том, что отведенное под него поле экрана заполняется установленным (или текущим) фоновым цветом и в окне действуют другие атрибуты. В этом и состоят отличия команды WINDOW от команды BOX. Тем не менее адресация экрана после открытия окна не изменяется. Закрытие окна производится командой CLS.

Пример:

WINDOW 10 20 30 60 BRIGHT RED ON BLUE ZOOM SHADOW

В заключение приведем пример сценария с последовательностью описанных команд, реали­зующего открытие на экране дисплея окна с предупреждающими сообщениями:

 

Если этот файл имеет имя WARNING.TXT, то он может быть вызван из файла AUTOEXEC.BAT следующим образом:

BE WARNING.TXT