/* runtime.c: Sally language runtime support v2003.1104 (c)2003 Cat's Eye Technologies. All rights reserved. */ #include /****************************** RUNTIME ******************************/ int stack[256]; int sp=0; int pop(void) { if (sp > 0) return stack[sp--]; else return 0; } void push(int i) { if (sp < 255) stack[++sp] = i; } void apply_add(void) { int arg2 = pop(); int arg1 = pop(); push(arg1 + arg2); } void apply_sub(void) { int arg2 = pop(); int arg1 = pop(); push(arg1 - arg2); } void apply_mul(void) { int arg2 = pop(); int arg1 = pop(); push(arg1 * arg2); } void apply_div(void) { int arg2 = pop(); int arg1 = pop(); push(arg1 / arg2); } void apply_dup(void) { int arg1 = pop(); push(arg1); push(arg1); } void apply_pop(void) { pop(); } void apply_print(void) { fprintf(stdout, "%c", (char)pop()); } void apply_input(void) { push(fgetc(stdin)); } /* END of runtime.c */