Буфер клавиатуры
Я написал резидент, перехватываю 09h , а вот как имитировать ввод команды при обработке клавиши не пойму, ведь в обработчике аппаратного прерывания нельзя испльзовать функции ДОС.
Думаю записывать коды символов в буфер клавиатуры. Но тут такой вопрос, что мне надо записать после символов "MASM" скан-код или расширенный код клавиши Enter и воспримет ли это ДОС как обычный ввод команды ?
может, перехватывая прерывание 09 посылать оригинальному обработчику вместо скан-кода F1 скан-коды клавиш 'M','A','S','M','enter', но тогда при переключении в русский регистр будет неверный результат. а вообще может лучше перехватить 21Н и 09) и подменой заниматься только тогда, когда интерпретатор запрашивает ввод строки - тогда по Ф1 в буфер записать 'masm' и вернуть управление (так, вольное теоретизирование - надо пробовать)
Я написал резидент, перехватываю 09h , а вот как имитировать ввод команды при обработке клавиши не пойму, ведь в обработчике аппаратного прерывания нельзя испльзовать функции ДОС.
Думаю записывать коды символов в буфер клавиатуры. Но тут такой вопрос, что мне надо записать после символов "MASM" скан-код или расширенный код клавиши Enter и воспримет ли это ДОС как обычный ввод команды ?[/QUOTE]
для того что бы симитировать нажатие клавиши есть специальная функция в досе -- см прерывания 21h & 16h + можно в ручную заполнить буфер клавиатуры
один нюанс: в случае с резидентом перед тем как писать что то в буфер клавиатуры нужно его содержимое сохранть или писать данные в начало буфера, при этом нада помнить что размер буфера -- только 16 байт
[QUOTE=shoorick]может, перехватывая прерывание 09 посылать оригинальному обработчику вместо скан-кода F1 скан-коды клавиш 'M','A','S','M','enter', но тогда при переключении в русский регистр будет неверный результат. а вообще может лучше перехватить 21Н и 09) и подменой заниматься только тогда, когда интерпретатор запрашивает ввод строки - тогда по Ф1 в буфер записать 'masm' и вернуть управление (так, вольное теоретизирование - надо пробовать)[/QUOTE]
все бы вам прерывания перехватывать )))
на самом деле -- плохой вариант потому что родной обработчик читает данные из портов клавиатуры и "послать" ему ничего не удастся + куча естественно возникающих сложностей с написанием и отладкой самого резидента
на самом деле -- гнилой вариант потому что родной обработчик - насчет прерывания 9 - согласен, но по нему можно узнать момент нажатия ф1.
на самом деле задача скорее сложнее чем кажется - что если пользователь уже ввел что-то перед ф1?
клавиши.
пока что выводятся все символы, как сделаться чтоб только последний
язык Си под дос