static char*prefix = 0;
+static void unescapeString(string_t * tmp)
+{
+ char *p, *p1;
+ /* fixme - this routine expects the string to be
+ null-terminated */
+
+ for (p1=tmp->str; (p=strchr(p1, '\\')); p1 = p+1)
+ {
+ switch(p[1])
+ {
+ case '\\': p[1] = '\\'; tmp->len--; break;
+ case '"': p[1] = '"'; tmp->len--; break;
+ case 'b': p[1] = '\b'; tmp->len--; break;
+ case 'f': p[1] = '\f'; tmp->len--; break;
+ case 'n': p[1] = '\n'; tmp->len--; break;
+ case 'r': p[1] = '\r'; tmp->len--; break;
+ case 't': p[1] = '\t'; tmp->len--; break;
+ default:
+ continue;
+ }
+ strcpy(p, p+1);
+ }
+}
+
static void store(enum type_t type, int line, int column, char*text, int length)
{
struct token_t token;
break;
case STRING:
string_set2(&tmp, text+1, length-2);
+ unescapeString(&tmp);
token.text = (char*)mem_putstring(&strings, tmp);
break;
case TWIP:
{NAME} {s(IDENTIFIER);c();}
"[" {c();BEGIN(BINARY);}
{S} {c();}
-. {char c,c1=0;
+. {char c,c1=yytext[0];
printf("Syntax error in line %d, %d: %s", line, column, yytext);
while(1) {
c=input();
- if(!c1) c1=c;
if(c=='\n' || c==EOF)
break;
printf("%c", c);