Xcircuit v3.x  Change Log (file CHANGES)
----------------------------------------------------------------------

Version 3.3 (September 2004 to present)
----------------------------------------------------------------------
329  v3.3 rev 33	9/8/05
     Corrected an error in netlisting that would incorrectly
     identify empty parameter strings as the "idx" parameter.
     Also, added a "-nowindow" switch to the UNIX command-line
     invocation to allow xcircuit to be used as a filter (batch
     process) without creating/displaying an X11 window.

328  v3.3 rev 32	9/6/05
     Changed the handling of netlist writing from symbols, in
     particular to avoid crashing on encountering unexpected
     info label contents.  Also:  Added a "-replace" option to
     file loads, that causes any object in a file to be
     overridden by one in a library "master copy".  Also:  Revised
     the "library make" command to allow an arbitrary number of
     empty libraries to be created.

327  v3.3 rev 31	8/10/05
     Fixed a problem with the graphic image handling in which graphic
     images are saved to the output file if they exist, regardless of
     whether or not they show up in the output page.  Also fixed the
     PPM reader to handle whitespace and newlines in the header
     correctly, according to the PPM spec.
     Also:  Added revision information to the "welcome"
     message in addition to the major.minor version.
     Also:  Some changes to the Makefile to properly handle
     passing of linker flags in the shared vs. static compiles.

326  v3.3 rev 30	7/28/05
     Fixed a problem with the startup TCL code that causes XCircuit
     to fail to start if a parse error is found in the user's
     ~/.Xdefaults file (even a completely unrelated parse error).
     Thanks to Roland Roberts for the bug report (and, much earlier,
     Romano Giannetti, although at the time I administered to the
     symptoms, not the disease.  Also:  Corrected a base-36 conversion
     error in the auto-numbering;  again, thanks to Carsten Thomas
     for the test cases.

325  v3.3 rev 29	7/22/05
     And yet more auto-numbering revisions.  Ensure clearing of
     device indices prior to both netlist output and auto-numbering.
     Also, fixed parseinfo() to correctly handle the mode="" case.

324  v3.3 rev 28	7/21/05
     More fixes to auto-numbering code ($#!@&).  Appears to work
     now for various cases, although I am not satisfied that it
     covers all situations.  One part of the fix forces xcircuit
     to ignore all fixed component assignments when generating
     flattened netlists.  While this ensures that all component
     numbers are unique, the output is not what might be expected,
     especially if there is no hierarchy in the schematic.
     Probably the parsing for fixed device numbers should *not*
     be done by parseinfo() but should be handled separately,
     under the assumption that this handles a limited number of
     backwardly-compatible cases and that normally it should
     expect to find "idx" and "class" parameters for each component.

323  v3.3 rev 27	7/20/05
     Revamped the auto-numbering code (again!) to better handle
     the "class" and "idx" parameter method, and make auto-numbering
     independent of the netlist format (i.e., SPICE vs. pcb).
     Device (component) name ("class") was moved from the object
     structure to the Calllist structure (after all, if the class
     is parameterized, then an instance may have a different class
     from the object's default class), and this is generated directly
     after generating the Calllist structure, since it is independent
     of the netlist output format.

322  v3.3 rev 26	7/19/05
     Further corrections to revision 20 code.  Device classes are
     now checked and updated for non-pcb devices (e.g., mosfets)
     when doing autonumbering.  Also:  parameter setting works
     for multiple selections;  e.g., several transistors can be
     selected at once and have width or length changed simultaneously
     for all of them.  Thanks to Carsten Thomas for the bug report
     and feature request.

322  v3.3 rev 25	7/18/05
     Finally logged into SourceForge and incorporated some of the
     more recent patches found there.  Includes a patch to
     configure.in by Min Sik Kim, and a patch to fontfile.c by
     Zunda.

321  v3.3 rev 24	7/17/05
     Updated keybindings with the new function "Graphic", which
     otherwise causes the help utility to crash.  Thanks to John
     Rigg for the bug report.

320  v3.3 rev 23	7/15/05
     Added file load and save methods for the "graphic" element,
     as well as undo/redo operations, a menu item for loading
     graphic elements, and all essential operations.

319  v3.3 rev 22	7/14/05
     Corrected broken file parsing from revision 21.  Image data
     is now read from "objectread" like everything else inside
     the Setup block.

318  v3.3 rev 21	7/13/05
     Fixed a bug introduced in revision 20.  Also, started adding
     the new basic element type "graphic", to handle inclusion and
     placement of arbitrary graphic images.  This will eventually
     replace the buggy and cumbersome "background postscript"
     rendering via ghostscript.

317  v3.3 rev 20	7/8/05
     Changed the component auto-numbering so that all component
     values are treated as base-36, to allow handling of non-numeric
     component numbers.  Also, the routine that determines the
     number to assign will return the smallest unused integer
     instead of (1 + (largest number found)) so that use of
     non-numeric values doesn't cause the auto-numbering algorithm
     to generate strangely large numbers.  Also:  The auto-numbering
     algorithm now looks at the parameter "idx" if it cannot find
     a "pcb"-style info-label.  This allows non-pcb parts like
     transistors in VLSI schematics to be auto-numbered.  This is
     really the preferred way to handle auto-numbering, and all
     library parts ought to be updated to contain the "idx" parameter.

316  v3.3 rev 19	6/28/05
     Resolved the issue with retaining the stack order of
     parts through a delete-undo cycle, so that all previous
     undo records point to the correct parts in the correct
     order.  This eliminates a lot of spurious error messages
     coming from the undo mechanism.
     Also: Resolved the issue with polygon/arc/spline/path
     rotations, where rotations cannot be undone exactly due
     to accumulating roundoff errors.  The solution is simply
     to treat the rotation as an edit for these element types.
     Also: Fixed an error with label deletion.  Labels that
     are edited out of existance were not handled properly,
     an egregious error that was somehow overlooked.
     Also:  Modified console.tcl script to withdraw the
     console window on a window manager "close" request,
     rather than exit the application.  This bolsters
     the end-user illusion that the console is a subsidiary
     window of the layout, rather than vice versa.

315  v3.3 rev 18	6/16/05
     Fixed an error reported by Benoit Bidoggia, in which
     an attempt to clean up redundant font changes triggers
     a crash becuase it has been passed the top-level instance
     instead of NULL (NULL is necessary because this function
     is called when reading an object definition, at which
     point there are no instances).

314  v3.3 rev 17	6/12/05
     Fixed another error that showed up in Uwe's schematic,
     which is that the "test_insideness" algorithm fails if
     the box is degenerate---which happens for labels that
     are parameters set to a null string.
    
313  v3.3 rev 16	6/10/05
     Corrected an error found by Uwe Zimmermann in which
     xcircuit calls free() on an unallocated space when 
     destroying an object containing an indirect parameter.
     Also:  Added some experimental code replacing the
     drawing functions with OpenGL.  This can be compiled
     in by passing "--with-opengl" to the "configure"
     script.  However, the code is currently unfinished.

312  v3.3 rev 15	5/31/05
     Added another feature to the change of revision 14:
     Info labels that have negative sequence numbers (e.g.,
     "spice-1:", "spice-2:", etc.) will be written after all
     subcircuit and component output, whereas the usual positive
     sequenced labels "spice1:", "spice2:", etc., will be written
     before subcircuit and component output.  Each sequenced line
     is followed by a return character in the output.  First and
     last line of the netlist output is hard-coded (e.g., circuit
     title and ".end" line in SPICE (see rev 5 comments)).

311  v3.3 rev 14	5/27/05
     Changed behavior of netlist generation to allow (finally!)
     info labels on a top-level schematic.  These labels are
     written verbatim into the output.  Probably needs checks
     to avoid attempting to process certain embedded escapes
     like pins. . .

310  v3.3 rev 13	4/08/05
     Fixed an error that missed recalulating the instance
     bounding box after a text rejustification.

309  v3.3 rev 12	3/29/05
     Changed behavior of the netlist connectivity highlight
     function in response to a suggestion by Long Yang that
     pin connection points should be hightlighted, the better
     to show places where a net does not attach to a pin.
     Also: Added a feature in response to a comment by John
     Barry that error messages disappear when netlists are
     saved if the netlist is not recreated.  This feature
     includes a checkbox in the Tcl wrapper that by default
     forces regeneration of the netlist on each netlist file
     write function.

     IN PROGRESS---Added "idx" to Pagedata; need to separate
     areastruct.page from the actual printed page number.
     This simplifies page re-ordering and allows schematic
     libraries to be "hidden" among the rest of the pages.
     xobjs.pages and areastruct.page will still refer to the
     index into pagelist.

308  v3.3 rev 11	3/12/05
     Fixed an error, pointed out by Long Yang and Svenn Bjerkem
     in which xcircuit crashes when descending into an object.
     This was due to out-of-bounds array addressing, and must
     have been in the code for some time, but only shows up
     on some compilers (Solaris?).
     
307  v3.3 rev 10	2/27/05
     Fixed an error in the flattened netlist output that has
     probably existed in most revisions of 3.3 to date,
     where net names are not correctly passed down from
     parent cell to child cell.  Thanks to Mark Chang for
     pointing out the error.
     Also:  Fixed a bug in the selection mechanism where
     the selection is not NULLed prior to return from the
     calling routine if no selections are found.
     
306  v3.3 rev 9		2/5/05
     More changes to the selection mechanism.  Selection
     mechanism sorts polygons (wires) according to
     distance of the nearest edit point.  Previous
     selection is always kept and compared against
     current selection.  "pick" is only advanced if the
     selections are the same.  Pointer position when
     selecting a polygon to edit is restored from the
     warped position after a button-3 cancel function.
     Also:  Added all edit functions to the "undo"
     mechanism, as well as label creation.

305  v3.3 rev 8		2/4/05
     Corrected several mistakes in the selection mechanism
     that left pending (unfinished) events on the stack.
     Also:  Corrected a problem from rev. 7 that did not
     register unselection events (key "x") with the undo
     mechanism.

304  v3.3 rev 7		2/1/05
     Revamped the selection mechanism (finally) to get
     rid of the cumbersome "click to select or reject"
     method.  The new method picks one element, and
     cycles through objects so that a different object
     is selected on each button press, if several elements
     are found at the pointer position.  This method would
     be equally unwieldy save for a change in the way
     object instances are selected---the selection routine
     recursively searches for elements inside objects that
     are close to the pointer position (albeit with a wider
     capture range than on the top level).  This prevents
     selecting an object instance with lots of white space
     if the pointer is in the middle of the white space
     (such as a frame or border object).
     Also:  Corrected the "Make Matching Symbol" callback.
     Thanks to Mark Chang for pointing out the error.

303  v3.3 rev 6		1/4/05
     Made additions to the "pcbout.tcl" script to support
     SMD integrated circuits, and resistors and capacitors
     (both chip and axial).  "pkg" parameter added to the
     Resistor and Capacitor parts in the "analoglib2"
     library.

302  v3.3 rev 5		12/16/04
     Corrected a fatal error in library copies if no valid
     object is selected.  Corrected a compile error (C++-like
     syntax fails on many compilers).  Added option to print
     or not to print the ".end" statement at the end of a
     SPICE deck.

301  v3.3 rev 4		12/10/04
     Corrected an error that allows "temp label" pins to be
     assigned the same name for different nets.  The number
     following "int" or "ext" on temp labels is now changed
     to match the net number when referencing the label name,
     if it is found to be different.
     Also:  Corrected another bug that causes a crash when
     copying an edited parameter back to an object.  The
     data record for the PARAM_END structure was not zeroed.
     This was okay previously because the data record was
     unused.

300  v3.3 rev 3		12/6/04
     Corrected a problem in which drawn subcircuits and
     subcircuits declared with an "X.." in the info label
     will share index numbers, by forcing SPICE output to
     generate a devname of "X" for each drawn subcircuit
     object.
     Also: Changed the behavior so that device numbering
     starts at zero, not one.  Otherwise, if a device is
     numbered zero on the drawing (e.g., by having the index
     number entered by hand), xcircuit will generate a spurious
     "duplicate part" warning.

299  v3.3 rev 2		12/3/04
     Fixed an error (apparently from 3.3 rev 0) that caused
     parameters to become hosed if changed (also causes program
     crashes).
     Also: Added handling of X11 button4 and button5 events for
     (potential) binding to mouse scroll wheel motion.

298  v3.3 rev 1		10/8/04
     Changed the behavior of the PCB netlist generator to be
     more intelligent about finding the bottom of the
     layout hierarchy.  Also, corrected the netlist generator
     where it allowed a global net to be merged into a local
     net.
     
297  v3.3 rev 0		9/28/04
     Replaced the "hspice" directory with Conrad Ziesler's
     "spiceparser".  The use of routine AddNTermModule() has
     broken the spice input for now, although once fixed, the
     results should be much improved.
     Also, changed the handling of expression parameters so
     that expression parameter results may be numeric, and
     evaluated results are saved in the PostScript output as
     instance values.  When traversing the hierarchy during
     redisplay, commands invoking a "selected" element will
     pick up the object instance being rendered.  The
     combination of these changes allows the implementation
     of several useful features such as counter-rotation and
     displaying the name of an object within the object.

Version 3.2 (January 2004 to September 2004)
----------------------------------------------------------------------
296  v3.2 rev 27	9/17/04
     Quick fix to allow the non-Tcl code to compile;  the
     experimental "ngspice" code contains numerous Tcl references,
     and although it does not depend on Tcl in principle, it is
     easier just to disable the code for the non-Tcl compile.
     It will not be missed.
     Also:  Changed the startup method from the hacked-up
     redirection of $HOME to a standalone "wish"-like executable
     that sets up "wish" to read in the .xcircuitrc file as its
     startup script.

295  v3.2 rev 26	9/7/04
     Changes based on comments from Dale Grover for correct
     compilation/linking/installing under "Fink" on Mac OS-X
     10.3.

294  v3.2 rev 25	9/6/04
     Fixed the wrapper code to ignore Tk's standard binding for
     the Tab and Shift-Tab key events during label text input.
     Otherwise, the window loses focus, which is an annoyance.

293  v3.2 rev 24	8/25/04
     One major fix to the netlist code to insist that "updatenets"
     is never run on a symbol.  Otherwise, a circuit that has a
     symbol that is not used anywhere will generate an error when
     netlisting, resulting in no netlist.
     Also, many minor fixes/enhancements to the TCL command-line
     functions, mainly to support scripting.  There is now a
     script called "sue_xc.tcl" that supports the generation of
     schematics from ".sue" files (in particular, this is to
     allow xcircuit support for the IIT standard cell library;
     see http://www.ece.iit.edu/~vlsi/scells/).

292  v3.2 rev 23	8/18/04
     Rather important fix from back in revision 19, in which routine
     "pointtonet" is supposed to merge crossing wires if they cross
     on top of a subcell port.  This is the method used to connect
     crossing wires with the "dot" symbol, so it is rather important.

291  v3.2 rev 22	6/21/04
     Added capability to the parameter selection mechanism to handle
     Tcl-expression parameters of the form "lindex {list} <index>".
     Such expressions will generate a listbox-type popup window in
     which the user is prompted to select one of the choices in the
     list.  The parameter will be replaced by the same expression
     but with <index> changed to reflect the index position of the
     chosen parameter value.  The way to make such parameters in the
     first place is "parameter make expression <name> {lindex {list}
     <index>}".  To change the expression itself instead of selecting
     a choice from the list, use "parameter set" instead of the GUI
     interface.  Thanks to Paul Surgeon for suggesting this method.

289  v3.2 rev 21	5/58/04
     More quick fixes:  Makefile error installing .tcl and .lps files
     due to an error in Makefile.am;  library object import now checks
     library version and does not attempt to import libraries that may
     be missing a dependency list.  Distribution libraries updated to
     make sure all of them will work with the library import function.
     Tcl function "library <name> <options...>" changed to accept
     "<name>" when library name is "Library: <name>".  This makes more
     sense, as it allows one to do, for instance:
	"library load asg_spice"
	"library asg_spice save asg_spice_new"

288  v3.2 rev 20	5/26/04
     Quick fix to a bug pointed out by Petter Larsson, which must have
     been in the code for some time, which checks for names incompatible
     with the PostScript interpreter but then fails to make the change.
     Also, cleaned out some source code copies left over from bus
     representation implementation.

287  v3.2 rev 19	5/20/04
     Finally got the bus notation handling into enough of a working
     condition that I dare to post the distribution.  In addition to
     basic fixes, improvements include handling of buses and partial
     buses with the "connectivity" function, and in particular,
     handling of instance-specific labels throughout the netlist
     (previously was only applicable to the netlist output).  The
     instance-specific labels allow the new "tap" object to work.
     Added the tutorial file "buses.ps" to the examples directory.

286  v3.2 rev 18	5/6/04
     Removed the requirement that the GUI must be in place prior
     to startup.  XCircuit can be embedded directly in another
     application with or without its own GUI.  Without the GUI,
     it is necessary to create (and map) a "simple" window
     (e.g., "simple .mytest.draw -bg white -width 700 -height 400"),
     and then set the Tcl array variable "XCOps(window)" to be the
     Tk pathname of this window.  This creates a window into which
     things can be drawn by Tcl command-line commands.  To enable
     button and key actions, it is necessary to do:

     bind .mywin.draw <ButtonPress> {xcircuit::standardaction %b down %s}
     bind .mywin.draw <ButtonRelease> {xcircuit::standardaction %b up %s}
     bind .mywin.draw <KeyPress> {xcircuit::standardaction %k key %s}
     bind .mywin.draw <Enter> {focus %W}
 
     from the Tcl command line.  It is also possible to rewrite the
     wrapper script so that the whole GUI is present but rooted in a
     location different from ".xcircuit".  In that case, set the
     variable "XCOps(top)" to the top-level window name before
     invoking xcircuit::start.  In either case, one must run "wish"
     first, then load "xcircuit.so", create the appropriate Tk window
     or windows, set the appropriate XCOps() variable, then do
     xcircuit::start.

     Handling of bus notation is still unfinished in this (unreleased)
     version, and probably breaks the schematic capture altogether.
     This will be fixed prior to an actual distribution release.

285  v3.2 rev 17	4/14/04
     Major enhancement:  Handling of bus notation in netlists!
     Also, Prohibit parameters from shadowing PostScript reserved
     names and definitions in xcircps2.pro, as is done for object
     names.  Also, finally found and excised the bug that was
     preventing correct comparison between object definitions on
     read-in, which was introduced along with the parameter type-
     promotion code.  Fixed another bug which prevented
     parameterizing position.  And, fixed a bug which prevented
     disabling flip invariance on text from the menu in the TCL
     version.  Also:  made more convenient constructor/destructor
     functions in elements.c, for general purpose use; these are
     called from tclxcircuit.c.  Also:  Reimplemented "strdup"
     as "Tcl_Strdup" in the TCL version; otherwise, there are
     places where memory is allocated by strdup, bypassing TCL's
     memory allocation, but free'd by Tcl_Free().  Also: modified
     the library manager "library import" routine to load any
     library instances of an object in addition to the object
     itself.

284  v3.2 rev 15	3/15/04
     Reinstated colors and other parameters as XDefaults-style options
     in the TCL version using the Tk_GetOption() command.  Changed
     autoconf so that the TCL version is compiled by default (unless
     not found, or explicitly disabled).  Initial work on bus
     notation parsing.
     
283  v3.2 rev 14	3/03/04
     Added a library manager (often requested) for handling large
     lists of parts.  Allows objects to be imported from libraries
     piecemeal.

282  v3.2 rev 13	3/03/04
     Changed the TCL scripts and shell startup file so that the
     README directions for a test execution prior to install actually
     work as advertised.  Also, finally found a way to force automake
     to compile the tcl version with just "make" and "make install",
     thus hopefully eliminating the greatest source of compile-time
     woes.  Re-implemented the .so file loading so that the reported
     error is the real root cause error, not "file not found".  Also:
     removed Imakefile and all references to it.  Also:  Added a
     menu item for the PCB layout generation.  This is not yet
     sourced by default.

281  v3.2 rev 12	3/01/04
     A couple of fixes to bugs reported by Brek Miller.  1) Library
     copy did not copy parameters correctly (missed both the "key"
     and "which" entries), and 2) The object comparison mechanism
     failed to correctly compare objects with parameters due to a
     typo in the code.

280  v3.2 rev 11	2/27/04
     Some changes to command functions and netlist output.  Added
     file lib/tcl/pcbout.tcl, a script that converts an xcircuit
     schematic into a preliminary PCB layout.  This is very spare
     at the moment, to say the least; for instance, it only
     supports 7400-series devices.  But it's mostly proof-of-
     concept.

279  v3.2 rev 10	2/26/04
     Some Makefile/configure changes, esp. for systems like Debian
     that do not find the Tcl/Tk include files.  Also, rearranged
     the menus so that "linewidth" commands (global and wire line-
     width) are more obviously placed ("wire linewidth" duplicates
     the "element border" entry).  Thanks to Forrest Cook for this
     suggestion.  Also, rewrote the library load command in
     xcircuit.tcl so that it prints the actual root cause error
     instead of complaining about "file not found".  Also, rewrote
     and extended the "help" window in Tcl, making it entirely
     script-driven from Tcl, and adding help text for each function.
     This required adding Tcl command "bindkey" variant with no
     arguments, which returns a list of all functions which can be
     bound, and "bindkey -func <function>", which definitively
     asserts that the argument is a function, not a key (because,
     e.g., "Delete" is both a key name and a function).  Also,
     made XCF_Prompt (key "%") execute xcircuit::raiseconsole in
     the TCL version (previously undefined in TCL).

278  v3.2 rev 9		2/20/04
     Greatly expanded the undo mechanism, which now covers most of
     the major xcircuit functions.  This is definitely "beta test"
     code.  Also, renamed a number of functions and definitions to
     be clear about the difference between an element and an
     object (this confusion was left over from the really early
     days of the program).

277  v3.2 rev 8		2/11/04
     Improved the ghostscript rendering mechanism so that it can
     handle (non-encapsulated) pages output from ghostview (which
     includes some global state-setting commands).  Also, greatly
     improved the rendering by backgrounding the process.  Xcircuit
     draws a blank background and continues until ghostscript
     reports that the page is finished, at which point the page
     gets redrawn with the background.

276  v3.2 rev 7		2/6/04
     Some fixes to the ASG and hspice routines;  automake now checks
     for g++-3 <stl> vs. the older <stl.h> header file and adjusts
     accordingly.  The hspice parser no longer produces files
     netlist.sp and netlist-flat.sp.  Compilation of ASG is now
     disabled by default (and will be until it's stable. . .), and
     requires "configure --enable-asg" to enable the module.

275  v3.2 rev 6		2/5/04
     Added the ASG and hspice parser modules back in, with additions
     to the master Makefile and configure script to support compiling
     both modules into the xcircuit Tcl shared object library
     xcircuit.so.
     
274  v3.2 rev 5		1/29/04
     There was a 3.2 previously for the ASG implementation.  This is
     being done again from scratch, but I'm continuing the revision
     numbers where I left off, at 5.  Prior to adding ASG back in,
     version 3.2 is in the process of implementing the "comprehensive
     undo" function by creating the framework for running undo/redo
     events and recasting the "delete" function into this framework.
     More to be added in coming revisions.

Version 3.1 (January 2003 to January 2004)
----------------------------------------------------------------------
273  v3.1 rev 38	1/28/04
     Removed #ifdef SCHEMA from everything.  This should have been
     done long ago. . . Also, removed %%PageBoundingBox from the
     output for encapsulated PostScript files, as this appears to
     screw up output when including the drawing in a document, such
     as a LaTeX file.  Changed the behavior of the output dialog box
     such that the page label is checked before writing, and the page
     label is set to the filename if the label is still "Page #"
     at the time the label is set.  Fixed the behavior of selecting
     fill and border styles, especially a critical error with fill
     styles that would allow polygons to acquire an invalid state,
     causing netlist problems and/or unmatching PostScript output.
     Changed the selection behavior such that elements are not
     unselected after border/fill/color changes.  Fixed the behavior
     of network connectivity highlighting to work with multi-page
     schematics.  Changed some event handling to let most button-
     release events act on the mouse position on the previous
     button press (this works for drawing wires and editing polygons,
     but not for copying elements).  Added "%N" escape to the
     tag callback mechanism to allow all arguments to be passed to
     the callback procedure as a list.  Fixed marking of "Closed"
     checkbox in the Tcl "Border" menu.

272  v3.1 rev 37	1/23/04
     Preparing for XCircuit 3.2 (ASG).
     Revised some of the code structure of netlist.c, added routines
     NameToPosition(), from the ASG code (xcircuit-3.2), and
     PortToPosition(), which is a variant thereof.  Added the routine
     ratsnest(), called by the command "netlist ratsnest" in the
     Tcl console, which demonstrates some of the features required
     for true ASG.  Also:  removes deleted items from the netlist
     piecemeal, so that an ASG system can operate on an invalidated
     netlist without encountering dereferenced pointers, or elements
     which are not on the page they claim to be on.
     Also:  Fixed another bug similar to that in #271 where no space
     was printed after the closing "}" in multipart strings appearing
     in parameters, which equally bad results.

271  v3.1 rev 36	1/21/04
     Added support for schematics spread over multiple pages.  The
     method is that all top-level pages that have the same page
     label (object name) will be considered part of the same
     schematic.  One of the pages is considered the "master", or
     "primary" page, and keeps the netlist/portlist/calllist for
     all the pages.  The other pages are the "slave" or "secondary"
     pages, and refer to the master page for netlist information.
     Also:  Fixed a couple of bugs resulting from messing with
     the parameter formats, namely 1) put back the check for
     equal "which" value in varpcheck and varfcheck, and 2) added
     a space after printing a null-string "()" parameter value.

270  v3.1 rev 35	1/16/04
     Modified and completed support for expressions in parameters.
     In the TCL version, this supports all TCL expressions.  In the
     non-TCL version, it allows simple character strings to be used
     in parameters.  The expressions are not translated into
     PostScript; the PostScript output records the expression, which
     is unused, and the last evaluated result, which is taken to be
     the parameter value.  Cleaned up more code for numeric and
     indirect parameters, and added TCL options "-verbatim" and
     "-indirect" to the "parameter" command to facilitate handling
     indirect and expression parameters.

269  v3.1 rev 34	1/9/04
     Cleaned up and finished most of the stuff having to do with
     numeric parameters, parameters promoted from numeric to string
     types, parameters on a top-level page, and indirectly-referenced
     parameters.  Also:  Tcl variables moved into a single array.
     Also:  Some support for arithmetic expressions in parameters.
     Very rudimentary at present.

268  v3.1 rev 33	12/16/03
     Fixed the text justification routine in TCL ("label justify ...").
     Thanks to Petter Larsson for the bug report.  Fixed two problems
     with "page clear"---one reported by Brek Miller, showing that
     the free_single() routine was removing parameters from the
     referenced object, not the instance, and one reported by Joel
     Kuusk, where the Tcl "clear page" command allows clearing a page
     while editing an object instance in the hierarchy of that page,
     causing an immediate crash.  Finally, corrected prototypes.h
     for routines setjustbit() and setpinjustbit() for the non-Tcl
     compile, left in an improper state in revision 32.  Thanks to
     Dave Armbruster for this bug report.

267  v3.1 rev 32	12/10/03
     Fixes to the linewidth/border width changing from the menu in the
     TCL version, as pointed out by Rob Olsen.  Also, on suggestion from
     Makram Mansour, added LaTeX label handling.
     
266  v3.1 rev 31	12/08/03
     Three fixes from bug reports by Bliss Carkhuff: "page save" returns
     TCL_OK rather than an undefined value, parameter entry requires
     exact match to keywords to get text escapes such as "underline", and
     substring parameter creation corrected for creating parameters in
     the middle of a label.  Page save error also pointed out by Mark
     Martin, and Rob Olsen who additionally noted the additional error
     in linewidth selection (which has also been fixed).

265  v3.1 rev 30	12/01/03
     Made another change to the output such that all objects used on
     all pages are output first, inside a PostScript DSC block
     "DocumentSetup", followed by all the pages.  This modification
     allows viewers like ghostview to figure out that these objects
     may be used by any page, and prevents errors that occur when
     skipping pages forwards or backwards in the viewer.

264  v3.1 rev 29	11/26/03
     In response to Romano Giannetti, fixed the bounding box
     routines so that EPS files are handled the way they used to be.
     The only thing required was to set the overall bounding box to
     remove the 1" margins; the page bounding boxes remain the same,
     and ghostscript, ghostview, and EPS insertions into LaTeX
     documents all appear to be handled correctly.  Also, added the
     "override" commands to the TCL interface, although to match the
     rest of the TCL syntax, these have been changed to "library
     override", "loadfont override", etc.

263  v3.1 rev 28	11/19/03
     Changed the way XCircuit handles embedded bounding boxes
     and does page scaling and translation in the output.
     Removed the "offsets" comment line from the output and
     changed it to a PostScript translation, which means that
     all the positional values in the PostScript output on a
     top-level page are all in xcircuit internal units, without
     offset, and are therefore invariant with scale, page size,
     etc.  When an embedded bounding box is present, xcircuit
     translates the output such that the bounding box is centered
     on the page.  If "auto-scale" is selected, then the output
     is scaled such that the bounding box fits centered on the
     page with 1" margins minimum.

262  v3.1 rev 27	11/16/03
     Extended the parameter method to include parameters passed
     inherited by an object instance from its parent.  Fixed the
     "make object" method such that parameters are copied into the
     new object (as yet, the new object does not correctly inherit
     the parameter from the parent).  Added preliminary support
     for promoting numerical parameters to strings.

261  v3.1 rev 26	11/11/03
     More fixes and extensions related to parameter key:value
     pairs.  Added a popup window in the Tcl version for
     editing substring parameters of an object instance,
     including functions for formatting ASCII strings from
     string parameters and vice versa.  Added a function
     for the "Add New Color" button in the Tcl version, which
     was missing.  Command syntax "color <idx>" changed to
     "color set <idx>" and option "color add <name>" added.

260  v3.1 rev 25	11/6/02
     Changed parameter handling to a key:value pair model.
     Revised built-in libraries to take advantage of this
     method, using keys like "value", "units", "length",
     "width", etc.  Expanded and revised the "parameter"
     command in Tcl-based XCircuit to provide the key:value
     information, as well as providing parameter information
     down one level in the hierarchy for an object instance
     (using the key "-forward" as the last argument to the
     "parameter" command).  Added command option "type" to
     list parameter types, or to list parameters by type.
     Finished code for removing parameters.

259  v3.1 rev 24	9/19/03
     Added feature (macro "V" key) to make a library virtual
     instance from an object selected on a page.  This allows
     users to make temporary copies of parameterized (or
     rotated, or flipped) objects for quick retrieval.
     Several corrections:  Xcircuit now checks for symbols
     associated with schematics and saves them, even if the
     symbols are not used in any schematic.  This prevents
     associations from being lost after a save/quit/load
     cycle in an unfinished schematic.  Also:  Snap and
     polygon edit will invalidate the netlist.  Also:  "Make
     matching symbol" reports an error if the schematic page
     has an invalid name.

258  v3.1 rev 23	9/15/03
     Corrected revision 22, which duplicated the NameToObject
     routine by mistake.  Also added TCL wrapper key bindings
     for function keys "Page Up" and "Page Down" to increment
     or decrement the page number (helps with large numbers of
     schematic pages).

257  v3.1 rev 22	9/10/03
     Moved routine NameToObject from tclxcircuit.c to schema.c,
     since it is used by the non-Tcl based code and prevents
     compiling the non-Tcl version.  Thanks to Swee-Ann Teo for
     pointing out the error.

256  v3.1 rev 21	9/5/03
     Fixed a problem with the Tcl calls to the zoom functions,
     which were passing a NULL event structure.  Thanks to Ed
     Casas for pointing out this error.  Also:  Fixed the
     Makefile.am file for compilation under Cygwin, which was
     presented the wrong name for menudep.o.  Thanks to Carlos
     Davila for pointing out this error.

255  v3.1 rev 20	9/4/03
     Changed key and button handling in Tcl to work using the Tk
     "bind" function, with the usual behavior being bound to the
     "standardaction" command.  Standard actions can be rebound
     using the xcircuit "bindkey" command, or keys can be bound
     to Tcl procedures using the Tk "bind" command.

254  v3.1 rev 19	8/12/03
     Required reconfiguring without Tcl once to generate the
     "Makefile.in" in the Xw directory;  otherwise, automake 1.7
     becomes a requirement.

253  v3.1 rev 18	8/6/03
     A fix to the output, correcting the page numbering in the
     PostScript page headers.  The incorrect numbering can cause
     some printers to lock up. . .

252  v3.1 rev 17	7/14/03
     Thanks to Ted Roth for fixing my rather too-hasty fix of
     revision 16.  Also:  Some fixes to the autoconf script (also
     from Ted Roth), and autoconf script updated to work with the
     latest versions of autoconf/automake/aclocal.

251  v3.1 rev 16	7/08/03
     Fix to "x" and "y" output for .sim format---thanks to Kath Shih
     for pointing out this error.

250  v3.1 rev 14	5/05/03
     Incorporated a patch from Max Horn to remove all references
     to "malloc.h" from the headers, and fix the configuration file
     for Mac OS-X compilation.

249  v3.1 rev 13	4/29/03
     Fixed a problem due to automatic search for schematics which
     prevents a single page from being saved.  The output window
     now shows both "schematics" and "subcircuits" with checkboxes;
     pushing "schematics" unlinks top-level schematics, and pushing
     "subcircuits" can prevent subcircuits from being saved along
     with the file.  In either case, the filename is blanked out
     so the user will not mistakenly overwrite the original file
     with a truncated one.  In conjunction with this method, the
     Tcl "page links" command has been extended to include the
     options "independent", "dependent", "total", "pagedependent",
     and "all".  Eventually, I expect to add an additional option
     "list" to list page names instead of simply enumerating them.
     Thanks to Mark Jones for pointing out this error.

248  v3.1 rev 12	4/14/03
     Fixed the PostScript background rendering, which was only
     broken because of a broken implementation of ghostscript
     (version 6.5).

247  v3.1 rev 10	3/21/03
     Replaced TkCon with the version used with magic, fixing a
     minor issue with handling backslash escape sequences.

246  v3.1 rev 9		2/26/03
     Fixed the install for revision 8, which failed to run the
     xcircuit.tcl script through the m4 preprocessor.  Also, on
     recommendation of Mark Jones, added a warning message when
     pins exist on a symbol which do not exist in the associated
     schematic.

245  v3.1 rev 8		2/23/03
     Resolved numerous issues with cross-application methods.
     Overloaded the "label" Tcl procedure to accept both xcircuit
     and Tcl syntax, and removed the "bgerror.tcl" file.
     Added procedures for calling netgen, IRSIM, and magic while
     running XCircuit.

244  v3.1 rev 5		2/19/03
     Fixed (for the third time(!)) occurrences of "getline" which
     should have been changed to "setline".  Fixed the toolbar
     widget so that it recomputes its width when the window size
     changes, and so that it does not squeeze the height of the
     bottom message bar.

243  v3.1 rev 4		2/12/03
     Added handling of "va_copy" to the configuration script for
     systems which do not define it.  Also:  Added "%x" and "%y"
     escapes to the info label syntax, for writing positional
     information to the output (helps LVS programs like "netgen"
     trace back errors to the schematic).  Split the "Manifest"
     file into "CHANGES" and "TODO" and started adding revision
     numbers to the change log entries to match the revision
     number on the website download page.

242  v3.1 rev 3		2/10/03
     Added Tcl handling of the string parameter insertion via a
     popup prompt.

241  v3.1 rev 2		2/04/03
     Traced the "No per display information" error to use of an Xt
     function (XtDispatchEvent()); replaced with Tk_HandleEvent().

240  v3.1 rev 1		2/03/03
     Fixed numerous problems with the Tcl-based version, and added
     several missing functions (such as the select filter, and
     handling keystroke <return> in the filelist widget).

239  v3.1 rev 0		1/24/03
     Finished preliminary version of Tcl-based xcircuit.  Relocated
     runtime files back to (default) "/usr/local/lib" (instead of
     autoconf's default $datadir "/usr/local/share").  Threw in
     tkcon.tcl for compatibility with magic/irsim/netgen and recast
     fprintf() as macro Fprintf(), which calls "tcl_printf()" in
     the Tcl version and "fprintf()" in the other versions.  Added
     command-line function "-exec <file>" to the Tcl version for
     running in batch mode (or alternately, just to bypass the
     default startup file).

Version 3.0 (June 2002 to January 2003)
----------------------------------------------------------------------
238  v3.0		1/15/03
     On advice from Zhengdao Wang, changed the postscript header to
     draw "opaque" styles as solid color, not stipples.  All fill
     styles except for white (empty) are made opaque by default and
     fill style white is made transparent by default.  The "opaque"
     menu button can set the non-default behavior.
     Also:  Added a file loading command to the python and
     non-interpreter command-line interfaces.

237  v3.0		11/25/02
     Cleaned up some code with respect to 64-bit pointers, checking
     for the size of pointers in "configure", and setting the proper
     integer type for pointers in xcircuit.h.  Should compile cleanly
     on 64-bit systems without the "-taso" switch (which doesn't
     exist for Linux/alpha systems).

236  v3.0		9/23/02
     Added pixmap image handling to Tk/Tcl, and removed SWIG from
     the "make" process.  Configure option "--enable-wrapper" changed
     to "--enable-tcl", "make wrapper" changed to "make tcl", and
     "make install-wrapper" changed to "make install-tcl".  Added
     the toolbar and associated functions.  Added "netlist" function
     to Tcl for generic netlist handling.  Fixed numerous errors in
     the Tcl callbacks.  Tcl functionality is now about 95% of what
     it should be.  Non-Tcl version has not been affected by these
     changes.

235) v3.0		7/17/02
     Several bug fixes for bugs reported by Massimo Gaspari (see
     below).

234) v3.0		7/08/02
     Fixed bug in the Python "bind" command such that keys not
     bound to macros return an xcircuit error, not a Python error
     (bug reported by Bob Paddock).  Also fixed a bug reported by 
     Petter Larsson <f97-pla@nada.kth.se> in which the result of
     getenv("XCIRCUIT_LIB_DIR") is not check for a NULL value
     when executed from (any) interpreter.

233) v3.0		7/03/02
     Several bug fixes for parameter-functionality bugs found by
     Massimo Gaspari <gaspari@tin.it>.  Changes are relatively minor
     and not worth inducing a version number change.

232) v3.0		6/24/02
     Abount 90% of the Tcl functionality necessary to duplicate all
     existing functions has been completed.  This makes the Tcl-wrapped
     version useable, but experimental, and a bit crash-prone.  The
     command set it written up in "README.Tcl".  Compiling involves
     doing "configure --enable-wrapper" followed by "make wrapper"
     and "make install-wrapper".  Otherwise, the standard "configure"
     and "make" results in the standard version of xcircuit.

Version 2.5 (November 2001 to June 2002)
----------------------------------------------------------------------
231) v2.5.5		5/21/02
     Started on the Tcl-wrapped version of XCircuit.  Currently
     this is just a big mess.  I am posting it to the distribution
     with all the wrapper stuff disabled and no instructions on how
     to compile it, mainly so I don't have to keep making sure that
     bug fixes are reflected in both versions.

230) v2.5.4		5/14/02
     Revised the CvtStringToPixel so that it satisfies (or should
     satisfy) all X servers doing 8 bpp, even those that return
     bogus values on XLookupColor().  Previous "fix" had disabled
     private colormap installation.
     Also:  Improved "gettext.py" to deal with tabs and page breaks,
     and takes optional values for maximum lines per page and font
     to use.  Fixed a bug in "pagebbox.py" and also a related bug
     which clipped color values to size short when set by "setattr"
     in Python.

229) v2.5.4		5/10/02
     Fixed a bug in which XCIRCUIT_LIB_DIR must be defined or the
     program will crash.  Also:  Added text split and join functions,
     and text "up" and "down", mapped to the Up and Down arrow keys.

228) v2.5.4		5/09/02
     Changed the format of the output of the Python netlist() function
     to better facilitate flattened netlists.  Nets are passed by
     number and associated to names in a separate dictionary.  This
     allows names to be changed (as required when flattening) without
     altering the netlist.  Otherwise, it becomes a big mess.  The
     new format ends up being smaller than the original.  "flatspice.py"
     has not yet been completed, though.

227) v2.5.4		5/07/02
     Repaired some problems with the Python netlist() function, and
     wrote a working version of "spice.py".  Will replace the
     internal functions when the "sim" and "pcb" scripts are written.

226) v2.5.4		4/29/02
     Various changes in response to bug reports:  Fixed library and
     page object exchange, PCB infolabels on quad parts.  Seg fault
     due to missing code in "unmakenumericalp" has been worked around,
     but the routine still needs to be finished.  Patched filelist.c
     to query result of stat().  Fixed error with XQueryColors in
     8-bit pseudocolor mode.

225) v2.5.4		4/26/02
     Got rid of the "passive grab" action, which seems to be the root
     cause of the video screen blanking on some systems.  Eventually
     discovered that "XtAddEventHandler" doesn't work for ButtonMotion
     if it's called AFTER the button has already been pressed.  With
     this fact in hand, it was easy to avoid all the Add/Remove calls
     and just add the event handler once, at the beginning.

224) v2.5.4		4/19/02
     Replaced the top-level object with a top-level instance, with
     all the ensuing fallout.  The resulting code is much cleaner.

223) v2.5.4		3/25/02
     Fixed the problem of parts being auto-deleted by the netlister
     pointed out by Jeremy Brown.  Also:  Fixed a problem found by
     Bob Paddock in which label segments are miscounted on output;
     apparently, this only happens using the "gettext" script.

222) v2.5.4		3/21/02
     Changed library structure so that every object gets an instance.
     This precipitated many code changes.  Along the way I fixed up
     a bunch of minor errors, too many to list.  Bounding boxes in
     the PostScript output ("bbox" entry) have become obsolete,
     except for font files, where the bounding box is not necessarily
     coincident with its contents.

221) v2.5.4		3/19/02
     Added key binding for "pin global" (key "G"), which was
     documented but was not actually in the program.  Thanks to
     Jeremy Brown (jhbrown@ai.mit.edu) for pointing this out.
     Also:  On another suggestion of Jeremy's, added a scrollbar
     to the help window.  Along the same lines, cleaned up the
     "file read" window so that the pixmap is never shorter than
     the viewport.  Fixed a small error with PostScript background
     rendering---newline before "end_insert" avoids problems with
     binary-format PostScript.  Changed default key binding for
     BackSpace to equal behavior of Delete.  This seems to be what
     most people expect and/or want as default behavior.

220) v2.5.4		3/12/02
     Implemented instance-defined bounding boxes and cleaned up a
     lot of stuff related to bounding boxes.  This was needed to
     properly implement the new "libinst" method described below.
     Also: Altered the connectivity highlight function so that it
     retains the number of the highlighted net in the netlist, and
     continues to display the highlight through page changes and
     expose events.  Fixed a bug in the PCB netlister.

219) v2.5.3		2/27/02
     Fixed a few minor inconsistencies related to color allocation.
     Also:  Implemented a "select previous" command, an undo command
     for selections.  Third mouse button function ("Escape") will
     unselect anything that is selected, but if nothing is selected,
     it will retrieve the last selection.  Page/object changes
     destroy the previous selection record.  Also:  Added intanced
     scale and rotation values to the "libinst" record (values are
     optional).  This allows, for instance, the "arrowhead90" object
     to be replaced by an instance of the original "arrowhead"
     rotated by 90 degrees.  All libraries updated to include
     useful instantiations of objects rotated by 90 degrees:
     arrowhead, arrow, circle, jumper, and all of the analoglib2
     objects which allow instanced rotation and justification of
     their parameter value labels.

218) v2.5.3		2/26/02
     Bug fixes to incremental netlisting.  Also:  Separated the loading
     of GUI colors from that for layout colors.  The schematic capture
     was re-using SNAPCOLOR, AUXCOLOR, and BBOXCOLOR, which causes bad
     effects if one attempts to change these values in the X defaults.
     Re-used GUI colors were not necessarily duplicated or available
     in the layout color palette, which was also confusing.  Also:
     environment variable XCIRCUIT_LIB_DIR now applies to the search
     for the startup script.  This enables xcircuit to be tested prior
     to installation by doing "setenv XCIRCUIT_LIB_DIR ./lib" in the
     top-level source directory.

217) v2.5.3		1/30/02
     Changed the behavior of the PostScript background so that it scales,
     rotates, and translates with output selections (Landscape vs. Portrait,
     and vs.  Output Scale), so the behavior is what would be expected.  Still
     allows only one background image per page, though, and the PostScript
     image can't be scaled, rotated, and translated independently of the rest
     of the drawing (those things must be done to the image prior to loading).

216) v2.5.3		1/3/02
     Minor bugfixes:  variable reading (varfscan, varpscan) requires skip
     over whitespace.  Netlist requires reinstating routine nearpoint()
     because matrix transformations have roundoff errors and pin positions
     should not be compared exactly.  Updated Copyrights to 2002.  Netlist
     generation has been confirmed on a large schematic design.

215) v2.5.3             1/1/02
     First cut at incremental netlisting---implemented a scheme in which
     netlists are kept after being generated, until they are invalidated
     or the object is destroyed.  This scheme allows the netlist structure
     to be queried at any time.  Netlist creation is independent of the
     netlist mode, as it should have been to begin with.

215) v2.5.2		12/26/01
     Correction to duplicate object code makes sure that schematic/symbol
     association does not get destroyed along with the duplicate object!

     Also:  Applied Holger Vogt's patches to configure.in for proper
     compilation under Cygwin.

214) v2.5.2		12/15/01
     XCircuit now allows pin labels to be parameterized, treating them
     as an instance-dependent label.  While this does not alter the
     SPICE and sim netlists, it allows (for example) quad parts such
     as four NAND gates of a 7400 chip, each having its own unique
     pinout but sharing the same object.

     Also:  To go with the pin labels, added a method for generating
     "virtual copies" of an object to appear on a library page ("V"
     key from the library page).  The virtual copy is a different
     instance of the object, and can take different parameters.
     Started on library "quadparts" with 7400-series pinouts to
     facilitate use of the new feature with PCB netlisting.

213) v2.5.1		12/06/01
     Revised the routines that deal with duplicate objects.  New routines
     prevent propagation of appended underscores (used to differentiate
     between objects with the same name but different structure).  The
     major change is that a list of aliases is kept for objects with the
     same structure but different names, so there is no confusion through
     the process of reading the library.  When the loading is done, the
     aliases are removed and the names are cleaned up.

     Also:  Switched the copyright to GPL for better compatibility with
     other open-source tools, and because it's the Right Thing To Do.

212) v2.5.0		11/28/01
     Removed an ill-conceived routine which would delete duplicate
     copies of an object even if the names were different.  This action
     can give rise to very bad inconsistencies.  A better idea would be
     to try to "clean up" leading underscores whenever an object with
     a leading underscore is deleted.  However, this is a minor point.

     Also:  Fixed a string overrun bug in charreport().

211) v2.5.0		11/16/01
     Finally (!) added support for parameterized values other than
     label (sub)strings.  This includes parameterization of all
     element values except color (which is handled by an inheritance
     model).  Includes parameterization of:  point position (x, y, or
     both), line style, linewidth, scale, rotation, label justification,
     and arc radius, minor axis, and endpoint angles.  Includes support
     loading, saving, displaying, printing, and editing.

Version 2.4 (November 2001)
----------------------------------------------------------------------
210) v2.4.0		11/14/01
     Added python script "pagebbox.py" to create standard page-size
     bounding boxes (request from Bob Paddock).  Along with this,
     I updated the python code to handle colors by name or RGB
     components, rather than by index, which is visual-dependent.

209) v2.4.0		11/12/01
     Bug fixes to 2.4.0:  Fallback resources string must be null-
     terminated, added 2 remaining fallback resources that are
     not taken care of by the XtGetApplicationResources() routine,
     and changed XtAddConverter to XtAppAddConverter.  I hope that
     the application-specific references will prevent problems
     with the timeout functions, and maybe with input focus as well.

     Also: Fixed type casting of values retrieved from the message3
     widget---values are type "Dimension" and "Position" (usually
     defined as unsigned short and short, respectively), not int.
     Causes errors under Solaris and probably other systems, too.

208) v2.4.0		11/09/01
     Switched to a new method for defining rotation.  Rotation in
     xcircuit is now given in degrees, which matches the PostScript
     output.  Flipping is done in the obvious way by declaring a
     negative scale value (which is applied only to the X component
     in the transformation matrix;  Y is always positive).  Lookup
     tables for sines and cosines are replaced by the math library
     functions, which presumably are fast enough not to show any
     performance hit on most machines.  The redefinition of the
     PostScript prologue prompts the move to a new minor version
     number.  Rotation is still an integer value, so the minimum
     rotation increment is 1 degree.

     Also: Fixed an error in the PostScript prolog in which text
     flip invariance was incorrectly implemented after the addition
     of text kerning & scaling methods.  Fixed another error in which
     XCircuit and PostScript disagree about text orientation due to
     roundoff errors.  Matrix values must be compared to some epsilon,
     not zero, to determine when the orientation is 90 or 270 degrees.
     epsilon = 1e-9 works fine.

     Also: Changed certain Xt routines to include XtAppContext in the
     hope of avoiding the problem with the TimeOut function conflicting
     with other X11 programs (namely, screensavers).  Hopefully the
     addition of fallback_resources to XtOpenApplication will prevent
     problems with the X defaults when the X defaults file cannot be
     found.

Version 2.3 (May 2001 to November 2001) 
----------------------------------------------------------------------
208) v2.3.6		11/05/01
     Added rudimentary "edit-in-place".  Currently, this is a bit odd,
     because the hierarchy above the object is rotated to match the
     "natural" orientation of the object, rather than the other way
     around.  This should be fixed by allowing rotation and flips to
     the top-level page (keep the transformation matrix for the page
     rather than just the scale and position).  Skewing of the grid
     due to rotations is a can of worms, though.  Probably rotating
     to the nearest 90 degrees would suffice for most purposes.
     Edit-in-Place is turned on by default.  It can be turned off if
     the extra drawing clutters the window.

207) v2.3.6		11/01/01
     Fixed a long-standing error in which the "rejustify" routine
     was giving labels invalid "justify" bit fields.  Fixed a problem
     with the "visible pins" in which the visibility flag would always
     be reset by a rejustification of the label.

     Also:  Removed the ":n" suffix from pages in multiple-page files
     with the same name.  The addition of the suffix was screwing up
     the association of symbols to schematics on file reads, and it
     seems to work fine without it.  Some attempt is made to enforce
     unique names for pages associated to symbols, but it seems to
     work correctly whether or not names are unique.

     Also:  Fixed an error in string parameter deletion, and added
     a call to mergestring() after deletestring() to connect any
     divided text.

206) v2.3.6		10/25/01
     Revamped the file list window on the suggestion of Zhengdao
     to highlight files that match the expected file extension.
     Extended this idea to include a "file filter" which displays
     only those files with matching extensions.  This feature can
     be turned off by clicking a toggle button in case a file with
     an unusual name or extension cannot be seen.

     Also: Added a flag to the label justification value which
     allows pins to be seen on hierarchical levels other than the
     top.  Changes to the prolog prompted the change to subversion
     6 although the change is fully backward-compatible.  Thanks
     to Bob Paddock for the suggestion.

205) v2.3.5		10/24/01
     Fixed a netlisting bug pointed out by Bryce Denny in which the
     layer ordering of label vs. polygon can cause the label to not
     be associated with the network under it.  This led me to
     discover another bug in which a label position would update the
     netlist properly but the actual label itself would not be added
     to the netlist (the only apparent consequence is that the label
     is not hightlighted during a connectivity check).

     Also:  Fixed the behavior of the .xcircuitrc file loading so that
     keys can be rebound from the file.  Added Python commands for
     pan and zoom, and wrote an example script which rebinds keys "Z"
     and "z" to a python function which combines the pan and zoom.
     Separated zoom functions between those with and without screen
     refresh.

204) v2.3.4		10/22/01
     Fixed some buggy behavior with respect to loading and setting
     default fonts in .xcircuitrc and xcstartup.py.  Thanks to Jeremy
     Braun (jtbraun@MIT.EDU) for reporting these errors in detail.
     Also:  Fixed a missing requirement in checking object name
     syntax.  A PostScript name must be a string which cannot be
     interpreted as a number.  Thus, "+9" and "1E9" are illegal
     names.  Thanks to Bob Paddock (bpaddock@csonline.net) for
     reporting this bug.

     Also:  Changed behavior with respect to environtment variables,
     allowing "TMPDIR" to set the temporary directory and allowing
     an override of the "XAPPLRESDIR" directory.  Added a list of
     environment variables used by xcircuit to the manual page.

     Also: Revised the tempfile mechanism once again to include a
     check on the number of times a file has been modified;  heavy
     modification will induce a temp-file save even if the timer
     has not expired.

203) v2.3.4		10/19/01
     Implemented a "changed" file mechanism which checks for changes
     to pages and objects and queries for confirmation if there are
     unsaved changes upon quitting.  Changed filename behavior so that
     all filenames have their own malloc'd space, instead of sharing
     filenames.  Extended file backup to include different filenames
     on different pages.  Added a toggle box on the output popup
     window so that a page can be unlinked from a multipage file,
     and displays the number of pages in the file.  Added the simple
     popup window (no text entry) to the list of python calls.

202) v2.3.4		10/18/01
     Fixed the crash file recovery so that ONLY the given crash file
     can be loaded (load and cancel are the only choices).  Also,
     the actual temp file name is hidden from view, and the original
     filename is recovered from the "%%Title:" header line.
     Also:  Fixed the problem in which startwire() was called after
     a popup window button was selected.

201) v2.3.4		9/18/01
     Names of pages added to the library and page directories.
     Thanks to Bob Paddock <bpaddock@csonline.net> for suggesting
     the feature.

     Also: Updated "configure.in" to check for the infamous python
     version 1.5, and disable the python interface if found.

200) v2.3.4             9/10/01
     RPM package makefile fixes (thanks to Alex Habig
     <habig@neutrino.d.umn.edu>).  Also:  changed undelete() to
     xc_undelete() to avoid conflict with OpenBSD/FreeBSD system
     calls.  Thanks to Mike Andrews <mikea@mikea.ath.cx> for
     bringing this to my attention.

200) v2.3.4		8/12/01
     Implemented a Python interface into the netlist structures.
     Set up for use of Python scripts to generate all netlist
     output, as well as dealing with non-PostScript format input.

     Also: fixed a problem with crash recovery caused by the
     program exiting on call to Py_Exit.  Improved the crash
     recovery mechanism to automatically find crash files on
     startup, and prompt user to load.

     Also: added more Python functions, for page clear, page change,
     add key bindings to Python functions, and create menu buttons
     with callbacks to Python functions.  Added Python functions for
     calling a popup prompt, file browser.

198) v2.3.3		7/27/01
     Fixed more man page problems with the make process.  Added
     default values for Python libraries when the Python Makefile
     can't be found.  Made the rcfile parsing more robust, esp.
     so it doesn't crash if it attempts to read a non-script file.

197) v2.3.3		7/26/01
     Added auto-numbering of component numbers using netlist mode
     "idxpcb".  This works for all component numbering (including
     SPICE and sim) where the component number is parameterized and
     denoted by a question mark ("?").  Thanks to Lapo Pieri
     <lapo@iroe.fi.cnr.it> for the suggestion and some code to
     implement the function outside of xcircuit.

     Also: Fixed Imakefile so that imake uses m4 to generate the
     man page correctly on "make install.man".

196) v2.3.3		7/18/01
     Fixed two errors, one which split global nets in hierarchical PCB
     netlists, the other which failed to find nested parameters.

195) v2.3.3		7/17/01
     Some changes to the GNU autoconf (with much help from Albert
     Chin) for correct parsing of the path to python, avoidance of
     errors when generating the man page, and re-instantiation of
     the keyboard input focus workaround.

     Also: Removed the behavior of turning pins back into labels
     when creating objects or moving labels between pages or
     objects.  Added behavior that if a pin is removed (or moved
     out of an object), and the pin has a unique string, any pin
     on the corresponding symbol/schematic will revert to a plain
     label.  This was the intended behavior.

194) v2.3.3		7/09/01
     Added label strings to the Python setattr() command.  Added a
     getcursor() command to Python.  Created a python script called
     "gettext(filename)" which creates an xcircuit label from the
     contents of an ASCII file.

193) v2.3.3		7/06/01
     Quick fix to an error in interpreting key names for key bindings.

192) v2.3.3		7/05/01
     Added environment variable XAPPLRESDIR so that application
     defaults come from the location specified by the configure script,
     not /usr/lib/X11/app-defaults.  This also allows app-defaults to
     be used even if xcircuit is compiled without root privileges.
     The configure script was modified to compile in Xpm, if it can
     be found.

191) v2.3.3		7/02/01
     Changed netlist behavior so that wires only connect at endpoints
     (although an endpoint may attach TO any location along a segment
     of another wire).  Optimized a few routines for speed.  Netlist
     output now changes symbol font and standard font "mu" (i.e.,
     micro) to "u".  Fixed a bug preventing correct loading of files
     containing multi-part strings as parameters.

190) v2.3.3		6/28/01
     Cleaned up some behavior with respect to component numbering,
     including fixing numbering for flattened SPICE output.  Added
     a PCB library for generic IC parts.

189) v2.3.3		6/27/01
     Corrected the parseinfo() routine so that it correctly uses the
     symbol, not the schematic, to pick up information about a pcb
     name.  Changed some of the library objects (namely the passive
     devices like Resistor and Capacitor) so that pin names are PCB-
     like and device can be given a part number.  Changed the netlist
     compiler behavior so that all indices are numbered relative to
     a particular component, rather than numbered relative to all
     components.

188) v2.3.2		6/25/01
     Replaced the imake build with a GNU configure build.  Thanks to
     Albert Chin-A-Young <china@thewrittenword.com> for setting up
     the scripts for automake/autoconf.  For purposes of compliance
     with modern directory nomenclature, startup files and such are
     now installed in /usr/local/share/ instead of /usr/local/lib/.

     Also:  Added a "show pin positions" feature (recommended by
     Larry Doolittle) to the Options menu, which allows pin locations
     to appear on the hierarchical level above, to help in finding
     pin connections into objects.

187) v2.3.1		6/22/01
     More patches from Larry Doolittle, some cleaning up cruft flagged
     by compiling with -Wall, and re-patching a string function (an
     error which I am unable to duplicate.  But I will take his word
     for it).  Also, worked on Xw/TextEdit.c to implement horizontal
     scrolling of text (so it will no longer run off the end of the
     window).

     Also, finally implemented a way to check for overlapping objects
     caused by a copy or move (this is not exhaustive, but covers the
     most obvious ways this can happen).  This is especially critical
     for schematics, because multiple circuit elements will end up in
     the netlist when they cannot be seen on the schematic.

186) v2.3.1		6/21/01
     Applied patch from Larry Doolittle <ldoolitt@recycle.lbl.gov>
     to correct error in line length computation when writing output.
     Also modified file reader to treat lines ending with "{" as
     continuation lines (such as the beginning of a label), if they
     don't look like object definitions.

     Also: Copying library objects now also copies the parameters,
     and the page viewing parameters.  Corrected an error wherein
     stringcopy() calls makesegment(), although the former is
     supposed to ignore parameters, and the latter doesn't.  Also,
     instantiated a slightly "improved" object compare that is able
     to compare objects against objects with underscore-prepended name
     adjustments, in an attempt to avoid a proliferation of underscores.
     Fixed an error that reset "version" in the middle of a file read
     if a font was loaded.  Updated some of the "examples" files to the
     current format.

185) v2.3.1		6/18/01
     Added tilde ('~') expansions to filenames.  Thanks to Norman
     Werner <norman.werner@student.uni-magdeburg.de> for patches which
     seeded the final version of this code.

184) v2.3.1		6/12/01
     Changed the Imakefile for Python-2.1 and added instructions to the
     README file on how to make a shared (.so) python library.

183) v2.3.1		6/11/01
     Corrected a few errors which showed up on other compilers (thanks
     once again to Albert Chin, <china@thewrittenword.com>).

182) v2.3.1		6/04/01
     Fixed an error caught by John Livsey (<jlivsey@bigpond.com>) in
     which loading old library files causes the version number to
     revert to 1.9, causing havoc when reloading saved files.  This
     has been fixed along with code to check more decisively for
     which label syntax is in the file, and adjust the version number
     accordingly rather than depend solely on the version number
     extracted from the file header.

181) v2.3.1		5/31/01
     Cleaned up errors found in the netlist code while doing a large
     chip project.  Added flattened SPICE output and changed SPICE
     output to be compatible with "hspice" syntax.  Netlist compilation
     runs about three times faster than before, but should be able to
     do better, still.

180) v2.3		5/16/01
     Completed the full hierarchy search on subschematics.  searchconnect()
     makes a call to search_on_siblings(), looking for any connection from
     any object in the hierarchy of viewable (sub)schematics to the object
     under consideration.  Added a bounding box disjoint test to reduce
     unnecessary searching.  Could use a lot more optimization, though.

     Also, from the March 27 version, genportpins() has been merged back
     into gencalllist().  Spice and Sim netlists are correct for numerous
     torture tests given to xcircuit.

     Corrected errors in text generation stemming from the new
     PostScript profile (thanks to Jeremy T Braun <jtbraun@MIT.EDU>
     for patches).  Ultimately, decided to more closely match the
     PostScript and XCircuit label formats by declaring an overall
     scale outside of the label segments.  All font scales declared
     by "cf" commands are therefore relative, not absolute.  The
     change in output format prompted the change to version number
     2.3.

Version 2.2 (December 2000 to May 2001)
----------------------------------------------------------------------
179) v2.2.3		3/27/01
     Completely overhauled the method for text strings, implementing
     a linked-list method.  In conjunction with this change, also
     overhauled parameters to be called bottom-up rather than top-
     down, thus eliminating the need for tracking reallocated
     memory (which was not compiling correctly under the latest
     version of gcc).  Also made other structural changes, removed
     the text backspace character, and replaced it with a tabbing
     system.  Made key bindings for text home, end, left, right,
     delete, return, and special character insert, as well as the
     new tabbing commands.  PostScript profile revised to
     incorporate the tabbing features.
     Also:  Overhauled the netlist generator.  The result is much
     cleaner and more understandable.  The main difference is that
     the Netlist structure is comprised of nets and pins (no
     separate Pinlist), and the Paramlist (now called a Portlist
     to distinguish from object parameters) calls by net number,
     not by pin name.  Ports are accessed dictionary-style, by
     key-value pairs (port ID : netID).  The netlist is generated
     in by three recursive routines, gennetlist(), genportpins(),
     and gencalllist().  genportpins() now searches for net
     connections arbitrarily far down into the netlist hierarchy.
     gencalllist() resolves net numbers and removes empty calls
     as it traverses the hierarchy.
     Also:  Implemented recursive selection for finding network
     connectivity, so any net visible on the page can be queried
     for both a net name and highlighting the network.
     Also:  Implemented automatic redraw of text with parameters,
     so that parameters which are edited are immediately updated
     wherever they occur in the current top-level page.
     Also:  Thanks to Masao Kawamura (kawamura@mlb.co.jp) Media Lab.
     Inc., Japan, for tracking down several bugs, including a very
     bad one in which the admittedly dubious syntax
                a[x] = a[--x];
     acts like (the intended) 
                a[x] = a[x - 1];  x--;
     when compiled with -g (debug) option, but acts like
                x--; a[x] = a[x];
     when compiled without debug.  Also, temporary files have been
     reimplemented using mkstemp(), which is more secure than
     tempnam() and tmpnam().

178) v2.2.2		3/7/01
     Added significantly to the Python interface, including access to
     all elements on a page by dictionary key:value pair assignment.
     Added mouse button handling to the key binding, and changed the
     help window to reflect current key bindings.
     
177) v2.2.2		3/1/01
     Fixed a bug in the PostScript profile introduced with version 2.2,
     wherein string bounding boxes were computed incorrectly because
     user space was rotated.

176) v2.2.1		2/27/01
     Implemented code for user-defined key bindings; set up default
     key bindings to match all prior versions of xcircuit, and added
     python and script commands to bind and unbind keys with function
     definitions.

175) v2.2.1		1/30/01
     Cleaned up a lot of code, making the subroutine parameter lists
     consistent.  Added all the necessary function prototypes as a
     separate prototypes.h file, and removed unused parameters and
     unused variables.  Fixed a few heretofore unnoticed bugs in the
     process.  Thanks to Karim Kaschani (karim.kaschani@arcormail.de)
     for instigating this process, although I failed to find the bugs
     he was experiencing, and may have to revamp the label and
     parameter string concept (again!) to fix it.  Also, thanks to
     David Nicholls (davidallannicholls@hotmail.com) for a fix to
     nosprint(), although I didn't implement the rest of his
     thoughtfully provided code (and there was a lot of it!),
     preferring to leave much of it to Python scripts, which are
     coming soon.  Expanded the Python functions, but so far, still
     mostly experimental.

174) v2.2.1		1/22/01
     Completely redefined the command-line, including the startup
     script and .xcircuitrc file to be Python scripts, and embedded
     the Python interpreter into xcircuit.

173) v2.2.0		12/19/00
     Made additions to the command-line functions; also, declared
     the library inclusion commands "loadlibrary" and "loadfontencoding"
     to be obsolete, and changed the startup file "builtins.lps" to
     a startup script called "startup.script".  This makes a lot more
     sense.

172) v2.2.0		12/15/00
     Finally declared version to be stable enough for a non-beta
     release.  Revised methods for generating schematics and symbols
     in the circuit hierarchy.  Added (a modified) analoglib2.lps
     (circuit elements with parameters) to the "builtins" list.
     Fixed errors with sim and pcb netlist outputs, and cleaned up
     other minor things.  Object types are now "fundamental",
     "trivial", and "subschematic", as well as "normal" object,
     with the type depending partly on context.

Version 2.1b (July 2000 to December 2000)
----------------------------------------------------------------------
171) v2.1b9 (beta)	11/30/00
     Added full functionality for text blocks (carriage-return),
     kerning, scaling, and color change within labels.

170) v2.1b8 (beta)	11/11/00
     More fixes to the parameterization and netlist functions (thanks
     to Terry Hancock <hancock@earthlink.net> for help with testing
     and debugging this extraordinarily complex code).  Created a new
     PostScript prolog which not only fixes one very long-standing
     error, but also allows text blocks with carriage returns and
     kerning within text blocks.  These functions have not yet been
     reflected in the xcircuit code.

169) v2.1b7 (beta)	10/30/00
     Possible fix (again!) to the input focus problem:  Added an
     event handler to catch map and unmap events, so xcircuit should
     never attempt to set input focus on an unmapped window.  Also:
     extention to information labels allows labels to be broken into
     parts, i.e., "sim1:", "sim2:", etc., and extended the protocol
     of '%' sequences to include %r (carriage-return), %t (tab), and
     %% ('%' symbol, literal).

168) v2.1b7 (beta)	10/25/00
     Extended PCB netlist capability:  An info label beginning with
     "pcb:" now indicates the object name to be used in naming the
     pins.  The info label can contain all the %-escapes used for
     spice: and sim: info labels, and similarly, can use parameters
     with the Alt-p key sequence.  A new escape "%n" has been added
     which inserts the name of the object into the output.  The new
     pcb method can be used to explicitly define instances of an
     object (i.e., "cap_1", "cap_2") or to redefine a name locally
     ("inverter" becomes "1/6 74HC04", for instance).

167) v2.1b6 (beta)      10/23/00
     Fixed a fatal bug pointed out by Wilson Barroz
     (wbarroz@bol.com.br), in which a break statement got lost,
     effectively crashing xcircuit if a path was selected.

166) v2.1b6 (beta)	10/2/00
     Fixed problem with schematic capture on/off, so that pins and
     info labels are not displayed or saved when schematic capture
     has been turned off.  Fixed much of the problem with parameter
     strings, and added simple capability to apply a single parameter
     to multiple strings.

165) v2.1b5 (beta)	9/27/00
     Fixed problem with writing empty parameter strings to the output;
     also, fixed a fatal crash error when an entire string is a
     parameter and is deleted.  XCircuit now prevents the creation of
     parameters on a top-level page.

164) v2.1b5 (beta)	9/25/00
     More changes to bounding box calculation:  Everything was correct
     except for the top-level page offsets, which were calculated from
     the bounding box excluding schematic pins and info labels.  Thanks
     to Albert Ma <ama@cag.lcs.mit.edu> for pointing this out.

163) v2.1b4 (beta)	9/22/00
     Added menu option to read a script, which has the same
     functionality as the .xcircuitrc script (see #160, below).  Added
     "enable toolbar" and "enable xschema" to the command-line parser.

162) v2.1b3 (beta)	8/7/00
     Changes to fix problems caused by (158) below; the toolbar widget
     has finally been arranged to use multiple columns when there is
     not enough room for one.

161) v2.1b2 (beta)	8/4/00
     Added a "auto-fit" feature to automatically scale the drawing to
     fit the output page.  Also improved the behavior of the text-edit
     widget to delete a selection if it exists in lieu of deleting a
     character.

160) v2.1b2 (beta)	8/3/00
     Added a command-line window which accepts the same commands as
     the .xcircuitrc file.  This syntax will be expanded in the near
     future.  Added text hints to the toolbar buttons.  Added a
     user-definable bounding-box capability, and fixed the automatic
     bounding-box calculation to include spacing between pins and
     their text.

159) v2.1b1 (beta)	8/1/00
     Added a temporary file saving feature for recovery from crashes,
     sudden power-downs, or emergency exit.  Added a Control-C handler
     to execute graceful exits from a hung state.  Temporary files are
     doubly-protected by duplication before writing, so crashes during
     writes will not cause the (previous) backup to be lost.

158) v2.1b1 (beta)	7/31/00
     Minor changes for compilation using HP/UX's ANSI-C compiler; one
     major fix preventing loadlibrary() from calling composelib()
     with argument FONTLIB (composefontlib() should be used for that).
     Updated version number to 2.1 after Graham Murphy pointed out
     that xcircuit-2.0a11 crashes when reading 2.0b4 input:
     incompatibility is due to the reformatted label statement.
     Added warning if file version is greater than executable version.

Version 2.0b (October 1999 to July 2000)
----------------------------------------------------------------------
157) v2.0b4 (beta)	7/18/00
     Corrected the partial-text-selection algorithm;  new algorithm
     makes an insideness test between each string character and the
     select box.

156) v2.0b4 (beta)	6/28/00
     Corrected and enhanced the routine printing the cursor position
     and other information to the top of the window.

155) v2.0b4 (beta)	2/25/00
     Finished implementing ghostscript-rendered backgrounds.  Added
     a toolbar widget for easy access to common commands; this
     implementation is not yet complete.

154) v2.0b3 (beta)	2/13/00
     More bug fixes, covering several bugs which were introduced
     with the 2.0b series:  bbox calculation after copy & move
     across pages, segmentation fault when using middle mouse button
     to finish a text label, double-printing of non-ASCII characters
     in the output, confusion of grid and snap space functions from
     the menu, and incorrect path starting position saved when 1st
     path component is a spline or arc.

153) v2.0b3 (beta)	2/8/00
     Testing preliminary support for Ghostscript-rendered backgrounds.
     Bugfix to multiple library code (fatal error---adding new library
     writes over current user library).  Another bugfix---objcompare
     was not being called.

152) v2.0b3 (beta)	1/26/00
     Further implementation of multiple libraries, including loading,
     appending, and saving; specifying library pages from the rc
     file and the library file (specifically, "builtins.lps"), and
     a menu item for creating new library pages.  Currently there
     is no way to move objects from one library page to any other
     than the "User Library" (always defined as the last library
     page), which is also true for object creation using "M" or
     "Make Object".

151) v2.0b3 (beta)      1/13/00
     Fixed behavior of rotate and flip when acting on groups and
     extended behavior of both to cover all elements.  Fixed a bug
     in text select.  Added a library-list page to enable multiple
     libraries.  Fixed bounding box calculations so that the bounding
     box updates on every element change, and that update is reflected
     in the page directory, libraries, and library directory as
     required.

150) v2.0b2 (beta)     1/10/00
     More changes:  Added a page-list page to enable page reordering.
     Structural changes:  Put page parameters into separate structure
     and viewscale and pcorner parameters into the object structure.
     Now every object retains its zoom scale and position where last
     edited.  Also: some attempt to keep all/only variables required
     by the top-level window in "areastruct", so later it will be
     possible to implement multiple windows.  Also some bug fixes and
     other cleanups to the code, particularly the window/object
     resizing and centering.

149) v2.0b2 (beta)     1/5/00
     Numerous minor bug fixes, including automatic loading of derived
     fonts (previously handled incorrectly), proper drawing during
     scrollbar drags, and many fixes to the schematic capture system.
     Symbol-Schematic association redone so that the symbol and
     schematic do not have to have the same name.  Because this code
     is beta, this feature will not be backwardly compatible with
     previous versions.

148) v2.0b1 (beta)     11/2/99
     Changes to the Imakefile from Monte Bateman fix the reported
     problems with both the RPM creation, and with the make process
     not generating the proper subdirectories/installing files.
     Changes to the RPM spec file go along with these fixes.
     Support added for parameterized objects (full support for
     string parameters, partial implementation of integer
     parameters).

Version 2.0a (July 1998 to November 1999)
----------------------------------------------------------------------
147) v2.0a11 (alpha)   11/19/99
     Thanks to Mathieu Clar (mclar@ulg.ac.be) for finding that fix
     #144 can be overridden if environment variable LANG is set
     (e.g., to "french") and results in the same kind of program
     crash.  Now xcircuit sets LANG to "POSIX" internally.

146) v2.0a11 (alpha)   10/26/99
     After a number of partial fixes, and with the help of Raymond
     Burns (rayburns@eskimo.com), I fixed the keyboard input focus
     problem which plagued, especially, the WindowMaker window
     manager.  Neverthess, this problem refuses to go away, and
     this appears not yet to be the end of the story.

145) v2.0a10 (alpha)	6/25/99
     Changed behavior of wire drawing so that mouse button 3 deletes
     only the last segment of the line rather than deleting the
     whole line.  Added key macro "." to place a dot object or draw
     a dot at the cursor position.

144) v2.0a10 (alpha)    6/16/99
     Fixed a problem under non-US UNIX versions in which LC_NUMERIC
     is set to use a comma character as a numeric decimal point.
     Thanks to Lars Pettersson <larsp@oso.chalmers.se> and Paulo
     Mario dos Santos Dias de Moraes <paulo.mario@omninet.com.br>
     for helping to track down the problem  (6/24/99---changed from
     LC_NUMERIC to LC_ALL because there are apparently other things
     which also screw up file loads if not set to US or equivalent).

143) v2.0a10 (alpha)    6/14/99
     Added ISO-Latin5 (Turkish) on request from Recai Oktas at
     Ondokuz Mayis University <roktas@samsun.omu.edu.tr>.  Rewrote
     source to allow future inclusion of all ISO-LatinX encodings.

142) v2.0a10 (alpha)    5/25/99
     Finally got around to instantiating edit mode for paths.

141) v2.0a10 (alpha)	5/24/99
     In text edit modes, the backslash character brings up a
     page containing the font encoding, allowing entry of non-
     printing characters by simple point-and-click.  Use of
     backslash escape sequences is deprecated.  Also, fixed a
     bug which prevented compilation if MAKE_LGF was not defined
     in the Imakefile;  thanks to Zhengdao Wang for the bug fix
     <zhengdao@aphrodite.ee.umn.edu>.

140) v2.0a9 (alpha)	5/20/99
     Finally fixed the "actions not found" bug, which seems to
     be due to conflicting names of widget classes between Xaw
     and Xw, and changed the popup menu behavior to place the
     popup menu such that the cursor is initially on the title,
     not on the top button.   Also, added a README.ISOLatin2 file
     giving instructions on how to setup xcircuit for Latin2
     encoded output.

139) v2.0a9 (alpha)	5/17/99
     Changed menu button calling to the style adopted for
     the abandoned attempt at using Motif;  this style calls
     each menubutton by its Widget address rather than explicitly
     referring to the path created by panes, managers, etc., which
     can be toolkit-dependent.
     
138) v2.0a9 (alpha)	5/12/99
     Added font vectors for ISO-Latin2 encoding.  Also, reparied
     two fatal bugs (one involving the backslash character in
     text, the other involving large user library files), and
     reintroduced fix number 117 which somehow got lost.

137) v2.0a9 (alpha)	5/1/99
     Font-drawing mechanism completely overhauled and replaced
     with object-encoded fonts.  Added font encoding selection
     and a better interface for choosing font family, shape,
     and encoding.  Added PostScript output for generating
     ISOLatin1 encodings of standard PostScript fonts.  Fonts
     extended and heavily revised;  Courier, Helvetica, Times,
     and Symbol all have unique font vectors.

136) v2.0a8 (alpha)     5/6/99
     Zoltan Csahok <csahok@phase4.ujf-grenoble.fr> sent a bug fix
     for the problem in which some objects would be made "hidden"
     without being declared hidden in the library.

135) v2.0a8 (alpha)	4/14/99
     Paul Ortyl <ortylp@key.net.pl> sent a fix to allow keyboard
     entry of 8-bit characters (e.g., ISO-Latin1 or ISO-Latin2
     encoding).  Text vectors still reflect Adobe Standard
     encoding but hopefully this will be extended in the near
     future.  Added "W" key macro for popping up Write-Xcircuit
     dialog, at Paul's request.

134) v2.0a8 (alpha)	2/25/99
     Possibly just fixed the problematic window manager hints
     (WMHints) bug which has been plaguing the system.

133) v2.0a7 (alpha)     1/26/99
     Fixed a bug which was introduced into version 2.0a7 which
     prevents landscape-oriented files from being loaded back into
     xcircuit.

132) v2.0a7 (alpha)	12/18/98
     Fixed a problem wherein the FileList and Help widgets set
     their own fonts directly rather than getting them from the
     X Resource manager.  This causes XCircuit to crash when the
     computer does not have that particular font preinstalled, as
     noted by Niitsu Yoichiro <niitsu@amc.toshiba.co.jp>.

131) v2.0a7 (alpha)	11/20/98
     Fixed a long-standing bug by making gridspace and snapspace
     per-page variables, and permitting loading and saving these
     values in the output file.  At the same time, made these
     values type float for better resolution (preliminary to
     making all internal point values type float).

130) v2.0a7 (alpha)	11/19/98
     Added the "zoom-out" box suggested by ():
     the current area of the drawing window is made to fit into
     the area bounded by the box.  Added a button to the little
     square at the intersection of the horizontal and vertical
     scrollbars which acts like the "zoom view" function or "v"
     key macro.

129) v2.0a7 (alpha)	11/17/98
     Changed the behavior of the horizontal and vertical scrollbars
     so that some smooth scrolling is possible (that which can be
     accomplished by copying from the existing pixmap onto the
     window, without redrawing the whole window).

128) v2.0a6 (alpha)	11/16/98
     Made some fixes for Dale Scheetz <dwarf@polaris.net> to correct
     some odd behavior under Linux:  The help page has been shortened
     by 30 pixels to clear the Windows-95-like menu bar in fvwm95, and
     the "done" button has been moved to the top of the help window.
     Also, reduced argv[0] (the command from the command line) to its
     root before comparing to "xschema" and loading Xdefaults so that
     the program isn't confused by an appended pathname.

127) v2.0a6 (alpha)	11/12/98
     Added code suggested by Alireza Moini <moini@eleceng.adelaide.edu.au>
     to use environment variable "XCIRCUIT_LIB_DIR" for searching for
     libraries before trying the hard-coded BUILTINS_DIR as a last
     resort.

126) v2.0a6 (alpha)	10/4/98
     Cleaned up the code a little;  moved most of the menu button
     callbacks into a single file "menucalls.c", moved the file
     list widget code into "filelist.c", and moved the help window
     code into "help.c".

125) v2.0a6 (alpha)	10/4/98
     Fixed a long-standing problem with the simple help window in
     which it could not be repositioned.  In addition, I prevented
     the window from exceeding the computer screen boundary; when
     it does, the help window is truncated but can be "scrolled"
     in a simple sense by clicking the mouse in the help text
     window.

124) v2.0a5 (alpha)	9/27/98
     Fixed a problem apparently due to the above pixmap icon code
     which caused window managers to lose input focus for the whole
     xcircuit window.  This appears to be fixed at least for "i386"
     Linux systems.

123) v2.0a4 (alpha)	9/1/98
     Upon urging of Michael Le, I generated a built-in pixmap icon. 
     Also fixed what was apparently a long-standing bug in resizearea().

122) v2.0a3 (alpha)	8/23/98
     Fixed a bug pointed out by Geert Jordaens which limited library
     object names to 20 characters on file input.  Added flip-invariant
     text.  Added pad space to pin labels.  Began preliminary work on
     support for parameterized objects (beginning with some example
     code and a postscript prolog).  Added missing definitions for
     quarter and half space to xcircps2.pro.  Changed library files
     to take advantage of flip invariant text.
     
121) v2.0a2 (alpha)     8/11/98
     More "load file" fixing:  Modified the file loading routine so that
     library files can be loaded with "Read Xcircuit PS"; i.e., they are
     read like normal postscript files, and so can be read on the command
     line.  Only restriction is that they go into the user library, as
     they would if read as part of a regular xcircuit postscript file.

120) v2.0a2 (alpha)	8/10/98
     Fixed three LGF-related errors:  1) LGF files were imported whether
     "read" or "import" was selected, 2) labels needed to set property
     "pin", and 3) one of the connections in the definition for "TO"
     in lgf.lps needed to be moved.

119) v2.0a1 (alpha)	7/17/98
     Fixed some errors in setting filename and object name when loading
     or attempting to load files.  Fixed netlist error for connecting
     multiple instances of the same label on a page.  Got rid of
     string-sharing behavior for labels and malloc'd each copy instead.

118) v2.0a0 (alpha)	7/10/98
     Replaced Xcircuit version 1.7 with version 2.0, schematic capture
     system included.  Instantiating better management for version
     numbers, starting right here!

Version 1.6 (January 1998 to May 1998)
----------------------------------------------------------------------
May 1998

117) A few bugfixes and additions courtesy of Jo"rg Wunsch, including
     the addition of handling WM_DELETE_WINDOW client messages to
     allow the program to be closed by window manager controls.

116) Bug fixes from Paul Slootman for the 64-bit Alpha platform.

115) David DiGiacomo pointed out that the problem with the "make"
     halting under Solaris is the indeterminate exit status returned
     by the menudep program.  This has been fixed.

April 1998

114) Backspace can no longer be typed from the keyboard; instead,
     the keyboard Backspace acts like Delete, and a Backspace
     character can be inserted from the "Text" menu.

March 1998

113) Fixed a bug found by Cliff Koch <koch@cig.mot.com> in which
     xcircuit did not check if an object name consists entirely of
     numerals, which screws up the PostScript interpreter, which
     tries to treat it as an integer.
112) Fixed a bug found by Dale Scheetz <dwarf@polaris.net> in which
     a divide by zero would occur if a directory list was longer than
     the pixel height of the file read window.
111) Fixed the colormap problem by figuring out how to get XCircuit
     to gracefully install its own colormap on startup if the default
     map is full.

February 1998

110) Cleaned up the last typecasting problems in both the toplevel
     directory and Xw;  now should compile cleanly on all platforms
     without specifically setting CCOPTIONS and CDEBUGFLAGS in the
     Imakefile.
109) Changed the file loading routine so that Xcircuit automatically
     figures out whether the file is a PostScript or LGF file, so  
     that there are no longer two separate "load" commands in the
     File menu.
108) Added a number of "diglog" gates to the lgf.lps library;  fixed
     a bug reported by Jean-Luc Margot in which Imakefile refuses
     to create the lib directory.
107) Fixed more problems with the inch/cm conversion, bugs reported
     by Uwe Steinmann.  Made all displays report in cm when in cm
     gridstyle mode.  Also made the full page switch from letter
     size to A4 size when switching between inch and cm grids.

January 1998

106) Cleaned up typecasting problems which produced compile-time
    warnings.  Added "integral" sign to the alphabet vectors and
    revised the signal.lps library to include it.
105) Fixed longstanding bug in which the library (M)ove command would
    overwrite an object with another.
104) Fixed another bug found by Monte Bateman in which the system
    crashed when one tried to delete an object which had a dependency
    somewhere.
103) Fixed a bug found by Monte Bateman which was that the alternate
    color scheme flag did not toggle if the alternate color set was
    chosen from the .xcircuitrc file, and in which the catalog objects
    did not invert color and so became black-on-black or white-on-white.
    All catalog objects now have color DEFAULTCOLOR instead of color
    FOREGROUND, which makes more sense anyway.

Version 1.5 (May 1997 to December 1997)
----------------------------------------------------------------------

December 1997

102) Added a copyright "artistic license".  Changed filename
    of distribution tarfile to contain the version number
    (xcircuit-6.1.tar.gz).  Began posting xcircuit to
    sunsite.unc.edu.

November 1997

101) Fixed a bug found by Mark Cohen in which xcircuit loses track of
    the drawing area-to-window coordinate transformation whenever the
    window is resized.

October 1997

100) Fixed a long-standing problem with rhomboid-edit style for
    polygons.  The edit points can no longer spontaneously change
    during editing; they are fixed when the editing begins.  Added
    a "Rhomboid-A" style, which is similar to Manhattan style.
99) Used a global variable to keep track of which element is being
    edited so that it is unnecessary to swap elements to the end of
    the list in order to edit them.
98) Fixed "bug" to make RHOMBOID edit like NORMAL edit when there are
    only 2 points in the line (otherwise the second point gets dragged
    along with the first).
97) Added capability to "hide" objects if the name of the object ends
    with an ampersand ('&').
96) Added override of default colors and addition of new colors to the
    .xcircuitrc file definition.
95) Changed all color entries from type "short" to type "int" to allow
    xcircuit to run on 16- and 24-bit TrueColor visuals.

August 1997

94) Added "setmiterlimit" command to xcircps.pro to supress odd glitches
    in some renderers (gs and certain printers) when drawing paths.  Do
    these devices not have the (stated) default value of 10?
93) Finished adding color.  Added "scb" and "sce" (select-color-begin
    and -end) to PS profile.  "Opaque-stipple" style no longer selects
    "setgray" in postscript;  gray is selected by choosing the color
    gray.  Added "Inherited" color to list & based color scheme on the
    idea of "color inheritence".
92) Began adding color; separated definitions for color and stipple
    patterns, and set default color scheme to black-on-white.  Added
    stippled and colored rectangles to the Xw MenuBtn options for
    menu buttons.

July 1997:

91) Added path horizontal and vertical flipping;  fixed a long-standing
    bug to let user cancel a "make object" command during the object
    name popup prompt.
90) Stopped linking the filename to the page (object) name.
89) Enabled creation of paths through the use of the "join" function,
    and the ability to deconstruct the path into its constituent parts
    with the "unjoin" (keystroke "J") function.
88) Implemented paths (currently no editing capability).
87) Redesigned the edit and element creation modes to be consistent
    between polygons, arcs, and splines.  Arcs and splines can be
    edited when created by using mouse button 1 to cycle between
    control points.
86) Finished implementation of the revised "attach" command, including
    attachment to ellipses and to the chord on a closed arc.
85) Finished implementation of ellipses.
84) Implemented a dual color scheme which is switchable from the menu;
    no longer need XCircuit.ad.alt.  This is preliminary to adding full
    color.


May 1997:

83) Preliminary implementation of ellipses.  On the top level, ellipses
    are constrained to the x-y axes, but can be rotated as part of an
    object.
82) Changed the "attach" command to operate on *all* elements, so,
    e.g., a polygon end can be forcibly attached to a circle perimeter,
    and so forth.  Needs a little refining, plus effects should be
    duplicated for edit mode in "trackpoly", "trackarc", and
    "trackspline".
81) Finished implementing rotate and flip for all element types.
80) Implemented optional graphics double-buffering for very clean and
    quick refreshing of graphics.
79) Changed lists of elements from separate list for each element to
    one list of type (genericptr *), which is re-typecast to each
    element type.  Makes a number of things much cleaner
78) Got rid of type WIRE altogether; only has polygons.  No more "J"
    command for unjoin, but "j" joins polygons together and the
    algorithm is much cleaner than before and shouldn't be error-prone.
77) Gave arcs a line-segment representation, thus fixing the problem
    of filled arcs and paving the way for the "path" aggregate element.

Version 1.4 (August 1995 to March 1997)
----------------------------------------------------------------------

March 1997:

76) Made the scaling slightly more restrictive, to prevent xcircuit
    from exceeding bounds of type short int either in the window or
    in the page coordinate system.
75) Prevented drawing objects and labels outside of the window area
    in order to speed up rendering at close scales.
74) Better precision for Bezier curve rendering and object attachment.
73) Changed rendering to a stacked transformation matrix model.
    Speeds up rendering, makes rendering more accurate, and cuts
    down on code complexity.
72) Added Fixed-Width (Courier) font, made proper widths for both
    Times and Helvetica fonts;  implemented some different
    characters for each font.
71) Allow change of font, style, and justification for one or more
    selected labels.  Now deselects labels and arc/poly/spline after
    a style change.
70) Menu entries for text font, style and arc/poly/spline style change
    to reflect the status of the currently selected element.
69) Colormap allocation problem fixed by new CvtStringToPixel() routine
    which searches colormap for best approximation to color on a failed
    color allocation.
68) Wrote program to automatically generate the pathnames for button
    and cascade widgets in the pulldown menus.
67) Added polygon flip capability.

February 1997:

66) Expanded file selection widget to select and load multiple files,
    also to load (single or multiple) library .lps and analog .lgf files.
65) Added a file selection widget to the popup prompt when selecting
    a file to read.
64) Changed structure "select" to "selection" in order to get around
    problem compiling under Solaris.

January 1997:

63) Added an output page width and height per xcircuit page instead
    of the default 8.5" x 11" page that existed previously.  Output
    continues to be centered on the page.
62) Separated file names and page names.  These are linked by default,
    but can be separated by supplying a different page name, or by
    having a multi-page output.

December 1996:

61) Added inch/cm reporting for keyboard-adjusted snap spacing.

November 1996:

60) Fixed minor bugs in the DSC-PostScript: %%PageTrailer statement
    is not needed, and %%Trailer *must* come after all page commands
    including the "showpage".  Only the XCIRCsave restore statement
    should be between %%Trailer and %%EOF.
59) Output scale changed to default of 1.0, with the arbitrary
    pixel-to-PostScript-units constants bansished to the
    PostScript prologue.
58) Changed grid and snap spacing routines to display inches/cm
    instead of pixel coordinates.  Pixel coordinates are now
    entirely hidden from the user, who only sees things in
    inches or centimeters (with a default of inches, reported
    in fractions).
57) Position display now gives length of simple wires in addition
    to the cursor position.
56) Modified routine to print coordinates in fractional inches,
    to be able to generate a fraction from an arbitrary float.

October 1996:

55) Added code to prevent infinite recursion by attempting
    to place an object within itself.
54) Revised .lgf-file reading for an exact 1:1 correspondence
    of lgf names to the xcircuit library object names; made
    a library "lgf.lps" to cover the main analog gates, with
    some stylistic changes to the look of some of the gates.
53) Added capability to move objects around inside the
    libraries.
52) Added capability to make a copy of an object from
    either library page into the user library.
51) Added capability to delete objects from the library.

September 1996:

50) Cleaned up the Xw code so that it will compile on
    not-so-forgiving compilers;  also pruned out a
    few things that are not used by Xcircuit.
49) Finally wrote the routine to compare objects and
    avoid name conflicts.
48) Made PostScript output DSC-compliant, made file
    reading more robust to errors in the input file.
47) Started implementing library manipulation routines
    with library object rename; also added keystroke
    "c" from library mode for "copy".
46) Fixed some problems with catalog organization of
    objects.
45) Added multiple page loads and saves:  pages with
    the same name will be grouped together into one
    file.  EPS is not an option for multiple pages.
44) Made pages reallocatable, and added "Goto Page"
    option in menu for accessing page numbers > 10.
    New pages are automatically added to the pull-down
    menu.  Page names are the same as the object name.
43) Changed format of file ".xcircuitrc" and added
    ability to load libraries, override the default
    library load, load extra fonts, and set certain
    variables.
42) Added ability to load an arbitrary number of
    user-defined fonts.  New fonts are automatically
    added to the pull-down Font menu.
41) Changed embedded commands in text string to two bytes
    each, allowing future extension of embedded commands.
40) Added handling of Ctrl-A and Ctrl-E for moving
    to beginning and end of text, respectively

August 1996:

39) Added reading of ".xcircuitrc" in user's home
    directory as an additional library file (file
    takes same form as xcircuit or library files).
38) String text appears in message window immediately
    upon starting or editing a label, and disappears
    when done.
37) Fixed bugs in labels:  Rewrote routines so all
    labels start with a font-change specifier;
    removed "fontset" command from PostScript profile.

February 1996:

36) Differentiate between Writing and Overwriting
    a file (to prevent disasters!) and warn user
    when file is about to be overwritten.
35) Made all spline routines relative to SPLINESEGS
    and increased default SPLINESEGS to 20

January 1996:

34) Allow push and pop while an object or objects
    are selected and being dragged.
33) Added Rhomboid box editing in addition to
    Manhattan box edit.
32) Added arrow-attachment routine to align arrows
    with an underlying wire/polygon/spline/arc while
    dragging.
31) Changed selection mechanism (again) to a simple
    cartesian measure of distance from a line to
    the cursor position.
30) Added capability to flip, rotate, and snap-to 
    while an object is selected and being dragged.

August 1995:

29) Added vertical flipping capability using macro "F".
28) Added extended character set capability;
    both octal codes and LaTeX-like symbol names
    can be entered at the text prompt after a
    backslash.
27) Added lines to show spline control points and
    arc center during creation and editing.
26) Moved to PostScript prologue version 1.5, for
    which the order of parameters for polygon, arc,
    and spline are rearranged and made similar to
    each other.  Reading of v1.4 files is kept for
    backward compatibility.
25) Added rudimentary opaque-fill style for polygons,
    arcs, and splines.  "Vertical" alignment can only
    be controlled on the object level, using the X
    command (exchange).
24) Added "Manhattan Box Edit" style (default: ON)
    such that right angles in polygons are maintained
    during editing.

Version 1.3 (March 1995 to June 1995)
----------------------------------------------------------------------

May/June 1995:

23) Added backspace character handling in text.
22) One-step keystroke for dotted/dashed/solid line.
21) Allowed "join wires" to join wires and polygons.
20) Allowed "styles" options to operate on wires
    by automatically converting them to polygons.
19) Fixed bug in which Xw copy buffer overflowed
    string in sprintf() [solution: restrict
    "precision" of string thus: "%.149s"].
18) Added "edit (e)" command to menu.
17) Added capability to read Caltech tools' "analog"
    .lgf format files.

March 1995:

16) Added feature to report non-printing characters
    in a label, when editing.
15) Added Zoom Box function.
14) Changed copy behavior to allow multiple copies
    when button1 is used, and a single copy when
    button2 is used.
13) Fixed problems with pixel trash left behind by
    text editing.
12) Beeps when it doesn't write file due to filename
    problem.
11) Added countdown for multiple selections.
10) Added new cursor for edit mode.
9) Xcircuit *only* does auto delete/addition of the
   extension if extension is ".ps".  All other
   filename extensions are left alone.
8) Changed behavior so that request to load a file
   which does not exist will change the current
   file name, provided that current page is empty.
7) Changed library pages to be actual objects, made
   routine "composelib" to arrange the library objects
   based on height and width of each object, changed
   names of objects to xcircuit labels.
6) Fixed numerous malloc() bugs.
5) Added function to import xcircuit files into the
   current file as well as loading them into a page
   with page reset.
4) Added ability to change coordinate grid and
   report coordinates in inches (decimal and
   fractional) and centimeters as well as the usual
   pixel grid.
3) Added (simple) help screen
2) Added simple scrollbars on side and bottom, allowing
   click-to-pan.  Added global variables to save current
   GC state and foreground color.
1) Added 2 message widgets, one for name of file
   to edit, one for coordinates, one for information

----------------------------------------------------------------------
