--- stack/stack.c 2002/02/02 14:50:44 1.19 +++ stack/stack.c 2002/02/02 15:26:10 1.21 @@ -208,7 +208,7 @@ printf("%d", (*stack_head)->content.val); break; case string: - printf("%s", (char*)(*stack_head)->content.ptr); + printf("\"%s\"", (char*)(*stack_head)->content.ptr); break; case ref: printf("%s", ((stackitem*)(*stack_head)->content.ptr)->id); @@ -243,7 +243,7 @@ { if(*stack_head != NULL) { print_st(*stack_head, 1); - printf("\n"); + nl(); } else { printerr("Stack empty"); } @@ -312,6 +312,7 @@ int itemp; size_t inlength= strlen(in_line)+1; int convert= 0; + static int non_eval_flag= 0; temp= malloc(inlength); rest= malloc(inlength); @@ -334,20 +335,33 @@ break; } /* If symbol */ - if((convert= sscanf(in_line, "%[^] ;\n\r]%[^\n\r]", temp, rest))) { + if((convert= sscanf(in_line, "%[^][ ;\n\r]%[^\n\r]", temp, rest))) { push_ref(stack_head, in_hash, temp); break; } /* If single char */ if((convert= sscanf(in_line, "%c%[^\n\r]", temp, rest))) { if(*temp==';') { - eval(stack_head); /* Evaluate top element */ + if(!non_eval_flag) { + eval(stack_head); /* Evaluate top element */ + break; + } + + push_ref(stack_head, in_hash, ";"); break; } if(*temp==']') { push_ref(stack_head, in_hash, "["); pack(stack_head); + if(non_eval_flag!=0) + non_eval_flag--; + break; + } + + if(*temp=='[') { + push_ref(stack_head, in_hash, "["); + non_eval_flag++; break; } }