OSDN Git Service

Initial revision
[pf3gnuchains/pf3gnuchains3x.git] / itcl / CHANGES
1
2  [incr Tcl] - CHANGE LOG
3 ==========================================================================
4  ----------------------- CHANGES FROM itcl-1.5 --------------------------
5 ==========================================================================
6
7  Release itcl-2.0 provides a new syntax for defining classes.  The
8  new syntax is accessed using the new "itcl::class" command.  For the
9  time being, the old syntax will be supported via the old "itcl_class"
10  command, but support for this will be phased out over time.
11
12  Because both syntaxes are supported, the new version is "backward
13  compatible" with the previous itcl-1.5 release.  However, there are
14  some semantic changes that may break existing scripts.  These are
15  listed in detail in the section "INCOMPATIBLE CHANGES".
16
17
18  CATALOG OF NEW COMMANDS
19 --------------------------------------------------------------------------
20  Following is a brief catalog of new commands available in this release.
21
22  == Tcl with Namespaces =================================================
23
24     delete namespace name ?name...?
25
26       Deletes one or more namespaces, destroying all commands, variables,
27       and child namespaces within it.
28
29
30     ensemble name {
31         option optName arglist body
32         option optName arglist body
33         ...
34         ensemble optName {
35             option subOptName arglist body
36             option subOptName arglist body
37             ...
38         }
39     }
40
41       Adds options to an ensemble called "name".  If the ensemble does
42       not already exist, it is created automatically.  An "ensemble" is
43       a toplevel command that groups a collection of sub-commands.  For
44       example, the usual Tcl "info" command is an ensemble with options
45       like "globals", "level", "tclversion", etc.
46
47       Ensembles are good for two reasons.  First, new options can be
48       integrated in without modifying any source code or "switch"
49       statements.  For example, [incr Tcl] adds the "info classes"
50       and "info objects" commands simply by adding options to the
51       "info" ensemble.  Second, error messages are generated automatically
52       by the ensemble mechanism.  Try invoking "info" with no options
53       and see the result.
54
55       Each option declaration is just like a Tcl proc declaration,
56       with an option name, arglist and body.  Ensembles can also
57       contain sub-ensembles with more options.
58
59
60     import add name ?name...? ?-where pos...?
61     import all ?name?
62     import list ?importList?
63     import remove name ?name...?
64
65       Used to manipulate the "import" list for the current namespace.
66       When one namespace imports another, it gains access to all of
67       its public commands/variables as if they were part of the
68       same namespace.  In other words, one namespace can be integrated
69       seamlessly into another by adding it to the import list of the
70       other namespace.  By default, each namespace imports its parent,
71       so most namespaces import the global scope in some fashion.
72
73       The form "import list" is used to query or set the import list
74       for the current namespace.  The form "import all" returns the
75       namespace search path that is consulted when commands/variables
76       are accessed.
77
78
79     info context
80
81       Returns the current namespace context.  The global namespace
82       context is reported here as "", so it is easy to build
83       namespace paths like this:
84
85           set path "[info context]::name"
86
87
88     info namespace all ?pattern?
89
90       Returns a list of namespaces found in the current namespace
91       context, whose names match an optional string pattern.  This
92       includes children of the current namespace, and children of
93       all imported namespaces.
94
95
96     info namespace children ?name?
97
98       Returns a list of child namespaces for namespace "name",
99       or for the current namespace if "name" is not specified.
100
101
102     info namespace parent ?name?
103
104       Returns the parent namespace for namespace "name", or
105       for the current namespace if "name" is not specified.
106
107
108     info namespace qualifiers string
109
110       Parses a string of the form "namesp::namesp::name", and returns
111       the leading "namesp::namesp" scope qualifiers.
112
113
114     info namespace tail string
115
116       Parses a string of the form "namesp::namesp::name", and returns
117       the trailing "name" element.
118
119
120     info protection ?-command? ?-variable? name
121
122       Returns the protection level for an element.  By default, "name"
123       is treated as a command name, but the "-command" or "-variable"
124       flags can be used to request a specific treatment.
125
126
127     info which ?-command? ?-variable? ?-namespace? name
128
129       Reports the full namespace path (e.g., "::namesp::namesp::name")
130       for an element.  By default, "name" is treated as a command name,
131       but the "-command", "-variable" and "-namespace" flags can be
132       used to request a specific treatment.
133
134
135     namespace name ?-local? ?-enforced val? ?--? ?commands?
136
137       This is the usual mechanism for creating a namespace and defining
138       elements within it.
139
140       If namespace "name" does not exist, it is created automatically.
141       The namespace name may include a full namespace path (e.g.,
142       "namesp::namesp::namesp").  During the search for this namespace,
143       all imported namespaces are consulted.  If the "-local" flag is
144       specified, then the search is restricted to the local namespace;
145       this prevents against accidentally importing a namespace if the
146       intent is to create a child namespace.
147
148       If the "-enforced" flag is specified, then "val" is treated as a
149       boolean value; if true, then command/variable enforcement is
150       turned on for this namespace.  Each time a new command is
151       referenced within the namespace, Tcl automatically calls a
152       procedure:
153
154           enforce_cmd <name>
155
156       with the <name> of the command that is about to be executed.  The
157       "enforce_cmd" proc can return an error, and access to that command
158       will be denied.  It can return another command name, or a more
159       specific namespace path, and that command will be used instead.
160       Or it can return "", and command lookup will continue via the
161       normal namespace rules (i.e., in local scope, imported namespaces,
162       etc.).
163
164       Each time a new variable is referenced within an enforced
165       namespace, Tcl automatically calls a procedure:
166
167           enforce_var <name>
168
169       with the <name> of a global variable that is being referenced.
170       The "enforce_var" proc can return an error, and access to that
171       variable will be denied.  It can return another variable name,
172       or a more specific namespace path, and that variable will be
173       used instead.  Or it can return "", and variable lookup will
174       continue via the normal namespace rules (i.e., in local scope,
175       imported namespaces, etc.).
176
177       Note that command/variable enforcement done at the Tcl language
178       level can be slow.  There is also a C language interface for
179       the same functionality, which offers much better performance.
180
181       The namespace is first found and updated with whatever flags were
182       specified.  After that, if a "commands" string was specified, it
183       is executed in the context of the namespace.
184
185
186     public command ?arg arg...?
187     protected command ?arg arg...?
188     private command ?arg arg...?
189
190       These commands attach a particular protection level to whatever
191       commands or variables are created while executing the specified
192       command.  They are used in conjunction with commands like
193       "proc" and "variable" to create public/protected/private elements.
194
195
196     scope string
197     code ?-namespace name? command ?arg arg ...?
198     @scope namespace value
199
200       The "scope" command takes a string and encodes it into an "@scope"
201       declaration.  The "code" command performs a similar function,
202       but accepts multiple arguments and is usually used to wrap up
203       code fragments.  The "@scope" declaration keeps a value (like a
204       variable name or code fragment) together with its context
205       namespace.  It can be executed like an ordinary command:
206
207         set cmd {@scope :: puts}
208         $cmd "hello world!"
209
210       or used as an ordinary variable name:
211
212         set var {@scope :: auto_path}
213         lappend $var /usr/local/mylib
214
215       The difference, however, is that an "@scope" value bypasses the
216       usual access protections and guarantees that values have the
217       proper scope.
218
219       Ordinary variable names refer to variables in the global
220       namespace.  Ordinary code fragments are usually interpreted
221       by extensions like Tk in the global namespace.  The "scope"
222       and "code" commands are used to wrap up variable names and
223       code fragments to preserve the namespace context.  For example:
224
225         namespace foo {
226             private variable state 0
227             private proc show_state {mesg} {
228                 global state
229                 puts "$mesg: $state"
230             }
231
232             checkbutton .cb -text "Toggle" \
233                 -variable [scope state] \
234                 -command [code show_state "current state"]
235
236             pack .cb
237         }
238
239       In this example, the checkbutton is tied to the variable
240       "foo::state" and executes the command "foo::show_state"
241       whenever it is pressed.
242
243       When a Tk widget uses commands and variables within a
244       namespace, these names should be wrapped up as scoped
245       values, as shown above.
246
247
248     variable name ?value?
249       Creates a variable called "name" and initializes it to an optional
250       value.  This is normally used in conjunction with public, protected
251       and private commands to declare variables within a namespace:
252
253           namespace foo {
254               public variable x 0
255               private variable y 1
256           }
257
258       If the variable "name" already exists, it updated to have
259       the protection level that is currently active.
260
261
262  == Tk with Namespaces ==================================================
263
264     bind...
265
266       Recognizes and expands the following fields within command
267       strings:
268
269         %q  =>  Replaced with the fully-qualified access command
270                 for the widget receiving the event.  For example,
271
272                     namespace foo {
273                         namespace bar {
274                             button .b -text "Hello World!"
275                         }
276                     }
277
278                 The fully-qualified access command for this widget
279                 is "::foo::bar::.b".  The "%q" field should be used
280                 instead of "%W" as the widget access command:
281
282                     bind Button <Key-Return> "%q flash; %q invoke"
283
284
285         %M  =>  Replaced with the window path name of the mega-widget
286                 containing the window receiving the event.  For example,
287                 if an "entryfield" mega-widget ".x" contains an entry
288                 widget ".x.entry", bindings added to ".x.entry" will
289                 replace "%M" with ".x".  This allows generic bindings
290                 to be added to component widgets which affect the
291                 mega-widget as a whole.
292
293                 For this to work properly, mega-widget packages must
294                 register their component widgets using Itk_SetMegaWidget().
295
296
297     winfo command window
298
299       Returns the fully-qualified access command for the widget "window".
300       This is equivalent to the "%q" field in bindings, and is useful
301       in procedures where the only the window name is known:
302
303         foreach kid [winfo children $win] {
304             [winfo command $kid] configure -bg blue
305         }
306
307
308     winfo megawidget window
309
310       Returns the window path name of the mega-widget containing "window"
311       as a component.  This is equivalent to the "%M" field in bindings,
312       and is useful in procedures where only the component window name
313       is known.  For this to work properly, mega-widget packages must
314       register their component widgets using Itk_SetMegaWidget().
315
316
317  == [incr Tcl] ==========================================================
318
319     delete class name ?name...?
320
321       Deletes one or more object classes.  Deleting a class also
322       causes all derived classes, and all objects belonging to the
323       class, to be deleted as well.
324
325
326     delete object name ?name...?
327
328       Deletes one or more objects.  If the access command for an
329       object resides in another namespace, then the full namespace
330       path should be used:
331
332           delete object foo::bar::x
333
334
335     info classes ?pattern?
336
337       Returns a list of all classes in the current namespace
338       whose names match an optional string pattern.
339
340
341     info objects ?-class className? ?-isa className? ?pattern?
342
343       Returns a list of all objects whose names match an optional
344       string pattern.  If the "-class" option is specified, then
345       the list is further restricted to those objects whose
346       most-specific class is "className".  If the "-isa" option
347       is specified, then the list is further restricted to those
348       objects who belong to class "className".
349
350
351     itcl::class name { definition }
352
353       Used to create define a new class "name".  The "definition"
354       commands include:
355
356           inherit baseClass ?baseClass...?
357
358           constructor arglist ?init? body
359           destructor body
360
361           method name ?arglist? ?body?
362           proc name ?arglist? ?body?
363           variable name ?init? ?config?
364           common name ?init?
365
366           public command ?arg arg...?
367           protected command ?arg arg...?
368           private command ?arg arg...?
369
370       Note that the constructor statement has changed to include an
371       optional "init" argument.  This is an initialization statement
372       that can be used to call out base class constructors.  If it
373       is not included, base classes are constructors are invoked
374       automatically without any arguments.
375
376       The "variable" statement is now used to create object-specific
377       data members.  The "common" statement is used to create "common"
378       variables, which are global within the class namespace.  Both
379       types of variables can be designated public, protected or
380       private.
381
382
383     itcl::body class::func arglist body
384
385       Used to define the body of a class member function outside of
386       the class definition.  If "body" declarations are kept in a
387       separate file, they can be sourced again and again to test
388       changes as bugs are fixed.  If an "arglist" is specified in
389       the class definition, then the "arglist" for the body definition
390       must have the same meaning.
391
392
393     itcl::configbody  class::option body
394
395       Similar to the "body" command, but used to define the configuration
396       code for a public variable.
397
398
399     itcl_class name { old-style-definition }   \__ backward compatibility
400     itcl_info option ?arg arg...?              /
401
402
403  == [incr Tk] ===========================================================
404
405     itcl::class name {
406         ...
407         itk_option define -switch resName resClass initVal ?configCode?
408     }
409
410       The "itk_option define" command is recognized at the level of
411       the class definition.  It defines a new mega-widget option with
412       the given switch name and X11 resource database names.  The
413       "initVal" is used as a last resort to initialize the option
414       if no other value can be queried from the X11 resource database.
415       If "configCode" is specified, it is executed whenever the option
416       is modified via the "configure" method.  The "configCode" can
417       also be specified outside of the class definition via the
418       "itcl::configbody" command.
419
420
421   Methods provided by itk::Archetype base class:
422
423     component
424     component name
425     component name command ?arg arg...?
426
427       Used to query or access components within a mega-widget.  With
428       no arguments, this returns a list of component widgets that
429       are accessible in the current scope.  Note that component
430       widgets obey any public/protected/private access restriction
431       that is in force when the component is created.
432
433       With one argument, this returns the window path name for a
434       component with the symbolic name "name".
435
436       In any other case, the remaining arguments are invoked as a
437       method on the component with the symbolic name "name".
438
439
440     configure
441     configure option
442     configure option value ?-switch value...?
443
444       Works just like the usual Tk configure method, but for mega-widgets.
445       Here options are really composite widget options.  When set, they
446       trigger changes to many different internal components, and may
447       invoke many bits of "configCode" for options defined by "itk_option
448       define".  However, there is only one value for the composite option.
449
450
451     cget option
452
453       Works just like the usual Tk cget method, but for mega-widgets.
454       Returns the current value for a composite widget option.
455
456
457     itk_component add name {create-commands} ?{option-commands}?
458
459       Adds a new mega-widget component with the symbolic name "name".
460       Invokes the "create-commands" to create the component, and
461       invokes "option-commands" to integrate its options into the
462       composite list.  By default, no options are integrated.  Options
463       may be added using the following commands:
464
465           keep option ?option...?
466           ignore option ?option...?
467           rename oldswitch newswitch resname resclass
468           usual ?tag?
469
470
471     itk_component delete name ?name...?
472
473       Deletes an existing mega-widget component with the symbolic
474       name "name".  The component will still exist as a widget,
475       but it will no longer be accessible as a component for this
476       mega-widget.  Any options associated with the component are
477       removed from the composite list.
478
479       Note that you can destroy a component like any ordinary widget:
480
481           destroy .foo.bar.b
482
483       Components automatically detach themselves from their mega-widget
484       parent when destroyed, so "itk_component delete" is not used
485       very often.
486
487
488     itk_option add option ?option...?     \__ class::option
489     itk_option remove option ?option...?  /   component.option
490
491       Adds or removes an option from the composite option list for
492       a mega-widget.  These commands cannot be used at the level of
493       the class definition; they must be invoked for a particular
494       mega-widget.  They usually appear in the constructor for a
495       mega-widget class, to add or redefine options in components
496       created by a base class.  For example, the base classes
497       itk::Toplevel and itk::Widget keep only the bare minimum
498       options for their "hull" component:  -background and -cursor.
499       If you want your mega-widget to have a border around it, you
500       can add the hull options back in:
501
502           itcl::class MyWidget {
503               inherit itk::Widget
504
505               constructor {args} {
506                   itk_option add hull.borderwidth hull.relief
507               }
508           }
509
510
511     itk_initialize ?option value option value...?
512
513       Initializes the composite option list for a mega-widget.
514       This method should be invoked within the constructor for each
515       mega-widget class.  It is usually included the end of the
516       constructor, below the component creation code.  It integrates
517       all "itk_option" options defined in the current class into
518       the composite configuration list, and includes "-option value"
519       settings usually received as arguments to the constructor.
520       When this is executed in the most-specific class, it scans
521       through the composite option list and makes sure that all
522       options have been properly initialized.
523
524     itk::usual tag ?commands?
525
526       Used outside of a mega-widget class definition to declare
527       the "usual" option-handling commands for the mega-widget.
528       These commands suggest how the configuration options should
529       be handled if the mega-widget becomes a component of an even
530       larger mega-widget.  They include commands like "keep" and
531       "rename".
532
533
534  INCOMPATIBLE CHANGES
535 --------------------------------------------------------------------------
536
537  >> Object construction/destruction now follows C++ model.
538
539     In the previous release, object construction started at the
540     most-specific constructor.  Base class constructors could
541     be called out explicitly within the body of a constructor.
542     If they were not, they were invoked implicitly when the
543     constructor finished executing.  This led to a construction
544     model that was backward from C++, and contrary to what most
545     people expected.  Destructors were backwards in a similar
546     manner.
547
548     In the current release, object construction starts at the
549     least-specific class in the hierarchy, and proceeds to the
550     most-specific class.  Therefore, each base class is fully
551     constructed before the derived class constructor is executed.
552
553     Arguments are now passed to base class constructors through
554     an optional "initialization" statement.  This statement is
555     included between the argument list and the body of the
556     constructor, so the syntax is reminiscent of C++:
557
558         class Base {
559             constructor {x y} {
560                 ...constructor body...
561             }
562         }
563         class Derived {
564             inherit Base
565             constructor {x y z} {
566                 Base::constructor $x $y    << "initialization"
567             } {
568                 ...constructor body...
569             }
570         }
571
572     Note that variables from the argument list (e.g., $x and $y)
573     can be referenced within the initialization statement.  With
574     multiple inheritance, each of the base class constructors
575     can be called out individually.
576
577     Object destruction is the exact opposite of construction.
578     It proceeds from most-specific to least-specific class.
579
580
581  >> All class methods are now implicitly virtual
582
583     In the previous release, all method names were interpreted
584     with respect to the current class scope and its base classes.
585     If you wanted a method to act virtual, you had to explicitly
586     preface it with the "virtual" command each time you used it.
587     This proved to be error prone.
588
589     In the new release, all methods are virtual by default.  If
590     you invoke a method with a simple name, the most-specific
591     method with that name will be invoked, regardless of your
592     class scope:
593
594         class Base {
595             constructor {} {show}
596             method show {} {puts "Base::show"}
597         }
598         class Derived {
599             inherit Base
600             constructor {} {show}
601             method show {} {puts "Derived::show"}
602         }
603
604     The method "show" called out in the constructors for both of
605     these classes is virtual.  When Base::constructor is executed
606     it finds the most-specific "show" method and prints
607     "Derived::show".  When Derived::constructor is executed, it
608     finds the most-specific "show" method and prints "Derived::show"
609     again.
610
611     If you want to invoke a particular method, you have to scope
612     it explicity:
613
614         class Base {
615             constructor {} {Base::show}
616             method show {} {puts "Base::show"}
617         }
618         class Derived {
619             inherit Base
620             constructor {} {Derived::show}
621             method show {} {puts "Derived::show"}
622         }
623
624
625  >> Within class methods/procs the "global" command now refers to
626     variables within the class namespace.
627
628     In the previous release, the "global" command was used to
629     access variables at the global scope.  The "global" command
630     now refers to variables that are "global" within the current
631     namespace context.  Within the scope of a class, this refers
632     to "global" class variables.  Note that common data members
633     are global variables, but they can be accessed transparently,
634     without any special "global" declaration.  You can also create
635     ordinary global variables within a class, but you will have to
636     declare them each time they are used with a "global" statement.
637     The new scheme will allow classes to have their own private
638     global variables (e.g., for interacting with widgets) without
639     flooding the global namespace.
640
641     If you really want to access a variable at the "::" global
642     scope, use its complete path name:
643
644         itcl::class Foo {
645             method getenv {name} {
646                 global ::env
647                 return $env($name)
648             }
649         }
650
651
652  >> "this" variable used to be included in every class scope
653
654     In the previous release, each class scope included a separate
655     "this" variable containing the object name.  There is now only
656     one "this" variable, kept in the most-specific class scope.
657     It can still be referenced as if it belongs to all classes,
658     e.g., "Base::this", "Derived::this".
659
660     This change is probably not important to most applications.
661     But it did break my test suite, which expected to find many
662     different "this" variables coming back from the "info" command.
663
664
665  >> "this" variable now contains complete namespace path for the
666       object access command
667
668     This change will break many scripts written for mega-widgets.
669     In the previous release, mega-widgets had a window name and an
670     access command name that were interchangeable.  For example,
671     you would create a widget ".dialog" and configure it using
672     the ".dialog" command.  Inside of this widget there was a
673     "this" variable containing the name ".dialog".
674
675     In the current release, an object can exist in any namespace,
676     so the complete namespace path is a part of the object's
677     identity.  Instead of just ".dialog", the "this" variable will
678     now contain a name like "::.dialog" or "::foo::.dialog".  But
679     the window name is still just ".dialog".
680
681     Scripts that used to use "$this" as a window name:
682
683         wm title $this "Dialog"
684
685     must now use the [incr Tk] "hull" component instead:
686
687         wm title $itk_component(hull) "Dialog"
688
689     If for some other reason you need the simple object name at the
690     end of the namespace path, you can get at it using the
691     "info namespace tail" command:
692
693         set oldthis [info namespace tail $this]
694
695
696  >> "#auto" generated names now start with lower-case letter
697
698     In the previous release, "#auto" could be used in place of
699     an object name to produce an automatically generated name:
700
701         Toaster #auto -heat light
702
703     The names were generated by adding a unique number onto the
704     class name:  "Toaster0", "Toaster1", etc.
705
706     The current release supports the same functionality, except
707     that the names generated are guaranteed to start with a
708     lowercase letter:  "toaster0", "toaster1", etc.  This helps
709     out in the mega-widget arena, where window names must start
710     with lowercase letters.
711
712
713  >> "config" argument used to allow multiple default values
714
715     The magic "config" argument used to allow multiple default
716     values, which were simply concatenated into a single value
717     before processing.  For example, in the previous release
718     you could say:
719
720         itcl_class Foo {
721             method test {x y {config -foo 0 -bar 0}} {
722                 ...
723             }
724         }
725
726     and if the "test" method was used without extra configuration
727     arguments, they would default to "-foo 0 -bar 0".
728
729     In the current release, you must make the default value for
730     a "config" argument a single string:
731
732         itcl::class Foo {
733             method test {x y {config "-foo 0 -bar 0"}} {
734                 ...
735             }
736         }
737
738  >> "info class" now acts "virtual"
739
740     In the previous release, the "info class" command would report
741     the current class context.  In a base class method, it would
742     report the base class name, and in a derived class method, it
743     would report the derived class name.  If you wanted to know
744     the most-specific class for an object, you would have to use
745     the "virtual" command explicitly:
746
747         itcl_class Base {
748             method whatAmI {} {
749                 return [virtual info class]
750             }
751         }
752
753     The "info" command is now virtual by default, as long as an
754     object context is present.  This means that you can drop the
755     "virtual" command:
756
757         itcl::class Base {
758             method whatAmI {} {
759                 return [info class]
760             }
761         }
762
763     If you really want to know the current class scope, use the
764     "info context" command instead to query the current namespace
765     context.
766
767     If an object context is not present (i.e., in the body of a
768     common class "proc"), the "info class" command reverts to
769     the current class context, the same as the "info context" command.
770
771
772  >> Library procedures "itcl_unload" and "itcl_reload" have been removed
773
774     In the previous release, the library procedure "itcl_unload"
775     provided a way of deleting a class.  You can now do the same
776     thing using the "delete class" command:
777
778         delete class Toaster
779
780     This deletes the specified class, all derived classes, and all
781     objects belonging to this class.  If autoloading is set up,
782     you can reload a deleted class just by invoking its name.
783     The old "itcl_reload" function is now trivial:
784
785         proc itcl_reload {class} {
786             delete class $class
787             $class
788         }
789
790
791  >> Class definition no longer recognizes ordinary Tcl commands.
792
793     As an undocumented "feature" of the previous release, you could
794     include ordinary Tcl commands in the body of your class definition.
795     For example:
796
797         itcl_class Foo {
798             ...
799             if {$somevar} {
800                 public foo
801             }
802         }
803
804     In the new release, only class definition commands are allowed
805     within the body of a class definition.  You can, however, use Tcl
806     commands outside of the class definition to modify the class
807     definition as a string, and then define the class:
808
809         set defn {
810             method test {} {return "test"}
811         }
812         if {$somevar} {
813             append defn "public variable foo"
814         }
815         class Foo $defn
816
817
818  IMPROVEMENTS
819 --------------------------------------------------------------------------
820
821  >> an object can be renamed by renaming its access command
822
823     In the previous release, an object's identity was fixed when
824     it was created.  In the new release, the object is tied
825     directly to its access command.  If you rename the access
826     command, you have renamed the object.  The "this" variable
827     automatically keeps in sync with name changes.  If you delete
828     the access command, you automatically delete the object.
829
830         Toaster new -heat light
831         rename new fred          << rename Toaster
832         fred toast 2
833         fred toast 1
834         rename fred ""           << delete Toaster
835
836
837  >> Bodies of methods, procs and public variables can be defined
838     outside of the class definition, and can be redefined on the fly.
839
840     In the previous release, all of the code related to a class was
841     defined within the class definition.  This kept everything
842     together in one place, but it made it difficult to get an overview
843     of the class interface.
844
845     In the new release, bodies can be defined outside of the class
846     definition, perhaps in a separate file.  When debugging, the
847     implementations can be fixed and sourced again and again, without
848     having to delete existing objects and classes.
849
850     Use the "itcl::body" command to redefine the body of a class
851     method or proc.  Use "itcl::configbody" to redefine the configuration
852     code associated with a public variable.  For example:
853
854         itcl::class Toaster {
855             constructor {args} {
856                 eval configure $args
857             }
858             destructor {
859                 if {$crumbs > 0} {
860                     error "cannot destroy dirty toaster: clean first"
861                 }
862             }
863
864             method toast {nslices}
865             method clean {}
866
867             public variable heat 3
868             protected variable crumbs 0
869         }
870
871         itcl::body Toaster::toast {nslices} {
872             if {$nslices < 1 || $nslices > 2} {
873                 error "bad number of slices: should be 1 or 2"
874             }
875             set crumbs [expr $crumbs+$heat*$nslices]
876             if {$crumbs >= 50} {
877                 puts stderr "== FIRE! FIRE! =="
878             }
879         }
880
881         itcl::body Toaster::clean {} {
882             set crumbs 0
883         }
884
885         itcl::configbody Toaster::heat {
886             if {$heat < 1 || $heat > 5} {
887                 error "invalid setting \"$heat\": should be 1-5"
888             }
889         }
890
891     If an argument list is specified in the class definition, then
892     the same argument list must be used when the implementation is
893     redefined.  The variable names can change, but the meaning of
894     the arguments must be the same.  If you leave the argument
895     list out of the class definition, or if you include the "args"
896     argument, the argument list can change.
897
898
899  >> C procedures can be integrated into class definitions
900
901     Any method body that is specified as "@symbol" is treated as a
902     reference to a C procedure with the symbolic name "symbol".
903     Symbolic names are established by registering C procedures
904     via the Itcl_RegisterC() procedure.  This is usually done
905     when the interpreter starts up in the Tcl_AppInit() procedure:
906
907         if (Itcl_RegisterC(interp, "foo", My_FooCmd) != TCL_OK) {
908             return TCL_ERROR;
909         }
910
911     This registers a procedure My_FooCmd() with the symbolic name
912     "foo".  It can be used as the implementation for a class method,
913     proc, or bit of configuration code simply by specifying "@foo"
914     in place of the Tcl code body.
915
916     These C procedures are just like ordinary Tcl command handlers.
917     They take the usual arguments:
918
919         int My_FooCmd(ClientData cdata, Tcl_Interp *interp,
920             int argc, char** argv)
921         {
922             ...
923             return TCL_OK;
924         }
925
926     including the (argc,argv) arguments from the command line.  But
927     before these procedures are invoked, the proper class scope is
928     established so that object data members can be accessed as if
929     they were ordinary variables via Tcl_GetVar() and Tcl_SetVar().
930
931     Look at the [incr Tk] base class itk::Archetype as an example
932     for integrating C code.
933
934
935  >> "#auto" can be buried within an object name:  ".x.y.z.#auto"
936
937     In the previous release, "#auto" was a keyword that could be
938     used in place of an object name.  It can now be used as a
939     part of the object name, making it easier to generate automatic
940     names for mega-widgets.
941
942
943  >> Every object now has built-in "configure" and "cget" methods
944     that follow the Tk paradigm.  For [incr Tk] widgets, they follow
945     the paradigm exactly.  The ordinary [incr Tcl] objects, the
946     X11 resource values are missing.
947
948
949  >> There is no longer a built-in "delete" method, so classes can
950     define their own "delete" operations.
951
952     Instead of "objName delete", use the new "delete object" command:
953
954         Toaster fred -heat dark
955         delete object fred
956
957
958  >> All data members can be declared public, protected or private.
959
960     Private data members can only be accessed in the class where
961     they are defined.  Protected data members can be accessed in
962     the defining class and all derived classes.  Public data members
963     can be accessed like protected data members, but are also
964     recognized as configuration options by the built-in "configure"
965     and "cget" methods.
966
967
968  >> In [incr Tk], options are now defined outside of the constructor,
969     at the level of the class definition.
970
971
972  >> In [incr Tk], configuration options belonging to components
973     created in a base class can be added or removed in derived
974     classes.
975
976     The base classes "itk::Toplevel" and "itk::Widget" are now stripped
977     down to the bare minimum options.  For example, if you want to add
978     "-width" and "-height" options for the hull component, do this using
979     the "itk_option" command in the body of the constructor:
980
981         class MyWidget {
982             inherit itk::Widget
983
984             constructor {args} {
985                 itk_option add hull.widget hull.height
986                 ...
987             }
988         }
989
990     Options can be added and removed on-the-fly during normal operation,
991     but this is not recommended, since it could lead to a confusing
992     interface.
993
994
995  >> In [incr Tk], components can now be added or removed on-the-fly.
996
997     The "itk_component" method now supports "add" and "delete"
998     operations that are used to add/delete components.
999
1000
1001  >> All [incr Tk] widgets can be destroyed like normal Tk widgets.
1002
1003     If you destroy a component widget, for example, it will automatically
1004     remove itself from its parent via "itk_component delete".  Likewise,
1005     when a parent widget is destroyed, it will automatically destroy
1006     all component widgets.
1007
1008
1009  >> In [incr Tk], the "itk::Archetype::component" method now provides
1010     access to mega-widget components.
1011
1012     In the previous [incr Tk] prototype, the "component" method had
1013     a different syntax and only supported query operations.  You can
1014     now access an internal component via the "component" method using
1015     its symbolic name:
1016
1017         .dialog component hull configure -width 450 -height 500
1018
1019     This example accesses the "hull" component of the ".dialog"
1020     mega-widget, and sets the width and height options.
1021
1022 ==========================================================================
1023  ---------------------- RELEASE 2.0beta - 9/6/95 ------------------------
1024 ==========================================================================
1025
1026 9/8/95 (bug fix)
1027   Fixed menus to work properly within namespaces.  Menu library code
1028   now recognizes the proper namespace context for all "-menu" options.
1029
1030 9/8/95 (new feature)
1031   Added "winfo command name" option to report the scoped access command
1032   for a given window.
1033
1034 9/8/95 (configuration changes)
1035   - fixed "sed" invocation in iwidgets Makefile
1036   - added configuration guesses for Tadpole Sparcbook
1037   - added George Howlett's test for "gcc", so that "-fwritable-strings"
1038     is added even if gcc is masquerading as "cc"
1039   - fixed tcl/tk configure scripts to have default prefix "/usr/local/itcl"
1040     or wherever itclsh/itkwish is installed
1041   - fixed makefiles to use $(MAKE) instead of "make"
1042
1043 9/9/95 (bug fix)
1044   Protected references to obj->accessCmd to avoid seg faults when
1045   an object is being destroyed.
1046
1047 9/9/95 (new features)
1048   Changed the syntax of the "namespace" command:
1049
1050     namespace name ?-local? ?-hidden val? ?-enforced val? ?--? ?commands?
1051
1052   Flags now follow the namespace name, and the "commands" body is
1053   optional.  The "-hidden" option allows a namespace to be hidden
1054   during "info namespace all" queries.  The "-enforced" option turns
1055   command/variable enforcement on or off.
1056
1057   Update "info namespaces all" command to allow for display of hidden
1058   namespaces:  info namespaces all ?-hidden? ?pattern?
1059
1060 9/10/95 (bug fix)
1061   Fixed "auto_mkindex" to work properly for procs defined within
1062   namespaces.  Added support for itcl::class, itcl::body and
1063   itcl::configbody as well.  Added tests for tclIndex file generation.
1064
1065 9/11/95 (configuration changes)
1066   Fixed makefiles to reference sources and libraries properly, so
1067   it should be possible to build different object trees for
1068   different platforms with "gmake".
1069
1070 9/13/95 (configuration changes)
1071   Added "AC_C_CROSS" to configure files, so configuration should work
1072   properly on Solaris 2.4.
1073
1074 9/13/95 (bug fix)
1075   Changed option configuration to work synchronously, and added
1076   "itk_initialize" command to initialize the configuration options
1077   for each mega-widget class.  The original behavior of handling
1078   option changes via "do-when-idle" has been removed.
1079
1080 9/13/95 (bug fix)
1081   Changed all structure members called "namespace" to "namesp".
1082   This allows the code to compile correctly under C++.
1083
1084 9/13/95 (configuration changes)
1085   - added support for "i[34]86:BSD/OS" in "config/config.guess"
1086   - fixed "test" target for iwidgets
1087
1088 9/13/95 (bug fix)
1089   Fixed "global" command and other places where namespace paths
1090   are parsed to allow for a single ":" in command/variable names.
1091
1092 9/13/95 (bug fix)
1093   Fixed a problem which caused class-based options to be lost when
1094   a widget class was defined within a proc.
1095
1096 9/14/95 (bug fix)
1097   Fixed class access command so that when it is deleted, it
1098   automatically destroys the class.  This also fixed a seg fault
1099   that occurred when an object's access command stomped on the
1100   class access command.
1101
1102 9/14/95 (enhancement)
1103   Fixed "scope" command and the @scope facility so that null strings
1104   can be passed around without all of the extra scoping info.
1105
1106 ==========================================================================
1107  ----------------------- RELEASE 2.0b2 - 9/14/95 ------------------------
1108 ==========================================================================
1109
1110 9/15/95 (enhancement)
1111   Changed error messages reported when a class method/proc gets the
1112   wrong number of arguments to report the usage information, like:
1113   {wrong # args: should be "obj foo x y ?arg arg...?"}
1114
1115 9/18/95 (bug fix)
1116   Fixed a seg fault that occurred when the "cget" method was called
1117   with no args.
1118
1119 9/18/95 (bug fix)
1120   Fixed a bug that caused private variables in a base class to be
1121   uninitialized, even if an initial value was specified in the
1122   class definition.
1123
1124 9/22/95 (configuration changes)
1125   Added the "SHELL=/bin/sh" statement to the main makefile.  This
1126   fixes build problems on SGI machines.
1127
1128 10/9/95 (paradigm shift)
1129   Removed the implicit scoping from any facility that takes a command
1130   or variable name.  Implicit scoping made it difficult to pass a
1131   command string or variable name into a wrapper proc and yet preserve
1132   the scope that it came from.  All scoping is now explicit.  All
1133   commands and variables are interpreted in the global "::" scope
1134   unless they are wrapped in an "@scope" declaration.  Commands can
1135   be wrapped up like this:
1136
1137       button .b -text "Push Me" -command [code .b configure -bg red]
1138
1139   Variable names can be wrapped up like this:
1140
1141       radiobutton .rb1 -text "Choice #1" -variable [scope mode] -value 1
1142
1143   The "code" and "scope" commands wrap up strings with an "@scope"
1144   specification which preserves the namespace context.
1145
1146 10/17/95 (paradigm shift)
1147   Changed the "%C" option of the "bind" command to return a scoped
1148   command of the form "@scope namespace widget" that can be used to
1149   access the widget.  "%C" should be used instead of the usual "%W"
1150   window name when attempting to access the widget.  Bindings should
1151   be written like this:
1152
1153       bind Entry <FocusIn>  {%C configure -bg white}
1154       bind Entry <FocusOut> {%C configure -bg gray}
1155
1156   The command "%C" can be used to access the widget regardless which
1157   namespace it belongs to.
1158
1159 10/31/95 (enhancement)
1160   Fixed "unknown" command to support a general facility for adding
1161   unknown command handlers.  The "unknown_handler" proc is used to
1162   register new handlers.  Each time an unknown command is encountered,
1163   each of the handlers is invoked to attempt to handle the command.
1164   If a handler returns "-code continue", control passes to the next
1165   handler on the list.  Handlers are invoked in the order opposite to
1166   the way they were registered.  Extensions can use this facility to
1167   add their own handlers into the "unknown" scheme.
1168
1169 11/7/95 (enhancement)
1170   Added a "backward-compatibility" mode to [incr Tcl].  By default,
1171   widget names can now be used as access commands in any namespace,
1172   even if the widget access command exists in another namespace.
1173   This emulates the normal Tk behavior that widgets are global resources
1174   in the application that can be accessed anywhere.  This behavior can
1175   be disabled by setting the global variable "itcl_purist" to "1".  When
1176   this variable is set non-zero, care must be used to use "%C" or
1177   "[winfo command %W]" as an access command when the widget is used
1178   outside of the namespace that contains it.  From the standpoint of
1179   the object-oriented paradigm, the "purist" mode is better since it
1180   supports encapsulation.  The "backward-compatible" mode, however,
1181   allows [incr Tcl] to work better with existing Tk applications and
1182   extensions.
1183
1184 11/22/95 (bug fix and enhancement)
1185   Fixed the built-in "info" command for classes to include the "info
1186   classes" and "info objects" queries.  These were initially overlooked
1187   in a hard-wired list of "info" queries.
1188
1189   Fixed the ensemble facility in general to support unknown options
1190   via an "@error" handler.  Any option registered with the name "@error"
1191   is treated as an error handler for the ensemble.  Arguments passed
1192   to the option include the ensemble name, the unknown option, and all
1193   remaining arguments.  For the built-in "info" command, the "@error"
1194   handler passes any unknown options to the usual Tcl "info" command,
1195   so all of the standard options are automatically available.
1196
1197 11/23/95 (bug fix)
1198   Fixed usual tkerror dialog to truncate error messages at 5 lines.
1199   The usage information returned by an ensemble or itcl object can
1200   be much longer, causing the "Stack Trace" button to get lost in
1201   many cases.
1202
1203 11/27/95 (bug fix)
1204   Removed the constructor/destructor from the list of public methods
1205   returned as usage information when an unknown method is encountered
1206   on an object.
1207
1208 12/2/95 (bug fix)
1209   Fixed error reporting for object construction.  Used to say
1210   something like "object constructor x y z" which made it look
1211   like a method invocation.  Now says "class object x y z" which
1212   looks more like the call that the user made to trigger the error.
1213
1214 12/4/95 (bug fix)
1215   Fixed class creation and object creation to avoid clobbering
1216   existing commands with new class/object access commands.  This
1217   prevents all hell from breaking loose when a command like
1218   "class set {...}" is invoked.
1219
1220 12/6/95 (configuration changes)
1221   Fixed parsing of namespace paths to use local storage instead of
1222   assuming that strings are writable.  This means that the
1223   "-fwritable-strings" option is no longer necessary for GCC and
1224   other compilers that store static strings in the program text
1225   segment.  This option has been removed from all "configure.in"
1226   files.  Linux users will no longer see core dumps on start-up.
1227
1228 12/8/95 (bug fix)
1229   Fixed "upvar" so that class data members can be accessed from
1230   another calling procedure.  This fixed a problem with using
1231   "parray" from within class methods.
1232
1233 12/9/95 (bug fix)
1234   Fixed "@scope" variable references so that variables can be created
1235   using "@scope" in any context and referenced later.
1236
1237 12/9/95 (feature change)
1238   Removed "-hidden" option from namespaces.  It seemed to complicated
1239   and quirky to explain on the man page.  Instead, all parser
1240   namespaces like "scope-parser" and "mkindex-parser" are grouped
1241   into a "::tcl" namespace.  This keeps them somewhat hidden even
1242   without any special treatment.
1243
1244 12/9/95 (minor enhancement)
1245   Added "array" command to class definition parser, so it can be
1246   used along with "set" to initialize common arrays.
1247
1248 12/10/95 (paradigm shift)
1249   Removed the "%C" pattern from the expansions recognized by the
1250   "bind" command, in favor of the following scheme:
1251     %W ........ name of widget receiving event
1252     %M ........ name of mega-widget containing widget receiving event
1253     %q ........ fully-qualified command name of widget receiving event
1254     %Q ........ fully-qualified command name of mega-widget receiving event
1255   Fixed "winfo command" to return the fully-qualified command name of
1256   a widget (instead of a scoped access command) to be consistent with
1257   the "%q" bind pattern.
1258
1259 12/10/95 (bug fix)
1260   Fixed Tk library code to use "%q" and "winfo command", so that the
1261   default widget behaviors will work even in "itcl_purist" mode.
1262
1263 12/11/95 (minor enhancement)
1264   Added "winfo megawidget" query, which will return the name of the
1265   mega-widget containing a specified component widget.  In order for
1266   this to work, a mega-widget package must use the procedure
1267   Itcl_SetMegaWidget() to register each component as it is added
1268   to a mega-widget.
1269
1270 12/12/95 (bug fix)
1271   Fixed Archetype base class to keep all options sorted in alphabetical
1272   order.  This way they can be reported back by the "configure" method
1273   in alphabetical order.  Options are now initialized by "itk_initialize"
1274   in alphabetical order as well.
1275
1276 12/12/95 (bug fix)
1277   Fixed the Archetype base class to register each component widget with
1278   Tk via Itk_SetMegaWidget().  This means that "winfo megawidget" and
1279   "%Q" can be used to reference the containing mega-widget for any component.
1280
1281 12/12/95 (bug fix)
1282   Fixed the "configure" method in the Archetype base class so that when
1283   an error is encountered while setting a configuration option, the option
1284   is set back to its previous value.
1285
1286 12/12/95 (bug fix)
1287   Fixed the "itk_component add" method to find access commands for
1288   components even if they are created in the global scope.  Components
1289   that are meant to be shared can be created using "uplevel #0".  The
1290   access command for this component will be installed in the global scope,
1291   and therefore available to all other namespaces.
1292
1293   Syntactic sugar like a "-global" option would be nice, but references
1294   like $itk_component(...) must be substituted in the calling scope, and
1295   it is not possible to get these properly substituted and still maintain
1296   the boundaries around arguments.
1297
1298 12/12/95 (bug fix)
1299   Fixed Archetype base class to handle public/protected/private components
1300   properly.  The usual public/protected/private commands can be used in
1301   conjunction with "itk_component add" to set the protection level of a
1302   component.  The protection level affects the action of the "component"
1303   method.  Public components are reported in any namespace, and are
1304   accessible from any namespace.  Protected components are accessible
1305   within a base class and derived classes.  Private components are
1306   accessible only within the class where they are defined.  This feature
1307   can be used to keep unimportant components (such as frames) off of the
1308   component list that a client would see.
1309
1310 12/13/95 (enhancement)
1311   Added "usual" and "ignore" commands for processing component widget
1312   configuration options.  The "usual" command finds the usual code fragment
1313   for the widget class of the component, and executes it.  The command
1314   "itk::usual" can be used to register option code for new widget classes.
1315
1316   The "ignore" command can be used to override previous "keep" and "rename"
1317   commands.  This is useful for removing options that the "usual" code
1318   keeps or renames.
1319
1320   Fixed the "itk_component add" command so that if the option handling code
1321   is not specified, the "usual" command is invoked automatically.
1322
1323 12/13/95 (bug fix)
1324   Fixed the Archetype base class to handle the immutable Tk options
1325   properly.  Options like -class, -colormap, -screen and -visual can only
1326   be set at creation time.  The itk_option array is now properly
1327   initialized to report their creation value.
1328
1329 12/14/95 (bug fix)
1330   Fixed "itk_option add" command to report errors properly for unknown
1331   options.
1332
1333 12/14/95 (bug fix)
1334   Fixed "body" command to report errors properly for unknown functions.
1335
1336 12/14/95 (bug fix)
1337   Fixed a bug in the handling of TCL_GLOBAL_ONLY flag when looking up
1338   class variables.  Previously, this was ignored, so object-specific
1339   variables could be accessed in a "global" context by Tk widgets.
1340   This caused some strange behavior when object-specific variables
1341   were used in conjunction with widget options like "-textvariable".
1342   Tk widgets now properly interact with classes via global variables.
1343
1344 12/14/95 (bug fix)
1345   Fixed "auto_mkindex" to recognize procs within class definitions and
1346   add them to the "tclIndex" file.
1347
1348 12/15/95 (bug fix)
1349   Fixed "body" command to find functions only in the specified class.
1350   The bug caused a base class method to be redefined whenever a "body"
1351   command was issued for a derived class if the method was not declared
1352   in the derived class.  Made a corresponding fix to the "configbody"
1353   command for public variables.
1354
1355 12/15/95 (enhancement)
1356   Added the following commands to the class definition parser:  bind,
1357   scope and code.  This allows generic class bindings to be included
1358   in the body of a class definition.
1359
1360 12/15/95 (enhancement)
1361   Added "-clientdata" option in itk::Archetype base class so that
1362   all widgets will have an extra field for client data.  For application
1363   developers, this may come in handy.
1364
1365 12/16/95 (bug fix)
1366   Fixed the itk::Archetype base class so that if "itk_option add" or
1367   "itk_option remove" is called for ordinary class-based options before
1368   "itk_initialize" (which normally integrates them in) it does not cause
1369   a problem.
1370
1371 12/17/95 (bug fix)
1372   Fixed namespace resolution so that a command/variable with a
1373   specific path like "itk::body" will not be found in another
1374   imported namespace.  For the import list to be followed, the
1375   command name must be generic like "body".
1376
1377 12/19/95 (configuration changes)
1378   Changed from generic directories like "tcl" and "tk" to directory
1379   names with version numbers like "tcl7.4" and "tk4.0".
1380
1381 12/19/95 (bug fix)
1382   Changed names like "itcl_library" and "itcl_purist" to "itcl::library"
1383   and "itcl::purist".  This makes more sense in the documentation, since
1384   the underbar stuff is no longer needed with namespaces, and extension
1385   writers are discouraged from using it.
1386
1387 12/21/95 (bug fix)
1388   Changed handling of argument lists for functions with Tcl or C
1389   implementations.  All argument lists are now treated as Tcl
1390   argument specifications.  For Tcl implementations, this determines
1391   what arguments are available in the body of the procedure; for C
1392   implementations, this merely gives the intended usage information
1393   for the function (the C implementation may choose to ignore this
1394   and do something else).  This fix makes it easier to override
1395   C implementations with Tcl procedure bodies.
1396
1397 12/25/95 (bug fix)
1398   Split the usual TCL_GLOBAL_ONLY flag into two meanings:  TCL_GLOBAL_ONLY
1399   now means "a global variable in the global namespace", and ITCL_GLOBAL_VAR
1400   means "a global variable in the current namespace".  This enhancement
1401   fixes Tk (and many other extensions) which request global variables.
1402   A plain variable name together with TCL_GLOBAL_ONLY is now interpreted
1403   as an ordinary Tcl global variable, so the behavior is backward-compatible.
1404   A scoped variable reference will work properly with namespaces.  If
1405   extension writers get more ambitious, they can start using the
1406   ITCL_GLOBAL_VAR flag, which will make their extensions namespace-friendly.
1407
1408 12/26/95 (bug fix)
1409   Fixed "@scope" command so that extra arguments added at the end are
1410   kept as proper list elements when added to the command string.  This
1411   makes sure that boundaries around Tcl words are not lost when the
1412   scoped command is interpreted.
1413
1414 12/28/95 (minor enhancement)
1415   Added "config" method to the Archetype base class as an alias for
1416   the usual "configure" method.  Many Tk applications use "config"
1417   as an abbreviation for "configure", so this fix improves compatibility
1418   with other packages.
1419
1420 12/28/95 (bug fix)
1421   Fixed Itcl_SaveInterpState() and Itcl_RestoreInterpState() to
1422   properly save/restore the interp state even for commands like
1423   Tcl_SetCmd(), which are sloppy about setting the interpreter
1424   result.  This fixed bad memory references that were encountered
1425   in enforced namespaces.
1426
1427 12/28/95 (bug fix)
1428   Fixed Itcl_DeleteNamesp() to allow variable traces to be fired
1429   off properly when a namespace is destroyed.
1430
1431 12/30/95 (bug fix)
1432   Fixed the Archetype base class to do the "ignore" operation
1433   properly for mega-widget options.  A bug was causing a single
1434   "ignore" request not only to eliminate the desired option, but
1435   to eliminate options that were renamed to the "ignore" name
1436   as well.
1437
1438 ==========================================================================
1439  ------------------------ RELEASE 2.0 - 12/31/95 ------------------------
1440 ==========================================================================
1441
1442 1/2/96 (cleanup)
1443   Fixed some compiler warnings reported by Christopher Hylands
1444   (cxh@EECS.Berkeley.EDU)
1445
1446 1/4/96 (cleanup)
1447   Fixed the description of the last test in itk/tests/option.test.
1448
1449 1/4/96 (cleanup)
1450   Fixed code examples in man pages.  Lines starting with "." now
1451   start with the null character "\&", to avoid errors with troff.
1452
1453 1/5/96 (bug fix)
1454   Fixed a bug in tkMenuUnpost.  Popup menus associated with something
1455   other than a menubutton can now be unposted properly.
1456
1457 1/10/96 (bug fix)
1458   If an error occurs during construction, all destructors are now
1459   invoked--even if an error is encountered.  All destructor errors
1460   are completely ignored.  This fixed a core dump reported by
1461   Christopher Hylands (cxh@EECS.Berkeley.EDU).
1462
1463 2/5/96 (cleanup)
1464   Fixed memory leaks reported by Forest Rouse (rouse@flash.icemcfd.com).
1465   Also fixed a problem in Itcl_DeleteNamesp() with the way that
1466   the variable cache was destroyed.  This caused a core dump on Solaris
1467   systems when a namespace was deleted.
1468
1469 2/8/96 (cleanup)
1470   Fixed itk tests to ignore any resources that the user might have
1471   on the desktop (e.g., *background: red)
1472
1473 2/11/96 (bug fix)
1474   Fixed auto_mkindex so that the "proc" command accepts arglist and
1475   body as optional arguments.  Within class definitions, these
1476   parameters may not be specified.  Also, fixed the "source" command
1477   so that it is ignored within the file being indexed.  Otherwise,
1478   it brought in program elements that confused the index.
1479
1480 2/15/96 (bug fix)
1481   Fixed the unknown command to save errorInfo and restore it before
1482   invoking each handler.  This fixed an irritating bug that caused
1483   the first error message to be lost as "tkerror" was autoloaded.
1484
1485 2/20/96 (bug fix)
1486   Fixed a bug in variable lookup that allowed private/protected
1487   variables to be set from outside the normal context.  On initial
1488   lookup variables were being passed over, but since they did not
1489   appear to exist, they were being created.  Variables are now
1490   protected from being set or redeclared from an improper context.
1491
1492 3/1/96 (enhancement)
1493   Changed namespaces to import from their parent in "protected"
1494   mode instead of "public" mode.  This is a better default, since
1495   it emphasizes the strong relationship between a parent and a
1496   child.  They can share variables that are hidden from anyone else.
1497
1498 3/5/96 (bug fix)
1499   Fixed the "info objects" to autoload any classes referenced by
1500   "-isa" or "-class" that are not yet defined.
1501
1502 3/12/96 (enhancement)
1503   Fixed class parser to recognize commands at the global scope.
1504   This makes it possible to embed normal Tcl commands like an
1505   "if" statement within a class definition.  It also makes it
1506   easy to extend the class parser by defining procs in the
1507   ::itcl::parser namespace.
1508
1509 3/17/96 (enhancement)
1510   Fixed "usual" command so that with no arguments, it returns a
1511   list of all known tags.  Each tag name can be used to query its
1512   associated code.
1513
1514 3/19/96 (enhancement)
1515   Fixed the "configure" method for mega-widgets to include public
1516   variables as configuration options.  Normally, mega-widget
1517   classes use "itk_option define" to define configuration options.
1518   However, if a mega-widget includes an ordinary itcl class as
1519   a base class, it should provide access to the base class options.
1520   Public variables are now integrated into the composite option
1521   list by "itk_initialize".
1522
1523 4/2/96 (enhancement)
1524   Added a "chain" command to the built-ins available in each class.
1525   A command like "chain 1 2 3" invokes the next implementation of
1526   the current method/proc found looking up the inheritance hierarchy
1527   toward base classes.  This can be used to invoke a base class method
1528   in a generic way, without hard-coding the base class name.
1529
1530 4/10/96 (bug fix)
1531   Fixed "configure" operation for mega-widgets.  Previously, if an
1532   error was encountered during configuration, the value in itk_option
1533   was set back to the previous value, but some parts of the mega-widget
1534   might be left in a partially configured state.  Now, if an error is
1535   encountered and the option is set back to its previous value, the
1536   change is propagated down to all parts, so the widget remains in a
1537   consistent state.
1538
1539 4/15/96 (bug fix)
1540   Fixed a bug reported by Karel Zuiderveld (karel.zuiderveld@cv.ruu.nl)
1541   related to virtual method selection in "itcl_methods.c".  If for some
1542   reason a method name was not found in the virtual table, the table
1543   access caused a core dump.  This is now fixed.
1544
1545 5/13/96 (bug fix)
1546   Fixed "itk_initialize" to recognize errors when executing the "config"
1547   code associated with configuration options.  Any error immediately
1548   causes itk_initialize to abort, which usually aborts construction.
1549
1550 5/13/96 (bug fix)
1551   Fixed a bug in Itcl_SaveInterpState() and Itcl_RestoreInterpState()
1552   which caused error information to get lost during object construction
1553   when errors were encountered.  The new iPtr->appendResult buffer was
1554   being ignored, and results in this buffer were getting lost.
1555
1556 6/1/96 (bug fix)
1557   Changed the internal Interp and TkWindow data structures so that all
1558   of the extra [incr Tcl] data members are at the bottom of the structure.
1559   This should prevent errors when modules that have been compiled against
1560   vanilla Tcl/Tk are dynamically loaded into [incr Tcl].
1561
1562 6/12/96 (enhancement)
1563   Integrated changes for "itcl2.0+3" release by Karel Zuiderveld,
1564   Jan Nijtmans and Vince Darley.  This added support for tcl7.5/tk4.1,
1565   dynamic loading, canvas improvements, and support for Macintosh
1566   environments.  Many thanks to these guys for all of their hard
1567   work!
1568
1569 6/22/96 (installation)
1570   Changed the way things are installed:
1571   - the startup file "init.itcl" is now called "itcl.tcl"
1572   - the startup file "init.itk" is now called "itk.tcl"
1573   - libraries, include files and man pages are now installed under
1574     a special "itcl" directory to avoid conflicts with a vanilla
1575     Tcl/Tk installation.  For example, if your --prefix is set
1576     to /usr/local, things would be installed as follows:
1577
1578         /usr/local/bin ............ executables:
1579                  ish = tclsh with namespaces
1580                iwish = wish with namespaces
1581             itclwish = tclsh with namespaces and classes
1582              itkwish = wish with namespaces and classes
1583
1584         /usr/local/include/itcl ... include files
1585         /usr/local/lib/itcl ....... libraries
1586         /usr/local/man/itcl ....... manual pages
1587
1588 6/24/96 (bug fix)
1589   Fixed "itkwish" so that it requires the Iwidgets package automatically
1590   during initialization.  For all other shells, you must specifically
1591   request Iwidgets with a statement like "package require Iwidgets"
1592
1593 6/26/96 (bug fix)
1594   Fixed Tk_CanvasTagsParseProc to avoid dumping core when an item
1595   is configured with a null tag string.
1596
1597 6/26/96 (bug fix)
1598   Fixed PolygonToPoint() in tkCanvPoly.c so that invisible polygons
1599   (with no outline and no fill) are still considered when picking
1600   the closest item.  Without this fix, programs like the "floor plan"
1601   in the Tk widget demo will not work.
1602
1603 6/26/96 (bug fix)
1604   Fixed the [incr Widgets] "feedback" widget to do a full update on
1605   each step.  Without this, changes appear from time to time, but
1606   the bar does not grow smoothly.
1607
1608 6/26/96 (bug fix)
1609   Fixed fileselectiondialog and fileselectionbox to update directory
1610   list properly when "-directory" option is configured.
1611
1612 6/28/96 (bug fix)
1613   Fixed "itk_option define" to properly preserve a "config" code
1614   body so that it can be released if it is redefined later.
1615
1616 ==========================================================================
1617  ------------------------ RELEASE 2.1 - 6/28/96 -------------------------
1618 ==========================================================================
1619
1620 7/22/96 (bug fix)
1621   Fixed C-level variable access so flags like ITCL_FIND_LOCAL_ONLY
1622   can be passed into Tcl_GetVar() and Tcl_SetVar().
1623
1624 7/25/96 (bug fix)
1625   Fixed the "notebook" widget in the [incr Widgets] set.  The "index"
1626   method now supports pattern matching and index names with spaces in
1627   them.
1628
1629 8/1/96 (bug fix)
1630   Fixed destructor invocation so that if an object is being
1631   destructed and you try to delete it again, it will report an
1632   error.
1633
1634 8/7/96 (bug fix)
1635   Fixed the "inherit" command to make sure all names are really
1636   valid classes.  Previously, trying to inherit from a proc would
1637   dump core.
1638
1639 8/29/96 (enhancement)
1640   Integrated with itcl2.1+2 (tcl7.5p1/tk4.1p1).
1641
1642 9/1/96 (bug fix)
1643   Fixed the Itcl_RegisterC() procedure so that the same name can be
1644   registered more than once, as long as it has the same function
1645   pointer.
1646
1647 9/7/96 (bug fix)
1648   Fixed a bug in method access for protected methods.  There was a
1649   problem when a base class defined a method, and a derived class
1650   overloaded the method, and the method was accessed from the base
1651   class namespace.  Added function Itcl_CanAccessMethod() to check
1652   for overloaded methods and allow access accordingly.
1653
1654 9/13/96 (bug fix)
1655   Fixed the Itcl_RestoreInterpState() procedure so that the "errorCode"
1656   variable is restored properly.  There was a problem when the
1657   error code contained a list of elements.
1658
1659 9/20/96 (bug fix)
1660   Fixed a bug in the way namespaces were deleted.  The hash table of
1661   child namespaces was being traversed while elements within it were
1662   being deleted.  This caused a core dump when you tried to exit
1663   the application with a command like "destroy .".
1664
1665 9/28/96 (bug fix)
1666   Fixed the way that errors are reported when a base class is constructed
1667   with the wrong arguments.  Previously, the error message showed the
1668   object creation command like "wrong # args: should be Foo name val1 val2".
1669   Now, it shows the base class constructor name, so it is more obvious
1670   where the error is coming from.
1671
1672 10/5/96 (bug fix)
1673   Fixed a bug in constructor invocations.  All base class constructors
1674   are now invoked properly, even if a derived class does not have a
1675   constructor.
1676
1677 10/9/96 (enhancement)
1678   Added proper support for safe interpreters.  You can now use namespace
1679   commands in a safe interpreter, and you can load Itcl as a safe package.
1680
1681 10/11/96 (bug fix)
1682   Fixed a core dump with "namespace foo {info locals}".  The namespace
1683   call frame was not being set up properly, so the local variable table
1684   was garbage.  Normally, you don't access local variables at the
1685   namespace level.  But now it is fixed.
1686
1687 10/14/96 (bug fix)
1688   Fixed the Itcl_RegisterC() procedure so that each interpreter has
1689   its own list of symbolic function names.  This avoids global data
1690   and makes more sense for people using multiple interpreters.
1691
1692 10/20/96 (bug fix)
1693   Fixed variable lookup so that when you try to access a variable
1694   like "::foo::x" inside of a procedure, you get an error instead
1695   of a local variable named "::foo::x".  Variables like this need
1696   to be declared global.
1697
1698 10/22/96 (enhancement)
1699   Fixed the built-in "isa" method to autoload class definitions as
1700   needed for each "isa" test.  If a class is not defined and cannot
1701   be autoloaded, it is an error.
1702
1703 10/26/96 (enhancement)
1704   Fixed "delete object" command so that objects can be deleted
1705   using scoped values for the object name.
1706
1707 10/29/96 (enhancement)
1708   Integrated with itcl2.1+5 (tcl7.6/tk4.2).
1709
1710 11/1/96 (porting)
1711   Removed "plus" and "dash" patches to allow for porting to Windows95
1712   and Macintosh platforms.  Simplified configuration and makefiles
1713   for Unix platforms.
1714
1715 11/4/96 (installation)
1716   Fixed configuration and makefiles to support building in a
1717   separate directory.  There is a bug in "autoconf" which prevents
1718   this from going smoothly.  You have to copy all of the configure
1719   scripts to a separate tree (e.g., using a tar file), and then build.
1720
1721 11/5/96 (bug fix)
1722   Fixed a bug in the way variables were reported by the built-in
1723   "info" command for classes and objects.  Private variables in
1724   a base class were incorrectly reported as "<undefined>".  They
1725   are now reported properly.
1726
1727 11/10/96 (bug fix)
1728   Fixed the "this" variable so that if an object is deleted while it
1729   is still in use, its name is properly reported as the null string.
1730
1731 11/10/96 (bug fix)
1732   Fixed the way namespaces are deleted so that the "::errorInfo" and
1733   "::errorCode" variables remain intact until everything else has been
1734   destroyed.  These variables are needed if any errors are encountered
1735   as an interpreter is being destroyed.
1736
1737 11/11/96 (installation)
1738   Split the "itclConfig.sh" file into separate "itclConfig.sh" and
1739   "itkConfig.sh" files.
1740
1741 11/11/96 (installation)
1742   Fixed the package installation to conform to tcl7.6/tk4.2.  The
1743   pkgIndex.tcl files are now stored in the library directory for
1744   each package.
1745
1746 11/13/96 (enhancement)
1747   Overhauled the scrolledcanvas widget.  It is now about an order of
1748   magnitude faster.
1749
1750 11/14/96 (enhancement)
1751   Overhauled the [incr Widgets] "catalog" demo.  When you pick any
1752   mega-widget class, the demo displays an example widget, the code
1753   used to build it, the class hierarchy, and the man page.
1754
1755 11/23/96 (bug fix)
1756   Fixed the way the "inherit" command autoloads class definitions.
1757   Previously, it invoked the class name as a command.  Now, it uses
1758   the "auto_load" command.
1759
1760 11/23/96 (installation)
1761   Fixed the "configure" files to use "mkinstalldirs" instead of "mkdir"
1762   so that the entire distribution can be built in a separate directory
1763   starting with a single "configure" file.  Fixed the way the distribution
1764   is created to make this patch for each new distribution.
1765
1766 11/23/96 (installation)
1767   Fixed the iwidgets installation so that the installed files (instead
1768   of the source files) are chmod'd to have the proper permissions.
1769
1770 11/29/96 (installation)
1771   Fixed iwidgets (combobox, optionmenu, shell) so that they don't rely
1772   on "tkwait visibility" before doing a grab.  On the Macintosh, this
1773   only works the first time a window is mapped.  After that, this
1774   command does not return control, even when a window is remapped.
1775
1776 11/30/96 (bug fix)
1777   Fixed "tk4.2/library/menu.tcl", moving a comment in a switch statement
1778   above the default case into the default case.  When the comment is
1779   above the case, it is treated as a list element and a parsing error
1780   occurs.  You can trigger the error with a command like "tkMenuFind . x".
1781   When the comment is inside the case, everything works fine.
1782
1783 11/30/96 (bug fix)
1784   Fixed a memory error that occured when an interpreter was destroyed.
1785   One namespace (e.g., base class) caused another (e.g., derived class)
1786   to be destroyed.  Then the namespace was destroyed again later on.
1787   Now, as we iteration through the safeCopy list, we check to make
1788   sure the namespace still exists.
1789
1790 11/30/96 (bug fix)
1791   Fixed entryfield mega-widget to avoid using the "%s" state field
1792   for key presses.  It was using it to find out whether or not Control,
1793   Shift, or Alt keys were being held down during a key press.  But this
1794   field confuses Alt with NumLock when you go between Unix and Windows
1795   platforms.  The entryfield appeared to be broken when NumLock was
1796   turned on.  Nothing is lost if we simply ignore it and let all
1797   keypresses through.
1798
1799 12/1/96 (installation)
1800   Fixed the way that "pkgIndex.tcl" files are built for Itcl/Itk.
1801   When you build with "--enable-shared", the package files load the
1802   shared library, but when you build without, the package files
1803   use {load "" Itcl} to get the static package.  This lets you
1804   do "package require" commands in slave interpreters, even if
1805   things were built with static packages.
1806
1807 12/1/96 (bug fix)
1808   Fixed how namespaces are deleted when an interpreter is deleted.
1809   Previously, namespaces were deleted after the assocData for the
1810   interp.  If any background errors occurred while the namespace
1811   was being deleted, they caused seg faults later on.  Now, the
1812   global namespace is cleared (but not deleted) *before* deleting
1813   the assocData.  Any background errors are deleted, and the global
1814   namespace is finally deleted at that point.
1815
1816 12/2/96 (enhancement) JCI
1817   Defined "tkOpenDocument" in tk.tcl so that Macintosh users can
1818   double-click on an [incr Tcl] source file, and itkwish will be
1819   invoked to execute it.
1820
1821 12/2/96 (bug fix)
1822   Fixed the entryfield widget so that characters like: " [ ] { } \ &
1823   are substituted properly into the "%c" field when doing character
1824   validation.
1825
1826 12/2/96 (enhancement)  **POTENTIAL INCOMPATIBILITY**
1827   Changed the HTML parsing in the scrolledhtml widget to speed it up.
1828   Also, changed the "-feedback" option so that it appends two numbers
1829   on the end of the feedback command:  the current position and the
1830   maximum position.  This frees the caller from having to figure out
1831   the maximum position.
1832
1833 12/2/96 (enhancement)
1834   Added "-borderwidth", "-relief" and "-elementborderwidth" options
1835   to the feedback widget, so you can control its appearance a little
1836   better.
1837
1838 ==========================================================================
1839  ------------------------ RELEASE 2.2 - 12/3/96 -------------------------
1840 ==========================================================================
1841
1842 12/12/96 (installation)
1843   Fixed "iwidgets.tcl" initialization file to rely on the environment
1844   variable IWIDGETS_LIBRARY (if it exists), and use the compiled-in
1845   path as a last resort.  That way, the user can override the iwidgets
1846   library with an environment variable setting.
1847
1848 12/12/96 (installation)
1849   Fixed the "catalog" demo for [incr Widgets] to help support Windows3.1.
1850   The code is now arranged to make it easy to translate between the
1851   real demo names and DOS 8.3 file names.
1852
1853 12/13/96 (bug fix)
1854   Added a "usual" test for all of the [incr Widgets].  This checks to
1855   make sure that there is a bit of "usual" code for each widget, that
1856   the options in the "usual" code are valid, and that all of the
1857   widgets mix together without errors.
1858
1859 4/11/97 (enhancement)
1860   Merged in patches for tcl7.6p2/tk4.2p2 (jingham)
1861
1862 5/17/97 (bug fix)
1863   Fixed itk::Toplevel to have the hull keep the -takefocus option.
1864   This fixed a problem with the tab ring in iwidget dialogs.
1865
1866 6/1/98 (complete rewrite)
1867   Rewrote the entire package to work with Tcl8.0 namespaces and the
1868   new byte code compiler.
1869
1870 ==========================================================================
1871  ----------------------- RELEASE 3.0a1 - 6/16/98 ------------------------
1872 ==========================================================================
1873
1874 7/23/98 (bug fix)
1875   Removed references to Tcl internal macros such as TclDecrRefCount.
1876   This was causing problems under Windows, since those macros use
1877   global variables that are not available outside of tcl80.dll.
1878
1879 7/23/98 (bug fix)
1880   Added my own definition of the assert macro.  Since Tcl/Tk doesn't
1881   use assert, the default version was causing build problems with
1882   gcc.
1883
1884 7/27/98 (configuration change)
1885   Changed all "configure" scripts to rely on tclConfig.sh and tkConfig.sh
1886   for compile options.
1887
1888 7/27/98 (configuration change)
1889   Changed the initialization process for Itcl/Itk.  Both packages now
1890   key off of tcl_library to find their initialization scripts.
1891
1892 7/27/98 (configuration change)
1893   Removed IWIDGETS_LIBRARY environment variable from the Iwidgets
1894   package.  If Iwidgets is installed properly, this variable is not
1895   needed.
1896
1897 7/29/98 (configuration change)
1898   Added Scott Stanton's patch to the initialization process.  The
1899   last-ditch installation directory is no longer compiled into the
1900   itcl sources.  Instead, itcl searches for the installation directory
1901   starting from $tcl_library.  Also, if the variable itcl::library is
1902   set before loading itcl, then itcl aborts the search and uses that
1903   as its library directory.
1904
1905 7/30/98 (Macintosh)
1906   Added Jim Ingham's patches for the Mac.
1907
1908 7/30/98 (configuration)
1909   Fixed Makefiles for Iwidgets 2.2/3.0 to avoid a problem while
1910   installing the demo images/html.  The INSTALL_DATA program may
1911   have a relative name (../../config/install-sh) so we must be
1912   careful to "cd" into library, demos, etc., but not into other
1913   directories below them.
1914
1915 8/8/98 (bug fix)
1916   Fixed "namespace import" to work with autoloading.  If you
1917   execute "namespace import iwidgets::*", the auto_import proc
1918   will create stubs for all of the iwidgets commands.  Executing
1919   one of the stubs triggers autoloading for the appropriate command.
1920
1921 8/10/98 (bug fix)
1922   Integrated changes from Scriptics team to work seamlessly with
1923   Tcl 8.0.3.
1924
1925 8/10/98 (bug fix)
1926   Fixed the iwidgets::optionmenu to work properly under Windows 95/NT.
1927   Extended the "get" method in iwidgets3.0 so that you can query
1928   existing elements from an optionmenu.
1929
1930 ==========================================================================
1931  ------------------------ RELEASE 3.0 - 8/11/98 -------------------------
1932 ==========================================================================
1933
1934 8/16/98 (bug fix)
1935   Fixed the windows pkgIndex.tcl files for Itcl and Itk to properly
1936   load their .dll.  Also fixed iwidgets/catalog to package require
1937   Itcl, Itk, and to import ::itcl::* to get "class" defined. (BW)
1938
1939 12/21/99 (bug fix)
1940   Fixed tests for auto_mkindex to work properly outside of itkwish.
1941   Tests now include "namespace import itcl::*" instead of assuming that
1942   this behavior is built into the wish.
1943
1944 4/18/00 (feature enhancement)
1945   Fixed itcl::find to find classes and objects in *all* namespaces
1946   in the interpreter.  Until this fix, the itcl::find command would
1947   report only the objects in the active namespace or the global
1948   namespace.  Being able to find classes/objects in all namespaces
1949   makes debugging easier.  Thanks to Chad Smith for pushing to make
1950   this change happen.
1951
1952 6/26/00 (bug fix)
1953   Fixed Itcl_ClassVarResolver so that the formal parameters in a
1954   method/proc take precedence over class data members.
1955
1956 6/30/00 (bug fix)
1957   Fixed all itcl/itk/iwidgets3.0.0 tests to run cleanly with the new
1958   tcltest package.
1959
1960 7/1/00 (bug fix)
1961   Fixed "itk_component delete" so that the composite option list is
1962   cleaned up whenever a component is deleted.  For example, suppose
1963   a component is the sole contributor of -font.  When that component
1964   is removed via "itk_component delete", the -font option goes away
1965   as well.  Also fixed the handling of the itk-delete-* binding for
1966   the component.  When the component is removed, the binding tag
1967   is also removed by itk::remove_destroy_hook.
1968
1969 7/5/00 (bug fix)
1970   Fixed the check done during object creation to avoid clobbering
1971   existing commands.  Previously, itcl would look for any command--
1972   in the local *and* global namespace--that might be clobbered.
1973   Now, it looks for commands only in the local namespace, since
1974   those are the only ones that could truly be clobbered.
1975
1976 7/5/00 (cleanup)
1977   Removed obsolete Makefile/configure files in the various "unix"
1978   directories.  Makefiles and configure files now reside one level
1979   above, in the standard TEA place.
1980
1981 7/11/00 (stubs cleanup) <welch@ajubasolutions.com>
1982   Fix the build so static links do not use the stubs library. 
1983
1984 8/1/00 (stubs cleanup) <davygrvy@ajubasolutions.com>
1985   Added missing declarations for Itcl_InitStubs and Itk_InitStubs
1986   and simplified how Itcl Stubs are set in Initialize() of itk_cmds.c
1987
1988 8/1/00 (Makefile) <welch@ajubasolutions.com>
1989   Added config/installFiles.tcl and changed the various Makefile.in
1990   files to use this instead of install-sh.  installFiles.tcl can
1991   optimize out a copy if the target file is already up-to-date.
1992   This eliminates conflicts from parallel builds on different platforms
1993   where one build is zipping up the installed files while another platform
1994   is copying platform-independent files (i.e., the iwidgets demos).
1995
1996 8/4/00 (stubs cleanup) <davygrvy@ajubasolutions.com>
1997   Fixed dll linkage problem with the prototypes of the 2 XX_InitStubs
1998   functions use. I copied the core too literally.  Stubs libraries are
1999   always static, so there's no need to play games with __declspec on
2000   windows.
2001
2002 8/7/00 (stubs cleanup) <welch@ajubasolutions.com>
2003   Cleaned up use of Itcl_InitStubs by Itk.  Finally got it right after
2004   much flailing about.  itcl.h has the correct definitions, and
2005   itclStubLib.c has the correct #ifdefs.
2006   Also nuked extra definitions of itclStubsPtr from the itk_cmds.c file.
2007
2008 8/17/00 (more stubs cleanup) <davygrvy@ajubasolutions.com>
2009   Tcl_InitStubs in itcl/generic/itcl_cmds.c was using the TCL_VERSION macro
2010   set by the tcl.h header.  Changed it to be "8.1" instead as it doesn't
2011   matter unless Itcl needs special/new features of the core it's header is
2012   from.  But it doesn't..  so hard code it for an 8.1 minimum to make the
2013   Itcl library have a better version range with the core as specific
2014   version tracking with the core isn't needed (at this time).
2015
2016 ==========================================================================
2017  ------------------------ RELEASE 3.2 - 08/18/00 ------------------------
2018 ==========================================================================
2019
2020 9/22/00 (stubs cleanup) <davygrvy@ajubasolutions.com>
2021   Itcl_InitStub prototype in itcl/generic/itcl.h was getting name mangled
2022   by c++ compilers.  Fixed with an 'extern "C"' appropriately applied.
2023
2024 4/07/01 (bug fix) <davygrvy@pobox.com>
2025   Tcl's internal header, tclInt.h, in 8.4a2 got a small change in the Command
2026   structure that needed 2 changes in Itcl to resolve.  1) #if/#else/#endif blocks
2027   added in itcl_class.c and itc_ensemble.c allowing Itcl to compile. 2) added
2028   a global variable called itclCompatFlags that's sets a flag in Itcl_Init()
2029   that will modify the logic around access to cmdPtr->flags/deleted.  This
2030   way, any core compile will yield a fully forward/backward compatible
2031   binary (correct logic set at runtime).
2032
2033 5/22/01 (bug fixes) <davygrvy@pobox.com>
2034   makefile.vc lives again!  Brought back from it's death to conquere windows
2035   once again for users who prefer to avoid (or can't understand or get the tools
2036   installed for) the TEA build system.
2037
2038   Also, numerous fixes relating to Kevin Kenny's Tcl API mods for better CONST
2039   support.  The latest headers for Tcl where throwing warnings all over the place
2040   about type errors.  I fixed the sources, but haven't checked against older
2041   headers yet.