1137 lines
35 KiB
C++
1137 lines
35 KiB
C++
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||
Copyright (c) 1989 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
cmdana.hxx
|
||
|
||
Abstract:
|
||
|
||
fine contains the definitions for internal storage
|
||
of user's command line options, so that various passes
|
||
of the compiler can access them. This file needs to
|
||
be included by all those modules which deal with some
|
||
compiler switch.
|
||
|
||
Notes:
|
||
|
||
Author:
|
||
|
||
vibhasc
|
||
|
||
Nov-12-1991 VibhasC Modified to conform to coding style gudelines
|
||
|
||
----------------------------------------------------------------------------*/
|
||
#ifndef __CMDANA_HXX__
|
||
#define __CMDANA_HXX__
|
||
|
||
#include "idict.hxx"
|
||
|
||
extern char * pVersionStr; // version string mj.mn.up
|
||
extern char * pTimeStr; // time string
|
||
|
||
class ISTREAM;
|
||
|
||
void SetVersionStr();
|
||
void SetTimeStr();
|
||
|
||
|
||
inline
|
||
char *
|
||
GetCompilerVersion()
|
||
{
|
||
if ( !pVersionStr )
|
||
SetVersionStr();
|
||
return pVersionStr;
|
||
}
|
||
|
||
// note that this string ends with a newline.
|
||
inline
|
||
char *
|
||
GetCompileTime()
|
||
{
|
||
if ( !pTimeStr )
|
||
SetTimeStr();
|
||
return pTimeStr;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
**** define argument bit nos for the switch defintion vector
|
||
******************************************************************************/
|
||
|
||
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_CSTUB
|
||
,SWITCH_ENV
|
||
,SWITCH_ERROR
|
||
,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
|
||
#if defined(TARGET_RKK)
|
||
,SWITCH_TARGET_SYSTEM
|
||
#endif
|
||
,SWITCH_ZS
|
||
,SWITCH_V
|
||
,SWITCH_VERSION
|
||
,SWITCH_MIDLDEBUG
|
||
,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_APP_CONFIG
|
||
,SWITCH_INTERNAL
|
||
,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_IDLBASE // temp flag to enable idlbase processing
|
||
,SWITCH_GUARD_DEFS
|
||
,SWITCH_OLDNAMES
|
||
,SWITCH_RPCSS
|
||
,SWITCH_NO_FMT_OPT
|
||
,SWITCH_COM_CLASS // temp switch to allow com class generation
|
||
,SWITCH_OSF // disables setting /ms_ext and /c_ext as default
|
||
,SWITCH_HOOKOLE
|
||
// MKTYPLIB switches
|
||
,SWITCH_TLIB
|
||
,SWITCH_REDIRECT_OUTPUT
|
||
,SWITCH_ODL_ENV
|
||
,SWITCH_MKTYPLIB
|
||
,SWITCH_OLD_TLB
|
||
,SWITCH_NEW_TLB
|
||
|
||
//
|
||
// 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_DOS (0x2)
|
||
#define ENV_WIN16 (0x3)
|
||
#define ENV_WIN32 (0x4)
|
||
#define ENV_MAC (0x8)
|
||
#define ENV_MPPC (0x10)
|
||
|
||
/** targeted system switch values **/
|
||
|
||
typedef enum _target_enum
|
||
{
|
||
NT35 = 1,
|
||
NT351 = 2,
|
||
NT40 = 3
|
||
} TARGET_ENUM;
|
||
|
||
#define TARGET_DEFAULT NT40
|
||
|
||
/** 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)
|
||
|
||
/*****************************************************************************
|
||
* 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
|
||
} 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 <20>/ -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( char * );
|
||
|
||
// add the arguments of another occurence of this switch
|
||
|
||
void Add( char * );
|
||
|
||
// initialise the scan of the list. Called before any GetNextIsDone
|
||
|
||
void Init();
|
||
|
||
// Get the argument to the next occurence of the switch
|
||
|
||
char * GetNext();
|
||
|
||
// Collect all the arguments into a buffer
|
||
|
||
char * GetConsolidatedOptions();
|
||
|
||
// return the length of all the arguments. Generally used to allocate
|
||
// a buffer size for a GetConsolidatedOptions call.
|
||
|
||
short GetConsolidatedLength();
|
||
|
||
};
|
||
|
||
|
||
//
|
||
// 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 // argument to switch
|
||
);
|
||
|
||
// the destructor
|
||
|
||
~onetime_switch();
|
||
|
||
// get the user option
|
||
|
||
char * GetOption();
|
||
|
||
// get length of the user option string
|
||
|
||
short GetLength();
|
||
|
||
};
|
||
|
||
|
||
//
|
||
// 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 // 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
|
||
);
|
||
|
||
};
|
||
|
||
// 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;
|
||
|
||
// this data structure is for paired items, like prefix
|
||
class pair_switch
|
||
{
|
||
private:
|
||
CHOICE * pArrayOfChoices;
|
||
char ** pUserStrings;
|
||
short ArraySize;
|
||
|
||
short Current;
|
||
|
||
// get the index of a particular system string
|
||
short GetIndex( char * pSys );
|
||
|
||
public:
|
||
// constructor
|
||
|
||
pair_switch( const CHOICE * pValidChoices );
|
||
|
||
// construction functions
|
||
|
||
void CmdProcess( class _cmd_arg *, 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 );
|
||
|
||
};
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// Class for Ndr stub version control
|
||
// - what compiler guesses from the usage.
|
||
//
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
class NdrVersionControl
|
||
{
|
||
unsigned long fHasStublessProxies : 1;
|
||
unsigned long fHasOi2 : 1;
|
||
unsigned long fHasUserMarshal : 1;
|
||
unsigned long fHasPipes : 1;
|
||
unsigned long fHasAssyncRpc : 1;
|
||
unsigned long Unused :27;
|
||
|
||
public:
|
||
NdrVersionControl() :
|
||
fHasStublessProxies(0),
|
||
fHasOi2(0),
|
||
fHasUserMarshal(0),
|
||
fHasPipes(0),
|
||
fHasAssyncRpc(0),
|
||
Unused(0)
|
||
{
|
||
}
|
||
|
||
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 SetHasPipes()
|
||
{
|
||
fHasPipes = 1;
|
||
}
|
||
|
||
unsigned long HasPipes()
|
||
{
|
||
return fHasPipes;
|
||
}
|
||
|
||
void SetHasAssyncRpc()
|
||
{
|
||
fHasAssyncRpc = 1;
|
||
}
|
||
|
||
unsigned long HasAssyncRpc()
|
||
{
|
||
return fHasAssyncRpc;
|
||
}
|
||
|
||
void ClearNdrVersionControl()
|
||
{
|
||
fHasStublessProxies = 0;
|
||
fHasOi2 = 0;
|
||
fHasUserMarshal = 0;
|
||
fHasPipes = 0;
|
||
fHasAssyncRpc = 0;
|
||
}
|
||
|
||
void AddtoNdrVersionControl(
|
||
NdrVersionControl & VC )
|
||
{
|
||
fHasStublessProxies |= VC.HasStublessProxies();
|
||
fHasOi2 |= VC.HasOi2();
|
||
fHasUserMarshal |= VC.HasUserMarshal();
|
||
fHasPipes |= VC.HasPipes();
|
||
fHasAssyncRpc |= VC.HasAssyncRpc();
|
||
}
|
||
|
||
BOOL HasNdr11Feature()
|
||
{
|
||
return ( fHasStublessProxies );
|
||
}
|
||
|
||
BOOL HasNdr20Feature()
|
||
{
|
||
return ( fHasOi2 ||
|
||
fHasUserMarshal ||
|
||
fHasPipes);
|
||
}
|
||
|
||
};
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// the big boy - the command analyser object
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
typedef class _cmd_arg
|
||
{
|
||
private:
|
||
unsigned long switch_def_vector[ 4 ]; // 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 ConfigMask; // configuration mask for error reporting
|
||
|
||
NdrVersionControl VersionControl; // compiler evaluation
|
||
unsigned short OptimFlags; // optimization flags from user
|
||
OPT_LEVEL_ENUM OptimLevel; // internal optimization level
|
||
TARGET_ENUM TargetSystem; // targeted system
|
||
|
||
IDICT * pArgDict; // arguments dictionary
|
||
|
||
short iArgV; // index into the argument vector
|
||
|
||
short cArgs; // count of arguments
|
||
|
||
short WLevel; // warning level
|
||
|
||
unsigned short ZeePee; // the Zp switch option value
|
||
|
||
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
|
||
|
||
* pServerFileSwitch, // com server file
|
||
|
||
* pServerUnkFileSwitch, // com server IUnknown file
|
||
|
||
* pServerHeaderFileSwitch, // com server header file
|
||
|
||
* pDllServerDefSwitch, // com dll server def file
|
||
|
||
* pDllClassGenSwitch, // com dll server class generator file
|
||
|
||
* pServerRegSwitch, // com server reg file
|
||
|
||
* pExeServerSwitch, // com exe server file
|
||
|
||
* pExeServerMainSwitch, // com exe server main file
|
||
|
||
* pTestFileSwitch, // test client file
|
||
|
||
* pTlibSwitch, // Type Library file name
|
||
|
||
* 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
|
||
|
||
public:
|
||
|
||
|
||
// the constructor
|
||
|
||
_cmd_arg();
|
||
|
||
// register argument vector with the command processor
|
||
|
||
void RegisterArgs( char *[], short );
|
||
|
||
// process arguments. This is the command analyser main loop, so to speak.
|
||
|
||
STATUS_T ProcessArgs();
|
||
|
||
// get the next argument from the argument vector.
|
||
|
||
char * GetNextArg();
|
||
|
||
// push back argument. Undo the effect of GetNextArg.
|
||
|
||
void UndoGetNextArg();
|
||
|
||
// depending upon the switch argument type, bump the argument pointer to
|
||
// the next switch.
|
||
|
||
STATUS_T BumpThisArg( char **, unsigned short );
|
||
|
||
// 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 );
|
||
|
||
// set any post switch processing defaults
|
||
|
||
STATUS_T SetPostDefaults();
|
||
|
||
// process a filename switch .
|
||
|
||
STATUS_T ProcessFilenameSwitch( short, char * );
|
||
|
||
// process a multiple arguments switch.
|
||
|
||
STATUS_T ProcessMultipleSwitch( short, char *, char * );
|
||
|
||
// process a onetime argument switch.
|
||
|
||
STATUS_T ProcessOnetimeSwitch( short, char * );
|
||
|
||
// process an ordinary switch
|
||
|
||
STATUS_T ProcessOrdinarySwitch( short, char * );
|
||
|
||
// process a simple switch multiply defined.
|
||
|
||
STATUS_T ProcessSimpleMultipleSwitch( short, char * );
|
||
|
||
// 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 * GetProxyDefFName()
|
||
{
|
||
return pProxyDefSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetComServerFName()
|
||
{
|
||
return pServerFileSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetTestClientFName()
|
||
{
|
||
return pTestFileSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetTypeLibraryFName()
|
||
{
|
||
return pTlibSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetServerHeaderFName()
|
||
{
|
||
return pServerHeaderFileSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetServerUnkFName()
|
||
{
|
||
return pServerUnkFileSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetDllServerDefFName()
|
||
{
|
||
return pDllServerDefSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetDllClassGenFName()
|
||
{
|
||
return pDllClassGenSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetServerRegFName()
|
||
{
|
||
return pServerRegSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetExeServerFName()
|
||
{
|
||
return pExeServerSwitch->GetFileName();
|
||
}
|
||
|
||
char * GetExeServerMainFName()
|
||
{
|
||
return pExeServerMainSwitch->GetFileName();
|
||
}
|
||
|
||
// get preprocessor command
|
||
|
||
char * GetCPPCmd();
|
||
|
||
// get preprocessor options
|
||
|
||
char * GetCPPOpt();
|
||
|
||
// get warning level
|
||
|
||
short GetWarningLevel() { return WLevel; };
|
||
|
||
// get env switch value
|
||
|
||
short GetEnv(){ return (short)Env; };
|
||
|
||
TARGET_ENUM GetTargetSystem() { return TargetSystem; };
|
||
|
||
BOOL Is16Bit()
|
||
{
|
||
return (BOOL)
|
||
( ( Env == ENV_WIN16 ) ||
|
||
( Env == ENV_DOS ) );
|
||
}
|
||
|
||
BOOL IsAnyMac()
|
||
{
|
||
return (BOOL)
|
||
( ( Env == ENV_MAC ) ||
|
||
( Env == ENV_MPPC ) );
|
||
}
|
||
|
||
// get error options
|
||
|
||
short GetErrorOption() { return ErrorOption; };
|
||
|
||
// 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 );
|
||
}
|
||
|
||
short GetZeePee() { return ZeePee; };
|
||
|
||
void GetCompilerVersion(
|
||
unsigned short *pMajor,
|
||
unsigned short *pMinor,
|
||
unsigned short *pUpdate )
|
||
{
|
||
*pMajor = MajorVersion;
|
||
*pMinor = MinorVersion;
|
||
*pUpdate= UpdateNumber;
|
||
}
|
||
|
||
NdrVersionControl & GetNdrVersionControl()
|
||
{
|
||
return VersionControl;
|
||
}
|
||
|
||
unsigned short GetOptimizationFlags()
|
||
{
|
||
// Don't propagate the optimize _IX flag out.
|
||
|
||
return (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();
|
||
|
||
void Confirm();
|
||
|
||
void EmitConfirm( ISTREAM * pStream );
|
||
|
||
STATUS_T Help();
|
||
|
||
BOOL IsMintRun()
|
||
{
|
||
return fMintRun;
|
||
}
|
||
|
||
BOOL IsComClassOK()
|
||
{
|
||
return IsSwitchDefined( SWITCH_COM_CLASS );
|
||
}
|
||
|
||
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 = 1 << ( A * 4 + C * 2 + M );
|
||
}
|
||
|
||
unsigned short GetCharOption()
|
||
{
|
||
return (unsigned short)CharOption;
|
||
}
|
||
|
||
BOOL Is16BitEnv()
|
||
{
|
||
return ((Env == ENV_DOS) || (Env == ENV_WIN16));
|
||
}
|
||
|
||
BOOL IsRpcSSAllocateEnabled()
|
||
{
|
||
return IsSwitchDefined( SWITCH_RPCSS );
|
||
}
|
||
|
||
BOOL IsHookOleEnabled()
|
||
{
|
||
return IsSwitchDefined( SWITCH_HOOKOLE );
|
||
}
|
||
|
||
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 );
|
||
}
|
||
|
||
BOOL IsPrefixDifferentForStubs();
|
||
|
||
} CMD_ARG;
|
||
|
||
typedef unsigned long ulong;
|
||
|
||
// a handy definition of the global var that holds all this
|
||
extern CMD_ARG * pCommand;
|
||
|
||
#endif // __CMDANA_HXX__
|