diff --git a/ChangeLog b/ChangeLog
index 58837608d..a2577861b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-08-06 Paolo Nenzi
+
+ * src/xspice/mif/mifsetup.c: Updated MIFunsetup to the latest version
+ provided by Hitoshi Tanaka.
+
+
2005-08-04 Paolo Nenzi
* Fixed a bug in memory management of xspice/ngspice that caused
diff --git a/src/xspice/mif/mifsetup.c b/src/xspice/mif/mifsetup.c
index 407b68023..7819112b9 100755
--- a/src/xspice/mif/mifsetup.c
+++ b/src/xspice/mif/mifsetup.c
@@ -462,67 +462,76 @@ MIFunsetup(GENmodel *inModel,CKTcircuit *ckt)
Mif_Smp_Ptr_t *smp_data_out;
Mif_Smp_Ptr_t *smp_data_cntl;
Mif_Port_Type_t type,in_type,out_type;
- Mif_Cntl_Src_Type_t cntl_src_type;
- int num_conn,num_port,i,j;
+ Mif_Cntl_Src_Type_t cntl_src_type;
+ int num_conn,num_port,i,j,k,l,num_port_k;
- for (model = (MIFmodel *)inModel; model != NULL;
- model = model->MIFnextModel)
+ for (model = (MIFmodel *)inModel; model != NULL;
+ model = model->MIFnextModel)
{
- for(here = model->MIFinstances; here != NULL;
+ for(here = model->MIFinstances; here != NULL;
here = here->MIFnextInstance)
- {
- num_conn=here->num_conn;
- for(i = 0; i < num_conn; i++) {
+ {
+ num_conn=here->num_conn;
+ for(i = 0; i < num_conn; i++) {
- // if the connection is null, skip to next connection
- if(here->conn[i]->is_null) continue;
+ // if the connection is null, skip to next connection
+ if(here->conn[i]->is_null) continue;
- // prepare things for convenient access later
- num_port = here->conn[i]->size;
+ // prepare things for convenient access later
+ num_port = here->conn[i]->size;
- // loop through all ports on this connection
- for(j = 0; j < num_port; j++) {
+ // loop through all ports on this connection
+ for(j = 0; j < num_port; j++) {
- // Skip if port is digital or user-defined type
- type = here->conn[i]->port[j]->type;
+ // determine the type of this output port
+ out_type = here->conn[i]->port[j]->type;
- // determine the type of this output port
- out_type = here->conn[i]->port[j]->type;
+ // create a pointer to the smp data for quick access
+ smp_data_out = &(here->conn[i]->port[j]->smp_data);
- // create a pointer to the smp data for quick access
- smp_data_out = &(here->conn[i]->port[j]->smp_data);
+ for(k = 0; k < num_conn; k++) {
+ // if the connection is null or is not an input
+ // skip to next connection
+ if((here->conn[k]->is_null) || (! here->conn[k]->is_input))
+ continue;
+ num_port_k = here->conn[k]->size;
+ // determine the type of this input port
+ for(l = 0; l < num_port_k; l++) {
- // determine the type of this input port
- in_type = here->conn[i]->port[j]->type;
- cntl_src_type = MIFget_cntl_src_type(in_type, out_type);
+ // if port is null, skip to next
+ if(here->conn[k]->port[l]->is_null)
+ continue;
+ in_type = here->conn[i]->port[j]->type;
+ cntl_src_type = MIFget_cntl_src_type(in_type, out_type);
- switch(cntl_src_type)
- {
- case MIF_VCVS:
- case MIF_ICVS:
- case -1:
- if(smp_data_out->branch)
- {
- CKTdltNNum(ckt, smp_data_out->branch);
- smp_data_out->branch = 0;
- }
-
- if(smp_data_out->ibranch)
- {
- CKTdltNNum(ckt, smp_data_out->ibranch);
- smp_data_out->ibranch = 0;
- }
- here->initialized=MIF_FALSE;
- break;
- }
+ switch(cntl_src_type)
+ {
+ case MIF_VCVS:
+ case MIF_ICVS:
+ case MIF_VCIS:
+ case MIF_ICIS:
+ case -1:
+ if(smp_data_out->branch)
+ {
+ CKTdltNNum(ckt, smp_data_out->branch);
+ smp_data_out->branch = 0;
+ }
- }
- }
-
- }
+ if(smp_data_out->ibranch)
+ {
+ CKTdltNNum(ckt, smp_data_out->ibranch);
+ smp_data_out->ibranch = 0;
+ }
+ here->initialized=MIF_FALSE;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
}
- //printf("MIFunsetup completed.\n");
+ //printf("MIFunsetup completed.\n");
return OK;
}
-