> > Can you show how the values of the following variables change as you > step through this fragment in read1 and inside read_escape it calls? > > read_from_string_index > read_from_string_index_byte > read_from_string_limit > c 0x00000043 int read_from_string_index 0x00000004 int read_from_string_index_byte 0x00000004 int read_from_string_limit 0x00000008 int case 'C': c = READCHAR; c 0x0000002d int read_from_string_index 0x00000005 int read_from_string_index_byte 0x00000005 int read_from_string_limit 0x00000008 int if (c != '-') error ("Invalid escape character syntax"); case '^': c = READCHAR; c 0x00000030 int read_from_string_index 0x00000006 int read_from_string_index_byte 0x00000006 int read_from_string_limit 0x00000008 int return c | ctrl_modifier; back to read1: modifiers = c & CHAR_MODIFIER_MASK; c &= ~CHAR_MODIFIER_MASK; if (CHAR_BYTE8_P (c)) c = CHAR_TO_BYTE8 (c); c |= modifiers; next_char = READCHAR; c 0x04000030 int next_char 0x00000030 int read_from_string_index 0x00000007 int read_from_string_index_byte 0x00000007 int read_from_string_limit 0x00000008 int ok = (next_char <= 040 || (next_char < 0200 && strchr ("\"';()[]#?`,.", next_char) != NULL)); ok = 0 => error Hope you can decipher this. -- Fabrice