diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 99722e7df..f90db8147 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -7830,7 +7830,8 @@ static bool del_models(struct vsmodels *vsmodel) * replace T_ABS by temp and T_REL_GLOBAL by dtemp in .model cards * get the area factor for diodes and bipolar devices * in subcircuit .subckt and X lines with 'params:' statement - replace comma separator by space. Do nothing if comma is inside of {}. */ + replace comma separator by space. Do nothing if comma is inside of {}. +* in .model, if double curly braces {{}}, replace the inner by {()} */ static struct card *pspice_compat(struct card *oldcard) { struct card *card, *newcard, *nextcard; @@ -7907,6 +7908,8 @@ static struct card *pspice_compat(struct card *oldcard) .model xxx NMOS/PMOS level=8 --> level = 14, version=4.5.0 .model xxx NPN/PNP level=2 --> level = 6 .model xxx LPNP level=n --> level = 1 subs=-1 */ + + /* check for double '{', replace the inner '{', '}' by '(', ')'*/ for (card = newcard; card; card = card->nextcard) { char* cut_line = card->line; if (ciprefix(".model", cut_line)) { @@ -7985,6 +7988,27 @@ static struct card *pspice_compat(struct card *oldcard) tfree(modname); tfree(modtype); tfree(cut_del); + + /* check for double '{', replace the inner '{', '}' by '(', ')'*/ + cut_line = strchr(card->line, '{'); + if (cut_line) + { + int level = 1; + cut_line++; + while (*cut_line != '\0') { + if (*cut_line == '{') { + level++; + if (level > 1) + *cut_line = '('; + } + if (*cut_line == '}') { + if (level > 1) + *cut_line = ')'; + level--; + } + cut_line++; + } + } } }