#include "complex.h" #include "gr_def.h" #include "mnemos.h" #include "screen.h" statim *STATI;word_s KOLST; dinami *DINA;word_s KOLDI; domim *DOMI;word_s KOLDO; struct videoconfig vc; #define DO (DOMI+N_DO[nscr])-> #define ST (STATI+N_S)-> #define DI (DINA +N_D[nscr])-> #define BL (o_ptr +N_B[nscr])-> #define KOLBL o_num #define LPT2 1 word_s i_par_sav[DISPLAY], N_B[DISPLAY],FLU,PR_UPR[DISPLAY],T_N_K_,N_Z_K_,NOM_MN[DISPLAY],PERV[4]={0,0,0,0}; //void *O_UPRAV[DISPLAY]; extern word_s MaxColors; /* The maximum # of colors available */ extern word_s kolreg[]; extern word_s x_v[],T_DIN[],N_Z_K[],T_N_K[],N_DO[],flag_din[],P_P_Z; //extern s_alg *p_alg; extern word_s tekygol[DISPLAY][16][5]; extern word_s regul(word_s nscr); extern void stat_digit(digit *ptr,word_s nomc); extern void switch_d(word_s ky,word_s nscr); extern void OT_I_DO(word_s N_S,word_s K_S,word_s nscr); extern void UST_N_UST(void); extern void bar (short a,short b,short c,short d); extern void setfillstyle (word_s pat,word_s col); extern void setlinestyle (word_s linestyle,word_s thickness); extern void DINAM(word_s N_D,word_s K_D,word_s nscr); extern void set_vso(word_s pos,word_s nscr); extern word_s lock1(void); extern word_s lock2(void); extern word_s lock3(void); extern void clear_fire(word_s nscr); extern word_s klapan(word_s kodalg,word_s nscr); extern void dinam_digit(digit *ptr,word_s nomc,word_s nscr); void upr1(word_s nom,word_s nscr),upr2(word_s nom,word_s nscr); void SET_KUR(word_s nscr); //char mas_v1[580]; /* массив хpанения куpсоpа шифpа */ /* ЗАДАЧА ВЫВОДА МНЕМОСХЕМ И УПРАВЛЕНИЯ АНАЛОГ/ДИСКРЕТН ПАРАМЕТРАМИ */ word_s DEKODIR(word_s nscr); word_s POISK(word_s nscr); word_s mnemos(word_s kc,word_s nscr) { //Инициализация переменных требующих инициализации для текущего дисплея T_DIN[nscr]= -2; N_D[nscr]= 0; // ------------- _getvideoconfig( &vc ); MaxColors = vc.numcolors; setfillstyle(1,11); _setcolor(MaxColors-1); request_resource(ekran,0L); if(nscr!=screen) set_screen(nscr); x_v[nscr] = (CIPH_CO_C-1)*W_CH-1 + 7*DX; setfillstyle(1,0);//bar(566,324,638,333); if(nscr!=screen)set_screen(screen); release_resource(ekran); i_par_sav[nscr] = i_par[nscr]; change_timer(period_tm[nscr], 1*HZ, 1); N_B[nscr]=o_curr[nscr]; POISK(nscr); /* поиск МС по номеРу гР. и номеРу в гР. */ while(!endrun) { key[nscr] = read_wpipe(scr_chn[nscr],t_out_v*HZ); if(key[nscr]==kc) continue; /* если вызов этой же задачи */ // if(list_func(key[nscr])) // { /* если вызов другой задачи */ // clear_fire(nscr); // i_par[nscr] = i_par_sav[nscr]; // T_DIN[nscr]=-2; // return key[nscr]; // } key[nscr]=DEKODIR(nscr); /* РаскРутка упРавляющего кода */ if(var_obj(key[nscr],nscr)) { /* если смена объекта */ /*УСТАНОВКА СТАТИКИ */ clear_fire(nscr); N_B[nscr]=o_curr[nscr]; /* в пРиним.коде стаРш.байт- номеР гРуппы,младш.-скан код */ T_DIN[nscr]=-2; POISK(nscr); /* поиск МС по номеРу гР. и номеРу в гР. */ clear_flag(period_fl[nscr]); } if(list_func(key[nscr])) { /* если вызов другой задачи */ i_par[nscr] = i_par_sav[nscr]; T_DIN[nscr]=-2; return key[nscr]; } if(check_flag(period_fl[nscr])) { clear_flag(period_fl[nscr]); request_resource(ekran,0L); if(nscr!=screen)set_screen(nscr); REPL(nscr); if(FLU!=0) UPRAVA(0,nscr); /* выдача элемента динамики и упРавления */ if(nscr!=screen)set_screen(screen); release_resource(ekran); } setfillstyle (1,0); setlinestyle(-1,1); } return 0; } /*---------------------------------------------------------------------*/ /* п/п выдачи на экРан элементов динамики и упРавления Имя Элемента упРавления выдается с изменяющимся цветом */ void REPL(word_s nscr) { if (FLU!=0) /*ЭЛЕМЕНТ ДИНАМИКИ */ { if(PR_UPR[nscr]==1) { N_D[nscr]=T_DIN[nscr]; N_Z_K[nscr]= DI NOM_PAR;T_N_K[nscr]= DI N_KO; } N_D[nscr]=0; T_N_K_=T_N_K[nscr];N_Z_K_=N_Z_K[nscr]; DINAM( DO N_D, DO K_D,nscr);T_N_K[nscr]=T_N_K_; setfillstyle(1,0); N_Z_K[nscr]=N_Z_K_;N_D[nscr]=T_DIN[nscr]; } } /* п/п РеагиРования на поступающие упРавляющие коды из диспетчеРа задач если поступивший код END завеРшение задачи ина выходе из п/п -1 */ word_s DEKODIR(word_s nscr) { word_s i,d; if(key[nscr]==PgUp && BL n_ms > 1) { /* листание по гРуппе-пРедыдущая МС */ clear_fire(nscr); T_DIN[nscr]=-2;NOM_MN[nscr]--; POISK(nscr); /* поиск МС по номеРу гР. и номеРу в гР. */ return(0); } if(key[nscr]==PgDn && BL n_ms > 1) { /* листание по гРуппе- следующая МС */ clear_fire(nscr); T_DIN[nscr]=-2;NOM_MN[nscr]++; POISK(nscr); /* поиск МС по номеРу гР. и номеРу в гР. */ return(0); } if(FLU!=0) { if(key[nscr]==Up || key[nscr]==Left) {request_resource(ekran,0L); if(nscr!=screen)set_screen(nscr); UPRAVA(-1,nscr); if(nscr!=screen)set_screen(screen); release_resource(ekran); return(0);} if(key[nscr]==Right || key[nscr]==Down) {request_resource(ekran,0L); if(nscr!=screen)set_screen(nscr); UPRAVA(1,nscr); if(nscr!=screen)set_screen(screen); release_resource(ekran); return(0);} if(key[nscr]==K1){if(kolreg[nscr]>=1)upr1(1,nscr);return(0);} if(key[nscr]==K2){if(kolreg[nscr]>=2)upr1(2,nscr);return(0);} if(key[nscr]==K3){if(kolreg[nscr]>=3)upr1(3,nscr);return(0);} if(key[nscr]==K4){if(kolreg[nscr]>=4)upr1(4,nscr);return(0);} if(key[nscr]==K5){if(kolreg[nscr]>=5)upr1(5,nscr);return(0);} if(key[nscr]==K6){if(kolreg[nscr]>=6)upr1(6,nscr);return(0);} if(key[nscr]==K7){if(kolreg[nscr]>=7)upr1(7,nscr);return(0);} if(key[nscr]==K8){if(kolreg[nscr]>=8)upr1(8,nscr);return(0);} if(key[nscr]==S1){if(kolreg[nscr]>=9)upr1(9,nscr);return(0);} if(key[nscr]==S2){if(kolreg[nscr]>=10)upr1(10,nscr);return(0);} if(key[nscr]==S3){if(kolreg[nscr]>=11)upr1(11,nscr);return(0);} if(key[nscr]==S4){if(kolreg[nscr]>=12)upr1(12,nscr);return(0);} if(key[nscr]==S5){if(kolreg[nscr]>=13)upr1(13,nscr);return(0);} if(key[nscr]==S6){if(kolreg[nscr]>=14)upr1(14,nscr);return(0);} if(key[nscr]==S7){if(kolreg[nscr]>=15)upr1(15,nscr);return(0);} if(key[nscr]==S8){if(kolreg[nscr]>=16)upr1(16,nscr);return(0);} if(key[nscr]==ON || key[nscr]==OFF || key[nscr]==OP || key[nscr]==STP || key[nscr]==CL) {if(DI PR_UP==1 && PR_UPR[nscr]==1 && DI P_E==1) switch_d(key[nscr],nscr); return(0);} if(key[nscr]==MAN || key[nscr]==AUTO || key[nscr]==CAS) {if(DI PR_UP==1 && PR_UPR[nscr]==1 && DI P_E!=1) set_mode(key[nscr],nscr); return(0);} if(key[nscr]==MORE || key[nscr]==LESS || key[nscr]==QMORE || key[nscr]==QLESS) {if(DI PR_UP==1 && PR_UPR[nscr]==1) { if(cur_so[nscr]) set_so(key[nscr],nscr);} return(0);} if(key[nscr]==Tab) {if(DI PR_UP ==1 && PR_UPR[nscr]==1) { request_resource(ekran,0L); if(nscr!=screen)set_screen(nscr); switch_so(Tab,nscr); if(nscr!=screen)set_screen(screen); release_resource(ekran); } return(0);} if(key[nscr]==ENTER) { if(DI P_E==ANALOG && (p_a[nscr]->type_mech==NC || p_a[nscr]->type_mech==NO)) // if(DI P_E==ANALOG && p_a[nscr]->type_mech && p_a[nscr]->mod_cod) { next: i=o_curr[nscr]; key[nscr] = regul(nscr); d=0; if(key[nscr]==PgUp) d=-1; if(key[nscr]==PgDn) d=1; if(d) { do { T_DIN[nscr]+=d; if(T_DIN[nscr]> DO K_D)T_DIN[nscr]= DO N_D; if(T_DIN[nscr]< DO N_D)T_DIN[nscr]= DO K_D; N_D[nscr]=T_DIN[nscr];N_Z_K[nscr]= DI NOM_PAR;T_N_K[nscr] = DI N_KO; p_c[nscr]=c_ptr + T_N_K[nscr]; p_a[nscr]= AN_UP; } while(!(DI P_E==ANALOG && (p_a[nscr]->type_mech==NC || p_a[nscr]->type_mech==NO) && DI PR_UP)); goto next; // while(!(DI P_E==ANALOG && p_a[nscr]->type_mech && p_a[nscr]->mod_cod && DI PR_UP)); goto next; } o_curr[nscr]=i; if(var_obj(key[nscr],nscr)) {o_curr[nscr]=i; return key[nscr];} if(!list_func(key[nscr])) POISK(nscr); return key[nscr]; } return(0); } if(key[nscr]==ENTER_S) { for(i=0;iPR_UP==1 && (DINA+i)->PR_SIFR)ii++; request_resource(ekran,0L); if(nscr!=screen)set_screen(nscr); UPRAVA(i-T_DIN[nscr]-1,nscr); if(nscr!=screen)set_screen(screen); release_resource(ekran); } /**********************************************************************/ /**********************************************************************/ /* п/п создания на экРане блока упРавления аналоговыми и дискРетными паРаметРами ; NOM -номеР элемента динамики в файле-описателе */ void UPRAVA(word_s NOM,word_s nscr) { word_s i; static word_s stat,st_time; if(PR_UPR[nscr]!=0) {if( DO N_D!=-1 && PERV[nscr]!=-1) {if(PERV[nscr]==0) {PERV[nscr]=1; for(i= DO N_D;i <= DO K_D;i++) {N_D[nscr]=i;_settextcolor(MaxColors-1); if(DI PR_UP==1) /* паpаметp упpавляемый */ {PERV[nscr]=1;PR_UPR[nscr]=1; if(tekygol[nscr][o_curr[nscr]][NOM_MN[nscr]]==-1) T_DIN[nscr]= i; else T_DIN[nscr]=tekygol[nscr][o_curr[nscr]][NOM_MN[nscr]]; tekygol[nscr][o_curr[nscr]][NOM_MN[nscr]]=T_DIN[nscr]; if(T_DIN[nscr]==-2) T_DIN[nscr]= DO N_D; N_D[nscr]=T_DIN[nscr];N_Z_K[nscr]= DI NOM_PAR; T_N_K[nscr] = DI N_KO; if ( DI PR_SIFR==1 && (DI PR_UP!=1 || !DI P_E))on_of_cursor(DINA +N_D[nscr],AN_UP,1); //_putimage( DI X_SIFR, DI Y_SIFR-2,mas_v1,XOR_PUT); O_UPRAV(DI X_KUR-4, DI Y_KUR-4,stat=1); //_putimage( DI X_KUR-4, DI Y_KUR-4,O_UPRAV[nscr],XOR_PUT); schedule(); SET_KUR(nscr); goto p1; } } PERV[nscr]=-1;PR_UPR[nscr]=0;return; } if(NOM!=0) {st_time=0; if ( DI PR_SIFR==1 && (DI PR_UP!=1 || !DI P_E))on_of_cursor(DINA +N_D[nscr],AN_UP,0); //_putimage( DI X_SIFR, DI Y_SIFR-2,mas_v1,XOR_PUT); O_UPRAV(DI X_KUR-4, DI Y_KUR-4,stat=0); //_putimage( DI X_KUR-4, DI Y_KUR-4,O_UPRAV[nscr],XOR_PUT); do {T_DIN[nscr]+=NOM; if(T_DIN[nscr]> DO K_D)T_DIN[nscr]= DO N_D; if(T_DIN[nscr]< DO N_D)T_DIN[nscr]= DO K_D; N_D[nscr]=T_DIN[nscr]; } while( DI PR_UP!=1); tekygol[nscr][o_curr[nscr]][NOM_MN[nscr]]=T_DIN[nscr]; SET_KUR(nscr); if( DI PR_SIFR==1 && (DI PR_UP!=1 || !DI P_E))on_of_cursor(DINA +N_D[nscr],AN_UP,1); // _putimage( DI X_SIFR, DI Y_SIFR-2,mas_v1,XOR_PUT); O_UPRAV(DI X_KUR-4, DI Y_KUR-4,stat=1); //_putimage( DI X_KUR-4, DI Y_KUR-4,O_UPRAV[nscr],XOR_PUT); } else if((st_time++)>5) {if(stat) stat=0; else stat=1; O_UPRAV(DI X_KUR-4, DI Y_KUR-4,stat);} p1:; if(DI P_E==0) dinam_analog( AN_UP ,i_par[nscr],nscr); else dinam_digit ( DI_UP ,i_par[nscr],nscr); } } } /********************************************************************/ void SET_KUR(word_s nscr) { N_D[nscr]=T_DIN[nscr];N_Z_K[nscr]= DI NOM_PAR;T_N_K[nscr] = DI N_KO; i_par[nscr]=7; _setcolor(0); _rectangle(_GFILLINTERIOR,x_v[nscr]+9*W_CH+1,(MEG_L-1)*H_CH-2,x_v[nscr]-1,y_v+H_CH-1); cur_so[nscr]=0; p_c[nscr]=c_ptr + T_N_K[nscr]; if(DI P_E==0) { p_a[nscr]= AN_UP ; p_d[nscr]= NULL; set_vso(i_par[nscr],nscr); stat_analog( AN_UP ,i_par[nscr]); eprintf(GREEN_,p_a[nscr]->name); } else { p_d[nscr]= DI_UP; p_a[nscr]= NULL; stat_digit ( DI_UP ,i_par[nscr]); eprintf(GREEN_,p_d[nscr]->name); } image_cont(i_par[nscr],nscr); flag_din[nscr] = 1; if( DI P_E==0 ) dinam_analog( AN_UP ,i_par[nscr],nscr); else dinam_digit(DI_UP ,i_par[nscr],nscr); flag_din[nscr] = 0; if( DI P_E==0 && DI PR_UP==1) switch_so(p_a[nscr]->mod_cod,nscr); } /**********************************************************************/ /* п/п поиска по номеРу гРуппы N_B[nscr] и ее поРядковому номеРу в гРуппе имени МС а затем ее поиск в файле/стРуктуРе-описателе на выходе 0-МС существует и найдена иначе 1 */ word_s POISK(word_s nscr) { N_DO[nscr]=-1; PR_UPR[nscr]=0; if( BL n_ms ==0 || N_B[nscr] >= KOLBL ) { eprintf(YELLOW_,"Блок МС не имеет ");goto vozv; } eprintf(BLACK_,""); if( N_B[nscr] >=0 && N_B[nscr] =BL n_ms ) NOM_MN[nscr]=0; if(*((o_ptr+N_B[nscr])->nom_gr_m+NOM_MN[nscr]) != -1) { N_DO[nscr] = *((o_ptr+N_B[nscr])->nom_gr_m+NOM_MN[nscr]); //(o_ptr+N_B[nscr])->nom_gr_m[NOM_MN[nscr]]; UST_N_UST(); request_resource(ekran,0L); if(nscr!=screen)set_screen(nscr); OT_I_DO( DO N_S, DO K_S, nscr); ykstr(BL n_ms,NOM_MN[nscr]+1); if( DO N_D!=-1)FLU=1;else FLU=0;P_P_Z=0; PERV[nscr]=0;N_D[nscr]=T_DIN[nscr]; if(T_DIN[nscr]!=-1) PR_UPR[nscr]=1; REPL(nscr); if(FLU!=0) UPRAVA(0,nscr); /* выдача элемента динамики и упРавления */ if(nscr!=screen)set_screen(screen); release_resource(ekran); return(0); } } eprintf(RED_," МС %s HЕТ ", (DOMI+ *((o_ptr+N_B[nscr])->nom_gr_m+NOM_MN[nscr]))->IMJ); //(DOMI+(o_ptr+N_B[nscr])->nom_gr_m[NOM_MN[nscr]])->IMJ); vozv: _setcolor(0); setfillstyle(1,0); ramka(); FLU=0;return (1); } /*------------------------------------------------------------------*/ void O_UPRAV(word_s x,word_s y,byte oper) { static int old_color=0; if(oper) { old_color=_getpixel(x+4,y+4); if(old_color!=0&&old_color!=15) ch_color(x+4,y+4,15); else { old_color=0; _setcolor(WHITE_BR_); _rectangle(_GFILLINTERIOR,x,y,x+8,y+8); _setcolor(CYAN_); _rectangle(_GBORDER,x,y,x+8,y+8); } } else if(old_color) ch_color(x+4,y+4,old_color); else { _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,x,y,x+8,y+8); } } //------------------------------------------------------------------- void on_of_cursor(dinami *obdin,analog *ptr, byte oper) { byte color; if(oper){_setcolor(WHITE_); color=GREEN_BR_;} else {_setcolor(BLACK_); color=GREEN_;} _rectangle(_GFILLINTERIOR,obdin->X_SIFR,obdin->Y_SIFR-2,obdin->X_SIFR+72,obdin->Y_SIFR+7); if(ptr->novalid) color=8; else {if(ptr->bound_al) color=LIGHTRED; else if(ptr->bound_reg) color=YELLOW; } fgtext(color,obdin->X_SIFR+1,obdin->Y_SIFR-2,"%s",ptr->cipher); }