Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод цветного текста - мож. кому пригодится... оцените 
:(
    Опции темы
Ruterian
Дата 12.2.2004, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 9.1.2004
Где: Вязьма, Минск

Репутация: нет
Всего: нет



Давно хотел сделать процедуру, аналогичную 09h функции int 21h, но для вывода строк в цвете (как в языках высокого уровня). И, вот, придумал smile.gif

Адрес строки передаем в ES:BP
далее просто вызываем ЭТО :-)

Можно писать текст в виде <$><атрибут1>,<текст1>,<$><атрибут2>,<текст2>,0 Длину строки указывать не надо, положение не надо - пишет от курсора.

Перед строкой, и внутри её, можно использовать следующие управляющие символы:

24h - признак цвета. Указывает, что следующий за ним байт нужно рассматривать как атрибут.

0Ah и 0Dh - перенос строки и возврат курсора на 0-ю колонку. Работают, если перед ними нет символа 24h.

0 - признак конца строки.

Схема строки в виде <текст>,0 будет рассматриваться как белый на черном. Признак цвета и управляющий символ можно вставлять в любое место строки.

color_string:
mov ax,0300h ; получить адрес курсора
mov bx,0
int 10h
set_att:
cmp byte ptr [es:bp],24h ; анализируем первый знак
je yes_color ; если это признак цвета, то следующий - атрибут
jmp no_color

yes_color:
inc bp ; получаем атрибут
jmp nbw ; далее обращаемся как с атрибутом
anal_att:
cmp byte ptr [es:bp],20h
jl nbw ; если первый знак - не атрибут
no_color:
mov bl,07h ; писать белым на черном
jmp clr_txt
nbw:
mov bl,[es:bp] ; выделяем атрибут из строки
inc bp
clr_txt:
mov cx,1 ; вывести один символ
mov ax,1301h ; функция
cmp byte ptr [es:bp],0 ; ищем признак конца строки
je endoftxt
cmp byte ptr [es:bp],24h ; ищем след.признак цвета в строке
je yes_color
cmp byte ptr [es:bp],13
jne no_ret_cur
xor dl,dl

no_ret_cur:
int 10h ; пишем текст
inc bp ; получам адрес след.символа
cmp byte ptr [es:bp-1],13
je no_move_cur
cmp byte ptr [es:bp-2],13
je no_move_cur
inc dx ; перемещаем курсор
no_move_cur:
jmp clr_txt
endoftxt:
retn

Это сообщение отредактировал(а) Ruterian - 12.2.2004, 16:34
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.