diff --git a/main.cpp b/main.cpp index 5f965b8..1eae58c 100644 --- a/main.cpp +++ b/main.cpp @@ -1,8 +1,11 @@ #include <iostream> +#include <sstream> +#include <string> #include <vector> +#include <curl/curl.h> #include "histogram.h" +#include "text.h" #include "svg.h" -#include <curl/curl.h> using namespace std; @@ -12,11 +15,11 @@ struct Input { }; Input input_data(istream& in, bool prompt) { - size_t number_count; - if (prompt) { - cerr << "Enter number count: "; + cerr << "Enter number count, numbers and bin count: "; } + + size_t number_count; in >> number_count; Input input; @@ -26,40 +29,59 @@ Input input_data(istream& in, bool prompt) { in >> input.numbers[i]; } - if (prompt) { - cerr << "Enter bin count: "; - } in >> input.bin_count; + return input; } -int main(int argc, char* argv[]) { +size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) { + size_t data_size = item_size * item_count; - if (argc > 1) { - cout << "���������� ����������: " << argc << endl; - for (int i = 0; i < argc; ++i) { - cout << "argv[" << i << "] = " << argv[i] << endl; - } - return 0; - } + stringstream* buffer = reinterpret_cast<stringstream*>(ctx); + + buffer->write(reinterpret_cast<const char*>(items), data_size); + return data_size; +} + +Input download(const string& address) { + stringstream buffer; + + CURL* curl = curl_easy_init(); + if (curl) { + curl_easy_setopt(curl, CURLOPT_URL, address.c_str()); + + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); - CURLcode res = curl_global_init(CURL_GLOBAL_ALL); - if (res != CURLE_OK) { - cerr << "curl_global_init() failed: " << curl_easy_strerror(res) << endl; - return 1; + CURLcode res = curl_easy_perform(curl); + if (res != CURLE_OK) { + cerr << "cURL error: " << curl_easy_strerror(res) << endl; + curl_easy_cleanup(curl); + exit(1); + } + + curl_easy_cleanup(curl); + } else { + cerr << "curl_easy_init() failed" << endl; + exit(1); } + return input_data(buffer, false); +} + +int main(int argc, char* argv[]) { + Input input; - auto in = input_data(cin, true); + if (argc > 1) { + input = download(argv[1]); + } else { + input = input_data(cin, true); + } - // ��������� ����������� - auto bins = make_histogram(in.numbers, in.bin_count); + const auto bins = make_histogram(input.numbers, input.bin_count); show_histogram_svg(bins); - // ���������� ������ cURL - curl_global_cleanup(); - return 0; } /*#include <iostream>