#include "complex.h" #include "arh.h" #include "screen.h" #include "graf.h" #define TSC bufove[nscr] #define NX (TSC->tpov+i)->nx #define NY (TSC->tpov+i)->ny #define XD (TSC->tsov+TSC->tstr)->dx_g #define YD (TSC->tsov+TSC->tstr)->dy_g #define AP ((c_ptr+(TSC->tpov+i)->nomcontr)->a_ptr+(TSC->tpov+i)->nom) #define APT ((c_ptr+(TSC->tpov+TP)->nomcontr)->a_ptr+(TSC->tpov+TP)->nom) #define PDI (TSC->p_par_d+i) #define KOEF (TSC->tsov+TSC->tstr)->koef #define KOEF1 (TSC->tsov+TSC->tstr)->koef1 #define STR (TSC->tsov+TSC->tstr) #define PAR TSC->tpov #define TP TSC->tpar extern word_s i_par_sav[]; controller * ct_ptr; void stov(word_s nscr),diov(word_s nscr),nlist(word_s i,word_s nscr); word_s klist(word_s i,word_s nscr); void ramka(); void ykstr(word_s ks,word_s ts); void var_mode_uchet(word_s nscr); void wr_file_no_chet(word_s nscr,word_s flag); extern word_s algkoef(word_s nscr,char tip,word_s contr,word_s nomsert); extern word_s regul(word_s nscr); extern void din_mod(analog *ptr,word_s nomc,word_s nscr); extern word_s sond; typedef struct {word_s kod; str_ov *tsov; par_ov *tpov; par_d_ov *p_par_d; word_s hn_fl; cpr *mac; resourceptr res; long t_time,*buf_t; m_kod *buf_zn_i; char tstr; byte tpar; }base; base *bufove[4]; char *bufov; #define PA (p_alg1+(pa->nomin_var)) #define first 5 //extern s_alg *p_alg; typedef struct { char del; char formula[80]; char type_f[2]; char entr[8][30]; char koeff[15][30]; char comment[3][80]; }dfal; word_s view_n(word_s nscr) {word_s i,d,lin=0,zn,col,nx,ny; request_resource(ekran,0L); ramka(); if(!k_str_ov){eprintf(YELLOW_,"Нет общего вида");return 0;} if((bufove[nscr]=(base *)calloc(1,sizeof(base)))==NULL) {eprintf(RED_,"Нет памяти для ОВ");return 0;} // bufove[nscr]=(base *)bufov; // memset(bufov,0,sizeof(base)); if((TSC->p_par_d=(par_d_ov *)calloc(sizeof(par_d_ov),k_par_ov))==NULL) {eprintf(RED_,"Нет памяти для ОВ");free(bufove[nscr]);return 0;} release_resource(ekran); TSC->tstr=0;TSC->tsov=p_str_ov;PAR=p_par_ov; TP=STR->perv; i_par[nscr]=7; stov(nscr); change_timer(period_tm[nscr],1*HZ,1); while(!endrun) { #if (DEBUG) view_text(2,73,8,"VIEW "); #endif if((TSC->kod=read_wpipe(scr_chn[nscr],t_out_v*HZ))==View1)continue; if(list_func(TSC->kod)) {free(TSC->p_par_d); key[nscr]=TSC->kod; free(bufove[nscr]);i_par[nscr]=i_par_sav[nscr];return(key[nscr]);} /*дp.зад.*/ var_obj(TSC->kod,nscr); PO:if(TSC->kod==PgDn){if(k_str_ov>1){if(++TSC->tstr>=k_str_ov)TSC->tstr=0;lin=0;TP=STR->perv;stov(nscr);}goto m1;} if(TSC->kod==PgUp){if(k_str_ov>1){if(--TSC->tstr<0)TSC->tstr=k_str_ov-1;lin=0;TP=STR->perv;stov(nscr);}goto m1;} if(TSC->kod==Up){ if(STR->kol>1) { nlist(TP,nscr); if(TP!=STR->perv)TP--; else TP=STR->perv+STR->kol-1; if(klist(TP,nscr))goto PO; } goto m1; } if(TSC->kod==Down){ if(STR->kol>1) { nlist(TP,nscr); if(++TP>STR->perv+STR->kol-1)TP=STR->perv; if(klist(TP,nscr))goto PO; } goto m1; } if(TSC->kod==Left){if(STR->kol>1) {nlist(TP,nscr);i=TP;nx=NX;ny=NY; for(;;) {if((nx-=(XD+12))<0){nx+=(XD+12)*STR->gor;if((ny-=(YD+31))<30)ny+=(YD+31)*STR->ver;} for(i=STR->perv,col=-1;i<(STR->perv+STR->kol);i++){if(NX==nx&&NY==ny){col=i;break;}}if(col>=0){TP=col;break;} } if(klist(TP,nscr))goto PO; } goto m1;} if(TSC->kod==Right){if(STR->kol>1) {nlist(TP,nscr);i=TP;nx=NX;ny=NY; for(;;) {if((nx+=(XD+12))>555){nx-=(XD+12)*STR->gor;if((ny+=(YD+31))>294)ny-=(YD+31)*STR->ver;} for(i=STR->perv,col=-1;i<(STR->perv+STR->kol);i++){if(NX==nx&&NY==ny){col=i;break;}} if(col>=0){TP=col;break;} } if(klist(TP,nscr))goto PO; }goto m1;} if(TSC->kod==MORE || TSC->kod==LESS || TSC->kod==QMORE || TSC->kod==QLESS) {if(cur_so[nscr]){key[nscr]=TSC->kod;set_so(TSC->kod,nscr);}goto m1;} if(TSC->kod==Tab){if(cur_so[nscr]){key[nscr]=TSC->kod;switch_so(Tab,nscr);}goto m1;} if(TSC->kod==MAN || TSC->kod==AUTO || TSC->kod==CAS) {key[nscr]=TSC->kod;set_mode(TSC->kod,nscr);goto m1;} if(TSC->kod==UCHETB){var_mode_uchet(nscr); goto m1;} #if (ALG) if(TSC->kod==ENTER) { if((TSC->tpov+TP)->type==ANALOG && (p_a[nscr]->type_mech==NC || p_a[nscr]->type_mech==NO) && p_a[nscr]->nomin_var >= 0) // if((TSC->tpov+TP)->type==ANALOG && p_a[nscr]->type_mech && p_a[nscr]->mod_cod && p_a[nscr]->nomin_var >= 0) { next: key[nscr] = regul(nscr);d=0; if(key[nscr]==PgUp) d=-1; if(key[nscr]==PgDn) d=1; if(d) { do { TP+=d; if(TP < STR->perv) TP=STR->perv+STR->kol-1; if(TP > STR->perv+STR->kol-1) TP=STR->perv; p_c[nscr]=c_ptr+(TSC->tpov+TP)->nomcontr; p_a[nscr]=p_c[nscr]->a_ptr+(TSC->tpov+TP)->nom; } while(!((TSC->tpov+TP)->type==ANALOG && (p_a[nscr]->type_mech==NC || p_a[nscr]->type_mech==NO))); // while(!((TSC->tpov+TP)->type==ANALOG && p_a[nscr]->type_mech && p_a[nscr]->mod_cod)); goto next; } } else if (p_c[nscr]->typcontr==VIRT && p_a[nscr]->type_mech!=M_INP && STR->kol && p_a[nscr]->nomin_var >= 0) //!! key[nscr]=algkoef(nscr,(TSC->tpov+TP)->type,(TSC->tpov+TP)->nomcontr,(TSC->tpov+TP)->nom); if(list_func(key[nscr])) { free(TSC->p_par_d); free(bufove[nscr]); i_par[nscr]=i_par_sav[nscr]; return key[nscr]; } lin=0; stov(nscr); } #endif m1:; if(check_flag(period_fl[nscr]) && STR->kol) { clear_flag(period_fl[nscr]); request_resource(ekran,0L); if(screen!=nscr)set_screen(nscr); if(lin==10*into){lin=0;stov(nscr);} // if((lin/3)==8){lin=0;stov(nscr);} else {dinam_analog(APT,7,nscr); for(i=STR->perv;i<(STR->perv+STR->kol);i++) {if(PDI->tzn!=AP->var_tech||AP->novalid!=PDI->novalid||AP->no_uchet!=PDI->no_uchet) {_setcolor(0); if(AP->novalid!=PDI->novalid||AP->bound_reg!=PDI->bound_reg|| AP->bound_al!=PDI->bound_al||AP->no_uchet!=PDI->no_uchet) {PDI->novalid=AP->novalid; PDI->bound_reg=AP->bound_reg; PDI->bound_al=AP->bound_al; PDI->no_uchet=AP->no_uchet; PDI->col=2; if(PDI->no_uchet) PDI->col=1; else if(PDI->novalid)PDI->col=8; else if(PDI->bound_al)PDI->col=12; else if(PDI->bound_reg)PDI->col=14; if(i==TP&&PDI->col==2)fgtext(10,NX+5,NY+YD+4,"%s",AP->cipher); else fgtext(PDI->col,NX+5,NY+YD+4,"%s",AP->cipher); } if(XD>250){_rectangle(_GFILLINTERIOR,NX+85,NY+YD+4,NX+XD-1,NY+YD+14);fgtext(PDI->col,NX+85,NY+YD+4,formt(),AP->var_tech);} else { _rectangle(_GFILLINTERIOR,NX+5,NY+YD+15,NX+XD-1+8,NY+YD+25);fgtext(PDI->col,NX+5,NY+YD+15,formt(),AP->var_tech); if(AP->var_tech>AP->max_sc)fgtext(WHITE_,NX+5+65,NY+YD+15,""); if(AP->var_techmin_sc)fgtext(WHITE_,NX+5+65,NY+YD+15,""); } PDI->tzn=AP->var_tech; } if(AP->bound_al || AP->bound_reg) { if(AP->glimmer1 && !AP->novalid){fgtext(PDI->col,NX+5,NY+YD+4,"%s",AP->cipher);AP->glimmer1 =0;} else if(AP->glimmer && !AP->novalid){fgtext(GRAY_,NX+5,NY+YD+4,"%s",AP->cipher);AP->glimmer1 =1;} } } // if(!(++lin%3)) if(!(++lin%into)) //@ for(i=STR->perv;i<(STR->perv+STR->kol);i++) {if(!AP->novalid) _setcolor(10); zn=AP->var_cod; if(AP->type_sc==SC_SQRT)zn=(word_s)(sqrt((double)(zn)*ADC_SC)); if(znnkod)zn=PDI->nkod;if(zn>PDI->vkod)zn=PDI->vkod; if(PDI->tkod!=-1) if(!AP->novalid) { // nx=NX+XD-9+lin/3;ny=NY+YD-1; //@ nx=NX+XD-11+lin/into;ny=NY+YD-1; //@ li(nx,ny-(word_s)((float)(PDI->tkod-PDI->nkod)*KOEF1),nx+1,ny-(word_s)((float)(zn-PDI->nkod)*KOEF1)); } PDI->tkod=zn; } } if(screen!=nscr)set_screen(screen); release_resource(ekran); } } return 0; } void nlist(word_s i,word_s nscr) {_setcolor(0);_rectangle(_GFILLINTERIOR,NX+2,NY+YD+3,NX+79,NY+YD+14); fgtext(PDI->col,NX+5,NY+YD+4,"%s",AP->cipher); } word_s klist(word_s i,word_s nscr) {_setcolor(7);_rectangle(_GFILLINTERIOR,NX+2,NY+YD+3,NX+79,NY+YD+14); if(PDI->col==2)fgtext(10,NX+5,NY+YD+4,"%s",AP->cipher); else fgtext(PDI->col,NX+5,NY+YD+4,"%s",AP->cipher); p_a[nscr]=AP; p_d[nscr]=NULL; p_c[nscr]=c_ptr+(TSC->tpov+i)->nomcontr; TSC->kod=read_wpipe(scr_chn[nscr],2L); if(TSC->kod==Up||TSC->kod==Down||TSC->kod==Left||TSC->kod==Right)return 1; _setcolor(0);_rectangle(_GFILLINTERIOR,575,86,638,318); stat_analog(AP,7);set_vso(7,nscr);image_cont(7,nscr); eprintf(GREEN_,AP->name); dinam_analog(AP,7,nscr); return 0; } void stov(word_s nscr) {word_s i; request_resource(ekran,0L); ramka(); ykstr(k_str_ov,TSC->tstr+1); if(!STR->kol){release_resource(ekran); return;} for(i=STR->perv;i<(STR->perv+STR->kol);i++) {_setcolor(8);li(NX+XD,NY,NX+XD,NY+YD);li(NX,NY+YD,NX+XD+8,NY+YD); _setcolor(7);_rectangle(_GBORDER,NX,NY,NX+XD+8,NY+YD+27); PDI->novalid=AP->novalid;PDI->bound_reg=AP->bound_reg; PDI->bound_al=AP->bound_al; PDI->no_uchet=AP->no_uchet; PDI->col=2; if(PDI->no_uchet) PDI->col=1; else if(PDI->novalid)PDI->col=8; else if(PDI->bound_al)PDI->col=12; else if(PDI->bound_reg)PDI->col=14; if(i==TP) {_setcolor(7); _rectangle(_GFILLINTERIOR,NX+2,NY+YD+3,NX+79,NY+YD+14); } if(i==TP&&PDI->col==2)fgtext(10,NX+5,NY+YD+4,"%s",AP->cipher); else fgtext(PDI->col,NX+5,NY+YD+4,"%s",AP->cipher); if(XD>250) {fgtext(7,NX+5,NY+YD+15,"%s",AP->name); fgtext(PDI->col,NX+85,NY+YD+4,formt(),AP->var_tech); } else { fgtext(PDI->col,NX+5,NY+YD+15,formt(),AP->var_tech); if(AP->var_tech>AP->max_sc)fgtext(WHITE_,NX+5+65,NY+YD+15,""); if(AP->var_techmin_sc)fgtext(WHITE_,NX+5+65,NY+YD+15,""); } PDI->tkod=AP->var_cod; if(AP->type_sc==SC_SQRT)PDI->tkod=(word_s)(sqrt((double)(PDI->tkod)*ADC_SC)); PDI->tzn=AP->var_tech; PDI->nkod=PDI->tkod-ADC_SC*0.2;PDI->vkod=PDI->tkod+ADC_SC*0.2; if(PDI->nkod<0){PDI->nkod=0;PDI->vkod=ADC_SC*0.4;} if(PDI->vkod>ADC_SC){PDI->nkod=ADC_SC*0.6;PDI->vkod=ADC_SC;} _setcolor(8); _rectangle(_GFILLINTERIOR,NX+XD+2,NY+1+(word_s)((ADC_SC-PDI->vkod)*KOEF),NX+XD+6,NY-1+YD-(word_s)(PDI->nkod*KOEF)); } diov(nscr); p_a[nscr]=APT;p_c[nscr]=c_ptr+(TSC->tpov+TP)->nomcontr; stat_analog(APT,7);set_vso(7,nscr);image_cont(7,nscr); eprintf(GREEN_,APT->name); dinam_analog(APT,7,nscr); release_resource(ekran); } void diov(word_s nscr) {word_s i,j,jj,jjj,jjjj,zn; long kk,kp,rf,gtbl,rf1,rb,rp,gkzap; _setcolor(10); TSC->mac=&mg;TSC->res=r_mgn; time(&TSC->t_time); if((gtbl=TSC->mac->tbl-XD+8)<0)gtbl+=TSC->mac->kbl; request_resource(TSC->res,0L); TSC->hn_fl=sopen(NameFile[34],O_RDONLY|O_BINARY,SH_DENYNO); release_resource(TSC->res); gkzap=(50000)/TSC->mac->dlbl; rb=gkzap*TSC->mac->dlbl;rf1=rf=XD-10;rf=rf1*TSC->mac->dlbl; //@ kp=rf1%gkzap;kk=rf/rb+1;rp=rf%rb; if((bufov=(char *)calloc(1,rb))==NULL){eprintf(RED_,"Нет памяти для гpафиков");return;} for(jj=0,j=0,jjjj=0;jjmac->kbl) r_read(TSC->hn_fl,bufov,(unsigned)rb,gtbl*TSC->mac->dlbl,SEEK_SET,TSC->res); else {r_read(TSC->hn_fl,bufov,(unsigned)((TSC->mac->kbl-gtbl)*TSC->mac->dlbl),gtbl*TSC->mac->dlbl,SEEK_SET,TSC->res); r_read(TSC->hn_fl,bufov+(TSC->mac->kbl-gtbl)*TSC->mac->dlbl,(unsigned)(rb-(TSC->mac->kbl-gtbl)*TSC->mac->dlbl),(long)0,SEEK_SET,TSC->res); } for(jjj=0;jjjmac->kbl)gtbl=0; {if((TSC->t_time-*(long *)(bufov+TSC->mac->dlbl*jjj))<86400) {TSC->buf_zn_i=(m_kod *)((bufov+TSC->mac->dlbl*jjj)+sizeof(long)); for(i=STR->perv;i<(STR->perv+STR->kol);i++) {if((TSC->buf_zn_i+(PAR+i)->nomer)->count==0) {zn=(TSC->buf_zn_i+(PAR+i)->nomer)->zn; if(AP->type_sc==SC_SQRT)zn=(word_s)(sqrt((double)(zn)*ADC_SC)); if(znnkod)zn=PDI->nkod;if(zn>PDI->vkod)zn=PDI->vkod; if(jjjj) if(PDI->tkod!=-1) li(NX+jjjj,NY+YD-1-(word_s)((float)(PDI->tkod-PDI->nkod)*KOEF1),NX+1+jjjj,NY+YD-1-(word_s)((float)(zn-PDI->nkod)*KOEF1)); PDI->tkod=zn; } else PDI->tkod=-1; } } else for(i=STR->perv;i<(STR->perv+STR->kol);i++)PDI->tkod=-1; jjjj++; } } } free(bufov);close(TSC->hn_fl); } void ramka() {_setcolor(15);_rectangle(_GBORDER,0,Y_T_SCR,X_SCR,Y_B_SCR); _setcolor(0);_rectangle(_GFILLINTERIOR,1,Y_T_SCR+1,X_SCR-1,Y_B_SCR-1); } void ykstr(word_s ks,word_s ts) {word_s xn,xk,xon,xok; if(ks>1) { _setcolor(0);_rectangle(_GFILLINTERIOR,567,31,638,39); _setcolor(15); if(ts==1)xn=568;else{xn=577;fgtext(15,569,30,"%c",0x1b);} //579 if(ts==ks)xk=637;else{xk=628;fgtext(15,630,30,"%c",0x1a);} //626 _rectangle(_GBORDER,xn,30,xk,40); if(ts==ks){ xok=xk; xon=xok-9;} else if(ts==1){ xon=xn; xok=xon+9;} else { // xon=xn+ ((xk-xn)/ks)*ts - (xk-xn)/(ks*2); // xok=max(xon+(xk-xn)/(ks*2),2); xon=xn+ts*(xk-xn-5)/ks; xok=xon+5; } _rectangle(_GFILLINTERIOR,xon,32,xok,38); _rectangle(_GBORDER,566,30,639,40); setfont(1); fgtext(LIGHTBLUE_,601,31,"%d",ts); setfont(0); } } /*-------------------------------------------------------------------*/ void var_mode_uchet(word_s nscr) { word_s ky1,ky2,no_uch; char *cop; if(p_a[nscr]->type_mech==M_INP) return; //!! ky1 = read_wpipe(scr_chn[nscr],1*HZ); ky2 = read_wpipe(scr_chn[nscr],1*HZ); if(ky2 != UCHETE) return; if(ky1 != UCHET0 && ky1 != UCHET1) return; if(ky1==UCHET0) {no_uch=1; cop="Учет Bкл";} else {no_uch=0; cop="Учет ОТКЛ";} if(p_a[nscr]->no_uchet==no_uch) return; p_a[nscr]->no_uchet=no_uch; din_mod(p_a[nscr],i_par[nscr],nscr); #if (PROTOC) arc_op1("%s - %s",p_a[nscr]->cipher,cop); #endif wr_file_no_chet(nscr,no_uch); } /*-------------------------------------------------------------------*/ void wr_file_no_chet(word_s nscr,word_s flag) { word_s h,k,nf,kz; no_uch_f *pf, *pk; h = sopen("no_uch.bin",O_BINARY|O_RDWR,SH_DENYNO,S_IREAD|S_IWRITE); if (h==-1){ h=sopen("no_uch.bin",O_BINARY|O_RDWR|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE); if (h==-1) return; } if (flag){ lseek(h,filelength(h),SEEK_SET); write(h,p_a[nscr]->cipher,10); close(h); } else { pf = (no_uch_f *)calloc(1,filelength(h)); if(pf==NULL) return; read(h, pf, (unsigned)filelength(h)); nf = filelength(h) / sizeof(no_uch_f); for(k=0, pk=pf; k < nf; k++, pk++){ if ((kz=strncmp(p_a[nscr]->cipher,pk->cipher,9)) == 0) break; } if (!kz) { nf--; if (nf) { memcpy( pk, pf+nf, sizeof(no_uch_f) ); close(h); remove("no_uch.bin"); h=sopen("no_uch.bin",O_BINARY|O_RDWR|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE); write(h,pf,nf*sizeof(no_uch_f)); close(h); } else { close(h); remove("no_uch.bin"); } } else close(h); free(pf); } } /*-------------------------------------------------------------------*/