Xcircuit v2.5.x ---------------------------------------------------------------------- Changes from v2.4.x to v2.5.x (November 2001 to present) ---------------------------------------------------------------------- 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. Changes from v2.3.x to v2.4.x (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. Changes from v2.2.x to v2.3.x (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 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 ). Also: changed undelete() to xc_undelete() to avoid conflict with OpenBSD/FreeBSD system calls. Thanks to Mike Andrews 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 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 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 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 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, ). 182) v2.3.1 6/04/01 Fixed an error caught by John Livsey () 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 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. Changes from v2.1b to v2.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. Changes from v2.0b to 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 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 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. Changes from v2.0a to 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). Changes from v1.7 (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 and Paulo Mario dos Santos Dias de Moraes 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 . 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 . 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 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 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 . 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 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 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! Changes from v1.6 ---------------------------------------------------------------------- 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 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 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. Changes from v1.5 ---------------------------------------------------------------------- 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. Changes from v1.4 ---------------------------------------------------------------------- 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. Changes from v1.3 ---------------------------------------------------------------------- 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 ---------------------------------------------------------------------- Bugs to fix ASAP: 1) Position parameters have serious consequences for netlisting, in that it can cause an object's netlist to change on a per-instance basis. This should be either dealt with or prevented. 2) Postional parameters cause incorrect redisplay during polygon/path edit (display reverts to original value). Deletion of points during polygon edit must not delete parameterized points, and insertion of points must renumber parameterized points. 3) Substring selection in labels is backwards when the "flip invariance" feature has rotated the text string 180 degrees. 4) Colormap installation may be incomplete if xcircuit runs out of colors in the middle of running the program. 5) Color and Page menus run off the top and bottom of the screen if the lists get to be too long. 6) Due to object definitions being outside the page descriptions, Ghostview can't change between pages arbitrarily (only forward or backward by consecutive pages). 7) Mechanism to allow area zooms during various modes is broken, and should be fixed. ---------------------------------------------------------------------- Features to add or change (schematic-capture-specific): 1) Make gate I/O pins translate to chip pin numbers for PCB netlists. 2) New element type: array (especially for schematic drawing) /xyarray { begingate /arrayproc exch def /dy exch def /dx exch def /ny exch def /nx exch def 1 1 nx { 1 1 ny { arrayproc exec 0 dy translate } for dx dy ny mul neg translate } for endgate } def ---------------------------------------------------------------------- Features to add or change (general): 1) Complete the Python interface 2) "Attach" should work in many more modes than it does. 3) Use heuristics to improve selection mechanism 4) Some better handling of over/under arrangements of elements 5) Vectored font output in PostScript. 6) Completely duplicate program functions among menu buttons, keyboard macros, and command line entry. 7) Proper cornering on dot/dashed boxes (maybe easier to do in xcircuit and enforce WYSIWYG in PostScript?) 8) Read other graphics formats (Matlab 5.x, OrCAD, CIF, xfig, gnuplot, ...) 9) Switch to all-floating-point internal units? 10) Comprehensive "Undo" function. 11) Comprehensive dependency list for allowing/disallowing menu and keyboard functions. ----------------------------------------------------------------------