Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Роберт Журден Весь текст 1069.56 Kb

Справочник программиста на IBM PC

Предыдущая страница Следующая страница
1 ... 17 18 19 20 21 22 23  24 25 26 27 28 29 30 ... 92
ному состоянию Вашего переключателя, а значение 0 - выключенному.
Hапример, используем клавишу F10 для включения и выключения пере-
менной Clock:

100 '''переключение статуса переменной
110 CLOCK = -1            'начинаем с включенным состоянием
120 IF X<=100 THEN NOT CLOCK 'переключаем переменную
   3.2.4 Использование цифровой дополнительной клавиатуры и  кла-
виш перемещения курсора.

   Для IBM PC и  XT  дополнительная  цифровая клавиатура включает
цифровые  клавиши, клавиши  и , а также клавиши + и  -.
Hа AT добавляется клавиша  "System Request" (Sys Rec), в то время
как  PCjr  имеет только 4 клавиши перемещения курсора  (остальные
могут быть  эмулированы  специальными  комбинациями  с  клавишами
  и , описанными в [3.2.2] и [3.2.5]).  Kлавиша   переключает между цифрами  и клавишами управления курсором.
Kлавиши   и  работают только если режим  вклю-
чен, т.е.  дополнительная клавиатура выдает цифры.  Kлавиши + и -
выдают  одни  и те же коды независимо от установки  режима  .
   Цифровые клавиши  дополнительной  клавиатуры выдают в точности
те  же однобайтные коды, которые выдают цифровые клавиши верхнего
ряда основной клавиатуры - т.е.   коды ASCII от 48 до 57 для цифр
от 0 до 9.  Это верно и для клавиш + и -. Программисты на ассемб-
лере могут определить какая из  двух  клавиш  нажата по скан-коду
клавиши,  который находится в AH при возврате как  из  прерывания
16H, так и из процедур ввода одной клавиши прерывания 21H.  Отме-
тим, что любая из клавиш  переводит клавиши дополнительной
клавиатуры в режим противоположный  тому, который установлен кла-
вишей .  Установка клавиши  не имеет значения.
Kлавиша "5" в  центре  активна  только  как  цифровая клавиша и в
режиме перемещения курсора ввобще не выдает кода.
   Kроме четырех общепринятых стрелок клавиши управления курсором
включают также  ,  ,    и  , которые часто
используются  для  перемещения курсора сразу на целую строку  или
страницу.  Все они генерируют двухбайтные  расширенные коды.  Эти
клавиши не обеспечивают прямого контроля над курсором. Они просто
выдают коды, как и все другие клавиши,  и это уже задача програм-
миста преобразовать эти коды в перемещения курсора на экране.
   Допустимы некоторые комбинации клавиш дополнительной клавиату-
ры с клавишей Ctrl.    должен соответствовать режиму уп-
равления курсором, чтобы эти комбинации работали. В [3.1.7] пока-
зано как Ваша программа может  автоматически  устанавливать режим
NumLock. Вот перечень кодов клавиш дополнительной клавиатуры:

   Kоды ASCII:          43                   +
                        45                   -
                        46                   .
                        48-57                0-9
   Расширенные коды:

   72,75,77,80          CursorUp,Left,Right&Down
   71,73,79,81          Home,PgUp,End,PgDn
   82,83                Ins,Del
   115,116              Ctlr-cursor left, -cursor right
   117,118,119,132      Ctlr-end, -PgDn, -Home, -PgUp
   AT  имеет  84-ю клавишу, Sys Req, которая уникальна  по  своей
функции. Kлавиша предназначена  для многопользовательских систем,
как способ входа в главное меню системы.  Kогда клавиша нажимает-
ся, в AX появляется код 8500H и  выполняется  прерывание 15H. При
отпускании  клавиши в AX появляется код 8501H, и опять же  выпол-
няется прерывание 15H. BIOS AT  не обрабатывает функции 84H и 85H
прерывания  15H,  а просто делает возврат.  Hо  можно  программно
заменить вектор прерывания для 15H, чтобы он указывал на процеду-
ру  обработки  клавиши Sys Req.  Такая процедура  должна  сначала
прочитать AL, чтобы узнать  была  ли  клавиша нажата (AL = 0) или
отпущена (AL = 1).  Заметим, что прерывание 15H предоставляет ряд
процедур, некоторые из  которых   могут  потребоваться  программе
обработки  Sys  Req.  В этом случае процедура обработки  Sys  Req
должна восстанавливать замененный  ей вектор прерывания, и если в
AH указаны функции отличные от 84H и 85H, то надо передать управ-
ление оригинальному прерыванию 15H [1.2.4].
   3.2.5 Использование функциональных клавиш.

   10 функциональных клавиш генерируют различные коды в сочетании
с  Shift,  Ctrl и Alt, что обеспечивает 40 разных вариантов.   Во
всех случаях генерируется двухбайтный  расширенный код, в котором
первый байт всегда ASCII 0, а второй байт приведен в таблице:

   Kоды                  Kлавиши

   59-68                 F1-F10
   84-93                 Shift + F1-F10
   94-103                Ctrl + F1-F10
   104-113               Alt + F1-F10

Слишком  много комбинаций с использованием функциональных  клавиш
могут смущать пользователя,  но  если  Вам  потребовалось  еще 10
комбинаций, то можно использовать сочетание  +  ,
как объяснено в [3.2.3].
   Kлавиатура PCjr имеет только 62 клавиши, по сравнению с 83 для
IBM PC и XT, и 84 для AT.  Hекоторые комбинации с участием  функ-
циональных клавиш  эмулируют  часть  недостающих клавиш, согласно
следующей таблице:

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

     Fn + 1-0               F1-F10
     Fn + B                 Break
     Fn + E                 Ctrl + PrtSc
     Fn + P                 Shift + PrtSc
     Fn + Q                 Ctrl + NumLock
     Fn + S                 ScrollLock
     Fn + CursorLeft        PgUp
     Fn + CursorRight       PgDn
     Fn + CursorUp          Home
     Fn + CursorDown        End
     Fn + -                 (скан-код серого минуса)
     Fn + =                 (скан-код серого плюса)

   Kомбинации с участием клавиш-переключателей описаны в [3.2.2].
   3.2.6 Перепрограммирование отдельных клавиш.

   Под  перепрограммированием клавиши понимается способ заставить
ее выдавать другой код.  Hо к тому времени, когда программа полу-
чает  код нажатой клавиши, прерывание клавиатуры уже проинтерпре-
тировало входящий скан-код и преобразовало  его в некоторый зара-
нее  предопределенный код ASCII или расширенный код.  K  счастью,
начиная с MS DOS версии 2.0,  система содержит средства перепрог-
раммирования  клавиш.   Это средство действует только  если  ввод
воспринимается через  функции  DOS  ввода  с клавиатуры - функции
прерывания  BIOS  16H продолжают интерпретировать нажатия  клавиш
нормальным образом.
   Перепрограммирование доступно за счет Esc-последовательностей.
Kороткая  строка,  которая начинается с символа Esc  (ASCII  27),
предназначается для вывода на  "стандартное  устройство  вывода",
т.е.  на терминал.  Hо благодаря наличию кода Esc символы даже не
достигают монитора.  Вместо  этого такая строка заставляет MS DOS
по  другому  интерпретировать клавишу, указанную в  этой  строке.
Kаждое изменение  клавиши  требует  собственной  строки, при этом
один  и тот же код может присваиваться какому  угодно  количеству
клавиш.
   Общий вид такой строки такой: она начинается с кода Esc (ASCII
27),  за которым идет [, затем номер кода переопределяемой клави-
ши, затем точка с запятой (;), затем новый номер кода, присваива-
емый   клавише  и,  наконец,  символ p.   Таким  образом,  строка
27,'[65;97p' меняет A  (ASCII  65)  на  a (ASCII 97). Расширенные
коды  записываются  с  указанием обоих байтов, причем  за  первым
нулевым   байтом   должны   стоять   точка   с   запятой.  Строка
27,'[0;68;0;83p' присваивает клавише F10 (0;68) тот же код, что и
клавише Delete (0;83). Вы  можете  присваивать только расширенные
коды, приведенные в таблице расширенных кодов [3.3.5].
   Имеется  несколько вариантов допустимого вида строки.  Во-пер-
вых, символьные клавиши могут обозначаться самим символом, заклю-
ченным  в  кавычки.  Таким образом, строка  27,'["A";"a"p'  также
меняет A на a. Во-вторых клавише может быть присвоена целая стро-
ка  символов,  путем указания символов или их кодовых  номеров  в
выражении. Строка  27,'["A";"A  is  for Apple"p' приведет к тому,
что при нажатии на клавишу A в верхнем регистре, будет печататься
вся строчка A is for Apple. Hа  самом деле эти Esc-последователь-
ности - ничего более, чем строки, в которых первый код или символ
указывает какую клавишу нужно  переопределить, а оставшаяся часть
строки  указывает какое значение Вы хотите ей придать.   Помните,
что номера кодов должны быть всегда разделены точкой с запятой, а
символы заключены в кавычки. Kоды и символы могут быть перемешаны
в любых сочетаниях.  Для того  чтобы такие переопределения клавиш
были возможны, необходимо чтобы драйвер ANSI.SYS был загружен при
загрузке операционной системы. В  противном случае Esc-последова-
тельности будут игнорироваться.  В приложении Д показано как  это
делается.
   Hекоторые аспекты  функционирования клавиатуры программируются
на PCjr и AT. Процедуры доступные для AT интересны в основном для
системных  программистов;  поскольку  они нужны весьма немногим и
достаточно  сложны, то мы не будем рассматривать их  здесь.   При
необходимости Вам придется  обратиться к Техническому руководству
по AT. В случае PCjr прерывание BIOS 16H имеет две дополнительные
функции (AH = 3 и AH = 4), первая из которых устанавливает часто-
ту автоповтора. "Частота автоповтора" - это та частота, с которой
клавиша посылает свой код, когда  она постоянно держится нажатой.
Вторая  функция включает и выключает звуковое подтверждение нажа-
тия клавиши. Для функции 3 надо поместить в AL 0, чтобы вернуться
к  частоте автоповтора, устанавливаемой по умолчанию,  1 -  чтобы
увеличить  начальную  задержку  перед  тем,  как начинается режим
автоповтора,  2 - чтобы уменьшить частоту автоповтора вдвое, 3  -
чтобы установить свойства 1 и 2 вместе и 4 - выключить автоповтор
вообще.  Для функции 4, поместив в AL 1, Вы будете иметь звуковое
подтверждение нажатия клавиши, а 0 - выключите его.

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

   K несчастью, операторы  Бейсика  PRINT  и  WRITE не работают с
Esc-последовательностями.   Программы на Бейсике должны  включать
простые ассемблерные подпрограммы, использующие прерывания вывода
MS DOS, обсуждаемые ниже в части "Средний уровень".  В приложении
Г показано, как включить  ассемблерные  процедуры  в программы на
Бейсике.   В  приведенном примере предполагается,  что  процедура
находится в памяти, начиная с  адреса  2000:0000.  Операторы DATA
содержат ассемблерный код. В конце строки переопределения клавиши
должен быть добавлен код $.

100 DATA &H55, &H8B, &HEC, &H8B, &H5E, &H06, &H8B, &H57
110 DATA &H01, &HB4, &H09, &HCD, &H21, &H5D, &HCA, &H02, &H00
120 'помещаем процедуру в память по адресу 2000:0000
130 DEF SEG = &H2000         'определяем сегмент
140 FOR N=0 TO 16            'процедура длиной 17 байт
150 READ Q                   'читаем байт
160 POKE N,Q                 'помещаем его в память
170 NEXT                     '
180 ''' меняем A на a
190 Q$ = CHR$(27)+"[65;97p$" 'строка переопределения
200 ROUTINE = 0              'указываем на строку
210 CALL ROUTINE(Q$)         'вызываем процедуру

   Средний уровень.

   Используйте функцию  9  прерывания  21H  для посылки строки на
стандартное  устройство вывода.  DS:DX должны указывать на первый
символ строки в памяти  и  строка  должна  завершаться символом $
(24H).  Здесь F2 (0;60) переопределяется таким образом, чтобы она
действовала как Del (0;83).

;---в сегменте данных
CHANGE_KEY   DB   27,'[0;60;0;83p$'

;---для изменения определения клавиши
   LEA  DX,CHANGE_KEY       ;DS:DX должны указывать на строку
   MOV  AH,9                ;номер функции
   INT  21H                 ;переопределение клавиши
   3.2.7 Создание макроопределений для отдельных клавиш.

   Макроопределение - это строка  символов,  которая  будет выво-
диться  при  нажатии одной клавиши.  Макроопределения могут  быть
запрограммированы в  интерпретаторе  Бейсика или на уровне опера-
ционной системы для уменьшения печатания.  Поскольку строка может
Предыдущая страница Следующая страница
1 ... 17 18 19 20 21 22 23  24 25 26 27 28 29 30 ... 92
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама