Xcircuit v1.7
----------------------------------------------------------------------

Changes from v1.3
----------------------------------------------------------------------

March 1995:

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

May/June 1995:

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

Changes from v1.4
----------------------------------------------------------------------

August 1995:

24) Added "Manhattan Box Edit" style (default: ON)
    such that right angles in polygons are maintained
    during editing.
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).
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.
27) Added lines to show spline control points and
    arc center during creation and editing.
28) Added extended character set capability;
    both octal codes and LaTeX-like symbol names
    can be entered at the text prompt after a
    backslash.
29) Added vertical flipping capability using macro "F".

January 1996:

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

February 1996:

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

August 1996:

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

September 1996:

40) Added handling of Ctrl-A and Ctrl-E for moving
    to beginning and end of text, respectively

41) Changed embedded commands in text string to two bytes
    each, allowing future extension of embedded commands.

42) Added ability to load an arbitrary number of
    user-defined fonts.  New fonts are automatically
    added to the pull-down Font menu.

43) Changed format of file ".xcircuitrc" and added
    ability to load libraries, override the default
    library load, load extra fonts, and set certain
    variables.

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.

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.

46) Fixed some problems with catalog organization of
    objects.

47) Started implementing library manipulation routines
    with library object rename; also added keystroke
    "c" from library mode for "copy".

48) Made PostScript output DSC-compliant, made file
    reading more robust to errors in the input file.

49) Finally wrote the routine to compare objects and
    avoid name conflicts.
    
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.

October 1996:

51) Added capability to delete objects from the library.

52) Added capability to make a copy of an object from
    either library page into the user library.

53) Added capability to move objects around inside the
    libraries.

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.

55) Added code to prevent infinite recursion by attempting
    to place an object within itself.

November 1996:

56) Modified routine to print coordinates in fractional inches,
    to be able to generate a fraction from an arbitrary float.

57) Position display now gives length of simple wires in addition
    to the cursor position.

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

59) Output scale changed to default of 1.0, with the arbitrary
    pixel-to-PostScript-units constants bansished to the
    PostScript prologue.

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.

December 1996:

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

January 1997:

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.

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.

February 1997:

64) Changed structure "select" to "selection" in order to get around
    problem compiling under Solaris.

65) Added a file selection widget to the popup prompt when selecting
    a file to read.

66) Expanded file selection widget to select and load multiple files,
    also to load (single or multiple) library .lps and analog .lgf files.

March 1997:

67) Added polygon flip capability.

68) Wrote program to automatically generate the pathnames for button
    and cascade widgets in the pulldown menus.

69) Colormap allocation problem fixed by new CvtStringToPixel() routine
    which searches colormap for best approximation to color on a failed
    color allocation.

70) Menu entries for text font, style and arc/poly/spline style change
    to reflect the status of the currently selected element.

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.

72) Added Fixed-Width (Courier) font, made proper widths for both
    Times and Helvetica fonts;  implemented some different
    characters for each font.

73) Changed rendering to a stacked transformation matrix model.
    Speeds up rendering, makes rendering more accurate, and cuts
    down on code complexity.

74) Better precision for Bezier curve rendering and object attachment.

75) Prevented drawing objects and labels outside of the window area
    in order to speed up rendering at close scales.

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.

Changes from v1.5
----------------------------------------------------------------------

May 1997:

77) Gave arcs a line-segment representation, thus fixing the problem
    of filled arcs and paving the way for the "path" aggregate element.

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.

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

80) Implemented optional graphics double-buffering for very clean and
    quick refreshing of graphics.

81) Finished implementing rotate and flip for all element types.

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

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.

July 1997:

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.

85) Finished implementation of ellipses.

86) Finished implementation of the revised "attach" command, including
    attachment to ellipses and to the chord on a closed arc.

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.

88) Implemented paths (currently no editing capability).

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.

90) Stopped linking the filename to the page (object) name.

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.

August 1997

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.

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

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?

October 1997

95) Changed all color entries from type "short" to type "int" to allow
    xcircuit to run on 16- and 24-bit TrueColor visuals.

96) Added override of default colors and addition of new colors to the
    .xcircuitrc file definition.

97) Added capability to "hide" objects with the "H" key if the object
    has dependencies (i.e., cannot hide it if it would not be recoverable).

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

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.

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.

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.

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.

Changes from v1.6
----------------------------------------------------------------------

January 1998

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.

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;  also another bug in PostScript output of arcs, which
    was unknowingly broken since paths were implemented.

105) Fixed longstanding bug in which the library (M)ove command would
    overwrite an object with another.

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.

February 1998

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.

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.

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.

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.

March 1998

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.

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.

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.

----------------------------------------------------------------------
Bugs to fix ASAP:

  1) Colormap installation may be incomplete if xcircuit runs out
     of colors in the middle of running the program.

  2) Color and Page menus run off the top and bottom of the screen
     if the lists get to be too long.

  3) An object should not be allowed to be copied directly on top
     of itself (this can be a common occurrence and is confusing
     to the user and difficult to detect).

   There are no more known fatal bugs in XCircuit.  Only annoying
   "features" (see below).

----------------------------------------------------------------------
Features to add or change:

1) Edit for paths

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) Finish extended character set vectors (time consuming).

6) Completely duplicate program functions between menu buttons and
   keyboard macros.

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) Make transparent stipple patterns device independent by
   implementing as Pattern types in PostScript level 2.

10) switch to all-floating-point internal units?

11) Multiple library pages

12) Comprehensive "Undo" function.

13) Comprehensive dependency list for allowing/disallowing
   menu and keyboard functions.

14) Schematic capture system for circuits (this is a massive
   undertaking).

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

16) Edit-in-place for objects

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