--- stack/stack.c 2002/02/08 03:10:30 1.57 +++ 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); @@ -1088,3 +1088,41 @@ 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); +}