#include "complex.h" #include "gr_def.h" #include "screen.h" #include "shst_prt.h" /* -----------------------------------*/ extern void VIEW_SMEN(word_s); /* -----------------------------------*/ extern void cl_scr1(word_s nscr); extern void save_time_scr(word_s nscr); word_s jokei (word_s nom_ret,word_s nom,word_s nscr); word_s xl,yl,xr,yr; word_s color_of_text_menu; /* ----------------------------------*/ extern long int _ttm; extern struct tm *tn; /* ---------------------------------- */ extern two_sc *t_scr[]; extern char *tscreen[]; extern word_s n_m1[]; #define tscr t_scr[nscr] extern word_s pr_copy[]; #define nmon tn->tm_mon /* double change_ed_val(double ed_val,word_s ch,word_s flag);*/ void F_MENY(word_s i,char *TEXT_M[],word_s NX,word_s NY); word_s SAIMAK(word_s sai_ret,char *TEXT_M[],word_s MAXY,word_s NX, word_s NY,word_s COLT, word_s nscr,byte *ind_m); /* ================================================================= */ /* п/п вывода меню и упРавления указателем меню. sai_ret -номеР текущего элемента меню, *TEXT_M -указатель на стРуктуРу МЕНЮ, NХ -кооРдината Х веРхнего левого угла МЕНЮ, NY -кооРдината Y веРхнего левого угла МЕНЮ, MaxX -MAX длина стРоки МЕНЮ, MaxY -МАХ количество элементов меню, COLM -цвет пРямоугольника МЕНЮ, COLT -цвет текста МЕНЮ . на выходе -номеР выбРанного элемента меню */ word_s UPR_MEN(word_s sai_ret,char *TEXT_M[],word_s NX,word_s NY, word_s MAXX,word_s MAXY,word_s COLM,word_s COLT,word_s nscr,byte *ind_m) { word_s i; request_resource(ekran,0L); if(screen!=nscr) set_screen(nscr); xl=(NX-1)*DW-4;yl=(NY-1)*DH-4;xr=(NX+MAXX-1)*DW+4;yr=(NY+MAXY-1)*DH+4; _setcolor(WHITE); rectangle(xl+1,yl+1,xr-1,yr-1); _setcolor(COLM); _rectangle( _GFILLINTERIOR, xl,yl,xr,yr); color_of_text_menu = COLT; _settextcolor(COLT); for(i=0;ikod = read_wpipe(scr_chn[nscr],0*HZ); if (ind_m!=NULL) { if (tscr->kod==Down || tscr->kod==Up || (t_kbd && (tscr->kod==End || tscr->kod==Home))) { n_m1[nscr]=0; time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L;t_loct(&_ttm,tn); save_time_scr(nscr); } ind_menu[nscr]=sai_ret; if (tscr->kod==Down) { if (sai_ret==strlen(ind_m)-1) ind_menu[nscr]=0; else ind_menu[nscr]=sai_ret+1; } if (tscr->kod==Up){ if (sai_ret==0) ind_menu[nscr]=strlen(ind_m)-1; else ind_menu[nscr]=sai_ret-1; } if(!t_kbd) { if (tscr->kod==End) ind_menu[nscr]=strlen(ind_m)-1; if (tscr->kod==Home) ind_menu[nscr]=0; } if (ind_m[ind_menu[nscr]]<200) pp=1; } if (pp) { if (tscr->cod_str==0xFFFD) { request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(nc_1+1)*DW,(ns_1-1)*DH,(nc_2+38)*DW,(ns_1+1)*DH); eprintf(BLACK_,""); if (screen!=nscr) set_screen(screen); release_resource(ekran); } if (tscr->cod_str==0xFFFD) { switch (ind_m[ind_menu[nscr]]) { case 3: tscr->f_copy=2; break; case 2: tscr->f_copy=1; break; case 4: tscr->f_copy=4; break; case 5: tscr->f_copy=7; time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn); save_time_scr(nscr); break; } } if (tscr->cod_str==0xFFFF || tscr->cod_str==0xFFFE) { switch(ind_m[ind_menu[nscr]]) { case 4: tscr->f_copy=3; break; case 5: tscr->f_copy=6; break; case 12: tscr->f_copy=5; time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn); save_time_scr(nscr); break; case 1: tscr->f_copy=0; time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn); save_time_scr(nscr); break; } } VIEW_SMEN(nscr); } else { if (tscr->kod==Down || tscr->kod==Up || tscr->kod==ESC || tscr->kod==Home || tscr->kod==End || tscr->kod==Left || tscr->kod==Right) { cl_scr1(nscr); if ((tscr->cod_str==0xFFFF || tscr->cod_str==0xFFFE)) tscr->f_copy=0; if (tscr->cod_str==0xFFFD) { #if(UCHET) tscr->n_d1=0; #else tscr->n_d1=-1; #endif time(&_ttm); t_loct(&_ttm,tn); save_time_scr(nscr);} } } if (ind_m!=NULL){ if (ind_m[ind_menu[nscr]]<200 && (tscr->kod==MORE || tscr->kod==LESS)) { tscr->cod_str=tscr->kod; tscr->kod=ENTER; } } var_obj(tscr->kod,nscr); if(list_func(tscr->kod)){ /* если вызов дpугой задачи */ request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(nc_1+1)*DW,(ns_1-1)*DH,(nc_2+38)*DW,(ns_1+1)*DH); open_graph(); if (screen!=nscr) set_screen(screen); release_resource(ekran); pr_copy[0]=pr_copy[1]=0; return tscr->kod; } request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor ( COLT); F_MENY(sai_ret,TEXT_M,NX,NY); sai_ret=jokei(sai_ret,MAXY-1,nscr); _settextcolor (COLU); F_MENY(sai_ret,TEXT_M,NX,NY); if (screen!=nscr) set_screen(screen); release_resource(ekran); } while (tscr->kod!= ESC && tscr->kod != ENTER ); if( tscr->kod==ESC ||( tscr->kod == ENTER && !sai_ret) ) {sai_ret=0;tscr->cod_str=tscr->kod;} /* release_resource(ekran);*/ return(-sai_ret); } /* ================================================================= */ /* п/п опРеделения следующего номеРа элемента меню по коду нажатой клавиши kod; nom_ret -номеР текущего указателя меню; nom -max количество элементов меню ; DL_V -max количество элементов меню в стРоке; на выходе номеР следующего элемента меню */ word_s jokei (word_s nom_ret,word_s nom,word_s nscr) { word_s DL_V=1; if(tscr->kod==Up){if (nom_ret-DL_V<0) {nom_ret=(nom/DL_V)*DL_V+nom_ret%DL_V; if (nom_ret>nom) nom_ret=nom_ret-DL_V; }else nom_ret=nom_ret-DL_V;goto m1;} if(tscr->kod==Down){if (nom_ret+DL_V>nom) nom_ret=nom_ret%DL_V; else nom_ret =nom_ret+DL_V; goto m1;} if(tscr->kod==Left){if (nom_ret == 0 ) nom_ret=nom+1; nom_ret--; goto m1;} if(tscr->kod==Right){if (nom_ret==nom) nom_ret = -1; nom_ret ++; goto m1;} if(tscr->kod==Home){nom_ret=0;goto m1;} if(tscr->kod==End){nom_ret=nom;goto m1;} m1:; return (nom_ret); } /* ================================================================= */ void SN_MENY(word_s NX,word_s NY,word_s MAXX,word_s MAXY) { request_resource(ekran,0L); _setcolor(BLACK_); xl=(NX-1)*DW-4;yl=(NY-1)*DH-4; xr=(NX+MAXX-1)*DW+4;yr=(NY+MAXY-1)*DH+4; _rectangle( _GFILLINTERIOR, xl,yl,xr,yr); release_resource(ekran); } /* ******************************************************************** */ /*------------------------------------------------------------------- double change_ed_val(double ed_val,word_s ch,word_s flag){ switch (ch){ case 4: if (flag) {if (ed_val<9999) ed_val=ed_val+1;} else if (ed_val>=1) ed_val=ed_val-1; break; case 3: if (flag) {if (ed_val+10<9999) ed_val=ed_val+10;} else if(ed_val>=10) ed_val=ed_val-10; break; case 2: if (flag) {if(ed_val+100<9999) ed_val=ed_val+100;} else if (ed_val>=100) ed_val=ed_val-100; break; case 1: if (flag) {if (ed_val<9000) ed_val=ed_val+1000;} else {if (ed_val>=1000) ed_val=ed_val-1000;} break; case 6: if (flag) {if (ed_val<9999.9) ed_val=ed_val+0.1;} else {if (ed_val>=0.1) ed_val=ed_val-0.1;} break; case 7: if (flag) {if (ed_val<9999.99) ed_val=ed_val+0.01;} else { if (ed_val>=0.01) ed_val=ed_val-0.01; else {ed_val=0.0; sign_ed=1;} } break; } if (ed_val>9999.99) ed_val=9999.99; return ed_val; } *********************************/