Графический курсор мыши в текстовом режиме.

Иногда бывает полезно обескуражить пользователя Вашей программы, не совсем очевидным трюком. С одной стороны видно, что программа запущена в текстовом режиме, а с другой по экрану ползает явно графическая стрелка, или крутятся песочные часики ну или еще что-нибудь в этом роде. Да и выглядит такой курсор гораздо симпатичнее и информативнее, чем банальный инвертированный символ.

Поскольку мы не переключаемся в графический режим, то остается только один способ нарисовать на экране что-нибудь не слишком большое - создание собственных символов. Процедура сродни русификации. Используем в качестве изображения курсора матрицу размером с одно знакоместо. Эта матрица будет передвигаться, повинуясь движениям мыши по экрану, причем ее положение не скачет с одного символа на другой, а плавно перемещается с точностью до точки.

Это значит что в худшем случае курсор налезает на 4 соседних символа. Собственно вся основная работа будет сводиться к генерации 4 символов изображающих наложенный на кусок экрана курсор. (Их не больше 4, так как курсор имеет размер в 1 символ). Для отображения этих символов придется пожертвовать частью кодировки. Я взял символы с 247 по 250, на мой взгляд самые бесполезные.

При каждом перемещении курсора нам придется:
  • Восстанавливать измененные 4 знакоместа экрана.
  • Вычислять положение следующих 4 знакомест.
  • Считывать 4 матрицы символов расположенных под курсором.
  • Генерировать новые 4 символа, изображающие курсор поверх них.
  • Присваивать вычисленным знакоместам значения матриц символов.
  • Собственно в предлагаемом к скачиванию архиве находятся 2 модуля. Один называется SCR, он и выполняет всю работу по генерации символов а также русифицирует знакогенератор (чего уж мелочиться, раз все равно приходится ковыряться с символами). Никаких резидентов не вешается, так что можете быть спокойны. Единственный минус - работает только с текстовым режимом EGA 80x25 символов (устанавливает его сам). Это моя главная проблема, никак не могу добраться до программирования 9-го столбца в матрице символа VGA, все время получается что либо он весь белый либо весь черный. Если кто знает как это лечить пожалуйста помогите.

    Следующий включенный в архив модуль - Mice. В нем нет ничего интересного, он необходим для работы с мышью. Предоставляет простейший интерфейс с этим незамысловатым устройством. Единственным удобством является организация работы с очередью событий от мышки. Легко можете добавить функции управления скоростью курсора и т.п. Потребуется только почитать доки по int 33h.

    Все эти объяснения даже мне не кажутся понятными, я их пишу так, на скорую руку. И как сказал Obi Wan Kenobi - "Use the sources Luke ;)"

    Исходник естественно прилагается. Если возникнет потребность могу напрячься и подробнее описать работу модуля. Использовать можно свободно. (Ссылка на автора желательна, с условиями лицензии GNU можно ознакомиться по адресу http://www.gnu.org).

    Скачать исходник (9.041b)

    Пишите мне: xor@imail.ru