diff --git a/src/main.cpp b/src/main.cpp index 7432abe..1d1c448 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,25 +5,71 @@ int main(int argc, char* argv[]) { - if (argc > 5 || argc < 3) { - std::cout << "Usage: " << argv[0] << " [s] [...]" << std::endl; - std::cout << " s: [ []] -> SimpleMarkov" << std::endl; + if (argc > 5 || argc < 3) + { + std::cout << "Usage: " << argv[0] << " [s][gsl] [...]" << std::endl; + std::cout << " s -- SimpleMarkov" << std::endl; + std::cout << " sg: [ []] -> generate from file" << std::endl; + std::cout << " ss: [] -> save" << std::endl; + std::cout << " sl: [] -> load and generate" << std::endl; return 1; } std::string filename = argv[1]; std::string mode = argv[2]; - if (mode == "s") { - int paragraphs = 1; - if (argc >= 4) paragraphs = std::stoi(argv[3]); - int length = 10; - if (argc >= 5) length = std::stoi(argv[4]); - - SimpleMarkov m(length); - m.eat(filename); - std::cout << m.regurgitate(paragraphs); - } else { + if (mode.substr(0, 1) == "s") + { + if (mode.substr(1, 1) == "g") + { + int paragraphs = 1; + if (argc >= 4) paragraphs = std::stoi(argv[3]); + int length = 10; + if (argc >= 5) length = std::stoi(argv[4]); + + SimpleMarkov m(length); + std::cout << "Processing file..." << std::endl; + m.eat(filename); + std::cout << "Generating text..." << std::endl; + std::cout << m.regurgitate(paragraphs); + } + else if (mode.substr(1, 1) == "s") + { + if (argc < 4) + { + std::cout << "Error: No save file." << std::endl; + return 3; + } + + std::string savefile = argv[3]; + int length = 10; + if (argc >= 5) length = std::stoi(argv[4]); + + SimpleMarkov m(length); + std::cout << "Processing file..." << std::endl; + m.eat(filename); + std::cout << "Saving to file..." << std::endl; + m.save(savefile); + } + else if (mode.substr(1, 1) == "l") + { + int paragraphs = 1; + if (argc >= 4) paragraphs = std::stoi(argv[3]); + + SimpleMarkov m; + std::cout << "Loading file..." << std::endl; + try { + m.load(filename); + } catch (const std::invalid_argument e) { + std::cout << "Error: " << e.what() << std::endl; + return 4; + } + std::cout << "Generating text..." << std::endl; + std::cout << m.regurgitate(paragraphs); + } + } + else + { std::cout << "Error: Incorrect mode." << std::endl; return 2; }