#include "complex.h" #include "arh.h" #include "screen.h" extern short M_color[]; #define TAB p_btab[nscr] #define TDLB TAB->mac->dlbl #define TKBL TAB->mac->kbl #define TNAR (p_par_tab+ii)->nomar #define WINI (p_win_tab+i) #define STAB TAB->tstab #define APTAB ((c_ptr+(p_par_tab+ii)->nomcontr)->a_ptr+(p_par_tab+ii)->nompar) typedef struct {word_s kod; m_kod *buf_zn_i; word_s delx; char teks; str_tab *tstab; word_s hn_fl; long t_time; resourceptr res; cpr *mac; word_s par[12][5]; }btab; btab *p_btab[4]; char *p_tab_b; void st_tab(word_s x),di_tab(word_s nscr); word_s sv_tab(word_s nscr) {word_s lin=0,i,ii,i1,ii1,zn,nx; request_resource(ekran,0L); ramka(); if(!k_str_tab) {eprintf(YELLOW_,"Нет cводной таблицы"); release_resource(ekran); return 0;} if((p_btab[nscr]=(btab *)calloc(1,sizeof(btab)))==NULL) {eprintf(RED_,"Нет памяти для СТ"); release_resource(ekran); return 0;} release_resource(ekran); STAB=p_str_tab; st_tab(nscr); change_timer(period_tm[nscr],into*HZ,1); //@ while(!endrun) { #if (DEBUG) view_text(2,73,8,"SVTAB"); #endif if((TAB->kod=read_wpipe(scr_chn[nscr],t_out_v*HZ))==Kadr)continue; if(list_func(TAB->kod)){ii=TAB->kod; free(p_btab[nscr]);return(ii);} var_obj(TAB->kod,nscr); if(k_str_tab>1&&(TAB->kod==PgDn||TAB->kod==PgUp)) {if(TAB->kod==PgDn)if(++TAB->teks>=k_str_tab)TAB->teks=0; if(TAB->kod==PgUp)if(--TAB->teks<0)TAB->teks=k_str_tab-1; clear_flag(period_fl[nscr]); request_resource(ekran,0L); ramka(); release_resource(ekran); STAB=p_str_tab+TAB->teks; lin=0; st_tab(nscr); } if(check_flag(period_fl[nscr])) { clear_flag(period_fl[nscr]); request_resource(ekran,0L); if(screen!=nscr)set_screen(nscr); if(lin==4) {lin=0; for(i=STAB->nomwin;i<(STAB->nomwin+STAB->kolwin);i++) {_setcolor(0); _rectangle(_GFILLINTERIOR,WINI->nx+45,WINI->ny+12,WINI->nx+STAB->gorwin-1,WINI->ny+STAB->verwin-1); _setcolor(8); for(ii=1;ii<5;ii++)li(WINI->nx+45,WINI->ny+12+(word_s)(STAB->dset*ii),WINI->nx+STAB->gorwin-1,WINI->ny+12+(word_s)(STAB->dset*ii)); } di_tab(nscr); } else {nx=STAB->gorwin-5+lin; for(i=STAB->nomwin,i1=0;i<(STAB->nomwin+STAB->kolwin);i++,i1++) for(ii=WINI->nompar,ii1=0;ii<(WINI->nompar+WINI->kolpar);ii++,ii1++) {if(!APTAB->novalid) {zn=APTAB->var_cod; if(zn<0)zn=0;if(zn>ADC_SC)zn=ADC_SC; if(APTAB->type_sc!=SC_LINE)zn=(word_s)(sqrt((double)zn*ADC_SC)); zn=(word_s)((float)zn*STAB->koef); if(TAB->par[i1][ii1]!=-1) {_setcolor(M_color[(p_par_tab+ii)->nomer]); li(WINI->nx+nx,WINI->ny+STAB->verwin-1-TAB->par[i1][ii1],WINI->nx+nx+1,WINI->ny+STAB->verwin-1-zn); } TAB->par[i1][ii1]=zn; } else TAB->par[i1][ii1]=-1; } lin++; } if(screen!=nscr)set_screen(screen); release_resource(ekran); } } return 0; } void st_tab(word_s nscr) {word_s i,j; TAB->delx=STAB->gorwin-45; request_resource(ekran,0L); #if (FONT==2) setfont(1); #endif for(i=STAB->nomwin;i<(STAB->nomwin+STAB->kolwin);i++) {_setcolor(15); _rectangle(_GBORDER,WINI->nx,WINI->ny,WINI->nx+STAB->gorwin,WINI->ny+STAB->verwin); _setcolor(7); li(WINI->nx+1,WINI->ny+11,WINI->nx+STAB->gorwin-1,WINI->ny+11); li(WINI->nx+44,WINI->ny+12,WINI->nx+44,WINI->ny+STAB->verwin-1); _setcolor(8); for(j=1;j<5;j++)li(WINI->nx+45,WINI->ny+12+(word_s)(STAB->dset*j),WINI->nx+STAB->gorwin-1,WINI->ny+12+(word_s)(STAB->dset*j)); fgtext(15,WINI->nx+2,WINI->ny+2,"%s",WINI->naimwin); for(j=WINI->nompar;j<(WINI->nompar+WINI->kolpar);j++) fgtext(M_color[(p_par_tab+j)->nomer],WINI->nx+2,WINI->ny+14+(p_par_tab+j)->nomer*15,"%s",(p_par_tab+j)->naim); } #if (FONT==2) setfont(0); #endif release_resource(ekran); di_tab(nscr); } void di_tab(word_s nscr) {word_s i,j,jj,jjj,jjjj,zn,ii,i1,ii1; long kk,kp,rf,gtbl,rf1,rb,rp,gkzap; TAB->mac=&mg;TAB->res=r_mgn; time(&TAB->t_time); if((gtbl=TAB->mac->tbl-TAB->delx+5)<0)gtbl+=TKBL; request_resource(TAB->res,0L); TAB->hn_fl=sopen(NameFile[34],O_RDONLY|O_BINARY,SH_DENYNO); release_resource(TAB->res); gkzap=(50000)/TDLB; rb=gkzap*TDLB;rf1=rf=TAB->delx-5;rf=rf1*TDLB; kp=rf1%gkzap;kk=rf/rb+1;rp=rf%rb; if((p_tab_b=(char *)calloc(1,rb))==NULL) {eprintf(RED_,"Нет памяти для св табл");return;} for(jj=0,j=0,jjjj=0;jjhn_fl,p_tab_b,(unsigned)rb,gtbl*TDLB,SEEK_SET,TAB->res); else {r_read(TAB->hn_fl,p_tab_b,(unsigned)((TKBL-gtbl)*TDLB),gtbl*TDLB,SEEK_SET,TAB->res); r_read(TAB->hn_fl,p_tab_b+(TKBL-gtbl)*TDLB,(unsigned)(rb-(TKBL-gtbl)*TDLB),(long)0,SEEK_SET,TAB->res); } for(jjj=0;jjjt_time-*(long *)(p_tab_b+TDLB*jjj))<86400) {TAB->buf_zn_i=(m_kod *)((p_tab_b+TDLB*jjj)+sizeof(long)); request_resource(ekran,0L); for(i=STAB->nomwin,i1=0;i<(STAB->nomwin+STAB->kolwin);i++,i1++) for(ii=WINI->nompar,ii1=0;ii<(WINI->nompar+WINI->kolpar);ii++,ii1++) {if((TAB->buf_zn_i+TNAR)->count==0) {zn=(TAB->buf_zn_i+TNAR)->zn; if(zn<0)zn=0;if(zn>ADC_SC)zn=ADC_SC; if(APTAB->type_sc!=SC_LINE)zn=(word_s)(sqrt((double)zn*ADC_SC)); zn=(word_s)((float)zn*STAB->koef); if(jjjj) if(TAB->par[i1][ii1]!=-1) {_setcolor(M_color[(p_par_tab+ii)->nomer]); li(WINI->nx+44+jjjj, WINI->ny+STAB->verwin-1-TAB->par[i1][ii1], WINI->nx+45+jjjj, WINI->ny+STAB->verwin-1-zn); } TAB->par[i1][ii1]=zn; } else TAB->par[i1][ii1]=-1; } release_resource(ekran); } else for(i=STAB->nomwin,i1=0;i<(STAB->nomwin+STAB->kolwin);i++,i1++) for(ii=WINI->nompar,ii1=0;ii<(WINI->nompar+WINI->kolpar);ii++,ii1++) TAB->par[i1][ii1]=-1; jjjj++; } } } free(p_tab_b);close(TAB->hn_fl); }