Magic VLSI Layout Tool Version 8.0 *

Magic Code Revision History

Table of Contents

Magic 8.2 Revisions
Magic 8.1 Revisions
Magic 8.0 Revisions
Magic 7.5 Revisions
Magic 7.4 Revisions
Magic 7.3 Revisions
Magic 7.2 Revisions

Revision information on Magic version 8.2 (development):

Revision information on Magic version 8.1 (stable):

Revision information on Magic version 8.0 (stable):

  1. Feburary 3, 2008
    Original version. The only difference between this and version 7.5 is the introduction of vector outline fonts (unfinished).
    Also: Minor corrections to vector font selection and transformation; also unfinished.
  2. February 7, 2008 at 2:40am
    Expanded upon scripted routines "pushstack" and "popstack" (">" and "<" macros) to avoid pushing into anything other than a child of the edit cell, and to avoid popping an empty stack (same change made to version 7.5)
    Also: 2008-02-07 02:40 tim
  3. February 8, 2008 at 2:40am
    Corrected an error in which running magic in batch mode with a read-only cell causes the edit cell to end up pointing to the initial empty "UNNAMED" cell rather than being set to NULL (because the loaded cell is not editable).
  4. February 10, 2008 at 2:40am
    Corrected the DRC spacing rule to reinstate the ability to specify multiple layers on multiple planes in either of the two type lists "spacing from" and "spacing to". The recent changes to DRC initialization in magic-7.5 forced an assumption of each layer set being in the same plane. With no check of this, however, specification of layers in different planes would cause magic to crash. Also: changed the "pushstack" script (again) to remove the arbitrarily-imposed condition that one may only push into a child cell of the current edit cell.
  5. February 11, 2008 at 2:40am
    Removed DBResidueMask() subroutine calls from inside TTMask* constructs, where they get repeated (unnecessarily) once for each byte in the mask.
  6. February 12, 2008 at 2:40am
    Corrected the DRCcif functions to match the changes to the arguments of drcAssign(). Also: Corrected a label subroutine call with mismatched parameters caused by recent changes to the label code.
    Also: Added some command options for modifying labels on the fly: "label set" command with options "font", "rotate", "size", etc.
  7. February 15, 2008 at 2:40am
    Modified the label commands so that "label" is essentially back to what it used to be (except for optional extensions for outline fonts), and loading fonts and adjusting properties of existing labels has been moved to the new "setlabel" command.
    Also: Started on a text helper window for editing labels. Implemented new option "setlabel fontlist" to generate a list of available fonts, and rewrote all of the "setlabel" routines to return Tcl lists. Implemented Bertrand Irissou's extended GUI menus.
  8. February 18, 2008 at 2:40am
    Modified SelEnumPaint so that "chunk" selection is handled differently than other selections (so that "compatible" types in other cells are not copied into the selection cell).
    Also: Extended the aforementioned method for handling "select chunk" to similarly handle "select area ", such that material compatible with (but not included in) is not copied into the selection cell.
    Also: Corrected the "what" command to produce a unique list of subcells in which each paint type is found. Prior code only checked each subcell name against the previous one searched, so cells visited cyclically (typical for deep hierarchy) would be repeated for each occurrence.
  9. June 2, 2008 at 2:40am
    Updated a number of files to match changes made in version 7.5. Specifically, added extensions for not using the ".option scale" card in HSPICE output format, and an extension for devices with different drain and source types.
  10. June 28, 2008 at 9:50am
    2008-06-28 09:50 tim
  11. August 15, 2008 at 2:40am
    2008-08-14 08:26 tim Corrected an integer overflow error in non-Manhattan tile painting (most likely to occur on GDS read-in).
  12. September 4, 2008 at 2:40am
    2008-09-03 10:22 tim Corrected the DBFracturePlane() routine to preserve the maximum horizontal stripes rule when fracturing split tiles. Also: Added the standalone ext2spice and ext2sim programs, which run as scripts. Additionally, modified the makefile to include the library runtime path for systems that require it (otherwise the scripts mentioned above don't work).
    Also: Corrected tkcon.tcl for running correctly under Tcl/Tk version 8.5.
  13. September 6, 2008 at 2:40am
    2008-09-05 06:56 tim Extended the syntax of the "wire" command to match changes made to magic version 7.5
  14. September 9, 2008 at 2:40am
    2008-09-08 12:55 tim Gave up on Philippe's modifier mask change, which screws up magic on various linux distributions, and solaris. Restricting the change to Mac OS X only.
  15. October 16, 2008 at 2:40am
    2008-10-15 07:35 tim Hack solution to prevent segfaults on extraction of bent gates. Need to add a correct solution for handling diagonal boundaries. . .
  16. November 6, 2008 at 2:40am
    2008-11-05 07:18 tim corrected extraction of asymmetric FET devices
  17. November 9, 2008 at 2:40am
    Corrections to the plot PNM routine to match the changes made to magic 7.5.
  18. November 22, 2008 at 2:40am
    Corrections to selection and moving/stretching of contacts to match changes made to magic version 7.5.
  19. December 4, 2008 at 2:40am
    Changes corresponding to functional additions to magic-7.5: New contact generation algorithm, new "cif paint" function, and new subcircuit and rsubcircuit devices for extraction.
  20. December 5, 2008 at 2:40am
    Created new cif output operators "net" and "maxrect". Moved the maximum rectangle routines into a new file in the utils directory so that they are no longer dependent upon the DRC code.
    Also: Added the "no-errors" warning to the cifoutput options.
  21. December 6, 2008 at 2:40am
    Corrections to CIF text label I/O for what may or may not be correct scaling. Corrected the "cif paint" function to use the "undo" mechanism and properly update the bounding box information and register the area for a DRC check.
  22. December 10, 2008 at 2:40am
    Corrections on the new CIF contact generation algorithm, plus a few more corrections on the rendered text (OpenGL driver only).
  23. December 11, 2008 at 2:40am
    Finished (well, not counting unforseen bug fixes) the rendered font display routines for both X11 and OpenGL. The X11 routines involve rather too much memory allocation/deallocation of pixmaps and could use a bit of optimizing. For that matter, the OpenGL routines could be optimized with display lists, but at least it all (apparently) works. Needs a GUI. . .
  24. December 12, 2008 at 2:40am
    A couple of corrections to the font text code, to complete and correct the "setlabel" function options, and to fix the label offset calculations, which was being canceled by the justification computations.
    Also: Correction to avoid hanging or segfaulting on devices with no terminals.
    Also: Added corner resistance scaling to the "resist" line in the techfile extract section. Defaulting to 1.0, this can be specified for each resist group. Often this is set to 0.5 in practice.
    Also: One more correction for refresh areas not being computed correctly when checking for expanded regions around labels.
    Also: Corrected an error where selected labels are not redrawn after being unselected.
  25. December 13, 2008 at 2:40am
    Corrected the step size and side halo scaling when using option "units microns" to match the correction made to magic 7.5.
  26. December 17, 2008 at 2:40am
    Corrected an error in the bounding boxes that causes subcells to disappear when reading in a .mag file.
  27. December 18, 2008 at 2:40am
    Corrected the GDS write of rendered text, which would crash on attempting to write rotation and scale values. Also corrected the GDS write of vendor GDS files, which failed to scan the correct seek pointer into the GDS file on 64-bit machines, where off_t is defined as (long long), and is therefore incompatible with a "%d" in a scanf() statement.
    Also: 2008-12-18 02:40 tim
  28. December 19, 2008 at 2:40am
    Corrected scaling and conversion of sideOverlap and sideCouple capacitances.
  29. December 20, 2008 at 2:40am
    Corrected the GDS output of labels; this has now been confirmed in stream-out and stream-in from Magic back into Magic as well as from Magic to Cadence, and from Cadence to Magic.
  30. December 24, 2008 at 2:40am
    Corrected several errors, including two in the (new) "maxrect" cif operator computation, and one that causes the DRC halo to grow every time the tech file is re-read.
  31. December 30, 2008 at 2:40am
    Corrected the extflat (EFbuild.c) code to prevent a crash condition caused by the code changes for the subcircuit and rsubcircuit extraction device types (same change as made to the magic version 7.5 code).
  32. January 14, 2009 at 2:40am
    Altered the contact generation algorithm to cover cases in which non-manhattan beveled edges are placed such that they prevent any contact cuts from being placed (because the cut positions have been computed from the bounding box of the area, not the actual structure).
    Also: Changed the contact cut-generation algorithm to prevent it from generating cuts that violate the required border amount. This breaks backward- compatibility, but the original function, which may have been meant to accomodate cuts with different border allowances on different sides, can be replaced by the "slots" function. Otherwise, it can generate bad layout.
  33. January 15, 2009 at 2:40am
    Corrected an error that caused the extractor to ignore transistor source/ drain resistclasses.
    Also: Modified the search algorithm in the contact cut generation to (greatly) speed up the processing, which had been made slow in some cases when the new algorithm was instantiated.
  34. January 16, 2009 at 2:40am
    Modified the "cif see" and "cif paint" commands such that they do not attempt to generate all CIF layers, but only those requested and the layers on which those layers depend. This speeds up the process, avoids unnecessary computation, and avoids generating unrelated warning and error messages.
  35. January 20, 2009 at 2:40am
    Corrected ext2spice and ext2sim such that (1) the version of magic that was compiled is called (replaced "magic" with the full path to "magicdnull"), and (2) if the technology is not the default (scmos), and no layout has been loaded (which is true of "magicdnull" batch mode), then the technology specified by the .ext file will be loaded.
    Also: Made one further change to the "ext2spice" and "ext2sim" scripts (standalone commands), which is to allow arguments separated by "--". Arguments before the double-dash are passed to magic as arguments to magic, and those after the double-dash become arguments of the "ext2spice" or "ext2sim" command. This somewhat breaks backward compatibility with the original standalone commands, but allows all command-line options for magic to be used.
  36. January 22, 2009 at 2:40am
    Corrected one of those wonderful "wrote == instead of =" errors. Keeps the CIF contact generation from running forever (same change made to version 7.5; the code was apparently copied verbatim).
  37. January 30, 2009 at 2:40am
    Made a small correction that prevents magic from counting the metal-to-space edge on a contact as part of a device perimeter. Original assumption was that the contact would only be on the boundary outside edge, which is not true.
    Also: Corrected handling of asymmetric FETs such that ext2spice does not try to merge devices that are antiparallel. This is an unlikely situation, but is checked for completeness. This requires a new device type "asymmetric" to be written to the .ext file.
  38. April 11, 2009 at 2:40am
    Corrected a DRC error which would cause magic to "optimize out" (remove) rules that should not have been, as they are active in a different plane from the one that ought to be deleted. Changed correspond to changes made to magic version 7.5.
  39. April 24, 2009 at 2:40am
    2009-04-23 09:26 tim Corrected an error which caused copying contacts to incorrectly flag the existance of overlap errors (same as change made to magic v7.5).
  40. April 30, 2009 at 2:40am
    2009-04-29 10:12 tim Reverted the last change, which was completely wrong, does not fix what it was meant to fix, and causes a whole lot of other errors instead. The real underlying problem is now understood, but the solution is likely to be pretty tedious and time-consuming.
  41. May 2, 2009 at 2:40am
    2009-05-01 11:59 tim Reworked the last bugfix, using a completely new method to implement the paint routine used by DRC to find overlap violations (was DBPaintPlaneMergeOnce(), is now a variation on the DBPaintPlane() call). This code is experimental, so I will not add it to the stable version until it has been proven correct and shown not to cause additional errors. In short, the DBPaintPlaneMergeOnce() routine prevents double-processing tiles in the DBPaintPlane() routine. Because the algorithm is less efficient than DBPaintPlane(), it is used only for the DRC overlap check (i.e., used when flattening cells during hierarchy and array checks). The new routine uses the clientData record to mark tiles, then clears them afterward. It is just as inefficient as the original version, possibly slightly more so. However, it prevents the necessity of having (and maintaining) multiple copies of hundreds of lines of paint code.
    Also: Added the extended bounding box (bbox with labels) to the "undo" record for cell instances---otherwise, cell instance get lost during undo operations, which is naturally a bad thing.
  42. May 4, 2009 at 2:40am
    2009-05-03 08:01 tim Implemented the "templayer" keyword for the "cifinput" section, which was previously unavailable. This allows the user (techfile maintainer) to define new CIF/GDS types to be used as temporary storage for derived layers.
  43. May 14, 2009 at 2:40am
    2009-05-13 08:03 tim Corrected wire value scaling when the internal grid changes (it was backwards). Also, applied Jason Schonberg's patch which corrects undeclared (implicit integer) variables.
  44. May 19, 2009 at 2:40am
    2009-05-18 20:06 tim Corrected an error that prevents magic from identifying isolated contact squares that are too small to draw a cut and generating an error message.
    Also: 2009-05-19 02:40 tim
  45. May 22, 2009 at 2:40am
    2009-05-21 05:28 tim Corrected an instance of DBUndoPutLabel() that was still making the call with the old parameter list.
  46. May 30, 2009 at 2:40am
    2009-05-29 20:13 tim Corrected another error with the extended bounding box that prevents it from forcing a recompute after invalidating a subcell bounding box, leaving that subcell with an invalid bounding box and causing all sorts of trouble.
  47. June 2, 2009 at 2:40am
    2009-06-01 10:18 tim Moved the "slots" function to the new contact cut generation method.
  48. June 5, 2009 at 2:40am
    2009-06-04 06:54 tim Corrected an error in the parsing of the "device subcircuit" statement to allow devices with zero nodes declared (such as diodes).
  49. June 13, 2009 at 2:40am
    2009-06-12 10:40 tim Revised the contact cut generation algorithm so that it is more compatible with the original behavior in which contacts may be generated where the border area is insufficient. This is a temporary solution, as there needs to be a proper check against borders in each contact residue, separately.
  50. July 2, 2009 at 2:40am
    2009-07-01 06:39 tim Corrected an error that ignores resistor length and width when generating a semiconductor resistor output in a spice file with ext2spice.
  51. July 14, 2009 at 2:40am
    2009-07-13 19:54 tim Correction to the wrapper script submitted by Daniel Barden, that removes the checkmark for the Tech Manager when the window is removed forcibly by the window manager.
  52. July 18, 2009 at 2:40am
    2009-07-17 07:54 tim Corrected the "cellname" and "instance" functions that return the name of child instances to both run more efficiently, and return a unique set.
  53. July 27, 2009 at 2:40am
    2009-07-26 17:56 tim Corrected the "instance list celldef" command, which would miss children of the top-level cell due to the lack of an immediate parent instance.
  54. July 28, 2009 at 2:40am
    2009-07-27 07:16 tim And one more correction, to the configure.in script, to help configure find Tcl/Tk packages on Ubuntu and other systems that hide them in obscure places.
  55. August 4, 2009 at 2:40am
    2009-08-03 06:41 tim Two corrections: (1) The "extresist" command was missing an assignment of the third boolean argument in options like "extresist simplify on", making it impossible to set them, and (2) The continuous DRC breaks to check for Tcl/Tk pending events so that the DRC can be interrupted; however, this check was extended to file events, making it impossible to run DRC in batch, as the following command would immediately interrupt any DRC check. Thanks to Graham Petley for bringing these to my attention.
  56. September 11, 2009 at 2:40am
    2009-09-10 13:32 tim Corrected hierarchical extraction of non-Manhattan nets. Isolated non-Manhattan tiles (most likely to occur during hierarchical extraction when the layout is chopped up into squares and processed individually) are now properly handled as reference tiles for node regions, and so do not cause errors.
  57. September 12, 2009 at 2:40am
    2009-09-11 07:30 tim Corrected the DRC checker to allow commands forcing an immediate check to execute. Code that was meant to prevent the continuous DRC checker from being executed in the middle of a command prevented this. Same change as made to version 7.5.
    Also: Additional measures to ensure that the continuous DRC does not run in the middle of tool initialization.
    Also: Yet more alterations to the DRC status/on/off/count commands and behavior.
    Also: And one final correction.
  58. December 31, 2009 at 2:40am
    2009-12-30 05:42 tim Corrected an integer-to-boolean conversion that breaks on machines not defining bool as type int. Thanks to Dinesh Sharma for pointing out this error.
  59. February 10, 2010 at 2:40am
    Corrected a typo that mysteriously slipped into the configure script, noticed by Svenn Bjerkem.
  60. March 9, 2010 at 2:40am
    Applied patches from Dan McMahill and Jason Shonberg
  61. March 13, 2010 at 2:40am
    Corrected DRCcontinuous so that background commands that modify the DRC state do not cause a crash when run during an interpreter catch-up in the middle of the background DRC checker.
  62. April 30, 2010 at 2:40am
    Corrected X11/OpenGL graphics to prevent the backing store mechanism from crashing when using multiple windows (multiple calls to free grXcopyGC). Thanks to Philippe Pouliquen for identifying the problem and sending a patch.
  63. May 3, 2010 at 2:40am
    2010-05-02 06:41 tim Extended the bloat-or function to make use of the "grow-euclidean" option. This is dreadfully slow, but it works.
  64. May 4, 2010 at 2:40am
    2010-05-03 08:02 tim Corrected an error with the nonmanhattan paint function in which two adjacent nonmanhattan tiles can be merged. It was thought that this was a non-occurrance, but it happens during plane fracturing.
    Also: First cut at a routine to merge non-manhattan tiles back into the plane in such a way as to minimize the number of non-manhattan tiles in an area. This can be used either on a per-tile basis, or per-plane. For instance, it can be used after a CIF plane generation to clean up any fracturing caused by boolean operators. Currently it is only applied to the paint and splitpaint commands, and file loads.
  65. May 5, 2010 at 2:40am
    2010-05-04 11:40 tim Another correction, on the non-manhattan bloat-or function, where calculation on the corners of triangles causes the routine to generate zero-size errors to the paint function (which results in a corrupted tile plane, and may be fatal).
    Also: Corrected a few more errors and moved the unfracture routine to a CIF command option, since it takes rather a long time to run and does not reduce the output file size by enough to make it worth the extra time.
  66. May 12, 2010 at 2:40am
    2010-05-11 12:28 tim Implemented new code optimizing non-Manhattan geometry to maintain, if not the minimum number of non-Manhattan tiles required, then at least something very close. Code should probably be considered very unstable at this point until it has been in use long enough to check that all cases have been covered in the paint routines.
  67. May 14, 2010 at 2:40am
    2010-05-13 14:28 tim Added routine to scale CIF-GDS rules along with the grid scaling, a routing which was missing (same correction as was made to version 7.5).
  68. May 15, 2010 at 2:40am
    2010-05-14 11:57 tim Corrected an error in the euclidean distance DRC calculations that did not reset the flags for which corners to check, resulting in some very strange errors.
  69. May 19, 2010 at 2:40am
    2010-05-18 07:21 tim Unhandled case found in select enumeration of non-Manhattan tiles.
  70. May 22, 2010 at 2:40am
    2010-05-21 13:30 tim Corrected an error that crept into the paint code during recent work, that can cause an infinite loop during DBFracturePlane.
    Also: Corrected an error in the GDS/CIF polygon reading, which incorrectly computes the intersection of a polygon with the break-out triangle being analyzed in one case, due to a bad assumption about the geometry.
  71. May 27, 2010 at 2:40am
    2010-05-26 14:34 tim Final (I hope!) corrections on the non-Manhattan geometry paint routines. Magic version 8.0 now passes my worst polygonal torture test with zero errors.
  72. June 9, 2010 at 2:40am
    2010-06-08 12:16 tim So much for hopes about the last version of the non-Manhattan paint routines. The previous version indeed passed the non-Manhattan torture test. However, it was many times slower than the original version. This version combines parts of both the original and new algorithms to create one which maintains the speed of the original one and the correctness of the new one. Unfortunately, the tile fracturing is less optimal than the previous algorithm, but correctness will take precedence over efficiency of the database. There is room for changes to reduce unnecessary fracturing. The current version also implements an undo function for splitting and joining non-Manhattan fractures that ensures the reversibility of any action on the database involving non-Manhattan geometry.
  73. June 18, 2010 at 2:40am
    2010-06-17 06:00 tim Corrected the non-Tcl/Tk code for use with the vectored font code. It now compiles. Whether or not it works correctly is another question.
    Also: Corrected an error in which "expand toggle" would crash magic if a cell forced an internal database rescaling.
  74. June 25, 2010 at 2:40am
    2010-06-24 05:37 tim At last, added a usefully working cell manager, based on Tcl/Tk 8.5, with its built-in "ttk::treeview" widget. This cell manager implementation does not attempt to build the entire cell structure at once, and so does not incur huge delays as the former one did. It also does not attempt to record every instance; it will record the first instance of each cell when walking through the tree view, and when a cell is selected in the layout window, it will change the instance numbers to match the hierarchy of the selected cell. Also, added a primitive but workable text helper window for generating labels using the rendered-font labels new to magic version 8.0.
    Also: Modified the CIF euclidean distance bloat operation to match version 7.5, where the two versions differed, and magic-8.0 was crashing. I did not analyze the exact issue, but it seems to be resolved.
  75. June 26, 2010 at 2:40am
    2010-06-25 06:59 tim Corrected an error in which the GDS paint copy function ignored non-manhattan geometry, such that non-manhattan geometry would be lost when using the "gds flatten" option.
  76. August 10, 2010 at 2:40am
    2010-08-09 17:18 tim Corrected an error in which the hint tile of the cell plane ends up as one of the boundary tiles after expanding a cell with scaled subcells. Resetting the hint tile seems to solve the problem.
  77. August 11, 2010 at 2:40am
    2010-08-10 11:06 tim Left the distribution in an uncompilable state yesterday. This has been fixed.
  78. August 16, 2010 at 2:40am
    2010-08-15 07:35 tim Removed the call to DBUpdateStamps() from inside DBScaleEverything(). This command recomputes bounding boxes and can end up modifying the cell plane from inside a search on the same cell plane, with predictably disasterous results. Same change as made to version 7.5.
  79. August 23, 2010 at 2:40am
    2010-08-22 14:58 tim Corrected an error where nmPutNums() was not declared and therefore returns the wrong type in selOps.c.
    Also: Added new files ext2hier.c and ext2spice.h to the CVS database.
  80. August 24, 2010 at 2:40am
    2010-08-23 10:11 tim Added a forward declaration for extHierSDAttr() to prevent compile-time errors with the new ext2hier.c source file.
  81. August 26, 2010 at 2:40am
    2010-08-25 10:33 tim Fixed an error in the databases that can cause patches of layout to be missed when painting or erasing material near a split tile. Also: Introduced the first working version of a hierarchical SPICE output, good for generating decks to use with hierarchical LVS, such as netgen.
  82. August 27, 2010 at 2:40am
    2010-08-26 12:12 tim Added two missing files to the tcltk directory on the CVS server. Thanks to Oliver King-Smith for pointing out the problem.
  83. September 13, 2010 at 2:40am
    2010-09-12 13:32 tim Corrected a crash error in which a netlist-tool-based net search crashes magic immediately due to a missing argument in the call to the label search routine (which I modified some time ago). Thanks to Oliver King-Smith for pointing out the error.
    Also: Additional change to make the check on the first line of a netlist file case-insensitive. It really should be a much more relaxed check than it is. Generally speaking, it only reads netlist files it has written, but it is sometimes convenient to write them by hand, and getting the 1st line format exactly right is a pain.
  84. September 16, 2010 at 2:40am
    2010-09-15 08:45 tim Changed the techfile parsing so that for the cifinput/cifoutput sections, the grammatically correct "scalefactor 1 nanometer" will not be parsed as syntactically incorrect.
    Also: Correction that allows the connectivity search be called recursively without attempting to run multiple times on the same network, causing an infinite nesting of subroutine calls.
    Also: Corrected what must have been a rather long-standing error in version 8.0 that causes all sorts of trouble by not resetting the label-extended bounding box of a cell when the cell is cleared.
    Also: Another correction to scale the label-expanded bounding box in both the cell def and cell use when doing the "scalegrid" command.
  85. September 17, 2010 at 2:40am
    2010-09-16 14:33 tim Implemented new DRC option "exact_width" for the "surround" rule. This rule enforces both minimum and maximum value for the surround distance.
  86. September 21, 2010 at 2:40am
    2010-09-20 14:13 tim drc "extend" rule corrected, using a new technique to let the trigger rule mechanism compute extension of one type over another in different planes. The new technique also corrects the behavior of other trigger rules where the triggering edge may be longer than the area on which the triggered rule should search.
  87. September 25, 2010 at 2:40am
    2010-09-24 12:53 tim Corrected an error in the DBPaintPlane routine when "mark" is TRUE. This can cause the database to be corrupted when running the DRC check between subcells or between array instances, causing infinite loops or crashes.
  88. October 15, 2010 at 2:40am
    2010-10-14 14:55 tim Modified the transistor extraction routine to fix an original error that prevents correct substrate extraction if a transistor gate does not consist of a single tile, and the substrate node does not completely cover the transistor. This is a rare condition, but should not be ignored.
    Also: Correction to the original commit, which did not return NULL as is should in the case of finding no substrate type.
  89. October 20, 2010 at 2:40am
    2010-10-19 09:01 tim Modified the previous transistor extraction algorithm so that in the standard case of a single tile transistor, it will skip the plane search, which will keep the extraction time nearly the same as before for most extractions.
  90. October 21, 2010 at 2:40am
    2010-10-20 05:04 tim Removed drcCifScale(); drc-cif rules are in centimicrons and don't need to be scaled with the database.
    Also: Okay, axe that last change from yesterday. CIF-DRC rules do need to be scaled, but they need to be scaled from inside the scaling routine for the cifoutput rules, not the scaling routine for DRC rules.
  91. October 23, 2010 at 2:40am
    2010-10-22 08:02 tim Corrected a bad longstanding error in mzNumLine.c where an allocated block of an array of ints was mistakenly allocated as an array of bytes. Also, corrected a recent error where trans_SDtypes was not initialized.
  92. December 14, 2010 at 2:40am
    2010-12-13 14:02 tim Corrected the substrate extraction code again; this time, because magic cannot differentiate between different substrates under multiple devices electrically connected in parallel (such as capacitors). Reverted to a method that is more like the original (checks for substrate under each transistor), but put this inside the loop that searches for all tiles beloning to a transistor/device. It saves the substrate node in the transistor record, and uses this value when generating device output.
  93. December 17, 2010 at 2:40am
    Made corrections to the hierarchical ext2spice; it now generates correct netlists for standard-cell designs (have not tried examples with connections more than one level deep in the hierarchy).
    Also: Corrected hierarchical spice deck writing with respect to arrayed instance and with respect to connections made to levels deeper than the next level of the hierarchy.
    Also: Correction to extraction tile perimeter walk, to avoid splitting a node where two non-manhattan tiles join at a corner, where both tiles have been processed before. Such tiles effectively pinch off the node as seen by the walk algorithm. Solution is to process non-Manhattan tiles twice, reassigning them to each node region. Each one ends up assigned one of the two regions, randomly, as before, but ensuring that all tiles in a node get processed.
  94. December 23, 2010 at 2:40am
    Corrected a GDS output error in which magic generates output from its own database for a cell placed (manually) inside a vendor GDS cell which itself points to a nonexistant GDS file. A rare error, but one that produces very bad output. Changes correspond to change made to the magic-7.5 database.
  95. April 26, 2011 at 12:36pm
    Corrected an error with the basic extraction: The "hairy case" (ExtBasic.c line 3000 or so) looks for connecting types on other planes. This requires extending the bounding box of the tile by one in all directions. For non-Manhattan tiles, the resulting search must be done on the resulting expanded TRIANGLE using DBSrPaintNMArea(), NOT the expanded rectangle, which can accidentally cause an extraction short to a type that bounds the split tile on its "empty" side. This occurs in rare occasions, usually where a metal route takes a 45 degree bend around a contact, and will short the route to the contact.
    Also: Attempting to fix the git database. . .
  96. May 26, 2011 at 2:40am
    Patches to configure.in and makedbh by David Fang to avoid problem of "echo -n" on systems that do not support that option.
  97. June 10, 2011 at 2:40am
    Corrected the default route width in DEF reads from 3 internal units to 3 lambda, so that the width scales with internal grid scaling.
    Also: Update at Thu Jun 9 07:01:15 PDT 2011 by tim
    Also: Merge branch 'master' into work
  98. September 27, 2011 at 3:00am
    Modified configure to allow option "--disable-modular" to avoid compiling ext2sim and ext2spice as external modules.
    Also: Update at Mon Sep 26 07:49:00 PDT 2011 by tim
    Also: Merge branch 'master' into work
    Also: Completed changes to make ext2spice and ext2sim internal commands and routines if the "--disable-modular" option is selected.
  99. November 25, 2011 at 3:00am
    Corrected the transistor extraction routine, which would not correctly compute width and length of snaked transistors and resistors for certain geometries where the bottommost segment was not at one of the device ends.
    Also: Update at Thu Nov 24 10:42:18 PST 2011 by tim
    Also: Merge branch 'master' into work
  100. March 7, 2012 at 3:00am
    Corrections to DRC error updates, which were being incorrectly parsed as subcell interaction errors and given a different area, where they were being deleted later.
    Also: Update at Tue Mar 6 11:48:02 PST 2012 by tim
    Also: Merge branch 'master' into work
    Also: Corrected an error with the multi-plane "surround" DRC rule, which was thought to be correct, but clearly wasn't. . .
  101. March 8, 2012 at 3:00am
    Corrected the minimum number of arguments to a "device" line in the extract file from 13 to 11. This allows the use of vertical diode devices, where the device has only two connections, one of which is a substrate type.
    Also: Update at Wed Mar 7 09:18:17 PST 2012 by tim
    Also: Merge branch 'master' into work
  102. March 23, 2012 at 3:00am
    Corrected an error with tile marking for DRC hierarchical copying that would mark merged tiles outside of the paint area which would then be missed when un-marking everything at the end of the routine, potentially causing spurious DRC errors.
    Also: Update at Thu Mar 22 11:40:25 EDT 2012 by tim
    Also: Merge branch 'master' into work
  103. March 27, 2012 at 3:00am
    Tracked down and corrected an error with resistor extraction that affects Intel processor target compiles only---apparent compiler error. Modified code to work around the bug.
    Also: Update at Mon Mar 26 17:47:43 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Cleanup of files that were not supposed to have been in the git repository.
  104. March 29, 2012 at 3:00am
    Correction to ext2spice to avoid accessing the device merge array after merging has been set back to "none" after being set to something else. Otherwise, an array underrun occurs. Also modified ext2spice so that if a cell which itself declares ports is extracted, it does not skip over the contents of the cell, but dutifully creates the netlist as it should.
    Also: Update at Wed Mar 28 17:59:14 EDT 2012 by tim
    Also: Merge branch 'master' into work
  105. March 30, 2012 at 3:00am
    Changed "u" to "p" in subcircuit area parameter value output, since the 1E6 scalefactor implied by "u" is squared when computing area, as pointed out by Mark Martin.
    Also: Update at Thu Mar 29 11:12:11 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Modified ext2spice behavior so that if a default substrate node is declared to be a non-global (e.g., "gnd"), then that node name will be declared as a port to the subcircuit during hierarchical spice extraction, and the same node name will be used on the top level. This is somewhat of a hack, but so is the concept of an implicit substrate node. It is necessary to ensure that the default substrate name does not conflict with any local node names. However, it does have the correct behavior in that a local name for a substrate, dropped into a subcircuit, becomes a local node in that subcircuit. Note: Still need to do: Pass any substrate node name all the way up the hierarchy.
    Also: Additional modification because I realized that the scmos tech allows different implicit substrate nodes for p and n devices, and these need to be properly sorted and made into subcircuit pins.
  106. April 19, 2012 at 3:00am
    As part of debugging a problem with the connect selection method, implemented a useful command option "select short ". This command option will search through an existing selection, find the shortest distance between the two (connected) labels, and replace the selection with the shortest path. This makes it very easy to trace shorts in a layout. Unfortunately, it doesn't help at all to debug the problem with the connect selection algorithm. . .
    Also: Update at Wed Apr 18 10:25:46 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Corrected a few errors in the short locator algorithm; seems to work reliably now.
  107. April 20, 2012 at 3:00am
    Corrected an error with connectivity searches on non-Manhattan tiles. Also, corrected an error in the Tcl script that prevented closing layout windows.
    Also: Update at Thu Apr 19 15:26:56 EDT 2012 by tim
    Also: Merge branch 'master' into work
  108. April 21, 2012 at 3:00am
    Changed default behavior to NOT compile ext2spice and ext2sim as independent loadable libraries. This has been having serious problems with newer versions of gcc, especially in the Ubuntu distribution. Also, cleaned up the scmos directory in the git repository.
    Also: Update at Fri Apr 20 10:13:27 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Removed some diagnostic print statements that got into the distribution by accident.
    Also: Corrected an error in the connection search for contact layers, which was missing a check for a contact type, thereby often not selecting certain contacts during a net connectivity search.
  109. April 25, 2012 at 3:00am
    Change to force checking of minimum number terminals for all devices except subcircuit and rsubcircuit in ext2spice. Also, corrected memory allocation for the "maxrect" DRC function, which could cause program crashes. The code was correct in version 7.5 but incorrect in version 8.0.
    Also: Update at Tue Apr 24 12:12:40 EDT 2012 by tim
    Also: Merge branch 'master' into work
  110. May 18, 2012 at 3:00am
    Argh! New gcc breaks cpp behavior wrt backslash-newline! Still hacking on scmos.tech which should have been switched to M4 a long time ago. This hack uses "sed" to convert backslash to double-backslash so that the preprocessor passes the backslash to the output instead of (unfortunately) breaking input into two lines where one was intended.
    Also: Update at Thu May 17 14:44:57 EDT 2012 by tim
    Also: Merge branch 'master' into work
  111. September 10, 2012 at 3:00am
    Update at Sun Sep 9 15:44:09 EDT 2012 by tim
  112. September 18, 2012 at 3:00am
    Modified the backing-store mechanism under OpenGL to use the OpenGL back buffer for backing store, instead of copying between the X11 window and a pixmap. This allows backing store to work on systems where the OpenGL bypasses the X11 mapping completely.
    Also: Update at Mon Sep 17 10:04:21 EDT 2012 by tim
    Also: Merge branch 'master' into work
  113. September 19, 2012 at 3:00am
    Correction to the configure script for OS X. Thanks to Ryan Schmidt of MacPorts for the patch.
    Also: Update at Tue Sep 18 08:00:59 EDT 2012 by tim
    Also: Merge branch 'master' into work
  114. September 22, 2012 at 3:00am
    Corrected symbol conflict between ext2spice and ext2sim
    Also: Update at Fri Sep 21 11:15:06 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Corrected a bunch of wrong usages of AC_ARG_ENABLE in the configure script
  115. September 23, 2012 at 3:00am
    Applied a patch from Ryan Schmidt to replace the "macosx" definition with the externally-defined "__APPLE__". Also corrected a number of errors where non-void functions fail to return a value.
    Also: Update at Sat Sep 22 09:53:44 EDT 2012 by tim
    Also: Merge branch 'master' into work
  116. September 25, 2012 at 3:00am
    More function return-value cleanup.
    Also: Update at Mon Sep 24 19:15:44 EDT 2012 by tim
    Also: Merge branch 'master' into work
  117. September 30, 2012 at 3:00am
    Corrected a small error that allowed unknown layers to define LEF geometry, which would get copied with a negative layer type and cause trouble. . .
    Also: Update at Sat Sep 29 18:00:06 EDT 2012 by tim
    Also: Merge branch 'master' into work
  118. October 2, 2012 at 3:00am
    Cleanup of return-type compile-time warnings, and duplicate esDevsMerged declaration in ext2spice and ext2sim.
    Also: Update at Mon Oct 1 10:35:22 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Corrections to Cygwin, for compile time (finding Tcl/Tk when library files are named .dll.a), run time (Cygwin no longer sets TERM to "cygwin", or at least seems to have replaced the cygterm with a plain xterm), and for OpenGL using the WGL-enabled (hardware accelerated OpenGL) XWin server.
  119. October 3, 2012 at 3:00am
    Two corrections, one for proper startup under Cywgin and OS X, the other for proper operation with "-dnull".
    Also: Update at Tue Oct 2 17:47:09 EDT 2012 by tim
    Also: Merge branch 'master' into work
  120. October 7, 2012 at 3:00am
    Correction of launch script for Cygwin
    Also: Update at Sat Oct 6 13:25:29 EDT 2012 by tim
    Also: Merge branch 'master' into work
  121. October 12, 2012 at 3:00am
    Corrected an error with the CIF "94" and "9" commands and the new rendered label format that would cause a crash if the short form of "94" (no layer given, existing layer assumed) was used.
    Also: Update at Thu Oct 11 15:03:03 EDT 2012 by tim
    Also: Merge branch 'master' into work
  122. November 3, 2012 at 3:00am
    Revised hierarchical netlist output from "ext2spice" such that instance IDs are retained in the instance name passed to SPICE for the subcircuit. This will aid in cross-probing between netgen and magic for LVS purposes.
    Also: Update at Fri Nov 2 13:10:59 EDT 2012 by tim
    Also: Merge branch 'master' into work
  123. November 7, 2012 at 3:00am
    Corrections for OpenBSD compilation from Anthony J. Bentley. This includes a more proper handling of Tcl/Tk in the configure.in file, and removes a bunch of dubious in-line code from getrect.c that inadvisedly poked around inside the stdio FILE structure for what may have once been (but probably no longer is) a performance improvement on some systems.
    Also: Update at Tue Nov 6 16:54:14 EST 2012 by tim
    Also: Merge branch 'master' into work
  124. November 15, 2012 at 3:00am
    Corrected an error in the non-Tcl compile that was introduced by switching the Tcl compile to "disable-modular" by default. non-Tcl version now compiles without fatal errors.
    Also: Update at Wed Nov 14 09:16:51 EST 2012 by tim
    Also: Merge branch 'master' into work
  125. November 16, 2012 at 3:00am
    Corrected an error in which "lef read" would cause magic to crash if no technology file was read, or if the technology file was lacking any cifoutput styles.
    Also: Update at Thu Nov 15 13:25:58 EST 2012 by tim
    Also: Merge branch 'master' into work
  126. December 3, 2012 at 3:00am
    Corrected an error in the tile unmarking algorithm in which the last tile in the search path does not get unmarked.
    Also: Update at Sun Dec 2 17:22:23 EST 2012 by tim
    Also: Merge branch 'master' into work
  127. January 24, 2013 at 3:00am
    Added backslash preprocessing to cif_template/Makefile to work around a gcc preprocessor bug. Not certain that the change is actually useful.
    Also: Update at Wed Jan 23 12:43:50 EST 2013 by tim
    Also: Merge branch 'master' into work
  128. March 15, 2013 at 3:00am
    Corrected an extractor error when printing region information for a region that declares a non-Manhattan tile type at the region origin. This would create a crash condition.
    Also: Update at Thu Mar 14 15:20:50 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Ext2spice correction: Addition of hierarchical SPICE decks introduced the use of names instead of numbers after "X" for subcircuits. The full hierarchical name should have been used, not just the use ID name.
  129. March 16, 2013 at 3:00am
    Corrected a problem with commas from 2-dimensional arrays ending up in SPICE node names, where SPICE considers a comma to be a field delimiter. Also: Added an extension to the subcircuit parameter definition in the techfile to account for additional scaling inside the subcircuit.
    Also: Update at Fri Mar 15 11:34:50 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Added code to handle annular (ring) resistors.
  130. March 17, 2013 at 3:00am
    Corrected subcircuit output from ext2spice to avoid generating duplicate ports when the port has more than one label attached to it.
    Also: Update at Sat Mar 16 13:57:22 EDT 2013 by tim
    Also: Merge branch 'master' into work
  131. April 12, 2013 at 3:00am
    Expanded LEF file syntax to include reading POLYGON statements.
    Also: Update at Thu Apr 11 10:38:05 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Added FIXED to the pin properties handled by the DEF file reader.
  132. April 15, 2013 at 3:00am
    Corrected a segfault condition when magic is passed a graphics style file that is an older format.
    Also: Update at Sun Apr 14 10:11:08 EDT 2013 by tim
    Also: Merge branch 'master' into work
  133. April 25, 2013 at 3:00am
    Changes to several "drc" commands to return lists to Tcl/Tk, including "drc list find", "drc list count", and "drc list count total".
    Also: Update at Wed Apr 24 13:34:10 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Some changes to the DRC dump routine, uses hash table to hold lists of coordinates per error type, and these can be dumped per error type per cell. Tcl's handling of long list results is not particularly good. May add a version that dumps information directly into a file, later.
  134. April 27, 2013 at 3:00am
    Corrections from the Gentoo developers
    Also: Update at Fri Apr 26 15:38:36 EDT 2013 by tim
    Also: Merge branch 'master' into work
  135. April 30, 2013 at 3:00am
    Modified the parsing of the "lef" section of the techfile to include a statement "contact", which is similar to "cut", but will cause a LEF file read to replace any cut layer found in the input with a contact of the sort that magic usually defines (that is, a contact area to be filled with cuts according to a generate rule).
    Also: Update at Mon Apr 29 17:42:25 EDT 2013 by tim
    Also: Merge branch 'master' into work
  136. May 3, 2013 at 3:00am
    Corrected an error in which reading a DEF file does not register components' use IDs in the parent cell's hash table, resulting in the inability to find the cell use using "select cell".
    Also: Update at Thu May 2 14:43:58 EDT 2013 by tim
    Also: Merge branch 'master' into work
  137. May 7, 2013 at 3:00am
    Corrected the original graphics backing store behavior, which had become broken by the introduction of the OpenGL framebuffer backing store.
    Also: Update at Mon May 6 11:15:52 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Realized after some research that OpenGL framebuffers will not update properly underneath obscured parts of the window. The X11 pixmap buffering is restored as the default setting, while the OpenGL framebuffer can be used (with annoying restrictions like having to keep the layout window on top) with systems that can't handle the X11 pixmap buffering.
  138. May 8, 2013 at 3:00am
    This is a nonfunctional change, due to a reconfiguration step.
    Also: Update at Tue May 7 16:15:27 EDT 2013 by tim
    Also: Merge branch 'master' into work
  139. May 15, 2013 at 3:00am
    Made changes to attempt to overcome Magic's lack of handling labels that are attached to layers present in a subcell but not in the cell where the label resides. I believe that I have fixed this behavior with respect to circuit extraction. This behavior does not extend to the "getnode" command. The behavior always appeared to be correct for network connectivity selection.
    Also: Update at Tue May 14 14:23:36 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Some corrections to code for handling sticky labels during extraction; succeeds in extracting a fairly comprehensive test case.
  140. May 16, 2013 at 3:00am
    Implemented auxiliary methods to work with the improved handling of sticky labels. This includes the ability to read/write the sticky flag to database .mag files, a method to create a label with the sticky flag set using the "label" command, and a way to query both the sticky flag and the layer type of the label using "setlabel". Added widgets to the "texthelper" GUI window for both declaring the metal type to use and for setting the sticky flag.
    Also: Update at Wed May 15 13:12:38 EDT 2013 by tim
    Also: Merge branch 'master' into work
  141. May 17, 2013 at 3:00am
    Modifications to correct for sim file non-integer scalefactors confusing extresist. However, there are more things confusing extresist than this, but it's a start.
    Also: Update at Thu May 16 10:33:32 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Corrected an error with the extresist options that would cause the options to get thoroughly messed up if any option was explicitly set or changed.
    Also: More corrections related to non-integer lscale in .ext file. This had been handled incorrectly with the Transform for all device visits in ext2spice and ext2hier. It is now correct, although numerous instances of type re-casting from integer to float and back exist throughout the ext2spice and ext2hier code and should be checked carefully.
  142. May 18, 2013 at 3:00am
    Corrected a minor issue where the extraction would send output to the xterm terminal rather than the tkcon console.
    Also: Update at Fri May 17 12:15:54 EDT 2013 by tim
    Also: Merge branch 'master' into work
  143. May 21, 2013 at 3:00am
    Found an unhandled issue with sticky labels: If a sticky label was outside the DRC interaction area of all paint (in the same cell), then it would be missed. Added a label check, and all is well now.
    Also: Update at Mon May 20 19:31:59 EDT 2013 by tim
    Also: Merge branch 'master' into work
  144. May 22, 2013 at 3:00am
    Corrections to GDS read to eliminate empty labels, and to generate better output for labels being modified. Added the ability to write a ".global" card on hierarchical ext2spice output, so that global substrate nodes are not represented as local nodes in each subcircuit.
    Also: Update at Tue May 21 17:36:11 EDT 2013 by tim
    Also: Merge branch 'master' into work
  145. May 23, 2013 at 3:00am
    Corrected an error in the GDS read that prevents the "post-order" read-in from working correctly under certain rare circumstances.
    Also: Update at Wed May 22 13:14:58 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Quick correction to the post-order reading patch.
    Also: Corrected a (rare) crash condition in ext2hier
  146. May 25, 2013 at 3:00am
    Set of patches from Bernd Jendrissek; fixes a number of places where 64-bit pointers were handled incorrectly; also fixed the mess I made of the ext2spice print statements while fixing the non-integer scale error a few days ago.
    Also: Update at Fri May 24 20:12:07 EDT 2013 by tim
    Also: Merge branch 'master' into work
  147. May 26, 2013 at 3:00am
    Corrected an error in hierarchical spice extraction that would fail on arrayed instances in the middle of a 3 or more deep hierarchy. Also, corrected the output of the ".global" statement in hierarchical spice output to convert a TCL variable name to its value in the list of global variables.
    Also: Update at Sat May 25 13:24:18 EDT 2013 by tim
    Also: Merge branch 'master' into work
  148. May 30, 2013 at 3:00am
    Change to magic's hierarchical ext2spice to avoid writing the same node name twice in a subcircuit's port list. Not sure this is advisible. . .
    Also: Update at Wed May 29 18:02:18 EDT 2013 by tim
    Also: Merge branch 'master' into work
  149. May 31, 2013 at 3:00am
    Extended extflat flags to include converting "=" in node names, so that other tools do not confuse the node names with parameters.
    Also: Update at Thu May 30 14:45:23 EDT 2013 by tim
    Also: Merge branch 'master' into work
  150. June 2, 2013 at 3:00am
    Corrections kindly submitted by Bernd Jendrissek to correct ext2sim to match changes in the arguments to calls made to EFVisitDevs() for use by ext2spice.
    Also: Update at Sat Jun 1 11:42:01 EDT 2013 by tim
    Also: Merge branch 'master' into work
  151. August 22, 2013 at 3:00am
    Removed an errant "-pg" that was in the tcltk Makefile, leading to the creation of a "gmon.out" file everytime magic is invoked using magicexec (e.g., "magic -noconsole").
    Also: Update at Wed Aug 21 12:54:52 EDT 2013 by tim
    Also: Merge branch 'master' into work
  152. August 30, 2013 at 3:00am
    Updated config.guess, especially for Cygwin on x86_64.
    Also: Update at Thu Aug 29 13:40:46 EDT 2013 by tim
    Also: Merge branch 'master' into work
  153. September 8, 2013 at 3:00am
    Correction to LEF read routine to properly parse quoted material.
    Also: Update at Sat Sep 7 19:24:45 EDT 2013 by tim
    Also: Merge branch 'master' into work
  154. September 13, 2013 at 3:00am
    Expanded the "CIFGetContactSize" function to include handling contacts formed by the "squares-grid" or "slots" operators.
    Also: Update at Thu Sep 12 07:33:19 EDT 2013 by tim
    Also: Merge branch 'master' into work
    Also: Modification to value where Arm compiler is confused about what constitutes a signed value.
  155. September 14, 2013 at 3:00am
    Modified code in ExtTech.c to work around a gcc compiler bug in which combining a result of atof() with a constant value (in this case, 1000) produces a NaN result on i686 processors with an FPU. Has not been an issue on 64-bit machines.
    Also: Update at Fri Sep 13 10:03:45 EDT 2013 by tim
    Also: Merge branch 'master' into work
  156. September 15, 2013 at 3:00am
    Discovered that drcAssign mapped arguments "dist" and "cdist" to type "short", incorrectly. Although distances don't usually exceed 16 bits, a minimum area DRC rule area value at a small feature size---like 0.18um using nanometer units for DRC rules--- can easily exceed this, and results definitely do not come out as expected. . .
    Also: Update at Sat Sep 14 14:08:09 EDT 2013 by tim
    Also: Merge branch 'master' into work
  157. September 24, 2013 at 3:00am
    Update at Mon Sep 23 22:18:32 EDT 2013 by tim
  158. October 1, 2013 at 3:00am
    Irrelevant change to config.status; supposed to be ignored. . .
    Also: Update at Mon Sep 30 11:44:38 EDT 2013 by tim
    Also: Merge branch 'master' into work
  159. November 5, 2013 at 3:00am
    Some changes to the "lef write" command to support writing of LEF macro libraries. Corrected LEF layer name output. Added "bound" keyword to LEF section to support boundary layers used to define a subcircuit boundary. Added command option "port makeall" to simplify the process of generating ports for a subcircuit, in case only normal labels are used to define the ports.
    Also: Update at Mon Nov 4 17:49:54 EST 2013 by tim
    Also: Merge branch 'master' into work
    Also: Syntactical correction to LEF layer definitions for "lef write".
  160. November 6, 2013 at 3:00am
    Improved the LEF write routine to first write the geometry for each pin into a yank buffer, and then copy the yank buffer to the LEF file output. This allows contacts to be pulled out of the metal route geometry, and the tile handling routines simplify the tile structure to its minimal form in the output file.
    Also: Update at Tue Nov 5 10:09:10 EST 2013 by tim
    Also: Merge branch 'master' into work
  161. February 11, 2014 at 3:00am
    Corrected an error in sprintf() writing an array out-of-bounds, as kindly pointed out by David Binderman.
    Also: Update at Mon Feb 10 09:10:28 EST 2014 by tim
    Also: Merge branch 'master' into work
  162. February 12, 2014 at 3:00am
    Some edits as a result of David Binderman's report on the results of running cppcheck on the source: Two failures to close an open file, and one string vector overrun.
    Also: Update at Tue Feb 11 09:32:08 EST 2014 by tim
    Also: Merge branch 'master' into work
  163. March 4, 2014 at 3:00am
    Corrected two errors preventing the non-Tcl version from compiling properly.
    Also: Update at Mon Mar 3 19:15:51 EST 2014 by tim
    Also: Merge branch 'master' into work
  164. April 17, 2014 at 3:00am
    Modified the DEF file reader to accomodate PIN statements that declare a pin placement before declaring the pin layer.
    Also: Update at Wed Apr 16 09:41:07 EDT 2014 by tim
    Also: Merge branch 'master' into work
  165. May 17, 2014 at 3:00am
    Corrected an error that causes mouse buttons to generate Ctrl-C interrupts. Possibly due to changes in Tcl/Tk version 8.6. Thanks to Jim Everitt for the bug fix.
    Also: Update at Fri May 16 12:12:59 EDT 2014 by tim
    Also: Merge branch 'master' into work
  166. May 17, 2014 at 10:21am
    Ah, that's where drc.tcl went. Will need to remove it. . .
    Also: Update at Sat May 17 10:16:22 EDT 2014 by tim
    Also: Merge branch 'master' into work
  167. May 17, 2014 at 10:24am
    Removed drc.tcl from the main directory, as promised.
    Also: Update at Sat May 17 10:24:32 EDT 2014 by tim
    Also: Merge branch 'master' into work
  168. May 27, 2014 at 3:00am
    Update at Mon May 26 09:55:08 EDT 2014 by tim
  169. May 28, 2014 at 3:00am
    Update at Tue May 27 19:10:18 EDT 2014 by tim
  170. May 30, 2014 at 3:00am
    Update at Thu May 29 10:52:48 EDT 2014 by tim
  171. May 31, 2014 at 3:00am
    Update at Fri May 30 14:41:22 EDT 2014 by tim
  172. June 1, 2014 at 3:00am
    Update at Sat May 31 14:50:55 EDT 2014 by tim
  173. June 28, 2014 at 3:00am
    Added ext2spice and ext2sim support for diodes with one terminal on a substrate plane.
    Also: Update at Fri Jun 27 15:16:14 EDT 2014 by tim
    Also: Merge branch 'master' into work
  174. June 30, 2014 at 3:00am
    Corrected an error in the automatic enumeration of ports that prevented numbered ports from being listed in a subcircuit's port list in SPICE.
    Also: Update at Sun Jun 29 10:54:04 EDT 2014 by tim
    Also: Merge branch 'master' into work
  175. July 1, 2014 at 3:00am
    Added a new extraction type "msubcircuit" for the purpose of dealing with MOSFET models that are subcircuits having the same pin order as the M record. Normally the gate node is used as the identifier by the "subcircuit" extraction type and is written out as the first pin of the device. But SPICE MOSFETs use the bizarre and unfortunate order of S, G, D, B. The "msubcircuit" extraction type preserves this ordering. Otherwise, it operates exactly like the "subcircuit" extraction type.
    Also: Update at Mon Jun 30 16:49:57 EDT 2014 by tim
    Also: Merge branch 'master' into work
  176. July 13, 2014 at 3:00am
    Implemented a new "surround" rule type "directional", which correctly handles cases in which a rule specifies an overlap that only needs to be on one side of any geometry outside corner. This rule usually applies to vias and allows a finer routing pitch. It can only be implemented using a triggered rule.
    Also: Update at Sat Jul 12 14:14:11 EDT 2014 by tim
    Also: Merge branch 'master' into work
  177. July 18, 2014 at 3:00am
    Implemented command option "drccheck" for "cif" and "gds" commands. This option defaults to true, but can be set to false to force cells read from a database to be assumed DRC clean. This prevents the DRC checker from being forced to check every single cell from a GDS read but does not, like the "readonly" option, make it permanently un-checkable.
    Also: Update at Thu Jul 17 09:46:43 EDT 2014 by tim
    Also: Merge branch 'master' into work
    Also: Changed the "drccheck" option to be the same for both the "cif" and "gds" commands, to avoid confusion.
  178. July 24, 2014 at 3:00am
    Corrected the "gds drccheck false" command option, which was not working because a CIF routine was called at the end of a GDS read and was checking the wrong option "cif drccheck". Took the opportunity to fix some instances where a GDS read reports "CIF" errors, and vice versa.
    Also: Update at Wed Jul 23 15:54:09 EDT 2014 by tim
    Also: Merge branch 'master' into work
    Also: Removed temporary files that should not have been copied to the git repository.
    Also: Updated the .gitignore file so those files will be ignored in the future.
  179. August 21, 2014 at 3:00am
    Corrected the "drc" command so that "drc list" or "drc listall" without additional arguments generates an error message rather than crashing magic.
    Also: Update at Wed Aug 20 09:18:47 EDT 2014 by tim
    Also: Merge branch 'master' into work
  180. August 28, 2014 at 3:00am
    Corrected the extraction of devices with shorted terminals (like varactors) so that the width is not double-counted.
    Also: Update at Wed Aug 27 14:56:24 EDT 2014 by tim
    Also: Merge branch 'master' into work
  181. August 30, 2014 at 3:00am
    Several corrections: (1) Changed "cif lambda in|out" to "cif scale in|out" because values returned are *not* in lambda! "cif lambda" retained so as to not break existing code, but returns a warning message. (2) "drc listall why" corrected to return error area positions in the coordinate system of the cell being checked. Comparing the check area in the top-level coordinate system vs. the error box in the local coordinate system probably was causing "drc why" to miss errors or report errors outside the check box. (3) Corrected an error that would cause the "edit" command to silently fail when a cell is not selected rather than return a "no cell selected" error message as it was supposed to.
    Also: Update at Fri Aug 29 10:04:26 EDT 2014 by tim
    Also: Merge branch 'master' into work
    Also: Implemented a more rigorous system for determining the file path of instances. Instances that are not in the same directory as the parent cell will be written out to the parent cell definition as "use " instead of "use ". This is intended to prevent confusion between multiple versions of a cell definition that are all in the search path.
  182. August 31, 2014 at 3:00am
    Extended the method for declaring parameters to pass to a subcircuit device (including rsubcircuit and msubcircuit) to include terminal areas and perimeters, a critical category of parameter types that was previously missing. This code does not address the additional problem of double-counting node parasitics.
    Also: Update at Sat Aug 30 15:25:57 EDT 2014 by tim
    Also: Merge branch 'master' into work
  183. September 1, 2014 at 3:00am
    Modified the generation of terminal areas and perimeters for extracted subcircuit devices so that they match the values calculated for the same devices if they are extracted as non-subcircuit devices (mainly mosfets), which includes Magic's usual method of avoiding double-counting, with or without evenly distributing such values among devices connected to the same node.
    Also: Update at Sun Aug 31 11:56:29 EDT 2014 by tim
    Also: Merge branch 'master' into work
    Also: Removed deprecated code.
    Also: Corrected an error in which I forgot the local unique usage of StrDup() and caused a double-free incident.
  184. September 3, 2014 at 3:00am
    Implemented the "tech layer revert" command option. The tech file can declare certain layers to be locked. Unlike previously, this information is saved. That way, processes can call the "tech layer unlock" command to access the locked layers, and do not need to track whether those layers were locked or unlocked prior to the process; the process just does "tech layer revert" at the end and the active layers return to the set declared in the tech file.
    Also: Update at Tue Sep 2 11:22:13 EDT 2014 by tim
    Also: Merge branch 'master' into work
  185. September 7, 2014 at 3:00am
    Corrected/added some entries in the mos 7bit and 24bit dstyle files to make them compatible with the OpenGL dstyle file.
    Also: Update at Sat Sep 6 11:26:53 EDT 2014 by tim
    Also: Merge branch 'master' into work
  186. September 8, 2014 at 3:00am
    Corrected parsing of the "msubcircuit" device, which was declaring that it requires only one terminal, leading to missing terminal records in the .ext file output, and, as a result, not enough pins for the corresponding FET call in the SPICE file output.
    Also: Update at Sun Sep 7 17:10:12 EDT 2014 by tim
    Also: Merge branch 'master' into work
    Also: Corrections to extracted output of subcircuit devices: Area and perimeter were both parsed from the .ext file and output incorrectly to the spice file. Both errors have been fixed.
  187. September 10, 2014 at 3:00am
    Corrected ext2hier, which was not able to generate parasitic cap values due to a missing printf format, and ext2spice and ext2hier, which were generating duplicate output of the source or drain parameter text for FET devices using the "msubcircuit" extraction method.
    Also: Update at Tue Sep 9 14:09:19 EDT 2014 by tim
    Also: Merge branch 'master' into work
  188. September 11, 2014 at 3:00am
    Corrected a small error with the pick tool in which "pick copy" would not reset the cursor position and thus could acquire a large offset between the cursor position and the position of the selection being moved.
    Also: Update at Wed Sep 10 17:39:57 EDT 2014 by tim
    Also: Merge branch 'master' into work
  189. September 12, 2014 at 3:00am
    Added a method, suggested by Miguel Eduardo Flores Gomez, to allow gate attribute text to be auto-incremented. Otherwise, gate attribute text on a device in a subcircuit that is used more than once will produce duplicate devices in the SPICE netlist when the circuit is flattened.
    Also: Update at Thu Sep 11 10:26:13 EDT 2014 by tim
    Also: Merge branch 'master' into work
    Also: Reconsidered the previous change, modified it so that the gate attribute is prefixed by the hierarchy path when generating the device name, ensuring that names are unique without the user specifically making it that way.
  190. September 13, 2014 at 3:00am
    Changed behavior of device merging to include "device msubcircuit" and "device rsubcircuit".
    Also: Update at Fri Sep 12 20:47:21 EDT 2014 by tim
    Also: Merge branch 'master' into work
    Also: Corrected device merges, which were succumbing to magic's sloppy function prototyping. However, the devMerge record was changed to keep length and width records as type float, since the usage has been to apply merges after scaling.
  191. September 16, 2014 at 3:00am
    Made a few changes to the macro parsing, including fixing a typo that for a long, long time had disabled multi-line macros by accident. The changes also include parsing key names that are surrounded by single quotes. Also, the wrapper now shows the cursor position in microns instead of lambda.
    Also: Update at Mon Sep 15 14:55:14 EDT 2014 by tim
    Also: Merge branch 'master' into work

Revision information on Magic version 7.5:

  1. Feburary 9, 2006
    Original version. The only difference between this and version 7.3 is a cleanup of some of the instructions, and removal of several unused experimental features (to improve stability of the product).
  2. Feburary 16, 2006
    Added new features to the technology file "drc" section:
    1. The ability to create multiple DRC styles, with the same format as "cifoutput", "cifinput", and "extract" styles.
    2. The ability to declare style variants for DRC styles, like "cifoutput", "cifinput", and "extract".
    3. A "scalefactor" line in the DRC style section that declares the scale of all distance units in DRC rules to be (lambda / scalefactor). So DRC distances can be given in fractional lambda (the scalefactor is needed because the distance values still need to be integers).
  3. Feburary 18, 2006
    Two minor bug fixes for setting grXscrn in grTk1.c, and forcing tkcon.tcl to be world readable/executable on install.
  4. Feburary 23, 2006
    Changed $CAD_HOME to be "$libdir" instead of "$prefix", to comply with distributions that want to define $libdir as /usr/share/. This means that by default, $CAD_HOME is now /usr/local/lib/ instead of /usr/local/.
  5. Feburary 24, 2006
    Changed $CAD_HOME to $CAD_ROOT so as not to conflict with previous distributions of Magic. $CAD_HOME is no longer used by Magic. Also: Changed man page magic.5 to mag.5 to avoid conflicting with an existing man page by that name, and added man page magic.1 to the list of installed files in Makefile (don't know why it was missing).
    Also: Added "$(DESTDIR)" to installation Makefiles so magic can be compiled in a sandbox using "make DESTDIR=staging_area install"
  6. March 14, 2006
    Corrections to the maxwidth and widespacing rules to match changes to version 7.4.7.
  7. March 15, 2006
    Minor correction to the CIF input code to prevent mishandling cells that are called prior to being defined, to match changes to version 7.4.8.
    Also: Removed tcl_precision from the wrapper script and changed the scripts to use the Tcl format function instead.
  8. April 3, 2006
    Corrections by Philippe Pouliquen for DRC handling of corner extensions.
  9. April 6, 2006
    Corrected the "make depend" to generate dependencies on ALL of the sources in the graphics subdirectory, not just the ones selected for compilation. Recreated the Depend files.
  10. April 7, 2006
    Extended the use of the "alias" keyword in the "types" section of the techfile to include single-layer aliases, equivalent to adding the alias name to the list of names that define the layer in the first place.
  11. April 10, 2006
    Corrected round-off errors in the LEF read routines. Thanks to Frank Lien for identifying the error.
  12. April 7, 2006 at 2:50pm
    Further refinement of the use of the "alias" keyword: Labels placed on an alias layer in an input .mag file will be re-assigned to the first real layer defined by the alias.
  13. April 13, 2006 at 9:06pm
    Corrected the DEF read code (thanks to Frank Lien for bringing the error to my attention) to correctly generate the reverse mapping table for mapping LEF layers to magic layers.
    Also: Fixed Philippe's changes to the DRC code so that it now (again) correctly computes the widespacing rule.
  14. May 7, 2006 at 9:09pm
    Corrected an error in the DEF read/write code in which the reverse lookup table for mapping LEF layers to magic layers was incorrectly mapping lef via layers to magic routing layers.
    Also: Corrected Philippe's changes to the DRC code to let the code correctly compute the widespacing rule, as it used to.
    Also: Corrected a crash condition that occurs when attempting to execute certain commands on a non-editable cell (copy, move, stretch, etc.). Thanks to Eric Work for helping to debug this error.
    Also: Fixed 64-bit warnings about integer/pointer conversions
    Also: Automated packaging and rpm building directly from CVS Build an RPM: make distclean; make dist; rpmbuild --clean -ta magic-*.tgz
    Also: Didn't quite patch right the first time
    Also: Fixed 64-bit warnings only in magic 7.5
    Also: Applied clean-ups and updates to match recent fixes in magic 7.4
    Also: Fixed fPIC problem on cygwin
    Also: Fixed .spec file dependencies
    Also: Updated 64-bit patch to match magic 7.4
    Also: Changed tile.h to increase the value of INFINITY (although this did not actually fix my problem, it needs to be done anyway). Also, added a search path for Tk that is compatible with Ubuntu Linux. Thanks to Osei Poku for the patch.
  15. May 10, 2006 at 2:40am
    Fixed error that crashes magic when attempting to print the contents of a macro that has been set to an empty string.
  16. May 12, 2006 at 2:40am
    2006-05-11 22:19 tim Corrected the long-standing error in which labels randomly are turned into ports. This was caused by a type mismatch between the Label and labelUE (undo record) entries for label position and type.
    Also: Made changes to allow the "scale" value in the extract section to be set to a non-integer value, so that values under 1 centimicron can be represented. This is necessary for proper extraction in 130nm and 90nm technologies, or for any value of magic internal units (e.g., after scaling) which is not an integer number of centimicrons.
  17. May 13, 2006 at 2:40am
    2006-05-13 00:36 tim Added sanity checking on the number and total length of the command line arguments in TxTclDispatch (i.e., the lack of checking only applies to the Tcl version). Raised the maximum number of command arguments to 200, because scripts can generate some pretty long commands (for example, "polygon").
  18. May 24, 2006 at 2:40am
    Added an alternative definition for roundf() to allow compilation under Solaris, which doesn't have it. Changed one of the makefiles which may or may not cause Solaris to properly generate the correct symbolic link to readline. My guess is, probably not.
    Also: Added command options "cursor [internal | lambda | user]" to allow the cursor position to be specifically reported in the indicated units. Changed the returned cursor position to snap according to the current snap setting. Corrected the wrapper to place the crosshair according to true (internal) units, so that the crosshair is correct when the grid is scaled.
  19. May 27, 2006 at 2:40am
    2006-05-26 15:55 tim Restored a critical line that went missing in the DRCextend.c file; otherwise, magic goes into an infinite loop on a drc "area" operation.
    Also: Changed man page Makefile to work correctly when $DESTDIR is defined.
  20. June 14, 2006 at 2:40am
    2006-06-14 00:13 eric Minor clean-up of build files
  21. June 17, 2006 at 2:40am
    2006-06-16 09:16 tim Added window manager handling for closing the 3D window, so that the magic window is properly closed when the window manager kills the window. Otherwise, magic can segmentation fault (error reported by Oliver Banzhaf).
  22. June 20, 2006 at 2:40am
    2006-06-19 07:00 tim Added lib64 to search path for Tcl/Tk in the "configure" script.
    Also: Regenerated the "configure" script from "configure.in".
  23. June 24, 2006 at 2:40am
    2006-06-23 12:36 tim Added handling of variables $Opts(callback) and $Winopts(frame, callback) to take care of the case that a certain setup procedure needs to be called upon the creation of a window. For example, if one wants to set a grid, or turn on the crosshair, etc., it cannot be done in the .magicrc startup script, because at the time the script is executed, no window exists. The last action of procedure openwrapper{} is to do "catch $Opts(callback)" and "catch $Winopts(${framename}, callback)". So one can, for example, write "set Opts(callback) {grid 2 ; snap grid}" in the .magicrc to ensure that each window appears with a grid spacing of 2.
  24. June 25, 2006 at 2:40am
    2006-06-24 18:55 tim Corrected the "save" command so that it operates correctly when using the command to rename a non-edit cell to a different name. Previously such an attempt would crash magic.
  25. July 10, 2006 at 2:40am
    2006-07-09 09:05 tim Added DRC extension that lifts the restriction that "spacing" rules with "touching_ok" must have both layers in the same plane. This is a very useful rule extension, and allows the DRC to distinguish between, for example, ndiff inside or outside an nwell, or distinguish between types of contacts used with generic contact cuts.
    Also: Redesigned the new spacing rule so that it requires the keyword "surround_ok", since mere coincidence doesn't satisfy the rule. May need to change the definition or allow "coincidence_ok" and/or "overlap_ok" to cover such situations.
  26. July 14, 2006 at 2:40am
    2006-07-13 16:35 tim Changed the code that handles GDS read-only cells so that 1) it doesn't crash if GDS_FILE is defined but GDS_START and GDS_END are not, and furthermore, 2) having GDS_FILE set but no GDS_START and GDS_END defined produces a GDS output in which the cell in question is instanced but not defined. This method can be used in conjunction with Cadence PIPO stream in with the option "Retain Reference Library" set to port layout between Cadence and Magic without having Cadence generate local copies of all the library parts.
  27. July 15, 2006 at 2:40am
    2006-07-14 11:34 tim Corrected an error in the Tcl wrapper script that generates an error message if the Opts(callback) variable is not defined.
  28. July 26, 2006 at 2:40am
    2006-07-25 12:10 tim Initial changes to the router code. Corrected errors arising from internal rescaling: Global pointers to planes in the maze router needed to be reattached (dangling pointer error), and the scaling of router parameters (e.g., route layer widths) was inverted (usually causing the route widths to become zero).
  29. July 28, 2006 at 2:40am
    2006-07-27 09:29 tim Fixes to the router code, adding necessary function prototypes and fixing problems due to the difference between "double int" and "double long" types in the heap routines. Thanks to Michael Godfrey for investigating the problems.
    Also: And one more minor fix to the prototype declarations in heap.h.
  30. July 29, 2006 at 2:40am
    2006-07-28 08:57 tim Major, major changes to the router code in Magic. Reorganized the initialization routines for the routers so that they are stable with respect to reloading technology files and rescaling magic's internal grid. Fixed the code that is exercised by the "tech drc ..." command, and used this code to set the maze router properties. Added a "tech drc surround" command option and associated code, which is currently not yet attached to the maze router initialization (but will be done soon). One side effect: The "plow" rule setup has been removed, so the "plow" function is temporarily disabled, until I can put them back in, based on the "tech drc" code.
    Also: First important change to the Magic mazerouter: Prevented the maze router from registering blocks for routing layers in non-interacting planes. This single change has a SIGNIFICANT impact on router results. More to be done, though. . .
    Also: Fixed the "other" error in the maze router, which is that a cast to double long was fouling up the arguments to mzExtendInitPath(), causing the maze router to completely lose track of any tiles at the start point.
  31. July 30, 2006 at 2:40am
    2006-07-29 16:03 tim Next router refinement: Corrected maze router to distinguish between contacts that are ABOVE the destination pin vs. those that are BELOW the destination pin. Otherwise, it just uses the first contact type that connects to the current route layer, without regard to whether or not it connects to the destination layer!
  32. August 1, 2006 at 2:40am
    2006-07-31 09:00 tim 1) Returned the OpenGL grid drawing to the original version, since I don't have time right now to work on the "fading grid" algorithm. 2) More refinements of the maze router.
  33. August 2, 2006 at 2:40am
    2006-08-01 15:43 tim Corrected a yet subtler error in the maze router in which marked tiles were not cleared between marking the route start and end points, so that if the route started and ended in different instances of the same cell, the destination connected area could get truncated or even completely lost.
    Also: Reverted the "route" router to the traditional behavior. The "new" code allows the maze router to draw stems to connect to internal pins, which lifts the restriction that pins must be on the boundary of a cell for the router to be able to reach them. However, the maze router still has unsolved problems and uses different parameters from the technology file, so it can't be assumed to be a replacement for the simple stem router. Therefore, the option "router mazestems" enables the new code (with the internal pin stem router), while the default behavior is the original one.
  34. August 14, 2006 at 2:40am
    2006-08-13 14:41 tim Corrected the magic-to-screen coordinate conversion so that large coordinates don't overflow. Changed (dlong)(a * b) to ((dlong)a (dlong)b). Thanks to Mark Martin for pointing out the error.
  35. August 21, 2006 at 2:40am
    2006-08-20 16:38 tim More corrections for the maze router. There are still instances where the router goes berzerk, but these are becoming rarer. Reduced the size of the maze router paint tables, which were sized at TT_MAXTYPES x TT_MAXTYPES even though they use no more than about a dozen types. The router has successfully routed a simple test case in which it routed a whole netlist with single point-to-point routes using a simple TCL script.
  36. August 23, 2006 at 2:40am
    2006-08-22 16:13 tim More corrections and one major addition to the maze router. The addition is to add to the technology file format for mzrouter layers an "overCost" defining the cost of routing a layer directly over an adjacent route layer. The result is that Magic avoids routing directly over other pins and other obstructions unless it finds no other alternative. The result is that Magic's maze router results are much improved and tend not to block unrouted pins.
    Also: Added the script mazeroute.tcl to the source distribution. This routing defines the Tcl procedure "mazeroute ", which attempts to route a netlist using only the maze router.
    Also: A couple of additions to allow the Tcl version of magic to automatically read in the mazeroute.tcl script and make the "mazeroute" command available.
  37. August 26, 2006 at 2:40am
    2006-08-25 09:18 tim Minor cleanup of the mazerouter code (mostly eliminating diagnostic messages). Also, changed "hnvdiff" to "hvndiff" in mos.24bit.dstyle, as pointed out by Erwin Prinz.
    Also: Added script "mazeroute.tcl" that allows a more involved interactive rip-up and reroute maze router with a (1st attempt) GUI.
  38. August 27, 2006 at 2:40am
    2006-08-26 13:16 tim Yet more changes to that pesky maze router.
    Also: Additions and corrections to the interactive maze router GUI. Added return codes to the iroute command so that the interactive maze router can tell what's going on.
  39. September 2, 2006 at 2:40am
    2006-09-01 11:37 tim Fixed error pointed out by James Stine in which "ext2sim" does not set parasitic resistor and capacitor thresholds based on the "-R" and "-C" options passed to "ext2sim" on the command line.
    Also: Corrected proto.magicrc.m4 so that M4 correctly generates the right result when USE_NEW_MACROS is not set. Thanks to James Stine for the bug report.
  40. September 14, 2006 at 2:40am
    2006-09-13 14:02 tim 1) A few more changes to the maze router, especially to add a timeout function to the "iroute" command, so that failing routes do not hang the program and require a Ctrl-C delivered to the terminal, and 2) Correction to the routine that finds minimum width and spacing rules from the DRC tables. "widespacing" and "maxwidth" rules no longer mask the proper minimum tolerance rules. A more complete set of rule queries would be helpful.
  41. September 20, 2006 at 2:40am
    2006-09-19 13:56 tim Corrected a long-standing error in which the file descriptor opened by mkstemp() needs to be closed. Strangely, only Cygwin appears to care that "a" is open when doing rename("a", "b"). Possibly this has to do with the fact that the Windows filesystem doesn't implement files by inodes, but on the other hand, the man page for rename() claims that it will raise error EBUSY if either "a" or "b" is open.
  42. September 22, 2006 at 2:40am
    2006-09-21 14:12 tim Changed the "wire segment" routine (which also handles CIF and GDS paths) to handle paths with direction reversals (180 degree turns).
  43. September 23, 2006 at 2:40am
    2006-09-23 00:30 tim Corrections to the extraction method for "devcap" modeled capacitors, as shown in bug reports by Mark Martin. The simple 1-tile calculation was removed because the multi-tile calculation is more correct even for single tiles, since it computes L and W from the device boundary instead of estimating it from the area and perimeter values. The multi-tile calculation incorrectly output estimated width instead of estimated length. This has been fixed. The algorithm still computes the bounding box of the capacitor, then outputs the measured width and a length estimated from the total capacitor area divided by the measured width. This gives a result that is reasonably accurate given the brain-dead SPICE model for semiconductor capacitors as having parameters W and L instead of A and P.
  44. September 25, 2006 at 2:40am
    2006-09-24 16:35 tim Changed the "what" command to return labels along with their cell USES, not cell DEFS. With the change, it is possible to use the result of "what -list" to verify the validity of a routed network. Also: Added some routines to the mazerouter.tcl script, although as these have not been added to the GUI, they will not be immediately obvious. The gist of it, however, is to use the above change to the "what" command to verify each iroute result. One benefit is to read in a netlist and a partially-routed layout and automatically categorize the nets into routed and unrouted.
  45. October 5, 2006 at 2:40am
    2006-10-04 10:30 tim Changes to place the search for the round() and roundf() functions in the configure step, and to define them in utils/math.h if not available in the math library, instead of having definitions scattered through the code. This step fixes one compile error on systems (e.g., Sun) without the C99 math functions in libmath.
    Also: Corrected the scaling routing to properly set the MODIFIED flag if points were rounded when scaled, and to leave it alone otherwise. Thanks to Philippe Pouliquen for pointing out the error.
    Also: Fixed an error that failed to zero the layer mask assigned to an "alias" name, resulting in a random assortment of layers. Thanks to Marcus Escobosa for pointing out the error.
  46. October 10, 2006 at 2:40am
    2006-10-10 00:04 tim Changed the PNM plot command from "plot pnm " to "plot pnm ", with the 4th argument being the final width of the plot in pixels. This avoids the guessing game of what the plot size will be when using the scalefactor. Changed the maze router algorithm to allow routing inside start terminal connected areas with zero cost per length. The original algorithm forces the route to start on the lower left-hand corner of a tile in the start list, and route straight in any direction past the end of the start terminal area. This prevented the algorithm from starting a route in the middle of a long wire, even when that would produce the shortest route. The result is much better routing of networks of multiple nodes, such as clock networks.
  47. October 14, 2006 at 2:40am
    2006-10-13 08:27 tim Changes to "save" routine to match changes made to version 7.4: Does not create a temporary file if the file does not already exists, and otherwise, attempts the append-and-truncate method if creation of the temporary file failed.
  48. October 15, 2006 at 2:40am
    2006-10-14 14:52 tim Changes to the maze router; work in progress.
    Also: Maze router now exhibits, as far as I can tell, routes with no DRC errors other than those between tiles belonging to the route itself. Took a first stab at correcting the intra-route errors by making adjustments to the route prior to painting back into the layout. More of this work will follow. . .
  49. October 21, 2006 at 2:40am
    2006-10-20 21:36 tim 1) Yet more optimization on the maze router, resulting in some percentage fewer DRC errors when routing. 2) Corrected some startup procedures so that magic will come up without crashing if the startup script attempts to load a non-existant techfile. More corrections to make sure that even if it starts up, it won't immediately crash if the grid is rescaled.
  50. October 29, 2006 at 2:40am
    2006-10-28 21:25 tim Implemented new keyword "ignore" in the techfile "lef" section to allow certain layers in a LEF file to be ignored (such as the poly layer, if we have set up the maze router not to route in poly and want to avoid the extra geometry in the LEF views of the cells).
  51. November 2, 2006 at 2:40am
    Corrected some of the LEF and DEF reading routines such that 1) VIA definitions in a LEF file override any internal layer definitions from the technology file (instead of vice versa), and VIA definitions from a DEF file override any internal layer definitions (previously, VIA definitions in a DEF file were handled differently from those in the LEF file, which was just bad); and 2) VIA definitions attempt to better reflect the actual geometry vis a vis magic contact layer definitions by growing any contact cut layer to the minimum DRC clean dimension for a magic contact layer, when the LEF "cut" layer is mapped to a magic contact layer ("generic vias" which are not declared contact types also work; these layers are copied verbatim).
  52. November 3, 2006 at 2:40am
    Corrected an error in the DEF reader in which line extension values were being halved. Also---corrected the VIA reading routine so that when a via is redefined, it checks if other names are associated with that LEF layer. If so, it creates a new layer record for the redefined layer. Otherwise you can get into trouble, e.g., if "via1" and "via12" are both defined in the tech file as corresponding to the magic layer type "m2c", then the LEF file defines "via1" as a set of rectangles, one of which is type "via12".
    Also: Another correction to the LEF/DEF reader, to account for via definitions with multiple cuts (each cut layer is expanded to the size of a magic contact, independently). The routing now checks the size of the cut in the LEF definition against the size of a Magic contact cut and flags a warning if they are not the same.
    Also: Added a statement "gridlimit" (or just "grid") to the cifoutput section of the techfile. This defines a process's minimum grid resolution, in CIF/GDS units (i.e., centimicrons or nanometers). Magic's internal grid will not scale below (or to units which are not multiples of) this value. Note that the cifoutput "squares" function needs to respect this limit, but doesn't (probably "squares" should just be defined as "squares-grid" with grid=gridlimit).
    Also: 2006-11-03 02:40 tim
  53. November 4, 2006 at 2:40am
    First cut at cleaning up the parasitic capacitance definitions in the techfile by defining "default" cases for all capacitance types based on various sane assumptions. In a normal setup, this allows one to pretty much just copy down all the parasitic cap values from the electrical parameters spec sheet for a process without having to think too hard about it.
  54. November 5, 2006 at 2:40am
    Corrected "configure.in" to remove "-lGLU", which is 1) not needed, and 2) regularly causes compile problems.
    Also: 2006-11-05 02:40 tim
  55. November 6, 2006 at 2:40am
    Added more "obsmetal" styles to the styles section (including updating the 24-bit styles to match the OpenGL styles). Also, corrected a problem using aliases (need to check exact matches to existing type names, not the "smallest unique string" method usually applied).
  56. November 7, 2006 at 2:40am
    Corrected the "overhang" rule, which was not zeroing the "ok types" typemask, preventing the rule from working in most cases. Changed the behavior of the type name parser to accept plane-qualified aliases in the cifoutput section.
  57. November 8, 2006 at 2:40am
    1. Reinstated a line in the GDS write routing for vendor GDS files that somehow got deleted. 2. Changed tile deallocation calls to TiFree() from freeMagic(). 3. Changed the color of port boundaries from white to dark blue since white makes it REALLY difficult to see when something's highlighted.
    Also: Added new OS command-line options "-norcfile" and "-rcfile " to allow some control over what startup files are or are not sourced.
    Also: Changed the techfile format to forbid aliases in the "types" section from containing the wildcard "*" notation, since contacts are not defined in this section. Also, added an optional section called "aliases" that comes *after* the "contacts" section, which allows aliases to be defined using the wildcards.
  58. November 11, 2006 at 2:40am
    Added the statement "units microns" to the "extract" section of the techfile so that capacitance units can be entered in standard metric units (aF/um and aF/um^2) rather than in awkward lambda units. Also deprecated the size/ spacing/border values for vias in the extract section. The "extresist" code now uses the CIF/GDS generation rules to determine the number of contacts; the extract section line only pays attention to the via resistance (in milliohms/square). Note that none of these additions or changes has been tested yet.
    Also: 2006-11-10 16:35 tim Fixed crash situation when "drc euclidean" is specified with no 3rd option. Also, corrected read in of "cscale" in the techfile extract section, which is integer but was being read as type float (which is okay, but should flag a warning).
  59. November 15, 2006 at 2:40am
    2006-11-14 02:40 tim
  60. November 18, 2006 at 2:40am
    Changes to the DRC "width" and "surround" rule processing corrects missing rule checks for certain arrangements of stacked contacts.
    Also: Changed the "surround" rule to allow intersection between inside and outside types, on the reasonable assumption that for a rule like "surround m3c m3", another m3c should be allowed as part of the surrounding m3 material. Thus, the rule should be stated "surround m3c m3,m3c", and implies that m3c->m3c edges are ignored.
    Also: Changed the behavior of "squares" so that it automatically becomes "squares-grid" if the default grid (of 1) is less than the grid limit set by the (recently added) "gridlimit" statement. Changed the behavior of "squares-grid" so that it properly centers the via cuts while both staying on-grid and respecting the required borders. Previously "squares-grid" would start at the left- and bottom-most grid points past the border margins, which is DRC- correct but not necessarily centered.
  61. December 2, 2006 at 2:40am
    Made the maze router routing 64-bit clean. Note that any structure created in a 64-bit system is likely to be allocated to a 64-bit boundary. If the structure defines a number of bytes that is not a multiple of 64, then something must be done to ensure that the remainder bytes are not passed uninitialized to the hash function, or you can never find anything in the hash table!
  62. December 4, 2006 at 2:40am
    Corrections to the setup of the parasitic capacitance extraction tables for contact types. Contact types in statements like "overlap" and "areacap" are now ignored, with the tables being set up automatically for contact types based on the contact residues declared in the "contacts" section.
  63. December 6, 2006 at 2:40am
    Corrected another bug in the mazerouter that causes a segfault when a bad pointer is addressed before checking the boolean value that's supposed to indicate that it's a bad pointer. Also: Added command options "disable" and "enable" to the "undo" command.
  64. December 7, 2006 at 2:40am
    Changed the label layer reassignment algorithm to prefer contacting labels to layers that connect to other layers over layers that are electrically nonfunctional (such as comment, boundary, marker layers, etc.)
  65. December 8, 2006 at 2:40am
    Corrected an error in CIF/GDS output where results were improperly clipped because the clipping halo was not recomputed after scaling magic's internal grid.
  66. December 13, 2006 at 2:40am
    Added path-extension handling to the GDS read routine.
  67. December 21, 2006 at 2:40am
    Corrected a segfault when two labels with the same name are attached to the same piece of paint.
  68. January 5, 2007 at 2:40am
    Corrected an error in the drcWidth() routine that incorrectly computes the subset planes. Created a new routine "DBTechTypesOnPlane()" that replaces "DBTechSubsetLayers()", and is simpler. Due to the newer (magic 7.4/7.5) method of handling contacts, there are no separate layer images on different planes, and so DBTechSubsetLayers() always returns the same mask given it. Note that DBTechSubsetLayers should be replaced by DBTechTypesOnPlane throughout DRCtech.c. This has only been done in drcWidth(). This also involves a reorganization to work with mutiple matching planes to prevent missing DRC errors on stacked contact types.
  69. January 10, 2007 at 2:40am
    Corrected an error in the extraction method, in which capacitors defined with the original "fet" style double-count the area and perimeter of contacts by counting both the active and metal planes. The newer "device capacitor" method does not show this error. The change restores the backwards compatibility of the "fet" method for capacitors. This does not normally show up for transistors and resistors because most processes do not allow contacts on gates and active resistor areas. Thanks to Lloyd Clonts for the detailed bug report.
  70. February 4, 2007 at 2:40am
    Corrected window callback functions to, e.g., "eval $Opts(callback)". Otherwise the purpose for which this function was intended, i.e., to automatically add extra menu buttons and such without messing with the master wrapper script, can't be done.
    Also: Also, rearranged the menubutton bar so that it is a single frame, and other buttons can be added to it without the hassle of rearranging everything else on the top frame of the layout wrappper window.
  71. February 12, 2007 at 2:40am
    Added a Tcl file for helping manage process toolkits. A few command options have been added to aid with the toolkit, including the "cellname property" option (like the "property" command, but does not have to refer to the current edit cell). Also added the command option "snap list" to return (as a Tcl object, in the Tcl version) the type of snap.
  72. February 20, 2007 at 2:40am
    Corrected an error with a procedure call that was not updated when the number of arguments in the procedure was changed. This will cause Magic to crash when attempting to extract a resistor defined in the techfile with the "device resistor" construct.
  73. March 4, 2007 at 2:40am
    Extraction algorithm corrections for contacts, especially for side overlap calculations. Thanks to Emerson Vernon at Brookhaven Lab for providing a thorough test case.
  74. March 5, 2007 at 2:40am
    Modifications to ExtTech.c to correct the "defaultsideoverlap" method. Verified by checking against the Brookhaven test cases.
  75. March 19, 2007 at 2:40am
    Added the keyword "connect" to the parsing of layers by CmdParseLayers. When added to a string of layers, causes the parser to add in all layers connected to the set of layers previously parsed. For example, "select box metal1,connect" will select the box under the cursor containing metal1 or anything that connects to metal1.
    Also: 2007-03-18 11:39 tim Corrected the maze router helper window routines to correctly handle verification of groups of nets selected in the listbox (especially when verifying which nets are routed and which unrouted upon first read-in of the netlist).
    Also: Fixed the "slots" CIF/GDS operator to properly take 7 options on read-in of the tech file (parsing was correct, but it was flagging the use of 7 options as an error; I still need to determine why this rule seems to have been accepted and used, but not in its proper form).
  76. March 20, 2007 at 2:40am
    2007-03-19 15:23 tim Changed the slots generation function so that it observes the "gridlimit" setting.
    Also: 2007-03-20 02:40 tim
  77. March 25, 2007 at 2:40am
    2007-03-24 15:58 tim Added to the maze router the capability to handle non-square contacts. This is crucial for various processes, especially down around 180nm and smaller, which allow smaller margins on two sides of a contact cut with the restriction that the metal must extend further on the remaining two sides. This can be implemented with the "slots" function in cifoutput, and with one "width" plus one "area" rule in the DRC. section. The maze router now defines a "length" parameter which is assumed to be the longer dimension of the contact, and can be altered using the command option "iroute contact length ". Currently there is no method to put the length value directly into the technology file. Still need to handle the non-square contacts into the "route cleanup" routine.
  78. March 30, 2007 at 2:40am
    2007-03-30 00:07 tim Corrected an error in the DRC "surround" rule, pointed out by Mark Martin, that was caused by alternative processing of planes, implemented recently.
  79. March 31, 2007 at 2:40am
    2007-03-30 14:35 tim Corrected what was probably a long-standing error in which the selection command could hang if the selected area was a stacked contact type.
  80. April 21, 2007 at 2:40am
    2007-04-20 10:56 tim Correction to the code to avoid setting ti_client and other ClientData records to the value "MINFINITY", which is defined in terms of a 32-bit integer, and therefore can be one of two different values on a 64-bit system, depending on how it is cast. The primary failure appears to be in the comparison made in STACKPUSH, which affects the way both the DRC and the cifoutput routines are run on 64-bit systems. Thanks to Jeff Sondeen at ISI and Emerson Vernon at Brookhaven.
    Also: 2007-04-21 02:40 tim
  81. August 24, 2007 at 2:40am
    2007-08-23 09:39 tim Modified the path painting algorithm (for use with CIF and GDS path statement inputs, and the "wire segment" command). Previously, each path was broken into segments and each segment painted separately. This tended to cause plane fracturing at intersections of non-manhattan joins, often leading to a "preforated" line across the segment intersection (i.e., gaps). The new algorithm corrects this by computing a single polygon for the entire path.
    Also: Also: Corrected a different and fundamental error in the polygon tiling algorithm, which finds the maximum sized triangle that can be broken out of a polygon segment without any part of that triangle extending outside of the polygon boundary. To do this, it 1) checks for polygon segments intersecting the triangle boundary, and 2) checks for polygon points inside the triangle. It failed to consider that *both* checks might apply to a single segment, and that either the inside point or the intersection point might be the limiting condition.
  82. September 12, 2007 at 2:40am
    2007-09-11 15:00 tim Corrected the capacitance calculation for the micron-to-lambda conversion of extraction values when using the "units microns" feature. As written, the result was meaningless.
  83. September 27, 2007 at 2:40am
    2007-09-26 11:04 tim Added new option "gds merge [true|false]" along with an algorithm that converts groups of tiles in the database into polygons. This significantly reduces the size overhead of the GDS output file! I intend to make the gds merge option TRUE by default, once I have debugged the algorithm thoroughly and am sure that it is both bug-free and reasonably efficient.
    Also: Added removal of colinear points in non-Manhattan geometry.
    Also: Corrections to the GDS tile-merging algorithm. It could still use a lot of optimizing for speed-up, but at least it is now passing my test cases, writing and recovering entire chip databases.
  84. September 28, 2007 at 2:40am
    2007-09-27 09:25 tim Corrected a bug in the threaded, non-Tcl version in which pthread_cancel() is called on an invalid thread if no technology file was found. Basically this is a harmless "crashes on exit" problem but it is best to have it fixed properly. Thanks to Stefano Pedretti for the bug report.
  85. October 4, 2007 at 2:40am
    2007-10-04 00:03 tim Another modification to the path painting algorithm. This corrects for (1) instances in which points are duplicated, and (2) instances in which segments are very short in the middle of a bend, (usually) forming a wedge-shaped cutout in the path. It also corrects for the problem of paths whose final segment is too short (a common problem in Cadence, which doesn't bother to fix it at all).
  86. October 5, 2007 at 2:40am
    2007-10-04 15:19 tim More corrections to the path computation algorithm to handle problems caused by short path lengths. Noted a problem caused by an obscure roundoff that can produce non-45 degree geometry from 45-degree-only paths. This has not been fixed.
    Also: Added a "angles" rule to the technology file DRC section that allows each layer to be specified as restricted to orthogonal or 45-degree geometry. While working on coding this, I noted that several rules are tile-based, not edge-based, and might be best separated completely from the standard collection of DRC rules and placed in a separate array that is per tile type only, not per edge between tile types A and B.
  87. October 10, 2007 at 2:40am
    2007-10-09 12:00 tim Grid drawing changed so that it is not dependent on the pixel size of a display. Routines for Tk and X11 changed so that gridlines are drawn in multiple batches if necessary to complete the gridlines across the screen rather than attempting to define a single array to hold gridline segments and expecting it to cover every possible display size.
    Also: 2007-10-10 02:40 tim
  88. October 11, 2007 at 2:40am
    2007-10-10 11:59 tim I put the WRL CIF-DRC extensions back into magic-7.5, having removed them a while back due to the fact that they were way out of date and use of the extensions would cause immediate crashes. These rulesets are very important for implementing Calibre-style DRC decks. I will make some attempt to update the rules themselves to cover nonmanhattan geometry, implement widespacing, overhang, surround, etc., rules. Stay tuned.
  89. October 12, 2007 at 2:40am
    2007-10-11 10:23 tim Corrected the subcell overlap DRC error, which had been inadvertently disabled (for a rather long time!). Also removed dCD_which from the DRC arguments passed to drcTile, which was not being used.
    Also: Corrected the drcTechFinalStyle() routine such that stacked contact types are properly added to masks for all rules.
    Also: 2007-10-12 02:40 tim
  90. October 13, 2007 at 2:40am
    2007-10-12 15:14 tim Added DRCcif.c to the CVS distribution (oops!). Thanks to Ian Ferguson for pointing out the omission.
    Also: Corrected the DRC scalefactor to properly account for the "area" rule, which needs to have drcc_cdist adjusted by the scalefactor squared, since it represents an area, not a length. Also implemented fractional scalefactors at Jeff Sondeen's request (of fairly long ago). Although fractional scalefactors are not strictly necessary, they may be convenient for rescaling the entire DRC section without having to multiply up all the values. To get a scale factor of 0.5, use "scalefactor 1 2" (the same syntax used by the "scalegrid" command).
  91. October 16, 2007 at 2:40am
    2007-10-15 15:07 tim Corrected magic-7.5's transistor extraction with respect to non-Manhattan geometry. When non-Manhattan tiles are encountered, the diagonal split is ignored and the whole tile is incorporated into the transistor gate. Also, such transistors could fool Magic's extraction algorithm into thinking that the transistor's gate was a single tile and thus computing a wildly incorrect length and width. Instead, the more complex segment-matching algorithm previously reserved for annular devices has been promoted to the principal algorithm used for transistor extraction. Finally, one inaccuracy that tended to grab the inside-to-inside distance on a bent transistor as the transistor length was fixed.
    Also: Corrected the DRC scaling routine so that "maxwidth" rules round down, not up, as pointed out to me by Jeff Sondeen.
  92. October 17, 2007 at 2:40am
    2007-10-16 10:47 tim Added a "S" option to the existing "B" and "X" for describing styles in the "style postscript" subsection of the techfile "plot" section. The "S" option forces a "solid" style, for which the rendering is much faster than the solid stipple fill, which (in addition to being slow) has been reported to cause artifacts (white lines) under some conditions, apparently due to specifics of the postscript interpreter implementation, target device resolution, etc. The artifacts make "plot postscript" unusable for simple mask generation.
  93. October 22, 2007 at 2:40am
    2007-10-21 03:20 tim Made a change to the display routine such that the command "see no subcell" will prevent cell names and bounding boxes from being drawn. Otherwise, this statement has no apparent effect that I can tell.
  94. October 27, 2007 at 2:40am
    2007-10-26 11:41 tim Rewrote the temporary file handling so that it does not change permissions of the original file when writing .mag file changes back to disk.
  95. November 5, 2007 at 2:40am
    2007-11-04 22:59 tim This fix contains a fix for problems related to DRC checks on stacked contacts. It removes the awkward multiple-pass algorithm in drcTile() in favor of handling stacked contacts in the DRC rule tables. A large amount of code in DRCbasic.c and DRCtech.c was altered in this version, and one should probably not put too much faith in this revision until the DRC rules have been thoroughly checked. This fix also corrects errors in the extraction of connected regions containing non-Manhattan geometry, corresponding to changes made to Magic version 7.4.
  96. November 6, 2007 at 2:40am
    Added a correction by Bertrand Irissou to DRCcif to multiply centidistance by cs_expander to get the correct resulting scale factor. Also, added a fix to prevent a segfault when doing "getcell" in a read-only cell def. These two changes match changes made to the stable 7.4 branch.
  97. December 25, 2007 at 2:40am
    A very large number of changes. Most of the changes are the same ones made to the stable (7.4) distribution over the time period since the last 7.5 distribution was made. These changes were not checked in until completion of the new DRC code, which has not been thoroughly checked but at least is good enough for an initial rollout. Other changes include: addition of the name "magic_setup" in the current working directory as a non-hidden alternative to ".magicrc", and a check for geometry in all cells prior to loading a technology file, such that no warnings are printed (and no prompt given) in the case of loading a new technology onto an empty database. Finally, the "styletype" keyword in the techfile "styles" section now takes additional arguments providing one or more pathnames to search for the style, colormap, and cursor glyph files (with the built-in system path being default). The technology name is now printed in the titlebar of the GUI wrapper window.
    Also: First major correction to the new DRC code; re-implemented the "min set planes" routine, except that (1) it returns coincident planes (there may be more than one), and (2) it does not attempt to generate a new type mask.
  98. December 26, 2007 at 2:40am
    Removed a debug print statement from the CIF generation code.
  99. December 27, 2007 at 2:40am
    Another adjustment to the new DRC code, to move the addition of stacked contact types into DBTechNoisyNameMask, so that the stacked contact types are added properly for the various operators such as NOT (~) and plane qualifiers (/).
    Also: 2007-12-26 15:33 tim
  100. December 28, 2007 at 2:40am
    Corrected an error in the DRC spacing rule, in which the planes are swapped in the reverse case.
  101. January 2, 2008 at 2:40am
    Corrected a few more errors in the DRC rule generation of spacing rules (both touching_ok and touching_illegal cases).
  102. January 3, 2008 at 2:40am
    Changes to the configure scripts for proper handling of round and roundf functions, and the handling of libXi.
    Also: Implemented the "site.def" file for site-specific definitions that will not get overwritten by new installations of magic. Also, changed some configuration settings to deal with libXi and C99 round() and roundf() functions.
    Also: Implemented layer locking, where a layer definition in the techfile with a '-' before the plane name is locked, and cannot be modified.
    Also: Trivial implementation in preparation for a cell-locking feature.
    Also: A couple of minor modifications of extresist, plus added a flag for CIF output styles for a future implementation of a euclidean-measure grow operation.
  103. January 4, 2008 at 2:40am
    Re-implemented layer locking with only type masks.
    Also: Changes related to locked layers, which is still not correct. However, operation should not be affected when locked layers are not used.
  104. January 5, 2008 at 2:40am
    Minor adjustment between databases.
    Also: 2008-01-04 12:34 tim Implemented cell instance locking via the "instance lock" command. Locked cell uses are prevented from being moved, rotated, flipped, etc.
    Also: Fixes in the DRC area rule scaling to avoid overflow; another fix in the DRC area rule to properly restrict to the plane or planes coincident to all layers.
    Also: 2008-01-05 02:40 tim
  105. January 6, 2008 at 2:40am
    Corrections to layer and cell locking mechanisms.
    Also: Corrected the behavior of layer locking so that the treatment of contacts is now consistent (except for stacked contacts, probably).
    Also: Completed the Euclidean-distance CIF grow operator
  106. January 8, 2008 at 2:40am
    More corrections to layer locking (match layer locking from tech file input to layer locking from the command-line)
  107. January 17, 2008 at 9:22am
    Rather fundamental changes to the painting procedures in yet another attempt to make the painting and erasing of locked layers consistent. I no longer make any claims as to the correctness or stability of the code. It will probably take a few revisions to resolve the problems stemming from this mess. You have been warned.
    Also: 2008-01-09 20:06 tim Another valiant attempt to resolve all (or at least, most) problems with stacked contact types and painting/erasing/selecting/moving/stretching/etc. This involved some code changes to the ubiquitous DBCellCopyAllPaint, so some thorough checking will be necessary to ensure that this has not screwed up other features. This revision should be regarded as highly unstable!
    Also: Correction to plane mask returned by DBTechNoisyNameMask---this needs to be checked for its effect on DRC rules.
    Also: Correction to add stacked layers to types that are locked (and unlocked) by manipulating the erase tables.
    Also: Corrected display of stacked contacts. Added support for HPRTL and HPGL2 plot output
    Also: Correction to "plot versatec" defaults, and correction to manipulation of non-Manhattan selections. Both are known to still be buggy. Strong disclaimers still apply to this revision!
    Also: Corrected the non-Manhattan selection manipulation. Versatec plotting is still completely hosed.
    Also: Corrected the non-Manhattan raster plotting routines.
    Also: 2008-01-11 16:28 tim
    Also: Changed the behavior of "flush" so that it will reset the NOEDIT bit if the file has become writable. Changed the behavior of "edit" to disallow editing a file without write permissions (there should be some way to force that behavior, though. . .). Changed the raster plotting routine to handle "border" and "cross" styles correctly (more or less) with respect to non-manhattan geometry. Crosses are still drawn per-tile. All plot routines should have a "cut" style that paints contact cuts based on cifoutput rules. . .
    Also: Two important changes to the database paint and selection code: Selection translations correctly remove paint from non-edit cells for operations (move, flip, etc.) that require it, and the undo mechanism now remembers non-manhattan tile 4-way splits, preventing unnecessary tile plane fracturing when using the "undo" function.
    Also: Corrected the SelEnumPaint() function to what I suspected I would have to do from the beginning (after a number of failed attempts to make it a simpler problem), which is to clip a non-Manhattan tile against a Manhattan tile using GrClipTriangle(), and processing the resulting rectangles and triangle. Also, corrected the reporting of attempts to move paint in a non-edit-cell. This code should be considered highly suspect; although no errors have been found yet in the new selection code, there are many, many possible geometries to exercise.
    Also: Another small correction to prevent false reporting about attempting to move paint in a non-edit cell.
    Also: Corrected a DRC error in the post-techfile read-in cleanup routine, which was declaring illegal edges for rules with checks in planes that were not the plane of the edge. This caused many DRC rules to be systematically wiped out.
    Also: Corrected the GDS read routine so that it does not generate an empty cell with the name of the GDS library when importing 3rd-party GDS files.
    Also: Implemented PNM plot conversion to HPRTL format.
    Also: Changed "plot pnm" command to allow filename to be absent in the case of spooling an RTL file to a printer, in which case a temporary filename is created.
    Also: 2008-01-16 09:32 tim Added HPGL2 support for PNM-style plotting.
    Also: Simplified the HPGL2 raster plotting by using a CMY space instead of converting an RGB color space to CMY.
    Also: 2008-01-17 09:22 tim
  108. January 18, 2008 at 2:40am
    Corrected an error in DBEraseMask that prevents stacked contacts from being erased.
    Also: Changed the wire tool so that it is unable to paint locked layer types.
    Also: Corrected problems with printing of borders and crosses on non-Manhattan tiles.
    Also: Correction in definition of tile push function. Prevents errors when extracting non-Manhattan geometry.
    Also: Correction to "dump" and "getcell" to (properly) strip off any ".mag" extention given in the command-line. Also, correction to plotHP code to avoid problems with plotters that don't support a CMY plane-indexed mode.
  109. January 26, 2008 at 2:40am
    Corrected an error in the DRC section cleanup that causes edges to space to be declared "illegal edges" and improperly removed.
    Also: Corrected an improperly-applied patch that itself was meant to correct the translation of illegal characters in strings output to GDS files.
  110. January 29, 2008 at 2:40am
    Corrected an error in DRC that forced all planes of a contact to meet width rules when only one was intended. Also, began implementation of a rendered font mechanism. At this time, it is unfinished, but should not interfere with normal operation of Magic.
    Also: More work on the vector outline fonts. Rendering now works correctly in the OpenGL graphics environment, and a very preliminary X11 rendering routine has been added. Fonts now scale correctly with the window zoom factor, and the rendering can handle rotations. Non-convex polygon tesselations (apparently) fixed.
  111. January 30, 2008 at 2:40am
    Disabled the memory-mapped tile allocation routine until it can be determined why it goes into a runaway memory grab (seen when running the drc-cif routines; tiles allocated by CIFGen() do not get released).
    Also: Corrected the mmap problem, which was due to the use of mallocMagic() instead of TiAlloc() to allocate tile memory. The use of mmap has been reinstated.
    Also: Corrected selection moving and stretching with respect to "sandwiched contacts" (e.g., when the selection is a via that is in a stack of pc + via + via2).
    Also: Another change to tidy up the behavior of stacked contacts when selecting and moving or stretching stacked contacts containing residues that are locked.
  112. January 31, 2008 at 2:40am
    Corrected two more errors: 1) DRC still identifying improper "illegal edges", in this case where the type on the edge to search is TT_SPACE, in which case the ok_types mask does not need to have TT_SPACE set (the only exception). 2) The command "what" crashes on read-only cells under some circumstances. This error has been expunged.
    Also: More development on the vector outline font labels. OpenGL rendering essentially complete, except for clipping. Label font, rotation, size, and offset can be specified in the "label" line. All of this is still transparent to the end-user.
  113. February 1, 2008 at 2:40am
    Corrected an error in DRC scaling when scaling the grid to coarser levels that unfortunately can cause a divide-by-zero error and crash magic upon a command like "scalegrid 2 1" where the grid scale becomes coarser than the default.
  114. February 2, 2008 at 2:40am
    Corrected a bug that causes magic to crash when attempting to change the cell id ("identify" command) on any subcell of a non-writeable cell.
    Also: Corrected selection of non-Manhattan geometry to prevent crashes on copying non-Manhattan tiles in a Manhattan select area, and preventing spurious reports of moving non-Edit paint.
    Also: Corrected one other error that allows SelectClear() to not remove everything in the select cell. DBEraseMask needs to be replaced with DBErase, but the temporary hack should work for now.
  115. February 4, 2008 at 2:40am
    Making version 7.5 into the "stable" distribution. Removed all of the vector font-rendering code, which is now part of the "development" distribution version 8.0.
  116. February 7, 2008 at 2:40am
    Expanded upon scripted routines "pushstack" and "popstack" (">" and "<" macros) to avoid pushing into anything other than a child of the edit cell, and to avoid popping an empty stack.
    Also: Cleaned up some problems with selection and enumeration of labels when cells are read-only.
  117. February 8, 2008 at 2:40am
    Corrected an error in which running magic in batch mode with a read-only cell causes the edit cell to end up pointing to the initial empty "UNNAMED" cell rather than being set to NULL (because the loaded cell is not editable).
    Also: Corrected drcSpacing so that "spacing to" types with a mixture of different types on different planes does not cause Magic to place an illegal plane number in the DRC records and promptly crash when running DRC on any edge using that record. However, as now implemented, the DRC records are incomplete, so this still needs to be properly fixed.
  118. February 10, 2008 at 2:40am
    Corrected the DRC spacing rule to reinstate the ability to specify multiple layers on multiple planes in either of the two type lists "spacing from" and "spacing to". The recent changes to DRC initialization in magic-7.5 forced an assumption of each layer set being in the same plane. With no check of this, however, specification of layers in different planes would cause magic to crash.
  119. February 11, 2008 at 2:40am
    Removed instances of subroutine DBResidueMask() from inside "TTMask..." constructs; since "TTMask*" definitions are all repeated once for each mask byte, the subroutines were being called many times instead of just once.
  120. February 12, 2008 at 2:40am
    Corrected the DRCcif functions to match the changes to the arguments of drcAssign().
  121. February 16, 2008 at 2:40am
    Added some code that allows magic to determine from what window a command was executed if the command was entered by redirecting keystrokes into the terminal. Otherwise, magic will pass a NULL windowname to Tk and won't update per-window attributes such as the title bar.
  122. February 18, 2008 at 2:40am
    Changed SelEnumPaint so that selections created with "select chunk" do not pull "compatible" material from another cell into the selection.
    Also: Extended the aforementioned method for handling "select chunk" to similarly handle "select area ", such that material compatible with (but not included in) is not copied into the selection cell.
    Also: Corrected the "what" command to produce a unique list of subcells in which each paint type is found. Prior code only checked each subcell name against the previous one searched, so cells visited cyclically (typical for deep hierarchy) would be repeated for each occurrence.
  123. February 22, 2008 at 2:40am
    Modified DBLockCell to prevent attempts to lock a subcell of a non-edit cell (which should be effectively locked anyway, since the cell can't be edited). Otherwise, EditCellUse being NULL generates a segfault.
  124. February 29, 2008 at 2:40am
    Corrected multi-window behavior so that captions always get updated in all windows. Switching the edit cell to a new window will now cause the non-focus window to display [NOT BEING EDITED] in the title.
    Also: Modified the "load" command so that it strips all path information from the cell name when creating a new cell. If the cell exists, then the path information is used to confirm whether or not the new name and the existing cell point to the same file (using inodes). This ensures that all cells get unique names while also avoiding schizophrenic cells (can't have bipolar disorder in a CMOS technology!).
    Also: 2008-02-28 16:14 tim Corrected the routine that processes pending events during DRC so that "undo" is not disabled while executing them. Otherwise the undo records get rather messed up.
  125. March 5, 2008 at 2:40am
    Corrected a problem in which ambiguous use of "space" in a DRC rule typelist is not parsed as intended. Magic version 7.5 has always made an exception for this questionable use, since it appears in a lot of old techfiles, and the newer DRC code broke the test for the exception.
  126. March 6, 2008 at 2:40am
    Corrected the paint and erase commands, which had been changed in a way that prevented them from painting or erasing the router fence, rotate, and magnet layers.
    Also: Modified the DBTechNoisyNameMask to check through the alias list. If a type alias maps to a single user type, then that type is returned. If it maps to multiple types, then return value -1 (ambiguous layer) is set.
    Also: Corrected an error in the mazerouter that causes segfaults due to resetting tile clientdata records on tiles that have been freed. Would be nice if this were the last segfaulting error in the mzrouter code. . .
  127. March 7, 2008 at 2:40am
    Corrected the mazerouter in a different way, so as not to completely remove the marked tiles. However, it is duly noted that it is improper to mark tiles in each subcell and check them during a tree search, since the source and destination areas are then marked in every instance of any subcell. This is a possible explanation for various failures to route otherwise apparently routable paths, but will take some extended effort to fix.
  128. March 18, 2008 at 2:40am
    Corrected an error in the CIF polygon read routine (uninitialized variable that may end up giving polygon points random values, depending on the specific compiler and CPU). Also, changed the wrapper script so that the window menu used by cellmanager is available to any window that wants it (change in organization only).
    Also: Implemented an ad-hoc solution to the problem of a worst-case-scenario geometry for chunk selection. Such a geometry, caused by stair-stepped material at unit-length steps, proves the chunk selection (maximum-size rectangle finding) algorithm to be O(2^N)! The ad-hoc solution sets a recursion depth limit, ensuring that the algorithm finishes in reasonable time (e.g., 1 second worst case on a 2 GHz CPU), and return whatever it has discovered so far, even if the final answer is not maximum size. I could potentially add more kludgy ad-hoc additions to the algorithm, but I would prefer to see an implementation that is not O(2^N). . .
  129. March 31, 2008 at 2:40am
    2008-03-30 17:13 tim Corrected the euclidean-distance DRC checking, both to (1) fix a bug that missed checking one of four orientations, and (2) to include checks on non-Manhattan tiles that enter within the euclidean distance but do not have paint of the type that causes a DRC error within that distance.
  130. April 1, 2008 at 2:40am
    2008-03-31 12:30 tim Corrected a typo in the DRC enhancements from yesterday, which causes euclidean corner checks to be made in the wrong direction.
  131. April 18, 2008 at 2:40am
    2008-04-17 12:37 tim Corrected a couple of minor things: 1) grTOGL3.c should not include the GLU header file; 2) The linker should not link to libXi, libXmu, and libXext unless those libraries exist, and 3) removed "-exact" from the "package require Tk" command in tkcon.tcl, or else this command breaks under tcl version 8.5.2 (which ultimately needs to be fixed in Tcl/Tk).
    Also: Commented out a diagnostic print line from the CIF read code.
    Also: 2008-04-18 02:40 tim
  132. April 23, 2008 at 2:40am
    2008-04-22 12:57 tim Added processing of the "PINS" section to the DEF file reader.
    Also: Modified "ext2spice" so that the option "scale on|off" will turn auto-scaling (using the ".option" card to indicate the scalefactor of distance units) on or off. The previous behavior was to use ".option" for HSPICE and not otherwise. The default behavior is preserved.
  133. April 25, 2008 at 2:40am
    2008-04-24 11:57 tim Changed the method of handling layer boundaries in the versatec plotting so that boundaries are darker than the layer type they surround, but do not fill all color planes; otherwise, any layer type that has components in C, M, and Y has a black border and makes the plot dark and gives it poor color hue. Added an automatic versatec plot setup to match screen display colors and stipple patterns, without having to specify any pattern in the technology file. An "alpha" parameter in the graphics controls the overall brightness of the output plot with respect to the screen display.
  134. April 30, 2008 at 2:40am
    2008-04-29 10:17 tim Corrected the length & width extraction algorithm so that it correctly handles annular FETs that are MOScap-connected (source and drain terminals shorted).
    Also: Added command option "select flat", which flattens the contents of the select cell.
    Also: 2008-04-29 14:03 tim
    Also: Corrected an error that can cause ext2spice to hang due to an uninitialized flag byte.
  135. May 1, 2008 at 2:40am
    2008-04-30 20:30 tim Corrected the DRC techfile read-in so that the type "space" doesn't cause the plane mask to be reset to zero.
  136. May 3, 2008 at 2:40am
    2008-05-02 06:48 tim Corrected an error that prevents cellnames beginning with "$$" from being interpreted as-is, as opposed to attempting to treat them as a Tcl variable name.
    Also: Modified the previous fix so that cells are handled properly even if they begin with "$" as well as "$$". Magic will attempt to make a Tcl variable expansion (or environment variable expansion) from the text following the "$"; however, if the result is NULL, then it assumes that the "$" is part of the name and continues accordingly. This does have one effect that should be dealt with, which is that the Tcl_printf() statement also tries to expand Tcl variables, and on error, nothing gets printed. So, if you attempt to load cell "$$test$$" but type '$test$$" instead, the error message simply vanishes. The Tcl_printf() routine should likewise test the variable expansion, and escape the dollar sign if the variable does not exist. There is an additional quirk that searching for Tcl variable names is somewhat limited; e.g., if $a and $b are really Tcl variables that form a valid cell name when concatenated, then "load $a$b" will fail simply because $a is not followed by whitespace or NULL. This should also be fixed.
  137. May 11, 2008 at 2:40am
    2008-05-10 13:13 tim Corrected an error in the DRC "widespacing" extension. It searches for rectangles satisfying the "wide material" width, but if there are multiple rectangles, it ORs them together. However, sometimes there may be two unconnected rectangles at opposite ends of the edge being checked, and merging them causes (false positive) errors to show up in the area between them. Thanks to Lloyd Clonts for identifying the bug.
  138. May 12, 2008 at 2:40am
    2008-05-11 20:11 tim Corrected an error that can cause the GDS reader to crash magic if a cell in the input is undefined and the "gds flatten" option is chosen.
  139. May 18, 2008 at 2:40am
    2008-05-17 13:29 tim Implemented Philippe Pouliquen's corrections to the key modifier mapping to deal with the way Mac OS X maps "Meta" to "Mod2" instead of "Mod1" like other X11 implementations.
    Also: Implemented Philippe's idea of allowing two numbers to follow move, copy, or stretch commands to specify different X and Y values, such that "move ne" does not necessarily mean to move along a 45 degree angle (however, in such cases it should not be necessary to specify a direction. . .).
    Also: Expanded upon the previous addition to copy/move/stretch, such that (e.g.) "move 0 10" does a relative move by x=0, y=10. Thus "move 10 10" is equivalent to "move ne 10".
    Also: Corrected the 'stretch' command, which for some reason I had rewritten to allow non-Manhattan directions, although the SelectStretch function is not properly defined for non-Manhattan translations.
    Also: Added error message for ambiguous syntax "move " or "copy " where specified only one coordinate.
    Also: Corrected the first of two bugs pointed out by Philippe. This particular behavior involved layers being left behind when stretching a contact type. This problem has been a long-standing (and known) one. I have tackled it this time by implementing the stretch function in a completely different way. This corrects the above-mentioned behavior while preserving the behavior of allowing stackable contact types to "pass through" one another when stretched. I have also taken the opportunity to modify the way the "stretch" command works such that residue types of a contact will also "pass through" that contact when stretched across it, rather than destroying it.
  140. May 19, 2008 at 2:40am
    2008-05-18 07:46 tim Corrected the 2nd bug reported by Philippe, in which "move" used on multiple stacked contacts leaves everything between the top and bottom contacts unselected after the move (DBPaintValid was ignoring stacked types).
  141. May 20, 2008 at 2:40am
    2008-05-19 06:59 tim Removed the behavior in which stretching a layer through a contact containing its type will not destroy the contact---the behavior is inconsistent with respect to long stretches vs. a number of short stretches. The behavior is now consistent, although I don't like the way that, e.g., stretching metal2 across a via destroys the entire via, including the metal1 portion, even though no metal1 material was in the selection.
    Also: Corrected a bounding box error discovered by Philippe, in which 'select region' or 'select net' loses any previous bounding box information in select. If selection material exists in the select cell, and 'select more' is issued, then the bounding box for the region or net overwrites the selection cell bounding box. If the selection is then moved, the display is only updated for the area of the region or net, and the original material is not erased.
    Also: Changed the stretch code (yet again). For example, when stretching metal1 through a via, preserving the via (the behavior of about 2 revisions ago) violates the principle that stretching over distance X is equivalent to stretching distance 1, X times (because the latter always destroys the via). But destroying the whole via violates the principle that stretching only material in the metal1 plane should not affect material in the metal2 plane. So now, stretching metal1 through a contact will destroy the contact but leave the metal2 part of the contact. Hopefully there are fewer flaws in this scheme. A method that preserves connectivity through a stretch would be nice, but will probably require rather more coding work. So I'm not going to do it tonight.
  142. May 27, 2008 at 2:40am
    2008-05-26 11:37 tim Corrected the read-in of cells in GDS using the "gds flatten" option. Position of referenced subcells needs to be scaled to the magic database for placement, but flattened cells should not be scaled, since they are copied between GDS database cells. Thanks to Mark Martin for providing examples to track down the incorrect behavior.
    Also: Corrected a long-standing error with the "contact" command that allows it to paint outside of the cursor box. This does not correct the second error of the command, which is the failure to convert to edit coordinates when doing edit-in-place.
  143. May 28, 2008 at 2:40am
    2008-05-27 19:14 tim Changed the Mod2Mask modifier handling back to the original code when "linux" is defined, because Linux maps NumLock to Mod2. Mac OS X, which maps the "Alt" key to Mod2, uses the new code, which maps all ModMask bindings back to Mod1.
  144. June 2, 2008 at 2:40am
    2008-06-01 07:47 tim Extension of the "device mosfet" extraction model allows asymmetric source and drain, and extension of the "device subckt" extraction model allows up to ten different terminal types.
    Also: Added code to allow a variant of the "device mosfet" description that has separate types for source and drain (asymmetric mosfet).
  145. June 28, 2008 at 9:50am
    2008-06-28 09:50 tim
  146. July 7, 2008 at 2:40am
    2008-07-06 10:44 tim In response to several requests, I have provided two simple script wrappers for the commands "ext2spice" and "ext2sim" that allow them to run from the shell command-line, the way they do in the non-Tcl versions of magic.
    Also: Added /usr/share/tcltk/ to the search path for Tcl and Tk configuration files (conforms to recent Ubuntu distributions). Also, added the Tcl/Tk version number to the final output of "configure" (good visual feedback in case the search finds the wrong one of multiple copies of Tcl/Tk).
    Also: 2008-07-07 02:40 tim
  147. August 15, 2008 at 2:40am
    2008-08-14 08:25 tim Corrected an integer overflow error in non-Manhattan tile painting.
  148. August 28, 2008 at 2:40am
    2008-08-27 13:24 tim Corrected Makefile for magicexec and magicdnull so that various OS variants don't lose the built-in LD_LIBRARY_PATH information.
  149. September 4, 2008 at 2:40am
    2008-09-03 10:10 tim Corrected the DBFracturePlane() function to preserve the maximum horizontal strips rule, as was done previously for the DBPaintPlane function.
    Also: 2008-09-04 02:40 tim
  150. September 5, 2008 at 2:40am
    2008-09-04 06:10 tim Corrected a problem in which an "alias" statement containing a single entry (e.g., "alias allnfets nfet") would replace the canonical name for the layer, such that .mag files containing that layer would list the geometry under the wrong name (e.g., "<>" instead of "<>").
  151. September 6, 2008 at 2:40am
    2008-09-05 06:45 tim Added several options to the "wire" command and expanded the syntax to allow querying options such as "wire values" and "wire width", and to allow the use of "wire type " without specifying a width (keeps the same width).
  152. September 9, 2008 at 2:40am
    2008-09-08 12:56 tim Gave up on Philippe's modifier mask change, which messes up keystroke interpretation on various Linux versions, and on Solaris. Restricting the change to Mac OS X only.
  153. October 16, 2008 at 2:40am
    2008-10-15 07:34 tim Corrected an error that can cause a crash when attempting to extract a transistor with a bent (non-orthogonal) gate. This is mostly a hack solution that avoids a segfault and does not address the more difficult problem of having the extEnumTilePerim() function properly handle diagonal boundaries. This must be revisited some time in the future.
  154. November 6, 2008 at 2:40am
    2008-11-05 07:17 tim Corrected extraction of asymmetric FET devices
  155. November 9, 2008 at 2:40am
    Corrected the lanczos kernel computation in plotPNM. This somehow worked on my 32-bit system even though the kernel sinc() computation was called with an integer argument instead of a float. It completely broke down on my 64-bit system (probably for that reason), forcing me to work out what the convolution is supposed to be computing, and calculating the correct extents and normalizing factor for the kernel. The new code ensures that any block of pixel color X summed over a kernel area containing nothing but color X will produce exactly color X in the output.
  156. November 15, 2008 at 2:40am
    Corrected plotVers.c where one instance of plotVersRect() was missing the stipple argument.
  157. November 16, 2008 at 2:40am
    Improved version of automatic stipple pattern generation for the versatec hpgl2/hprtl plot option. The new version generates color halftone screens for each of the 3 CMY color planes, so the result is much better looking than the original first-cut algorithm with random dot patterns. The line- generation algorithm continues to use the random pattern generation and needs to be improved.
  158. November 17, 2008 at 2:40am
    More changes (corrections?) to the plotVers.c code. Changed "alpha" to "gamma" (it's doing gamma correction, after all), but I still think the output is less color-saturated than it ought to be.
  159. November 22, 2008 at 2:40am
    A small correction to selEnum to resolve stacked contacts prior to checking if material in the cell matches the selection exactly (which is required for chunk selections). Stacked contacts were being treated like material in another cell.
    Also: And, corrected another logical error in erasing material from contacts being "stretched" over or under other contacts sharing a plane.
  160. November 26, 2008 at 2:40am
    Made one alteration to accomodate contacts on multiple layers such that the erase rules don't conflict with other contact groups covering the same planes. However, this is not the final word on the routine, which needs some fixing.
    Also: Completed a preliminary "universal contact cut" generation algorithm. Currently, this is defined by the cifoutput keyword "squares-test" to distinguish it from the original contact cut generation algorithm. As yet there is no equivalent routine for "squares-grid" or "slots", but the algorithm seems to work well so these should be forthcoming.
    Also: Finished implementing the universal contact generation algorithm for both the "squares" and "squares-grid" functions. Have not attempted an implementation of either "slots" or the cut generation using GDS contact arrays.
    Also: Made one alteration to the contact algorithm, to identify as an error any instance in which a non-convex area contains no contact cuts.
  161. December 2, 2008 at 2:40am
    Corrected the "defaultsidewall" feature of the extract section, which was not building tables against type "space", which largely eliminates all sidewall calculations! Changed the rsubcircuit device model to use the new resistor extraction model (works correctly on bent resistors). Updated the rsubcircuit, resistor, and capacitor device models to include substrate types (and optional default node name). At least as far as SPICE is concerned, only the rsubcircuit device can make use of the substrate node, which is passed as the third argument.
    Also: Changed the "side halo" and "step size" to be in units of microns when the "units microns" option is chosen.
    Also: Addition to the last correction to allow fractional values in the units for "side halo" when also using the "units microns" option.
    Also: Corrected ext2spice to output all terminals of an n-terminal "device subcircuit" device, for any arbitrary number of terminals defined.
    Also: Correction to contact-generation algorithm to make sure it only shrinks tile edges on contact strips where they meet other tiles of the same type--- otherwise, the algorithm shrinks edges of minimum-area contacts and refuses to draw a cut! Also, added extraction types "subcircuit_lw" and "subcircuit_ap" to differentiate between subcircuits which take parameters length and width ("l" and "w") and those that take area and perimeter ("a" and "p"). The original "subcircuit" call now outputs length and width to the extract file, but "ext2spice" will follow up by not passing any parameters to the subcircuit.
  162. December 3, 2008 at 2:40am
    Implemented the all-new "subcircuit" and "rsubcircuit" extraction types. These are designed to allow a list of parameters to pass to the subcircuit, and what to call each parameter. Standard parameters that magic can extract and compute are handled (length, width, area, perimeter, resistance, capacitance, position, and substrate). See the on-line maint2 manual for the complete syntax.
    Also: Implemented the new command option "cif paint []" to allow direct generation of magic layout from CIF generation rules (this should have been thought of years ago!).
    Also: One small correction to the contact generation function which was declaring certain non-manhattan, non-convex regions to be simple rectangles (specifically, diamond and inverse diamond patterns).
  163. December 4, 2008 at 2:40am
    Corrected the "select net" and "select region" commands so that they do not require to be preceded by "select chunk" in order to work correctly.
  164. December 6, 2008 at 2:40am
    Corrected the new "cif paint" function by adding a cell bounding box check and DRC check at the end, and enabling the undo mechanism during the final paint.
  165. December 10, 2008 at 2:40am
    2008-12-10 02:40 tim
  166. December 12, 2008 at 2:40am
    Correction to extraction method to avoid hanging or segfaulting on devices with no terminals drawn.
  167. December 13, 2008 at 2:40am
    Corrected the step size and side halo scaling from microns to database units when the "units microns" option is used. Also, added the "corner chop" option to resistance specification in the extract section, to assert how to scale the length of a resistor turning a corner as a fraction of a square per corner.
  168. December 18, 2008 at 2:40am
    Corrected an error in CalmaWrite which fails to correctly scan start and stop values for pointers into a GDS file when "off_t" is defined as an 8-byte (long long) integer, which happens on 64-bit systems.
  169. December 19, 2008 at 2:40am
    Corrected scaling and conversion of sideOverlap and sideCouple capacitances.
  170. December 30, 2008 at 2:40am
    Corrected an error introduced into the extflat code when adding the new subcircuit and rsubcircuit handling; this error regularly causes segfaults when running ext2spice.
  171. January 14, 2009 at 2:40am
    Back-annotated version 7.5 with the correction made to the 8.0 code with respect to the contact cut-generation algorithm in small (two contacts wide) areas.
    Also: Changed the cut-generation algorithm to prevent it from generating cuts that violate the border requirement. This breaks backward-compatibility and may be changed later to accomodate it.
  172. January 15, 2009 at 2:40am
    Corrected an error that prevented resistclasses from being seen by the extractor, thus preventing source/drain area/perimeter values from being written.
  173. January 16, 2009 at 2:40am
    Back-annotated a change from magic-8.0 that greatly speeds up the new contact generation algorithm.
    Also: A minor cleanup of the contact generation code, to remove some unnecessary steps. Also: added parsing of "flabel" lines in .mag files to be forward- compatible with magic version 8.0 and above. These font label lines are processed by magic 7.5 like ordinary labels, ignoring the extra information.
  174. January 20, 2009 at 2:40am
    Changed the ext2spice and ext2sim standalone scripts to accept options for both magic itself, and the ext2spice or ext2sim command. The options are separated by "--", with the options for magic coming first and the options for ext2sim coming last; e.g., "ext2spice -T newtech -- -d testlayout"
  175. January 22, 2009 at 2:40am
    Corrected one of those wonderful "wrote == instead of =" errors. Keeps the CIF contact generation from running forever.
  176. January 30, 2009 at 2:40am
    Made a small correction that prevents magic from counting the metal-to-space edge on a contact as part of a device perimeter. Original assumption was that the contact would only be on the boundary outside edge, which is not true.
  177. April 11, 2009 at 2:40am
    Corrected a DRC error which would cause magic to "optimize out" (remove) rules that should not have been, as they are active in a different plane from the one that ought to be deleted.
  178. April 24, 2009 at 2:40am
    2009-04-23 09:25 tim Corrected an error which caused copying contacts to incorrectly flag the existance of overlap errors.
  179. April 29, 2009 at 2:40am
    2009-04-28 05:47 tim Removed the last change, as it is really, really bad. Will look for a different (and hopefully correct) solution to the DRC overlap problem (which at least is a lot more obscure than the problems caused by this unfortunate last "fix").
  180. May 14, 2009 at 2:40am
    2009-05-13 08:01 tim Corrected the wire value scaling when the internal grid is scaled (it was backwards).
  181. May 19, 2009 at 2:40am
    2009-05-18 20:06 tim Corrected an error that prevents magic from identifying isolated contact squares that are too small to draw a cut and generating an error message.
    Also: 2009-05-19 02:40 tim
  182. May 30, 2009 at 2:40am
    2009-05-29 06:54 tim Corrected an extraction error in which the nodename of an extracted region might differ between the top level and subcells if the lower-left-most tile of the region is non-Manhattan.
  183. May 31, 2009 at 2:40am
    2009-05-30 14:45 tim Corrected an error that causes incorrect extraction (not to mention strange error messages) when a device declares its minterms to be less than the maximum number of terminals (e.g., a FET device that declares minterms = 1 so that FET caps are legal entities).
  184. June 5, 2009 at 2:40am
    2009-06-04 07:01 tim Made a correction to the "device subcircuit" parsing in the techfile such that zero-terminal devices may be legally constructed.
  185. July 2, 2009 at 2:40am
    2009-07-01 06:38 tim Corrected an error that prevents resistor extracted length and width from getting to a spice file.
  186. July 14, 2009 at 2:40am
    2009-07-13 19:54 tim Correction to the wrapper script submitted by Daniel Barden, that removes the checkmark for the Tech Manager when the window is removed forcibly by the window manager.
  187. August 4, 2009 at 2:40am
    2009-08-03 06:43 tim Corrected two errors that were also corrected in version 8.0: Continuous DRC routine checks on Tcl/Tk events, and option parsing of extresis.
  188. September 12, 2009 at 2:40am
    2009-09-11 07:29 tim Corrected the DRC checker to allow commands forcing an immediate check to execute. Code that was meant to prevent the continuous DRC checker from being executed in the middle of a command prevented this.
    Also: Additional measures to ensure that the continuous DRC does not run in the middle of tool initialization.
    Also: Yet more changes to the drc on/off/status/count command and behavior.
    Also: One final correction to the DRC continuous code, and an update of the extraction that avoids crash conditions and/or bad extraction when a non-Manhattan tile is the only tile in a region.
  189. December 31, 2009 at 2:40am
    2009-12-30 05:45 tim Corrected a problem (also corrected in magic 8.0) with an integer-to-boolean conversion on machines that declare type bool to be something smaller than type int.
  190. March 9, 2010 at 2:40am
    Applied patches from Dan McMahill and Jason Shonberg
  191. March 13, 2010 at 2:40am
    Corrected DRCcontinuous so that background commands that modify the DRC state do not cause a crash when run during an interpreter catch-up in the middle of the background DRC checker.
  192. April 30, 2010 at 2:40am
    Corrected X11/OpenGL graphics to prevent the backing store mechanism from crashing when using multiple windows (multiple calls to free grXcopyGC). Thanks to Philippe Pouliquen for identifying the problem and sending a patch.
  193. May 3, 2010 at 2:40am
    2010-05-02 06:41 tim Extended the bloat-or function to make use of the "grow-euclidean" option. This is dreadfully slow, but it works.
  194. May 4, 2010 at 2:40am
    2010-05-03 08:16 tim Corrected the nonmanhattan paint routine to avoid merging split tiles. It was thought that this situation could not occur, but it can in the plane fracturing routine, where the area outside the fracture zone was already painted and the area inside has not yet been.
  195. May 5, 2010 at 2:40am
    2010-05-04 11:46 tim Corrected an error in the CIF bloat-or function for non-manhattan tiles that can generate paint routine calls with zero area, thus corrupting the tile plane, which can be fatal.
    Also: Yet another correction to the bloat-or generation routine, to avoid corner expansion of values at +/- infinity.
  196. May 14, 2010 at 2:40am
    2010-05-13 14:28 tim Added routine to scale CIF-GDS rules along with the grid scaling, a routing which was missing.
  197. May 15, 2010 at 2:40am
    2010-05-14 11:57 tim Corrected an error in the euclidean distance DRC calculations that did not reset the flags for which corners to check, resulting in some very strange errors.
  198. May 19, 2010 at 2:40am
    2010-05-18 07:21 tim Unhandled case found in select enumeration of non-Manhattan tiles.
  199. May 22, 2010 at 2:40am
    2010-05-21 13:29 tim Corrected an error that crept into the paint code during recent work, that can cause an infinite loop during DBFracturePlane.
  200. May 27, 2010 at 2:40am
    2010-05-26 14:35 tim Error that was reported corrected in last revision was not an error; it was messed up (temporarily) only in version 8.0, and version 7.5 should not have been changed.
  201. June 18, 2010 at 2:40am
    2010-06-17 07:40 tim Corrected an error in which "expand toggle" would cause magic to crash if the cell being expanded forced magic to rescale the database.
  202. June 25, 2010 at 2:40am
    2010-06-24 12:57 tim Correctly reverted the error claimed to be reverted in revision 199, this time. What a dingbat annoyance.
  203. June 26, 2010 at 2:40am
    2010-06-25 06:59 tim Corrected an error in which the GDS paint copy function ignored non-manhattan geometry, such that non-manhattan geometry would be lost when using the "gds flatten" option.
  204. August 10, 2010 at 2:40am
    2010-08-09 17:18 tim Corrected an error in which the hint tile of the cell plane ends up as one of the boundary tiles after expanding a cell with scaled subcells. Resetting the hint tile seems to solve the problem.
  205. August 16, 2010 at 2:40am
    2010-08-15 07:35 tim Removed the call to DBUpdateStamps() from inside DBScaleEverything(). This command recomputes bounding boxes and can end up modifying the cell plane from inside a search on the same cell plane, with predictably disasterous results.
  206. August 23, 2010 at 2:40am
    2010-08-22 14:58 tim Corrected an error where nmPutNums() was not declared and therefore returns the wrong type in selOps.c.
  207. September 2, 2010 at 2:40am
    2010-09-01 08:21 tim Minor corrections to device area and perimeter calculations, to avoid undercounting perimeters of non-Manhattan geometry, and to avoid overcounting area of devices containing stacked contacts.
  208. September 16, 2010 at 2:40am
    2010-09-15 08:45 tim Changed the techfile parsing so that for the cifinput/cifoutput sections, the grammatically correct "scalefactor 1 nanometer" will not be parsed as syntactically incorrect.
    Also: Correction that allows the connectivity search be called recursively without attempting to run multiple times on the same network, causing an infinite nesting of subroutine calls.
  209. September 22, 2010 at 2:40am
    2010-09-21 10:08 tim Changes back-annotated into 7.5 from 8.0: Modified method for handling triggered DRC rules; corrected drc_extend rule and drc_overhang rules for multiplane cases using the new method. Implemented a DRC_OUTSIDE flag that allows rules to specify maximum distance for a rule. Used this method to implement an "exact_width" option for the "surround" rule.
    Also: DRC extensions from version 8.0 added to version 7.5 (this update contains mainly corrections)
  210. October 20, 2010 at 2:40am
    2010-10-19 09:03 tim Corrected the transistor extraction algorithm to cover the (rare) case of a multi-tile transistor with a substrate that does not extend under the entire device (seen in certain extended-drain device layouts). The algorithm defaults to the normal extraction method when a transistor is a single tile (the most common case).
  211. October 21, 2010 at 2:40am
    2010-10-20 05:04 tim Removed drcCifScale(); drc-cif rules are in centimicrons and don't need to be scaled with the database.
    Also: Okay, axe that last change from yesterday. CIF-DRC rules do need to be scaled, but they need to be scaled from inside the scaling routine for the cifoutput rules, not the scaling routine for DRC rules.
  212. October 23, 2010 at 2:40am
    2010-10-22 08:02 tim Corrected a bad longstanding error in mzNumLine.c where an allocated block of an array of ints was mistakenly allocated as an array of bytes. Also, corrected a recent error where trans_SDtypes was not initialized. Same changes as made to version 8.0.
  213. December 14, 2010 at 2:40am
    2010-12-13 14:33 tim Corrected the extraction mechanism to match version 8.0 regarding devices with multiple tiles. The substrate node is found and saved while the extractor searches for all tiles belonging to the device. This prevents the possible ambiguity caused by searching for the substrate at the time of generating device output.
  214. December 23, 2010 at 2:40am
    Corrected a GDS output error in which magic generates output from its own database for a cell placed (manually) inside a vendor GDS cell which itself points to a nonexistant GDS file. A rare error, but one that produces very bad output.
  215. November 25, 2011 at 3:00am
    Corrected the transistor extraction routine, which would not correctly compute width and length of snaked transistors and resistors for certain geometries where the bottommost segment was not at one of the device ends.
  216. March 7, 2012 at 3:00am
    Update at Tue Mar 6 12:30:35 PST 2012 by tim
  217. March 29, 2012 at 3:00am
    Update at Tue Mar 6 12:30:35 PST 2012 by tim
    Also: Correction to ext2spice to avoid accessing the device merge array after merging has been set back to "none" after being set to something else. Otherwise, an array underrun occurs.
    Also: Update at Wed Mar 28 17:58:13 EDT 2012 by tim
    Also: Merge branch 'master' into work
  218. March 30, 2012 at 3:00am
    Correction of area parameter value, which gets suffix 'p' (pico) instead of 'u' (micro) as the 1E6 term implied by the suffix is squared, as pointed out by Mark Martin.
    Also: Update at Thu Mar 29 11:11:18 EDT 2012 by tim
    Also: Merge branch 'master' into work
  219. April 20, 2012 at 3:00am
    Corrected an error with connectivity searches on non-Manhattan tiles.
    Also: Update at Thu Apr 19 15:26:11 EDT 2012 by tim
    Also: Merge branch 'master' into work
  220. April 21, 2012 at 3:00am
    Changed default behavior to NOT compile ext2spice and ext2sim as independent loadable libraries. This has been having serious problems with newer versions of gcc, especially in the Ubuntu distribution.
    Also: Update at Fri Apr 20 10:12:44 EDT 2012 by tim
    Also: Merge branch 'master' into work
  221. April 25, 2012 at 3:00am
    Change to force checking of minimum number terminals for all devices except subcircuit and rsubcircuit.
    Also: Update at Tue Apr 24 12:11:23 EDT 2012 by tim
    Also: Merge branch 'master' into work
  222. May 1, 2012 at 3:00am
    Corrected at typo in the ext2spice.c source
    Also: Update at Mon Apr 30 08:17:36 EDT 2012 by tim
    Also: Merge branch 'master' into work
  223. September 10, 2012 at 3:00am
    Update at Sun Sep 9 15:44:09 EDT 2012 by tim
  224. September 19, 2012 at 3:00am
    Correction to configure script for Mac OS X; thanks to Ryan Schmidt of MacPorts for the patch.
    Also: Update at Tue Sep 18 08:00:27 EDT 2012 by tim
    Also: Merge branch 'master' into work
  225. September 22, 2012 at 3:00am
    Corrected symbol conflict between ext2spice and ext2sim
    Also: Update at Fri Sep 21 11:14:46 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Corrected a bunch of wrong usages of AC_ARG_ENABLE in the configure script
  226. September 23, 2012 at 3:00am
    Applied patch from Ryan Schmidt to change internally defined "macosx" to externally defined "__APPLE__". Also cleaned up a handful of functions failing to return values, and a few other minor problems that produce compiler warnings.
    Also: Update at Sat Sep 22 09:52:37 EDT 2012 by tim
    Also: Merge branch 'master' into work
  227. September 25, 2012 at 3:00am
    More function return-value cleanup, and added another patch from Ryan Schmidt to fix the "echo -n" usage (which has been fixed in magic version 8.0 although I don't remember when).
    Also: Update at Mon Sep 24 19:15:30 EDT 2012 by tim
    Also: Merge branch 'master' into work
  228. September 30, 2012 at 3:00am
    Corrected a small error that allowed unknown layers to define LEF geometry, which would get copied with a negative layer type and cause trouble. . .
    Also: Update at Sat Sep 29 17:59:58 EDT 2012 by tim
    Also: Merge branch 'master' into work
  229. October 2, 2012 at 3:00am
    Cleanup of return-type compile-time warnings
    Also: Update at Mon Oct 1 10:34:53 EDT 2012 by tim
    Also: Merge branch 'master' into work
    Also: Correction for Cywgin since Cygwin no longer sets TERM to "cygwin"
  230. October 3, 2012 at 3:00am
    Two corrections, one for proper startup under Cywgin and OS X, the other for proper operation with "-dnull".
    Also: Update at Tue Oct 2 17:47:02 EDT 2012 by tim
    Also: Merge branch 'master' into work
  231. October 7, 2012 at 3:00am
    Correction of launch script for Cygwin.
    Also: Update at Sat Oct 6 13:25:16 EDT 2012 by tim
    Also: Merge branch 'master' into work
  232. January 24, 2013 at 3:00am
    Updated scmos/Makefile with the new code from magic-8.0 that avoids issues where a recently-introduced gcc preprocessor bug causes backslashes to be removed. It is believed that on preprocessors without the bug, double backslashes in the output will be handled without error.
    Also: Update at Wed Jan 23 12:42:48 EST 2013 by tim
    Also: Merge branch 'master' into work
  233. April 27, 2013 at 3:00am
    Corrections from the Gentoo developers
    Also: Update at Fri Apr 26 15:38:24 EDT 2013 by tim
    Also: Merge branch 'master' into work
  234. August 30, 2013 at 3:00am
    Updated config.guess, especially for Cygwin on x86_64.
    Also: Update at Thu Aug 29 13:40:36 EDT 2013 by tim
    Also: Merge branch 'master' into work
  235. September 24, 2013 at 3:00am
    Update at Mon Sep 23 22:18:32 EDT 2013 by tim
  236. May 17, 2014 at 3:00am
    Corrected an error that causes mouse buttons to generate Ctrl-C interrupts. Possibly due to changes in Tcl/Tk version 8.6. Thanks to Jim Everitt for the bug fix.
    Also: Update at Fri May 16 12:12:49 EDT 2014 by tim
    Also: Merge branch 'master' into work
  237. May 27, 2014 at 3:00am
    Update at Mon May 26 09:55:06 EDT 2014 by tim
  238. May 28, 2014 at 3:00am
    Update at Tue May 27 19:10:17 EDT 2014 by tim
  239. May 30, 2014 at 3:00am
    Update at Thu May 29 10:52:48 EDT 2014 by tim
  240. May 31, 2014 at 3:00am
    Update at Fri May 30 14:41:22 EDT 2014 by tim
  241. June 1, 2014 at 3:00am
    Update at Sat May 31 14:50:54 EDT 2014 by tim
  242. June 28, 2014 at 3:00am
    Added ext2spice and ext2sim support for diodes with one terminal on a substrate plane.
    Also: Update at Fri Jun 27 15:16:06 EDT 2014 by tim
    Also: Merge branch 'master' into work
  243. September 16, 2014 at 3:00am
    Same correction as made to magic-8.0, fixing a typo that crept into the code long ago and that prevents multi-line macros.
    Also: Update at Mon Sep 15 16:52:36 EDT 2014 by tim
    Also: Merge branch 'master' into work

Revision information on Magic version 7.4:

  1. Feburary 9, 2006
    Original version. The only difference between this and version 7.3 is a cleanup of some of the instructions, and removal of several unused experimental features (to improve stability of the product).
  2. Feburary 12, 2006
    Changes from Philippe Pouliquen for FreeBSD, Mac OSX, and Cygwin compatibility, and a few bug fixes (forward declarations, type casting, etc.).
  3. Feburary 16, 2006
    Removed redundant calls to the tech section "Final" callback function for cifinput, cifoutput, and extract sections.
  4. Feburary 18, 2006
    Two minor bug fixes for setting grXscrn in grTk1.c, and forcing tkcon.tcl to be world readable/executable on install.
  5. Feburary 19, 2006
    Two more fixes: 1) Tell "configure" to search for "wish-X11", which is used in Mac OS X, and set WISH_EXE accordingly. 2) Fixed windDefaultFlags, which was declared "bool" in one file and "int" in other places. This is the suspected cause of Magic drawing double borders on Tcl/Tk wrapper windows, presumably because Mac OS X defines "bool" as something smaller than "int".
  6. Feburary 23, 2006
    Changed $CAD_HOME to be "$libdir" instead of "$prefix", to comply with distributions that want to define $libdir as /usr/share/. This means that by default, $CAD_HOME is now /usr/local/lib/ instead of /usr/local/.
  7. Feburary 24, 2006
    Changed $CAD_HOME to $CAD_ROOT so as not to conflict with previous distributions of Magic. $CAD_HOME is no longer used by Magic. Also: Changed man page magic.5 to mag.5 to avoid conflicting with an existing man page by that name, and added man page magic.1 to the list of installed files in Makefile (don't know why it was missing).
    Also: Added "$(DESTDIR)" to installation Makefiles so magic can be compiled in a sandbox using "make DESTDIR=staging_area install"
  8. March 13, 2006
    Note: Attempted corrections to the maxwidth rule seriously destabilized the code. I am removing this revision until I figure out what went wrong.

    Made CAD_ROOT global in the techmanager script; otherwise it's not recognized.
    Also: Corrected command "cursor" to return the correct Y value for Tk (non-OpenGL) windows (would become incorrect after resizing the window; thanks to Eric Wong of U. Md. for pointing out the error).
    Also: Corrected an error with the maxwidth rule which caused it to incorrectly report an error for a layer with width equal to the maxwidth distance when using "bend_ok".
  9. March 15, 2006
    Minor correction to the CIF input code to prevent mishandling cells that are called prior to being defined.
  10. April 3, 2006
    Corrections by Philippe Pouliquen for DRC handling of corner extensions.
  11. April 6, 2006
    Corrected the "make depend" to generate dependencies on ALL of the sources in the graphics subdirectory, not just the ones selected for compilation. Recreated the Depend files.
  12. April 7, 2006
    Extended the use of the "alias" keyword in the "types" section of the techfile to include single-layer aliases, equivalent to adding the alias name to the list of names that define the layer in the first place.
  13. April 10, 2006
    Corrected round-off errors in the LEF read routines. Thanks to Frank Lien for identifying the error.
  14. April 11, 2006
    Further refinement of the use of the "alias" keyword: Labels placed on an alias layer in an input .mag file will be re-assigned to the first real layer defined by the alias.
  15. April 13, 2006 at 9:25pm
    Changed label attachment to accept type names in the alias hash table database. Because these names can refer to multiple layers, the first layer is returned in such cases.
    Updated from configure.in with 64-bit changes
    Corrected the DEF read code (thanks to Frank Lien for bringing the error to my attention) to correctly generate the reverse mapping table for mapping LEF layers to magic layers.
    Also: Fixed Philippe's changes to the DRC code so that it now (again) correctly computes the widespacing rule.
  16. May 10, 2006 at 2:40am
    Corrected the DEF read code (thanks to Frank Lien for bringing the error to my attention) to correctly generate the reverse mapping table for mapping LEF layers to magic layers.
    Also: Fixed Philippe's changes to the DRC code so that it now (again) correctly computes the widespacing rule.
    Also: Fixed 3D rotate 1 macros keys
    Also: Updated rpm spec file for magic 7.4
    Also: Automated packaging and rpm building directly from CVS Build an RPM: make distclean; make dist; rpmbuild --clean -ta magic-*.tgz
    Also: Corrections to commands that cause segmentation faults when executed on non-edit cells. This fix overrides what was done previously in the select subdirectory source files selCreate.c, selEnum.c, and selOps.c. Instead, a check for the existance of the edit cell is made in each command dispatch routine (CmdArray, CmdDelete, etc.).
    Also: Fixed 64-bit warnings about integer/pointer conversions
    Also: Backport clean-ups and fixes from 7.5
    Also: Fixed fPIC problem on cygwin
    Also: Corrected .spec file dependencies
    Also: Opps, forgot to add another dependency
    Also: Fixed netlist label placement feature on 64-bit machines
    Also: Reverted back to 32-bit TileType, put in appropriate 64-bit casts to suppress warnings
    Also: Changed tile.h to increase the value of INFINITY (although this did not actually fix my problem, it needs to be done anyway). Also, added a search path for Tk that is compatible with Ubuntu Linux. Thanks to Osei Poku for the patch.
    Also: Fixed error that crashes magic when attempting to print the contents of a macro that has been set to an empty string.
  17. May 12, 2006 at 2:40am
    2006-05-11 22:19 tim Corrected the long-standing error in which labels randomly are turned into ports. This was caused by a type mismatch between the Label and labelUE (undo record) entries for label position and type.
  18. May 16, 2006 at 2:40am
    2006-05-15 11:44 eric Added sanity checking on the number and total length of the command line arguments in TxTclDispatch (i.e., the lack of checking only applies to the Tcl version). Raised the maximum number of command arguments to 200, because scripts can generate some pretty long commands (for example, "polygon").
  19. May 24, 2006 at 2:40am
    2006-05-24 01:09 eric Added an alternative definition for roundf() to allow compilation under Solaris, which doesn't have it. Changed one of the makefiles which may or may not cause Solaris to properly generate the correct symbolic link to readline. My guess is, probably not.
  20. May 27, 2006 at 2:40am
    2006-05-26 20:03 tim Changed man page Makefile to work correctly when $DESTDIR is defined. Changed lefRead and defRead to define function roundf() on systems that do not define it (namely, Solaris).
  21. June 14, 2006 at 2:40am
    2006-06-14 00:12 eric Minor clean-up of build files
  22. June 20, 2006 at 2:40am
    2006-06-19 07:03 tim Added /usr/lib64 to the search path for Tcl/Tk to accomodate 64-bit architectures.
  23. June 25, 2006 at 2:40am
    2006-06-24 18:58 tim Made changes equivalent to those in magic 7.5, to avoid a segmentation fault when attempting to use the "save" command on a non-edit cell.
  24. July 28, 2006 at 2:40am
    2006-07-27 10:01 tim Changes to correct the heap code for type "double int", which was never finished after removing the local code for handling double-size integers about a year ago.
  25. July 29, 2006 at 2:40am
    2006-07-28 08:43 tim Corrected one missing change in utils/heap.c (change HeapAddDInt() to HeapAddDLong()).
    Also: Made the same two bug fixes as were made to the 7.5 code today---fixing the dlong cast and preventing blocking layers from being painted on all planes.
  26. August 14, 2006 at 2:40am
    2006-08-13 14:43 tim Same change as made to version 7.5: magic-to-screen coordinate transform changed from (dlong)(a * b) to ((dlong)a * (dlong)b) to prevent overflow for any (a * b) that can't fit in 32 bits.
  27. August 29, 2006 at 2:40am
    2006-08-28 13:35 tim Correction to mos.24bit.dstyle, as pointed out by Erwin Prinz: name "hnvdiff" corrected to "hvndiff", as it ought to be.
  28. September 2, 2006 at 2:40am
    2006-09-01 11:37 tim Fixed error pointed out by James Stine in which "ext2sim" does not set parasitic resistor and capacitor thresholds based on the "-R" and "-C" options passed to "ext2sim" on the command line.
    Also: Corrected proto.magicrc.m4 so that M4 correctly generates the right result when USE_NEW_MACROS is not set. Thanks to James Stine for the bug report.
  29. October 2, 2006 at 2:40am
    2006-10-01 16:29 tim Same changes as were made recently to version 7.5 to prevent errors on OS's (e.g., everybody except Linux) that rigorously check whether or not a file descriptor is closed before executing "rename" on it.
  30. October 5, 2006 at 2:40am
    2006-10-04 10:31 tim Changes to place the search for the round() and roundf() functions in the configure step, and to define them in utils/math.h if not available in the math library, instead of having definitions scattered through the code. Also: Fixed (again) the error that causes files not to be saved under Sun and Cygwin to match changes made in version 7.5.
    Also: Corrected the scaling routing to properly set the MODIFIED flag if points were rounded when scaled, and to leave it alone otherwise. Thanks to Philippe Pouliquen for pointing out the error.
    Also: Fixed an error that failed to zero the layer mask assigned to an "alias" name, resulting in a random assortment of layers. Thanks to Marcus Escobosa for pointing out the error.
  31. October 13, 2006 at 2:40am
    2006-10-12 10:02 tim Modified the way Magic writes files so that if a file is being saved for the first time, and therefore does not exist on the disk, then Magic will not go through the trouble of making a temporary file.
  32. November 23, 2006 at 2:40am
    2006-11-22 14:46 tim Corrections to capacitor device extraction code in extract/ExtBasic.c to match similar fixes made to the magic-7.5 code base.
  33. December 4, 2006 at 2:40am
    Corrections to the setup of the parasitic capacitance extraction tables for contact types. Contact types in statements like "overlap" and "areacap" are now ignored, with the tables being set up automatically for contact types based on the contact residues declared in the "contacts" section. These changes match the same correction made to the magic 7.5 code base.
  34. January 19, 2007 at 2:40am
    Corrected a typo in ExtCouple.c where "DBPlaneToResidue" was written "DBPlanetoResidue".
  35. March 4, 2007 at 2:40am
    Extraction algorithm corrections for contacts, especially for side overlap calculations. Thanks to Emerson Vernon at Brookhaven Lab for providing a thorough test case.
  36. April 21, 2007 at 2:40am
    Same changes as made to version 7.5 to correct the 64-bit non-compliance of the MINFINITY definition. Corrects errors in both the DRC minimum area rule and GDS output when magic is used on 64-bit platforms.
  37. October 10, 2007 at 2:40am
    2007-10-09 12:28 tim Same change made to GR_NUM_GRIDS as was made to magic version 7.5, to prevent the number of grid lines from being dependent upon the pixel size of the display.
    Also: Added David Fang's patch, containing mostly Makefile changes to support DESTDIR staged installations, and a few related things. Also changed the techfile read routine to avoid a crash situation due partly to an attempt to re-read the techfile in the middle of a techfile read-in (bad idea), and changed the "cifstyle" command in the "drc" section such that it flags an error if the style to which it refers is not the default style. This is a band-aid solution and needs to be fixed properly, since changing cifoutput styles is likely to cause magic to crash. Finally, added another fix for a bug pointed out by Viet Dinh in which VERSATEC is misspelled in the plot section code.
  38. October 11, 2007 at 2:40am
    2007-10-10 11:05 tim Made a correction submitted by Bertrand Irissou at ASICAdvantage, correcting GDS string output when characters disallowed by the GDS spec are modified.
  39. October 12, 2007 at 2:40am
    2007-10-11 10:21 tim Corrected the DRC subcell overlap error, where the swapping of paint tables had been inadvertently commented out.
    Also: 2007-10-12 02:40 tim
  40. October 17, 2007 at 2:40am
    2007-10-16 13:33 tim Corrected a typo in CalmaWrite.c, made when copying a change over from magic version 7.5. Thanks to Trey Greer for pointing out the error.
  41. October 27, 2007 at 2:40am
    2007-10-26 11:41 tim Rewrote the temporary file handling so that it does not change permissions of the original file when writing .mag file changes back to disk. Matches changes made to version 7.5.
  42. November 2, 2007 at 2:40am
    2007-11-01 22:09 tim Corrected "flatten" command so that it does not segmentation fault when attempting to flatten a read-only cell.
    Also: Re-established the original code for DRCtech so that it will not surprise people with utterly bizarre behavior, while I work out the correct paint tables for stacked contact types.
  43. November 5, 2007 at 2:40am
    2007-11-04 11:28 tim Corrected the extraction region-finding routine for non-Manhattan geometry. While the routine in "ExtFindNeighbors" had been corrected earlier to save the "side of interest" when pushing non-Manhattan split tiles onto the stack, the bit indicating the side of interest was never set.
  44. November 6, 2007 at 2:40am
    Added a correction by Bertrand Irissou to DRCcif to multiply centidistance by cs_expander to get the correct resulting scale factor. Also, added a fix to prevent a segfault when doing "getcell" in a read-only cell def.
  45. November 12, 2007 at 2:40am
    Corrected another couple of instances where commands given with respect to a read-only cell cause magic to crash. Thanks once again to Bertrand Irissou for the bug report.
    Also: Corrected an extraction problem, where a line added to prevent the transistor perimeter calculation from double-counting contacts was preventing any perimeter from being calculated if the transistor gate is tied to a well (or any plane below the active plane).
  46. November 16, 2007 at 2:40am
    Corrected an error in GDS/CIF generation discovered by Bertrand Irissou in which an unitialized variable plays havoc with the "bloat-or" operation, gone unnoticed for a surprisingly long time.
  47. November 28, 2007 at 2:40am
    Corrected the squares-grid function to ensure that contacts are centered to the extent allowed by the grid. This correction was previously made to version 7.5 but not changed in version 7.4.
    Also: Corrected (again!) the "flush" command with respect to read-only cells, to prevent magic from crashing, and also to allow "flush" with no cellname given as an option to pick up a read-only cell as the cell to flush.
  48. December 6, 2007 at 2:40am
    Corrected a crash problem in the "extract" command for non-Manhattan contact tiles (meaning pads, typically) due to inadvertant passing of a non-Manhattan tile type to TTMaskHasType().
    Also: Same correction as was mentioned in the previous commit, only this time it has been done correctly (ExtBasic code now matches changes made earlier to ExtNghbors, and both have been cleaned up a bit).
    Also: Copied changes from version 7.5 back to 7.4 that correct hierarchical extraction of non-Manhattan geometry.
  49. December 9, 2007 at 2:40am
    Corrected a fatal error in the extraction "hard node search" caused by changes to the way plane numbers are derived from tiles. Also, implemented an extension to the "what" command that prints the name of each cell use where each type of paint is found (very, very useful!)
    Also: A couple more changes to the "what" command routine that prints cell use names, simplifying the procedure and avoiding a static declaration.
    Also: Corrected an unexpected error in which Tcl was discovered to run "idle procs" in the middle of a routine. In particular, Tcl calls Tcl_DoOneEvent after sending text to the console (via TxPrintf()), to force the console window to refresh. The unfortunate consequence is that DRCContinuous gets run as an idle proc in the middle of executing "drc why", thus fouling up its own database. This most quickly shows up when using the "drc cif" rules, where the CIF database is regenerated every time DRC checks are run (a bad setup that itself needs rewriting). A related problem was found where callbacks from the DRC code themselves call DRCBreak(), creating a horribly slow loop where DRCContinuous() forces itself to break and re-enter every iteration. This has probably always been this way, but shows up as being especially slow, again, in the case of "drc cif" rules where the regeneration of the CIF geometry inserts a huge delay into the loop. It has also been fixed.
  50. December 14, 2007 at 2:40am
    Implemented Graham Petley's suggestion to have the "see" command make contact residue layers visible when the residue layer type is set to visible but the contact type itself is not. For example, "see no *; see m1" shows the metal1 layer where poly and diffusion contacts and vias are present, instead of displaying blank space in those areas.
  51. December 22, 2007 at 2:40am
    Corrected #1 of two errors-from-hell. The database was corrupted by the failure to merge part of a tile after a 4-way split of a non-manhattan tile, leaving a violation of the "maximum horizontal stripes" rule.
  52. December 24, 2007 at 2:40am
    Corrected (the right way, this time) an error in which the plane of a region's reference node was being confused with the plane of the tile in the region's record, causing a difference between the searches that create and destroy regions. This resulted in dangling pointers and random behavior.
    Also: 2007-12-23 12:26 tim Corrected sidewall capacitance scaling vs. the grid spacing.
  53. December 25, 2007 at 2:40am
    Corrected the DRC spacing rule, which was not properly setting up the corner check when the type to check distance to is in another plane than the edge.
  54. January 3, 2008 at 2:40am
    Changes to the configure scripts for proper handling of round and roundf functions, and the handling of libXi.
    Also: Corrections made to the DRC code where I accidentally made a change to the stable distribution that was supposed to have been made to the development version. . . juggling too many versions, here. . . also removed a comment line that was supposed to have been removed already.
    Also: Implemented the "site.def" file for site-specific definitions that will not get overwritten by new installations of magic.
    Also: Implemented layer locking feature. Plane names in the layer definition that are prefixed with '-' force the layer type to be locked.
    Also: Partial implementation of a GDS euclidean-distance grow operation.
  55. January 17, 2008 at 9:21am
    Re-implemented layer locking with only type masks. Also changed the behavior of "select delete" so that it matches the behavior of "erase" with respect to contact residues.
    Also: Some changes relative to locked layers, which is still not correct.
    Also: 2008-01-04 06:33 tim Minor adjustment between databases.
    Also: 2008-01-04 13:42 tim Implemented cell instance lock-down, using the "instance lock/unlock" command. This prevents a cell instance from being changed.
    Also: 2008-01-05 11:48 tim Corrections to layer and cell locking mechanisms.
    Also: Corrected the behavior of layer locking so that the treatment of contacts is now consistent (except for stacked contacts, probably).
    Also: Completed the Euclidean-distance CIF grow/shrink operator.
    Also: 2008-01-07 12:42 tim Corrected the paint function and added the toolkit Tcl script.
    Also: 2008-01-08 02:40 tim
    Also: Corrected the DRC-CIF handling so that changing the cifoutput style to a style not containing the DRC-CIF rules does not cause a crash. It also prints a warning when DRC-CIF rules have been disabled by changing the CIF output style.
    Also: Minor correction in the display of stacked contact types.
  56. January 26, 2008 at 2:40am
  57. January 28, 2008 at 2:40am
    Corrected a bad error where I failed to clean up an experiment and therefore left a serious problem in the database paint code.
  58. January 29, 2008 at 2:40am
    Corrected an error that causes a crash when attempting to stretch, move, or delete a selection containing non-Manhattan geometry (error introduced by layer locking code).

Revision information on Magic version 7.3:

  1. September 12, 2003
    Original version. The "only" change from version 7.2 is the method of handling contacts.
  1. September 22, 2003
    Changed stacked contact handling such that stacked contacts are only generated in response to the keyword "stackable" in the "contact" section of the tech file. Otherwise, this version is supposed to be backwardly compatible with all technology files designed for versions 7.2 and earlier.
  2. September 26, 2003
    Changes to match magic 7.2.51; addition of a LEF file reading routine.
  3. October 27, 2003
    Changes to match magic 7.2.54.
  4. November 25, 2003
    Changes to match magic 7.2.58. Also, fixed errors in the stacked-contact handling of the DRC section and selection stretching function.
  5. November 28, 2003
    Fixed a long-standing error in the techfile DRC section which caused "no overlap" errors on all contacts whenever subcells were present. Also, fixes transferred from 7.2 with "*" notation in the tech file, and a very long- standing error with the select() function in the IRSIM I/O handler, when compiled on systems defining SYSV (such as Linux). Thanks to Mike Marcel for pointing out this problem.
  6. December 1, 2003
    Minor changes to match magic 7.2.60---colormap and style files expanded to include metal9 and metal10 definitions and corresponding vias; LEF read routine enhanced to speed up reading files with complicated port geometries, which result in a long list of labels in the cell definition.
  7. December 3, 2003
    Fixes to DRC routines for subcell interaction, including a new algorithm for determining exact overlap which does not require rectangular areas. Also, updated style files to format 7, removing all octal notation and replacing with "%i" notation (normally decimal, with 0x for hex and leading 0 for octal). Stipple patterns changed from 3-digit octal to 2-digit hex (for obvious reasons).
  8. December 5, 2003
    Fixes to the extract and extresis sections for compatibility with the stacked contact method. Extraction and IRSIM simulation confirmed for the tutorial cell.
  9. December 11, 2003
    LEF/DEF reader expanded to encompass LAYER, VIA, and VIARULE statements, and separately handle port and obstruction layers inside cells. Tech file scmos9m.tech modified to include obstruction layers on active, m1, and m2 planes.
    Also: Took care of several things in the TODO file, including removing references to Void and removing the deprecated keyword register. Void references have not been entirely resolved, as some of them need to be void and others int or bool and files need to be worked through individually.
    Also: Some fixes to resistor and capacitor extraction, esp. to add the SPICE semiconductor resistor and semiconductor capacitor types. Better extraction models are needed, however.
    Also: Some fixes to configuration and Makefile, in particular, to add in the switch -fPIC which was defined but unused.
  10. December 30, 2003
    Fixes to match version 7.2 revision 62, including the fixed Tcl line input method (for functions such as label entry in the "netlist" window). The input method is called by the Tcl function "magic::dialog [prompt] [prefix]", but is handled slightly differently depending on whether it is called from the command line or from a button function such as the netlist menu label input.
  11. March 11, 2004
    Changes to the colormap reader to handle 1) color names, 2) comment lines, and 3) more than 256 entries. Colormap files have been updated to take advantage of this change. Style files can potentially use color names in place of numbers, but these have not been updated.
    Also: The restriction that the tcl version must be compiled with "make tcl" and installed with "make install-tcl" has been eliminated. Now, "make" and "make-install" suffice for both the tcl and non-tcl versions.
  12. March 19, 2004
    Changes to match magic version 7.2 revision 64, including modified SimTreeSrTiles function, enhanced command-line functions goto, getnode, findlabel, and update, and added the new command (TCL only) search. Modified the autoconf configure to compile Tcl and OpenGL by default, and rearranged directories to put the TCL scripts in subdirectory "tcltk".
  13. March 31, 2004
    Changes to match magic version 7.2, revision 65, including handling of DOS-style Carriage-return/linefeed in technology files, and correction/extension of the "squares-grid" command in the tech file "cifoutput" section.
    Also: Corrected an error in reading the "edge" rules in the technology file DRC section.
    Also: Changed the behavior of coordinate parsing so that all commands can handle grid-based coordinates. The command "snap user" will cause all coordinates to be based on the grid specified by the "grid" command, by default. This includes handling the grid offset and different X and Y grid spacings.
    Also: Fixed the "paint" command in the technology "compose" section so that it operates on contact types without missing planes.
  14. April 9, 2004
    Changes to match magic version 7.2, revision 66, namely Cygwin compatibility in the make process.
  15. April 12, 2004
    Changes to match magic version 7.2, revision 67, namely the modification of exttospice (ext2spice) to add ".subckt ... .ends" around top-level circuits that define ports, and the ability to revert to the original behavior using "exttospice subcircuits top off".
    Also: Added the command "cellsearch" to the TCL-based version, that registers a TCL procedure as the callback function to a search over cells. This is similar to the "search" command for tiles. The two variants are "cellsearch " for searching once for every cell definition, and "cellsearch instances " for searching over all cell uses. The TCL procedure in the first case takes one argument, which is the cell name. The procedure for uses takes 3 arguments, the first a list of four integer values representing the bounding box of the instance in root coordinates, followed by two string values representing the instance name and cell name, respectively.
  16. April 13, 2004
    Fixed an error in the configure script that caused a run-time error in revision 15.
    Also: Added the capability to give alias names for stacking types in the technology file. Changed the behavior of "paint" and "erase" commands to handle stacking contact type names by painting or erasing the residues (contacts) of the stacking type rather than the stacking type itself. Changed the behavior of the layout (.mag file) reader in DBio.c to handle stacked contact names in the input file, which finally provides some compatibility with layouts generated using technology files with explicitly-defined stacking types.
  17. (never posted)
    Corrections to capacitance calculations for areas shielded from the substrate by intervening types.
  18. May 7, 2004
    Corrections to line drawing of non-Manhattan selection areas at the screen boundary, and a very important correction to region and network selection of areas containing non-Manhattan geometry, which otherwise may hang the process (although it is interruptable).
  19. May 11, 2004
    Makes a correction to the tech file read-in of stacked contacts that allows one layer (such as "pad") to be defined that has the same residues as one stacking type (such as "m123c") without magic's confusing their respective paint/erase tables. This avoids the necessity of having to define an extra plane (usually "oxide") just so type "pad" can have different residues than the stacked contacts. Note that this is only a problem for 3-metal-layer technologies, as four or more layers in a pad would never match any of the automatically-generated stacked contact types.
  20. May 13, 2004
    More corrections similar to Revision 18 to complete the correct behavior on searches containing non-Manhattan tiles for the sim ("getnode") and resis ("extresis") modules. A few corrections to Revision 19, which failed to compile do to some typos in the source.
  21. May 24, 2004
    Added an arrowhead extension to the "line" element type. Also, cleaned up the error message text for the "element" command such that it gives helpful feedback about correct syntax and available options. Element reads from a .mag file now correctly set the "persistent" flag for "line" and "rect" elements (in addition to "text", which was previously handled correctly).
  22. June 2, 2004
    Fixed the "device capacitor" and "device resistor" extraction to operate correctly on devices with model names (other than "None") for which a device length and width is extracted instead of a value. Thanks to Mark Martin for pointing out this error.
    Also: Fixed "getnode" and "extresis" (again!), this time to properly handle stacked contact types. Otherwise, these functions can hang when encountering a region containing a stacked contact.
  23. June 3, 2004
    Removed all of the error-generating statements at the top of many the header files, and instead implemented a standard method by which each include file defines a variable indicating that it has been parsed, and makes sure that it is not read more than once. Then, each header includes any other headers that it depends on. Further, redundant declarations of TRUE and FALSE have been removed, and "bool" has been typedef'd to "unsigned char". bool variables set to negative values have been recast as "int". Thanks to Jason Schonberg for the patch file which implemented most of the above changes.
  24. June 15, 2004
    Added a preliminary version of the DEF file writer. Documentation to be provided, eventually.
  25. June 18, 2004
    Improvements on all the LEF/DEF methods. The current version handles VIA definitions correctly, although at the moment it reads contact CUTS and does no extra processing (i.e., CIF-to-magic boolean rules) to produce the magic contact areas. Unlike previous versions, it preserves route and via coordinates in half-internal-unit values. Still to do: 1) Handle routes with non-standard widths as "SPECIALNETS" instead of "NETS" in the "def write" function, 2) implement CIF-to-magic rules on contact cuts, 3) convert PINS section in DEF files to ports in the top-level layout for the "def read" function.
    Also: Removed the restriction that no two contacts can share residues. It is now perfectly legal to define types, say, "via" and "viacut" which are treated differently by DRC and CIF I/O, but which contact the same two layers (e.g., metal1 and metal2).
  26. June 22, 2004
    A few more improvements on LEF/DEF methods. Implements SPECIALNETS vs. NETS in the DEF output file. All named nets, and especially nets with global names or matching the TCL variables $GND and $VDD, will be treated as "special nets".
  27. July 2, 2004
    A couple of critical fixes. The "stretch" function problems have been eliminated (thanks to Nishit at SynappsCorp).
  28. July 7, 2004
    Expanded the "tech" command to query the DRC database. Includes command options "tech drc width <layer>" and "tech drc spacing <layer> [<layer2>]".
  29. July 8, 2004
    Critical fixes to the stacked contact painting functions, which now appear (fingers crossed!) to be correct. There is one important caveat: Layouts created under magic-7.2 or earlier which attempt to make contact stacks by painting types that are officially not supposed to overlap (like m456c on top of m3c, in the SCN6M_DEEP.09 process) will not load correctly in magic-7.3. However, if the techfile conversion program (see download table) is applied to the original technology file, and the resulting techfile is used to view the layout, it will work correctly.
    Also: Revision 23 was found to break exttospice, in that nodes would always be interpreted as floating due to the critical bit being lost in the conversion to boolean. This has also been fixed.
  30. July 9, 2004
    Yet again, another fix to the connectivity selection mechanism for non-Manhattan geometry. This one involves coping with "(M)INFINITY" values in border tiles. "Infinite" values are handled by enforcing the special arithmetic (INFINITY + x = INFINITY) and so forth, and so all such equations must be computed separately.
  31. July 13, 2004
    New network selection "undo" record by Nishit at SynappsCorp. This code separates network selection from other types of selections when creating the undo/redo records. The premise is that network selection 1) is virtually always for informational purposes only, 2) involves a lot of tiles, and 3) rarely ever gets undone/redone. The original selection undo mechanism remembers every single tile paint operation. This makes sense for area selections. However, for net selections, it is very easy to regenerate the network selection on the fly by knowing only a single starting position. So the new method does not gobble up huge chunks of memory for every network selection, and by avoiding all of the memory allocation overhead, actually speeds up network selection significantly.
    Also: Minor but critical fixes to non-Manhattan geometry handling for extraction.
    Also: "Corrected" subcircuit extraction for ports which belong to the same network. I put "corrected" in quoted because the situation is somewhat undefined. However, the newer version will write the expected number of arguments to the "X" record when writing the SPICE deck. Done this way, the method supports "thrus" in standard cells.
    Also: New command option "wire segment" will draw wire segments by supplying a centerline and width. Will draw non-Manhattan segments (finally, a command to draw non-Manhattan wires!).
    Also: Support added for the read-in of non-Manhattan wires in CIF and GDS input. This is specifically for the "wire" record, which is different from rectangle and polygon records, and tends to be rarely used.
  32. July 14, 2004
    Corrects a couple more errors in non-Manhattan geometry painting/erasing.
    Also: Corrects the macro rebinding of "o" and "O" for "openwrapper" and "closewrapper" by allowing macro definitions to call Tcl procedures as well as magic commands. This is a "real ugly hack" because it requires setting up a "dummy" command name to pass to the macro, with the real command set as a tag callback to the dummy command name.
    Also: Used the new macros-call-procedures method to define new procedures "pushstack" and "popstack" and bind them to keys ">" and "<", enabling a more hierarchical feel for the editing.
  33. July 16, 2004
    Very important new feature: The command option gds readonly [true|false] allows imported GDS cells to be tagged with 1) "read only" status, 2) the GDS filename, and 3) the start and end file positions for the cell. When this cell is written back into an output file, the cell definition itself will be copied verbatim from the original GDS to the new output file, regardless of what magic shows the contents of the cell to be. This is intended for handling vendor-supplied cells such as padframes and standard cells, where one does not want to risk having magic possibly alter the layout of a pre-characterized circuit through its boolean operators. With this method, one can devise a special "cifinput" section of a techfile for translating GDS into a LEF-like cell structure, wherein the standard cells have most details hidden and only show areas for routing and obstructions.

    Note that one can query the information retained about the GDS file and positions using the "property" command in magic.
    Also: The "hack" mentioned in revision 32 has been made more transparent by defining a new command "gmacro" (for "general-purpose macro") that has exactly the same syntax as "macro" and "imacro" but which allows Tcl procedures and statements to be called by the macro expansion.

  34. July 19, 2004
    Non-Manhattan paint routine correction.
    Also: Updated the technology file format to "30" with the addition of CIF istyle and ostyle "variants" (see the Technology web page for details).
  35. July 20, 2004
    Non-Manhattan painting tile cleanup attempt. This prevents excessive splitting of the tile plane during non-Manhattan paint operations. It does not yet allow general merges of sub-split non-Manhattan tiles into larger, simpler tiles, so it does not completely correct the problem.
  36. July 21, 2004
    "Wire segment" command extended to multiple segments and handles corner mitres between segments.
    Also: "closewindow" command extended to include a window name, so the command can be run from the command line, with predictable results.
    Also: Window-manager initiated window close commands (WM_DELETE_WINDOW message) forced to use the magic "closewindow" command (using the Tcl "wm protocol" command).
    Also: Non-console startup redesigned to use a standalone executable "magicexec" which is a replacement for "wish" and works around the problem of reading the "magic.tcl" script in place of the ".wishrc" script. This allows "magic -noc" to be called from a remote machine, which is important for being able to run Tcl-based magic in batch mode.
  37. July 26, 2004
    Removed the "DoubleInt" code (thanks to Nishit Patel for the code changes) on the assumption that most compilers will recognize "long long" as a 64-bit integer type, and handle it correctly. Also, this release defines an option "euclidean" to the "drc" command that turns on/off the Euclidean distance metric for DRC checking. Previously, this option had to be compiled in and could not be changed.
  38. July 28, 2004
    Added the new GDS command option "gds array" which is actually the old GDS command option "gds flatten". Now, "gds flatten" indicates that "small" cells in the GDS input stream should be flattened. With "small" set to mean "10 rectangles or fewer", this method catches most instances in which contact cuts are arrayed prior to writing GDS output. By flattening these instances on read-in, magic is forced to do more processing up front, but subsequent processing, such as displaying, DRC, extract, connectivity searching, etc., will be much faster. This method will also tend to stop the generation of "generic" contact and diffusion forms, which are usually the result of the arrayed cell form for contact cuts.
  39. July 29, 2004
    Added PROPATTR and PROPVALUE records to GDS (thanks to Nishit Patel) that allows magic to record instance names and array information that is not otherwise possible to write and read back, such as cell use IDs and array indices that do not start at zero. Some more code cleanup thanks to Jason Schonberg, including removing a copy of the whole magic tarball that managed to get into the top directory, making the whole tarball twice as big. A few corrections for compilation on FreeBSD thanks to Chris Lafrieda at Cornell, and finally, the debugging definition for file locks has been removed and changed to a configuration option (normally disabled).
  40. August 3, 2004
    Added a "variants" extention to the cifinput, cifoutput, and extract sections of the techfile (see the Technology Files web page for details).
    Also: Corrected a DRC error that causes certain rules (especially the "surround" rule) to effectively shadow other non-related rules.
    Also: Corrected a small memory leak in the implementation of PROPATTR in the GDS output from revision 39.
  41. August 4, 2004
    Fixed another DRC problem which shows false DRC errors on stacked contact types because the checker routine fails to skip "false edges". Also: All MALLOC, CALLOC, and FREE macros replaced by their respective routines mallocMagic, callocMagic, and freeMagic. Thanks to Jason Schonberg for this patch.
  42. August 5, 2004
    Added capability to read non-Manhattan paths in the GDS input. This also corrects a problem with the original GDS path parser which would round off paths with a centerline on a half-integer boundary relative to the base GDS scale. This routine handles endcap specifications in the GDS (except for round endcaps). The endcap handling has been copied to the "wire segment" command, which may now take the switch "-noendcap" as its last argument.
  43. August 6, 2004
    Corrected revision 42, including a complete and correct implementation of input scaling in the GDS file. Also corrected the "gds flatten" function such that if the GDS file instances cells before they are defined, these cells will not be flattened. Thanks to Johannes Grad for help with the GDS read-in problems. The result is that magic-7.3.43 is compatible with GDS produced by various commercial place-and-route tools. Example layouts were produced using the IIT standard cell library.
  44. August 10, 2004
    Made an additional correction to revision 43 to avoid changing the GDS input multiplier scale while GDS is being read; otherwise, after a scale change, the remainder of the GDS file gets read at the wrong scale. Again, thanks to Johannes Grad for providing place-and-route examples demonstrating the error.
  45. August 12, 2004
    A critical fix to the GDS and CIF rescaling; the plane rescaling function was using the database paint table, not the CIF paint table, causing loss of data under certain conditions when reading GDS or CIF files. Also, fixed layout (.mag file) read-ins for labels attached to stacking types, which was not covered by the handling introduced in Revision 16 (see above).
  46. August 17, 2004
    Minor fixes and enhancements, especially for scripting procedures. "-origin" option added to the "rotate" command to rotate about the layout origin. Procedures "suspendall" and "resumeall" changed to allow nesting. "instance list self" now returns all selected instances, and that and "cellname list self" don't merge the output strings together into one glob. Procedure "pushstack" will attempt to select a cell if one is not already selected.
  47. August 18, 2004
    Important fix to cifinput/cifoutput rule handling: This was operating on ALL planes for each rule, so rules with contacts would apply the bloat procedure to both planes containing the contact, usually giving improper results. This almost always causes select layers (n-select, p-select) to come out wrong.
  48. August 24, 2004
    Fixes a simple but rather bad error in revision 47 which causes incorrect output for the "squares" function in CIF/GDS output.
  49. August 28, 2004
    Another fix to extraction of contacts which was failing on occasion to connect together nodes on either side of a contact, due to the new way that magic 7.3 handles contact images.
  50. September 2, 2004
    Revised the extraction mechanism for resistor devices to split the capacitance under the resistor, distribute it between the resistor end terminals, and then ignore the node in subsequent extract file output.

    Note that the feature has the consequence of reporting missing nodes when extracting a hierarchical circuit with resistors. This approach will be abandoned soon in favor of reporting the isolated node in the "devres" line in the extract file, and handling the capacitance distribution in "ext2spice" instead of in the extractor, with appropriate flags given to the "ext2spice" command.

  51. September 6, 2004
    A large number of changes in this revision. Corrected a number of annoyances/errors, including:
    1. Strict file permissions given to ".mag" files arise from changes in the GNU database for function "mkstemp". This has been corrected by changing the file permissions to match the user's umask after renaming the file.
    2. Characters left-bracket, backslash, and double-quote can once again be typed to the command-line (console) from inside the layout window.
    3. "select net" may once again be followed by a move/copy/stretch command with the expected results. This fix also prevents the loss of the net selection after "undoing" these commands.
    4. "select net" now properly detects a connection through a stack of four or more contacts.
    5. Selection of non-manhattan geometry retains the geometry through move/copy/stretch functions. Previously, if the command caused the non-manhattan regions to be blended back into manhattan geometry, the manhattan geometry would get added to the selection, an unexpected result.
    6. Non-manhattan "splitpaint" and "spliterase" commands translate the orientation correctly when the target edit cell is rotated or flipped.
    7. DRC properly handles non-manhattan geometry checks between subcells. HOWEVER, I did replace a large chunk of magic's paint code because I could not find any justification for it. A possible consequence of this change might be spurious DRC errors. I should be notified immediately if anyone discovers quirky behavior in the DRC mechanism (but I have done basic sanity checks on this).
  52. September 7, 2004
    A correction to the extraction code that fixes errors in resistor device extraction when the contact type is defined in the tech file such that the contact abuts to the resistor type.
  53. September 8, 2004
    As promised, replaced the Pi-network method for "device resistor" extraction with a Tee-network method that preserves all of the computed capacitance. Becauase this involves splitting the resistor into two parts, it plays havoc with LVS. Therefore, it is enabled or disabled with the command-line "ext2spice resistor tee on|off". This method is disabled by default.
  54. September 17, 2004
    A number of minor changes, most too trivial to mention. A change to nonmanhattan DRC checking made one or two revisions ago was deemed much too lenient, and changed back to the original (which was a bit too conservative, but better that way than the other).
  55. October 19, 2004
    A number of major changes. HTML documentation for the command reference added to the "doc/html" subdirectory (and also copied on this website). Command "findlabel" corrected (previously caused a program crash). Command option "gds contacts" added to allow contacts to be written to the output as arrayed subcells (as most EDA software does, these days) to greatly reduce the size of the resulting stream file. Command option "gds order" added to force post-order reading of data from a GDS file. This option is forced when using "gds flatten" because the contents of subcells must be known at the time of flattening. Corrected the use of the middle mouse button to pick and fill paint, and the "what" command, when multiple stacked contacts are involved.
  56. October 25, 2004
    Overhauled the "plot pnm" function so that it is almost foolproof; the new version configures default rendering styles without requiring a section in the technology file, so it is compatible with all existing technology files. Also, it can now work on very large chip layouts without running out of memory. Finally, it does true 24-bit color blends and a number of optimizations for speed.
    Also: Added a script to pull the version and revision information from the directory name, and the startup code and the "version" command now print the revision information.
    Also: Removed old and unused directories, and cleaned up the directory structure such that modules with only one source file to compile are merged into the "utils" directory.
  57. October 29, 2004
    Extended the method used for extracting annular transistors to cope with "device resistor" and "device capacitor". Also, fixed a bug in the method which was previously giving incorrect output for certain geometries of annular transistor.
    Also: Added keyword "alias" to the "types" section of the technology file. This allows the declaration of macros representing multiple device types. These macros will be expanded when reading the technology file. With this addition, the magic technology file syntax is now able to handle everything that the preprocessors were used for, so there is no longer any need to write technology files requiring preprocessing. Fixed a bug in the handling of the "variant" keyword in the techfile extract, cifoutput, and cifinput sections.
  58. November 1, 2004
    Corrected the device merging code in ext2spice and ext2sim. This had been incorrectly merging (or not merging) devices due to not re-zeroing a counter in the command version (as opposed to the standalone version, which runs from the beginning every time). A few test cases suggests that the merging works properly now both for "conservative" and "aggressive" merging.
  59. November 3, 2004
    Fixed a couple of errors in the resistor extraction code from revision 58, and altered the algorithm so that the result is orientation-independent. Grieved over presidential election results.
    Also: Added the capability to add include statements in the technology file to break up the technology file into pieces (some of which may be used by multiple technologies; this is done by the scmos techfiles but is a preprocessor option and does not make it to the final version).
    Also: More code cleanup thanks to Jason Schonberg.
  60. November 9, 2004
    Overhauled the macro handler, to use hash tables instead of a linked list, and to operate separately on different window types. Removed the "gmacro" scripted command, as the overhaul removes the problem with calling multiple commands or Tcl procedures from inside macro definitions.
    Also: Overhauled the event mechanism so that buttons are treated like keys and may be bound to commands like keys. Revised several commands (notably "box") to have the command options that can mimic the button operations. Currently, the "netlist tool" is nonfunctional because there is no command-line equivalent of the button actions. This will be corrected shortly. If you need the netlist tool, use revision 59.
  61. November 10, 2004
    Finished the overhaul of the event mechanism to include the "netlist tool" functions and also the 3D window functions. Fixed and enhanced the "render" procedure for the 3D window with a GUI wrapper. Fixed a bug in the 3D window background clearing, and another bug in the MacroRetrieve procedure call. Thanks to Nishit Patel for most of the command, procedure, and macro enhancements and rewriting for the new button event mechanism.
    Also: The title bar of the GUI layout window now reports the tool in use.
  62. November 15, 2004
    Went back and attempted a non-Tcl compile, and corrected all the errors that cropped up. It is now possible to compile and run without the Tcl interpreter.
  63. November 16, 2004
    Corrected the .dstyle file format loading backward compatibility to versions earlier than 7. Also, lifted the limit on the number of stipples that can be in the style file.
    Also: Fixed the non-GUI scrollbar in the Tcl version; fixed the system .magic file creation for the SCHEME interpreter version.
  64. December 3, 2004
    Added the ability to handle Button4 and Button5 button bindings, which correspond (in Linux, at least) to mouse scroll wheel events.
  65. December 7, 2004
    Corrected two segfaulting errors, one related to non-Manhattan geometry, and the other related to confusion of the "join" command between Tcl and the netlist window, since the command handling for non-layout windows was changed.
  66. Februrary 1, 2005
    Return-value declaration fixes by Jason Schonberg. Fix to the GUI scrollbar for cases in which lambda units are larger than internal units. Fix to the new "include" statement in techfiles that checks the directory where the parent tech file is located. Added (preliminary) handling of contact cuts inside triangular areas (this feature does not extend to the "contact subcells" option for GDS output).
    Also: Changed the "alias" name handling so that names declared as aliases in the technology file can be both loaded from .mag files or painted and erased on the layout (see the Technology Files web page).
  67. Februrary 23, 2005
    Corrected an error in the CIF/GDS generation, in which contacts could not be placed on a 1/2 centimicron grid if the lambda value is odd (e.g., scalefactor 9 for a 0.18 process), resulting in off-center contacts and illegal layout where contacts in neighboring cells overlap.
    Also: Added a few styles to the pattern style files.
  68. March 7, 2005
    Rewrote the "maxwidth" rule algorithm from scratch, such that it actually now works correctly under all conditions. By integrating the new maxwidth algorithm into the "widespacing" rule, that one now works correctly, as well. This is bigger news than can be expressed in a release note.
    Also: Corrected the "version" and "revision" scripts so that they work correctly when the magic directory is symbolically linked (which it is in the CVS version on opencircuitdesign.com).
  69. March 8, 2005
    Added so-called "wizard" commands "drc *halo" and "drc *stepsize". These allow control over the DRC halo and stepsize distances. The latter can be specified in the technology file, but having on the command line lets one easily optimize the value to keep the DRC computations to a minimum. The halo is normally set to the largest dimension in a DRC rule, to ensure that all rules are checked when processing arrays and subcells. Unfortunately, pad rules, maxwidth, and widespacing rules are so large that they can slow the DRC computations down to a crawl. With the new command option, the halo distance can be forced down to a value that keeps magic running at a reasonable clip, while missing some of the rule checks (naturally, at some point, one would want to set the halo back to the original value and run a full DRC check on a design). This is a stop-gap measure; I intend to investigate what can be done to properly deal with the problem.
    Also: Revised the algorithm from revision 68 (see above) for greater speed.
  70. March 14, 2005
    Final modifications to the routine implemented above; removes cryptic and unsettling messages about "out of memory for maxwidth rule" or somesuch.
  71. March 16, 2005
    Added two new commands:
    (1) polygon type x1 y1 x2 y2...
    Generates a polygon from the indicated point pairs.
    (2) *bypass command...
    Bypasses any redirection to the terminal that is currently in effect. Revision 60 broke the behavior that button commands can be executed while a command is halfway typed in on the command line (via the ":" macro). By mapping button commands to the *bypass command, this behavior has been reinstated. I often make use of this feature.
  72. March 22, 2005
    Added new CIF boolean operator "bloat-all <types1> <types2>". This operator includes all material of types types1, then finds all bordering material of types types2, to the extent of connectivity (simple connectivity, on one plane only).
  73. March 31, 2005
    Fixed a bad error with triggered (e.g., "widespacing") rules. A triggered rule followed by a rule for the same layers with a larger distance value can cause a segmentation fault.
    Also: Reinstated the "Makefile.in" for the readline-4.3 directory, which was inadvertently deleted by CVS.
  74. April 2, 2005
    Fixed an error with the new maxwidth rule, which would cause spurious error reports where no errors existed.
    Also: Added a new CIF boolean operator "bbox [top]" that generates a rectangle encompassing the bounding box of the cell. If the optional keyword "top" is present, the bounding box is created in only the topmost cell.
    Also: Patches from Jason Schonberg. Mostly prototypes and include statements, and one correction of a potential string boundary underrun.
  75. April 4, 2005
    Major revisions to the graphics. Backing store implemented for caching the graphics image between the layout drawing and the highlight drawing, restoring the quick response previously enjoyed by the 8-bit graphics implementation. Extended this method to handle automatic refresh of layout areas during screen scrolling. The result is blazingly fast graphics for anything other than a full screen redraw (will have to work on that later).
    Also: Fixed a few other graphics anomalies in the process, including the problem of hacked-up contact crosses, and an unnecessary redraw that was being done in the areas that would be scrollbars in the non-wrapper version.
    Also: Modified tkcon.tcl to accept the environment variable MAGIC_WISH preferentially to the default value of "wish". This can be used to prevent the situation where magic is compiled for one version of wish but tkcon is starting up with another one, preventing magic from running.
    Caveat: The present revision has a few quirks, the main one being that I have not dealt with border areas in the backing store implementation, so the redrawing is incorrect when magic is run without the "-w" option (which would be always, for the non-Tcl compiled version).
  76. April 5, 2005
    Updates to revision 75: The backing store mechanism now correctly handles border areas, and operates in both the Tcl and non-Tcl based versions of magic (both for OpenGL and standard X11 graphics).
    Also: Extended the backing store mechanism to handle expose events from the graphics, so the layout does not need to be redrawn when the window is moved or raised from behind another window. This is particularly noticeable when multiple expose events are generated, such as when another window is dragged across the top of the layout window.
    Also: Corrected two errors with the non-Tcl compile: One of them prevents successful compilation the first time around because a symbolic link to the readline package is not created until after it is needed by commands/CmdFI.c. The other error is the sudden dysfunction of the pthread_join() routine in the threaded graphics code, which used to work but now causes magic to hang upon exit. The behavior is most likely dependent on the version of the pthreads library used, and may be system-dependent.
  77. April 6, 2005
    A few more updates to the graphics speedups: The backing-store refresh for highlight erases was moved to the proper place, and some attempt was made to synchronize the X11 and OpenGL calls before/after backing-store operations.
    Also: Added text clipping to the cell bounding box for the OpenGL graphics using glScissors(), something that was previously unimplemented.
    Most of the peculiarities of the backing-store system have been eliminated except for two: 1) Scrolling needs to be adjusted to match the 8-bit stipple pitch, and 2) Areas obscured by other windows need to be tracked so that the backing store mechanism does not attempt to write into, and then recover from, an invalid window area. As it is now, placing the magic layout window halfway off the screen and then scrolling the layout view causes the window to get all screwed up. Requires catching and handling Expose and NoExpose events, and keeping an extra plane per window mapping these areas.
  78. April 7, 2005
    And, as predicted and promised, yet more updates to the graphics: Fixed the scrolling to match stipple alignment, and fixed the area saved to backing store, which was too large and sometimes saved slivers of highlights into backing store.
  79. April 11, 2005
    Added the capability to track VisibilityChange events in X11, so the backing store mechanism won't allow a copy from an obscured window into backing store.
    Also: Major additions to the selection mechanism. Added command options select pick, select move, and select keep. These commands manipulate the selection without clearing the selection at the end of the opration, allowing "drag and drop" operations. To this end, the Tcl version adds the "pick tool" to the list of available tools.
    Also: Other minor bug fixes, including replacing Makefiles in the readline subdirectories, such that readline actually compiles again.
  80. April 12, 2005
    Corrected an error introduced into the selection highlight redraw code in the previous revision. Corrected a few errors in the interactive selection code. Removed the "tool" command from the Tcl version and switched the "changetool" script to "tool" to replace it. Created command option "cursor " to set the tool cursor (previously done by the "tool" command). Added a new cursor for the "pick" tool, and worked out more of the button and motion bindings for "pick".
  81. April 14, 2005
    Added a slots operator into the cifoutput code, similar to squares but allowing different sizes in tile long and short dimensions. This is somewhat experimental at the moment, but gets around certain problems in generating specific vendor geometries.
  82. April 15, 2005
    Added a crosshair cursor, and interactive wiring. The crosshair cursor uses the new command crosshair, and the interactive wiring uses the new command option wire show, which does the same thing as wire leg but puts the result in the selection cell, so that it can be displayed prior to committing to the wire route. The two new features together make precision wiring much easier and faster than before. In the Tcl/Tk GUI wrapper, the crosshair can be turned on and off from the "Options" menu, and the interactive wiring and selection have been added to the "wire" and "pick" tools, respectively.
    Also: The use of GL_LINE_SMOOTH in OpenGl has been reworked to operate only on lines that are not orthogonal to the axes (mostly contact X's). Otherwise, the operator tends to draw lines double-wide (at least in certain video driver implementations).
  83. April 16, 2005
    Repaired a few errors in the interactive selection and wiring mechanims. Interactive selection now tracks the coordinates relative to the starting position and properly translates from edit cell to root cell coordinates. The interactive wiring does not register uncommitted routes with the "undo" mechanism.
    Also: Added new command options wire incr|decr width|type for automatically bouncing up and down routing layers. In the Tcl/Tk version of the "wire" tool, the bindings are as follows:
    • Button4 (scroll wheel): wire incr width
    • Button5 (scroll wheel): wire decr width
    • Shift-Button1 wire incr type
    • Shift-Button3 wire decr type
    The wire incr|decr type command takes the further step of picking the wire width for the next routing type from the DRC minimum width rules. To be done: Add a mechanism for enforcing design rules based on DRC spacing and width (need to ensure that DRCGetDefaultSpacing() works properly. . .).
  84. May 11, 2005
    Fixed an error in the GDS read-in routine which causes it to ignore most boundary records. Thanks to Erwin Prinz for pointing out this error.
    Also: Patches from Jason to fix a crash situation when an attempt is made to open the 3D window without starting magic in OpenGL graphics mode, and addition of missing include files.
    Also: Fixed a problem with handling cell names containing a dollar sign character, allowing magic to import/export Cadence pcells verbatim using the "gds readonly" option.
    Also: Fixed some problems arising from using the "tool" command (now script procedure) when not also using the GUI wrapper. Thanks to Mark Martin for pointing out this error.
  85. May 11, 2005
    Fixed an error causing a crash when "gds rescale false" is used and snapping causes triangular areas to become degenerate. Also added "cellname lock|unlock" command option and "cellname flags" command option. Disabled DRC checks on read-only GDS cells.
  86. May 16, 2005
    Corrected a problem with inter-cell CIF/GDS generation on vendor (read-only) GDS cells. Unfortunately, the root of the problem seems to be the plane fracturing algorithm, so this fix only bypasses the error. However, it is certainly true that magic should not generate any output based on the "fake" geometry in the .mag file corresponding to the vendor GDS file.
  87. May 31, 2005
    Some minor script-level corrections. Added "*bypass" to interactive commands to prevent them from resetting the keyboard redirection to the console. Changed the name of the options file from ".magic" to ".magicrc", with the ".magicrc" file being searched first, followed by ".magic" if not found. The system-level options file was changed to ".magicrc". Also: processing the system-level ".magicrc" file in the Tcl version is now wrapped in "suspendout" and "resumeout", preventing Tcl commands in the file from being echoed to the console. Commands "set VDD vdd!" and "set GND gnd!" have been put into the system-level file to prevent the extractor from complaining that they are not set.
  88. June 1, 2005
    Corrected an error that prevented the "alias" techfile keyword from working correctly.
  89. June 3, 2005
    Corrected an error, discovered and reported by Wei Zhang at Princeton, in which the "extract length" function fails. There were two errors here, one of which was the failure of DBTreeCopyConnect to generate all images of a contact, and must impact some of the other connectivity search routines as well.
  90. June 28, 2005
    Corrected one error, added one extension, and adjusted one "feature". The error, reported by Mark Martin, was that the backing-store mechanism fails on non-layout windows, causing magic to crash if any non-layout window is opened. The extension is the addition of handling non-unity magnification in GDS input files (it only handles integer magnifications, but clearly this is a huge improvement over treating all magnifications as equal to one). The feature was the behavior that closing the console window exits the application abrubtly. I modified the behavior so that closing the console window calls magic's quit routine, prompting the user to acknowledge that modified files have not been saved.
  91. July 17, 2005
    Reworked some of the DRC code. The "drc find" command now searches the hierarchy, not just the current cell, so it does not miss errors that are in descendents of the current cell. To "drc count" I have added an option "drc count total" that reports total number of errors in the layout. This is used by a new GUI function in the wrapper that reports DRC clean/not clean/busy.
  92. July 19, 2005
    Corrected an overflow condition that causes non-Manhattan geometry to disappear at far-out scales on large layouts. Because the problem was in the primary search routines, this fix probably applies to more than just the layout rendering. Thanks to Mike Godfrey for the bug report. Also: Corrected another overflow problem at close-in scales, reported by Mark Martin. This problem only affected layout rendering, not the internal database.
  93. July 24, 2005
    Quick fix to a segmentation fault error discovered by Jason Schonberg; when a netlist window is closed from the window manager, the next call to "setpoint" is passed a NULL magWindow pointer.
  94. August 12, 2005
    Added options to the "flatten" command: "-nolabels" to avoid copying labels, "-nosubcircuit", and "-novendor" to avoid flattening certain types of subcells. Modified the "def write" command to correct several errors, including a few fatal ones.
  95. August 14, 2005
    One more serious correction to the "def write" command, an error in the algorithm that generates the wrong coordinate at the beginning of a line (overshoots the position by one endcap length). Also corrected several integer overflow problems with GDS read-in of non-Manhattan geometry. Thanks to Mike Godfrey for providing examples.
  96. August 15, 2005
    Corrected a problem with display refreshes when an obscuring window is present, also reported by Mike Godfrey. Also corrected a problem with input redirection (":" command) being ignored while DRC is running, and a serious error caused by revision 94 changes in which all sorts of things get screwed up due to a change in the interpretation of the expansion mask (i.e., revisions 94 and 95 are essentially unusable).
  97. August 15, 2005
    Additions and corrections to the LEF and DEF reading and writing code. The tech file format has been extended from the simple "layer" and "obs" keywords to include the class-defining keywords "masterslice", "routing", "cut", and "overlap", defining the LEF types of the same names. The syntax is the same, and "layer" is retained for backwards compatibility ("layer" indicates either "routing" or "cut", depending on the magic type). LEF-format output now includes layer information, and macro pins define port geometry (which was a potentially fatal bug as previously coded).
  98. August 16, 2005
    Some minor code corrections. Corrected a problem where coordinate position updates could produce a Tcl error due to some race condition with the Tk window becoming valid. Also corrected the problem with the crosshair failing to erase itself after loading a new cell.
  99. August 20, 2005
    Important corrections to the LEF/DEF reading and writing. Doing "def write" more than once now produces the same output each time. Extensions on special nets now zero by default. Via cut arrays now written out with "def write". Other changes and corrections.
  100. September 16, 2005
    Addition of GDS techfile extentions: 1) Use of the word "angstroms" in addition to "nanometers" in the scalefactor line, and 2) The phrase "units angstroms", which sets the fundamental GDS database unit to 1 angstrom rather than 1 nanometer. This becomes increasingly necessary for processes like 90 or 65 nanometers where a quarter or half lambda is, e.g., 2.5 nanometers, where the 0.5 part requires dimensions in angstroms.
  101. September 16, 2005
    Changed the "gds readonly" method so that it ignores the structure header and structure name for the specified input cell. Then, if the magic cell is renamed, the GDS cell gets renamed accordingly. This is necessary for the intended use of the method to handle Cadence pcells, since Cadence will write the same structure name in different GDS files.
    Also: Changed the "writeall" command to take the syntax "writeall force cell1 cell2 ...". This forces only the named cells to be written to disk, and skips all other cells.
  102. September 20, 2005
    Fixed an error that prevented execution of the command option "select top cell".
  103. September 27, 2005
    Corrected an error with an uninitialized tiletype mask that would produce garbage output for "def write" on some machines. Also, made "-w" (GUI wrapper) the default on startup, with "-nowrapper" ("-now" for short) required to get the non-GUI version.
  104. September 28, 2005
    Added a useful new command "contact type" that generates a contact at the intersection of the two residue types of the contact.
    Also: Modified some code to avoid calculating DRC for cases like "erase label" where paint is not modified, and an incorrect case where clearing the selection cell would trigger a DRC check.
    Also: Corrected DEF file input to compute subcell bounding boxes before attempting to place components. Otherwise, components not located at the origin get offset in position.
  105. September 30, 2005
    Bug fixes: Commands "move", "stretch", and "copy" now use lambda, rather than internal, units by default when a direction is specified but not a distance (e.g., "move left", which implies "move left 1").
    Also: Correction to DEF file reads to avoid segmentation faults when a cell is not defined, and correction to DEF file writes to avoid writing route layer as "space" when the first tile encountered is a contact type.
  106. October 2, 2005
    Finally got around to ensuring correct extraction of non-Manhattan devices (transistors, capacitors, resistors). However, there remain two problems: 1) Any device made of all split tiles can result in a completely screwed up .ext file (which seems unlikely but could happen in the case of a device drawn at a 45 degree angle), and 2) capacitors that are not modeled will have an incorrect parasitic capacitance from the node to ground. Modeled devices will (presumably) model the capacitance from the bottom plate to the substrate node, but unmodeled devices need to have the device type (top plate) area added to the area of the bottom plate type when computing parasitic (or coupling) capacitance.
  107. October 14, 2005
    Changed behavior of the DEF writing routine to handle overlapping stacked via types more-or-less correctly. The algorithm now works properly but assumes retangular areas for the vias. The whole thing needs to be rewritten to make use of the GDS output routines.
  108. October 26, 2005
    Corrected an error in the extraction routine from revision 106 that results in incorrect plane numbers and can cause magic to crash on the "getnode" command. Also added non-Manhattan geometry handling to the "getnode" routines (the lack of which can also cause a crash on the "getnode" command).
  109. November 21, 2005
    Corrected "extresis" to work with the stacked contact method. Thanks to Vijaya Kirti for pointing out this problem and providing an example layout.
  110. November 22, 2005
    Added an extension to "feedback add". If the command is followed by any number of points (X Y pairs), the feedback entry will be a polygon formed by the point pairs. Argument "style" must be given in this case. As special cases, a point or a line will always use style "outline" regardless of the style argument. Both non-manhattan geometry and non-integer internal units (such as nanometer units) are handled properly.
    Also: extended "feedback clear" to include "feedback clear ", which will clear all feedback entries containing a specific text substring. This allows, for example, the use of "feed clear CCA" to implement, in effect, the opposite of "cif see CCA".
    Also: corrected "wire segment" so that centerline point pairs given in non-lambda units are parsed correctly.
  111. November 23, 2005
    Revised "feedback add" to accept argument "style" as always optional, and to accept all styles from the ".dstyle" file as valid feedback styles. Also tweaked some constants (INFINITY and FEEDMAGNIFY) to keep feedback entries in nanometers (e.g., DRC errors parsed from Calibre output) from overflowing integer bounds. Also modified the feedback code to optimize both memory and computation time, especially for long lists of feedback entries.
    Also: extended the "gds polygon subcells" option to include GDS wire path structures.
  112. November 25, 2005
    Upon the revelation of Malvin Wong that magic starts behaving badly when more than 32 planes are defined, I changed the use of "int" for plane masks to a typedef'd "PlaneMask" type, which is set to "dlong" (double long, 64 bits) when MAXPLANES is > 32.
    Also: fixed an error from revision 111, and changed "cif see" behavior to use styles from "render" lines in the tech "cifoutput" section, if defined (otherwise, behavior is as it has always been). Allows one to see mutiple cif layers with "cif see".
  113. November 30, 2005
    Corrected the inevitable errors with the changes of revision 112; thanks once again to Malvin Wong for bug reporting and providing test cases.
  114. November 30, 2005
    Added a very important fix to the CIF/GDS output routine. Previously, magic would report a warning when arrayed subcells were small and closely spaced to the effect that output might be incorrect. The array interaction routine has been modified so that this cannot happen. Array interactions are made faster than simple subcell interactions by computing the interactions only between the first two cells in the array, then copying the paint to the end of the array. An error in CIF/GDS output occurs when the area of expansion needed to check for all interactions between the first two cells is larger than the cell width or height itself, so that paint can be generated for interactions between the 2nd and 3rd (or higher) cells in the array. When this is copied up to the end, some of the paint can end up well above the array. The solution is to reduce the array to at most 2x2, compute the interaction, restore the array size, and then copy the interaction area.
  115. December 1, 2005
    Added separate executable "magicdnull", similar to "magicexec" except that it does not invoke the Tk package (links to Tcl_Main() instead of Tk_Main()). This allows magic to run faster/more efficiently in batch mode when called with "magic -noc -dnull". Also: Changed behavior of command "windownames" so that 1) it is available in the non-Tcl version, and 2) it returns a list of window IDs when the graphics package does not define a routine to provide a window name. This ID can be used by the "setpoint" command to access a specific window (i.e., internal window structure) when using NULL graphics.
    Also: Included a fix for a problem reported by Eric Wong (thanks for the test case) in which magic hangs when searching for connectivity on a network passing through a stacked contact that is split between overlapping cells.
  116. December 7, 2005
    Revised the method magic uses for crash backups. Previously, magic would write ".save.mag" files for modified, unsaved cells upon the limited condition of receiving a SIGTERM signal. I have modified this so that magic 1) saves all cells into a single file in the /tmp directory, 2) saves and recovers such files in response to a (new) command "crash save" or "crash recover", and 3) automatically recovers the most recent crash file found when invoked on the command line as "magic -r". It also retains the behavior of writing a backup file upon receiving SIGTERM. The Tcl/Tk version contains a script which uses the sytem timer to generate a backup file every 10 minutes by default, or every $Ops(backupinterval) milliseconds. Backup files are removed upon normal execution of "quit" but are retained under all other exit conditions. Backup files are also removed after successful recovery. The implementation is very similar to what I implemented for xcircuit.
    Also: Made one minor change to fix the non-Tcl compile, and checked the non-Tcl compilation for correctness.
  117. December 13, 2005
    Corrected a bad error with the CIF array generation function in 114 due to a typo in the code. The array generation code still needs to be checked rigorously for correct operation.
  118. January 8, 2006
    Corrected an error in drawing non-Manhattan feedback areas, which clipped the tile area incorrectly, causing the diagonal to be drawn at the wrong angle.
  119. January 20, 2006
    Re-implemented file locking for about the fifth or sixth time. Uses Stefan Jones' implementation with fcntl() calls to generate advisory locks (works with NFS-mounted files). Because this version of file locking doesn't create extra files and directories, I have set the file-locking behavior to be compiled in by default.
    Also: Corrected the crash backup mechanism so that "magic -r" ignores any backup files belonging to an active process.
    Also: Corrected the configure script, which since revision 113 may refuse to compile in X11 on systems which have a linker that automatically links X11 with no special compiler flags. Thanks to Alan Davis for bringing this bug to my attention.
  120. January 24, 2006
    A few changes to the CIF file read routines to allow magic to read the "CIF torture test" without crashing (it does not pass with flying colors, but most of it is correct).
  121. January 25, 2006
    Finished basic changes needed to make magic pass the "CIF torture test" except for certain current impossibilities such as non-90-degree rotated cells. I won't reveal what horrible hack I did to make the "famous DD bug" go away---fortunately no program ever writes a "DD" record, so I'll probably get away with it (after all, nobody complained that magic didn't handle the DD record for 20 years, so who's going to complain that it is not handled precisely according to spec now?).
    Also: For Fedora Core 4 compliance (mostly to work around problems with gcc), I have changed the "make depend" process to list only local header file dependencies. Also I have modified the top-level configure script (which calls the real configure script) to set the CFLAGS variable without the optimization flag. Thanks to Michael Godfrey for help with the FC4 compilation issues. No thanks to the developers of gcc, who haven't produced a decent version of the compiler since 2.95.
  122. January 29, 2006
    Corrected an error with the CIF/GDS array interaction generation code changed in revision 117. If there are no interactions, the routine can exit before restoring the array bounds, causing arrays to be reduced to two elements in the layout. . . an unexpected and unwanted change! Thanks to Eric Liu Wong for reporting this error and sending a test case.
  123. February 9, 2006
    Tracked down a subtle bug in which non-Manhattan tiles caused the paint routine to violate the "maximum horizontal stripes" rule, leading to a possible infinite loop when writing CIF/GDS output (corrupting the tile plane database and potentially producing hangs and/or crashes on any number of tile manipulation functions.
    Also: Changes from Philippe Pouliquen to prevent problems with the graphics backing store mechanism in conjunction with 8-bit mode, and other changes to ensure proper compilation under NetBSD.
    Note: This revision was originally posted on February 8, but one typo was found in the code, fixed, and the distribution re-posted.

Revision information on Magic version 7.2:

  1. Original (prior to adding revision information); last updated August 29, 2002. Changed the "make" method from "make wrapper" and "make install-wrapper" to "make tcl" and "make install-tcl" both to reflect the fact that SWIG is no longer used, and to make it more syntactically compatible with "tclspice".
  2. Fixed conflicting routines in "exttospice" and "exttosim"; "exttosim" can be run without crashing the program. Extraction output now redirects to the console output, not the terminal output.
  3. More "exttospice" and "exttosim" fixes: Both programs now free memory like they're supposed to. In addition, both commands can be run from inside a window and automatically operate on the root cell of the layout in that window.
  4. Extensions to the "magic wrapper" GUI ("magic -w"):
    There is now a toolbar on the right-hand side of the layout window, showing all of the layers known to the tech file. Each one is a button. Clicking mouse button 1 paints that layer into the box in the layout. Clicking mouse button 3 hides the layer, and clicking mouse button 2 restores visibility of the layer. The name of the layer appears in the title bar of the layout. Also, the box coordinates are shown in the title bar. For people who use magic in 8-bit PseudoColor mode, the console window is repainted in magic colormap colors, so there is no more color switching between the layout and the console.
  5. Important repairs to the CIF reading/writing and internal grid rescaling code---affects the ability of magic to read CIF/GDS in a different lambda scale from the scale at which it was written. Also, non-Manhattan geometry has finally been incorporated into the extresis code.
  6. Minor revisions thanks to Conrad Ziesler implementing the grid scaling code in the wiring and router sections, and a fix to some segmentation-faulting behavior, also in the router section. Fixed up behavior of the wrapper in all modes, including OpenGL and overlay planes. Unfortunately, it's my X server that fails on some of these mode combinations, not the magic code. The XFree86 server operates as intended, although it does not implement overlay planes.
  7. Added a menubar to the wrapper GUI. This includes file read/write functions, and a "cell hierarchy manager" that provides a tree-based view of cell definitions. New code changes allow magic to operate in a slave interpreter (specifically, as a slave interpreter in the TkCon console version). Changed magic command names to avoid conflicts with Tcl/Tk commands. Replaced the "list", "listall", "listtop", "parent", and "children" commands with an extended and more general method using two (new) commands "cellname" and "instance" (these are required by the cell hierarchy manager widget).
  8. Finished the basic GUI, including a working "cell manager" and "tech manager". Added general method for callbacks "magic::tag " which replaces the previous method for handling captions and scrollbars, and allows syncronizing the GUI with command-line commands. Added new magic command "techinfo" to return several variables related to the loaded tech file. Added option "childinst" to the "cellname" command, which enables reporting the child instances of top-level cells, which are otherwise unavailable due to the fact that top-level instances are always named "Topmost cell in the window" and cannot be selected or searched by name. Added options "list" and "listall" to the three commands "cif istyle", "cif ostyle", and "extract style", so that the current style and available styles can be queried from the command line and returned as a Tcl result. Added "label", "subcell", and "error" layers to the toolbar. Added keystroke commands to the toolbar: "p" for "paint" and "e" for "erase". Switched mouse button functions so that button 1 = "see", button 2 = "paint", and button 3 = "see no" (hide layer). This matches the button 2 function in the tool bar to the function in the layout window, and works better for 2-button mice.
  9. Added command "element" for annotations on the magic layout window. Presently, this is somewhat primitive. Commands are:
    • element add rect name style llx lly urx ury
    • element add line name style x1 y1 x2 y2
    • element add text name style x y text
    • element delete name
    The name is a unique name given to each element so it can be registered and searched in a hash table. The style is the name of a magic style which must match the name from the .dstyle5 file (it can also be the number of the style, 0 through 255).
    Also: Extended keystroke commands on the toolbar with: "s" for "select more area layer" and "S" for "select less area layer".
    Also: Changed the "make" process so "make clean" descends into all modules, not just the ones selected by "make config".
  10. November 18, 2002
    Quick fixes on the tag mechanism (magic commands called from a command tag should not increment the sequence of command numbers, or else the "select" mechanism doesn't work right), and corrected the #ifdef statements in the proto.magic file so that interactive macros "p" and "l" (paint and label, respectively) are defined under the Tcl version.
  11. November 19, 2002
    Quick patch to revision 10, which crashes on any call to "select" with more than two arguments.
  12. November 25, 2002
    Completed the (initial version of the) tag mechanism, mainly with the option "element configure" which allows element positions to be changed, text to be altered, and styles to be added or removed.
    Also: Added line antialiasing to the OpenGL version.
    Also: Changed the outline rendering to do true outlines of layers rather than outline each tile. This allows, for example, nonmanhattan pads to be drawn without highlighting the entire internal tile structure.
    Also: Changed the "techinfo" command (see above) to "tech info" and added a "tech load" command for real-time loading of the technology. This can be used to develop and reload debugged/extended versions of the same tech file, or to load an entirely new technology. This is still under development, is inherently dangerous, and can crash the whole program.
  13. December 2, 2002
    Completed the "tech load" command so that it does not complain or crash the program, although existing layout may be invalidated if the number of planes changes.
    Also: Extended the "image create layer" method under Tk with the ability to drop entire layouts into Tk images. The syntax is "image create layer -name -width -height ", where "window_name" is the Tk path of an existing layout window. The existing window will be deleted when the image is instantiated.
  14. December 9, 2002
    Completed a reasonable first draft of the interactive IRSIM simulator under magic. This corresponds to IRSIM 9.6 Revision 1. Both programs must be compiled and installed for this method to work properly.
  15. December 11, 2002
    Added Mac OS X support (thanks to Michael Doster). Changed the "layers" command to "tech layers", with "tech layers *" vs. "tech layers" differentiating between the version which returns a Tcl list of all canonical names and the one that prints all names and aliases, respectively. Started a skeleton program for the techfile builder wizard, added a minimal-size techfile ("minimum.tech27"), and debugged the operation of magic under the minimum techfile.
  16. December 12, 2002
    Correction to scmos/Makefile which deletes "minimum.tech27" in rev. 15 and thus halts the make install process.
  17. December 16, 2002
    Minor corrections for OS X support when not compiling with Tcl/Tk support (again, thanks to Michael Doster).
  18. December 17, 2002
    Changed the tech initialization routine to use memcpy() and memset(). This takes a couple seconds off of startup when magic is compiled without optimization (which is the default for magic 7.2, as long as it remains in alpha status).
  19. December 23, 2002
    Finally changed the way tech styles are handled so that magic can take more than 64 layout styles, and is not dependent on the ordinal numbering in the styles file. Styles may be called out by name as well as number in the "styles" section of the technology file. Modified the OpenGL dstyle file to take advantage of the new system.
    Also: Removed a lot of old cruft from the distribution, including AED and X10 graphics packages, the "mpack" command, magic's built-in malloc() routine, and the VAX-only executable image "freeze" and "thaw".
    Also: Did a test with the "plow" section in which the feature is modularized under Tcl, is not loaded on startup, but auto-loads the first time the feature is requested (by executing the "plow" or "straighten" command). The plan is to extend the modularization to the "plot" and "route" sections.
  20. January 6, 2003
    Fixes to the extresis geometry extraction and subcircuit boundary handling. Fixed modularization for the "plow" option and extended modularization to the "plot" and "route" options.
  21. January 7, 2003
    Due to an error, revision 21 was exactly the same as revision 20.
  22. January 8, 2003
    Quick fix to the install process, which was missing the glyph files in the graphics subdirectory. Thanks to Tim Chuang for reporting this error.
  23. January 20, 2003
    Added a window console option, although the implementation is only partial.
  24. Feburary 10, 2003
    Rewrote the graphics routines to find display depth during display initialization. This corrects an error left around since the display style file format was changed. As a result, it is no longer necessary to declare the display depth in the display style file. This is fortunate, since which style file is read depends on the display depth! I have tested Tcl and non-Tcl versions in X11 and OpenGL at display depths of 8, 16, and 24, and everything appears to work correctly. Also, fixed the colormap repainting of the Tk console in 8-bit pseudocolor mode, which was broken since I switched to a master/slave interpreter configuration with the console.
  25. February 19, 2003
    Reincorporated the 3D graphics from the 3D version into the main distribution as a "specialopen" type window. The interface remains somewhat crude, but the command "specialopen wind3d" will bring up an OpenGL 3D window, and various keys manipulate the view: the top keyboard row (numeric keys '1' through '0', minus ('-'), and equal('=')) manipulate the viewing' angle. Keys 'Z' and 'z' zoom out and in, respectively. Keys '>' and '<' change the relative z-axis (height) scaling. Arrow keys reposition the view (albeit relative to the original, top-down view).
  26. February 24, 2003
    Extraction changes: Tech file now takes keywords "device " which takes the place of the "fet" keyword (although that is kept for backward compatibility). Device names are: "mosfet", "bjt", "capacitor", "resistor", and "subcircuit". In particular, the non-FET devices output relevant information to the .ext file, including total capacitance for type "capacitor" and total resistance for type "resistor". "device mosfet" differs from "fet" in that values for gate length and width are written to the .ext file instead of area and perimeter. While the current code keeps the simplistic relationship between area and perimeter and length and width, technically this change allows a more sophisticated extraction implementation which would correctly handle non-standard devices such as annular FETs.
    Enhancements to 3D graphics: Key "C" will toggle between magic layout and CIF layout views.
    Layout window client command "cursor" added which returns the instantaneous value of the pointer in magic coordinates.
  27. February 26, 2003
    Minor bug fixes to non-Tcl compilation; "config" script changes for Solaris support, and "config" script support for Tcl/Tk in non-standard directories, especially for Mac OS X support.
  28. March 4, 2003
    Repaired all the problems with Mac OS X support for the Tcl/Tk-based version, and a couple of other glitches associated with "make config" in Revision 27.
    Also: Removed all format version numbers from magic's system files: .dstyle6 becomes .dstyle, .cmap1 becomes .cmap, and .tech27 becomes .tech. Each of these files except cmap (which has only ever had one format) takes a keyword "version" with the version number, internally. Future versions of magic should read the format version inside the file and adjust the read routine to match the format. Current format ".tech27" is tried as alternative name if a ".tech" file cannot be found, because there are so many ".tech27" files in existance which do not belong to the magic distribution.
  29. March 10, 2003
    Major changes to the "make config" file for support of Tcl/Tk in non-standard directories; hopefully this version is compatible with Cygwin, Solaris, and Mac OS X, although a lot of configurations are untested and it may take some feedback before everything is working reasonably well. Part of the make process changes includes having the linker export only required symbols (procedure names and global variables) to avoid conflicts with other dynamically-loaded object files.
    Also: Commands "exttospice" and "exttosim" have been changed so that they are recognized by magic as built-in commands (that is, they have an entry in the command table and show up in the "help" list).
  30. March 12, 2003
    Removed "plow" from the list of module choices (or any choices) because the plow section of the tech file is used by the "stretch" command. Lack of the plow module changes magic's behavior, so it should always be installed.
    Also: Reinstated the "-namespace-flat" and "-suppress undefined" switches for Mac OS X, because the use of the version script apparently makes it necessary.
  31. March 23, 2003
    Finally implemented an apparently-correct procedure for handling overloaded commands. Commands "array", "load", "flush", and "label" have been reverted back to their original forms. "clockwise" can be used as "clock" without generating an error. "grid" remains renamed to "gridspace".
    Also: Attempted a fix to user-input function TxGetLinePfix(), but so far this is still broken (it works from the command line, but not internally).
    Also: Fixed the "goto" command so that it works on internally-named nodes (it was never updated when the way internal node names are generated was changed).
  32. March 26, 2003
    Fixed some errors in the new "device *" extraction method (old "fet" record was not backwardly compatible as it was supposed to be, and the "device bjt" order of arguments was incorrect).
    Also: Added a method to subcircuit extraction in which labels can be suffixed with "#n", where "n" is the order in which the port should be written to the subcircuit record in the SPICE output. This allows ports to be specified to match a pre-existing SPICE subcircuit, rather than forcing the user to make the subcircuit match the SPICE output from Magic.
    Also: Fixed a string allocation error in the Tk/TOGL graphics routines which would cause occasional fatal crashes.
    Also: Fixed some errors in the CIF/GDS read routine to prevent arithmetic overflow. This repairs some, but not all, cases.
    Also: Fixed the previous fix for the Mac OS X compile. Thanks to John Geisz for helping with the Mac OS X compile and install problems.
  33. March 31, 2003
    Extensions to the "box" and "array" commands. Both commands now take numerous options. Do "box help" and "array help" for a complete list of options.
    Also: Reinstated the original "grid" command (instead of the rewritten "gridspace" command). Also: Wrote in a lot of application interoperability code (scripted). Other applications are invoked on the Tcl command line as they would from the shell command-line. For instance, invoking IRSIM is now done by typing "irsim" at the Tcl prompt, not "startirsim". All applications accept their usual command-line arguments.
    Also: More changes for Mac OS X compile and compatibility. Possible problems have been seen with recent OS X revisions which have apparently enabled 8-bit overlays, but may have different values for reserved portions of the colormap. A temporary fix is to set the shell environment variable "MAGIC_COLOR" to "24bit" to force 24-bit mode, or to set "X_COLORMAP_BASE" and "X_COLORMAP_RESERVED" appropriately, probably to 0 and 2, respectively (this is a guess).
  34. April 7, 2003
    Extension to transistor extraction to include support for annular transistors.
    Also: Important fix to the non-Manhattan paint function. The bug apparently only affected CIF/GDS file reads (layers with non-Manhattan geometry would occasionally get painted with the wrong magic layer type). Also for CIF/GDS reads, added an internal grid subdivision limit so that the internal grid doesn't get subdivided so much that integer overflows occur on large coordinates.
    Also: Added backslash-r and backslash-b (linefeed and backspace) handling to TkCon for compatibility with tclspice output.
  35. April 15, 2003
    Important fix to two outstanding problems: 1) The CIF "bloat-or" function for writing CIF output now handles non-Manhattan geometry, enabling output for non-Manhattan transistor geometries (such as annular devices in submicron technologies); 2) The "widespacing" DRC rule has been implemented in a robust way (the previous version was a bit of a kludge and didn't catch all errors). It remains to be determined how this implementation differs from Dracula or other DRC checker implementations. The DRC rule syntax is
    widespacing layers1 width layers2 spacing adjacency why
    following the syntax of the "spacing" rule except for the addition of "width", specifying the width of material in layers1 which triggers the additional spacing rule.
    Also: Added cell deletion and cell renaming in the form of "cellname" subcommands in the following syntax:
    cellname delete cellname
    cellname rename cellname newname
    These functions currently do not support the file locking feature; that is, it is possible to screw up a shared layout database by using them. File locking support will be patched in in the near future.
    Also: Fixed a bug preventing compilation of the non-Tcl version in revision 34.
    Also: Partially implemented autoconf by attaching the OS and hardware auto-detect script "config.guess", and removing the user selection thereof from magic's config script.
  36. April 16, 2003
    Fixes a bad mistake in revision 35 which effectively disables "exttospice" and "exttosim", if they're compiled as modules (the default), and causes Magic to hang. Also fixes a bug found by James Adkins in which loading cells created by the "flatten" command will crash the program.
  37. April 28, 2003
    Introduced a real working autoconf, though probably will take some time to debug operating systems other than Linux.
    Also: Revamped the "subcircuit" method, which deprecates the "subcircuit" boundary layer in favor of using the new port command to turn labels into ports. port help returns information on the correct syntax.
  38. May 5, 2003
    Incorporates a LEF output module for defining characteristics of a circuit relevant to standard-cell place-and-route. The port command has been extended to include use and class designations. A new command property has been added to assign key-value string pairs to a cell, which can be saved and reloaded along with the layout. A new command lef has been added to generate LEF-format output for a cell. Each of these commands implements a help option for more information.
  39. May 19, 2003
    Enhanced, corrected, and expanded three-dimensional viewing under Tcl/Tk + OpenGL with the "specialopen wind3d" command. Fixes to the LEF module after testing on 3rd-party tools. GNU "autoconf" compilation tested on Linux and Solaris. Fix to extract section for a long-standing error (exists in v.7.1) which miscalculates perimeters of ndiffusion.
  40. June 11, 2003
    Fix to annular and nonstandard transistor extraction. Fix to Solaris autoconf make script.
  41. June 20, 2003
    Fixed the scrollbars in the Tk GUI. Extended the syntax of command "scroll" to include scrolling by layout units. Added capability of the wind3d "specialopen" window to be generated as a Tk path, and added the "magic::render" command to the Tk GUI with a (trivial) GUI wrapper as a proof-of-concept. Added "target window" option to the cell manager. Changed GUI so that the toolbar is not shown by default, but is chosed from the (new) "Options" menu. Removed "Cell" and "Tech" menu buttons and moved them under the "Options" menu as checkbuttons. Fixed an error in which the scrollbars in the non-Tcl version did not recognize mouse input. The fix substantially cleans up the "WindSend" routine.
  42. July 10, 2003
    Changed some CPP processing to M4. Changed extract extension for "device resistor" to include the SPICE type "semiconductor resistor". The semiconductor resistor syntax is used unless the name argument is "None", in which case the simple resistor is used. Changed the keyboard behavior so that shift-keypad keys are not interpreted as ASCII numbers.
  43. July 16, 2003
    Fixed "magic/symbol.map" so that exttospice and exttosim work again; other bug fixes related to the modularization of the command tables. Added a preliminary "cif warn" option; esp. with "cif warn align", the layout can be checked for contacts on half-lambda spacing. Fixed feedback rendering so that it does not attempt to draw out-of-bounds entries. Fixes and updates to the gnu autoconf interface.
  44. July 24, 2003
    Changes to the Tk graphics to replace X11 calls by Tk calls whereever possible. Added automatic grid scaling for GDS file reads, and added some useful options to CIF and GDS reads, including limiting and redirecting error and warning messages.
  45. August 4, 2003
    More fixes stemming from the modularization of the command tables. Also: Added configuration changes necessary for compiling an RPM package from the Magic source (enhancements courtesy of Erwin Prin).
  46. August 8, 2003
    Reformed the electrical connectivity search function to be a one-pass, recursive function, avoiding redundant tile checks and speeding up the process. Added the ability to search connectivity across ports, for ports having the same index. This search function modification has not yet been copied to the "extresis" and "sim" functions.
  47. August 14, 2003
    Fixed a bug in the new electrical connectivity search function, and extended the improved search function to "extresis" and "sim" (e.g., "getnode") functions. Also: Added files pertaining to the creation of an RPM package for Magic, courtesy of Erwin Prinz. These have been placed in a new subdirectory scripts/rpm.
  48. September 5, 2003
    Fixes/enhancements to the file locking code, courtesy of Mike Godfrey.
  49. September 12, 2003
    Switched from the "varargs" method for variable argument subroutine calls to "stdarg", in response to GNU gcc no longer supporting the former.
  50. September 22, 2003
    Changes to handling of standard cells during extract and exttospice. Also: Fix to capacitance value output from the "device capacitor" extraction method.
  51. September 26, 2003
    Added a LEF file reader to Magic ("lef read file"). Fixed the connectivity algorithm which searches across ports with the same index (which is critical for handling pins with multiple, unconnected ports read from a LEF file).
  52. September 30, 2003
    Corrected a serious CIF/GDS output problem: Contacts may not be centered if the contact size or spacing is an odd number of centimicrons, because half-centimicron values get rounded, and may cause the output geometry to be off-grid. It may also cause overlapping contacts in subcells to produce contact cuts at different positions.
  53. October 3, 2003
    Added a DEF file reader to Magic ("def read file"). Changed the behavior of the "cellmanager" widget in the Tcl wrapper so that it remains nonexistant until called from the Options menu. This prevents magic from hanging while the cell manager processes thousands of cells if a large design is loaded in.
    Note that the LEF and DEF syntaxes have been only partially implemented. In particular, wire widths on routing layers are ignored and a default wire width of 3 is used. Layer names in the LEF and DEF files must have entries in the technology file; that is, they must be included as aliases for magic layer names. Eventually, this should migrate to a new section for the technology file.
  54. October 27, 2003
    A number of fixes, including the graphics handling of layer perimeter outlines, a fix to the "cif limit" syntax parsing, an important fix to CIF read-in for files that define the geometry in sub-centimicron units, and an error reported by Wai Yung in which compilation fails if nonmanhattan extensions are disabled. The LEF and DEF readers have been substantially fixed and enhanced.
  55. November 2, 2003
    Changes made for compilation on an AMD Opteron (using RedHat GinGin64). Operation appears to be correct. Compilation produces numerous warnings, but no errors.
  56. November 12, 2003
    Minor fixes to LEF and DEF read-in routines; cap on wiring contact types removed.
  57. November 16, 2003
    Major changes to LEF and DEF input method for better handling of large (greater than 1GB) files.
  58. November 25, 2003
    Major changes to the techfile format. Format number incremented to 29. Format 29 adds the asterisk (*) notation for any layer to indicate the union of that layer and all contact layers which have that layer as a residue. Use of this notation SIGNIFICANTLY decreases the size and complexity of the technology file, as well as increasing readability. Also, added several extra types for DRC checking. These are all essentially duplicating the functionality of the "edge4way" rule, but make the DRC section of the technology file easier to read. New DRC checking types are "surround", "overhang", and "rect_only".
  59. November 28, 2003
    Includes a fix to the IRSIM handling routine, which was doing I/O incorrectly for SYSV-style select() calls. Thanks to Mike Marcel for pointing out this error. Also, the CIF parsing of the "*" notation (see above) required restricting to the plane of the layer.
  60. December 1, 2003
    Colormap and style file changes to add colors and styles for metal layers 9 and 10 and corresponding vias. Also, changed label handling in the LEF file reader for speedup reading files with many labels (i.e., complicated port geometries).
  61. December 23, 2003
    Additions to the LEF/DEF reading for handling LAYER, VIA, and VIARULE statements. Also, changed the DRC parsing for the "edge4way" rule to determine the plane of "OKtypes", so that the optional 9th argument is not necessary.
  62. December 30, 2003
    Fixed a problem with DRC rule edge4way rule parsing stemming from revision 58. Also, corrected the non-autoconf compile (thanks to Jake Hill for reporting this problem). Finally, fixed the text input method for Tcl-based magic when used under the "tkcon" console. Now text entry works correctly with functions such as the netlist window's label input method.
  63. March 11, 2004
    Lifted the requirement that the Tcl version be compiled with "make tcl" and installed with "make install-tcl". "make" and "make install" now suffice for both the Tcl and non-Tcl versions.
  64. March 19, 2004
    Major changes!
    Make changes: Autoconf compile now assumes options "with-tcl" and "with-opengl" are YES by default, checks for the header and library files for each, and disables them with a warning if something goes wrong.
    Also: Corrections and extensions to the follwoing command-line functions: goto, findlabel, getnode, and the window command update. getnode now allows global nodename (labels ending with "!") to be disabled. The node alias reporting is fixed, and confusion over labels completely surrounded by a layer is fixed. The search routine SimTreeSrTiles has been overhauled for efficiency, with poor code excised. findlabel now has a "-glob" option to return a list of nodes matching a csh-style pattern with wildcard characters (this was already in Magic but only available under the Scheme interpreter). goto now has a "-nocomplain" option to prevent printing an error message if the node cannot be found (e.g., if it's a global node name). update command now has options "suspend" and "resume" to prevent and resume graphics refresh. This is useful when generating scripts to execute multiple commands.
    Also: Added a new command search with syntax "search layers proc" which executes a low-level tile search for all tiles matching the layer list layers. For each tile found, it executes the TCL procedure proc, passing it a list of the tile lower-left and upper-right coordinates, and the tile type.
    Also: Created a "pin list" GUI tool. This tool searches out all the pads in a design and generates a pinout list. The tool can be used to aid in renaming all the pads.
    Also: Rearranged the source directory structure so that all TCL scripts go into the subdirectory "tcltk".
  65. March 31, 2004
    Modified the tech file parser to handle DOS-style carriage-return/linefeeds.
    Also: Modified the "squares-grid" cifoutput function to avoid writing contact cuts with less than the specified border. Added an optional y-grid value to the "squares-grid" function. This allows the generation of interleaved rows or columns of contacts, such as required for pad generation in some processes.
    Also: Fixed an error in the DBResidueMask(), which caused the new "*" notation for the technology file format to produce incorrect lists of layer types. Also: Extended the cmdParseCoord() routine to handle coordinates on the user grid (specified by the "grid" command). Previously, "snap grid" only worked for mouse motion. It now works correctly for all commands (and, consequently, all key macros), e.g., move, stretch, etc.
  66. April 9, 2004
    Modified the makefile process for compatibility with Cygwin, and moved tclmagic.c to the tcltk directory as the easy way to avoid an error in trying to compile a library file for the module.
  67. April 12, 2004
    Modified the exttospice (ext2spice) routine to output a .subckt ... .ends record around the netlist output of top-level circuits containing ports. This action can be subverted in the TCL version with the command "exttospice subcircuit top off". Values are "off", "on", and "auto", with the default being "auto".
  68. April 29, 2004
    Extraction of overlap and sidewall capacitance was modified to force it to subtract the substrate capacitance computed for overlapping types belonging to the same electrical node. Also, as magic does not appear to compute overlap between plane images of a contact, only one contact image can declare an area capacitance to substrate. This is NOT all worked out properly.
  69. May 7, 2004
    Corrected a number of errors in the search functions when the database contains non-Manhattan tiles. In particular, some searches would go into an infinite loop (interruptable, but still annoying).
  70. May 13, 2004
    Corrected search routines over non-Manhattan geometry in the routines used by "getnode" and "extresis". These instances were missed in the Revision 69 fix.

email:

Last updated: September 18, 2017 at 3:00am