2019-09-23 17:29:25 +00:00
/*
* * m_argv . h
* *
* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* * Copyright 1998 - 2006 Randy Heit
* * All rights reserved .
* *
* * Redistribution and use in source and binary forms , with or without
* * modification , are permitted provided that the following conditions
* * are met :
* *
* * 1. Redistributions of source code must retain the above copyright
* * notice , this list of conditions and the following disclaimer .
* * 2. Redistributions in binary form must reproduce the above copyright
* * notice , this list of conditions and the following disclaimer in the
* * documentation and / or other materials provided with the distribution .
* * 3. The name of the author may not be used to endorse or promote products
* * derived from this software without specific prior written permission .
* *
* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` AS IS ' ' AND ANY EXPRESS OR
* * IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED WARRANTIES
* * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED .
* * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT , INDIRECT ,
* * INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT
* * NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* * DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* * THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* * ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF
* * THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* *
*/
# ifndef __M_ARGV_H__
# define __M_ARGV_H__
2019-10-21 19:36:05 +00:00
# include "tarray.h"
# include "zstring.h"
2019-09-23 17:29:25 +00:00
//
// MISC
//
class FArgs
{
public :
2019-10-31 22:25:21 +00:00
typedef TIterator < FString > iterator ;
typedef TIterator < const FString > const_iterator ;
typedef FString value_type ;
iterator begin ( )
{
2019-12-06 22:20:18 +00:00
return Argv . begin ( ) ;
2019-10-31 22:25:21 +00:00
}
const_iterator begin ( ) const
{
2019-12-06 22:20:18 +00:00
return Argv . begin ( ) ;
2019-10-31 22:25:21 +00:00
}
const_iterator cbegin ( ) const
{
2019-12-06 22:20:18 +00:00
return Argv . begin ( ) ;
2019-10-31 22:25:21 +00:00
}
iterator end ( )
{
2019-12-06 22:20:18 +00:00
return Argv . end ( ) ;
2019-10-31 22:25:21 +00:00
}
const_iterator end ( ) const
{
2019-12-06 22:20:18 +00:00
return Argv . end ( ) ;
2019-10-31 22:25:21 +00:00
}
const_iterator cend ( ) const
{
2019-12-06 22:20:18 +00:00
return Argv . end ( ) ;
2019-10-31 22:25:21 +00:00
}
2019-09-23 17:29:25 +00:00
FArgs ( ) ;
FArgs ( const FArgs & args ) ;
FArgs ( int argc , char * * argv ) ;
2019-09-23 17:52:25 +00:00
FArgs ( int argc , const char * * argv ) ;
2019-10-21 19:36:05 +00:00
FArgs ( int argc , FString * argv ) ;
2019-09-23 17:29:25 +00:00
FArgs & operator = ( const FArgs & other ) ;
2019-11-01 18:25:42 +00:00
const FString & operator [ ] ( size_t index ) { return Argv [ index ] ; }
2019-09-23 17:29:25 +00:00
2019-10-21 19:36:05 +00:00
void AppendArg ( FString arg ) ;
void AppendArgs ( int argc , const FString * argv ) ;
2019-09-23 17:29:25 +00:00
void RemoveArg ( int argindex ) ;
void RemoveArgs ( const char * check ) ;
void SetArgs ( int argc , char * * argv ) ;
2019-10-28 21:19:50 +00:00
void CollectFiles ( const char * finalname , const char * * param , const char * extension ) ;
2019-09-23 17:29:25 +00:00
void CollectFiles ( const char * param , const char * extension ) ;
FArgs * GatherFiles ( const char * param ) const ;
void SetArg ( int argnum , const char * arg ) ;
int CheckParm ( const char * check , int start = 1 ) const ; // Returns the position of the given parameter in the arg list (0 if not found).
2019-10-28 21:19:50 +00:00
int CheckParm ( const char * * check , int start = 1 ) const ; // Returns the position of the given parameter in the arg list (0 if not found). Allows checking for multiple switches
2019-10-21 19:36:05 +00:00
int CheckParmList ( const char * check , FString * * strings , int start = 1 ) const ;
2019-09-23 17:29:25 +00:00
const char * CheckValue ( const char * check ) const ;
const char * GetArg ( int arg ) const ;
2019-10-21 19:36:05 +00:00
FString * GetArgList ( int arg ) const ;
FString TakeValue ( const char * check ) ;
2019-09-23 17:29:25 +00:00
int NumArgs ( ) const ;
void FlushArgs ( ) ;
2020-01-11 16:05:25 +00:00
TArray < FString > & Array ( ) { return Argv ; }
2019-09-23 17:29:25 +00:00
private :
2019-10-21 19:36:05 +00:00
TArray < FString > Argv ;
2019-09-23 17:29:25 +00:00
} ;
extern FArgs * Args ;
# endif //__M_ARGV_H__