#include "complex.h" #include "arh.h" #include "graf.h" #include "screen.h" #define PAI Ptr_an[i] #define PNG Ptr_an[TSC->ng-1] #define tday ttm->tm_mday #define tmon ttm->tm_mon #define th ttm->tm_hour #define tmm ttm->tm_min #define ts ttm->tm_sec #define tyear ttm->tm_year #define tyday ttm->tm_yday #define X_MGT 35 #define TSC tbase[nscr] static word_s X_MGB[3]={637,611,563}; /* правые гpаницы экрана */ static word_s G_I[3]={10,12,11}; static word_s X_GH[3]={60,48,48}; static word_s KBL[3]={300,288,744}; char *buf_cur=NULL; /* буфер образа курсора */ //static char *GRAD[8][2]={"-20м","-10м","-40м","-20м","-1ч","-30м","-1ч20м","-40м","-1ч40м","-50м","-2ч","-1ч","-2ч20м","-1ч10м","-2ч40м","-1ч20м"}; /*static*/ char sc[6][5]={" 0%"," 20%"," 40%"," 60%"," 80%","100%"}; short M_color[8]={5,6,9,10,11,12,13,14}; //short M_color[5]={10,11,13,9,14}; /* массив цветов гpафиков */ char *nmec[12]={"янваpь","февpаль","маpт","апpель","май","июнь","июль","август","сентябpь","октябpь","ноябpь","декабpь"}; short maxd[12]={31,28,31,30,31,30,31,31,30,31,30,31}; g_graf *M_gr; /* указатель на начало описателеи гpупп гpафиков */ /* глобальныи для использования дpугими пpогpаммами */ void stmgn(word_s n),skmec(word_s n),vrem(word_s n),naim(word_s n),setka(word_s n),li(), izkoef(word_s par,word_s nscr),tvr(word_s n),dinmgn(word_s n),dinmgn1(word_s n), dinmgn2(word_s n),stmgn1(word_s v,word_s n),cur(word_s n),cur1(word_s n),risgr(word_s n), rislin(word_s x,word_s n),pdm(word_s n),pdc(word_s nscr),stl(word_s n),ff(word_s n), mgmin(word_s p,word_s n),mgpl(word_s p,word_s n); word_s pix(word_s i,word_s par,word_s n),gran(word_s i,word_s par,word_s n), kolden(word_s nscr,word_s ade,word_s ame,word_s ago); word_s grafmgn(word_s nscr); float ma(word_s n,word_s m); typedef struct {char *bufr,*bufrt; word_s kod,cdk,O_NGR,NGR,gtip,ng,ng1,gst,hn_fl,dinm,ny,sy[Max_K_par], tcur,koef,de,me,go,ha,mi,se,dekada,dek1,det,met,got,hat,mit,set, dekadat,tekd,tekd1,seg,nnx,kkx; long nnz,kkz,nkz,knz,t_time,*buf_t,interv; cpr *mac; arh *fl; resourceptr res; bbuuff *buf_tt; m_kod *buf_zn_i; }base; base *tbase[4]; word_s Graf(word_s kodgr,word_s nscr) { word_s kz; if(!buf_cur) if((buf_cur=(char *)calloc(1,(word_s)_imagesize(0,Y_B,0,Y_T)))==NULL) {eprintf(RED_,"Нет памяти для образа графиков");return 0;} _setcolor(15);_rectangle(_GBORDER,0,30,639,349); if((tbase[nscr]=(base *)calloc(1,sizeof(base)))==NULL) {eprintf(RED_,"Нет памяти для гpафиков");return 0;} TSC->kod=TSC->cdk=kodgr;TSC->hn_fl=-1;TSC->O_NGR=0; kz=grafmgn(nscr); free(tbase[nscr]); return kz; } word_s grafmgn(word_s nscr) {word_s d_V,d_vs; tvr(nscr); TSC->koef=1;TSC->ng=0;TSC->ng1= -1; stmgn(nscr); if(TSC->gst==0)dinmgn(nscr); while(!endrun) { #if (DEBUG) view_text(2,73,8,"GRAF "); #endif TSC->kod=read_wpipe(scr_chn[nscr],t_out_v*HZ); d_V=d_vs;if(TSC->kod&0x80)d_vs=1;else d_vs=V_dis; if(TSC->kod==TSC->cdk){if(TSC->gst||TSC->ng==0)continue;TSC->ng=0;stmgn1(0,nscr);dinmgn2(nscr);continue;} if(TSC->kod==K_CUT||TSC->kod==K_MGN||TSC->kod==K_MEC) {if(TSC->kod==K_MGN&&TSC->cdk==K_CUT){izkoef(1,nscr);continue;} TSC->koef=1;free(TSC->bufrt); if(TSC->kod!=K_CUT||TSC->cdk!=K_MGN) tvr(nscr); else {if(TSC->seg) {TSC->hat=23;TSC->mit=55;} else {TSC->hat=TSC->ha;TSC->mit=TSC->mi;}} if(TSC->kod==K_MGN&&TSC->cdk==K_MEC)TSC->interv=0; TSC->cdk=TSC->kod; stmgn(nscr);if(TSC->gst)continue;dinmgn(nscr);continue; } if(list_func(TSC->kod)){free(TSC->bufrt);return TSC->kod;} /*дp.зад.*/ if(var_obj(TSC->kod,nscr)) {if(!TSC->gtip) if((TSC->kkz=TSC->nnz+(TSC->kkx+1)*TSC->koef)>=TSC->mac->kbl) TSC->kkz-=TSC->mac->kbl; TSC->O_NGR=0;stl(nscr);continue; } if((o_ptr+o_curr[nscr])->n_gr_g) { if(TSC->kod==Left) {if(TSC->kkx>0) {cur1(nscr); if((TSC->tcur-=d_V)<=0)TSC->tcur=0; cur(nscr);} goto m1;} if(TSC->kod==Right) {if(TSC->kkx>0) {cur1(nscr); if((TSC->tcur+=d_V)>TSC->kkx)TSC->tcur=TSC->kkx; cur(nscr);} goto m1;} if(TSC->kod==Tab) {if(!TSC->ng) { if(TSC->ng1== -1) goto m1; _setcolor(GRAY_);_rectangle(_GBORDER,DW*(X_WI-1)-4+(TSC->ng1-1)*DW*x_delta,56,DW*(9+X_WI-1)+4+(TSC->ng1-1)*DW*x_delta,96); //? do if(++TSC->ng1 > Max_K_par)TSC->ng1=1; while((M_gr+TSC->NGR)->tip[TSC->ng1-1]==EMPTY); _setcolor(15);_rectangle(_GBORDER,DW*(X_WI-1)-4+(TSC->ng1-1)*DW*x_delta,56,DW*(9+X_WI-1)+4+(TSC->ng1-1)*DW*x_delta,96); //? //? eprintf(M_color[TSC->ng1-1],Ptr_an[TSC->ng1-1]->name); } goto m1;} if(TSC->kod==K1){if(TSC->gtip!=2)izkoef(1,nscr);goto m1;} if(TSC->kod==K2){if(TSC->gtip!=2)izkoef(2,nscr);goto m1;} if(TSC->kod==K3){if(TSC->gtip!=2)izkoef(3,nscr);goto m1;} if(TSC->kod==K4){if(TSC->gtip!=2)izkoef(4,nscr);goto m1;} if(TSC->kod==K5){if(TSC->gtip!=2)izkoef(5,nscr);goto m1;} if(TSC->kod==K6){if(TSC->gtip!=2)izkoef(6,nscr);goto m1;} if(TSC->kod==K7){if(TSC->gtip!=2)izkoef(7,nscr);goto m1;} if(TSC->kod==K8){if(TSC->gtip!=2)izkoef(8,nscr);goto m1;} if(TSC->kod==PgDn) {if(K_GR>1) {if(!TSC->gtip) if((TSC->kkz=TSC->nnz+(TSC->kkx+1)*TSC->koef)>=TSC->mac->kbl) TSC->kkz-=TSC->mac->kbl; if(++TSC->O_NGR>=K_GR)TSC->O_NGR=0; stl(nscr); } goto m1;} if(TSC->kod==PgUp) {if(K_GR>1) {if(!TSC->gtip) if((TSC->kkz=TSC->nnz+(TSC->kkx+1)*TSC->koef)>=TSC->mac->kbl) TSC->kkz-=TSC->mac->kbl; if(--TSC->O_NGR<0)TSC->O_NGR=K_GR-1; stl(nscr); } goto m1;} if(TSC->kod==QMORE) {if(TSC->gtip==0){mgpl(4,nscr);goto m1;} if(++TSC->seg>0){TSC->seg=0;goto m1;} if(TSC->gtip==1) {if(++TSC->det>maxd[TSC->met-1]) {TSC->det=1; if(++TSC->met>12){TSC->met=1;TSC->got++;} } if(++TSC->tekd1>=NDayArh)TSC->tekd1=0; } if(TSC->gtip==2) {if(++TSC->met>12) {TSC->met=1;TSC->got++;} TSC->dekadat=0; if(++TSC->tekd1>=NMonsArh)TSC->tekd1=0; gprintf(R_name,2," "); } ff(nscr); goto m1;} if(TSC->kod==QLESS) {if(TSC->gtip==0){mgmin(4,nscr);goto m1;} if(TSC->gtip==1) {if(--TSC->seg<(1-NDayArh)){TSC->seg=1-NDayArh;goto m1;} if(--TSC->det<1) {if(--TSC->met<1){TSC->met=12;TSC->det=31;TSC->got--;} else TSC->det=maxd[TSC->met-1]; } if(--TSC->tekd1<0)TSC->tekd1=NDayArh-1; } if(TSC->gtip==2) {if(--TSC->seg<(1-NMonsArh)){TSC->seg=1-NMonsArh;goto m1;} if(--TSC->met<1){TSC->met=12;TSC->got--;} TSC->dekadat=2;if(--TSC->tekd1<0)TSC->tekd1=NMonsArh-1; gprintf(R_name,2," "); } ff(nscr); goto m1;} if(TSC->kod==ENTER) { if(TSC->ng1== -1) goto m1; if(TSC->ng1!=TSC->ng){TSC->ng=TSC->ng1;stmgn1(0,nscr);dinmgn2(nscr);}goto m1; } if(TSC->kod==LESS) {if(TSC->gtip==2) {if(TSC->dekadat) {gprintf(R_name,2," "); TSC->dekadat--; skmec(nscr);stmgn1(2,nscr);dinmgn2(nscr); } } if(TSC->gtip==0)mgmin(1,nscr); goto m1;} if(TSC->kod==MORE) {if(TSC->gtip==2) {if((TSC->dekada==TSC->dekadat&&TSC->seg==0)||TSC->dekadat==2)goto m1; gprintf(R_name,2," "); TSC->dekadat++; skmec(nscr);stmgn1(2,nscr);dinmgn2(nscr); } if(TSC->gtip==0)mgpl(1,nscr); goto m1;} m1:; } if(TSC->dinm) if(check_flag(period_fl[nscr])) {clear_flag(period_fl[nscr]); if(TSC->gst==0&&TSC->gtip==0) dinmgn1(nscr); } } return 0; } void tvr(word_s nscr) {vrem(nscr);TSC->det=TSC->de;TSC->met=TSC->me;TSC->got=TSC->go; TSC->hat=TSC->ha;TSC->mit=TSC->mi;TSC->set=TSC->se;TSC->dekadat=TSC->dekada; TSC->tekd1=TSC->tekd=tekden(tyear,tyday);TSC->seg=0; } void izkoef(word_s par,word_s nscr) {word_s izi; if(TSC->koef!=par||TSC->gtip==1) {TSC->koef=par;free(TSC->bufrt);vrem(nscr);TSC->cdk=K_MGN; if(TSC->gtip){TSC->hat=TSC->tcur/12;TSC->mit=TSC->tcur%12*5;} if(TSC->met==TSC->me&&TSC->got==TSC->go)TSC->interv=TSC->de-TSC->det; else {TSC->interv=maxd[TSC->met-1]-TSC->det; if(TSC->got==TSC->go) for(izi=TSC->met+1;izime;izi++)TSC->interv+=maxd[izi-1]; else {for(izi=TSC->met+1;izi<=12;izi++)TSC->interv+=maxd[izi-1]; for(izi=1;izime;izi++)TSC->interv+=maxd[izi-1]; } TSC->interv+=TSC->de; } TSC->interv=(TSC->interv*24+TSC->ha)*60+TSC->mi-TSC->hat*60-TSC->mit; if(TSC->intervkoef+2)){tvr(nscr);TSC->interv=0;} //@ else {TSC->nnx=0;TSC->kkx=299;TSC->mac=&mg;TSC->fl=&mgn;TSC->res=r_mgn; if((TSC->nnz=(((long)86400*TSC->tekd+TSC->hat*3600+TSC->mit*60)/into)-240*TSC->koef)<0) //@ TSC->nnz+=TSC->mac->kbl; if((TSC->kkz=TSC->nnz+300*TSC->koef)>=TSC->mac->kbl) TSC->kkz-=TSC->mac->kbl; TSC->interv=1; } stmgn(nscr);if(TSC->gst==0)dinmgn(nscr); } } void mgmin(word_s par,word_s nscr) {word_s nnx,kkx; long interv; long nnz,kkz; nnx=TSC->nnx; kkx=TSC->kkx; nnz=TSC->nnz; kkz=TSC->kkz; interv=TSC->interv; TSC->dinm=0; TSC->nnx=0;TSC->kkx=299; if((TSC->nnz-=60*par*TSC->koef)<0)TSC->nnz+=TSC->mac->kbl; if((TSC->kkz=TSC->nnz+300*TSC->koef)>TSC->mac->kbl)TSC->kkz-=TSC->mac->kbl; TSC->interv=TSC->hat*60+TSC->mit-into*par*TSC->koef; //@ if(TSC->interv<0) {TSC->interv+=1440; if(--TSC->seg<(1-NDayArh)) {TSC->seg++; TSC->nnz=nnz;TSC->kkz=kkz;TSC->nnx=nnx;TSC->kkx=kkx;TSC->interv=interv; eprintf(YELLOW_,"конец архива"); return; } else {TSC->hat=TSC->interv/60;TSC->mit=TSC->interv%60; if(--TSC->tekd<0)TSC->tekd=NDayArh-1; if(--TSC->det<1) {TSC->det=maxd[TSC->met-2]; if(--TSC->met<1){TSC->got--;TSC->det=31;TSC->met=12;} } } } else{TSC->hat=TSC->interv/60;TSC->mit=TSC->interv%60;} free(TSC->bufrt);stmgn1(0,nscr);pdc(nscr); gprintf(R_time,63,"%2d:%d ",TSC->hat,TSC->mit);dinmgn(nscr); TSC->tekd1=TSC->tekd; } void mgpl(word_s par,word_s nscr) {word_s dep,mep,gop,hap,mip,izi; vrem (nscr); dep=TSC->det;mep=TSC->met;gop=TSC->got;hap=TSC->hat;mip=TSC->mit; mip+=(par*into*TSC->koef);hap+=mip/60;mip%=60;dep+=hap/24;hap%=24; //@ if(dep!=TSC->det){TSC->seg++;if(++TSC->tekd>=NDayArh)TSC->tekd=0;} if(dep>maxd[mep-1]) {dep=1;if(++mep>12){mep=1;gop++;}} if(mep==TSC->me&&gop==TSC->go)TSC->interv=TSC->de-dep; else {TSC->interv=maxd[mep-1]-dep; if(gop==TSC->go) for(izi=mep+1;izime;izi++)TSC->interv+=maxd[izi-1]; else {for(izi=mep+1;izi<=12;izi++)TSC->interv+=maxd[izi-1]; for(izi=1;izime;izi++)TSC->interv+=maxd[izi-1]; } TSC->interv+=TSC->de; } TSC->interv=(TSC->interv*24+TSC->ha)*60+TSC->mi-hap*60-mip; if(TSC->interv<(into*TSC->koef-1)) //@ {TSC->nnx=0;TSC->kkx=239;TSC->kkz=TSC->mac->tbl; if((TSC->nnz=TSC->kkz-240*TSC->koef)<0)TSC->nnz+=TSC->mac->kbl; TSC->det=TSC->de;TSC->met=TSC->me;TSC->got=TSC->go;TSC->hat=TSC->ha;TSC->mit=TSC->mi; TSC->dinm=1; } else {TSC->nnx=0;TSC->kkx=299; if((TSC->nnz+=60*par*TSC->koef)>=TSC->mac->kbl)TSC->nnz-=TSC->mac->kbl; if((TSC->kkz+=60*par*TSC->koef)>=TSC->mac->kbl)TSC->kkz-=TSC->mac->kbl; TSC->det=dep;TSC->met=mep;TSC->got=gop;TSC->hat=hap;TSC->mit=mip; } free(TSC->bufrt);stmgn1(0,nscr);pdc(nscr); gprintf(R_time,63,"%2d:%d ",TSC->hat,TSC->mit);dinmgn(nscr); TSC->tekd1=TSC->tekd; } void ff(word_s nscr) {free(TSC->bufrt); if(TSC->gtip==2)skmec(nscr); TSC->tekd=TSC->tekd1;stmgn1(1,nscr);dinmgn(nscr); } void dinmgn2(word_s nscr) {word_s i,j,dek; naim(nscr); if(TSC->gtip!=2)dek=0; // else dek=TSC->dekadat*240; else dek=5*TSC->dekadat*240/into; //@ for(j=0;j<=TSC->kkx;j++) for(i=0;iNGR)->tip[i]==EMPTY) continue; if((TSC->buf_tt+j+dek)->zn[i]!=-1) { TSC->ny=pix(i,(TSC->buf_tt+j+dek)->zn[i],nscr); if(TSC->ng) { if(i==TSC->ng-1&&(TSC->gtip!=2||(TSC->gtip==2&&TSC->nkz<=j+dek&&j+dek<=TSC->knz))) {_setcolor(3); li(X_MGT+1+j*2,Y_B,X_MGT+1+j*2,Y_B-(word_s)(TSC->ny*K_SCR)); } } else if((j&&TSC->gtip!=2)||(TSC->gtip==2&&TSC->nkzknz)) if((TSC->buf_tt+j-1+dek)->zn[i]!=-1) { _setcolor(M_color[i]); li(X_MGT+1+(j-1)*2,Y_B-(word_s)(TSC->sy[i]*K_SCR),X_MGT+1+j*2,Y_B-(word_s)(TSC->ny*K_SCR)); } TSC->sy[i]=TSC->ny; } } cur(nscr); } void dinmgn1(word_s nscr) {word_s i; request_resource(ekran,0L); if(screen!=nscr)set_screen(nscr); if(++TSC->kkx>299) {tvr(nscr);pdc(nscr); stmgn1(1,nscr); _settextcolor(7);gprintf(R_time,C_time-1,"%2d:%d ",th,tmm); free(TSC->bufrt);dinmgn(nscr); } else {time(&((TSC->buf_tt+TSC->kkx)->ttbb)); if(TSC->kkx-1==TSC->tcur)cur1(nscr); for(i=0;iNGR)->tip[i]==EMPTY) continue; if(PAI->novalid==0) { (TSC->buf_tt+TSC->kkx)->zn[i]=PAI->var_cod; if(PAI->type_sc==SC_SQRT)(TSC->buf_tt+TSC->kkx)->zn[i]=(word_s)(sqrt((double)((TSC->buf_tt+TSC->kkx)->zn[i])*ADC_SC)); TSC->ny=pix(i,(TSC->buf_tt+TSC->kkx)->zn[i],nscr); if(TSC->ng) { if(i==TSC->ng-1) { _setcolor(3); li(X_MGT+1+TSC->kkx*2,Y_B,X_MGT+1+TSC->kkx*2,Y_B-(word_s)(TSC->ny*K_SCR)); } } else if((TSC->buf_tt+TSC->kkx-1)->zn[i]!=-1) { _setcolor(M_color[i]); li(X_MGT+1+(TSC->kkx-1)*2,Y_B-(word_s)(TSC->sy[i]*K_SCR),X_MGT+1+TSC->kkx*2,Y_B-(word_s)(TSC->ny*K_SCR)); } TSC->sy[i]=TSC->ny; } else (TSC->buf_tt+TSC->kkx)->zn[i]=-1; } if(TSC->kkx-1==TSC->tcur){TSC->tcur++;cur(nscr);} } if(screen!=nscr)set_screen(screen); release_resource(ekran); } void stmgn1(word_s par,word_s nscr) { _setcolor(0);_rectangle(_GFILLINTERIOR,X_MGT+1,Y_T,X_MGB[TSC->gtip]-1,Y_B); setka(nscr);if(TSC->ng)risgr(nscr); if(par) { if(TSC->cdk==K_MGN) {TSC->nnx=0;TSC->kkx=239;TSC->kkz=TSC->mac->tbl; if((TSC->nnz=TSC->kkz-240*TSC->koef)<0)TSC->nnz+=TSC->mac->kbl; goto m2; } if(TSC->cdk==K_CUT) {TSC->nnx=0;TSC->nnz=-1; if(TSC->seg)TSC->kkx=TSC->kkz=287; else{vrem(nscr);TSC->kkz=(TSC->ha*60+TSC->mi)/intu;TSC->kkx=TSC->kkz-1;} TSC->fl=&cut[TSC->tekd];pdc(nscr); goto m2; } if(TSC->cdk==K_MEC) {TSC->nnx=0;TSC->nnz=-1; if(TSC->seg) {TSC->nkz=TSC->dekadat*240;TSC->kkz=maxd[TSC->met-1]*24-1; if((TSC->knz=TSC->nkz+263)>TSC->kkz)TSC->knz=TSC->kkz;TSC->kkx=TSC->knz-TSC->dekadat*240; } else {TSC->nkz=TSC->dekadat*240;TSC->kkz=(TSC->det-1)*24+TSC->hat; if(TSC->dekada==TSC->dekadat)TSC->knz=TSC->kkz-1; else if((TSC->knz=TSC->nkz+263)>TSC->kkz)TSC->knz=TSC->kkz; TSC->kkx=TSC->knz-TSC->dekadat*240; } if(par==2)TSC->tcur=TSC->kkx; TSC->fl=&mec[TSC->tekd];pdm(nscr); goto m2; } m2:; } } word_s gran(word_s i,word_s par,word_s nscr) {if(PAI->type_sc==SC_SQRT)par=(word_s)(sqrt((double)par*ADC_SC)); return par; } void stmgn(word_s nscr) { char str[10]; int tim; request_resource(ekran,0L); TSC->dinm=0; if(TSC->cdk==K_MGN){TSC->gtip=0;TSC->mac=&mg;TSC->fl=&mgn;TSC->res=r_mgn; if(TSC->interv==0) {TSC->nnx=0;TSC->kkx=239;TSC->kkz=TSC->mac->tbl; if((TSC->nnz=TSC->kkz-240*TSC->koef)<0) TSC->nnz+=TSC->mac->kbl; TSC->dinm=1; } TSC->interv=0; clear_flag(period_fl[nscr]); change_timer(period_tm[nscr],into*HZ*TSC->koef,1); //@ goto m3;} if(TSC->cdk==K_CUT){TSC->gtip=1;TSC->mac=&cu;TSC->res=r_cut; TSC->fl=&cut[TSC->tekd]; TSC->nnx=0;TSC->nnz=-1; TSC->kkx=TSC->kkz=(TSC->hat*60+TSC->mit)/intu;if(!TSC->seg)TSC->kkx--; goto m3;} if(TSC->cdk==K_MEC){TSC->gtip=2;TSC->mac=&mc;TSC->res=r_mec; TSC->tekd1=TSC->tekd=tekmec(tyear,tmon); TSC->fl=&mec[TSC->tekd]; TSC->nnx=0;TSC->nnz=-1;TSC->nkz=TSC->dekadat*240; TSC->knz=TSC->kkz=(TSC->det-1)*24+TSC->hat;TSC->knz--; TSC->kkx=TSC->kkz-TSC->dekadat*240-1; goto m3;} m3:; TSC->NGR= *((o_ptr+o_curr[nscr])->nom_gr_g+TSC->O_NGR); //(o_ptr+o_curr[nscr])->nom_gr_g[TSC->O_NGR]; _setcolor(0);_rectangle(_GFILLINTERIOR,1,Y_T_SCR+1,X_SCR-1,Y_B_SCR-1); if((o_ptr+o_curr[nscr])->n_gr_g==0) {eprintf(YELLOW_,"Графики отсутствуют"); TSC->gst=1;release_resource(ekran);return;} else TSC->gst=0; ykstr(K_GR,TSC->O_NGR+1); _setcolor(7);_rectangle(_GBORDER,X_MGT,Y_T-1,X_MGB[TSC->gtip],Y_B+2); _settextcolor(7); _getimage(X_MGT,Y_B,X_MGT,Y_T,buf_cur); gprintf(R_tex,16,"%s",(M_gr+TSC->NGR)->name); setka(nscr); switch(TSC->gtip) {case 0 : tim=TSC->koef*4*into; if(tim>=60) sprintf(str,"-%dч%dм",tim/60,tim%60); else sprintf(str,"-%dм",tim); gprintf(R_time,5,str); // gprintf(R_time,5,"%s",GRAD[TSC->koef-1][0]); //@ tim=TSC->koef*4*into/2; if(tim>=60) sprintf(str,"-%dч%dм",tim/60,tim%60); else sprintf(str,"-%dм",tim); gprintf(R_time,35,str); // gprintf(R_time,35,"%s",GRAD[TSC->koef-1][1]); //@ gprintf(R_time,63,"%2d:%d ",TSC->hat,TSC->mit); gprintf(R_tex,C_tex-2,"МГНОВЕННЫЕ ЗНАЧЕНИЯ"); pdc(nscr); break; case 1 : gprintf(R_time,11,"2ч 6ч 10ч 14ч 18ч 22ч"); gprintf(R_tex,C_tex-2,"СРЕДНИЕ ЗА 5 МИНУТ"); pdc(nscr); break; case 2 : gprintf(R_tex,C_tex,"СРЕДНИЕ ЗА ЧАС");skmec(nscr); pdm(nscr); break; } naim(nscr); if(TSC->ng)risgr(nscr); release_resource(ekran); } void risgr(word_s nscr) {_setcolor(14);rislin(PNG->min_reg,nscr);rislin(PNG->max_reg,nscr); _setcolor(12);rislin(PNG->min_al,nscr);rislin(PNG->max_al,nscr); } void rislin(word_s par,word_s nscr) {if(par) {TSC->ny=pix(TSC->ng-1,gran(TSC->ng-1,par,nscr),nscr); li(X_MGT+1,Y_B-(word_s)(TSC->ny*K_SCR),X_MGB[TSC->gtip]-1,Y_B-(word_s)(TSC->ny*K_SCR)); } } void stl(word_s nscr) { char str[10]; int tim; TSC->ng=0;TSC->ng1= -1; TSC->NGR= *((o_ptr+o_curr[nscr])->nom_gr_g+TSC->O_NGR); //(o_ptr+o_curr[nscr])->nom_gr_g[TSC->O_NGR]; free(TSC->bufrt); _setcolor(0);_rectangle(_GFILLINTERIOR,1,Y_T_SCR+1,X_SCR-1,Y_B_SCR-1); if((o_ptr+o_curr[nscr])->n_gr_g==0){eprintf(YELLOW_,"Графики отсутствуют");TSC->gst=1;return;} else TSC->gst=0; ykstr(K_GR,TSC->O_NGR+1); _setcolor(7);_rectangle(_GBORDER,X_MGT,Y_T-1,X_MGB[TSC->gtip],Y_B+2); _getimage(X_MGT,Y_B,X_MGT,Y_T,buf_cur); _settextcolor(7); gprintf(R_tex,16,"%s",(M_gr+TSC->NGR)->name); setka(nscr); switch(TSC->gtip) {case 0 : tim=TSC->koef*4*into; if(tim>=60) sprintf(str,"-%dч%dм",tim/60,tim%60); else sprintf(str,"-%dм",tim); gprintf(R_time,5,str); // gprintf(R_time,5,"%s",GRAD[TSC->koef-1][0]); tim=TSC->koef*4*into/2; if(tim>=60) sprintf(str,"-%dч%dм",tim/60,tim%60); else sprintf(str,"-%dм",tim); gprintf(R_time,35,str); // gprintf(R_time,35,"%s",GRAD[TSC->koef-1][1]); gprintf(R_time,63,"%2d:%d ",TSC->hat,TSC->mit); gprintf(R_tex,C_tex-2,"МГНОВЕННЫЕ ЗНАЧЕНИЯ"); pdc(nscr); break; case 1 : gprintf(R_time,11,"2ч 6ч 10ч 14ч 18ч 22ч"); gprintf(R_tex,C_tex-2,"СРЕДНИЕ ЗА 5 МИНУТ"); pdc(nscr); break; case 2 : gprintf(R_tex,C_tex,"СРЕДНИЕ ЗА ЧАС");skmec(nscr); pdm(nscr); break; } naim(nscr);dinmgn(nscr); } word_s kolden(word_s nscr,word_s ade,word_s ame,word_s ago) {long i=0,i1=0;word_s j; for(j=93;jgot;j++){if(j%4)i1+=365;else i1+=366;} for(j=0;jmet-1;j++) {if(j!=1)i1+=maxd[j]; else{if(TSC->got%4)i1+=28;else i1+=29;} } i1+=TSC->det; return abs((word_s)(i-i1)); } void dinmgn(word_s nscr) {word_s i,j,jj,jjj,ysr,nn[Max_K_par],ade,ame,ago,dek,prdin; long kk,kp,rf,gtbl,rf1,rb,rp,gkzap; if((TSC->tcur=TSC->kkx)<0)TSC->tcur=0; if(TSC->gtip)TSC->koef=1; if(TSC->kkx<0)return; // if(TSC->gtip!=2)dek=0; else dek=TSC->dekadat*240; if(TSC->gtip!=2)dek=0; else dek=5*TSC->dekadat*240/into; //@ request_resource(TSC->res,0L); if(TSC->hn_fl!=-1)close(TSC->hn_fl);TSC->hn_fl=sopen(TSC->fl->ifl,O_RDONLY|O_BINARY,SH_DENYNO); release_resource(TSC->res); if((TSC->bufrt=(char *)calloc(sizeof(bbuuff),KBL[TSC->gtip]))==NULL) {eprintf(RED_,"Нет памяти для гpафиков");return;} TSC->buf_tt=(bbuuff *)TSC->bufrt; gkzap=(50*1000)/TSC->mac->dlbl; rb=gkzap*TSC->mac->dlbl; if((rf=TSC->kkz-TSC->nnz)<0)rf+=TSC->mac->kbl;rf1=rf; rf=rf1*TSC->mac->dlbl;kp=rf1%gkzap;kk=rf/rb+1;rp=rf%rb; if((TSC->bufr=(char *)calloc(1,rb))==NULL) {eprintf(RED_,"Нет памяти для гpафиков");return;} for(jj=0,j=-1,ysr=0,gtbl=TSC->nnz+1;jjmac->kbl) r_read(TSC->hn_fl,TSC->bufr,(unsigned)rb,gtbl*TSC->mac->dlbl,SEEK_SET,TSC->res); else {r_read(TSC->hn_fl,TSC->bufr,(unsigned)((TSC->mac->kbl-gtbl)*TSC->mac->dlbl),gtbl*TSC->mac->dlbl,SEEK_SET,TSC->res); r_read(TSC->hn_fl,TSC->bufr+(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(ysr==TSC->koef)ysr=0; if(ysr==0) {++j; for(i=0;iNGR)->tip[i]==EMPTY) continue; (TSC->buf_tt+j)->zn[i]=-1; nn[i]=0; } (TSC->buf_tt+j)->ttbb=-1L; } if(TSC->gtip&&j>TSC->kkz){jjj=gkzap;jj=kk;continue;} TSC->buf_t=(long *)(TSC->bufr+TSC->mac->dlbl*jjj); TSC->buf_zn_i=(m_kod *)((TSC->bufr+TSC->mac->dlbl*jjj)+sizeof(long)); t_loct(TSC->buf_t,ttm);ade=tday;ame=tmon;ago=tyear; if(!TSC->gtip) {if(TSC->det==ade&&(TSC->met-1)==ame&&TSC->got==ago)prdin=0; else {if(kolden(nscr,ade,ame,ago)>1)prdin=1; else prdin=0; } } if((prdin&&!TSC->gtip)||((TSC->det!=ade||TSC->met-1!=ame)&&TSC->gtip==1)||((ago!=TSC->got||TSC->met-1!=ame)&&TSC->gtip==2)||*TSC->buf_t==0); else {(TSC->buf_tt+j)->ttbb=*TSC->buf_t; for(i=0;iNGR)->tip[i]==EMPTY) continue; if((TSC->buf_zn_i+N_buf[i])->count==0) { (TSC->buf_tt+j)->zn[i]=(word_s)(((long)(TSC->buf_tt+j)->zn[i]*nn[i]+(TSC->buf_zn_i+N_buf[i])->zn)/(nn[i]+1)); nn[i]++; if(ysr==TSC->koef-1) { if(PAI->type_sc==SC_SQRT)(TSC->buf_tt+j)->zn[i]=(word_s)(sqrt((double)((TSC->buf_tt+j)->zn[i])*ADC_SC)); TSC->ny=pix(i,(TSC->buf_tt+j)->zn[i],nscr); if(TSC->ng) { if(i==TSC->ng-1&&(TSC->gtip!=2||(TSC->gtip==2&&TSC->nkz<=j&&j<=TSC->knz))) { _setcolor(3); li(X_MGT+1+(j-dek)*2,Y_B,X_MGT+1+(j-dek)*2,Y_B-(word_s)(TSC->ny*K_SCR)); } } else if((j&&TSC->gtip!=2)||(TSC->gtip==2&&TSC->nkzknz)) if((TSC->buf_tt+j-1)->zn[i]!=-1) { _setcolor(M_color[i]); li(X_MGT+1+(j-1-dek)*2,Y_B-(word_s)(TSC->sy[i]*K_SCR),X_MGT+1+(j-dek)*2,Y_B-(word_s)(TSC->ny*K_SCR)); } TSC->sy[i]=TSC->ny; } } else if(ysr==TSC->koef-1)if(nn[i]==0)(TSC->buf_tt+j)->zn[i]=-1; } } } } free(TSC->bufr);close(TSC->hn_fl); cur(nscr); } void skmec(word_s nscr) {word_s i,ii,maxi; if(TSC->dekadat>1)maxi=maxd[TSC->met-1];else maxi=(TSC->dekadat+1)*10+1; gprintf(R_time,7," "); _settextcolor(7); for(i=TSC->dekadat*10+1,ii=0;i<=maxi;i++,ii++)gprintf(R_time,7+ii*6,"%2d",i); } void vrem(word_s nscr) {time(&TSC->t_time);t_loct(&TSC->t_time,ttm);if(tyear%4==0)maxd[1]=29; TSC->de=tday;TSC->me=tmon+1;TSC->go=tyear;TSC->ha=th;TSC->mi=tmm;TSC->se=ts; if((TSC->dekada=(TSC->de-1)/10)>2)TSC->dekada=2; } void naim(word_s nscr) {word_s i; _setcolor(0);_rectangle(_GFILLINTERIOR,1,Y_T_SCR+25,X_SCR-1,Y_T-3); if(TSC->ng) {_settextcolor(7); gprintf(R_cipher,X_WI+12,"ШКАЛА");gprintf(R_cipher+1,X_WI+12,"ГРАНИЦЫ Р"); gprintf(R_unit,X_WI+12,"ГРАНИЦЫ А");gprintf(R_cipher+1,X_WI+47,"ДИАПАЗОН"); gprintf(R_cipher+2,X_WI+47,"ОТОБРАЖЕНИЯ"); _settextcolor(15); gprintf(R_cipher,X_WI,"%s",PNG->cipher);gprintf(R_unit,X_WI,"%s",PNG->unit); gprintf(R_cipher+2,X_WI+60,"%.2f %.2f",(M_gr+TSC->NGR)->tn_o[TSC->ng-1],(M_gr+TSC->NGR)->tv_o[TSC->ng-1]); if(PNG->type_sc==SC_SQRT)gprintf(R_cipher,X_WI+20,"К"); else gprintf(R_cipher,X_WI+20,"Л"); gprintf(R_cipher,X_WI+24,"%8.2f %8.2f",PNG->min_sc,PNG->max_sc); _settextcolor(14); if(PNG->min_reg)gprintf(R_cipher+1,X_WI+24,"%8.2f",ma(PNG->min_reg,nscr)); if(PNG->max_reg)gprintf(R_cipher+1,X_WI+33,"%8.2f",ma(PNG->max_reg,nscr)); _settextcolor(12); if(PNG->min_al)gprintf(R_cipher+2,X_WI+24,"%8.2f",ma(PNG->min_al,nscr)); if(PNG->max_al)gprintf(R_cipher+2,X_WI+33,"%8.2f",ma(PNG->max_al,nscr)); } else { for(i=0;iNGR)->tip[i]==EMPTY)continue; if(TSC->ng1== -1) TSC->ng1 = i+1; _settextcolor(M_color[i]); gprintf(R_cipher,X_WI+i*x_delta,"%s",PAI->cipher);gprintf(R_unit,X_WI+i*x_delta,"%s",PAI->unit); //? _setcolor(GRAY_);_rectangle(_GBORDER,DW*(X_WI-1)-4+i*DW*x_delta,56,DW*(9+X_WI-1)+4+i*DW*x_delta,96); } if(TSC->ng1 != -1){_setcolor(15);_rectangle(_GBORDER,DW*(X_WI-1)-4+(TSC->ng1-1)*DW*x_delta,56,DW*(9+X_WI-1)+4+(TSC->ng1-1)*DW*x_delta,96);} //? else return; } _settextcolor(7); if(TSC->ng) i=M_color[TSC->ng-1]; else i=M_color[TSC->ng1-1]; eprintf(i,Ptr_an[TSC->ng1-1]->name); } void setka(word_s nscr) {word_s i; for(i=0;i<6;i++) {_setcolor(8);li(X_MGT,Y_B-i*40,X_MGB[TSC->gtip],Y_B-i*40); fgtext(7,1,Y_B-i*40-4,"%s",sc[i]); li(X_MGT,Y_B-i*40,X_MGT-2,Y_B-i*40);} for(i=1;igtip];i++) {_setcolor(8);li(X_MGT+i*X_GH[TSC->gtip],Y_T,X_MGT+i*X_GH[TSC->gtip],Y_B); _setcolor(7);li(X_MGT+i*X_GH[TSC->gtip],Y_B+2,X_MGT+i*X_GH[TSC->gtip],Y_B+4);} } void li(word_s x,word_s y,word_s x1,word_s y1){_moveto(x,y);_lineto(x1,y1);} float ma(word_s par,word_s nscr) {if(PNG->type_sc==SC_SQRT) return ((PNG->max_sc-PNG->min_sc)*sqrt((double)par/ADC_SC)+PNG->min_sc); else return ((PNG->max_sc-PNG->min_sc)/ADC_SC*par+PNG->min_sc); } void pdm(word_s nscr) {_setcolor(0);_rectangle(_GFILLINTERIOR,500,42,638,55); _settextcolor(15);gprintf(4,68,"%s %d",nmec[TSC->met-1],TSC->got+1900); } void pdc(word_s nscr) {_setcolor(0);_rectangle(_GFILLINTERIOR,500,42,638,55); _settextcolor(15);gprintf(4,64,"%d %s %d",TSC->det,nmec[TSC->met-1],TSC->got+1900); } word_s pix(word_s i,word_s par,word_s nscr) {float zn; zn=(PAI->max_sc-PAI->min_sc)/ADC_SC*par+PAI->min_sc; if(((M_gr+TSC->NGR)->tv_o[i]-(M_gr+TSC->NGR)->tn_o[i])!=0) par=(word_s)((zn-(M_gr+TSC->NGR)->tn_o[i])*ADC_SC/((M_gr+TSC->NGR)->tv_o[i]-(M_gr+TSC->NGR)->tn_o[i])); else par=0; if(par<0) par=0; if(par>ADC_SC) par= ADC_SC; return par; } void cur(word_s nscr) {word_s i,min,dek; float prom; if(TSC->gtip!=2)dek=0; // else dek=TSC->dekadat*240; else dek=5*TSC->dekadat*240/into; //@ cur1(nscr); if(TSC->ng) { if((TSC->buf_tt+TSC->tcur+dek)->zn[TSC->ng-1]!=-1) {prom=(PNG->max_sc-PNG->min_sc)/ADC_SC*(TSC->buf_tt+TSC->tcur+dek)->zn[TSC->ng-1]+PNG->min_sc; if(PNG->type_sc==COMP_1) prom = floor(prom); _settextcolor(15);gprintf(Y_TEK,X_WI,formt(),prom); } else gprintf(Y_TEK,X_WI," "); } else for(i=0;iNGR)->tip[i]==EMPTY) continue; if((TSC->buf_tt+TSC->tcur+dek)->zn[i]!=-1) /* значение достовеpно */ { prom=(PAI->max_sc-PAI->min_sc)/ADC_SC*(TSC->buf_tt+TSC->tcur+dek)->zn[i]+PAI->min_sc; if(PAI->type_sc==COMP_1) prom = floor(prom); _settextcolor(M_color[i]);gprintf(Y_TEK,X_WI+x_delta*i,formt(),prom); //? } else gprintf(Y_TEK,X_WI+x_delta*i," "); //? } _setcolor(0);_rectangle(_GFILLINTERIOR,1,43,118,53); if((TSC->buf_tt+TSC->tcur+dek)->ttbb!=-1) {TSC->buf_t=(long *)&(TSC->buf_tt+TSC->tcur+dek)->ttbb; t_loct(TSC->buf_t,ttm); _settextcolor(7); if(TSC->gtip==0)gprintf(R_name,2,"%3d:%d:%d",thour,tmin,tsec); if(TSC->gtip==1) {if((thour=(TSC->tcur+1)*intu/60)>23)thour=0;tmin=(TSC->tcur+1)*intu%60; i=thour;if((min=tmin-5)<0){if(--i<0)i=23;min=55;} gprintf(R_name,2,"%d:%d-%d:%d",i,min,thour,tmin); } if(TSC->gtip==2) gprintf(R_name,2,"%d:00-%d:00",TSC->tcur%24,(TSC->tcur+1)%24); } } void cur1(word_s nscr){_putimage(X_MGT+TSC->tcur*2+1,Y_T,buf_cur,_GXOR);}