From a308f587ff496e872840a64117f154fbcbb25e7a Mon Sep 17 00:00:00 2001 From: "Sasha (KobzevAV)" Date: Mon, 5 Jun 2023 04:08:11 +0300 Subject: [PATCH] code: main --- main.cpp | 70 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 14 deletions(-) diff --git a/main.cpp b/main.cpp index ee61f4d..6b5b7a1 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,9 @@ #include +#include #include #include #include +#include #include "histogram.h" #include "text.h" #include "svg.h" @@ -35,24 +37,64 @@ input_data(istream& inp, bool prompt){ return in; } +size_t +write_data(void* items, size_t item_size, size_t item_count, void* ctx) { + stringstream* buffer = reinterpret_cast(ctx); + size_t data_size = item_size * item_count; + (*buffer).write(reinterpret_cast(items), data_size); + return data_size; +} + +string +filling(const string& key, const string& color){ + if(strcmp(key.c_str(), "-fill") == 0){ + if (strcmp(color.c_str(), " ") == 0){ + cerr << "Error: no color specified"; + exit(1); + } + return color.c_str(); + } +} + +Input +download(const string& adress){ + stringstream buffer; + CURL* curl = curl_easy_init(); + if(curl) { + CURLcode res; + curl_easy_setopt(curl, CURLOPT_URL, adress.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + res = curl_easy_perform(curl); + if (res != CURLE_OK){ + cerr << curl_easy_strerror(res); + exit(1); + } + curl_easy_cleanup(curl); + } + return input_data(buffer, false); +} + int main(int argc, char* argv[]){ + string color = "base"; curl_global_init(CURL_GLOBAL_ALL); - if (argc > 1 ){ - CURL* curl = curl_easy_init(); - if(curl) { - CURLcode res; - curl_easy_setopt(curl, CURLOPT_URL, argv[1]); - res = curl_easy_perform(curl); - if (res != CURLE_OK){ - cerr << curl_easy_strerror(res); - exit(1); - } - curl_easy_cleanup(curl); + Input in; + if (argc > 1) { + in = download(argv[1]); + } else { + in = input_data(cin, true); + } + + if (argc > 2){ + if (argv[3] == NULL){ + color = filling(argv[2], " "); + } + else{ + color = filling(argv[2], argv[3]); } - return 0; } - auto in = input_data(cin, true); + auto bins = make_histogram(in.numbers, in.bin_count); auto borders = make_borders(in.numbers, in.bin_count); - show_histogram_svg(bins, borders, in.bin_count); + show_histogram_svg(bins, borders, in.bin_count, color); }