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




рек- лючателями. Не все клавиши логически сгруппированы, по типу кода, который им соответствует. Например, клавиша <Backspace> генери- рует однобайтный код ASCII, а клавиша <Delete> - двухбайтный расширенный код. Клавиша Ctlr генерирует однобайтный код, когда она используется в сочетании с алфавитными клавишами и двухбайт- ный код в остальных случаях. Эти нерегулярности вознмкают из-за ограниченности набора ASCII: прерывание клавиатуры следует согла- шениям ASCII, когда возможно, но когда это невозможно выдает свои (расширенные) коды.
      В данном разделе перечислены различные группы клавиш, даны их коды и указаны встречающиеся аномалии. В большинстве случаев эта информация доступна в менее удобном виде из таблиц кодов ASCII и расширенных кодов, приведенных в разделе 3 этой главы. Здесь обсуждаются также специальные свойства, приписываемые отдельным клавишам Бейсиком, а также специальная обработка, для интерпрета- ции отдельных клавиш (таких как забой), применяемая в прерываниях DOS.


3.2.1 Использование клавиш <BackSpace>, <Enter>, <Escape> и <Tab>.



      Клавиши <BackSpace>, <Enter>, <Escape> и <Tab> - единственные четыре несимвольные клавиши, которые генерируют однобайтные ко- ды ASCII. Эти коды содержатся в наборе управляющих кодов [7.1.9], которые занимают первые 32 кода в наборе ASCII. Эти четыре кода могут быть получены также комбинацией буквенных клавиш с клавишей Ctrl:

      ASCII 8 BackSpace Ctrl + H
      ASCII 9 Tab Ctrl + I
      ASCII 13 Enter Ctrl + M
      ASCII 27 Escape Ctrl + [
В [3.2.2] показано как различать нажатие одной клавиши и комбина- цию с клавишей Ctrl. Отметим, что обратная табуляция, производи- мая нажатием комбинации <Shift> + <Tab>, выдает расширенный код 0;15.
      Некоторые из прерываний обработки ввода с клавиатуры автомати- чески интерпретируют эти четыре специальных кода. В Бейсике функ- ция INPUT реагирует на <Backspace>, <Tab> и <Enter>. Функция INKEY$ не интерпретирует ни один из управляющих кодов, поскольку у нее нет автоматического эха на экран. Всю работу должна выпол- нять Ваша программа. Напомним, что для управления движением кур- сора Бейсик предоставляет функцию TAB. Из прерываний BIOS и DOS, те которые выдают эхо на терминал интерпретируют также клавиши <BackSpace> и <Tab>. После того как эти коды интерпретируются соответствующим образом, коды ASCII все равно появляются в AL, после чего они могут быть включены в строку символов или игнори- рованы, в зависимости от того, что требуется.


3.2.2 Использование клавиш-переключателей: <Shift>, <Ctrl> и <Alt>.



      Три типа клавиш-переключателей заставляют только другие клави- ши клавиатуры генерировать различные коды. Как правило, такие комбинации генерируют расширенные коды. Но в двух случаях они дают коды ASCII: (1) когда используется клавиша <Shift> с клавишами алфавитно-цифровых символов и (2) нажатие комбинации клавиш от Ctrl-A до Ctrl-Z дает ASCII коды от 1 до 26. Все остальные комби- нации дают расширенные коды, перечисленные в [3.3.5]. PCjr имеет несколько исключений, которые обсуждаются ниже.
      Недопустимые комбинации клавиш не производят кода, вообще. За исключением случая специальных комбинаций с Ctrl-Alt, одновремен- ное нажатие нескольких переключателей приводит к тому, что только один из них становится эффективным, причем приоритет у Alt, затем Ctrl, и затем Shift. В [3.1.7] показано как проверить нажата ли в данный момент клавиша-переключатель. В [3.2.3] показано, как использовать клавишу ScrollLock, в качестве переключателя с любой другой клавишей клавиатуры. Другие комбинации с клавишами-перек- лючателями можно сделать допустимыми только полностью переписав прерывание клавиатуры, которое заменило бы прерывание BIOS [3.1.9].
      Имеется проблема, связанная с некоторыми комбинациями с клави- шей Ctrl, такими как Ctrl + H, I, M и [, поскольку они генерируют коды ASCII, идентичные тем, которые генерируют клавиши <BackSpa- ce>, <Tab>, <Enter> и <Escape>. В [3.1.8] показано как программа на ассемблере может может, проверив скан-коды, определить была ли нажата управляющая клавиша или комбинация буквы с Ctrl (скан-код находится в AH, когда мы получаем код нажатой клавиши через пре- рывание 16H). К сожалению, программы на Бейсике лишены такой возможности. В таком случае программа может попытаться различить эти две возможности, анализируя состояние регистра статуса. Если бит 2 байта статуса по адресу 0040:0017 установлен, то клавиша Ctrl - нажата. Этот метод работает только в тот момент, когда происходит нажатие клавиши, но не тогда, когда Вы берете символ из буфера клавиатуры через некоторое время.
      Клавиатура PCjr имеет только 63 клавиши, по сравнению с 83 для IBM PC или XT и 84 для AT. Некоторые комбинации клавиш-переключа- телей служат для имитации некоторых недостающих клавиш (комбина- ции с использованием функциональных клавиш приведены в [3.2.5]):

      Комбинация клавиш PCjr PC/XT/AT эквиваленты

      Alt + Fn + 0-9 0-9 (скан-коды дополнительной циф-
      ровой клавиатуры
      Alt + / \
      Alt + ' `
      Alt + [ |
      Alt + ] ~
      Alt + . * (скан-код, как от клавиши PrtSc
      Shift + Del . (скан-код, как от доп. кл-ры)


      Клавиатура PCjr допускает также следующие уникальные комбина- ции с участием клавиш-переключателей:

      Fn + Shift + Esc переключает цифровые клавиши в
      функциональные
      Ctrl + Alt + CapsLock переключает звуковое подтверждение
      нажатия клавиши
      Ctrl + Alt + Ins запускает диагностику
      Ctrl + Alt + CursorLeft сдвигает экран влево
      Ctrl + Alt + CursorRight сдвигает экран вправо


3.2.3 Использование клавиш-