mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
8.6 KiB
300 lines
8.6 KiB
//+------------------------------------------------------------------
|
|
//
|
|
// File: cboolcmd.cxx
|
|
//
|
|
// Contents: implementation for CBoolCmdlineObj
|
|
//
|
|
// Synoposis: Encapsulates a command line switch which takes a
|
|
// Bool value. If the command line switch is present, the
|
|
// value is set to TRUE, otherwise it is set to FALSE
|
|
//
|
|
// Classes: CBoolCmdlineObj
|
|
//
|
|
// Functions:
|
|
// AsciiToBool private, local
|
|
// CBoolCmdlineObj::~CBoolCmdlineObj public
|
|
// CBoolCmdlineObj::DisplayValue public
|
|
// CBoolCmdlineObj::GetValue public
|
|
// CBoolCmdlineObj::SetValue public
|
|
//
|
|
// History: 06/15/92 DeanE Created
|
|
// 07/29/92 davey Added nlsType and nlsLineArgType
|
|
// 09/09/92 Lizch Changed SUCCESS to NO_ERROR
|
|
// 09/18/92 Lizch Precompile headers
|
|
// 11/14/92 DwightKr Updates for new version of NLS_STR
|
|
// 10/14/93 DeanE Converted to WCHAR
|
|
//
|
|
//-------------------------------------------------------------------
|
|
#include <comtpch.hxx>
|
|
#pragma hdrstop
|
|
|
|
#include <cmdlinew.hxx> // public cmdlinew stuff
|
|
#include "_clw.hxx" // private cmdlinew stuff
|
|
#include <ctype.h> // is functions
|
|
|
|
|
|
INT StringToBool(LPCNSTR nszBool, BOOL *pBool);
|
|
|
|
LPCNSTR nszCmdlineBool = _TEXTN("Flag ");
|
|
LPCNSTR nszLineArgBool = _TEXTN("[TRUE|FALSE] ");
|
|
|
|
NCHAR nchBoolEquater = _TEXTN(':');
|
|
|
|
// BUGBUG - base Equater needs to be a string, then the equator for
|
|
// a bool is L'<base equator><space>';
|
|
//
|
|
|
|
//+------------------------------------------------------------------
|
|
//
|
|
// Function: CBoolCmdlineObj Constructor
|
|
//
|
|
// Member: CBoolCmdlineObj
|
|
//
|
|
// Synoposis: Initialises switch string, usage strings and default value.
|
|
//
|
|
// Effects: Sets fSecondArg to FALSE, so that knows there is
|
|
// no argument following switch.
|
|
//
|
|
// Arguments: [nszSwitch] - the expected switch string
|
|
// [nszUsage] - the usage statement to display
|
|
// [nszDefault] - the value to be used if no switch is
|
|
// specified on the command line. Defaults
|
|
// to FALSE if not specified.
|
|
//
|
|
// Returns: none, but sets _iLastError
|
|
//
|
|
// History: Created 12/27/91 Lizch
|
|
// Converted to NLS_STR 04/17/92 Lizch
|
|
//
|
|
//-------------------------------------------------------------------
|
|
CBoolCmdlineObj::CBoolCmdlineObj(
|
|
LPCNSTR nszSwitch,
|
|
LPCNSTR nszUsage,
|
|
LPCNSTR nszDefault) :
|
|
CBaseCmdlineObj(nszSwitch, nszUsage, nszDefault)
|
|
{
|
|
_fSecondArg = TRUE;
|
|
SetEquater(nchBoolEquater);
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------
|
|
//
|
|
// Member: CBoolCmdlineObj::SetValue, public
|
|
//
|
|
// Synposis: Sets _pValue to point to the proper value of the switch
|
|
//
|
|
// Arguments: [nszString] - the string following the switch on the
|
|
// command line. Includes the equator (eg. ':'
|
|
// or '=' ), if any. It is ignored for this
|
|
// command line type.
|
|
//
|
|
// Returns: CMDLINE_NO_ERROR, CMDLINE_ERROR_OUT_OF_MEMORY
|
|
//
|
|
// History: Created 6/15/92 DeanE Stolen from Security implementation
|
|
//
|
|
//-------------------------------------------------------------------
|
|
INT CBoolCmdlineObj::SetValue(LPCNSTR nszString)
|
|
{
|
|
INT nRet = CMDLINE_NO_ERROR;
|
|
|
|
// Delete old value if it exists
|
|
delete (BOOL *)_pValue;
|
|
_pValue = NULL;
|
|
|
|
// Allocate space for a new value and initialize it
|
|
_pValue = new BOOL;
|
|
if (_pValue == NULL)
|
|
{
|
|
nRet = CMDLINE_ERROR_OUT_OF_MEMORY;
|
|
}
|
|
else
|
|
{
|
|
nRet = StringToBool(nszString, (BOOL *)_pValue);
|
|
if (nRet != CMDLINE_NO_ERROR)
|
|
{
|
|
delete (BOOL *)_pValue;
|
|
_pValue = NULL;
|
|
}
|
|
}
|
|
|
|
return(nRet);
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------
|
|
//
|
|
// Member: CBoolCmdlineObj::GetValue, public
|
|
//
|
|
// Synposis: Returns pointer to BOOL that has the value.
|
|
//
|
|
// Arguments: void
|
|
//
|
|
// Returns: BOOL *
|
|
//
|
|
// History: Created 6/15/92 DeanE Stolen from Security implementation
|
|
//
|
|
//-------------------------------------------------------------------
|
|
const BOOL *CBoolCmdlineObj::GetValue()
|
|
{
|
|
return((BOOL *)_pValue);
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------
|
|
//
|
|
// Member: CBoolCmdlineObj::DisplayValue, public
|
|
//
|
|
// Synoposis: prints the stored command line value according to
|
|
// current display method. This will generally be to stdout.
|
|
//
|
|
// History: 6/15/92 DeanE Stolen from Security implementation
|
|
// 7/31/92 davey Modified to match other cmdline objs.
|
|
//
|
|
//-------------------------------------------------------------------
|
|
void CBoolCmdlineObj::DisplayValue()
|
|
{
|
|
if (_pValue != NULL)
|
|
{
|
|
if (*(BOOL *)_pValue == TRUE)
|
|
{
|
|
_sNprintf(_nszErrorBuf,
|
|
_TEXTN("Command line switch %s is Set\n"),
|
|
_pnszSwitch);
|
|
}
|
|
else
|
|
{
|
|
_sNprintf(_nszErrorBuf,
|
|
_TEXTN("Command line switch %s is Not Set\n"),
|
|
_pnszSwitch);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_sNprintf(_nszErrorBuf,
|
|
_TEXTN("Command line switch %s has no value\n"),
|
|
_pnszSwitch);
|
|
}
|
|
|
|
(*_pfnDisplay)(_nszErrorBuf);
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------
|
|
//
|
|
// Member: CBoolCmdlineObj::~CBoolCmdlineObj, public
|
|
//
|
|
// Synoposis: Cleans up CBoolCmdlineObj objects.
|
|
//
|
|
// History: Created 6/15/92 DeanE Stolen from Security implementation
|
|
//
|
|
//-------------------------------------------------------------------
|
|
CBoolCmdlineObj::~CBoolCmdlineObj()
|
|
{
|
|
delete (BOOL *)_pValue;
|
|
_pValue = (BOOL *)NULL;
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------
|
|
//
|
|
// Function: StringToBool
|
|
//
|
|
// Synoposis: Converts ascii string to the equivalent Boolean value,
|
|
// TRUE for "true", FALSE for "false", or TRUE for a null
|
|
// string or string starting with a space.
|
|
//
|
|
// Arguments: [nszBool] - string to convert
|
|
// [pBool] - pointer to converted boolean
|
|
//
|
|
// Returns: CMDLINE_NO_ERROR, CMDLINE_ERROR_INVALID_VALUE
|
|
//
|
|
// History: Created 12/17/91 Lizch
|
|
// Implemented as AsciiToBool 6/15/92 DeanE
|
|
// Renamed StringToBool 10/13/93 DeanE
|
|
//
|
|
//-------------------------------------------------------------------
|
|
INT StringToBool(LPCNSTR nszBool, BOOL *pBool)
|
|
{
|
|
INT iRC = CMDLINE_NO_ERROR;
|
|
|
|
// If the string given to us is a null string or begins with a space,
|
|
// the function was called from the parser and the command line arg
|
|
// was given (with no value). We want the value to be TRUE, however.
|
|
//
|
|
if ((nchClNull == *nszBool) || (nchClSpace == *nszBool))
|
|
{
|
|
*pBool = TRUE;
|
|
}
|
|
else
|
|
// Otherwise we set the boolean to a value explicitly based on
|
|
// the string passed, either 'true' or 'false', case insensitive
|
|
//
|
|
if (0 == _ncsicmp(nszBool, nszBoolTrue) ||
|
|
0 == _ncsicmp(nszBool, nszBoolOne))
|
|
{
|
|
*pBool = TRUE;
|
|
}
|
|
else
|
|
if (0 == _ncsicmp(nszBool, nszBoolFalse) ||
|
|
0 == _ncsicmp(nszBool, nszBoolZero))
|
|
{
|
|
*pBool = FALSE;
|
|
}
|
|
else
|
|
{
|
|
iRC = CMDLINE_ERROR_INVALID_VALUE;
|
|
}
|
|
|
|
return(iRC);
|
|
}
|
|
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Method: CBoolCmdlineObj::QueryCmdlineType, protected, const
|
|
//
|
|
// Synoposis: returns a character pointer to the cmdline type.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: const NCHAR pointer to string.
|
|
//
|
|
// History: 28-Jul-92 davey Created.
|
|
//
|
|
//--------------------------------------------------------------------
|
|
LPCNSTR CBoolCmdlineObj::QueryCmdlineType() const
|
|
{
|
|
return(nszCmdlineBool);
|
|
}
|
|
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Method: CBoolCmdlineObj::QueryLineArgType, protected, const
|
|
//
|
|
// Synoposis: returns a character pointer to the line arg type.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: const NCHAR pointer to string.
|
|
//
|
|
// History: 28-Jul-92 davey Created.
|
|
//
|
|
//--------------------------------------------------------------------
|
|
LPCNSTR CBoolCmdlineObj::QueryLineArgType() const
|
|
{
|
|
LPCNSTR nszRet;
|
|
|
|
// if user has not defined one then give default one
|
|
if (NULL == _pnszLineArgType)
|
|
{
|
|
nszRet = nszLineArgBool;
|
|
}
|
|
else
|
|
{
|
|
nszRet = _pnszLineArgType;
|
|
}
|
|
|
|
return(nszRet);
|
|
}
|