* src/reader.c (reader_read_string): Support escaped characters.
}
SCM
-cstring_to_list (char const* s)
+string_to_list (char const* s, int i)
{
SCM p = cell_nil;
- int i = strlen (s);
while (i--)
p = cons (MAKE_CHAR (s[i]), p);
return p;
}
+SCM
+cstring_to_list (char const* s)
+{
+ return string_to_list (s, strlen (s));
+}
+
// \f extra lib
SCM
assert_defined (SCM x, SCM e) ///((internal))
if (c == '"' || i > 1022)
{
buf[i] = 0;
- lst = append2 (lst, cstring_to_list (buf));
+ lst = append2 (lst, string_to_list (buf, i));
i = 0;
if (c == '"')
break;
int p = peekchar ();
if (p == '\\' || p == '"')
buf[i++] = getchar ();
- else if (p == 'n')
+ else if (p == '0')
{
getchar ();
- buf[i++] = '\n';
+ buf[i++] = '\0';
+ }
+ else if (p == 'a')
+ {
+ getchar ();
+ buf[i++] = '\a';
+ }
+ else if (p == 'b')
+ {
+ getchar ();
+ buf[i++] = '\b';
}
else if (p == 't')
{
getchar ();
buf[i++] = '\t';
}
+ else if (p == 'n')
+ {
+ getchar ();
+ buf[i++] = '\n';
+ }
+ else if (p == 'v')
+ {
+ getchar ();
+ buf[i++] = '\v';
+ }
+ else if (p == 'f')
+ {
+ getchar ();
+ buf[i++] = '\f';
+ }
+ else if (p == 'r')
+ {
+ getchar ();
+ //Nyacc bug
+ //buf[i++] = '\r';
+ buf[i++] = 13;
+ }
+ else if (p == 'e')
+ {
+ getchar ();
+ //buf[i++] = '\e';
+ buf[i++] = 27;
+ }
}
#if 0 // !__MESC__
else if (c == EOF)