1 // ---------------------------------------------------------------------------
2 // Hyper Operating System V4 コンフィギュレーター
5 // Copyright (C) 1998-2003 by Project HOS
6 // http://sourceforge.jp/projects/hos/
7 // ---------------------------------------------------------------------------
19 #define CREMBF_MBFID 0
20 #define CREMBF_MBFATR 1
21 #define CREMBF_MAXMSZ 2
22 #define CREMBF_MBFSZ 3
27 CApiCreMbf::CApiCreMbf()
30 m_iParamSyntax[0] = 0; // 単独パラメーター
31 m_iParamSyntax[1] = 4; // 4パラメーターのブロック
36 CApiCreMbf::~CApiCreMbf()
43 int CApiCreMbf::AnalyzeApi(const char* pszApiName, const char* pszParams)
45 if ( strcmp(pszApiName, "CRE_MBF") == 0 )
47 return AddParams(pszParams);
49 else if ( strcmp(pszApiName, "KERNEL_MAX_MBFID") == 0 )
55 return CFG_ERR_MULTIDEF;
60 return CFG_ERR_DEF_CONFLICT;
63 if ( (iId = atoi(pszParams)) <= 0 )
72 else if ( strcmp(pszApiName, "KERNEL_RSV_MBFID") == 0 )
78 return CFG_ERR_DEF_CONFLICT;
81 if ( (iId = atoi(pszParams)) <= 0 )
91 return CFG_ERR_NOPROC;
96 void CApiCreMbf::WriteId(FILE* fp)
100 // ID 直接指定でないオブジェクトが在るかどうかサーチ
101 for ( i = 0; i < m_iObjs; i++ )
103 if ( atoi(m_pParamPacks[i]->GetParam(CREMBF_MBFID)) == 0 )
113 fputs("\n\n/* message buffer ID definetion */\n", fp);
114 for ( i = 0; i < m_iObjs; i++ )
116 if ( atoi(m_pParamPacks[i]->GetParam(CREMBF_MBFID)) == 0 )
120 "#define %s\t\t%d\n",
121 m_pParamPacks[i]->GetParam(CREMBF_MBFID),
126 fprintf( fp,"\n#define TMAX_MBFID\t\t%d\n", m_iMaxId );
131 void CApiCreMbf::WriteCfgDef(FILE* fp)
133 const char* pszParam;
134 bool blOutput; int i, j;
139 "/* ------------------------------------------ */\n"
140 "/* create message buffer objects */\n"
141 "/* ------------------------------------------ */\n"
146 for ( i = 0; i < m_iObjs; i++ )
148 pszParam = m_pParamPacks[i]->GetParam(CREMBF_MBF);
149 if ( strcmp(pszParam, "NULL") == 0 )
153 fputs("\n/* message buffer area */\n", fp);
159 "static VP kernel_mbf%d[(%s)];\n",
161 m_pParamPacks[i]->GetParam(CREMBF_MBFSZ));
169 "\n/* message buffer control block for rom area */\n"
170 "const T_KERNEL_MBFCB_ROM kernel_mbfcb_rom[%d] =\n"
174 // コントロールブロック(ROM部)出力
175 for ( i = 0; i < m_iObjs; i++ )
179 "\t\t{(ATR)(%s), (UINT)(%s), (SIZE)(%s),",
180 m_pParamPacks[i]->GetParam(CREMBF_MBFATR),
181 m_pParamPacks[i]->GetParam(CREMBF_MAXMSZ),
182 m_pParamPacks[i]->GetParam(CREMBF_MBFSZ));
183 pszParam = m_pParamPacks[i]->GetParam(CREMBF_MBF);
184 if ( strcmp(pszParam, "NULL") == 0 )
188 "(VP)kernel_mbf%d},\n",
196 m_pParamPacks[i]->GetParam(CREMBF_MBF));
199 fprintf(fp, "\t};\n");
202 // コントロールブロック(RAM部)出力
207 "\n/* message buffer control block for ram area */\n"
208 "T_KERNEL_MBFCB_RAM kernel_mbfcb_ram[%d];\n",
217 "\n/* message buffer control block table */\n"
218 "T_KERNEL_MBFCB_RAM *kernel_mbfcb_ram_tbl[%d] =\n"
222 for ( i = 0; i < m_iMaxId; i++ )
225 for ( j = 0; j < m_iObjs; j++ )
227 if ( m_iId[j] == i + 1 )
235 fprintf(fp, "\t\t&kernel_mbfcb_ram[%d],\n", j);
240 fputs("\t\tNULL,\n", fp);
249 "\n/* mail box control block count */\n"
250 "const INT kernel_mbfcb_cnt = %d;\n",
256 void CApiCreMbf::WriteCfgIni(FILE* fp)
268 "\t/* initialize message buffer control block */\n"
269 "\tfor ( i = 0; i < %d; i++ )\n"
271 "\t\tkernel_mbfcb_ram[i].mbfcb_rom = &kernel_mbfcb_rom[i];\n"
278 void CApiCreMbf::WriteCfgStart(FILE* fp)
286 fputs("\tkernel_ini_mbf();\t\t/* initialize message buffer */\n", fp);
290 // ---------------------------------------------------------------------------
291 // Copyright (C) 1998-2003 by Project HOS
292 // ---------------------------------------------------------------------------