/*++ Copyright (C) Microsoft Corporation, 1998 - 1999 Module Name: tclRdCmd Abstract: This header file describes the Tcl Command Line parser object. Author: Doug Barlow (dbarlow) 3/14/1998 Environment: Win32, C++ w/ exceptions, Tcl --*/ #ifndef _TCLRDCMD_H_ #define _TCLRDCMD_H_ extern "C" { #include } #ifndef _LPCBYTE_DEFINED #define _LPCBYTE_DEFINED typedef const BYTE *LPCBYTE; #endif #ifndef _LPCVOID_DEFINED #define _LPCVOID_DEFINED typedef const VOID *LPCVOID; #endif #include #define SZ(x) ((LPSTR)((LPCSTR)(x))) typedef struct { LPCTSTR szValue; LONG lValue; } ValueMap; // //============================================================================== // // CRenderableData // class CRenderableData { public: typedef enum { Undefined, Text, Ansi, Unicode, Hexidecimal, File } DisplayType; // Constructors & Destructor CRenderableData(); ~CRenderableData(); // Properties // Methods void LoadData(LPCTSTR szData, DisplayType dwType = Undefined); void LoadData(LPCBYTE pbData, DWORD cbLength) { m_bfData.Set(pbData, cbLength); }; LPCTSTR RenderData(DisplayType dwType = Undefined); LPCBYTE Value(void) const { return m_bfData.Access(); }; DWORD Length(void) const { return m_bfData.Length(); }; void SetDisplayType(DisplayType dwType) { m_dwType = dwType; }; // Operators protected: // Properties DisplayType m_dwType; CBuffer m_bfData; CString m_szString; CString m_szFile; // Methods // Friends friend class CTclCommand; }; // //============================================================================== // // CArgArray // class CArgArray { public: // Constructors & Destructor CArgArray(CTclCommand &tclCmd); virtual ~CArgArray(); void LoadList(LPCSTR szList); DWORD Count(void) const { return m_dwElements; }; void Fetch(DWORD dwIndex, CString &szValue) const { szValue = m_rgszElements[dwIndex]; }; // Properties // Methods // Operators protected: // Properties CTclCommand *m_pTclCmd; CDynamicArray m_rgszElements; LPSTR *m_pszMemory; DWORD m_dwElements; // Methods }; // //============================================================================== // // CTclCommand // class CTclCommand { public: // Constructors & Destructor CTclCommand(void); CTclCommand(IN Tcl_Interp *interp, IN int argc, IN char *argv[]); ~CTclCommand(); // Properties // Methods void Initialize(IN Tcl_Interp *interp, IN int argc, IN char *argv[]); void SetError(IN DWORD dwError); void SetError(IN LPCTSTR szMessage, IN DWORD dwError); void SetError(IN LPCTSTR szMsg1, ...); DWORD TclError(void); LONG Keyword(IN LPCTSTR szKey, ...); BOOL IsMoreArguments(DWORD dwCount = 1) const; void NoMoreArguments(void); void PeekArgument(CString &szToken); void NextArgument(void); void NextArgument(CString &szToken); DWORD BadSyntax(LPCTSTR szOffender = NULL); void GetArgument(DWORD dwArgId, CString &szToken); LONG Value(void); LONG Value(LONG lDefault); LONG MapValue(const ValueMap *rgvmMap, BOOL fValueOk = TRUE); LONG MapValue(const ValueMap *rgvmMap, CString &szValue, BOOL fValueOk = TRUE); DWORD MapFlags(const ValueMap *rgvmMap, BOOL fValueOk = TRUE); void OutputStyle(CRenderableData &outData); void InputStyle(CRenderableData &inData); void IOStyle(CRenderableData &inData, CRenderableData &outData); void Render(CRenderableData &outData); void ReadData(CRenderableData &inData); // Operators operator Tcl_Interp*() { return m_pInterp; }; protected: // Properties BOOL m_fErrorDeclared; Tcl_Interp *m_pInterp; DWORD m_dwArgCount; DWORD m_dwArgIndex; char **m_rgszArgs; // Methods void Constructor(void); }; #endif // _TCLRDCMD_H_