cmdl_arg.cpp
上传用户:yingdiyu
上传日期:2007-01-06
资源大小:116k
文件大小:3k
源码类别:

磁盘编程

开发平台:

Others

  1. /*
  2. FIPS - the First nondestructive Interactive Partition Splitting program
  3. Module cmdl_arg.cpp
  4. RCS - Header:
  5. $Header: c:/daten/fips/source/main/RCS/cmdl_arg.cpp 1.4 1995/01/19 00:00:51 schaefer Exp schaefer $
  6. Copyright (C) 1993 Arno Schaefer
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. Report problems and direct all questions to:
  19. schaefer@rbg.informatik.th-darmstadt.de
  20. */
  21. #include <stdio.h>
  22. #include <ctype.h>
  23. #include <string.h>
  24. #include <stdlib.h>
  25. #include "global.h"
  26. #include "getopt.h"
  27. /* ----------------------------------------------------------------------- */
  28. /* Replacement for atoi                                                    */
  29. /* ----------------------------------------------------------------------- */
  30. static int atoint (char *string)
  31. {
  32. long int value = 0;
  33. while (isdigit (*string))
  34. {
  35. value = value * 10 + (*string - '0');
  36. if (value > 32767) return (-1);
  37. string++;
  38. }
  39. if (*string != '') return (-1);
  40. return (int) value;
  41. }
  42. /* ----------------------------------------------------------------------- */
  43. /* Usage instructions                                                      */
  44. /* ----------------------------------------------------------------------- */
  45. static void usage (void)
  46. {
  47. printf ("nFIPS [-t] [-d] [-h|-?] [-n<num>]:nn");
  48. printf ("-t        : test mode (no writes to disk)n");
  49. printf ("-d        : debug moden");
  50. printf ("-h/-?     : this help pagen");
  51. printf ("-n<num>   : select drive <num> - valid values: 128 to 255n");
  52. }
  53. /* ----------------------------------------------------------------------- */
  54. /* Process commandline parameters                                          */
  55. /* ----------------------------------------------------------------------- */
  56. void evaluate_argument_vector (int argc, char *argv[])
  57. {
  58. int c;
  59. opterr = 0;
  60. while ((c = getopt (argc, argv, ":htdn:")) >= 0)
  61. {
  62. switch (c)
  63. {
  64. case 't':
  65. global.test_mode = true;
  66. break;
  67. case 'd':
  68. global.debug_mode = true;
  69. break;
  70. case 'h':
  71. usage ();
  72. exit (1);
  73. case 'n':
  74. global.drive_number_cmdline = atoint (optarg);
  75. if
  76. (
  77. global.drive_number_cmdline < 0x80
  78. || global.drive_number_cmdline > 0xff
  79. )
  80. {
  81. fprintf
  82. (
  83. stderr,
  84. "nInvalid argument: %sn",
  85. optarg
  86. );
  87. usage ();
  88. exit (-1);
  89. }
  90. break;
  91. case ':':
  92. fprintf
  93. (
  94. stderr,
  95. "nSwitch %c requires an argumentn",
  96. optopt
  97. );
  98. usage ();
  99. exit (-1);
  100. case '?':
  101. if (optopt != '?')
  102. fprintf
  103. (
  104. stderr,
  105. "nInvalid Commandline Parameter: %sn",
  106. argv[optind - 1]
  107. );
  108. usage ();
  109. exit (-1);
  110. } /* switch */
  111. } /* while */
  112. }