//+------------------------------------------------------------------ // // 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 #pragma hdrstop #include // public cmdlinew stuff #include "_clw.hxx" // private cmdlinew stuff #include // 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''; // //+------------------------------------------------------------------ // // 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); }