#include "alg.h" #include "alg_cfg.h" #include "mylib.h" #include "grc.h" #include "grg.h" #include "demohelp.h" TMyApp *myApp; //const int maxLineLength = 256; const int maxLines = 100; char *lines[maxLines]; int lineCount = 0; char *Text_msg[]= {"Error: Discordance of brackets to open, brackets to close", //0 "Formuls already exist.", //1 "Formuls OK and add.", //2 "Error: the formula is not completed", //3 "Error: Before a bracket should be an operator.; pos %d.", //4 "Error: two operators; pos %d.", //5 "Error: two numbers; pos %d.", //6 "Error: a inputs don't in the range 1-%d; pos %d.", //7 "Error: koefficient don't The Range 1-%d; pos %d.", //8 "Error: the point in number should be one; pos %d.", //9 "Error: invalid formuls (symb - %X); pos %d", //10 "Error: Use %d delete formuls.", //11 "I can't open the file %s", //12 "The formulas are absent", //13 "The formula are absent", //14 "Name %s, alredy exits", //15 "First, select delete`s a element", //16 "Length of some formulas more than 255 numerals", //17 "Algoblok %s is absent in description of controllers", //18 "The name algoblok %s meets more than once in description controllers", //19 "Is present empty algoblok", //20 "The input %s algoblok %s is absent in the description of controllers", //21 "The input %s algoblok %s meets more than once in description controllers", //22 "Algoblok don`t found", //23 "Нарушена структура файла %s", //24 "Chifr don`t found", //25 "Настройки измененялись! Сохранить изменения?", //26 "Формулы измененялись! Сохранить изменения?", //27 "You alredy want replace a formul?", //28 "Delete %.9s", //29 "Algobloks: %s ", //30 "Formuls: %s ", //31 "Mnemoshems: %s ", //32 "Conturs: %s ", //33 "Выбор шифра", //34 "Grafics: %s ", //35 "Object signal`s: %s ", //36 "Сохранить настройки на диск?", //37 "Перегрузить настройки с диска?", //38 "View`s: %s ", //39 "Comtabl's: %s ", //40 "Lib's: %s ", //41 "Speak's: %s ", //42 "Controler`s: %s ", //43 "Analog pasports: %s ", //44 "Digital pasports: %s ", //45 "Delete %d select elements?", //46 "Заменен шифр %.9s -> %.9s в объекте сигн. %.8s !", //47 "Удален шифр %.9s в объекте сигн. %.8s !", //48 " ", //49 "Заменен шифр %.9s -> %.9s в группе контуров %.8s !", //50 "Заменен шифр %.9s -> %.9s в группе графиков %.8s !", //51 "Удален шифр %.9s в группе контуров %.8s !", //52 "Удален шифр %.9s в группе графиков %.8s !", //53 "Заменен шифр %.9s -> %.9s в обзорном кадре %.9s !", //54 "Удален шифр %.9s в обзорном кадре %.9s !", //55 "Заменен шифр %.9s -> %.9s в сводной таблице %.9s !", //56 "Удален шифр %.9s в сводной таблице %.9s !", //57 "Заменен шифр %.9s -> %.9s (тип %.2s) в речевой сигнализ.!", //58 "Удален шифр %.9s (тип %.2s) в речевой сигнализ. !", //59 "Заменен шифр алгоблока %.9s -> %.9s !", //60 "Заменен шифр входа %.9s -> %.9s в алгоблоке %.9s !", //61 "Удален алгоблок %.9s !", //62 "Удален вход %.9s в алгоблоке %.9s !", //63 "Заменен шифр динамики %.9s -> %.9s в мнемосхеме %.8s !", //64 "Удален елемент динамики %.9s в мнемосхеме %.8s !", //65 "Дискр. элем. %.9s объекта сигн. %.8s отсутствует в контроллерах", //66 "Дискр. элем. %.9s объекта сигн. %.8s встречается более раза в контроллерах", //67 "Элем. %.9s объекта сигн. %.8s не является дискркетным ", //68 "Поле очищенно !!!", //69 "Уберите одноименные элементы!!!", //70 "Мнемосхема %.7s объекта сигн. %.7s отсутствует в мнемосхемах", //71 "Мнемосхема %.7s объекта сигн. %.7s встречается более раза в мнемосхемах", //72 "Контур %.8s объекта сигн. %.8s отсутствует в контурах", //73 "Контур %.8s объекта сигн. %.8s встречается более раза в контурах", //74 "График %.8s объекта сигн. %.8s отсутствует в графиках", //75 "График %.8s объекта сигн. %.8s встречается более раза в графиках", //76 "Элем. %.9s группы контуров %.8s отсутствует в контроллерах", //77 "Элем. %.9s группы контуров %.8s встречается более раза в контроллерах", //78 "Элем. %.9s группы графиков %.8s отсутствует в контроллерах", //79 "Элем. %.9s группы графиков %.8s встречается более раза в контроллерах", //80 "Элем. %.9s группы графиков %.8s является дискретным параметром", //81 "Элем. %.9s обзорного кадра %.8s отсутствует в контроллерах", //82 "Элем. %.9s обзорного кадра %.8s встречается более раза в контроллерах", //83 "Элем. %.9s сводной таблицы %.9s отсутствует в контроллерах", //84 "Элем. %.9s сводной таблицы %.9s встречается более раза в контроллерах", //85 "Элем. %.9s сводной таблицы %.9s является дискретным параметром", //86 "Шифр %.9s (тип %.2s) голос. сообщений отсутствует в контроллерах", //87 "Шифр %.9s (тип %.2s) голос. сообщений встречается более раза в контроллерах", //88 "Алгоблок %.9s отсутствует в описателе контроллеров", //89 "Имя алгоблока %.9s встречается более 1 раза в описателе контроллеров", //90 "Вход %.9s алгоблока %.9s отсутствует в описателе контроллеров", //91 "Вход %.9s алгоблока %.9s встречается более 1 раза в описателе контроллеров", //92 "Динамики %.9s мнемосхемы %.9s отсутствует в описателе контроллеров", //93 "Динамики %.9s мнемосхемы %.9s встречается более 1 раза в описателе контроллеров",//94 "Это окно уже открыто! Открыть еще один экземпляр?", //95 "", //96 "~I~nputs", //97 "~K~oefficients", //98 "~F~ormul's text", //99 "Algoblok`s formula:", //100 "Не закрыта операция '=' операцией ';'", //101 "Несоответствие скобок перед следующей строкой", //102 "Перед '=' должен быть вход,выход или коэффициент", //103 "Extract %d elements?", //104 "Could not open help file", //105 "Conturs", //106 "Groups", //107 "Group's name", //108 #ifdef __DOS32__ "%s\\%s", //109 #else "%s/%s", //109 //Q #endif "Controlers", //110 " Names ", //111 "Search", //112 "~O~K", //113 "~C~ancel", //114 "~A~pply", //115 "You alredy want correcting a PCX file ?", //116 "Wrong text into \" \" ", //117 }; char AlgConf[] = "alg.cfg"; char NameDfal[] = "dfal.dbf"; char NameAlgFrm[] = "alg_frm.cfg"; char NameDescrCnt[] = "descrcnt.dbf"; char NameCntTip[] = "contr.cfg"; char NameErr[]= "alg.err"; char DomineMs[] = "domine.mns"; char StatikaMs[] = "statika.mns"; char DinamikaMs[] = "dinamika.mns"; char NameGrc[] = "grc.dbf"; char NameGrg[] = "grg.dbf"; char NameSign[] = "signal.cfg"; char NameSign1[] = "sign.dbf"; char NameView[] = "view.dbf"; char NameComt[] = "comtabl.dbf"; char NameSpk[] = "speak.dbf"; char NamePCXLib[] = "grad.pcl"; char NameWAVLib[] = "wav.rs"; char NameFont[] = "dfon.ozu"; char NameHelp[] = "compcfg.hlp"; struct zap_sel { char name[12]; char n_contr; char type; }; TSelDialog::TSelDialog(char *Path,char par,char *StrSrch) :// controller **contr,char contr_am,TAlgCollection *My) : TDialog( TRect( 0, 0, 40, 12 ),Text_msg[34]), TWindowInit( TSelDialog::initFrame ) { int i; char str[256]; zap_sel *z_sel; options |= ofCentered; helpCtx=hcSearch; PathDir=Path; param=par; if(param&1) { AlgColect = new TCompCollect(10,10); FormColect = new TCompCollect(10,10); sprintf(str,Text_msg[109],PathDir,AlgConf); myApp->LoadAlgAll(str,AlgColect,FormColect); } myApp->LoadControllers(PathDir,&contr_ptr,&contr_amount); Colect1 = new TCompCollect(10,10); if(param&1) { z_sel=(zap_sel *)malloc(sizeof(zap_sel)); strncpy(z_sel->name,Text_msg[30],12); z_sel->type=2; z_sel->n_contr=0; Colect1->insert(z_sel); // Colect1->insert(Text_msg[30]); } if(param&2) for(i=0;inum_ap) continue; z_sel=(zap_sel *)malloc(sizeof(zap_sel)); strncpy(z_sel->name,contr_ptr[i]->namfil_A,12); z_sel->type=0; z_sel->n_contr=i; Colect1->insert(z_sel); // Colect1->insert(contr_ptr[i]->namfil_A); } if(param&4) for(i=0;inum_dp) continue; z_sel=(zap_sel *)malloc(sizeof(zap_sel)); strncpy(z_sel->name,contr_ptr[i]->namfil_D,12); z_sel->type=1; z_sel->n_contr=i; Colect1->insert(z_sel); // Colect1->insert(contr_ptr[i]->namfil_D); } ScrollBar1 = new TScrollBar( TRect( 13, 2, 14, 11) ); insert(ScrollBar1); ListBox1 = new TMyTListBox(TRect( 2, 2, 13, 11), 1, ScrollBar1,ListController); insert(ListBox1); ListBox1->newList(Colect1); Label1 = new TMyLabel(TRect(2, 1, 14, 2),Text_msg[110],ListBox1,1); insert(Label1); Colect2 = new TCompCollect(10,10); ScrollBar2 = new TScrollBar( TRect( 25, 2, 26, 11) ); insert(ScrollBar2); ListBox2 = new TMyTListBox(TRect( 15, 2, 25, 11), 1, ScrollBar2,NULL); insert(ListBox2); ListBox2->newList(Colect2); Label2 = new TMyLabel(TRect(15, 1, 26, 2),Text_msg[111],ListBox2,1); insert(Label2); Line1 = new TEdit( TRect( 27, 2, 36, 3 ),10,NULL/*SrchEdit*/); insert(Line1); THistory *hist=new THistory( TRect( 36, 2, 39, 3 ), Line1, 3 ); insert(hist); Line1->setData(StrSrch); Label3 = new TMyLabel(TRect(27, 1, 36, 2),Text_msg[112],Line1,1); insert(Label3); Button1 = new TButton( TRect( 26, 7, 39, 9 ),Text_msg[113],cmOK, bfDefault ); insert(Button1); Button2 = new TButton( TRect( 26, 9, 39, 11 ),Text_msg[114], cmCancel, bfNormal ); insert(Button2); Chenge_contr(ListBox1->focused,0); ListBox1->select(); } TSelDialog::~TSelDialog() { myApp->FreeControllers(contr_ptr,&contr_amount); if(param&1) myApp->FreeAlgAll(AlgColect,FormColect); myApp->FreeColect(Colect1); delete Colect2; // delete Colect1; // delete Colect2; } void TSelDialog::handleEvent ( TEvent& event ) { TDialog::handleEvent(event); if( event.what == evCommand ) { switch( event.message.command ) { case cmSearch: SearchNm(); break; case cmSearchNext: SearchNxtNm(); break; default: return; } clearEvent( event ); } } void TSelDialog::SearchNm() { int i,contr,tip,pos,k2; if(param&2)k2=1;else k2=0; //аналоговые contr=0;tip=2;pos=0; SearchChifr(&contr, &tip, &pos); if(contr== -1) DispFixErr(2,Text_msg[25]); else { // if(tip==1)i=k2*contr_amount+contr;else i=contr; for(i=0;igetCount();i++) if(((zap_sel *)Colect1->at(i))->n_contr==contr && ((zap_sel *)Colect1->at(i))->type==tip) break; if(i==Colect1->getCount()) i=0; Chenge_contr(i,0); ListBox1->focusItem(i); ListBox2->focusItem(pos); } old_s_contr=contr;old_s_tip=tip;old_s_pos=pos; } void TSelDialog::SearchNxtNm() { int i,contr,tip,pos,k2; if(param&2)k2=1;else k2=0; //аналоговые if(old_s_contr== -1)return; contr=old_s_contr;tip=old_s_tip;pos=old_s_pos+1; m1: SearchChifr(&contr, &tip, &pos); if(contr== -1){contr=0;tip=2;pos=0;goto m1;} else { // if(tip==1)i=k2*contr_amount+contr;else i=contr; for(i=0;igetCount();i++) if(((zap_sel *)Colect1->at(i))->n_contr==contr && ((zap_sel *)Colect1->at(i))->type==tip) break; if(i==Colect1->getCount()) i=0; Chenge_contr(i,0); ListBox1->focusItem(i); ListBox2->focusItem(pos); } old_s_contr=contr;old_s_tip=tip;old_s_pos=pos; } void TSelDialog::SearchChifr(int *contr, int *tip, int *pos) { int k,i,ii,iii,iiii; char str[10],k1,k2,k3; if(param&1)k1=1;else k1=0; //алгобоки if(param&2)k2=1;else k2=0; //аналоговые if(param&4)k3=1;else k3=0; //дискретные strncpy(str,Line1->data,9); str[9]=0; if(k1) {if(*tip==2) i= *contr; else i= *contr+1;} else {i= *contr; if(*tip==2) *tip=0; } for(;igetCount();ii++) { for(iiii=0;iiii<(int)(10-strlen(str));iiii++) { k=ii; for(iii=0;iiiat(ii)))->name[iii+iiii]) continue; k= -1; break; } if(k == -1) continue; break; } if(k == -1) continue; *tip=2;*pos=k;*contr=0;return; } *pos=0; *tip=0; continue; } if(*tip==0 && k2) { for(ii= *pos;iinum_ap;ii++) { for(iiii=0;iiii<(int)(10-strlen(str));iiii++) { k=ii; for(iii=0;iiia_ptr[ii].cipher[iii+iiii]) continue; k= -1; break; } if(k == -1) continue; break; } if(k == -1) continue; *contr=i-k1;*tip=0;*pos=k; return; } *pos=0; } if(k3) for(ii= *pos;iinum_dp;ii++) { for(iiii=0;iiii<(int)(10-strlen(str));iiii++) { k=ii; for(iii=0;iiid_ptr[ii].cipher[iii+iiii]) continue; k= -1; break; } if(k == -1) continue; break; } if(k == -1) continue; *contr=i-k1;*tip=1;*pos=k; return; } } *contr= -1; } //---------------------------------------------------------------------- int TSelDialog::SrchEdit(void* source,TEvent& event) { TEdit *List = (TEdit *)source; TSelDialog *Dialog = (TSelDialog *)List->owner; if(event.what == evKeyboard && event.keyDown.keyCode==kbEnter) { Dialog->SearchNm(); List->clearEvent(event); } return(0); } int TSelDialog::ListController(void* source,TEvent& event) { TMyTListBox *List; List=(TMyTListBox *)source; if( event.what == evBroadcast && event.message.command == cmScrollBarChanged) { myApp->SelDialog->Chenge_contr(List->focused,0); List->clearEvent(event); } return(0); } void TSelDialog::Chenge_contr(int Item,int filtr) { int i; char k1,k2,k3; zap_sel *z_sel; if(ListBox2->list()->getCount()) ListBox2->list()->removeAll(); if(param&1)k1=1;else k1=0; if(param&2)k2=1;else k2=0; if(param&4)k3=1;else k3=0; z_sel=(zap_sel *)Colect1->at(Item); if(z_sel->type==2 && k1) for(i=0;igetCount();i++) Colect2->insert(((alg_str *)AlgColect->at(i))->name); if(z_sel->type==0 && k2) { for(i=0;in_contr]->num_ap;i++) Colect2->insert(&contr_ptr[z_sel->n_contr]->a_ptr[i]); tip=ANALOG; } if(z_sel->type==1 && k3) { for(i=0;in_contr]->num_dp;i++) Colect2->insert(&contr_ptr[z_sel->n_contr]->d_ptr[i]); tip=DIGIT; } // if(Item-k1num_ap;i++) Colect2->insert(&contr_ptr[Item-k1]->a_ptr[i]);//.cipher); // tip=ANALOG; // } // else if(k3) // { // for(i=0;inum_dp;i++) Colect2->insert(&contr_ptr[Item-k1-contr_amount*k2]->d_ptr[i]);//.cipher); // tip=DIGIT; // } // } ListBox2->setRange( ListBox2->list()->getCount() ); ListBox2->drawView(); } //--------------- FUNCTIONS ---------------------- TFileWindow1::TFileWindow1( const char *fileName ) : TWindow( TProgram::deskTop->getExtent(), fileName,0), TWindowInit( &TFileWindow1::initFrame ) { options |= ofTileable; TRect r( getExtent() ); r.grow(-1, -1); insert(new TFileViewer1( r, standardScrollBar(sbHorizontal | sbHandleKeyboard), standardScrollBar(sbVertical | sbHandleKeyboard), fileName) ); } void TFileWindow1::handleEvent( TEvent& event ) { TWindow::handleEvent(event); if( event.what == evBroadcast && event.message.command == cmFindProtocol) clearEvent(event); } const char * const TFileViewer1::name = "TFileViewer1"; TFileViewer1::TFileViewer1( const TRect& bounds, TScrollBar *aHScrollBar, TScrollBar *aVScrollBar, const char *aFileName) : TScroller( bounds, aHScrollBar, aVScrollBar ) { growMode = gfGrowHiX | gfGrowHiY; isValid = True; fileName = 0; readFile( aFileName ); } //!!!!!!!!!!!!! Не хочет нормально вычищаться !!!!!!!!!!! TFileViewer1::~TFileViewer1() { delete fileName; destroy(fileLines); } void TFileViewer1::draw() { char *p; ushort c = getColor(0x0301); for( int i = 0; i < size.y; i++ ) { TDrawBuffer b; b.moveChar( 0, ' ', c, size.x ); if( delta.y + i < fileLines->getCount() ) { char s[maxLineLength+1]; p = (char *)( fileLines->at(delta.y+i) ); if( p == 0 || strlen(p) < delta.x ) s[0] = EOS; else { strncpy( s, p+delta.x, size.x ); if( strlen( p + delta.x ) > size.x ) s[size.x] = EOS; } b.moveStr( 0, s, c ); } writeBuf( 0, i, size.x, 1, b ); } } void TFileViewer1::scrollDraw() { TScroller::scrollDraw(); draw(); } void TFileViewer1::readFile( const char *fName ) { delete fileName; limit.x = 0; fileName = newStr( fName ); fileLines = new TLineCollection(5, 5); ifstream fileToView( fName ); if( !fileToView ) { messageBox( "Invalid drive or directory", mfError | mfOKButton ); isValid = False; } else { char line[maxLineLength+1]; while( !lowMemory() && !fileToView.eof() && fileToView.get( line, sizeof line ) != 0 ) { char c; fileToView.get(c); // grab trailing newline limit.x = max( limit.x, strlen( line ) ); fileLines->insert( newStr( line ) ); } isValid = True; } limit.y = fileLines->getCount(); } void TFileViewer1::setState( ushort aState, Boolean enable ) { TScroller::setState( aState, enable ); if( enable && (aState & sfExposed) ) setLimit( limit.x, limit.y ); } Boolean TFileViewer1::valid( ushort ) { return isValid; } void *TFileViewer1::read(ipstream& is) { char *fName; TScroller::read(is); fName = is.readString(); fileName = 0; readFile(fName); delete fName; return this; } void TFileViewer1::write(opstream& os) { TScroller::write(os); os.writeString(fileName); } TStreamable *TFileViewer1::build() { return new TFileViewer1( streamableInit ); } //================================================================================= #ifdef __DOS32__ ushort inputBoxN( const char *Title, const char *aLabel, char *s, int limit, int hist_id ) { TDialog *dialog; TView* control; ushort c; ushort len = max( strlen(aLabel) + 9 + limit + 3, strlen(Title) + 11 ); len = min( len, 60 ); len = max( len , 24 ); TRect r(0, 0, len, 8); r.move((TProgram::deskTop->size.x - r.b.x) / 2,(TProgram::deskTop->size.y - r.b.y) / 2); dialog = new TDialog(r, Title); int x = 4 + strlen( aLabel ); r = TRect( x, 2, min(x + limit + 2, dialog->size.x - 3), 3 ); control = new TInputLine( r, limit ); dialog->insert( control ); r.a.x = r.b.x; r.b.x += 3; dialog->insert( new THistory( r, (TInputLine *)control, hist_id )); r = TRect(2, 2, 3 + strlen(aLabel), 3); dialog->insert( new TLabel( r, aLabel, control ) ); r = TRect( dialog->size.x / 2 - 11, dialog->size.y - 4, dialog->size.x / 2 - 1 , dialog->size.y - 2); dialog->insert( new TButton(r, MsgBoxText::okText, cmOK, bfDefault)); r.a.x += 12; r.b.x += 12; dialog->insert( new TButton(r, MsgBoxText::cancelText, cmCancel, bfNormal)); r.a.x += 12; r.b.x += 12; dialog->selectNext(False); dialog->setData(s); c = TProgram::application->execView(dialog); if( c != cmCancel ) dialog->getData(s); TObject::destroy( dialog ); return c; } #endif //=============================================================== int NoEdit(void* source,TEvent& event) { return(1); } void TMyApp::FreeColect(TAlgCollection *Colect) { if(Colect != NULL) { Colect->freeAll(); delete Colect; } } void TMyApp::FreeColect(TCompCollect *Colect) { if(Colect != NULL) { Colect->freeAll(); delete Colect; } } //--------------------------------------------------------------------------- int TMyApp::ConvertFormul(int ind,char *str,TAlgCollection *FormColect) { char str1[512],*str2,str_temp[20]; int len,ii=0,iii; str2=str; strcpy(str1,(char *)(FormColect->at(ind))); len=strlen(str1); while(ii='1' && str1[ii+2]<='5') { *(++str2)=((str1[ii+1]-'1')*10 + (str1[ii+2]-'1')); ii+=2; } else *(++str2)=(str1[++ii]-'1'); str2++;ii++; continue; } if((str1[ii]>='0' && str1[ii]<='9')|| str1[ii]=='.') { *str2='C'; iii=0; while((str1[ii+iii]>='0' && str1[ii+iii]<='9')|| (str1[ii+iii]=='.'))iii++; strncpy(str_temp,str1+ii,iii); str_temp[iii]=0; *(float *)(++str2)=(float)atof(str_temp); str2+=4;ii+=iii; continue; } *(str2++)=str1[ii++]; } if((str2-str)>256)return(-1); return(str2-str); } //--------------------------------------------------------------------------- void TMyApp::LoadControllers(char* PathFile,controller ***contr_ptr,char *contr_amount) { int numrec,i,ii; char str[256]; TBasaDBF *basa = new TBasaDBF(); sprintf(str,Text_msg[109],PathFile,NameDescrCnt); if(basa->LoadFile(str)== -1){ *contr_ptr=NULL;return;} numrec=basa->GetCountItems(); *contr_ptr=(controller **)calloc(numrec, sizeof(controller **)); *contr_amount=numrec; for(i=0; inom_ord=i; basa->GetFieldIt(i,"SHIFR",str); (*contr_ptr)[i]->nomcontr=atoi(str); basa->GetFieldIt(i,"TC",str); (*contr_ptr)[i]->typcontr=atoi(str); basa->GetFieldIt(i,"NFA",(*contr_ptr)[i]->namfil_A); chek_tab((*contr_ptr)[i]->namfil_A); basa->GetFieldIt(i,"NFD",(*contr_ptr)[i]->namfil_D); chek_tab((*contr_ptr)[i]->namfil_D); } for(i=0;i< *contr_amount;i++) { sprintf(str,Text_msg[109],PathFile,(*contr_ptr)[i]->namfil_A); if(basa->LoadFile(str)!= -1) { numrec=basa->GetCountItems(); (*contr_ptr)[i]->num_ap=numrec; (*contr_ptr)[i]->a_ptr=(analog *)calloc(numrec,sizeof(analog)); for(ii=0; iiGetFieldIt(ii,"SHIFR",(*contr_ptr)[i]->a_ptr[ii].cipher); basa->GetFieldIt(ii,"NG",str); (*contr_ptr)[i]->a_ptr[ii].min_sc=atof(str); basa->GetFieldIt(ii,"VG",str); (*contr_ptr)[i]->a_ptr[ii].max_sc=atof(str); } } else (*contr_ptr)[i]->a_ptr=NULL; sprintf(str,Text_msg[109],PathFile,(*contr_ptr)[i]->namfil_D); if(basa->LoadFile(str)!= -1) { numrec=basa->GetCountItems(); (*contr_ptr)[i]->num_dp=numrec; (*contr_ptr)[i]->d_ptr=(digit *)calloc(numrec,sizeof(digit)); for(ii=0; iiGetFieldIt(ii,"SHIFR",(*contr_ptr)[i]->d_ptr[ii].cipher); basa->GetFieldIt(ii,"TIP",str); (*contr_ptr)[i]->d_ptr[ii].type_par=atoi(str); } } else (*contr_ptr)[i]->d_ptr=NULL; } delete basa; } void TMyApp::FreeControllers(controller **contr_ptr,char *contr_amount) { if(contr_ptr!=NULL) { for(int i=0;i< *contr_amount;i++) { if(contr_ptr[i]->a_ptr!=NULL) free(contr_ptr[i]->a_ptr); if(contr_ptr[i]->d_ptr!=NULL) free(contr_ptr[i]->d_ptr); free(contr_ptr[i]); } free(contr_ptr); } } void TMyApp::chek_tab(char *str) { int i=0,j=0; while(str[i]!=0) { if(str[i]==' ') { i++; continue; } str[j]=str[i]; i++; j++; } str[j]=0; } int TMyApp::ChekWin(char *str) { char str1[256]; if( deskTop->current != NULL ) { TWindow* p =(TWindow *)deskTop->current; strcpy(str1,p->title); do { if(!strcmp(str,p->title)){ p->select(); return(1);}; do p=(TWindow *)p->next; while(!(p->options & ofSelectable)); } while(strcmp(str1,p->title)); } return(0); } word_s TMyApp::ChekNamePasport(controller **c_ptr,char amount,char *str,word_s *nc,word_s *nz) { word_s i,ii,tip; char numb_found=0; if(str[0]==0x20){ *nc=0;*nz=0;return(EMPTY);} for(i=0;inum_ap;ii++) { if(!strncmp(str,c_ptr[i]->a_ptr[ii].cipher,9)){ numb_found++; *nc=i; *nz=ii;tip=0;} } for(ii=0;iinum_dp;ii++) { if(!strncmp(str,c_ptr[i]->d_ptr[ii].cipher,9)){ numb_found++; *nc=i;*nz=ii;tip=1;} } } if(numb_found>1)return(-2); if(!numb_found)return(-1); return(tip); } void TMyApp::AllControl() { char save,str1[256],str2[10],str3[10],Path[256]; int stat,i,i1,ii,n,ld_tip,k; word_s tmp; TDialog *Dialog; TMyCheckBoxes *CheckBoxes, *CheckBoxes2; TButton *Button; ushort control; controller **contr_ptr; char contr_amount; Boolean fix=False; TCompCollect *Colect,*Colect1; TBasaDBF *TempDBF,*TempDBF1; getcwd(Path,sizeof(Path)); Dialog =new TDialog( TRect( 0, 0, 27, 15 ),"All Controll"); Dialog->options |= ofCentered; CheckBoxes = new TMyCheckBoxes( TRect( 1, 1, 26, 9), new TSItem( "Объекты сигнализации", new TSItem( "Контура", new TSItem( "Графики", new TSItem( "Обзорный кадр", new TSItem( "Сводная таблица", new TSItem( "Звуковые сообщения", new TSItem( "Алгоблоки", new TSItem( "Мнемосхемы",0)))))))),NULL); stat=0xFF; CheckBoxes->setData(&stat); Dialog->insert(CheckBoxes); CheckBoxes2 = new TMyCheckBoxes( TRect( 1, 10, 26, 11), new TSItem( "Устранить ошибки",0),NULL); Dialog->insert(CheckBoxes2); Button = new TButton( TRect(8,12,18,14), "~О~к", cmOK, bfDefault ); Dialog->insert(Button); CheckBoxes->select(); control = execView(Dialog); if(control!=cmOK) return; CheckBoxes2->getData(&stat); if(stat&0x01)fix=True; CheckBoxes->getData(&stat); TObject::destroy( Dialog ); LoadControllers(Path,&contr_ptr,&contr_amount); //Объекты сигнализации if(stat&0x01) { Colect = new TCompCollect(10,10); LoadSignal(Path,Colect); save=0; sprintf(str1,Text_msg[109],Path,NameGrc); LoadGrc(str1,&TempDBF); sprintf(str1,Text_msg[109],Path,NameGrg); LoadGrg(str1,&TempDBF1); LoadMsh(Path,&Colect1); for(i=0;igetCount();i++) { strcpy(str1,((object *)Colect->at(i))->ciph_ds); strcpy(str2,((object *)Colect->at(i))->cipher); ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[66],str1,str2); if(fix){save=1;strcpy(((object *)Colect->at(i))->ciph_ds,Text_msg[49]); DispFixErr(1,Text_msg[69]);} } if(ld_tip==-2) { DispFixErr(1,Text_msg[67],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } if(ld_tip==ANALOG) { DispFixErr(1,Text_msg[68],str1,str2); if(fix){save=1;strcpy(((object *)Colect->at(i))->ciph_ds,Text_msg[49]); DispFixErr(1,Text_msg[69]);} } // Наличие мнемосхем for(ii=0;ii<((object *)Colect->at(i))->n_ms;ii++) { strcpy(str1,((object *)Colect->at(i))->ciph_ms[ii].name); DelSpace(str1,7); for(k=0,n=0;n < Colect1->getCount(); n++) { DelSpace(((domineed *)Colect1->at(n))->IMJ,7); if(!strcmp(str1,((domineed *)Colect1->at(n))->IMJ)) k++;} if(!k) {if(str1[0]!=' ') {DispFixErr(1,Text_msg[71],str1,str2); if(fix) {save=1; memmove((char *)&((object *)Colect->at(i))->ciph_ms[ii],(char *)&((object *)Colect->at(i))->ciph_ms[ii+1],(((object *)Colect->at(i))->n_ms-ii)*sizeof(str8)); ((object *)Colect->at(i))->n_ms--; ii--; DispFixErr(1,Text_msg[69]); } } continue; } if(k>1) { DispFixErr(1,Text_msg[72],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); continue; } } // Наличие контуров for(ii=0;ii<((object *)Colect->at(i))->n_gr_c;ii++) { strcpy(str1,((object *)Colect->at(i))->ciph_gr_c[ii].name); DelSpace(str1,8); for(k=0,n=0;n < TempDBF->GetCountItems(); n++) {TempDBF->GetFieldIt(n,"SHIFR",str3); DelSpace(str3,8); if(!strcmp(str1,str3)) k++;} if(!k) {if(str1[0]!=' ') {DispFixErr(1,Text_msg[73],str1,str2); if(fix) {save=1; memmove((char *)&((object *)Colect->at(i))->ciph_gr_c[ii], (char *)&((object *)Colect->at(i))->ciph_gr_c[ii+1], (((object *)Colect->at(i))->n_gr_c-ii)*sizeof(str9)); ((object *)Colect->at(i))->n_gr_c--; ii--; DispFixErr(1,Text_msg[69]); } } continue; } if(k>1) { DispFixErr(1,Text_msg[74],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); continue; } } // Наличие графиков for(ii=0;ii<((object *)Colect->at(i))->n_gr_g;ii++) { strcpy(str1,((object *)Colect->at(i))->ciph_gr_g[ii].name); DelSpace(str1,8); for(k=0,n=0;n < TempDBF1->GetCountItems(); n++) {TempDBF1->GetFieldIt(n,"SHIFR",str3); DelSpace(str3,8); if(!strcmp(str1,str3)) k++;} if(!k) {if(str1[0]!=' ') {DispFixErr(1,Text_msg[75],str1,str2); if(fix) {save=1; memmove((char *)&((object *)Colect->at(i))->ciph_gr_g[ii],(char *)&((object *)Colect->at(i))->ciph_gr_g[ii+1],(((object *)Colect->at(i))->n_gr_g-ii)*sizeof(str9)); ((object *)Colect->at(i))->n_gr_g--; ii--; DispFixErr(1,Text_msg[69]); } } continue; } if(k>1) { DispFixErr(1,Text_msg[76],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); continue; } } } if(save)SaveSignalHdd(Path,Colect); FreeSignal(Colect); FreeColect(Colect); delete TempDBF; delete TempDBF1; FreeMsh(Colect1); } //Группы контуров if(stat&0x02) { sprintf(str1,Text_msg[109],Path,NameGrc); LoadGrc(str1,&TempDBF); save=0; for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<8;ii++) { sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[77],str1,str2); if(fix) {save=1; sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[78],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } } } if(save){ sprintf(str1,Text_msg[109],Path,NameGrc); TempDBF->SaveFile(str1);} delete TempDBF; } //Группы графиков if(stat&0x04) { sprintf(str1,Text_msg[109],Path,NameGrg); LoadGrg(str1,&TempDBF); save=0; for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<8;ii++) { sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[79],str1,str2); if(fix) {save=1; sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[80],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } if(ld_tip==DIGIT) { DispFixErr(1,Text_msg[81],str1,str2); if(fix) {save=1; sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); DispFixErr(1,Text_msg[69]); } } } } if(save){ sprintf(str1,Text_msg[109],Path,NameGrg); TempDBF->SaveFile(str1);} delete TempDBF; } //Обзорный кадр if(stat&0x08) { sprintf(str1,Text_msg[109],Path,NameView); LoadView(str1,&TempDBF); save=0; for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<24;ii++) { sprintf(str1,"SH_%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[82],str1,str2); if(fix) {save=1; sprintf(str1,"SH_%d",ii+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[83],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } } } if(save){ sprintf(str1,Text_msg[109],Path,NameView); TempDBF->SaveFile(str1);} delete TempDBF; } //Обзорный кадр if(stat&0x10) { sprintf(str1,Text_msg[109],Path,NameComt); LoadCompt(str1,&TempDBF); save=0; for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<60;ii++) { sprintf(str1,"SH_%d_%d",(ii/5)+1,(ii%5)+1); TempDBF->GetFieldIt(i,str1,str1); ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[84],str1,str2); if(fix) {save=1; sprintf(str1,"SH_%d_%d",(ii/5)+1,(ii%5)+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[85],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } if(ld_tip==DIGIT) { DispFixErr(1,Text_msg[86],str1,str2); if(fix) {save=1; sprintf(str1,"SH_%d_%d",(ii/5)+1,(ii%5)+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); DispFixErr(1,Text_msg[69]); } } } } if(save){ sprintf(str1,Text_msg[109],Path,NameComt); TempDBF->SaveFile(str1);} delete TempDBF; } //Обзорный кадр if(stat&0x20) { sprintf(str1,Text_msg[109],Path,NameSpk); LoadSpk(str1,&TempDBF); save=0; for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"COD_O",str2); TempDBF->GetFieldIt(i,"SHIFR",str1); ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[87],str1,str2); if(fix) {save=1; TempDBF->DeleteItems(i,1); i--; DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[88],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } } if(save){ sprintf(str1,Text_msg[109],Path,NameSpk); TempDBF->SaveFile(str1);} delete TempDBF; } //Алгоблоки if(stat&0x40) { Colect = new TCompCollect(5,5); Colect1 = new TCompCollect(5,5); sprintf(str1,Text_msg[109],Path,AlgConf); myApp->LoadAlgAll(str1,Colect,Colect1); // Colect = new TCompCollect(10,10); // sprintf(str1,Text_msg[109],Path,AlgConf); // myApp->LoadAlg(str1,Colect); save=0; for(i=0;igetCount();i++) { strncpy(str1,((alg_str *)Colect->at(i))->name,9); str1[9]=0; ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[89],str1); if(fix) {save=1; free(((alg_str *)Colect->at(i))->disript); ((alg_str *)Colect->at(i))->inp->freeAll(); delete ((alg_str *)Colect->at(i))->inp; ((alg_str *)Colect->at(i))->koef->freeAll();delete ((alg_str *)Colect->at(i))->koef; Colect->atFree(i); i--; DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[90],str1); if(fix) DispFixErr(1,Text_msg[70]); } } for(i=0;igetCount();i++) { strncpy(str2,((alg_str *)Colect->at(i))->name,9); str2[9]=0; for(ii=0;ii<((alg_str *)Colect->at(i))->inp->getCount();ii++) { strncpy(str1,(char *)((alg_str *)Colect->at(i))->inp->at(ii),9); str1[9]=0; ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[91],str1,str2); if(fix) {save=1; strncpy((char *)((alg_str *)Colect->at(i))->inp->at(ii),Text_msg[49],9); DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[92],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } } } if(save){ sprintf(str1,Text_msg[109],Path,AlgConf); myApp->SaveAlgAllHdd(str1,Colect,Colect1);} myApp->FreeAlgAll(Colect,Colect1); } //Мнемосхемы if(stat&0x80) { LoadMsh(Path,&Colect); save=0; for(i=0;igetCount();i++) { strncpy(str2,((domineed *)Colect->at(i))->IMJ,8); Colect1=(TCompCollect *)((domineed *)Colect->at(i))->din; for(i1=0;i1getCount();i1++) { strcpy(str1,((dinamika *)Colect1->at(i1))->IMJ); ld_tip=ChekNamePasport(contr_ptr,contr_amount,str1,&tmp,&tmp); if(ld_tip==-1) { DispFixErr(1,Text_msg[93],str1,str2); if(fix) {save=1; Colect1->atFree(i1); i1--; DispFixErr(1,Text_msg[69]); } } if(ld_tip==-2) { DispFixErr(1,Text_msg[94],str1,str2); if(fix) DispFixErr(1,Text_msg[70]); } } } if(save) SaveMnHdd(Path,Colect); FreeMsh(Colect); } } //************************************************************************************** //Коректировка в объекте сигнализации при удаления или переименовки элементов в нём //Параметры: //1 - Путь к директории //2 - Искомое имя //3 - Объект операции: 1 - мнемосхемы, 2 - графики, 3 - контура //4 - Новое имя. Если NULL, то удалять //************************************************************************************** void TMyApp::ChekSignal(char *PathDir,char *str,int opt,char *str_new) { Boolean modif=False; int i,ii,size_el; char str_t[10],*elaments; byte *n_el=NULL; TCompCollect *SignColect; SignColect = new TCompCollect(10,10); LoadSignal(PathDir,SignColect); DelSpace(str,8); for(i=0;igetCount();i++) { if(opt==1) { n_el=&((object *)SignColect->at(i))->n_ms; elaments=(char *)((object *)SignColect->at(i))->ciph_ms; size_el=sizeof(str8); } if(opt==2) { n_el=&((object *)SignColect->at(i))->n_gr_g; elaments=(char *)((object *)SignColect->at(i))->ciph_gr_g; size_el=sizeof(str9); } if(opt==3) { n_el=&((object *)SignColect->at(i))->n_gr_c; elaments=(char *)((object *)SignColect->at(i))->ciph_gr_c; size_el=sizeof(str9); } if(n_el) for(ii=0;ii<*n_el;ii++) { strcpy(str_t,elaments+ii*size_el); DelSpace(str_t,size_el-1); if(strncmp(str_t,str,size_el-1)) continue; if(!str_new) {memmove((elaments+ii*size_el),(elaments+(ii+1)*size_el),(*n_el-ii)*size_el); (*n_el)--; ii--; modif=True; } else { DelSpace(str_new,size_el-1); strcpy(elaments+ii*size_el,str_new); modif=True; } } } if(modif) SaveSignalHdd(PathDir,SignColect); //? FreeSignal(SignColect); FreeColect(SignColect); } //************************************************************************************** //Функция замены и удаления шифров по всем конфигурационным файлам Complex //Параметры: //1 - Старое имя (при переименовании) или масив имен удаляемых шифров (при удалении) //2 - Новое имя (при переименовании) или указатель на int число удаляемых имен //3 - операция :0 - переименование 1 - удаление //************************************************************************************** word_s TMyApp::scanAll(char *NameOld,char *NameNew,char *Path,char opt) { char *str,save,str1[256],str2[10]; int stat,i,i1,ii,n; TDialog *Dialog; TMyCheckBoxes *CheckBoxes; TButton *Button; ushort control; TCompCollect *Colect,*Colect1; TBasaDBF *TempDBF; if(opt==1) str="Где переименовывать ?"; if(opt==2) str="Где удалять ?"; Dialog =new TDialog( TRect( 0, 0, 27, 12 ),str); Dialog->options |= ofCentered; CheckBoxes = new TMyCheckBoxes( TRect( 1, 1, 26, 9), new TSItem( "Объекты сигнализации", new TSItem( "Контура", new TSItem( "Графики", new TSItem( "Обзорный кадр", new TSItem( "Сводная таблица", new TSItem( "Звуковые сообщения", new TSItem( "Алгоблоки", new TSItem( "Мнемосхемы",0)))))))),NULL); stat=0xFF; CheckBoxes->setData(&stat); Dialog->insert(CheckBoxes); Button = new TButton( TRect(8,9,18,11), "~О~к", cmOK, bfDefault ); CheckBoxes->select(); Dialog->insert(Button); CheckBoxes->select(); control = execView(Dialog); CheckBoxes->getData(&stat); TObject::destroy( Dialog ); //Объекты сигнализации if(stat&0x01) { Colect = new TCompCollect(10,10); LoadSignal(Path,Colect); save=0; if(opt==1) //Переименование { DelSpace(NameOld,9); for(i=0;igetCount();i++) { strncpy(str1,((object *)Colect->at(i))->ciph_ds,9); str1[9]=0; DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; DispFixErr(1,Text_msg[47],NameOld,NameNew,((object *)Colect->at(i))->cipher); strncpy(((object *)Colect->at(i))->ciph_ds,NameNew,9); } } } if(opt==2) //Удаление { for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;igetCount();i++) { strncpy(str1,((object *)Colect->at(i))->ciph_ds,9); str1[9]=0; DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[48],NameOld,((object *)Colect->at(i))->cipher); strcpy(((object *)Colect->at(i))->ciph_ds,Text_msg[49]); } } } } if(save)SaveSignalHdd(Path,Colect); FreeSignal(Colect); FreeColect(Colect); } //Группы контуров if(stat&0x02) { sprintf(str1,Text_msg[109],Path,NameGrc); LoadGrc(str1,&TempDBF); save=0; if(opt==1) { DelSpace(NameOld,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<8;ii++) { sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; DispFixErr(1,Text_msg[50],NameOld,NameNew,str2); sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->ModifiFieldIt(i,str1,NameNew); } } } } if(opt==2) { for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<8;ii++) { sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[52],str,str2); sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); } } } } } if(save){ sprintf(str1,Text_msg[109],Path,NameGrc); TempDBF->SaveFile(str1);} delete TempDBF; } //Группы графиков if(stat&0x04) { sprintf(str1,Text_msg[109],Path,NameGrg); LoadGrg(str1,&TempDBF); save=0; if(opt==1) { DelSpace(NameOld,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<8;ii++) { sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; DispFixErr(1,Text_msg[51],NameOld,NameNew,str2); sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->ModifiFieldIt(i,str1,NameNew); } } } } if(opt==2) { for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<8;ii++) { sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[53],str,str2); sprintf(str1,"SHIFR_P%d",ii+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); } } } } } if(save){ sprintf(str1,Text_msg[109],Path,NameGrg); TempDBF->SaveFile(str1);} delete TempDBF; } //Обзорный кадр if(stat&0x08) { sprintf(str1,Text_msg[109],Path,NameView); LoadView(str1,&TempDBF); save=0; if(opt==1) { DelSpace(NameOld,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<24;ii++) { sprintf(str1,"SH_%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; DispFixErr(1,Text_msg[54],NameOld,NameNew,str2); sprintf(str1,"SH_%d",ii+1); TempDBF->ModifiFieldIt(i,str1,NameNew); } } } } if(opt==2) { for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<24;ii++) { sprintf(str1,"SH_%d",ii+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[55],str,str2); sprintf(str1,"SH_%d",ii+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); } } } } } if(save){ sprintf(str1,Text_msg[109],Path,NameView); TempDBF->SaveFile(str1);} delete TempDBF; } //Сводная таблица if(stat&0x10) { sprintf(str1,Text_msg[109],Path,NameComt); LoadCompt(str1,&TempDBF); save=0; if(opt==1) { DelSpace(NameOld,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<60;ii++) { sprintf(str1,"SH_%d_%d",(ii/5)+1,(ii%5)+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; DispFixErr(1,Text_msg[56],NameOld,NameNew,str2); sprintf(str1,"SH_%d_%d",(ii/5)+1,(ii%5)+1); TempDBF->ModifiFieldIt(i,str1,NameNew); } } } } if(opt==2) { for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"SHIFR",str2); for(ii=0;ii<24;ii++) { sprintf(str1,"SH_%d_%d",(ii/5)+1,(ii%5)+1); TempDBF->GetFieldIt(i,str1,str1); DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[57],str,str2); sprintf(str1,"SH_%d_%d",(ii/5)+1,(ii%5)+1); TempDBF->ModifiFieldIt(i,str1,Text_msg[49]); } } } } } if(save){ sprintf(str1,Text_msg[109],Path,NameComt); TempDBF->SaveFile(str1);} delete TempDBF; } //Звуковые сообщения if(stat&0x20) { sprintf(str1,Text_msg[109],Path,NameSpk); LoadSpk(str1,&TempDBF); save=0; if(opt==1) { DelSpace(NameOld,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"COD_O",str2); TempDBF->GetFieldIt(i,"SHIFR",str1); DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; DispFixErr(1,Text_msg[58],NameOld,NameNew,str2); TempDBF->ModifiFieldIt(i,"SHIFR",NameNew); } } } if(opt==2) { for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;iGetCountItems();i++) { TempDBF->GetFieldIt(i,"COD_O",str2); TempDBF->GetFieldIt(i,"SHIFR",str1); DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[59],str,str2); TempDBF->DeleteItems(i,1); i--; } } } } if(save){ sprintf(str1,Text_msg[109],Path,NameSpk); TempDBF->SaveFile(str1);} delete TempDBF; } //Алгоблоки вычислителя if(stat&0x40) { Colect = new TCompCollect(5,5); Colect1 = new TCompCollect(5,5); sprintf(str1,Text_msg[109],Path,AlgConf); myApp->LoadAlgAll(str1,Colect,Colect1); // Colect = new TCompCollect(10,10); // sprintf(str1,Text_msg[109],Path,AlgConf); // myApp->LoadAlg(str1,Colect); save=0; if(opt==1) { DelSpace(NameOld,9); for(i=0;igetCount();i++) { strncpy(str1,((alg_str *)Colect->at(i))->name,9); str1[9]=0; DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; strncpy(((alg_str *)Colect->at(i))->name,NameNew,9); DispFixErr(1,Text_msg[60],NameOld,NameNew); } } for(i=0;igetCount();i++) { strncpy(str2,((alg_str *)Colect->at(i))->name,9); str2[9]=0; for(ii=0;ii<((alg_str *)Colect->at(i))->inp->getCount();ii++) { strncpy(str1,(char *)((alg_str *)Colect->at(i))->inp->at(ii),9); str1[9]=0; DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; strncpy((char *)((alg_str *)Colect->at(i))->inp->at(ii),NameNew,9); DispFixErr(1,Text_msg[61],NameOld,NameNew,str2); } } } } if(opt==2) { for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;igetCount();i++) { strncpy(str1,((alg_str *)Colect->at(i))->name,9); str1[9]=0; DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; free(((alg_str *)Colect->at(i))->disript); ((alg_str *)Colect->at(i))->inp->freeAll(); delete ((alg_str *)Colect->at(i))->inp; ((alg_str *)Colect->at(i))->koef->freeAll();delete ((alg_str *)Colect->at(i))->koef; Colect->atFree(i); i--; DispFixErr(1,Text_msg[62],str); } } for(i=0;igetCount();i++) { strncpy(str2,(char *)((alg_str *)Colect->at(i))->name,9); str2[9]=0; for(ii=0;ii<((alg_str *)Colect->at(i))->inp->getCount();ii++) { strncpy(str1,(char *)((alg_str *)Colect->at(i))->inp->at(ii),9); str1[9]=0; DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[63],str,str2); strncpy((char *)((alg_str *)Colect->at(i))->inp->at(ii),Text_msg[49],9); } } } } } if(save){ sprintf(str1,Text_msg[109],Path,AlgConf); myApp->SaveAlgAllHdd(str1,Colect,Colect1);} myApp->FreeAlgAll(Colect,Colect1); } //Мнемосхемы if(stat&0x80) { LoadMsh(Path,&Colect); save=0; if(opt==1) //Переименование { DelSpace(NameOld,9); for(i=0;igetCount();i++) { strncpy(str2,((domineed *)Colect->at(i))->IMJ,8); Colect1=(TCompCollect *)((domineed *)Colect->at(i))->din; for(i1=0;i1getCount();i1++) { strcpy(str1,((dinamika *)Colect1->at(i1))->IMJ); DelSpace(str1,9); if(!strncmp(NameOld,str1,9)) { save=1; DispFixErr(1,Text_msg[64],NameOld,NameNew,str2); strcpy(((dinamika *)Colect1->at(i1))->IMJ,NameNew); } } } } if(opt==2) //Удаление for(n=0;n<*(int *)NameNew;n++) { str=(NameOld+n*10); DelSpace(str,9); for(i=0;igetCount();i++) { strncpy(str2,((domineed *)Colect->at(i))->IMJ,8); Colect1=(TCompCollect *)((domineed *)Colect->at(i))->din; for(i1=0;i1getCount();i1++) { strcpy(str1,((dinamika *)Colect1->at(i1))->IMJ); DelSpace(str1,9); if(!strncmp(str,str1,9)) { save=1; DispFixErr(1,Text_msg[65],str,str2); Colect1->atFree(i1); i1--; } } } } if(save) SaveMnHdd(Path,Colect); FreeMsh(Colect); } return(0); } void CDECL DispFixErr(int op,char *fmt, ...) { static char oldstr[500]; static char first_err; int hd; char str[500]; va_list argptr; va_start (argptr,fmt); vsprintf(str,fmt,argptr); va_end(argptr); if(op==1);else messageBox(str,mfError | mfOKButton); if(op==2); else { if(first_err!=0x55)remove(NameErr); first_err=0x55; hd=open(NameErr,O_BIN|O_RDWR|O_CREAT|O_APPEND,S_IREAD|S_IWRITE); if(!strcmp(str,oldstr))write(hd,".",1); else { strcpy(oldstr,str); #ifdef __DOS32__ write(hd,"\r\n",2); #else write(hd,"\n",1); #endif write(hd,str,strlen(str)); } close(hd); } } void DelSpace(char *str,char len) { int iii; for(iii=len-1;iii>=0;iii--) if(str[iii]==' ')str[iii]=0; else break; } long filelength_(int hd) { int tmp,tmp1; tmp =lseek(hd,0,SEEK_CUR); tmp1=lseek(hd,0,SEEK_END); lseek(hd,tmp,SEEK_SET); return(tmp1); } int copyfile(int fh, int fh1, int size) { int bl,ii; char *buf; buf=(char *)malloc(500000); bl=size/500000; for(ii=0;ii=min_n&&znach<=atof(str)) return(0); min_n=-100000000.; } else if(znach==atof(str)) return(0); ii+=old_i+1; old_i=0; continue; } } DispFixErr(0,"Значение должно соответствовать маске: '%s'",mask); return(-1); } const char * const near TAlgCollection::name = "TAlgCollection";