]> git.decadent.org.uk Git - videolink.git/commitdiff
Added --help option and arranged to print usage information when this is used and...
authorBen Hutchings <ben@decadent.org.uk>
Sun, 27 Nov 2005 21:47:30 +0000 (21:47 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 2 Nov 2008 23:19:46 +0000 (23:19 +0000)
webdvd.cpp

index a6064b2bf33bf65fc9b904fd9b54b023c0861ba5..94ab121f890c3f043cca63277ecc7928e76933e1 100644 (file)
@@ -867,23 +867,40 @@ namespace
            std::string("Invalid video standard: ").append(str));
     }
 
+    void print_usage(std::ostream & stream, const char * command_name)
+    {
+       stream << "Usage: " << command_name
+              << (" [gtk-options] [--video-std std-name]"
+                  " front-page-url output-dir\n");
+    }
+    
 } // namespace
 
 int main(int argc, char ** argv)
 {
     try
     {
-       // Determine video frame parameters.
+       // Do initial argument parsing.  We have to do this before
+       // letting Gtk parse the arguments since we need to spawn Xvfb
+       // first and that's currently dependent on the frame
+       // parameters (though we could just make it large enough for
+       // any frame) and also an unnecessary expense in some cases.
        video::frame_params frame_params = video::pal_params;
        for (int argi = 1; argi != argc; ++argi)
        {
            if (std::strcmp(argv[argi], "--") == 0)
                break;
+           if (std::strcmp(argv[argi], "--help") == 0)
+           {
+               print_usage(std::cout, argv[0]);
+               return EXIT_SUCCESS;
+           }
            if (std::strcmp(argv[argi], "--video-std") == 0)
            {
                if (argi + 1 == argc)
                {
                    std::cerr << "Missing argument to --video-std\n";
+                   print_usage(std::cerr, argv[0]);
                    return EXIT_FAILURE;
                }
                frame_params = lookup_frame_params(argv[argi + 1]);
@@ -901,9 +918,7 @@ int main(int argc, char ** argv)
        // Initialise Gtk
        Gtk::Main kit(argc, argv);
 
-       // Check we have the right number of arguments.  We can't
-       // do this earlier because we need to let Gtk read and remove
-       // any of the many options it understands.
+       // Complete argument parsing with Gtk's options out of the way.
        int argi = 1;
        while (argi != argc)
        {
@@ -919,6 +934,7 @@ int main(int argc, char ** argv)
            else if (argv[argi][0] == '-')
            {
                std::cerr << "Invalid option: " << argv[argi] << "\n";
+               print_usage(std::cerr, argv[0]);
                return EXIT_FAILURE;
            }
            else
@@ -926,9 +942,7 @@ int main(int argc, char ** argv)
        }
        if (argi != argc - 2)
        {
-           std::cerr << "Usage: " << argv[0]
-                     << (" [gtk-options] [--video-std std-name]"
-                         "front-page-url output-dir\n");
+           print_usage(std::cerr, argv[0]);
            return EXIT_FAILURE;
        }