From cef7686f9f7a87f7b5b2ca639617ecb2047962c9 Mon Sep 17 00:00:00 2001 From: ShevchukDS Date: Thu, 3 Jul 2025 17:32:21 +0300 Subject: [PATCH] =?UTF-8?q?13=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/main.cpp b/main.cpp index fc0b941..6c8ce75 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,6 @@ #include #include #include "histogram.h" -#include "text.h" #include "svg.h" #include #include @@ -36,7 +35,7 @@ size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) { return data_size; } -Input download(const string& address) { +void download(const string& address, Input& input) { stringstream buffer; CURL* curl = curl_easy_init(); if (curl) { @@ -45,46 +44,52 @@ Input download(const string& address) { curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { - cerr << curl_easy_strerror(res); + cerr << "Error: " << curl_easy_strerror(res) << endl; exit(1); } curl_easy_cleanup(curl); } - return input_data(buffer, false); + Input loaded = input_data(buffer, false); + input.numbers = loaded.numbers; + input.bin_count = loaded.bin_count; } -void process_args(int argc, char* argv[], Input& input) { +void parse_args(int argc, char* argv[], Input& input, string& url) { for (int i = 1; i < argc; i++) { - if (string(argv[i]) == "-stroke") { + string arg = argv[i]; + if (arg == "-stroke") { if (i + 1 < argc) { - input.stroke_color = argv[i + 1]; + input.stroke_color = argv[i+1]; i++; } else { - cerr << "Error: trebueca one argument.\n"; + cerr << "Error: require a color value" << endl; exit(1); } + } else if (arg[0] != '-') { + url = arg; + } else { + cerr << "Error: Unknown option " << arg << endl; + exit(1); } } } int main(int argc, char* argv[]) { + curl_global_init(CURL_GLOBAL_ALL); Input input; - process_args(argc, argv, input); - - bool url_provided = false; - for (int i = 1; i < argc; i++) { - if (string(argv[i]) != "-stroke" && argv[i][0] != '-') { - input = download(argv[i]); - url_provided = true; - break; + string url; + if (argc > 1) { + parse_args(argc, argv, input, url); + if (!url.empty()) { + download(url, input); + } else { + input = input_data(cin, true); } - } - - if (!url_provided) { + } else { input = input_data(cin, true); } - - auto bins = make_histogram(input.numbers, input.bin_count); + const auto bins = make_histogram(input.numbers, input.bin_count); show_histogram_svg(bins, input.stroke_color); + curl_global_cleanup(); return 0; }