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) {
98 else if (value->
ident)
100 else if (value->
next) {
102 for (; value != NULL; value = value->
next)
117 static char ret[256];
118 sprintf (ret,
"%s%s", isdigit (instance[0]) ?
"X" :
"", instance);
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) {
151 for (def = root; def != NULL; def = def->
next) {
152 if (def->
sub != NULL) {
170 for (def = root; def != NULL; def = def->
next) {
171 if (!strcmp (def->
type,
"Sub")) {
177 else if (def->
sub != NULL) {
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));
235 fprintf (
qucs_out,
"\n# no instance of subcircuit \"%s\" found, "
243 fprintf (
qucs_out,
"\n### TOPLEVEL NODELIST BEGIN\n");
245 n = it.currentVal ();
249 fprintf (
qucs_out,
"### TOPLEVEL NODELIST END\n");
251 fprintf (
qucs_out,
"\n### SPICE OUTPUT NODELIST BEGIN\n");
255 fprintf (
qucs_out,
"### SPICE OUTPUT NODELIST END\n");
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 }
473 if (!strcmp (dev->
ntype, type))
485 for (pair = def->
pairs; pair; pair = pair->
next) {
486 if (!strcmp (pair->
key, key))
500 sprintf (txt,
"\n<Component %s>\n", def->
instance[0] == dev->
stype[0] ?
503 fprintf (
qucs_out,
" <Description>\n");
504 fprintf (
qucs_out,
" </Description>\n");
508 for (
int i = 0; dev->
props[
i];
i++) {
517 fprintf (
qucs_out,
"</Component>\n");
523 fprintf (
qucs_out,
"<Qucs Library " PACKAGE_VERSION
" \"Generic\">\n");
533 fprintf (
qucs_out,
"<Qucs Dataset " PACKAGE_VERSION
">\n");
static void netlist_list_def(struct definition_t *def, const char *prefix)
static void netlist_list(void)
type_t * put(char *, type_t *)
struct device_t qucs_devices[]
void qucsdata_producer(dataset *data)
static void qucs_delete_nodes(void)
void qucsdata_producer_vcd(void)
struct definition_t * device_root
struct node_t * spice_nodes
struct definition_t * sub
int qucs_find_node(struct node_t *root, char *node)
enum dataset_vartypes type
struct definition_t * subcircuit_root
struct dataset_value * next
static struct pair_t * qucslib_find_prop(struct definition_t *def, const char *key)
static struct device_t * qucslib_find_device(char *type)
struct dataset_value * values
static void qucs_collect_nodes(struct definition_t *root)
static struct definition_t * netlist_get_single_subcircuit(struct definition_t *root)
struct dataset_variable * next
qucs::hash< struct node_t > qucs_nodes
struct dataset_variable * dataset_root
struct definition_t * definition_root
void qucs_free_nodes(struct node_t *node)
static void qucslib_list_device(struct definition_t *def)
static void netlist_reference_ground(void)
void qucslib_producer(void)
static void netlist_fix_reference(struct definition_t *root)
void qucs_add_nodes(struct node_t *node)
static void netlist_lister(struct definition_t *root, const char *prefix)
static char * netlist_instance(const char *instance)
struct definition_t * next
static void netlist_list_value(struct value_t *value)