Xcircuit v1.6
----------------------------------------------------------------------

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

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

1) Rhomboid edit sometimes swaps points when passing
   through the colinear plane; also, Rhomboid edit
   on a 2-point line should not move the 2nd point

2) Cannot grab on interior of any filled elements:
   Maybe best left as a "feature"?

3) Library (M)ove command sometimes copies library
   object inst overtop next object in the list.

----------------------------------------------------------------------
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) Proper cornering on dot/dashed boxes (maybe easier to
   do in xcircuit and enforce WYSIWYG in PostScript?)

7) Read other graphics formats (Matlab 4.x may not be so
   difficult)

8) Make transparent stipple patterns device independent by
   implementing as Pattern types in PostScript level 2.

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

10) Multiple library pages

----------------------------------------------------------------------
Features to add (difficult or time-consuming):

1) Comprehensive "Undo" function.

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

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

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

5) Edit-in-place for objects
----------------------------------------------------------------------
