--- stack/stack.c 2002/02/08 16:33:14 1.64 +++ stack/stack.c 2002/02/09 00:40:45 1.66 @@ -1192,3 +1192,73 @@ free_val(test); free_val(loop); } + +/* For-loop */ +extern void sx_666f72(environment *env) { + + value *loop, *foo; + stackitem *iterator; + + if((env->head)==NULL || env->head->next==NULL) { + printerr("Too Few Arguments"); + env->err=1; + return; + } + + if(env->head->next->item->type != list) { + printerr("Bad Argument Type"); + env->err=2; + return; + } + + loop= env->head->item; + loop->refcount++; + toss(env); if(env->err) return; + + foo= env->head->item; + foo->refcount++; + toss(env); if(env->err) return; + + iterator= foo->content.ptr; + + while(iterator!=NULL) { + push_val(&(env->head), iterator->item); + push_val(&(env->head), loop); + eval(env); if(env->err) return; + iterator= iterator->next; + } + + free_val(loop); + free_val(foo); +} + +/* 'to' */ +extern void to(environment *env) { + int i, start, ending; + + if((env->head)==NULL || env->head->next==NULL) { + printerr("Too Few Arguments"); + env->err=1; + return; + } + + if(env->head->item->type!=integer + || env->head->next->item->type!=integer) { + printerr("Bad Argument Type"); + env->err=2; + return; + } + + ending= env->head->item->content.val; + toss(env); if(env->err) return; + start= env->head->item->content.val; + toss(env); if(env->err) return; + + push_sym(env, "["); + + for(i= start; i<= ending; i++) + push_int(&(env->head), i); + + push_sym(env, "["); + pack(env); if(env->err) return; +}