Что представляет с себя буфер клавиатуры? Где он хранится и каковой его размер?
И как вот этот код
Цитата
while keypressed do readkey;
или
repeat
readkey
until not keypressed;
его очищает?
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Буфер клавиатуры |
Bokul |
Сообщение
#1
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Решил даром не флудить.
Что представляет с себя буфер клавиатуры? Где он хранится и каковой его размер? И как вот этот код Цитата while keypressed do readkey; или
его очищает? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Что представляет с себя буфер клавиатуры? Где он хранится и каковой его размер? И как вот этот код .. его очищает? Обычный буфер типа FIFO (первым вошел - первым вышел), размер, кажется, 16 байт... могу ошибаться, давно было.. Находится где-то в области досовской памяти.. Тебе нужно точно? Как очищает? да просто считывает все символы из него! поскольку ввод с клавы гораздо медленнее, чем работа ReadKey, то можно быть практически уверенным, что этот цикл очистит буфер. Хотя, есть принципиальная возможность, что сразу после него и до работы того, для чего ты его очищал, в него что-то все же ляжет. Но вероятность невелика -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Bokul |
Сообщение
#3
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Спасибо.
Цитата Тебе нужно точно? Если знаешь - давай... Цитата Находится где-то в области досовской памяти.. Что такое досовская память? Сообщение отредактировано: Bokul - -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lapp |
Сообщение
#4
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
> Если знаешь - давай...
Когда-то знал, мог наизусть ответить.. Сейчас - надо рыть Интернет, бумага уже не сохранилась У меня была брошюрка в страниц 10, которую я замусолил до безобразия, таская с собой - там было все абсолютно. Извиняюсь за флуд, но давай подождем xds - я уверен, он скажет адрес . > Что такое досовская память? Ну, область памяти, где DOS хранит свои данные. Там все имеет определенные адреса, которые, слава Богу, не менялись от версии к версии. Это позволяло достаточно надежно использовать сами данные в обход системных вызовов. Само по себе это нехорошо, но иногда давало определенные преимущества - типа скорость, а также контроль самого низкого уровня. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Bokul |
Сообщение
#5
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Цитата давай подождем xds - я уверен, он скажет адрес smile.gif. Согласен, будем ждать ходячего справочника Цитата Ну, область памяти, где DOS хранит свои данные. Там все имеет определенные адреса, которые, слава Богу, не менялись от версии к версии. Это позволяло достаточно надежно использовать сами данные в обход системных вызовов. Само по себе это нехорошо, но иногда давало определенные преимущества - типа скорость, а также контроль самого низкого уровня. Конечно не по теме, но что поделаешь, все-равно ждать приходится, : позволяет ли Windows проделывать тоже самое? И что происходит, когда я запускаю прогу, скомпилированную под Dos, на винде (я имею ввиду на уровне памяти)? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lapp |
Сообщение
#6
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Конечно не по теме, но что поделаешь, все-равно ждать приходится, : позволяет ли Windows проделывать тоже самое? И что происходит, когда я запускаю прогу, скомпилированную под Dos, на винде (я имею ввиду на уровне памяти)? Да, за тему пришлось выйти, к теории Паскаля это имеет весьма малое отношение. Но обнаруживает разницу между задачами, скомпилированными в TP и в FPC. Для запуска досовской программы Винда запускает виртуальную DOS-машину, которая довольно точно копирует настоящий DOS, включая распределение памяти. Так что твой вопрос (или мой ответ?..) имеет отношение только к тому, что скомпилированно в TP. Но если говорить об очистке буфера клавиатуры, то принцип тот же - тебе надо читать из буфера, пока он не очистится. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
xds |
Сообщение
#7
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Разбирайся
program Code; -------------------- The idiots are winning.
|
SKVOZNJAK |
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: 11 |
Блин, как просто это в досе\виндОсе. Уже даже и не верится. Стабильный размер буфера, никаких событий и загрузки порциями, даже автоповтор эмулировать не надо
|
Bokul |
Сообщение
#9
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Цитата Стабильный размер буфера, никаких событий и загрузки порциями, даже автоповтор эмулировать не надо Чтобы не расценивать твое сообщение как флуд , дай, если есть конечно, пару ссылочок по теме для Windows. -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
SKVOZNJAK |
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: 11 |
А кто сказал что это виндовс ;) Речь идёт о библиотеке сдл и о настальгии по таким простым методам доступа к клаве в любое время суток http://sdl4fp.sourceforge.net/index.html Главная её особенность - она работает в линуксе! Вот с чтением клавы в видеорежиме там очень непросто. И к портам только суперпользователь напрямую обратиться может и ось реально многозадачная. Теоретически SDL можно скомпилить и под виндовс. А практически, почти всё в ней импортируется, а под виндой импорт не работает, чего-то не хватает. Возможно исходники скомпилируются, если в каталог добавить файл SDL.DLL скачанный из ослика. Но это непроверено. Вот работающий пример использования клавы в видеорежиме. Так же получается доступ к мыши, джойстику. Читаются события keydown и keyup, а для клавиш модификаторов ещё и маски.
program demo;
Сообщение отредактировано: SKVOZNJAK - |
TarasBer |
Сообщение
#11
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Код var KStart: Word absolute $40:$1A; { адрес начала (откуда считывается) очереди данных клавиатуры } KEnd: Word absolute $40:$1C; { адрес конца (куда записывается) очереди данных клавиатуры } KBuf: array[0..15] of Word absolute $40:$1E; { собственно, буфер - 16 записей по 2 байта (ASCII-, Scan-код) } { - если очередь пуста, то KStart = KEnd } { - если очередь переполнена, то KEnd указывает на запись перед KStart } Ура, одним стандартным модулем меньше в моём списке uses. Спасибо. -------------------- |
Текстовая версия | 27.07.2024 21:16 |