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

Diff of /stack/stack.c

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

revision 1.72 by masse, Tue Feb 12 22:13:12 2002 UTC revision 1.74 by masse, Tue Feb 12 23:59:05 2002 UTC
# Line 574  extern void rev(environment *env){ Line 574  extern void rev(environment *env){
574  /* Make a list. */  /* Make a list. */
575  extern void pack(environment *env)  extern void pack(environment *env)
576  {  {
   void* delimiter;  
577    stackitem *iterator, *temp;    stackitem *iterator, *temp;
578    value *pack;    value *pack;
579    
   delimiter= env->head->item->content.ptr; /* Get delimiter */  
   toss(env);  
   
580    iterator= env->head;    iterator= env->head;
581    
582    if(iterator==NULL || iterator->item->content.ptr==delimiter) {    if(iterator==NULL
583         || (iterator->item->type==symb
584         && ((symbol*)(iterator->item->content.ptr))->id[0]=='[')) {
585      temp= NULL;      temp= NULL;
586      toss(env);      toss(env);
587    } else {    } else {
588      /* Search for first delimiter */      /* Search for first delimiter */
589      while(iterator->next!=NULL      while(iterator->next!=NULL
590            && iterator->next->item->content.ptr!=delimiter)            && (iterator->next->item->type!=symb
591              || ((symbol*)(iterator->next->item->content.ptr))->id[0]!='['))
592        iterator= iterator->next;        iterator= iterator->next;
593            
594      /* Extract list */      /* Extract list */
# Line 607  extern void pack(environment *env) Line 606  extern void pack(environment *env)
606    pack->content.ptr= temp;    pack->content.ptr= temp;
607    pack->refcount= 1;    pack->refcount= 1;
608    
609    temp= malloc(sizeof(stackitem));    push_val(env, pack);
   temp->item= pack;  
   
   push(env, temp);  
610    rev(env);    rev(env);
611  }  }
612    
# Line 1145  extern void sx_666f72(environment *env) Line 1141  extern void sx_666f72(environment *env)
1141  /* 'to' */  /* 'to' */
1142  extern void to(environment *env) {  extern void to(environment *env) {
1143    int i, start, ending;    int i, start, ending;
1144      stackitem *temp_head;
1145      value *temp_val;
1146        
1147    if((env->head)==NULL || env->head->next==NULL) {    if((env->head)==NULL || env->head->next==NULL) {
1148      printerr("Too Few Arguments");      printerr("Too Few Arguments");
# Line 1164  extern void to(environment *env) { Line 1162  extern void to(environment *env) {
1162    start= env->head->item->content.val;    start= env->head->item->content.val;
1163    toss(env); if(env->err) return;    toss(env); if(env->err) return;
1164    
1165    push_sym(env, "[");    temp_head= env->head;
1166      env->head= NULL;
1167    
1168    if(ending>=start) {    if(ending>=start) {
1169      for(i= start; i<=ending; i++)      for(i= ending; i>=start; i--)
1170        push_int(env, i);        push_int(env, i);
1171    } else {    } else {
1172      for(i= start; i>=ending; i--)      for(i= ending; i<=start; i++)
1173        push_int(env, i);        push_int(env, i);
1174    }    }
1175    
1176    push_sym(env, "[");    temp_val= malloc(sizeof(value));
1177    pack(env); if(env->err) return;    temp_val->content.ptr= env->head;
1178      temp_val->refcount= 1;
1179      temp_val->type= list;
1180      env->head= temp_head;
1181      push_val(env, temp_val);
1182  }  }
1183    
1184  /* Read a string */  /* Read a string */
# Line 1222  extern void read(environment *env) { Line 1225  extern void read(environment *env) {
1225    } else if(sscanf(env->in_string, symbform, match, rest) > 0) {    } else if(sscanf(env->in_string, symbform, match, rest) > 0) {
1226      push_sym(env, match);      push_sym(env, match);
1227    } else if(sscanf(env->in_string, ebrackform, rest) > 0) {    } else if(sscanf(env->in_string, ebrackform, rest) > 0) {
     push_sym(env, "[");  
1228      pack(env); if(env->err) return;      pack(env); if(env->err) return;
1229      if(depth!=0) depth--;      if(depth!=0) depth--;
1230    } else if(sscanf(env->in_string, semicform, rest) > 0) {    } else if(sscanf(env->in_string, semicform, rest) > 0) {

Legend:
Removed from v.1.72  
changed lines
  Added in v.1.74

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26