Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Aliens Vs Predator |#6| We walk through the tunnels
Aliens Vs Predator |#5| Unexpected meeting
Aliens Vs Predator |#4| Boss fight with the Queen
Aliens Vs Predator |#3| Escaping from the captivity of the xenomorph

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Стивенс Ал. Весь текст 495.21 Kb

Техника программирования на турбо-С

Предыдущая страница Следующая страница
1 2 3 4 5 6 7  8 9 10 11 12 13 14 ... 43
{
   rg.x.ax = 0x0100;
   rg.x.bx = 0;
   rg.x.cx = t;
   int86( 16, &rg, &rg );
}
char attrib = 7;

/* очистить экран */
void clear_screen()
{
   cursor(0, 0);
   rg.h.al = ' ';
   rg.h.ah = 9;
   rg.x.bx = attrib;
   rg.x.cx = 2000;
   int86( 16, &rg, &rg );
}

/* возвратить режим работы видеоконтроллера*/
int vmode()
{
   rg.h.ah = 15;
   int86( 16, &rg, &rg);
   return rg.h.al;
}

/* проверить клавишу Scroll Lock */
int scroll_lock()
{
   rg.x.ax = 0x0200;
   int86( 0x16, &rg, &rg);
   return rg.h.al & 0x10;
}
void (* helpfunc)();
int helpkey = 0;
int helping = 0;

/* принять символ от клавиатуры */
int get_char()
{
   int c;
   while (1)   {
       rg.h.ah = 1;
       int86(0x16, &rg, &rg);
       if (rg.x.flags & 0x40)  {
   int86(0x28, &rg, &rg);
   continue;
       }
       rg.h.ah = 0;
       int86(0x16, &rg, &rg);
       if (rg.h.al == 0)
   c = rg.h.ah | 128;
       else
   c = rg.h.al;
       if (c == helpkey && helpfunc)   {
   if (!helping)   {
       helping = 1;
       (*helpfunc)();
       helping = 0;
       continue;
   }
       }
       break;
   }
    return c;
}

/* занести код символа и его атрибуты в видеопамять */
void vroke(unsigned vseg, unsigned adr, unsigned chr)
{
    if (vseg == 45056)     /* монохромный режим */
poke(vseg, adr, chr);
    else    {
_DI = adr; /* смещение до адреса символа в видеопамяти */
_ES = vseg; /* адрес сегмента видеопамяти */
asm cld;
_BX = chr; /* атрибуты и код символа */
_DX = 986; /* состояние видеопорта */

/* ждать начала обратного хода луча*/
do
    asm in al,dx;
while (_AL & 1);

/* ждать завершения обратного хода луча */
do
    asm in al,dx;
while (!(_AL & 1));
_AL = _BL;
asm stosb;    /* запомнить символ */

/* ждать начала обратного хода луча */
do
    asm in al,dx;
while (_AL & 1);

/* ждать завершения обратнога хода луча */
do
    asm in al,dx;
while (!(_AL & 1));
_AL = _BL;
asm stosb;     /* запомнить атрибуты */
     }
}

/* считать код символа и его атрибуты из видеопамяти */
int vpeek(unsigned vseg, unsigned adr)
{
    int ch, at;
    if (vseg == 45056)   /* монохромный режим */
return peek(vseg, adr);
    asm push ds;
    _DX = 986;    /* состояние видеопорта */
    _DS = vseg;   /* адрес сегмента видеопамяти */
    _SI = adr;/* смещение до адреса символа в видеопамяти */
    asm cld;

    /* ждать начала обратного хода луча */
    do
asm in al,dx;
    while (_AL & 1);

    /* ждать завершения обратного хода луча */
    do
       asm in al,dx;
    while (!(_AL & 1));
    asm lodsb;     /* считать символ */
    _BL = _AL;

    /* ждать начала обратного хода луча */
    do
asm in al,dx;
    while (_AL & 1);

    /* ждать завершения обратного хода луча */
    do
asm in al,dx;
    while (!(_AL & 1));
    asm lodsb;     /* считать атрибут */
    _BH = _AL;
    _AX = _BX;
    asm pop ds;
    return _AX;
}

/* keys.h */
#define HT          9
#define RUBOUT      8
#define BELL        7
#define ESC        27
#define SHIFT_HT  143
#define CTRL_T     20
#define CTRL_B      2
#define CTRL_D      4
#define ALT_D     160

#define F1   187
#define F2   188
#define F3   189
#define F4   190
#define F5   191
#define F6   192
#define F7   193
#define F8   194
#define F9   195
#define F10  196

#define HOME   199
#define UP     200
#define PGUP   201
#define BS     203
#define FWD    205
#define END    207
#define DN     208
#define PGDN   209
#define INS    210
#define DEL    211

#define CTRL_HOME   247
#define CTRL_BS     243
#define CTRL_FWD    244
#define CTRL_END    245



           Заключение
-----------------------------------------------------------------

     На основе  представленных  выше  функций  нижнего  уровня  в
разделе  5  будет  развиваться  и  объясняться концепция экранных
окон,  которая составляет следующий,  более  высокий,  уровень  в
многоуровневом наборе функций, описываемых в данной книге.

                        ГЛАВА 5
                        -------

                      Экранные окна
-----------------------------------------------------------------


    Этот раздел посвящен вопросу о том,  что  собой  представляют
экранные  окна  и как с ними работать.  Раздел 6 разъясняет,  как
можно использовать окна в ваших программах,  создаваемых в  среде
Турбо  Си,  а также содержит полную библиотеку функций управления
окнами.  Следующие  разделы   содержат   расширенную   библиотеку
функций,  поддерживающих работу с окнами для специфических целей,
как,  например,  для контекстно-чувствительного вывода справочной
информации,  редактирования текста, ввода данных и создания меню.

     После того,  как вы прочитали об экранных окнах, способах их
создания  и   применения,    постарайтесь  вспомнить  программные
системы,   которые   используют   подобные  средства.   Подумайте
также и о том,   какую пользу могли бы принести  эти средства для
тех  программных проектов,  в которых вы принимали участие. Затем
попытайтесь найти в этих функциях недостатки,  устранение которых
позволит   сделать функции более подходящими для вашей работы.  В
любой программе вы  почти всегда можете отыскать  эти недостатки.
В данном случае вы имеете большое  преимущество:  исходные тексты
функций  предоставлены,  вы  можете  модифицировать  их по своему
усмотрению.



           Экранное окно
-----------------------------------------------------------------

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

     Поскольку отображаемые  на  экране изображения формируются в
видеопамяти с прямым доступом процессора (так  называемый  способ
формирования   изображения путем  управления  содержимым памяти),
то  окна  на  экране  создаются мгновенно,   возникая  как  бы из
ничего,   и так же  мгновенно   исчезают.  Использование  окон  в
программах  позволяет  очень  удобно  отображать  различного рода
информацию.    Окна  появляются    и  сменяют  друг  друга:   они
появляются  на экране,   когда это необходимо,   и исчезают после
того,   как информация,   которую они  содержат,  становится  вам
ненужной.   Программа  может  отображать  столько  окон,  сколько
нужно программисту.  Окна могут иметь различные размеры,  цвета и
форматы.  Вы можете разместить окно в любом месте экрана, где это
необходимо.  Если окно становится ненужным,  то вы можете удалить
его,   и окно исчезнет,  а на его месте будет то, что было до его
появления.

     Каждый, кто занимался проблемами автоматизации  в  последние
годы,  обязательно  сталкивался  с  окнами.  ПЭВМ  IBM  PC сейчас
встречаются везде,  в любой сфере общественной и деловой жизни. И
почти  на каждой из  них работает  вездесущая программа Sidekick,
включающая калькулятор,  календарь и средства вызова  абонента  в

сети.  Каждый   из  этих компонентов отображает свою информацию с
помощью  окон,    которые  по  мере  необходимости  появляются  и
исчезают на экране, не разрушая того изображения, которое было до
их  появления.  Волшебники  в  области  разработки   программного
обеспечения  и  ее сбыта  из фирмы Bоrland International (это они
дали Вам Турбо Си)  внедрили окна во всеобщую  практику.  Если вы
никогда   не  видели окон,  то отложите книгу в сторону,  найдите
IBM PC и нажмите одновременно клавиши   и . Если вы не
увидите после этого  красно-бело-зелено-голубого  окна  на экране
(или зеленого и черного для монохромного экрана),   то спросите у
владельца машины,  почему у него не работает  программа Sidekick.
Если же окно небольшого размера все-таки появится,  начните с ним
игру. Сделав выбор в меню,  содержащемся в первом окне, вы можете
создать другое окно.  Вы можете перемещать окна,  нажимая клавишу
со стрелкой.   Вы можете удалять окна,  нажимая клавишу . Вы
можете  вызвать  на  экран  справочную  информацию  по  работе  с
программой, нажав клавишу .

     Из этого  раздела  вы  узнаете,  как работать с окнами,  как
накладывать их друг на друга,  как перемещать их по экрану и  как
их  использовать  в  своих программах,  разрабатываемых с помощью
Турбо Си.  Окна используются для отображения меню, информационных
и предупреждающих сообщений,  текстовых файлов, шаблона для ввода
данных  и  контекстно-чувствительных  информационных   сообщений.
Программные  системы  могут  использовать  окна  для  отображения
информации независимо от содержания других окон и размера области
пространства экрана,  занимаемой другими окнами.  Благодаря этому
можно обозревать на экране несколько окон,  даже если  каждое  из
них занимает больше половины экрана, потому что окна могут как бы
"всплывать" друг над другом.

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


ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦                                                           ¦
¦                                                           ¦
¦ ЪДДДДДДДДДДДДДДДДДДДДДДДДДД¬                              ¦
¦ ¦                          ¦                              ¦
¦ ¦                          ¦                              ¦
¦ ¦                          ¦                              ¦
¦ ¦                          ¦                              ¦
¦ ¦        Окно  A           ¦                              ¦
¦ ¦                          ¦                              ¦
¦ ¦                          ¦                              ¦
¦ ¦                          ¦                              ¦
¦ ¦                          ¦                              ¦
¦ АДДДДДДДДДДДДДДДДДДДДДДДДДДЩ                              ¦
¦                                                           ¦
¦                                                           ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

           Рис. 5.1  Экранное окно

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦             ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬                ¦
¦             ¦                            ¦                ¦
¦             ¦                            ¦                ¦
¦ ЪДДДДДДДДДДДґ                            ¦                ¦
¦ ¦           ¦          Окно  B           ¦                ¦
¦ ¦           ¦                            ¦                ¦
¦ ¦           ¦                            ¦                ¦
¦ ¦           ¦                            ¦                ¦
¦ ¦        Окн¦                            ¦                ¦
¦ ¦           ¦                            ¦                ¦
¦ ¦           ¦                            ¦                ¦
¦ ¦           АДДДДДДДДДДДДДДВДДДДДДДДДДДДДЩ                ¦
¦ ¦                          ¦                              ¦
Предыдущая страница Следующая страница
1 2 3 4 5 6 7  8 9 10 11 12 13 14 ... 43
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама