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

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


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

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


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

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

Предыдущая страница Следующая страница
1 ... 5 6 7 8 9 10 11  12 13 14 15 16 17 18 ... 43
reverse_video.



                   void close_all()
                   ----------------

     Эта функция уничтожает все образованные окна.



            void move_windom(WINDOW *wnd, int x, int y)
            -------------------------------------------

     Эта функция перемещает  окно таким  образом, что его верхний
левый угол устанавливается в символьных координатах, заданных x и
у. Эта функция может быть использована только для слоеных окон.



             void rmove_window(WINDOW *wnd, int x, int y)
             --------------------------------------------

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

                    void forefront(WINDOW *wnd)
                    ---------------------------

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



                    void rear_window(WINDOW *wnd)
                    -----------------------------

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



         int get_selection(WINDOW *wnd, int sel, char *keys)
         ---------------------------------------------------

     Эта функция позволяет использовать окно в  качестве меню. Вы
должны создать окно  и записать  в него  несколько  строк текста,
скажем,  функцией wprintf.  Вы можете использовать set_colors для
установки  значений цветов ACCENT  в окне (по  умолчанию - черные
буквы на белом фоне).  Затем вы  вызываете get_selection. Функция
использует  окно  в   качестве  меню,   каждая   строка  которого
представляет  альтернативу  выбора.  Альтернативы  подсвечиваются
цветом  ACCENT.   Целочисленное  значение  sel  используется  для
первоначального размещения яркого блока курсора меню на  одной из
альтернатив.  Значение 1  соответствует первой альтернативе,  2 -
второй и т.д.

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

     Cсылка keys  указывает  на  строку  значений клавиш, которые
могут использоваться для выбора из меню.  Некоторые системы  меню
разрешают  пользователю  применять   нажатия   клавиш   наряду  с
перемещением  блока  курсора.  Для  выключения  этой  возможности
передайте параметру keys ссылку NULL.

     Эта функция возвращает целочисленное значение, равное номеру
выбранной в меню альтернативы.  Значение обычно равняется единице
и более,  однако,  если  пользователь  нажимает  клавишу  <Ключ>,
функция  возвращает нуль. Функция будет также возвращать значения
FWD  или  BS,  если   пользователь  нажимает  клавиши  управления
курсором вправо или влево. Эти значения определены в keys.h.



                void error_message(char *s)
                ---------------------------

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

                  void clear_message()
                  --------------------

     Эта функция удаляет  сообщение  об  ошибке,  если  оно  было
выдано функцией error_message.



          Листинги оконных функций
-----------------------------------------------------------------

     Данные листинги содержат исходные  файлы  функций  поддержки
окна. Приводятся два  листинга:  twindow.h  и  twindow.c.  Каждый
листинг сопровождается описанием его содержания.


            Исходный листинг: twindow.h
            ---------------------------

     Листинг 6.1,  twindow.h,  определяет  оконные  структуры   и
содержит  прототипы  для  функций.  Вы должны включать их в любую
исходную программу, которая использует оконные функции.

Листинг 6.1: twindow.h

/* twindow.h */
/*  Выделите это определение из комментария для стековых окон,
*   но не для слоеных окон.
*
* #define FASTWINDOWS
*
*/
/* window colors */

#define RED   4
#define GREEN 2
#define BLUE  1
#define WHITE (RED+GREEN+BLUE)
#define YELLOW (RED+GREEN)
#define AQUA (GREEN+BLUE)
#define MAGENTA (RED+BLUE)
#define BLACK 0
#define BRIGHT 8
#define DIM 0

#define BORDER 0
#define TITLE 1
#define ACCENT 2
#define NORMAL 3
#define ALL 4

#define TRUE 1
#define FALSE 0
#define ERROR -1
#define OK 0

/* оконные управляющие структуры */
typedef struct field {    /* описание поля ввода данных  */
    char *fmask;          /* маска поля ввода данных */
    int fprot;            /* защита поля */
    char *fbuff;          /* буфер поля */
    int ftype;            /* тип поля */
    int from;             /* строка поля */
    int fcol;             /* столбец поля */
    void (*fhelp)();      /* функция подсказки поля */
    char *fhwin;          /* функция подсказки окна */
    int flx, fly;         /* расположение подсказки окна */
    int (*fvalid)();      /* функция заполнения поля */
    struct field *fnxt;   /* следующее поле выдачи */
    struct field *fprv;   /* предыдущее поле выдачи */
} FIELD;
typedef struct _wnd {
    int _wv;            /* истина, если окно видимо */
    int _hd;            /* истина, если окно скрыто */
    char *_ws;         /* указывает на блок сохранения окна */
    char *_tl;         /* указывает на заголовок окна */
    int _wx;           /* nv x координата */
    int _wy;           /* nv y координата */
    int _ww;           /* ширина окна */
    int _wh;           /* высота окна */
    int _wsp;          /* указатель прокрутки */
    int _sp;           /* указатель выбора */
    int _cr;           /* позиция  х  курсора */
    int btype;         /* тип рамки */
    int wcolor[4];     /* цвета окна */
    int _pn;           /* предыдущий нормальный цвет */
    struct _wnd *_nx;  /* указывает на следующее окно */
    struct _wnd *_pv;  /* указывает на предыдущее окно */
    FIELD *_fh;        /* указывает на 1-е поле ввода данных */
    FIELD *_ft;    /* указывает на последнее поле ввода данных */
} WINDOW;
typedef struct w_menu {
    char *mname;
    char **mselcs;
    void (**func)();
} MENU;
#define SAV      (wnd->_ws)
#define WTITLE   (wnd->_tl)
#define COL      (wnd->_wx)
#define ROW      (wnd->_wy)
#define WIDTH    (wnd->_ww)
#define HEIGHT   (wnd->_wh)
#define SCROLL   (wnd->_wsp)
#define SELECT   (wnd->_sp)
#define WCURS    (wnd->_cr)
#define WBORDER  (wnd->wcolor[BORDER])
#define WTITLEC  (wnd->wcolor[TITLE])
#define WACCENT  (wnd->wcolor[ACCENT])
#define WNORMAL  (wnd->wcolor[NORMAL])
#define PNORMAL  (wnd->_pn)
#define BTYPE    (wnd->btype)
#define NEXT     (wnd->_nx)
#define PREV     (wnd->_pv)
#define WCOLOR   (wnd->wcolor)
#define VISIBLE  (wnd->_wv)
#define HIDDEN   (wnd->_hd)
#define FHEAD    (wnd->_fh)
#define FTAIL    (wnd->_ft)
#define NW       (wcs[wnd->btype].nw)
#define NE       (wcs[wnd->btype].ne)
#define SE       (wcs[wnd->btype].se)
#define SW       (wcs[wnd->btype].sw)
#define SIDE     (wcs[wnd->btype].side)
#define LINE     (wcs[wnd->btype].line)

/* ПРОТОТИПЫ ФУНКЦИЙ И МАКРОСЫ */

/* общецелевые функции и макросы */

void clear_screen(void);
int vmode(void);
void cursor(int, int);
void curr_cursor(int *, int *);
int cursor_type(void);
void set_cursor_type(int);
int get_char(void);
int scroll_lock(void);
void vpoke(unsigned, unsigned, unsigned);
int vpeek(unsigned, unsigned);

/* оконные функции и макросы */
WINDOW *establish_window(int, int, int, int);
void set_border(WINDOW *, int);
void set_colors(WINDOW *, int, int, int, int);
void set_intensity(WINDOW *, int);
void set_title(WINDOW *, char *);
void display_window(WINDOW *);
void delete_window(WINDOW *);
void clear_window(WINDOW *);
void hide_window(WINDOW *);
void wprintf(WINDOW *, char *, ...);
void wputchar(WINDOW *, int);
void close_all(void);
void wcursor(WINDOW *, int x, int y);
void error_message(char *);
void clear_message(void);
int get_selection(WINDOW *, int, char *);

#define reverse_video(wnd) wnd->wcolor[3]=wnd->wcolor[2]
#define normal_video(wnd) wnd->wcolor[3]=wnd->_pn
#define rmove_window(wnd,x,y) repos_wnd(wnd, x, y, 0)
#define move_window(wnd,x,y) repos_wnd(wnd, COL-x, ROW-y, 0)
#define forefront(wnd) repos_wnd(wnd, 0, 0, 1)
#define rear_window(wnd) repos_wnd(wnd, 0, 0, -1)

/* внутренние для оконных процессов */
void accent(WINDOW *);
void deaccent(WINDOW *);
void scroll(WINDOW *, int);
void repos_wnd(WINDOW *, int, int, int);
void acline(WINDOW *, int);
#define accent(wnd) acline(wnd, WACCENT)
#define deaccent(wnd) acline(wnd, WNORMAL)
#define clr(bg,fg,in) ((fg)|(bg<<4)|(in))
#define vad(x,y) ((y)*160+(x)*2)
#ifdef FASTWINDOWS
#define cht(ch,at) (((ch)&255)|((at)<<8))
#define displ(w,x,y,c,a) vpoke(VSG,vad(x+COL,y+ROW),cht(c,a))
#define dget(w,x,y) vpeek(VSG,vad(x+COL,y+ROW))
#define verify_wnd(w) (*(w)=listtail)!=0
#else
void displ(WINDOW *wnd, int x, int y, int ch, int at);
#endif
/* функция редактора */
void text_editor(WINDOW *, char *, unsigned);

/* функция меню */
void menu_select(char *name, MENU *mn);

/* функция подсказки */
void load_help(char *);
void set_help(char *, int, int);

/* функция ввода данных */
void init_template(WINDOW *);
FIELD *establish_field(WINDOW *, int, int, char *, char *, int);
void clear_template(WINDOW *);
void field_tally(WINDOW *);
int data_entry(WINDOW *);
void wprompt(WINDOW *, int, int, char *);
void error_message(char *);
void clear_notice(void);
void field_window(FIELD *, char *, int, int);
#define field_protect(f,s)   f->fprot=s
#define field_help(f,h)      f->fhelp=h
#define field_validate(f,v)  f->fvalid=v


          Описание программы: twindow.h
-----------------------------------------------------------------

     Глобальная переменная    FASTWINDOWS    определена    внутри
комментария  в  представленной  программе.  Включение  переменной
рассчитано  на  применение  стековой  оконной  конфигурации.  Без
изменений  при   компиляции   будет   принята   слоеная   оконная
конфигурация.  Для компиляции стековой оконной системы необходимо
выделить оператор #define из комментария.

     Структура   FIELD  используется  для определения полей ввода
данных  внутри  области данных  в окнах.  Этот  процесс  описан в
Главе 8.

     Структура  WINDOW  описывает окно для системы . Каждому окну
назначается одна структура этого типа.

     Структура    MENU    используется  программным  обеспечением
оконных меню  в Главе 10.  Должен быть  массив  структур  MENU  с
одним элементом для каждого проталкиваемого вниз меню.

     Список   операторов    #define   используется  для  придания
операторам  в   twindow.c  лучшей читаемости. Мнемонические имена
соответствуют элементам   структуры    WINDOW,  указанной ссылкой
wnd.  Все функции в   twindow.c  используют  имя  этой  ссылки по
соглашению.

     twindow.h   содержит  прототипы  для  всех  оконных функций,
которые будут вызываться прикладными программами.

              Исходный листинг: twindow.c.
              ----------------------------

     Листинг  6.2  -  это   twindow.c.  Он содержит все описанные
ранее в этой  главе  функции.  Вы  должны  откомпилировать  его и
связывать  его  объектный  модуль  с  любой  программой,  которая
использует окна.  Поскольку он вызывает функции из   ibmpc.c, его
объектный  модуль  должен  быть  также  включен  в редактирование
связей.

Листинг 6-2: twindow.c

/* twindow.c */
#include 
#include 
#include 
Предыдущая страница Следующая страница
1 ... 5 6 7 8 9 10 11  12 13 14 15 16 17 18 ... 43
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама