I'd glad to add 'print usage' support, and split the main function:)