I. Code which has become obsolete:

  1. Change all of the in-line macros back to subroutines.  Let the
     compiler optimizer take care of the in-lining!  They probably
     do a better job of it, anyway.  It is probably a good idea to
     benchmark the changes before accepting them into the distribution,
     though.

  2. Remove Gremlin and Versatec plot functions.  This action must
     not break the read-in of existing technology files containing
     these sections!

II. Features to add:

  1. The new transistor W,L extraction method needs to be generalized.
     Also, the extractor should use the original, simple method when
     a device contains only one tile, and the new method for any
     device with more than one tile.  This is easy to determine, as
     the extractor already does a boundary search on each device.

  2. GDS output can be significantly compacted by replacing the "squares"
     generation function with one which first creates a cell from the
     contact cut and then arrays the cell to fill up the contact area.
     To go along with the output method, it is necessary to have an
     input method which will flatten such contacts back into magic's
     standard contact types.

  3. GDS cells may be instanced before they are defined.  If so, the
     "gds flatten" option cannot be used.  It would be nice to have
     and option that would force a GDS file to be read in the "correct"
     order.

  4. Style files should be able to use X11-named colors.  Styles should
     render in the order specified in the technology file.  Any style
     which would be obscured by a solid style for the same layer should
     be duplicated into a higher-numbered style entry and renumbered.
     This change allows styles which have been ordered in bizarre ways
     in the 7-bit graphics files (to get around the limitations of the
     7 bit planes) to be reordered naturally in the 24-bit and OpenGL
     files without affecting the way types in a tech file are rendered.

III. Experimental stuff:

  1. Find a way to implement general-purpose "composite" types, which
     are not necessarily contacts.  Specifically, it would be nice to
     split active, poly, and poly2 into separate planes, and let
     transistor and capacitor types exist on two planes, like contacts
     do.

  2. (BIG JOB) Reimplement the corner stitching tile pointers as
     indices into a list of tiles.  Use the smallest data type
     able to fit the total number of tiles in the cell.  This would
     realize a HUGE reduction in memory overhead for the layout
     database, especially on 64-bit architectures.

  3. (BIG JOB) Change the tile merging method ("maximum horizontal
     stripes") to the one used by extresist in ResFract.c, which
     gives a more fractal-like result.  In particular, watch the
     interaction with the routines in database/DBbound.c.

  4. Cast all of the button functions in the various modes (layout,
     wire, net. . .) into commands, and then treat buttons just
     like keys.  This would allow a lot more leeway in personalizing
     the interface.

IV. Tcl version to-do list:

  1. Incorporate tclspice as a simulator.  Check out the possibility
     of using Tcl to handle both digital and analog simulators at the
     same time and enforce proper synchronization among them all, for
     a modular mixed-mode simulator.

  2. Incorporate LVS into the Tcl scheme of things (this is being done
     with netgen; still needs to have some direct feedback to magic)

  3. Work on the "techbuilder.tcl" technology file creation wizard
     program.  This program is intended to allow a technology file to
     be built interactively, mostly by reading values off of process
     specification and design rule manuals, without requiring the
     detailed and arcane knowledge that is required to properly set
     up the "cifinput", "cifoutput", and (especially!) the "drc"
     sections of the tech file.  Currently, this is a work-in-progress
     and has no direct path to execution.  The program requires Tcl
     package "BLT" for the tab windows.  The program can be test-driven
     by doing:

	magic -nowindow [-d OGL] -T minimum

     followed by:

	source $CAD_HOME/lib/magic/tcl/techbuilder.tcl

V. Bugs to fix:

  1. The "widespacing" rule does not catch all cases of rule violation,
     depending on the tile configuration.  This problem is difficult
     to solve, but should be eliminated by the implmentation of item
     III.3. above.
