.Parse_str( str{}, argv[]{}; delim{}, oper{} )

    \ The string  str  is split into substrings which are
    \ output through the  argv  vector.  Substrings in  str
    \ are delimited by characters in the strings  delim and  oper.
    \ The argument  delim  defaults to the string  " *t", and
    \ oper  defaults to the null string.  Any character in str
    \ which appears in oper, but not in delim, will appear as
    \ a string in  argv.  The number of substrings placed in  argv
    \ is returned by this function.
    \ Example: command lines are processed by the call
    \   argc = .Parse_str( str, argv, " *t", "<>" );
  {
    unsigned    i, j, argc, temp{}, c;

    if( .Nargs() < 3 )  delim = " *t";
    if( .Nargs() < 4 )  oper = "";

    temp = .Alloc_str( .Size(str) );
    argc = 0;

    for( i=0; c=str{i}; )
      {
        if( .Any(c, delim) )  
          {
            ++i;
            next;
          }
        j = 0;
        if( .Any(c, oper) )  
          {
            temp{j++} = c;
            ++i;
          }
        else if( str{i} == '"' )
          {
x:          while( (c=str{++i})  &&  c != '"' )  temp{j++} = c;
            if( c == '*0' )  return( .MAX_UNSIGNED );
            if( str{++i} == '"' )
              {
                temp{j++} = '"';
                goto x;
              }
          }
        else  while( c = str{i} )
          {
             if( .Any(c, delim) )  break;
             if( .Any(c, oper) )  break;
             temp{j++} = c;
             ++i;
          }
        temp{j} = '*0';
        argv[argc++] = .Concat( .Alloc_str(j), temp );
      }

    .Free( temp );
    return( argc );
  } 
