//---------------------------------------------------------------------------
void TRsyncConfigAdapter::SaveConfig(){



    TStringList* lines = new TStringList();



    TModuleHolder* currentModule = GetModuleHolder(GLOBAL_MODULE);


    for(int i = 0; i < currentModule->nvp->Count; i++){
        lines->Add(currentModule->nvp->Strings[i]);
    }

    //Now get remaining modules
    for(int j = 0; j < modules->Count; j++){
        currentModule = (TModuleHolder*)modules->Items[j];
        if(currentModule->moduleName == GLOBAL_MODULE){
            continue;
        }

        lines->Add("[" + currentModule->moduleName + "]");
        for(int i = 0; i < currentModule->nvp->Count; i++){
            lines->Add(currentModule->nvp->Strings[i]);
        }
    }

    lines->SaveToFile(CONFIG_FILE);


    delete lines;
}
Exemple #2
0
//---------------------------------------------------------------------------
TStringList* StringToTok2( AnsiString Words,
  AnsiString Dlmtr1, AnsiString Dlmtr2 )
{
  AnsiString Work = Words.Trim();
  int spos;
  TStringList *Making = new TStringList;

  int spos1 = Work.AnsiPos(Dlmtr1);
  int spos2 = Work.AnsiPos(Dlmtr2);
  while (spos1 || spos2) {
 //   int spos = 0;
    if (!spos1 && spos2) spos = spos2;
    else if (!spos2 && spos1) spos = spos1;
    else spos = (spos1 < spos2) ? spos1 : spos2;
    Making->Add(Work.SubString( 1, spos-1));
    Work = Work.SubString( spos+1, Work.Length() - spos);
    Work = Work.Trim();
    spos1 = Work.AnsiPos(Dlmtr1);
    spos2 = Work.AnsiPos(Dlmtr2);
  } // while
  if (Work != "")
    Making->Add(Work);

  return Making;
}
Exemple #3
0
TStringList GetFileList(wxString folder, const wxString& mask, bool includeFullFolderPath)
{
	TStringList result;
	wxString FName;
	if (wxDir::Exists(folder) == false)
	{
		return result;
	}
	wxDir dir(folder);
	if (dir.GetFirst(&FName,mask,wxDIR_FILES))
	{
		do
		{
			if (includeFullFolderPath)
			{
				wxString FullFileName = IncludeTrailingPathDelimiter(folder) + FName;
				result.Add(FullFileName);
			}
			else
			{
				result.Add(FName);
			}
		} while(dir.GetNext(&FName));
	}
	return result;
}
Exemple #4
0
//---------------------------------------------------------------------------
/// Metoda odpowiada za wyci¹gniêcie oraz sparsowanie poszczególnych danych produktu
/// po czym przypisuje te dane do przekazanego obiektu.
void __fastcall ParsujDane::ZaladujDaneProduktu()
{

	AnsiString znacznikDaneProduktu, znacznikMarka, nazwaMarki, znacznikModel, nazwaModel, znacznikKod, kodProduktu,
				znacznikRodzUrz, rodzajUrzadzenia, znacznikKategoria, kategoria, dodUwagi, str;
	int index;
	TStringList *listaKat = new TStringList;
	try
	{
		listaKat->Add("Komputery");
		listaKat->Add("Fotografia");
		listaKat->Add("Telefony_i_akcesoria");
		listaKat->Sort();
		//----
		znacznikDaneProduktu = "keys : [";
		DaneProduktuText = ZnajdzDane(Text, znacznikDaneProduktu, ']');
		UsunZnacznik(DaneProduktuText, "'");
		//----                                                                    `
		znacznikKategoria = "Cat1:  \'";
		kategoria = ZnajdzDane(Text, znacznikKategoria, '\'');
        bool x = listaKat->Find(kategoria, index);

		if (!listaKat->Find(kategoria, index))
		{
			BladKategorii = true;
			ShowMessage("Proces parsowania tekstu nie powiód³ siê - brak parsera dla wybranej kategorii!");
			return;
		}
		//----
		znacznikMarka = "\"Producent: ";
		nazwaMarki = ZnajdzDane(DaneProduktuText, znacznikMarka, '\"');
		//----
		znacznikModel = "\"" + nazwaMarki;
		znacznikModel = znacznikModel.LowerCase();
		DaneProduktuText = DaneProduktuText.LowerCase();
		nazwaModel = ZnajdzDane(DaneProduktuText, znacznikModel, '\"');
		//----
		while (true)
		{
			DaneProduktuText.Delete(DaneProduktuText.Pos(","), 1);
			if (DaneProduktuText.IsEmpty()) break;
			str = ZnajdzDane(DaneProduktuText, '\"', '\"');
			if (str.Pos(":") == 0) continue;
			dodUwagi += str + ";";
		}
		//----
		znacznikKod = "productID: \'";
		kodProduktu = ZnajdzDane(Text, znacznikKod, '\'');
		//----
		znacznikRodzUrz = "catmin: \'";
		rodzajUrzadzenia = ZnajdzDane(Text, znacznikRodzUrz, '\'');
		// ----
		FProdukt->DodajDaneProduktu(nazwaMarki, nazwaModel, kodProduktu.ToInt(), rodzajUrzadzenia, dodUwagi);
	}
	catch(...) { if (listaKat != NULL) delete listaKat; listaKat = NULL; throw; }
	if (listaKat != NULL) delete listaKat;
	listaKat = NULL;
}
Exemple #5
0
//---------------------------------------------------------------------------
void __fastcall TMainForm::ConsumeProducts()
{
	TStringList * products = new TStringList();
	if (FInAppPurchase->IsProductPurchased(EuropeID)) {
		products->Add(EuropeID);
	}
	if (FInAppPurchase->IsProductPurchased(NoAdsID)) {
		products->Add(NoAdsID);
	}
	FInAppPurchase->ConsumeProducts(products);
	products->DisposeOf();
}
Exemple #6
0
void TIniFile::ReadSectionNames(const wxString &Section, TStringList &Strings)
{
	wxString N;
	wxString V;
	int I;

	// Assert( !! Strings , SStringsUnassignedError );
	Strings.BeginUpdate();
	try
	{
		Strings.Clear();
		if (FFileBuffer->Count() > 0)
		{
			I = GetSectionIndex(Section);
			if (I != -1)
			{
				++I;
				while ((I < FFileBuffer->Count()) && !IsSection
				  (FFileBuffer->Item(I)))
				{
					N = GetName(FFileBuffer->Item(I));
					if (N != EmptyStr)
					{
						Strings.Add(N);
					}
					++I;
				}
			}
		}
	} /* ? *//* FINALLY */
	catch (...)
	{
		Strings.EndUpdate();
	}
}
Exemple #7
0
void TIniFile::ReadSections(TStringList &Strings)
{
	long I;
	wxString Section;

	// Assert( !! Strings , SStringsUnassignedError );
	Strings.BeginUpdate();
	try
	{
		Strings.Clear();
		if (FFileBuffer->Count() > 0)
		{
			I = 0;
			while ((I < FFileBuffer->Count()))
			{
				if (IsSection(FFileBuffer->Item(I)))
				{
					Section = Trim(FFileBuffer->Item(I));
					Delete(Section, 0, 1);
					Delete(Section, Length(Section) - 1, 1);
					Strings.Add(Trim(Section));
				}
				++I;
			}
		}
	} /* ? *//* FINALLY */
	catch (...)
	{
		Strings.EndUpdate();
	}
}
Exemple #8
0
//---------------------------------------------------------------------------
TStringList* StringToTokiens( AnsiString Words, AnsiString Dlmtr )
{
  AnsiString Work = Words.Trim();
  int spos;
  TStringList *Making = new TStringList;

  while ((spos = Work.AnsiPos(Dlmtr)) != 0) {
    Making->Add(Work.SubString( 1, spos-1));
    Work = Work.SubString( spos+1, Work.Length() - spos);
    Work = Work.Trim();
  } // while
  if (Work != "")
    Making->Add(Work);

  return Making;
}
Exemple #9
0
TStringList * Defines::GetList(String key)
{
        int indexS = -1, indexF = -1;
        for (int i=0; i<l->Count; i++)
        {
                switch(indexS)
                {
                case -1:
                        if (l->Strings[i]==String("@")+key)
                                indexS = i;
                        break;
                default:
                        if (l->Strings[i]==String("/")+key)
                        {
                                indexF = i;
                                i = l->Count;
                        }
                        break;
                }
        }
        if (indexS !=-1 && indexF!=-1)
        {
                TStringList * out = new TStringList();
                for (int i=0; i<(indexF-indexS-1); i++)
                        out->Add(l->Strings[indexS+1+i]);
                return out;
        }
        else
                return 0;
}
Exemple #10
0
//---------------------------------------------------------------------------
void TfrmMain::apply(::Move& move)
{
	TStringsEnumerator *e = move.getEffects()->GetEnumerator();
	while(e->MoveNext())
	{
		if(e->Current[1] == '!')
		{
			Memo5->Lines->Delete(Memo5->Lines->IndexOf(e->Current.SubString(2,e->Current.Length())) );
		}
		else //add something
		{
			Memo5->Lines->Add(e->Current);        	
		}
	}
	TStringList *tmpState = new TStringList(); 
	TStringsEnumerator *eM = Memo5->Lines->GetEnumerator();
	while(eM->MoveNext())
	{
     	tmpState->Add(eM->Current);
	}
	Memo5->Clear();
	tmpState->Sort();
	Memo5->Lines->AddStrings(tmpState);
	tmpState->Free();
	eM->Free();
}
//---------------------------------------------------------------------------
void TRsyncConfigAdapter::SetParamValue(AnsiString moduleName, AnsiString paramName, AnsiString paramValue){
    TModuleHolder* aHolder = GetModuleHolder(moduleName);

    if(aHolder == NULL){
        return; //"Invalid module name";
    }


    TStringList* params = aHolder->nvp;

	bool newModule = true;
    for(int i = 0; i < params->Count; i++){
        AnsiString oneLine = params->Strings[i];
        AnsiString sName, sValue;

        if(ParseNameValue(oneLine, sName, sValue)){
            if(sName == paramName){
				params->Strings[i] = "    " + paramName + " = " + paramValue;
				newModule = false;
                break;
            }
        }

	}

	if(newModule){
		params->Add("    " + paramName + " = " + paramValue);
	}

}
void __fastcall TfrmMain::WMDropFiles(TWMDropFiles& Message)
{
  int Count = DragQueryFile(reinterpret_cast<void*>(Message.Drop), 0xFFFFFFFF, NULL, 0);
  try
  {
    char FileBuf[MAX_PATH+1];
    if (Count > 0)
    {
      TStringList* FileList = new TStringList();
      try
      {
        for (int i = 0; i < Count; i++)
        {
          DragQueryFile(reinterpret_cast<void*>(Message.Drop), i, FileBuf, sizeof(FileBuf));
          FileList->Add(FileBuf);
        }
        FileList->Sort();
        reSource->Lines->BeginUpdate();
        try
        {
          reSource->Lines->Clear();
          for (int i = 0; i < FileList->Count; i++)
            reSource->Lines->Add(StringFromFile(FileList->Strings[i]));
        }
        __finally
        {
          reSource->Lines->EndUpdate();
        }
      }
      __finally
      {
        delete FileList;
      }
    }
  } __finally {
TStringList* __fastcall TYoutubeGrabFormBase::PrepareLinks()
{
	TStringList* result = NULL;
	try {
		//Check categories
		try {
			this->UploadProperties->CheckCategories();
		} catch (UnicodeString msg) {
        	this->UploadProperties->GetCategoryControl()->SetFocus();
			throw msg;
		}

		//Remove empty lines and trim
		UnicodeString link;
		int pos = 0;
		for (int i = 0; i < this->memLinks->Lines->Count; i++) {
			link = this->memLinks->Lines->Strings[i].Trim();
			if (link.IsEmpty()) {
				this->memLinks->Lines->Delete(i);
				i--; continue;
			}
			this->memLinks->Lines->Strings[i] = link;
		}
		//Check if no links
		if (this->memLinks->Lines->Count == 0) {
			this->memLinks->SetFocus();
			throw UnicodeString(L"Please provide YouTube links.");
		}

		//Extract IDs
		UnicodeString id;
		result = new TStringList;
		for (int i = 0; i < this->memLinks->Lines->Count; i++) {
			link = this->memLinks->Lines->Strings[i];

			id = YT_ExpractID(link);
			if (id.IsEmpty()) {
				UnicodeString msg = L"Invalid YouTube link \"" \
				+ link + L"\".\r\n" \
				+ L"No YouTube video ID found.";

				this->memLinks->SetFocus();
				this->memLinks->SelStart = pos;
				this->memLinks->SelLength = memLinks->Lines->Strings[i].Length();
				throw msg;
			}
			result->Add(id);

			pos += link.Length()+2;
		}
	}
	catch (UnicodeString msg) {
		Framework->ShowErrorMessage(msg, this->Caption, true);
		delete result;
		return NULL;
	}

	return result;
}
Exemple #14
0
void __fastcall TfMain::FormClose(TObject *Sender, TCloseAction &Action)
{
	TFile f;
	TStringList* sl = new(TStringList);

	for(int i = 0; i < lvLib->Items->Count; i++)
		sl->Add(lvLib->Items->Item[i]->SubItems->Strings[0] + '=' +
			lvLib->Items->Item[i]->SubItems->Strings[1] + '/' +
			lvLib->Items->Item[i]->SubItems->Strings[2]);

	sl->SaveToFile(ExtractFileDir(Application->ExeName) + "\\Library.lb");
	sl->Clear();

	sl->Add("Login="******"Pass="******"Pass="******"RememberPass=1");
	else
		sl->Add("RememberPass=0");
	sl->Add("Server=" + leServer->Text);

	sl->SaveToFile(ExtractFileDir(Application->ExeName) + "\\Settings.ini");

	sl->~TStringList();
}
Exemple #15
0
Debug::~Debug()
{
   if(ntimes==0) return;
   if(!debug_on_exit) return;

   TStringList *L = new TStringList;

   double elapsed = 1000.0*((double)accumulated_counter.LowPart)/((double)FrequencyCounter.LowPart);
   double average_elapsed = elapsed / (double) ntimes;

   L->Add("Number of times called:"+AnsiString(ntimes));
   L->Add("Elapsed time msec:"+AnsiString(elapsed));
   L->Add("Average elapsed time msec:"+AnsiString(average_elapsed));

   L->SaveToFile("c:\\debug.txt");

   delete L;
}
void __fastcall TForm1::FileSaveAs1Accept(TObject *Sender)
{
String a = FileSaveAs1->Dialog->FileName;
if (a!=""){
// Speichern
if (ExtractFileExt(a).UpperCase()!=".AD")a=a.SubString(1,a.Length()-ExtractFileExt(a).Length())+".ad";
TStringList *List = new TStringList();
List->Add(IntToStr(Max));
List->Add(Edit1->Text);
for (int i=0;i<Max;i++){
List->Add(ListBox1->Items->Strings[i]);
for (int b=0;b<66;b++){
List->Add(IntToStr(Data[i][b]));
}
}
List->SaveToFile(a);
}
}
//---------------------------------------------------------------------------
TStringList * __fastcall TForm1::Parse(AnsiString str ,AnsiString delimeter)
{
        TStringList *list = new TStringList ;
	int pos = str.Pos(delimeter);
        if(pos<=0)
        {
		list->Add(str);//no delimeter so only this
                return list ;
        }
        while(pos >0)
        {
		AnsiString unit = str.SubString(1,pos-1);
                str = str.SubString(pos+1,str.Length()-pos);
                list->Add(unit);
                pos =  str.Pos(delimeter);

        }
        return list ;
}
Exemple #18
0
bool Defines::AddToList(String key, String data)
{
        TStringList *s = GetList(key);
        if (s==0)
                return 0;
        s->Add(data);
        SetList(key,s);
        delete s;
        return 1;
}
void __fastcall TfrmMain::btn_item_saveClick(TObject *Sender)
{
	TStringList *list = new TStringList();
	for (int i = 0; i < list_filter->Count; i++)
	{
		list->Add((int)list_filter->Items->Objects[i]);
	}
	list->SaveToFile(String(LoginerPath) +"\\Data\\"+ GameAccount + "\\Items.dat");
	delete list;
}
Exemple #20
0
//---------------------------------------------------------------------------
int CTerminalRobotTyper::SendBonusKeys(){
	int keysCount =0;
	//设置并刷新终端监控信息
	Bonus *currentBonus =(Bonus *)terminal->currentRequest;
    TStringList *line =new TStringList();
	line->Add(IntToStr(currentBonus->id));
	line->Add(currentBonus->seq);
	line->Add(FloatToStr(currentBonus->bonus/100));
	terminal->panel->topLineContent =line;
	Synchronize(&terminal->panel->FillTopLineContent);
	delete line;
	//发送序列码按键
	keysCount +=terminal->box->TypeInnerString(terminal->xmlConfig->Keyboard->BobusPrefix);		//兑奖按键前缀
	//调用动态库函数,生成打印号码的按键序列,不包括最后的确认!
	char keys[256] ={0};
	terminal->GeneralBonusKeyStr(currentBonus->seq, keys);
	keysCount +=terminal->box->TypeInnerString(AnsiString(keys));
	keysCount +=terminal->box->TypeInnerString(terminal->xmlConfig->Keyboard->BobusPostfix);	//兑奖按键后缀,体彩是F1打印兑奖回执
	return keysCount;
}
Exemple #21
0
BOOST_FIXTURE_TEST_CASE(test4, base_fixture_t)
{
  if (1)
  {
    TStringList strings;
    strings.SetOnChange(MAKE_CALLBACK(base_fixture_t::onStringListChange, this));
    strings.Add(L"line 1");
    // BOOST_CHECK_EQUAL(true, OnChangeNotifyEventTriggered);
    BOOST_CHECK_EQUAL(true, onStringListChangeTriggered);
  }
}
Exemple #22
0
String TPropertyHandler::GetClassNamesValues(TComponent* comp, String prName)
{
	TObject *subObj = (TObject *)GetOrdProp(comp, prName);
	if (subObj == NULL) return ""; // In case the prop-value is empty (like Action).

/*  TObject* subObj is needed to find out if the subprop points to
	another Component (like ActiveControl).
	If it is only the value of that property is returned (ie.: "CheckBox1").
	If it is a class like Font all of the props+values of
	comp->Font are returned. */

	if (dynamic_cast<TComponent*>(subObj))
	{   // Find out if subObj points to another Component by casting.
		return prName + "=" + GetValue((TComponent*)subObj,"Name");
	}

/*  subObj does not point to another Component, but we can convert
	it to a TComponent* subComp so it can be used te get the subProps+values.
	This sounds weird but don't forget that a TFont encapsulated in a TForm
	becomes a descendant of TForm, which is a descendant of TComponent!! */

	TComponent* subComp = (TComponent*)subObj;

	TStringList *tempList = new TStringList;
	String temp;
	try
	{
		PTypeInfo TypeInfo = (PTypeInfo)subComp->ClassInfo();
		PPropInfo* PropList = new TPropList;
		GetPropInfos(TypeInfo, (PPropList)PropList);

		tempList->Sorted = true;
		for (int i=0; i < PropertyCount(subComp); i++)
		{
			String subProp = String(PropList[i]->Name);
			tempList->Add(
				prName + "." + subProp
				+ "=" + GetPropValue(subComp, subProp, true) );
		}

		delete[] PropList;

		temp = tempList->Text;
		// Remove trailing carriage-returns:
		int cr = temp.LastDelimiter("\r");
		if (cr) temp.Delete(cr, 2);
	}
	__finally
	{
		delete tempList;
	}

	return temp;
}
Exemple #23
0
void TGlFm::getAllUsersId(TStringList &list)
{
    FDQuery_send_mes->SQL->Text = "SELECT id FROM TBL_USER";
	FDQuery_send_mes->Open();
	int usersCount = FDQuery_send_mes->RecordCount;
	for (int k = 0; k < usersCount; k++)
		{
			list.Add(FDQuery_send_mes->FieldByName("id")->AsString);
			FDQuery_send_mes->Next();
		}
	FDQuery_send_mes->Close();
}
Exemple #24
0
TStringList GetListBoxItems(wxListBox *lb)
{
	TStringList Result;
	if (lb->GetCount() > 0)
	{
		for (size_t i = 0; i < lb->GetCount(); i++)
		{
			Result.Add(lb->GetString(i));
		}
	}
	return Result;
}
Exemple #25
0
void __fastcall TMainForm::N2Click(TObject *Sender) {
	TStringList *savetable = new TStringList;

	if (Save->Execute()) {
		for (int i = 0; i < Grid1->RowCount; i++) {
			savetable->Add(Grid1->Rows[i]->DelimitedText);
		}
		savetable->SaveToFile(Save->FileName + ".tx1");
		Console->Lines->Add("Сохранен файл " + Save->FileName);
		delete savetable;
	}
}
Exemple #26
0
BOOST_FIXTURE_TEST_CASE(test7, base_fixture_t)
{
  TStringList Lines;
  Lines.SetSorted(true);
  if (1)
  {
    Lines.SetDuplicates(dupAccept);
    Lines.Add(L"aaa");
    Lines.Add(L"aaa");
    Lines.Add(L"bbb");
    BOOST_CHECK(3 == Lines.GetCount());
    BOOST_CHECK(0 == Lines.IndexOf(L"aaa"));
    BOOST_CHECK(2 == Lines.IndexOf(L"bbb"));
  }
  Lines.Clear();
  if (1)
  {
    Lines.SetDuplicates(dupIgnore);
    Lines.Add(L"aaa");
    Lines.Add(L"aaa");
    Lines.Add(L"bbb");
    BOOST_CHECK(2 == Lines.GetCount());
    BOOST_CHECK(1 == Lines.IndexOf(L"bbb"));
  }
  Lines.Clear();
  if (1)
  {
    Lines.SetDuplicates(dupError);
    Lines.Add(L"aaa");
    Lines.Add(L"bbb");
    BOOST_CHECK_THROW(Lines.Add(L"aaa"), std::exception);
  }
}
Exemple #27
0
TStringList GetFolderList(wxString baseFolder, bool includeFullFolderPath)
{
  TStringList result;
	wxString FName;
		wxDir dir(baseFolder);
	if (dir.GetFirst(&FName,wxEmptyString,wxDIR_DIRS))
	{
		do
		{
			if (includeFullFolderPath)
			{
				wxString FullDirName = IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(baseFolder) + FName);
				result.Add(FullDirName);
			}
			else
			{
				result.Add(FName);
      }
		} while(dir.GetNext(&FName));
	}
	return result;
}
Exemple #28
0
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(Edit1->Text ==""){
	ShowMessage("Silahkan isi Nama Pengguna");
	return;
}
if(Edit2->Text ==""){
	ShowMessage("Silahkan isi Kata Sandi");
	return;
}
bool ada2 = false;
for(int i=0;i<Edit2->Text.Length();i++){
	if(Edit2->Text.SubString(i,1)==" "){
		ada2 = true;
	}
}
if(ada2 == true){
	ShowMessage("Space not allowed");
	Edit2->SetFocus();
	return;
}
TStringStream * kirim = new TStringStream();
TStringList * lst = new TStringList();
lst->Add("nama="+Edit1->Text);
TStringStream * terima = new TStringStream();
TStringStream * terima2 = new TStringStream();
PMasuk->Post("URL/to/check2.php",lst,terima);
String hasil = terima->DataString;
PMasuk->Disconnect();
lst->Add("pass="******"daftar"){
	PMasuk->Post("URL/to/daftar.php",lst,terima2);
	Form2->Label1->Text = "Tulis sesuatu, "+Edit1->Text;
	Form2->Show();
	ShowMessage("Selamat datang, "+Edit1->Text);
}else if(hasil=="masuk"){
	ShowMessage("Nama Pengguna kamu sudah terdaftar, silahkan masuk untuk melanjutkan");
}
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TStringList *List = new TStringList();
List->Add(Edit1->Text+"_Anz: .db "+IntToStr(Max)+",0");
List->Add(Edit1->Text+":");

for (int i=0;i<Max;i++){
String a = ".db ";
for (int b=0;b<64;b++){
if (b%8==0){
a=a+"0b";
}
a=a+IntToStr(Data[i][-1+(((int) b/8)+1)*8-b%8]);
if (b%8==7){
a=a+",";
}
}
a = a+IntToStr(Data[i][64])+","+IntToStr(Data[i][65]);
List->Add(a);
}
List->SaveToFile(ExtractFilePath(Application->ExeName)+Edit1->Text+".asm");
}
Exemple #30
0
//---------------------------------------------------------------------------
void __fastcall TOptDialog::ReadAntList(void)
{
	AnsiString AntPcvFile_Text=AntPcvFile->Text;
	TStringList *list;
	pcvs_t pcvs={0};
	char *p;
	
	if (!readpcv(AntPcvFile_Text.c_str(),&pcvs)) return;
	
	list=new TStringList;
	list->Add("");
	list->Add("*");
	
	for (int i=0;i<pcvs.n;i++) {
		if (pcvs.pcv[i].sat) continue;
		if ((p=strchr(pcvs.pcv[i].type,' '))) *p='\0';
		if (i>0&&!strcmp(pcvs.pcv[i].type,pcvs.pcv[i-1].type)) continue;
		list->Add(pcvs.pcv[i].type);
	}
	RovAnt->Items=list;
	RefAnt->Items=list;
	
	free(pcvs.pcv);
}