#include "complex.h" #include "screen.h" #include "shst_prt.h" #include "arh.h" #if (UCHET) extern word_s f_energ(gr_cont * p,word_s nscr); #else #if (EDITQ) extern word_s editq(word_s nscr); #elif (BLANKEQ) int inblank(int data); #endif #endif extern char *nmec[12]; extern word_s POI_LAST_SMENA(); extern word_s PRI_OFF; extern word_s nom_act; extern word_s color_of_text_menu; /* B UPR_MEN.C */ extern resourceptr res;/* ресурс для копирования архивов,B PROT.C */ #if (!UCHET) #if (EDITQ) extern cpr eq; #endif #endif // extern word_s fl_err_d; word_s fl_err_d; extern long _ttm; extern struct tm t_t; /* стpуктуpы текущего вpемени */ extern struct tm *t; extern struct tm *tn; extern struct tm t_tn; extern word_s tyz[],tmthz[],tdz[],thz[],tminz[]; /*in ARH_AN for protocol call time */ extern resourceptr ekran; #if (UCHET) extern gr_cont * gr_c_p; /* указ.на нач.опис.гpупп контуpов */ extern word_s gr_c_n; /* количество гpупп контуpов */ #endif #define ny tn->tm_year /* время начала протоколирования */ #define nyd tn->tm_yday #define nmon tn->tm_mon #define nd tn->tm_mday #define nh tn->tm_hour #define ty t->tm_year /* текущее вpемя */ #define td t->tm_mday #define tmonth t->tm_mon #define tyd t->tm_yday #define th t->tm_hour #define tmi t->tm_min #define ts t->tm_sec #define th_cp t_cp->tm_hour #define tmi_cp t_cp->tm_min #define ts_cp t_cp->tm_sec word_s copy_file(word_s n,byte type,word_s nscr); word_s cr_dir(char * ); word_s FORM_PROT(word_s,word_s); word_s protokol(word_s,word_s); word_s protok(word_s nscr); void VIEW_SMEN(word_s nscr); 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); void SN_MENY(word_s NX,word_s NY,word_s MAXX,word_s MAXY); word_s VIEW_PROT(char * im_fail,word_s nscr); word_s cr_copy_dir(void); /* фоpмиpование диpектоpия для копиpования */ /* void el_d(void); void el_m(void); */ void form_list_d(void); void form_men(word_s nscr); void form_dir( char *buf_dir,char *buf_text,word_s len_text,word_s number); void cl_scr1(word_s nscr); void print_pr(void); #if (UCHET) word_s var_menu(word_s nscr,word_s cod); word_s menu_tg(word_s nscr,word_s cod); #endif void elect_smen(word_s nscr); void elect_month(word_s nscr); void save_time_scr(word_s nscr); void restore_time_scr(word_s nscr); char * buf_copy; char disk_list[27]; word_s disk_number[27]; char dir_now[128]; char dir_new[20]; char dir_new1[12]; word_s dr,dr1,cur_dr,current; word_s numdrives; char path_name[128]; char *MEN_2[]={ "выход ", "a_nr.bin ", "a_sb.bin ", "a_mgn.bin ", "a_cut6.bin ", "a_mec6.bin ", "ar_op.aop ", #if (COUNT) "time.bin ", #endif #if (UCHET+EDITQ) "q0.prt " #endif }; byte list_pr = 0; tcbptr task_print; void PRINT_PROT(void); /*----------------------*/ word_s n_m1[DISPLAY]; /*----------------------*/ struct par_prt par;/* стр-ра пар-тров протоколиp. */ struct prt_al_ev rec_al_ev; /* БЫЛА B FP.C стpуктуpа записи пpотоколов */ /* ........... наpушений и событий........ */ struct fgtg_prt fgtg; /* БЫЛА B FP.C */ struct prt_tg tg; /* БЫЛА B FP.C */ struct smena sm[4];/* массив смен */ word_s ksmen; /* количество смен */ struct tm t_ta; struct tm *ta;/* ук-тель на стр-ру с временем из обр.записи архива */ struct tm t_copy; struct tm *t_cp; char bd[30]; char n_nscr[DISPLAY]; char line_a[12]; word_s pr_copy[DISPLAY]; word_s save_smena[DISPLAY]; word_s z1,no_s; two_sc *t_scr[DISPLAY]; char *tscreen[DISPLAY]; #define tscr t_scr[nscr] gr_cont *p_c_e[DISPLAY]; word_s N_UK1[DISPLAY],N_UK2[DISPLAY],N_UK4[DISPLAY],N_UK5[DISPLAY],N_UKQ[DISPLAY]; word_s NX1,NY1; word_s NX2; char *b_prt=".PRT"; char *buf_cp_text= "ФАЙЛ ДЛЯ КОПИРОВАНИЯ НЕ ОТКРЫЛСЯ "; char *buf_cp_text1="ЖДИТЕ!... "; word_s protok(word_s nscr) { word_s i=0; word_s j,priz=0; //word_s NXQ=19; //gr_cont *p_gr; //long *ppp_e; char *MEN1[] = {" копирование архивов ", " просмотр протоколов ", " печать протоколов " }; char *MEN4[] = {" выход ", #if (AL_FILE) " нарушения за последний час ", #endif " архив событий ", " тех.журнал за смену ", #if (AL_FILE) " нарушения за смену ", #endif #if (COUNT) " учет pаботы обоpудования ", #endif #if (UCHET) " учет потребления природн.газа ", #else #if (EDITQ + BLANKEQ) // #if (EDITQ) " хозучетные параметры ", // " расход нефтепродуктов за сутки", #endif #endif " архив действий оператора " }; byte M4[] = { 255, /* выход */ #if (AL_FILE) 211, /* нарушения за последний час */ #endif 220, /* архив событий */ 1, /* тех.журнал за смену */ #if (AL_FILE) 12, /* нарушения за последнюю смену */ #endif #if (COUNT) 250, /* учет pаботы обоpудования */ #endif #if (UCHET) 4, /* учет потребления природн.газа */ #else #if (EDITQ + BLANKEQ) // #if (EDITQ) 5, /* учет потребления природн.газа */ #endif #endif 240, /* архив действий оператора */ 0 }; /*char *MENQ[5];*/ char *MEN2[] = {" выход ", " архив нарушений ", " архив событий ", " архив мгновенных значений параметров ", " архив суточных значений параметров ", " месячный архив ", " архив действий оператора ", #if (COUNT) " архив пpобега обоpудования ", #endif #if (UCHET) " учет потребления природного газа ", #else #if (EDITQ + BLANKEQ) // #if (EDITQ) // " расход нефтепродуктов за сутки " " хозучетные параметры " #endif #endif }; byte M2[] = { 255, /* выход */ 210, /* архив нарушений */ 220, /* архив событий */ 230, /* архив мгновенных значений аналоговых параметров */ 2, /* архив суточных значений аналоговых параметров */ 3, /* месячный архив */ 240, /* архив действий оператора */ #if (COUNT) 250, /* архив пpобега обоpудования */ #endif #if (UCHET) 4, #else // #if(EDITQ) #if(EDITQ + BLANKEQ) 5, /* учет потребления природного газа */ #endif #endif 0 }; char *MEN5[] = {" выход ", #if (AL_FILE) " нарушения за смену ", #endif " техн.журнал за смену ", //#if (!SMENA) #if (!SMENA * !BLANKEQ) " техн.жуpнал за сутки ", #endif #if (COUNT) " учет pаботы обоpудования ", #endif #if (UCHET) " учет потребления природн.газа ", #else // #if(EDITQ) #if(EDITQ+BLANKEQ) " хозучетные параметры " // " расход нефтепродуктов за сутки" #endif #endif }; byte M5[] = { 255, /* выход */ #if (AL_FILE) 12, /* нарушения за последнюю смену */ #endif 1, /* техн.журнал за смену */ //#if (!SMENA) #if (!SMENA * !BLANKEQ) 2, /* техн.жуpнал за сутки */ #endif #if (COUNT) 255, /* учет pаботы обоpудования */ #endif #if (UCHET) 4, #else // #if(EDITQ) #if(EDITQ+BLANKEQ) 5, /* учет потребления природн.газа */ #endif #endif 0 }; /* ----------------------------------------------------------------- НАЧИНАТЬ ФАЙЛ СМЕН ВСЕГДА СО СМЕНЫ,К-PАЯ НАЧИНАЕТСЯ PАНЬШЕ ДPУГИХ СМЕН */ /*---------------------- sm[0].h = 0; sm[0].l = 6; sm[0].nom_sm = 4; sm[1].h = 6; sm[1].l = 6; sm[1].nom_sm = 1; sm[2].h = 12; sm[2].l = 6; sm[2].nom_sm = 2; sm[3].h = 18; sm[3].l = 6; sm[3].nom_sm = 3; ksmen = 4; ----------------------*/ #if (KSM==3) #if (SM_PAR) sm[0].h = 0; sm[0].l = 8; sm[0].nom_sm = 1; sm[1].h = 8; sm[1].l = 8; sm[1].nom_sm = 2; sm[2].h = 16; sm[2].l = 8; sm[2].nom_sm = 3; #else sm[0].h = 23; sm[0].l = 8; sm[0].nom_sm = 1; sm[1].h = 7; sm[1].l = 8; sm[1].nom_sm = 2; sm[2].h = 15; sm[2].l = 8; sm[2].nom_sm = 3; #endif ksmen = 3; #else sm[0].h = 8; sm[0].l = 12; sm[0].nom_sm = 1; sm[1].h = 20; sm[1].l = 12; sm[1].nom_sm = 2; ksmen = 2; #endif N_UK1[nscr]=N_UK2[nscr]=N_UK4[nscr]=N_UK5[nscr]=N_UKQ[nscr]=0; NX1=5;NY1=4; NX2=12; tscr->cod_str=0; ta=&t_ta; tn=&t_tn; t=&t_t; t_cp=&t_copy; request_resource(ekran, 0L); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,0,Y_T_SCR,X_SCR,Y_B_SCR-1); release_resource(ekran); if((tscreen[nscr]=(char *)calloc(1,sizeof(two_sc)))==NULL) {eprintf(RED_,"Нет памяти для архива");return 0;} t_scr[nscr]=(two_sc*)tscreen[nscr]; par.path_name=path_name; tscr->n_s=0; tscr->n_d1=0; n_m1[nscr]=0; tscr->f_copy=0; save_smena[nscr]=0; while(!endrun){ tscr->cod_str=0; N_UK1[nscr]=UPR_MEN(N_UK1[nscr], MEN1,NX1,NY1,strlen(MEN1[0]),sizeof (MEN1)/sizeof(MEN1[1]),WHITE_,WHITE_BR_,nscr,NULL); if(list_func(N_UK1[nscr])) { open_graph(); free(tscreen[nscr]); return N_UK1[nscr]; /* если вызов дpугой задачи */ } N_UK1[nscr]=-N_UK1[nscr]; if ((N_UK1[nscr]==0) && (tscr->cod_str==ESC)) { N_UK1[nscr]=0; request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(WHITE_BR_); gprintf(ns_1,nc_1+3,"Для выхода в дpугую функцию"); gprintf(ns_1+1,nc_1+3,"нажмите соответствующую клавишу."); if (screen!=nscr) set_screen(screen); release_resource(ekran); continue; } request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(nc_1+1)*DW,(ns_1-1)*DH,(nc_2+37)*DW,(ns_1+2)*DH); if (screen!=nscr) set_screen(screen); release_resource(ekran); N_UK1[nscr]++; if (N_UK1[nscr]==1) /* КОПИРОВАНИЕ АРХИВОВ */ { if (pr_copy[nscr]==1) { request_resource(ekran,0L); _settextcolor(WHITE_BR_); gprintf(ns_1,nc_1+3,"Надо закончить копирование "); gprintf(ns_1+1,nc_1+3,"на другом экране. "); release_resource(ekran); continue; } tscr->cod_str=0xFFFD; tscr->f_copy=1;tscr->n_d1=-1; n_m1[nscr]=0; pr_copy[0]=pr_copy[1]=pr_copy[2]=pr_copy[3]=1; form_list_d(); time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn); save_time_scr(nscr); while((N_UK2[nscr]=UPR_MEN(N_UK2[nscr], MEN2,NX2,NY1+N_UK1[nscr]+1,/*49*/strlen(MEN2[0]), sizeof (MEN2)/sizeof(MEN2[1]),WHITE_,WHITE_BR_,nscr,M2))!=0) { if (list_func(N_UK2[nscr])) { open_graph(); free(tscreen[nscr]); return N_UK2[nscr]; /* если вызов дpугой задачи */ } N_UK2[nscr]=-N_UK2[nscr]; if (M2[N_UK2[nscr]]<200 && (tscr->cod_str==MORE || tscr->cod_str==LESS)) { if ( M2[N_UK2[nscr]]==2 || M2[N_UK2[nscr]]==5) { if (tscr->cod_str==MORE) { if (M2[N_UK2[nscr]]==2){ if ( tscr->n_d1<0 ) tscr->n_d1++; /*последующие сутки*/ } else { if ( tscr->n_d1 < -1 ) tscr->n_d1++; } } if (tscr->cod_str==LESS) { if (tscr->n_d1!=-(NDayArh-1)) tscr->n_d1--; /* пpедыдущие сутки */ } time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn); save_time_scr(nscr); } if (M2[N_UK2[nscr]]==3 || M2[N_UK2[nscr]]==4) elect_month(nscr); VIEW_SMEN(nscr); } else { memset(bd,' ',29); bd[29]='\0'; if(N_UK2[nscr]) { if ( M2[N_UK2[nscr]]==4) { #if(UCHET) if ((i=var_menu(nscr,1)) >= 0) return i; /* меню для Q.prt */ #endif } else { cl_scr1(nscr); i = copy_file(N_UK2[nscr],M2[N_UK2[nscr]],nscr); } if (list_func(i)){ open_graph(); free(tscreen[nscr]); pr_copy[0]=pr_copy[1]=0; return i; } if (M2[N_UK2[nscr]]<200) { if (!no_s) VIEW_SMEN(nscr);} } } tscr->cod_str=0xFFFD; } cl_scr1(nscr); SN_MENY(NX2,NY1+N_UK1[nscr]+1,strlen(MEN2[0]) ,sizeof (MEN2)/sizeof(MEN2[1])); /* ESC */ tscr->cod_str=0; tscr->f_copy=0; pr_copy[0]=pr_copy[1]=0; } if (N_UK1[nscr]==2) /* ФОРМИРОВАНИЕ ПРОТОКОЛОВ */ { tscr->cod_str=0xFFFF; tscr->n_d1=-1; n_m1[nscr]=0; while((N_UK4[nscr]=UPR_MEN(N_UK4[nscr], MEN4,NX2,NY1+N_UK1[nscr]+1,strlen(MEN4[0]), sizeof (MEN4)/sizeof(MEN4[1]),WHITE_,WHITE_BR_,nscr,M4))!=0) { if (list_func(N_UK4[nscr])) { open_graph(); free(tscreen[nscr]); return N_UK4[nscr]; /* если вызов дpугой задачи */ } N_UK4[nscr]=-N_UK4[nscr]; /* очистка параметров протокола */ par.year=par.month=par.day=0; par.number_day=par.number_hour=0; par.hour=par.min=par.number_group=0; par.smena=0; for(j=0;j<20;j++) par.spisok_n_gr[j]=0; if ( M4[N_UK4[nscr]]==211 ) { par.vid = 1; memcpy(par.path_name,"PRTN00",6); itoa(nscr,par.path_name+6,10); memcpy(par.path_name+7,b_prt,5); if (!FORM_PROT(1,nscr)) { /* если пpотокол сфоpмиpовался */ i=VIEW_PROT (par.path_name,nscr); if (list_func(i)){ open_graph(); free(tscreen[nscr]); return (i); } } } if ( M4[N_UK4[nscr]]==220 ) { par.vid = 0; memcpy(par.path_name,"PRTS00",6); itoa(nscr,par.path_name+6,10); memcpy(par.path_name+7,b_prt,5); if (!FORM_PROT(2,nscr)){ i=VIEW_PROT(par.path_name,nscr); if (list_func(i)) { open_graph(); free(tscreen[nscr]); return (i); } } } if ( M4[N_UK4[nscr]]==1 ) { if (tscr->cod_str==MORE || tscr->cod_str==LESS ) elect_smen(nscr); else{ par.vid = 3; memcpy(par.path_name,"PRTG00",6); itoa(nscr,par.path_name+6,10); memcpy(par.path_name+7,b_prt,5); POI_LAST_SMENA(tscr->n_s); save_time_scr(nscr); tscr->prizf=1; if (tscr->prizf){ /* tyz[nscr]=ty; tmthz[nscr]=tmon; tdz[nscr]=td; thz[nscr]=th;*/ #if(UCHET) i=menu_tg(nscr,0); #else if ( !(i=FORM_PROT(3,nscr)) ) i=VIEW_PROT(par.path_name,nscr); #endif } if (list_func(i)){ open_graph(); free(tscreen[nscr]); return (i); } if (!i) VIEW_SMEN(nscr); } tscr->cod_str=0xFFFF; } if ( M4[N_UK4[nscr]]==12 ) { if (tscr->cod_str==MORE || tscr->cod_str==LESS ) elect_smen(nscr); else { par.vid = 1; memcpy(par.path_name,"PRTN01",6); itoa(nscr,par.path_name+6,10); memcpy(par.path_name+7,b_prt,5); POI_LAST_SMENA(tscr->n_s); save_time_scr(nscr); if (!FORM_PROT(4,nscr)){ i=VIEW_PROT(par.path_name,nscr); if (list_func(i)) { open_graph(); free(tscreen[nscr]); return (i); } if (!i) VIEW_SMEN(nscr); } } tscr->cod_str=0xFFFF; } #if (COUNT) if ( M4[N_UK4[nscr]]==250 ) { par.vid = 5; memcpy(par.path_name,"EQUIP",5); itoa(nscr,par.path_name+5,10); memcpy(par.path_name+6,b_prt,5); if (!FORM_PROT(5,nscr)){ i=VIEW_PROT(par.path_name,nscr); if (list_func(i)){ open_graph(); free(tscreen[nscr]); return (i); } } } #endif #if (UCHET) if ( M4[N_UK4[nscr]]==4 ) { if (tscr->cod_str==MORE || tscr->cod_str==LESS ) { elect_month(nscr); VIEW_SMEN(nscr); } else { if ((i=var_menu(nscr,0)) >= 0) return i; } tscr->cod_str=0xFFFF; } #else // #if (EDITQ) #if (EDITQ + BLANKEQ) if ( M4[N_UK4[nscr]]==5 ) { if (tscr->cod_str==MORE || tscr->cod_str==LESS ) { if (tscr->cod_str==MORE) if( tscr->n_d1!=-1 ) tscr->n_d1++; /*последующие сутки*/ if (tscr->cod_str==LESS) if( tscr->n_d1!=-(NDayArh-1)) tscr->n_d1--; /* пpедыдущие сутки */ time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn); save_time_scr(nscr); VIEW_SMEN(nscr); } else { memset(bd,' ',29); bd[29]='\0'; cl_scr1(nscr); par.vid=6; #if (BLANKEQ) memcpy(par.path_name,"uc1",3); /*.PRT";*/ memcpy(par.path_name+3,".PRT",5); #else memcpy(par.path_name,"Q",1); /*.PRT";*/ itoa(nscr,par.path_name+1,10); memcpy(par.path_name+2,".PRT",5); #endif if (!FORM_PROT(6,nscr)) { i=VIEW_PROT(par.path_name,nscr); if (list_func(i)) { open_graph(); free(tscreen[nscr]); return (i); } if (!i) VIEW_SMEN(nscr); } } tscr->cod_str=0xFFFF; } #endif #endif if ( M4[N_UK4[nscr]]==240 ) { par.vid = 7; memcpy(par.path_name,"ar_op.aop",10); i=VIEW_PROT(par.path_name,nscr); if (list_func(i)) { open_graph(); free(tscreen[nscr]); return (i); } } } cl_scr1(nscr); SN_MENY(NX2,NY1+N_UK1[nscr]+1,strlen(MEN4[0]),sizeof (MEN4)/sizeof(MEN4[1])); tscr->cod_str=0; } if (N_UK1[nscr]==3) /* ПЕЧАТЬ ПРОТОКОЛОВ ЗА СМЕНУ */ { tscr->cod_str=0xFFFE; n_m1[nscr]=0; tscr->n_d1=-1; priz=1; while((N_UK5[nscr]=UPR_MEN(N_UK5[nscr], MEN5,NX2,NY1+N_UK1[nscr]+1,strlen(MEN5[0]), sizeof (MEN5)/sizeof(MEN5[1]),WHITE_,WHITE_BR_,nscr,M5))!=0) { if(list_func(N_UK5[nscr])) /* если вызов дpугой задачи */ { open_graph(); free(tscreen[nscr]); return N_UK5[nscr]; } N_UK5[nscr]=-N_UK5[nscr]; if( M5[N_UK5[nscr]]==12) { if (tscr->cod_str==MORE || tscr->cod_str==LESS ) elect_smen(nscr); else { par.vid = 1; /* наpушения за смену */ memcpy(par.path_name,"PRTN01",6); itoa(nscr,par.path_name+6,10); memcpy(par.path_name+7,b_prt,5); POI_LAST_SMENA(tscr->n_s); save_time_scr(nscr); priz=FORM_PROT(4,nscr); if (list_func(priz)){ open_graph(); free(tscreen[nscr]); return (priz); } } tscr->cod_str=0xFFFE; } if ( M5[N_UK5[nscr]]==250 ) { par.vid = 5; memcpy(par.path_name,"EQUIP",5); itoa(nscr,par.path_name+5,10); memcpy(par.path_name+6,b_prt,5); priz=FORM_PROT(5,nscr); } #if (UCHET) if ( M5[N_UK5[nscr]]==4 ) { priz=1; if (tscr->cod_str==MORE || tscr->cod_str==LESS ) { elect_month(nscr); VIEW_SMEN(nscr); } else { if ((i=var_menu(nscr,2)) >= 0) return i; } tscr->cod_str=0xFFFE; } #else // #if (EDITQ) #if (EDITQ + BLANKEQ) if ( M5[N_UK5[nscr]]==5 ) { priz=1; if (tscr->cod_str==MORE || tscr->cod_str==LESS ) { if (tscr->cod_str==MORE){ if ( tscr->n_d1!=-1 ) tscr->n_d1++; /*последующие сутки*/ } if (tscr->cod_str==LESS){ if (tscr->n_d1!=-(NDayArh-1)) tscr->n_d1--; /* пpедыдущие сутки */ } time(&_ttm); _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn); save_time_scr(nscr); VIEW_SMEN(nscr); } else { memset(bd,' ',29); bd[29]='\0'; cl_scr1(nscr); par.vid=6; #if (BLANKEQ) memcpy(par.path_name,"uc1",3); /*.PRT";*/ memcpy(par.path_name+3,".PRT",5); #else memcpy(par.path_name,"Q",1); /*.PRT";*/ itoa(nscr,par.path_name+1,10); memcpy(par.path_name+2,".PRT",5); #endif if (!FORM_PROT(6,nscr)) { i=VIEW_PROT(par.path_name,nscr); if (list_func(i)) { free(tscreen[nscr]); return (i); } if (!i) VIEW_SMEN(nscr); } // priz=FORM_PROT(6,nscr); } tscr->cod_str=0xFFFE; } #endif #endif /* if(((N_UK5[nscr]==3) && !SMENA && AL_FILE) || ((N_UK5[nscr]==2) && !SMENA && !AL_FILE)) { priz=1; par.vid=3; техн.жуpнал за сутки memcpy(par.path_name,"PRTG00",6); itoa(nscr,par.path_name+6,10); memcpy(par.path_name+7,".PPP",5); par.smena=0; priz=FORM_PROT(3,nscr); } */ if( M5[N_UK5[nscr]]==1 ) /* техн.жуpнал за смену */ { priz=1; if (tscr->cod_str==MORE || tscr->cod_str==LESS ) elect_smen(nscr); else { /* memset(bd,' ',29); bd[29]='\0'; cl_scr1(nscr); */ par.vid = 3; memcpy(par.path_name,"PRTG00",6); itoa(nscr,par.path_name+6,10); memcpy(par.path_name+7,b_prt,5); POI_LAST_SMENA(tscr->n_s); save_time_scr(nscr); #if (UCHET) priz=menu_tg(nscr,1); #else priz=FORM_PROT(3,nscr); #endif if (list_func(priz)){ open_graph(); free(tscreen[nscr]); return (priz); } /* if (priz<0) return priz;*/ /* priz=FORM_PROT(3,nscr);*/ par.vid=2; } tscr->cod_str=0xFFFE; } /* if (par.vid!=4 && !priz)*/ if (!priz && par.vid!=4 #if (UCHET) && par.vid!=2 && par.vid!=6 #endif ) print_pr(); } cl_scr1(nscr); SN_MENY(NX2,NY1+N_UK1[nscr]+1,strlen(MEN5[0]),sizeof (MEN5)/sizeof(MEN5[1])); } N_UK1[nscr]--; } SN_MENY(NX1,NY1,strlen(MEN1[0]),sizeof (MEN1)/sizeof(MEN1[1])); tscr->cod_str=0; free(tscreen[nscr]); return 0; } /* функция копирования файла протокола */ /*------------------------------------ */ word_s copy_file(word_s N_UK2, byte type, word_s nscr) { char driver; /* имя дисковода для копирования */ word_s i=0,i1=0,j=0,l; word_s hf,hfc; /* хэндлеры файлов */ long int razmer_file; word_s prodolgenie=0; /* признак продолжения копир-я на др.дискету */ long ch_write=0,x; word_s x1,x2,y1,y2; /* координаты диаграммы копирования */ word_s k=0; /* для диаграммы */ x1=(nc_1-4)*DW; y1=(ns_2+2)*DH; x2=(nc_2+2)*DW; y2=(ns_2+2)*DH+14; /* для диаграммы */ restore_time_scr(nscr); switch(type){ case 210: { res=r_nr; break;} case 220: { res=r_sb; break;} case 230: { res=r_mgn;break;} case 2 : { res=r_cut;break;} case 3 : { res=r_mec;break;} #if (COUNT) case 250 : { res=r_eq; break;} #endif case 5 : case 4 : { request_resource(ekran,0L); _settextcolor(GREEN_BR_); gprintf(ns_1,nc_2,buf_cp_text1); release_resource(ekran); memcpy(line_a,MEN_2[N_UK2],12); itoa(nscr,n_nscr,10); line_a[1]=n_nscr[0]; memcpy(MEN_2[N_UK2],line_a,12); memcpy(par.path_name,line_a,12); par.path_name[12]='\0'; #if(UCHET) j = f_energ(p_c_e[nscr],nscr); #else #if (EDITQ) request_resource(r_cut,0L); j = editq(nscr); release_resource(r_cut); #endif #endif if (j){ request_resource(ekran,0L); _settextcolor(GREEN_BR_); gprintf(ns_1,nc_2,"Протокол не сформирован. "); release_resource(ekran); return 0; } else{ request_resource(ekran,0L); _settextcolor(BLACK_); gprintf(ns_1,nc_2," "); release_resource(ekran); } break; } } z1=type; /* N_UK2;*/ memset(path_name,' ',128); request_resource(ekran,0L); _settextcolor( color_of_text_menu); gprintf(ns_2,nc_1-7,"НА КАКОЙ ДИСКОВОД БУДЕТЕ КОПИРОВАТЬ? "); release_resource(ekran); KEY_1:form_men(nscr); j = read_wpipe(scr_chn[nscr],0*HZ); var_obj(j,nscr); if(list_func(j)) return j; if( j==ENTER) driver = disk_list[current]; if (j==ESC) { request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(ns_1-1)*DW,(ns_2-1)*DH,(nc_2+37)*DW,(ns_2+4)*DH-2); if (screen!=nscr) set_screen(screen); release_resource(ekran); prodolgenie=0; goto END_COPY; } if( j==Left){ if (current!=0){ current--; if (disk_list[current]=='0') current--; } } if( j==Right){ if (current!=numdrives-1){ current++; if (disk_list[current]=='0') current++; } } cur_dr=disk_number[current]; if( j!=ESC && j!=ENTER ) goto KEY_1; request_resource(ekran,0L); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(ns_1-1)*DW,(ns_2-1)*DH,(nc_2+37)*DW,(ns_2+4)*DH-2); release_resource(ekran); if (type==2) { memcpy(line_a,"a_cut",5); itoa(tekden(ny,nyd),line_a+5,10); strcat(line_a,".bin"); memcpy(MEN_2[4],line_a,12); } if (type==3) { memcpy(line_a,"a_mec",5); itoa(tekmec(ny,nmon),line_a+5,10); strcat(line_a,".bin"); memcpy(MEN_2[5],line_a,12); } time(&_ttm); t_loct(&_ttm,t_cp); prodolgenie=0; no_s=0; buf_copy = (char* )calloc(1,16384); if(buf_copy==NULL) { o_kz_al("protokol.c-buf_copy"); return 0; } do { /* начало цикла копирования */ if (cur_dr<3){ request_resource(ekran,0L); _settextcolor(color_of_text_menu); if(!prodolgenie) gprintf(ns_1,nc_1+1,"УБЕДИТЕСЬ ЧТО ДИСКЕТА ВСТАВЛЕНА В ДИСКОВОД %c:",driver); else gprintf(ns_1,nc_1+1," ВСТАВЬТЕ НОВУЮ ДИСКЕТУ В ДИСКОВОД %c:",driver); gprintf(ns_1+1,nc_1+1,"НАЖМИТЕ \"ВВОД\"-КОПИРОВАТЬ,\"ВОЗВРАТ\"-ВЫХОД"); release_resource(ekran); j=read_wpipe(scr_chn[nscr],0*HZ); var_obj(j,nscr); if (list_func(j)) { free( (nearptr) buf_copy); return j; } request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(nc_1-1)*DW,(ns_1-1)*DH,(nc_2+37)*DW,(ns_1+1)*DH); if (screen!=nscr) set_screen(screen); release_resource(ekran); if( j!=ENTER) { prodolgenie=0; goto END_COPY;} } else j=ENTER; if( j==ENTER) { /* полный путь для записи файла */ if ( cr_copy_dir() ) goto END_COPY; l=strlen(path_name); path_name[l]='\\'; l++; if (type==230) { /* для аpхива мгн. */ itoa(th_cp,path_name+l,10); if (path_name[1+l]=='\0'){ path_name[1+l]=path_name[l]; path_name[l]='0'; } itoa(tmi_cp,path_name+2+l,10); if (path_name[3+l]=='\0'){ path_name[3+l]=path_name[2+l]; path_name[2+l]='0'; } itoa(ts_cp,path_name+4+l,10); if (path_name[5+l]=='\0'){ path_name[5+l]=path_name[4+l]; path_name[4+l]='0'; } memcpy(path_name+6+l,".mgn",5); } else memcpy( path_name+l, MEN_2 [N_UK2], 12); if(!prodolgenie) { if (type!=240 && type!=4 && type!=5) request_resource(res,0L); hf=sopen(MEN_2[N_UK2], O_BINARY | O_RDONLY,SH_DENYNO, S_IREAD ); if(hf==-1) { request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(GREEN_BR_); gprintf(ns_1+1,nc_2,"ИСХОДНЫЙ ФАЙЛ НЕ ОТКРЫЛСЯ "); if (screen!=nscr) set_screen(screen); release_resource(ekran); goto END_COPY; } } hfc = sopen( path_name, O_BINARY | O_WRONLY | O_CREAT | O_EXCL,SH_DENYNO, S_IREAD | S_IWRITE ); if( hfc!=-1) { j=ENTER; close(hfc);} /* нет файла с данным именем*/ else{ if (errno == EEXIST) /* есть файл с данным именем */ { request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(GREEN_BR_); if (cur_dr<3) gprintf(ns_1,nc_1,"ЭТОТ ФАЙЛ ЕСТЬ НА ДИСКЕТЕ. "); else gprintf(ns_1,nc_1,"ЭТОТ ФАЙЛ ЕСТЬ НА ДИСКЕ. "); gprintf(ns_1+1,nc_1,"КОПИРОВАТЬ? \"ВВОД\"-ДА,\"ВОЗВРАТ\"-НЕТ"); if (screen!=nscr) set_screen(screen); release_resource(ekran); j = read_wpipe(scr_chn[nscr],0*HZ); var_obj(j,nscr); if (list_func(j)) { free( (nearptr) buf_copy); close(hfc); return j; } request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(nc_1-1)*DW,(ns_1-1)*DH,(nc_2+37)*DW,(ns_1+1)*DH); if (screen!=nscr) set_screen(screen); release_resource(ekran); } else{ request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(GREEN_BR_); gprintf(ns_1+1,nc_2,buf_cp_text); if (screen!=nscr) set_screen(screen); release_resource(ekran); goto END_COPY; } } if(j==ENTER) { /* открыть и сузить существующий файл до нулевой длины */ hfc = sopen( path_name, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC,SH_DENYNO, S_IREAD | S_IWRITE ); if( hfc == -1) { request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(GREEN_BR_); gprintf(ns_1+1,nc_2,buf_cp_text); if (screen!=nscr) set_screen(screen); release_resource(ekran); goto END_COPY; } else { i=1; i1=1; request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(GREEN_BR_); gprintf(ns_1,nc_2,buf_cp_text1); _setcolor(WHITE_BR_); rectangle(x1-1,y1-1,x2+1,y2+1); razmer_file = filelength(hf); x=(word_s)(razmer_file/16384L); gprintf(ns_2+1,nc_1-3,"длина файла %ld",razmer_file); if (screen!=nscr) set_screen(screen); release_resource(ekran); while( !eof(hf) && !(i1> 8;*/ var_obj(j,nscr); if (list_func(j)) { free( (nearptr) buf_copy); close(hfc); return j; } request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle(_GFILLINTERIOR,(ns_2-1)*DW,(ns_2-1)*DH,(nc_2+37)*DW,(ns_2+1)*DH); if (screen!=nscr) set_screen(screen); release_resource(ekran); } else {j=ENTER;no_s=1;} if(j==ENTER) { close(hfc); remove(path_name); prodolgenie=0; goto END_COPY; } if (j==ESC) { if (i1!=-1) lseek(hf,(long)-(i-i1),SEEK_CUR); if (i1==-1) lseek(hf,(long)-i,SEEK_CUR); prodolgenie=1; } } if (type!=240 && type!=4 && type!=5) release_resource(res); t_delay(1L); if (type!=240 && type!=4 && type!=5) request_resource(res,0L); } if (i1==i && eof(hf)){ request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(GREEN_BR_); gprintf(ns_1,nc_2,"КОПИРОВАНИЕ ЗАКОНЧЕНО "); _setcolor(GREEN_BR_); _rectangle( _GFILLINTERIOR, x1,y1,x2,y2); if (screen!=nscr) set_screen(screen); release_resource(ekran); prodolgenie=0; } close(hfc); } } else{ if (prodolgenie) prodolgenie=0; } END_COPY: if( !prodolgenie ){ close(hf); if (type!=240 && type!=4 && type!=5) release_resource(res); request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _setcolor(BLACK_); _rectangle( _GFILLINTERIOR, x1-1,/*y1-3*/(ns_2)*DH,x2+24+16,y2+2/*+28*/); if (screen!=nscr) set_screen(screen); release_resource(ekran); } } } while ( prodolgenie ); /* конец цикла копирования */ free( (nearptr) buf_copy); close(hfc); return 0; } /*----------------------------------------------------*/ word_s FORM_PROT(word_s var,word_s nscr) { word_s j; restore_time_scr(nscr); request_resource(ekran,0L); _settextcolor(MAG_BR_); gprintf(ns_1,nc_1+3,buf_cp_text1); release_resource(ekran); if( var==1 ) /* || var==2)*/ j = protokol(2,nscr); /* j = protokol(1); - весь архив */ if( var==2 ) j = protokol(1,nscr); if( var==4) /* j = protokol(2); - последний час */ j = protokol(3,nscr); /* j = protokol(3); - смена */ if( var==3) { request_resource(r_mec,0L); j = texnolog_magazin(nscr); /* j=doc(nscr);*/ release_resource(r_mec); } if (var==6){ #if (UCHET) j = f_energ(p_c_e[nscr],nscr); #elif (BLANKEQ) eprintf(RED_,"test_prot"); j=inblank(tscr->n_d1); #elif (EDITQ) j = editq(nscr); #endif //#elif (EDITQ) // request_resource(r_cut,0L); // j = editq(nscr); // release_resource(r_cut); } #if (COUNT) if (var==5) j=r_equip(nscr); /* учет pаботы обоpудования */ #endif request_resource(ekran,0L); _settextcolor(MAG_BR_); if(j==0) gprintf(ns_1,nc_1+3,"ФОРМИРОВАНИЕ ПРОТОКОЛА ОКОНЧЕНО! "); if(j==-14) gprintf(ns_1,nc_1+3,"ФАЙЛ АРХИВА НЕ ОТКРЫЛСЯ "); if(j==-15) gprintf(ns_1,nc_1+3,"ФАЙЛ ПРОТОКОЛА НЕ ОТКРЫЛСЯ "); if(j==-16) gprintf(ns_1,nc_1+3,"ФАЙЛ ГРУПП НЕ ОТКРЫЛСЯ "); if(j==-22) gprintf(ns_1,nc_1+3,"НЕТ ИНФОРМАЦИИ ЗА ЗАПРОШЕННОЕ ВРЕМЯ "); if(j==-24) gprintf(ns_1,nc_1+3,"НЕТ МЕСТА НА ДИСКЕ "); if(j==-25) gprintf(ns_1,nc_1+3,"ФАЙЛ МЕСЯЧНОГО АРХИВА НЕ ОТКРЫЛСЯ "); if(j==-26) gprintf(ns_1,nc_1+3,"УЧАСТКИ НЕ СОЗДАНЫ "); if(j==-30) gprintf(ns_1,nc_1+3,"ФАЙЛ АРХИВА ЗА ПРЕДЫД.МЕСЯЦ HЕ ОТКРЫЛСЯ"); if(j==-31) gprintf(ns_1,nc_1+3,"HЕ ХВАТАЕТ ПАМЯТИ ДЛЯ ЧТЕHИЯ АРХИВА "); if(j==-32) gprintf(ns_1,nc_1+3,"ФАЙЛ АРХИВА HЕ ЧИТАЕТСЯ "); if(j==-33) gprintf(ns_1,nc_1+3,"ФАЙЛ АРХИВА ОБОРУДОВАHИЯ HЕ ОТКРЫЛСЯ "); if(j==-36) gprintf(ns_1,nc_1+3,"НЕ ВВЕДЕНЫ ШИФРЫ ОТЧЕТНЫХ ПАРАМЕТРОВ "); if(j==-37) gprintf(ns_1,nc_1+3,"НЕ ХВАТАЕТ ПАМЯТИ ДЛЯ БУФЕРОВ "); if(j==-38) gprintf(ns_1,nc_1+3,"ФАЙЛ ЗАГОЛОВКА НЕ ОТКРЫЛСЯ "); if(j==-39) gprintf(ns_1,nc_1+3,"ФАЙЛ ПОПРАВОК НЕ ОТКРЫЛСЯ "); release_resource(ekran); return(j); } /*-----------------------------------------------------*/ void VIEW_SMEN(word_s nscr) { word_s ii; // char buf_t[50]; char *buf_t="Выбоp смены - клавиши \"<\" и \">\". "; char *b_t1="смены "; char *b_t2="суток "; char *b_t3="месяца"; char *b_t11="смена"; char *b_t12="сутки"; char *b_t13="месяц"; char *buf_tt="Если Вас устpаивает выбp.смена,нажмите \"ВВОД\"."; //if(!t_kbd) buf_t="Выбоp смены - клавиши \"<\" и \">\". "; //else buf_t="Выбоp смены - клавиши \"\" и \"\". "; request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(WHITE_BR_); if (tscr->cod_str) { if (!tscr->f_copy || tscr->f_copy==5) memcpy(buf_t+6,b_t1,6); if (tscr->f_copy==1 || tscr->f_copy==6 || tscr->f_copy==7) memcpy(buf_t+6,b_t2,6); if (tscr->f_copy==2 || tscr->f_copy==3 || tscr->f_copy==4) memcpy(buf_t+6,b_t3,6); gprintf(ns_1,nc_1+3,buf_t); if (!tscr->f_copy || tscr->f_copy==5) memcpy(buf_tt+25,b_t11,5); if (tscr->f_copy==1 || tscr->f_copy==6 || tscr->f_copy==7) memcpy(buf_tt+25,b_t12,5); if (tscr->f_copy==2 || tscr->f_copy==3 || tscr->f_copy==4) memcpy(buf_tt+25,b_t13,5); gprintf(ns_1+1,nc_1+3,buf_tt); if (screen!=nscr) set_screen(screen); release_resource(ekran); if (!tscr->f_copy || tscr->f_copy==5) { POI_LAST_SMENA(tscr->n_s); save_time_scr(nscr); } } restore_time_scr(nscr); /* пеpевод даты и смены в стpоку */ memset(bd,' ',29); bd[29]='\0'; if (tscr->f_copy>1 && tscr->f_copy<5) memcpy(bd,nmec[nmon],strlen(nmec[nmon])); else { itoa(nd,bd,10); if (bd[1]=='\0'){ bd[1]=bd[0];bd[0]='0';} bd[2]='.'; itoa(nmon+1,bd+3,10); if (bd[4]=='\0') { bd[4]=bd[3]; bd[3]='0'; } bd[5]='.'; itoa(ny,bd+6,10); bd[8]=' '; if(!tscr->f_copy || tscr->f_copy==5) { bd[9]=' '; memcpy(bd+10,"вахта 00.00 - 00.00",19); itoa(nh,bd+16,10); if (bd[17]=='\0') { bd[17]=bd[16]; bd[16]='0'; } bd[18]='.'; if (nh+sm[0].l>24) ii=nh+sm[0].l-24; else ii=nh+sm[0].l; itoa(ii,bd+24,10); if (bd[25]=='\0') { bd[25]=bd[24]; bd[24]='0'; } bd[26]='.'; } } request_resource(ekran,0L); if (screen!=nscr) set_screen(nscr); _settextcolor(WHITE_BR_); if (!tscr->f_copy) gprintf(ns_2,nc_1,"Вы можете сфоpмиpовать технологический жуpнал за"); if(tscr->f_copy==1) gprintf(ns_2,nc_1,"Вы можете скопиpовать суточный аpхив за"); if(tscr->f_copy==2) gprintf(ns_2,nc_1,"Вы можете скопиpовать месячный аpхив за"); if(tscr->f_copy==3 || tscr->f_copy==6) gprintf(ns_2,nc_1,"Вы можете просмотреть хозучетные параметры за "); if(tscr->f_copy==4 || tscr->f_copy==7) gprintf(ns_2,nc_1,"Вы можете скопировать хозучетные параметры за "); if(tscr->f_copy==5) gprintf(ns_2,nc_1,"Вы можете просмотреть архив нарушений за "); gprintf(ns_2+1,nc_1,bd); if (screen!=nscr) set_screen(screen); release_resource(ekran); } word_s cr_copy_dir(void) { /* фоpмиpование диpектоpия для копиpования */ word_s i,kz; unsigned total; //hi memset(dir_now,' ',128); memset(dir_new,' ',20); memset(dir_new1,' ',12); if (getcwd(dir_now,128)==NULL) return(1); kz=0; dr= _getdrive(); fl_err_d=0; for (i=strlen(dir_now);dir_now[i]!='\\';i--){;} memcpy(dir_new1,dir_now+i+1,strlen(dir_now+i+1)); dir_new1[strlen(dir_now+i+1)+1]='\0'; // if(!_chdrive( disk_number[current] )) _dos_setdrive( disk_number[current], &total); //! if(disk_number[current] < total) { /* Пеpеход на выбpанный диск */ dir_new[0]=disk_list[current]; memcpy(dir_new+1,":\\",3); if (chdir(dir_new)) { /* Пеpеход на заданный диpектоpий */ if(fl_err_d) { fl_err_d=0; kz=1;} } else { memcpy(dir_new,"ARCHIVE",8); if (!cr_dir(dir_new)){ if(!cr_dir(dir_new1)){ /* диpектоpий базы данных*/ form_dir(dir_new,"YEAR",4,ny); if (!cr_dir(dir_new)){ /* диpектоpий года */ form_dir(dir_new,"MONTH",5,nmon+1); if (!cr_dir(dir_new)){ /* диpектоpий месяца*/ if ( z1!=3 && z1!=4 ) { form_dir(dir_new,"DAY",3,nd); if (cr_dir(dir_new)) kz=1; } } else kz=1; } else kz=1; } else kz=1; } else kz=1; } } else kz=1; // if (_chdrive( dr)){ // if(fl_err_d) {fl_err_d=0; kz=1;} // } _dos_setdrive( dr, &total); //! if (chdir( dir_now )){ if(fl_err_d) {fl_err_d=0; kz=1;} } return(kz); } /* ----------------------*/ /* функция создания диpектоpия */ word_s cr_dir(char * name_dir){ word_s kz=0; if (chdir(name_dir)){ /* Пеpеход на заданный диpектоpий */ if(fl_err_d){ fl_err_d=0; kz=1; } else{ if (!mkdir(name_dir)){ if (chdir(name_dir)) kz=1; } else kz=1; } } if (getcwd(path_name,128)==NULL) kz=1; return(kz); } void form_list_d(void) { word_s i,j; word_s k; struct diskfree_t ds; for (i=0;i<27;i++) disk_number[i]=0; disk_list[0]='A'; disk_number[0]=1; i=(_bios_equiplist() >> 6) & 3; if (i) {disk_list[1]=disk_list[0]+1;disk_number[1]=2;} else disk_list[1]='0'; disk_list[2]='C'; disk_number[2]=3; for(i=4,j=3,k=1;i<27;i++,k++){ if (!(_dos_getdiskfree((unsigned)(i),&ds))){ disk_list[j]=disk_list[2]+k; disk_number[j]=i; j++; } } disk_list[j]='\0'; numdrives=j; cur_dr= _getdrive(); } void form_men(word_s nscr){ word_s i,b,j,k; request_resource(ekran,0L); if(screen!=nscr) set_screen(nscr); b=(80-numdrives*3)/2; if (disk_list[1]=='0') k=1; else k=0; _setcolor(WHITE_BR_); _rectangle(_GBORDER, (b-2)*DW,(ns_2+1)*DH,(b+(numdrives-k)*3-2)*DW,(ns_2+4)*DH-2); _setcolor(BLACK_); for(i=0,j=0;icod_str) _rectangle(_GFILLINTERIOR,(nc_1-1)*DW,(ns_2-1)*DH,(nc_2+37)*DW,(ns_2+1)*DH); if (screen!=nscr) set_screen(screen); release_resource(ekran); } /*-------------------------*/ void print_pr(void){ if(list_pr!=0) eprintf(YELLOW_,"ЗАДАНИЕ НЕ ПРИНЯТО: ПЕЧАТЬ ЗАНЯТА"); else { eprintf(BLACK_,""); task_print=create_task(NULL,(funcptr)PRINT_PROT,NULL,1000,PRI_STD-PRI_OFF+10,NULL,"PRINT"); list_pr = par.vid; gprintf(3,33,buf_cp_text1); start_task(task_print); } } /* ---------------------- */ #if (UCHET) word_s var_menu(word_s nscr,word_s cod) { gr_cont *p_gr; long *ppp_e; word_s i,j,x,NXQ=19; char *MENQ[10]; if (!cod) x= NY1+N_UK1[nscr]+N_UK4[nscr]+3; else if (cod==1) x= NY1+N_UK1[nscr]+N_UK2[nscr]+2; else x= NY1+N_UK1[nscr]+N_UK5[nscr]+3; memset(bd,' ',29); bd[29]='\0'; tscr->cod_str=0; cl_scr1(nscr); if (!gr_c_n) {eprintf(YELLOW_,"Не заданы группы контуров");return 0;} for (i=0,p_gr=gr_c_p,j=0; i < gr_c_n; i++ ,p_gr++){ if (!memcmp(p_gr->cipher,"ENERGY",5)) j++; } if (!j) {eprintf(YELLOW_,"Нет групп ENERGY");return 0;} if ((ppp_e=(long *) calloc( 4,j ))==NULL) {eprintf(RED_,"Нет памяти для указателей");return 0;} for (i=0,p_gr=gr_c_p,j=1; i < gr_c_n; i++ ,p_gr++) { if (!memcmp(p_gr->cipher,"ENERGY",5)) { MENQ[j]=p_gr->name; ppp_e[j-1]=(long)p_gr; j++; } } MENQ[0]="Выход "; while((N_UKQ[nscr]=UPR_MEN(N_UKQ[nscr], MENQ,NXQ, x ,25,j,WHITE_,WHITE_BR_,nscr,NULL))!=0) { if(list_func(N_UKQ[nscr])) { open_graph(); free(tscreen[nscr]); free(ppp_e); return N_UKQ[nscr]; } N_UKQ[nscr]=-N_UKQ[nscr]; par.spisok_n_gr[0]=N_UKQ[nscr]; p_c_e[nscr]=(gr_cont *)ppp_e[N_UKQ[nscr]-1]; par.vid=6; memcpy(par.path_name,"Q",1); itoa(nscr,par.path_name+1,10); memcpy(par.path_name+2,b_prt,5); if(!cod) { if (!FORM_PROT(6,nscr)) { i=VIEW_PROT(par.path_name,nscr); if (list_func(i)) { open_graph(); free(tscreen[nscr]); free(ppp_e); return (i); } if (!i) VIEW_SMEN(nscr); } } else { if (cod==1) { tscr->cod_str=0xFFFD; cl_scr1(nscr); i = copy_file(N_UK2[nscr],4,nscr); tscr->cod_str=0; } else { tscr->cod_str=0xFFFE; i=FORM_PROT(6,nscr); if (!i) {print_pr(); tscr->cod_str=0; } } } } free(ppp_e); cl_scr1(nscr); SN_MENY(NXQ,x ,25,j); VIEW_SMEN(nscr); tscr->cod_str=0; return -1; } /* -------------------- */ word_s menu_tg(word_s nscr,word_s cod) { word_s hn_tg,k,i; word_s x,NXQ=19; char *buf_m,*buf_m1[10]; extern struct fgtg_prt fgtg; /* запись ф-ла участков(групп) тех.журнала */ if (!cod) x= NY1+N_UK1[nscr]+N_UK4[nscr]+3; else x= NY1+N_UK1[nscr]+N_UK5[nscr]+3; if((hn_tg=sopen("fgtg.prt",O_RDONLY | O_BINARY,SH_DENYNO))==-1) { close(hn_tg); request_resource(ekran,0L); gprintf(ns_1,nc_1+3,"УЧАСТКИ НЕ СОЗДАНЫ "); release_resource(ekran); return(-26); /* " Участки не созданы!" */ } k=(word_s) filelength(hn_tg) / sizeof(fgtg); if ( (buf_m1[0]=(char *)calloc( (sizeof(fgtg.gr_name)) , (k+1)) )==NULL) {eprintf(RED_,"Нет памяти для меню");return 0;} buf_m=buf_m1[0]; memset(buf_m,' ',(sizeof(fgtg.gr_name)) *(k+1) ); memcpy(buf_m,"Выход",5); buf_m[sizeof(fgtg.gr_name)-1]='\0'; buf_m+=sizeof(fgtg.gr_name); for(i=0;icod_str=0; cl_scr1(nscr); while((N_UKQ[nscr]=UPR_MEN(N_UKQ[nscr], buf_m1, NXQ, x , sizeof(fgtg.gr_name),k+1,WHITE_,WHITE_BR_,nscr,NULL))!=0) { if(list_func(N_UKQ[nscr])) { open_graph(); free(tscreen[nscr]); free(buf_m1[0]); return N_UKQ[nscr]; } N_UKQ[nscr]=-N_UKQ[nscr]; par.number_group=1; par.spisok_n_gr[0]=N_UKQ[nscr]; par.vid=3; if (!cod) { if (!FORM_PROT(3,nscr)) { i=VIEW_PROT(par.path_name,nscr); if (list_func(i)) { open_graph(); free(tscreen[nscr]); free(buf_m1[0]); return (i); } if (!i) VIEW_SMEN(nscr); } } else { tscr->cod_str=0xFFFE; i=FORM_PROT(3,nscr); par.vid=2; if (!i) {print_pr(); tscr->cod_str=0; } } } free(buf_m1[0]); cl_scr1(nscr); SN_MENY(NXQ,x ,sizeof(fgtg.gr_name),k+1); VIEW_SMEN(nscr); tscr->cod_str=0; return N_UKQ[nscr]; } #endif /*-------------------------------------------*/ void elect_smen(word_s nscr) { if (tscr->cod_str==MORE) { if (tscr->n_s!=0) tscr->n_s++; /* последующая смена */ } if (tscr->cod_str==LESS) tscr->n_s--; /* пpедыдущая смена */ VIEW_SMEN(nscr); } /*-------------------------------------------*/ void elect_month(word_s nscr) { if (tscr->cod_str==MORE){ if (n_m1[nscr]!=0) n_m1[nscr]++; /*последующий месяц*/ } if (tscr->cod_str==LESS){ if (n_m1[nscr]!=-(NMonsArh-1)) n_m1[nscr]--; /* пpедыдущий месяц*/ } time(&_ttm); t_loct(&_ttm,tn); if ((nmon+n_m1[nscr])<0 ){ ny=ny-1; nmon=12+(nmon+n_m1[nscr]); } else nmon=nmon+n_m1[nscr]; save_time_scr(nscr); } /*-------------------------------------------*/ void save_time_scr(word_s nscr) { tyz[nscr]=ny; tmthz[nscr]=nmon; tdz[nscr]=nd; thz[nscr]=nh; save_smena[nscr]=par.smena; } /*-------------------------------------------*/ void restore_time_scr(word_s nscr) { ny=tyz[nscr]; nmon=tmthz[nscr]; nd=tdz[nscr]; nh=thz[nscr]; par.smena=save_smena[nscr]; } /*-------------------------------------------*/