Compare commits
No commits in common. "master" and "8.3.583" have entirely different histories.
|
|
@ -16,7 +16,6 @@ jobs:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Get Dependencies
|
- name: Get Dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y tcl-dev tk-dev libcairo-dev
|
sudo apt-get install -y tcl-dev tk-dev libcairo-dev
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ on:
|
||||||
|
|
||||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
jobs:
|
jobs:
|
||||||
simple_build_macos15:
|
simple_build_macos13:
|
||||||
runs-on: macos-15-intel # only and last supported intel MacOS
|
runs-on: macos-13
|
||||||
timeout-minutes: 45 # x86_64 seems non-SSD based (slower)
|
timeout-minutes: 45 # x86_64 seems non-SSD based (slower)
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
|
@ -235,10 +235,10 @@ jobs:
|
||||||
cp *.mak dist/BUILD-INFO/
|
cp *.mak dist/BUILD-INFO/
|
||||||
cp *.LOG dist/BUILD-INFO/
|
cp *.LOG dist/BUILD-INFO/
|
||||||
|
|
||||||
- name: Upload archive magic-macos15
|
- name: Upload archive magic-macos13
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: magic-macos15
|
name: magic-macos13
|
||||||
path: |
|
path: |
|
||||||
${{ github.workspace }}/dist
|
${{ github.workspace }}/dist
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2432,7 +2432,6 @@ calmaProcessBoundary(
|
||||||
freeMagic1(&mm1, lbref);
|
freeMagic1(&mm1, lbref);
|
||||||
lbref = lbref->lb_next;
|
lbref = lbref->lb_next;
|
||||||
}
|
}
|
||||||
freeMagic1(&mm1, lbref);
|
|
||||||
freeMagic1_end(&mm1);
|
freeMagic1_end(&mm1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1867,7 +1867,6 @@ calmaProcessBoundaryZ(
|
||||||
freeMagic1(&mm1, lbref);
|
freeMagic1(&mm1, lbref);
|
||||||
lbref = lbref->lb_next;
|
lbref = lbref->lb_next;
|
||||||
}
|
}
|
||||||
freeMagic1(&mm1, lbref);
|
|
||||||
freeMagic1_end(&mm1);
|
freeMagic1_end(&mm1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -814,10 +814,7 @@ main(
|
||||||
EFVisitDevs(simmergeVisit, PTR2CD(NULL));
|
EFVisitDevs(simmergeVisit, PTR2CD(NULL));
|
||||||
TxPrintf("Devices merged: %d\n", esDevsMerged);
|
TxPrintf("Devices merged: %d\n", esDevsMerged);
|
||||||
esFMIndex = 0;
|
esFMIndex = 0;
|
||||||
free_magic1_t mm1 = freeMagic1_init();
|
for (p = devMergeList; p != NULL; p = p->next) freeMagic((char *)p);
|
||||||
for (p = devMergeList; p != NULL; p = p->next)
|
|
||||||
freeMagic1(&mm1, (char *)p);
|
|
||||||
freeMagic1_end(&mm1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EFVisitDevs(simdevVisit, PTR2CD(NULL));
|
EFVisitDevs(simdevVisit, PTR2CD(NULL));
|
||||||
|
|
|
||||||
|
|
@ -242,20 +242,9 @@ spcHierWriteParams(
|
||||||
|
|
||||||
/* Write all requested parameters to the subcircuit call. */
|
/* Write all requested parameters to the subcircuit call. */
|
||||||
|
|
||||||
bool checkme = FALSE;
|
|
||||||
|
|
||||||
if ((!strcmp(EFDevTypes[dev->dev_type], "pfet_06v0_dss")) ||
|
|
||||||
(!strcmp(EFDevTypes[dev->dev_type], "nfet_06v0_dss")))
|
|
||||||
{
|
|
||||||
checkme = TRUE;
|
|
||||||
TxPrintf("Diagnostic: Parameter list for %s\n", EFDevTypes[dev->dev_type]);
|
|
||||||
}
|
|
||||||
|
|
||||||
plist = efGetDeviceParams(EFDevTypes[dev->dev_type]);
|
plist = efGetDeviceParams(EFDevTypes[dev->dev_type]);
|
||||||
while (plist != NULL)
|
while (plist != NULL)
|
||||||
{
|
{
|
||||||
if (checkme) TxPrintf("Plist entry %s %s\n", plist->parm_name, plist->parm_type);
|
|
||||||
|
|
||||||
switch (plist->parm_type[0])
|
switch (plist->parm_type[0])
|
||||||
{
|
{
|
||||||
case 'a':
|
case 'a':
|
||||||
|
|
@ -356,7 +345,6 @@ spcHierWriteParams(
|
||||||
// Check for device length vs. terminal length
|
// Check for device length vs. terminal length
|
||||||
if (plist->parm_type[1] == '\0' || plist->parm_type[1] == '0')
|
if (plist->parm_type[1] == '\0' || plist->parm_type[1] == '0')
|
||||||
{
|
{
|
||||||
if (checkme) TxPrintf("Handling entry l or l0\n");
|
|
||||||
fprintf(esSpiceF, " %s=", plist->parm_name);
|
fprintf(esSpiceF, " %s=", plist->parm_name);
|
||||||
if (esScale < 0)
|
if (esScale < 0)
|
||||||
fprintf(esSpiceF, "%g", l * scale);
|
fprintf(esSpiceF, "%g", l * scale);
|
||||||
|
|
@ -371,10 +359,8 @@ spcHierWriteParams(
|
||||||
{
|
{
|
||||||
/* l1, l2, etc. used to indicate the length of the terminal */
|
/* l1, l2, etc. used to indicate the length of the terminal */
|
||||||
/* Find value in dev_params */
|
/* Find value in dev_params */
|
||||||
if (checkme) TxPrintf("Handling entry l1 or l2\n");
|
|
||||||
for (dparam = dev->dev_params; dparam; dparam = dparam->parm_next)
|
for (dparam = dev->dev_params; dparam; dparam = dparam->parm_next)
|
||||||
{
|
{
|
||||||
if (checkme) TxPrintf("Checking dev_params entry %s\n", dparam->parm_name);
|
|
||||||
if ((strlen(dparam->parm_name) > 2) &&
|
if ((strlen(dparam->parm_name) > 2) &&
|
||||||
(dparam->parm_name[0] == 'l') &&
|
(dparam->parm_name[0] == 'l') &&
|
||||||
(dparam->parm_name[1] == plist->parm_type[1]) &&
|
(dparam->parm_name[1] == plist->parm_type[1]) &&
|
||||||
|
|
@ -383,8 +369,6 @@ spcHierWriteParams(
|
||||||
int dval;
|
int dval;
|
||||||
if (sscanf(&dparam->parm_name[3], "%d", &dval) == 1)
|
if (sscanf(&dparam->parm_name[3], "%d", &dval) == 1)
|
||||||
{
|
{
|
||||||
if (checkme) TxPrintf("Handling dev_params entry %s (to be "
|
|
||||||
"culled at end)\n", dparam->parm_name);
|
|
||||||
fprintf(esSpiceF, " %s=", plist->parm_name);
|
fprintf(esSpiceF, " %s=", plist->parm_name);
|
||||||
if (esScale < 0)
|
if (esScale < 0)
|
||||||
fprintf(esSpiceF, "%g", dval * scale);
|
fprintf(esSpiceF, "%g", dval * scale);
|
||||||
|
|
@ -394,7 +378,6 @@ spcHierWriteParams(
|
||||||
else
|
else
|
||||||
esSIvalue(esSpiceF, (dval + plist->parm_offset)
|
esSIvalue(esSpiceF, (dval + plist->parm_offset)
|
||||||
* scale * esScale * 1.0E-6);
|
* scale * esScale * 1.0E-6);
|
||||||
/* Why is this here? */
|
|
||||||
dparam->parm_name[0] = '\0';
|
dparam->parm_name[0] = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1347,10 +1347,7 @@ main(
|
||||||
{
|
{
|
||||||
const devMerge *p;
|
const devMerge *p;
|
||||||
|
|
||||||
free_magic1_t mm1 = freeMagic1_init();
|
for ( p = devMergeList ; p != NULL ; p=p->next ) freeMagic((char *)p);
|
||||||
for (p = devMergeList; p != NULL; p = p->next)
|
|
||||||
freeMagic1(&mm1, (char *)p);
|
|
||||||
freeMagic1_end(&mm1);
|
|
||||||
}
|
}
|
||||||
} else if ( esDistrJunct )
|
} else if ( esDistrJunct )
|
||||||
EFVisitDevs(devDistJunctVisit, (ClientData) NULL);
|
EFVisitDevs(devDistJunctVisit, (ClientData) NULL);
|
||||||
|
|
|
||||||
|
|
@ -602,26 +602,6 @@ efBuildEquiv(def, nodeName1, nodeName2, resist, isspice)
|
||||||
if (!strcasecmp(nodeName1, nodeName2)) equalByCase = TRUE;
|
if (!strcasecmp(nodeName1, nodeName2)) equalByCase = TRUE;
|
||||||
}
|
}
|
||||||
if (!equalByCase)
|
if (!equalByCase)
|
||||||
{
|
|
||||||
/* If one of the nodes has been generated from the
|
|
||||||
* other by "extract unique", then this is a case where
|
|
||||||
* the "extract unique" algorithm is blind to shorts
|
|
||||||
* through subcell hierarchy and has made a name unique
|
|
||||||
* unnecessarily. In that case, merge the node instead
|
|
||||||
* of generating a short.
|
|
||||||
*/
|
|
||||||
char *uniqstr1, *uniqstr2;
|
|
||||||
bool isuniq;
|
|
||||||
|
|
||||||
uniqstr1 = strstr(nodeName1, "_uq");
|
|
||||||
uniqstr2 = strstr(nodeName2, "_uq");
|
|
||||||
if (uniqstr1) *uniqstr1 = '\0';
|
|
||||||
if (uniqstr2) *uniqstr2 = '\0';
|
|
||||||
isuniq = !strcmp(nodeName1, nodeName2);
|
|
||||||
if (uniqstr1) *uniqstr1 = '_';
|
|
||||||
if (uniqstr2) *uniqstr2 = '_';
|
|
||||||
|
|
||||||
if (!isuniq)
|
|
||||||
{
|
{
|
||||||
if ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE)
|
if ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE)
|
||||||
{
|
{
|
||||||
|
|
@ -647,16 +627,12 @@ efBuildEquiv(def, nodeName1, nodeName2, resist, isspice)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (!resist)
|
else if (!resist)
|
||||||
TxError("Warning: Ports \"%s\" and \"%s\" are electrically "
|
TxError("Warning: Ports \"%s\" and \"%s\" are electrically shorted.\n",
|
||||||
"shorted.\n", nodeName1, nodeName2);
|
nodeName1, nodeName2);
|
||||||
else
|
else
|
||||||
/* Do not merge the nodes when folding in extresist parasitics */
|
/* Do not merge the nodes when folding in extresist parasitics */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (resist)
|
|
||||||
/* Do not merge the nodes when folding in extresist parasitics */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If both names exist and are for different nodes, merge them */
|
/* If both names exist and are for different nodes, merge them */
|
||||||
|
|
@ -676,6 +652,8 @@ efBuildEquiv(def, nodeName1, nodeName2, resist, isspice)
|
||||||
if (efWarn)
|
if (efWarn)
|
||||||
efReadError("Merged nodes %s and %s\n", nodeName1, nodeName2);
|
efReadError("Merged nodes %s and %s\n", nodeName1, nodeName2);
|
||||||
lostnode = efNodeMerge(&nn1->efnn_node, &nn2->efnn_node);
|
lostnode = efNodeMerge(&nn1->efnn_node, &nn2->efnn_node);
|
||||||
|
if (nn1->efnn_port > 0) nn2->efnn_port = nn1->efnn_port;
|
||||||
|
else if (nn2->efnn_port > 0) nn1->efnn_port = nn2->efnn_port;
|
||||||
|
|
||||||
/* Check if there are any device terminals pointing to the
|
/* Check if there are any device terminals pointing to the
|
||||||
* node that was just removed.
|
* node that was just removed.
|
||||||
|
|
@ -926,22 +904,20 @@ efBuildDevice(
|
||||||
/* Parse initial arguments for parameters */
|
/* Parse initial arguments for parameters */
|
||||||
while ((pptr = strchr(argv[argstart], '=')) != NULL)
|
while ((pptr = strchr(argv[argstart], '=')) != NULL)
|
||||||
{
|
{
|
||||||
/* If the parameter is in the parameter list "devp", then save
|
// Check if this parameter is in the table.
|
||||||
* the value as appropriate. If not, then the entire phrase
|
// If so, handle appropriately. Otherwise, the
|
||||||
* will be output verbatim, so just save the whole string.
|
// parameter gets saved verbatim locally. The
|
||||||
*
|
// "parameters" line comes before any "device" line
|
||||||
* The "parameters" line comes before any "device" line in the
|
// in the .ext file, so the table should be complete.
|
||||||
* .ext file, so the "devp" list should be complete.
|
|
||||||
*/
|
|
||||||
|
|
||||||
*pptr = '\0';
|
*pptr = '\0';
|
||||||
for (sparm = devp; sparm; sparm = sparm->parm_next)
|
for (sparm = devp; sparm; sparm = sparm->parm_next)
|
||||||
if (!strncasecmp(sparm->parm_type, argv[argstart], 2))
|
if (!strcasecmp(sparm->parm_type, argv[argstart]))
|
||||||
break;
|
break;
|
||||||
*pptr = '=';
|
*pptr = '=';
|
||||||
if (sparm == NULL)
|
if (sparm == NULL)
|
||||||
{
|
{
|
||||||
/* Copy the whole string into dev_params */
|
/* Copy the parameter into dev_params */
|
||||||
/* (parm_type and parm_scale records are not used) */
|
/* (parm_type and parm_scale records are not used) */
|
||||||
newparm = (DevParam *)mallocMagic(sizeof(DevParam));
|
newparm = (DevParam *)mallocMagic(sizeof(DevParam));
|
||||||
newparm->parm_name = StrDup((char **)NULL, argv[argstart]);
|
newparm->parm_name = StrDup((char **)NULL, argv[argstart]);
|
||||||
|
|
@ -956,59 +932,30 @@ efBuildDevice(
|
||||||
{
|
{
|
||||||
case 'a':
|
case 'a':
|
||||||
if ((pptr - argv[argstart]) == 2)
|
if ((pptr - argv[argstart]) == 2)
|
||||||
devtmp.dev_area = (int)(0.5 + (float)atoi(pptr)
|
devtmp.dev_area = atoi(pptr);
|
||||||
* locScale * locScale);
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Check for a0, a1, a2, ... If a0, handle like "a".
|
|
||||||
* Otherwise, don't handle it here.
|
|
||||||
*/
|
|
||||||
pn = *(argv[argstart] + 1) - '0';
|
pn = *(argv[argstart] + 1) - '0';
|
||||||
if (pn == 0)
|
if (pn == 0)
|
||||||
devtmp.dev_area = (int)(0.5 + (float)atoi(pptr)
|
devtmp.dev_area = (int)(0.5 + (float)atoi(pptr)
|
||||||
* locScale * locScale);
|
* locScale * locScale);
|
||||||
|
/* Otherwise, punt */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'p':
|
case 'p':
|
||||||
if ((pptr - argv[argstart]) == 2)
|
if ((pptr - argv[argstart]) == 2)
|
||||||
devtmp.dev_perim = (int)(0.5 + (float)atoi(pptr) * locScale);
|
devtmp.dev_perim = atoi(pptr);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Check for p0, p1, p2, ... If p0, handle like "p".
|
|
||||||
* Otherwise, don't handle it here.
|
|
||||||
*/
|
|
||||||
pn = *(argv[argstart] + 1) - '0';
|
pn = *(argv[argstart] + 1) - '0';
|
||||||
if (pn == 0)
|
if (pn == 0)
|
||||||
devtmp.dev_perim = (int)(0.5 + (float)atoi(pptr) * locScale);
|
devtmp.dev_perim = (int)(0.5 + (float)atoi(pptr) * locScale);
|
||||||
|
/* Otherwise, use verbatim */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'l':
|
case 'l':
|
||||||
if ((pptr - argv[argstart]) == 2)
|
|
||||||
devtmp.dev_length = (int)(0.5 + (float)atoi(pptr) * locScale);
|
devtmp.dev_length = (int)(0.5 + (float)atoi(pptr) * locScale);
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Check for l0, l1, l2, ... If l0, handle like "l".
|
|
||||||
* Otherwise, save it verbatim like an unknown parameter,
|
|
||||||
* because its value will not be calculated from terminal
|
|
||||||
* values like "a1, a2, ..." or "p1, p2, ...".
|
|
||||||
*/
|
|
||||||
|
|
||||||
pn = *(argv[argstart] + 1) - '0';
|
|
||||||
if (pn == 0)
|
|
||||||
devtmp.dev_length = (int)(0.5 + (float)atoi(pptr) * locScale);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Copy the whole string into dev_params */
|
|
||||||
newparm = (DevParam *)mallocMagic(sizeof(DevParam));
|
|
||||||
newparm->parm_name = StrDup((char **)NULL, argv[argstart]);
|
|
||||||
newparm->parm_next = devtmp.dev_params;
|
|
||||||
devtmp.dev_params = newparm;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
devtmp.dev_width = (int)(0.5 + (float)atoi(pptr) * locScale);
|
devtmp.dev_width = (int)(0.5 + (float)atoi(pptr) * locScale);
|
||||||
break;
|
break;
|
||||||
|
|
@ -1599,25 +1546,7 @@ efBuildConnect(def, nodeName1, nodeName2, deltaC, av, ac)
|
||||||
unsigned size = sizeof (Connection)
|
unsigned size = sizeof (Connection)
|
||||||
+ (efNumResistClasses - 1) * sizeof (EFPerimArea);
|
+ (efNumResistClasses - 1) * sizeof (EFPerimArea);
|
||||||
|
|
||||||
/* If one of the nodes has been generated from the
|
if ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE)
|
||||||
* other by "extract unique", then this is a case where
|
|
||||||
* the "extract unique" algorithm is blind to shorts
|
|
||||||
* through subcell hierarchy and has made a name unique
|
|
||||||
* unnecessarily. In that case, merge the node instead
|
|
||||||
* of generating a short.
|
|
||||||
*/
|
|
||||||
char *uniqstr1, *uniqstr2;
|
|
||||||
bool isuniq;
|
|
||||||
|
|
||||||
uniqstr1 = strstr(nodeName1, "_uq");
|
|
||||||
uniqstr2 = strstr(nodeName2, "_uq");
|
|
||||||
if (uniqstr1) *uniqstr1 = '\0';
|
|
||||||
if (uniqstr2) *uniqstr2 = '\0';
|
|
||||||
isuniq = !strcmp(nodeName1, nodeName2);
|
|
||||||
if (uniqstr1) *uniqstr1 = '_';
|
|
||||||
if (uniqstr2) *uniqstr2 = '_';
|
|
||||||
|
|
||||||
if (!isuniq && ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE))
|
|
||||||
{
|
{
|
||||||
/* Handle the case where two ports on different nets get merged.
|
/* Handle the case where two ports on different nets get merged.
|
||||||
* If "extract short resistor" or "extract short voltage" has
|
* If "extract short resistor" or "extract short voltage" has
|
||||||
|
|
@ -2020,10 +1949,8 @@ efNodeMerge(node1ptr, node2ptr)
|
||||||
if (*node1ptr == *node2ptr)
|
if (*node1ptr == *node2ptr)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/*
|
/* Keep the node with the greater number of entries, and merge */
|
||||||
* Keep the node with the greater number of entries, and merge
|
/* the node with fewer entries into it. */
|
||||||
* the node with fewer entries into it.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((*node1ptr)->efnode_num >= (*node2ptr)->efnode_num)
|
if ((*node1ptr)->efnode_num >= (*node2ptr)->efnode_num)
|
||||||
{
|
{
|
||||||
|
|
@ -2063,7 +1990,7 @@ efNodeMerge(node1ptr, node2ptr)
|
||||||
/* Make all EFNodeNames point to "keeping" */
|
/* Make all EFNodeNames point to "keeping" */
|
||||||
if (removing->efnode_name)
|
if (removing->efnode_name)
|
||||||
{
|
{
|
||||||
bool topportk, topportr, bestname;
|
bool topportk, topportr;
|
||||||
|
|
||||||
for (nn = removing->efnode_name; nn; nn = nn->efnn_next)
|
for (nn = removing->efnode_name; nn; nn = nn->efnn_next)
|
||||||
{
|
{
|
||||||
|
|
@ -2075,9 +2002,9 @@ efNodeMerge(node1ptr, node2ptr)
|
||||||
topportr = (removing->efnode_flags & EF_TOP_PORT) ? TRUE : FALSE;
|
topportr = (removing->efnode_flags & EF_TOP_PORT) ? TRUE : FALSE;
|
||||||
|
|
||||||
/* Concatenate list of EFNodeNames, taking into account precedence */
|
/* Concatenate list of EFNodeNames, taking into account precedence */
|
||||||
if ((!keeping->efnode_name) || (!topportk && topportr)
|
if ((!keeping->efnode_name) || (!topportk && (topportr
|
||||||
|| EFHNBest(removing->efnode_name->efnn_hier,
|
|| EFHNBest(removing->efnode_name->efnn_hier,
|
||||||
keeping->efnode_name->efnn_hier))
|
keeping->efnode_name->efnn_hier))))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* New official name is that of "removing".
|
* New official name is that of "removing".
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,6 @@ extOutputGeneratedLabels(parentUse, f)
|
||||||
|
|
||||||
parentDef = parentUse->cu_def;
|
parentDef = parentUse->cu_def;
|
||||||
|
|
||||||
free_magic1_t mm1 = freeMagic1_init();
|
|
||||||
while ((lab = parentDef->cd_labels) != NULL)
|
while ((lab = parentDef->cd_labels) != NULL)
|
||||||
{
|
{
|
||||||
if ((lab->lab_flags & LABEL_GENERATE) == 0) return;
|
if ((lab->lab_flags & LABEL_GENERATE) == 0) return;
|
||||||
|
|
@ -107,10 +106,9 @@ extOutputGeneratedLabels(parentUse, f)
|
||||||
for (n = 0; n < ExtCurStyle->exts_numResistClasses; n++)
|
for (n = 0; n < ExtCurStyle->exts_numResistClasses; n++)
|
||||||
fprintf(f, " 0 0");
|
fprintf(f, " 0 0");
|
||||||
putc('\n', f);
|
putc('\n', f);
|
||||||
freeMagic1(&mm1, lab);
|
freeMagic(lab);
|
||||||
parentDef->cd_labels = lab->lab_next;
|
parentDef->cd_labels = lab->lab_next;
|
||||||
}
|
}
|
||||||
freeMagic1_end(&mm1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -2776,12 +2776,8 @@ extOutputDevices(def, transList, outFile)
|
||||||
/* Free the lists */
|
/* Free the lists */
|
||||||
|
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
{
|
|
||||||
free_magic1_t mm1 = freeMagic1_init();
|
|
||||||
for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next)
|
for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next)
|
||||||
freeMagic1(&mm1, (char *)lb);
|
freeMagic((char *)lb);
|
||||||
freeMagic1_end(&mm1);
|
|
||||||
}
|
|
||||||
freeMagic((char *)extSpecialBounds);
|
freeMagic((char *)extSpecialBounds);
|
||||||
|
|
||||||
/* Put the region list back the way we found it: */
|
/* Put the region list back the way we found it: */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue