#ifndef __MY_LIB__ #define __MY_LIB__ #include #include /********************** Определения **************************/ #define MK_COL(txt,bkg) (((bkg) << 4) +(txt)) #define SPEC(ch) (!((ch) & 0x00FF)) #define MOUSE(ch) (((unsigned)((ch) >> 8) - 0xFA) <= 3) #define GETK0(ch) ((ch) >> 8) #define MAKE_K0(ch) ((ch) << 8) #define END_SPRITE 1111 #define ML_STANDARD_MODE 0x0000 #define ML_4DIRECT 0x0001 #define ML_NOLOOPS 0x0002 #define ML_NOHIDE 0x0004 #define ML_NOMOUSEEXTESC 0x0008 /* Специальные коды возврата для выбора из меню */ #define CH_REDRAW_LEFT 0 /* Символ из choose_right, к-рый заставляет перерисовать левое меню */ #define RC_MOUSEBUTTON 0xFA00 #define CH_MOUSEBUTTON 0xFA /* Этот код возвращается wait() при нажатии кнопки мыши */ #define RC_MOUSERELEASE 0xFB00 #define CH_MOUSERELEASE 0xFB /* Этот код возвращается wait() при отжатии кнопки мыши */ #define RC_MOUSEMOTION 0xFC00 #define CH_MOUSEMOTION 0xFC /* Этот код возвращается wait() при движении мыши */ /************************** Типы ********************************/ typedef enum { NO_BORDER, SIMPLE_BORDER, DOUBLE_BORDER , THICK_BORDER, VERY_THICK_BORDER } border_t; typedef enum { STRING, INT, DOUBLE, ENUM } vtype_t; /* тип переменной */ typedef enum { FALSE=0, TRUE=1 } boolean; typedef enum { NO_DEMO, PREPARE_DEMO, RUN_DEMO } demo_mode; typedef char string[80]; typedef unsigned ml_retcode_t; typedef struct { int *variable; char **names; } ENUM_def_t; typedef struct { int x,y,maxlen; /* координаты */ int act_col,pas_col; char *prompt; vtype_t type; char *hk,*hk0; void *variable; /* ссылка на переменную */ int (*valid)(void *); /* ссылка на функцию проверки значения */ } edit_field_t; typedef struct menu_item { char *s, *comment; edit_field_t *edf; int menx, meny, act_col, pas_col, disabled_col, enabled_now; ml_retcode_t retcode; char *hotkeys,*hotkeys0; } menu_item_t; typedef struct menu{ menu_item_t *items; int winx, winy, comwx, comwy, active_now, cur_item, nitems; unsigned mode; string hotkeys,hotkeys0; } menu_t; typedef struct window{ int x1, y1, x2, y2, xpos, ypos, act_col, bor_col; void *frame; int active_now; border_t border; char *up_name, *down_name; } window_t; typedef struct fchk_wc{ int border,border_col,string_col,file_col, x1,y1,x2,y2,right_menu_width; char *hk,*hk0; void (*show_right_menu)(menu_t *, void *, struct fchk_wc *); ml_retcode_t (*choose_right)(menu_t *, void *, struct fchk_wc *); } fch_wndclass_t; typedef struct { enum { VID_TEXT_MODE, VID_GRAPH_MODE, VID_SPEC_MODE } video_mode; void (*absfwritexy)(int x, int y, int color, char *str); void (*settextcolor)(int color); int (*gettextcolor)(void); void (*set_scr_state)(window_t *wnd); void (*draw_window)(window_t *wnd, int x1, int y1, int x2, int y2, int col, int bor_col, border_t border, char *up_name, char *down_name); void (*clear_window)(void); char * (*saveframe)(int x1, int y1, int x2, int y2); void (*restoreframe)(char *fr, int x1, int y1, int x2, int y2); int (*getwidth)(char *str); int (*getheight)(char *str); void (*show_cursor)(void); void (*hide_cursor)(void); void (*emulate_cursor)(int x, int y); int (*getmaxX)(void); int (*getmaxY)(void); boolean (*mouse2text)(int *x, int *y); int (*text2scrX)(int x); int (*text2scrY)(int y); boolean (*initialize)(void *p); boolean (*close)(void *p); } video_interface_t; typedef struct { int gd,gm; void (*mem_driver)(void); char *bgidir; } init_video_par_t; typedef struct { int x,y; } POINT; /************************ Переменные ********************************/ extern char *option_str; extern int errno; extern boolean mouse_present; /********************************************************************/ /************************** Файлы ***********************************/ /********************************************************************/ /************************* ML_LIB.C *********************************/ void error(char *msg); FILE *Fopen(char *name, char *mode); void check_argc(int argc, int need, char *msg); void *Malloc(size_t size,char *msg); void beep(void); char *substr(char *str, int len); void print_arr(char far*, unsigned); char *repeatstr(int q, char *str); double fmin(double a, double b); double sqr(double a); double fmax(double x, double y); char *fillchar(char *s,int len, char ch); int eqstr(char *s1, char *s2); void addspaces(char *buf, int n); void gethex(char *s, char *r, int lmax); int in_str(unsigned ch, char *p); void set_scr_state(struct text_info *ti); void store_scr_state(void); void restore_scr_state(void); void store_scr(char **scr_mem); void restore_scr(char **scr_mem); void init_my_timer(void); double get_timer(void); /***************************** ML_GR.C *****************************/ void printscreen(FILE *F, int x1, int y1, int x2, int y2, int ramka, char *header); int int2color(int i); void init_graph(char *path); void close_graph(void); void save_screen(char *fname, int x1, int y1, int x2, int y2); void traectoria(double *X, double *Y, int fromI, int toI, int ixmin, int iymin, int ixmax, int iymax, char *xname, char *yname, char *header); void traectories(double *X, double **Y, int fromI, int toI, int Ny, int ixmin, int iymin, int ixmax, int iymax, char *xname, char *yname, char *header); void show_sprite(int x, int y, POINT *sprite, char *pix_mem); void restore_sprite(int x, int y, POINT *sprite, char *pix_mem); int sprite_len(POINT *sprite); /****************************** ML_CMDL.C ***************************/ int is_option(char *option); char *get_option_str(char *dest, char *prompt); long get_int_option(char *prompt); char *set_option_str_len(unsigned len); void accept_options(char *old_options, char *f_opt); double get_double_option(char *prompt); void concat_argv(char *com_buf, int i0, int argc, char **argv); void free_options(void); /******************************* ML_WIN.C ****************************/ void chkinit(void); void hide_cursor(void); void show_cursor(void); void win_check(int x1, int y1, int x2, int y2); void absfwritexy(int x, int y, int color, char *str); void winfwritexy(int x,int y, int color, char *str); int getwidth(char *str); int getheight(char *str); void writelongstrxy(int x, int y, char *str); void set_active_window(window_t *wnd); int text2scrX(int x); int text2scrY(int y); void mk_w_str(int x1, int x2, char *buf, char *name); void show_window(window_t *wnd, int x1, int y1, int x2, int y2, int col, int bor_col, border_t border, char *up_name, char *down_name); void show_window_bar(window_t *wnd, int x1, int y1, int x2, int y2, int col, int bor_col, border_t border, char *up_name, char *down_name); void clear_window(void); void erase_window(window_t *wnd); int getcurcolor(void); window_t *getcurwin(void); void ml_gotoxy(int x, int y); void show_edf(edit_field_t *ef, int col); ml_retcode_t edit_value(edit_field_t *ef); void edit_values(int n, edit_field_t *fields); int ask_mouse_event(unsigned *x, unsigned *y); int ask_mouse_xy(unsigned *x, unsigned *y); boolean ml_issignal(void); void set_demo_mode(demo_mode mode, char *fname, unsigned del_time); demo_mode get_demo_mode(void); void close_demo_mode(void); ml_retcode_t wait(void); int ml_wherex(void); int ml_wherey(void); void message_box(int x, int y, char *msg, int border_col, int text_col); ml_retcode_t get_answer(int x, int y, char *msg, char *ans, char *ans0, int border_col, int text_col); void paste_comm(menu_t *mnu, menu_item_t *item, int active); void hide_current_item(menu_t *mnu); void menu_down(menu_t *mnu); void menu_next(menu_t *mnu); void menu_up(menu_t *mnu); void menu_pred(menu_t *mnu); void show_menu(menu_t *mnu, int winx, int winy, int comwx, int comwy, int cur_item, menu_item_t *items, int nitems, char *hotkeys, char *hotkeys0); void wipe_menu(menu_t *mnu); void set_menu_mode(menu_t *mnu, unsigned mode); void set_item(window_t *wnd, menu_t *mnu, int item, boolean show); int mouse_in_menu(window_t *wnd, menu_t *mnu, int show); ml_retcode_t choose_from_menu(menu_t *mnu); boolean check_field_changed(void); /* #define designer(wnd,x1,y1,x2,y2,c,bc,brd,un,dn) \ _designer(wnd,#wnd,x1,y1,x2,y2,c,bc,brd,un,dn) */ boolean set_video_interface(video_interface_t *interface, boolean do_close_old, void *close_old_par, boolean do_init, void *init_par); video_interface_t *get_cur_interface(void); boolean set_start_interface(video_interface_t *interface, boolean do_init, void *init_par); boolean close_video_interface(boolean do_close_old, void *close_old_par); /*********************** ML_FCH.C **********************************/ ml_retcode_t get_fname_rmenu( struct fchk_wc *wc, char *up_name, char *down_name, char *mask, char *filename, void *show_par, void *CHOOSE_PAR); char *getfilename(char *mask, char *name); /*********************** EGAVGA.OBJ ********************************/ void egavga_driver(void); #endif