Системное программное обеспечение персональных ЭВМ


Пример 7



Пример 7

/*== ПРИМЕР 9.5 ==*/ /*=================== Управление курсором ================*/ #include <dos.h>

#define byte unsigned char #define word unsigned int #define Esc 27 #define Enter 13 #define Up 0x48 #define Down 0x50 #define Left 0x4b #define Right 0x4d #define Home 0x47 union REGS rr; main() { word posc; /* Позиция курсора в линейных координатах */ word post; /* Позиция вывода текста в линейных коорд. */ byte y,x; /* Позиция в координатах x,y */ byte s1, s2; /* Нач.и кон.строки образа курсора */ byte mode=0; /* Атрибут мигания */ char *modes[]= { "нормальный", "невидимый" }; byte flag; /* признак окончания */ /*== 1. Перемещение курсора ==*/ for(clrscr(),posc=post=0; ;posc++) { y=post/80; x=post%80; setcurpos(x,y); printf("текст->%d,курсор->%d ",post,posc); getcurpos(&x,&y); post=y*80+x; y=posc/80; x=posc%80; setcurpos(x,y); if (getch()==27) break; } /*== 2. Удаление курсора ==*/ clrscr(); printf("Курсор удален\n"); setcurpos(1,26); getch(); /*== 3. Управление формой курсора ==*/ clrscr(); printf("Изменение формы курсора\n"); printf(" \\ s1 "); for(s1=0; s10) s1--; else s1=8; break; case Up: if (s2>0) s2--; else s2=13; break; case Right: if (++s1>9) s1=0; break; case Down: if (++s2>13) s2=0; break; case Home: s1=7; s2=13; break; } } } } /*==== Установка курсора ====*/ setcurpos(byte x,byte y) { rr.h.ah=2; /* функция 2 */ rr.h.bh=0; /* страница 0 */ rr.h.dh=y; /* координата y */ rr.h.dl=x; /* координата x */ int86(0x10,&rr,&rr); } /*==== Чтение позиции курсора ====*/ getcurpos(byte *x,byte *y) { rr.h.ah=3; /* функция 3 */ rr.h.bh=0; /* страница 0 */ int86(0x10,&rr,&rr); *y=rr.h.dh; /* координата y */ *x=rr.h.dl; /* координата x */ } /*==== Изменение формы курсора ==*/ curform(byte s1, byte s2, byte mode) { rr.h.ah=1; /* функция 1 */ rr.h.ch=(mode

Набор средств BIOS и DOS для вывода на терминал весьма богат.

В прерывании BIOS 0x10 функции 8 и 9 - соответственно чтение и вывод символа и атрибута в текущей позиции курсора (курсор при этом не сдвигается); в BH задается номер страницы, в AL получается/задается код символа, в AH - цветовой атрибут.


- Начало -  - Назад -  - Вперед -