diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bvr.h | 5 | ||||
-rw-r--r-- | src/bvrcommands.c | 32 | ||||
-rw-r--r-- | src/tape.c | 2 |
3 files changed, 34 insertions, 5 deletions
@@ -25,3 +25,8 @@ int bvr_bvrvar_first_time_set = 1; #define BVR_VER_MAJOR 0 #define BVR_VER_MINOR 0 #define BVR_VER_PATCH 0 + +#define BVR_PATH_SEPARATOR ';' +#define BVR_INCLUDE_PATH_VAR_NAME "bvr_include_path" + +int bvr_compose_stream(FILE *, FILE *); diff --git a/src/bvrcommands.c b/src/bvrcommands.c index bc5eed3..747c757 100644 --- a/src/bvrcommands.c +++ b/src/bvrcommands.c @@ -1,5 +1,6 @@ #pragma once #include <bvr.h> +#include <tape.c> #include <bvrvar.c> char bvr_var_skip_separator_chars(FILE * input) { char input_char = fgetc(input); @@ -52,13 +53,36 @@ int bvr_handle_include(FILE * input, FILE * output) { int i = 0; while(input_char != ' ' && input_char != CLOSING_COMMAND_TAG_CHAR_1 && input_char != ',' && input_char != ';' && input_char != EOF && input_char != '\0' && input_char != '\n' && i < BVR_MAX_VARIABLE_SIZE) { - item[++i] = input_char; + item[i++] = input_char; input_char = fgetc(input); } - item[++i] = '\0'; - fprintf(output, "%s", bvr_var_get(item)); + item[i++] = '\0'; + FILE * stream = fopen(item, "r"); + char notgoodatnamingvariables[PATH_MAX]; + char * path = bvr_var_get(BVR_INCLUDE_PATH_VAR_NAME); + if(strcmp(path, BVR_UNDEFINED) == 0 && stream == NULL) { + fprintf(output, "\nbVerbose include error. File %s not found. Path is undefined.\n", item); + fprintf(stderr, "[bvrcommands.c] bvr_handle_include: File %s not found. Path is undefined.\n", item); + return FAILURE; + } + char * singlepath; + while(stream == NULL) { + singlepath = strrchr(path, BVR_PATH_SEPARATOR); + strcpy(notgoodatnamingvariables, singlepath); + strcat(notgoodatnamingvariables, item); + stream = fopen(notgoodatnamingvariables, "r"); + if(strrchr(path, BVR_PATH_SEPARATOR) == NULL) { + stream = fopen(notgoodatnamingvariables, "r"); + if(stream == NULL) { + fprintf(output, "\nbVerbose include error. File %s not found.\n", item); + fprintf(stderr, "[bvrcommands.c] bvr_handle_include: File %s not found.\n", item); + return FAILURE; + } + } + *singlepath = '\0'; + } + return bvr_compose_stream(stream, output); fflush(output); - return SUCCESS; } int bvr_handle_move(FILE * input, FILE * output) { char item[BVR_MAX_VARIABLE_SIZE+1]; @@ -10,7 +10,6 @@ #include <randstring.c> #include <bvrcommands.c> #include <bvrvar.c> - int bvr_inline_command_processor(FILE * page_source_file, FILE * output_file, char copy_buffer[]) { FILE * temp_output_file = output_file; int what_to_return = SUCCESS; @@ -92,6 +91,7 @@ int bvr_inline_command_processor(FILE * page_source_file, FILE * output_file, ch copy_buffer[(ftell(page_source_file)% COPY_BUFFER_SIZE)] = fgetc(page_source_file); // remove closing command tag character return what_to_return; } + int bvr_compose_stream(FILE * page_source_file, FILE * temp_output_file) { char copy_buffer[COPY_BUFFER_SIZE]; for(int i = 0; i < sizeof(copy_buffer); i++) { // da garbage vrednosti ne bodo slučajno ukazi! |