#define NO_SIM 0xff
 //Пустой символ
#define KOL_HELP 20
 // число статей помощи
#define MAX_HELP 1200
 // Размер буфера для текста помощи (текст в 48 колонок, 25 строк)

// Предопределенные статьи помощи:
#define GOTO_INDEX 0xFF
 // Переход к индексу помощи
#define NO_HELP KOL_HELP
 // Пустая статья
#define ABOUT_INPUT_STRING KOL_HELP+1
 // О возможностях  GetString
#define ABOUT_INPUT_WINDOW KOL_HELP+2
 // О возможностях GetText
#define ABOUT_SHOW_LIST KOL_HELP+3
 // О возможностях  Showlist
#define ABOUT_FILER KOL_HELP+4
 //О возможностях Filer
#define ABOUT_POPUP KOL_HELP+5
 //О возможностях Popup
#define ABOUT_HORMENU KOL_HELP+6
 //О возможностях HorMenu
#define ABOUT_PULLDOWN KOL_HELP+7
 //О возможностях PullDown
#define ABOUT_SWITCHER KOL_HELP+8
 //О возможностях Switcher
#define ABOUT_LISTSWITCHER KOL_HELP+8
 //О возможностях ListSwitcher
 //О возможностях MessageText - функция MessageBox
#define ABOUT_ANSWMENU KOL_HELP+9
 //О возможностях AnswMenu
#define ABOUT_SELECTDRIVE KOL_HELP+10
 //О возможностях SelectDrive

#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 COLOR unsigned char
#define MAX_BUF  9
 //Максимальная длина буфера клавиатуры
#define KEY unsigned int
 //Определяем тип для работы с символами
#define Get_Key_BIOS   0x00
 //Функция BIOS считывания кода нажатой клав.
#define Chack_Key_BIOS 0x02
 //Функция BIOS проверки состояния клавиш

// Типы линий
 // (LINE1_112 означает:
 // из одинарного края одинарная линия в двойной край т.п.)
#define LINE_111 0x08
#define LINE_112 0x09
#define LINE_121 0x0a
#define LINE_122 0x0b
#define LINE_211 0x0c
#define LINE_212 0x0d
#define LINE_221 0x0e
#define LINE_222 0x0f
 //Эти линии не имеют символов типа '├', '┤' на концах:
#define LINE_1   0x00
#define LINE_2   0x02

//Клавиши:
#define LEFT    0x4b00
#define RIGHT   0x4d00
#define CTRL_LEFT    0x7300
#define CTRL_RIGHT   0x7400
#define ESC     0x001b
#define DOWN    0x5000
#define UP      0x4800
#define PAGE_UP 0x4900
#define PAGE_DO 0x5100
#define HOME    0x4700
#define END     0x4F00
#define INS     0x5200
#define DEL     0x5300
#define F1      0x3B00
#define F2      0x3C00
#define F3      0x3D00
#define F4      0x3E00
#define F5      0x3F00
#define F6      0x4000
#define F7      0x4100
#define F8      0x4200
#define F9      0x4300
#define F10     0x4400
#define TAB     0x0009
#define ENTER   0x000D
#define CTRL_UP 0x8400
#define CTRL_DO 0x7600
#define S_TAB   0x0F00
#define S_BAR   0x0020
#define START   0x0001
//#define PSEUDO  0xFFFF
#define BS      0x0008
#define ALT_A   0x1E00
#define ALT_B   0x3000
#define ALT_C   0x2E00
#define ALT_D   0x2000
#define ALT_E   0x1200
#define ALT_F   0x2100
#define ALT_G   0x2200
#define ALT_H   0x2300
#define ALT_I   0x1700
#define ALT_J   0x2400
#define ALT_K   0x2500
#define ALT_L   0x2600
#define ALT_M   0x3200
#define ALT_N   0x3100
#define ALT_O   0x1800
#define ALT_P   0x1900
#define ALT_Q   0x1000
#define ALT_R   0x1300
#define ALT_S   0x1F00
#define ALT_T   0x1400
#define ALT_U   0x1600
#define ALT_V   0x2F00
#define ALT_W   0x1100
#define ALT_X   0x2D00
#define ALT_Y   0x1500
#define ALT_Z   0x2C00

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;     // Указатель на функцию обработки пункта
};

struct LIST {
 MODE kol,   // Количество строк
      zam;   // Выбранная строка
 MODE **str; // Строки
};

struct BUTTON {
 MODE x,y1,y2,        // Строка, столбец начала и конца
      zam,            // Флаг доступности кнопки
      color1,color2,  // Основной и выделенный цвет текста кнопки
      bkcolor,        // Фон самой кнопки
      bodcolor;       // Фон ограничителя кнопки
 KEY  key;            // Клавиша нажатия
 MODE *str;           // Текст
};

struct WINDOW {
 MODE x1,y1,x2,y2;    // Место вывода
 MODE *hdr,     // Заголовок окна
      *str;     // Строка текста
 MODE color1,color2, // Основной и выделенный цвет текста
      bkcolor;       // Цвет фона окна
 MODE Index,  // Индекс помощи для окна
      Save,   // Сохранение
      Setup;  // Установки
};

struct STRLIST {
 MODE x,y;              // Координаты заголовка поля
 MODE x1,y1;            // Координаты поля ввода
 MODE *hdr;             // Заголовок поля ввода
 MODE maxlen,           // Максимальная длина ввода
      color, bkcolor;   // Цвет вводимого текста и фона
 MODE kol;              // Количество строк буфера
 MODE **str;            // Строки ввода [kol]
 KEY key;               // "Горячая клавиша" для перехода к полю
};

#define DOWN_DIR 0x01
#define UP_DIR 0x00

extern KEY  Get_Key( void );
extern void Set_Key( KEY kol, ... );
extern void Set_Insert_Key( KEY kol, ... );
extern void Clear_Buf( void );
extern KEY Hit_Key (void);

extern char textmode (void);
extern void set_active_page (MODE);
extern void set_visual_page (MODE);
extern void Set_Window (MODE,MODE,MODE,MODE);
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 char read_char (char x, char y, char *attr);
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 size_cursor (MODE swit);
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 void Show_Button (BUTTON *);
extern MODE Push_Button (BUTTON *b);

extern void Clr_Scr (void);
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 Init_Date (void);

extern void Help (MODE);
extern MODE Popup (MENU *, MENUITEM *);
extern MODE HorMenu ( MENU *, MENUITEM *);
extern MODE PullDown (MENU *, MENUITEM *);
extern MODE Switcher (MENU *, MENUITEM *);
extern MODE ListSwitcher (MENU *, MENUITEM *, LIST *);

extern void MessageBox (void); // Только для внутреннего использования
extern MODE MessageText (WINDOW *);
extern MODE AnswMenu (MENU *);

extern MODE GetString (MODE,MODE,MODE *,MODE,MODE,MODE);
extern MODE GetText (MENU *, STRLIST *);
extern void HorizLine (MODE,MODE,MODE,MODE);
extern void VertLine (MODE,MODE,MODE,MODE);

extern MODE Filer (MODE *, MODE *, MODE);

extern MODE DrawVertBar (MODE, MODE, MODE);
extern MODE ChangeVertBar (int, int, MODE, MODE, MODE, MODE);
extern MODE MouseVertBar (MODE,MODE,MODE);

extern MODE DrawHorBar (MODE, MODE, MODE);
extern MODE ChangeHorBar (int, int, MODE, MODE, MODE, MODE);
extern MODE MouseHorBar (MODE, MODE, MODE);

extern void InitPath (MODE *);
extern MODE OpenHelp (MODE *);
extern void InitFileData (void);
extern void ShutFileData (void);
extern MODE ReadByte (void);
extern int ReadInt (void);
extern unsigned ReadWord (void);
extern MODE *ReadString (unsigned, MODE *);
extern void WriteByte (MODE);
extern void WriteInt (int);
extern void WriteWord (unsigned);
extern void WriteString (unsigned, MODE *);

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;
extern MODE DAY,MON; extern int YEAR;
extern MODE HelpFlag;
extern unsigned HelpStartOffset;
 //Дополнительное смещение от начала файла помощи до текста - для данных