示例#1
0
nsresult
StorageCache::GetKey(const Storage* aStorage, uint32_t aIndex,
                     nsAString& aRetval)
{
  // XXX: This does a linear search for the key at index, which would
  // suck if there's a large numer of indexes. Do we care? If so,
  // maybe we need to have a lazily populated key array here or
  // something?
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETKEY_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      return mLoadResult;
    }
  }

  aRetval.SetIsVoid(true);
  for (auto iter = DataSet(aStorage).mKeys.Iter(); !iter.Done(); iter.Next()) {
    if (aIndex == 0) {
      aRetval = iter.Key();
      break;
    }
    aIndex--;
  }

  return NS_OK;
}
示例#2
0
nsresult
StorageCache::RemoveItem(const Storage* aStorage, const nsAString& aKey,
                         nsString& aOld, const MutationSource aSource)
{
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_REMOVEKEY_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      return mLoadResult;
    }
  }

  Data& data = DataSet(aStorage);
  if (!data.mKeys.Get(aKey, &aOld)) {
    SetDOMStringToNull(aOld);
    return NS_SUCCESS_DOM_NO_OPERATION;
  }

  // Recalculate the cached data size
  const int64_t delta = -(static_cast<int64_t>(aOld.Length()) +
                          static_cast<int64_t>(aKey.Length()));
  Unused << ProcessUsageDelta(aStorage, delta, aSource);
  data.mKeys.Remove(aKey);

  if (aSource == ContentMutation && Persist(aStorage)) {
    if (!sDatabase) {
      NS_ERROR("Writing to localStorage after the database has been shut down"
               ", data lose!");
      return NS_ERROR_NOT_INITIALIZED;
    }

    return sDatabase->AsyncRemoveItem(this, aKey);
  }

  return NS_OK;
}
示例#3
0
文件: pmenu.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
PegMenuButton::PegMenuButton(PegMenuDescription *pDesc) :
    PegThing(pDesc->wId, pDesc->wStyle),
    PegTextThing(pDesc->wStyle, PEG_MENU_FONT)
{
    mReal.Set(0, 0, 100, 18);
    mClient.Set(0, 0, 100, 18);
    Type(TYPE_MENU_BUTTON);
    muColors[PCI_NORMAL] = PCLR_BUTTON_FACE;

    DataSet(pDesc->pText);
    mpOwner = NULL;

    if (pDesc->pSubMenu)
    {
        mpSubMenu = new PegMenu(pDesc->pSubMenu);
    }
    else
    {
        mpSubMenu = NULL;

        if (pDesc->wStyle & BF_DOTABLE)
        {
            SetSignals(SIGMASK(PSF_DOT_ON));
        }
        else
        {
            if (pDesc->wStyle & BF_CHECKABLE)
            {
                SetSignals(SIGMASK(PSF_CHECK_ON)|SIGMASK(PSF_CHECK_OFF));
            }
            else
            {
                if (pDesc->wStyle & AF_ENABLED)
                {
                    SetSignals(SIGMASK(PSF_CLICKED));
                }
                else
                {
                    RemoveStatus(PSF_SELECTABLE);
                }
            }
        }
    }
    AddStatus(PSF_SIZEABLE | PSF_NONCLIENT);
    RemoveStatus(PSF_ACCEPTS_FOCUS);

    muColors[PCI_NORMAL] = PCLR_BUTTON_FACE;
    muColors[PCI_SELECTED] = PCLR_ACTIVE_TITLE;
    muColors[PCI_NTEXT] = PCLR_NORMAL_TEXT;
    muColors[PCI_STEXT] = PCLR_HIGH_TEXT;

    mbPointerOver = FALSE;
    mbSubVisible = FALSE;
}
nsresult
LocalStorageCache::SetItem(const LocalStorage* aStorage, const nsAString& aKey,
                           const nsString& aValue, nsString& aOld,
                           const MutationSource aSource)
{
  // Size of the cache that will change after this action.
  int64_t delta = 0;

  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_SETVALUE_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      return mLoadResult;
    }
  }

  Data& data = DataSet(aStorage);
  if (!data.mKeys.Get(aKey, &aOld)) {
    SetDOMStringToNull(aOld);

    // We only consider key size if the key doesn't exist before.
    delta += static_cast<int64_t>(aKey.Length());
  }

  delta += static_cast<int64_t>(aValue.Length()) -
           static_cast<int64_t>(aOld.Length());

  if (!ProcessUsageDelta(aStorage, delta, aSource)) {
    return NS_ERROR_DOM_QUOTA_REACHED;
  }

  if (aValue == aOld && DOMStringIsNull(aValue) == DOMStringIsNull(aOld)) {
    return NS_SUCCESS_DOM_NO_OPERATION;
  }

  data.mKeys.Put(aKey, aValue);

  if (aSource == ContentMutation && Persist(aStorage)) {
    if (!sDatabase) {
      NS_ERROR("Writing to localStorage after the database has been shut down"
               ", data lose!");
      return NS_ERROR_NOT_INITIALIZED;
    }

    if (DOMStringIsNull(aOld)) {
      return sDatabase->AsyncAddItem(this, aKey, aValue);
    }

    return sDatabase->AsyncUpdateItem(this, aKey, aValue);
  }

  return NS_OK;
}
示例#5
0
void
DOMStorageCache::GetKeys(const DOMStorage* aStorage, nsTArray<nsString>& aKeys)
{
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETALLKEYS_BLOCKING_MS);
  }

  if (NS_FAILED(mLoadResult)) {
    return;
  }

  DataSet(aStorage).mKeys.EnumerateRead(KeysArrayBuilder, &aKeys);
}
示例#6
0
nsresult
DOMStorageCache::GetLength(const DOMStorage* aStorage, uint32_t* aRetval)
{
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETLENGTH_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      return mLoadResult;
    }
  }

  *aRetval = DataSet(aStorage).mKeys.Count();
  return NS_OK;
}
示例#7
0
void
DOMStorageCache::GetKeys(const DOMStorage* aStorage, nsTArray<nsString>& aKeys)
{
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETALLKEYS_BLOCKING_MS);
  }

  if (NS_FAILED(mLoadResult)) {
    return;
  }

  for (auto iter = DataSet(aStorage).mKeys.Iter(); !iter.Done(); iter.Next()) {
    aKeys.AppendElement(iter.Key());
  }
}
示例#8
0
nsTArray<nsString>*
DOMStorageCache::GetKeys(const DOMStorage* aStorage)
{
  Telemetry::AutoTimer<Telemetry::LOCALDOMSTORAGE_GETALLKEYS_MS> autoTimer;

  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETALLKEYS_BLOCKING_MS);
  }

  nsTArray<nsString>* result = new nsTArray<nsString>();
  if (NS_SUCCEEDED(mLoadResult)) {
    DataSet(aStorage).mKeys.EnumerateRead(KeysArrayBuilder, result);
  }

  return result;
}
示例#9
0
DataSet DataSet::readTADMDataSet(istream &iss)
{
	string line;
	ContextVector contexts;
	
	while (iss)
	{
		// Would really like to avoid reading the context here,
		// so try to detect EOF.
		if (iss.peek() == EOF)
			break;

		contexts.push_back(readContext(iss));
	}
	
	return DataSet(contexts);
}
nsresult
DOMStorageCache::SetItem(const DOMStorage* aStorage, const nsAString& aKey,
                         const nsString& aValue, nsString& aOld)
{
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_SETVALUE_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      return mLoadResult;
    }
  }

  Data& data = DataSet(aStorage);
  if (!data.mKeys.Get(aKey, &aOld)) {
    SetDOMStringToNull(aOld);
  }

  // Check the quota first
  const int64_t delta = static_cast<int64_t>(aValue.Length()) -
                        static_cast<int64_t>(aOld.Length());
  if (!ProcessUsageDelta(aStorage, delta)) {
    return NS_ERROR_DOM_QUOTA_REACHED;
  }

  if (aValue == aOld && DOMStringIsNull(aValue) == DOMStringIsNull(aOld)) {
    return NS_SUCCESS_DOM_NO_OPERATION;
  }

  data.mKeys.Put(aKey, aValue);

  if (Persist(aStorage)) {
    if (!sDatabase) {
      NS_ERROR("Writing to localStorage after the database has been shut down"
               ", data lose!");
      return NS_ERROR_NOT_INITIALIZED;
    }

    if (DOMStringIsNull(aOld)) {
      return sDatabase->AsyncAddItem(this, aKey, aValue);
    }

    return sDatabase->AsyncUpdateItem(this, aKey, aValue);
  }

  return NS_OK;
}
示例#11
0
nsresult
DOMStorageCache::GetKey(const DOMStorage* aStorage, uint32_t aIndex, nsAString& aRetval)
{
  // XXX: This does a linear search for the key at index, which would
  // suck if there's a large numer of indexes. Do we care? If so,
  // maybe we need to have a lazily populated key array here or
  // something?
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETKEY_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      return mLoadResult;
    }
  }

  IndexFinderData data(aIndex, aRetval);
  DataSet(aStorage).mKeys.EnumerateRead(FindKeyOrder, &data);
  return NS_OK;
}
示例#12
0
nsresult
DOMStorageCache::GetItem(const DOMStorage* aStorage, const nsAString& aKey,
                         nsAString& aRetval)
{
  if (Persist(aStorage)) {
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETVALUE_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      return mLoadResult;
    }
  }

  // not using AutoString since we don't want to copy buffer to result
  nsString value;
  if (!DataSet(aStorage).mKeys.Get(aKey, &value)) {
    SetDOMStringToNull(value);
  }

  aRetval = value;

  return NS_OK;
}
nsresult
LocalStorageCache::Clear(const LocalStorage* aStorage,
                         const MutationSource aSource)
{
  bool refresh = false;
  if (Persist(aStorage)) {
    // We need to preload all data (know the size) before we can proceeed
    // to correctly decrease cached usage number.
    // XXX as in case of unload, this is not technically needed now, but
    // after super-scope quota introduction we have to do this.  Get telemetry
    // right now.
    WaitForPreload(Telemetry::LOCALDOMSTORAGE_CLEAR_BLOCKING_MS);
    if (NS_FAILED(mLoadResult)) {
      // When we failed to load data from the database, force delete of the
      // scope data and make use of the storage possible again.
      refresh = true;
      mLoadResult = NS_OK;
    }
  }

  Data& data = DataSet(aStorage);
  bool hadData = !!data.mKeys.Count();

  if (hadData) {
    Unused << ProcessUsageDelta(aStorage, -data.mOriginQuotaUsage, aSource);
    data.mKeys.Clear();
  }

  if (aSource == ContentMutation && Persist(aStorage) && (refresh || hadData)) {
    if (!sDatabase) {
      NS_ERROR("Writing to localStorage after the database has been shut down"
               ", data lose!");
      return NS_ERROR_NOT_INITIALIZED;
    }

    return sDatabase->AsyncClear(this);
  }

  return hadData ? NS_OK : NS_SUCCESS_DOM_NO_OPERATION;
}
示例#14
0
int main(int argc, char *argv[])
{
    srand (time(NULL));

	//kepek egyszeges meretenek beallitasa
    int size = 25;

	//a halo retegeinek es ezek mereteinek beallitasa
	std::vector<int> array2(2);
    array2[0] = size*size;
    array2[1] = 43;

	//az adatok betoltese
    DataSet d = DataSet();
    QString path = "../../TestLearning";
    d.LoadData(size,path);

    std::cout<< "Learning started" <<std::endl;
	//a halo letrehozasa
    Network net(array2);
	//tanulas megkezdese
    net.SGD(d,300,30,3,d);
    std::cout<< "Learning finished" <<std::endl;
}
示例#15
0
/*--------------------------------------------------------------------------*/
void PegTextBox::RewindDataSet(const PEGCHAR *Text)
{
    miTopLine = 0;
    DataSet(Text);
}
示例#16
0
//----------------------------------------------------------------------
static void TouchArg(op_t &x,int isAlt,int isload) {

  switch ( x.type ) {

    case o_phrase:
           //Добавляем в список ошибок(выводим сообщение)
           //ошибку и адресс где это случилось
           //QueueMark(Q_jumps, cmd.ea);
    case o_void:
    case o_reg:

      break;


    case o_sr:
    case o_displ:
       //Установить для данного байта признак immedia
      doImmd(cmd.ea);
      //Получить флаг для указанного линейного адресса
      if ( !isAlt ) {
        uint32 offb;
        ushort addr = ushort(x.addr);
        if ( x.type == o_displ  ) {
          addr += (ushort)cmd.ip;
          addr += cmd.size;
          //Получить линейный адресс
          offb = (uint32)toEA(codeSeg(addr,x.n), 0);
          DataSet(x, offb+addr, isload);
        } else if ( isOff(uFlag, x.n) ) {
reref:
          ua_add_off_drefs2(x, dr_O, x.type == o_displ ? OOF_ADDR : 0);
          if ( x.type == o_displ )
            //Преобразовать данные по указанному линейному адрессу в указанный тип
            ua_dodata2(x.offb, calc_target(cmd.ea+x.offb, cmd.ea, x.n, x.addr), x.dtyp);
        } else if ( x.type == o_displ && !x.reg && !isDefArg(uFlag, x.n ) &&
                 set_offset(cmd.ea, x.n, toEA(cmd.cs,0))) goto reref;
      }
      break;

   case o_stk:
   case o_imm:
       {
         //Установить для данного байта признак immedia
         doImmd(cmd.ea);
         if ( isOff(get_flags_novalue(cmd.ea), x.n) )
           ua_add_off_drefs2(x, dr_O, 0);
       }
       break;


   case o_ab:
       {
            if ( x.TypeOper == TAB_INDIRECTED_ABS_X )
            {
               ea_t ea = toEA(cmd.cs, x.addr);
               ua_dodata2(x.offb, ea, dt_word);
               //добавить крос референсы для текущей инструкции
               ua_add_dref(x.offb, ea, isload ? dr_R : dr_W);

               //получить данные
               uint32 Addr;
               Addr = get_word(ea);
               Addr = uint32( Addr | (getPG<<16));
               //добавить крос референсы для текущей инструкции
               ua_add_cref(2, Addr, fl_JF);
             }
            else
               DataSet(x, toEA(codeSeg(x.addr,x.n), x.addr), isload);
       }
       break;

   case o_mem:
   {
       // Конвертирование в данные(указан адресс) по указанному типу,
       //добавить крос референсы для текущей инструкции
     switch ( x.TypeOper )
     {
       case TDIR_DIR_Y:
       case TDIR_DIR_X:
       case TDIR_DIR:
       case TDIR_INDIRECT_DIR:
       case TDIR_INDIRECT_DIR_X:
       case TDIR_INDIRECT_DIR_Y:
       case TDIR_L_INDIRECT_DIR:
       case TDIR_L_INDIRECT_DIR_Y:
        {
          if ( getDPReg == 1 )
          {
             uint32 d = x.addr & 0xC;
             x.addr &= 0xFF3F;
             DataSet(x, toEA(codeSeg(x.addr,x.n), x.addr), isload);
             x.addr |=d;
          }
          else
             DataSet(x, toEA(codeSeg(x.addr,x.n), x.addr), isload);

        }
        break;

       default:
          DataSet(x, toEA(codeSeg(x.addr,x.n), x.addr), isload);

      }//end switch
   }
      break;


    case o_near:
      {
        //Получить линейный адресс
        ea_t ea = toEA(cmd.cs, x.addr);

        switch ( cmd.itype )
        {

           case m7900_jsr:
                {
                   //добавить крос референсы для текущей инструкции
                   ua_add_cref(x.offb, ea, fl_CN );
                   if ( !func_does_return(ea) )
                      flow = false;
                }
               break;

           case m7900_jsrl:
                 //добавить крос референсы для текущей инструкции
                 ua_add_cref(x.offb, ea, fl_CF);
                 if ( !func_does_return(ea) )
                   flow = false;
               break;

           case m7900_jmpl:
                 //добавить крос референсы для текущей инструкции
                 ua_add_cref(x.offb, ea, fl_JF);
               break;


            default:
                   ua_add_cref(x.offb, ea, fl_JN);
                break;
        }
      }
      break;

    default:
//      warning("%a: %s,%d: bad optype %d", cmd.ea, cmd.get_canon_mnem(), x.n, x.type);
      break;
  }
}
void WaveformAnalysisExample(string cUserFileName, string cUserSignalType="-"){
	gROOT->ProcessLine(".x BuildFastFrameLibrary.cpp");
	// get data
	TFastFrame DataSet(cUserFileName);
	cout << DataSet.GetFrameCount() << " frames in data set" << endl;
	// define analysis result storage
	std::vector<Double_t> fSigWidths; // vector for signal widths
	fSigWidths.reserve(DataSet.GetFrameCount());
	std::vector<Double_t> fSigAmplitudes; // vector for signal amplitudes
	fSigAmplitudes.reserve(DataSet.GetFrameCount());
	std::vector<Double_t> fSigWidthsFiltered; // vector for filtered signal widths
	fSigWidthsFiltered.reserve(DataSet.GetFrameCount());
	std::vector<Double_t> fSigAmplitudesFiltered; // vector for filtered signal amplitudes
	fSigAmplitudesFiltered.reserve(DataSet.GetFrameCount());
	// define analysis parameters
	const Double_t fWidthLevel = 0.5;
	for(Int_t nIndex=0; nIndex<DataSet.GetFrameCount(); nIndex++){ // begin of loop over all recorded frames
		TWaveform CurrentFrame = DataSet.GetWaveform(nIndex);
		if(CurrentFrame.IsZombie())
			continue;
		//CurrentFrame.ScaleTimestamps(1.0e9); // change from s to ns
		CurrentFrame.ShiftBaseline(CurrentFrame.GetMean(0,50)); // adjust baseline based on the first 50 samples
		TWaveform FilteredFrame = CurrentFrame.MovingAverageFilter(10); // use moving average filter to remove noise, width of moving window is set to 10 samples
		if(cUserSignalType=="-"){
			fSigAmplitudes.push_back(CurrentFrame.GetMinAmplitude()); // get negative amplitude
			fSigWidths.push_back(CurrentFrame.GetNegWidth(fWidthLevel)); // get negative width of signal
			fSigAmplitudesFiltered.push_back(FilteredFrame.GetMinAmplitude()); // get negative amplitude of filtered signal
			fSigWidthsFiltered.push_back(FilteredFrame.GetNegWidth(fWidthLevel)); // get negative width of filtered signal
		}
		else if(cUserSignalType=="+"){
			fSigAmplitudes.push_back(CurrentFrame.GetMaxAmplitude()); // get negative amplitude
			fSigWidths.push_back(CurrentFrame.GetPosWidth(fWidthLevel)); // get negative width of signal
			fSigAmplitudesFiltered.push_back(FilteredFrame.GetMaxAmplitude()); // get positive amplitude of filtered signal
			fSigWidthsFiltered.push_back(FilteredFrame.GetPosWidth(fWidthLevel)); // get positive width of filtered signal
		}
		else
			exit;
	} //  end of loop over all recorded frames

	// define output histograms and graphs
	// first, raw signal
	Double_t fRangeAmplitudes = fabs(*std::min_element(fSigAmplitudes.begin(),fSigAmplitudes.end()) - *std::max_element(fSigAmplitudes.begin(),fSigAmplitudes.end()));
	TH1D hAmplitudes("hAmplitudes","Negative Amplitude Distribution; amplitude (V); frequency",30,*std::min_element(fSigAmplitudes.begin(),fSigAmplitudes.end())-0.1*fRangeAmplitudes,*std::max_element(fSigAmplitudes.begin(),fSigAmplitudes.end())+0.1*fRangeAmplitudes);
	hAmplitudes.FillN(fSigAmplitudes.size(),&fSigAmplitudes[0],NULL);

	Double_t fRangeWidths = *std::max_element(fSigWidths.begin(),fSigWidths.end()) - *std::min_element(fSigWidths.begin(),fSigWidths.end());
	TH1D hWidths("hWidths","Negative Width Distribution; width (s); frequency",30,*std::min_element(fSigWidths.begin(),fSigWidths.end())-0.1*fRangeWidths,*std::max_element(fSigWidths.begin(),fSigWidths.end())+0.1*fRangeWidths);
	hWidths.FillN(fSigWidths.size(),&fSigWidths[0],NULL);

	TGraph grCorrelation(fSigAmplitudes.size(),&fSigAmplitudes[0],&fSigWidths[0]);
	grCorrelation.SetTitle("Signal Amplitude and Width Correlation; amplitude (V); width (s)");
	grCorrelation.SetMarkerStyle(24);
	
	TProfile hCorrelation("hCorrelation","Correlation of signal amplitude and width; amplitude (V); width (s)",20,*std::min_element(fSigAmplitudes.begin(),fSigAmplitudes.end())-0.1*fRangeAmplitudes,*std::max_element(fSigAmplitudes.begin(),fSigAmplitudes.end())+0.1*fRangeAmplitudes,*std::min_element(fSigWidths.begin(),fSigWidths.end())-0.1*fRangeWidths,*std::max_element(fSigWidths.begin(),fSigWidths.end())+0.1*fRangeWidths);
	hCorrelation.FillN(fSigAmplitudes.size(),&fSigAmplitudes[0],&fSigWidths[0],NULL,1);

	TCanvas *canResults = new TCanvas("canResults","Results of Raw Waveform Analysis");
	canResults->Divide(2,2);
	canResults->cd(1);
	hAmplitudes.DrawCopy();
	canResults->cd(2);
	hWidths.DrawCopy();
	canResults->cd(3);
	grCorrelation.DrawClone("AP");
	canResults->cd(4);
	hCorrelation.DrawCopy();

	// now filtered signal
	Double_t fRangeAmplitudesFiltered = fabs(*std::min_element(fSigAmplitudesFiltered.begin(),fSigAmplitudesFiltered.end()) - *std::max_element(fSigAmplitudesFiltered.begin(),fSigAmplitudesFiltered.end()));
	TH1D hAmplitudesFiltered("hAmplitudesFiltered","Filtered Signal Amplitude Distribution; amplitude (V); frequency",30,*std::min_element(fSigAmplitudesFiltered.begin(),fSigAmplitudesFiltered.end())-0.1*fRangeAmplitudesFiltered,*std::max_element(fSigAmplitudesFiltered.begin(),fSigAmplitudesFiltered.end())+0.1*fRangeAmplitudesFiltered);
	hAmplitudesFiltered.FillN(fSigAmplitudesFiltered.size(),&fSigAmplitudesFiltered[0],NULL);

	Double_t fRangeWidthsFiltered = *std::max_element(fSigWidthsFiltered.begin(),fSigWidthsFiltered.end()) - *std::min_element(fSigWidthsFiltered.begin(),fSigWidthsFiltered.end());
	TH1D hWidthsFiltered("hWidthsFiltered","Filtered Signal Width Distribution; width (s); frequency",30,*std::min_element(fSigWidthsFiltered.begin(),fSigWidthsFiltered.end())-0.1*fRangeWidthsFiltered,*std::max_element(fSigWidthsFiltered.begin(),fSigWidthsFiltered.end())+0.1*fRangeWidthsFiltered);
	hWidthsFiltered.FillN(fSigWidthsFiltered.size(),&fSigWidthsFiltered[0],NULL);

	TGraph grCorrelationFiltered(fSigAmplitudesFiltered.size(),&fSigAmplitudesFiltered[0],&fSigWidthsFiltered[0]);
	grCorrelationFiltered.SetTitle("Filtered Signal Amplitude and Width Correlation; amplitude (V); width (s)");
	grCorrelationFiltered.SetMarkerStyle(24);
	
	TProfile hCorrelationFiltered("hCorrelationFiltered","Correlation of Filtered Signal Amplitude and Width; amplitude (V); width (s)",20,*std::min_element(fSigAmplitudesFiltered.begin(),fSigAmplitudesFiltered.end())-0.1*fRangeAmplitudesFiltered,*std::max_element(fSigAmplitudesFiltered.begin(),fSigAmplitudesFiltered.end())+0.1*fRangeAmplitudesFiltered,*std::min_element(fSigWidthsFiltered.begin(),fSigWidthsFiltered.end())-0.1*fRangeWidthsFiltered,*std::max_element(fSigWidthsFiltered.begin(),fSigWidthsFiltered.end())+0.1*fRangeWidthsFiltered);
	hCorrelationFiltered.FillN(fSigAmplitudesFiltered.size(),&fSigAmplitudesFiltered[0],&fSigWidthsFiltered[0],NULL,1);

	TCanvas *canResultsFiltered = new TCanvas("canResultsFiltered","Results of Filtered Waveform Analysis");
	canResultsFiltered->Divide(2,2);
	canResultsFiltered->cd(1);
	hAmplitudesFiltered.DrawCopy();
	canResultsFiltered->cd(2);
	hWidthsFiltered.DrawCopy();
	canResultsFiltered->cd(3);
	grCorrelationFiltered.DrawClone("AP");
	canResultsFiltered->cd(4);
	hCorrelationFiltered.DrawCopy();
}
示例#18
0
//----------------------------------------------------------------------
static void TouchArg(op_t &x,int isAlt,int isload)
{
switch (x.type)
  {
  case o_phrase:
    //Добавляем в список ошибок(выводим сообщение)
    //ошибку и адресс где это случилось
    //QueueMark(Q_jumps, cmd.ea);
  case o_void:
  case o_reg:
    break;

  case o_imm:
    {
    //Установить для данного байта признак immedia
    doImmd(cmd.ea);
    //Получить флаг для указанного линейного адресса
    if(!isAlt)
      {
      uint32 offb;
      ushort addr = ushort(x.addr);
      if(x.type == o_displ )
        {
        addr += (ushort)cmd.ip;
        addr += cmd.size;
        //Получить линейный адресс
        offb = (uint32)toEA(codeSeg(addr,x.n), 0);
        DataSet(x, offb+addr, isload);
        }
      else if ( isOff(uFlag, x.n) )
        {
reref:
        ua_add_off_drefs(x, dr_O);
        if ( x.type == o_displ )
        //Преобразовать данные по указанному линейному адрессу в указанный тип
        ua_dodata2(x.offb, calc_target(cmd.ea+x.offb, cmd.ea, x.n, x.addr), x.dtyp);
        }
      else if(x.type == o_displ && !x.reg && !isDefArg(uFlag, x.n) &&
                 set_offset(cmd.ea, x.n, toEA(cmd.cs,0))) goto reref;
      }
    } break;

  case o_bit:
  case o_mem:
    // Конвертирование в данные(указан адресс) по указанному типу,
    //добавить крос референсы для текущей инструкции
    DataSet(x, toEA(codeSeg(x.addr,x.n), x.addr), isload);
    break;

  case o_near:
    {
    //Получить линейный адресс
    ea_t ea = toEA(cmd.cs, x.addr);
    //Проверить является ли значение по указанному линейному адрессу - инструкцией
    int iscall = InstrIsSet(cmd.itype, CF_CALL);
    //добавить крос референсы для текущей инструкции
    ua_add_cref(x.offb, ea, iscall ? fl_CN : fl_JN);
    if ( iscall )  flow = func_does_return(ea);
    } break;

  default:
    warning("%a: %s,%d: bad optype %d", cmd.ea, cmd.get_canon_mnem(), x.n, x.type);
    break;
  }
}
示例#19
0
namespace Exiv2 {

    DataSet::DataSet(
        uint16 number, 
        const char* name,
        const char* desc,
        bool mandatory,
        bool repeatable,
        uint32 minbytes, 
        uint32 maxbytes,
        TypeId type,
        uint16 recordId,
        const char* photoshop
    )
        : number_(number), name_(name), desc_(desc), mandatory_(mandatory), 
           repeatable_(repeatable), minbytes_(minbytes), maxbytes_(maxbytes),
           type_(type), recordId_(recordId), photoshop_(photoshop)
    {
    }

    RecordInfo::RecordInfo(
        uint16 recordId,
        const char* name,
        const char* desc
    )
        : recordId_(recordId), name_(name), desc_(desc)
    {
    }

    const RecordInfo IptcDataSets::recordInfo_[] = {
        RecordInfo(IptcDataSets::invalidRecord, "(invalid)", "(invalid)"),
        RecordInfo(IptcDataSets::envelope, "Envelope", "IIM envelope record"),
        RecordInfo(IptcDataSets::application2, "Application2", "IIM application record 2"),
    };
    
    static const DataSet envelopeRecord[] = {
        DataSet(IptcDataSets::ModelVersion, "ModelVersion", "Version of IIM part 1", true, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::Destination, "Destination", "Routing information", false, true, 0, 1024, Exiv2::string, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::FileFormat, "FileFormat", "IIM appendix A file format", true, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::FileVersion, "FileVersion", "File format version", true, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::ServiceId, "ServiceId", "Identifies the provider and product", true, false, 0, 10, Exiv2::string, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::EnvelopeNumber, "EnvelopeNumber", "Combined unique identification", true, false, 8, 8, Exiv2::string, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::ProductId, "ProductId", "Identifies service subset", false, true, 0, 32, Exiv2::string, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::EnvelopePriority, "EnvelopePriority", "Envelope handling priority", false, false, 1, 1, Exiv2::string, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::DateSent, "DateSent", "Date material was sent", true, false, 8, 8, Exiv2::date, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::TimeSent, "TimeSent", "Time material was sent", false, false, 11, 11, Exiv2::time, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::CharacterSet, "CharacterSet", "Specifies character sets", false, false, 0, 32, Exiv2::undefined, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::UNO, "UNO", "Unique Name of Object", false, false, 14, 80, Exiv2::string, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::ARMId, "ARMId", "Abstract Relationship Method identifier", false, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::envelope, ""),
        DataSet(IptcDataSets::ARMVersion, "ARMVersion", "Abstract Relationship Method version", false, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::envelope, ""),
        DataSet(0xffff, "(Invalid)", "(Invalid)", false, false, 0, 0, Exiv2::unsignedShort, IptcDataSets::envelope, "")
    };

    static const DataSet application2Record[] = {
        DataSet(IptcDataSets::RecordVersion, "RecordVersion", "Version of IIM part 2", true, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ObjectType, "ObjectType", "IIM appendix G object type", false, false, 3, 67, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ObjectAttribute, "ObjectAttribute", "IIM appendix G object attribute", false, true, 4, 68, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ObjectName, "ObjectName", "Shorthand reference of content", false, false, 0, 64, Exiv2::string, IptcDataSets::application2, "Document title"),
        DataSet(IptcDataSets::EditStatus, "EditStatus", "Content status", false, false, 0, 64, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::EditorialUpdate, "EditorialUpdate", "Indicates the type of update", false, false, 2, 2, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Urgency, "Urgency", "Editorial urgency of content", false, false, 1, 1, Exiv2::string, IptcDataSets::application2, "Urgency"),
        DataSet(IptcDataSets::Subject, "Subject", "Structured definition of the subject", false, true, 13, 236, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Category, "Category", "Identifies the subject", false, false, 0, 3, Exiv2::string, IptcDataSets::application2, "Category"),
        DataSet(IptcDataSets::SuppCategory, "SuppCategory", "Refines the subject", false, true, 0, 32, Exiv2::string, IptcDataSets::application2, "Supplemental Categories"),
        DataSet(IptcDataSets::FixtureId, "FixtureId", "Identifies content that recurs", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Keywords, "Keywords", "Information retrieval words", false, true, 0, 64, Exiv2::string, IptcDataSets::application2, "Keywords"),
        DataSet(IptcDataSets::LocationCode, "LocationCode", "ISO country code for content", false, true, 3, 3, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::LocationName, "LocationName", "Full country name for content", false, true, 0, 64, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ReleaseDate, "ReleaseDate", "Earliest intended usable date", false, false, 8, 8, Exiv2::date, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ReleaseTime, "ReleaseTime", "Earliest intended usable time", false, false, 11, 11, Exiv2::time, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ExpirationDate, "ExpirationDate", "Latest intended usable date", false, false, 8, 8, Exiv2::date, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ExpirationTime, "ExpirationTime", "Latest intended usable time", false, false, 11, 11, Exiv2::time, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::SpecialInstructions, "SpecialInstructions", "Editorial usage instructions", false, false, 0, 256, Exiv2::string, IptcDataSets::application2, "Instructions"),
        DataSet(IptcDataSets::ActionAdvised, "ActionAdvised", "Action provided to previous data", false, false, 2, 2, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ReferenceService, "ReferenceService", "Service Identifier of a prior envelope", false, true, 0, 10, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ReferenceDate, "ReferenceDate", "Date of a prior envelope", false, true, 8, 8, Exiv2::date, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ReferenceNumber, "ReferenceNumber", "Envelope Number of a prior envelope", false, true, 8, 8, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::DateCreated, "DateCreated", "Creation date of intellectual content", false, false, 8, 8, Exiv2::date, IptcDataSets::application2, "Date created"),
        DataSet(IptcDataSets::TimeCreated, "TimeCreated", "Creation time of intellectual content", false, false, 11, 11, Exiv2::time, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::DigitizationDate, "DigitizationDate", "Creation date of digital representation", false, false, 8, 8, Exiv2::date, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::DigitizationTime, "DigitizationTime", "Creation time of digital representation", false, false, 11, 11, Exiv2::time, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Program, "Program", "Content creation program", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ProgramVersion, "ProgramVersion", "Content creation program version", false, false, 0, 10, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ObjectCycle, "ObjectCycle", "Morning, evening, or both", false, false, 1, 1, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Byline, "Byline", "Name of content creator", false, true, 0, 32, Exiv2::string, IptcDataSets::application2, "Author"),
        DataSet(IptcDataSets::BylineTitle, "BylineTitle", "Title of content creator", false, true, 0, 32, Exiv2::string, IptcDataSets::application2, "Authors Position"),
        DataSet(IptcDataSets::City, "City", "City of content origin", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, "City"),
        DataSet(IptcDataSets::SubLocation, "SubLocation", "Location within city", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ProvinceState, "ProvinceState", "Province/State of content origin", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, "State/Province"),
        DataSet(IptcDataSets::CountryCode, "CountryCode", "ISO country code of content origin", false, false, 3, 3, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::CountryName, "CountryName", "Full country name of content origin", false, false, 0, 64, Exiv2::string, IptcDataSets::application2, "Country"),
        DataSet(IptcDataSets::TransmissionReference, "TransmissionReference", "Location of original transmission", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, "Transmission Reference"),
        DataSet(IptcDataSets::Headline, "Headline", "Content synopsis", false, false, 0, 256, Exiv2::string, IptcDataSets::application2, "Headline"),
        DataSet(IptcDataSets::Credit, "Credit", "Content provider", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, "Credit"),
        DataSet(IptcDataSets::Source, "Source", "Original owner of content", false, false, 0, 32, Exiv2::string, IptcDataSets::application2, "Source"),
        DataSet(IptcDataSets::Copyright, "Copyright", "Necessary copyright notice", false, false, 0, 128, Exiv2::string, IptcDataSets::application2, "Copyright notice"),
        DataSet(IptcDataSets::Contact, "Contact", "Person or organisation to contact", false, true, 0, 128, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Caption, "Caption", "Content description", false, false, 0, 2000, Exiv2::string, IptcDataSets::application2, "Description"),
        DataSet(IptcDataSets::Writer, "Writer", "Person responsible for caption", false, true, 0, 32, Exiv2::string, IptcDataSets::application2, "Description writer"),
        DataSet(IptcDataSets::RasterizedCaption, "RasterizedCaption", "Black and white caption image", false, false, 7360, 7360, Exiv2::undefined, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ImageType, "ImageType", "Color components in an image", false, false, 2, 2, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::ImageOrientation, "ImageOrientation", "Indicates the layout of an image", false, false, 1, 1, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Language, "Language", "ISO 639:1988 language code", false, false, 2, 3, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::AudioType, "AudioType", "Information about audio content", false, false, 2, 2, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::AudioRate, "AudioRate", "Sampling rate of audio content", false, false, 6, 6, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::AudioResolution, "AudioResolution", "Sampling resolution of audio content", false, false, 2, 2, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::AudioDuration, "AudioDuration", "Duration of audio content", false, false, 6, 6, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::AudioOutcue, "AudioOutcue", "Final words or sounds of audio content", false, false, 0, 64, Exiv2::string, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::PreviewFormat, "PreviewFormat", "IIM appendix A file format of preview", false, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::PreviewVersion, "PreviewVersion", "File format version of preview", false, false, 2, 2, Exiv2::unsignedShort, IptcDataSets::application2, ""),
        DataSet(IptcDataSets::Preview, "Preview", "Binary preview data", false, false, 0, 256000, Exiv2::undefined, IptcDataSets::application2, ""),
        DataSet(0xffff, "(Invalid)", "(Invalid)", false, false, 0, 0, Exiv2::unsignedShort, IptcDataSets::application2, "")
    };

    // Dataset lookup lists.This is an array with pointers to one list per IIM4 Record. 
    // The record id is used as the index into the array.
    const DataSet* IptcDataSets::records_[] = {
        0, 
        envelopeRecord, application2Record, 
        0
    };

    const char* IptcDataSets::familyName_ = "Iptc";

    int IptcDataSets::dataSetIdx(uint16 number, uint16 recordId)
    {
        if( recordId != envelope && recordId != application2 ) return -1;
        const DataSet* dataSet = records_[recordId];
        if (dataSet == 0) return -1;
        int idx;
        for (idx = 0; dataSet[idx].number_ != number; ++idx) {
            if (dataSet[idx].number_ == 0xffff) return -1;
        }
        return idx;
    }

    int IptcDataSets::dataSetIdx(const std::string& dataSetName, uint16 recordId)
    {
        if( recordId != envelope && recordId != application2 ) return -1;
        const DataSet* dataSet = records_[recordId];
        if (dataSet == 0) return -1;
        int idx;
        for (idx = 0; dataSet[idx].name_ != dataSetName; ++idx) {
            if (dataSet[idx].number_ == 0xffff) return -1;
        }
        return idx;
    }

    TypeId IptcDataSets::dataSetType(uint16 number, uint16 recordId)
    {
        int idx = dataSetIdx(number, recordId);
        if (idx == -1) throw Error("No dataSet for record Id");
        return records_[recordId][idx].type_;
    }

    const char* IptcDataSets::dataSetName(uint16 number, uint16 recordId)
    {
        int idx = dataSetIdx(number, recordId);
        if (idx == -1) throw Error("No dataSet for record Id");
        return records_[recordId][idx].name_;
    }

    const char* IptcDataSets::dataSetDesc(uint16 number, uint16 recordId)
    {
        int idx = dataSetIdx(number, recordId);
        if (idx == -1) throw Error("No dataSet for record Id");
        return records_[recordId][idx].desc_;
    }

    const char* IptcDataSets::dataSetPsName(uint16 number, uint16 recordId)
    {
        int idx = dataSetIdx(number, recordId);
        if (idx == -1) throw Error("No dataSet for record Id");
        return records_[recordId][idx].photoshop_;
    }

    bool IptcDataSets::dataSetRepeatable(uint16 number, uint16 recordId)
    {
        int idx = dataSetIdx(number, recordId);
        if (idx == -1) throw Error("No dataSet for record Id");
        return records_[recordId][idx].repeatable_;
    }

    const char* IptcDataSets::recordName(uint16 recordId)
    {
        if( recordId != envelope && recordId != application2 ) {
            throw Error("Unknown record");
        }
        return recordInfo_[recordId].name_;
    }

    const char* IptcDataSets::recordDesc(uint16 recordId)
    {
        if( recordId != envelope && recordId != application2 ) {
            throw Error("Unknown record");
        }
        return recordInfo_[recordId].desc_;
    }

    uint16 IptcDataSets::recordId(const std::string& recordName)
    {
        uint16 i;
        for (i = application2; i > 0; --i) {
            if (recordInfo_[i].name_ == recordName) break;
        }
        return i;
    }

    std::string IptcDataSets::makeKey(const DataSet& dataSet)
    {
        return std::string(familyName())
            + "." + std::string(recordName(dataSet.recordId_)) 
            + "." + dataSet.name_;
    }

    std::string IptcDataSets::makeKey(uint16 number, uint16 recordId)
    {
        return std::string(familyName())
            + "." + std::string(recordName(recordId)) 
            + "." + std::string(dataSetName(number, recordId));
    }

    // This 'database lookup' function returns a match if it exists
    std::pair<uint16, uint16> IptcDataSets::decomposeKey(const std::string& key)
    {
        // Get the type, record name and dataSet name parts of the key
        std::string::size_type pos1 = key.find('.');
        if (pos1 == std::string::npos) throw Error("Invalid key");
        std::string type = key.substr(0, pos1);
        if (type != "Iptc") throw Error("Invalid key");
        std::string::size_type pos0 = pos1 + 1;
        pos1 = key.find('.', pos0);
        if (pos1 == std::string::npos) throw Error("Invalid key");
        std::string recordName = key.substr(pos0, pos1 - pos0);
        if (recordName == "") throw Error("Invalid key");
        std::string dataSetName = key.substr(pos1 + 1);
        if (dataSetName == "") throw Error("Invalid key");

        // Use the parts of the key to find dataSet and recordInfo
        uint16 recId = recordId(recordName);
        if (recId == invalidRecord) return std::make_pair((uint16)0xffff, invalidRecord);

        int idx = dataSetIdx(dataSetName, recId);
        if (idx == -1 ) return std::make_pair((uint16)0xffff, invalidRecord);

        return std::make_pair(records_[recId][idx].number_, recId);
    } // IptcDataSets::decomposeKey

    void IptcDataSets::dataSetList(std::ostream& os)
    {
        const int count = sizeof(records_)/sizeof(records_[0]);
        for (int i=0; i < count; ++i) {
            const DataSet *record = records_[i];
            for (int j=0; record != 0 && record[j].number_ != 0xffff; ++j) {
                os << record[j] << "\n";
            }
        }
    } // IptcDataSets::dataSetList
    
    // *************************************************************************
    // free functions

    std::ostream& operator<<(std::ostream& os, const DataSet& dataSet) 
    {
        return os << dataSet.name_ << ", "
                  << std::dec << dataSet.number_ << ", "
                  << "0x" << std::setw(4) << std::setfill('0') 
                  << std::right << std::hex << dataSet.number_ << ", "
                  << IptcDataSets::recordName(dataSet.recordId_) << ", "
                  << std::boolalpha << dataSet.mandatory_ << ", "
                  << dataSet.repeatable_ << ", "
                  << std::dec << dataSet.minbytes_ << ", "
                  << dataSet.maxbytes_ << ", "
                  << IptcDataSets::makeKey(dataSet) << ", "
                  << dataSet.desc_;
    }

}                                       // namespace Exiv2
示例#20
0
 DataSet DataSet::create (const File& file, const DataType& type, const DataSpace& space, const DataSetCreatePropList& dcpl, const DataSetAccessPropList& dapl) {
   return DataSet (Exception::check ("H5Dcreate_anon", H5Dcreate_anon (file.handle (), type.handle (), space.handle (), dcpl.handleOrDefault (), dapl.handleOrDefault ())));
 }
示例#21
0
/*--------------------------------------------------------------------------*/
void PegTextBox::Append(const PEGCHAR *Text, BOOL bDraw)
{
    if (!Text)
    {
        return;
    }
    if (!(*Text))
    {
        return;
    }

    PEGCHAR *pGet = DataGet();

    if (!pGet)
    {
		WORD wTextLen = (WORD) strlen(Text);
		if(wTextLen > mwMaxChars)
		{
			Text += (wTextLen - mwMaxChars);
		}
        DataSet(Text);
        return;
    }

    WORD wStartLen = (WORD) strlen(pGet);
    WORD wLen = strlen(Text) + wStartLen;

    if (wLen >= mwMaxChars)
    {
        SIGNED iAdjust = wLen - mwMaxChars;

        if (wStartLen >= iAdjust)
        {
            pGet += iAdjust;
            wLen -= iAdjust;
        }
        else
        {
            pGet = NULL;
            wLen -= wStartLen;
            if (wLen > mwMaxChars)
            {
                iAdjust = wLen - mwMaxChars;
                Text += iAdjust;
                wLen -= iAdjust;
            }
        }
    }

    wLen += 2;

    PEGCHAR *pTemp = new PEGCHAR[wLen];
    if (pGet)
    {
        strcpy(pTemp, pGet);
    }
    else
    {
        *pTemp = '\0';
    }
    strcat(pTemp, Text);
    PegTextThing::DataSet(pTemp);

    delete (pTemp);

    UpdateLineStarts();

    if (muScrollMode & WSM_AUTOSCROLL)
    {
        if (CheckAutoScroll())
        {
            UpdateLineStarts();
        }
    }

    SetTopLineToEnd();

    if (bDraw)
    {
        Draw();
    }
}