From bc2f43989a9e1a161e639c90cb7bfee10c6e25c8 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 16 Aug 2022 17:45:08 -0700 Subject: [PATCH 1/4] A simple icon --- images/icon.ico | Bin 0 -> 14846 bytes images/icon.svg | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 images/icon.ico create mode 100644 images/icon.svg diff --git a/images/icon.ico b/images/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..63dd9eff5858d3bb6d9ef25e55053376db0a9282 GIT binary patch literal 14846 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 + + + + + + + + From a31bf96845d3b77439c07ea5f837462271412967 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 16 Aug 2022 18:32:57 -0700 Subject: [PATCH 2/4] Resource file for embedding icon into executable --- FileToCArray_main.cpp | 5 ++++- icon_resource.rc | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100755 icon_resource.rc diff --git a/FileToCArray_main.cpp b/FileToCArray_main.cpp index 88ebe7d..67c385d 100644 --- a/FileToCArray_main.cpp +++ b/FileToCArray_main.cpp @@ -1,8 +1,11 @@ #include "FileToCArray.hpp" -int main() +int main(int argc, char** argv) { ftca_form fm; +#if defined(__WIN32) || defined(_MSC_VER) + nana::API::window_icon(fm.handle(), nana::paint::image(argv[0])); +#endif fm.show(); nana::exec(); } \ No newline at end of file diff --git a/icon_resource.rc b/icon_resource.rc new file mode 100755 index 0000000..5602376 --- /dev/null +++ b/icon_resource.rc @@ -0,0 +1 @@ +ID_ICON1 ICON "images/icon.ico" From 1e27da9f373e5ba067c51ca55024c83fc77b4e0c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 16 Aug 2022 19:57:32 -0700 Subject: [PATCH 3/4] Make code compile with GCC --- FileToCArray.hpp | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/FileToCArray.hpp b/FileToCArray.hpp index 8a429b5..8c82cba 100644 --- a/FileToCArray.hpp +++ b/FileToCArray.hpp @@ -227,7 +227,11 @@ class ftca_form : public nana::form { working = true; if(!std::filesystem::exists(inpath)) +#ifdef _MSC_VER throw(std::exception{"Input file does not exist!"}); +#else + throw std::runtime_error("Input file does not exist!"); +#endif auto insize = std::filesystem::file_size(inpath); unsigned width = sizeof(uint64_t); while(insize % width) width /= 2; @@ -244,9 +248,19 @@ class ftca_form : public nana::form } std::ifstream infile{inpath, std::ios::binary}; - if(!infile.good()) throw(std::exception{"Failed to open the input file!"}); + if(!infile.good()) +#ifdef _MSC_VER + throw(std::exception{"Failed to open the input file!"}); +#else + throw std::runtime_error("Failed to open the input file!"); +#endif std::ofstream outfile{outpath}; - if(!outfile.good()) throw(std::exception{"Failed to open the output file!"}); + if(!outfile.good()) +#ifdef _MSC_VER + throw(std::exception{"Failed to open the output file!"}); +#else + throw std::runtime_error("Failed to open the output file!"); +#endif auto name{"arr_" + inpath.filename().u8string()}; for(auto &c : name) if(!isalnum(c)) c = '_'; @@ -276,10 +290,20 @@ class ftca_form : public nana::form prog.inc(); } if(abort) { working = false; return; } - if(outfile.bad()) throw(std::exception{"Failed trying to write to the output file!"}); + if(outfile.bad()) +#ifdef _MSC_VER + throw(std::exception{"Failed trying to write to the output file!"}); +#else + throw std::runtime_error("Failed trying to write to the output file!"); +#endif } - if(infile.bad()) throw(std::exception{"Failed trying to read the input file!"}); + if(infile.bad()) +#ifdef _MSC_VER + throw(std::exception{"Failed trying to read the input file!"}); +#else + throw std::runtime_error("Failed trying to read the input file!"); +#endif outfile.seekp(static_cast(outfile.tellp())-1); if(line_chars_max) outfile << '\n'; From b69a199e4b7ccd7f28dfd5fb1ac571960b0ec9fe Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 16 Aug 2022 20:20:54 -0700 Subject: [PATCH 4/4] README: add build instructions for GCC/MinGW --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index 50a55c2..3873890 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,27 @@ Protip: if the output file that you choose is the same as the input file, it wil ## Windows binary https://github.com/ErrorFlynn/FileToCArray/releases/download/v1.1/FileToCArray_11.7z + +## Building + +### GNU GCC + +``` +g++ --std=c++17 FileToCArray_main.cpp -lnana -lpng -ljpeg -o FileToCArray +``` + +#### Building on Windows with MinGW/GCC + +If compiling on Windows you will also need to link to some Windows standard libraries: + +``` +g++ --std=c++17 FileToCArray_main.cpp -lnana -lpng -ljpeg -lgdi32 -lcomdlg32 -mwindows -o FileToCArray +``` + +To add an icon resource do the following: + +``` +windres icon_resource.rc -o icon_resource.o + +g++ --std=c++17 FileToCArray_main.cpp icon_resource.o -lnana -lpng -ljpeg -lgdi32 -lcomdlg32 -mwindows -o FileToCArray +```