--- stack/stack.c 2002/02/08 02:28:41 1.56 +++ stack/stack.c 2002/02/08 03:45:00 1.58 @@ -361,7 +361,7 @@ printf("%d", stack_head->item->content.val); break; case string: - printf("\"%s\"", (char*)stack_head->item->content.ptr); + printf("%s", (char*)stack_head->item->content.ptr); break; case symb: printf("%s", ((symbol *)(stack_head->item->content.ptr))->id); @@ -1023,7 +1023,7 @@ } /* If-Then */ -extern void ift(environment *env) { +extern void sx_6966(environment *env) { int truth; @@ -1053,9 +1053,8 @@ toss(env); } - /* If-Then-Else */ -extern void ifte(environment *env) { +extern void ifelse(environment *env) { int truth; @@ -1090,3 +1089,40 @@ eval(env); } +/* while */ +extern void sx_7768696c65(environment *env) { + + int truth; + + if((env->head)==NULL || env->head->next==NULL) { + printerr("Too Few Arguments"); + env->err=1; + return; + } + + do { + swap(env); if(env->err) return; + dup(env); if(env->err) return; + eval(env); if(env->err) return; + + if(env->head->item->type != integer) { + printerr("Bad Argument Type"); + env->err=2; + return; + } + + truth= env->head->item->content.val; + + toss(env); if(env->err) return; + swap(env); if(env->err) return; + + if(truth) { + dup(env); + eval(env); + } else { + toss(env); + toss(env); + } + + } while(truth); +}