#define NO_SIM 0xff

#define     BLACK   0x00
#define     BLUE    0x01
#define     GREEN   0x02
#define     CYAN    0x03
#define     RED     0x04
#define     MAGENTA 0x05
#define     BROWN   0x06
#define     LIGHTGRAY 0x07
#define     DARKGRAY  0x08
#define     LIGHTBLUE 0x09
#define     LIGHTGREEN 0x0A
#define     LIGHTCYAN 0x0B
#define     LIGHTRED 0x0C
#define     LIGHTMAGENTA 0x0D
#define     YELLOW 0x0E
#define     WHITE 0x0F
#define     BLINK 0x80

#define YES 0x01
#define NO 0x00

#define MODE unsigned char
#define CHAR signed char
#define MAX_BUF  9            /*Максимальная длина буфера клавиатуры*/
#define KEY unsigned int     /*Определяем тип для работы с символами*/
#define Get_Key_BIOS   0x00  /*Функция BIOS считывания кода нажатой клав.*/
#define Chack_Key_BIOS 0x02  /*Функция BIOS проверки состояния клавиш*/

#define LEFT    0x4b00
#define RIGHT   0x4d00
#define ESC     0x001b
#define DOWN    0x5000
#define UP      0x4800
#define PAGE_UP 0x4900
#define PAGE_DO 0x5100
#define HOME    0x4700
#define END     0x4F00
#define F1      0x3B00
#define TAB     0x0009
#define ENTER   0x000D
#define S_TAB   0x0F00
#define S_BAR   0x0020

typedef  void ( *FUN )( void );       //указатель на функцию

struct MENU {
 MODE x1,y1,x2,y2;    // Место  вывода
 MODE kol;      // Количество пунктов меню
 MODE *keys;    // "Горячие клавиши"
 MODE color1,color2, // Основной и выделенный цвет строки
      bkcolor;       // Цвет фона меню
 MODE Index,  // Индекс помощи для 1 пункта меню
      Save,   // Сохранение
      Setup;  // Установки 
};

struct MENUITEM {
 MODE *str;   // Строка текста меню
 MODE zam;    // Открыт ли пункт меню
 FUN  sf;     // Указатель на функцию обработки пункта
};

#define DOWN_DIR 0x01
#define UP_DIR 0x00

extern KEY  Get_Key( void );
extern void Set_Key( KEY kol, ... );
extern void Clear_Buf( void );
extern KEY Hit_Key (void);
extern char textmode (void);
extern char set_attr (char col, char bk);
extern void write_char (char x, char y, char ch);
extern void write_string (char x, char y, char *str, char attr);
extern void clear (char x1,char y1,char x2,char y2);
extern void center_string  (char x, char y1, char y2, char *str);
extern void change_attr (char x1, char y1, char x2, char y2, char bkcolor);
extern void save (char x1,char y1,char x2,char y2);
extern void restore (char x1,char y1,char x2,char y2);
extern void box (char x1, char y1, char x2, char y2, char sort);
extern void window (char x1,char y1,char x2,char y2);

extern void goto_xy(char xpos,char ypos);
extern void show_cursor (MODE swit);
extern void CURSOR_ON(void);
extern void CURSOR_OFF(void);
extern void ms_state(void);
extern int ms_release(void);
extern void ms_move(MODE, MODE);
extern MODE Init_Mouse (void);
extern MODE AnyClick (void);
extern MODE Mouse_In_Field (MODE X1,MODE Y1, MODE Xsize, MODE Ysize,
 MODE Xnum, MODE Ynum, MODE Xdop, MODE Ydop, MODE *I, MODE *J);
extern MODE Fun_Bar_Keys (char Num_Keys,KEY *Bar_Keys,MODE *Pos_Keys);

extern MODE Print( MODE x, MODE y, MODE color1, MODE color2, MODE *s );
extern MODE Find_Key( MODE *str, MODE sim );
extern void Fun_Bar( char *str );
extern void Nop(void);
extern void Close_System (void);

extern void Help (MODE);
extern MODE Popup (MENU *, MENUITEM *);

extern FUN Ext_Function;

extern char Mouse,
	    MouseX,MouseY,
	    buttons;
extern MODE WIN_X1,WIN_Y1,WIN_X2,WIN_Y2;
extern MODE FILLER,
	    ATTR,
	    SHADOW,
	    EXPLODE;
