www.pudn.com > hos-v4_os.rar > apidef.cpp


// --------------------------------------------------------------------------- 
//  Hyper Operating System V4  コンフィギュレーター                            
//    API定義クラス                                                            
//                                                                             
//                                    Copyright (C) 1998-2002 by Project HOS   
//                                    http://sourceforge.jp/projects/hos/      
// --------------------------------------------------------------------------- 
 
 
#include  
#include  
#include "defercd.h" 
#include "apidef.h" 
#include "analyze.h" 
 
 
 
// コンストラクタ 
CApiDef::CApiDef() 
{ 
	int i; 
 
	m_iMaxId = 0; 
	m_iObjs  = 0; 
	for ( i = 0; i < API_MAX_OBJS; i++ ) 
	{ 
		m_pParamPacks[i] = NULL; 
		m_iId[i]         = 0; 
	} 
} 
 
 
// デストラクタ 
CApiDef::~CApiDef() 
{ 
	int i; 
 
	for ( i = 0; i < API_MAX_OBJS; i++ ) 
	{ 
		delete m_pParamPacks[i]; 
	} 
} 
 
 
// パラメーター追加(超手抜き) 
int CApiDef::AddParams(const char* pszParams) 
{ 
	char szParamBlock[API_MAX_PARAM]; 
	char szParam[API_MAX_PARAM]; 
	int  iErr; 
	int  iIndex = 0; 
	int  i, j; 
 
	// パラメータ格納用オブジェクト生成 
	m_pParamPacks[m_iObjs] = new CParamPack(); 
 
	for ( i = 0; i < m_iParams; i++ ) 
	{ 
		if ( m_iParamSyntax[i] == 0 ) 
		{ 
			// 単独パラメーター切り出し 
			iErr = CAnalyze::GetParameter(szParam, pszParams); 
			if ( iErr != CFG_ERR_OK ) 
			{ 
				break; 
			} 
 
			// パラメーター追加 
			CAnalyze::SpaceCut(szParam); 
			m_pParamPacks[m_iObjs]->SetParam(iIndex++, szParam); 
		} 
		else 
		{ 
			// 空白読み飛ばし 
			while ( *pszParams == ' ' ) 
			{ 
				pszParams++; 
			} 
 
			// ブロック開始チェック 
			if ( *pszParams++ != '{' ) 
			{ 
				iErr = CFG_ERR_SYNTAX; 
				break; 
			} 
			 
			// ブロック切り出し 
			iErr = CAnalyze::SearchChar(szParamBlock, pszParams, '}'); 
			if ( iErr != CFG_ERR_OK ) 
			{ 
				break; 
			} 
 
			// ブロック内読み出し 
			const char* pszParamBlock = szParamBlock; 
			for ( j = 0; j < m_iParamSyntax[i] + 1; j++ ) 
			{ 
				// 単独パラメーター切り出し 
				iErr = CAnalyze::GetParameter(szParam, pszParamBlock); 
				if ( iErr != CFG_ERR_OK ) 
				{ 
					break; 
				} 
 
				// パラメーター追加 
				CAnalyze::SpaceCut(szParam); 
				if ( szParam[0] == '\0') 
				{ 
					break; 
				} 
				m_pParamPacks[m_iObjs]->SetParam(iIndex++, szParam); 
			} 
			if ( iErr != CFG_ERR_OK ) 
			{ 
				iErr = CFG_ERR_SYNTAX; 
				break; 
			} 
			if ( j != m_iParamSyntax[i] ) 
			{ 
				iErr = CFG_ERR_PARAM; 
				break; 
			} 
		} 
	} 
 
	if ( iErr == CFG_ERR_OK ) 
	{ 
		m_iObjs++; 
	} 
 
	return iErr; 
} 
 
 
// 自動ID番号割り当て 
int CApiDef::AutoId(void) 
{ 
	bool blUsedId[255]; 
	int iId; 
	int i; 
 
	// 変数初期化 
	for ( i = 0; i < 255; i++ ) 
	{ 
		blUsedId[i] = false; 
	} 
 
	// 固定値指定のIDをサーチ 
	for ( i = 0; i < m_iObjs; i++ ) 
	{ 
		iId = atoi(m_pParamPacks[i]->GetParam(0)); 
		if ( iId > 0 ) 
		{ 
			if ( m_iId[i] != 0 ) 
			{ 
				return CFG_ERR_ID_CONFLICT;		// ID衝突 
			} 
			m_iId[i] = iId; 
			blUsedId[iId - 1] = true; 
			if ( iId > m_iMaxId ) 
			{ 
				m_iMaxId = iId; 
			} 
		} 
	} 
 
	// ID 自動割当 
	iId = 1; 
	for ( i = 0; i < m_iObjs; i++ ) 
	{ 
		if ( m_iId[i] == 0 ) 
		{ 
			// 使用済みIDのスキップ 
			while ( blUsedId[iId - 1] ) 
			{ 
				iId++; 
			} 
			m_iId[i] = iId++; 
		} 
	} 
	iId--; 
 
	if ( iId > m_iMaxId ) 
	{ 
		m_iMaxId = iId; 
	} 
 
	return 0; 
} 
 
 
// ID 定義ファイル書き出し 
void CApiDef::WriteId(FILE* fpId) 
{ 
} 
 
 
// cfgファイル定義部書き出し 
void CApiDef::WriteCfgDef(FILE* fpCfg) 
{ 
} 
 
// cfgファイル初期化部書き出し 
void CApiDef::WriteCfgIni(FILE* fpCfg) 
{ 
} 
 
// cfgファイル起動部書き出し 
void CApiDef::WriteCfgStart(FILE* fpCfg) 
{ 
} 
 
 
// --------------------------------------------------------------------------- 
//  Copyright (C) 1998-2002 by Project HOS                                     
// ---------------------------------------------------------------------------