55 for (
struct node_t *
n = root;
n;
n =
n->next) {
56 if (!strcmp (node,
n->node))
return 1;
65 if (!qucs_nodes.
get (node->
node))
66 qucs_nodes.
put (node->
node, node);
74 for ( ;
node; node =
n) {
82 static void qucs_delete_nodes (
void) {
87 static void qucs_collect_nodes (
struct definition_t * root) {
95 static void netlist_list_value (
struct value_t * value) {
98 else if (value->
ident)
100 else if (value->
next) {
102 for (; value != NULL; value = value->
next)
116 static char * netlist_instance (
const char * instance) {
117 static char ret[256];
118 sprintf (ret,
"%s%s", isdigit (instance[0]) ?
"X" :
"", instance);
123 static void netlist_list_def (
struct definition_t * def,
const char * prefix) {
126 if (def->
define == NULL) {
127 if (def->
text != NULL)
133 if (def->
action && strcmp (def->
type,
"Def"))
return;
137 for (node = def->
nodes; node != NULL; node = node->
next)
139 for (pair = def->
pairs; pair != NULL; pair = pair->
next) {
141 netlist_list_value (pair->
value);
149 static void netlist_lister (
struct definition_t * root,
const char * prefix) {
151 for (def = root; def != NULL; def = def->
next) {
152 if (def->
sub != NULL) {
153 netlist_list_def (def, prefix);
154 netlist_lister (def->
sub,
" ");
158 netlist_list_def (def, prefix);
165 static void netlist_fix_reference (
struct definition_t * root) {
170 for (def = root; def != NULL; def = def->
next) {
171 if (!strcmp (def->
type,
"Sub")) {
177 else if (def->
sub != NULL) {
182 netlist_fix_reference (def->
sub);
188 static void netlist_reference_ground (
void) {
197 netlist_fix_reference (def->
sub);
203 netlist_get_single_subcircuit (
struct definition_t * root) {
209 }
else if (def->
sub) {
214 return (count == 1) ? ret : NULL;
221 time_t
t = time (NULL);
222 fprintf (
qucs_out,
"# converted Qucs netlist processed at %s\n", ctime (&t));
229 netlist_lister (def->
sub,
" ");
236 "creating it\n", netlist_instance (def->
instance));
245 n = it.currentVal ();
248 qucs_delete_nodes ();
261 netlist_reference_ground ();
279 {
"Diode",
"Diode",
"D", 2,
280 {
"Is",
"N",
"Cj0",
"M",
"Vj",
"Fc",
"Cp",
"Isr",
"Nr",
"Rs",
"Tt",
"Ikf",
281 "Kf",
"Af",
"Ffe",
"Bv",
"Ibv",
"Temp",
"Xti",
"Eg",
"Tbv",
"Trs",
282 "Ttt1",
"Ttt2",
"Tm1",
"Tm2",
"Tnom",
"Area", NULL },
288 {
"BJT",
"_BJT",
"Q", 4,
289 {
"Type",
"Is",
"Nf",
"Nr",
"Ikf",
"Ikr",
"Vaf",
"Var",
"Ise",
"Ne",
"Isc",
290 "Nc",
"Bf",
"Br",
"Rbm",
"Irb",
"Rc",
"Re",
"Rb",
"Cje",
"Vje",
"Mje",
291 "Cjc",
"Vjc",
"Mjc",
"Xcjc",
"Cjs",
"Vjs",
"Mjs",
"Fc",
"Tf",
"Xtf",
292 "Vtf",
"Itf",
"Tr",
"Temp",
"Kf",
"Af",
"Ffe",
"Kb",
"Ab",
"Fb",
"Ptf",
293 "Xtb",
"Xti",
"Eg",
"Tnom",
"Area", NULL },
299 {
"hic0_full",
"hic0_full",
"Q", 5,
300 {
"Type",
"is",
"mcf",
"mcr",
"vef",
"iqf",
"iqr",
"iqfh",
"tfh",
"ibes",
301 "mbe",
"ires",
"mre",
"ibcs",
"mbc",
"cje0",
"vde",
"ze",
"aje",
"t0",
302 "dt0h",
"tbvl",
"tef0",
"gte",
"thcs",
"ahc",
"tr",
"rci0",
"vlim",
303 "vpt",
"vces",
"cjci0",
"vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
"zcx",
304 "vptcx",
"fbc",
"rbi0",
"vr0e",
"vr0c",
"fgeo",
"rbx",
"rcx",
"re",
305 "itss",
"msf",
"iscs",
"msc",
"cjs0",
"vds",
"zs",
"vpts",
"cbcpar",
306 "cbepar",
"eavl",
"kavl",
"kf",
"af",
"vgb",
"vge",
"vgc",
"vgs",
307 "f1vg",
"f2vg",
"alt0",
"kt0",
"zetact",
"zetabet",
"zetaci",
"alvs",
308 "alces",
"zetarbi",
"zetarbx",
"zetarcx",
"zetare",
"alkav",
"aleav",
309 "flsh",
"rth",
"cth",
"tnom",
"dt",
"Temp", NULL },
315 {
"hicumL0V1p2",
"hicumL0V1p2",
"Q", 5,
316 {
"Type",
"is",
"mcf",
"mcr",
"vef",
"ver",
"iqf",
"fiqf",
"iqr",
"iqfh",
317 "tfh",
"ahq",
"ibes",
"mbe",
"ires",
"mre",
"ibcs",
"mbc",
"cje0",
"vde",
318 "ze",
"aje",
"vdedc",
"zedc",
"ajedc",
"t0",
"dt0h",
"tbvl",
"tef0",
319 "gte",
"thcs",
"ahc",
"tr",
"rci0",
"vlim",
"vpt",
"vces",
"cjci0",
320 "vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
"zcx",
"vptcx",
"fbc",
"rbi0",
321 "vr0e",
"vr0c",
"fgeo",
"rbx",
"rcx",
"re",
"itss",
"msf",
"iscs",
"msc",
322 "cjs0",
"vds",
"zs",
"vpts",
"cbcpar",
"cbepar",
"eavl",
"kavl",
"kf",
323 "af",
"vgb",
"vge",
"vgc",
"vgs",
"f1vg",
"f2vg",
"alt0",
"kt0",
324 "zetact",
"zetabet",
"zetaci",
"alvs",
"alces",
"zetarbi",
"zetarbx",
325 "zetarcx",
"zetare",
"zetaiqf",
"alkav",
"aleav",
"zetarth",
"flsh",
326 "rth",
"cth",
"tnom",
"dt",
"Temp", NULL },
332 {
"hicumL0V1p2g",
"hicumL0V1p2g",
"Q", 5,
333 {
"Type",
"is",
"mcf",
"mcr",
"vef",
"ver",
"iqf",
"fiqf",
"iqr",
"iqfh",
334 "iqfe",
"ahq",
"ibes",
"mbe",
"ires",
"mre",
"ibcs",
"mbc",
"cje0",
335 "vde",
"ze",
"aje",
"vdedc",
"zedc",
"ajedc",
"t0",
"dt0h",
"tbvl",
336 "tef0",
"gte",
"thcs",
"ahc",
"tr",
"rci0",
"vlim",
"vpt",
"vces",
337 "cjci0",
"vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
"zcx",
"vptcx",
"fbc",
338 "rbi0",
"vr0e",
"vr0c",
"fgeo",
"rbx",
"rcx",
"re",
"itss",
"msf",
339 "iscs",
"msc",
"cjs0",
"vds",
"zs",
"vpts",
"cbcpar",
"cbepar",
"eavl",
340 "kavl",
"kf",
"af",
"vgb",
"vge",
"vgc",
"vgs",
"f1vg",
"f2vg",
"alt0",
341 "kt0",
"zetact",
"zetabet",
"zetaci",
"alvs",
"alces",
"zetarbi",
342 "zetarbx",
"zetarcx",
"zetare",
"zetaiqf",
"alkav",
"aleav",
"flsh",
343 "rth",
"zetarth",
"cth",
"tnom",
"dt",
"delte",
"deltc",
"zetaver",
344 "zetavef",
"ibhrec",
"Temp", NULL },
350 {
"hicumL0V1p3",
"hicumL0V1p3",
"Q", 5,
351 {
"Type",
"is",
"it_mod",
"mcf",
"mcr",
"vef",
"ver",
"aver",
"iqf",
352 "fiqf",
"iqr",
"iqfh",
"tfh",
"ahq",
"ibes",
"mbe",
"ires",
"mre",
353 "ibcs",
"mbc",
"cje0",
"vde",
"ze",
"aje",
"vdedc",
"zedc",
"ajedc",
354 "t0",
"dt0h",
"tbvl",
"tef0",
"gte",
"thcs",
"ahc",
"tr",
"rci0",
355 "vlim",
"vpt",
"vces",
"cjci0",
"vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
356 "zcx",
"vptcx",
"fbc",
"rbi0",
"vr0e",
"vr0c",
"fgeo",
"rbx",
"rcx",
357 "re",
"itss",
"msf",
"iscs",
"msc",
"cjs0",
"vds",
"zs",
"vpts",
358 "cbcpar",
"cbepar",
"eavl",
"kavl",
"kf",
"af",
"vgb",
"vge",
"vgc",
359 "vgs",
"f1vg",
"f2vg",
"alt0",
"kt0",
"zetact",
"zetabet",
"zetaci",
360 "alvs",
"alces",
"zetarbi",
"zetarbx",
"zetarcx",
"zetare",
"zetaiqf",
361 "alkav",
"aleav",
"zetarth",
"tef_temp",
"zetaver",
"zetavgbe",
"dvgbe",
362 "aliqfh",
"kiqfh",
"flsh",
"rth",
"cth",
"tnom",
"dt",
"Temp", NULL },
368 {
"hic2_full",
"hic2_full",
"Q", 5,
369 {
"c10",
"qp0",
"ich",
"hfe",
"hfc",
"hjei",
"hjci",
"ibeis",
"mbei",
370 "ireis",
"mrei",
"ibeps",
"mbep",
"ireps",
"mrep",
"mcf",
"tbhrec",
371 "ibcis",
"mbci",
"ibcxs",
"mbcx",
"ibets",
"abet",
"tunode",
"favl",
372 "qavl",
"alfav",
"alqav",
"rbi0",
"rbx",
"fgeo",
"fdqr0",
"fcrbi",
373 "fqi",
"re",
"rcx",
"itss",
"msf",
"iscs",
"msc",
"tsf",
"rsu",
"csu",
374 "cjei0",
"vdei",
"zei",
"ajei",
"cjep0",
"vdep",
"zep",
"ajep",
375 "cjci0",
"vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
"zcx",
"vptcx",
376 "fbcpar",
"fbepar",
"cjs0",
"vds",
"zs",
"vpts",
"t0",
"dt0h",
"tbvl",
377 "tef0",
"gtfe",
"thcs",
"ahc",
"fthc",
"rci0",
"vlim",
"vces",
"vpt",
378 "tr",
"cbepar",
"cbcpar",
"alqf",
"alit",
"flnqs",
"kf",
"af",
"cfbe",
379 "latb",
"latl",
"vgb",
"alt0",
"kt0",
"zetaci",
"alvs",
"alces",
380 "zetarbi",
"zetarbx",
"zetarcx",
"zetare",
"zetacx",
"vge",
"vgc",
381 "vgs",
"f1vg",
"f2vg",
"zetact",
"zetabet",
"alb",
"flsh",
"rth",
"cth",
382 "flcomp",
"tnom",
"dt",
"Temp", NULL },
388 {
"hicumL2V2p1",
"hicumL2V2p1",
"Q", 5,
389 {
"c10",
"qp0",
"ich",
"hfe",
"hfc",
"hjei",
"hjci",
"ibeis",
390 "mbei",
"ireis",
"mrei",
"ibeps",
"mbep",
"ireps",
"mrep",
"mcf",
391 "ibcis",
"mbci",
"ibcxs",
"mbcx",
"ibets",
"abet",
"favl",
"qavl",
392 "alfav",
"alqav",
"rbi0",
"rbx",
"fgeo",
"fdqr0",
"fcrbi",
"fqi",
"re",
393 "rcx",
"itss",
"msf",
"iscs",
"msc",
"tsf",
"rsu",
"csu",
"cjei0",
394 "vdei",
"zei",
"aljei",
"cjep0",
"vdep",
"zep",
"aljep",
"cjci0",
395 "vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
"zcx",
"vptcx",
"fbc",
"cjs0",
396 "vds",
"zs",
"vpts",
"t0",
"dt0h",
"tbvl",
"tef0",
"gtfe",
"thcs",
397 "alhc",
"fthc",
"rci0",
"vlim",
"vces",
"vpt",
"tr",
"ceox",
"ccox",
398 "alqf",
"alit",
"kf",
"af",
"krbi",
"latb",
"latl",
"vgb",
"alt0",
399 "kt0",
"zetaci",
"zetacx",
"alvs",
"alces",
"zetarbi",
"zetarbx",
400 "zetarcx",
"zetare",
"alb",
"rth",
"cth",
"tnom",
"dt",
"Temp", NULL },
406 {
"hicumL2V2p23",
"hicumL2V2p23",
"Q", 5,
407 {
"c10",
"qp0",
"ich",
"hfe",
"hfc",
"hjei",
"hjci",
"ibeis",
"mbei",
408 "ireis",
"mrei",
"ibeps",
"mbep",
"ireps",
"mrep",
"mcf",
"tbhrec",
409 "ibcis",
"mbci",
"ibcxs",
"mbcx",
"ibets",
"abet",
"tunode",
"favl",
410 "qavl",
"alfav",
"alqav",
"rbi0",
"rbx",
"fgeo",
"fdqr0",
"fcrbi",
411 "fqi",
"re",
"rcx",
"itss",
"msf",
"iscs",
"msc",
"tsf",
"rsu",
"csu",
412 "cjei0",
"vdei",
"zei",
"ajei",
"cjep0",
"vdep",
"zep",
"ajep",
413 "cjci0",
"vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
"zcx",
"vptcx",
414 "fbcpar",
"fbepar",
"cjs0",
"vds",
"zs",
"vpts",
"t0",
"dt0h",
"tbvl",
415 "tef0",
"gtfe",
"thcs",
"ahc",
"fthc",
"rci0",
"vlim",
"vces",
"vpt",
416 "tr",
"cbepar",
"cbcpar",
"alqf",
"alit",
"flnqs",
"kf",
"af",
"cfbe",
417 "latb",
"latl",
"vgb",
"alt0",
"kt0",
"zetaci",
"alvs",
"alces",
418 "zetarbi",
"zetarbx",
"zetarcx",
"zetare",
"zetacx",
"vge",
"vgc",
419 "vgs",
"f1vg",
"f2vg",
"zetact",
"zetabet",
"alb",
"flsh",
"rth",
"cth",
420 "flcomp",
"tnom",
"dt",
"Temp", NULL },
426 {
"hicumL2V2p24",
"hicumL2V2p24",
"Q", 5,
427 {
"c10",
"qp0",
"ich",
"hfe",
"hfc",
"hjei",
"hjci",
"ibeis",
"mbei",
428 "ireis",
"mrei",
"ibeps",
"mbep",
"ireps",
"mrep",
"mcf",
"tbhrec",
429 "ibcis",
"mbci",
"ibcxs",
"mbcx",
"ibets",
"abet",
"tunode",
"favl",
430 "qavl",
"alfav",
"alqav",
"rbi0",
"rbx",
"fgeo",
"fdqr0",
"fcrbi",
431 "fqi",
"re",
"rcx",
"itss",
"msf",
"iscs",
"msc",
"tsf",
"rsu",
"csu",
432 "cjei0",
"vdei",
"zei",
"ajei",
"cjep0",
"vdep",
"zep",
"ajep",
433 "cjci0",
"vdci",
"zci",
"vptci",
"cjcx0",
"vdcx",
"zcx",
"vptcx",
434 "fbcpar",
"fbepar",
"cjs0",
"vds",
"zs",
"vpts",
"t0",
"dt0h",
"tbvl",
435 "tef0",
"gtfe",
"thcs",
"ahc",
"fthc",
"rci0",
"vlim",
"vces",
"vpt",
436 "tr",
"cbepar",
"cbcpar",
"alqf",
"alit",
"flnqs",
"kf",
"af",
"cfbe",
437 "latb",
"latl",
"vgb",
"alt0",
"kt0",
"zetaci",
"alvs",
"alces",
438 "zetarbi",
"zetarbx",
"zetarcx",
"zetare",
"zetacx",
"vge",
"vgc",
439 "vgs",
"f1vg",
"f2vg",
"zetact",
"zetabet",
"alb",
"flsh",
"rth",
"cth",
440 "flcomp",
"tnom",
"dt",
"Temp", NULL },
446 {
"JFET",
"JFET",
"J", 3,
447 {
"Type",
"Vt0",
"Beta",
"Lambda",
"Rd",
"Rs",
"Is",
"N",
"Isr",
"Nr",
448 "Cgs",
"Cgd",
"Pb",
"Fc",
"M",
"Kf",
"Af",
"Ffe",
"Temp",
"Xti",
449 "Vt0tc",
"Betatce",
"Tnom",
"Area", NULL },
451 "1 190 140 30 -49 0 0",
455 {
"MOSFET",
"_MOSFET",
"M", 4,
456 {
"Type",
"Vt0",
"Kp",
"Gamma",
"Phi",
"Lambda",
"Rd",
"Rs",
"Rg",
"Is",
457 "N",
"W",
"L",
"Ld",
"Tox",
"Cgso",
"Cgdo",
"Cgbo",
"Cbd",
"Cbs",
"Pb",
458 "Mj",
"Fc",
"Cjsw",
"Mjsw",
"Tt",
"Nsub",
"Nss",
"Tpg",
"Uo",
"Rsh",
459 "Nrd",
"Nrs",
"Cj",
"Js",
"Ad",
"As",
"Pd",
"Ps",
"Kf",
"Af",
"Ffe",
460 "Temp",
"Tnom", NULL },
465 { NULL, NULL, NULL, 0, { NULL }, NULL, NULL, NULL }
470 static struct device_t * qucslib_find_device (
char * type) {
473 if (!strcmp (dev->
ntype, type))
485 for (pair = def->
pairs; pair; pair = pair->
next) {
486 if (!strcmp (pair->
key, key))
494 static void qucslib_list_device (
struct definition_t * def) {
496 if (!(dev = qucslib_find_device (def->
type)))
return;
500 sprintf (txt,
"\n<Component %s>\n", def->
instance[0] == dev->
stype[0] ?
508 for (
int i = 0; dev->
props[
i];
i++) {
509 if ((pair = qucslib_find_prop (def, dev->
props[
i])) != NULL) {
511 netlist_list_value (pair->
value);
523 fprintf (
qucs_out,
"<Qucs Library " PACKAGE_VERSION
" \"Generic\">\n");
525 qucslib_list_device (def);