Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Многократный вывод символов и атрибутов




В современных ОС имеются специальные функции для многократного вывода однотипной информации, иногда облегчающие программисту его работу. Рассмотрим вначале средства многократного вывода одного символа. В OS/2 содержатся две системных функции, выполняющих эту задачу. Одна из них позволяет задавать символ вместе с атрибутом для вывода и называется VioWrtNCell. Другая не содержит информации об атрибуте выводимого символа и называется VioWrtNChar. Для обеих, если при их выполнении достигается конец экрана, вывод прекращается.

Функция VioWrtNCell имеет на языке Си прототип

APIRET16 VioWrtNCell(BYTE *pCell, USHORT len,

USHORT row, USHORT col, HVIO hvio),

где row – номер строки, а col – номер колонки позиции экрана, с которой начинается вывод (в случае одного символа – куда осуществляется вывод); len – число повторений вывода символа (сколько раз подряд заданный символ будет выводиться на экран); pCell адрес ячейки из двух байтов, задающий информацию о символе для вывода, причем младший байт должен содержат ASCII код символа, а старший байт – атрибуты вывода.

Функция VioWrtNChar имеет на языке Си прототип

APIRET16 VioWrtNChar(BYTE *pChar, USHORT len,

USHORT row, USHORT col, HVIO hvio),

где row – номер строки, а col – номер колонки позиции экрана, с которой начинается вывод (в случае одного символа – кѓда осуществляется вывод), |en – число повторений вывода символа (сколько раз подряд заданный символ будет выводитьсџ0на экран), pChar - адрес байта, хранящего символ.

Дополнением к возможностям только что рассмотренных функций служит функция VioWrtNAttr. Она позволяет предварительно установить новые атрибуты для текста или изменить старые атрибуты уже выведенного текста для последовательных позиций экрана. Место экрана, начиная с которого следует изменить атрибуты, указывается в вызове функции VioWrtNAttr.

Функция VioWrtNAttr имеет на языке Си прототип

APIRET16 VioWrtNAttr(BYTE *pAttr, USHORT len,

USHORT row, USHORT col, HVIO hvio),

где row – номер строки, а col – номер колонки позиции экрана, с которой задаются (изменяются) атрибуты, len – число мест для символов, в которых изменяются атрибуты, pAtrr адрес байта, хранящего атрибут.

Для многократного вывода одного символа в Windows предназначена функция FillConsoleOutputCharacter, а для многократного вывода одного и того же атрибута – функция FillConsoleOutputAttribute. Эти функции имеют прототипы

BOOL FillConsoleOutputCharacter(HANDLE hConsOut,

CHAR character, WORD len, COORD pos, DWORD* actlen);

BOOL FillConsoleOutputAttribute(HANDLE hConsOut,

WORD attr, DWORD len, COORD pos, DWORD* actlen).

Первые аргументы этих функций задают хэндл экрана консоли (более точно экранного буфера), вторые соответственно – выводимый символ или выводимый атрибут, параметр len задает число повторений вывода этого символа или атрибута, а параметр actlen – адрес для возврата числа действительно выполненного числа повторений. Это число может отличаться от заказанного в вызове системной функции, если в процессе вывода достигнут конец экрана. Параметр pos задает позицию экрана, начиная с которой эти функции выполняют свой вывод.

Для задания атрибутов в Windows можно использовать предопределенные символические константы, которые заданы в заголовочном файле wincon.h. Эти константы имеют названия FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, BACKGROUND_INTENSITY, которые говорят сами за себя. Для получения комбинированного цвета с их помощью достаточно несколько требуемых из них соединить символами побитовой операции ИЛИ. Так, например, для задания белового цвета символа следует указать операнд в виде FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE. (Нетрудно видеть, что этот подход достаточно громоздкий для нормального программиста, поэтому неплохо представлять, что значения перечисленных выше констант есть соответственно 1, 2, 4, 8, 16, 32, 64 и 128.)

В Windows имеется еще одна возможность установки цвета для вывода на экран консоли. Ее предоставляет функция с прототипом

BOOL SetConsoleTextAttribute(HANDLE houtput, WORD attrib).

Эта функция устанавливает цвет, автоматически используемый далее при выводе на экран функцией WriteFile (и также более специализированной функцией WriteConsole), а так жеиспользуемый при отображении символов в процессе ввода функцией ReadFile. Кроме того, такая установка оказывается действующей и на те функции, которые в действительности построены на основе указанных. В то же время эта установка не действует на некоторые другие функции вывода, которые будут рассматриваться далее. (В частности на вывод в произвольную позицию экрана с помощью функции WriteConsoleOutput.)

В операционной системе Unix отсутствуют системные функции многократного вывода символов и атрибутов. Желающие, впрочем, легко могут написать их для себя, опираясь на стандартные средства этой операционной системы.

Для современного программирования непременной особенностью является широкое использование цветовых возможностей мониторов. Достаточно скромные средства для этого в Unix связана с тем, что эта ОС становилась и внутренне развивалась в более ранний период, когда наличие цветного монитора было редкой особенностью.

Проблема использования цвета в Unix была решена с помощью управляющих последовательностей. Для задания цвета используются управляющие последовательности, последним символом которых служит латинская буква m. Сама управляющая последовательность имеет вид

esc[ цвет m

где компонент цвет задается десятичным числом согласно табл. 4.1.

 

Табл. 4.1.Кодирование цвета в управляющих последовательностях

Цвет Описание
  Отменить все атрибуты
  Повышенная яркость
  Черный символ
  Красный символ
  Зеленый символ
  Желтый символ
  Голубой символ
  Малиновый символ
  Бирюзовый символ
  Белый символ
  Черный фон
  Красный фон
  Зеленый фон
  Желтый фон
  Голубой фон
  Малиновый фон
  Бирюзовый фон
  Белый фон

 

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

esc[1;33;44m

Цвет, установленный управляющей последовательностью, действует до тех пор, пока другой подобной последовательностью он не будет переустановлен. В частности, после завершения работы программы очень удобно вернуться к стандартному цвету использования консоли: светло-серым символам на черном фоне. Для такого перехода проще всего выполнить управляющую последовательность esc[0 m.

Заметим, что параметры 30-47 соответствуют стандарту 6429 Международной организации по стандартизации (ISO). Нетрудно видеть, что средства Unix обеспечивают достаточно компактные средства управления цветом, но, к сожалению, для начинающих очень не наглядные.

 




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 687; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.