Sfoglia il codice sorgente

Refs #2 command-line usage

isundil 9 anni fa
parent
commit
a0b570865b
3 ha cambiato i file con 22 aggiunte e 1 eliminazioni
  1. 2 0
      include/params.hh
  2. 12 1
      src/main.cpp
  3. 8 0
      src/params.cpp

+ 2 - 0
include/params.hh

@@ -14,6 +14,8 @@ class Params
         std::basic_istream<char> &getInput() const;
         bool isValid() const;
 
+        static void usage(const std::string &) noexcept;
+
     private:
         std::basic_istream<char> *input;
         const std::string progName;

+ 12 - 1
src/main.cpp

@@ -1,3 +1,4 @@
+#include <iostream>
 #include "streamConsumer.hh"
 #include "curseOutput.hh"
 #include "params.hh"
@@ -21,7 +22,17 @@ void run(Params *params)
 
 int main(int ac, char **av)
 {
-    Params *params = new Params(ac, av);
+    Params *params;
+
+    try {
+        params = new Params(ac, av);
+    }
+    catch (std::runtime_error &e)
+    {
+        std::cerr << *av << ": " << e.what() << std::endl;
+        Params::usage(*av);
+        exit (EXIT_FAILURE);
+    }
 
     if (params->isValid())
         run(params);

+ 8 - 0
src/params.cpp

@@ -30,6 +30,8 @@ Params::Params(int ac, char **av) :progName(*av), params(std::list<std::string>(
             {
                 input = new std::stringstream();
             }
+            else
+                throw std::runtime_error("Invalid argument: " +tmp);
         }
         else
         {
@@ -62,3 +64,9 @@ bool Params::isValid() const
     return true;
 }
 
+void Params::usage(const std::string &progName) noexcept
+{
+    std::cout << "Usage: " << progName << " [-f filename] read input from file instead of stdin" << std::endl;
+    std::cout << "Usage: " << progName << " -- [INPUT] (read input from argument line)" << std::endl;
+}
+