From fe6314692dbdbf69db8b3e8a3979c1f1d21d621c Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 6 Nov 2021 17:58:47 +0100 Subject: replaced if else chain, TODO: bsearch --- main.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 2522e07..e81d50b 100644 --- a/main.c +++ b/main.c @@ -4,6 +4,7 @@ #include "util.h" #include #include +#include "cmds.h" #include #define BUF_SIZE 50 @@ -22,8 +23,9 @@ int main() { s.prompt = "[%d]> "; stack stack = {{0}, 0}; /* initialize value stack */ - s.stack = stack; + s.stk = stack; s.command_count = 0; + init_state(&s); /* start reading from defbuf */ char buf[BUF_SIZE]; @@ -31,49 +33,53 @@ int main() { fprintf(s.defout, s.prompt, s.command_count, s.last_op); s.last_op = 0; char *endptr = NULL; - if (s.stack.count == STACK_SIZE) err(1, "exceeded stack size"); + if (s.stk.count == STACK_SIZE) err(1, "exceeded stk size"); fgets(buf, BUF_SIZE, s.defbuf); buf[strcspn(buf, "\n")] = 0; double interpreted = strtod(buf, &endptr); if (interpreted == (double)0 && endptr == buf) { /* strtod returned the char it could not read */ TYPE t = discriminate(buf); if (t == OPERATOR ) { - if (s.stack.count <= 1) { + printf("func\n"); + if (s.stk.count <= 1) { fprintf(s.defout, "not enough arguments\n"); continue; } char operator = buf[0]; if (operator == '+') { - s.stack.val[s.stack.count-2] = s.stack.val[s.stack.count-1]+s.stack.val[s.stack.count-2]; - s.stack.val[s.stack.count--] = 0; /* lower count by 1 */ + s.stk.val[s.stk.count-2] = s.stk.val[s.stk.count-1]+s.stk.val[s.stk.count-2]; + s.stk.val[s.stk.count--] = 0; /* lower count by 1 */ s.last_op = '+'; } else if (operator == '-') { - s.stack.val[s.stack.count-2] = s.stack.val[s.stack.count-2]-s.stack.val[s.stack.count-1]; - s.stack.val[s.stack.count--] = 0; /* lower count by 1 */ + s.stk.val[s.stk.count-2] = s.stk.val[s.stk.count-2]-s.stk.val[s.stk.count-1]; + s.stk.val[s.stk.count--] = 0; /* lower count by 1 */ s.last_op = '-'; } else if (operator == '*') { - s.stack.val[s.stack.count-2] = s.stack.val[s.stack.count-2]*s.stack.val[s.stack.count-1]; - s.stack.val[s.stack.count--] = 0; /* lower count by 1 */ + s.stk.val[s.stk.count-2] = s.stk.val[s.stk.count-2]*s.stk.val[s.stk.count-1]; + s.stk.val[s.stk.count--] = 0; /* lower count by 1 */ s.last_op = '*'; } else if (operator == '/') { - s.stack.val[s.stack.count-2] = s.stack.val[s.stack.count-2]/s.stack.val[s.stack.count-1]; - s.stack.val[s.stack.count--] = 0; /* lower count by 1 */ + s.stk.val[s.stk.count-2] = s.stk.val[s.stk.count-2]/s.stk.val[s.stk.count-1]; + s.stk.val[s.stk.count--] = 0; /* lower count by 1 */ s.last_op = '/'; - } + } else; } else if (t == FUNCTION) { if (strcmp(buf, "quit") == 0) { fprintf(s.defout, "quitting, bye!\n"); exit(0); - } fprintf(s.defout, "unknown function %s\n", buf); - continue; + } else exec(buf, &s); } } else { /* we found a number */ - s.stack.val[s.stack.count++] = interpreted; + printf("number\n"); + s.stk.val[s.stk.count++] = interpreted; } s.command_count++; - for (int i = 0; i < s.stack.count; i++) { - fprintf(s.defout,"%d → %f\n",i, s.stack.val[i]); + for (int i = 0; i < s.stk.count; i++) { + fprintf(s.defout,"%d → %f\n",i, s.stk.val[i]); } } + /* free stuff */ + free (s.sorted); } + -- cgit 1.4.1-2-gfad0