www.pudn.com > apdb2ndb.rar > atn_conv_to_module.cc
//
// Convert Io Block and IO component to NDB-module
//
//
#include "atn_inc.h"
// ERR OK
ATN_FDEF int atn_conv_to_module(atn_com &com)
{
int rcode =0;
int rc = 0;
int rc_get_ioblock;
AirBlockInfo BlockInfo;
AirSeq *seq_io_block = NULL_PTR;
rc = atn_init_seq_read(com,&seq_io_block);
for(;;)
{
rc_get_ioblock = seq_io_block->ioblock_in_arch(BlockInfo);
if(rc_get_ioblock == AIR_R_NOEXIST)
{
// Error Message : User Error
// No io-block in archtecture
com.afm->message("atn0420",
AIR_MSG_CHR,"msg","no io_block",
AIR_MSG_CHR,"file",__FILE__,
AIR_MSG_INT,"line",__LINE__,AIR_MSG_END);
rcode = -1;
goto exit_func;
}
if(rc_get_ioblock == AIR_R_NOMEM)
{
// Error Message : Program Error
// No Enough Memory
com.afm->message("atn0800",
AIR_MSG_CHR,"msg","no io_block",
AIR_MSG_CHR,"file",__FILE__,
AIR_MSG_INT,"line",__LINE__,AIR_MSG_END);
rcode = -1;
goto exit_func;
}
const char *blockname = BlockInfo.get_blockname();
int blockid = com.top_blockid = BlockInfo.get_blockid();
int compid = com.top_compid = BlockInfo.get_componentid();
const char *compname = BlockInfo.get_componentname();
if(com.module_name==NULL)
{
com.module_name = strdup(compname);
}
const char *stackname = BlockInfo.get_stackname();
int io_f = BlockInfo.get_io_f();
atn_debug(__FILE__,__LINE__,"=== IO BLOCK ===\n");
atn_debug(__FILE__,__LINE__,
" blockid(%d) blockname<%s> stackname<%s> io_f(%d)\n",
(int)blockid,blockname,stackname?stackname:"",io_f);
atn_debug(__FILE__,__LINE__,
" componentid(%d) componentname<%s>\n",
compid,compname);
/* create new module (module_name = component_name) */
if(rc_get_ioblock == AIR_R_FINISH)
{
// end of io-block
break;
}
}
/* Remark we make only one module even if io_block consts
with many components */
rc = ndb_new_module(com.part_cntl,com.module_name,&com.mid,
NDB_VERILOG,NDB_LOGIC_MODULE);
if(rc < 0)
{
/* error */
com.afm->message("atm0430",
AIR_MSG_CHR,"func","ndb_new_module",
AIR_MSG_CHR,"file",__FILE__,
AIR_MSG_INT,"line",__LINE__,AIR_MSG_END);
atn_debug(__FILE__,__LINE__,"ndb_new_module failure\n");
rcode = -1;
goto exit_func;
}
atn_debug(__FILE__,__LINE__,"ndb_new_module return 0 mid(%d)\n",
com.mid);
exit_func:
if(seq_io_block)
{
delete seq_io_block;
seq_io_block = NULL_PTR;
}
return rcode;
}