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.
