summaryrefslogtreecommitdiff
path: root/ace/Get_Opt.h
diff options
context:
space:
mode:
authorlevine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1996-10-21 21:41:34 +0000
committerlevine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1996-10-21 21:41:34 +0000
commita5fdebc5f6375078ec1763850a4ca23ec7fe6458 (patch)
treebcf0a25c3d45a209a6e3ac37b233a4812f29c732 /ace/Get_Opt.h
downloadATCD-a5fdebc5f6375078ec1763850a4ca23ec7fe6458.tar.gz
Initial revision
Diffstat (limited to 'ace/Get_Opt.h')
-rw-r--r--ace/Get_Opt.h161
1 files changed, 161 insertions, 0 deletions
diff --git a/ace/Get_Opt.h b/ace/Get_Opt.h
new file mode 100644
index 00000000000..0e26a51e807
--- /dev/null
+++ b/ace/Get_Opt.h
@@ -0,0 +1,161 @@
+/* -*- C++ -*- */
+// $Id$
+
+/* ACE_Get_Opt for GNU.
+ Copyright (C) 1987, 1989 Free Software Foundation, Inc. (Modified
+ by Douglas C. Schmidt for use with C++.)
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 1, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+// ============================================================================
+//
+// = LIBRARY
+// ace
+//
+// = FILENAME
+// Get_Opt.h
+//
+// = AUTHOR
+// Doug Schmidt
+//
+// ============================================================================
+
+#if !defined (ACE_GET_OPT_H)
+#define ACE_GET_OPT_H
+
+#include "ace/ACE.h"
+
+class ACE_Export ACE_Get_Opt
+ // = TITLE
+ // Iterator for parsing command-line arguments.
+ //
+ // = DESCRIPTION
+ // This version of `get_opt' appears to the caller like standard
+ // Unix `get_opt' but it behaves differently for the user, since it
+ // allows the user to intersperse the options with the other
+ // arguments.
+ //
+ // As `get_opt' works, it permutes the elements of `argv' so that,
+ // when it is done, all the options precede everything else. Thus
+ // all application programs are extended to handle flexible argument order.
+ //
+ // Setting the environment variable _POSIX_OPTION_ORDER disables permutation.
+ // Then the behavior is completely standard.
+ //
+ // GNU application programs can use a third alternative mode in which
+ // they can distinguish the relative order of options and other arguments.
+
+{
+public:
+ ACE_Get_Opt (int argc, char **argv, char *optstring, int skip_argv0 = 1, int report_errors = 0);
+ // Initialize the internal data when the first call is made. Start
+ // processing options with ARGV-element 0 + <skip_argv0>; the
+ // sequence of previously skipped non-option ARGV-elements is empty.
+
+ int operator () (void);
+ // Scan elements of ARGV (whose length is ARGC) for option
+ // characters given in OPTSTRING.
+ //
+ // If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ // then it is an option element. The characters of this element
+ // (aside from the initial '-') are option characters. If `get_opt'
+ // is called repeatedly, it returns successively each of the option characters
+ // from each of the option elements.
+ //
+ // If `get_opt' finds another option character, it returns that character,
+ // updating `optind' and `nextchar' so that the next call to `get_opt' can
+ // resume the scan with the following option character or ARGV-element.
+ //
+ // If there are no more option characters, `get_opt' returns `EOF'.
+ // Then `optind' is the index in ARGV of the first ARGV-element
+ // that is not an option. (The ARGV-elements have been permuted
+ // so that those that are not options now come last.)
+ //
+ // OPTSTRING is a string containing the legitimate option characters.
+ // A colon in OPTSTRING means that the previous character is an option
+ // that wants an argument. The argument is taken from the rest of the
+ // current ARGV-element, or from the following ARGV-element,
+ // and returned in `optarg'.
+ //
+ // If an option character is seen that is not listed in OPTSTRING,
+ // return '?' after printing an error message. If you set `opterr' to
+ // zero, the error message is suppressed but we still return '?'.
+ //
+ // If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ // so the following text in the same ARGV-element, or the text of the following
+ // ARGV-element, is returned in `optarg. Two colons mean an option that
+ // wants an optional arg; if there is text in the current ARGV-element,
+ // it is returned in `optarg'.
+ //
+ // If OPTSTRING starts with `-', it requests a different method of handling the
+ // non-option ARGV-elements. See the comments about RETURN_IN_ORDER, above. */
+
+ // = Public data members (should be hidden...).
+
+ char *optarg;
+ // For communication from `get_opt' to the caller. When `get_opt'
+ // finds an option that takes an argument, the argument value is
+ // returned here. Also, when `ordering' is RETURN_IN_ORDER, each
+ // non-option ARGV-element is returned here.
+
+ int optind;
+ // Index in ARGV of the next element to be scanned. This is used
+ // for communication to and from the caller and for communication
+ // between successive calls to `get_opt'. On entry to `get_opt',
+ // zero means this is the first call; initialize.
+ //
+ // When `get_opt' returns EOF, this is the index of the first of the
+ // non-option elements that the caller should itself scan.
+ //
+ // Otherwise, `optind' communicates from one call to the next
+ // how much of ARGV has been scanned so far.
+
+ int opterr;
+ // Callers store zero here to inhibit the error message for
+ // unrecognized options.
+
+ // = GNU extensions
+ int nargc;
+ char **nargv;
+ char *noptstring;
+
+ void dump (void) const;
+ // Dump the state of an object.
+
+ ACE_ALLOC_HOOK_DECLARE;
+ // Declare the dynamic allocation hooks.
+
+private:
+
+ char *nextchar;
+ // The next char to be scanned in the option-element in which the
+ // last option character we returned was found. This allows us to
+ // pick up the scan where we left off.
+ //
+ // If this is zero, or a null string, it means resume the scan
+ // by advancing to the next ARGV-element.
+
+ int first_nonopt;
+ int last_nonopt;
+ // Describe the part of ARGV that contains non-options that have
+ // been skipped. `first_nonopt' is the index in ARGV of the first
+ // of them; `last_nonopt' is the index after the last of them.
+};
+
+#if defined (__ACE_INLINE__)
+#include "ace/Get_Opt.i"
+#endif /* __ACE_INLINE__ */
+
+#endif /* ACE_GET_OPT_H */