Article View: comp.lsi
Article #732Magic resistance bug fix
From: John Ousterhout
Date: Fri, 09 Jan 1987 16:35
Date: Fri, 09 Jan 1987 16:35
190 lines
7444 bytes
7444 bytes
The previous bug report that we mailed/sent out about the Magic resistance
bug was pretty sketchy as to the fix. Here's a more detailed description
of how to fix it, including diffs of relevant files. I'm also including
at the end of this message two additional notices about recently-found
major Magic bugs and their fixes. For those of you who could care less
about Magic, apologies for such a lengthy piece of electronic garbage.
----------------------------------------------------------------------
Magic Bug Report
April 25, 1986
Symptoms:
Magic incorrectly estimates resistances. In addition, the
area and perimeter information in .ext files is wrong (this
is the cause of the bad resistance estimates).
Fix:
The problem is that any material that has not been assigned
a "resist class" automatically has its area and perimeter and
area lumped into resist class zero. The result is that the
perimeters and areas for resist class zero are consistently
overestimated. This all happens because the default resist
class for all types is set to 0. The fix is to edit the files
ExtBasic.c and ExtTech.c to change the default resist class
to -1, and also to check for a -1 resist class before adding in
areas and perimeters, skipping the addition for -1 resist classes.
Here are a set of diffs for the two files:
------- ExtBasic.c -------
1026c1026,1027
< extResistArea[resistClass] += area;
---
> if (resistClass != -1)
> extResistArea[resistClass] += area;
1051,1052c1052,1055
< if (cap = ExtCurStyle->exts_perimCap[type][t]) reg->nreg_cap += cap * len;
< if (TTMaskHasType(resMask, t)) extResistPerim[resistClass] += len;
---
> if (cap = ExtCurStyle->exts_perimCap[type][t])
> reg->nreg_cap += cap * len;
> if (TTMaskHasType(resMask, t) && resistClass != -1)
> extResistPerim[resistClass] += len;
1070,1071c1073,1076
< if (cap = ExtCurStyle->exts_perimCap[type][t]) reg->nreg_cap += cap * len;
< if (TTMaskHasType(resMask, t)) extResistPerim[resistClass] += len;
---
> if (cap = ExtCurStyle->exts_perimCap[type][t])
> reg->nreg_cap += cap * len;
> if (TTMaskHasType(resMask, t) && resistClass != -1)
> extResistPerim[resistClass] += len;
1089,1090c1094,1097
< if (cap = ExtCurStyle->exts_perimCap[type][t]) reg->nreg_cap += cap * len;
< if (TTMaskHasType(resMask, t)) extResistPerim[resistClass] += len;
---
> if (cap = ExtCurStyle->exts_perimCap[type][t])
> reg->nreg_cap += cap * len;
> if (TTMaskHasType(resMask, t) && resistClass != -1)
> extResistPerim[resistClass] += len;
1108,1109c1115,1118
< if (cap = ExtCurStyle->exts_perimCap[type][t]) reg->nreg_cap += cap * len;
< if (TTMaskHasType(resMask, t)) extResistPerim[resistClass] += len;
---
> if (cap = ExtCurStyle->exts_perimCap[type][t])
> reg->nreg_cap += cap * len;
> if (TTMaskHasType(resMask, t) && resistClass != -1)
> extResistPerim[resistClass] += len;
------- ExtTech.c -------
247c247
< style->exts_typeToResistClass[r] = 0;
---
> style->exts_typeToResistClass[r] = -1;
----------------------------------------------------------------------
Magic Bug Report
August 3, 1986
Symptoms:
Magic core dumps during cell selection. Typically, this
happens when you delete a cell, delete it, and then immediately
select another cell without moving the cursor. This bug only
tends to manifest itself on Suns.
Fix:
Make two changes in the procedure CmdSelect in CmdRS.c: at
about line 639, change the code to look like the following:
--------------------------
static Rect lastArea = {-100, -100, -200, -200};
/* Used to remember region around what was
* pointed at in the last select command: a
* new selection in this area causes the next
* bigger thing to be selected.
*/
static int lastCommand; /* Serial number of last command: the next
* bigger thing is only selected when there
* are several select commands in a row.
*/
static Rect chunkSelection; /* Used to remember the size of the last chunk
* selected.
*/
--------------------------
At about line 802, change the code to look like the following:
--------------------------
/* See if we're pointing at the same place as we were the last time
* this command was invoked, and if this command immediately follows
* another selection comand.
*/
if (GEO_ENCLOSE(&cmd->tx_p, &lastArea)
&& (lastCommand+1 == TxCommandNumber))
samePlace = TRUE;
else samePlace = FALSE;
lastArea.r_xbot = cmd->tx_p.p_x - MARGIN;
lastArea.r_ybot = cmd->tx_p.p_y - MARGIN;
lastArea.r_xtop = cmd->tx_p.p_x + MARGIN;
lastArea.r_ytop = cmd->tx_p.p_y + MARGIN;
lastCommand = TxCommandNumber;
--------------------------
----------------------------------------------------------------------
Magic Bug Report
November 24, 1986
Symptoms:
When generating Calma for an array whose bounding box includes
the origin, the reference points get screwed up and incorrect
Stream is generated.
Fix:
Below is a diff of the old version of CalmaWrite.c, followed
by the relevant lines of the new version. Substitute the new
for the old (except for the "!" characters which were added
to indicate the lines that changed).
*** OLD CalmaWrite.c Mon Nov 3 13:10:29 1986
--- CalmaWrite.c Fri Oct 3 17:21:27 1986
***************
*** 550,569 ****
if (isArray)
{
/* Column reference point */
! p.p_x = use->cu_xsep;
p.p_y = 0;
GeoTransPoint(t, &p, &p2);
! p2.p_x *= calmaWriteScale * cols;
! p2.p_y *= calmaWriteScale * cols;
calmaOutI4(p2.p_x, f);
calmaOutI4(p2.p_y, f);
/* Row reference point */
p.p_x = 0;
! p.p_y = use->cu_ysep;
GeoTransPoint(t, &p, &p2);
! p2.p_x *= calmaWriteScale * rows;
! p2.p_y *= calmaWriteScale * rows;
calmaOutI4(p2.p_x, f);
calmaOutI4(p2.p_y, f);
}
--- 550,569 ----
if (isArray)
{
/* Column reference point */
! p.p_x = use->cu_xsep * cols;
p.p_y = 0;
GeoTransPoint(t, &p, &p2);
! p2.p_x *= calmaWriteScale;
! p2.p_y *= calmaWriteScale;
calmaOutI4(p2.p_x, f);
calmaOutI4(p2.p_y, f);
/* Row reference point */
p.p_x = 0;
! p.p_y = use->cu_ysep * rows;
GeoTransPoint(t, &p, &p2);
! p2.p_x *= calmaWriteScale;
! p2.p_y *= calmaWriteScale;
calmaOutI4(p2.p_x, f);
calmaOutI4(p2.p_y, f);
}
Technical Details
Message-ID:
<8701091635.AA21746@ucbarpa.Berkeley.EDU>Path:
arc1-ca.pugleaf.net!utzoo!mnetor!seismo!rutgers!sri-unix!hplabs!ucbvax!UCBARPA.BERKELEY.EDU!ousterShow Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: arc1-ca.pugleaf.net!utzoo!mnetor!seismo!rutgers!sri-unix!hplabs!ucbvax!UCBARPA.BERKELEY.EDU!ouster From: ouster@UCBARPA.BERKELEY.EDU (John Ousterhout) Newsgroups: comp.lsi Subject: Magic resistance bug fix Message-ID: <8701091635.AA21746@ucbarpa.Berkeley.EDU> Date: Fri, 9-Jan-87 11:35:54 EST Article-I.D.: ucbarpa.8701091635.AA21746 Posted: Fri Jan 9 11:35:54 1987 Date-Received: Sat, 10-Jan-87 01:35:30 EST Sender: daemon@ucbvax.BERKELEY.EDU Organization: The ARPA Internet Lines: 190