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; 
}