Графический курсор мыши в текстовом режиме.
Иногда бывает полезно обескуражить пользователя Вашей программы, не совсем очевидным трюком. С одной стороны видно, что программа запущена в текстовом режиме, а с другой по экрану ползает явно графическая стрелка, или крутятся песочные часики ну или еще что-нибудь в этом роде. Да и выглядит такой курсор гораздо симпатичнее и информативнее, чем банальный инвертированный символ.
Поскольку мы не переключаемся в графический режим, то остается только один способ нарисовать на экране что-нибудь не слишком большое - создание собственных символов. Процедура сродни русификации. Используем в качестве изображения курсора матрицу размером с одно знакоместо. Эта матрица будет передвигаться, повинуясь движениям мыши по экрану, причем ее положение не скачет с одного символа на другой, а плавно перемещается с точностью до точки.
Это значит что в худшем случае курсор налезает на 4 соседних символа. Собственно вся основная работа будет сводиться к генерации 4 символов изображающих наложенный на кусок экрана курсор. (Их не больше 4, так как курсор имеет размер в 1 символ). Для отображения этих символов придется пожертвовать частью кодировки. Я взял символы с 247 по 250, на мой взгляд самые бесполезные.
При каждом перемещении курсора нам придется: Собственно в предлагаемом к скачиванию архиве находятся 2 модуля. Один называется SCR, он и выполняет всю работу по генерации символов а также русифицирует знакогенератор (чего уж мелочиться, раз все равно приходится ковыряться с символами). Никаких резидентов не вешается, так что можете быть спокойны. Единственный минус - работает только с текстовым режимом EGA 80x25 символов (устанавливает его сам). Это моя главная проблема, никак не могу добраться до программирования 9-го столбца в матрице символа VGA, все время получается что либо он весь белый либо весь черный. Если кто знает как это лечить пожалуйста помогите.
Следующий включенный в архив модуль - Mice. В нем нет ничего интересного, он необходим для работы с мышью. Предоставляет простейший интерфейс с этим незамысловатым устройством. Единственным удобством является организация работы с очередью событий от мышки. Легко можете добавить функции управления скоростью курсора и т.п. Потребуется только почитать доки по int 33h.
Все эти объяснения даже мне не кажутся понятными, я их пишу так, на скорую руку. И как сказал Obi Wan Kenobi - "Use the sources Luke ;)"
Исходник естественно прилагается. Если возникнет потребность могу напрячься и подробнее описать работу модуля. Использовать можно свободно. (Ссылка на автора желательна, с условиями лицензии GNU можно ознакомиться по адресу http://www.gnu.org).
Пишите мне: xor@imail.ru