1 // ---------------------------------------------------------------------------
2 // Hyper Operating System V4a コンフィギュレーター
5 // Copyright (C) 1998-2009 by Project HOS
6 // http://sourceforge.jp/projects/hos/
7 // ---------------------------------------------------------------------------
19 #define CREFLG_FLGID 0
20 #define CREFLG_FLGATR 1
21 #define CREFLG_IFLGPTN 2
26 CApiCreFlg::CApiCreFlg()
29 m_iDefaultMaxId = _KERNEL_TMAX_FLGID;
32 m_iParamSyntax[0] = 0; // 単独パラメーター
33 m_iParamSyntax[1] = 2; // 2パラメーターのブロック
38 CApiCreFlg::~CApiCreFlg()
44 int CApiCreFlg::AnalyzeApi(const char* pszApiName, const char* pszParams)
46 if ( strcmp(pszApiName, "CRE_FLG") == 0 )
48 return AddParams(pszParams);
50 else if ( strcmp(pszApiName, "KERNEL_MAX_FLGID") == 0 )
56 return CFG_ERR_MULTIDEF;
61 return CFG_ERR_DEF_CONFLICT;
64 if ( (iId = atoi(pszParams)) < 0 )
73 else if ( strcmp(pszApiName, "KERNEL_RSV_FLGID") == 0 )
79 return CFG_ERR_DEF_CONFLICT;
82 if ( (iId = atoi(pszParams)) <= 0 )
92 return CFG_ERR_NOPROC;
97 void CApiCreFlg::WriteId(FILE* fp)
107 fputs("\n\n/* event flag ID definetion */\n", fp);
110 for ( i = 0; i < m_iObjs; i++ )
112 if ( atoi(m_pParamPacks[i]->GetParam(CREFLG_FLGID)) == 0 )
116 "#define %s\t\t%d\n",
117 m_pParamPacks[i]->GetParam(CREFLG_FLGID),
125 "#ifdef TMAX_FLGID\n"
126 "#undef TMAX_FLGID\n"
129 "#define TMAX_FLGID\t\t%d\n\n", m_iMaxId);
134 void CApiCreFlg::WriteCfgDef(FILE* fp)
146 "/* ------------------------------------------ */\n"
147 "/* create eventflag objects */\n"
148 "/* ------------------------------------------ */\n"
154 #if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_BLKARRAY
155 #if _KERNEL_FLGCB_ROM
159 fprintf(fp, "\n_KERNEL_T_FLGCB _kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId);
160 for ( i = 1; i <= m_iMaxId; i++ )
162 int iObjNum = IdToObjNum(i);
165 fprintf(fp, "\t\t{");
166 WriteSemcbRam(fp, iObjNum);
171 fprintf(fp, "\t\t{{0}, },\n");
174 fprintf(fp, "\t};\n");
177 fprintf(fp, "\nconst _KERNEL_T_FLGCB_ROM _kernel_flgcb_rom_tbl[%d] =\n\t{\n", m_iMaxId);
178 for ( i = 1; i <= m_iMaxId; i++ )
180 int iObjNum = IdToObjNum(i);
183 fprintf(fp, "\t\t{");
184 WriteSemcbRom(fp, iObjNum);
189 fprintf(fp, "\t\t{0},\n");
192 fprintf(fp, "\t};\n\n");
198 fprintf(fp, "\n_KERNEL_T_FLGCB _kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId);
199 for ( i = 1; i <= m_iMaxId; i++ )
201 int iObjNum = IdToObjNum(i);
204 fprintf(fp, "\t\t{");
205 WriteFlgcbRam(fp, iObjNum);
206 WriteFlgcbRom(fp, iObjNum);
211 fprintf(fp, "\t\t{0},\n");
214 fprintf(fp, "\t};\n");
217 #elif _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY
218 #if _KERNEL_FLGCB_ROM
222 for ( i = 0; i < m_iObjs; i++ )
224 fprintf(fp, "const _KERNEL_T_FLGCB_RO _kernel_flgcb_ro_blk_%d = {", m_iId[i]);
225 WriteFlgcbRom(fp, i);
229 for ( i = 0; i < m_iObjs; i++ )
231 fprintf(fp, "_KERNEL_T_FLGCB _kernel_flgcb_blk_%d = {", m_iId[i]);
232 WriteFlgcbRam(fp, i);
236 fprintf(fp, "\n_KERNEL_T_FLGCB *_kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId);
237 for ( i = 1; i <= m_iMaxId; i++ )
239 int iObjNum = IdToObjNum(i);
242 fprintf(fp, "\t\t&_kernel_flgcb_blk_%d,\n", i);
246 fprintf(fp, "\t\tNULL,\n");
249 fprintf(fp, "\t};\n"); }
254 for ( i = 0; i < m_iObjs; i++ )
256 fprintf(fp, "_KERNEL_T_FLGCB _kernel_flgcb_blk_%d = {", m_iId[i]);
257 WriteFlgcbRam(fp, i);
258 WriteFlgcbRom(fp, i);
262 fprintf(fp, "\n_KERNEL_T_FLGCB *_kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId);
263 for ( i = 1; i <= m_iMaxId; i++ )
265 int iObjNum = IdToObjNum(i);
268 fprintf(fp, "\t\t&_kernel_flgcb_blk_%d,\n", i);
272 fprintf(fp, "\t\tNULL,\n");
275 fprintf(fp, "\t};\n");
285 "\nconst ID _kernel_max_flgid = %d;\n",
291 void CApiCreFlg::WriteFlgcbRam(FILE *fp, int iObj)
293 #if _KERNEL_FLGCB_QUE
294 fprintf(fp, "{0}, "); /* %jp{キュー} */
297 #if _KERNEL_FLGCB_FLGPTN
298 fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CREFLG_IFLGPTN)); /* %jp{} */
303 void CApiCreFlg::WriteFlgcbRom(FILE *fp, int iObj)
305 #if _KERNEL_FLGCB_FLGATR
306 fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CREFLG_FLGATR)); /* %jp{イベントフラグ属性} */
313 void CApiCreFlg::WriteCfgIni(FILE* fp)
319 void CApiCreFlg::WriteCfgStart(FILE* fp)