Suite de l'introduction des objets analogiques capacite, resistance et self.
Modification du parser et du driver al. Syntaxe: P type capa name tcon bcon node_tcon node_bcon ---capacite R type resi name rcon1 rcon2 node_rcon1 node_rcon2 ---resistance L type self name scon1 scon2 node_scon1 node_scon2 ---inductance Note: Q existe deja pour les capacites de type RC (rcn). On utilise P a la place.
This commit is contained in:
parent
8bc0ade869
commit
bc51108da7
|
@ -26,9 +26,23 @@
|
||||||
* Tool : Driver al *
|
* Tool : Driver al *
|
||||||
* Author(s) : Gregoire AVOT and many others, ... *
|
* Author(s) : Gregoire AVOT and many others, ... *
|
||||||
* Updates : June, 12th 1998 *
|
* Updates : June, 12th 1998 *
|
||||||
|
* Updates : August, 12th 2002, Pierre Nguyen Tuong *
|
||||||
* $Log: alc_driv_l.c,v $
|
* $Log: alc_driv_l.c,v $
|
||||||
* Revision 1.1 2002/03/13 10:19:11 fred
|
* Revision 1.2 2002/08/13 16:40:14 pnt
|
||||||
* Initial revision
|
* Suite de l'introduction des objets analogiques capacite, resistance et self.
|
||||||
|
*
|
||||||
|
* Modification du parser et du driver al.
|
||||||
|
*
|
||||||
|
* Syntaxe:
|
||||||
|
* P type capa name tcon bcon node_tcon node_bcon ---capacite
|
||||||
|
* R type resi name rcon1 rcon2 node_rcon1 node_rcon2 ---resistance
|
||||||
|
* L type self name scon1 scon2 node_scon1 node_scon2 ---inductance
|
||||||
|
*
|
||||||
|
* Note:
|
||||||
|
* Q existe deja pour les capacites de type RC (rcn). On utilise P a la place.
|
||||||
|
*
|
||||||
|
* Revision 1.1.1.1 2002/03/13 10:19:11 fred
|
||||||
|
* Importing MBKAL sources into the new CVS tree
|
||||||
* *
|
* *
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
@ -79,6 +93,12 @@ char dir;
|
||||||
return "TRISTATE";
|
return "TRISTATE";
|
||||||
case TRANSCV :
|
case TRANSCV :
|
||||||
return "TRANSCV";
|
return "TRANSCV";
|
||||||
|
case TRANSCV2 :
|
||||||
|
return "TRANSCV2";
|
||||||
|
case TRANSCV3 :
|
||||||
|
return "TRANSCV3";
|
||||||
|
case TRANSCV4 :
|
||||||
|
return "TRANSCV4";
|
||||||
default :
|
default :
|
||||||
(void)fprintf(stderr,"\n*** mbk error *** savelofig (al) invalid connector direction : %c\n",dir);
|
(void)fprintf(stderr,"\n*** mbk error *** savelofig (al) invalid connector direction : %c\n",dir);
|
||||||
return "UNKNOWN";
|
return "UNKNOWN";
|
||||||
|
@ -149,6 +169,9 @@ lofig_list * pfig;
|
||||||
{
|
{
|
||||||
locon_list * pcon;
|
locon_list * pcon;
|
||||||
lotrs_list * ptrs;
|
lotrs_list * ptrs;
|
||||||
|
locap_list *pcap = NULL ;
|
||||||
|
lores_list *pres = NULL ;
|
||||||
|
loself_list *pself = NULL ;
|
||||||
loins_list * pins;
|
loins_list * pins;
|
||||||
losig_list * psig;
|
losig_list * psig;
|
||||||
lorcnet_list * ptrcnet;
|
lorcnet_list * ptrcnet;
|
||||||
|
@ -156,6 +179,14 @@ lofig_list * pfig;
|
||||||
chain_list * tmp;
|
chain_list * tmp;
|
||||||
num_list * num;
|
num_list * num;
|
||||||
long index, indexg ,indexd, indexs, indexb;
|
long index, indexg ,indexd, indexs, indexb;
|
||||||
|
|
||||||
|
long index_tcon = 0L ;
|
||||||
|
long index_bcon = 0L ;
|
||||||
|
long index_rcon1 = 0L ;
|
||||||
|
long index_rcon2 = 0L ;
|
||||||
|
long index_scon1 = 0L ;
|
||||||
|
long index_scon2 = 0L ;
|
||||||
|
|
||||||
FILE *in;
|
FILE *in;
|
||||||
char nomfic[TAILLE_CHAINE];
|
char nomfic[TAILLE_CHAINE];
|
||||||
char nomp[TAILLE_CHAINE];
|
char nomp[TAILLE_CHAINE];
|
||||||
|
@ -180,6 +211,11 @@ lofig_list * pfig;
|
||||||
pfig->LOCON = (locon_list *)reverse((chain_list *)pfig->LOCON);
|
pfig->LOCON = (locon_list *)reverse((chain_list *)pfig->LOCON);
|
||||||
pfig->LOINS = (loins_list *)reverse((chain_list *)pfig->LOINS);
|
pfig->LOINS = (loins_list *)reverse((chain_list *)pfig->LOINS);
|
||||||
pfig->LOTRS = (lotrs_list *)reverse((chain_list *)pfig->LOTRS);
|
pfig->LOTRS = (lotrs_list *)reverse((chain_list *)pfig->LOTRS);
|
||||||
|
|
||||||
|
pfig -> LOCAP = (locap_list *)reverse((chain_list *)pfig -> LOCAP) ;
|
||||||
|
pfig -> LORES = (lores_list *)reverse((chain_list *)pfig -> LORES) ;
|
||||||
|
pfig -> LOSELF = (loself_list *)reverse((chain_list *)pfig -> LOSELF) ;
|
||||||
|
|
||||||
for(pins = pfig->LOINS ; pins ; pins = pins->NEXT)
|
for(pins = pfig->LOINS ; pins ; pins = pins->NEXT)
|
||||||
{
|
{
|
||||||
pins->LOCON = (locon_list *)reverse((chain_list *)pins->LOCON);
|
pins->LOCON = (locon_list *)reverse((chain_list *)pins->LOCON);
|
||||||
|
@ -230,7 +266,130 @@ lofig_list * pfig;
|
||||||
(void)fprintf(in,",%s",ptrs->TRNAME?ptrs->TRNAME:"noname");
|
(void)fprintf(in,",%s",ptrs->TRNAME?ptrs->TRNAME:"noname");
|
||||||
(void)fprintf(in,"\n");
|
(void)fprintf(in,"\n");
|
||||||
}
|
}
|
||||||
/* write instances */
|
|
||||||
|
|
||||||
|
/* write capacitor */
|
||||||
|
|
||||||
|
tmpnum = NULL ;
|
||||||
|
|
||||||
|
for(pcap = pfig -> LOCAP ; pcap != NULL ; pcap = pcap -> NEXT)
|
||||||
|
{
|
||||||
|
/* Q est deja pris pour les capacites de rcn */
|
||||||
|
(void)fprintf(in,"P %s,%g,%s,%ld,%ld",
|
||||||
|
(pcap -> TYPE == CAPMIM)?"MIM":"POLY_NWELL",
|
||||||
|
pcap -> CAPA,
|
||||||
|
pcap -> NAME?pcap -> NAME:"noname",
|
||||||
|
pcap -> TCON -> SIG -> INDEX,
|
||||||
|
pcap -> BCON -> SIG -> INDEX) ;
|
||||||
|
|
||||||
|
if (!(tmpnum = pcap -> TCON -> PNODE))
|
||||||
|
{
|
||||||
|
index_tcon = 0L ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index_tcon = tmpnum -> DATA ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(tmpnum = pcap -> BCON -> PNODE))
|
||||||
|
{
|
||||||
|
index_bcon = 0L ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index_bcon = tmpnum -> DATA ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(index_tcon !=0L || index_bcon !=0L)
|
||||||
|
{
|
||||||
|
(void)fprintf(in,",%ld,%ld",index_tcon,index_bcon) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)fprintf(in,"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write resistor */
|
||||||
|
|
||||||
|
tmpnum = NULL ;
|
||||||
|
|
||||||
|
for(pres = pfig -> LORES ; pres != NULL ; pres = pres -> NEXT)
|
||||||
|
{
|
||||||
|
(void)fprintf(in,"R %s,%g,%s,%ld,%ld",
|
||||||
|
(pres -> TYPE == RESMIM)?"MIM":"MIM",
|
||||||
|
pres -> RESI,
|
||||||
|
pres -> NAME?pres -> NAME:"noname",
|
||||||
|
pres -> RCON1 -> SIG -> INDEX,
|
||||||
|
pres -> RCON2 -> SIG -> INDEX) ;
|
||||||
|
|
||||||
|
if (!(tmpnum = pres -> RCON1 -> PNODE))
|
||||||
|
{
|
||||||
|
index_rcon1 = 0L ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index_rcon1 = tmpnum -> DATA ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(tmpnum = pres -> RCON2 -> PNODE))
|
||||||
|
{
|
||||||
|
index_rcon2 = 0L ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index_rcon2 = tmpnum -> DATA ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(index_rcon1 !=0L || index_rcon2 !=0L)
|
||||||
|
{
|
||||||
|
(void)fprintf(in,",%ld,%ld",index_rcon1,index_rcon2) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)fprintf(in,"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write inductor */
|
||||||
|
|
||||||
|
tmpnum = NULL ;
|
||||||
|
|
||||||
|
for(pself = pfig -> LOSELF ; pself != NULL ; pself = pself -> NEXT)
|
||||||
|
{
|
||||||
|
(void)fprintf(in,"L %s,%g,%s,%ld,%ld",
|
||||||
|
(pself -> TYPE == SELFMIM)?"MIM":"MIM",
|
||||||
|
pself -> SELF,
|
||||||
|
pself -> NAME?pself -> NAME:"noname",
|
||||||
|
pself -> SCON1 -> SIG -> INDEX,
|
||||||
|
pself -> SCON2 -> SIG -> INDEX) ;
|
||||||
|
|
||||||
|
if (!(tmpnum = pself -> SCON1 -> PNODE))
|
||||||
|
{
|
||||||
|
index_scon1 = 0L ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index_scon1 = tmpnum -> DATA ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(tmpnum = pself -> SCON2 -> PNODE))
|
||||||
|
{
|
||||||
|
index_scon2 = 0L ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index_scon2 = tmpnum -> DATA ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(index_scon1 !=0L || index_scon2 !=0L)
|
||||||
|
{
|
||||||
|
(void)fprintf(in,",%ld,%ld",index_scon1,index_scon2) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)fprintf(in,"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* write instances */
|
||||||
for (pins = pfig->LOINS; pins != NULL; pins = pins->NEXT)
|
for (pins = pfig->LOINS; pins != NULL; pins = pins->NEXT)
|
||||||
{
|
{
|
||||||
(void)fprintf(in,"I %s,%s\n",pins->FIGNAME,pins->INSNAME);
|
(void)fprintf(in,"I %s,%s\n",pins->FIGNAME,pins->INSNAME);
|
||||||
|
@ -288,6 +447,9 @@ lofig_list * pfig;
|
||||||
pfig->LOCON = (locon_list *)reverse((chain_list *)pfig->LOCON);
|
pfig->LOCON = (locon_list *)reverse((chain_list *)pfig->LOCON);
|
||||||
pfig->LOINS = (loins_list *)reverse((chain_list *)pfig->LOINS);
|
pfig->LOINS = (loins_list *)reverse((chain_list *)pfig->LOINS);
|
||||||
pfig->LOTRS = (lotrs_list *)reverse((chain_list *)pfig->LOTRS);
|
pfig->LOTRS = (lotrs_list *)reverse((chain_list *)pfig->LOTRS);
|
||||||
|
pfig->LOCAP = (locap_list *)reverse((chain_list *)pfig->LOCAP);
|
||||||
|
pfig->LORES = (lores_list *)reverse((chain_list *)pfig->LORES);
|
||||||
|
pfig->LOSELF = (loself_list *)reverse((chain_list *)pfig->LOSELF);
|
||||||
for(pins = pfig->LOINS ; pins ; pins = pins->NEXT)
|
for(pins = pfig->LOINS ; pins ; pins = pins->NEXT)
|
||||||
{
|
{
|
||||||
pins->LOCON = (locon_list *)reverse((chain_list *)pins->LOCON);
|
pins->LOCON = (locon_list *)reverse((chain_list *)pins->LOCON);
|
||||||
|
@ -295,3 +457,10 @@ lofig_list * pfig;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,23 @@
|
||||||
* Updates : June, 12th 1998 *
|
* Updates : June, 12th 1998 *
|
||||||
* Updates : June, 30th 1998 Create unique name on losig where no one *
|
* Updates : June, 30th 1998 Create unique name on losig where no one *
|
||||||
* is provided. *
|
* is provided. *
|
||||||
|
* Updates : AUGUST, 12th 2002, Pierre Nguyen Tuong *
|
||||||
* $Log: alc_pars_l6.c,v $
|
* $Log: alc_pars_l6.c,v $
|
||||||
* Revision 1.1 2002/03/13 10:19:11 fred
|
* Revision 1.2 2002/08/13 16:40:14 pnt
|
||||||
* Initial revision
|
* Suite de l'introduction des objets analogiques capacite, resistance et self.
|
||||||
|
*
|
||||||
|
* Modification du parser et du driver al.
|
||||||
|
*
|
||||||
|
* Syntaxe:
|
||||||
|
* P type capa name tcon bcon node_tcon node_bcon ---capacite
|
||||||
|
* R type resi name rcon1 rcon2 node_rcon1 node_rcon2 ---resistance
|
||||||
|
* L type self name scon1 scon2 node_scon1 node_scon2 ---inductance
|
||||||
|
*
|
||||||
|
* Note:
|
||||||
|
* Q existe deja pour les capacites de type RC (rcn). On utilise P a la place.
|
||||||
|
*
|
||||||
|
* Revision 1.1.1.1 2002/03/13 10:19:11 fred
|
||||||
|
* Importing MBKAL sources into the new CVS tree
|
||||||
*
|
*
|
||||||
* *
|
* *
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
@ -59,6 +73,10 @@
|
||||||
#define MAL_EOF 0x00000080
|
#define MAL_EOF 0x00000080
|
||||||
#define MAL_HEA 0x00000100
|
#define MAL_HEA 0x00000100
|
||||||
|
|
||||||
|
#define MAL_LOCAP 0x00000200
|
||||||
|
#define MAL_LORES 0x00000400
|
||||||
|
#define MAL_LOSELF 0x00000800
|
||||||
|
|
||||||
/* Tampon de lecture */
|
/* Tampon de lecture */
|
||||||
#define MALBUFMAX 524288
|
#define MALBUFMAX 524288
|
||||||
|
|
||||||
|
@ -95,6 +113,23 @@ losig_list* decode_sig __P(( lofig_list*, chain_list*, char*, int,
|
||||||
lotrs_list* decode_trs __P(( lofig_list*, chain_list*, char*, int,
|
lotrs_list* decode_trs __P(( lofig_list*, chain_list*, char*, int,
|
||||||
int
|
int
|
||||||
));
|
));
|
||||||
|
|
||||||
|
locap_list *decode_locap(lofig_list *ptfig,chain_list *line,char *fname,int mal_line,int version) ;
|
||||||
|
|
||||||
|
/*
|
||||||
|
locap_list* decode_locap __P(( lofig_list*, chain_list*, char*, int,
|
||||||
|
int
|
||||||
|
));
|
||||||
|
*/
|
||||||
|
|
||||||
|
lores_list* decode_lores __P(( lofig_list*, chain_list*, char*, int,
|
||||||
|
int
|
||||||
|
));
|
||||||
|
|
||||||
|
loself_list* decode_loself __P(( lofig_list*, chain_list*, char*, int,
|
||||||
|
int
|
||||||
|
));
|
||||||
|
|
||||||
int decode_int __P(( char*, char*, int ));
|
int decode_int __P(( char*, char*, int ));
|
||||||
double decode_float __P(( char*, char*, int ));
|
double decode_float __P(( char*, char*, int ));
|
||||||
data_locon* decode_locon __P(( lofig_list*, chain_list*, char*, int ));
|
data_locon* decode_locon __P(( lofig_list*, chain_list*, char*, int ));
|
||||||
|
@ -457,6 +492,288 @@ int version;
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
locap_list *decode_locap(lofig_list *ptfig,chain_list *line,char *fname,int mal_line,int version)
|
||||||
|
{
|
||||||
|
char type = -1 ;
|
||||||
|
losig_list *tcon = NULL ;
|
||||||
|
losig_list *bcon = NULL ;
|
||||||
|
int phtcon = 0 ;
|
||||||
|
int phbcon = 0 ;
|
||||||
|
locap_list *ptcap = NULL ;
|
||||||
|
int n = 0 ;
|
||||||
|
char *name = NULL ;
|
||||||
|
float capa = 0.0 ;
|
||||||
|
|
||||||
|
n = nbitem(line) ;
|
||||||
|
|
||||||
|
/* Version 6 : P type capa name tcon bcon node_tcon node_bcon */
|
||||||
|
|
||||||
|
/***** type *****/
|
||||||
|
|
||||||
|
type = -1 ;
|
||||||
|
|
||||||
|
if(strcasecmp((char *)line -> DATA, "MIM") == 0)
|
||||||
|
{
|
||||||
|
type = CAPMIM ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp((char *)line -> DATA, "POLY_NWELL") == 0)
|
||||||
|
{
|
||||||
|
type = CAPPNWELL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == -1)
|
||||||
|
{
|
||||||
|
mal_error(fname,
|
||||||
|
mal_line,
|
||||||
|
"decode_locap()",
|
||||||
|
"Unknown capacitor type [%s].\n",
|
||||||
|
(char *)line -> DATA) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** capa *****/
|
||||||
|
|
||||||
|
capa = decode_float((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** name *****/
|
||||||
|
|
||||||
|
name = namealloc((char *)line -> DATA) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** tcon bcon *****/
|
||||||
|
|
||||||
|
tcon = givelosig(ptfig,decode_int((char *)line -> DATA,fname,mal_line)) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
bcon = givelosig(ptfig,decode_int((char *)line -> DATA,fname,mal_line)) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** node_tcon node_bcon *****/
|
||||||
|
|
||||||
|
phtcon = decode_int((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
phbcon = decode_int((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
ptcap = addlocap(ptfig,type,capa,tcon,bcon,name) ;
|
||||||
|
|
||||||
|
if(phtcon)
|
||||||
|
{
|
||||||
|
if(!ptcap -> TCON -> SIG -> PRCN)
|
||||||
|
{
|
||||||
|
addlorcnet(ptcap -> TCON -> SIG) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
setloconnode(ptcap -> TCON,phtcon) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(phbcon)
|
||||||
|
{
|
||||||
|
if(!ptcap -> BCON -> SIG -> PRCN)
|
||||||
|
{
|
||||||
|
addlorcnet(ptcap -> BCON -> SIG) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
setloconnode(ptcap -> BCON,phbcon) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ptcap) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
lores_list *decode_lores(lofig_list *ptfig,chain_list *line,char *fname,int mal_line,int version)
|
||||||
|
{
|
||||||
|
char type = -1 ;
|
||||||
|
losig_list *rcon1 = NULL ;
|
||||||
|
losig_list *rcon2 = NULL ;
|
||||||
|
int phrcon1 = 0 ;
|
||||||
|
int phrcon2 = 0 ;
|
||||||
|
lores_list *ptres = NULL ;
|
||||||
|
int n = 0 ;
|
||||||
|
char *name = NULL ;
|
||||||
|
float resi = 0.0 ;
|
||||||
|
|
||||||
|
n = nbitem(line) ;
|
||||||
|
|
||||||
|
/* Version 6 : R type resi name rcon1 rcon2 node_rcon1 node_rcon2 */
|
||||||
|
|
||||||
|
/***** type *****/
|
||||||
|
|
||||||
|
type = -1 ;
|
||||||
|
|
||||||
|
if(strcasecmp((char *)line -> DATA, "MIM") == 0)
|
||||||
|
{
|
||||||
|
type = RESMIM ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp((char *)line -> DATA, "MIM") == 0)
|
||||||
|
{
|
||||||
|
type = RESMIM ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == -1)
|
||||||
|
{
|
||||||
|
mal_error(fname,
|
||||||
|
mal_line,
|
||||||
|
"decode_lores()",
|
||||||
|
"Unknown resistor type [%s].\n",
|
||||||
|
(char *)line -> DATA) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** resi *****/
|
||||||
|
|
||||||
|
resi = decode_float((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** name *****/
|
||||||
|
|
||||||
|
name = namealloc((char *)line -> DATA) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** rcon1 rcon2 *****/
|
||||||
|
|
||||||
|
rcon1 = givelosig(ptfig,decode_int((char *)line -> DATA,fname,mal_line)) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
rcon2 = givelosig(ptfig,decode_int((char *)line -> DATA,fname,mal_line)) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** node_rcon1 node_rcon2 *****/
|
||||||
|
|
||||||
|
phrcon1 = decode_int((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
phrcon2 = decode_int((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
ptres = addlores(ptfig,type,resi,rcon1,rcon2,name) ;
|
||||||
|
|
||||||
|
if(phrcon1)
|
||||||
|
{
|
||||||
|
if(!ptres -> RCON1 -> SIG -> PRCN)
|
||||||
|
{
|
||||||
|
addlorcnet(ptres -> RCON1 -> SIG) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
setloconnode(ptres -> RCON1,phrcon1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(phrcon2)
|
||||||
|
{
|
||||||
|
if(!ptres -> RCON2 -> SIG -> PRCN)
|
||||||
|
{
|
||||||
|
addlorcnet(ptres -> RCON2 -> SIG) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
setloconnode(ptres -> RCON2,phrcon2) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ptres) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
loself_list *decode_loself(lofig_list *ptfig,chain_list *line,char *fname,int mal_line,int version)
|
||||||
|
{
|
||||||
|
char type = -1 ;
|
||||||
|
losig_list *scon1 = NULL ;
|
||||||
|
losig_list *scon2 = NULL ;
|
||||||
|
int phscon1 = 0 ;
|
||||||
|
int phscon2 = 0 ;
|
||||||
|
loself_list *ptself = NULL ;
|
||||||
|
int n = 0 ;
|
||||||
|
char *name = NULL ;
|
||||||
|
float self = 0.0 ;
|
||||||
|
|
||||||
|
n = nbitem(line) ;
|
||||||
|
|
||||||
|
/* Version 6 : L type self name scon1 scon2 node_scon1 node_scon2 */
|
||||||
|
|
||||||
|
/***** type *****/
|
||||||
|
|
||||||
|
type = -1 ;
|
||||||
|
|
||||||
|
if(strcasecmp((char *)line -> DATA, "MIM") == 0)
|
||||||
|
{
|
||||||
|
type = SELFMIM ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp((char *)line -> DATA, "MIM") == 0)
|
||||||
|
{
|
||||||
|
type = SELFMIM ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == -1)
|
||||||
|
{
|
||||||
|
mal_error(fname,
|
||||||
|
mal_line,
|
||||||
|
"decode_loself()",
|
||||||
|
"Unknown inductor type [%s].\n",
|
||||||
|
(char *)line -> DATA) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** self *****/
|
||||||
|
|
||||||
|
self = decode_float((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** name *****/
|
||||||
|
|
||||||
|
name = namealloc((char *)line -> DATA) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** scon1 scon2 *****/
|
||||||
|
|
||||||
|
scon1 = givelosig(ptfig,decode_int((char *)line -> DATA,fname,mal_line)) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
scon2 = givelosig(ptfig,decode_int((char *)line -> DATA,fname,mal_line)) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
/***** node_scon1 node_scon2 *****/
|
||||||
|
|
||||||
|
phscon1 = decode_int((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
phscon2 = decode_int((char *)line -> DATA,fname,mal_line) ;
|
||||||
|
line = line -> NEXT ;
|
||||||
|
|
||||||
|
ptself = addloself(ptfig,type,self,scon1,scon2,name) ;
|
||||||
|
|
||||||
|
if(phscon1)
|
||||||
|
{
|
||||||
|
if(!ptself -> SCON1 -> SIG -> PRCN)
|
||||||
|
{
|
||||||
|
addlorcnet(ptself -> SCON1 -> SIG) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
setloconnode(ptself -> SCON1,phscon1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(phscon2)
|
||||||
|
{
|
||||||
|
if(!ptself -> SCON2 -> SIG -> PRCN)
|
||||||
|
{
|
||||||
|
addlorcnet(ptself -> SCON2 -> SIG) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
setloconnode(ptself -> SCON2,phscon2) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ptself) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
void complete_ins( ptfig, ins, line, fname, mal_line )
|
void complete_ins( ptfig, ins, line, fname, mal_line )
|
||||||
lofig_list *ptfig;
|
lofig_list *ptfig;
|
||||||
data_loins *ins;
|
data_loins *ins;
|
||||||
|
@ -794,6 +1111,12 @@ int mal_line;
|
||||||
if( strcasecmp( type, "Q" ) == 0 ) return ( MAL_CAP );
|
if( strcasecmp( type, "Q" ) == 0 ) return ( MAL_CAP );
|
||||||
if( strcasecmp( type, "K" ) == 0 ) return ( MAL_CTC );
|
if( strcasecmp( type, "K" ) == 0 ) return ( MAL_CTC );
|
||||||
if( strcasecmp( type, "T" ) == 0 ) return ( MAL_TRS );
|
if( strcasecmp( type, "T" ) == 0 ) return ( MAL_TRS );
|
||||||
|
|
||||||
|
/* Trucs analogiques. Q et K sont deja pris */
|
||||||
|
if( strcasecmp( type, "P" ) == 0 ) return ( MAL_LOCAP );
|
||||||
|
if( strcasecmp( type, "R" ) == 0 ) return ( MAL_LORES );
|
||||||
|
if( strcasecmp( type, "L" ) == 0 ) return ( MAL_LOSELF);
|
||||||
|
|
||||||
if( strcasecmp( type, "EOF" ) == 0 ) return ( MAL_EOF );
|
if( strcasecmp( type, "EOF" ) == 0 ) return ( MAL_EOF );
|
||||||
|
|
||||||
mal_error( fname, mal_line, "type_line()", "Unknown element [%s].\n", type );
|
mal_error( fname, mal_line, "type_line()", "Unknown element [%s].\n", type );
|
||||||
|
@ -1200,6 +1523,21 @@ int version;
|
||||||
decode_trs( ptfig, line->NEXT, fname, mal_line, version );
|
decode_trs( ptfig, line->NEXT, fname, mal_line, version );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MAL_LOCAP :
|
||||||
|
compose = 0;
|
||||||
|
decode_locap( ptfig, line->NEXT, fname, mal_line, version );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAL_LORES :
|
||||||
|
compose = 0;
|
||||||
|
decode_lores( ptfig, line->NEXT, fname, mal_line, version );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAL_LOSELF :
|
||||||
|
compose = 0;
|
||||||
|
decode_loself( ptfig, line->NEXT, fname, mal_line, version );
|
||||||
|
break;
|
||||||
|
|
||||||
case MAL_SIG:
|
case MAL_SIG:
|
||||||
if( version == 6 )
|
if( version == 6 )
|
||||||
compose = MAL_WIR | MAL_CAP ;
|
compose = MAL_WIR | MAL_CAP ;
|
||||||
|
@ -1365,3 +1703,6 @@ void al_dbg_init( void )
|
||||||
al_chain_lg[i]=0;
|
al_chain_lg[i]=0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue