robust arg parser