/[cvs]/stack/stack.c
ViewVC logotype

Diff of /stack/stack.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.39 by teddy, Wed Feb 6 11:39:20 2002 UTC revision 1.43 by masse, Wed Feb 6 23:27:22 2002 UTC
# Line 454  extern void eval(environment *env) Line 454  extern void eval(environment *env)
454    }    }
455  }  }
456    
457    /* Reverse a list */
458    extern void rev(environment *env){
459      stackitem *old_head, *new_head, *item;
460    
461      if((env->head)==NULL) {
462        printerr("Too Few Arguments");
463        env->err=1;
464        return;
465      }
466    
467      if(env->head->item->type!=list) {
468        printerr("Bad Argument Type");
469        env->err=2;
470        return;
471      }
472    
473      old_head=(stackitem *)(env->head->item->content.ptr);
474      new_head=NULL;
475      while(old_head != NULL){
476        item=old_head;
477        old_head=old_head->next;
478        item->next=new_head;
479        new_head=item;
480      }
481      env->head->item->content.ptr=new_head;
482    }
483    
484  /* Make a list. */  /* Make a list. */
485  extern void pack(environment *env)  extern void pack(environment *env)
486  {  {
# Line 494  extern void pack(environment *env) Line 521  extern void pack(environment *env)
521    temp->item= pack;    temp->item= pack;
522    
523    push(&(env->head), temp);    push(&(env->head), temp);
524      rev(env);
525  }  }
526    
527  /* Parse input. */  /* Parse input. */
# Line 509  void stack_read(environment *env, char * Line 537  void stack_read(environment *env, char *
537    rest= malloc(inlength);    rest= malloc(inlength);
538    
539    do {    do {
540        /* If comment */
541        if((convert= sscanf(in_line, "#%[^\n\r]", rest))) {
542          free(temp); free(rest);
543          return;
544        }
545    
546      /* If string */      /* If string */
547      if((convert= sscanf(in_line, "\"%[^\"\n\r]\" %[^\n\r]", temp, rest))) {      if((convert= sscanf(in_line, "\"%[^\"\n\r]\" %[^\n\r]", temp, rest))) {
548        push_cstring(&(env->head), temp);        push_cstring(&(env->head), temp);
# Line 587  extern void expand(environment *env) Line 621  extern void expand(environment *env)
621      return;      return;
622    }    }
623    
624      rev(env);
625    
626      if(env->err)
627        return;
628    
629    /* The first list element is the new stack head */    /* The first list element is the new stack head */
630    new_head= temp= env->head->item->content.ptr;    new_head= temp= env->head->item->content.ptr;
631    
# Line 603  extern void expand(environment *env) Line 642  extern void expand(environment *env)
642    
643  }  }
644    
 /* Reverse a list */  
 extern void rev(environment *env){  
   stackitem *old_head, *new_head, *item;  
   
   if((env->head)==NULL) {  
     printerr("Too Few Arguments");  
     env->err=1;  
     return;  
   }  
   
   if(env->head->item->type!=list) {  
     printerr("Bad Argument Type");  
     env->err=2;  
     return;  
   }  
   
   old_head=(stackitem *)(env->head->item->content.ptr);  
   new_head=NULL;  
   while(old_head != NULL){  
     item=old_head;  
     old_head=old_head->next;  
     item->next=new_head;  
     new_head=item;  
   }  
   env->head->item->content.ptr=new_head;  
 }  
   
645  /* Compares two elements by reference. */  /* Compares two elements by reference. */
646  extern void eq(environment *env)  extern void eq(environment *env)
647  {  {
# Line 796  int main() Line 808  int main()
808      }      }
809      printf("okidok\n ");      printf("okidok\n ");
810    }    }
811      quit(&myenv);
812    exit(EXIT_SUCCESS);    return EXIT_FAILURE;
813  }  }

Legend:
Removed from v.1.39  
changed lines
  Added in v.1.43

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26