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]);
// 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)
{
else if (argv[argi][0] == '-')
{
std::cerr << "Invalid option: " << argv[argi] << "\n";
+ print_usage(std::cerr, argv[0]);
return EXIT_FAILURE;
}
else
}
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;
}