home *** CD-ROM | disk | FTP | other *** search
/ Micro R&D 1 / MicroRD-CD-ROM-Vol1-1994.iso / disktools / moni / bb20.lzh / BB / getoption.c < prev    next >
C/C++ Source or Header  |  1992-01-18  |  1KB  |  70 lines

  1. /*
  2.  * getoption.c - command line argument parsing aid
  3.  *
  4.  * Bruno Costa & Lucia Darsa - 20 May 90 - 20 May 90
  5.  */
  6.  
  7. #include <string.h>
  8.  
  9. int getoption (int argc, char *argv[], char *argopts, char *noargopts, char *data)
  10. {
  11.  static int argn = 1, i = 0;
  12.  char c;
  13.  
  14.  if (argn >= argc)
  15.    return 0;
  16.  
  17.  if (i == 0)
  18.    if (argv[argn][0] != '-')
  19.    {
  20.      strcpy (data, argv[argn++]);
  21.      return 1;
  22.    }
  23.    else
  24.      ++i;
  25.  
  26.  c = argv[argn][i++];
  27.  
  28.  if (strchr (argopts, c))
  29.  {
  30.    if (argv[argn][i] == '\0')
  31.      strcpy (data, argv[++argn]);
  32.    else
  33.      strcpy (data, &argv[argn][i]);
  34.  
  35.    ++argn;
  36.    i = 0;
  37.  }
  38.  else if (strchr (noargopts, c))
  39.  {
  40.    strcpy (data, "");
  41.    if (argv[argn][i] == '\0')
  42.    {
  43.      ++argn;
  44.      i = 0;
  45.    }
  46.  }
  47.  else
  48.    return -c;
  49.  
  50.  return (c);
  51. }
  52.  
  53. #ifdef TEST
  54. #include <stdio.h>
  55.  
  56. void main (int argc, char *argv[])
  57. {
  58.  char data[100];
  59.  int c;
  60.  
  61.  while (c = getoption (argc, argv, "xyz", "abc", data))
  62.    if (c < 0)
  63.      printf ("unknown option %c\n", -c);
  64.    else if (c == 1)
  65.      printf ("argument = %s\n", data);
  66.    else
  67.      printf ("option = %c, data = %s\n", c, data);
  68. }
  69. #endif
  70.