//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "scn.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TScen *Scen;
//---------------------------------------------------------------------------
__fastcall TScen::TScen(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TScen::Button1Click(TObject *Sender) // сохранение сценария радиозондирования
{
        FILE *f0;
        char ch[1024];
        int i, yn=0;
        for(i=0; i<ListBox1->Items->Count; i++)
        if(ListBox1->Items->Strings[i]==Edit0->Text) yn=1;
        if(yn==0)
        {
        ListBox1->Items->Add(Edit0->Text);
        ListBox1->ItemIndex=ListBox1->Items->Count-1;
        }
        else if(Application->MessageBox("Такой сценарий уже существует.\n Вы можете изменить название сценария для его сохранения\n для этого нажмите Отмена и измените название сценария.\n Если Вы действительно хотите его изменить, то нажмите OK.\n", "Подверждение изменения сценария", MB_OKCANCEL) == IDOK) yn=0;
        if(yn==0)
        {
        MainForm->YN=1;
        Mon->scn.fmin=StrToInt(Edit1->Text);
        Mon->scn.fmax=StrToInt(Edit2->Text);
        Mon->scn.flag_pd=RadioGroup1->ItemIndex;
        Mon->scn.q=StrToFloat(Edit3->Text);
        Mon->scn.df=StrToFloat(Edit4->Text);
        Mon->scn.nf=StrToInt(Edit5->Text);
        Mon->scn.flag_it=RadioGroup2->ItemIndex; // приоритет по количеству групп в импульсе - 0 или по длительности группы - 1
        Mon->scn.ng=StrToInt(Edit6->Text);
        Mon->scn.dt=StrToInt(Edit7->Text);
        Mon->Raschet_TabFreq(); // расчет действительного числа частот
        sprintf(ch,"%d",Mon->scn.nF); Edit10->Text=ch;
        if(Mon->scn.flag_it==0 && Mon->scn.dt>600/Mon->scn.ng-Mon->scn.pdt/500)
        {
        Mon->scn.dt=600/Mon->scn.ng-Mon->scn.pdt/500; // длительнось группы превосходит 600 мкс по их количеству
        sprintf(ch,"Длительность группы была изменена на %d мкс\n потому что инервал  полного радиоимпусьса превысил 600 мкс",Mon->scn.dt);
        Application->MessageBox(ch, "Изменение длительности группы", MB_OK);
        }
        if(Mon->scn.flag_it==1 && Mon->scn.ng>600/(Mon->scn.dt+Mon->scn.pdt/500))
        {
        Mon->scn.ng=600/(Mon->scn.dt+Mon->scn.pdt/500); // количество групп превосходит 600 мкс по их длительности
        sprintf(ch,"Количество групп было изменено на %d\n потому что инервал  полного радиоимпусьса превысил 600 мкс",Mon->scn.ng);
        Application->MessageBox(ch, "Изменение количества групп", MB_OK);
        }
        Mon->scn.pdt=StrToInt(Edit8->Text);
        Mon->scn.N_rep=StrToInt(Edit9->Text);
        sprintf(ch,"%d",Mon->scn.nF/Mon->scn.ng/Mon->scn.nf*Mon->scn.N_rep*Mon->scn.ti); Edit11->Text=ch;
        sprintf(ch,"..\\scenary\\%s.scn",Edit0->Text.c_str());
        Mon->scn.ti=StrToInt(Edit12->Text);
        f0=fopen(ch,"wb");
        fwrite(&Mon->scn,256,1,f0);
        fclose(f0);
        ReadScn();
        for(i=0; i<ListBox1->Items->Count; i++)
        if(ListBox1->Items->Strings[i]==Edit0->Text) ListBox1->ItemIndex=i;
        ListBox1Click(NULL);
        }
}
//---------------------------------------------------------------------------
void __fastcall TScen::FormCreate(TObject *Sender)
{
        int i;
        Scen->Top=Mon->Top;
        Scen->Left=Mon->Left+Mon->Width+8;
        ListBox2->ItemIndex=0;
        ReadScn();
        for(i=0; i<ListBox1->Items->Count; i++)
        if(ListBox1->Items->Strings[i]=="Основной сценарий")
        {
        ListBox1->ItemIndex=i;
        break;
        }
        ListBox1Click(NULL);
}
//---------------------------------------------------------------------------
void TScen::ReadScn(void)
{
        struct ffblk ff;
        int d, l;
        char ch[1024];
        ListBox1->Clear();
        d=findfirst("..\\scenary\\*.scn",&ff,0);
        Nscn=0;
        while(d==0)
        {
           sprintf(ch,"%s",ff.ff_name);
           l=strlen(ch);
           ch[l-4]=0;
           ListBox1->Items->Add(ch);
           d=findnext(&ff);
           Nscn++;
        }
}
//---------------------------------------------------------------------------
void __fastcall TScen::ListBox1Click(TObject *Sender)
{
        FILE *f0;
        char ch[1024];
        int i=ListBox1->ItemIndex, k, v;
        sprintf(ch,"..\\scenary\\%s.scn",ListBox1->Items->Strings[i].c_str());
        f0=fopen(ch,"rb");
        fread(&Mon->scn,256,1,f0);
        fclose(f0);
        Edit0->Text=ListBox1->Items->Strings[i];
        sprintf(ch,"%.0f",Mon->scn.fmin); Edit1->Text=ch;
        RadioGroup1->ItemIndex=Mon->scn.flag_pd;
        sprintf(ch,"%.1f",Mon->scn.q); Edit3->Text=ch;
        sprintf(ch,"%.1f",Mon->scn.df); Edit4->Text=ch;
        sprintf(ch,"%.0f",Mon->scn.fmax); Edit2->Text=ch;
        sprintf(ch,"%d",Mon->scn.nf); Edit5->Text=ch;
        RadioGroup2->ItemIndex=Mon->scn.flag_it; // приоритет по количеству групп в импульсе - 0 или по длительности группы - 1
        sprintf(ch,"%d",Mon->scn.ng); Edit6->Text=ch;
        sprintf(ch,"%d",Mon->scn.dt); Edit7->Text=ch;
        sprintf(ch,"%d",Mon->scn.pdt); Edit8->Text=ch;
        sprintf(ch,"%d",Mon->scn.N_rep); Edit9->Text=ch;
//        scn.nF=1000;
        Mon->Raschet_TabFreq();
        sprintf(ch,"%d",Mon->scn.nF); Edit10->Text=ch;
        sprintf(ch,"%d",Mon->scn.ti); Edit12->Text=ch;
        sprintf(ch,"%d",Mon->scn.nF/Mon->scn.ng/Mon->scn.nf*Mon->scn.N_rep*Mon->scn.ti); Edit11->Text=ch;
        ListBox2->Clear();
        k=Mon->scn.nF/Mon->scn.nf/Mon->scn.ng; // количество импульсов
//        for(v=0; v<k; v++) ListBox2->Items->Add(IntToStr((int)TabFreq[v]));
        for(v=0; v<k; v++) ListBox2->Items->Add(IntToStr(v+1));
        ListBox2->ItemIndex=0;
        Grafik();
}
//---------------------------------------------------------------------------
void __fastcall TScen::Button2Click(TObject *Sender)
{
        char ch[1024];
        sprintf(ch,"%s.scn",Edit0->Text.c_str());
        int i=ListBox1->ItemIndex;
        if(Application->MessageBox("Вы действительно хотите удалить этот сценарий?", "Подверждение удаления сценария", MB_OKCANCEL) == IDOK)
        {
        unlink(ch);
        ReadScn();
        if(i > ListBox1->Items->Count-1)  i = ListBox1->Items->Count-1;
        ListBox1->ItemIndex = i;
        ListBox1Click(NULL);
        }
}
//---------------------------------------------------------------------------
void __fastcall TScen::Button3Click(TObject *Sender)
{
        FILE *f0;
        int i;
        if(Application->MessageBox("Вы действительно хотите этот сценарий сделать основным?", "Подверждение основного сценария", MB_OKCANCEL) == IDOK)
        {
        MainForm->YN=1;
        f0=fopen("..\\scenary\\Основной сценарий.scn","wb");
        fwrite(&Mon->scn,256,1,f0);
        fclose(f0);
        for(i=0; i<ListBox1->Items->Count; i++)
        if(ListBox1->Items->Strings[i]=="Основной сценарий")
        {
        ListBox1->ItemIndex=i;
        break;
        }
        ListBox1Click(NULL);
        }
}
//---------------------------------------------------------------------------
void TScen::Grafik(void)
{
        FILE *f0;
        int i, j, k, k1, l, m, p, n=60000, jf;
        int v=ListBox2->ItemIndex;
        float amax=1.0/Mon->scn.nf, t, a, b;
        float pi2=atan(1.0)*8.0;
        int data[26];
        f0=fopen("afh.ini","rt");
        for(i=0; i<26; i++) fscanf(f0,"%d",&data[i]);
        fclose(f0);
        for(i=0; i<Mon->scn.pdt/10; i++) Mon->amp[i]=amax*(float)i/(float)Mon->scn.pdt*10.0;
        for(i=0; i<Mon->scn.dt*100; i++) Mon->amp[i+Mon->scn.pdt/10]=amax;
        for(i=0; i<Mon->scn.pdt/10; i++) Mon->amp[i+Mon->scn.pdt/10+Mon->scn.dt*100]=amax*(1.0-(float)i/(float)Mon->scn.pdt*10.0);
        k1=Mon->scn.nF/Mon->scn.nf;
        k=Mon->scn.nF/Mon->scn.nf/Mon->scn.ng; // количество импульсов

        i=0;
        for(j=0; j<Mon->scn.ng; j++)
        {
                t=0.0;
                for(m=0; m<Mon->scn.dt*100+Mon->scn.pdt/5; m++)
                {
                a=0;
                        l=j*k+v;
                        for(p=0; p<Mon->scn.nf; p++)
                        {
                                jf=(int)(Mon->TabFreq[l]/1000.0);
                                b=(float)data[jf];
                                a+=Mon->amp[m]*b*sin(Mon->TabFreq[l]*pi2*t);
                                l+=k1;
                        }
                Mon->Signal[i][0]=a;
                Mon->Signal[i][1]=1;
                t+=1.e-5;
                i++;
                }
        }
        for(j=i; j<Mon->scn.ti*100000; j++)
        {
                Mon->Signal[j][0]=0;
                Mon->Signal[j][1]=0;
        }
        Chart1->Series[0]->Clear();
        for(i=0; i<n; i++)
        Chart1->Series[0]->Add(Mon->Signal[i][0],"",clRed);
        for(i=0; i<n; i++)
        Chart1->Series[0]->XValue[i]=(float)i/100.0;
}
//---------------------------------------------------------------------------
void __fastcall TScen::ListBox2Click(TObject *Sender)
{
        Grafik();
}
//---------------------------------------------------------------------------


