completed argument parser