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

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.2 $
  3.  * $Date: 1998/10/14 22:48:26 $
  4.  */
  5. ////////////////////////////////////////////////////////////////
  6. //               Copyright (c) 1996-98 Lucent Technologies    //
  7. //                       All Rights Reserved                  //
  8. //                                                            //
  9. //                       THIS IS UNPUBLISHED                  //
  10. //                       PROPRIETARY SOURCE                   //
  11. //                   CODE OF Lucent Technologies              //
  12. // AND elemedia   //
  13. //                                                            //
  14. ////////////////////////////////////////////////////////////////
  15. //
  16. ////////////////////////////////////////////////////////////////
  17. // Example programs are provided soley to demonstrate one     //
  18. // possible use of the stack libraries and are included for   //
  19. // instructional purposes only.  You are free to use, modify  //
  20. // and/or redistribute any portion of code in the example     //
  21. // programs.  However, such examples are not intended to      //
  22. // represent production quality code.                         //
  23. //                                                            //
  24. // THE COPYRIGHT HOLDERS PROVIDE THESE EXAMPLE PROGRAMS       //
  25. // "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED     //
  26. // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED     //
  27. // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A            //
  28. // PARTICULAR PURPOSE.                                        //
  29. ////////////////////////////////////////////////////////////////
  30. #if defined(WIN32)
  31. #include <windows.h>
  32. #endif
  33. #include <stdio.h>
  34. /*****************************************************************************
  35.                                 getopt
  36.  This routine is based on a UNIX standard for parsing options in command
  37.  lines, and is provided because some system libraries do not include it.
  38.  Check UNIX manuals for more info on the arguments
  39. */
  40. #ifndef unix 
  41. #include <ctype.h>
  42. char *optarg = NULL;
  43. int optind = 1;
  44. int opterr = 1;
  45. int getopt (int argc, char ** argv, const char * optstring)
  46. {
  47. static int    multi = 0;  /* remember that we are in the middle of a group */
  48. static char * pi = NULL;  /* .. and where we are in the group */
  49. char * po;
  50. int c;
  51. if (optind >= argc)
  52. return -1;
  53. if (! multi)  {
  54. pi = argv [optind];
  55. if ((* pi != '-') && (* pi != '/'))
  56. return -1;
  57. else {
  58. c = * ++ pi;
  59.       /* test for null option - usually means use stdin
  60. * but this is treated as an arg, not an option
  61. */
  62. if (c == '')
  63. return -1;
  64. else if (c == '-') {
  65. /* '--' terminates options */
  66. ++ optind;
  67. return -1;
  68. }
  69. }
  70. }
  71. else
  72. c = * pi;
  73. ++ pi;
  74. if ((! isalnum (c)) || ((po = strchr (optstring, c)) == NULL))
  75. {
  76. if (opterr && (c != '?'))
  77. fprintf (stderr, "%s: illegal option -- %cn", argv [0], c);
  78. c = '?';
  79. }
  80. else if (* (po + 1) == ':')
  81. {
  82. /* opt-arg required.
  83.  * Note that the standard requires white space, but current
  84.  * practice has it optional.
  85.  */
  86. if (* pi != '')
  87. {
  88. optarg = pi;
  89. multi = 0;
  90. ++ optind;
  91. }
  92. else
  93. {
  94. multi = 0;
  95. if (++ optind >= argc)
  96. {
  97. if (opterr)
  98. fprintf (stderr,
  99. "%s: option requires an argument -- %cn", argv [0], c);
  100. return '?';
  101. }
  102. optarg = argv [optind ++];
  103. }
  104. return c;
  105. }
  106. if (* pi == '')
  107. {
  108. multi = 0;
  109. ++ optind;
  110. }
  111. else
  112. {
  113. multi = 1;
  114. }
  115. return c;
  116. }
  117. #endif