summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bvrcommands.c26
-rw-r--r--src/tape.c3
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;
diff --git a/src/tape.c b/src/tape.c
index 88d1950..0af7e4c 100644
--- a/src/tape.c
+++ b/src/tape.c
@@ -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);