1 // ---------------------------------------------------------------------------
2 // Hyper Operating System V4 コンフィギュレーター
5 // Copyright (C) 1998-2003 by Project HOS
6 // http://sourceforge.jp/projects/hos/
7 // ---------------------------------------------------------------------------
20 #define CREDTQ_DTQID 0
21 #define CREDTQ_DTQATR 1
22 #define CREDTQ_DTQCNT 2
28 CApiCreDtq::CApiCreDtq()
31 m_iDefaultMaxId = _KERNEL_TMAX_DTQID;
34 m_iParamSyntax[0] = 0; // 単独パラメーター
35 m_iParamSyntax[1] = 3; // 3パラメーターのブロック
40 CApiCreDtq::~CApiCreDtq()
46 int CApiCreDtq::AnalyzeApi(const char* pszApiName, const char* pszParams)
48 if ( strcmp(pszApiName, "CRE_DTQ") == 0 )
50 return AddParams(pszParams);
52 else if ( strcmp(pszApiName, "KERNEL_MAX_DTQID") == 0 )
58 return CFG_ERR_MULTIDEF;
63 return CFG_ERR_DEF_CONFLICT;
66 if ( (iId = atoi(pszParams)) <= 0 )
75 else if ( strcmp(pszApiName, "KERNEL_RES_DTQID") == 0 )
81 return CFG_ERR_DEF_CONFLICT;
84 if ( (iId = atoi(pszParams)) < 0 )
94 return CFG_ERR_NOPROC;
99 void CApiCreDtq::WriteId(FILE* fp)
108 // ID 直接指定でないオブジェクトが在るかどうかサーチ
109 for ( i = 0; i < m_iObjs; i++ )
111 if ( atoi(m_pParamPacks[i]->GetParam(CREDTQ_DTQID)) == 0 )
121 fputs("\n\n/* data queue ID definetion */\n", fp);
122 for ( i = 0; i < m_iObjs; i++ )
124 if ( atoi(m_pParamPacks[i]->GetParam(CREDTQ_DTQID)) == 0 )
128 "#define %s\t\t%d\n",
129 m_pParamPacks[i]->GetParam(CREDTQ_DTQID),
134 fprintf( fp,"\n#define TMAX_DTQID\t\t%d\n", m_iMaxId );
139 void CApiCreDtq::WriteCfgDef(FILE* fp)
141 const char* pszParam;
153 "/* ------------------------------------------ */\n"
154 "/* create data queue objects */\n"
155 "/* ------------------------------------------ */\n"
160 for ( i = 0; i < m_iObjs; i++ )
162 pszParam = m_pParamPacks[i]->GetParam(CREDTQ_DTQ);
163 if ( strcmp(pszParam, "NULL") == 0 )
167 fputs("\n/* data que area */\n", fp);
173 "static VP_INT kernel_dtq%d_dtq[%s];\n",
175 m_pParamPacks[i]->GetParam(CREDTQ_DTQCNT));
183 "\n/* data queue control block for rom area */\n"
184 "const T_KERNEL_DTQCB_ROM kernel_dtqcb_rom[%d] =\n"
188 // コントロールブロック(ROM部)出力
189 for ( i = 0; i < m_iObjs; i++ )
193 "\t\t{(ATR)(%s), (UINT)(%s), ",
194 m_pParamPacks[i]->GetParam(CREDTQ_DTQATR),
195 m_pParamPacks[i]->GetParam(CREDTQ_DTQCNT));
196 pszParam = m_pParamPacks[i]->GetParam(CREDTQ_DTQ);
197 if ( strcmp(pszParam, "NULL") == 0 )
199 fprintf(fp, "kernel_dtq%d_dtq},\n", m_iId[i]);
203 fprintf(fp, "(VP_INT *)(%s)},\n", pszParam);
206 fprintf(fp, "\t};\n");
209 // コントロールブロック(RAM部)出力
214 "\n/* data queue control block for ram area */\n"
215 "T_KERNEL_DTQCB_RAM kernel_dtqcb_ram[%d];\n",
224 "\n/* data queue control block table */\n"
225 "T_KERNEL_DTQCB_RAM *kernel_dtqcb_ram_tbl[%d] =\n"
229 for ( i = 0; i < m_iMaxId; i++ )
232 for ( j = 0; j < m_iObjs; j++ )
234 if ( m_iId[j] == i + 1 )
242 fprintf(fp, "\t\t&kernel_dtqcb_ram[%d],\n", j);
247 fputs("\t\tNULL,\n", fp);
256 "\n/* data queue control block count */\n"
257 "const INT kernel_dtqcb_cnt = %d;\n",
263 void CApiCreDtq::WriteCfgIni(FILE* fp)
279 void CApiCreDtq::WriteCfgStart(FILE* fp)