windows-nt/Source/XPSP1/NT/sdktools/asn1/asn1cpp/macro.h
2020-09-26 16:20:57 +08:00

149 lines
3.1 KiB
C++

/* Copyright (C) Microsoft Corporation, 1998. All rights reserved. */
#ifndef _MACRO_H_
#define _MACRO_H_
#include "getsym.h"
#include "utils.h"
#include "cntlist.h"
#define DEF_BODY_SIZE 2048
#define ARG_ESCAPE_CHAR '$'
#define ARG_INDEX_BASE '0'
// forward class definitions
class CMacro;
class CMacroMgr;
class CMacroInstance;
// list classes
class CMacroInstList : public CList
{
DEFINE_CLIST(CMacroInstList, CMacroInstance*);
void DeleteList ( void );
};
class CMacroList : public CList
{
DEFINE_CLIST(CMacroList, CMacro*);
void DeleteList ( void );
};
class CMacroMgrList : public CList
{
DEFINE_CLIST(CMacroMgrList, CMacroMgr*);
CMacro *FindMacro ( LPSTR pszModuleName, LPSTR pszMacroName );
CMacroMgr *FindMacroMgr ( LPSTR pszModuleName );
void Uninstance ( void );
void DeleteList ( void );
};
class CNameList : public CList
{
DEFINE_CLIST(CNameList, LPSTR);
BOOL AddName ( LPSTR );
LPSTR GetNthItem ( UINT nth );
void DeleteList ( void );
};
class CMacro
{
public:
CMacro ( BOOL *pfRetCode, LPSTR pszMacroName, UINT cbMaxBodySize = DEF_BODY_SIZE );
CMacro ( BOOL *pfRetCode, CMacro *pMacro );
~CMacro ( void );
void SetArg ( LPSTR pszArgName ) { m_ArgList.AddName(pszArgName); }
void DeleteArgList ( void ) { m_ArgList.DeleteList(); }
BOOL SetBodyPart ( LPSTR pszBodyPart );
void EndMacro ( void );
LPSTR CreateInstanceName ( void );
BOOL InstantiateMacro ( void );
BOOL OutputInstances ( COutput *pOutput );
LPSTR GetName ( void ) { return m_pszMacroName; }
void Uninstance ( void );
BOOL IsImported ( void ) { return m_fImported; }
private:
LPSTR m_pszMacroName;
UINT m_cFormalArgs;
CNameList m_ArgList;
UINT m_cbMaxBodySize;
UINT m_cbBodySize;
LPSTR m_pszCurr;
LPSTR m_pszBodyBuffer;
LPSTR m_pszExpandBuffer;
CMacroInstList m_MacroInstList;
BOOL m_fArgExistsInBody;
BOOL m_fImported;
};
class CMacroMgr
{
public:
CMacroMgr ( void );
~CMacroMgr ( void );
BOOL AddModuleName ( LPSTR pszModuleName );
LPSTR GetModuleName ( void ) { return m_pszModuleName; }
void AddMacro ( CMacro *pMacro ) { m_MacroList.Append(pMacro); }
CMacro *FindMacro ( LPSTR pszMacroName );
BOOL OutputImportedMacros ( COutput *pOutput );
void Uninstance ( void );
private:
CMacroList m_MacroList;
LPSTR m_pszModuleName;
};
class CMacroInstance
{
public:
CMacroInstance ( BOOL *pfRetCode, LPSTR pszInstanceName, UINT cbBufSize, LPSTR pszInstBuf );
~CMacroInstance ( void );
LPSTR GetName ( void ) { return m_pszInstanceName; }
UINT GetNameLen ( void ) { return ::strlen(m_pszInstanceName); }
LPSTR GetBuffer ( void ) { return m_pszInstanceBuffer; }
UINT GetBufSize ( void ) { return m_cbBufSize; }
private:
LPSTR m_pszInstanceName;
UINT m_cbBufSize;
LPSTR m_pszInstanceBuffer;
};
#endif // _MACRO_H_