void construct_from_serial(char *data,int length,hash *array){ char *start_of_split=data; char *end_of_split=NULL; while(length>(start_of_split-data)){ end_of_split=strchr(start_of_split,'\0')+1; //The +1 is to jump over the control char assign_element(array,start_of_split,end_of_split, sizeof(int16_t)); start_of_split=end_of_split+sizeof(int16_t); } }
int i_execute_line (SOURCE_FILE * sf,const int todo) { l_get_line(sf);pline = line; l_get_token(); if (token_type==TT_LINE_END) { return EXE_DO;// skip empty line } else if (IS_KEYWORD(token_type)) { if (token_type==KEY_END) { return EXE_END; } else if (token_type==KEY_IF) { return i_execute_if (sf,todo); } else if (token_type==KEY_WHILE) { return i_execute_while(sf,todo); } else if (token_type==KEY_REPEAT) { return i_execute_repeat(sf,todo); } if (token_type==KEY_UNTIL) { return EXE_UNTIL; } else if (token_type==KEY_FOR) { return i_execute_for(sf,todo); } else if (token_type==KEY_CASE) { return i_execute_case(sf,todo); } else if (token_type==KEY_ELSEIF) { return EXE_ELSEIF; } else if (token_type==KEY_WHEN) { return EXE_WHEN; } else if (token_type==KEY_ELSE) { return EXE_ELSE; } if (!todo) return EXE_DO; if (token_type==KEY_BREAK) { return EXE_BREAK; } else if (token_type==KEY_RETURN) { return EXE_RETURN; } else if (token_type==KEY_GOSUB) { extern int i_call_sub (SOURCE_FILE *,const char *); l_get_token(); return i_call_sub(sf,token); } else if (token_type==KEY_DIM) { ARRAY * array; long size; while(1) { l_get_token(); // new array array = (ARRAY*)calloc(sizeof(ARRAY),1); array->name = s_strdup(token); list_push(&list_array,array); // l_get_token();// skip '(' size = (long)calc_check(FALSE,pline); if (size<=0) { merror_msg("illegal array size %d!",size); } array->size = size; array->array = calloc(sizeof(real),size); { int i; for (i=0;i<size;++i) array->array[i] = 0.0; } l_get_token();// skip ')' l_get_token(); if (token_type==TT_COM) continue; else if (token_type==TT_LINE_END) break; } } else if (token_type==KEY_EXIT) { d_exit(); } } else if(token_type==TT_ID) { if (str_eq(token,"print")) { while(1) { l_get_token(); if (token_type==TT_STRING) { printf("%s",token); } else { real result; char buf[128]; l_put_back(); result = calc_check(FALSE,pline); d_ftoa(result,buf); printf(buf); } l_get_token(); if (token_type==TT_LINE_END)break; }//while }//print else if (str_eq(token,"input")) { VAR * v;char buf[64]; while(1) { l_get_token(); v = get_var(token); gets(64,buf);puts(buf); v->value = atof(buf); l_get_token(); if (token_type==TT_LINE_END)break; }//while }//input else { ARRAY * a; VAR * var; var = find_var(token); if (var!=NULL) { l_get_token(); //skip '=' var->value = calc_check(FALSE,pline); return EXE_DO; } a = find_array(token); if(a!=NULL) { int index; l_get_token();//skip ( index = (int)calc_check(FALSE,pline); // delete this line,calc_check call skip ( automatically //l_get_token();//skip ) l_get_token();// skip = assign_element(a,index,calc_check(FALSE,pline)); return EXE_DO; } var = create_var(token); l_get_token(); //skip '=' var->value = calc_check(FALSE,pline); return EXE_DO; }//assign }// TT_ID else { merror_illegal_token(); } return EXE_DO; }