Re: вопрос по проганью в досе

clubfishka

раньше умел и знал шде найти, а сейчас забыл...
может кто-нить помнит или даст ссылочку?
1. как в досе сделать, что бы прога запускалась как демон?
(кажется когда-то был очень распространен пример программы, которая
следила за нажатием клавиш клавиатуры, и скидывала их в файл...)
2. как эмулировать нажатие клавиш клавиатуры?
(это тоже очень известная шняга была... на ассемблере помнится)
можно на с/с++, паскале и, на крайняк, на ассемблере?

Ivan8209

Keywords: "Ralf Brown's Interrupt List."
---
...Я работаю антинаучным аферистом...

evgen5555

Как всегда, не в тему высказался.
Искать надо по словам TSR, DOS, ASM, Assembler, Real-mode programming и Hardware Interrupts.

Ivan8209

Ты сначала посмотри в RBIL, тогда и узнаем, чей ответ лучше.
---
"Люди недалёкие обычно осуждают всё, что выходит за пределы их понимания."
Ларошфуко.

evgen5555

В RBIL ничего про практическое применение DOS-прерываний и написание TSR-модулей не сказано.
Вряд ли по словарю можно выучить язык.

Ivan8209

"раньше умел и знал где найти, а сейчас забыл...
может кто-нить помнит или даст ссылочку?"
---
...Я работаю антинаучным аферистом...

730093729520

Надо оставить прогу в памяти резидентно (прерывание INT 27H).
Могу запостить текст самодельной программы под Dos на ассемблере, которая перехватывает клавиши и записывает их в файл. Во времена доса ей пароли дыбал.

evgen5555

Кстати, 27h - устаревшая процедура

730093729520

DOS вообще устаревшая система

sergey_m

1. как в досе сделать, что бы прога запускалась как демон?
(кажется когда-то был очень распространен пример программы, которая
следила за нажатием клавиш клавиатуры, и скидывала их в файл...)
Нет там понятия демон. Ты можешь повесить собственный обработчик на какое-то прерывание, и он будет выполняться при каждом этом событии. Создается эффект демона.
2. как эмулировать нажатие клавиш клавиатуры?
(это тоже очень известная шняга была... на ассемблере помнится)
Записывать байтики в буфер клавиатуры.
Конечно все эти советы без цифр пустые... Если не найдешь в инете список, на который ссылается КОНТРА, то я могу посмотреть в книжках. Но лучше, найди мне лень эти книги откапывать.

sergey_m

> Keywords: "Ralf Brown's Interrupt List."
Эх, в школьные годы купил этот двухтомник за большие по детским понятиям деньги. Так был рад. Теперь он бесполезен, а отдать кому-то жалко. Ведь когда-то так хотел его купить.

maggi14

>Нет там понятия демон. Ты можешь повесить собственный обработчик на какое-то прерывание, и он будет выполняться при каждом этом событии. Создается эффект демона.
ТОлько надо этот обработчик еще в памяти сохранить. 27 прерыванием. Если пишешь на языках уровня повыше, чем ASM, учти, что функции типа halt почему-то не всегда корректно работают. И не забудь необходимую проге память подобрать в директивах компилятора.

Ivan8209

Он есть в эл. виде.
---
...Я работаю антинаучным аферистом...

sergey_m

Нет там понятия демон. Ты можешь повесить собственный обработчик на какое-то прерывание, и он будет выполняться при каждом этом событии. Создается эффект демона.
ТОлько надо этот обработчик еще в памяти сохранить. 27 прерыванием. Если пишешь на языках уровня повыше, чем ASM, учти, что функции типа halt почему-то не всегда корректно работают. И не забудь необходимую проге память подобрать в директивах компилятора.
Повесить == сохранить.
Если я не путаю, то 27h действительно устарело. Обработчики прерываний меняются какой-то фукнцией из 21h.

sergey_m

> Он есть в эл. виде.
В те времена у меня не было не только ноутбука, но даже компьютера. Поэтому книга намного лучше файла.

maggi14

Ну, если у вас такие термины, спорить не буду. Короче, вешаем прогу в памяти каким-то (мнения разделились) прерыванием и переписываем вектор какого-нибудь прерывания (напр, 9h) на эту прогу.

voronina

1) стараемся не пользоваться функциями доса и сей, когда обработываем прерывание
2) когда сработало прерывание мы не хамеем, а запускаем старый обработчик, а потом уже свое действие
3) вешаем обработчики на несколько часто происходящих прерываний и проверяем, чтобы нас не перезатерли
4) обрабатываем повторный запуск нашей программы
5) сохраняем в глобальной переменной стековые регистры: прерывание сработало, то мы сохраняем текущие стековые перем (т.к. это будет не нашей проги стек) потом загоняем в стековые регистры наши значения, перед окончанием обработки должны вернуть все, как было.
ДО ТОГО КАК ВОСТАНОВИМ СВОЙ СТЕК не используем библиотечные функции C и функции DOS
6) и самое главное: перед тем как сделать программу резидентной ее нужно протестировать в ОБЫЧНОМ РЕЖИМЕ!
Язык проще всего выбрать С с асмовскими вставками, или заморачиваться на асме
компиляторы: turbo C 2.0 (очень много примеров таких программ или tasm 5.0 (тоже богато с исходниками)
Самый новый компилятор под DOS это старенькие версии Watcom.

Ivan8209

Последнее утверждение неверно.
---
...Я работаю антинаучным аферистом...

maggi14

Функциями сей и вообще любыми функциями, не затрагивающими прерывания ДОС, пользоваться можно

tiva

ищи доки по написанию резидентов. Пишешь свой обработчик на 16h прерывание. Не забудь потом вызвать тот обработчик, который до тебя там стоял. Можно обращаться напрямую к порту клавы, а можно считывать из буффера.
Оставить комментарий
Имя или ник:
Комментарий: