struct stat txt_file_stat;
  
        int fp, ep;
 +      const char *prg;
 +
 +      prg = basename(argv[0]);
  
+       /* Turn off getopt()'s internal error message */
+       opterr = 0;
+ 
        /* Parse the cmdline */
-       while ((option = getopt(argc, argv, "s:o:rbp:h")) != -1) {
+       while ((option = getopt(argc, argv, ":s:o:rbp:hV")) != -1) {
                switch (option) {
                case 's':
                        datasize = strtol(optarg, NULL, 0);
                        padbyte = strtol(optarg, NULL, 0);
                        break;
                case 'h':
 -                      usage(argv[0]);
 +                      usage(prg);
                        return EXIT_SUCCESS;
 -                              optopt);
+               case 'V':
+                       printf("%s version %s\n", prg, PLAIN_VERSION);
+                       return EXIT_SUCCESS;
+               case ':':
+                       fprintf(stderr, "Missing argument for option -%c\n",
++                              option);
+                       usage(argv[0]);
+                       return EXIT_FAILURE;
                default:
 -                      fprintf(stderr, "Wrong option -%c\n", optopt);
 -                      usage(argv[0]);
 +                      fprintf(stderr, "Wrong option -%c\n", option);
 +                      usage(prg);
                        return EXIT_FAILURE;
                }
        }
        /* Check datasize and allocate the data */
        if (datasize == 0) {
                fprintf(stderr,
-                       "Please specify the size of the envrionnment "
+                       "Please specify the size of the environment "
                        "partition.\n");
 -              usage(argv[0]);
 +              usage(prg);
                return EXIT_FAILURE;
        }