Index: vis_dev/vis-2.3/src/debug/debug.c
===================================================================
--- vis_dev/vis-2.3/src/debug/debug.c	(revision 103)
+++ vis_dev/vis-2.3/src/debug/debug.c	(revision 104)
@@ -67,4 +67,6 @@
 static int CommandGenerateNetworkCNF(Hrc_Manager_t ** hmgr,int  argc, char ** argv);
 static int CommandBuildCexBdd(Hrc_Manager_t ** hmgr,int  argc, char ** argv);
+static int CommandComposeWithCex(Hrc_Manager_t ** hmgr,int  argc, char ** argv);
+
 
 
@@ -98,4 +100,5 @@
   Cmd_CommandAdd("_cexbdd",      CommandBuildCexBdd, 0);
   Cmd_CommandAdd("print_network_cnf",  CommandGenerateNetworkCNF, 0);
+  Cmd_CommandAdd("_compose",  CommandComposeWithCex, 1);
 
 }
@@ -1046,4 +1049,94 @@
 mdd_FunctionPrintMain (mddManager ,init,"INIT",vis_stdout);
 
+return 0;		/* normal exit */
+
+usage:
+(void) fprintf(vis_stderr, "usage: _BddCex [-h] [-v]\n");
+(void) fprintf(vis_stderr, "   -h\t\tprint the command usage\n");
+(void) fprintf(vis_stderr, "   -v\t\tverbose\n");
+return 1;		/* error exit */
+
+}
+
+
+static int CommandComposeWithCex(Hrc_Manager_t ** hmgr,int  argc, char ** argv)
+{
+
+  char * cexName;
+  char * cexModelName;
+  char * rootName;
+  char * newName;
+  FILE * cexFile;
+  Hrc_Node_t * rootNode;
+  Hrc_Node_t * cexNode;
+  Hrc_Model_t * rootModel;
+  Hrc_Model_t * cexModel;
+  Hrc_Model_t * newModel;
+  Hrc_Manager_t *  hmgrCex;
+ // Ntk_Network_t * networkCex;
+  array_t *cexActualInputArray, *cexActualOutputArray;
+  array_t *actualInputArray, *actualOutputArray;
+
+  rootNode = Hrc_ManagerReadRootNode(*hmgr);
+  if(rootNode == NIL(Hrc_Node_t)){
+	printf("Please build the network first\n");
+	return 1;
+  }
+  rootName = Hrc_NodeReadModelName(rootNode);
+  rootModel =  Hrc_ManagerFindModelByName(*hmgr,rootName);
+  if (argc - util_optind > 0)
+   {
+     cexName  = util_strsav(argv[util_optind]);
+     cexFile = Cmd_FileOpen(cexName, "r", NIL(char *), 0); 
+     if(cexFile == NULL)
+      (void) fprintf(vis_stderr, "%s not Found\n",cexName);
+
+  }
+  else
+    goto usage;
+ 
+
+ 
+// Read_blif_mv
+  hmgrCex =  Io_BlifMvRead(cexFile,hmgrCex,0,0,0);
+  if(hmgrCex == NIL(Hrc_Manager_t)){
+    fprintf(vis_stderr, "cannot open the hierrachy %\n",cexName);
+    return 1;
+  }
+  st_table * modelTable = Hrc_ManagerReadModelTable(hmgrCex);
+  if( st_count(modelTable) != 1){
+    fprintf(vis_stderr, "cannot open more than one cex model\n");
+    return 1;
+  }
+  st_generator *  gen;
+  Hrc_ManagerForEachModel( hmgrCex,gen,cexModelName,cexModel){}
+  fprintf(vis_stderr, "Compose %s with %s\n",rootName, cexModelName);
+ 
+  cexNode = Hrc_ManagerReadRootNode(hmgrCex);
+  actualInputArray = array_dup(Hrc_NodeReadFormalInputs(rootNode));
+  actualOutputArray = array_dup(Hrc_NodeReadFormalOutputs(rootNode));
+  Hrc_ModelAddSubckt(rootModel,cexModel,cexModelName,actualInputArray, actualOutputArray);
+
+
+
+ 
+  
+
+
+/*
+ modelName = Hrc_NodeReadModelName(rootNode);
+ newRootName = ALLOC(char, strlen(cexName)+ strlen(modelName) + 2);
+ sprintf(newRootName,"%s_%s",modelName,cexName);
+ Hrc_Model_t * newRootModel = Hrc_ModelAlloc(*hmgr,rootName);
+*/
+
+ fclose(cexFile);
+ return 0;		/* normal exit */
+
+usage:
+(void) fprintf(vis_stderr, "usage: _compose <cexFileName>\n");
+return 1;		/* error exit */
+
+
 /*
 // Read_blif_mv
@@ -1103,13 +1196,5 @@
 printf(" modele %s , cex %s \n",Part_PartitionReadName(part), Part_PartitionReadName(partition));
 */
-return 0;		/* normal exit */
-
-usage:
-(void) fprintf(vis_stderr, "usage: _BddCex [-h] [-v]\n");
-(void) fprintf(vis_stderr, "   -h\t\tprint the command usage\n");
-(void) fprintf(vis_stderr, "   -v\t\tverbose\n");
-return 1;		/* error exit */
-
-}
-
-
+
+    
+}
