|
|
// Copyright (c) 1993-1999 Microsoft Corporation
#ifndef __CMDANA_HXX__
#define __CMDANA_HXX__
#include "common.hxx"
#include "errors.hxx"
#include <stream.hxx>
class ISTREAM;
enum _swenum { SWITCH_NOTHING ,BASE_FILENAME = SWITCH_NOTHING ,SWITCH_D ,SWITCH_I ,SWITCH_U ,SWITCH_W ,SWITCH_CONFIRM ,SWITCH_NOLOGO ,SWITCH_CPP_CMD ,SWITCH_CPP_OPT ,SWITCH_MSC_VER ,SWITCH_CSTUB ,SWITCH_ENV ,SWITCH_ERROR ,SWITCH_ROBUST ,SWITCH_NO_ROBUST ,SWITCH_HEADER ,SWITCH_NO_HEADER ,SWITCH_NO_CPP ,SWITCH_NO_DEF_IDIR ,SWITCH_NO_ENUM_LIT ,SWITCH_USE_EPV ,SWITCH_NO_DEFAULT_EPV ,SWITCH_NO_WARN ,SWITCH_OUT ,SWITCH_SSTUB ,SWITCH_STUB ,SWITCH_SYNTAX_CHECK ,SWITCH_TARGET_SYSTEM ,SWITCH_ZS ,SWITCH_V ,SWITCH_VERSION ,SWITCH_DEBUGEXC ,SWITCH_DEBUGLINE ,SWITCH_DEBUG64_OPT ,SWITCH_DEBUG64 ,SWITCH_APPEND64 ,SWITCH_ACF ,SWITCH_PACK ,SWITCH_ZP ,SWITCH_CLIENT ,SWITCH_NO_CLIENT ,SWITCH_SERVER ,SWITCH_NO_SERVER ,SWITCH_PREFIX ,SWITCH_SUFFIX ,SWITCH_DUMP ,SWITCH_SAVEPP ,SWITCH_CHAR ,SWITCH_HELP ,SWITCH_WX ,SWITCH_X ,SWITCH_MS_EXT ,SWITCH_MS_CONF_STRUCT ,SWITCH_APP_CONFIG ,SWITCH_INTERNAL ,SWITCH_NO_STAMP ,SWITCH_C_EXT ,SWITCH_O // files for proxies
,SWITCH_IID ,SWITCH_NO_IID ,SWITCH_PROXY ,SWITCH_NO_PROXY ,SWITCH_PROXY_DEF ,SWITCH_NO_PROXY_DEF ,SWITCH_DLLDATA ,SWITCH_NO_DLLDATA // files for inprocserver32s
,SWITCH_DLL_SERVER_DEF ,SWITCH_NO_DLL_SERVER_DEF ,SWITCH_DLL_SERVER_CLASS_GEN ,SWITCH_NO_DLL_SERVER_CLASS_GEN // files for localserver32s
,SWITCH_EXE_SERVER_MAIN ,SWITCH_NO_EXE_SERVER_MAIN ,SWITCH_EXE_SERVER ,SWITCH_NO_EXE_SERVER // files for both
,SWITCH_TESTCLIENT ,SWITCH_NO_TESTCLIENT ,SWITCH_SERVER_REG ,SWITCH_NO_SERVER_REG // files for com class servers
,SWITCH_CLASS_METHODS ,SWITCH_NO_CLASS_METHODS ,SWITCH_CLASS_IUNKNOWN ,SWITCH_NO_CLASS_IUNKNOWN ,SWITCH_CLASS_HEADER ,SWITCH_NO_CLASS_HEADER
,SWITCH_MS_UNION ,SWITCH_OVERRIDE ,SWITCH_GUARD_DEFS ,SWITCH_OLDNAMES ,SWITCH_RPCSS ,SWITCH_NO_FMT_OPT ,SWITCH_OSF // disables setting /ms_ext and /c_ext as default
,SWITCH_HOOKOLE ,SWITCH_NETMON ,SWITCH_NETMON_STUB_OUTPUT_FILE ,SWITCH_NETMON_STUB_OBJ_OUTPUT_FILE ,SWITCH_VERSION_STAMP
// MKTYPLIB switches
,SWITCH_TLIB ,SWITCH_TLIB64 ,SWITCH_REDIRECT_OUTPUT ,SWITCH_ODL_ENV ,SWITCH_MKTYPLIB ,SWITCH_OLD_TLB ,SWITCH_NEW_TLB ,SWITCH_LOCALE_ID ,SWITCH_NOREUSE_BUFFER ,SWITCH_USE_VT_INT_PTR ,SWITCH_NO_TLIB
,SWITCH_TRANSFER_SYNTAX ,SWITCH_MS_EXT64
,SWITCH_DEBUGINFO
,SWITCH_WIRE_COMPAT
//
// enter all new switches before this label
//
,SW_VALUE_MAX };
/*** client : can take values "stub", "none" ***/
#define CLNT_STUB (0x0)
#define CLNT_NONE (0x2)
/*** server : can take values "stub", "none" ***/
#define SRVR_STUB (0x0)
#define SRVR_NONE (0x2)
/** env switch values **/
#define ENV_WIN32 (0x4)
#define ENV_WIN64 (0x20)
#define ENV_OBSOLETE (0)
/** targeted system switch values **/
typedef enum _target_enum { NOTARGET = 0, NT40 = 40, NT50 = 50, NT51 = 51 } TARGET_ENUM;
#define DEFAULT_ZEEPEE (8)
/** error switch values **/
#define ERROR_NONE (0x0000)
#define ERROR_BOUNDS_CHECK (0x0001)
#define ERROR_ENUM (0x0002)
#define ERROR_ALLOCATION (0x0004)
#define ERROR_REF (0x0008)
#define ERROR_STUB_DATA (0x0010)
#define ERROR_ALL (ERROR_BOUNDS_CHECK | \
ERROR_ENUM | \ ERROR_ALLOCATION | \ ERROR_REF | \ ERROR_STUB_DATA \ )
/** char switch values **/
#define CHAR_SIGNED (0x1)
#define CHAR_UNSIGNED (0x2)
#define CHAR_ANSI7 (0x3)
/** rpc ss allocate **/
#define RPC_SS_ALLOCATE_DISABLED (0x0)
#define RPC_SS_ALLOCATE_ENABLED (0x1)
/** manifests defining prefix arguments **/
#define PREFIX_CLIENT_STUB (0x0)
#define PREFIX_SERVER_MGR (0x1)
#define PREFIX_SWICH_PROTOTYPE (0x2)
#define PREFIX_ALL (0x3)
/** wire compatibility options (allocated as bitfields) **/
#define WIRE_COMPAT_ENUM16UNIONALIGN (0x0001)
/*****************************************************************************
* some data structures used. *****************************************************************************/
// basically a singly linked list implementation,
// used for switches which can be specified multiply like -D / -I etc
typedef struct _optlist { char * pStr; // pointer to argument string
struct _optlist * pNext; // pointer to the next argument
size_t ActualOffset; bool NeedsQuotes; } OptList;
/*****************************************************************************
* class defintions used by the command analyser. *****************************************************************************/ //
// the multiple occurence switch class
// This class of switches are ones which can be specified multiple times
// on the command line. Examples of such switches are -D / -U �/ -I etc
// This switch really keeps a linked list of all arguments specified for
// the switch.
//
class multiple_switch { private: OptList * pFirst, // first of the list of arguments.
* pCurrent; // current in the scan of list of args.
public:
// constructor
multiple_switch( ) : pFirst(NULL), pCurrent(NULL) {}; multiple_switch( char *pArg, size_t ActualOffset );
// add the arguments of another occurence of this switch
void Add( char *, size_t ActualOffset );
// initialise the scan of the list. Called before any GetNextIsDone
void Init();
// Get the argument to the next occurence of the switch
char * GetNext( size_t *pActualOffset = NULL, bool *pNeedQuotes = NULL );
// Collect all the arguments into a buffer
char * GetConsolidatedOptions( bool NeedsQuotes = false );
// return the length of all the arguments. Generally used to allocate
// a buffer size for a GetConsolidatedOptions call.
short GetConsolidatedLength( bool NeedsQuotes = false );
void StreamIn( char*& ); void StreamOut( STREAM* ); };
//
// the onetime_switch class.
// such a switch can occur only once, and takes just one argument. We need
// to hold on to the argument during compilation.
//
class onetime_switch { char * pOpt; // the user argument
public: // the constructor.
onetime_switch( char * pArg = 0 // argument to switch
);
// the destructor
~onetime_switch();
// get the user option
char * GetOption();
// get length of the user option string
short GetLength();
void StreamIn( char*& pBuffer ); void StreamOut( STREAM* ); };
//
// the filename_switch
//
// There are a lot of switches which have filenames as arguments. This
// class exists to ease processing of such switches, all of whom behave more
// or less the same way. Only the -out switch is a little different.
// We need to access the filename components too, so we store both as
// components and as the full name.
//
class filename_switch { private: char * pFullName; public: // the constructor. Takes an argument as the switch it is defining, so that
// it can check for a redef.
filename_switch( char * pThisArg = 0 // this argument is supplied
);
// the constructor. It takes a set of filename components. This is not
// called as a result of a user switch, but by internal routines which
// do not need to check for duplicate definitions.
filename_switch( char * pD, // drive
char * pP, // path
char * pN, // base name
char * pE, // extension
char * pS // suffix ("_c/_s") etc to name
// etc.
);
// the destructor
~filename_switch();
// Set file name components , given a full name.
void SetFileName( char * pName // full name
);
// set file name and components, given the components. Note that some
// components may be null, indicating that they are absent.
void SetFileName( char * pD, // drive
char * pP, // path
char * pN, // base name
char * pE, // extension
char * pS // suffix to name
);
// the the full filename
char * GetFileName( void );
// Get the file name components. If an input pointer is NULL, it means the
// user is not interested in that component of the filename.
void GetFileNameComponents( char * pD, // buffer for drive
char * pP, // buffer for path
char * pN, // buffer for name
char * pE // buffer for ext
);
void TransformFileNameForOut( char * pD, // drive
char * pP // path
);
void StreamIn( char*& pBuffer ); void StreamOut( STREAM* ); };
// This data structure is used for specifying data for switches which can take
// different user specification, eg -mode ( osf | msft | c_port ) etc.
typedef struct _choice { const char * pChoice; // user input
short Choice; // internal compiler code.
} CHOICE;
class CommandLine; // this data structure is for paired items, like prefix
class pair_switch { private: CHOICE * pArrayOfChoices; char ** pUserStrings; long ArraySize;
short Current;
public: // get the index of a particular system string
short GetIndex( char * pSys );
// constructor
pair_switch( const CHOICE * pValidChoices );
// construction functions
// void CmdProcess( CommandLine*, char *pF);
void AddPair( short index, char * pUser );
// get the user defined equivalent of this system defined prefix string
char * GetUserDefinedEquivalent( short );
// iteration functions ( for printout )
void Init() { Current = -1; }
short GetNext( char ** pSys, char ** pUser );
void StreamIn( char*& ); void StreamOut( STREAM* );
};
/////////////////////////////////////////////////////////////////////////////
//
// Class for Ndr stub version control
// - what compiler guesses from the usage.
//
/////////////////////////////////////////////////////////////////////////////
class NdrVersionControl { // NT 3.51 or Win95
// VTable size limit is 32
unsigned long fHasStublessProxies : 1; unsigned long fHasCommFaultStatusInOi12 : 1; // NT 4.0 or DCOM Win95
unsigned long fHasOi2 : 1; unsigned long fHasUserMarshal : 1; unsigned long fHasRawPipes : 1; unsigned long fHasFloatOrDoubleInOi : 1; unsigned long fHasMoreThan64DelegatedProcs : 1; unsigned long fHasNT4VTableSize : 1; // 110 methods
// NT 4.0 + SP3
unsigned long fHasMessageAttr : 1; unsigned long fHasNT43VTableSize : 1; // 512 methods
// NT 5.0
// fHasObjectPipes // revoked later.
unsigned long fHasAsyncHandleRpc : 1; unsigned long fHasNT5VTableSize : 1; // 1024 methods
// NT 5.0 Beta 2
unsigned long fHasDOA : 1; unsigned long fHasAsyncUUID : 1; unsigned long fHasInterpretedNotify : 1; unsigned long fHasContextSerialization : 1; // Unlimited number of methods
// NT 5.0 Beta 3
unsigned long fHasOicfPickling : 1;
// NT 6.0
unsigned long f64BitSupport : 1; unsigned long fHasStructPadN : 1; unsigned long fMultiTransferSyntax : 1; unsigned long fHasMsExt64 : 1; unsigned long fHasPartialIgnore : 1; unsigned long fHasForceAllocate : 1; unsigned long fInterpretedComplexReturns : 1;
unsigned long Unused : 8;
TARGET_ENUM TargetSystem;
public: NdrVersionControl() { ClearNdrVersionControl(); }
void SetHasStublessProxies() { fHasStublessProxies = 1; }
unsigned long HasStublessProxies() { return fHasStublessProxies; }
void SetHasOi2() { fHasOi2 = 1; }
unsigned long HasOi2() { return fHasOi2; }
void SetHasUserMarshal() { fHasUserMarshal = 1; }
unsigned long HasUserMarshal() { return fHasUserMarshal; }
void SetHasRawPipes() { fHasRawPipes = 1; }
unsigned long HasRawPipes() { return fHasRawPipes; }
void SetHasMessageAttr() { fHasMessageAttr = 1; } unsigned long HasMessageAttr() { return fHasMessageAttr; } void SetHasAsyncHandleRpc() { fHasAsyncHandleRpc = 1; }
unsigned long HasAsyncHandleRpc() { return fHasAsyncHandleRpc; }
void SetHasMoreThan64DelegatedProcs() { fHasMoreThan64DelegatedProcs = 1; }
unsigned long HasMoreThan64DelegatedProcs() { return fHasMoreThan64DelegatedProcs; }
void SetHasNT4VTableSize() { fHasNT4VTableSize = 1; }
unsigned long HasNT4VTableSize() { return fHasNT4VTableSize; }
void SetHasNT43VTableSize() { fHasNT43VTableSize = 1; }
unsigned long HasNT43VTableSize() { return fHasNT43VTableSize; }
void SetHasNT5VTableSize() { fHasNT5VTableSize = 1; }
unsigned long HasNT5VTableSize() { return fHasNT5VTableSize; }
void SetHasFloatOrDoubleInOi() { fHasFloatOrDoubleInOi = 1; }
unsigned long HasFloatOrDoubleInOi() { return fHasFloatOrDoubleInOi; }
void SetHasCommFaultStatusInOi12() { fHasCommFaultStatusInOi12 = 1; }
unsigned long HasCommFaultStatusInOi12() { return fHasCommFaultStatusInOi12; }
void SetHasDOA() { fHasDOA = 1; }
unsigned long HasDOA() { return fHasDOA; }
void SetHasAsyncUUID() { fHasAsyncUUID = 1; }
unsigned long HasAsyncUUID() { return fHasAsyncUUID; }
void SetHasInterpretedNotify() { fHasInterpretedNotify = 1; }
unsigned long HasInterpretedNotify() { return fHasInterpretedNotify; }
void SetHasContextSerialization() { fHasContextSerialization = 1; }
unsigned long HasContextSerialization() { return fHasContextSerialization; }
void SetHasOicfPickling() { fHasOicfPickling = 1; }
unsigned long HasOicfPickling() { return fHasOicfPickling; }
void SetHas64BitSupport() { f64BitSupport = 1; }
unsigned long Has64BitSupport() { return f64BitSupport; }
void SetHasStructPadN() { fHasStructPadN = 1; }
unsigned long HasStructPadN() { return fHasStructPadN; }
void SetHasMultiTransferSyntax() { fMultiTransferSyntax = 1; }
unsigned long HasMultiTransferSyntax() { return fMultiTransferSyntax; }
void SetHasMsExt64() { fHasMsExt64 = 1; }
unsigned long HasMsExt64() { return fHasMsExt64; } void SetHasPartialIgnore() { fHasPartialIgnore = 1; }
unsigned long HasPartialIgnore() { return fHasPartialIgnore; }
void SetHasForceAllocate() { fHasForceAllocate = 1; }
unsigned long HasForceAllocate() { return fHasForceAllocate; } void ClearNdrVersionControl() { fHasStublessProxies = 0; fHasCommFaultStatusInOi12 = 0; fHasOi2 = 0; fHasUserMarshal = 0; fHasRawPipes = 0; fHasFloatOrDoubleInOi = 0; fHasMessageAttr = 0; fHasMoreThan64DelegatedProcs = 0; fHasAsyncHandleRpc = 0; fHasNT4VTableSize = 0; fHasNT43VTableSize = 0; fHasNT5VTableSize = 0; fHasDOA = 0; fHasAsyncUUID = 0; fHasInterpretedNotify = 0; fHasContextSerialization = 0; fHasOicfPickling = 0; f64BitSupport = 0; fHasStructPadN = 0; fMultiTransferSyntax = 0; fHasMsExt64 = 0; fHasForceAllocate = 0; fHasPartialIgnore = 0; Unused = 0; TargetSystem = NOTARGET; }
void AddtoNdrVersionControl( NdrVersionControl & VC ) { fHasStublessProxies |= VC.HasStublessProxies(); fHasCommFaultStatusInOi12 |= VC.HasCommFaultStatusInOi12(); fHasOi2 |= VC.HasOi2(); fHasUserMarshal |= VC.HasUserMarshal(); fHasRawPipes |= VC.HasRawPipes(); fHasMoreThan64DelegatedProcs |= VC.HasMoreThan64DelegatedProcs(); fHasFloatOrDoubleInOi |= VC.HasFloatOrDoubleInOi(); fHasMessageAttr |= VC.HasMessageAttr(); fHasAsyncHandleRpc |= VC.HasAsyncHandleRpc(); fHasNT4VTableSize |= VC.HasNT4VTableSize(); fHasNT43VTableSize |= VC.HasNT43VTableSize(); fHasNT5VTableSize |= VC.HasNT5VTableSize(); fHasDOA |= VC.HasDOA(); fHasAsyncUUID |= VC.HasAsyncUUID(); fHasInterpretedNotify |= VC.HasInterpretedNotify(); fHasContextSerialization |= VC.HasContextSerialization(); fHasOicfPickling |= VC.HasOicfPickling(); f64BitSupport |= VC.Has64BitSupport(); fHasStructPadN |= VC.HasStructPadN(); fMultiTransferSyntax |= VC.HasMultiTransferSyntax(); fHasMsExt64 |= VC.HasMsExt64(); fHasForceAllocate |= VC.HasForceAllocate(); // REVIEW
if (VC.TargetSystem > TargetSystem) TargetSystem = VC.TargetSystem; }
BOOL HasNdr11Feature() { return ( fHasStublessProxies || fHasCommFaultStatusInOi12 ); }
BOOL HasNdr20Feature() { return ( fHasOi2 || fHasUserMarshal || fHasRawPipes || fHasMoreThan64DelegatedProcs || fHasFloatOrDoubleInOi || fHasMessageAttr || TargetSystem >= NT40 ); }
BOOL HasNdr50Feature() { return ( fHasAsyncHandleRpc || fHasDOA || fHasAsyncUUID || fHasInterpretedNotify || fHasContextSerialization || fHasOicfPickling || f64BitSupport || TargetSystem >= NT50 ); }
// Note, "ndr60" is kind of confusing. This is the
// version of ndr that shipped with NT 5.1
// (aka "Whistler").
BOOL HasNdr60Feature() { return HasStructPadN() || fMultiTransferSyntax || fHasMsExt64 || fHasForceAllocate || fHasPartialIgnore || TargetSystem >= NT51; }
BOOL IsNdr60orLaterRequired() { return HasNdr60Feature(); }
BOOL IsNdr50orLaterRequired() { return HasNdr50Feature(); }
void SetTargetSystem( TARGET_ENUM target ) { TargetSystem = target; }
TARGET_ENUM GetTargetSystem() { return TargetSystem; }
BOOL TargetIsNT40OrLater() { return (TargetSystem >= NT40); }
BOOL TargetIsNT50OrLater() { return (TargetSystem >= NT50); }
BOOL TargetIsLessThanNT50() { return ( NOTARGET != TargetSystem ) && ( TargetSystem < NT50 ); }
BOOL TargetIsNT51OrLater() { return (TargetSystem >= NT51); }
BOOL TargetIsLessThanNT51() { return ( NOTARGET != TargetSystem ) && ( TargetSystem < NT51 ); }
BOOL AllowIntrepretedComplexReturns() { return HasMultiTransferSyntax(); } };
/////////////////////////////////////////////////////////////////////////////
// the big boy - the command analyser object
/////////////////////////////////////////////////////////////////////////////
typedef class _cmd_arg { protected: unsigned long switch_def_vector[ 5 ]; // switch definition vector
unsigned char fClient; // client switch options
unsigned char fServer; // server switch options
unsigned char Env; // env - flat /segmented
unsigned char CharOption; // char option
unsigned char fMintRun; // this is a mint ( MIDL-lint) run
unsigned short MajorVersion; // major version
unsigned short MinorVersion; // minor version
unsigned short UpdateNumber; // update
unsigned short ErrorOption; // error option
unsigned short WireCompatOption; // wire_compat options
unsigned short ConfigMask; // configuration mask for error reporting
unsigned short MSCVersion; // MS C Compiler version
bool fShowLogo;
NdrVersionControl VersionControl; // compiler evaluation
unsigned short OptimFlags; // optimization flags from user
OPT_LEVEL_ENUM OptimLevel; // internal optimization level
TARGET_ENUM TargetSystem; // targeted system
SYNTAX_ENUM TargetSyntax;
short iArgV; // index into the argument vector
short cArgs; // count of arguments
short WLevel; // warning level
unsigned short ZeePee; // the Zp switch option value
unsigned short EnumSize; // memory size of enum16
unsigned long LocaleId; // the lcid for MBCS
BOOL fDoubleFor64; // double run marker
BOOL fHasAppend64; // the 64 append run
BOOL fIsNDR64Run; // NDR64 run
BOOL fIsNDRRun; // NDR run
BOOL fIs2ndCodegenRun; // protocol all
BOOL fNeedsNDR64Header; // protocol all, no -env, 32bit
char szCompileTime[32]; char szCompilerVersion[32];
filename_switch * pInputFNSwitch, // input file name
* pOutputPathSwitch, // output path
* pCStubSwitch, // cstub
* pSStubSwitch, // sstub
* pHeaderSwitch, // header
* pAcfSwitch, // acf
* pIIDSwitch, // iid
* pDllDataSwitch, // dlldata
* pProxySwitch, // proxy
* pProxyDefSwitch, // proxy
* pTlibSwitch, // Type Library file name
* pNetmonStubSwitch, // Netmon stub file
* pNetmonStubObjSwitch, // Netmon stub file
* pRedirectOutputSwitch; // redirect stdout to this file
pair_switch * pSwitchPrefix; // -prefix
pair_switch * pSwitchSuffix; // -suffix
multiple_switch * pDSwitch, // -D
* pISwitch, // -I
* pUSwitch; // -U
onetime_switch * pCppCmdSwitch, // cpp_cmd
* pCppOptSwitch, // cpp_opt
* pMSCVerSwitch, // msc_ver
* pDebug64Switch, // debug64
* pDebug64OptSwitch; // debug64_opt
public: _cmd_arg();
// Is the switch defined ?
BOOL IsSwitchDefined( short SWNo ) { unsigned long sw = switch_def_vector[ SWNo / 32 ]; unsigned long temp = SWNo % 32;
sw = sw & ( (unsigned long)1 << temp ); return sw ? (BOOL)1 : (BOOL)0; }
// Set the switch to be defined.
void SwitchDefined( short );
// Get filename.
char * GetInputFileName() { return pInputFNSwitch->GetFileName(); }
void GetInputFileNameComponents( char *pD, // drive buffer
char *pP, // path buffer
char *pN, // base name buffer
char *pE // extension buffer
) { pInputFNSwitch->GetFileNameComponents( pD, pP, pN, pE ); }
char * GetAcfFileName() { return pAcfSwitch->GetFileName(); }
void GetAcfFileNameComponents( char *pD, char *pP, char *pN, char *pE ) { pAcfSwitch->GetFileNameComponents( pD, pP, pN, pE ); }
char * GetOutputPath();
char * GetCstubFName() { return pCStubSwitch->GetFileName(); }
void GetCstubFileNameComponents( char *pD, char *pP, char *pN, char *pE ) { pCStubSwitch->GetFileNameComponents( pD, pP, pN, pE ); }
char * GetSstubFName() { return pSStubSwitch->GetFileName(); }
void GetSstubFileNameComponents( char *pD, char *pP, char *pN, char *pE ) { pSStubSwitch->GetFileNameComponents( pD, pP, pN, pE ); }
char * GetHeader() { return pHeaderSwitch->GetFileName(); }
void GetHeaderFileNameComponents( char *pD, char *pP, char *pN, char *pE ) { pHeaderSwitch->GetFileNameComponents( pD, pP, pN, pE ); }
char * GetIIDFName() { return pIIDSwitch->GetFileName(); }
char * GetDllDataFName() { return pDllDataSwitch->GetFileName(); }
char * GetProxyFName() { return pProxySwitch->GetFileName(); }
char * GetTypeLibraryFName() { return pTlibSwitch->GetFileName(); }
char * GetNetmonStubFName() { return pNetmonStubSwitch->GetFileName(); }
char * GetNetmonStubObjFName() { return pNetmonStubObjSwitch->GetFileName(); }
// get preprocessor command
char * GetCPPCmd() { return pCppCmdSwitch->GetOption(); }
// get preprocessor options
char * GetCPPOpt() { return pCppOptSwitch->GetOption(); }
bool ShowLogo() { return fShowLogo; }
unsigned short GetMSCVer() { return MSCVersion; }
char * GetDebug64() { return pDebug64Switch->GetOption(); }
char * GetDebug64Opt() { return pDebug64OptSwitch->GetOption(); }
// get warning level
short GetWarningLevel() { return WLevel; };
// get env switch value
short GetEnv() { return (short)Env; }
void SetEnv( int env ) { Env = (unsigned char) env; }
TARGET_ENUM GetTargetSystem() { return TargetSystem; }
BOOL Is32BitEnv() { return (BOOL) (Env == ENV_WIN32); }
BOOL Is32BitDefaultEnv() { return (BOOL) (Env == ENV_WIN32) && ! IsSwitchDefined( SWITCH_ENV ); }
BOOL Is64BitEnv() { return (BOOL) (Env == ENV_WIN64); }
BOOL IsDoubleRunFor64() { return fDoubleFor64; }
void SetDoubleRunFor64() { fDoubleFor64 = HasAppend64(); }
BOOL HasAppend64() { return fHasAppend64; }
void SetHasAppend64( BOOL NeedsAppending ) { fHasAppend64 = NeedsAppending; }
BOOL Needs64Run() { return fHasAppend64; }
BOOL IsNDR64Run() { return fIsNDR64Run; }
void SetIsNDR64Run() { fIsNDR64Run = TRUE; }
void ResetIsNDR64Run() { fIsNDR64Run = FALSE; }
BOOL IsNDRRun() { return fIsNDRRun; }
void SetIsNDRRun() { fIsNDRRun = TRUE; }
void ResetIsNDRRun() { fIsNDRRun = FALSE; }
void SetIs2ndCodegenRun() { fIs2ndCodegenRun = TRUE; }
BOOL Is2ndCodegenRun() { return fIs2ndCodegenRun; }
BOOL NeedsNDR64Run() { if ( TargetSyntax == SYNTAX_BOTH || TargetSyntax == SYNTAX_NDR64 ) return TRUE; else return FALSE; }
void SetNeedsNDR64Header() { fNeedsNDR64Header = TRUE; } BOOL NeedsNDR64Header() { return fNeedsNDR64Header; }
BOOL IsFinalProtocolRun() { if ( SYNTAX_BOTH == TargetSyntax && !fIsNDR64Run ) return FALSE; else return TRUE; }
// TODO: yongqu: might consider an compiler option.
SYNTAX_ENUM GetDefaultSyntax() { if ( TargetSyntax == SYNTAX_DCE || TargetSyntax == SYNTAX_BOTH ) return SYNTAX_DCE; else return SYNTAX_NDR64; }
BOOL NeedsNDRRun() { if ( TargetSyntax == SYNTAX_BOTH || TargetSyntax == SYNTAX_DCE ) return TRUE; else return FALSE; }
BOOL NeedsBothSyntaxes() { return ( TargetSyntax == SYNTAX_BOTH ); }
BOOL UseExprFormatString() { return IsNDR64Run(); }
BOOL NeedsNDR64DebugInfo() { return IsSwitchDefined(SWITCH_DEBUGINFO); }
// get error options
short GetErrorOption() { return ErrorOption; }
short WireCompat( short checkoption ) { return WireCompatOption & checkoption; }
// get the switch values
short GetClientSwitchValue() { return (short)fClient; }
void SetClientSwitchValue( short s ) { fClient = (unsigned char) s; }
short GetServerSwitchValue() { return (short)fServer; }
void SetServerSwitchValue( short s ) { fServer = (unsigned char) s; }
BOOL GenerateSStub() { return (fServer == SRVR_STUB) && !IsSwitchDefined( SWITCH_NO_SERVER ); }
BOOL GenerateCStub() { return (fClient == CLNT_STUB) && !IsSwitchDefined( SWITCH_NO_CLIENT ); }
BOOL GenerateStubs() { return GenerateSStub() || GenerateCStub(); }
BOOL GenerateHeader() { return !IsSwitchDefined( SWITCH_NO_HEADER ); }
BOOL GenerateIID() { return !IsSwitchDefined( SWITCH_NO_IID ); }
BOOL GenerateDllData() { return !IsSwitchDefined( SWITCH_NO_DLLDATA ); }
BOOL GenerateProxy() { return !IsSwitchDefined( SWITCH_NO_PROXY ); }
BOOL GenerateProxyDefFile() { return !IsSwitchDefined( SWITCH_NO_PROXY_DEF ); }
BOOL GenerateServerFile() { return !IsSwitchDefined( SWITCH_NO_CLASS_METHODS ); }
BOOL GenerateServerUnkFile() { return !IsSwitchDefined( SWITCH_NO_CLASS_IUNKNOWN ); }
BOOL GenerateServerHeaderFile() { return !IsSwitchDefined( SWITCH_NO_CLASS_HEADER ); }
BOOL GenerateDllServerDefFile() { return !IsSwitchDefined( SWITCH_NO_DLL_SERVER_DEF ); }
BOOL GenerateDllServerClassGenFile() { return !IsSwitchDefined( SWITCH_NO_DLL_SERVER_CLASS_GEN ); }
BOOL GenerateServerRegFile() { return !IsSwitchDefined( SWITCH_NO_SERVER_REG ); }
BOOL GenerateExeServerFile() { return !IsSwitchDefined( SWITCH_NO_EXE_SERVER ); }
BOOL GenerateExeServerMainFile() { return !IsSwitchDefined( SWITCH_NO_EXE_SERVER_MAIN ); }
BOOL GenerateTestFile() { return !IsSwitchDefined( SWITCH_NO_TESTCLIENT ); }
BOOL GenerateTypeLibrary() { return !IsSwitchDefined( SWITCH_NO_TLIB ); }
BOOL IsValidZeePee(long NewZeePee);
short GetZeePee() { return ZeePee; }
unsigned short GetEnumSize() { return EnumSize; }
void SetEnumSize(unsigned short sEnumSize) { EnumSize = sEnumSize; }
unsigned long GetLocaleId() { return LocaleId; }
void GetCompilerVersion( unsigned short *pMajor, unsigned short *pMinor, unsigned short *pUpdate ) { *pMajor = MajorVersion; *pMinor = MinorVersion; *pUpdate= UpdateNumber; }
unsigned short GetOptimizationFlags() { // Don't propagate the optimize _IX flag out.
return (unsigned short) (OptimFlags & 0xff); }
// destroys previous flags
unsigned short SetOptimizationFlags( unsigned short f ) { return ( OptimFlags = f ); }
// preserves previous flags
unsigned short AddOptimizationFlags( unsigned short f ) { return ( OptimFlags |= f ); }
OPT_LEVEL_ENUM GetOptimizationLevel() { return OptimLevel; }
// miscellaneous flags
// get the minus I specified by the user as 1 single buffer. If the -i
// is not defined, return a null.
char * GetMinusISpecification();
BOOL IsMintRun() { return fMintRun; }
unsigned short GetModeSwitchConfigMask() { return (unsigned short)ConfigMask; }
void SetModeSwitchConfigMask() { unsigned short M = (unsigned short) ( IsSwitchDefined(SWITCH_MS_EXT) ?1:0 ); unsigned short C = (unsigned short) ( IsSwitchDefined(SWITCH_C_EXT) ?1:0 ); unsigned short A = (unsigned short) ( IsSwitchDefined(SWITCH_APP_CONFIG)?1:0 );
ConfigMask = unsigned short ( 1 << ( A * 4 + C * 2 + M ) ); }
unsigned short GetCharOption() { return (unsigned short)CharOption; }
BOOL IsRpcSSAllocateEnabled() { return IsSwitchDefined( SWITCH_RPCSS ); }
BOOL IsNetmonStubGenerationEnabled() { return IsSwitchDefined( SWITCH_NETMON ) && IsSwitchDefined( SWITCH_INTERNAL ); }
char * GetUserPrefix( short index ) { return pSwitchPrefix->GetUserDefinedEquivalent( index ); }
BOOL IsPrefixDefinedForCStub() { return (BOOL) ( GetUserPrefix( PREFIX_CLIENT_STUB ) != 0 ); }
BOOL IsPrefixDefinedForSStub() { return (BOOL) ( GetUserPrefix( PREFIX_SERVER_MGR ) != 0 ); }
char* GetCompilerVersion() { return szCompilerVersion; }
// note that this string ends with a newline.
char* GetCompileTime() { return szCompileTime; }
BOOL IsPrefixDifferentForStubs(); void EmitConfirm( ISTREAM * pStream );
STATUS_T StreamIn( char* ); void StreamOut( STREAM* );
NdrVersionControl & GetNdrVersionControl() { return VersionControl; } } CMD_ARG;
typedef unsigned long ulong;
extern CMD_ARG* pCommand;
#endif // __CMDANA_HXX__
|