Browse Source

Ported to windows

main
parent
commit
ee12c7a74c
  1. 76
      src/fumosay.cpp

76
src/fumosay.cpp

@ -1,5 +1,5 @@
/* /*
Copyright © 2021 Kasyanov Nikolay Alexeyevich (Unbewohnte (me@unbewohnte.xyz)) Copyright © 2021, 2022 Kasyanov Nikolay Alexeyevich (Unbewohntes)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@ -21,24 +21,15 @@ class Fumo {
std::string m_fumotext; std::string m_fumotext;
public: public:
// Opens specified fumofile if present and reads it // Opens specified fumofile
Fumo(std::string fumofile, std::string fumofiles_path) { Fumo(std::string fumo_path) {
std::string path = fumofiles_path + "/" + fumofile;
std::fstream m_fumofile; std::fstream m_fumofile;
m_fumofile.open(path, std::ios_base::in); m_fumofile.open(fumo_path, std::ios_base::in);
if (!m_fumofile) {
// could not open specified fumofile
// try to open the default one
path = fumofiles_path + "/" + m_default_fumofile;
m_fumofile.open(path, std::ios_base::in);
if (!m_fumofile) { if (!m_fumofile) {
// if THIS didn`t help - raise an error
throw "Could not open fumofile"; throw "Could not open fumofile";
}; };
};
// read the whole fumofile // read whole fumofile
std::string line; std::string line;
while (std::getline(m_fumofile, line)) { while (std::getline(m_fumofile, line)) {
m_fumotext += line + "\n"; m_fumotext += line + "\n";
@ -49,7 +40,7 @@ class Fumo {
~Fumo() {}; ~Fumo() {};
// parses already present fumotext and inserts given message. Prints fumosay // Inserts given message and prints it to the standart output
void say(std::string message) { void say(std::string message) {
if (m_fumotext.find(m_message_identificator) == std::string::npos) { if (m_fumotext.find(m_message_identificator) == std::string::npos) {
// no identificator found. Inserting message on the first line // no identificator found. Inserting message on the first line
@ -66,12 +57,27 @@ class Fumo {
}; };
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
const std::string VERSION = "0.4.4"; const std::string VERSION = "0.4.5";
const std::string ABOUT = "fumosay\ncowsay, but with soft friends\n\nWritten by Kasyanov Nikolay Alexeyevich (Unbewohnte (me@unbewohnte.xyz))";
const std::string HELP = "fumosay [OPTION(s)...] [MESSAGE]\n\nOptions:\n-v --version - print version text and exit\n-l --list - list available fumos and exit\n-h --help - print this message and exit\n-f --fumo - specify another fumo to print\n-d --directory - temporarily change fumofiles directory to look fumofiles in\n"; const std::string ABOUT = "\
fumosay\n\
cowsay, but with soft friends\n\n\
std::string fumofiles_dir = "/usr/local/share/fumosay/fumofiles"; (c) Kasyanov Nikolay Alexeyevich (Unbewohnte)";
const std::string HELP = "\
fumosay [OPTION(s)...] [MESSAGE]\n\n\
Options:\n\
-v --version - print version text and exit\n\
-l --list - list available fumos and exit\n\
-h --help - print this message and exit\n\
-f --fumo - specify path to another fumo to print\n";
std::string fumofiles_dir;
#ifdef _WIN32
fumofiles_dir = "/usr/local/share/fumosay/fumofiles";
#elseif
fumofiles_dir = "./fumofiles";
#endif
std::string fumoname = "cirno.fumo"; std::string fumoname = "cirno.fumo";
if (argc < 2) { if (argc < 2) {
@ -84,21 +90,20 @@ int main(int argc, char *argv[]) {
// print version info // print version info
std::cout << VERSION << std::endl << std::endl << ABOUT << std::endl; std::cout << VERSION << std::endl << std::endl << ABOUT << std::endl;
return 0; return 0;
}
} else if (strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "--list") == 0) { else if (strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "--list") == 0) {
// print available fumos in the default fumofiles directory // print available fumos in the default fumofiles directory
for (const auto &entry : std::filesystem::directory_iterator(fumofiles_dir)) { for (const auto &entry : std::filesystem::directory_iterator(fumofiles_dir)) {
std::cout << entry.path().filename() << std::endl; std::cout << entry.path().filename() << std::endl;
}; };
return 0; return 0;
}
} else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
// print help infos // print help infos
std::cout << HELP << std::endl; std::cout << HELP << std::endl;
return 0; return 0;
}
} else if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fumo") == 0) { else if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--fumo") == 0) {
// use another fumo // use another fumo
if (i+1 >= argc-1) { if (i+1 >= argc-1) {
return 1; return 1;
@ -106,10 +111,8 @@ int main(int argc, char *argv[]) {
fumoname = argv[i+1]; fumoname = argv[i+1];
i++; i++;
}
continue; else if (strcmp(argv[i], "-d") == 0 || strcmp(argv[i], "--directory") == 0) {
} else if (strcmp(argv[i], "-d") == 0 || strcmp(argv[i], "--directory") == 0) {
// temporarily change fumofiles directory to look fumofiles in // temporarily change fumofiles directory to look fumofiles in
if (i+1 >= argc-1 || !std::filesystem::exists(std::filesystem::path(argv[i+1]))){ if (i+1 >= argc-1 || !std::filesystem::exists(std::filesystem::path(argv[i+1]))){
return 1; return 1;
@ -117,17 +120,16 @@ int main(int argc, char *argv[]) {
fumofiles_dir = argv[i+1]; fumofiles_dir = argv[i+1];
i++; i++;
}
continue; else {
};
message += argv[i]; message += argv[i];
if (i != argc-1) { if (i != argc-1) {
message += " "; message += " ";
}; };
}
}; };
Fumo fumo(fumoname, fumofiles_dir); Fumo fumo(std::filesystem::path(fumofiles_dir) / fumoname);
fumo.say(message); fumo.say(message);
return 0; return 0;

Loading…
Cancel
Save