From 6285082776d9668f4663c36fbed571ad64d7fa0b Mon Sep 17 00:00:00 2001 From: bnewbold Date: Mon, 24 Dec 2012 04:17:52 +0100 Subject: forgot modulo operator somehow --- sexpr.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'sexpr.c') diff --git a/sexpr.c b/sexpr.c index fbe490b..7e5644c 100644 --- a/sexpr.c +++ b/sexpr.c @@ -26,10 +26,39 @@ void test(); static struct node node_table[NUMNODE]; static int newest_node = 0; +char inbuffer[256]; + +int sstrlen(char *s, int max); + +int sstrlen(char *s, int max) { + int i; + for (i=0; i "); + fgets(inbuffer, 256, stdin); + len = sstrlen(inbuffer, 256); + if (len == 256 || len < 1) + fprintf(stderr, "Invalid input!\n"); + else + break; + } + play(parse(inbuffer, 0, len-2)); + //play(parse(DEFAULT, 0, strlen(DEFAULT)-1)); }; void test() { @@ -82,7 +111,7 @@ struct node *parse(char *s, int start, int end) { } // various binary operators - if ( strchr("*/%+-&^|<>", s[start+1]) != NULL) { + if ( strchr("*/%+-&^|<>%", s[start+1]) != NULL) { cval = s[start+1]; offset = 3; if (cval == '<' && s[start+2] == '<' && s[start+3] == ' ') { @@ -137,6 +166,8 @@ unsigned int execute(struct node *sexpr, unsigned int t) { return execute(sexpr->lval, t) & execute(sexpr->rval, t); case '|': return execute(sexpr->lval, t) | execute(sexpr->rval, t); + case '%': + return execute(sexpr->lval, t) % execute(sexpr->rval, t); case 'r': return execute(sexpr->lval, t) >> execute(sexpr->rval, t); case 'l': -- cgit v1.2.3