posted: January 31, 2018 at 3:00am version: 8.2 revision: 45
Update at Tue Jan 30 10:03:03 EST 2018 by tim
Corrected an error in the DEF read that skips a line if a cell cannot be found. This particularly screws up the file parsing if the "END COMPONENTS" line is skipped.

posted: January 8, 2018 at 9:45pm version: 8.2 revision: 44
Corrected an error in writing out .mag files with property values that are longer than the formerly-fixed array size 256. This conflicted with the recent addition of holding path data in properties, where the path coordinates can be significantly longer than the fixed array size. Same change as made to magic version 8.1. Also:
Modified possibly incorrect use of DBSrCellDefs in extresist to ignore internal cells (select, yank, etc.).Also:
Added initialization for node location so if something goes wrong with extresist, it does not have random numbers for node locations.

posted: January 2, 2018 at 9:38am version: 8.2 revision: 43
Corrected an extresist error that had an incorrect interpretation of the return code from reading the sim file and therefore failed to read the nodes file, causing node information to go missing.

posted: December 18, 2018 at 8:24pm version: 8.2 revision: 42
Corrected an error in the CIF read routine, caused when adding handling for grid subdivision. Scaled the value of "center" for a CIF box and then attempted to use "center" as an unscaled value. Same correction as made to magic-8.1.Also:
Corrected the "setlabel" command for edit-in-place cells, for which setlabel would report label properties correctly but would never alter them. Also:
Corrected error in the extraction for magic-8.2 (only) that appears to have come from an unfinished (or at least unchecked) development effort on improving the checks for DRC interaction errors (which also affects extraction). Also:
Corrected the "Text..." dialog to auto-update ports after making a port so that repeated uses of "apply" won't fail because the port number is already used. Corrected the "port remove" command, which didn't work, and corrected the script to do "port exists" before "port index" so that the latter won't complain if the label is not a port. Same changes made to magic-8.1.

posted: November 25, 2017 at 4:09pm version: 8.2 revision: 40
Corrected a bug in CIFMakeManhattanPath that can cause a segfault or a hang in rare geometry situations. Same fix as was made to magic version 8.1. Also:
Added back a missing multiplication by the number of merged devices for "ext2sim" when using "ext2sim merge" (either aggressive or conservative merge). Same change as made to magic-8.1.

posted: October 20, 2017 at 4:08pm version: 8.2 revision: 39
Possible fix to problem with substrate node being unitialized when called after "merge conservative" is selected in ext2spice.

posted: October 16, 2017 at 7:56pm version: 8.2 revision: 38
Updates and fixes to the configuration file definitions for Mac OSX using MacPorts, with considerable help from Ryan Schmidt.

posted: October 14, 2017 at 6:43pm version: 8.2 revision: 37
Removed the "macosx" definition from the configuration file, which got copied over from another project but apprently causes serious issues with the OSX compilation.

posted: October 13, 2017 at 10:28am version: 8.2 revision: 36
Rewrote the configuration scripts, makefiles, and some initialization routines to use the Tcl and Tk stubs libraries.

posted: October 9, 2018 at 11:52am version: 8.2 revision: 34
Preliminary method to record polygons and wire paths with property records when they are read in into their own subcells using the cif/gds read options. Also:
Corrected custom wire extension handling in GDS file reads. Also:
Modified the gds command options to separate "gds path subcell" from "gds polygon subcell". Previously both polygons and paths were put into subcells named polygonXXXXX (substitute numbers for XXXXX). Now polygons go into cells named polygonXXXXX and paths go into cells named pathXXXXX. This makes it easier to keep track of the original path. NOTE: The path centerline should be kept as a cell property in this case, and the path options like endcap style can also be held as properties. The polygon boundary should be treated similarly. Also:
Fixed calma custom paths (pathtype 4) so that it doesn't generate an error message (otherwise it was already being handled correctly).

posted: October 6, 2017 at 12:47pm version: 8.2 revision: 33
Experimental change in the way hierarchical DRC is handled. To avoid the problem where subcells violate DRC themselves but do not violate DRC in the context of the parent (i.e., the parent adds metal to avoid minimum area error), DRC errors in subcells are neither counted nor displayed, but they remain present in the subcell database. The DRC check enumerates all subcell errors as mandatory check areas in DRCFindInteractions(), so that those areas are always counted with the interaction areas. Previously, if a subcell violated a DRC rule by itself, that error would be counted and displayed in the parent even if the parent had paint causing the error to no longer exist. Also:
Corrected "lef write" command to act as advertised and take a filename as the next argument. Also:
Corrected an error in lefWrite where a variable was not set, causing occasional intermittent crashes on "lef write".

posted: October 5, 2017 at 9:45pm version: 8.2 revision: 32
Corrected an error in the "lef write" command that prevents obstruction layers from being generated in the output LEF file. Also:
Additional small correction. Also:
Removed the call to glFinish() because it appears mostly to cause synchronization delays. Also:
Removed two temporary backup files.

posted: October 4, 2017 at 2:57pm version: 8.2 revision: 31
Finally worked out how to correctly use the OpenGL general-purpose frame buffers and render buffers, and use fast frame buffer bit block transfers to do copies to and from backing store. Also found a long-standing problem where multiple windows fail to refresh properly in OpenGL and Cairo interfaces due to a lack of calling GrLock() and GrUnlock() around the call to fetch backing store after an expose event. The use of the general purpose frame buffer allows magic to avoid calling any indirect rendering methods and should now (finally) allow magic to run in OpenGL mode over a VNC. Use of direct rendering methods only also means that magic does not need to be compiled with the ad hoc switch to have Cairo handle drawing into pixmaps for the icons (this remains to be tested).

posted: September 27, 2017 at 3:00am version: 8.2 revision: 29
Corrected failure to update root box and crosshair position when rescaling the internal units. The former in particular can cause problems when moving the root box and importing cells from a script (same change as made to magic-8.1).Also:
Update at Tue Sep 26 14:09:49 EDT 2017 by timAlso:
Merge branch 'work' into tomerge

posted: September 18, 2017 at 3:00am version: 8.2 revision: 28
Attempt to work around problems with the OpenGL off-screen rendering by using a Pbuffer instead of a GLXPixmap, which is too often not supported for direct rendering. The only way I found to make this work was to do a (very) slow pixel-by-pixel copy from the Pbuffer into the pixmap. However, this only needs to be done once for each toolbar icon, and the icons are small, so it is not really a problem.Also:
Update at Sun Sep 17 11:24:19 EDT 2017 by timAlso:
Merge branch 'work' into tomergeAlso:
Changed CONST86 back to CONST84 to maintain compatibility with Tcl/Tk 8.5, although this should probably be in an ifdef or something.Also:
One more attempt at correcting off-screen rendering. Noting that Cairo works perfectly for the off-screen rendering and that OpenGL works perfectly for the on-screen rendering, make a compile-time option to use both in their respective areas of perfection.

posted: September 16, 2017 at 3:00am version: 8.2 revision: 26
Corrected typo in call to cairo_surface_destroy, incorrectly written cairo_destroy_surface (fails to run with Tcl <= 8.5, runs with Tcl 8.6 and "load -lazy" but then creates a potential crash condition).Also:
Update at Fri Sep 15 11:24:43 EDT 2017 by timAlso:
Merge branch 'work' into tomergeAlso:
Applied an upside-down scale transformation to the pattern matrix, otherwise patterns end up upside-down relative to other graphics interfaces.Also:
Corrected text clipping to cell bounds, and adjusted screen to a half-pixel offset that centers coordinates on pixels, so single- pixel objects like cell boundaries or the crosshair will be drawn a single pixel in width.Also:
Corrected problem with passing the MagWindow to the backing store routine; failure to use the passed MagWindow value caused crashes when using more than one window in the Cairo graphics interface.Also:
Corrected backing store put/get in the case of obscuring windows. The OpenGL version was disabling backing store while any window obscures the layout; the Cairo version was not.Also:
Found that the crosshair function was wasting compute cycles by drawing out-of-bounds when the crosshair was turned off rather than just not drawing it.

posted: September 13, 2017 at 3:00am version: 8.2 revision: 24
Corrected problems having to do with color (blue and green were swapped) and incorrect call to cairo_set_source_rgba which is in an unused function and has no effect except with versions of Tcl less than 8.6 where "load -lazy" is not available and unknown functions cause immediate exit. Cleaned up remaining references to OpenGL in the Cairo code, and updated the copyright and acknowledged Chuan Chen, who coded the Cairo interface. No attempt yet to deal with memory leaks caused by calling Cairo "create" functions without the accompanying "destroy" functions.Also:
Update at Tue Sep 12 15:45:00 EDT 2017 by timAlso:
Merge branch 'work' into tomerge

posted: September 2, 2017 at 3:00am version: 8.2 revision: 20
Update at Fri Sep 1 08:28:49 EDT 2017 by timAlso:
Changed the definition of CPP again so that even in the absence of the python preprocessor version, the techfiles and .magicrc file will get the correct arguments, without affecting the use of CPP in the configure script.Also:
Changed the offscreen-rendering handling in SetProjection to be more like the Tk/X11 model than the OpenGL model, since Cairo isn't picky about pixmaps.

posted: August 26, 2017 at 3:00am version: 8.2 revision: 16
Update at Fri Aug 25 12:47:39 EDT 2017 by chuanAlso:
Corrected the configure.in and defs.mak.in file so that the python3 preprocessor is captured in the variable MCPP, not CPP, since CPP is meaningful to the make process. Also, the MAGICDIR variable in the name needed to be escaped so that the variable is not evaluated within the configure script.Also:
Merge branch 'work' into tomerge

posted: August 25, 2017 at 3:00am version: 8.2 revision: 15
Corrected .gitignore to ignore files from configuration (defs.mak, config.log, etc.). Not sure that is working properly with gitocd since "defs.mak" was already in the .gitignore file but it queued for commit.Also:
Changes that should have been ignored by .gitignore.Also:
Update at Thu Aug 24 16:47:27 EDT 2017 by timAlso:
Merge branch 'work' into tomergeAlso:
Updated configure to add both m4 and python3, then corrected the python preprocessor script to execute "env python3" instead of the hard-coded non-existent directory that was on the shebang line.Also:
Didn't make clean before git push; these files should be in the gitignore file. . .

posted: August 2, 2017 at 3:00am version: 8.2 revision: 2
Set of changes updating version 8.2 to the level of 8.1, since 8.2 development had been halted since it was first created back in April. Version 8.2 is now the official development version, with the first development push to create a Cairo graphics interface.Also:
Update at Tue Aug 1 22:15:44 EDT 2017 by timAlso:
Merge branch 'master' into work

posted: April 26, 2017 at 3:00am version: 8.2 revision: 1
New commit of development version 8.2.

posted: January 31, 2018 at 3:00am version: 8.1 revision: 198
Update at Tue Jan 30 10:03:27 EST 2018 by tim
Corrected an error in the DEF read that skips a line if a cell cannot be found. This particularly screws up the file parsing if the "END COMPONENTS" line is skipped. Same change as was made to magic-8.2.

posted: January 24, 2018 at 4:53pm version: 8.1 revision: 197
Update at Mon Jan 8 21:45:14 EST 2018 by tim Also: Corrected an error in writing out .mag files with property values that are longer than the formerly-fixed array size 256. This conflicted with the recent addition of holding path data in properties, where the path coordinates can be significantly longer than the fixed array size. Also: Modified possibly incorrect use of DBSrCellDefs in extresist to ignore internal cells (select, yank, etc.). Also: Added initialization for node location so if something goes wrong with extresist, it does not have random numbers for node locations.

posted: January 2, 2018 at 3:00am version: 8.1 revision: 196
Corrected an extresist error that had an incorrect interpretation of the return code from reading the sim file and therefore failed to read the nodes file, causing node information to go missing. Same change as made to magic-8.2.
Merge branch 'master' into work

posted: December 18, 2017 at 3:00am version: 8.1 revision: 195
Corrected an error in the CIF read routine, caused when adding handling for grid subdivision. Scaled the value of "center" for a CIF box and then attempted to use "center" as an unscaled value.
Corrected the "setlabel" command for edit-in-place cells, for which setlabel would report label properties correctly but would never alter them. Same change as made to magic-8.2.
Merge branch 'master' into work

posted: December 14, 2017 at 3:00am version: 8.1 revision: 194
Corrected the "Text..." dialog to auto-update ports after making a port so that repeated uses of "apply" won't fail because the port number is already used. Corrected the "port remove" command, which didn't work, and corrected the script to do "port exists" before "port index" so that the latter won't complain if the label is not a port.
Corrected reference to "unfracture" option in "gds" command (which shouldn't be there; it belongs to "cif" command only).
Merge branch 'master' into work

posted: December 13, 2017 at 3:00am version: 8.1 revision: 193
Corrected an error critical for reading magic layout that has been created with the "lef write" command, as read-back was not adjusting the label (non-physical) bounding box, causing all sorts of problems when placing an instance of the LEF-like view.
Merge branch 'master' into work

posted: November 25, 2017 at 3:00am version: 8.1 revision: 192
Corrected a bug in CIFMakeManhattanPath that can cause segfaults or hangs in somewhat rare geometry conditions.
Added back a missing multiplication by the number of merged devices for "ext2sim" when using "ext2sim merge" (either aggressive or conservative merge). This got lost quite a while ago when the new method for computing length and width was introduced.
Merge branch 'master' into work

posted: October 20, 2017 at 3:00am version: 8.1 revision: 191
Possible fix to problem with substrate node being unitialized when called after "merge conservative" is selected in ext2spice.
Merge branch 'master' into work

posted: October 16, 2017 at 3:00am version: 8.1 revision: 190
Updates and fixes to the configuration file definitions for Mac OSX using MacPorts, with considerable help from Ryan Schmidt.
Merge branch 'master' into work

posted: October 6, 2017 at 3:00am version: 8.1 revision: 188
Fixed calma custom paths (pathtype 4) so that it doesn't generate an error message (otherwise it was already being handled correctly).
Corrected "lef write" command to act as advertised and take a filename as the next argument.
Corrected an error in lefWrite where a variable was not set, causing occasional intermittent crashes on "lef write". Same correction made to version 8.2.
Merge branch 'master' into work

posted: October 5, 2017 at 3:00am version: 8.1 revision: 187
Corrected an error in the "lef write" command that prevents obstruction layers from being generated in the output LEF file (Same change as made to magic version 8.2).
Merge branch 'master' into work

posted: September 26, 2017 at 3:00am version: 8.1 revision: 186
Corrected failure to update root box and crosshair position when rescaling the internal units. The former in particular can cause problems when moving the root box and importing cells from a script.

posted: July 27, 2017 at 3:00am version: 8.1 revision: 181
Corrected an error in the new library manager dialog that leaves files open and so collects them until the system runs out of file descriptors, if the system is not configured for unlimited file descriptors (but it's good practice to close them all, anyway, of course).
Merge branch 'master' into work

posted: July 24, 2017 at 3:00am version: 8.1 revision: 180
Quick fix to the last patch (for the case OpenGL is not selected at compile time).
Merge branch 'master' into work

posted: July 23, 2017 at 3:00am version: 8.1 revision: 179
Two fixes from Southampton U., GB; one which fixes a bug in openwindow, and the other which fixes a problem with terminal getting plastered with error messages when OpenGL is not enabled.
Merge branch 'master' into work

posted: July 18, 2017 at 3:00am version: 8.1 revision: 178
Corrected search path defaults (again), this time to force a default behavior when a tech file default is not specified, so that the level 2 search path contains the tutorials; also added sys/current because the SCMOS files contain example layout. Also: Created a new library manager UI that scans the search paths to find what cells are available and makes a list that can be used for loading cells and placing cell instances. This first cut is overly simplified; needs filtering and such, and that does not alter the fact that magic still needs a real library management system.
Corrected lef and def commands so that "lef write -tech" is a valid option and "def write -allspec" is a valid option.
Merge branch 'master' into work

posted: July 17, 2017 at 3:00am version: 8.1 revision: 177
Corrected ext2hier to not put parasitic capacitances or any other components into a subcircuit stub definition (used with the "ext2spice blackbox" option and the black-box property on cell views derived from LEF source).
Merge branch 'master' into work

posted: July 12, 2017 at 3:00am version: 8.1 revision: 176
The ext2spice code that generates parameters for subcircuit calls from a cell's properties was writing the parameters before the subcircuit name instead of after, which is incompatible with SPICE syntax.
Merge branch 'master' into work

posted: June 29, 2017 at 3:00am version: 8.1 revision: 175
Fixed issue with using "specialopen"; was sizing window based on window flags which were not valid if the window record passed to the routine was NULL. Error was hidden by several nested defines. Changed it to use the default flags if no window is specified (WindDefaultFlags).
Merge branch 'master' into work

posted: June 26, 2017 at 3:00am version: 8.1 revision: 174
Applied a patch by Iain McNally (U. Southampton) to fix a clearly incorrect setting of CellLibPath in main.c. This bit of code was apparently missed when rearranging the startup sequence, and ends up setting the first entry in the cell library path to a string that is clearly a format string for a printf subroutine, not an actual valid path. The code patch sets the first entry to a directory name defined by the technology passed as option -T on the command line.
Reworked the method of the previous commit, which was supposed to prevent the substrate node from being tacked onto the end of black-box subcircuit stub definitions. Instead, the new method lets the substrate node be declared a new port of a black-box cell, but does not output that node in the subcircuit definition, by identifying that the port number isn't assigned (is equal to -1).
Handled the more important place where substrate ports get added to the list of subcell ports, for the case of black-box circuits, which should not have any ports added beyond those that are specifically declared with port labels.
Merge branch 'master' into work

posted: June 22, 2017 at 3:00am version: 8.1 revision: 173
Corrected the "ext2spice blackbox on" mode such that it does not generate extra pins in the .subckt declaration representing implicit substrate connections, but only generates subcircuit pins for ports in the layout.
Merge branch 'master' into work

posted: June 21, 2017 at 3:00am version: 8.1 revision: 172
Corrected the DRC "extend" rule so that it matches the behavior of "overhang" with respect to situations like the diffusion between two gates in series without a contact, allowing the diffusion area to be smaller than the extend minimum because the diffusion is not really an extension since it continues under the next gate area.
Corrected generation of property "LEFview" when reading LEF files into a magic database. It was setting the value to whatever the token was at the time, which was somewhat random. The value is ignored (so this is not truly an error) but for the sake of having a sensible value set, it is now set to "TRUE".
Merge branch 'master' into work

posted: June 19, 2017 at 3:00am version: 8.1 revision: 171
Added behavior for cells read from LEF files such that upon extraction, they are given a keyword "abstract" indicating that they represent an abstract view. Then if "ext2spice blackbox on" is used, "ext2spice" will generate stub entries for each of these views which indicates the name and order of all ports, so that the netlist can be used for LVS purposes without losing information about port connections.
Corrected issue preventing crosshair from being turned off from the options menu (applied patch from Risto Bell).
Corrected a (rare) error in which the DBTreeSrLabels() routine was not able to tell when it was searching on a triangular area for which a label touching the non-active edges of the triangle should not be counted as connected.
Corrected net selection to use the connection mask of the supplied type to search. SelectNet() should probably be changed to take a mask to begin with instead of a type. Corrected lefWrite with a revised algorithm that erases each net out of the flattened cell def so that after writing out all port geometry, everything left is by definition an obstruction.
Merge branch 'master' into work

posted: June 12, 2017 at 3:00am version: 8.1 revision: 170
Corrected extraction error in which the substrate connection to other nodes may get ignored if there is no geometry in the parent node (i.e., the parent node only instantiates subcells but contains no material).
Merge branch 'master' into work

posted: June 7, 2017 at 3:00am version: 8.1 revision: 169
Removed line that clears the sticky flag from labels that are declared ports. There is no reason to do so that I am aware of.
Merge branch 'master' into work

posted: May 30, 2017 at 3:00am version: 8.1 revision: 168
Corrected the "lef write" routine to use the net selection routine SelectNet() instead of routines in DBConnect, so that the LEF write will connect together nets that are connected only by duplicate labels. Otherwise, making LEF files out of layouts that themselves contain LEF-like views will not find all parts of a port in a LEF-like cell if the parts are only connected by having a common label.
Merge branch 'master' into work

posted: May 26, 2017 at 3:00am version: 8.1 revision: 167
Corrected an error that used the wrong array for storing sticky label flags; it is rare but possible to overrun this array. Moved the sticky label flag to its own array of type boolean.
Merge branch 'master' into work

posted: May 13, 2017 at 3:00am version: 8.1 revision: 166
Corrected an issue caused by recent change in the handling of extracted subcircuits. The policy now is that subcircuits with ports that also contain active devices somewhere in the hierarchy are treated as normal subcircuits. Subcircuits with ports that have no devices are treated as black-box devices. Subcircuits that have neither ports nor devices are flattened and expunged from the netlist.
Corrected an error that destroyed the bounding box of cells from "lef write" using property "FIXED_BBOX", when updating timestamps on cell read-in, making the cell 1 unit in size, and effectively unselectable.
Merge branch 'master' into work

posted: May 12, 2017 at 3:00am version: 8.1 revision: 165
Corrected an error that causes a crash if magic attempts to search connectivity on a label connected to space (due to the label having the same name as the net being searched for connectivity).
Cleaned up additional problems with lefWrite, some pertaining to dbConnect which may have manifested elsewhere.
Merge branch 'master' into work

posted: May 11, 2017 at 3:00am version: 8.1 revision: 164
Corrected a problem with stacked contacts writing the wrong layers to LEF output.
Corrected an error that was adding all types composing contacts to the list of types to output to the LEF file, instead of just those marked as ROUTE layers.
Corrected read of .ext files to process port nodes for subcircuits; the subcircuit handling should only exclude descending into that cell to read subcells further down in the hierarchy.
Merge branch 'master' into work

posted: May 10, 2017 at 3:00am version: 8.1 revision: 163
Major overhaul of "lef write". The "lef write" command now flattens the cell for which LEF is being generated, as is appropriate for a LEF view. "lef write " works as advertised (but was being advertised as , not , which is incorrect). The origin and bounding box are now correctly generated. Other updates: "def read" creates ports where PINS are declared. The "flatten" command preserves ports. "flatten" has a new option "-dotoplabels" which copies labels from the top level cell only when flattening.
Final updates to make the subcircuit and msubcircuit extract statements as backwardly compatible as possible.
Removed an edit swap file that got into the git push.
Merge branch 'master' into work

posted: May 8, 2017 at 3:00am version: 8.1 revision: 162
Updated handling of "device subcircuit" and "device msubcircuit" so that it correctly handles the number of nodes as the fourth argument. It also auto-detects the use of the substrate and node name at the end. But to accomodate the use of "msubcircuit" for diodes, it is necessary to have duplicate entries for source and for drain nodes.
Merge branch 'master' into work

posted: May 6, 2017 at 3:00am version: 8.1 revision: 161
Added more information to the output warning about not being able to find a vendor GDS file. This helps in tracking down the source of the problem, which is easy to happen if GDS files are moved around or deleted or paths are not set up correctly.
Handled the somewhat obscure error of a device type like capacitor or diode that might have diffusion in one cell and a contact in another. The fix, however, handles any case where a device may be duplicated between cells and ensures that the extracted netlist does not contain duplicate devices. It is not foolproof but should catch cases in which split devices are generated by reading GDS files that are not created by magic.
Merge branch 'master' into work

posted: May 5, 2017 at 3:00am version: 8.1 revision: 160
Corrected an error with extraction in which some devices such as diodes may have extra one-terminal devices extracted if, for example, the device and contact are split between cells. But this does not solve the problem that such cases will duplicate the whole device in both subcells, however. Also, fixed an error with CIF and GDS reads in which flattening a cell on input (such as with "gds flatten true") will incorrectly draw the result of non-manhattan geometry if the flattened cell is flipped or rotated.
Corrected an error with the "copyup" CIF/GDS operator. It would copy up only one level of hierarchy, and after that the last cell would be overwritten, which both undermined the copyup function and was a memory leak.
Corrected the same code the right way this time---problem was not with the substrate node, but with the routine that determines whether or not to write out an 'X' record using the same method to determine whether it has ports, as the routine that actually writes the 'X' record.
Merge branch 'master' into work

posted: May 4, 2017 at 3:00am version: 8.1 revision: 159
Corrected error that outputs subcircuit 'X' records for subcircuits that have been absorbed into the parent and do not have .subckt records associated with them. This happens when the subcircuit has a substrate contact, as the substrate connection is automatically marked as a port. So substrate connections should not be counted when determining if a subcircuit should be ignored.
Merge branch 'master' into work

posted: April 6, 2017 at 3:00am version: 8.1 revision: 158
Corrected an error that would use an invalid interaction area to seed an area expansion to capture a label in subtree extraction. This can result in a huge check area and negate the benefit of the cookie-cutter division of the extraction method, resulting in potentially huge extraction runtimes.
Corrected error that ran the parasitic cap visitation loop when "ext2spice hierarchy on" is used even if the capacitor threshold is infinite. This can result in a lot of false-positive error messages about nodes not being found.
Merge branch 'master' into work

posted: March 7, 2017 at 3:00am version: 8.1 revision: 157
Corrected problem with devices specified by property "device" in the cell having parasitic capacitances extracted which are part of the model and therefore double-counted.
Merge branch 'master' into work

posted: March 6, 2017 at 3:00am version: 8.1 revision: 156
Modified ext2spice to watch line length when generating output for subcircuit definitions and calls, and wrap lines around 80 characters. There is no particular attempt to limit lines to a specific amount, just to prevent ridiculously long lines that may exceed the internal limit of tools that read SPICE netlists and expect them to conform to some limit like 1024 or 4096 characters.
Merge branch 'master' into work

posted: March 2, 2017 at 3:00am version: 8.1 revision: 155
Corrected the parameter writing routine in ext2hier.c to match that of ext2spice.c. It was missing the lines at the end which write out any parameters that need to be simply copied verbatim (e.g., "m=1").
Corrected typo in extflat, otherwise the whole substrate capacitance correction thing fails. . .
Merge branch 'master' into work

posted: March 1, 2017 at 3:00am version: 8.1 revision: 154
A rather major fix to the extraction code. It was discovered that in cases where a node of a subcell shields a node in a top level cell but does not connect to the top level, no information about the shielding effect is passed back to the top level in the .ext file. Only connected nodes do this, though the "merge" lines. To solve this, it was necessary to ignore the capacitance adjustment in the "merge" lines, and instead generate a new entry in .ext files called "subcap" containing a substrate capacitance adjustment, including all adjustments from both connected and unconnected nodes.
Merge branch 'master' into work

posted: February 24, 2017 at 3:00am version: 8.1 revision: 153
Added some syntax variants to the default parasitic capacitance area and perimeter (to substrate) rules to allow specific types to be declared for the well plane, so devices like nwell resistor can be avoided for caculating parasitics (because the resistor body is effectively a floating node if the T-resistor model is not used). Changed the fringing capacitance to compute only type-to-space edges, which is nearly always the case and avoids generating many useless rules. Added a new wizard rule to output parasitic coupling information, similar to the existing one but with its own unique uses.
Corrected the original macro set (the one which is enabled by default by configuring with --disable-new-macros) to match the recent change moving the colon and semicolon commands from being treated as special cases in the source code to being interactive macros in the standard macro setup.
Corrected parasitic extraction, which was incorrect for the "defaultperimeter" command. Added substrate to the list of tiles marked as visited, such that connections to substrate are not considered floating nodes when using "ext2spice -F".
Merge branch 'master' into work

posted: February 21, 2017 at 3:00am version: 8.1 revision: 152
Fixed "ext2spice -F" for removing floating nodes, which was broken because it only flagged nodes that were output as FET terminals and ignored all others, resulting in all parasitics being removed from the output.
Merge branch 'master' into work

posted: February 18, 2017 at 3:00am version: 8.1 revision: 151
Corrected an error with hierarchical parasitic extraction. The "processed" flag was being set before the call to the function that checks it, so that it was always found true, causing only parasitics to substrate to be output. Also discovered that "ext2spice cthresh infinite" was setting a value for "infinity" assuming an integer number, which translated to floating point was not even especially large.
Merge branch 'master' into work

posted: February 16, 2017 at 3:00am version: 8.1 revision: 150
Revised the toolupdate command to run toolbar "configure" commands inside "catch {}", since use of "hidelocked" and "hidespecial" mean that the icons don't necessarily exist, and attempting to configure them (e.g., on the tag callback for the "see" command) will just generate an error.
Corrections to previous update, mainly for arrays and fixed ("nocell") devices.
Merge branch 'master' into work

posted: February 14, 2017 at 3:00am version: 8.1 revision: 149
Expanded on the toolkit dialog window so that it displays the cellname and instance as well as the device, and allows the instance name to be changed from the dialog. Expanded the "dependency" callback to include checkboxes and selection menus. Added a "message" label to the types of widgets that can be added to the gencell dialog.
Merge branch 'master' into work

posted: February 10, 2017 at 3:00am version: 8.1 revision: 148
Corrected (hopefully) an error with extracting annular devices, in which a fix for source-drain shorted devices ended up breaking the code for annular devices.
Changed the "snap" command so that it does not print a result when setting a snap type. "snap" with no arguments is equivalent to "snap list", and prints (or returns) the snap type as a string result. This change prevents unnecessary output from scripts that switch back and forth between the internal and user grids.
Corrected the variable name used to indicate a suspend state so that the various scripts agree on when a window is in the suspend state.
Merge branch 'master' into work

posted: February 9, 2017 at 3:00am version: 8.1 revision: 147
Corrected screen coordinate transformation of elements such as those used by "measure"; otherwise, they get drawn at the edge of the window when the element is off-screen.
Merge branch 'master' into work

posted: February 8, 2017 at 3:00am version: 8.1 revision: 146
Changed a use of "string cat" to "append" to be backwards compatible with older versions of Tcl/Tk.
Corrected the error (which shows up under some window managers but not others) that causes the toolkit dialog window to collapse in size and require manual resizing (problem not exactly solved; seems to be a Tk error, but changing the way the dialog window is rebuilt prevents the problem from being triggered).
Merge branch 'master' into work

posted: February 7, 2017 at 3:00am version: 8.1 revision: 145
Resolved issue with window focus and command entry window (due to Opts(redirect) being set outside of the command bound to XK_colon, when it should have been part of that command).
Merge branch 'master' into work

posted: February 6, 2017 at 3:00am version: 8.1 revision: 144
Corrected toolkit so that it generates random name suffixes instead of enumerating from 1; this avoids name collisions with cells in the same directory without having to check every directory. Also corrected the property read-in, which was limited to 128 characters and so tended to clip toolkit gencell parameter properties.
Merge branch 'master' into work

posted: February 3, 2017 at 3:00am version: 8.1 revision: 143
Corrected a side effect of preventing property generation in non- editable cells, which is the problem of setting the no-edit flag before reading properties in a .mag file.
Merge branch 'master' into work

posted: February 1, 2017 at 3:00am version: 8.1 revision: 142
Removed commented lines from toolkit. Revised extract behavior for read-only directories to extract into the current working directory (this was done previously, but only in very specific cases).
Normalized use of namespaces for closewrapper, otherwise it becomes impossible to properly overlay the command.
Removed edit swap file that got into the git push.
Merge branch 'master' into work

posted: January 31, 2017 at 3:00am version: 8.1 revision: 141
Corrected the "property" command to not change/create properties in a NOEDIT cell, and changed the toolkit to not attempt to do so.
Merge branch 'master' into work

posted: January 30, 2017 at 3:00am version: 8.1 revision: 140
Toolkit correction to avoid confusion when the gencell dialog is up for an instance and the instance gets deleted; the patch prevents "Apply" or "Okay" from attempting to operate on the deleted instance.
Fixed a typo (missing close-brace)
Merge branch 'master' into work

posted: January 28, 2017 at 3:00am version: 8.1 revision: 139
Correction to toolbar to prevent error on callbacks using "toolupdate" which did not properly call the new window hierarchy.
Merge branch 'master' into work

posted: January 27, 2017 at 3:00am version: 8.1 revision: 138
Changed toolbar not to be rebuilt during suspend mode. If a techfile locks layers and a script locks and unlocks them, then the continuous redrawing of the toolbar greatly increases the time to run the script.
Merge branch 'master' into work

posted: January 25, 2017 at 3:00am version: 8.1 revision: 137
Corrected use of Opts(focus) when in batch mode, where the variable does not exist.
Corrected obscure error caused by moving out of a window and then calling drawing commands from the toolkit without a referenced window.
Merge branch 'master' into work

posted: January 23, 2017 at 3:00am version: 8.1 revision: 136
Enhanced the "port" command to allow a port to be identified without selection, by using "port " or "port ". Also added command "port last" to identify the highest used port number. Updated the texthelper widget to allow ports to be created or removed as part of text management.
Corrected behavior such that the "pick" tool does not copy locked layers.
Modified "Save All and Quit" to be more obvious about failing due to modified contents in (UNNAMED). User will be prompted to select a valid name, and if all goes well, magic will then save the new file and exit without further comment.
Merge branch 'master' into work

posted: January 7, 2017 at 3:00am version: 8.1 revision: 135
Catch errors in toolkit check and draw procedures so that the errors are printed, and they don't leave magic in a suspended state.
Fixed infinite looping if "macro search" is used without being followed by a search term. Also added behavior that "imacro" when used to return a list only returns results that are interactive macros.
Added basic callback to parameter entries to automatically run the routine that checks parameters for out-of-bounds values, whenever the entry gets a Return key or focus-out event.
Merge branch 'master' into work

posted: January 3, 2017 at 3:00am version: 8.1 revision: 134
Corrected error preventing use of gencell from the command line.
Merge branch 'master' into work

posted: January 1, 2017 at 3:00am version: 8.1 revision: 133
Implemented command history retrieval for the window command entry.
Corrected (by catching and ignoring) a one-time startup error that can happen on running the cursorview procedure.
Corrected "closewrapper" command, which was not using the proper hierarchy since the paned window was added.
Merge branch 'master' into work

posted: December 31, 2016 at 3:00am version: 8.1 revision: 132
Corrected redirect of print statement to the terminal during initialization, which had been messed up by a change in the console printing to accomodate the command entry windows.
Added keyword search capability to the "macro" command to get a refined list.
Corrected macro behavior if an unregistered window is given as the first argument, so that it does not offset the list of arguments.
Added feature to the "macro" command to allow help text to be saved and retrieved for each macro.
Added Opts(autobuttontext) to control whether or not the routine that automatically generates accelerator text for menu buttons is called, in case a user wants to do customization.
Merge branch 'master' into work

posted: December 30, 2016 at 3:00am version: 8.1 revision: 131
Change tkcon "-under" commands to "-underline" since the abbreviation was generating an error on one platform. Added a new script to automatically fill in key binding names on the menu buttons.
Changed wrapper to do menu button accelerators properly using the menu button -accelerator option. Also changed the 'macro list' command to return the key and value pairs, in reverse order (command first, then key) so that a reverse lookup hash can be made easily, for doing automatic generation of menu button accelerators (this procedure has not been written yet).
Additional correction to avoid making changes to the texthelper at all when it is withdrawn.
Merge branch 'master' into work

posted: December 29, 2016 at 3:00am version: 8.1 revision: 130
Corrected problems with the texthandler GUI stemming from problems with the "setlabel" command when applied to labels not in the edit cell. Changed so that "setlabel" returns no values from labels that are not editable (because they are not in the edit cell), and does not attempt to modify labels that are not editable. The texthelper was changed so that it displays only results for the first editable selected label.
Merge branch 'master' into work

posted: December 27, 2016 at 3:00am version: 8.1 revision: 129
Quick hack to allow the "Delete" key to be mapped. There is no keysymdef definition for it. The hack lets "macro <del>" stand in for the delete key, which is non-standard but matches the string that has always been returned when the key is pressed. A better method allowing character codes to be entered is needed, though.
Corrected an error in PDK gencell procedure that could confuse instance names in different cells and end up modifying the wrong one.
Merge branch 'master' into work

posted: December 26, 2016 at 3:00am version: 8.1 revision: 128
Corrected error that crashes magic if the "identify" command is used to attempt to change the instance ID of a top-level window cell (which is not like other instances and has no parent celldef).
Corrected a typo affecting Cell -> Save as menu item.
Merge branch 'master' into work

posted: December 24, 2016 at 3:00am version: 8.1 revision: 127
Modified the layout wrapper window so that the layout and command entry windows exist in a paned window with a movable sash, so that the command entry window can be resized as needed.
Made a number of changes to facilitate the command entry window in a layout window. This included un-hardwiring the colon key as a hack in the graphics code, to be replaced by doing 'imacro XK_colon ":"', allowing the colon to be replaced by a different macro. Then, the Tcl_printf statement was not tied to the console interpreter, which allowed print statements internal to magic to be redirected to places other than the console. Finally, the proper commands and scripts were put in place to make the command input window behavior match the console as much as possible. The result is not perfect but works okay if one either operates from the console or from the command windows but does not try switching between them much.
Changed the TkShell code so that it does not use a slave interpreter, which just complicates the process of redirecting stdin/stdout/stderr.
Merge branch 'master' into work

posted: December 23, 2016 at 3:00am version: 8.1 revision: 126
Some additional features for the wrapper view, including a new dialog for new cell and save cell, and new menu items for clone window and set window editable. Fixed a very long-broken tool identifier message in the window header.
Corrected the 'box' command's handling of area, which needed to be type dlong to accomodate maximum length * width values.
Merge branch 'master' into work

posted: December 20, 2016 at 3:00am version: 8.1 revision: 125
Cleaned up the toolkit data entry window a bit.
Added "Okay" button to work in addition to "Apply" and "Cancel" although I find such things redundant.
Corrected some problems with the text/label helper widget; most of these changes were in the widget script, although noting that "setlabel sticky" returns a boolean but does not accept a boolean as an argument, this was corrected in the setlabel command.
Merge branch 'master' into work

posted: December 19, 2016 at 3:00am version: 8.1 revision: 124
Update to toolkit resolves issues of units and parameters names by adding a client procedure _convert that takes a dictionary of SPICE netlist parameter names and values and converts to a dictionary of toolkit parameter names and values.
Additional fixes for creating or editing gencell devices from the command line.
Merge branch 'master' into work

posted: December 16, 2016 at 3:00am version: 8.1 revision: 123
Correction to last change for dbGetUseName to detect 1D arrays as well as 2D arrays from a name without array indexes. Also updated toolkit significantly; corrected problems with pushstack/popstack (which did not save and restore view position), and with suspendall/ resumeall (which failed due to the unusual fact that the 'incr' command accepts an uninitialized variable name without comment).
Merge branch 'master' into work

posted: December 15, 2016 at 3:00am version: 8.1 revision: 122
Developed a new toolkit API. Not quite finished yet.
Merge branch 'master' into work

posted: December 14, 2016 at 3:00am version: 8.1 revision: 121
Several enhancements to do with arrays: (1) "array" command now has option "-list" to generate results as a Tcl list. (2) "select cell " now accepts without any array indexes as synonymous with the lower left array instance. (3) "what" command returns array indexes of selected instances.
Corrected a focus issue with the command entry window that shows up if the command entry window option is set to 1 default.
Merge branch 'master' into work

posted: December 13, 2016 at 3:00am version: 8.1 revision: 120
Corrected a script error that undermines the whole PDK; not likely to be seen outside of some of the more obscure script-based functions.
Merge branch 'master' into work

posted: November 28, 2016 at 3:00am version: 8.1 revision: 119
Implemented a feature found on a modified version of ext2spice in which the terminal label "S$" and/or "D$" can be used to force the order of drain and source in the netlist output.
Corrected SPICE output so that subcircuits without an alphabetic character as the first character, such as subcircuits referenced by a full path name, do not output illegal SPICE name syntax.
Merge branch 'master' into work

posted: November 26, 2016 at 3:00am version: 8.1 revision: 118
Corrected 'lock' symbol on locked layers to force it to be drawn on top; otherwise, some layers may obscure it completely. Corrected the callback to the toolbar redraw so that 'tech revert' forces a redraw of the toolbar.
Changed behavior of extractor so that if it attempts to extract a cell in a read-only directory, it will instead write the .ext file to the current directory if there is no .mag file of the same name in the current directory (the need for library management is implied, and will be done soon, but meanwhile this will suffice for most purposes). Extflat has the complementary behavior but relies on the write behavior and does not check for a .mag file.
Removed diagnostic message from debugging.
Merge branch 'master' into work

posted: November 25, 2016 at 3:00am version: 8.1 revision: 117
Found that the Tk graphics event ConfigureNotify was failing to update the backing store size to fit a resized screen in the case of a window resize caused by an internal event such as adding or removing the toolbar. On some systems, or possibly VNC sessions, this includes resizing of the entire window. Fixed this by explicitly calling the backing store create routine for ConfigureNotify events.
Merge branch 'master' into work

posted: November 23, 2016 at 3:00am version: 8.1 revision: 116
Revised tools.tcl so that suspend/resume and pushstack/popstack will work with "magic -dnull"; otherwise, they fail due to use of tk commands that are not available in null graphics mode.
And one more addition to the toolkit, to add a selectable list entry for gencells.
Merge branch 'master' into work

posted: November 21, 2016 at 3:00am version: 8.1 revision: 115
Cleaned up the wrapper and worked on the gencell methods. Removed items from the menu that say 'unimplemented function'. Added separators to the gencell menu procedures, and added a checkbox as well.
Merge branch 'master' into work

posted: November 18, 2016 at 3:00am version: 8.1 revision: 114
Added a rule for hierarchical standard-cell parasitic extraction to treat LEF ports with no USE defined as use SIGNAL as long as the port direction is specified as INPUT or OUTPUT.
Merge branch 'master' into work

posted: November 10, 2016 at 3:00am version: 8.1 revision: 113
Corrected the LEF read routine to address several problems: (1) "lef write" with no other options is now a legal command, as is shown by "lef help". (2) Polygons in LEF macro ports are now written out as geometry instead of being ignored during "lef write", (3) Multiple polygons in a PORT record are handled correctly.
Merge branch 'master' into work

posted: November 5, 2016 at 3:00am version: 8.1 revision: 112
Corrected default key bindings: Old 'labelpaint' corrected to 'label', and diagonal stretch bindings (which are not legal commands) removed.
Added an item to the "Options" menu that allows the toolbar to hide layers which are locked, resulting in a less-cluttered toolbar.
Merge branch 'master' into work

posted: October 26, 2016 at 3:00am version: 8.1 revision: 111
Corrected the "tech revert" command, which was changing the active layer mask but failing to correct the contact paint/erase tables as was done for the "tech lock" and "tech unlock" cases.
Merge branch 'master' into work

posted: October 22, 2016 at 3:00am version: 8.1 revision: 110
Corrected the generation of parameters in "device" properties. Since the property overrides all internal device extraction, no device properties will be listed, so instead properties are saved and copied verbatim to the spice output (these properties don't scale, however, so care must be taken with the 'scale' option for ext2spice).
Merge branch 'master' into work

posted: October 21, 2016 at 3:00am version: 8.1 revision: 109
Added extraction method if cell has a property name "device", which is a string representation of the device output in the .ext file, other than values being in lambda (which will be converted according to scale in the .ext file). This replaces any device that may be present in the cell, so it should only be used to annotate a cell that represents a single device. This allows any arbitrary device to be extracted from a subcell without the need for an extraction method.
Merge branch 'master' into work

posted: October 9, 2016 at 3:00am version: 8.1 revision: 108
Error in "drc why", and possibly all DRC checking, due to rectangle "square" being self-modified within a double loop over itself, causing the check area to shift unpredictably.
Merge branch 'master' into work

posted: September 5, 2016 at 3:00am version: 8.1 revision: 107
Added handling to .mag file reads to specifically ignore control-M characters at the ends of lines; otherwise, these characters get embedded in the label text and cause newlines in SPICE output from ext2spice, creating invalid SPICE files.
Merge branch 'master' into work

posted: July 21, 2016 at 3:00am version: 8.1 revision: 105
Updated configure script to extract the paths for the Tcl and Tk lib and include files, so that subsequent checks for those files are not disjoint from the contents of tclConfig.sh and tkConfig.sh.
Resolved two additional errors when using command "see" with either option "$" or "connect". In addition to superfluous error messages, the former was incorrectly documented, and the latter was not documented at all.
Merge branch 'master' into work

posted: June 22, 2016 at 3:00am revision: 104 version: 8.1
Implemented some preliminary changes to extresist for treating subcircuits as black-box entities. This work is not complete. Also, corrected wrapper so that use of "see" with non-layer arguments such as "allSame" will not generate an error message (bugzilla issue 41).
Merge branch 'master' into work

posted: June 11, 2016 at 3:00am version: 8.1 revision: 103
Minor correction to magic.tcl script, which was still trying to unset the variable "cellname", which had been changed to "celllist".
Merge branch 'master' into work

posted: June 9, 2016 at 3:00am version: 8.1 revision: 102
Some preliminary changes to extresist for running extraction on standard cell circuits. Also: Did something I should have done long ago, which is to allow multiple filenames on the command line, and load them appropriately according to the file extension, in order. That allows one to read LEF and DEF files, magic database files, GDS files, CIF files, and TCL scripts from the command line. This makes it easier for another application (like qflow) to launch magic and run a number of commands to set up a specific display, or do some action, but leave magic running interactively once that setup is done.
Corrected ordering of key strings for LEF class types, or else class "OUTPUT" gets confused with class "OUTPUT TRISTATE".
Merge branch 'master' into work

posted: June 1, 2016 at 3:00am version: 8.1 revision: 101
Corrected error that prevented "lef read" from annotating ports that are polygons instead of rects. This forced me to combine two similar linked rectangle structures into one.
Re-ran configure with Tcl/Tk so that the corresponding defs.mak file ends up in the distribution.
Merge branch 'master' into work

posted: May 24, 2016 at 3:00am version: 8.1 revision: 100
Made two corrections in parts of the code that were breaking the non-Tcl/Tk based compile.
Merge branch 'master' into work

posted: May 23, 2016 at 3:00am version: 8.1 revision: 99
Finally got rid of that error that fails to update the toolbar when a command like "see" is issued; layer names were being appended with a space character, and so would fail to match any known layer name.
Extended the method of disambiguating file-not-found errors and parsing errors, and printing the parse errors, to the system and local startup files.
Merge branch 'master' into work

posted: May 21, 2016 at 3:00am version: 8.1 revision: 98
Added warning to GDS reads when a path reverses on itself. Magic handles this cleanly, but other GDS readers may erase such a path. Changed the incorrect output message "this action is undoable" for LEF and DEF reads to the correct, and clearer, "this action cannot be undone". Changed the behavior of the reading and evaluating of the startup file so that (1) failure to find or read the file is disambiguated from failure due to an error in the file; and (2) errors in the startup file are output to the terminal.
Additional change not to complain unnecessarily about cells read from a GDS file that are seen more than once, because all cells that have been read in by forcing post order and looking ahead fall in that category.
Merge branch 'master' into work

posted: May 10, 2016 at 3:00am version: 8.1 revision: 97
Corrected a long-standing error with "gds readonly", as subcells were parsed without passing the filename to the routine, which caused the GDS file position to be lost; if written back out, the cell would not appear in the file.
Merge branch 'master' into work

posted: May 9, 2016 at 3:00am version: 8.1 revision: 96
Modifications to allow layers to not participate in extraction (fix to segfault problem from previous commit).
Extended "plot pnm" section so that keyword "default" can be used to load default colors; then individual colors can be modified afterward. This retains backwards compatibility.
Added error message output when a "plot pnm" drawing style is unknown.
Added proper deletion of existing saved geometry if the "gds flatten" option causes an entire cell's contents to be saved after reading. Also added a warning message if saved geometry is never instantiated, indicating information lost during the GDS read.
Merge branch 'master' into work

posted: May 6, 2016 at 3:00am version: 8.1 revision: 95
Revised the system of the "fault" operation in cifinput. The keyword "fault" is not deprecated (treated like "templayer"). Instead of a fault condition causing all paint to be pulled up to the next layer of hierarchy, the opcode "copyup" can be used to copy up only the geometry generated to the next level of hierarchy. This allows, for example, contact cuts with no context to be identified and copied up, without affecting any other layers.
Merge branch 'master' into work

posted: May 5, 2016 at 3:00am version: 8.1 revision: 94
Fixed option for processing faults when cells are read out of order and "ordering" option is not enabled.
Merge branch 'master' into work

posted: May 2, 2016 at 3:00am version: 8.1 revision: 93
Added a method for which "resist" in the "extract" techfile section can be given a list of types followed by "None" instead of a value, and those types will not participate in extraction. This avoids problems with implant layers like silicide block or thick oxide, or non-mask layers like identifiers and boundary markers, that can cause problems with LVS by being extracted as a network and connecting through pins, even though those nets do not terminate on any active device.
Corrected post-order GDS reading with fault-based flattening (from previous check-in, error does not appear in any distribution tarball).
Merge branch 'master' into work

posted: May 1, 2016 at 3:00am version: 8.1 revision: 92
Modified handling of "fault" layer to revert to normal (non-faulting) GDS/CIF reads if the faulted layers cannot be copied up into the next level of hierarchy (e.g., if the cell that faults is a top-level cell).
Merge branch 'master' into work

posted: March 16, 2016 at 3:00am version: 8.1 revision: 91
Corrected an error with the FIXED_BBOX property that causes it to be written to every file, and fails to write the property header to the file so that it causes an error if read back in.
Merge branch 'master' into work

posted: March 7, 2016 at 3:00am version: 8.1 revision: 90
Changed definition of lab_font to "signed char" to correctly identify as signed on the ARM-based gcc compiler.
Revised previous FIXED_BBOX property so that it is not kept internally as a property, but is generated into the .mag output as a property string whenever the CD_FIXEDBBOX flag is set. That way, the .mag property record holds the value, but the value does not have to be sync'd to changes in the internal scalefactor.
Merge branch 'master' into work

posted: February 21, 2016 at 3:00am version: 8.1 revision: 89
Corrected property generation from LEF file reading, which was not properly allocating memory for the property string, and therefore causing the string to be overwritten with other data, as well as being a potential memory error if the cell is deleted. Also, created unique property FIXED_BBOX that allows LEF macro bounding boxes to preserve the bounding box information in a .mag file.
Merge branch 'master' into work

posted: February 16, 2016 at 3:00am version: 8.1 revision: 88
Corrected non backwards-compatible treatment of substrate, which was failing to note when a tech file does not have any information about a substrate plane or substrate connections, and therefore would dump an unconnected substrate node called "(none)" while flagging a warning to the terminal.
Merge branch 'master' into work

posted: February 15, 2016 at 3:00am version: 8.1 revision: 87
Several minor changes, including a syntax fix for detecting the missing 3rd argument to "delete cell "
Merge branch 'master' into work

posted: December 7, 2015 at 3:00am version: 8.1 revision: 86
Corrected an issue in which a crash will be caused by failing to have the optional "plot" section in the techfile, but giving a plot command anyway, e.g., "plot pnm". Since "plot pnm" is able to use magic layout styles as defaults for rendering, it can simply flag a warning message, set up the defaults, and continue.
Merge branch 'master' into work

posted: November 15, 2015 at 3:00am version: 8.1 revision: 85
Changed the magic launch script from /bin/sh to /bin/bash because it contains a bash-ism. Really, though, this needs to be worked out in the configure script and handled appropriately, or perhaps just find a standard sh workaround for the bash syntax.
Corrected a second instance needing protection against integer overflow in drcCifCheckArea().
Merge branch 'master' into work

posted: October 12, 2015 at 3:00am version: 8.1 revision: 83
Lifted restriction on DRC scalefactor requiring it to be less than 256. This is unnecessary, and must have been left over from an earlier implementation.
Merge branch 'master' into work

posted: September 24, 2015 at 3:00am version: 8.1 revision: 82
Corrected an inequality that would prevent text labels on layer zero from being able to be made sticky.
Corrected a long-standing error that can cause false DRC errors when the "mark" paint method fails to unmark tiles that get clipped outside the area boundary. Fixed by running the unmark search with an area expanded by one on all sides.
Modified LEF macro reading behavior such that if a cell is already defined and loaded (as from a GDS file or magic database file), then it is used instead of the LEF macro geometry in the LEF file. It does not attempt to read a cell from disk, as previously done if encountering the "FOREIGN" keyword. The existing cell is modified, however, to take the bounding box defined in the LEF file, since the relationship between the LEF bouding box and a foreign source such as a GDS file is only found in the LEF file. Corrected the LEF read routine so that a section skip does not get tripped up by "END" followed by "END".
Merge branch 'master' into work

posted: September 11, 2015 at 3:00am version: 8.1 revision: 81
Corrected commands "drc *halo" and "drc *stepsize", which were missing an argument to the call to cmdScaleCoord(), but were also incorrectly converting the result (which is in internal units) into DRC units (according to the drc "scalefactor" value).
Merge branch 'master' into work

posted: September 7, 2015 at 3:00am version: 8.1 revision: 80
Added patches from Ryan Schmidt, updating a deprecated use of sys/types.h to obtain a definition of FD_SET (modern usage is apparently to include sys/select.h), and setting return values for TxTclDispatch in two places where they were missing.
Merge branch 'master' into work

posted: September 1, 2015 at 3:00am version: 8.1 revision: 77
Corrected missing initialization of crs_flags.
Modified latest correction to match the version done for magic-8.0.
Merge branch 'master' into work

posted: August 25, 2015 at 3:00am version: 8.1 revision: 76
Fixed port boundary line error.
Previous comments were for netgen, failed to note that magic-8.1 was being logged, and that due to compiling without cleaning up. Reverting; this check-in should be ignored.
Merge branch 'master' into work

posted: August 20, 2015 at 3:00am version: 8.1 revision: 75
Corrected an infinite loop caused by lack of a return character after ".ends" (seems to be unique to that situation), and a segfault due to having a cell with no components other than calls to uninstantiated subcircuits (recently added code references CurrentCell without checking if it exists).
Corrected maketoolbar to allow a minimum of one column of toolbar icons instead of the previous minimum of two.
Merge branch 'master' into work

posted: July 31, 2015 at 3:00am version: 8.1 revision: 74
Corrected the inability to use "load -nowindow" if there is no existing layout window. Corrected toolbar window height calculation according to fix suggestion from Risto. My own window manager setup does not expose the problem.
Merge branch 'master' into work

posted: July 26, 2015 at 3:00am version: 8.1 revision: 73
Implemented "load -nowindow", which calls DBWloadWindow with NULL for the window value, and uses the NULL value to bypass any actions associated with a window or edit use.
Merge branch 'master' into work

posted: July 24, 2015 at 3:00am version: 8.1 revision: 72
Corrected "tech load" so that "-nooverride" is ignored as an option but does not otherwise cause an error. Corrected the usage statement so that it mentions "-override" but not "-nooverride".
Merge branch 'master' into work

posted: July 23, 2015 at 3:00am version: 8.1 revision: 71
Removed the "-nooverride" option from "tech load". "-nooverride" is now the default behavior. However, the flag that prevents the overriding is removed after the complete startup sequence, so that use of "tech load" from the command line is not prohibited just because "-T" was passed to magic on the command line. Tech loading from a .mag cell's contents is restricted to the single case that the entire startup sequence has completed without a technology file being specified.
Merge branch 'master' into work

posted: July 21, 2015 at 3:00am version: 8.1 revision: 70
One more attempt at a sensible arrangement of handling startup files and command line options for technology file searching and loading.
Merge branch 'master' into work

posted: July 19, 2015 at 3:00am version: 8.1 revision: 69
Corrected the previous "fix", where initialization exit routines were being run when TechLoad() was called only to load a new extract, DRC, or GDS input/output style. In these uses, the calling routine always calls the exit routine specific to the single section being loaded, and the other exit routines should not be called at all.
Merge branch 'master' into work

posted: June 15, 2015 at 3:00am version: 8.1 revision: 68
Made some changes to dbcConnectFuncRCS to match similar changes made recently for database/dbConnect.c in function dbcConnectFunc regarding stacked contacts.
Additional changes similar to the last set; moved post-load initializations, scaling, and plane change checks into TechLoad(), since they must be run every time a new technology file is loaded.
Merge branch 'master' into work

posted: June 12, 2015 at 3:00am version: 8.1 revision: 67
Found what was presumably the main error in the tech loading, which is that the "tech load" command would re-initialize the sections with styles (extract, cifinput, cifoutput), but in other places use of TechLoad() would not do this, allowing the old and deprecated styles to still be listed in the style table.
Probably overkill, but refined the last bug fix such that the first call to TechLoad() to check the validity of the tech file makes certain that the first non-comment line of the file is the keyword "tech". To get that far, the file would have to have the .tech extension but not be an actual magic tech file. But, hey, just to be on the safe side.
Merge branch 'master' into work

posted: June 5, 2015 at 3:00am version: 8.1 revision: 66
Corrected the behavior of "tech load", which starts re-initializing various sections before determining if the requested tech file exists or is readable, such that the entire database can be hosed by doing, say, "tech load blah". Added a special case initmask == 2, which will open the tech file, read the first line, close the file, and return. Any error during that time returns 0, allowing the calling routing to catch and handle the case of a bad tech file before doing permanent damage to the database.
Merge branch 'master' into work

posted: June 2, 2015 at 3:00am version: 8.1 revision: 65
Implemented, at least in part, Risto's scheme of having a site-defined pre-initialization script.
Merge branch 'master' into work

posted: May 31, 2015 at 3:00am version: 8.1 revision: 64
Implemented a new command "xor" that is able to perform LVL (layout-vs.-layout) by removing all geometry that is the same between two cells. Normally, one would flatten at the top level before running "xor".
After noticing that the documentation defines sidewall capacitance referenced to 2 lambda, I realized that when using "units microns", if the capacitance is then supposed to be referenced to 1 micron, then the value needs to be divided by two.
Merge branch 'master' into work

posted: May 6, 2015 at 3:00am version: 8.1 revision: 63
Corrected an error that incorrectly scales the sidewall overlap cap as an area capacitance, not a perimeter capacitance.
Merge branch 'master' into work

posted: May 2, 2015 at 3:00am version: 8.1 revision: 62
Corrected an error with sidewall capacitance, which because it is referred to a specific distance, does not scale (provided that the linear model is valid, which is somewhat doubtful).
Corrected an error that prevented the "defaultperimeter" statement in the extract section of the techfile from registering the perimeter capacitance to substrate (all other sideoverlap values were not affected).
Merge branch 'master' into work

posted: April 28, 2015 at 3:00am version: 8.1 revision: 61
Corrected an error that prevented coupling capacitance calculations in the case of the older extraction style without substrate handling.
Merge branch 'master' into work

posted: April 22, 2015 at 3:00am version: 8.1 revision: 60
Corrected an error in which the index into CIF layer names was confused with the index into generated layers in cifinput, potentially causing a crash on cif/gds reads when reading in a label.
Merge branch 'master' into work

posted: April 16, 2015 at 3:00am version: 8.1 revision: 59
Corrected a problem in which the "*bypass" command increments the command reference number; because "*bypass" commands are generated by the background DRC, and because the selection mechanism uses the last command number to determine if selection commands are called multiple times in a row, the background DRC interferes with the incremental (tile, chunk, net) selection mechanism. Modified to avoid incrementing the command count on "*bypass", so that only typed or sourced commands will reset the selection mechanism.
Merge branch 'master' into work

posted: April 5, 2015 at 3:00am version: 8.1 revision: 58
Corrected substrate node merging to accomodate instance arrays. Previously, the array indexes were being left out, resulting in names that ext2spice could not parse.
Merge branch 'master' into work

posted: April 2, 2015 at 3:00am version: 8.1 revision: 57
Extended the use of parameters to include all device types; this supports a number of variants of SPICE syntax that allow parameters on low-level components that are not part of the standard SPICE3 syntax.
Additional correction to assign labels when searching for a child use's substrate node. Otherwise, labeled substrates will not match the name used in the child's .ext file.
Added substrate extraction for arrays to complete the substrate extraction method.
Merge branch 'master' into work

posted: March 28, 2015 at 3:00am version: 8.1 revision: 56
Finally corrected some of the main problems with the substrate extraction, resorting to a few global variables to take care of it.
Merge branch 'master' into work

posted: March 24, 2015 at 3:00am version: 8.1 revision: 55
Corrected an error which would not connect zero-area labels to a node region if they only touched material in another cell but were not overlapped by it.
Merge branch 'master' into work

posted: March 20, 2015 at 3:00am version: 8.1 revision: 54
Corrected error in "drc why", where error message printing routine was incorrectly translating the tile area back to top-level coordinates, when the search area had already been converted to local coordinates.
Discovered a stupid error with the "sticky labels" (labels not attached to anything in their own cell, but placed on top of material in a subcell, for example) in which the check for the label being inside the search area had the two arguments reversed, leading to a "no" result every time.
Added a long-missing feature to scale text using rendered fonts when scaling the database grid.
Merge branch 'master' into work

posted: March 19, 2015 at 3:00am version: 8.1 revision: 53
Reverted code for scaling cell to go back to using DBCellEnum(). Found the real underlying reason for the errors, which was the use of cu_extended as the bounding box rectangle when calling DBPlaceCell(). This corrupts the cell plane.
Putting much of the latest change to the Cell plane cleanup back the way it was. The eventual conclusion is that DBCellEnum really does do (theoretically) an enumeration of unique cell instances without repeats. The repeats that are showing up in the GDS read are apparently a result of a corrupted Cell plane. Might be due to using plane 0 for writing GDS data, and then swapping planes with a database cell. . .?
A few corrections to the previous check-in. Newest code works well, but faults that propagate to the top level cause the top level to be deleted, which needs to be addressed.
Corrected an apparently very long-running error in which the routine that deletes cell planes calls the routine to delete cell uses found there, in spite of the fact that the cell plane is constructed such that uses may appear multiple times. When the use is deleted more than once, memory corruption occurs. Magic version 8.0 needs the same change.
Merge branch 'master' into work

posted: March 18, 2015 at 3:00am version: 8.1 revision: 51
Split the extraction devices for "diode" into "pdiode" and "ndiode", noting that the SPICE "D" device always has anode and cathode pins in the same position; but drawn layout will have the diffusion as the identifying layer. Therefore, a pdiode should be written out with the identifying layer node first, followed by the well, and an ndiode should be written out with the substrate connection first, followed by the identifying layer node.
Attempted to correct the fault processing of GDS input. This seems to have problems when a faulted cell has subcells in it that need to be pulled up to the next level of hierarchy. Usage of the "fault" method for "cifinput" should be considered highly unstable.
Corrected an error in the CIF "squares" generator where areas of connected tiles that were overlapping but not themselves connected would be processed twice.
Merge branch 'master' into work

posted: March 17, 2015 at 3:00am version: 8.1 revision: 51
Changed the feedback structure (again!) to a method using a reference counter, which results in a big speedup for certain uses like "cif see" that can create a lot of feedback entries all at once. Really ought to be storing string entries in a hash table, though.
Finally found a clever way to get around the perennial problem of reading GDS from sources that define partial structures like diffusion without N or P implants, or contacts without both connecting layers, that are fundamentally incompatible with magic's database. I have added a keyword "fault" to the cifinput description. This is just like "templayer", but defines a series of boolean operations which will flag these kind of structures. When the "fault" descriptions are present in the cifinput section, cells containing such incompatible geometry will be flattened. In the worst case, this may cause large portions of the input to be flattened, but in my experience, these type of structures tend to be restricted to contacts, contact arrays, and transistors, and don't expand more than one level of hierarchy. The result, though, is no more geometry lost because cells define partial geometry. This feature largely replaces the more ad-hoc "gds flatten" option.
Removed the requirement that "device capacitor" must include an areacap value, since modeled devices will take length and width, and ignore any value given. Extended the capacitor extraction to include capacitors defined on two different layers, or modeled parasitics (layer to substrate; e.g., a pad may have a precisely characterized parasitic model, and should not rely on simple parasitic extraction). The terminal type for a modeled parasitic to substrate may be given in the same way as the substrate, that is, "space/w".
Merge branch 'master' into work

posted: March 16, 2015 at 3:00am version: 8.1 revision: 50
Extension of extraction method allows device terminals to be on a plane other than the plane of the device identifier type; further, there can be multiple device terminals stacked on multiple planes; and finally, the substrate (e.g., "space/w") can be declared as a terminal type. This allows definition and correct extraction of, for example, ESD diodes between ndiffusion and the substrate.
Corrected a bad error stemming from a misunderstanding of the DBCellEnum() routine, which processes cell uses in a way that is not necessarily calling each one exactly once. This assumption causes the cell scaling to fail by processing some uses' transforms more than once. Replaced with a hash enumeration of cd_idHash. Made a quick attempt to see what happens if DBCellEnum is replaced by a hash enumeration, but that did not work and I conclude that historic use of DBCellEnum is correct, although I do not entirely understand the difference between that and a hash enumeration.
Merge branch 'master' into work

posted: March 14, 2015 at 3:00am version: 8.1 revision: 49
Corrected a crash condition that can occur if magic is passed the name of a nonexistant technology file.
Merge branch 'master' into work

posted: March 12, 2015 at 3:00am version: 8.1 revision: 48
Corrected an ext2sim error that would crash on devices with only one terminal identified.
Merge branch 'master' into work

posted: March 10, 2015 at 3:00am version: 8.1 revision: 47
Corrected another hidden error related to gridlimit that caused a crash on CIF reads when the limit is zero (no limit).
Merge branch 'master' into work

posted: March 9, 2015 at 3:00am version: 8.1 revision: 46
Preliminary code that allows terminal types of a device to be on a different plane than the device identifier type. For now, this makes use of the existing substrate search routine, and has the restriction (like the substrate) that only one electrical node may exist under the area of the device identifier type. Also, the search only occurs if no (other) terminals are found connected to the device identifier type on its own plane. The new method works for capacitors where top and bottom types are defined on different planes. It must be cautioned that the capacitance will be double-counted if a parasitic capacitance is defined between the two types.
Additional correction to remove added whitespace introduced by the solution found on stackoverflow for parsing command-line arguments.
Merge branch 'master' into work

posted: March 5, 2015 at 3:00am version: 8.1 revision: 45
Corrected shell launcher script to preserve quotes in arguments, as was done recently for netgen-1.5.
Merge branch 'master' into work

posted: February 26, 2015 at 3:00am version: 8.1 revision: 44
Corrected error in which lack of a gridlimit statement causes the grid limit to be set to zero and results in a divide-by-0 error.
Corrected the "box" command so that "box position ... -edit" and others work as advertised; also modified the behavior so that the "-edit" switch is valid for all "box" command options.
Merge branch 'master' into work

posted: February 21, 2015 at 3:00am version: 8.1 revision: 43
A few minor changes to avoid printing stderr messages in batch mode, to generate a proper exit value, and to print all messages into the console when available except for error messages associated with an early exit that closes the console.
Finally corrected the -noconsole replacement of the inputProc for the stdin channel in a way that is compatible with Tcl/Tk 8.6. Should be properly compatible with Tcl/Tk 8.5 as well.
Reverted tclmagic.c, did not mean to check in non-working code meant to fix -noconsole mode when using Tcl/Tk 8.6.
Merge branch 'master' into work

posted: February 20, 2015 at 3:00am version: 8.1 revision: 42
Corrected the "gridlimit" such that (1) it properly scales by the CIF expander value (output) and multiplier (input); and (2) it properly differentiates between input and output. That is, the "gridlimit" keyword can be put in either "cifinput" or "cifoutput" sections; if it does not appear in "cifinput", then input geometry is not confined to the grid, but the grid will be subdivided even if this violates the output grid limit.
Correction to avoid the problem of having the console flag set before the options are read, or the code determines if a console is being used.
Modified the startup procedure to redirect output back to the terminal during the startup phase. That allows the initialization script to exit in the case of a startup error, without the problem of losing output that was passed to the console.
Fixed a typo that caused the tkcon command history saving to fail.
Merge branch 'master' into work

posted: February 19, 2015 at 3:00am version: 8.1 revision: 41
Added new command option "cellname [list] modified" to list all cells that have been modified without saving. This is used in conjunction with "writeall" to determine if "writeall" failed to save any cell, in which case the menu item "Save All and Quit" will prompt for a decision rather than risk losing unsaved data.
Stopped requiring that whitespace lines delineate sections, although a warning will be posted. This does not really solve the overall problem of lack of syntax checking and handling, though.
A few additions to the last change: Watch for errors during the loop over possible pathname attempts; any time a file is found but an error occurs, discontinue the loop over items in the path list. Also: On startup, if an error occurs when loading a file, default to using (UNNAMED). Otherwise, when loading a file, if an error occurs, then keep whatever cell was already in the window.

posted: February 17, 2015 at 3:00am version: 8.1 revision: 40
Highly experimental. Mucked with the fopen() result to try to differentiate the problem of loading a nonexistant file into a writeable directory (in which case you want to create an empty cell), vs. the problem of not loading an existing file due to some error that may need correcting (unwriteable directory, etc.). This is probably opening a can of worms. But for starters, the code now reports the system error string for return codes from fopen(). However, the inner loop currently does not break on error, so continues looking for a file of the given name in an alternative directory even if a file of the given name was found but generated an error when attempting fopen() on it. Also:
Corrected handling of SIGALRM when in batch mode.

posted: February 16, 2015 at 3:00am version: 8.1 revision: 39
Moved console manipulations of "exit" and "quit" out of console.tcl and into magic's startup code. That way if magic's startup fails and dumps back to the console, it is still possible to exit from the console in the normal way.Also:
Update at Mon Feb 16 19:22:43 EST 2015 by timAlso:
Merge branch 'master' into workAlso:
Corrected invalid access to "longname" in GrStyleTable, which may be NULL.

posted: February 15, 2015 at 3:00am version: 8.1 revision: 38
Modified the "tech revert" command so that it can take an argument, as specified in the help text; also, corrected the "quit" command so that it calls the tkcon exit routine, allowing tkcon to save the command-line history before exiting.Also:
Update at Sun Feb 15 14:03:49 EST 2015 by timAlso:
Merge branch 'master' into workAlso:
Finally corrected the way the tkcon console is set up so that doing File->Exit from the tkcon menu will call Magic's exit routine instead of tkcon's; and Magic calls tkcon's exit routine as the last thing before quitting.Also:
Modified "tech layers" command to be compliant with the general principle of allowing comma-separated lists of types.

posted: February 12, 2015 at 3:00am version: 8.1 revision: 35
Created a method to copy a selection into a feedback area of a specified color, with optional attached text.Also:
Update at Wed Feb 11 10:13:43 EST 2015 by timAlso:
Merge branch 'master' into workAlso:
Completed the selection feedback function (text handling was missing).Also:
Corrected an error that failed to check for a valid return value when using "select feedback" with a style name or number, resulting in a segfault for bad input.

posted: February 11, 2015 at 3:00am version: 8.1 revision: 34
Corrected the file access in LEF/DEF reads and writes to make it compatible with similar changes made to database files (requires stripping off any extension before calling PaOpen()).Also:
Update at Tue Feb 10 08:39:41 EST 2015 by timAlso:
Merge branch 'master' into work

posted: January 26, 2015 at 3:00am version: 8.1 revision: 33
Corrected toolbar behavior when a comma-separated list is passed to the "see" (including "see no") command.Also:
Update at Sun Jan 25 11:13:06 EST 2015 by timAlso:
Merge branch 'master' into workAlso:
Corrected an error which generates substrate name "0" for substrate nodes that have internally generated node names (the internally generated name should be output instead).

posted: January 24, 2015 at 3:00am version: 8.1 revision: 32
Modified "setlabel" command so that it does not output any information when loading a font, unless an error occurs.Also:
Update at Fri Jan 23 21:38:03 EST 2015 by timAlso:
Merge branch 'master' into work

posted: January 22, 2015 at 3:00am version: 8.1 revision: 31
Altered the startup file magic.tcl so that it checks if a startup script has already generated a window, and does not create a new one if one is already present.Also:
Update at Wed Jan 21 20:34:07 EST 2015 by timAlso:
Merge branch 'master' into work

posted: January 21, 2015 at 3:00am version: 8.1 revision: 30
Modified the handling of filenames during tech file loading to match changes made for database file loading.Also:
Update at Tue Jan 20 08:33:18 EST 2015 by timAlso:
Merge branch 'master' into workAlso:
Fixed one more instance where a dot character was used to check for an extension but was not ignoring everything before the final slash like it should.

posted: January 19, 2015 at 3:00am version: 8.1 revision: 29
Corrected error (more than one, but one is known to cause problems) with handling path names with a "." character in them, which is confused with the file extension. There may still exist instances in which filenames with more than one "." in them may cause problems if saved and loaded multiple times, but that has not been tested thoroughly.Also:
Update at Sun Jan 18 20:50:23 EST 2015 by timAlso:
Merge branch 'master' into work

posted: January 14, 2015 at 3:00am version: 8.1 revision: 28
Corrected crosshair drawing, both scale and color; the color correction also corrects a general offset in the solid color numbering; may affect some other drawing features that specifically call out the solid colors (I don't think there are many of these).Also:
Update at Tue Jan 13 14:16:42 EST 2015 by timAlso:
Merge branch 'master' into workAlso:
Changed behavior of calls to PaLockOpen so that the first argument never has a file extension (e.g., ".mag"). Hopefully this resolves ambiguity from calling PaLockOpen variously with the cell name or the file name, which might be causing magic to write out filenames "a.mag.mag" under some circumstance.

posted: January 7, 2015 at 3:00am version: 8.1 revision: 27
Implemented new function with the "property" command, where a cell property called "parameters" can be used to specify a string of parameters to pass to instances of that subcell in a hierarchical SPICE definition.Also:
Update at Tue Jan 6 16:08:15 EST 2015 by timAlso:
Merge branch 'master' into workAlso:
Included the subcell parameter passing from the "property parameter" mechanism in the .subckt output for the cell definition (in addition to the subcircuit calls, where it was already implemented).

posted: January 3, 2015 at 3:00am version: 8.1 revision: 26
Added a backwards-compatibility mode for substrate handling, if there is no "substrate" line in the tech file. This will prevent magic from making assumptions about the substrate and producing extracted output that is different from previous versions when using the same techfile. The new substrate handling will only take place with techfiles that specify how the substrate should be extracted.Also:
Update at Fri Jan 2 20:34:19 EST 2015 by timAlso:
Merge branch 'master' into work

posted: December 16, 2014 at 3:00am version: 8.1 revision: 25
Modified extraction so that subcircuits will be written even if the top level has ports.Also:
Update at Mon Dec 15 09:45:33 EST 2014 by timAlso:
Merge branch 'master' into workAlso:
Initialized ll_attr on substrate node. The lack of initialization may have been causing the substrate node to be output as a port, causing downstream errors with standard cell extraction.

posted: November 11, 2014 at 3:00am version: 8.1 revision: 23
Added connections due to parasitic caps to "esMakePorts", so that those connections will correctly show up as ports on the subcircuit definition and subcircuit instances.Also:
Update at Mon Nov 10 09:34:53 EST 2014 by timAlso:
Merge branch 'master' into workAlso:
Somewhat more confident of the hierarchical parasitic result. Parasitics are now correctly enumerated, with adjustments potentially resulting in a negative capacitance at upper levels of the hierarchy. For a simple example using standard cells, the hierarchical and flattened results agree on parasitics.

posted: November 10, 2014 at 3:00am version: 8.1 revision: 22
Correction preventing crashes when doing "ext2spice" with hierarchical output. Error from update a few days ago. Code is still very unstable.Also:
Update at Sun Nov 9 19:48:24 EST 2014 by timAlso:
Merge branch 'master' into workAlso:
Corrected another problem leaving nodes named "error" in the parasitic caps. This only leaves the problem of ensuring that nodes listed as parasitic caps coupling to the hierarchy above get added to the I/O port list of the subcell.

posted: November 9, 2014 at 3:00am version: 8.1 revision: 21
Corrected several errors in hierarchical spice extraction related mostly to parasitic caps. The "node visit" routine was looking through nodes of the definition only, not the flattened version, and so would miss nodes where subcircuits having no devices were flattened into the definition.Also:
Update at Sat Nov 8 21:18:28 EST 2014 by timAlso:
Merge branch 'master' into work

posted: November 4, 2014 at 3:00am version: 8.1 revision: 20
First pass at correcting the whole substrate debacle in magic. This is largely untested code, and should be considered highly experimental. Only circuit extraction is affected by this method. Method currently has no backwards-compatible hooks, which will have to be put back in. Caveat emptor.Also:
Update at Mon Nov 3 16:20:46 EST 2014 by timAlso:
Merge branch 'master' into workAlso:
Corrected an issue causing a crash with "ext2spice" when using the "hierarchy on" option. However, the underlying issue is records in def_nodes that have no pointers to a node. This issue has not been resolved, leading to records in the output. But it no longer crashes. . .Also:
Additional correction to replace EFNHIsGND with a proper check for the substrate identifier flag.

posted: November 2, 2014 at 3:00am version: 8.1 revision: 19
Attempt to fix hierarchical spice generation with respect to parasitics. A routine to output parasitics to substrate was missing. The routine to output parasitic coupling capacitances only considered local capacitances defined in the .ext file, and not capacitances created by flattening subcells. This is almost certainly not the final word in the matter, especially as at the moment, parasitics to substrate are using the pre-defined SPICE node 0 and not the defined ground node. As handling substrate is a major task to grapple with in version 8.1, this will be left as-is until everything involving the substrate is properly cleaned up.Also:
Update at Sat Nov 1 12:33:48 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: November 1, 2014 at 3:00am version: 8.1 revision: 18
Corrected an error in hierarchical spice that will not generate output for the top level if the top level contains no extracted devices, even if it contains parasitic devices.Also:
Update at Fri Oct 31 12:58:05 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 31, 2014 at 3:00am version: 8.1 revision: 17
Reverted a change from September 9 that is obviously not the right solution. Causes extraction to produce unconnected node names. Need to revisit the original problem. . .Also:
Update at Thu Oct 30 21:08:39 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 30, 2014 at 3:00am version: 8.1 revision: 16
Corrected an error that would cause a crash if attempting to save a file in an unwriteable directory.Also:
Update at Wed Oct 29 11:04:58 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 26, 2014 at 3:00am version: 8.1 revision: 15
Fix lots of typos in comments.Also:
Replace index() and rindex() with strchr() and strrchr().Also:
sys_errlist is not actually used, so remove all reference to it.Also:
Always use , not the nonportable extern definition.Also:
Rely on the C89 sprintf return type.Also:
Remove last remnants of FANCY_ABORT.Also:
Assume the C89 string functions exist via headers instead of extern.Also:
Remove vax definition of MAXINT.Also:
Delete unused manpages.Also:
In manpages, new sentences must start on a new line.Also:
Use the .BI macro in magic.1 to avoid having to escape across lines.Also:
Remove #ifdef __STDC__.Also:
Use the portable FLT_MAX instead of defining MAXFLOAT.Also:
Use MAX_INT instead of defining our own INTMAX.Also:
Remove unused ALPHA32BIT ifdef.Also:
Replace use of SIZEOF_UNSIGNED_LONG with stdint.h.Also:
Remove unused (commented out) status variable.Also:
Use unsigned char instead of nonportable u_char.Also:
Don't poke around in system headers.Also:
These includes are not actually used.Also:
Replace complicated dlong definition with int64_t.Also:
Remove unused dlong.h.Also:
Applied numerous patches from Anthony Bentley. But. . . I need to figure out why this git send command only seems to be updating a few configuration files from the build. . .Also:
Update at Sat Oct 25 09:57:06 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 23, 2014 at 3:00am version: 8.1 revision: 14
Changed "view" command so that "view llx lly urx ury" also works on a set of four values passed in a single argument, as happens when a Tcl list is generated, e.g., by "view [box values]". Used this command variant to implement automatic view sizing to the box dimensions when opening a new window with the "o" key macro.Also:
Update at Wed Oct 22 09:15:25 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 22, 2014 at 3:00am version: 8.1 revision: 13
Corrected an error where the search for "sticky labels" exceeds the boundary of the current search area, thus tending to add nodes outside, say, the extraction area and leading to node searches that end on space tiles because there isn't anything there.Also:
Update at Tue Oct 21 20:22:08 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 21, 2014 at 3:00am version: 8.1 revision: 12
Made several changes, mostly to accomodate the former use of the "o" command (formerly "openwindow", before the Tcl/Tk version) to generate small layout windows near the cursor. This required adding procedures to grab the root screen coordinates from an X11 event, and query them using the "cursor" command in Magic. Additional changes were made to move the window geometry sizing to just below the "toplevel" command. It remains to be seen whether some systems will object to putting the resize statements before the "tkwait visibility". Additional changes push error messages from WindSendCommand higher up the chain, with a "quiet" flag being passed to TxTclCommand and WindSendCommand, so that the Tcl/Tk scripting can control errors using "catch", without having WindSendCommand print out error or warning messages to the terminal.Also:
Update at Mon Oct 20 13:56:14 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
On further reflection, other systems probably DO object to resizing before mapping, so "tkwait visibility" has been moved back to being above the resizing commands.

posted: October 15, 2014 at 3:00am version: 8.1 revision: 11
Modified the glyph rendering, as promised, so that parts specified in the glyph data file as "background" (".") are not drawn, as opposed to being drawn in the background color, but opaque. The "lock" icon on the toolbar now does not obscure the layer color on the button.Also:
Update at Tue Oct 14 08:24:28 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 14, 2014 at 3:00am version: 8.1 revision: 10
Removed "magic" from .gitignore. There is no executable called just "magic" in the source (it's magic.sh), and "magic" is the name of a directory, so this line just prevents git from making any changes in the magic/ directory (like adding lock.xbm).Also:
Update at Mon Oct 13 20:07:45 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
Extended the "image layer" format to include an extra argument "-icon ". This option will draw the glyph (from file color.glyphs) on top of the image. So far, transparency is not supported (that will be the next fix).

posted: October 13, 2014 at 3:00am version: 8.1 revision: 9
Corrected off-screen rendering, should finally fix errors with the side toolbar.Also:
Update at Sun Oct 12 16:33:18 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
Added a configuration option for the obscure condition in which the OpenGL window is drawn upside-down. Not sure what is at fault, exactly, but this gets rid of the problem.Also:
A number of additions to the toolbar, including display of "locked" vs. "unlocked" layers in different styles (probably to be done a bit better, shortly). The toolbar now is visible by default. Keys "l" and "u" can lock and unlock layers from the toolbar.

posted: October 12, 2014 at 3:00am version: 8.1 revision: 8
Modified the selection code so that "select cell" and other non-layer selections will reset the level for the code that cycles through chunk/region/net selection. This prevents "select cell" followed by "select more" from hosing the select use. Hopefully no side effects to this correction.Also:
Update at Sat Oct 11 15:24:31 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 11, 2014 at 3:00am version: 8.1 revision: 7
Changed TxTclDispatch to return the value returned by WindSend, so that errors generated in magic commands can be passed back to the interpreter. This can be used to prevent, for example, popup windows due to attempts to execute magic layout commands in callbacks from non-layout windows like the title bar, when multiple windows are present.Also:
Update at Fri Oct 10 09:32:36 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 2, 2014 at 3:00am version: 8.1 revision: 4
Corrected (I think) an error with non-Manhattan fracturing and painting. The fracturing made an optimization for types that don't interact which was not mirrored by the paint operation, resulting in the two functions disagreeing about what area they were supposed to be painting.Also:
Update at Wed Oct 1 17:46:46 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
Added printing of box coordinates when the box is manipulated with mouse button commands on the "box tool". Also modified the wrapper so that it not only reads the "tools.tcl" script, but executes the box tool. Otherwise the box tool appears with the original bindings, not those in the "tools.tcl", which only go into effect after switching tools. Also modified the "boxview" script so that it prints microns dimensions, like the other scripts have been made to do.Also:
Modified the startup script to move the printout of the technology name and version to after the startup script has been run. If the startup script or rcfile choose to load a different technology, the end user will not get confusing information about the technology that was briefly in existence and then deleted.

posted: October 1, 2014 at 3:00am version: 8.1 revision: 3
Corrected (1) Problem with duplicate read of .magicrc if the current working directory is the same as the home directory; (2) Incorrect parsing of command line arguments, and (3) Incorrect display of microns position in window.Also:
Update at Tue Sep 30 08:58:56 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
Added tentative code to prevent premature exit of the terminal input prompt read in case of a system interrupt. Added additional code that suppresses interrupts on batch-mode processing. This code is experimental, as it is unknown whether there are unintended consequences.

posted: September 28, 2014 at 3:00am version: 8.1 revision: 2
Corrected a minor error in which a DRC "no overlap" error can cause spurious random errors to be reported by "drc why".Also:
Update at Sat Sep 27 11:40:04 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
Removed files from build that should not have been pushed to the git database.Also:
Corrected an error in the DRC-CIF code that would occasionally cause areas to be skipped when they need checking.

posted: April 7, 2017 at 3:00am version: 8.0 revision: 217
Same correction as made to magic-8.1, to prevent an error that makes the interaction area for extraction arbitrarily large and can result in very long extraction runtimes.Also:
Update at Thu Apr 6 11:33:01 EDT 2017 by timAlso:
Merge branch 'master' into work

posted: February 11, 2017 at 3:00am version: 8.0 revision: 216
Corrected (hopefully) an error with extracting annular devices, in which a fix for source-drain shorted devices ended up breaking the code for annular devices.Also:
Update at Fri Feb 10 22:14:39 EST 2017 by timAlso:
Merge branch 'master' into work

posted: November 29, 2016 at 3:00am version: 8.0 revision: 215
Implemented a feature found on a modified version of ext2spice in which the terminal label "S$" and/or "D$" can be used to force the order of drain and source in the netlist output.Also:
Update at Mon Nov 28 11:20:45 EST 2016 by timAlso:
Merge branch 'master' into work

posted: October 10, 2016 at 3:00am version: 8.0 revision: 213
Added an area clip that avoids large DRC penalties when the DRC step size is too large, and avoids extra overhead in general by not looking outside the immediate area of the cell. Includes fix just made in magic 8.1, which had the area limit but which was done incorrectly.Also:
Update at Sun Oct 9 11:27:39 EDT 2016 by timAlso:
Merge branch 'master' into work

posted: September 6, 2016 at 3:00am version: 8.0 revision: 212
Added handling to .mag file reads to specifically ignore control-M characters at the ends of lines; otherwise, these characters get embedded in the label text and cause newlines in SPICE output from ext2spice, creating invalid SPICE files. Same changes as made to magic version 8.1.Also:
Update at Mon Sep 5 09:20:39 EDT 2016 by timAlso:
Merge branch 'master' into work

posted: July 22, 2016 at 3:00am version: 8.0 revision: 211
Updated configure script to extract the paths for the Tcl and Tk lib and include files, so that subsequent checks for those files are not disjoint from the contents of tclConfig.sh and tkConfig.sh.Also:
Update at Thu Jul 21 11:22:11 EDT 2016 by timAlso:
Merge branch 'master' into work

posted: September 12, 2015 at 3:00am version: 8.0 revision: 210
Corrected commands "drc *halo" and "drc *stepsize", which were missing an argument to the call to cmdScaleCoord(), but were also incorrectly converting the result (which is in internal units) into DRC units (according to the drc "scalefactor" value).Also:
Update at Fri Sep 11 10:10:06 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: August 26, 2015 at 3:00am version: 8.0 revision: 208
Corrected a bad reference to an uninitialized variable caused by a missing subroutine call. The bug causes some ports to be drawn incorrectly, often with lines running off the screen to infinity.Also:
Update at Tue Aug 25 21:21:36 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: May 7, 2015 at 3:00am version: 8.0 revision: 207
Corrected an error that incorrectly scales the sidewall overlap cap as an area capacitance, not a perimeter capacitance.Also:
Update at Wed May 6 11:07:03 EDT 2015 by timAlso:
Merge branch 'master' into workAlso:
After noticing that the documentation defines sidewall capacitance referenced to 2 lambda, I realized that when using "units microns", if the capacitance is then supposed to be referenced to 1 micron, then the value needs to be divided by two.

posted: May 3, 2015 at 3:00am version: 8.0 revision: 206
Corrected an error with sidewall capacitance, which because it is referred to a specific distance, does not scale (provided that the linear model is valid, which is somewhat doubtful).Also:
Update at Sat May 2 13:24:44 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: April 29, 2015 at 3:00am version: 8.0 revision: 205
Corrected an error that prevented the "defaultperimeter" statement in the extract section of the techfile from registering the perimeter capacitance to substrate (all other sideoverlap values were not affected).Also:
Update at Tue Apr 28 11:06:09 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: March 21, 2015 at 3:00am version: 8.0 revision: 204
Reverted one change from the incorrect attempt to fix the cell plane corruption problem, that was not removed after the proper fix was implemented.Also:
Update at Fri Mar 20 12:50:53 EDT 2015 by timAlso:
Merge branch 'master' into workAlso:
Corrected error in "drc why", where error message printing routine was incorrectly translating the tile area back to top-level coordinates, when the search area had already been converted to local coordinates.

posted: March 20, 2015 at 3:00am version: 8.0 revision: 203
Found the underlying reason for duplicate cell use errors, which was the use of cu_extended as the bounding box rectangle when calling DBPlaceCell(). This corrupts the cell plane.Also:
Update at Thu Mar 19 09:59:19 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: March 18, 2015 at 3:00am version: 8.0 revision: 202
Corrected an error in the CIF "squares" generator where areas of connected tiles that were overlapping but not themselves connected would be processed twice.Also:
Update at Tue Mar 17 12:39:13 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: March 15, 2015 at 3:00am version: 8.0 revision: 201
Same correction as made to magic-8.1, to correct an error that can cause occasional cell uses to be scaled several times when scaling the internal grid to a finer resolution. Replaced DBCellEnum() with a simple hash enumeration of cd_idHash.Also:
Update at Sat Mar 14 21:54:26 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: March 13, 2015 at 3:00am version: 8.0 revision: 200
Same correction as made to version 8.1 to fix crashes when ext2sim encounters a 1-terminal device.Also:
Update at Thu Mar 12 16:15:05 EDT 2015 by timAlso:
Merge branch 'master' into work

posted: November 1, 2014 at 3:00am version: 8.0 revision: 199
Corrected an error in hierarchical spice that will not generate output for the top level if the top level contains no extracted devices, even if it contains parasitic devices.Also:
Update at Fri Oct 31 12:58:15 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 31, 2014 at 3:00am version: 8.0 revision: 198
Reverted a change from September 9 that is obviously not the right solution. Causes extraction to produce unconnected node names. Need to revisit the original problem. . .Also:
Update at Thu Oct 30 21:08:52 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 30, 2014 at 3:00am version: 8.0 revision: 197
Corrected an error that would cause a crash if attempting to save a file in an unwriteable directory. Thanks to Doug McKnight for the bug report.Also:
Update at Wed Oct 29 11:05:32 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 22, 2014 at 3:00am version: 8.0 revision: 196
Corrected an error in which the search for "sticky labels" works outside the bounds of the area used for generating nodes, and adds those labels to the node list. Later routines search at the location of the label and find nothing, return a pointer to a space tile, and crash the program.Also:
Update at Tue Oct 21 20:31:12 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 14, 2014 at 3:00am version: 8.0 revision: 195
Removed "magic" from .gitignore. There is no executable called just "magic" in the source (it's magic.sh), and "magic" is the name of a directory, so this line just prevents git from making any changes in the magic/ directory.Also:
Update at Mon Oct 13 20:07:55 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: October 3, 2014 at 3:00am version: 8.0 revision: 193
Made the CIF-DRC "cifspacing" rule symmetric by doubling the number of rules to incorporate both the (layer->space) and (space->layer) edges. This increases the overhead for DRC rules, but (1) the vast majority of the overhead for CIF-DRC rules is the generation of the CIF layers, not the DRC rule evaluation, and (2) in practice everyone uses "edge4way" rules, not "edge" rules, because even though technically, all possible errors are caught by "edge" rules for most rule conditions like simple spacing, the non-reflexive error box placement looks so weird that it actually interferes with understanding what the error is. People are scratching their heads wondering why this error paint is over here and that error paint is over there. . . it is all around better to just keep all rules reflexive (symmetric). At the cost of a bit more computation, the errors appear where one would expect them to be.Also:
Update at Thu Oct 2 20:14:23 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
FIXME: Last git commit comments need to be swapped between 8.0 and 8.1!

posted: October 1, 2014 at 3:00am version: 8.0 revision: 192
Corrected parsing of arguments. Same change made to version 8.1.Also:
Update at Tue Sep 30 09:08:47 EDT 2014 by timAlso:
Merge branch 'master' into work

posted: September 28, 2014 at 3:00am version: 8.0 revision: 191
Rolled back the change of position printed in the titlebar from lambda to microns; this change was intended for the development version but was made before version 8.0 was declared "stable". However, the modification was not finished and so is being pulled out of the stable code base.Also:
Ignore this update, will be reverted.Also:
Update at Sat Sep 27 10:04:46 EDT 2014 by timAlso:
Merge branch 'master' into workAlso:
Removed test file as promised.Also:
Corrected a minor error in which a DRC "no overlap" error can cause spurious random errors to be reported by "drc why".Also:
Corrected an error with the DRC-CIF checks that failed to set the plane of comparison and therefore would occasionally cause some checks to be skipped.

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.

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).

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.

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.

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.

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.

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.

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.

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.

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

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.

November 9, 2008 at 2:40am
Corrections to the plot PNM routine to match the changes made to
magic 7.5.

November 22, 2008 at 2:40am
Corrections to selection and moving/stretching of contacts to
match changes made to magic version 7.5.

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.

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.

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.

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).

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. . .

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.

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.

December 17, 2008 at 2:40am
Corrected an error in the bounding boxes that causes subcells to
disappear when reading in a .mag file.

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

December 19, 2008 at 2:40am
Corrected scaling and conversion of sideOverlap and sideCouple
capacitances.

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.

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.

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).

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.

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.

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.

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.

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).

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.

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.

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).

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.

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.

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.

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

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.

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.

June 2, 2009 at 2:40am
2009-06-01 10:18 tim
Moved the "slots" function to the new contact cut generation
method.

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).

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

February 10, 2010 at 2:40am
Corrected a typo that mysteriously slipped into the configure
script, noticed by Svenn Bjerkem.

March 9, 2010 at 2:40am
Applied patches from Dan McMahill and Jason Shonberg

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.

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.

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.

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.

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.

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.

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).

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.

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.

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.

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.

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.

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.

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.

August 11, 2010 at 2:40am
2010-08-10 11:06 tim
Left the distribution in an uncompilable state yesterday. This
has been fixed.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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. . .

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.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Completed changes to make ext2spice and ext2sim internal commands and routines if the "--disable-modular" option is selected.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Corrected an error with the multi-plane "surround" DRC rule, which was thought to be correct, but clearly wasn't. . .

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Cleanup of files that were not supposed to have been in the git repository.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into workAlso:
Corrected a few errors in the short locator algorithm; seems to work reliably now.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

September 22, 2012 at 3:00am
Corrected symbol conflict between ext2spice and ext2simAlso:
Update at Fri Sep 21 11:15:06 EDT 2012 by timAlso:
Merge branch 'master' into workAlso:
Corrected a bunch of wrong usages of AC_ARG_ENABLE in the configure script

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

October 7, 2012 at 3:00am
Correction of launch script for CygwinAlso:
Update at Sat Oct 6 13:25:29 EDT 2012 by timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into workAlso:
Added code to handle annular (ring) resistors.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

April 27, 2013 at 3:00am
Corrections from the Gentoo developersAlso:
Update at Fri Apr 26 15:38:36 EDT 2013 by timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Some corrections to code for handling sticky labels during extraction; succeeds in extracting a fairly comprehensive test case.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Quick correction to the post-order reading patch.Also:
Corrected a (rare) crash condition in ext2hier

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Modification to value where Arm compiler is confused about what constitutes a signed value.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Syntactical correction to LEF layer definitions for "lef write".

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

May 27, 2014 at 3:00am
Update at Mon May 26 09:55:08 EDT 2014 by tim

May 28, 2014 at 3:00am
Update at Tue May 27 19:10:18 EDT 2014 by tim

May 30, 2014 at 3:00am
Update at Thu May 29 10:52:48 EDT 2014 by tim

May 31, 2014 at 3:00am
Update at Fri May 30 14:41:22 EDT 2014 by tim

June 1, 2014 at 3:00am
Update at Sat May 31 14:50:55 EDT 2014 by tim

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Changed the "drccheck" option to be the same for both the "cif" and "gds" commands, to avoid confusion.

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
Removed deprecated code.Also:
Corrected an error in which I forgot the local unique usage of StrDup() and caused a double-free incident.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into workAlso:
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.

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 timAlso:
Merge branch 'master' into work

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).

Feburary 16, 2006
Added new features to the technology file "drc"
section:

The ability to create multiple DRC styles,
with the same format as "cifoutput", "cifinput", and
"extract" styles.

The ability to declare style variants for DRC
styles, like "cifoutput", "cifinput", and "extract".

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).

Feburary 18, 2006
Two minor bug fixes for setting grXscrn in grTk1.c, and
forcing tkcon.tcl to be world readable/executable on install.

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/.

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_areainstall"

March 14, 2006
Corrections to the maxwidth and widespacing rules to match
changes to version 7.4.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.

April 3, 2006
Corrections by Philippe Pouliquen for DRC handling of
corner extensions.

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.

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.

April 10, 2006
Corrected round-off errors in the LEF read routines.
Thanks to Frank Lien for identifying the error.

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.

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.

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.

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.

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.

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").

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.

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.

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).

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".

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.

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.

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.

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.

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.

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).

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.

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.

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!

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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. . .

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.

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).

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).

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

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.

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).

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.

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.

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).

November 15, 2006 at 2:40am
2006-11-14 02:40 tim

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.

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!

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.

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.

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.)

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.

December 13, 2006 at 2:40am
Added path-extension handling to the GDS read routine.

December 21, 2006 at 2:40am
Corrected a segfault when two labels with the same name are
attached to the same piece of paint.

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.

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.

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.

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.

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.

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.

March 5, 2007 at 2:40am
Modifications to ExtTech.c to correct the "defaultsideoverlap"
method. Verified by checking against the Brookhaven test cases.

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).

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.

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.

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.

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

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.

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.

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.

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.

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).

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.

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

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.

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

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).

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.

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.

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.

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.

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.

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.

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.

December 26, 2007 at 2:40am
Removed a debug print statement from the CIF generation code.

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

December 28, 2007 at 2:40am
Corrected an error in the DRC spacing rule, in which the planes
are swapped in the reverse case.

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).

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.

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.

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

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

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)

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

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.

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.

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.

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.

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.

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.

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.

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.

February 7, 2008 at 2:40am
Expanded upon scripted routines "pushstack" and "popstack" (">"
and "Also:
Cleaned up some problems with selection and enumeration of labels
when cells are read-only.

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.

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.

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.

February 12, 2008 at 2:40am
Corrected the DRCcif functions to match the changes to the
arguments of drcAssign().

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.

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.

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.

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.

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.

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. . .

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.

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). . .

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.

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.

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

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.

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.

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.

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.

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.

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.

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.

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.

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).

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.

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.

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.

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).

June 28, 2008 at 9:50am
2008-06-28 09:50 tim

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

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 "<>").

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).

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.

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.

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.

November 15, 2008 at 2:40am
Corrected plotVers.c where one instance of plotVersRect() was
missing the stipple argument.

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.

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.

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.

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.

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.

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).

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.

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.

December 10, 2008 at 2:40am
2008-12-10 02:40 tim

December 12, 2008 at 2:40am
Correction to extraction method to avoid hanging or segfaulting
on devices with no terminals drawn.

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.

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.

December 19, 2008 at 2:40am
Corrected scaling and conversion of sideOverlap and sideCouple
capacitances.

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.

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.

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.

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.

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"

January 22, 2009 at 2:40am
Corrected one of those wonderful "wrote == instead of =" errors.
Keeps the CIF contact generation from running forever.

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.

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.

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.

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").

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).

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

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.

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).

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.

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.

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.

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.

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.

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.

March 9, 2010 at 2:40am
Applied patches from Dan McMahill and Jason Shonberg

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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)

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).

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.

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.

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.

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.

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.

March 7, 2012 at 3:00am
Update at Tue Mar 6 12:30:35 PST 2012 by tim

March 29, 2012 at 3:00am
Update at Tue Mar 6 12:30:35 PST 2012 by timAlso:
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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

May 1, 2012 at 3:00am
Corrected at typo in the ext2spice.c sourceAlso:
Update at Mon Apr 30 08:17:36 EDT 2012 by timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

September 22, 2012 at 3:00am
Corrected symbol conflict between ext2spice and ext2simAlso:
Update at Fri Sep 21 11:14:46 EDT 2012 by timAlso:
Merge branch 'master' into workAlso:
Corrected a bunch of wrong usages of AC_ARG_ENABLE in the configure script

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

October 2, 2012 at 3:00am
Cleanup of return-type compile-time warningsAlso:
Update at Mon Oct 1 10:34:53 EDT 2012 by timAlso:
Merge branch 'master' into workAlso:
Correction for Cywgin since Cygwin no longer sets TERM to "cygwin"

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 timAlso:
Merge branch 'master' into work

October 7, 2012 at 3:00am
Correction of launch script for Cygwin.Also:
Update at Sat Oct 6 13:25:16 EDT 2012 by timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

April 27, 2013 at 3:00am
Corrections from the Gentoo developersAlso:
Update at Fri Apr 26 15:38:24 EDT 2013 by timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

May 27, 2014 at 3:00am
Update at Mon May 26 09:55:06 EDT 2014 by tim

May 28, 2014 at 3:00am
Update at Tue May 27 19:10:17 EDT 2014 by tim

May 30, 2014 at 3:00am
Update at Thu May 29 10:52:48 EDT 2014 by tim

May 31, 2014 at 3:00am
Update at Fri May 30 14:41:22 EDT 2014 by tim

June 1, 2014 at 3:00am
Update at Sat May 31 14:50:54 EDT 2014 by tim

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 timAlso:
Merge branch 'master' into work

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 timAlso:
Merge branch 'master' into work

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).

Feburary 18, 2006
Two minor bug fixes for setting grXscrn in grTk1.c, and
forcing tkcon.tcl to be world readable/executable on install.

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".

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/.

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_areainstall"

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".

March 15, 2006
Minor correction to the CIF input code to prevent mishandling
cells that are called prior to being defined.

April 3, 2006
Corrections by Philippe Pouliquen for DRC handling of
corner extensions.

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.

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.

April 10, 2006
Corrected round-off errors in the LEF read routines.
Thanks to Frank Lien for identifying the error.

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.

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.

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.

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.

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").

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.

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).

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

January 19, 2007 at 2:40am
Corrected a typo in ExtCouple.c where "DBPlaneToResidue" was
written "DBPlanetoResidue".

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.

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.

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.

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.

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.

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.

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.

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.

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.

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).

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

January 26, 2008 at 2:40am

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.

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).

September 12, 2003
Original version. The "only" change from version 7.2
is the method of handling contacts.

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.

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.

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.

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.

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).

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.

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.

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.

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.

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".

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.

April 9, 2004
Changes to match magic version 7.2, revision 66,
namely Cygwin compatibility in the make process.

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.

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.

(never posted)
Corrections to capacitance calculations for areas
shielded from the substrate by intervening types.

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).

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.

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.

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).

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.

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.

June 15, 2004
Added a preliminary version of the DEF file writer.
Documentation to be provided, eventually.

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).

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".

July 2, 2004
A couple of critical fixes. The "stretch" function
problems have been eliminated (thanks to Nishit at
SynappsCorp).

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.

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.

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.

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 " 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.

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.

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.

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.

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.

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).

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.

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.

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.

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.

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.

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).

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.

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.

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.

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.

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.

September 6, 2004
A large number of changes in this revision.
Corrected a number of annoyances/errors, including:

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.

Characters left-bracket, backslash, and double-quote
can once again be typed to the command-line (console)
from inside the layout window.

"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.

"select net" now properly detects a connection
through a stack of four or more contacts.

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.

Non-manhattan "splitpaint" and "spliterase"
commands translate the orientation correctly when
the target edit cell is rotated or flipped.

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).

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.

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.

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).

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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).

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.

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).

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.

March 14, 2005
Final modifications to the routine implemented
above; removes cryptic and unsettling messages
about "out of memory for maxwidth rule" or
somesuch.

March 16, 2005
Added two new commands:
(1) polygontype x1 y1 x2 y2...
Generates a polygon from the indicated point pairs.
(2) *bypasscommand...
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.

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).

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.

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.

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).

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.

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.

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.

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.

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".

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.

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).

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. . .).

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.

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.

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.

June 1, 2005
Corrected an error that prevented the "alias" techfile
keyword from working correctly.

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.

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.

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.

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.

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.

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.

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.

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).

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).

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.

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.

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.

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 forcecell1 cell2 ...".
This forces only the named cells to be written to disk,
and skips all other cells.

September 20, 2005
Fixed an error that prevented execution of the command
option "select top cell".

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.

September 28, 2005
Added a useful new command "contacttype"
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.

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.

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.

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.

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).

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.

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.

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.

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".

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.

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.

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.

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.

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.

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.

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.

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).

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.

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.

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.

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".

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.

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.

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.

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.

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.

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).

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.

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 arealayer" and "S" for
"select less arealayer".
Also:
Changed the "make" process so "make clean" descends into
all modules, not just the ones selected by "make config".

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.

November 19, 2002
Quick patch to revision 10, which crashes on any call
to "select" with more than two arguments.

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.

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.

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.

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.

December 12, 2002
Correction to scmos/Makefile which deletes "minimum.tech27"
in rev. 15 and thus halts the make install process.

December 16, 2002
Minor corrections for OS X support when not compiling
with Tcl/Tk support (again, thanks to Michael Doster).

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).

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.

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.

January 7, 2003
Due to an error, revision 21 was exactly the same as
revision 20.

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.

January 20, 2003
Added a window console option, although the implementation
is only partial.

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.

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).

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.

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.

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).

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.

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).

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.

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).

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.

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

widespacinglayers1 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 deletecellnamecellname renamecellnamenewname

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.

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.

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.

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.

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.

June 11, 2003
Fix to annular and nonstandard transistor extraction.
Fix to Solaris autoconf make script.

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.

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.

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.

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.

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).

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.

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.

September 5, 2003
Fixes/enhancements to the file locking code, courtesy of
Mike Godfrey.

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.

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.

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).

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.

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.

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.

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.

November 16, 2003
Major changes to LEF and DEF input method for better handling
of large (greater than 1GB) files.

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".

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.

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.

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.

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.

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 "searchlayersproc" 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".

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.

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.

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".

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.

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).

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.