#pragma once #include #include #include int bvr_commands_check_for_command(char * input_char, char ** value, int *i, FILE * input) { if((*input_char) == LINE_COMMAND_CHAR) { FILE * command_return; size_t buf_size; command_return = open_memstream(&(*value)+((*i)++), &buf_size); // i bajtov smo že napisali. if(bvr_command_processor(input, command_return) != SUCCESS) { fprintf(stderr, "[bvrcommands.c] bvr_commands_check_for_command: command, passed as argument, didn't return success. Going on.\n"); } fflush(command_return); // fprintf(stderr, "debug: \"%s\"\n", (*value)+((*i)-1)); // fprintf(stderr, "debug: \"%s\"\n", (*value)); // fprintf(stderr, "debug: \"%d\"\n", (*i)); // fprintf(stderr, "debug: \"%ld\"\n", (buf_size)); (*i) = (*i)+buf_size; // fprintf(stderr, "debug: \"%d\"\n", (*i)); (*input_char) = CLOSING_COMMAND_TAG_CHAR_1; // da zaključimo loop (drugače ostane notri ?) //\\ zelo slabo. znak, ki ga najde izveden ukaz, se izgubi. rešitev bi bila dobiti zadnji input char, ki triggera break // prejšnjega ukaza, kar pa je nemogoče. fflush(command_return); fclose(command_return); // fprintf(stderr, "debug: \"%s\"\n", (*value)); return BVR_CONTINUE; } return BVR_KEEPGOING; } char bvr_var_skip_separator_chars(FILE * input) { char input_char = fgetc(input); while(input_char == ' ' || input_char == CLOSING_COMMAND_TAG_CHAR_1 || input_char == ',' || input_char == ';' || input_char == EOF || input_char == '\0' || input_char == '\n') { input_char = fgetc(input); } return input_char; } int bvr_handle_get(FILE * input, FILE * output) { char * item = (char*) malloc(BVR_MAX_VARIABLE_SIZE+1); char input_char = bvr_var_skip_separator_chars(input); 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) { if(bvr_commands_check_for_command(&input_char, &item, &i, input) == BVR_CONTINUE) { continue; } item[i++] = input_char; input_char = fgetc(input); } item[i++] = '\0'; fprintf(output, "%s", bvr_var_get(item)); fflush(output); return SUCCESS; } int bvr_handle_set(FILE * input, FILE * output) { char * item = (char *) malloc(BVR_MAX_VARIABLE_SIZE+1); char * value = (char *) malloc(BVR_MAX_VARIABLE_SIZE+1); char input_char = bvr_var_skip_separator_chars(input); 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) { if(bvr_commands_check_for_command(&input_char, &item, &i, input) == BVR_CONTINUE) { continue; } item[i++] = input_char; input_char = fgetc(input); } item[i++] = '\0'; i = 0; input_char = bvr_var_skip_separator_chars(input); while(input_char != CLOSING_COMMAND_TAG_CHAR_1 && input_char != ',' && input_char != ';' && input_char != EOF && input_char != '\0' && i < BVR_MAX_VARIABLE_SIZE) { if(bvr_commands_check_for_command(&input_char, &value, &i, input) == BVR_CONTINUE) { // fprintf(stderr, "debug3: \"%s\"\n", value); continue; } value[i++] = input_char; input_char = fgetc(input); } value[i++] = '\0'; // fprintf(stderr, "debug2: \"%s\"\n", value); // fprintf(stderr, "debug2: \"%d\"\n", i); return bvr_var_set(item, value); fflush(output); return SUCCESS; } int bvr_handle_include(FILE * input, FILE * output) { char * item = (char *) malloc(BVR_MAX_VARIABLE_SIZE+1); char input_char = bvr_var_skip_separator_chars(input); 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) { if(bvr_commands_check_for_command(&input_char, &item, &i, input) == BVR_CONTINUE) { continue; } item[i++] = input_char; input_char = fgetc(input); } item[i++] = '\0'; FILE * stream = fopen(item, "r"); char notgoodatnamingvariables[PATH_MAX]; char * path = bvr_var_get(BVR_INCLUDE_PATH_VAR_NAME); if(stream == NULL) { strcpy(notgoodatnamingvariables, item); strcat(notgoodatnamingvariables, BVR_COMMAND_FILE_EXT); stream = fopen(notgoodatnamingvariables, "r"); 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); if(singlepath == NULL) { strcpy(notgoodatnamingvariables, path); strcat(notgoodatnamingvariables, item); stream = fopen(notgoodatnamingvariables, "r"); // ob1 fuckery if(stream == NULL) { strcpy(notgoodatnamingvariables, path); strcat(notgoodatnamingvariables, item); strcat(notgoodatnamingvariables, BVR_COMMAND_FILE_EXT); stream = fopen(notgoodatnamingvariables, "r"); // ob1 fuckery 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; } break; } break; } strcpy(notgoodatnamingvariables, singlepath); strcat(notgoodatnamingvariables, item); stream = fopen(notgoodatnamingvariables+1, "r"); // ob1 fuckery if(stream == NULL) { strcat(notgoodatnamingvariables, BVR_COMMAND_FILE_EXT); stream = fopen(notgoodatnamingvariables+1, "r"); // ob1 fuckery if(stream != NULL) { break; } } *singlepath = '\0'; } return bvr_compose_stream(stream, output); fflush(output); } int bvr_handle_move(FILE * input, FILE * output) { char * item = (char *) malloc(BVR_MAX_VARIABLE_SIZE+1); char * value = (char *) malloc(BVR_MAX_VARIABLE_SIZE+1); char input_char = bvr_var_skip_separator_chars(input); 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) { if(bvr_commands_check_for_command(&input_char, &item, &i, input) == BVR_CONTINUE) { continue; } item[i++] = input_char; input_char = fgetc(input); } item[i++] = '\0'; i = 0; input_char = bvr_var_skip_separator_chars(input); 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) { if(bvr_commands_check_for_command(&input_char, &value, &i, input) == BVR_CONTINUE) { continue; } value[i++] = input_char; input_char = fgetc(input); } value[i++] = '\0'; return bvr_var_mv(item, value); fflush(output); return SUCCESS; } int bvr_handle_info(FILE * input, FILE * output) { // fprintf(stderr, "[bvrcommands.c] bvr_handle_info: bvr bVerbose HTPCMS %d.%d.%d\n", BVR_VER_MAJOR, BVR_VER_MINOR, BVR_VER_PATCH); fprintf(output, "\nbvr bVerbose HTPCMS %d.%d.%d\n", BVR_VER_MAJOR, BVR_VER_MINOR, BVR_VER_PATCH); return SUCCESS; }