
    if (nullptr == s)
    {
      for (i--; i >= 0 && 0!= (c = m_s[i]); i--)
      {
        if ( c < 0 || c > ON_wString::Space )
          break;
      }
    }
    else
    {
      for (i--; i >= 0 && 0!= (c = m_s[i]); i--)
      {
        for (sc = s; *sc; sc++) {
          if (*sc == c)
            break;
        }
        if (!(*sc))
          break;
      }
    }
    if ( i < 0 )
      Destroy();
    else if ( m_s[i+1] ) {
      CopyArray();
      m_s[i+1] = 0;
      Header()->string_length = i+1;
    }
  }
}

void ON_wString::TrimLeftAndRight(const wchar_t* s)
{
  TrimRight(s);
  TrimLeft(s);
}


int ON_wString::Remove(char c)
{
  if (c >= 0 && ON_IsValidSingleElementUTF8Value((ON__UINT32)c))
    return Remove((wchar_t)c);
  return 0;
}

int ON_wString::Remove(unsigned char c)
{
  if (ON_IsValidSingleElementUTF8Value((ON__UINT32)c))
    return Remove((wchar_t)c);
  return 0;
}

int ON_wString::Remove(wchar_t c)
{
  if (ON_IsValidSingleElementWideCharValue(c))
  {
    wchar_t* s0;
    wchar_t* s1;
    wchar_t* s;
    int n;

    if (0 == (s0 = m_s))
      return 0;
    s1 = s0 + Length();
    while (s0 < s1)
    {
      if (c == *s0++)
      {
        // need to modify this string
        n = ((int)(s0 - m_s));
        CopyArray(); // may change m_s if string has multiple refs
        s0 = m_s + n;
        s = s0 - 1;
        s1 = m_s + Length();
        while (s0 < s1)
        {
          if (c!= *s0)
          {
            *s++ = *s0;
          }
          s0++;
        }
        *s = 0;
        n = ((int)(s1 - s));
        Header()->string_length -= n;
        return n;
      }
    }
  }
  return 0;
}

wchar_t ON_wString::GetAt(int i) const
{
  return m_s[i];
}


void ON_wString::SetAt( int i, char c )
{
  if ( i >= 0 && i < Header()->string_length ) {
	  CopyArray();
    if (c < 0 || c > 127)
    {
      ON_ERROR("c is not a valid single byte utf-8 value.");
    }
	  m_s[i] = (wchar_t)c;
  }
}

void ON_wString::SetAt( int i, unsigned char c )
{
  SetAt( i, (char)c );
}

void ON_wString::SetAt( int i, wchar_t c )
{
  if ( i >= 0 && i < Header()->string_length ) {
	  CopyArray();
	  m_s[i] = c;
  }
}

ON_wString ON_wString::Mid(int i, int count) const
{
  if ( i >= 0 && i < Length() && count > 0 ) 
  {
    if ( count > Length() - i )
      count = Length() - i;
    if (count > 0)
    {
      ON_wString s;
      s.CopyToArray(count, &m_s[i]);
      return s;
    }
  }
  return ON_wString::EmptyString;
}

ON_wString ON_wString::Mid(int i) const
{
  return Mid( i, Length() - i );
}

const ON_wString ON_wString::SubString(
  int start_index
) const
{
  return Mid( start_index, Length() - start_index );
}

const ON_wString ON_wString::SubString(
  int start_index,
  int count
) const
{
  return Mid(start_index, count);
}

ON_wString ON_wString::Left(int count) const
{
  ON_wString s;
  if ( count > Length() )
    count = Length();
  if ( count > 0 ) {
    s.CopyToArray( count, m_s );
  }
  return s;
}

ON_wString ON_wString::Right(int count) const
{
  ON_wString s;
  if ( count > Length() )
    count = Length();
  if ( count > 0 ) {
    s.CopyToArray( count, &m_s[Length()-count] );
  }
  return s;
}

Topic: November 30 2020 Observations.
Re: November 30 2020 Observations.
When you say you got a flare alert on your phone, how?
No sorry Pedro I didn't. If I did I don't have a Youtube account to post it. I presume anyone could record it if they wanted to or does the host have to do it?
I guess we would need to ask folk if they minded their conversations being recorded.
Thanks everyone for turning up :) We could make a schedule if you like? Maybe the last Sunday of every month at 18:00 UTC?? However this does favour Europe and North/South America, maybe an Asia/Australia might want one as well but that depends on who is interested. Maybe we could also schedule an i...
As promised, I saved this explanation of adaptive sharpening in ImPPG. It is complicated and I hope that Freddie doesn't mind me posting his explanation: Adaptive sharpening in ImPPG by Freddie There have been a couple of questions about tone curve/histo and adaptive in ImPPG so I will try and help...Was El Chapo’s Extradition a Gift to Donald Trump?
Theories abound about the suspicious timing of the drug lord’s extradition. But the real story is the information El Chapo might spill.
On Thursday evening, the United States Drug Enforcement Agency transported Joaquín Archivaldo Guzmán—better known as the drug lord El Chapo—from his prison in Ciudad Juarez to a federal detention center in New York, one of six U.S. jurisdictions where he faces indictment for felony charges, including cocaine trafficking, money laundering, and conspiracy to commit kidnapping, torture, and murder.
The extradition, which had initially been approved last May, before being suspended on appeal, was expected to be held up for months and came as a surprise, even to Guzmán’s lawyers—leaving many to speculate on the implications of its timing.
One interpretation maintains that sending the worst of its “bad hombres” to the U.S. was Mexico’s contribution to the inauguration of President Donald Trump, who launched his candidacy by denouncing Mexican “rapists” pouring over the border. For Mexican President Enrique Peña Nieto, the thinking goes, it’s better to mount a shaved head than pay for The Wall.
Ioan Grillo, author of Gangster Warlords and El Narco, saw the move as Mexico’s attempt to “show the Trump government it is cooperating on security.” It’s “a message,” said University of Texas professor Guadalupe Correa Cabrera, “that the government has decided to work with” the new administration. Breitbart, the alt-right Pravda site behind the “Cartel Chronicles” and other such breathless reports on the impending border “invasion,” promoted a similar take on its homepage, declaring Peña Nieto’s reversal on extradition an early example of the sort of “winning” the U.S. will soon tire of under Trump.
Each explanation has its inconsistencies. Mexico, for instance, could not have completed the extradition any sooner, as the Supreme Court hadn’t issued a final ruling on Guzmán’s petitions until Wednesday. And, as Alejandro Hope, a security analyst and El Universal columnist, noted, it doesn’t make sense to give Trump a win he can’t fully claim as his own—not that Trump is exactly one to pass up an