116 lines
3.8 KiB
C++
Executable File
116 lines
3.8 KiB
C++
Executable File
/*
|
|
** Slab NG - The Next Generation of Slab
|
|
** (c) Copyright 2002-2004 Tom Bampton
|
|
** All Rights Reserved.
|
|
**
|
|
** $Id: Getopt.h,v 1.1 2003/10/30 23:55:29 tom Exp $
|
|
**
|
|
** Filename: Getopt.h
|
|
** Author: Tom Bampton
|
|
** Created: 30/10/2003
|
|
** Purpose:
|
|
** Command Line Parser
|
|
**
|
|
*/
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
/// \file Getopt.h
|
|
/// \brief Header for Getopt
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef SLAB_GETOPT_H
|
|
#define SLAB_GETOPT_H
|
|
|
|
#define GO_BAD_CHAR '?'
|
|
#define GO_BAD_ARG ':'
|
|
#define GO_INVALID_CHAR '!'
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
/// \brief Command Line Parser
|
|
///
|
|
/// Getopt provides a command line parser similar to Unix's getopt()
|
|
///
|
|
/// Note that this version of getopt() will not print any messages to
|
|
/// the terminal, you will need to manage this yourself.
|
|
///
|
|
/// Parts of this section have been lifted from the getopt() manual page.
|
|
//////////////////////////////////////////////////////////////////////
|
|
class Getopt
|
|
{
|
|
private:
|
|
char *m_sOptions;
|
|
char *m_sPlace;
|
|
int m_nargc;
|
|
char **m_nargv;
|
|
|
|
public:
|
|
/*! \brief Current argv Index
|
|
*/
|
|
int m_nOptInd;
|
|
/*! \brief Current Option
|
|
*/
|
|
int m_nOptOpt;
|
|
/*! \brief Argument to current option if applicable
|
|
*/
|
|
char *m_sOptArg;
|
|
|
|
/*! \brief Construct a Getopt
|
|
|
|
The string tells Getopt what arguments this program takes. It may
|
|
contain the following elements: individual characters, and characters
|
|
followed by a colon to indicate an option argument is to follow. For
|
|
example, an option string "x" recognizes an option ``-x'', and an
|
|
option string "x:" recognizes an option and argu- ment ``-x argument''.
|
|
It does not matter to Getopt if a following argument has leading
|
|
white space.
|
|
|
|
\param sOptions Option string
|
|
\sa getopt(), Reset()
|
|
*/
|
|
Getopt(char *sOptions);
|
|
virtual ~Getopt();
|
|
|
|
/*! \brief Parse arguments
|
|
|
|
On return from getopt(), m_sOptArg points to an option argument, if it
|
|
is anticipated, and the variable m_nOptInd contains the index to the
|
|
next argv argument for a subsequent call to getopt(). The variable
|
|
m_nOptOpt saves the last known option character returned by getopt().
|
|
|
|
The m_nOptInd variable is set to 1, but may be set to another value
|
|
before a set of calls to getopt() in order to skip over more or less
|
|
argv entries.
|
|
|
|
In order to use getopt() to evaluate multiple sets of arguments, or to
|
|
evaluate a single set of arguments multiple times, call Reset() before
|
|
the second and each additional set of calls to getopt()
|
|
|
|
The getopt() function returns -1 when the argument list is exhausted,
|
|
or GO_INVALID_CHAR if a non-recognized option is encountered. You may
|
|
use m_nOptOpt to find the invalid character, and display a warning. If
|
|
an option takes an argument, but the user did not supply one on the
|
|
command line, getopt() returns GO_BAD_ARG. m_nOptOpt will then contain
|
|
the option, for printing of warning messages. The interpretation of
|
|
options in the argument list may be cancelled by the option `--'
|
|
(double dash) which causes getopt() to signal the end of argument
|
|
processing and return -1. When all options have been processed (i.e.,
|
|
up to the first non-option argument), getopt() returns -1.
|
|
|
|
\param nargc The argc from your main() function
|
|
\param nargv The argv from your main() function
|
|
\return -1 on end of processing, the character of the current option
|
|
or one of the error values as described above.
|
|
\sa Reset(), Getopt(char *sOptions)
|
|
*/
|
|
int getopt(int nargc, char **nargv);
|
|
/*! \brief Reset getopt() for subsequent calls
|
|
|
|
See the description of getopt() for information on Reset()
|
|
|
|
\sa getopt()
|
|
*/
|
|
void Reset(void);
|
|
};
|
|
|
|
#endif // SLAB_GETOPT_H
|