Составление USER-меню.
Система USER-меню IS-DOS позволяет заранее запрограммировать вызов
каких-либо часто используемых Вами утилит или программ, оформив для
этого специальное окно со списком этих программ, курсором для выбора и
краткими комментариями. В этой главе речь пойдет о том, как правильно
самому написать USER-меню к использовать его для своих целей.
USER-меню представляет собой специальное определяемое
пользователем окно, состоящее из произвольного числа строк.
Строки в USER-меню бывают двух видов - текстовые строки,
содержащие заголовки меню, разделительные линии и другую полезную
информацию и рабочие строки, по которым перемещается курсор меню -
горизонтальная линия, отмечающая выбранную в данный момент строку.
Курсор меню перемещается при помощи курсорных клавиш вверх и вниз,
нажатие ENTER на одной из рабочих строк вызывает выполнение командной
строки, закрепленной за этой рабочей строкой меню. Выход из USER-меню
может быть осуществлен в любой момент нажатием стандартной комбинации
клавиш SS+A.
Конфигурация, внешний вид и список вызываемых команд для USER-меню
содержится в текстовом файле в специальном формате, который будет
описан чуть позже. Интерпретацией этого файла занимается программа
menu.com, находящаяся обычно в каталоге SHELL (до 06.95 - UTIL).
Программа menu.com при вызове из bat-файла или командной строки
без параметров ищет в текущем каталоге файл с именем menu.mnu (до
06.95 - menu.txt), содержащий описание меню, а не найдя его в текущем
каталоге, ищет файл с таким же именем в каталоге SHELL. Это позволяет
создавать практически в любом каталоге свои локальные USER-меню, а
общее, универсальное меню, вызываемое при отсутствии локального,
держать в каталоге SHELL.
Кроме того при вызове из bat-файла, или командной строки программе
menu.com может быть задано конкретное имя файла, содержащего описание
необходимого меню. Это позволяет, в частности, закрепить вызов
конкретного USER-меню за какой-либо клавишей в файле extkey.txt, или
организовать вызов одного меню из другого.
Вызов команды menu.com с параметром позволяет также держать в
одном каталоге более одного файла меню. По неофициальному стандарту,
все файлы с описаниями USER-меню имеют расширение mnu. На базовой
дискете IS-DOS все файлы USER-меню, за исключением локальных, собраны
в специальный каталог SHELLMNU. Содержание в одном каталоге файлов
вложенных меню позволяет ускорить переход из одного меню в другое, так
как при этом не надо будет переходить из каталога в каталог.
Теперь рассмотрим более подробно структуру текстового файла,
содержащего описание USER-меню. Как и любой другой текстовый файл, он
должен состоять из текстовых строк, содержащих необходимую информацию.
Первый символ каждой строки считается управляющим и информирует
программу menu.com о том, какая именно информация содержится в данной
строке. Управляющие символы всегда набираются в латинском регистре,
если же вместо латинского "Р" вы наберете русское "Р", следующая за
ним строка будет проигнорирована.
Управляющие символы:
К - строка, содержащая служебную информацию и параметры окна меню
(описание формата см. далее)
Р - строка для внутренних команд DOS, вызываемых при входе в меню
Т - командная строка, выполняемая при нажатии клавиши SS+A (отказ)
а - текстовые строки меню, не обрабатываемые курсором
А - рабочие строки меню, обрабатываемые курсором
С - командные строки, содержащие команды, выполняемые при нажатии
ENTER на соответствующей рабочей строке меню
с - командные строки, предназначенные для вызова больших программ
с адресом загрузки ниже 25000 Z - строки для внутренних команд DOS,
вызываемых при нажатии ENTER перед выполнением соответствующей
командной строки
Н - строки текстов-подсказок, которые могут выводиться на экран
при установке курсора на соответствующую рабочую строку
Если в командной строке после управляющего символа С, с или Т
стоит символ "*", то имя файла, на котором находился панельный курсор
в момент вызова USER-меню, передается в качестве параметра вызываемой
команде. Поясним на примере:
Допустим, что в момент вызова меню панельный курсор указывает на
имя файла prise.txt, тогда командная строка вида
C*Q:SHELLdelete
вызовет выполнение команды
Q:SHELLdelete prise.txt
Строки К, Р и Т определяют параметры и команды для всего меню в
целом, поэтому в каждом меню не может быть более одной строки К,
строки Р и строки Т. Строки К, Р, Т, Н и Z не являются обязательными,
при отсутствии строки К устанавливаются параметры по умолчанию (см.
далее).
Положение строк К, Р и Т в тексте значения не имеет, в каком бы
месте файла Вы их ни поместили - система все равно их найдет. Строки А
и а располагаются в том порядке, в котором они должны быть выведены в
окне меню. Связанные с ними строки Z, Н, С и c должны располагаться
после соответствующей им строки А.
Такая особенность позволяет использовать одну строку команд или
подсказок для нескольких строк меню, но требует более внимательного
отношения к тексту.
Поясним на примере:
Допустим, мы имеем файл menu.mnu следующего содержания:
а Работа с MS-DOS
а
А ВЫХОД В SHELL
АПИСАТЬ НА MS-DOS ДИСКИ
НЗапись отмеченных файлов
CQ:MSDOSto_msdos.com
АЧИТАТЬ ИЗ MS-DOS ДИСКА
НЧтение дисков MS-DOS
CQ:MSDOSfrom_msd.com
Этот файл содержит две серьезных ошибки:
1. При установке курсора на строку "ВЫХОД В SHELL" система выведет
подсказку, относящуюся к следующей строке, так как соответствующая
этой строке подсказка отсутствует.
2. При нажатии ENTER на той же строке будет исполнена командная
строка, относящаяся к следующей строке меню, так как соответствующая
командная строка отсутствует.
Эту проблему можно решить как минимум двумя способами:
Вариант 1 - задать для первой строки А пустые строки С и Н, тогда
текст меню будет иметь вид:
а Работа с MS-DOS
а
А ВЫХОД В SHELL
Н
С
АПИСАТЬ НА MS-DOS ДИСКИ
НЗапись отмеченных файлов
CQ:MSDOSto_msdos.com
АЧИТАТЬ ИЗ MS-DOS ДИСКА
НЧтение дисков MS-DOS
CQ:MSDOSfrom_msd.com
Пустые строки Н, Z, С и с можно опустить, если в Вашем меню нет ни
одной такой строки.
Вариант 2 - перенести строку "ВЫХОД В SHELL" в конец файла и
дописать строку подсказки для нее:
а Работа с MS-DOS
а
НАПИСАТЬ НА MS-DOS ДИСКИ
Запись отмеченных файлов
CQ:MSDOSto_msdos.com
АЧИТАТЬ ИЗ MS-DOS ДИСКА
НЧтение дисков MS-DOS
CQ:MSDOSfrom_msd.com
А ВЫХОД В SHELL
Н Выход в оболочку
Поскольку строка "ВЫХОД В SHELL" оказалась в конце текста, при ее
выборе ничего не происходит и отработка меню завершается с выходом в
оболочку.
Формат строки ключей К:
Строка К в описании USER-меню имеет вид:
К/символ число / символ число ...
Числа можно записывать в десятичном формате (по умолчанию),
например, 255; в 16-ричном с префиксом #, например, #1F; в октальном с
префиксом о, например, о12; а также в двоичном с префиксом %,
например, %01100011.
Разделять ключи пробелами не требуется, так как ключи и так
отделены друг от друга символом "/". Строка К интерпретируется до тех
пор, пока не будет встречен символ пере-
вода строки, поэтому разбивать ее на несколько строк нельзя. Также
в одном тексте меню не должно быть более одной строки К, в противном
случае интерпретируется только первая из них.
Ключи USER-меню:
А - байт конфигурации меню.
бит 1 - вид окна меню, "0" - без тени, "1" - с тенью,
бит 2 - реакция на ENTER, "0" - интерпретируются строки с, С и
Z, после отработки осуществляется выход в оболочку, "1" -
выполняются только строки внутренних команд Z, после чего
происходит возврат в меню.
бит 3 - рамка окна, "0" - одинарная, "1" - двойная,
бит 4 - отработка строки Р при входе в меню, "0" - выполнить,
"1" - игнорировать.
биты 5 - 8 - не используются и могут содержать любые значения.
Все эти режимы удобно задавать десятичными числами 1, 2, 4 и 8
соответственно, при этом суммарные значения включают несколько режимов
одновременно, например:
/А5 - окно с тенью и двойной рамкой. В - второй байт
конфигурации, биты 1 и 2 - не используются.
бит 3 - вид курсора, "0" - курсор выводится на всю ширину окна,
"1" - курсор выводится на внутреннюю область окна, не
затрагивая область рамки,
бит 4 - не используется.
бит 5 - вид окна подсказки, "0" - с рамкой, "1"- без рамки.
биты 6 и 7 - не используются.
Эти значения также удобно задавать десятичными числами (4 и 16
соответственно), также возможно суммирование значений, например:
/В20 - окно подсказки без рамки, курсор внутри рамки окна.
Е - Х-координата окна меню в знакоместах 8*8 пикселей. D - Y-
координата окна меню в строках.
Размеры окна система устанавливает автоматически в соответствии с
количеством строк в меню и максимальной длиной строки.
Н - Х-координата окна подсказки в знакоместах 8*8
пикселей.
G - Y-координата окна подсказки в строках.
N - высота подсказки в строках.
С - ширина окна подсказки в знакоместах 6*8 пикселей.
F - номер строки, на которой располагается курсор при вызове
меню.
К - цвета окна меню
Т - цвета тени окна меню
J - цвета курсора меню
О - цвета рабочего курсора меню
I - цвета окна подсказки
Цвета задаются в стандартном формате:
биты 0 - 2 - цвет чернил
биты 3 - 5 - цвет бумаги
бит 6 - яркость
бит 7 - мерцание
Для байта цветов тени биты 6 и 7 игнорируются. Как уже было
сказано выше, при отсутствии строки К параметры устанавливаются по
умолчанию. Значения параметров по умолчанию приводятся в табл. 5.
Таблица 5. Значения параметров меню по умолчанию.
Пример USER-меню:
ТСАТ Q:SHELL
РСАТ Q:
K/N3/BO/A5/G1/EO/D4/T%00000001/K%00101000/J
00001110/О%01001110/С38
a USER MENU
а
А РАБОТА С ДИСКОМ
Н Дисковые утилиты, работа с файлами
CQ:SHELLmenu Q:SHELLMNUdisk.mnu
ZCAT Q:UTIL
А РЕЗИДЕНТЫ
CQ:SHELLmenu Q:SHELLMNUres.mnu
Н Установка драйверов; и резидентов
А РАБОТА С TR-DOS
CQ:SHELLmenu Q:SHELLMNU tr_dos.mnu
Н Обмен файлами с системой TR-DOS
А РАБОТА С MS-DOS
CQ:SHELLmenu Q:SHELLMNUms_dos.mnu
Н Обмен файлами с системой MS-DOS
АДЕРЕВО КАТАЛОГОВ
CQ:UTILtree
Н Вывод дерева каталогов текущего диска
А СПРЯТАТЬ ФАЙЛЫ
Н Установка атрибутов "Скрытый файл"
CQ:SHELLexebat Q:RESattrh.bat
А УВИДЕТЬ ФАЙЛЫ
Н Снятие атрибута "Скрытый файл"
CQ:SHELLexebat Q:RESattr.bat
А ВЫХОД В SHELL
Н Выход в оболочку IS-DOS