Added substitution for commas in SPICE output, because commas in
instance names and node names are basically fatal to running ngspice.
This commit is contained in:
parent
57a5ff6094
commit
e9f3dcadef
|
|
@ -140,9 +140,16 @@ esFormatSubs(outf, suf)
|
|||
if ((EFTrimFlags & EF_TRIMGLOB ) && suf[l] == '!' ||
|
||||
(EFTrimFlags & EF_TRIMLOCAL) && suf[l] == '#')
|
||||
suf[l] = '\0' ;
|
||||
if (EFTrimFlags & EF_CONVERTCOMMAS)
|
||||
if (EFTrimFlags & EF_CONVERTCOMMA)
|
||||
while ((specchar = strchr(suf, ',')) != NULL)
|
||||
*specchar = ';';
|
||||
*specchar = '|';
|
||||
if (EFTrimFlags & EF_CONVERTBRACKETS)
|
||||
{
|
||||
while ((specchar = strchr(suf, '[')) != NULL)
|
||||
*specchar = '_';
|
||||
while ((specchar = strchr(suf, ']')) != NULL)
|
||||
*specchar = '_';
|
||||
}
|
||||
if (EFTrimFlags & EF_CONVERTEQUAL)
|
||||
while ((specchar = strchr(suf, '=')) != NULL)
|
||||
*specchar = ':';
|
||||
|
|
@ -607,7 +614,7 @@ CmdExtToSpice(w, cmd)
|
|||
case EXTTOSPC_DEFAULT:
|
||||
LocCapThreshold = 2;
|
||||
LocResistThreshold = INFINITE_THRESHOLD;
|
||||
EFTrimFlags = EF_CONVERTCOMMAS | EF_CONVERTEQUAL;
|
||||
EFTrimFlags = EF_CONVERTCOMMA | EF_CONVERTEQUAL;
|
||||
EFScale = 0.0;
|
||||
if (EFArgTech)
|
||||
{
|
||||
|
|
@ -821,7 +828,7 @@ runexttospice:
|
|||
|
||||
// This forces options TRIMGLOB and CONVERTEQUAL, not sure that's such a
|
||||
// good idea. . .
|
||||
EFTrimFlags |= EF_TRIMGLOB | EF_CONVERTEQUAL;
|
||||
EFTrimFlags |= EF_TRIMGLOB | EF_CONVERTEQUAL | EF_CONVERTCOMMA;
|
||||
if (IS_FINITE_F(EFCapThreshold)) flatFlags |= EF_FLATCAPS;
|
||||
if (esFormat == HSPICE)
|
||||
EFTrimFlags |= EF_TRIMLOCAL;
|
||||
|
|
@ -1379,7 +1386,7 @@ subcktVisit(use, hierName, is_top)
|
|||
else
|
||||
{
|
||||
int savflags = EFTrimFlags;
|
||||
EFTrimFlags = 0; // Do no substitutions on subcircuit names
|
||||
EFTrimFlags = EF_CONVERTCOMMA; // Only substitute commas on subcircuit names
|
||||
|
||||
/* Use full hierarchical decomposition for name */
|
||||
/* (not just use->use_id. hierName already has use->use_id at end) */
|
||||
|
|
@ -3220,7 +3227,7 @@ EFHNSprintf(str, hierName)
|
|||
char *str;
|
||||
HierName *hierName;
|
||||
{
|
||||
bool trimGlob, trimLocal, convertComma, convertEqual;
|
||||
bool trimGlob, trimLocal, convertComma, convertEqual, convertBrackets;
|
||||
char *s, *cp, c;
|
||||
char *efHNSprintfPrefix(HierName *, char *);
|
||||
|
||||
|
|
@ -3231,8 +3238,9 @@ EFHNSprintf(str, hierName)
|
|||
cp = hierName->hn_name;
|
||||
trimGlob = (EFTrimFlags & EF_TRIMGLOB);
|
||||
trimLocal = (EFTrimFlags & EF_TRIMLOCAL);
|
||||
convertComma = (EFTrimFlags & EF_CONVERTCOMMAS);
|
||||
convertComma = (EFTrimFlags & EF_CONVERTCOMMA);
|
||||
convertEqual = (EFTrimFlags & EF_CONVERTEQUAL);
|
||||
convertBrackets = (EFTrimFlags & EF_CONVERTBRACKETS);
|
||||
while (c = *cp++)
|
||||
{
|
||||
switch (c)
|
||||
|
|
@ -3240,7 +3248,9 @@ EFHNSprintf(str, hierName)
|
|||
case '!': if (!trimGlob) *str++ = c; break;
|
||||
case '.': *str++ = (esFormat == HSPICE)?'@':'.'; break;
|
||||
case '=': if (convertEqual) *str++ = ':'; break;
|
||||
case ',': if (convertComma) *str++ = ';'; break;
|
||||
case ',': if (convertComma) *str++ = '|'; break;
|
||||
case '[': *str++ = (convertBrackets) ? '_' : '['; break;
|
||||
case ']': *str++ = (convertBrackets) ? '_' : ']'; break;
|
||||
case '#': if (trimLocal) break; // else fall through
|
||||
default: *str++ = c; break;
|
||||
}
|
||||
|
|
@ -3257,6 +3267,8 @@ char *efHNSprintfPrefix(hierName, str)
|
|||
{
|
||||
char *cp, c;
|
||||
bool convertEqual = (EFTrimFlags & EF_CONVERTEQUAL) ? TRUE : FALSE;
|
||||
bool convertComma = (EFTrimFlags & EF_CONVERTCOMMA) ? TRUE : FALSE;
|
||||
bool convertBrackets = (EFTrimFlags & EF_CONVERTBRACKETS) ? TRUE : FALSE;
|
||||
|
||||
if (hierName->hn_parent)
|
||||
str = efHNSprintfPrefix(hierName->hn_parent, str);
|
||||
|
|
@ -3265,6 +3277,13 @@ char *efHNSprintfPrefix(hierName, str)
|
|||
while (1) {
|
||||
if (convertEqual && (*cp == '='))
|
||||
*str = ':';
|
||||
else if (convertBrackets && ((*cp == '[') || (*cp == ']')))
|
||||
*str = '_';
|
||||
else if (*cp == ',')
|
||||
{
|
||||
if (convertComma) *str = '|';
|
||||
else str--;
|
||||
}
|
||||
else
|
||||
*str = *cp;
|
||||
if (!(*str)) break;
|
||||
|
|
|
|||
|
|
@ -209,8 +209,10 @@ EFArgs(argc, argv, err_result, argsProc, cdata)
|
|||
goto usage;
|
||||
if (strchr(cp, '!')) EFTrimFlags |= EF_TRIMGLOB;
|
||||
if (strchr(cp, '#')) EFTrimFlags |= EF_TRIMLOCAL;
|
||||
if (strchr(cp, ',')) EFTrimFlags |= EF_CONVERTCOMMAS;
|
||||
if (strchr(cp, ',')) EFTrimFlags |= EF_CONVERTCOMMA;
|
||||
if (strchr(cp, '=')) EFTrimFlags |= EF_CONVERTEQUAL;
|
||||
if (strchr(cp, '[')) EFTrimFlags |= EF_CONVERTBRACKETS;
|
||||
if (strchr(cp, ']')) EFTrimFlags |= EF_CONVERTBRACKETS;
|
||||
break;
|
||||
case 'C':
|
||||
EFCapThreshold = (EFCapValue)INFINITE_THRESHOLD_F;
|
||||
|
|
|
|||
|
|
@ -859,7 +859,7 @@ EFHNOut(hierName, outf)
|
|||
HierName *hierName;
|
||||
FILE *outf;
|
||||
{
|
||||
bool trimGlob, trimLocal, trimComma;
|
||||
bool trimGlob, trimLocal, convComma, convBrackets;
|
||||
char *cp, c;
|
||||
|
||||
if (hierName->hn_parent) efHNOutPrefix(hierName->hn_parent, outf);
|
||||
|
|
@ -868,13 +868,19 @@ EFHNOut(hierName, outf)
|
|||
cp = hierName->hn_name;
|
||||
trimGlob = (EFTrimFlags & EF_TRIMGLOB);
|
||||
trimLocal = (EFTrimFlags & EF_TRIMLOCAL);
|
||||
trimComma = (EFTrimFlags & EF_CONVERTCOMMAS);
|
||||
convComma = (EFTrimFlags & EF_CONVERTCOMMA);
|
||||
convBrackets = (EFTrimFlags & EF_CONVERTBRACKETS);
|
||||
while (c = *cp++)
|
||||
{
|
||||
if (*cp)
|
||||
{
|
||||
if (trimComma && (c == ','))
|
||||
putc(';', outf);
|
||||
if (c == ',')
|
||||
{
|
||||
if (convComma)
|
||||
putc('|', outf);
|
||||
}
|
||||
else if (convBrackets && ((c == '[') || (c == ']')))
|
||||
putc('_', outf);
|
||||
else
|
||||
putc(c, outf);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,8 +40,9 @@ typedef unsigned char U_char;
|
|||
/* Flags to control output of node names. Stored in EFTrimFlags */
|
||||
#define EF_TRIMGLOB 0x01 /* Delete trailing '!' from names */
|
||||
#define EF_TRIMLOCAL 0x02 /* Delete trailing '#' from names */
|
||||
#define EF_CONVERTCOMMAS 0x04 /* Change ',' to ';' in names */
|
||||
#define EF_CONVERTEQUAL 0x08 /* Change '=' to ':' in names */
|
||||
#define EF_CONVERTCOMMA 0x04 /* Change ',' to '|' in names, else remove */
|
||||
#define EF_CONVERTEQUAL 0x08 /* Change '=' to ':' in names, else remove */
|
||||
#define EF_CONVERTBRACKETS 0x10 /* Change '[' and ']' to '_' in names */
|
||||
|
||||
/*
|
||||
* capacitance type now set to float
|
||||
|
|
|
|||
Loading…
Reference in New Issue