diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bvrcommands.c | 26 | ||||
-rw-r--r-- | src/tape.c | 3 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/bvrcommands.c b/src/bvrcommands.c index a3c5dba..b7d14e3 100644 --- a/src/bvrcommands.c +++ b/src/bvrcommands.c @@ -414,6 +414,23 @@ int bvr_handle_while(FILE * input, FILE * output) { fflush(output); return return_value; } +int bvr_handle_join(FILE * input, FILE * output) { + char operation = fgetc(input); + int return_value = SUCCESS; + char chars_to_break_value[69] = " "; + strlcat(chars_to_break_value, BVR_CHARS_TO_BREAK_VALUE, sizeof(chars_to_break_value)); + char * item = bvr_commands_get_value(input, chars_to_break_value); + char * value = bvr_commands_get_value(input, chars_to_break_value); + char * stvar1 = bvr_var_get(item); + char * stvar2 = bvr_var_get(value); + strncat(stvar1, stvar2, (BVR_MAX_VARIABLE_SIZE-strlen(stvar1))-1); + return_value = bvr_var_set(item, stvar1); + free(item); + free(value); + item = NULL; + value = NULL; + return return_value; +} int bvr_handle_math(FILE * input, FILE * output) { char operation = fgetc(input); int return_value = SUCCESS; @@ -467,14 +484,21 @@ int bvr_handle_explode(FILE * input, FILE * output) { char * rest = string1; char * charpointer; int index = strlen(item); + size_t len = 0; + char lenst[69]; item[index++] = '['; item[index] = '\0'; index = 0; while ((token = strtok_r(rest, string2, &rest))) { charpointer = strrchr(item, BVR_ARRAY_INDEX_CHAR); snprintf(charpointer+1, (BVR_MAX_VARIABLE_SIZE-(charpointer-string1))-4, "%d" BVR_ARRAY_AFTER_INDEX, index++); - return_value = return_value != SUCCESS ? return_value : bvr_var_set(charpointer, token); // če je bila prej napaka pač ne poskušamo več! + return_value = return_value != SUCCESS ? return_value : bvr_var_set(item, token); // če je bila prej napaka pač ne poskušamo več! + len++; } + charpointer = strrchr(item, BVR_ARRAY_INDEX_CHAR); + snprintf(charpointer+1, (BVR_MAX_VARIABLE_SIZE-(charpointer-string1))-4, "#" BVR_ARRAY_AFTER_INDEX, index++); + snprintf(lenst, 69-1, "%lu", len); + return_value = return_value != SUCCESS ? return_value : bvr_var_set(item, lenst); free(item); free(value); item = NULL; @@ -50,6 +50,9 @@ int bvr_command_processor(FILE * page_source_file, FILE * temp_output_file) { case 'r': /* ačunanje */ command_handler_output = bvr_handle_math(page_source_file, temp_output_file); break; + case 'j': /* oin */ + command_handler_output = bvr_handle_join(page_source_file, temp_output_file); + break; case 'b': /* unden */ // fprintf(stderr, "bunden %c\n", command_entered); command_handler_output = bvr_handle_info(page_source_file, temp_output_file); |