add getopt implementation