#include #include #include #include #include #include #include "ml.h" #include "kbd_keys.h" /* Пример программы с использованием окон из my_win.c */ #define pas (BLUE << 4) + LIGHTGRAY #define act (MAGENTA << 4) + WHITE char hk[]={ _ESC,_TAB,0 }, hk0[]={ 0,0 }; int valid1(void *p) { int k,good; k=*(int *)p; good=k >= 1900 && k < 2000; return good; } void demo_input(void) { menu_t mnu1; window_t w; ml_retcode_t ch; static double pi=3.1415926; static int ii=1992; static char str[]="Редактируйте...\0 ", fhk[]={ _ESC,_TAB,_ENTER,0}, fhk0[]={_F1,_DOWN,_UP,0}; static edit_field_t adfs[]={ { 0,0,20,MK_COL(WHITE,GREEN),pas,"",INT,fhk,fhk0,&ii,valid1}, { 0,0,20,MK_COL(WHITE,GREEN),pas,"",DOUBLE,fhk,fhk0,&pi,NULL}, { 0,0,20,act,pas,"",STRING,fhk,fhk0,str,NULL}, }; menu_item_t items1[]={ { "Целое :","Ввести год в нашем веке",adfs,1,1,act,pas,BLACK,1,1,"",""}, { "Веществ.:","Ввести вещественное число",adfs+1,1,2,act,pas,BLACK,1,2,"",""}, { "Строка :","Ввести строку",adfs+2,1,3,act,pas,BLACK,1,3,"",""}, { "Конец","Кончить и выйти",NULL,1,5,MK_COL(RED,LIGHTGRAY),MK_COL(WHITE,RED),BLACK,1,4,"",""}, }; show_window(&w,13,10,53,19,GREEN,MK_COL(YELLOW,BLUE),DOUBLE_BORDER,"","ESC - выход"); cprintf("Открыли, выбрав пункт \"Поля ввода\"..."); show_menu(&mnu1,0,1,11,7,0,items1,4,hk,hk0); do{ ch=choose_from_menu(&mnu1); } while(ch != 4 && ch != _ESC); erase_window(&w); } void demo_recwin(int i) { window_t w; int k; string buf; if(i==0) return; show_window(&w,40-i*5,13-i*2,40+i*5,13+i*2,MK_COL(YELLOW,LIGHTGRAY), MK_COL(BLACK,CYAN),SIMPLE_BORDER,"",""); for(k=0; k < i*3-1; k++) { sprintf(buf,"%d %d %d",i,i,i); winfwritexy(k+1,k+1,getcurcolor(),buf); } sleep(1); demo_recwin(i-1); sleep(1); set_active_window(&w); erase_window(&w); } void demo_error(void) { window_t w; show_window(&w,30,8,60,14,MK_COL(BLUE,LIGHTGRAY),RED, SIMPLE_BORDER,""," Можно нажать ESC "); writelongstrxy(0,0,"Сейчас попытаемся вывести\n\rстроку через видеопамять\n\rза пределы текущего окна.\n\r" "Это ошибка ..."); delay(6000); if(ml_issignal()) if(wait() == _ESC) return; winfwritexy(100,10,RED,"Error"); erase_window(&w); } #define MAX_ITEM 10 void demo_scroll(void) { extern fch_wndclass_t STD_fchclass; string mask,name; strcpy(mask,"*.exe"); if(get_fname_rmenu(&STD_fchclass," File "," Name ",mask,name,NULL,NULL) != _ESC) message_box(10,10,name,GREEN,YELLOW); } void my_debug(int x, int y, char *s) { outtextxy(x,y,s); } void main(void) { window_t gl_scr,w; menu_t mnu; menu_item_t items[]={ { " Влож. окна ","Запоминание и восстановление под окнами",NULL,1,0,act,pas,BLACK,1,0,"",""}, { " Поля ввода ","Возможности по вводу чисел и строк",NULL,16,0,act,pas,BLACK,1,1,"",""}, { " Ошибка ","Реакция библиотеки на неправильный вызов",NULL,31,0,act,pas,BLACK,1,3,"",""}, { " Файл "," Выбор файла ",NULL,44,0,act,pas,BLACK,1,4,"",""}, { " Выход ","Нажмите Enter для выхода",NULL,56,0,act,pas,BLACK,1,5,"",""}, }; extern video_interface_t COL_PC_TEXT_INTERFACE,COL_PC_GRAPH_INTERFACE; init_video_par_t ivp={EGA, EGAHI, egavga_driver, ""}; ml_retcode_t ch,i; set_start_interface(&COL_PC_GRAPH_INTERFACE,1,&ivp); hide_cursor(); textattr(GREEN); /* clrscr(); */ show_window_bar(&gl_scr,0,0,79,24,GREEN,0,NO_BORDER,"",""); show_window(&w,25,7,55,15, MK_COL(LIGHTGRAY,BLACK),MK_COL(BLACK,CYAN),DOUBLE_BORDER, ""," Нажмите ENTER "); writelongstrxy(0,0, "Демонстрация возможностей\n\rбиблиотеки для работы с\n\r" " окнами\n\r\n\r" " Автор - Чудов И.И.\n\r т.(095)962-5614\n\r Москва, 1992." ); while(wait() != _ENTER); erase_window(&w); set_active_window(&gl_scr); writelongstrxy(0,0,"\n\r Демонстрационная программа"); show_window(&w,1,4,70,8,MK_COL(YELLOW,BLUE),MK_COL(LIGHTGRAY,BLUE),DOUBLE_BORDER, " Головное меню "," Для выхода нажмите ESC "); show_menu(&mnu,0,0,5,2,0,items,5,hk,hk0); set_menu_mode(&mnu,ML_NOMOUSEEXTESC); do{ ch=choose_from_menu(&mnu); if(ch==0) demo_recwin(5); else if(ch==1) demo_input(); else if(ch==3) demo_error(); else if(ch==4) demo_scroll(); set_active_window(&w); } while(ch != 5 && ch != _ESC); erase_window(&w); erase_window(&gl_scr); close_video_interface(1,NULL); }