=========
./changes
=========

This file summarizes the changes made to BLT in chronological order (with
the most recent changes being described at the end of this file). Note that
only the "unofficial" releases (8.x-unoff) are covered here; please read
the file "README" for an explanation of what the "unoff" suffix means.

################################################################################

---------------------
8.0a2-unoff (10MAR97)
---------------------

- started with the original BLT 2.1 distribution as found on Neosoft's
  ftp server (ftp://ftp.neosoft.com/pub/tcl/sorted/devel/BLT2.1.tar.gz)

- applied Robin's patches (version 10), which add Win32 support and fix
  several bugs

- applied Mumit's patches, which add Tcl/Tk 8.0 compatibility for most
  of BLT's widgets and commands

- fixed several commands that still were broken, e.g. "bgexec", "drag&drop",
  "vector", "htext" and "bltdebug"

- adopted Tk 8.0 code for "tile{button,checkbutton,radiobutton,label}"

- bumped version number (in the "blt_versions" array variable) to "8.0"
  for all BLT commands known to work with Tcl/Tk 8.0; this is true for
  all commands except for "watch" (currently leads to core dumps), and
  "tile{frame,toplevel,scrollbar}" (these seem to run fine under Unix/X11,
  but they're not yet using Tk 8.0 code; I'm not sure if Win32's native
  scrollbars can use an arbitrary background)

- added a new Tcl variable "blt_versions(BLT_patchlevel)", which contains
  the full version number (e.g., "8.0a2-unoff")

- disabled ITCL_NAMESPACES, because iTcl doesn't work with Tcl 8.0 yet;
  I was tempted to restore the traditional "blt_" prefix for BLT's commands,
  but then I decided not to do so; instead, I'll add support for Tcl's new
  namespace mechanism when it becomes available (until then, one can always
  use Tcl's "rename" command to add the "blt_" prefix "manually")

- fixed several demos; added multi-platform support for Unix (please see
  "unix/README" for details)

- added "demos/README", "demos/myblt", "demos/mydate" and "demos/pq"

- changed BLT's directory structure; there's now a "generic" directory
  which contains sources common to all supported platforms, and directories
  called "unix", "win" and "mac" which contain platform-specific stuff

- changed "configure{.in}" to support arbitrary configuration directories;
  please see "unix/README" for details

- fixed "bltGrPs.h"; "configure" can now find out if it's possible to inline
  the PostScript prologue in favour of loading it from "library/bltGraph.pro"
  at runtime

- fixed "bltGrPs.c" to pass the contents of "postScriptPrologue" correctly;
  this was a bug which just didn't show up because "bltGrPs.h" and "configure"
  were broken; Robin already fixed this for Win32

- added "license.terms" (funny, eh? :-)

- the makefiles for Win32 are not yet cleaned up; you'll have to hack them
  yourself in order to build BLT (I'll try to fix this in the next release;
  I'm sorry for this, but the demand for the Unix/X11 version was just too
  strong)

- there's no support yet for the MacIntosh, but I'm pretty sure that some
  of BLT's most important commands and widgets will also run under MacOS;
  I don't have a Mac, so I can't try it out myself, but if someone sends
  me the necessary makefiles and patches, I'll be more than happy to
  incorporate them into the next release

################################################################################

---------------------
8.0b1-unoff (12JUN97)
---------------------

[From now on, I'll tag the changes of the "unoff" releases as follows:

  - x: foo -- means that 'foo' affects only platform 'x'
  - x/y: bar -- means that 'bar' affects both platforms, 'x' and 'y'
  - All: bigbang -- means that 'bigbang' affects all supported platforms

I hope this helps you to better understand which new BLT bugs are to be
introduced on your particular system.   :-)
]

- Unix: updated "configure{.in}"; they're now compatible with/generated by
  version 2.12 of GNU's "autoconf" tool

- Unix: updated "cf/{install-sh,mkinstalldirs,config.{guess,sub}}"; boy,
  what was I impressed: I'd never even dreamed of my good ol' Linux box (so
  pretty and petite) ever being identified as such an important animal like
  an "i586-pc-linux-gnu"; thanks, RMS - you've just made a simple computer
  very happy!   ;^)

- Unix: changed "configure.in" to no longer add the flags "-I.. -I../generic
  -I../../generic -I../../../generic -I../../../../generic" to the CFLAGS in
  "config.BLT" (this wasn't exactly a bug, but sorta ugly, especially if you
  modified "config.BLT" and reconfigured BLT)

- Unix: added explicit dependencies to "unix/objs/Makefile.in"; some of the
  old-fashioned "make" utilities went kaputt because they couldn't find out
  how to generate the objects from the sources (VPATH and .c.o weren't enough;
  reminds me on "make love" => "make: don't know how to make love. Stop." :-)

- Unix: changed "configure.in" to make some educated guesses at where to
  find the Tcl/Tk headers and libraries; this algorithm is pretty nifty (see
  "unix/README" for details) and I encourage authors of other extensions to
  copy it (this, of course, includes Sun's Tcl/Tk team, because if they'd use
  this algorithm, it'd be no longer necessary to add "--with-tcl=..." when
  configuring Tk if Tcl was configured in a subdirectory of "../../tcl*/unix")

- Unix: changed "configure.in" to use Tcl's rules and tools for building
  shared libraries (especially useful for AIX, but many other Unices will
  benefit from this change as well); as a consequence, BLT's shared library
  will now be installed in $LIBDIR/shared (this is necessary as there are
  potentially systems which use the same suffix for both, static and shared
  libraries)

- Unix: added "-DNDEBUG" to CFLAGS when compiling shared objects; some systems
  couldn't resolve "__eprintf" (needed by "assert.h") when "load"ing BLT into
  an already running "wish"

- Unix: changed "Makefile.in" to build "bltwish" from "bltAppInit.o" instead
  of "bltAppInit.c"; additionally, bltwish now depends on the library's real
  name instead of its phony name (mainly because I like the idea of "make"
  reporting "Nothing to be done for `all'.")
 
- Unix: removed "unoff" from the library names; there are unfortunately
  still systems out there with a 14 character file name limit; c:\ongratultns

- Unix: changed the default for gcc's CFLAGS to "-O2 -fno-strength-reduce"
  (was: "-O3 -fno-strength-reduce"); however, the new "autoconf" script has
  its own opinion about gcc and sets CFLAGS automagically to "-g -O2" - AI at
  work...  of course, you're free to override this default by either passing
  "--with-cflags=..." to "configure" or by editing "config.BLT" and re-running
  the "configure" script

- Unix: changed the "Makefile.in"s to use "unix/cf/mkinstalldirs" instead of
  just "mkdir" to create the installation directories ("mkdir -p" isn't
  portable, and plain "mkdir" fails if one or more parent directories of
  a directory to be newly created are non-existent)

- Unix: changed "configure.in" to no longer leaving the search for a BSD
  compatible "install" program up to "autoconf"; it now looks for "ginstall"
  in a few well-known directories and uses "unix/cf/install-sh" if it can't
  find it there (I was pretty upset at "configure" trying to use the setup
  program of the StarOffice office suite, which happens to also being called
  "install" - oops!)

- Unix: changed "Makefile.in" to "strip bltwish" after installation (just in
  case you compiled it with -9.81 m/s^2)

- Unix: changed "Makefile.in"s to install BLT in $PREFIX/$BLT_PATCH_LEVEL
  instead of just $PREFIX; this makes it trivially easy to have several
  versions of BLT installed simultaneously in the same toplevel directory

- Unix: fixed a bug in bltBgexec.c (there was a reference to Tcl_Ckfree
  instead of just ckfree or BLT_ckfree; this prevented dynamic loading of
  BLT into a statically linked "wish" - at least under Linux)

- Unix: added a piechart widget (taken from the vu_tk41 package); it's raw
  like Sushi and certainly needs some severe hacking to be as powerful and
  flexible as the barchart and graph widgets (e.g., PostScript generation,
  markers, better configurable legend, Win32 port, etc.), but it's already
  good enough for simple things; there's no man page yet, but you can look
  at "demos/piechart" and "generic/bltPie.c" to see how it works for now

- Unix: sync'ed bltFrame.c with Tk 8.0b1's tkFrame.c

- Unix: fixed "bgexec" to work with the new event mechanism and TclFile
  instead of Tcl_File; while the solution seems to be quite elegant, it's
  really just a quick hack; it might be worthwhile to rewrite it (well,
  I think this should not happen before we drop support for older versions
  of Tcl, i.e. 7.5 and 7.6)

- Unix/Win32: fixed the demos so that they run under both, Unix and Win32
  (at least theoretically; not all BLT commands are available under Win32
  yet, but the "barchart", "graph", "spline", "bitmap" and "htext" demos
  should work; the "palette" demo should also work if you've enabled the
  "send" command using one of the packages found in the "win/unsupported"
  directory)

- All: moved the change log from "README" to its own file, "changes"

- All: replaced non-portable font definitions with their (hopefully) portable
  counterparts

- All: cleaned up the sources a bit (proper indentation and stuff); also
  deleted legacy code for Tk 3.x - the times, they are a'changing...

- All: created new directories "{generic,doc}/attic" and moved the sources
  and manual pages of the "bell" and "cutbuffer" commands to them; these
  commands are now obsolete, as Tk provides similar functionality by itself

- All: adopted Tk 8.0 code for the "tile{frame,toplevel}" widgets and
  bumped their version numbers in the "blt_versions" array variable to "8.0"

- All: renamed "tkScrollbar.c" to "bltScrollbar.c" for aesthetic reasons;
  it still uses Tk 4.x code, but it works flawlessly under Unix; since the
  native Win/Mac scrollbar widgets are unlikely to support tiles, I'm not
  particularly wild in updating this file; if you want to write portable
  code, you'd better stay away from the "tilescrollbar" widget (the other
  tile-widgets currently don't work under Win32 either, but there's at
  least a chance that this might change in the future)

- All: taught the "htext" widget to understand the new scrollbar protocol
  ("moveto fraction"; "scroll nr unit"); this was necessary as the Win32
  port of scrollbars only speaks the new protocol (even if a "set" command
  using the old syntax was issued beforehand)

- All: tried to fix a bug in function bltHtext.c::GetVisibleLines(), which
  reported an internal error ("First position not found") when scrolling
  past the end of a text in a htext widget; it now silently ignores the
  erroneous value returned by the scrollbar (certainly not a perfect
  solution, as the widget "flickers" when scanning past the end of the
  text, so this bug remains on the ToDo list for the time being)

- All: introduced two new global Tcl variables, namely "blt_version" and
  "blt_patchLevel", which contain the obvious information (please accept
  my apologies that I haven't already done this in 8.0a2-unoff when I
  created "blt_versions(BLT_patchlevel)" - I just didn't think of it...)

- All: introduced a global Tcl variable "blt_useTclNamespaces", which
  contains the value "0" if BLT is compiled without support for Tcl's new
  namespace mechanism, and "1" otherwise; this allows your Tcl scripts to
  figure out if they need to import BLT's namespace (1) or not (0) (see
  "demos/bltDemo.tcl" for an example); note that BLT from now on follows
  Tcl's standard implementation of namespaces and drops support for the
  one introduced by [incrTcl]

- All: introduced a global Tcl variable "blt_useTkNamespaces", which
  contains the value "1" if newly created BLT widgets are associated
  with a command living in a user-defined namespace (-> megawidgets),
  and "0" otherwise; since there's currently no equivalent function to
  iTcl's Itk_SetWidgetCommand(), this variable is currently set to "0"

- All: added support for Tcl's new namespace mechanism; if enabled in
  "generic/bltInt.h", all BLT commands live in their own namespace
  called "blt"; you can access them either as "blt::cmd", or you can
  issue a "namespace import blt::*" command and then access them
  without specifying any prefix (of course, you can also use the new
  "namespace inscope blt script" command; see Tcl's "namespace.n"
  man page for details, but remember that BLT's namespace is called
  "blt" and not "Blt" as written there)

- All: deleted all direct accesses to interp->result and replaced them
  with calls to Tcl_SetResult(), Tcl_AppendResult() and Tcl_GetStringResult()
  as suggested by Tcl 8.0b1's man page "SetResult.3"; needless to say
  that this was a pretty boring job, and I hope that I didn't manage
  to break too many things that used to work flawlessly before these
  changes (knock on wood! ;-)

- All: added some calls to Tcl_ResetResult(); Tcl's new treatment of
  interp->result is now quite a bit different than it used to be: a
  call to Tcl_ExprDouble() or a similar function will set the
  interpreter's object result, which means that a subsequent call
  to Tcl_AppendResult() will leave interp->result with a list
  containting both, the stringified result of Tcl_ExprDouble(), plus
  whatever was passed to Tcl_AppendResult(); I'm not sure if I really
  found all places where interp->result needs to be reset...

- All: created or updated several "README" files to reflect the changes
  or to describe the code contained in the various subdirectories

- All: fixed a bug in bltGrLine.c::ClosestEndPoint(): the inner loop
  missed the statement "pointPtr++;"; also updated the man page for
  the graph widget to reflect the new syntax of BLT >= 2.0 for the
  ".graph element closest" command (many thanks to Fabrice Pardo
  (fabrice.pardo@bagneux.cnet.fr) for reporting and fixing these bugs)

- All: fixed a bug in bltGrMarker.c::CoordinatesParseProc(): the array
  pointed to by markerPtr->coordArr could potentially be free()d twice,
  because it wasn't reset to NULL (many thanks to Greg McFarlane
  (gregm@baldric.pad.otc.com.au) for reporting and fixing this bug)

- All: modified code in bltGrLegd.c, bltGrMisc.c, bltTable.c and
  bltVector.c to operate on copies of the strings passed as parameters;
  this was necessary, because Tcl 8 keeps only a single copy of identical
  strings, so modifying a string directly could potentially break scripts

- All: fixed a bug in bltVector.c::ResizeVector() where resizing a
  vector could lead to wrong results because of a missing memcpy()
  (many thanks to Jay Kulpinski (jskulpin@eng01.psf.lmco.com) for
  reporting and fixing this bug)

- Win32/Mac: added "win/bltWinXDrawString.c" and "mac/bltMacXDrawString.c";
  both are stripped-down versions of Tk 4.6's tk{Win,Mac}Draw.c which only
  contain the necessary stuff to emulate X11's XDrawString() function
  required by "generic/bltText.c" (XDrawString() was desupported in Tk 8.0)

- Win32: fixed cut&paste-bug in "generic/bltGrPs.c", where I mistakenly
  referenced the non-existing (in this context, that is) "tkwin" variable

- Win32: fixed unresolved references to "tk{Active,Normal,Disabled}Uid"
  (I unfortunately overlooked that only functions get exported by the
  Tcl/Tk DLLs)

- Win32: fixed "makefile.vc"; it's still ugly, but it gets BLT up and
  running; I'll try to clean this up in a future release (very low prio,
  though)

- Win32: fixed text rotation; however, this still works only for 90,
  180 and 270 degrees (patch supplied by Robin)

- Win32: fixed bltWinButton.c to use Tcl_ServiceAll() instead of
  TclWinFlushEvents(), which was desupported in Tcl/Tk 8.0b1

- Win32: added "#include "blt.h" to bltWinMain.c to avoid compiler
  warnings

- Win32: added a directory "win/unsupported" containing 3rd party stuff
  which Winnypoos might find useful, but which I'm not actively maintaining;
  currently, there are two packages, "dde" and "comm", which are capable
  of emulating Tk's "send" command (needed by BLT's "drag&drop" facilities);
  a big thanks to Robin for sending me these packages, and an even bigger
  thanks to their authors (see the READMEs for details); a third package
  is called "tkbusy" and may emulate BLT's "busy" command to some extent

################################################################################

-------------------
8.0-unoff (31AUG97)
-------------------

- Unix: added calls to Tcl_StaticPackage() to bltAppInit.c for both,
  BLT and Tk; this is necessary to support multiple interpreters, so
  that these packages can be "load"ed into them

- Unix: bumped the version number of the "tilescrollbar" command in the
  "blt_versions" array variable to "8.0" for aesthetic reasons; please
  let me repeat: this widget works fine under Unix/X11, but you shouldn't
  use it if you intend to write portable code

- Unix: removed TclCreatePipeline() and TclFileForRedirect() from
  bltBgexec.c; I asked John Ousterhout to "unofficially" export these
  functions again, which he promptly did in Tcl 8.0b2 - thanks!

- Unix: fixed "configure{.in}"; this script should now also produce correct
  "Makefile"s for SunOS 4.x and BSD, which can't handle library names
  such as "libBLT8.0.so" (these systems prefer "libBLT80.so.1.0" instead);
  the necessary rules are derived from Tcl's "tclConfig.sh" (many thanks
  to Jim Ballantine (jwb@ulysses.homer.att.com) for reporting this bug)

- Unix: changed "configure{.in}" to install BLT in $PREFIX/blt$BLT_PATCH_LEVEL
  (the former installation directory, $PREFIX/$BLT_PATCH_LEVEL, made only
  sense if $PREFIX ended with ".../blt" - which is the default, but it can be
  overridden using "--with-prefix=" or "config.BLT"); so, if you configure
  BLT with "--prefix=/usr/local" and its patch level is "8.0-unoff", it'll
  be installed under "/usr/local/blt8.0-unoff", while the default installation
  directory is now "/usr/local/blt/blt8.0-unoff" instead of
  "/usr/local/blt/8.0-unoff"

- Unix: changed "config.BLT.in" to take more advantage of "configure"'s
  variables; also, fixed the comment which mentioned the wrong installation
  directory for BLT's scripts

- Unix: changed the order of include directories when checking the major
  release number of Tk, so that the correct tk.h file is included; if you
  have an old version of Tcl/Tk installed on your system, it might happen
  that "bltwish" will be linked against these libraries instead of those
  found by autoconf (see "unix/README" for what to do in this case)

- Unix/Win32: updated bltButton.[ch] and blt{Unix,Win}Button.c; these
  files now use Tk 8.0b2's code (well, I can remember to have done less
  boring things in my life...  :-)

- All: added the declaration of Blt_SafeInit() to blt.h

- All: fixed a bug in Blt_InitCmd() where specPtr->clientData was set to
  tkwin if it wasn't explicitly defined; when "load"ing BLT into a newly
  created interpreter, this caused BLT widgets created in this interpreter
  to appear in the main window of the application instead of the main
  window of that interpreter (many thanks to Anton Hartl (toni@devsoft.com)
  for reporting this bug)

- All: fixed a few bugs in bltWatch.c; however, the reason why the "watch"
  command didn't work was actually a bug in Tcl up to 8.0b1 (a missing pair
  of DECACHE_STACK_INFO()/CACHE_STACK_INFO() around CallTraceProcedure() in
  tclExecute.c)

- All: bumped the version number of the "watch" command in the "blt_versions"
  array variable to "8.0"

- All: modified and documented "demos/watch.tcl", now that the "watch"
  command is working again

- All: fixed another bug in bltVector.c which caused commands like
  "vectorname + 2" to fail; again, the reason for the failure was Tcl's new
  result management (and the fix a call to Tcl_ResetResult() at the right
  place)

- All: added a new option "-histmode" to the "graph" and "barchart" widgets;
  if set, bars will be drawn from the current minimum value of the y-axis
  to the actual y value, otherwise they're drawn from the "base line"
  of the y-axis to the actual y value (many thanks to Robert Wilhelm
  (robert@physiol.med.tu-muenchen.de) for suggesting this option); the
  new option is described in the "doc/{graph,barchart}.man" man pages

- All: fixed a few bugs in bltGrElem.c which caused a "graph" widget
  not to immediately being redrawn after certain configuration changes,
  such as "-barwidth", "-linewidth", "-stipple" etc. (many thanks to
  Greg McFarlane for reporting and fixing these bugs)

- All: fixed a bug in bltGrBar.c::DrawActiveBar() which could cause a
  segmentation fault after a few ".graph element activate elemname nr"
  commands on some systems (many thanks to Nancy Aten (nancya@cadence.com)
  for reporting this bug)

- All: changed the array variable "blt_versions" to live in BLT's default
  namespace ("blt"); you need to access it now as "blt::blt_versions(...)",
  as it is not exported by default
  *** POTENTIAL INCOMPATIBILITY ***

- All: changed "generic/bltInit.c" and "demos/bltDemo.tcl" to use the
  command "namespace eval blt" instead of just "namespace blt" (the
  keyword "eval" is required by Tcl 8.0b2+)

- All: created the directory "demos/html" which contains all of BLT's
  man pages in HTML format, so they can now be easily viewed using
  your favourite WWW browser (special service for our Win32 users :-)

- All: fixed a typo in "generic/bltInt.h"; Leo Schubert (leo@bj-ig.de)
  noted that USE_TCL_ALLOC should be USE_TCLALLOC instead (many thanks!)

- All: several changes in "generic/bltPie.c":
    - sorted configuration options in alphabetical order
    - added new command "cget" (as in Tk, it's a shortcut for
      "lindex [$widget configure -option] 4")
    - changed configuration classes "borderwidth" and "Borderwidth"
      to valid Tk options, i.e., "borderWidth" and "BorderWidth"
    - added a new alias "-bg" for "-background"
    - added a new alias "-bd" for "-borderwidth"

- All: changed "demos/piechart" to use the new "cget" command

- All: added a man page for the "piechart" widget (in both .man and .html
  format); this change also affects "{unix/doc,doc/html}/Makefile"; note
  that I didn't test the piechart widget too carefully, so I wouldn't be
  surprised if some options (e.g., the callback stuff) don't work yet

- All: added "library/bltGraph.tcl.z2" (many thanks to Massimo Morin
  (mmorin@markov.math.unipd.it) for making this available); this version
  can also zoom the x2/y2 axes, but this currently only works if the
  graph is not inverted (you can easily see what happens otherwise by
  starting "demos/barchart3" and then trying to zoom); as soon as this
  bug is fixed, the file will eventually replace bltGraph.tcl

- Win32: added a call to Tcl_StaticPackage() to bltWinAppInit.c; BLT
  can now be "load"ed into newly created interpreters

- Win32: added Robin's implementation of XClearArea(), which now makes
  the "piechart" widget available under Windows

- Win32: replaced "win/unsupported/dde" with Robin's new version (1.1)

- Win32: changed macro in "generic/bltUtil.c" to define ckcalloc() if
  USE_TCLALLOC==1

################################################################################
