X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=src%2Fmain.cpp;h=6e14fe4a8c4d0ecaa043e4bf7a88bdb9f46d1d78;hb=450a787db48ab01a4b4452d47ecccf93790207fb;hp=a7e95fe751bff9337248f4a3762fde2933c175f0;hpb=d8afd601de1f0d8afe6eff61d40ff52d21d90fd8;p=gen-shell.git diff --git a/src/main.cpp b/src/main.cpp index a7e95fe..6e14fe4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,9 @@ //////////////////////////////////////////////////////////////////////////////// // -// Copyright 2006 - 2017, Paul Beckingham, Federico Hernandez, 2020 Armaan Bhojwani +// gen-shell, the generic shell +// +// Copyright 2006 - 2017, Paul Beckingham, Federico Hernandez, +// 2020, Armaan Bhojwani // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,34 +27,34 @@ // //////////////////////////////////////////////////////////////////////////////// + #include #include -#include +#include <../Sarge/src/sarge.h> #include #ifdef HAVE_READLINE -#include -#include + #include + #include #endif //////////////////////////////////////////////////////////////////////////////// using namespace std; -std::string promptCompose(); const std::string getResponse(const std::string & prompt) { std::string response { "" }; - // Display prompt, get input. + // Display prompt, get input #ifdef HAVE_READLINE char * line_read = readline(prompt.c_str()); if (!line_read) { std::cout << "\n"; response = ""; } else { - // Save history. + // Save history if ( * line_read) add_history(line_read); @@ -78,10 +81,14 @@ int main(int argc, char** argv) // Command line arguments Sarge sarge; - sarge.setArgument("h", "help", "Get help.", false); - sarge.setArgument("c", "cmd", "Command to execute before entering the shell", true); - sarge.setDescription("Make a shell from any command"); - sarge.setUsage("gen-shell "); + sarge.setArgument("a", "after", "Command to execute before leaving the shell", true); + sarge.setArgument("b", "before", "Command to execute before entering the shell", true); + sarge.setArgument("c", "command", "Command to convert to shell", true); + sarge.setArgument("h", "help", "Get help.", false); + sarge.setArgument("p", "prompt", "Define a custom prompt", true); + sarge.setArgument("", "no-space", "Dont automatically add spaces after custom prompt and command", true); + sarge.setDescription("Make a shell from any executable"); + sarge.setUsage("gen-shell "); if (!sarge.parseArguments(argc, argv)) { std::cerr << "Couldn't parse arguments..." << std::endl; @@ -93,30 +100,50 @@ int main(int argc, char** argv) return 0; } + bool space = true; + if (sarge.exists("no-space")) { + space = false; + } + + // Define input command string arg_cmd; - sarge.getFlag("cmd", arg_cmd); - arg_cmd += " "; + sarge.getFlag("command", arg_cmd); + if ( space ) + arg_cmd += " "; + + // Define prompt + string prompt = ""; + sarge.getFlag("prompt", prompt); + if ( prompt == "" ) + { + prompt = "% "; + } else if ( space ) { + prompt += " "; + } - // Main program - while (true) { - // Compose the prompt. - auto prompt = promptCompose(); + // Execute before-command + string before_command; + sarge.getFlag("before", before_command); + system (before_command.c_str ()); - // Display prompt, get input. + // Execute after-command + string after_command; + sarge.getFlag("after", after_command); + + // Do the stuffs! + while (true) { + // Display prompt, get input auto command = getResponse(prompt); - if (command != "") + // Dispatch command + if (command == "" || command == "exit" || command == "quit" ) + // if (command == "" || command == "exit" ) { - // Dispatch command. - if (command == "") - { - return 0; - } - else if (command != "") - { - string whole_command = arg_cmd + command; - system (whole_command.c_str ()); - } + system (after_command.c_str ()); + return 0; + } else { + string whole_command = arg_cmd + command; + system (whole_command.c_str ()); } } }