diff --git a/rcbasic_build/main.cpp b/rcbasic_build/main.cpp index 03ecf90..d8298ba 100644 --- a/rcbasic_build/main.cpp +++ b/rcbasic_build/main.cpp @@ -167,354 +167,7 @@ bool rc_preprocessor() return true; } -bool Array_Macros(int tmp_start_token) -{ - //returning true is just saying there were no syntax errors found - if(tmp_token[tmp_start_token].length() < 5) - return true; - if(StringToLower(tmp_token[tmp_start_token].substr(4)).compare("arraydim")!=0 && StringToLower(tmp_token[tmp_start_token].substr(4)).compare("arraysize")!=0 && - StringToLower(tmp_token[tmp_start_token].substr(4)).compare("arraycopy")!=0 && StringToLower(tmp_token[tmp_start_token].substr(4)).compare("arrayfill")!=0) - return true; - int64_t arr_id = 0; - vector tmp_macro_token; - vector tmp_current_token; - //int ArrayDim_id = getIDInScope_ByIndex("ArrayDim"); - for(int i = tmp_start_token; i < tmp_token.size(); i++) - { - if(tmp_token[i].substr(0,4).compare("")==0) - { - if(StringToLower(tmp_token[i].substr(4)).compare("arraydim")==0) - { - if(tmp_token[i+1].compare("")!=0) - { - rc_setError("Invalid use of ArrayDim"); - return false; - } - if(tmp_token[i+2].substr(0,4).compare("")==0) - { - arr_id = getIDInScope_ByIndex(tmp_token[i+2].substr(4)); - if(arr_id < 0) - { - rc_setError("Identifier must be declared before call to ArrayDim"); - return false; - } - - id[arr_id].isArrayArg = true; - - } - else - { - rc_setError("Expected Identifier in ArrayDim"); - return false; - } - - int end_token = i+2; - int expr_scope = 1; - for(end_token; end_token < tmp_token.size(); end_token++) - { - if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope++; - else if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope--; - - if(expr_scope==0 && tmp_token[end_token].compare("")==0) - break; - } - - tmp_macro_token.clear(); - for(int n = i; n <= end_token; n++) - tmp_macro_token.push_back(tmp_token[n]); - - //cout << "<---- DEBUG ---->" << i << endl; - //for(int n = 0; n < token.size(); n++) - // cout <<"token[" << n << "] = " << token[n] << endl; - - tmp_current_token.clear(); - for(int n = 0; n < token.size(); n++) - tmp_current_token.push_back(token[n]); - - token.clear(); - for(int n = 0; n < tmp_macro_token.size(); n++) - token.push_back(tmp_macro_token[n]); - - //for(int n = 0; n < token.size(); n++) - // cout <<"new token[" << n << "] = " << token[n] << endl; - - - if(!eval_expression()) - { - rc_setError("Could not evaluate ArrayDim"); - return false; - } - - for(int n = i; n <= end_token; n++) - tmp_token[n] = token[n-i]; - - token.clear(); - for(int n = 0; n < tmp_current_token.size(); n++) - token.push_back(tmp_current_token[n]); - - //for(int n = 0; n < token.size(); n++) - // cout <<"final token[" << n << "] = " << token[n] << endl; - return true; - - } - else if(StringToLower(tmp_token[i].substr(4)).compare("arraysize")==0) - { - if(tmp_token[i+1].compare("")!=0) - { - rc_setError("Invalid use of ArraySize"); - return false; - } - if(tmp_token[i+2].substr(0,4).compare("")==0) - { - arr_id = getIDInScope_ByIndex(tmp_token[i+2].substr(4)); - if(arr_id < 0) - { - rc_setError("Identifier must be declared before call to ArraySize"); - return false; - } - - id[arr_id].isArrayArg = true; - - } - else - { - rc_setError("Expected Identifier in ArraySize"); - return false; - } - - int end_token = i+2; - int expr_scope = 1; - for(end_token; end_token < tmp_token.size(); end_token++) - { - if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope++; - else if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope--; - - if(expr_scope==0 && tmp_token[end_token].compare("")==0) - break; - } - - tmp_macro_token.clear(); - for(int n = i; n <= end_token; n++) - tmp_macro_token.push_back(tmp_token[n]); - - - tmp_current_token.clear(); - for(int n = 0; n < token.size(); n++) - tmp_current_token.push_back(token[n]); - - token.clear(); - for(int n = 0; n < tmp_macro_token.size(); n++) - token.push_back(tmp_macro_token[n]); - - if(!eval_expression(0, token.size()-1, true))//i, end_token)) - { - rc_setError("Could not evaluate ArraySize expression"); - //for(int n = 0; n < token.size(); n++) - // cout << "token["<< n << "] = " << token[n] << endl; - return false; - } - - for(int n = i; n <= end_token; n++) - tmp_token[n] = token[n-i]; - - token.clear(); - for(int n = 0; n < tmp_current_token.size(); n++) - token.push_back(tmp_current_token[n]); - - return true; - } - else if(StringToLower(tmp_token[i].substr(4)).compare("arraycopy")==0) - { - if(tmp_token.size() < 5) - { - rc_setError("Ivalid use of ArrayCopy"); - return false; - } - - if(tmp_token[i+1].compare("")!=0) - { - rc_setError("Invalid use of ArrayCopy"); - return false; - } - - if(tmp_token[i+2].substr(0,4).compare("")==0) - { - arr_id = getIDInScope_ByIndex(tmp_token[i+2].substr(4)); - if(arr_id < 0) - { - rc_setError("Identifier must be declared before call to ArrayCopy"); - return false; - } - - id[arr_id].isArrayArg = true; - - } - else - { - rc_setError("Expected Identifier in ArrayCopy"); - return false; - } - - if(!tmp_token[i+3].substr(0,7).compare("")==0) - { - rc_setError("Expected comma in ArrayCopy"); - return false; - } - - if(tmp_token[i+4].substr(0,4).compare("")==0) - { - arr_id = getIDInScope_ByIndex(tmp_token[i+4].substr(4)); - if(arr_id < 0) - { - rc_setError("Identifier must be declared before call to ArrayCopy"); - return false; - } - - id[arr_id].isArrayArg = true; - - } - else - { - rc_setError("Expected Identifier in ArrayCopy"); - return false; - } - - int end_token = i+4; - int expr_scope = 1; - for(end_token; end_token < tmp_token.size(); end_token++) - { - if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope++; - else if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope--; - - if(expr_scope==0 && tmp_token[end_token].compare("")==0) - break; - } - - tmp_macro_token.clear(); - for(int n = i; n <= end_token; n++) - tmp_macro_token.push_back(tmp_token[n]); - - //cout << "<---- DEBUG ---->" << i << endl; - //for(int n = 0; n < token.size(); n++) - // cout <<"token[" << n << "] = " << token[n] << endl; - - tmp_current_token.clear(); - for(int n = 0; n < token.size(); n++) - tmp_current_token.push_back(token[n]); - - token.clear(); - for(int n = 0; n < tmp_macro_token.size(); n++) - token.push_back(tmp_macro_token[n]); - - //for(int n = 0; n < token.size(); n++) - // cout <<"new token[" << n << "] = " << token[n] << endl; - - - if(!eval_expression()) - { - rc_setError("Could not evaluate ArrayCopy"); - return false; - } - - for(int n = i; n <= end_token; n++) - tmp_token[n] = token[n-i]; - - token.clear(); - for(int n = 0; n < tmp_current_token.size(); n++) - token.push_back(tmp_current_token[n]); - - //for(int n = 0; n < token.size(); n++) - // cout <<"final token[" << n << "] = " << token[n] << endl; - return true; - - } - else if(StringToLower(tmp_token[i].substr(4)).compare("arrayfill")==0) - { - if(tmp_token[i+1].compare("")!=0) - { - rc_setError("Invalid use of ArrayFill"); - return false; - } - if(tmp_token[i+2].substr(0,4).compare("")==0) - { - arr_id = getIDInScope_ByIndex(tmp_token[i+2].substr(4)); - if(arr_id < 0) - { - rc_setError("Identifier must be declared before call to ArrayFill"); - return false; - } - - id[arr_id].isArrayArg = true; - - } - else - { - rc_setError("Expected Identifier in ArrayFill"); - return false; - } - - int end_token = i+2; - int expr_scope = 1; - for(end_token; end_token < tmp_token.size(); end_token++) - { - if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope++; - else if(tmp_token[end_token].compare("")==0 || tmp_token[end_token].compare("")==0) - expr_scope--; - - if(expr_scope==0 && tmp_token[end_token].compare("")==0) - break; - } - - tmp_macro_token.clear(); - for(int n = i; n <= end_token; n++) - tmp_macro_token.push_back(tmp_token[n]); - - //cout << "<---- DEBUG ---->" << i << endl; - //for(int n = 0; n < token.size(); n++) - // cout <<"token[" << n << "] = " << token[n] << endl; - - tmp_current_token.clear(); - for(int n = 0; n < token.size(); n++) - tmp_current_token.push_back(token[n]); - - token.clear(); - for(int n = 0; n < tmp_macro_token.size(); n++) - token.push_back(tmp_macro_token[n]); - - //for(int n = 0; n < token.size(); n++) - // cout <<"new token[" << n << "] = " << token[n] << endl; - - - if(!eval_expression()) - { - rc_setError("Could not evaluate ArrayFill"); - return false; - } - - for(int n = i; n <= end_token; n++) - tmp_token[n] = token[n-i]; - - token.clear(); - for(int n = 0; n < tmp_current_token.size(); n++) - token.push_back(tmp_current_token[n]); - - //for(int n = 0; n < token.size(); n++) - // cout <<"final token[" << n << "] = " << token[n] << endl; - return true; - - } - } - } - return false; -} bool rc_eval(string line) { diff --git a/rcbasic_build/parser.h b/rcbasic_build/parser.h index 644bfed..5f74a16 100644 --- a/rcbasic_build/parser.h +++ b/rcbasic_build/parser.h @@ -38,6 +38,7 @@ struct type_error_exception string error_log; string tk_reg; string resolve_reg; + int num_args; }; vector byref_type_exception; //This will store the error that might be generated if a user type var is in an expression without its dimensions expressed @@ -1133,7 +1134,7 @@ bool pre_parse(int start_token = 0, int end_token = -1, int pp_flags, bool eval_ } else if( (id[expr_id].type == ID_TYPE_BYREF_NUM || id[expr_id].type == ID_TYPE_BYREF_STR) && pp_flags == PP_FLAG_ARRAY) { - cout << "found array: " << id[expr_id].name << endl << endl; + //cout << "found array: " << id[expr_id].name << endl << endl; int s_scope = 0; int arr_token_start = i; int arr_token_end = i; @@ -1425,7 +1426,10 @@ bool pre_parse(int start_token = 0, int end_token = -1, int pp_flags, bool eval_ else if(!type_delete_flag) { if(arg_count != 0) + { rc_setError("[0]Expected " + rc_intToString(id[tmp_id].num_args) + " dimension in " + id[tmp_id].name); + return false; + } //cout << "ID_TYPE = " << id[tmp_id].type << ", " << arg_count << ", " << (has_child ? "true" : "false") << endl; @@ -1675,7 +1679,8 @@ bool pre_parse(int start_token = 0, int end_token = -1, int pp_flags, bool eval_ type_error_exception tx; tx.error_log = "[0]Expected " + rc_intToString(id[tmp_id].num_args) + " dimension in " + id[tmp_id].name; tx.tk_reg = token[i]; - //cout << "store = " << tx.tk_reg << endl; + tx.num_args = id[tmp_id].num_args; + //cout << "store = " << id[tmp_id].name << " = " << tx.tk_reg << " arg_count = " << arg_count << ", expected = " << id[tmp_id].num_args << endl; byref_type_exception.push_back(tx); byref_type_flag = false; } @@ -2253,6 +2258,8 @@ bool pre_parse(int start_token = 0, int end_token = -1, int pp_flags, bool eval_ expr_id = -1; } + //cout << "dbg data: " << expr_id << " arg = " << args[0] << " type = " << tmp_id_type << " name = " << id[expr_id].name << endl; + if(expr_id < 0) { rc_setError("ArrayFill macro function does not exists for variable type"); @@ -5610,8 +5617,13 @@ bool check_rule() } if(expr_result.substr(0,1).compare("n")==0) vm_asm.push_back("print " + expr_result); - else - vm_asm.push_back("print$ " + expr_result); + else if(expr_result.substr(0,1).compare("s")==0) + vm_asm.push_back("print$ " + expr_result); + else + { + rc_setError("Invalid expression in PRINT"); + return false; + } start_token = i; } } @@ -5624,8 +5636,13 @@ bool check_rule() } if(expr_result.substr(0,1).compare("n")==0) vm_asm.push_back("print " + expr_result); - else - vm_asm.push_back("print$ " + expr_result); + else if(expr_result.substr(0,1).compare("s")==0) + vm_asm.push_back("print$ " + expr_result); + else + { + rc_setError("Invalid expression in PRINT"); + return false; + } } if(last_token.compare("")!=0) vm_asm.push_back("println"); diff --git a/rcbasic_runtime/main.cpp b/rcbasic_runtime/main.cpp index fd2b00d..9edb8b7 100644 --- a/rcbasic_runtime/main.cpp +++ b/rcbasic_runtime/main.cpp @@ -2219,32 +2219,32 @@ void rc_push_str(string s_val) //current_s_stack_count++; } -uint64_t rc_string_array_dim(rc_strId s_var) +uint64_t rc_string_array_dim(rc_strId* s_var) { - rc_strId* s = (rc_strId*)s_var.sid_value.ref_parent; + rc_strId* s = (rc_strId*)s_var->sid_value.ref_parent; return s->dimensions; } -uint64_t rc_string_array_size(rc_strId s_var, int d_num) +uint64_t rc_string_array_size(rc_strId* s_var, int d_num) { switch(d_num) { case 1: - return s_var.dim[0]; + return s_var->dim[0]; break; case 2: - return s_var.dim[1]; + return s_var->dim[1]; break; case 3: - return s_var.dim[2]; + return s_var->dim[2]; break; } return 0; } -uint64_t rc_number_array_dim(rc_numId n_var) +uint64_t rc_number_array_dim(rc_numId* n_var) { - rc_numId* n = (rc_numId*)n_var.nid_value.ref_parent; + rc_numId* n = (rc_numId*)n_var->nid_value.ref_parent; return n->dimensions; } @@ -2364,118 +2364,172 @@ void rc_type_array_fill(rc_usrId* src, rc_usrId* fdata) } -uint64_t rc_number_array_size(rc_numId n_var, int d_num) +uint64_t rc_number_array_size(rc_numId* n_var, int d_num) { switch(d_num) { case 1: - return n_var.dim[0]; + return n_var->dim[0]; break; case 2: - return n_var.dim[1]; + return n_var->dim[1]; break; case 3: - return n_var.dim[2]; + return n_var->dim[2]; break; } return 0; } -void rc_number_array_copy(uint64_t src_ref_id, uint64_t dst_ref_id) +void rc_number_array_copy(rc_numId* n_var, rc_numId* d_var) +{ + uint64_t src_dim, src_dim_size[3]; + rc_numId* src = (rc_numId*)n_var->nid_value.ref_parent; + src_dim = rc_number_array_dim( src ); + src_dim_size[0] = rc_number_array_size( src, 1); + src_dim_size[1] = rc_number_array_size( src, 2); + src_dim_size[2] = rc_number_array_size( src, 3); + + rc_numId* dst = (rc_numId*)d_var->nid_value.ref_parent; + + uint64_t total_size = 0; + + switch(src_dim) + { + case 1: + total_size = src_dim_size[0]; + dst->nref[0].value.resize(total_size); + //dst->dimensions = 1; + dst->dim[0] = src_dim_size[0]; + dst->dim[1] = 0; + dst->dim[2] = 0; + break; + case 2: + total_size = src_dim_size[0] * src_dim_size[1]; + dst->nref[0].value.resize(total_size); + //dst->dimensions = 2; + dst->dim[0] = src_dim_size[0]; + dst->dim[1] = src_dim_size[1]; + dst->dim[2] = 0; + break; + case 3: + total_size = src_dim_size[0] * src_dim_size[1] * src_dim_size[2]; + dst->nref[0].value.resize(total_size); + //dst->dimensions = 3; + dst->dim[0] = src_dim_size[0]; + dst->dim[1] = src_dim_size[1]; + dst->dim[2] = src_dim_size[2]; + break; + } + + int si = n_var->byref_offset; + int di = d_var->byref_offset; + + //cout << "debug: " << si << ", " << di << endl; + + for(; di < total_size; di++) + { + dst->nref[0].value[di] = src->nref[0].value[si]; + + si++; + } +} + +void rc_string_array_copy(rc_strId* s_var, rc_strId* d_var) { uint64_t src_dim, src_dim_size[3]; - src_dim = rc_number_array_dim( num_var[src_ref_id] ); - src_dim_size[0] = rc_number_array_size( num_var[src_ref_id], 1); - src_dim_size[1] = rc_number_array_size( num_var[src_ref_id], 2); - src_dim_size[2] = rc_number_array_size( num_var[src_ref_id], 3); + rc_strId* src = (rc_strId*)s_var->sid_value.ref_parent; + src_dim = rc_string_array_dim( src ); + src_dim_size[0] = rc_string_array_size( src, 1); + src_dim_size[1] = rc_string_array_size( src, 2); + src_dim_size[2] = rc_string_array_size( src, 3); + + rc_strId* dst = (rc_strId*)d_var->sid_value.ref_parent; uint64_t total_size = 0; - switch(src_dim) - { - case 1: - total_size = src_dim_size[0]; - num_var[dst_ref_id].nref[0].value.resize(total_size); - num_var[dst_ref_id].dimensions = 1; - num_var[dst_ref_id].dim[0] = src_dim_size[0]; - num_var[dst_ref_id].dim[1] = 0; - num_var[dst_ref_id].dim[2] = 0; - break; - case 2: - total_size = src_dim_size[0] * src_dim_size[1]; - num_var[dst_ref_id].nref[0].value.resize(total_size); - num_var[dst_ref_id].dimensions = 2; - num_var[dst_ref_id].dim[0] = src_dim_size[0]; - num_var[dst_ref_id].dim[1] = src_dim_size[1]; - num_var[dst_ref_id].dim[2] = 0; - break; - case 3: - total_size = src_dim_size[0] * src_dim_size[1] * src_dim_size[2]; - num_var[dst_ref_id].nref[0].value.resize(total_size); - num_var[dst_ref_id].dimensions = 3; - num_var[dst_ref_id].dim[0] = src_dim_size[0]; - num_var[dst_ref_id].dim[1] = src_dim_size[1]; - num_var[dst_ref_id].dim[2] = src_dim_size[2]; - break; + switch(src_dim) + { + case 1: + total_size = src_dim_size[0]; + dst->sref[0].value.resize(total_size); + //dst->dimensions = 1; + dst->dim[0] = src_dim_size[0]; + dst->dim[1] = 0; + dst->dim[2] = 0; + break; + case 2: + total_size = src_dim_size[0] * src_dim_size[1]; + dst->sref[0].value.resize(total_size); + //dst->dimensions = 2; + dst->dim[0] = src_dim_size[0]; + dst->dim[1] = src_dim_size[1]; + dst->dim[2] = 0; + break; + case 3: + total_size = src_dim_size[0] * src_dim_size[1] * src_dim_size[2]; + dst->sref[0].value.resize(total_size); + //dst->dimensions = 3; + dst->dim[0] = src_dim_size[0]; + dst->dim[1] = src_dim_size[1]; + dst->dim[2] = src_dim_size[2]; + break; } - for(int i = 0; i < total_size; i++) + int si = s_var->byref_offset; + int di = d_var->byref_offset; + + //cout << "debug: " << si << ", " << di << endl; + + for(; di < total_size; di++) { - num_var[dst_ref_id].nref[0].value[i] = num_var[src_ref_id].nref[0].value[i]; + dst->sref[0].value[di] = src->sref[0].value[si]; + + si++; } } -void rc_string_array_copy(uint64_t src_ref_id, uint64_t dst_ref_id) +void rc_number_array_fill(rc_numId* n_var, double n) +{ + uint64_t src_dim, src_dim_size[3]; + rc_numId* src = (rc_numId*)n_var->nid_value.ref_parent; + src_dim = rc_number_array_dim( src ); + src_dim_size[0] = rc_number_array_size( src, 1); + src_dim_size[1] = rc_number_array_size( src, 2); + src_dim_size[2] = rc_number_array_size( src, 3); + + uint64_t total_size = 0; + + switch(src_dim) + { + case 1: + total_size = src_dim_size[0]; + break; + case 2: + total_size = src_dim_size[0] * src_dim_size[1]; + break; + case 3: + total_size = src_dim_size[0] * src_dim_size[1] * src_dim_size[2]; + break; + } + + //cout << "cp 1: " << src->sid_value.value.size() << " " << s_var->byref_offset << endl; + + for(int i = n_var->byref_offset; i < total_size; i++) + { + src->nref[0].value[i] = n; + } +} + + +void rc_string_array_fill(rc_strId* s_var, string s) { - uint64_t src_dim, src_dim_size[3]; - src_dim = rc_string_array_dim( str_var[src_ref_id] ); - src_dim_size[0] = rc_string_array_size( str_var[src_ref_id], 1); - src_dim_size[1] = rc_string_array_size( str_var[src_ref_id], 2); - src_dim_size[2] = rc_string_array_size( str_var[src_ref_id], 3); - - uint64_t total_size = 0; - - switch(src_dim) - { - case 1: - total_size = src_dim_size[0]; - str_var[dst_ref_id].sref[0].value.resize(total_size); - str_var[dst_ref_id].dimensions = 1; - str_var[dst_ref_id].dim[0] = src_dim_size[0]; - str_var[dst_ref_id].dim[1] = 0; - str_var[dst_ref_id].dim[2] = 0; - break; - case 2: - total_size = src_dim_size[0] * src_dim_size[1]; - str_var[dst_ref_id].sref[0].value.resize(total_size); - str_var[dst_ref_id].dimensions = 2; - str_var[dst_ref_id].dim[0] = src_dim_size[0]; - str_var[dst_ref_id].dim[1] = src_dim_size[1]; - str_var[dst_ref_id].dim[2] = 0; - break; - case 3: - total_size = src_dim_size[0] * src_dim_size[1] * src_dim_size[2]; - str_var[dst_ref_id].sref[0].value.resize(total_size); - str_var[dst_ref_id].dimensions = 3; - str_var[dst_ref_id].dim[0] = src_dim_size[0]; - str_var[dst_ref_id].dim[1] = src_dim_size[1]; - str_var[dst_ref_id].dim[2] = src_dim_size[2]; - break; - } - - for(int i = 0; i < total_size; i++) - { - str_var[dst_ref_id].sref[0].value[i] = str_var[src_ref_id].sref[0].value[i]; - } -} - -void rc_number_array_fill(uint64_t src_ref_id, double n) -{ - uint64_t src_dim, src_dim_size[3]; - src_dim = rc_number_array_dim( num_var[src_ref_id] ); - src_dim_size[0] = rc_number_array_size( num_var[src_ref_id], 1); - src_dim_size[1] = rc_number_array_size( num_var[src_ref_id], 2); - src_dim_size[2] = rc_number_array_size( num_var[src_ref_id], 3); + uint64_t src_dim, src_dim_size[3]; + rc_strId* src = (rc_strId*)s_var->sid_value.ref_parent; + src_dim = rc_string_array_dim( src ); + src_dim_size[0] = rc_string_array_size( src, 1); + src_dim_size[1] = rc_string_array_size( src, 2); + src_dim_size[2] = rc_string_array_size( src, 3); uint64_t total_size = 0; @@ -2490,40 +2544,13 @@ void rc_number_array_fill(uint64_t src_ref_id, double n) case 3: total_size = src_dim_size[0] * src_dim_size[1] * src_dim_size[2]; break; - } + } + + //cout << "cp 1: " << src->sid_value.value.size() << " " << s_var->byref_offset << endl; - for(int i = 0; i < total_size; i++) + for(int i = s_var->byref_offset; i < total_size; i++) { - num_var[src_ref_id].nref[0].value[i] = n; - } -} - -void rc_string_array_fill(uint64_t src_ref_id, string s) -{ - uint64_t src_dim, src_dim_size[3]; - src_dim = rc_string_array_dim( str_var[src_ref_id] ); - src_dim_size[0] = rc_string_array_size( str_var[src_ref_id], 1); - src_dim_size[1] = rc_string_array_size( str_var[src_ref_id], 2); - src_dim_size[2] = rc_string_array_size( str_var[src_ref_id], 3); - - uint64_t total_size = 0; - - switch(src_dim) - { - case 1: - total_size = src_dim_size[0]; - break; - case 2: - total_size = src_dim_size[0] * src_dim_size[1]; - break; - case 3: - total_size = src_dim_size[0] * src_dim_size[1] * src_dim_size[2]; - break; - } - - for(int i = 0; i < total_size; i++) - { - str_var[src_ref_id].sref[0].value[i] = s; + src->sref[0].value[i] = s; } } @@ -2542,19 +2569,19 @@ void func_130(uint64_t fn) rc_push_str( rc_input(INPUT$_PROMPT$) ); break; case FN_StringArrayDim: - rc_push_num( rc_string_array_dim( str_var[0] ) ); + rc_push_num( rc_string_array_dim( (rc_strId*) str_var[0].sid_value.ref_parent ) ); arr_ref_id.clear(); break; case FN_NumberArrayDim: - rc_push_num( rc_number_array_dim( num_var[0] ) ); + rc_push_num( rc_number_array_dim( (rc_numId*)num_var[0].nid_value.ref_parent ) ); arr_ref_id.clear(); break; case FN_StringArraySize: - rc_push_num( rc_string_array_size( str_var[0], STRINGARRAYSIZE_ARRAY_DIM)); + rc_push_num( rc_string_array_size( (rc_strId*) str_var[0].sid_value.ref_parent, STRINGARRAYSIZE_ARRAY_DIM)); arr_ref_id.clear(); break; case FN_NumberArraySize: - rc_push_num( rc_number_array_size( num_var[0], NUMBERARRAYSIZE_ARRAY_DIM)); + rc_push_num( rc_number_array_size( (rc_numId*)num_var[0].nid_value.ref_parent, NUMBERARRAYSIZE_ARRAY_DIM)); arr_ref_id.clear(); break; case FN_Abs: @@ -3725,19 +3752,19 @@ void func_130(uint64_t fn) rc_push_num( rc_media_messageBox(MESSAGEBOX_TITLE$, MESSAGEBOX_MSG$)); break; case FN_NumberArrayCopy: //Sub Procedure - rc_number_array_copy(arr_ref_id[0], arr_ref_id[1]); + rc_number_array_copy( &num_var[0], &num_var[1]); arr_ref_id.clear(); break; case FN_StringArrayCopy: //Sub Procedure - rc_string_array_copy(arr_ref_id[0], arr_ref_id[1]); + rc_string_array_copy( &str_var[0], &str_var[1]); arr_ref_id.clear(); break; case FN_NumberArrayFill: //Sub Procedure - rc_number_array_fill(arr_ref_id[0], NUMBERARRAYFILL_FDATA); + rc_number_array_fill( &num_var[0], NUMBERARRAYFILL_FDATA); arr_ref_id.clear(); break; case FN_StringArrayFill: //Sub Procedure - rc_string_array_fill(arr_ref_id[0], STRINGARRAYFILL_FDATA$); + rc_string_array_fill( &str_var[0], STRINGARRAYFILL_FDATA$); arr_ref_id.clear(); break; case FN_Runtime$: //String Function