+COS_Symbol
+cos_read_symbol (unsigned char *str, size_t len, size_t start, size_t* endp)
+{
+ size_t i = start;
+ int c;
+
+ if ( i < len )
+ {
+ while ( ( i < len )
+ && ( (c = cos_read_utf8 (str, len, i, &i)) >= 0 )
+ )
+ {
+ if ( is_delimiter (c) )
+ {
+ i--;
+ if ( i == start )
+ return NULL;
+ else
+ {
+ *endp = i;
+ return
+ cos_intern (cos_make_string (&str[start], i - start));
+ }
+ }
+ else if ( c == '\\' )
+ {
+ i++;
+ if ( cos_read_utf8 (str, len, i, &i) < 0 )
+ return NULL;
+ }
+ }
+ }
+ if ( i == start )
+ return NULL;
+ else
+ {
+ *endp = i;
+ return cos_intern (cos_make_string (&str[start], i - start));
+ }
+}
+
+