CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
Display - package пакет отображения
Описание
Дисплейный пакет обеспечивает быстрый ввод/вывод на экран PC и надежную совместимость. Процедуры пакета пишут непосредственно в видео память, выигрывая на скорости. Эти процедуры не пойдут на компьютерах, не являюшщихся совместимыми с IBM PC по принципам отображения или в части BIOS. Ниже приведены глоба- лы, которые инициализируются при вызове disp_open(). Эти глобалы следует только читать: unsigned char disp_mono - 0 для цветного и 1 для монохромного адаптера unsigned char disp_snowycga - отличен от 0 для "снежного" IBM CGA unsigned char disp_mode - текущий режим отобра- жения (Смотрите disp_setmode()). unsigned char disp_inited - отличен от 0, если дисплейный пакет инициализирован. unsigned char disp_ega - отличен от 0 для IBM EGA или VGA адаптеров. unsigned disp_base - адрес сегмента видео памяти (MDA = 0B000)(CGA = 0B800). int disp_numrows - количество отображаемых строк int disp_numcols - количество отображаемых столб- цов int disp_cursorrow - номер строки, в которой пози- ционирован курсор int disp_cursorcol - номер столбца, задающего по- зицию курсора.
Использование
#include <disp.h> void disp_close(void); Выталкивает вывод и завершает использование пакета отображения. void disp_box(int type, int attr, unsigned row, unsigned col, unsigned brow, unsigned rcol); Рисует рамку с бордюром type и атрибутом attr. На- чиная с левого верхнего угла в row,col и кончая в нижнем правом угле в brow,rcol. Значения type определяют: 0 - двойную бордюрную линию 1 - одинарную бордюрную линию 2 - толстый бордюр. void disp_eeol(void); Чистит остаток текущей строки, включая литеру под курсором. void disp_eeop(void); Чистит экран, начиная с текущей позиции курсора. void disp_endstand(void); Выключает инверсный режим отображения. Должна вызы- ваться после disp_startstand. void disp_flush(void); Выталкивает вывод на экран. Бывает необходима для подготовки экрана к ожидаемому вводу пользователя. int disp_getmode(void); Возвращает текущий режим отображения (Смотрите disp_setmode). void disp_move(int row, int col); Сдвигает курсор к позиции row.col. Позиция 0,0 есть верхний левый угол дисплея. void disp_open(void); Инициализирует дисплейный пакет. В процессе обраще- ния определяются тип дисплея и адресация экранной памяти. Инициализируются все глобалы. unsigned disp_peekw(int row, int col); Считывает атрибут литеры в заданной позиции дис- плея. unsigned disp_peekbox(unsigned * save, unsigned row, unsigned col, unsigned brow, unsigned rcol); Запоминает прямоугольную область экрана, определен- ную верхним левым углом (row,col) и нижним правым (brow,rcol), в буфере save. void disp_pokebox(unsigned * save, unsigned row, unsigned col, unsigned brow, unsigned rcol); Восстанавливает прямоугольную область экрана, опре- деленную верхним левым углом (row, col) и нижним правым (brow, rcol), из буфера save. void disp_pokew(int row, int col, int attr,charc); Записывает литеру с указанным атрибутом в специфи- цированную позицию. void disp_printf(char *format, ...); Осуществляет непосредственный форматный вывод на экран (Смотрите описание функции printf). void disp_putc(int c); Записывает литеру c в текущую позицию экрана, ис- пользуя атрибут литеры, установленный посредством disp_setattr(). Отрабатывает табуляцию, перевод строки, возврат каретки, backspace и т.д. корректно. void disp_reset43(void); Сбрасывает текстовый режим 80х43 EGA назад в ре- жим 80х25. void disp_scroll(int lines, unsigned ulrow, unsigned ulcol, unsigned lrrow, unsigned lrcol, unsigned attr); Прокручивает содержимое экрана вверх: lines - количество строк прокрутки ulrow - верхний ряд двигаемой области ulcol - верхний левый столбец lrrow - нижний ряд двигаемой области lrcol - нижний правый столбец attr - видеоатрибут для остальных областей (частей экрана). void disp_set43(void); Устанавливает текстовый режим отображения 80х43 EGA. Не должна использоваться, пока дисплейный пакет открыт. Эта функция требует наличия адаптеров EGA или VGA. Действительное количество строк на экране записывает в disp_numrows. void disp_setattr(int attr); Устанавливает атрибут литер, записываемых посред- ством disp_putc() и disp_printf(). Ниже приведен список атрибутов, описанных в файле disp.h : DISP_REVERSEVIDEO ИНВЕРСНЫЙ DISP_NORMAL НОРМАЛЬНЫЙ DISP_UNDERLINE ПОДЧЕРКИВАНИЕ DISP_NONDISPLAY НЕ ВЫСВЕЧИВАЕМЫЙ Следующие атрибутные биты могут быть добавлены опе- рацией OR: DISP_INTENSITY ИНТЕНСИВНЫЙ DISP_BLINK МИГАНИЕ void disp_setcursortype(int startline*256+endline); Устанавливает размер курсора. По умолчанию, DOS ис- пользует: начало конец использование Monochrome 11 12 11*256+12 Color 6 7 6*256+7 void disp_setmode(unsigned char mode); Устанавливает режим отображения. Если потребуется не текущий режим отображения, вызов функции должен предшествовать обращению к disp_open(). Ниже приве- дены номера режимов: 0 - 40х25 черно-белый алфавитно-цифровой EGA адаптер 1 - 40х25 цветной алфавитно-цифровой EGA адаптер 2 - 80х25 черно-белый алфавитно-цифровой EGA адаптер 3 - 80х25 цветной алфавитно-цифровой EGA адаптер 4 - 320х200 4-цветный графический EGA адаптер 5 - 320х200 черно-белая графика на цветном EGA адаптере 6 - 640х200 черно-белая графика на цветном EGA адаптере 7 - 80х25 черно-белый алфавитно-цифровой на монохромном EGA адаптере D - 320х200 16-цветная графика на EGA адаптере E - 640х200 16-цветная графика на EGA адаптере F - 640х350 4-цветная графика на монохромном EGA адаптере 10 - 640х350 16-цветная графика на EGA адаптере void disp_startstand(void); Устанавливает инверсный режим отображения для всех последующих выводимых литер. Инверсный режим ото- бражения снимается обращением к disp_endstand(). void disp_usebios(void); Устанавливает режим записи литер на экран через BIOS, а не непосредственно в видео память дисплея. Это улучшает переносимость программы при снижении скорости работы. Вызов должен следовать за обраще- нием к disp_open().
Возвращаемое значение
disp_getmode возвращает текущий режим отображения.
Пример
#include <disp.h> #include <conio.h> char *string="Пример мигающей строки"; int cursor=((6*256)+11); main() { char ch; disp_open(); disp_startstand(); disp_printf("Строка выведена после обращения к disp_startstand\n"); disp_endstand(); disp_setattr(DISP_BLINK | DISP_NORMAL); disp_printf("%s\n", string); disp setattr(DISP_INTENSITY | DISP_NORMAL); disp_printf("Установлен атрибут высокой яркости\n"); disp setattr(DISP_NORMAL); disp_usebios(); disp_printf("Строка высвечена при помощи BIOS\N"); disp_printf("Меняем размер курсора"); disp_setcursortype(cursor); disp_flush(); ch = getch(); disp_close(); }
Рекомендация
Смотрите также printf, putc.