timepic: string support

This commit is contained in:
aiju 2015-09-29 20:49:28 +02:00
parent cde69a7822
commit a7b06e0fdd

View file

@ -55,6 +55,7 @@ enum {
SYM = -2, SYM = -2,
NUM = -3, NUM = -3,
EOF = -4, EOF = -4,
STR = -5,
}; };
static int static int
@ -71,6 +72,7 @@ Tfmt(Fmt *f)
case SYM: return fmtprint(f, "'%s'", sname); case SYM: return fmtprint(f, "'%s'", sname);
case NUM: return fmtprint(f, "%g", sval); case NUM: return fmtprint(f, "%g", sval);
case EOF: return fmtprint(f, "EOF"); case EOF: return fmtprint(f, "EOF");
case STR: return fmtprint(f, "%#q", sname);
default: return fmtprint(f, "%d", n); default: return fmtprint(f, "%d", n);
} }
} }
@ -210,6 +212,14 @@ lex(void)
*p = 0; *p = 0;
return SYM; return SYM;
} }
if(c == '\''){
for(p = sname; c = Bgetc(bp), c != '\'' || Bgetc(bp) == '\''; )
if(p < sname + sizeof(sname) - 1)
*p++ = c;
Bungetc(bp);
*p = 0;
return STR;
}
return c; return c;
} }
@ -337,6 +347,9 @@ parseval(Event *e)
return VH; return VH;
e->data = smprint("%g", sval); e->data = smprint("%g", sval);
return VMULT; return VMULT;
case STR:
e->data = strdup(sname);
return VMULT;
default: default:
error(lineno, "unexpected %T", t); error(lineno, "unexpected %T", t);
return VZ; return VZ;
@ -651,6 +664,9 @@ diagram(char *l)
else else
signal(s->name); signal(s->name);
break; break;
case STR:
signal(sname);
break;
case CMD: case CMD:
if(strcmp(sname, "TPE") == 0) if(strcmp(sname, "TPE") == 0)
goto end; goto end;
@ -714,6 +730,7 @@ main(int argc, char **argv)
int i; int i;
fmtinstall('T', Tfmt); fmtinstall('T', Tfmt);
quotefmtinstall();
ARGBEGIN { ARGBEGIN {
default: usage(); default: usage();