--- stack/stack.c 2002/02/07 04:34:42 1.48 +++ stack/stack.c 2002/02/07 05:24:19 1.49 @@ -531,7 +531,7 @@ toss(env); if(env->err) return; temp_string= malloc(strlen((char*)temp_val->content.ptr)+5); - strcat(temp_string, "[ "); + strcpy(temp_string, "[ "); strcat(temp_string, (char*)temp_val->content.ptr); strcat(temp_string, " ]"); stack_read(env, temp_string); @@ -905,12 +905,33 @@ /* + */ extern void sx_2b(environment *env) { int a, b; + size_t len; + char* new_string; + value *a_val, *b_val; if((env->head)==NULL || env->head->next==NULL) { printerr("Too Few Arguments"); env->err=1; return; } + + if(env->head->item->type==string + && env->head->next->item->type==string) { + a_val= env->head->item; + b_val= env->head->next->item; + a_val->refcount++; + b_val->refcount++; + toss(env); if(env->err) return; + toss(env); if(env->err) return; + len= strlen(a_val->content.ptr)+strlen(b_val->content.ptr)+1; + new_string= malloc(len); + strcpy(new_string, b_val->content.ptr); + strcat(new_string, a_val->content.ptr); + free_val(a_val); free_val(b_val); + push_cstring(&(env->head), new_string); + free(new_string); + return; + } if(env->head->item->type!=integer || env->head->next->item->type!=integer) {