Программирование на Ассемблере
Введите с клавиатуры какой-нибудь текст и нажмите - Вы
увидите, что введенная Вами строка напечатается второй раз. Мы использовали подпрограмму \"pmsg\" из предыдущего пункта, которая выводит
ASCII-строку, оканчивающуюся нулевым байтом. Для добавления нулевого байта
в конце строки мы используем команду clr.b: так как D0 содержит число
прочитанных байт, то 0(A0,D0) как раз указывает на первую неиспользованную
ячейку буфера.
Распечатав в отладчике содержимое буфера inbuf после ввода текста, Вы
увидите, что введенная Вами строка заканчивается кодом $A. Это - код
клавиши , который тоже учитывается при вводе. Поэтому, например,
после ввода строки \"12\" Вы обнаружите, что D0 содержит число 3.
А теперь исправьте в имени консоли \"CON:\" на \"RAW:\" и запустите программу.
Вы сразу же заметите разницу. Теперь функция Read будет возвращать
управление после ввода каждого символа, не дожидаясь . При этом D0
будет содержать 1.
Преимуществом такого режима ввода является возможность работы с клавишами
управления курсором. Написав специальную подпрограмму, Вы можете вводить
данные посимвольно с помощью getchr и обрабатывать управляющие коды. Библиотека dos.library предоставляет еще одну полезную функцию для работы с
клавиатурой - WaitForChar (смещение -204). Эта функция ждет нажатия любой
клавиши в течение заданного интервала времени, и если клавиша была нажата,
то WaitForChar возвращает -1 ($FFFFFFFF), иначе - 0. Эта функция может
использоваться, например, для приостановки вывода текста и ожидания нажатия
любой клавиши для продолжения. Параметры функции WaitForChar: в D1 идентификатор канала
в D2 длительность ожидания нажатия клавиши (в микросекундах) Например, следующая программа ждет нажатия клавиши в течение 1 секунды: WaitForCh = -204 ;(6.4.2C)
...
scankey: ;* ждет нажатия клавиши
move.l conhandle(PC),D1 ;идентификатор окна (консоли)
move.l #1000000,D2 ;1 сек.
|