Справочник программиста на персональном компьютере фирмы IBM. Клавиатура - Создание макроопределений для отдельных клавиш

ОГЛАВЛЕНИЕ

     3.2.7 Создание макроопределений для отдельных клавиш.


   Макроопределение - это строка  символов,  которая  будет выво-
диться  при  нажатии одной клавиши.  Макроопределения могут  быть
запрограммированы в  интерпретаторе  Бейсика или на уровне опера-
ционной системы для уменьшения печатания.  Поскольку строка может
содержать управляющие  коды,  такие  как  символ возврата каретки
(ASCII  13), то одно макроопределение может выполнять целый набор
команд.  Для ускорения разработки программ, например, можно напи-
сать  макроопределение, содержащее все необходимые команды, чтобы
оттранслировать и скомпоновать определенную программу.
   Макроопределения,   обеспечиваемые   Бейсиком,  работают как в
Бейсиковских программах, так и на командном уровне Бейсика.  Нап-
ример, если Вы  запрограммировали  клавишу,  чтобы при ее нажатии
выводилось слово "Орангутан", то при нажатии этой клавиши функция
INPUT получит всю эту строку, а цикл, включающий INKEY$, последо-
вательно получит девять символов.  С другой стороны, макроопреде-
ления, созданные на уровне  операционной системы, всегда работают
на  командном  уровне DOS, но внутри программ они будут  работать
только если программа для ввода  с  клавиатуры использует функции
DOS.   Поскольку большинство коммерческих  программных  продуктов
используют прерывание BIOS 16H, то для этих программ макроопреде-
ления не будут работать.  Конечно, средства для создания макрооп-
ределений могут быть вставлены  в  процедуры  ввода с клавиатуры.
Например, чтобы позволить пользователю программы создать макрооп-
ределение для F1, запросив  строку  и поместив ее в MACRO1$, надо
на Бейсике написать что-то вроде:

1000 '''процедура ввода расширенного кода, в C - 2-й байт кода
1010 IF C=59 THEN LOCATE X,Y: PRINT MACRO1$

   Высокий уровень.


   Бейсик имеет встроенный механизм создания макроопределений, но
он  позволяет программировать только 10 функциональных клавиш,  а
строки должны быть не длиннее 15  символов.  Бейсик рассматривает
функциональные клавиши, как программируемые клавиши. Оператор KEY
присваивает макроопределение  данной  клавише. Строка KEY 5,"END"
приводит  к  тому, что функциональная клавиша #5  будет  посылать
слово END в текущую позицию курсора на экране.
   Символы  составляющие строку могут вводиться как строки симво-
лов, как ASCII коды (используя  CHR$)  или  как комбинация того и
другого.   Команды KEY 5,"A" и KEY 5,CHR$(65) эквивалентны.   Для
того, чтобы строка сразу исполнялась надо добавить в конце строки
символ  возврата  каретки (ASCII 13).  Команда  FILES,  выводящая
каталог диска, исполняется после  того, как Вы присвоите это зна-
чение F1 командой KEY 1,"FILES"+CHR$(13).
   Бейсик  присваивает десяти функциональным клавишам распростра-
ненные операторы Бейсика. Вы можете отменить макроопределение для
данной  клавиши, присвоив ей пустую строку,например, команда  KEY
1,"" приведет к тому, что  при  нажатии  F1  ничего  вводиться не
будет. Первые шесть символов каждой строки автоматически выводят-
ся в нижней части экрана  интерпретатором  Бейсика. Вы можете уп-
равлять наличием этого вывода используя команды KEY ON и KEY OFF.
Для того чтобы вывести на экран полные определения клавиш, введи-
те команду KEY LIST. Вот несколько примеров:

KEY 1,"ERASE"           ; теперь F1 выводит "ERASE"
KEY 10,"LIST"+CHR$(13)  ; теперь F10 выдает листинг
KEY 7,""                ; теперь F7 ничего не выдает
KEY OFF                 ; подавляет вывод внизу экрана
KEY ON                  ; включает вывод внизу экрана
KEY LIST                ; выдает список значений 10 клавиш

Для  создания макроопределений других клавиш в Бейсике, Вы должны
использовать средства MS DOS, описанные в [3.2.6].
   Средний уровень.

   В MS DOS макроопределения создаются с помощью метода перепрог-
раммирования клавиш, описанного в [3.2.6]. Единственное отличие в
том, что  клавише  сопоставляется  целая  строка символов. Строка
может  быть введена в виде символов, заключенных в кавычки, или в
виде кодов или комбинации того и другого. Вот несколько примеров:

27,'["A";"SET"p'          ; присваивает SET заглавной A
27,'["ASET"p'             ; эквивалентно предыдущему
27,'[27;"dir";13p'        ; присваивает dir<CR> клавише Esc
27,'[0;59;"copy *.* b:";13p'  ;присваивает F1 команду
27,'[0;68;0;72;0;72;0;72p'    ;заставляет F10 сдвинуть курсор на
                              ;три строки вверх