better command line argument parsing