int ProcessOptions::WriteFile(const char *filename, POVMSObjectPtr obj)
{
	struct INI_Parser_Table *table = parse_ini_table;
	OTextStream *ini_file;
	int err = kNoErr;

	if(!POV_ALLOW_FILE_WRITE(filename, POV_File_Text_INI))
		return kCannotOpenFileErr;

	ini_file = OpenFileForWrite(filename, obj);
	if(ini_file == NULL)
		return kCannotOpenFileErr;
	err = WriteFile (ini_file, obj);
	delete ini_file;

	return err;
}
void FileUtils::qsortfile(string m_fname1,char delimiter) 
{
   // TODO: Add your control notification handler code here
   char line[10240];
   Ref* refseq=NULL;

   if(m_fname1 == "")
   {
      cout<<"please input a file for sort!"<<endl;
      return;
   }


   int ret;
   int total = CountLines(m_fname1);

   ret = OpenFileForRead(m_fname1);
   if(!ret) return;
   ret = OpenFileForWrite(m_fname1);
   if(!ret) return;

   ret = AllocBuffer();
   if(!ret) return;
   ret = FirstRead();
   if(!ret) 
   {
      Release();
      return;
   }

   refseq = new Ref[50000];
   if(!refseq)
   {
      Release();
      return;
   }

   cout<<"Begin to process:"<<endl;
   int k = 0;
   int count = 0;
   while(k < total)
   {
      ret = GetLine(line,10240);

      string buffer = line;
      count = GetFieldsNum(buffer,delimiter);
   
      for(int j=0;j<count;j++)
      {
         string field = GetField(buffer,j+1,delimiter);

         strcpy(refseq[k].field[j],field.c_str());
      }

      cout<<"...";
      k++;
   }
   
   qsort(refseq,k,sizeof(Ref),cmp); 

   char line1[1024];
   line1[0] = '\0';

   //write the sorted resuts to file
   for(int j=0; j<k;j++)
   {
      strcpy(line1,"");
      for(int kk=0;kk<count-1;kk++)
      {
         strcat(line1,refseq[j].field[kk]);
         strcat(line1,"\t");
      }
      strcat(line1,refseq[j].field[count-1]);
      WriteLine(line1);
   }
   LastWrite();

   delete[] refseq;
   Release();   
}