home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / getopt.awk < prev    next >
Text File  |  2004-08-02  |  2KB  |  81 lines

  1. # getopt.awk --- do C library getopt(3) function in awk
  2. #
  3. # Arnold Robbins, arnold@gnu.org, Public Domain
  4. #
  5. # Initial version: March, 1991
  6. # Revised: May, 1993
  7.  
  8. # External variables:
  9. #    Optind -- index in ARGV of first nonoption argument
  10. #    Optarg -- string value of argument to current option
  11. #    Opterr -- if nonzero, print our own diagnostic
  12. #    Optopt -- current option letter
  13.  
  14. # Returns:
  15. #    -1     at end of options
  16. #    ?      for unrecognized option
  17. #    <c>    a character representing the current option
  18.  
  19. # Private Data:
  20. #    _opti  -- index in multi-flag option, e.g., -abc
  21. function getopt(argc, argv, options,    thisopt, i)
  22. {
  23.     if (length(options) == 0)    # no options given
  24.         return -1
  25.  
  26.     if (argv[Optind] == "--") {  # all done
  27.         Optind++
  28.         _opti = 0
  29.         return -1
  30.     } else if (argv[Optind] !~ /^-[^: \t\n\f\r\v\b]/) {
  31.         _opti = 0
  32.         return -1
  33.     }
  34.     if (_opti == 0)
  35.         _opti = 2
  36.     thisopt = substr(argv[Optind], _opti, 1)
  37.     Optopt = thisopt
  38.     i = index(options, thisopt)
  39.     if (i == 0) {
  40.         if (Opterr)
  41.             printf("%c -- invalid option\n",
  42.                                   thisopt) > "/dev/stderr"
  43.         if (_opti >= length(argv[Optind])) {
  44.             Optind++
  45.             _opti = 0
  46.         } else
  47.             _opti++
  48.         return "?"
  49.     }
  50.     if (substr(options, i + 1, 1) == ":") {
  51.         # get option argument
  52.         if (length(substr(argv[Optind], _opti + 1)) > 0)
  53.             Optarg = substr(argv[Optind], _opti + 1)
  54.         else
  55.             Optarg = argv[++Optind]
  56.         _opti = 0
  57.     } else
  58.         Optarg = ""
  59.     if (_opti == 0 || _opti >= length(argv[Optind])) {
  60.         Optind++
  61.         _opti = 0
  62.     } else
  63.         _opti++
  64.     return thisopt
  65. }
  66. BEGIN {
  67.     Opterr = 1    # default is to diagnose
  68.     Optind = 1    # skip ARGV[0]
  69.  
  70.     # test program
  71.     if (_getopt_test) {
  72.         while ((_go_c = getopt(ARGC, ARGV, "ab:cd")) != -1)
  73.             printf("c = <%c>, optarg = <%s>\n",
  74.                                        _go_c, Optarg)
  75.         printf("non-option arguments:\n")
  76.         for (; Optind < ARGC; Optind++)
  77.             printf("\tARGV[%d] = <%s>\n",
  78.                                     Optind, ARGV[Optind])
  79.     }
  80. }
  81.